From b1e30b83ff6054838daaed4d747d984a93410940 Mon Sep 17 00:00:00 2001 From: rawcoder <werner.randelshofer@fibermail.ch> Date: Sun, 9 Jan 2011 17:27:11 +0000 Subject: [PATCH] Tags JHotDraw 7.6. --- jhotdraw7/.classpath => .classpath | 0 jhotdraw7/.project => .project | 0 JHotDraw/JavaDrawApplet.html | 69 - JHotDraw/JavaDrawViewer.html | 63 - JHotDraw/NothingApplet.html | 63 - JHotDraw/PertApplet.html | 66 - JHotDraw/README.html | 88 -- JHotDraw/build/build.properties | 1 - JHotDraw/build/build.xml | 370 ----- JHotDraw/build/jhotdraw.mf | 65 - JHotDraw/compile.bat | 15 - JHotDraw/compile.sh | 10 - JHotDraw/compile_ant.bat | 5 - JHotDraw/doc/Architecture Overview.ppt | Bin 70144 -> 0 bytes JHotDraw/doc/Changes.html | 203 --- JHotDraw/doc/ClassDiagram.html | 10 - JHotDraw/doc/ReleaseNotes.html | 275 ---- JHotDraw/doc/buildProcess.html | 45 - JHotDraw/doc/change_log.txt | 18 - JHotDraw/doc/classdiagram.jpg | Bin 17784 -> 0 bytes JHotDraw/doc/documentation.html | 24 - JHotDraw/doc/drawBackground.html | 28 - JHotDraw/doc/packages.html | 60 - JHotDraw/doc/pattlets.jar | Bin 376878 -> 0 bytes JHotDraw/doc/samples.html | 96 -- JHotDraw/drawings/demo.draw | 82 -- JHotDraw/drawings/demo.ser | Bin 9048 -> 0 bytes JHotDraw/drawings/net.draw | 65 - JHotDraw/drawings/net.ser | Bin 6331 -> 0 bytes JHotDraw/drawings/nothing.draw | 10 - JHotDraw/drawings/nothing.ser | Bin 3067 -> 0 bytes JHotDraw/drawings/pert.draw | 64 - JHotDraw/drawings/pert.ser | Bin 10154 -> 0 bytes JHotDraw/lgpl-license.html | 533 ------- JHotDraw/run_javadraw.bat | 3 - JHotDraw/setenv.bat | 2 - .../src/CH/ifa/draw/applet/DrawApplet.java | 573 -------- .../ifa/draw/application/DrawApplication.java | 1174 ---------------- JHotDraw/src/CH/ifa/draw/contrib.jdo | 31 - .../CH/ifa/draw/contrib/AutoscrollHelper.java | 85 -- .../CH/ifa/draw/contrib/CTXCommandMenu.java | 198 --- .../CH/ifa/draw/contrib/CTXWindowMenu.java | 202 --- .../draw/contrib/ChopDiamondConnector.java | 93 -- .../draw/contrib/ChopPolygonConnector.java | 43 - .../draw/contrib/ClippingUpdateStrategy.java | 66 - .../draw/contrib/CommandCheckBoxMenuItem.java | 93 -- .../CH/ifa/draw/contrib/CommandHolder.java | 39 - .../CH/ifa/draw/contrib/CommandMenuItem.java | 87 -- .../CH/ifa/draw/contrib/ComponentFigure.java | 125 -- .../contrib/CompositeFigureCreationTool.java | 79 -- .../ifa/draw/contrib/CustomSelectionTool.java | 191 --- .../CH/ifa/draw/contrib/CustomToolBar.java | 130 -- JHotDraw/src/CH/ifa/draw/contrib/Desktop.java | 39 - .../src/CH/ifa/draw/contrib/DesktopEvent.java | 55 - .../ifa/draw/contrib/DesktopEventService.java | 181 --- .../CH/ifa/draw/contrib/DesktopListener.java | 22 - .../CH/ifa/draw/contrib/DiamondFigure.java | 71 - .../CH/ifa/draw/contrib/FloatingTextArea.java | 130 -- .../contrib/GraphicalCompositeFigure.java | 355 ----- JHotDraw/src/CH/ifa/draw/contrib/Helper.java | 51 - .../CH/ifa/draw/contrib/JPanelDesktop.java | 112 -- .../ifa/draw/contrib/JScrollPaneDesktop.java | 91 -- .../src/CH/ifa/draw/contrib/Layoutable.java | 43 - .../src/CH/ifa/draw/contrib/Layouter.java | 74 - .../CH/ifa/draw/contrib/MDIDesktopPane.java | 636 --------- .../ifa/draw/contrib/MDI_DrawApplication.java | 146 -- .../src/CH/ifa/draw/contrib/MiniMapView.java | 249 ---- .../ifa/draw/contrib/NestedCreationTool.java | 82 -- .../CH/ifa/draw/contrib/PolygonFigure.java | 462 ------ .../CH/ifa/draw/contrib/PolygonHandle.java | 98 -- .../ifa/draw/contrib/PolygonScaleHandle.java | 186 --- .../src/CH/ifa/draw/contrib/PolygonTool.java | 142 -- .../contrib/PopupMenuFigureSelection.java | 38 - .../src/CH/ifa/draw/contrib/SVGDrawApp.java | 49 - .../CH/ifa/draw/contrib/SVGStorageFormat.java | 112 -- .../CH/ifa/draw/contrib/SimpleLayouter.java | 130 -- .../ifa/draw/contrib/SplitConnectionTool.java | 107 -- .../CH/ifa/draw/contrib/SplitPaneDesktop.java | 151 -- .../contrib/SplitPaneDrawApplication.java | 42 - .../CH/ifa/draw/contrib/StandardLayouter.java | 132 -- .../CH/ifa/draw/contrib/TextAreaFigure.java | 929 ------------- .../src/CH/ifa/draw/contrib/TextAreaTool.java | 445 ------ .../CH/ifa/draw/contrib/TriangleFigure.java | 185 --- .../draw/contrib/TriangleRotationHandle.java | 165 --- .../src/CH/ifa/draw/contrib/WindowMenu.java | 119 -- .../CH/ifa/draw/contrib/dnd/DNDFigures.java | 46 - .../contrib/dnd/DNDFiguresTransferable.java | 43 - .../CH/ifa/draw/contrib/dnd/DNDHelper.java | 273 ---- .../CH/ifa/draw/contrib/dnd/DNDInterface.java | 39 - .../ifa/draw/contrib/dnd/DragNDropTool.java | 345 ----- .../contrib/dnd/JHDDragSourceListener.java | 203 --- .../contrib/dnd/JHDDropTargetListener.java | 307 ---- .../contrib/html/AbstractContentProducer.java | 51 - .../html/AttributeContentProducerContext.java | 30 - .../html/AttributeFigureContentProducer.java | 70 - .../contrib/html/ColorContentProducer.java | 111 -- .../draw/contrib/html/ContentProducer.java | 77 - .../contrib/html/ContentProducerContext.java | 24 - .../contrib/html/ContentProducerRegistry.java | 307 ---- .../html/DiamondFigureGeometricAdapter.java | 53 - .../html/DisposableResourceHolder.java | 121 -- .../html/DisposableResourceManager.java | 72 - .../DisposableResourceManagerFactory.java | 98 -- .../contrib/html/ETSLADisposalStrategy.java | 257 ---- .../html/EllipseFigureGeometricAdapter.java | 57 - .../html/FigureContentProducerContext.java | 40 - .../html/FigureDataContentProducer.java | 83 -- .../draw/contrib/html/GeometricFigure.java | 33 - .../html/HTMLColorContentProducer.java | 54 - .../contrib/html/HTMLContentProducer.java | 86 -- .../html/HTMLContentProducerContext.java | 22 - .../ifa/draw/contrib/html/HTMLLayouter.java | 133 -- .../draw/contrib/html/HTMLTextAreaFigure.java | 1143 --------------- .../draw/contrib/html/HTMLTextAreaTool.java | 51 - .../html/PolygonFigureGeometricAdapter.java | 62 - .../contrib/html/ResourceContentProducer.java | 107 -- .../html/ResourceDisposabilityStrategy.java | 57 - .../html/ResourceManagerNotSetException.java | 25 - .../html/RoundRectangleGeometricAdapter.java | 60 - .../StandardDisposableResourceHolder.java | 162 --- .../StandardDisposableResourceManager.java | 120 -- .../html/TextHolderContentProducer.java | 96 -- .../html/TriangleFigureGeometricAdapter.java | 52 - .../draw/contrib/html/URLContentProducer.java | 117 -- .../CH/ifa/draw/contrib/zoom/AreaTracker.java | 76 - .../draw/contrib/zoom/DoubleBufferImage.java | 77 - .../contrib/zoom/MiniMapZoomableView.java | 47 - .../draw/contrib/zoom/ScalingGraphics.java | 430 ------ .../draw/contrib/zoom/ZoomAreaTracker.java | 39 - .../CH/ifa/draw/contrib/zoom/ZoomCommand.java | 93 -- .../draw/contrib/zoom/ZoomDrawingView.java | 476 ------- .../CH/ifa/draw/contrib/zoom/ZoomTool.java | 76 - .../draw/contrib/zoom/ZoomUpdateStrategy.java | 74 - JHotDraw/src/CH/ifa/draw/figures.jdo | 60 - .../draw/figures/AbstractLineDecoration.java | 147 -- .../src/CH/ifa/draw/figures/ArrowTip.java | 143 -- .../CH/ifa/draw/figures/AttributeFigure.java | 250 ---- .../CH/ifa/draw/figures/BorderDecorator.java | 106 -- .../src/CH/ifa/draw/figures/BorderTool.java | 134 -- .../draw/figures/ChopEllipseConnector.java | 46 - .../ifa/draw/figures/ConnectedTextTool.java | 213 --- .../CH/ifa/draw/figures/ElbowConnection.java | 104 -- .../src/CH/ifa/draw/figures/ElbowHandle.java | 138 -- .../CH/ifa/draw/figures/EllipseFigure.java | 110 -- .../CH/ifa/draw/figures/FigureAttributes.java | 208 --- .../CH/ifa/draw/figures/FontSizeHandle.java | 132 -- .../src/CH/ifa/draw/figures/GroupCommand.java | 122 -- .../src/CH/ifa/draw/figures/GroupFigure.java | 98 -- .../src/CH/ifa/draw/figures/GroupHandle.java | 41 - .../src/CH/ifa/draw/figures/ImageFigure.java | 153 -- .../ifa/draw/figures/InsertImageCommand.java | 119 -- .../CH/ifa/draw/figures/LineConnection.java | 374 ----- .../CH/ifa/draw/figures/LineDecoration.java | 38 - .../src/CH/ifa/draw/figures/LineFigure.java | 77 - .../CH/ifa/draw/figures/NullConnector.java | 27 - .../src/CH/ifa/draw/figures/NullFigure.java | 186 --- .../CH/ifa/draw/figures/NumberTextFigure.java | 70 - .../ifa/draw/figures/PolyLineConnector.java | 91 -- .../CH/ifa/draw/figures/PolyLineFigure.java | 416 ------ .../CH/ifa/draw/figures/PolyLineHandle.java | 126 -- .../CH/ifa/draw/figures/PolyLineLocator.java | 41 - .../src/CH/ifa/draw/figures/RadiusHandle.java | 131 -- .../CH/ifa/draw/figures/RectangleFigure.java | 97 -- .../draw/figures/RoundRectangleFigure.java | 140 -- .../src/CH/ifa/draw/figures/ScribbleTool.java | 119 -- .../figures/ShortestDistanceConnector.java | 158 --- .../src/CH/ifa/draw/figures/TextFigure.java | 509 ------- .../src/CH/ifa/draw/figures/TextTool.java | 303 ---- .../CH/ifa/draw/figures/UngroupCommand.java | 118 -- JHotDraw/src/CH/ifa/draw/framework.jdo | 11 - .../ifa/draw/framework/ConnectionFigure.java | 152 -- .../src/CH/ifa/draw/framework/Connector.java | 81 -- .../src/CH/ifa/draw/framework/Cursor.java | 29 - .../src/CH/ifa/draw/framework/Drawing.java | 317 ----- .../draw/framework/DrawingChangeEvent.java | 47 - .../draw/framework/DrawingChangeListener.java | 34 - .../CH/ifa/draw/framework/DrawingEditor.java | 72 - .../CH/ifa/draw/framework/DrawingView.java | 315 ----- .../src/CH/ifa/draw/framework/Figure.java | 340 ----- .../framework/FigureAttributeConstant.java | 178 --- .../ifa/draw/framework/FigureChangeEvent.java | 65 - .../draw/framework/FigureChangeListener.java | 48 - .../ifa/draw/framework/FigureEnumeration.java | 37 - .../ifa/draw/framework/FigureSelection.java | 39 - .../framework/FigureSelectionListener.java | 25 - .../CH/ifa/draw/framework/FigureVisitor.java | 22 - .../src/CH/ifa/draw/framework/Handle.java | 133 -- .../ifa/draw/framework/HandleEnumeration.java | 51 - .../ifa/draw/framework/JHotDrawException.java | 40 - .../framework/JHotDrawRuntimeException.java | 40 - .../src/CH/ifa/draw/framework/Locator.java | 37 - .../src/CH/ifa/draw/framework/Painter.java | 40 - .../ifa/draw/framework/PointConstrainer.java | 46 - JHotDraw/src/CH/ifa/draw/framework/Tool.java | 128 -- .../CH/ifa/draw/framework/ToolListener.java | 27 - .../draw/framework/ViewChangeListener.java | 36 - JHotDraw/src/CH/ifa/draw/images/ATEXT1.gif | Bin 195 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ATEXT2.gif | Bin 185 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ATEXT3.gif | Bin 191 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/BORDDEC1.gif | Bin 173 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/BORDDEC2.gif | Bin 170 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/BORDDEC3.gif | Bin 186 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/CONN1.gif | Bin 171 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/CONN2.gif | Bin 161 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/CONN3.gif | Bin 170 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/DIAMOND1.gif | Bin 192 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/DIAMOND2.gif | Bin 180 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/DIAMOND3.gif | Bin 187 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ELLIPSE1.gif | Bin 199 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ELLIPSE2.gif | Bin 193 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ELLIPSE3.gif | Bin 202 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ERASER1.gif | Bin 183 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ERASER2.gif | Bin 173 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ERASER3.gif | Bin 179 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/HTMLAREA1.gif | Bin 194 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/HTMLAREA2.gif | Bin 190 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/HTMLAREA3.gif | Bin 203 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/LINE1.gif | Bin 165 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/LINE2.gif | Bin 158 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/LINE3.gif | Bin 164 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/OCONN1.gif | Bin 172 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/OCONN2.gif | Bin 161 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/OCONN3.gif | Bin 170 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/POLYGON1.gif | Bin 193 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/POLYGON2.gif | Bin 179 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/POLYGON3.gif | Bin 189 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/RECT1.gif | Bin 190 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/RECT2.gif | Bin 178 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/RECT3.gif | Bin 190 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/RRECT1.gif | Bin 191 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/RRECT2.gif | Bin 182 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/RRECT3.gif | Bin 190 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/SCRIBBL1.gif | Bin 178 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/SCRIBBL2.gif | Bin 169 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/SCRIBBL3.gif | Bin 181 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/SEL1.gif | Bin 186 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/SEL2.gif | Bin 182 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/SEL3.gif | Bin 192 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TEMPLATE.gif | Bin 152 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TEMPLAT_.gif | Bin 151 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TEXT1.gif | Bin 193 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TEXT2.gif | Bin 181 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TEXT3.gif | Bin 186 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TEXTAREA1.gif | Bin 159 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TEXTAREA2.gif | Bin 152 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TEXTAREA3.gif | Bin 160 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TOBACK1.gif | Bin 193 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TOBACK2.gif | Bin 184 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TOBACK3.gif | Bin 195 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TOFRONT1.gif | Bin 196 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TOFRONT2.gif | Bin 185 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TOFRONT3.gif | Bin 197 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TRIANGLE1.gif | Bin 192 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TRIANGLE2.gif | Bin 181 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/TRIANGLE3.gif | Bin 191 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/URL1.gif | Bin 222 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/URL2.gif | Bin 216 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/URL3.gif | Bin 230 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ZOOM1.gif | Bin 149 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ZOOM2.gif | Bin 130 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/ZOOM3.gif | Bin 949 -> 0 bytes JHotDraw/src/CH/ifa/draw/images/pspbrwse.jbf | Bin 21230 -> 0 bytes JHotDraw/src/CH/ifa/draw/samples/javadraw.jdo | 10 - .../samples/javadraw/AnimationDecorator.java | 99 -- .../ifa/draw/samples/javadraw/Animator.java | 62 - .../samples/javadraw/BouncingDrawing.java | 67 - .../draw/samples/javadraw/FollowURLTool.java | 70 - .../draw/samples/javadraw/JavaDrawApp.java | 267 ---- .../draw/samples/javadraw/JavaDrawApplet.java | 132 -- .../samples/javadraw/JavaDrawAppletHelp.html | 69 - .../draw/samples/javadraw/JavaDrawViewer.java | 123 -- .../samples/javadraw/MySelectionTool.java | 47 - .../draw/samples/javadraw/PatternPainter.java | 57 - .../CH/ifa/draw/samples/javadraw/URLTool.java | 108 -- .../samples/javadraw/sampleimages/DUKE.gif | Bin 2012 -> 0 bytes .../javadraw/sampleimages/Juggler0.gif | Bin 3090 -> 0 bytes .../javadraw/sampleimages/backgrnd.gif | Bin 2443 -> 0 bytes .../samples/javadraw/sampleimages/beans.gif | Bin 7012 -> 0 bytes .../samples/javadraw/sampleimages/bg1.gif | Bin 2164 -> 0 bytes .../javadraw/sampleimages/javacentral.gif | Bin 37239 -> 0 bytes .../sampleimages/joe.surf.yellow.small.gif | Bin 5009 -> 0 bytes .../samples/javadraw/sampleimages/rain.gif | Bin 7664 -> 0 bytes .../samples/javadraw/sampleimages/view.gif | Bin 121144 -> 0 bytes .../samples/minimap/MiniMapApplication.java | 30 - .../draw/samples/minimap/MiniMapDesktop.java | 54 - JHotDraw/src/CH/ifa/draw/samples/net.jdo | 8 - .../src/CH/ifa/draw/samples/net/NetApp.java | 48 - .../CH/ifa/draw/samples/net/NodeFigure.java | 155 --- .../ifa/draw/samples/nothing/NothingApp.java | 71 - .../draw/samples/nothing/NothingApplet.java | 55 - .../CH/ifa/draw/samples/pert/PertApplet.java | 42 - .../ifa/draw/samples/pert/PertAppletHelp.html | 67 - .../draw/samples/pert/PertApplication.java | 57 - .../ifa/draw/samples/pert/PertDependency.java | 73 - .../CH/ifa/draw/samples/pert/PertFigure.java | 313 ----- .../samples/pert/PertFigureCreationTool.java | 35 - .../CH/ifa/draw/samples/pert/images/PERT1.gif | Bin 186 -> 0 bytes .../CH/ifa/draw/samples/pert/images/PERT2.gif | Bin 178 -> 0 bytes .../CH/ifa/draw/samples/pert/images/PERT3.gif | Bin 188 -> 0 bytes JHotDraw/src/CH/ifa/draw/standard.jdo | 31 - .../src/CH/ifa/draw/standard/AWTCursor.java | 46 - .../CH/ifa/draw/standard/AbstractCommand.java | 253 ---- .../ifa/draw/standard/AbstractConnector.java | 126 -- .../CH/ifa/draw/standard/AbstractFigure.java | 482 ------- .../CH/ifa/draw/standard/AbstractHandle.java | 176 --- .../CH/ifa/draw/standard/AbstractLocator.java | 61 - .../CH/ifa/draw/standard/AbstractTool.java | 395 ------ .../src/CH/ifa/draw/standard/ActionTool.java | 51 - .../CH/ifa/draw/standard/AlignCommand.java | 224 --- .../CH/ifa/draw/standard/BoxHandleKit.java | 273 ---- .../draw/standard/BringToFrontCommand.java | 63 - .../draw/standard/BufferedUpdateStrategy.java | 60 - .../draw/standard/ChangeAttributeCommand.java | 154 -- .../standard/ChangeConnectionEndHandle.java | 90 -- .../draw/standard/ChangeConnectionHandle.java | 276 ---- .../standard/ChangeConnectionStartHandle.java | 90 -- .../ifa/draw/standard/ChopBoxConnector.java | 76 - .../CH/ifa/draw/standard/CompositeFigure.java | 734 ---------- .../ifa/draw/standard/ConnectionHandle.java | 210 --- .../CH/ifa/draw/standard/ConnectionTool.java | 448 ------ .../src/CH/ifa/draw/standard/CopyCommand.java | 42 - .../CH/ifa/draw/standard/CreationTool.java | 229 --- .../src/CH/ifa/draw/standard/CutCommand.java | 181 --- .../CH/ifa/draw/standard/DecoratorFigure.java | 337 ----- .../CH/ifa/draw/standard/DeleteCommand.java | 126 -- .../standard/DeleteFromDrawingVisitor.java | 58 - .../src/CH/ifa/draw/standard/DragTracker.java | 189 --- .../ifa/draw/standard/DuplicateCommand.java | 58 - .../standard/FastBufferedUpdateStrategy.java | 121 -- .../draw/standard/FigureAndEnumerator.java | 57 - .../draw/standard/FigureChangeAdapter.java | 49 - .../FigureChangeEventMulticaster.java | 105 -- .../ifa/draw/standard/FigureEnumerator.java | 82 -- .../draw/standard/FigureTransferCommand.java | 67 - .../CH/ifa/draw/standard/GridConstrainer.java | 58 - .../draw/standard/HandleAndEnumerator.java | 59 - .../ifa/draw/standard/HandleEnumerator.java | 87 -- .../CH/ifa/draw/standard/HandleTracker.java | 52 - .../standard/InsertIntoDrawingVisitor.java | 57 - .../ifa/draw/standard/LocatorConnector.java | 108 -- .../CH/ifa/draw/standard/LocatorHandle.java | 90 -- .../CH/ifa/draw/standard/NullDrawingView.java | 430 ------ .../src/CH/ifa/draw/standard/NullHandle.java | 50 - .../src/CH/ifa/draw/standard/NullPainter.java | 39 - .../src/CH/ifa/draw/standard/NullTool.java | 41 - .../CH/ifa/draw/standard/OffsetLocator.java | 80 -- .../draw/standard/OrderedFigureElement.java | 59 - .../CH/ifa/draw/standard/PasteCommand.java | 117 -- .../ifa/draw/standard/PeripheralLocator.java | 78 -- .../src/CH/ifa/draw/standard/QuadTree.java | 260 ---- .../CH/ifa/draw/standard/RelativeLocator.java | 136 -- .../standard/ReverseFigureEnumerator.java | 60 - .../ifa/draw/standard/SelectAllCommand.java | 91 -- .../ifa/draw/standard/SelectAreaTracker.java | 103 -- .../CH/ifa/draw/standard/SelectionTool.java | 144 -- .../ifa/draw/standard/SendToBackCommand.java | 117 -- .../draw/standard/SimpleUpdateStrategy.java | 40 - .../draw/standard/SingleFigureEnumerator.java | 61 - .../CH/ifa/draw/standard/StandardDrawing.java | 227 --- .../draw/standard/StandardDrawingView.java | 1183 ---------------- .../standard/StandardFigureSelection.java | 95 -- .../src/CH/ifa/draw/standard/TextHolder.java | 73 - .../ifa/draw/standard/ToggleGridCommand.java | 49 - .../src/CH/ifa/draw/standard/ToolButton.java | 165 --- JHotDraw/src/CH/ifa/draw/test/AllTests.java | 47 - .../src/CH/ifa/draw/test/JHDTestCase.java | 44 - .../CH/ifa/draw/test/contrib/AllTests.java | 76 - .../draw/test/contrib/CTXCommandMenuTest.java | 198 --- .../draw/test/contrib/CTXWindowMenuTest.java | 102 -- .../contrib/ChopDiamondConnectorTest.java | 100 -- .../contrib/ChopPolygonConnectorTest.java | 99 -- .../contrib/ClippingUpdateStrategyTest.java | 110 -- .../contrib/CommandCheckBoxMenuItemTest.java | 122 -- .../test/contrib/CommandMenuItemTest.java | 131 -- .../test/contrib/ComponentFigureTest.java | 156 --- .../CompositeFigureCreationToolTest.java | 144 -- .../test/contrib/CustomSelectionToolTest.java | 132 -- .../draw/test/contrib/CustomToolBarTest.java | 154 -- .../test/contrib/DesktopEventServiceTest.java | 184 --- .../draw/test/contrib/DiamondFigureTest.java | 154 -- .../test/contrib/FloatingTextAreaTest.java | 154 -- .../contrib/GraphicalCompositeFigureTest.java | 275 ---- .../CH/ifa/draw/test/contrib/HelperTest.java | 110 -- .../draw/test/contrib/JPanelDesktopTest.java | 177 --- .../test/contrib/JScrollPaneDesktopTest.java | 177 --- .../draw/test/contrib/MDIDesktopPaneTest.java | 254 ---- .../test/contrib/MDI_DrawApplicationTest.java | 155 --- .../draw/test/contrib/MiniMapViewTest.java | 163 --- .../test/contrib/NestedCreationToolTest.java | 147 -- .../draw/test/contrib/PolygonFigureTest.java | 419 ------ .../draw/test/contrib/PolygonHandleTest.java | 148 -- .../draw/test/contrib/PolygonToolTest.java | 166 --- .../ifa/draw/test/contrib/SVGDrawAppTest.java | 122 -- .../test/contrib/SVGStorageFormatTest.java | 133 -- .../draw/test/contrib/SimpleLayouterTest.java | 201 --- .../test/contrib/SplitConnectionToolTest.java | 158 --- .../test/contrib/StandardLayouterTest.java | 133 -- .../draw/test/contrib/TextAreaFigureTest.java | 508 ------- .../draw/test/contrib/TextAreaToolTest.java | 169 --- .../draw/test/contrib/TriangleFigureTest.java | 232 ---- .../ifa/draw/test/contrib/WindowMenuTest.java | 103 -- .../CH/ifa/draw/test/figures/AllTests.java | 61 - .../ifa/draw/test/figures/ArrowTipTest.java | 137 -- .../test/figures/BorderDecoratorTest.java | 181 --- .../ifa/draw/test/figures/BorderToolTest.java | 133 -- .../figures/ChopEllipseConnectorTest.java | 100 -- .../test/figures/ConnectedTextToolTest.java | 136 -- .../test/figures/ElbowConnectionTest.java | 144 -- .../draw/test/figures/ElbowHandleTest.java | 148 -- .../draw/test/figures/EllipseFigureTest.java | 199 --- .../test/figures/FigureAttributesTest.java | 188 --- .../ifa/draw/test/figures/FiguresSuite.java | 88 -- .../draw/test/figures/FontSizeHandleTest.java | 148 -- .../draw/test/figures/GroupCommandTest.java | 126 -- .../draw/test/figures/GroupFigureTest.java | 170 --- .../draw/test/figures/ImageFigureTest.java | 188 --- .../test/figures/InsertImageCommandTest.java | 112 -- .../draw/test/figures/LineConnectionTest.java | 397 ------ .../ifa/draw/test/figures/LineFigureTest.java | 144 -- .../draw/test/figures/NullConnectorTest.java | 103 -- .../ifa/draw/test/figures/NullFigureTest.java | 254 ---- .../test/figures/NumberTextFigureTest.java | 142 -- .../test/figures/PolyLineConnectorTest.java | 100 -- .../draw/test/figures/PolyLineFigureTest.java | 383 ----- .../draw/test/figures/PolyLineHandleTest.java | 137 -- .../test/figures/RectangleFigureTest.java | 177 --- .../figures/RoundRectangleFigureTest.java | 221 --- .../draw/test/figures/ScribbleToolTest.java | 155 --- .../ShortestDistanceConnectorTest.java | 122 -- .../ifa/draw/test/figures/TextFigureTest.java | 473 ------- .../ifa/draw/test/figures/TextToolTest.java | 173 --- .../draw/test/figures/UngroupCommandTest.java | 122 -- .../CH/ifa/draw/test/framework/AllTests.java | 35 - .../framework/DrawingChangeEventTest.java | 125 -- .../FigureAttributeConstantTest.java | 155 --- .../test/framework/FigureChangeEventTest.java | 137 -- .../draw/test/framework/FrameworkSuite.java | 62 - .../draw/test/samples/javadraw/AllTests.java | 41 - .../javadraw/AnimationDecoratorTest.java | 177 --- .../test/samples/javadraw/AnimatorTest.java | 141 -- .../samples/javadraw/BouncingDrawingTest.java | 144 -- .../samples/javadraw/JavaDrawAppTest.java | 144 -- .../samples/javadraw/JavaDrawAppletTest.java | 144 -- .../samples/javadraw/JavaDrawViewerTest.java | 221 --- .../test/samples/javadraw/JavadrawSuite.java | 68 - .../samples/javadraw/MySelectionToolTest.java | 111 -- .../samples/javadraw/PatternPainterTest.java | 116 -- .../test/samples/javadraw/URLToolTest.java | 133 -- .../draw/test/samples/minimap/AllTests.java | 34 - .../minimap/MiniMapApplicationTest.java | 111 -- .../samples/minimap/MiniMapDesktopTest.java | 100 -- .../test/samples/minimap/MinimapSuite.java | 61 - .../ifa/draw/test/samples/net/AllTests.java | 34 - .../ifa/draw/test/samples/net/NetAppTest.java | 111 -- .../ifa/draw/test/samples/net/NetSuite.java | 61 - .../draw/test/samples/net/NodeFigureTest.java | 177 --- .../draw/test/samples/nothing/AllTests.java | 34 - .../test/samples/nothing/NothingAppTest.java | 111 -- .../samples/nothing/NothingAppletTest.java | 100 -- .../test/samples/nothing/NothingSuite.java | 61 - .../ifa/draw/test/samples/pert/AllTests.java | 37 - .../test/samples/pert/PertAppletTest.java | 100 -- .../samples/pert/PertApplicationTest.java | 111 -- .../test/samples/pert/PertDependencyTest.java | 144 -- .../pert/PertFigureCreationToolTest.java | 100 -- .../test/samples/pert/PertFigureTest.java | 357 ----- .../ifa/draw/test/samples/pert/PertSuite.java | 64 - .../draw/test/standard/AlignCommandTest.java | 122 -- .../CH/ifa/draw/test/standard/AllTests.java | 80 -- .../draw/test/standard/BoxHandleKitTest.java | 210 --- .../standard/BringToFrontCommandTest.java | 122 -- .../standard/BufferedUpdateStrategyTest.java | 111 -- .../standard/ChangeAttributeCommandTest.java | 126 -- .../ChangeConnectionEndHandleTest.java | 112 -- .../ChangeConnectionStartHandleTest.java | 112 -- .../test/standard/ChopBoxConnectorTest.java | 122 -- .../test/standard/ConnectionHandleTest.java | 149 -- .../test/standard/ConnectionToolTest.java | 159 --- .../draw/test/standard/CopyCommandTest.java | 111 -- .../draw/test/standard/CreationToolTest.java | 147 -- .../draw/test/standard/CutCommandTest.java | 122 -- .../draw/test/standard/DeleteCommandTest.java | 111 -- .../DeleteFromDrawingVisitorTest.java | 145 -- .../draw/test/standard/DragTrackerTest.java | 147 -- .../test/standard/DuplicateCommandTest.java | 111 -- .../FastBufferedUpdateStrategyTest.java | 111 -- .../standard/FigureAndEnumeratorTest.java | 149 -- .../standard/FigureChangeAdapterTest.java | 155 --- .../FigureChangeEventMulticasterTest.java | 184 --- .../test/standard/FigureEnumeratorTest.java | 154 -- .../test/standard/GridConstrainerTest.java | 133 -- .../standard/HandleAndEnumeratorTest.java | 164 --- .../test/standard/HandleEnumeratorTest.java | 167 --- .../draw/test/standard/HandleTrackerTest.java | 151 -- .../InsertIntoDrawingVisitorTest.java | 145 -- .../test/standard/LocatorConnectorTest.java | 166 --- .../draw/test/standard/LocatorHandleTest.java | 126 -- .../test/standard/NullDrawingViewTest.java | 650 --------- .../draw/test/standard/NullHandleTest.java | 116 -- .../ifa/draw/test/standard/NullToolTest.java | 122 -- .../draw/test/standard/OffsetLocatorTest.java | 144 -- .../draw/test/standard/PasteCommandTest.java | 122 -- .../test/standard/PeripheralLocatorTest.java | 111 -- .../test/standard/RelativeLocatorTest.java | 243 ---- .../standard/ReverseFigureEnumeratorTest.java | 143 -- .../test/standard/SelectAllCommandTest.java | 122 -- .../test/standard/SelectAreaTrackerTest.java | 133 -- .../draw/test/standard/SelectionToolTest.java | 144 -- .../test/standard/SendToBackCommandTest.java | 111 -- .../standard/SimpleUpdateStrategyTest.java | 111 -- .../standard/SingleFigureEnumeratorTest.java | 137 -- .../test/standard/StandardDrawingTest.java | 263 ---- .../standard/StandardDrawingViewTest.java | 728 ---------- .../standard/StandardFigureSelectionTest.java | 146 -- .../ifa/draw/test/standard/StandardSuite.java | 107 -- .../test/standard/ToggleGridCommandTest.java | 113 -- .../draw/test/standard/ToolButtonTest.java | 258 ---- .../src/CH/ifa/draw/test/util/AllTests.java | 61 - .../src/CH/ifa/draw/test/util/BoundsTest.java | 484 ------- .../CH/ifa/draw/test/util/ClipboardTest.java | 131 -- .../CH/ifa/draw/test/util/ColorMapTest.java | 155 --- .../ifa/draw/test/util/CommandButtonTest.java | 112 -- .../ifa/draw/test/util/CommandChoiceTest.java | 122 -- .../ifa/draw/test/util/CommandMenuTest.java | 199 --- .../src/CH/ifa/draw/test/util/FillerTest.java | 133 -- .../draw/test/util/FloatingTextFieldTest.java | 177 --- .../src/CH/ifa/draw/test/util/GeomTest.java | 343 ----- .../ifa/draw/test/util/GraphLayoutTest.java | 155 --- .../CH/ifa/draw/test/util/IconkitTest.java | 177 --- .../draw/test/util/JDOStorageFormatTest.java | 143 -- .../ifa/draw/test/util/PaletteIconTest.java | 181 --- .../ifa/draw/test/util/PaletteLayoutTest.java | 158 --- .../ifa/draw/test/util/RedoCommandTest.java | 122 -- .../test/util/ReverseListEnumeratorTest.java | 140 -- .../util/SerializationStorageFormatTest.java | 133 -- .../test/util/StandardStorageFormatTest.java | 204 --- .../StandardVersionControlStrategyTest.java | 110 -- .../ifa/draw/test/util/StorableInputTest.java | 184 --- .../draw/test/util/StorableOutputTest.java | 195 --- .../test/util/StorageFormatManagerTest.java | 177 --- .../ifa/draw/test/util/UndoCommandTest.java | 122 -- .../ifa/draw/test/util/UndoManagerTest.java | 210 --- .../draw/test/util/UndoRedoActivityTest.java | 269 ---- .../draw/test/util/UndoableAdapterTest.java | 244 ---- .../draw/test/util/UndoableCommandTest.java | 248 ---- .../draw/test/util/UndoableHandleTest.java | 218 --- .../ifa/draw/test/util/UndoableToolTest.java | 374 ----- .../src/CH/ifa/draw/test/util/UtilSuite.java | 88 -- .../draw/test/util/VersionManagementTest.java | 165 --- .../test/util/collections/jdk11/AllTests.java | 37 - .../jdk11/CollectionsFactoryJDK11Test.java | 133 -- .../jdk11/IteratorWrapperTest.java | 141 -- .../util/collections/jdk11/Jdk11Suite.java | 64 - .../collections/jdk11/ListWrapperTest.java | 298 ---- .../collections/jdk11/MapWrapperTest.java | 232 ---- .../collections/jdk11/SetWrapperTest.java | 232 ---- .../test/util/collections/jdk12/AllTests.java | 33 - .../jdk12/CollectionsFactoryJDK12Test.java | 133 -- .../util/collections/jdk12/Jdk12Suite.java | 55 - JHotDraw/src/CH/ifa/draw/util/Animatable.java | 24 - JHotDraw/src/CH/ifa/draw/util/Bounds.java | 496 ------- JHotDraw/src/CH/ifa/draw/util/Clipboard.java | 49 - .../CH/ifa/draw/util/CollectionsFactory.java | 83 -- JHotDraw/src/CH/ifa/draw/util/ColorMap.java | 97 -- JHotDraw/src/CH/ifa/draw/util/Command.java | 59 - .../src/CH/ifa/draw/util/CommandButton.java | 53 - .../src/CH/ifa/draw/util/CommandChoice.java | 56 - .../src/CH/ifa/draw/util/CommandListener.java | 24 - .../src/CH/ifa/draw/util/CommandMenu.java | 134 -- JHotDraw/src/CH/ifa/draw/util/Filler.java | 55 - .../CH/ifa/draw/util/FloatingTextField.java | 111 -- JHotDraw/src/CH/ifa/draw/util/Geom.java | 394 ------ .../src/CH/ifa/draw/util/GraphLayout.java | 227 --- JHotDraw/src/CH/ifa/draw/util/Iconkit.java | 171 --- .../CH/ifa/draw/util/JDOStorageFormat.java | 326 ----- .../src/CH/ifa/draw/util/PaletteButton.java | 148 -- .../src/CH/ifa/draw/util/PaletteIcon.java | 44 - .../src/CH/ifa/draw/util/PaletteLayout.java | 112 -- .../src/CH/ifa/draw/util/PaletteListener.java | 32 - .../src/CH/ifa/draw/util/RedoCommand.java | 66 - .../ifa/draw/util/ReverseListEnumerator.java | 48 - .../draw/util/SerializationStorageFormat.java | 87 -- .../ifa/draw/util/StandardStorageFormat.java | 244 ---- .../util/StandardVersionControlStrategy.java | 92 -- JHotDraw/src/CH/ifa/draw/util/Storable.java | 37 - .../src/CH/ifa/draw/util/StorableInput.java | 183 --- .../src/CH/ifa/draw/util/StorableOutput.java | 176 --- .../src/CH/ifa/draw/util/StorageFormat.java | 73 - .../ifa/draw/util/StorageFormatManager.java | 193 --- .../src/CH/ifa/draw/util/UndoCommand.java | 74 - .../src/CH/ifa/draw/util/UndoManager.java | 218 --- .../CH/ifa/draw/util/UndoRedoActivity.java | 120 -- JHotDraw/src/CH/ifa/draw/util/Undoable.java | 54 - .../src/CH/ifa/draw/util/UndoableAdapter.java | 135 -- .../src/CH/ifa/draw/util/UndoableCommand.java | 134 -- .../src/CH/ifa/draw/util/UndoableHandle.java | 213 --- .../src/CH/ifa/draw/util/UndoableTool.java | 192 --- .../ifa/draw/util/VersionControlStrategy.java | 24 - .../CH/ifa/draw/util/VersionManagement.java | 200 --- .../CH/ifa/draw/util/VersionRequester.java | 28 - .../jdk11/CollectionsFactoryJDK11.java | 53 - .../collections/jdk11/IteratorWrapper.java | 39 - .../util/collections/jdk11/ListWrapper.java | 126 -- .../util/collections/jdk11/MapWrapper.java | 78 -- .../util/collections/jdk11/SetWrapper.java | 85 -- .../jdk12/CollectionsFactoryJDK12.java | 53 - .../documentation-page.dwt | 0 .../documentation-toc.dwt | 0 .../guide-template.dwt | 0 .../Templates => Templates}/toc-template.dwt | 0 jhotdraw7/applet.policy => applet.policy | 0 jhotdraw7/build-all.xml => build-all.xml | 0 ...-profiler.xml => build-before-profiler.xml | 0 ...ild-bezierdemo.xml => build-bezierdemo.xml | 0 jhotdraw7/build-draw.xml => build-draw.xml | 0 .../build-jhotdraw.xml => build-jhotdraw.xml | 0 jhotdraw7/build-net.xml => build-net.xml | 0 jhotdraw7/build-odg.xml => build-odg.xml | 0 jhotdraw7/build-pert.xml => build-pert.xml | 0 jhotdraw7/build-svg.xml => build-svg.xml | 0 jhotdraw7/build-teddy.xml => build-teddy.xml | 0 jhotdraw7/build.xml => build.xml | 0 jhotdraw6/.classpath | 10 - jhotdraw6/.project | 23 - jhotdraw6/JavaDrawApplet.html | 69 - jhotdraw6/JavaDrawViewer.html | 63 - jhotdraw6/NothingApplet.html | 63 - jhotdraw6/PertApplet.html | 66 - jhotdraw6/README.html | 88 -- jhotdraw6/build.xml | 69 - jhotdraw6/build/build.properties | 1 - jhotdraw6/build/build.xml | 361 ----- jhotdraw6/build/jhotdraw.mf | 65 - jhotdraw6/compile.bat | 15 - jhotdraw6/compile.sh | 10 - jhotdraw6/compile_ant.bat | 5 - jhotdraw6/doc/Architecture Overview.ppt | Bin 70144 -> 0 bytes jhotdraw6/doc/Changes.html | 203 --- jhotdraw6/doc/ClassDiagram.html | 10 - jhotdraw6/doc/ReleaseNotes.html | 275 ---- jhotdraw6/doc/buildProcess.html | 45 - jhotdraw6/doc/change_log.txt | 18 - jhotdraw6/doc/classdiagram.jpg | Bin 17784 -> 0 bytes jhotdraw6/doc/documentation.html | 24 - jhotdraw6/doc/drawBackground.html | 28 - jhotdraw6/doc/packages.html | 60 - jhotdraw6/doc/pattlets.jar | Bin 376878 -> 0 bytes jhotdraw6/doc/samples.html | 96 -- jhotdraw6/drawings/demo.draw | 82 -- jhotdraw6/drawings/demo.ser | Bin 9077 -> 0 bytes jhotdraw6/drawings/net.draw | 65 - jhotdraw6/drawings/net.ser | Bin 6346 -> 0 bytes jhotdraw6/drawings/nothing.draw | 10 - jhotdraw6/drawings/nothing.ser | Bin 3077 -> 0 bytes jhotdraw6/drawings/offsetConnectors.draw | 70 - jhotdraw6/drawings/pert.draw | 64 - jhotdraw6/drawings/pert.ser | Bin 10170 -> 0 bytes jhotdraw6/lgpl-license.html | 533 ------- jhotdraw6/lib/batik-awt-util.jar | Bin 369001 -> 0 bytes jhotdraw6/lib/batik-dom.jar | Bin 87407 -> 0 bytes jhotdraw6/lib/batik-svggen.jar | Bin 164659 -> 0 bytes jhotdraw6/nbproject/build-impl.xml | 547 -------- jhotdraw6/nbproject/genfiles.properties | 8 - jhotdraw6/nbproject/project.properties | 64 - jhotdraw6/nbproject/project.xml | 17 - jhotdraw6/run_javadraw.bat | 3 - jhotdraw6/setenv.bat | 2 - .../org/jhotdraw/util/JDOStorageFormat.java | 326 ----- .../java/org/jhotdraw/applet/DrawApplet.java | 573 -------- .../jhotdraw/application/DrawApplication.java | 1176 ---------------- .../jhotdraw/contrib/AutoscrollHelper.java | 85 -- .../org/jhotdraw/contrib/CTXCommandMenu.java | 198 --- .../org/jhotdraw/contrib/CTXWindowMenu.java | 202 --- .../contrib/ChopDiamondConnector.java | 93 -- .../contrib/ChopPolygonConnector.java | 43 - .../contrib/ClippingUpdateStrategy.java | 70 - .../contrib/CommandCheckBoxMenuItem.java | 93 -- .../org/jhotdraw/contrib/CommandHolder.java | 39 - .../org/jhotdraw/contrib/CommandMenuItem.java | 87 -- .../org/jhotdraw/contrib/ComponentFigure.java | 125 -- .../contrib/CompositeFigureCreationTool.java | 79 -- .../jhotdraw/contrib/CustomSelectionTool.java | 194 --- .../org/jhotdraw/contrib/CustomToolBar.java | 130 -- .../java/org/jhotdraw/contrib/Desktop.java | 39 - .../org/jhotdraw/contrib/DesktopEvent.java | 55 - .../jhotdraw/contrib/DesktopEventService.java | 181 --- .../org/jhotdraw/contrib/DesktopListener.java | 22 - .../org/jhotdraw/contrib/DiamondFigure.java | 71 - .../jhotdraw/contrib/FloatingTextArea.java | 130 -- .../contrib/GraphicalCompositeFigure.java | 355 ----- .../org/jhotdraw/contrib/GridPainter.java | 95 -- .../java/org/jhotdraw/contrib/Helper.java | 51 - .../org/jhotdraw/contrib/JPanelDesktop.java | 112 -- .../jhotdraw/contrib/JScrollPaneDesktop.java | 91 -- .../java/org/jhotdraw/contrib/Layoutable.java | 43 - .../java/org/jhotdraw/contrib/Layouter.java | 74 - .../org/jhotdraw/contrib/MDIDesktopPane.java | 636 --------- .../jhotdraw/contrib/MDI_DrawApplication.java | 146 -- .../org/jhotdraw/contrib/MiniMapView.java | 268 ---- .../jhotdraw/contrib/NestedCreationTool.java | 82 -- .../org/jhotdraw/contrib/PolygonFigure.java | 462 ------ .../org/jhotdraw/contrib/PolygonHandle.java | 98 -- .../jhotdraw/contrib/PolygonScaleHandle.java | 186 --- .../org/jhotdraw/contrib/PolygonTool.java | 142 -- .../contrib/PopupMenuFigureSelection.java | 38 - .../java/org/jhotdraw/contrib/SVGDrawApp.java | 49 - .../jhotdraw/contrib/SVGStorageFormat.java | 112 -- .../org/jhotdraw/contrib/SimpleLayouter.java | 130 -- .../jhotdraw/contrib/SplitConnectionTool.java | 107 -- .../jhotdraw/contrib/SplitPaneDesktop.java | 151 -- .../contrib/SplitPaneDrawApplication.java | 42 - .../jhotdraw/contrib/StandardLayouter.java | 132 -- .../org/jhotdraw/contrib/TextAreaFigure.java | 936 ------------- .../org/jhotdraw/contrib/TextAreaTool.java | 445 ------ .../org/jhotdraw/contrib/TriangleFigure.java | 185 --- .../contrib/TriangleRotationHandle.java | 165 --- .../java/org/jhotdraw/contrib/WindowMenu.java | 119 -- .../org/jhotdraw/contrib/dnd/DNDFigures.java | 46 - .../contrib/dnd/DNDFiguresTransferable.java | 43 - .../org/jhotdraw/contrib/dnd/DNDHelper.java | 273 ---- .../jhotdraw/contrib/dnd/DNDInterface.java | 39 - .../jhotdraw/contrib/dnd/DragNDropTool.java | 345 ----- .../contrib/dnd/JHDDragSourceListener.java | 203 --- .../contrib/dnd/JHDDropTargetListener.java | 307 ---- .../contrib/html/AbstractContentProducer.java | 51 - .../html/AttributeContentProducerContext.java | 30 - .../html/AttributeFigureContentProducer.java | 70 - .../contrib/html/ColorContentProducer.java | 111 -- .../contrib/html/ContentProducer.java | 77 - .../contrib/html/ContentProducerContext.java | 24 - .../contrib/html/ContentProducerRegistry.java | 307 ---- .../html/DiamondFigureGeometricAdapter.java | 53 - .../html/DisposableResourceHolder.java | 121 -- .../html/DisposableResourceManager.java | 72 - .../DisposableResourceManagerFactory.java | 98 -- .../contrib/html/ETSLADisposalStrategy.java | 257 ---- .../html/EllipseFigureGeometricAdapter.java | 57 - .../html/FigureContentProducerContext.java | 40 - .../html/FigureDataContentProducer.java | 83 -- .../contrib/html/GeometricFigure.java | 33 - .../html/HTMLColorContentProducer.java | 54 - .../contrib/html/HTMLContentProducer.java | 86 -- .../html/HTMLContentProducerContext.java | 22 - .../jhotdraw/contrib/html/HTMLLayouter.java | 133 -- .../contrib/html/HTMLTextAreaFigure.java | 1143 --------------- .../contrib/html/HTMLTextAreaTool.java | 51 - .../html/PolygonFigureGeometricAdapter.java | 62 - .../contrib/html/ResourceContentProducer.java | 107 -- .../html/ResourceDisposabilityStrategy.java | 57 - .../html/ResourceManagerNotSetException.java | 25 - .../html/RoundRectangleGeometricAdapter.java | 60 - .../StandardDisposableResourceHolder.java | 162 --- .../StandardDisposableResourceManager.java | 120 -- .../html/TextHolderContentProducer.java | 96 -- .../html/TriangleFigureGeometricAdapter.java | 52 - .../contrib/html/URLContentProducer.java | 117 -- .../jhotdraw/contrib/zoom/AreaTracker.java | 76 - .../contrib/zoom/DoubleBufferImage.java | 77 - .../contrib/zoom/MiniMapZoomableView.java | 47 - .../contrib/zoom/ScalingGraphics.java | 430 ------ .../contrib/zoom/ZoomAreaTracker.java | 39 - .../jhotdraw/contrib/zoom/ZoomCommand.java | 93 -- .../contrib/zoom/ZoomDrawingView.java | 477 ------- .../org/jhotdraw/contrib/zoom/ZoomTool.java | 76 - .../contrib/zoom/ZoomUpdateStrategy.java | 74 - .../figures/AbstractLineDecoration.java | 147 -- .../java/org/jhotdraw/figures/ArrowTip.java | 143 -- .../org/jhotdraw/figures/AttributeFigure.java | 250 ---- .../org/jhotdraw/figures/BorderDecorator.java | 106 -- .../java/org/jhotdraw/figures/BorderTool.java | 134 -- .../figures/ChopEllipseConnector.java | 46 - .../jhotdraw/figures/ConnectedTextTool.java | 213 --- .../org/jhotdraw/figures/ElbowConnection.java | 104 -- .../org/jhotdraw/figures/ElbowHandle.java | 138 -- .../org/jhotdraw/figures/EllipseFigure.java | 110 -- .../jhotdraw/figures/FigureAttributes.java | 208 --- .../org/jhotdraw/figures/FontSizeHandle.java | 132 -- .../org/jhotdraw/figures/GroupCommand.java | 122 -- .../org/jhotdraw/figures/GroupFigure.java | 98 -- .../org/jhotdraw/figures/GroupHandle.java | 41 - .../org/jhotdraw/figures/ImageFigure.java | 153 -- .../jhotdraw/figures/InsertImageCommand.java | 117 -- .../org/jhotdraw/figures/LineConnection.java | 463 ------ .../org/jhotdraw/figures/LineDecoration.java | 38 - .../java/org/jhotdraw/figures/LineFigure.java | 77 - .../org/jhotdraw/figures/NullConnector.java | 27 - .../java/org/jhotdraw/figures/NullFigure.java | 186 --- .../jhotdraw/figures/NumberTextFigure.java | 70 - .../jhotdraw/figures/PolyLineConnector.java | 91 -- .../org/jhotdraw/figures/PolyLineFigure.java | 416 ------ .../org/jhotdraw/figures/PolyLineHandle.java | 126 -- .../org/jhotdraw/figures/PolyLineLocator.java | 41 - .../org/jhotdraw/figures/RadiusHandle.java | 131 -- .../org/jhotdraw/figures/RectangleFigure.java | 97 -- .../figures/RoundRectangleFigure.java | 140 -- .../org/jhotdraw/figures/ScribbleTool.java | 119 -- .../figures/ShortestDistanceConnector.java | 158 --- .../java/org/jhotdraw/figures/TextFigure.java | 509 ------- .../java/org/jhotdraw/figures/TextTool.java | 303 ---- .../org/jhotdraw/figures/UngroupCommand.java | 118 -- .../jhotdraw/framework/ConnectionFigure.java | 152 -- .../org/jhotdraw/framework/Connector.java | 96 -- .../java/org/jhotdraw/framework/Cursor.java | 29 - .../java/org/jhotdraw/framework/Drawing.java | 317 ----- .../framework/DrawingChangeEvent.java | 47 - .../framework/DrawingChangeListener.java | 34 - .../org/jhotdraw/framework/DrawingEditor.java | 72 - .../org/jhotdraw/framework/DrawingView.java | 315 ----- .../java/org/jhotdraw/framework/Figure.java | 334 ----- .../framework/FigureAttributeConstant.java | 178 --- .../jhotdraw/framework/FigureChangeEvent.java | 65 - .../framework/FigureChangeListener.java | 48 - .../jhotdraw/framework/FigureEnumeration.java | 37 - .../jhotdraw/framework/FigureSelection.java | 39 - .../framework/FigureSelectionListener.java | 25 - .../org/jhotdraw/framework/FigureVisitor.java | 22 - .../java/org/jhotdraw/framework/Handle.java | 133 -- .../jhotdraw/framework/HandleEnumeration.java | 51 - .../jhotdraw/framework/JHotDrawException.java | 40 - .../framework/JHotDrawRuntimeException.java | 40 - .../java/org/jhotdraw/framework/Locator.java | 37 - .../java/org/jhotdraw/framework/Painter.java | 40 - .../jhotdraw/framework/PointConstrainer.java | 46 - .../java/org/jhotdraw/framework/Tool.java | 128 -- .../org/jhotdraw/framework/ToolListener.java | 27 - .../framework/ViewChangeListener.java | 36 - .../main/java/org/jhotdraw/images/ATEXT1.gif | Bin 195 -> 0 bytes .../main/java/org/jhotdraw/images/ATEXT2.gif | Bin 185 -> 0 bytes .../main/java/org/jhotdraw/images/ATEXT3.gif | Bin 191 -> 0 bytes .../java/org/jhotdraw/images/BORDDEC1.gif | Bin 173 -> 0 bytes .../java/org/jhotdraw/images/BORDDEC2.gif | Bin 170 -> 0 bytes .../java/org/jhotdraw/images/BORDDEC3.gif | Bin 186 -> 0 bytes .../main/java/org/jhotdraw/images/CONN1.gif | Bin 171 -> 0 bytes .../main/java/org/jhotdraw/images/CONN2.gif | Bin 161 -> 0 bytes .../main/java/org/jhotdraw/images/CONN3.gif | Bin 170 -> 0 bytes .../java/org/jhotdraw/images/DIAMOND1.gif | Bin 192 -> 0 bytes .../java/org/jhotdraw/images/DIAMOND2.gif | Bin 180 -> 0 bytes .../java/org/jhotdraw/images/DIAMOND3.gif | Bin 187 -> 0 bytes .../java/org/jhotdraw/images/ELLIPSE1.gif | Bin 199 -> 0 bytes .../java/org/jhotdraw/images/ELLIPSE2.gif | Bin 193 -> 0 bytes .../java/org/jhotdraw/images/ELLIPSE3.gif | Bin 202 -> 0 bytes .../main/java/org/jhotdraw/images/ERASER1.gif | Bin 183 -> 0 bytes .../main/java/org/jhotdraw/images/ERASER2.gif | Bin 173 -> 0 bytes .../main/java/org/jhotdraw/images/ERASER3.gif | Bin 179 -> 0 bytes .../java/org/jhotdraw/images/HTMLAREA1.gif | Bin 194 -> 0 bytes .../java/org/jhotdraw/images/HTMLAREA2.gif | Bin 190 -> 0 bytes .../java/org/jhotdraw/images/HTMLAREA3.gif | Bin 203 -> 0 bytes .../main/java/org/jhotdraw/images/LINE1.gif | Bin 165 -> 0 bytes .../main/java/org/jhotdraw/images/LINE2.gif | Bin 158 -> 0 bytes .../main/java/org/jhotdraw/images/LINE3.gif | Bin 164 -> 0 bytes .../main/java/org/jhotdraw/images/OCONN1.gif | Bin 172 -> 0 bytes .../main/java/org/jhotdraw/images/OCONN2.gif | Bin 161 -> 0 bytes .../main/java/org/jhotdraw/images/OCONN3.gif | Bin 170 -> 0 bytes .../main/java/org/jhotdraw/images/PERT1.gif | Bin 186 -> 0 bytes .../main/java/org/jhotdraw/images/PERT2.gif | Bin 178 -> 0 bytes .../main/java/org/jhotdraw/images/PERT3.gif | Bin 188 -> 0 bytes .../java/org/jhotdraw/images/POLYGON1.gif | Bin 193 -> 0 bytes .../java/org/jhotdraw/images/POLYGON2.gif | Bin 179 -> 0 bytes .../java/org/jhotdraw/images/POLYGON3.gif | Bin 189 -> 0 bytes .../main/java/org/jhotdraw/images/RECT1.gif | Bin 190 -> 0 bytes .../main/java/org/jhotdraw/images/RECT2.gif | Bin 178 -> 0 bytes .../main/java/org/jhotdraw/images/RECT3.gif | Bin 190 -> 0 bytes .../main/java/org/jhotdraw/images/RRECT1.gif | Bin 191 -> 0 bytes .../main/java/org/jhotdraw/images/RRECT2.gif | Bin 182 -> 0 bytes .../main/java/org/jhotdraw/images/RRECT3.gif | Bin 190 -> 0 bytes .../java/org/jhotdraw/images/SCRIBBL1.gif | Bin 178 -> 0 bytes .../java/org/jhotdraw/images/SCRIBBL2.gif | Bin 169 -> 0 bytes .../java/org/jhotdraw/images/SCRIBBL3.gif | Bin 181 -> 0 bytes .../main/java/org/jhotdraw/images/SEL1.gif | Bin 186 -> 0 bytes .../main/java/org/jhotdraw/images/SEL2.gif | Bin 182 -> 0 bytes .../main/java/org/jhotdraw/images/SEL3.gif | Bin 192 -> 0 bytes .../java/org/jhotdraw/images/TEMPLATE.gif | Bin 152 -> 0 bytes .../java/org/jhotdraw/images/TEMPLAT_.gif | Bin 151 -> 0 bytes .../main/java/org/jhotdraw/images/TEXT1.gif | Bin 193 -> 0 bytes .../main/java/org/jhotdraw/images/TEXT2.gif | Bin 181 -> 0 bytes .../main/java/org/jhotdraw/images/TEXT3.gif | Bin 186 -> 0 bytes .../java/org/jhotdraw/images/TEXTAREA1.gif | Bin 159 -> 0 bytes .../java/org/jhotdraw/images/TEXTAREA2.gif | Bin 152 -> 0 bytes .../java/org/jhotdraw/images/TEXTAREA3.gif | Bin 160 -> 0 bytes .../java/org/jhotdraw/samples/javadraw.jdo | 10 - .../samples/javadraw/AnimationDecorator.java | 99 -- .../jhotdraw/samples/javadraw/Animator.java | 62 - .../samples/javadraw/BouncingDrawing.java | 67 - .../samples/javadraw/FollowURLTool.java | 70 - .../samples/javadraw/JavaDrawApp.java | 267 ---- .../samples/javadraw/JavaDrawApplet.java | 132 -- .../samples/javadraw/JavaDrawAppletHelp.html | 69 - .../samples/javadraw/JavaDrawViewer.java | 123 -- .../samples/javadraw/MySelectionTool.java | 47 - .../samples/javadraw/PatternPainter.java | 57 - .../jhotdraw/samples/javadraw/URLTool.java | 108 -- .../samples/javadraw/sampleimages/DUKE.gif | Bin 2012 -> 0 bytes .../javadraw/sampleimages/Juggler0.gif | Bin 3090 -> 0 bytes .../javadraw/sampleimages/backgrnd.gif | Bin 2443 -> 0 bytes .../samples/javadraw/sampleimages/beans.gif | Bin 7012 -> 0 bytes .../samples/javadraw/sampleimages/bg1.gif | Bin 2164 -> 0 bytes .../javadraw/sampleimages/javacentral.gif | Bin 37239 -> 0 bytes .../sampleimages/joe.surf.yellow.small.gif | Bin 5009 -> 0 bytes .../samples/javadraw/sampleimages/rain.gif | Bin 7664 -> 0 bytes .../samples/javadraw/sampleimages/view.gif | Bin 121144 -> 0 bytes .../samples/mini/ConnectingFiguresSample.java | 74 - .../org/jhotdraw/samples/mini/package.html | 42 - .../samples/minimap/MiniMapApplication.java | 30 - .../samples/minimap/MiniMapDesktop.java | 53 - .../main/java/org/jhotdraw/samples/net.jdo | 8 - .../java/org/jhotdraw/samples/net/NetApp.java | 48 - .../org/jhotdraw/samples/net/NodeFigure.java | 155 --- .../jhotdraw/samples/nothing/NothingApp.java | 71 - .../samples/nothing/NothingApplet.java | 55 - .../offsetConnectors/ConnectorApp.java | 52 - .../offsetConnectors/MyEllipseFigure.java | 43 - .../samples/offsetConnectors/MyFigure.java | 44 - .../samples/offsetConnectors/NodeFigure.java | 155 --- .../offsetConnectors/offsetConnectors.draw | 70 - .../org/jhotdraw/samples/pert/PertApplet.java | 42 - .../jhotdraw/samples/pert/PertAppletHelp.html | 67 - .../samples/pert/PertApplication.java | 57 - .../jhotdraw/samples/pert/PertDependency.java | 73 - .../org/jhotdraw/samples/pert/PertFigure.java | 313 ----- .../samples/pert/PertFigureCreationTool.java | 35 - .../jhotdraw/samples/pert/images/PERT1.gif | Bin 186 -> 0 bytes .../jhotdraw/samples/pert/images/PERT2.gif | Bin 178 -> 0 bytes .../jhotdraw/samples/pert/images/PERT3.gif | Bin 188 -> 0 bytes .../java/org/jhotdraw/standard/AWTCursor.java | 46 - .../jhotdraw/standard/AbstractCommand.java | 253 ---- .../jhotdraw/standard/AbstractConnector.java | 148 -- .../org/jhotdraw/standard/AbstractFigure.java | 482 ------- .../org/jhotdraw/standard/AbstractHandle.java | 176 --- .../jhotdraw/standard/AbstractLocator.java | 61 - .../org/jhotdraw/standard/AbstractTool.java | 395 ------ .../org/jhotdraw/standard/ActionTool.java | 51 - .../org/jhotdraw/standard/AlignCommand.java | 224 --- .../org/jhotdraw/standard/BoxHandleKit.java | 273 ---- .../standard/BringToFrontCommand.java | 63 - .../standard/BufferedUpdateStrategy.java | 60 - .../standard/ChangeAttributeCommand.java | 154 -- .../standard/ChangeConnectionEndHandle.java | 104 -- .../standard/ChangeConnectionHandle.java | 291 ---- .../standard/ChangeConnectionStartHandle.java | 90 -- .../jhotdraw/standard/ChopBoxConnector.java | 76 - .../jhotdraw/standard/CompositeFigure.java | 734 ---------- .../jhotdraw/standard/ConnectionHandle.java | 218 --- .../org/jhotdraw/standard/ConnectionTool.java | 455 ------ .../org/jhotdraw/standard/CopyCommand.java | 42 - .../org/jhotdraw/standard/CreationTool.java | 229 --- .../org/jhotdraw/standard/CutCommand.java | 181 --- .../jhotdraw/standard/DecoratorFigure.java | 337 ----- .../org/jhotdraw/standard/DeleteCommand.java | 126 -- .../standard/DeleteFromDrawingVisitor.java | 58 - .../org/jhotdraw/standard/DragTracker.java | 189 --- .../jhotdraw/standard/DuplicateCommand.java | 58 - .../standard/FastBufferedUpdateStrategy.java | 121 -- .../standard/FigureAndEnumerator.java | 57 - .../standard/FigureChangeAdapter.java | 49 - .../FigureChangeEventMulticaster.java | 105 -- .../jhotdraw/standard/FigureEnumerator.java | 82 -- .../standard/FigureTransferCommand.java | 67 - .../jhotdraw/standard/GridConstrainer.java | 58 - .../standard/HandleAndEnumerator.java | 59 - .../jhotdraw/standard/HandleEnumerator.java | 87 -- .../org/jhotdraw/standard/HandleTracker.java | 52 - .../standard/InsertIntoDrawingVisitor.java | 57 - .../jhotdraw/standard/LocatorConnector.java | 108 -- .../org/jhotdraw/standard/LocatorHandle.java | 90 -- .../jhotdraw/standard/NullDrawingView.java | 430 ------ .../org/jhotdraw/standard/NullHandle.java | 54 - .../org/jhotdraw/standard/NullPainter.java | 39 - .../java/org/jhotdraw/standard/NullTool.java | 41 - .../jhotdraw/standard/OffsetConnector.java | 375 ----- .../org/jhotdraw/standard/OffsetLocator.java | 81 -- .../standard/OrderedFigureElement.java | 59 - .../org/jhotdraw/standard/PasteCommand.java | 117 -- .../jhotdraw/standard/PeripheralLocator.java | 78 -- .../java/org/jhotdraw/standard/QuadTree.java | 267 ---- .../jhotdraw/standard/RelativeLocator.java | 136 -- .../standard/ReverseFigureEnumerator.java | 60 - .../jhotdraw/standard/SelectAllCommand.java | 91 -- .../jhotdraw/standard/SelectAreaTracker.java | 103 -- .../org/jhotdraw/standard/SelectionTool.java | 144 -- .../jhotdraw/standard/SendToBackCommand.java | 117 -- .../standard/SimpleUpdateStrategy.java | 40 - .../standard/SingleFigureEnumerator.java | 61 - .../jhotdraw/standard/StandardDrawing.java | 227 --- .../standard/StandardDrawingView.java | 1235 ----------------- .../standard/StandardFigureSelection.java | 95 -- .../org/jhotdraw/standard/TextHolder.java | 73 - .../jhotdraw/standard/ToggleGridCommand.java | 49 - .../org/jhotdraw/standard/ToolButton.java | 165 --- .../java/org/jhotdraw/util/Animatable.java | 24 - .../main/java/org/jhotdraw/util/Bounds.java | 496 ------- .../java/org/jhotdraw/util/Clipboard.java | 49 - .../org/jhotdraw/util/CollectionsFactory.java | 83 -- .../main/java/org/jhotdraw/util/ColorMap.java | 97 -- .../main/java/org/jhotdraw/util/Command.java | 59 - .../java/org/jhotdraw/util/CommandButton.java | 53 - .../java/org/jhotdraw/util/CommandChoice.java | 56 - .../org/jhotdraw/util/CommandListener.java | 24 - .../java/org/jhotdraw/util/CommandMenu.java | 134 -- .../main/java/org/jhotdraw/util/Filler.java | 55 - .../org/jhotdraw/util/FloatingTextField.java | 111 -- .../src/main/java/org/jhotdraw/util/Geom.java | 423 ------ .../java/org/jhotdraw/util/GraphLayout.java | 227 --- .../main/java/org/jhotdraw/util/Iconkit.java | 248 ---- .../java/org/jhotdraw/util/PaletteButton.java | 148 -- .../java/org/jhotdraw/util/PaletteIcon.java | 44 - .../java/org/jhotdraw/util/PaletteLayout.java | 112 -- .../org/jhotdraw/util/PaletteListener.java | 32 - .../java/org/jhotdraw/util/RedoCommand.java | 66 - .../jhotdraw/util/ReverseListEnumerator.java | 48 - .../util/SerializationStorageFormat.java | 87 -- .../jhotdraw/util/StandardStorageFormat.java | 244 ---- .../util/StandardVersionControlStrategy.java | 92 -- .../main/java/org/jhotdraw/util/Storable.java | 37 - .../java/org/jhotdraw/util/StorableInput.java | 183 --- .../org/jhotdraw/util/StorableOutput.java | 176 --- .../java/org/jhotdraw/util/StorageFormat.java | 73 - .../jhotdraw/util/StorageFormatManager.java | 193 --- .../java/org/jhotdraw/util/UndoCommand.java | 74 - .../java/org/jhotdraw/util/UndoManager.java | 218 --- .../org/jhotdraw/util/UndoRedoActivity.java | 120 -- .../main/java/org/jhotdraw/util/Undoable.java | 54 - .../org/jhotdraw/util/UndoableAdapter.java | 135 -- .../org/jhotdraw/util/UndoableCommand.java | 134 -- .../org/jhotdraw/util/UndoableHandle.java | 213 --- .../java/org/jhotdraw/util/UndoableTool.java | 192 --- .../jhotdraw/util/VersionControlStrategy.java | 24 - .../org/jhotdraw/util/VersionManagement.java | 200 --- .../org/jhotdraw/util/VersionRequester.java | 28 - .../jdk11/CollectionsFactoryJDK11.java | 53 - .../collections/jdk11/IteratorWrapper.java | 39 - .../util/collections/jdk11/ListWrapper.java | 126 -- .../util/collections/jdk11/MapWrapper.java | 78 -- .../util/collections/jdk11/SetWrapper.java | 85 -- .../jdk12/CollectionsFactoryJDK12.java | 53 - .../main/resources/org/jhotdraw/contrib.jdo | 31 - .../main/resources/org/jhotdraw/figures.jdo | 60 - .../main/resources/org/jhotdraw/framework.jdo | 11 - .../resources/org/jhotdraw/images/TOBACK1.gif | Bin 193 -> 0 bytes .../resources/org/jhotdraw/images/TOBACK2.gif | Bin 184 -> 0 bytes .../resources/org/jhotdraw/images/TOBACK3.gif | Bin 195 -> 0 bytes .../org/jhotdraw/images/TOFRONT1.gif | Bin 196 -> 0 bytes .../org/jhotdraw/images/TOFRONT2.gif | Bin 185 -> 0 bytes .../org/jhotdraw/images/TOFRONT3.gif | Bin 197 -> 0 bytes .../org/jhotdraw/images/TRIANGLE1.gif | Bin 192 -> 0 bytes .../org/jhotdraw/images/TRIANGLE2.gif | Bin 181 -> 0 bytes .../org/jhotdraw/images/TRIANGLE3.gif | Bin 191 -> 0 bytes .../resources/org/jhotdraw/images/URL1.gif | Bin 222 -> 0 bytes .../resources/org/jhotdraw/images/URL2.gif | Bin 216 -> 0 bytes .../resources/org/jhotdraw/images/URL3.gif | Bin 230 -> 0 bytes .../resources/org/jhotdraw/images/ZOOM1.gif | Bin 149 -> 0 bytes .../resources/org/jhotdraw/images/ZOOM2.gif | Bin 130 -> 0 bytes .../resources/org/jhotdraw/images/ZOOM3.gif | Bin 949 -> 0 bytes .../org/jhotdraw/images/pspbrwse.jbf | Bin 21230 -> 0 bytes .../main/resources/org/jhotdraw/standard.jdo | 31 - .../test/java/org/jhotdraw/test/AllTests.java | 47 - .../java/org/jhotdraw/test/JHDTestCase.java | 44 - .../org/jhotdraw/test/contrib/AllTests.java | 76 - .../test/contrib/CTXCommandMenuTest.java | 198 --- .../test/contrib/CTXWindowMenuTest.java | 102 -- .../contrib/ChopDiamondConnectorTest.java | 100 -- .../contrib/ChopPolygonConnectorTest.java | 99 -- .../contrib/ClippingUpdateStrategyTest.java | 110 -- .../contrib/CommandCheckBoxMenuItemTest.java | 122 -- .../test/contrib/CommandMenuItemTest.java | 131 -- .../test/contrib/ComponentFigureTest.java | 156 --- .../CompositeFigureCreationToolTest.java | 144 -- .../test/contrib/CustomSelectionToolTest.java | 132 -- .../test/contrib/CustomToolBarTest.java | 154 -- .../test/contrib/DesktopEventServiceTest.java | 182 --- .../test/contrib/DiamondFigureTest.java | 154 -- .../test/contrib/FloatingTextAreaTest.java | 154 -- .../contrib/GraphicalCompositeFigureTest.java | 275 ---- .../org/jhotdraw/test/contrib/HelperTest.java | 110 -- .../test/contrib/JPanelDesktopTest.java | 177 --- .../test/contrib/JScrollPaneDesktopTest.java | 177 --- .../test/contrib/MDIDesktopPaneTest.java | 254 ---- .../test/contrib/MDI_DrawApplicationTest.java | 155 --- .../test/contrib/MiniMapViewTest.java | 163 --- .../test/contrib/NestedCreationToolTest.java | 147 -- .../test/contrib/PolygonFigureTest.java | 419 ------ .../test/contrib/PolygonHandleTest.java | 148 -- .../test/contrib/PolygonToolTest.java | 166 --- .../jhotdraw/test/contrib/SVGDrawAppTest.java | 122 -- .../test/contrib/SVGStorageFormatTest.java | 133 -- .../test/contrib/SimpleLayouterTest.java | 201 --- .../test/contrib/SplitConnectionToolTest.java | 158 --- .../test/contrib/StandardLayouterTest.java | 133 -- .../test/contrib/TextAreaFigureTest.java | 508 ------- .../test/contrib/TextAreaToolTest.java | 169 --- .../test/contrib/TriangleFigureTest.java | 232 ---- .../jhotdraw/test/contrib/WindowMenuTest.java | 103 -- .../org/jhotdraw/test/figures/AllTests.java | 61 - .../jhotdraw/test/figures/ArrowTipTest.java | 137 -- .../test/figures/BorderDecoratorTest.java | 181 --- .../jhotdraw/test/figures/BorderToolTest.java | 133 -- .../figures/ChopEllipseConnectorTest.java | 100 -- .../test/figures/ConnectedTextToolTest.java | 136 -- .../test/figures/ElbowConnectionTest.java | 144 -- .../test/figures/ElbowHandleTest.java | 148 -- .../test/figures/EllipseFigureTest.java | 199 --- .../test/figures/FigureAttributesTest.java | 188 --- .../jhotdraw/test/figures/FiguresSuite.java | 88 -- .../test/figures/FontSizeHandleTest.java | 148 -- .../test/figures/GroupCommandTest.java | 126 -- .../test/figures/GroupFigureTest.java | 170 --- .../test/figures/ImageFigureTest.java | 188 --- .../test/figures/InsertImageCommandTest.java | 112 -- .../test/figures/LineConnectionTest.java | 397 ------ .../jhotdraw/test/figures/LineFigureTest.java | 144 -- .../test/figures/NullConnectorTest.java | 103 -- .../jhotdraw/test/figures/NullFigureTest.java | 254 ---- .../test/figures/NumberTextFigureTest.java | 142 -- .../test/figures/PolyLineConnectorTest.java | 100 -- .../test/figures/PolyLineFigureTest.java | 383 ----- .../test/figures/PolyLineHandleTest.java | 137 -- .../test/figures/RectangleFigureTest.java | 177 --- .../figures/RoundRectangleFigureTest.java | 221 --- .../test/figures/ScribbleToolTest.java | 155 --- .../ShortestDistanceConnectorTest.java | 122 -- .../jhotdraw/test/figures/TextFigureTest.java | 473 ------- .../jhotdraw/test/figures/TextToolTest.java | 173 --- .../test/figures/UngroupCommandTest.java | 122 -- .../org/jhotdraw/test/framework/AllTests.java | 35 - .../framework/DrawingChangeEventTest.java | 125 -- .../FigureAttributeConstantTest.java | 155 --- .../test/framework/FigureChangeEventTest.java | 137 -- .../test/framework/FrameworkSuite.java | 62 - .../test/samples/javadraw/AllTests.java | 41 - .../javadraw/AnimationDecoratorTest.java | 177 --- .../test/samples/javadraw/AnimatorTest.java | 141 -- .../samples/javadraw/BouncingDrawingTest.java | 144 -- .../samples/javadraw/JavaDrawAppTest.java | 144 -- .../samples/javadraw/JavaDrawAppletTest.java | 144 -- .../samples/javadraw/JavaDrawViewerTest.java | 221 --- .../test/samples/javadraw/JavadrawSuite.java | 68 - .../samples/javadraw/MySelectionToolTest.java | 111 -- .../samples/javadraw/PatternPainterTest.java | 116 -- .../test/samples/javadraw/URLToolTest.java | 133 -- .../test/samples/minimap/AllTests.java | 34 - .../minimap/MiniMapApplicationTest.java | 111 -- .../samples/minimap/MiniMapDesktopTest.java | 100 -- .../test/samples/minimap/MinimapSuite.java | 61 - .../jhotdraw/test/samples/net/AllTests.java | 34 - .../jhotdraw/test/samples/net/NetAppTest.java | 111 -- .../jhotdraw/test/samples/net/NetSuite.java | 61 - .../test/samples/net/NodeFigureTest.java | 177 --- .../test/samples/nothing/AllTests.java | 34 - .../test/samples/nothing/NothingAppTest.java | 111 -- .../samples/nothing/NothingAppletTest.java | 100 -- .../test/samples/nothing/NothingSuite.java | 61 - .../jhotdraw/test/samples/pert/AllTests.java | 37 - .../test/samples/pert/PertAppletTest.java | 100 -- .../samples/pert/PertApplicationTest.java | 111 -- .../test/samples/pert/PertDependencyTest.java | 144 -- .../pert/PertFigureCreationToolTest.java | 100 -- .../test/samples/pert/PertFigureTest.java | 357 ----- .../jhotdraw/test/samples/pert/PertSuite.java | 64 - .../test/standard/AlignCommandTest.java | 122 -- .../org/jhotdraw/test/standard/AllTests.java | 80 -- .../test/standard/BoxHandleKitTest.java | 210 --- .../standard/BringToFrontCommandTest.java | 122 -- .../standard/BufferedUpdateStrategyTest.java | 111 -- .../standard/ChangeAttributeCommandTest.java | 126 -- .../ChangeConnectionEndHandleTest.java | 112 -- .../ChangeConnectionStartHandleTest.java | 112 -- .../test/standard/ChopBoxConnectorTest.java | 122 -- .../test/standard/ConnectionHandleTest.java | 149 -- .../test/standard/ConnectionToolTest.java | 159 --- .../test/standard/CopyCommandTest.java | 111 -- .../test/standard/CreationToolTest.java | 147 -- .../test/standard/CutCommandTest.java | 122 -- .../test/standard/DeleteCommandTest.java | 111 -- .../DeleteFromDrawingVisitorTest.java | 145 -- .../test/standard/DragTrackerTest.java | 147 -- .../test/standard/DuplicateCommandTest.java | 111 -- .../FastBufferedUpdateStrategyTest.java | 111 -- .../standard/FigureAndEnumeratorTest.java | 149 -- .../standard/FigureChangeAdapterTest.java | 155 --- .../FigureChangeEventMulticasterTest.java | 184 --- .../test/standard/FigureEnumeratorTest.java | 154 -- .../test/standard/GridConstrainerTest.java | 133 -- .../standard/HandleAndEnumeratorTest.java | 164 --- .../test/standard/HandleEnumeratorTest.java | 167 --- .../test/standard/HandleTrackerTest.java | 151 -- .../InsertIntoDrawingVisitorTest.java | 145 -- .../test/standard/LocatorConnectorTest.java | 166 --- .../test/standard/LocatorHandleTest.java | 126 -- .../test/standard/NullDrawingViewTest.java | 650 --------- .../test/standard/NullHandleTest.java | 116 -- .../jhotdraw/test/standard/NullToolTest.java | 122 -- .../test/standard/OffsetLocatorTest.java | 144 -- .../test/standard/PasteCommandTest.java | 122 -- .../test/standard/PeripheralLocatorTest.java | 111 -- .../test/standard/RelativeLocatorTest.java | 243 ---- .../standard/ReverseFigureEnumeratorTest.java | 143 -- .../test/standard/SelectAllCommandTest.java | 122 -- .../test/standard/SelectAreaTrackerTest.java | 133 -- .../test/standard/SelectionToolTest.java | 144 -- .../test/standard/SendToBackCommandTest.java | 111 -- .../standard/SimpleUpdateStrategyTest.java | 111 -- .../standard/SingleFigureEnumeratorTest.java | 137 -- .../test/standard/StandardDrawingTest.java | 263 ---- .../standard/StandardDrawingViewTest.java | 728 ---------- .../standard/StandardFigureSelectionTest.java | 146 -- .../jhotdraw/test/standard/StandardSuite.java | 107 -- .../test/standard/ToggleGridCommandTest.java | 113 -- .../test/standard/ToolButtonTest.java | 258 ---- .../java/org/jhotdraw/test/util/AllTests.java | 61 - .../org/jhotdraw/test/util/BoundsTest.java | 484 ------- .../org/jhotdraw/test/util/ClipboardTest.java | 131 -- .../org/jhotdraw/test/util/ColorMapTest.java | 155 --- .../jhotdraw/test/util/CommandButtonTest.java | 112 -- .../jhotdraw/test/util/CommandChoiceTest.java | 122 -- .../jhotdraw/test/util/CommandMenuTest.java | 199 --- .../org/jhotdraw/test/util/FillerTest.java | 133 -- .../test/util/FloatingTextFieldTest.java | 177 --- .../java/org/jhotdraw/test/util/GeomTest.java | 343 ----- .../jhotdraw/test/util/GraphLayoutTest.java | 155 --- .../org/jhotdraw/test/util/IconkitTest.java | 177 --- .../test/util/JDOStorageFormatTest.java | 143 -- .../jhotdraw/test/util/PaletteIconTest.java | 181 --- .../jhotdraw/test/util/PaletteLayoutTest.java | 158 --- .../jhotdraw/test/util/RedoCommandTest.java | 122 -- .../test/util/ReverseListEnumeratorTest.java | 140 -- .../util/SerializationStorageFormatTest.java | 133 -- .../test/util/StandardStorageFormatTest.java | 204 --- .../StandardVersionControlStrategyTest.java | 110 -- .../jhotdraw/test/util/StorableInputTest.java | 184 --- .../test/util/StorableOutputTest.java | 195 --- .../test/util/StorageFormatManagerTest.java | 177 --- .../jhotdraw/test/util/UndoCommandTest.java | 122 -- .../jhotdraw/test/util/UndoManagerTest.java | 210 --- .../test/util/UndoRedoActivityTest.java | 269 ---- .../test/util/UndoableAdapterTest.java | 244 ---- .../test/util/UndoableCommandTest.java | 248 ---- .../test/util/UndoableHandleTest.java | 218 --- .../jhotdraw/test/util/UndoableToolTest.java | 374 ----- .../org/jhotdraw/test/util/UtilSuite.java | 88 -- .../test/util/VersionManagementTest.java | 165 --- .../test/util/collections/jdk11/AllTests.java | 37 - .../jdk11/CollectionsFactoryJDK11Test.java | 133 -- .../jdk11/IteratorWrapperTest.java | 141 -- .../util/collections/jdk11/Jdk11Suite.java | 64 - .../collections/jdk11/ListWrapperTest.java | 298 ---- .../collections/jdk11/MapWrapperTest.java | 232 ---- .../collections/jdk11/SetWrapperTest.java | 232 ---- .../test/util/collections/jdk12/AllTests.java | 33 - .../jdk12/CollectionsFactoryJDK12Test.java | 133 -- .../util/collections/jdk12/Jdk12Suite.java | 55 - jhotdraw7/manifest.mf | 3 - jhotdraw7/pom.xml | 104 -- .../jhotdraw/samples/pert/images/PERT1.gif | Bin 186 -> 0 bytes .../jhotdraw/samples/pert/images/PERT2.gif | Bin 178 -> 0 bytes .../jhotdraw/samples/pert/images/PERT3.gif | Bin 188 -> 0 bytes jmodeller/.classpath | 8 - jmodeller/DifferenceReporter.java | 10 - jmodeller/compile.bat | 1 - jmodeller/compile_g.bat | 1 - jmodeller/run.bat | 1 - jmodeller/src/AggregationDecoration.java | 138 -- jmodeller/src/AssociationLineConnection.java | 229 --- jmodeller/src/ClassFigure.java | 438 ------ jmodeller/src/DelegationSelectionTool.java | 82 -- jmodeller/src/DependencyLineConnection.java | 103 -- jmodeller/src/InheritanceLineConnection.java | 78 -- jmodeller/src/JModellerApplication.java | 174 --- jmodeller/src/JModellerClass.java | 345 ----- jmodeller/src/SeparatorFigure.java | 35 - jmodeller/src/images/CLASS1.gif | Bin 185 -> 0 bytes jmodeller/src/images/CLASS2.gif | Bin 175 -> 0 bytes jmodeller/src/images/CLASS3.gif | Bin 187 -> 0 bytes jmodeller/src/images/DEPENDENCY1.gif | Bin 170 -> 0 bytes jmodeller/src/images/DEPENDENCY2.gif | Bin 163 -> 0 bytes jmodeller/src/images/DEPENDENCY3.gif | Bin 172 -> 0 bytes jmodeller/src/images/INHERITANCE1.gif | Bin 168 -> 0 bytes jmodeller/src/images/INHERITANCE2.gif | Bin 158 -> 0 bytes jmodeller/src/images/INHERITANCE3.gif | Bin 173 -> 0 bytes {jhotdraw7/lib => lib}/annotations.jar | Bin {jhotdraw7/lib => lib}/java_30.zip | Bin {jhotdraw7/lib => lib}/jsr305.jar | Bin {jhotdraw7/lib => lib}/libquaqua.jnilib | Bin {jhotdraw7/lib => lib}/libquaqua64.jnilib | Bin {jhotdraw7/lib => lib}/quaqua.jar | Bin jhotdraw6/manifest.mf => manifest.mf | 0 .../nbproject => nbproject}/build-impl.xml | 0 .../genfiles.properties | 0 .../private/private.properties | 0 .../private/private.xml | 0 .../profiler-build-impl.xml | 0 .../project.properties | 0 .../nbproject => nbproject}/project.xml | 0 jhotdraw6/pom.xml => pom.xml | 0 .../src => src}/documentation/changes.html | 0 .../documentation/getting_started.html | 0 .../documentation/images/draw_mdi.png | Bin .../documentation/images/draw_mdi_small.png | Bin .../documentation/images/draw_osx.png | Bin .../documentation/images/draw_osx_small.png | Bin .../documentation/images/jhotdraw-duked.xml | 0 .../documentation/images/jhotdraw-seven.xml | 0 .../src => src}/documentation/images/lion.svg | 0 .../documentation/images/lion.svgz | 0 .../src => src}/documentation/images/net.xml | 0 .../documentation/images/net_osx.png | Bin .../documentation/images/net_osx_small.png | Bin .../src => src}/documentation/images/pert.xml | 0 .../documentation/images/pert_osx.png | Bin .../documentation/images/pert_osx_small.png | Bin .../documentation/images/svg_osx.png | Bin .../documentation/images/svg_osx_small.png | Bin .../documentation/images/webstart.small.gif | Bin .../src => src}/documentation/index.html | 0 .../src => src}/documentation/jws/draw.jnlp | 0 .../src => src}/documentation/jws/net.jnlp | 0 .../src => src}/documentation/jws/pert.jnlp | 0 .../src => src}/documentation/jws/svg.jnlp | 0 .../src => src}/documentation/jws/teddy.jnlp | 0 .../src => src}/documentation/license.html | 0 .../documentation/license_terms_ccby.html | 0 .../documentation/license_terms_lgpl.html | 0 .../documentation/release_notes.html | 0 .../documentation/sample_draw_applet.html | 0 .../sample_draw_application.html | 0 .../documentation/sample_net_applet.html | 0 .../documentation/sample_net_application.html | 0 .../documentation/sample_pert_applet.html | 0 .../sample_pert_application.html | 0 .../documentation/sample_svg_applet.html | 0 .../documentation/sample_svg_application.html | 0 .../sample_teddy_application.html | 0 .../src => src}/documentation/stylesheet.css | 0 {jhotdraw7/src => src}/documentation/toc.html | 0 .../documentation/tutorial/index.html | 0 .../documentation/tutorial/purpose.html | 0 .../documentation/tutorial/stylesheet.css | 0 .../documentation/tutorial/toc.html | 0 .../main/java/net/n3/nanoxml/CDATAReader.java | 0 .../java/net/n3/nanoxml/ContentReader.java | 0 .../main/java/net/n3/nanoxml/IXMLBuilder.java | 0 .../main/java/net/n3/nanoxml/IXMLElement.java | 0 .../net/n3/nanoxml/IXMLEntityResolver.java | 0 .../main/java/net/n3/nanoxml/IXMLParser.java | 0 .../main/java/net/n3/nanoxml/IXMLReader.java | 0 .../java/net/n3/nanoxml/IXMLValidator.java | 0 .../java/net/n3/nanoxml/NonValidator.java | 0 .../main/java/net/n3/nanoxml/PIReader.java | 0 .../java/net/n3/nanoxml/StdXMLBuilder.java | 0 .../java/net/n3/nanoxml/StdXMLParser.java | 0 .../java/net/n3/nanoxml/StdXMLReader.java | 0 .../java/net/n3/nanoxml/ValidatorPlugin.java | 0 .../java/net/n3/nanoxml/XMLAttribute.java | 0 .../main/java/net/n3/nanoxml/XMLElement.java | 0 .../net/n3/nanoxml/XMLEntityResolver.java | 0 .../java/net/n3/nanoxml/XMLException.java | 0 .../net/n3/nanoxml/XMLParseException.java | 0 .../java/net/n3/nanoxml/XMLParserFactory.java | 0 .../main/java/net/n3/nanoxml/XMLUtil.java | 0 .../n3/nanoxml/XMLValidationException.java | 0 .../main/java/net/n3/nanoxml/XMLWriter.java | 0 .../java/net/n3/nanoxml/package-info.java | 0 .../org/jhotdraw/app/AbstractApplication.java | 0 .../app/AbstractApplicationModel.java | 0 .../java/org/jhotdraw/app/AbstractView.form | 0 .../java/org/jhotdraw/app/AbstractView.java | 0 .../org/jhotdraw/app/AppletApplication.java | 0 .../java/org/jhotdraw/app/Application.java | 0 .../org/jhotdraw/app/ApplicationModel.java | 0 .../jhotdraw/app/DefaultApplicationModel.java | 0 .../org/jhotdraw/app/DefaultMenuBuilder.java | 0 .../java/org/jhotdraw/app/Disposable.java | 0 .../jhotdraw/app/EmptyApplicationModel.java | 0 .../org/jhotdraw/app/EmptyMenuBuilder.java | 0 .../java/org/jhotdraw/app/Labels.properties | 0 .../org/jhotdraw/app/Labels_de.properties | 0 .../org/jhotdraw/app/Labels_fr.properties | 0 .../java/org/jhotdraw/app/MDIApplication.java | 0 .../java/org/jhotdraw/app/MenuBuilder.java | 0 .../java/org/jhotdraw/app/OSXApplication.java | 0 .../java/org/jhotdraw/app/PrintableView.java | 0 .../java/org/jhotdraw/app/SDIApplication.java | 0 .../main/java/org/jhotdraw/app/View.java | 0 .../app/action/AbstractApplicationAction.java | 0 .../AbstractSaveUnsavedChangesAction.java | 0 .../app/action/AbstractViewAction.java | 0 .../org/jhotdraw/app/action/ActionUtil.java | 0 .../jhotdraw/app/action/app/AboutAction.java | 0 .../action/app/AbstractPreferencesAction.java | 0 .../jhotdraw/app/action/app/ExitAction.java | 0 .../app/action/app/OpenApplicationAction.java | 0 .../action/app/OpenApplicationFileAction.java | 0 .../app/PrintApplicationFileAction.java | 0 .../action/app/ReOpenApplicationAction.java | 0 .../jhotdraw/app/action/app/package-info.java | 0 .../app/action/edit/AbstractFindAction.java | 0 .../action/edit/AbstractSelectionAction.java | 0 .../app/action/edit/ClearSelectionAction.java | 0 .../jhotdraw/app/action/edit/CopyAction.java | 0 .../jhotdraw/app/action/edit/CutAction.java | 0 .../app/action/edit/DeleteAction.java | 0 .../app/action/edit/DuplicateAction.java | 0 .../jhotdraw/app/action/edit/PasteAction.java | 0 .../jhotdraw/app/action/edit/RedoAction.java | 0 .../app/action/edit/SelectAllAction.java | 0 .../jhotdraw/app/action/edit/UndoAction.java | 0 .../app/action/edit/package-info.java | 0 .../app/action/file/ClearFileAction.java | 0 .../file/ClearRecentFilesMenuAction.java | 0 .../app/action/file/CloseFileAction.java | 0 .../app/action/file/ExportFileAction.java | 0 .../app/action/file/LoadDirectoryAction.java | 0 .../app/action/file/LoadFileAction.java | 0 .../app/action/file/LoadRecentFileAction.java | 0 .../app/action/file/NewFileAction.java | 0 .../app/action/file/NewWindowAction.java | 0 .../app/action/file/OpenDirectoryAction.java | 0 .../app/action/file/OpenFileAction.java | 0 .../app/action/file/OpenRecentFileAction.java | 0 .../app/action/file/PrintFileAction.java | 0 .../app/action/file/SaveFileAction.java | 0 .../app/action/file/SaveFileAsAction.java | 0 .../app/action/file/package-info.java | 0 .../jhotdraw/app/action/images/editCopy.png | Bin .../jhotdraw/app/action/images/editCut.png | Bin .../jhotdraw/app/action/images/editPaste.png | Bin .../jhotdraw/app/action/images/editRedo.png | Bin .../jhotdraw/app/action/images/editUndo.png | Bin .../jhotdraw/app/action/images/fileNew.png | Bin .../jhotdraw/app/action/images/fileOpen.png | Bin .../jhotdraw/app/action/images/filePrint.png | Bin .../jhotdraw/app/action/images/fileSave.png | Bin .../jhotdraw/app/action/images/spacerIcon.png | Bin .../org/jhotdraw/app/action/package-info.java | 0 .../action/view/ToggleViewPropertyAction.java | 0 .../app/action/view/ViewPropertyAction.java | 0 .../app/action/view/package-info.java | 0 .../action/window/ArrangeWindowsAction.java | 0 .../app/action/window/FocusWindowAction.java | 0 .../action/window/MaximizeWindowAction.java | 0 .../action/window/MinimizeWindowAction.java | 0 .../action/window/TogglePaletteAction.java | 0 .../action/window/ToggleToolBarAction.java | 0 .../action/window/ToggleVisibleAction.java | 0 .../app/action/window/package-info.java | 0 .../java/org/jhotdraw/app/osx/OSXAdapter.java | 0 .../jhotdraw/app/osx/OSXPaletteHandler.java | 0 .../org/jhotdraw/app/osx/package-info.java | 0 .../java/org/jhotdraw/app/package-info.java | 0 .../org/jhotdraw/app/resources/editCopy.png | Bin .../org/jhotdraw/app/resources/editCut.png | Bin .../org/jhotdraw/app/resources/editPaste.png | Bin .../org/jhotdraw/app/resources/editRedo.png | Bin .../org/jhotdraw/app/resources/editUndo.png | Bin .../org/jhotdraw/app/resources/fileNew.png | Bin .../org/jhotdraw/app/resources/fileOpen.png | Bin .../org/jhotdraw/app/resources/filePrint.png | Bin .../org/jhotdraw/app/resources/fileSave.png | Bin .../org/jhotdraw/app/resources/spacerIcon.png | Bin .../java/org/jhotdraw/beans/AbstractBean.java | 0 .../jhotdraw/beans/PropertyChangeEdit.java | 0 .../beans/WeakPropertyChangeListener.java | 0 .../java/org/jhotdraw/beans/package-info.java | 0 .../color/AbstractColorSlidersModel.java | 0 .../AbstractColorWheelImageProducer.java | 0 .../jhotdraw/color/AbstractHarmonicRule.java | 0 .../org/jhotdraw/color/CIELABColorSpace.java | 0 .../jhotdraw/color/CIELCHabColorSpace.java | 0 ...CIEXYChromaticityDiagramImageProducer.java | 0 .../jhotdraw/color/CMYKGenericColorSpace.java | 0 .../jhotdraw/color/CMYKNominalColorSpace.java | 0 .../jhotdraw/color/ColorListCellRenderer.java | 0 .../org/jhotdraw/color/ColorSliderModel.java | 0 .../org/jhotdraw/color/ColorSliderUI.java | 0 .../color/ColorSquareImageProducer.java | 0 .../color/ColorTrackImageProducer.java | 0 .../java/org/jhotdraw/color/ColorUtil.java | 0 .../org/jhotdraw/color/ColorWheelChooser.form | 0 .../org/jhotdraw/color/ColorWheelChooser.java | 0 .../color/ComplexColorWheelImageProducer.java | 0 .../org/jhotdraw/color/CompositeColor.java | 0 .../color/DefaultColorSliderModel.java | 0 .../color/DefaultHarmonicColorModel.java | 0 .../jhotdraw/color/Generic CMYK Profile.icc | Bin .../org/jhotdraw/color/HSBColorSpace.java | 0 .../org/jhotdraw/color/HSLColorSpace.java | 0 .../HSLHarmonicColorWheelImageProducer.java | 0 .../color/HSLPhysiologicColorSpace.java | 0 .../org/jhotdraw/color/HSVColorSpace.java | 0 .../HSVHarmonicColorWheelImageProducer.java | 0 .../color/HSVPhysiologicColorSpace.java | 0 .../jhotdraw/color/HarmonicColorModel.java | 0 .../java/org/jhotdraw/color/HarmonicRule.java | 0 .../java/org/jhotdraw/color/JColorWheel.form | 0 .../java/org/jhotdraw/color/JColorWheel.java | 0 .../jhotdraw/color/JHarmonicColorWheel.form | 0 .../jhotdraw/color/JHarmonicColorWheel.java | 0 .../org/jhotdraw/color/NamedColorSpace.java | 0 .../color/PolarColorWheelImageProducer.java | 0 .../QuantizingColorWheelImageProducer.java | 0 .../jhotdraw/color/SimpleHarmonicRule.java | 0 .../color/images/Slider.northThumbs.small.png | Bin .../color/images/Slider.westThumbs.small.png | Bin .../java/org/jhotdraw/color/package-info.java | 0 .../AbstractAttributedCompositeFigure.java | 0 .../AbstractAttributedDecoratedFigure.java | 0 .../draw/AbstractAttributedFigure.java | 0 .../draw/AbstractCompositeFigure.java | 0 .../jhotdraw/draw/AbstractConstrainer.java | 0 .../org/jhotdraw/draw/AbstractDrawing.java | 0 .../org/jhotdraw/draw/AbstractFigure.java | 0 .../java/org/jhotdraw/draw/AttributeKey.java | 0 .../java/org/jhotdraw/draw/AttributeKeys.java | 0 .../java/org/jhotdraw/draw/BezierFigure.java | 0 .../org/jhotdraw/draw/CompositeFigure.java | 0 .../org/jhotdraw/draw/ConnectionFigure.java | 0 .../java/org/jhotdraw/draw/Constrainer.java | 0 .../org/jhotdraw/draw/DecoratedFigure.java | 0 .../org/jhotdraw/draw/DefaultDrawing.java | 0 .../jhotdraw/draw/DefaultDrawingEditor.java | 0 .../org/jhotdraw/draw/DefaultDrawingView.form | 0 .../org/jhotdraw/draw/DefaultDrawingView.java | 0 .../draw/DefaultDrawingViewBeanInfo.java | 0 .../DefaultDrawingViewTransferHandler.java | 0 .../java/org/jhotdraw/draw/DiamondFigure.java | 0 .../main/java/org/jhotdraw/draw/Drawing.java | 0 .../java/org/jhotdraw/draw/DrawingEditor.java | 0 .../org/jhotdraw/draw/DrawingEditorProxy.java | 0 .../java/org/jhotdraw/draw/DrawingView.java | 0 .../java/org/jhotdraw/draw/EllipseFigure.java | 0 .../main/java/org/jhotdraw/draw/Figure.java | 0 .../jhotdraw/draw/FigureLayerComparator.java | 0 .../draw/GraphicalCompositeFigure.java | 0 .../org/jhotdraw/draw/GridConstrainer.java | 0 .../java/org/jhotdraw/draw/GroupFigure.java | 0 .../java/org/jhotdraw/draw/ImageFigure.java | 0 .../org/jhotdraw/draw/ImageHolderFigure.java | 0 .../java/org/jhotdraw/draw/LabelFigure.java | 0 .../draw/LabeledLineConnectionFigure.java | 0 .../java/org/jhotdraw/draw/Labels.properties | 0 .../org/jhotdraw/draw/Labels_de.properties | 0 .../jhotdraw/draw/LineConnectionFigure.java | 0 .../java/org/jhotdraw/draw/LineFigure.java | 0 .../java/org/jhotdraw/draw/ListFigure.java | 0 .../draw/QuadTreeCompositeFigure.java | 0 .../org/jhotdraw/draw/QuadTreeDrawing.java | 0 .../org/jhotdraw/draw/RectangleFigure.java | 0 .../org/jhotdraw/draw/RotationDirection.java | 0 .../jhotdraw/draw/RoundRectangleFigure.java | 0 .../org/jhotdraw/draw/TextAreaFigure.java | 0 .../java/org/jhotdraw/draw/TextFigure.java | 0 .../org/jhotdraw/draw/TextHolderFigure.java | 0 .../jhotdraw/draw/TranslationDirection.java | 0 .../org/jhotdraw/draw/TriangleFigure.java | 0 .../action/AbstractDrawingEditorAction.java | 0 .../action/AbstractDrawingViewAction.java | 0 .../draw/action/AbstractSelectedAction.java | 0 .../org/jhotdraw/draw/action/AlignAction.java | 0 .../draw/action/ApplyAttributesAction.java | 0 .../jhotdraw/draw/action/AttributeAction.java | 0 .../draw/action/AttributeToggler.java | 0 .../draw/action/BringToFrontAction.java | 0 .../jhotdraw/draw/action/ButtonFactory.java | 0 .../org/jhotdraw/draw/action/ColorIcon.java | 0 .../draw/action/DefaultAttributeAction.java | 0 .../draw/action/DrawingAttributeAction.java | 0 .../action/DrawingColorChooserAction.java | 0 .../action/DrawingColorChooserHandler.java | 0 .../draw/action/DrawingColorIcon.java | 0 .../draw/action/EditCanvasAction.java | 0 .../jhotdraw/draw/action/EditCanvasPanel.form | 0 .../jhotdraw/draw/action/EditCanvasPanel.java | 0 .../jhotdraw/draw/action/EditGridAction.java | 0 .../jhotdraw/draw/action/EditGridPanel.form | 0 .../jhotdraw/draw/action/EditGridPanel.java | 0 .../draw/action/EditorColorChooserAction.java | 0 .../jhotdraw/draw/action/EditorColorIcon.java | 0 .../draw/action/FontChooserHandler.java | 0 .../org/jhotdraw/draw/action/GroupAction.java | 0 .../draw/action/ImageBevelBorder.java | 0 .../IncreaseHandleDetailLevelAction.java | 0 .../draw/action/LineDecorationIcon.java | 0 .../org/jhotdraw/draw/action/MoveAction.java | 0 .../draw/action/MoveConstrainedAction.java | 0 .../draw/action/PickAttributesAction.java | 0 .../draw/action/SelectSameAction.java | 0 .../action/SelectionColorChooserAction.java | 0 .../action/SelectionColorChooserHandler.java | 0 .../draw/action/SelectionColorIcon.java | 0 .../draw/action/SendToBackAction.java | 0 .../org/jhotdraw/draw/action/StrokeIcon.java | 0 .../draw/action/ToggleGridAction.java | 0 .../jhotdraw/draw/action/UngroupAction.java | 0 .../org/jhotdraw/draw/action/ZoomAction.java | 0 .../draw/action/ZoomEditorAction.java | 0 .../jhotdraw/draw/action/images/actions.png | Bin .../jhotdraw/draw/action/images/alignEast.png | Bin .../jhotdraw/draw/action/images/alignGrid.png | Bin .../draw/action/images/alignGridSmall.png | Bin .../draw/action/images/alignHorizontal.png | Bin .../draw/action/images/alignNorth.png | Bin .../draw/action/images/alignSouth.png | Bin .../draw/action/images/alignVertical.png | Bin .../jhotdraw/draw/action/images/alignWest.png | Bin .../images/attribute.color.colorChooser.png | Bin .../action/images/attribute.color.noColor.png | Bin .../draw/action/images/attributeFillColor.png | Bin .../draw/action/images/attributeFont.png | Bin .../draw/action/images/attributeFontBold.png | Bin .../action/images/attributeFontBold_de.png | Bin .../action/images/attributeFontItalic.png | Bin .../action/images/attributeFontItalic_de.png | Bin .../action/images/attributeFontUnderline.png | Bin .../images/attributeFontUnderline_de.png | Bin .../draw/action/images/attributeOpacity.png | Bin .../draw/action/images/attributeStrokeCap.png | Bin .../action/images/attributeStrokeColor.png | Bin .../action/images/attributeStrokeDashes.png | Bin .../images/attributeStrokeDecoration.png | Bin .../action/images/attributeStrokeJoin.png | Bin .../images/attributeStrokePlacement.png | Bin .../action/images/attributeStrokeType.png | Bin .../action/images/attributeStrokeWidth.png | Bin .../draw/action/images/attributeTextColor.png | Bin .../draw/action/images/attributesApply.png | Bin .../draw/action/images/attributesPick.png | Bin .../draw/action/images/createArrow.png | Bin .../action/images/createCurvedConnection.png | Bin .../draw/action/images/createDiamond.png | Bin .../action/images/createElbowConnection.png | Bin .../draw/action/images/createEllipse.png | Bin .../draw/action/images/createImage.png | Bin .../draw/action/images/createLine.png | Bin .../action/images/createLineConnection.png | Bin .../draw/action/images/createPolygon.png | Bin .../draw/action/images/createRectangle.png | Bin .../action/images/createRoundRectangle.png | Bin .../draw/action/images/createScribble.png | Bin .../draw/action/images/createText.png | Bin .../draw/action/images/createTextArea.png | Bin .../draw/action/images/createTriangle.png | Bin .../jhotdraw/draw/action/images/editCopy.png | Bin .../jhotdraw/draw/action/images/editCut.png | Bin .../jhotdraw/draw/action/images/editPaste.png | Bin .../jhotdraw/draw/action/images/editRedo.png | Bin .../jhotdraw/draw/action/images/editUndo.png | Bin .../jhotdraw/draw/action/images/fileNew.png | Bin .../jhotdraw/draw/action/images/fileOpen.png | Bin .../jhotdraw/draw/action/images/filePrint.png | Bin .../jhotdraw/draw/action/images/fileSave.png | Bin .../jhotdraw/draw/action/images/moveDown.png | Bin .../jhotdraw/draw/action/images/moveEast.png | Bin .../jhotdraw/draw/action/images/moveNorth.png | Bin .../jhotdraw/draw/action/images/moveSouth.png | Bin .../draw/action/images/moveToBack.png | Bin .../draw/action/images/moveToFront.png | Bin .../jhotdraw/draw/action/images/moveUp.png | Bin .../jhotdraw/draw/action/images/moveWest.png | Bin .../jhotdraw/draw/action/images/popupIcon.png | Bin .../draw/action/images/selectionGroup.png | Bin .../draw/action/images/selectionTool.png | Bin .../draw/action/images/selectionUngroup.png | Bin .../draw/action/images/spacerIcon.png | Bin .../jhotdraw/draw/action/package-info.java | 0 .../draw/connector/AbstractConnector.java | 0 .../draw/connector/ChopBezierConnector.java | 0 .../draw/connector/ChopDiamondConnector.java | 0 .../draw/connector/ChopEllipseConnector.java | 0 .../connector/ChopRectangleConnector.java | 0 .../ChopRoundRectangleConnector.java | 0 .../draw/connector/ChopTriangleConnector.java | 0 .../jhotdraw/draw/connector/Connector.java | 0 .../draw/connector/LocatorConnector.java | 0 .../connector/StickyRectangleConnector.java | 0 .../jhotdraw/draw/connector/package-info.java | 0 .../decoration/AbstractLineDecoration.java | 0 .../jhotdraw/draw/decoration/ArrowTip.java | 0 .../decoration/CompositeLineDecoration.java | 0 .../draw/decoration/GeneralPathTip.java | 0 .../draw/decoration/LineDecoration.java | 0 .../draw/decoration/PerpendicularBar.java | 0 .../draw/decoration/package-info.java | 0 .../event/AbstractAttributeEditorHandler.java | 0 .../draw/event/AttributeChangeEdit.java | 0 .../jhotdraw/draw/event/BezierNodeEdit.java | 0 .../draw/event/CompositeFigureEdit.java | 0 .../draw/event/CompositeFigureEvent.java | 0 .../draw/event/CompositeFigureListener.java | 0 .../event/DrawingAttributeEditorHandler.java | 0 .../draw/event/DrawingComponentRepainter.java | 0 .../jhotdraw/draw/event/FigureAdapter.java | 0 .../event/FigureAttributeEditorHandler.java | 0 .../org/jhotdraw/draw/event/FigureEvent.java | 0 .../jhotdraw/draw/event/FigureListener.java | 0 .../draw/event/FigureSelectionEvent.java | 0 .../draw/event/FigureSelectionListener.java | 0 .../org/jhotdraw/draw/event/HandleEvent.java | 0 .../jhotdraw/draw/event/HandleListener.java | 0 .../draw/event/HandleMulticaster.java | 0 .../event/SelectionComponentDisplayer.java | 0 .../event/SelectionComponentRepainter.java | 0 .../jhotdraw/draw/event/SetBoundsEdit.java | 0 .../org/jhotdraw/draw/event/ToolAdapter.java | 0 .../org/jhotdraw/draw/event/ToolEvent.java | 0 .../org/jhotdraw/draw/event/ToolListener.java | 0 .../jhotdraw/draw/event/TransformEdit.java | 0 .../draw/event/TransformRestoreEdit.java | 0 .../org/jhotdraw/draw/event/package-info.java | 0 .../jhotdraw/draw/gui/JAttributeSlider.form | 0 .../jhotdraw/draw/gui/JAttributeSlider.java | 0 .../draw/gui/JAttributeSliderBeanInfo.java | 0 .../jhotdraw/draw/gui/JAttributeTextArea.form | 0 .../jhotdraw/draw/gui/JAttributeTextArea.java | 0 .../draw/gui/JAttributeTextAreaBeanInfo.java | 0 .../draw/gui/JAttributeTextField.form | 0 .../draw/gui/JAttributeTextField.java | 0 .../draw/gui/JAttributeTextFieldBeanInfo.java | 0 .../org/jhotdraw/draw/gui/package-info.java | 0 .../draw/handle/AbstractConnectionHandle.java | 0 .../jhotdraw/draw/handle/AbstractHandle.java | 0 .../draw/handle/AbstractRotateHandle.java | 0 .../draw/handle/BezierControlPointHandle.java | 0 .../draw/handle/BezierNodeHandle.java | 0 .../draw/handle/BezierOutlineHandle.java | 0 .../draw/handle/BezierScaleHandle.java | 0 .../draw/handle/BoundsOutlineHandle.java | 0 .../org/jhotdraw/draw/handle/CloseHandle.java | 0 .../draw/handle/ConnectionEndHandle.java | 0 .../draw/handle/ConnectionStartHandle.java | 0 .../jhotdraw/draw/handle/ConnectorHandle.java | 0 .../org/jhotdraw/draw/handle/DragHandle.java | 0 .../jhotdraw/draw/handle/FontSizeHandle.java | 0 .../java/org/jhotdraw/draw/handle/Handle.java | 0 .../draw/handle/HandleAttributeKeys.java | 0 .../jhotdraw/draw/handle/LocatorHandle.java | 0 .../org/jhotdraw/draw/handle/MoveHandle.java | 0 .../org/jhotdraw/draw/handle/NullHandle.java | 0 .../draw/handle/OrientationHandle.java | 0 .../jhotdraw/draw/handle/ResizeHandleKit.java | 0 .../jhotdraw/draw/handle/RotateHandle.java | 0 .../handle/RoundRectangleRadiusHandle.java | 0 .../draw/handle/TextOverflowHandle.java | 0 .../draw/handle/TransformHandleKit.java | 0 .../jhotdraw/draw/handle/package-info.java | 0 .../draw/io/DOMStorableInputOutputFormat.java | 0 .../jhotdraw/draw/io/ImageInputFormat.java | 0 .../jhotdraw/draw/io/ImageOutputFormat.java | 0 .../org/jhotdraw/draw/io/InputFormat.java | 0 .../org/jhotdraw/draw/io/OutputFormat.java | 0 .../io/SerializationInputOutputFormat.java | 0 .../org/jhotdraw/draw/io/TextInputFormat.java | 0 .../org/jhotdraw/draw/io/package-info.java | 0 .../draw/layouter/AbstractLayouter.java | 0 .../draw/layouter/HorizontalLayouter.java | 0 .../org/jhotdraw/draw/layouter/Layouter.java | 0 .../draw/layouter/LocatorLayouter.java | 0 .../draw/layouter/VerticalLayouter.java | 0 .../jhotdraw/draw/layouter/package-info.java | 0 .../org/jhotdraw/draw/liner/CurvedLiner.java | 0 .../org/jhotdraw/draw/liner/ElbowLiner.java | 0 .../java/org/jhotdraw/draw/liner/Liner.java | 0 .../org/jhotdraw/draw/liner/SlantedLiner.java | 0 .../org/jhotdraw/draw/liner/package-info.java | 0 .../draw/locator/AbstractLocator.java | 0 .../draw/locator/BezierLabelLocator.java | 0 .../draw/locator/BezierPointLocator.java | 0 .../draw/locator/FontSizeLocator.java | 0 .../org/jhotdraw/draw/locator/Locator.java | 0 .../locator/RelativeDecoratorLocator.java | 0 .../draw/locator/RelativeLocator.java | 0 .../jhotdraw/draw/locator/package-info.java | 0 .../java/org/jhotdraw/draw/package-info.java | 0 .../jhotdraw/draw/print/DrawingPageable.java | 0 .../org/jhotdraw/draw/print/package-info.java | 0 .../jhotdraw/draw/text/FloatingTextArea.java | 0 .../jhotdraw/draw/text/FloatingTextField.java | 0 .../org/jhotdraw/draw/text/package-info.java | 0 .../org/jhotdraw/draw/tool/AbstractTool.java | 0 .../org/jhotdraw/draw/tool/BezierTool.java | 0 .../jhotdraw/draw/tool/ConnectionTool.java | 0 .../org/jhotdraw/draw/tool/CreationTool.java | 0 .../draw/tool/DefaultDragTracker.java | 0 .../draw/tool/DefaultHandleTracker.java | 0 .../draw/tool/DefaultSelectAreaTracker.java | 0 .../draw/tool/DelegationSelectionTool.java | 0 .../org/jhotdraw/draw/tool/DnDTracker.java | 0 .../org/jhotdraw/draw/tool/DragTracker.java | 0 .../org/jhotdraw/draw/tool/HandleTracker.java | 0 .../org/jhotdraw/draw/tool/ImageTool.java | 0 .../jhotdraw/draw/tool/SelectAreaTracker.java | 0 .../org/jhotdraw/draw/tool/SelectionTool.java | 0 .../draw/tool/TextAreaCreationTool.java | 0 .../draw/tool/TextAreaEditingTool.java | 0 .../jhotdraw/draw/tool/TextCreationTool.java | 0 .../jhotdraw/draw/tool/TextEditingTool.java | 0 .../java/org/jhotdraw/draw/tool/Tool.java | 0 .../org/jhotdraw/draw/tool/package-info.java | 0 .../main/java/org/jhotdraw/geom/Bezier.java | 0 .../java/org/jhotdraw/geom/BezierPath.java | 0 .../org/jhotdraw/geom/BezierPathIterator.java | 0 .../java/org/jhotdraw/geom/ConvexHull.java | 0 .../org/jhotdraw/geom/Dimension2DDouble.java | 0 .../java/org/jhotdraw/geom/DoubleStroke.java | 0 .../main/java/org/jhotdraw/geom/Geom.java | 0 .../java/org/jhotdraw/geom/GrowStroke.java | 0 .../main/java/org/jhotdraw/geom/Insets2D.java | 0 .../java/org/jhotdraw/geom/Polygon2D.java | 0 .../main/java/org/jhotdraw/geom/QuadTree.java | 0 .../main/java/org/jhotdraw/geom/Shapes.java | 0 .../java/org/jhotdraw/geom/package-info.java | 0 .../java/org/jhotdraw/gui/Arrangeable.java | 0 .../org/jhotdraw/gui/AttributeEditor.java | 0 .../java/org/jhotdraw/gui/DisclosureIcon.java | 0 .../org/jhotdraw/gui/EditableComponent.java | 0 .../main/java/org/jhotdraw/gui/EmptyIcon.java | 0 .../org/jhotdraw/gui/JComponentPopup.java | 0 .../org/jhotdraw/gui/JDisclosureToolBar.form | 0 .../org/jhotdraw/gui/JDisclosureToolBar.java | 0 .../gui/JDisclosureToolBarBeanInfo.java | 0 .../org/jhotdraw/gui/JFileURIChooser.java | 0 .../java/org/jhotdraw/gui/JFontChooser.form | 0 .../java/org/jhotdraw/gui/JFontChooser.java | 0 .../gui/JLifeFormattedTexAreaBeanInfo.java | 0 .../jhotdraw/gui/JLifeFormattedTextArea.form | 0 .../jhotdraw/gui/JLifeFormattedTextArea.java | 0 .../jhotdraw/gui/JLifeFormattedTextField.form | 0 .../jhotdraw/gui/JLifeFormattedTextField.java | 0 .../gui/JLifeFormattedTextFieldBeanInfo.java | 0 .../org/jhotdraw/gui/JMDIDesktopPane.java | 0 .../java/org/jhotdraw/gui/JPopupButton.form | 0 .../java/org/jhotdraw/gui/JPopupButton.java | 0 .../jhotdraw/gui/JPopupButtonBeanInfo.java | 0 .../main/java/org/jhotdraw/gui/JSheet.java | 0 .../java/org/jhotdraw/gui/Labels.properties | 0 .../org/jhotdraw/gui/Labels_de.properties | 0 .../jhotdraw/gui/PlacardScrollPaneLayout.java | 0 .../java/org/jhotdraw/gui/ToolBarLayout.java | 0 .../java/org/jhotdraw/gui/URIChooser.java | 0 .../org/jhotdraw/gui/VerticalGridLayout.java | 0 .../main/java/org/jhotdraw/gui/Worker.java | 0 .../gui/datatransfer/AWTClipboard.java | 0 .../gui/datatransfer/AbstractClipboard.java | 0 .../datatransfer/AbstractTransferable.java | 0 .../gui/datatransfer/ClipboardUtil.java | 0 .../datatransfer/CompositeTransferable.java | 0 .../gui/datatransfer/ImageTransferable.java | 0 .../datatransfer/InputStreamTransferable.java | 0 .../gui/datatransfer/JNLPClipboard.java | 0 .../gui/datatransfer/OSXClipboard.java | 0 .../gui/datatransfer/package-info.java | 0 .../jhotdraw/gui/event/GenericListener.java | 0 .../org/jhotdraw/gui/event/SheetEvent.java | 0 .../org/jhotdraw/gui/event/SheetListener.java | 0 .../org/jhotdraw/gui/event/package-info.java | 0 .../gui/filechooser/ExtensionFileFilter.java | 0 .../gui/filechooser/package-info.java | 0 .../fontchooser/AbstractFontChooserModel.java | 0 .../fontchooser/DefaultFontChooserModel.java | 0 .../gui/fontchooser/FontChooserModel.java | 0 .../gui/fontchooser/FontCollectionNode.java | 0 .../gui/fontchooser/FontFaceNode.java | 0 .../gui/fontchooser/FontFamilyNode.java | 0 .../gui/fontchooser/package-info.java | 0 .../java/org/jhotdraw/gui/package-info.java | 0 .../org/jhotdraw/gui/plaf/FontChooserUI.java | 0 .../org/jhotdraw/gui/plaf/package-info.java | 0 .../gui/plaf/palette/BackdropBorder.java | 0 .../jhotdraw/gui/plaf/palette/MultiIcon.java | 0 .../gui/plaf/palette/PaletteBorders.java | 0 .../gui/plaf/palette/PaletteButtonBorder.java | 0 .../gui/plaf/palette/PaletteButtonUI.java | 0 .../plaf/palette/PaletteColorChooserUI.java | 0 .../plaf/palette/PaletteColorSliderUI.java | 0 .../PaletteFontChooserPreviewPanel.form | 0 .../PaletteFontChooserPreviewPanel.java | 0 .../PaletteFontChooserSelectionPanel.form | 0 .../PaletteFontChooserSelectionPanel.java | 0 .../plaf/palette/PaletteFontChooserUI.java | 0 .../palette/PaletteFormattedTextFieldUI.java | 0 .../gui/plaf/palette/PaletteLabelUI.java | 0 .../plaf/palette/PaletteLazyActionMap.java | 0 .../plaf/palette/PaletteListCellRenderer.java | 0 .../gui/plaf/palette/PaletteListUI.java | 0 .../gui/plaf/palette/PaletteLookAndFeel.java | 0 .../gui/plaf/palette/PaletteMenuItemUI.java | 0 .../gui/plaf/palette/PalettePanelUI.java | 0 .../gui/plaf/palette/PaletteRootPaneUI.java | 0 .../plaf/palette/PaletteSliderThumbIcon.java | 0 .../gui/plaf/palette/PaletteSliderUI.java | 0 .../gui/plaf/palette/PaletteTabbedPaneUI.java | 0 .../palette/PaletteTextComponentBorder.java | 0 .../gui/plaf/palette/PaletteTextFieldUI.java | 0 .../plaf/palette/PaletteToolBarBorder.java | 0 .../gui/plaf/palette/PaletteToolBarUI.java | 0 .../gui/plaf/palette/PaletteUtilities.java | 0 .../plaf/palette/colorchooser/ColorIcon.java | 0 .../ColorSliderTextFieldHandler.java | 0 .../colorchooser/PaletteCMYKChooser.form | 0 .../colorchooser/PaletteCMYKChooser.java | 0 .../PaletteColorChooserMainPanel.form | 0 .../PaletteColorChooserMainPanel.java | 0 .../PaletteColorChooserPreviewPanel.form | 0 .../PaletteColorChooserPreviewPanel.java | 0 .../colorchooser/PaletteColorSliderModel.java | 0 .../PaletteColorSlidersChooser.form | 0 .../PaletteColorSlidersChooser.java | 0 .../PaletteColorWheelChooser.form | 0 .../PaletteColorWheelChooser.java | 0 .../colorchooser/PaletteHSBChooser.form | 0 .../colorchooser/PaletteHSBChooser.java | 0 .../colorchooser/PaletteRGBChooser.form | 0 .../colorchooser/PaletteRGBChooser.java | 0 .../colorchooser/PaletteSwatchesChooser.form | 0 .../colorchooser/PaletteSwatchesChooser.java | 0 .../palette/colorchooser/package-info.java | 0 .../images/Slider.northThumbs.small.png | Bin .../images/Slider.westThumbs.small.png | Bin .../gui/plaf/palette/package-info.java | 0 .../main/java/org/jhotdraw/io/Base64.java | 0 .../jhotdraw/io/BoundedRangeInputStream.java | 0 .../org/jhotdraw/io/StreamPosTokenizer.java | 0 .../java/org/jhotdraw/io/package-info.java | 0 .../org/jhotdraw/net/ClientHttpRequest.java | 0 .../main/java/org/jhotdraw/net/URIUtil.java | 0 .../java/org/jhotdraw/net/package-info.java | 0 .../main/java/org/jhotdraw/overview.html | 0 .../color/CIEXYChromaticityDiagram.form | 0 .../color/CIEXYChromaticityDiagram.java | 0 .../org/jhotdraw/samples/color/JMixer.form | 0 .../org/jhotdraw/samples/color/JMixer.java | 0 .../samples/color/WheelsAndSlidersMain.form | 0 .../samples/color/WheelsAndSlidersMain.java | 0 .../jhotdraw/samples/color/package-info.java | 0 .../org/jhotdraw/samples/draw/DrawApplet.form | 0 .../org/jhotdraw/samples/draw/DrawApplet.html | 0 .../org/jhotdraw/samples/draw/DrawApplet.java | 0 .../samples/draw/DrawApplicationModel.java | 0 .../samples/draw/DrawFigureFactory.java | 0 .../samples/draw/DrawLiveConnectApplet.form | 0 .../samples/draw/DrawLiveConnectApplet.html | 0 .../samples/draw/DrawLiveConnectApplet.java | 0 .../org/jhotdraw/samples/draw/DrawView.form | 0 .../org/jhotdraw/samples/draw/DrawView.java | 0 .../jhotdraw/samples/draw/DrawingPanel.form | 0 .../jhotdraw/samples/draw/DrawingPanel.java | 0 .../samples/draw/DrawingPanelBeanInfo.java | 0 .../java/org/jhotdraw/samples/draw/Main.java | 0 .../jhotdraw/samples/draw/package-info.java | 0 .../org/jhotdraw/samples/draw/plasmadraw.xml | 0 .../samples/font/FontChooserMain.form | 0 .../samples/font/FontChooserMain.java | 0 .../jhotdraw/samples/font/package-info.java | 0 .../samples/mini/AnimationSample.form | 0 .../samples/mini/AnimationSample.java | 0 .../org/jhotdraw/samples/mini/BezierDemo.form | 0 .../org/jhotdraw/samples/mini/BezierDemo.java | 0 .../samples/mini/BorderRectangleFigure.java | 0 .../samples/mini/ConnectingFiguresSample.java | 0 .../samples/mini/CreationToolSample.java | 0 .../mini/DefaultDOMStorableSample.java | 0 .../samples/mini/DnDMultiEditorSample.java | 0 .../jhotdraw/samples/mini/EditorSample.java | 0 .../samples/mini/FileIconsSample.java | 0 .../LabeledLineConnectionFigureSample.java | 0 .../jhotdraw/samples/mini/LayouterSample.java | 0 .../mini/MovableChildFiguresSample.java | 0 .../samples/mini/MultiEditorSample.java | 0 .../samples/mini/SVGDrawingPanelSample.form | 0 .../samples/mini/SVGDrawingPanelSample.java | 0 .../samples/mini/SelectionToolSample.java | 0 .../mini/SmartConnectionFigureSample.java | 0 .../samples/mini/StraightLineFigure.java | 0 .../jhotdraw/samples/mini/package-info.java | 0 .../jhotdraw/samples/net/Labels.properties | 0 .../jhotdraw/samples/net/Labels_de.properties | 0 .../java/org/jhotdraw/samples/net/Main.java | 0 .../org/jhotdraw/samples/net/NetApplet.form | 0 .../org/jhotdraw/samples/net/NetApplet.java | 0 .../samples/net/NetApplicationModel.java | 0 .../org/jhotdraw/samples/net/NetFactory.java | 0 .../org/jhotdraw/samples/net/NetPanel.form | 0 .../org/jhotdraw/samples/net/NetPanel.java | 0 .../org/jhotdraw/samples/net/NetView.form | 0 .../org/jhotdraw/samples/net/NetView.java | 0 .../samples/net/figures/NodeFigure.java | 0 .../samples/net/figures/package-info.java | 0 .../samples/net/images/createLink.png | Bin .../samples/net/images/createNode.png | Bin .../jhotdraw/samples/net/package-info.java | 0 .../org/jhotdraw/samples/odg/Gradient.java | 0 .../jhotdraw/samples/odg/Labels.properties | 0 .../java/org/jhotdraw/samples/odg/Main.java | 0 .../samples/odg/ODGApplicationModel.java | 0 .../samples/odg/ODGAttributeKeys.java | 0 .../jhotdraw/samples/odg/ODGConstants.java | 0 .../org/jhotdraw/samples/odg/ODGDrawing.java | 0 .../jhotdraw/samples/odg/ODGDrawingPanel.form | 0 .../jhotdraw/samples/odg/ODGDrawingPanel.java | 0 .../samples/odg/ODGDrawingPanelBeanInfo.java | 0 .../samples/odg/ODGPropertiesPanel.form | 0 .../samples/odg/ODGPropertiesPanel.java | 0 .../odg/ODGPropertiesPanelBeanInfo.java | 0 .../org/jhotdraw/samples/odg/ODGView.form | 0 .../org/jhotdraw/samples/odg/ODGView.java | 0 .../org/jhotdraw/samples/odg/PathTool.java | 0 .../samples/odg/action/CombineAction.java | 0 .../samples/odg/action/SplitAction.java | 0 .../action/TogglePropertiesPanelAction.java | 0 .../samples/odg/action/package-info.java | 0 .../odg/figures/ODGAttributedFigure.java | 0 .../samples/odg/figures/ODGBezierFigure.java | 0 .../samples/odg/figures/ODGEllipseFigure.java | 0 .../samples/odg/figures/ODGFigure.java | 0 .../samples/odg/figures/ODGGroupFigure.java | 0 .../samples/odg/figures/ODGPathFigure.java | 0 .../odg/figures/ODGPathOutlineHandle.java | 0 .../samples/odg/figures/ODGRectFigure.java | 0 .../odg/figures/ODGRectRadiusHandle.java | 0 .../samples/odg/figures/package-info.java | 0 .../samples/odg/geom/EnhancedPath.java | 0 .../samples/odg/geom/package-info.java | 0 .../odg/io/DefaultODGFigureFactory.java | 0 .../samples/odg/io/ODGFigureFactory.java | 0 .../samples/odg/io/ODGInputFormat.java | 0 .../samples/odg/io/ODGStylesReader.java | 0 .../jhotdraw/samples/odg/io/package-info.java | 0 .../jhotdraw/samples/odg/package-info.java | 0 .../jhotdraw/samples/pert/Labels.properties | 0 .../samples/pert/Labels_de.properties | 0 .../java/org/jhotdraw/samples/pert/Main.java | 0 .../org/jhotdraw/samples/pert/PertApplet.form | 0 .../org/jhotdraw/samples/pert/PertApplet.java | 0 .../samples/pert/PertApplicationModel.java | 0 .../jhotdraw/samples/pert/PertFactory.java | 0 .../org/jhotdraw/samples/pert/PertPanel.form | 0 .../org/jhotdraw/samples/pert/PertPanel.java | 0 .../org/jhotdraw/samples/pert/PertView.form | 0 .../org/jhotdraw/samples/pert/PertView.java | 0 .../pert/figures/DependencyFigure.java | 0 .../pert/figures/SeparatorLineFigure.java | 0 .../samples/pert/figures/TaskFigure.java | 0 .../samples/pert/figures/package-info.java | 0 .../jhotdraw/samples/pert}/images/PERT1.gif | Bin .../jhotdraw/samples/pert}/images/PERT2.gif | Bin .../jhotdraw/samples/pert}/images/PERT3.gif | Bin .../samples/pert/images/createDependency.png | Bin .../samples/pert/images/createTask.png | Bin .../jhotdraw/samples/pert/package-info.java | 0 .../org/jhotdraw/samples/svg/Gradient.java | 0 .../jhotdraw/samples/svg/Labels.properties | 0 .../jhotdraw/samples/svg/Labels_de.properties | 0 .../jhotdraw/samples/svg/LinearGradient.java | 0 .../java/org/jhotdraw/samples/svg/Main.java | 0 .../org/jhotdraw/samples/svg/PathTool.java | 0 .../jhotdraw/samples/svg/RadialGradient.java | 0 .../org/jhotdraw/samples/svg/SVGApplet.form | 0 .../org/jhotdraw/samples/svg/SVGApplet.java | 0 .../samples/svg/SVGApplicationModel.java | 0 .../samples/svg/SVGAttributeKeys.java | 0 .../jhotdraw/samples/svg/SVGConstants.java | 0 .../samples/svg/SVGCreateFromFileTool.java | 0 .../jhotdraw/samples/svg/SVGDrawingPanel.form | 0 .../jhotdraw/samples/svg/SVGDrawingPanel.java | 0 .../samples/svg/SVGDrawingPanelBeanInfo.java | 0 .../org/jhotdraw/samples/svg/SVGView.form | 0 .../org/jhotdraw/samples/svg/SVGView.java | 0 .../samples/svg/action/CombineAction.java | 0 .../samples/svg/action/SplitAction.java | 0 .../samples/svg/action/ViewSourceAction.java | 0 .../samples/svg/action/images/actions.png | Bin .../samples/svg/action/images/alignEast.png | Bin .../samples/svg/action/images/alignGrid.png | Bin .../svg/action/images/alignHorizontal.png | Bin .../samples/svg/action/images/alignNorth.png | Bin .../samples/svg/action/images/alignSouth.png | Bin .../svg/action/images/alignVertical.png | Bin .../samples/svg/action/images/alignWest.png | Bin .../images/attribute.color.colorChooser.png | Bin .../action/images/attribute.color.noColor.png | Bin .../svg/action/images/attributeFillColor.png | Bin .../svg/action/images/attributeFont.png | Bin .../svg/action/images/attributeFontBold.png | Bin .../svg/action/images/attributeFontItalic.png | Bin .../svg/action/images/attributeFontSize.png | Bin .../action/images/attributeFontUnderline.png | Bin .../svg/action/images/attributeOpacity.png | Bin .../svg/action/images/attributeStrokeCap.png | Bin .../action/images/attributeStrokeColor.png | Bin .../action/images/attributeStrokeDashes.png | Bin .../images/attributeStrokeDecoration.png | Bin .../svg/action/images/attributeStrokeJoin.png | Bin .../action/images/attributeStrokeWidth.png | Bin .../svg/action/images/attributesApply.png | Bin .../svg/action/images/attributesPick.png | Bin .../samples/svg/action/images/createArrow.png | Bin .../svg/action/images/createEllipse.png | Bin .../samples/svg/action/images/createImage.png | Bin .../samples/svg/action/images/createLine.png | Bin .../svg/action/images/createPolygon.png | Bin .../svg/action/images/createRectangle.png | Bin .../svg/action/images/createScribble.png | Bin .../samples/svg/action/images/createText.png | Bin .../svg/action/images/createTextArea.png | Bin .../samples/svg/action/images/editRedo.png | Bin .../samples/svg/action/images/editUndo.png | Bin .../samples/svg/action/images/moveDown.png | Bin .../samples/svg/action/images/moveToBack.png | Bin .../samples/svg/action/images/moveToFront.png | Bin .../samples/svg/action/images/moveUp.png | Bin .../svg/action/images/selectionTool.png | Bin .../samples/svg/action/package-info.java | 0 .../svg/figures/ConvexHullOutlineHandle.java | 0 .../samples/svg/figures/LinkHandle.java | 0 .../svg/figures/SVGAttributedFigure.java | 0 .../samples/svg/figures/SVGBezierFigure.java | 0 .../samples/svg/figures/SVGEllipseFigure.java | 0 .../samples/svg/figures/SVGFigure.java | 0 .../samples/svg/figures/SVGGroupFigure.java | 0 .../samples/svg/figures/SVGImageFigure.java | 0 .../samples/svg/figures/SVGPathFigure.java | 0 .../svg/figures/SVGPathOutlineHandle.java | 0 .../samples/svg/figures/SVGRectFigure.java | 0 .../svg/figures/SVGRectRadiusHandle.java | 0 .../svg/figures/SVGTextAreaFigure.java | 0 .../samples/svg/figures/SVGTextFigure.java | 0 .../samples/svg/figures/package-info.java | 0 .../samples/svg/gui/AbstractToolBar.form | 0 .../samples/svg/gui/AbstractToolBar.java | 0 .../svg/gui/AbstractToolBarBeanInfo.java | 0 .../samples/svg/gui/ActionsToolBar.form | 0 .../samples/svg/gui/ActionsToolBar.java | 0 .../svg/gui/ActionsToolBarBeanInfo.java | 0 .../samples/svg/gui/AlignToolBar.form | 0 .../samples/svg/gui/AlignToolBar.java | 0 .../samples/svg/gui/AlignToolBarBeanInfo.java | 0 .../samples/svg/gui/ArrangeToolBar.form | 0 .../samples/svg/gui/ArrangeToolBar.java | 0 .../svg/gui/ArrangeToolBarBeanInfo.java | 0 .../samples/svg/gui/CanvasToolBar.form | 0 .../samples/svg/gui/CanvasToolBar.java | 0 .../svg/gui/CanvasToolBarBeanInfo.java | 0 .../samples/svg/gui/DrawingComponent.java | 0 .../samples/svg/gui/DrawingOpacityIcon.java | 0 .../samples/svg/gui/FigureToolBar.form | 0 .../samples/svg/gui/FigureToolBar.java | 0 .../svg/gui/FigureToolBarBeanInfo.java | 0 .../jhotdraw/samples/svg/gui/FillToolBar.form | 0 .../jhotdraw/samples/svg/gui/FillToolBar.java | 0 .../samples/svg/gui/FillToolBarBeanInfo.java | 0 .../jhotdraw/samples/svg/gui/FontToolBar.form | 0 .../jhotdraw/samples/svg/gui/FontToolBar.java | 0 .../samples/svg/gui/FontToolBarBeanInfo.java | 0 .../jhotdraw/samples/svg/gui/LinkToolBar.form | 0 .../jhotdraw/samples/svg/gui/LinkToolBar.java | 0 .../samples/svg/gui/LinkToolBarBeanInfo.java | 0 .../samples/svg/gui/MessagePanel.form | 0 .../samples/svg/gui/MessagePanel.java | 0 .../samples/svg/gui/ProgressIndicator.form | 0 .../samples/svg/gui/ProgressIndicator.java | 0 .../samples/svg/gui/SelectionOpacityIcon.java | 0 .../gui/ServerAuthenticationException.java | 0 .../samples/svg/gui/StrokeToolBar.form | 0 .../samples/svg/gui/StrokeToolBar.java | 0 .../svg/gui/StrokeToolBarBeanInfo.java | 0 .../samples/svg/gui/SummaryToolBar.form | 0 .../samples/svg/gui/SummaryToolBar.java | 0 .../svg/gui/SummaryToolBarBeanInfo.java | 0 .../samples/svg/gui/ToolsToolBar.form | 0 .../samples/svg/gui/ToolsToolBar.java | 0 .../samples/svg/gui/ToolsToolBarBeanInfo.java | 0 .../jhotdraw/samples/svg/gui/ViewToolBar.form | 0 .../jhotdraw/samples/svg/gui/ViewToolBar.java | 0 .../samples/svg/gui/ViewToolBarBeanInfo.java | 0 .../samples/svg/gui/package-info.java | 0 .../svg/io/DefaultSVGFigureFactory.java | 0 .../samples/svg/io/ImageMapOutputFormat.java | 0 .../samples/svg/io/SVGElementFactory.java | 0 .../samples/svg/io/SVGFigureFactory.java | 0 .../samples/svg/io/SVGInputFormat.java | 0 .../samples/svg/io/SVGOutputFormat.java | 0 .../samples/svg/io/SVGZInputFormat.java | 0 .../samples/svg/io/SVGZOutputFormat.java | 0 .../jhotdraw/samples/svg/io/package-info.java | 0 .../jhotdraw/samples/svg/package-info.java | 0 .../samples/teddy/CharacterSetAccessory.form | 0 .../samples/teddy/CharacterSetAccessory.java | 0 .../jhotdraw/samples/teddy/FindDialog.form | 0 .../jhotdraw/samples/teddy/FindDialog.java | 0 .../jhotdraw/samples/teddy/JEditorArea.form | 0 .../jhotdraw/samples/teddy/JEditorArea.java | 0 .../jhotdraw/samples/teddy/Labels.properties | 0 .../samples/teddy/Labels_de.properties | 0 .../java/org/jhotdraw/samples/teddy/Main.java | 0 .../samples/teddy/TeddyApplicationModel.java | 0 .../org/jhotdraw/samples/teddy/TeddyView.form | 0 .../org/jhotdraw/samples/teddy/TeddyView.java | 0 .../samples/teddy/action/FindAction.java | 0 .../teddy/action/ToggleLineNumbersAction.java | 0 .../teddy/action/ToggleLineWrapAction.java | 0 .../teddy/action/ToggleStatusBarAction.java | 0 .../samples/teddy/action/package-info.java | 0 .../jhotdraw/samples/teddy/io/LFWriter.java | 0 .../samples/teddy/io/package-info.java | 0 .../jhotdraw/samples/teddy/package-info.java | 0 .../samples/teddy/regex/MatchType.java | 0 .../jhotdraw/samples/teddy/regex/Matcher.java | 0 .../samples/teddy/regex/package-info.java | 0 .../samples/teddy/text/NumberedEditorKit.java | 0 .../teddy/text/NumberedParagraphView.java | 0 .../teddy/text/NumberedViewFactory.java | 0 .../samples/teddy/text/package-info.java | 0 .../org/jhotdraw/text/ColorFormatter.java | 0 .../text/ColorToolTipTextFormatter.java | 0 .../java/org/jhotdraw/text/FontFormatter.java | 0 .../jhotdraw/text/JavaNumberFormatter.java | 0 .../java/org/jhotdraw/text/package-info.java | 0 .../java/org/jhotdraw/undo/CompositeEdit.java | 0 .../java/org/jhotdraw/undo/Labels.properties | 0 .../org/jhotdraw/undo/Labels_de.properties | 0 .../org/jhotdraw/undo/NonUndoableEdit.java | 0 .../org/jhotdraw/undo/UndoRedoManager.java | 0 .../org/jhotdraw/undo/images/editRedo.png | Bin .../org/jhotdraw/undo/images/editUndo.png | Bin .../java/org/jhotdraw/undo/package-info.java | 0 .../main/java/org/jhotdraw/util/Images.java | 0 .../java/org/jhotdraw/util/LocaleUtil.java | 0 .../main/java/org/jhotdraw/util/Methods.java | 0 .../org/jhotdraw/util/ResourceBundleUtil.java | 0 .../java/org/jhotdraw/util/ReversedList.java | 0 .../java/org/jhotdraw/util/package-info.java | 0 .../jhotdraw/util/prefs/PreferencesUtil.java | 0 .../util/prefs/ToolBarPrefsHandler.java | 0 .../org/jhotdraw/util/prefs/package-info.java | 0 .../java/org/jhotdraw/xml/DOMFactory.java | 0 .../main/java/org/jhotdraw/xml/DOMInput.java | 0 .../main/java/org/jhotdraw/xml/DOMOutput.java | 0 .../java/org/jhotdraw/xml/DOMStorable.java | 0 .../org/jhotdraw/xml/DefaultDOMFactory.java | 0 .../xml/JavaPrimitivesDOMFactory.java | 0 .../java/org/jhotdraw/xml/JavaxDOMInput.java | 0 .../java/org/jhotdraw/xml/JavaxDOMOutput.java | 0 .../org/jhotdraw/xml/NanoXMLDOMInput.java | 0 .../org/jhotdraw/xml/NanoXMLDOMOutput.java | 0 .../org/jhotdraw/xml/XMLTransferable.java | 0 .../java/org/jhotdraw/xml/css/CSSParser.java | 0 .../java/org/jhotdraw/xml/css/CSSRule.java | 0 .../org/jhotdraw/xml/css/StyleManager.java | 0 .../org/jhotdraw/xml/css/package-info.java | 0 .../java/org/jhotdraw/xml/package-info.java | 0 .../main/resources/JHotDrawIcons.png | Bin .../src => src}/main/resources/sRGBmatrix.m | 0 .../main/resources/xyToRGBmatrix.m | 0 .../org/jhotdraw/geom/BezierPathTest.java | 0 2251 files changed, 152604 deletions(-) rename jhotdraw7/.classpath => .classpath (100%) rename jhotdraw7/.project => .project (100%) delete mode 100644 JHotDraw/JavaDrawApplet.html delete mode 100644 JHotDraw/JavaDrawViewer.html delete mode 100644 JHotDraw/NothingApplet.html delete mode 100644 JHotDraw/PertApplet.html delete mode 100644 JHotDraw/README.html delete mode 100644 JHotDraw/build/build.properties delete mode 100644 JHotDraw/build/build.xml delete mode 100644 JHotDraw/build/jhotdraw.mf delete mode 100644 JHotDraw/compile.bat delete mode 100644 JHotDraw/compile.sh delete mode 100644 JHotDraw/compile_ant.bat delete mode 100644 JHotDraw/doc/Architecture Overview.ppt delete mode 100644 JHotDraw/doc/Changes.html delete mode 100644 JHotDraw/doc/ClassDiagram.html delete mode 100644 JHotDraw/doc/ReleaseNotes.html delete mode 100644 JHotDraw/doc/buildProcess.html delete mode 100644 JHotDraw/doc/change_log.txt delete mode 100644 JHotDraw/doc/classdiagram.jpg delete mode 100644 JHotDraw/doc/documentation.html delete mode 100644 JHotDraw/doc/drawBackground.html delete mode 100644 JHotDraw/doc/packages.html delete mode 100644 JHotDraw/doc/pattlets.jar delete mode 100644 JHotDraw/doc/samples.html delete mode 100644 JHotDraw/drawings/demo.draw delete mode 100644 JHotDraw/drawings/demo.ser delete mode 100644 JHotDraw/drawings/net.draw delete mode 100644 JHotDraw/drawings/net.ser delete mode 100644 JHotDraw/drawings/nothing.draw delete mode 100644 JHotDraw/drawings/nothing.ser delete mode 100644 JHotDraw/drawings/pert.draw delete mode 100644 JHotDraw/drawings/pert.ser delete mode 100644 JHotDraw/lgpl-license.html delete mode 100644 JHotDraw/run_javadraw.bat delete mode 100644 JHotDraw/setenv.bat delete mode 100644 JHotDraw/src/CH/ifa/draw/applet/DrawApplet.java delete mode 100644 JHotDraw/src/CH/ifa/draw/application/DrawApplication.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib.jdo delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/AutoscrollHelper.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/CTXCommandMenu.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/CTXWindowMenu.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/ChopDiamondConnector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/ChopPolygonConnector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/ClippingUpdateStrategy.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/CommandCheckBoxMenuItem.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/CommandHolder.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/CommandMenuItem.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/ComponentFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/CompositeFigureCreationTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/CustomSelectionTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/CustomToolBar.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/Desktop.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/DesktopEvent.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/DesktopEventService.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/DesktopListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/DiamondFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/FloatingTextArea.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/GraphicalCompositeFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/Helper.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/JPanelDesktop.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/JScrollPaneDesktop.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/Layoutable.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/Layouter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/MDIDesktopPane.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/MDI_DrawApplication.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/MiniMapView.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/NestedCreationTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/PolygonFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/PolygonHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/PolygonScaleHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/PolygonTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/PopupMenuFigureSelection.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/SVGDrawApp.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/SVGStorageFormat.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/SimpleLayouter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/SplitConnectionTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/SplitPaneDesktop.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/SplitPaneDrawApplication.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/StandardLayouter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/TextAreaFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/TextAreaTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/TriangleFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/TriangleRotationHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/WindowMenu.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDFigures.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDFiguresTransferable.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDHelper.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDInterface.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/dnd/DragNDropTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/dnd/JHDDragSourceListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/dnd/JHDDropTargetListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/AbstractContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/AttributeContentProducerContext.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/AttributeFigureContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/ColorContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducerContext.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducerRegistry.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/DiamondFigureGeometricAdapter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceHolder.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceManager.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceManagerFactory.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/ETSLADisposalStrategy.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/EllipseFigureGeometricAdapter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/FigureContentProducerContext.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/FigureDataContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/GeometricFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/HTMLColorContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/HTMLContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/HTMLContentProducerContext.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/HTMLLayouter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/HTMLTextAreaFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/HTMLTextAreaTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/PolygonFigureGeometricAdapter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/ResourceContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/ResourceDisposabilityStrategy.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/ResourceManagerNotSetException.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/RoundRectangleGeometricAdapter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/StandardDisposableResourceHolder.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/StandardDisposableResourceManager.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/TextHolderContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/TriangleFigureGeometricAdapter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/html/URLContentProducer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/zoom/AreaTracker.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/zoom/DoubleBufferImage.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/zoom/MiniMapZoomableView.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/zoom/ScalingGraphics.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomAreaTracker.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomDrawingView.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomUpdateStrategy.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures.jdo delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/AbstractLineDecoration.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/ArrowTip.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/AttributeFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/BorderDecorator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/BorderTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/ChopEllipseConnector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/ConnectedTextTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/ElbowConnection.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/ElbowHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/EllipseFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/FigureAttributes.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/FontSizeHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/GroupCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/GroupFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/GroupHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/ImageFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/InsertImageCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/LineConnection.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/LineDecoration.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/LineFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/NullConnector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/NullFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/NumberTextFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/PolyLineConnector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/PolyLineFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/PolyLineHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/PolyLineLocator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/RadiusHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/RectangleFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/RoundRectangleFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/ScribbleTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/ShortestDistanceConnector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/TextFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/TextTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/figures/UngroupCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework.jdo delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/ConnectionFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/Connector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/Cursor.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/Drawing.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/DrawingChangeEvent.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/DrawingChangeListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/DrawingEditor.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/DrawingView.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/Figure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/FigureAttributeConstant.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/FigureChangeEvent.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/FigureChangeListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/FigureEnumeration.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/FigureSelection.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/FigureSelectionListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/FigureVisitor.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/Handle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/HandleEnumeration.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/JHotDrawException.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/JHotDrawRuntimeException.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/Locator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/Painter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/PointConstrainer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/Tool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/ToolListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/framework/ViewChangeListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ATEXT1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ATEXT2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ATEXT3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/BORDDEC1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/BORDDEC2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/BORDDEC3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/CONN1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/CONN2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/CONN3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/DIAMOND1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/DIAMOND2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/DIAMOND3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ELLIPSE1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ELLIPSE2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ELLIPSE3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ERASER1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ERASER2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ERASER3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/HTMLAREA1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/HTMLAREA2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/HTMLAREA3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/LINE1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/LINE2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/LINE3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/OCONN1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/OCONN2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/OCONN3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/POLYGON1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/POLYGON2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/POLYGON3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/RECT1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/RECT2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/RECT3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/RRECT1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/RRECT2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/RRECT3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/SCRIBBL1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/SCRIBBL2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/SCRIBBL3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/SEL1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/SEL2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/SEL3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TEMPLATE.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TEMPLAT_.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TEXT1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TEXT2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TEXT3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TEXTAREA1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TEXTAREA2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TEXTAREA3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TOBACK1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TOBACK2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TOBACK3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TOFRONT1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TOFRONT2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TOFRONT3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TRIANGLE1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TRIANGLE2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/TRIANGLE3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/URL1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/URL2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/URL3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ZOOM1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ZOOM2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/ZOOM3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/images/pspbrwse.jbf delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw.jdo delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/AnimationDecorator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/Animator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/BouncingDrawing.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/FollowURLTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawApp.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawApplet.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawAppletHelp.html delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawViewer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/MySelectionTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/PatternPainter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/URLTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/DUKE.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/Juggler0.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/backgrnd.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/beans.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/bg1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/javacentral.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/joe.surf.yellow.small.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/rain.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/view.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/minimap/MiniMapApplication.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/minimap/MiniMapDesktop.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/net.jdo delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/net/NetApp.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/net/NodeFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/nothing/NothingApp.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/nothing/NothingApplet.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/pert/PertApplet.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/pert/PertAppletHelp.html delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/pert/PertApplication.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/pert/PertDependency.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/pert/PertFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/pert/PertFigureCreationTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/pert/images/PERT1.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/pert/images/PERT2.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/samples/pert/images/PERT3.gif delete mode 100644 JHotDraw/src/CH/ifa/draw/standard.jdo delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/AWTCursor.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/AbstractCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/AbstractConnector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/AbstractFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/AbstractHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/AbstractLocator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/AbstractTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ActionTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/AlignCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/BoxHandleKit.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/BringToFrontCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/BufferedUpdateStrategy.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ChangeAttributeCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionEndHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionStartHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ChopBoxConnector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/CompositeFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ConnectionHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ConnectionTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/CopyCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/CreationTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/CutCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/DecoratorFigure.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/DeleteFromDrawingVisitor.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/DragTracker.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/DuplicateCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/FastBufferedUpdateStrategy.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/FigureAndEnumerator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/FigureChangeAdapter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/FigureChangeEventMulticaster.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/FigureEnumerator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/FigureTransferCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/GridConstrainer.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/HandleAndEnumerator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/HandleEnumerator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/HandleTracker.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/InsertIntoDrawingVisitor.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/LocatorConnector.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/LocatorHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/NullDrawingView.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/NullHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/NullPainter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/NullTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/OffsetLocator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/OrderedFigureElement.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/PasteCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/PeripheralLocator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/QuadTree.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/RelativeLocator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ReverseFigureEnumerator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/SelectAllCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/SelectAreaTracker.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/SelectionTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/SendToBackCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/SimpleUpdateStrategy.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/SingleFigureEnumerator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/StandardDrawing.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/StandardDrawingView.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/StandardFigureSelection.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/TextHolder.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ToggleGridCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/standard/ToolButton.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/JHDTestCase.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/CTXCommandMenuTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/CTXWindowMenuTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/ChopDiamondConnectorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/ChopPolygonConnectorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/ClippingUpdateStrategyTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/CommandCheckBoxMenuItemTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/CommandMenuItemTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/ComponentFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/CompositeFigureCreationToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/CustomSelectionToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/CustomToolBarTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/DesktopEventServiceTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/DiamondFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/FloatingTextAreaTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/GraphicalCompositeFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/HelperTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/JPanelDesktopTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/JScrollPaneDesktopTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/MDIDesktopPaneTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/MDI_DrawApplicationTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/MiniMapViewTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/NestedCreationToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/PolygonFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/PolygonHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/PolygonToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/SVGDrawAppTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/SVGStorageFormatTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/SimpleLayouterTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/SplitConnectionToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/StandardLayouterTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/TextAreaFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/TextAreaToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/TriangleFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/contrib/WindowMenuTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/ArrowTipTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/BorderDecoratorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/BorderToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/ChopEllipseConnectorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/ConnectedTextToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/ElbowConnectionTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/ElbowHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/EllipseFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/FigureAttributesTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/FiguresSuite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/FontSizeHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/GroupCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/GroupFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/ImageFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/InsertImageCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/LineConnectionTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/LineFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/NullConnectorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/NullFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/NumberTextFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/PolyLineConnectorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/PolyLineFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/PolyLineHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/RectangleFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/RoundRectangleFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/ScribbleToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/ShortestDistanceConnectorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/TextFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/TextToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/figures/UngroupCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/framework/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/framework/DrawingChangeEventTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/framework/FigureAttributeConstantTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/framework/FigureChangeEventTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/framework/FrameworkSuite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AnimationDecoratorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AnimatorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/BouncingDrawingTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawAppTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawAppletTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawViewerTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavadrawSuite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/MySelectionToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/PatternPainterTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/javadraw/URLToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/minimap/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/minimap/MiniMapApplicationTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/minimap/MiniMapDesktopTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/minimap/MinimapSuite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/net/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/net/NetAppTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/net/NetSuite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/net/NodeFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/nothing/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingAppTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingAppletTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingSuite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/pert/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/pert/PertAppletTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/pert/PertApplicationTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/pert/PertDependencyTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/pert/PertFigureCreationToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/pert/PertFigureTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/samples/pert/PertSuite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/AlignCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/BoxHandleKitTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/BringToFrontCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/BufferedUpdateStrategyTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/ChangeAttributeCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/ChangeConnectionEndHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/ChangeConnectionStartHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/ChopBoxConnectorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/ConnectionHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/ConnectionToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/CopyCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/CreationToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/CutCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/DeleteCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/DeleteFromDrawingVisitorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/DragTrackerTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/DuplicateCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/FastBufferedUpdateStrategyTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/FigureAndEnumeratorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/FigureChangeAdapterTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/FigureChangeEventMulticasterTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/FigureEnumeratorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/GridConstrainerTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/HandleAndEnumeratorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/HandleEnumeratorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/HandleTrackerTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/InsertIntoDrawingVisitorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/LocatorConnectorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/LocatorHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/NullDrawingViewTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/NullHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/NullToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/OffsetLocatorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/PasteCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/PeripheralLocatorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/RelativeLocatorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/ReverseFigureEnumeratorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/SelectAllCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/SelectAreaTrackerTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/SelectionToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/SendToBackCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/SimpleUpdateStrategyTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/SingleFigureEnumeratorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/StandardDrawingTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/StandardDrawingViewTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/StandardFigureSelectionTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/StandardSuite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/ToggleGridCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/standard/ToolButtonTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/BoundsTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/ClipboardTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/ColorMapTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/CommandButtonTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/CommandChoiceTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/CommandMenuTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/FillerTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/FloatingTextFieldTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/GeomTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/GraphLayoutTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/IconkitTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/JDOStorageFormatTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/PaletteIconTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/PaletteLayoutTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/RedoCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/ReverseListEnumeratorTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/SerializationStorageFormatTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/StandardStorageFormatTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/StandardVersionControlStrategyTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/StorableInputTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/StorableOutputTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/StorageFormatManagerTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/UndoCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/UndoManagerTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/UndoRedoActivityTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/UndoableAdapterTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/UndoableCommandTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/UndoableHandleTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/UndoableToolTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/UtilSuite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/VersionManagementTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/CollectionsFactoryJDK11Test.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/IteratorWrapperTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/Jdk11Suite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/ListWrapperTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/MapWrapperTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/SetWrapperTest.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/AllTests.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/CollectionsFactoryJDK12Test.java delete mode 100644 JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/Jdk12Suite.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/Animatable.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/Bounds.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/Clipboard.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/CollectionsFactory.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/ColorMap.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/Command.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/CommandButton.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/CommandChoice.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/CommandListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/CommandMenu.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/Filler.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/FloatingTextField.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/Geom.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/GraphLayout.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/Iconkit.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/JDOStorageFormat.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/PaletteButton.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/PaletteIcon.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/PaletteLayout.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/PaletteListener.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/RedoCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/ReverseListEnumerator.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/SerializationStorageFormat.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/StandardStorageFormat.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/StandardVersionControlStrategy.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/Storable.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/StorableInput.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/StorableOutput.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/StorageFormat.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/StorageFormatManager.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/UndoCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/UndoManager.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/UndoRedoActivity.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/Undoable.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/UndoableAdapter.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/UndoableCommand.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/UndoableHandle.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/UndoableTool.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/VersionControlStrategy.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/VersionManagement.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/VersionRequester.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/collections/jdk11/CollectionsFactoryJDK11.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/collections/jdk11/IteratorWrapper.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/collections/jdk11/ListWrapper.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/collections/jdk11/MapWrapper.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/collections/jdk11/SetWrapper.java delete mode 100644 JHotDraw/src/CH/ifa/draw/util/collections/jdk12/CollectionsFactoryJDK12.java rename {jhotdraw7/Templates => Templates}/documentation-page.dwt (100%) rename {jhotdraw7/Templates => Templates}/documentation-toc.dwt (100%) rename {jhotdraw7/Templates => Templates}/guide-template.dwt (100%) rename {jhotdraw7/Templates => Templates}/toc-template.dwt (100%) rename jhotdraw7/applet.policy => applet.policy (100%) rename jhotdraw7/build-all.xml => build-all.xml (100%) rename jhotdraw7/build-before-profiler.xml => build-before-profiler.xml (100%) rename jhotdraw7/build-bezierdemo.xml => build-bezierdemo.xml (100%) rename jhotdraw7/build-draw.xml => build-draw.xml (100%) rename jhotdraw7/build-jhotdraw.xml => build-jhotdraw.xml (100%) rename jhotdraw7/build-net.xml => build-net.xml (100%) rename jhotdraw7/build-odg.xml => build-odg.xml (100%) rename jhotdraw7/build-pert.xml => build-pert.xml (100%) rename jhotdraw7/build-svg.xml => build-svg.xml (100%) rename jhotdraw7/build-teddy.xml => build-teddy.xml (100%) rename jhotdraw7/build.xml => build.xml (100%) delete mode 100644 jhotdraw6/.classpath delete mode 100644 jhotdraw6/.project delete mode 100644 jhotdraw6/JavaDrawApplet.html delete mode 100644 jhotdraw6/JavaDrawViewer.html delete mode 100644 jhotdraw6/NothingApplet.html delete mode 100644 jhotdraw6/PertApplet.html delete mode 100644 jhotdraw6/README.html delete mode 100644 jhotdraw6/build.xml delete mode 100644 jhotdraw6/build/build.properties delete mode 100644 jhotdraw6/build/build.xml delete mode 100644 jhotdraw6/build/jhotdraw.mf delete mode 100644 jhotdraw6/compile.bat delete mode 100644 jhotdraw6/compile.sh delete mode 100644 jhotdraw6/compile_ant.bat delete mode 100644 jhotdraw6/doc/Architecture Overview.ppt delete mode 100644 jhotdraw6/doc/Changes.html delete mode 100644 jhotdraw6/doc/ClassDiagram.html delete mode 100644 jhotdraw6/doc/ReleaseNotes.html delete mode 100644 jhotdraw6/doc/buildProcess.html delete mode 100644 jhotdraw6/doc/change_log.txt delete mode 100644 jhotdraw6/doc/classdiagram.jpg delete mode 100644 jhotdraw6/doc/documentation.html delete mode 100644 jhotdraw6/doc/drawBackground.html delete mode 100644 jhotdraw6/doc/packages.html delete mode 100644 jhotdraw6/doc/pattlets.jar delete mode 100644 jhotdraw6/doc/samples.html delete mode 100644 jhotdraw6/drawings/demo.draw delete mode 100644 jhotdraw6/drawings/demo.ser delete mode 100644 jhotdraw6/drawings/net.draw delete mode 100644 jhotdraw6/drawings/net.ser delete mode 100644 jhotdraw6/drawings/nothing.draw delete mode 100644 jhotdraw6/drawings/nothing.ser delete mode 100644 jhotdraw6/drawings/offsetConnectors.draw delete mode 100644 jhotdraw6/drawings/pert.draw delete mode 100644 jhotdraw6/drawings/pert.ser delete mode 100644 jhotdraw6/lgpl-license.html delete mode 100755 jhotdraw6/lib/batik-awt-util.jar delete mode 100755 jhotdraw6/lib/batik-dom.jar delete mode 100755 jhotdraw6/lib/batik-svggen.jar delete mode 100644 jhotdraw6/nbproject/build-impl.xml delete mode 100644 jhotdraw6/nbproject/genfiles.properties delete mode 100644 jhotdraw6/nbproject/project.properties delete mode 100644 jhotdraw6/nbproject/project.xml delete mode 100644 jhotdraw6/run_javadraw.bat delete mode 100644 jhotdraw6/setenv.bat delete mode 100644 jhotdraw6/src/main/J2EE/org/jhotdraw/util/JDOStorageFormat.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/applet/DrawApplet.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/application/DrawApplication.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/AutoscrollHelper.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/CTXCommandMenu.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/CTXWindowMenu.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/ChopDiamondConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/ChopPolygonConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/ClippingUpdateStrategy.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandCheckBoxMenuItem.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandHolder.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandMenuItem.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/ComponentFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/CompositeFigureCreationTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/CustomSelectionTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/CustomToolBar.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/Desktop.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopEvent.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopEventService.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/DiamondFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/FloatingTextArea.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/GraphicalCompositeFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/GridPainter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/Helper.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/JPanelDesktop.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/JScrollPaneDesktop.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/Layoutable.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/Layouter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/MDIDesktopPane.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/MDI_DrawApplication.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/MiniMapView.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/NestedCreationTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonScaleHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/PopupMenuFigureSelection.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/SVGDrawApp.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/SVGStorageFormat.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/SimpleLayouter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitConnectionTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitPaneDesktop.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitPaneDrawApplication.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/StandardLayouter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/TextAreaFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/TextAreaTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/TriangleFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/TriangleRotationHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/WindowMenu.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDFigures.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDFiguresTransferable.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDHelper.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDInterface.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DragNDropTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/JHDDragSourceListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/JHDDropTargetListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AbstractContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AttributeContentProducerContext.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AttributeFigureContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ColorContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducerContext.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducerRegistry.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DiamondFigureGeometricAdapter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceHolder.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceManager.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceManagerFactory.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ETSLADisposalStrategy.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/EllipseFigureGeometricAdapter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/FigureContentProducerContext.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/FigureDataContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/GeometricFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLColorContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLContentProducerContext.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLLayouter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLTextAreaFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLTextAreaTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/PolygonFigureGeometricAdapter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceDisposabilityStrategy.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceManagerNotSetException.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/RoundRectangleGeometricAdapter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/StandardDisposableResourceHolder.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/StandardDisposableResourceManager.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/TextHolderContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/TriangleFigureGeometricAdapter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/html/URLContentProducer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/AreaTracker.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/DoubleBufferImage.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/MiniMapZoomableView.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ScalingGraphics.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomAreaTracker.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomDrawingView.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomUpdateStrategy.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/AbstractLineDecoration.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/ArrowTip.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/AttributeFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/BorderDecorator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/BorderTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/ChopEllipseConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/ConnectedTextTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/ElbowConnection.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/ElbowHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/EllipseFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/FigureAttributes.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/FontSizeHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/GroupCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/GroupFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/GroupHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/ImageFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/InsertImageCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/LineConnection.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/LineDecoration.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/LineFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/NullConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/NullFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/NumberTextFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineLocator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/RadiusHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/RectangleFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/RoundRectangleFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/ScribbleTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/ShortestDistanceConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/TextFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/TextTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/figures/UngroupCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/ConnectionFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/Connector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/Cursor.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/Drawing.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingChangeEvent.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingChangeListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingEditor.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingView.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/Figure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/FigureAttributeConstant.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/FigureChangeEvent.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/FigureChangeListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/FigureEnumeration.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/FigureSelection.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/FigureSelectionListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/FigureVisitor.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/Handle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/HandleEnumeration.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/JHotDrawException.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/JHotDrawRuntimeException.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/Locator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/Painter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/PointConstrainer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/Tool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/ToolListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/framework/ViewChangeListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/ATEXT1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/ATEXT2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/ATEXT3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/BORDDEC1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/BORDDEC2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/BORDDEC3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/CONN1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/CONN2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/CONN3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/DIAMOND1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/DIAMOND2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/DIAMOND3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/ELLIPSE1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/ELLIPSE2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/ELLIPSE3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/ERASER1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/ERASER2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/ERASER3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/HTMLAREA1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/HTMLAREA2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/HTMLAREA3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/LINE1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/LINE2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/LINE3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/OCONN1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/OCONN2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/OCONN3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/PERT1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/PERT2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/PERT3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/POLYGON1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/POLYGON2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/POLYGON3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/RECT1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/RECT2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/RECT3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/RRECT1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/RRECT2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/RRECT3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/SCRIBBL1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/SCRIBBL2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/SCRIBBL3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/SEL1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/SEL2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/SEL3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/TEMPLATE.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/TEMPLAT_.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/TEXT1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/TEXT2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/TEXT3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/TEXTAREA1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/TEXTAREA2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/images/TEXTAREA3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw.jdo delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/AnimationDecorator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/Animator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/BouncingDrawing.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/FollowURLTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawApp.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawApplet.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawAppletHelp.html delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawViewer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/MySelectionTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/PatternPainter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/URLTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/DUKE.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/Juggler0.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/backgrnd.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/beans.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/bg1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/javacentral.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/joe.surf.yellow.small.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/rain.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/view.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/mini/ConnectingFiguresSample.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/mini/package.html delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/minimap/MiniMapApplication.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/minimap/MiniMapDesktop.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/net.jdo delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/net/NetApp.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/net/NodeFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/nothing/NothingApp.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/nothing/NothingApplet.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/ConnectorApp.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/MyEllipseFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/MyFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/NodeFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/offsetConnectors.draw delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertApplet.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertAppletHelp.html delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertApplication.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertDependency.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertFigureCreationTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/pert/images/PERT1.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/pert/images/PERT2.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/samples/pert/images/PERT3.gif delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/AWTCursor.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractLocator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ActionTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/AlignCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/BoxHandleKit.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/BringToFrontCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/BufferedUpdateStrategy.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeAttributeCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionEndHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionStartHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ChopBoxConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/CompositeFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ConnectionHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ConnectionTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/CopyCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/CreationTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/CutCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/DecoratorFigure.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/DeleteCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/DeleteFromDrawingVisitor.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/DragTracker.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/DuplicateCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/FastBufferedUpdateStrategy.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/FigureAndEnumerator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/FigureChangeAdapter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/FigureChangeEventMulticaster.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/FigureEnumerator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/FigureTransferCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/GridConstrainer.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/HandleAndEnumerator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/HandleEnumerator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/HandleTracker.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/InsertIntoDrawingVisitor.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/LocatorConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/LocatorHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/NullDrawingView.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/NullHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/NullPainter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/NullTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/OffsetConnector.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/OffsetLocator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/OrderedFigureElement.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/PasteCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/PeripheralLocator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/QuadTree.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/RelativeLocator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ReverseFigureEnumerator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/SelectAllCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/SelectAreaTracker.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/SelectionTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/SendToBackCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/SimpleUpdateStrategy.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/SingleFigureEnumerator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/StandardDrawing.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/StandardDrawingView.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/StandardFigureSelection.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/TextHolder.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ToggleGridCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/standard/ToolButton.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/Animatable.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/Bounds.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/Clipboard.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/CollectionsFactory.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/ColorMap.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/Command.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/CommandButton.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/CommandChoice.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/CommandListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/CommandMenu.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/Filler.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/FloatingTextField.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/Geom.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/GraphLayout.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/Iconkit.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/PaletteButton.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/PaletteIcon.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/PaletteLayout.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/PaletteListener.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/RedoCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/ReverseListEnumerator.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/SerializationStorageFormat.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/StandardStorageFormat.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/StandardVersionControlStrategy.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/Storable.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/StorableInput.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/StorableOutput.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/StorageFormat.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/StorageFormatManager.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/UndoCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/UndoManager.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/UndoRedoActivity.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/Undoable.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/UndoableAdapter.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/UndoableCommand.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/UndoableHandle.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/UndoableTool.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/VersionControlStrategy.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/VersionManagement.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/VersionRequester.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/CollectionsFactoryJDK11.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/IteratorWrapper.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/ListWrapper.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/MapWrapper.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/SetWrapper.java delete mode 100644 jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk12/CollectionsFactoryJDK12.java delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/contrib.jdo delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/figures.jdo delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/framework.jdo delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/TOBACK1.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/TOBACK2.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/TOBACK3.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/TOFRONT1.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/TOFRONT2.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/TOFRONT3.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/TRIANGLE1.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/TRIANGLE2.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/TRIANGLE3.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/URL1.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/URL2.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/URL3.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/ZOOM1.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/ZOOM2.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/ZOOM3.gif delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/images/pspbrwse.jbf delete mode 100644 jhotdraw6/src/main/resources/org/jhotdraw/standard.jdo delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/JHDTestCase.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CTXCommandMenuTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CTXWindowMenuTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ChopDiamondConnectorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ChopPolygonConnectorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ClippingUpdateStrategyTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CommandCheckBoxMenuItemTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CommandMenuItemTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ComponentFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CompositeFigureCreationToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CustomSelectionToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CustomToolBarTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/DesktopEventServiceTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/DiamondFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/FloatingTextAreaTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/GraphicalCompositeFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/HelperTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/JPanelDesktopTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/JScrollPaneDesktopTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MDIDesktopPaneTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MDI_DrawApplicationTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MiniMapViewTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/NestedCreationToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SVGDrawAppTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SVGStorageFormatTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SimpleLayouterTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SplitConnectionToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/StandardLayouterTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TextAreaFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TextAreaToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TriangleFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/contrib/WindowMenuTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/ArrowTipTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/BorderDecoratorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/BorderToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/ChopEllipseConnectorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/ConnectedTextToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/ElbowConnectionTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/ElbowHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/EllipseFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/FigureAttributesTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/FiguresSuite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/FontSizeHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/GroupCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/GroupFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/ImageFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/InsertImageCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/LineConnectionTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/LineFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/NullConnectorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/NullFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/NumberTextFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineConnectorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/RectangleFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/RoundRectangleFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/ScribbleToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/ShortestDistanceConnectorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/TextFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/TextToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/figures/UngroupCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/framework/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/framework/DrawingChangeEventTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/framework/FigureAttributeConstantTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/framework/FigureChangeEventTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/framework/FrameworkSuite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AnimationDecoratorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AnimatorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/BouncingDrawingTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawAppTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawAppletTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawViewerTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavadrawSuite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/MySelectionToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/PatternPainterTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/URLToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MiniMapApplicationTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MiniMapDesktopTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MinimapSuite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NetAppTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NetSuite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NodeFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingAppTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingAppletTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingSuite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertAppletTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertApplicationTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertDependencyTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertFigureCreationToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertFigureTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertSuite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/AlignCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/BoxHandleKitTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/BringToFrontCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/BufferedUpdateStrategyTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeAttributeCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeConnectionEndHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeConnectionStartHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChopBoxConnectorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/ConnectionHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/ConnectionToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/CopyCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/CreationToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/CutCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/DeleteCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/DeleteFromDrawingVisitorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/DragTrackerTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/DuplicateCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/FastBufferedUpdateStrategyTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureAndEnumeratorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureChangeAdapterTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureChangeEventMulticasterTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureEnumeratorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/GridConstrainerTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleAndEnumeratorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleEnumeratorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleTrackerTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/InsertIntoDrawingVisitorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/LocatorConnectorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/LocatorHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullDrawingViewTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/OffsetLocatorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/PasteCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/PeripheralLocatorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/RelativeLocatorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/ReverseFigureEnumeratorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectAllCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectAreaTrackerTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectionToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/SendToBackCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/SimpleUpdateStrategyTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/SingleFigureEnumeratorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardDrawingTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardDrawingViewTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardFigureSelectionTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardSuite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/ToggleGridCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/standard/ToolButtonTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/BoundsTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/ClipboardTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/ColorMapTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandButtonTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandChoiceTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandMenuTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/FillerTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/FloatingTextFieldTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/GeomTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/GraphLayoutTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/IconkitTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/JDOStorageFormatTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/PaletteIconTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/PaletteLayoutTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/RedoCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/ReverseListEnumeratorTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/SerializationStorageFormatTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/StandardStorageFormatTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/StandardVersionControlStrategyTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/StorableInputTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/StorableOutputTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/StorageFormatManagerTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoManagerTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoRedoActivityTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableAdapterTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableCommandTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableHandleTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableToolTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/UtilSuite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/VersionManagementTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/CollectionsFactoryJDK11Test.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/IteratorWrapperTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/Jdk11Suite.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/ListWrapperTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/MapWrapperTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/SetWrapperTest.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/AllTests.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/CollectionsFactoryJDK12Test.java delete mode 100644 jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/Jdk12Suite.java delete mode 100644 jhotdraw7/manifest.mf delete mode 100644 jhotdraw7/pom.xml delete mode 100644 jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/PERT1.gif delete mode 100644 jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/PERT2.gif delete mode 100644 jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/PERT3.gif delete mode 100644 jmodeller/.classpath delete mode 100644 jmodeller/DifferenceReporter.java delete mode 100644 jmodeller/compile.bat delete mode 100644 jmodeller/compile_g.bat delete mode 100644 jmodeller/run.bat delete mode 100644 jmodeller/src/AggregationDecoration.java delete mode 100644 jmodeller/src/AssociationLineConnection.java delete mode 100644 jmodeller/src/ClassFigure.java delete mode 100644 jmodeller/src/DelegationSelectionTool.java delete mode 100644 jmodeller/src/DependencyLineConnection.java delete mode 100644 jmodeller/src/InheritanceLineConnection.java delete mode 100644 jmodeller/src/JModellerApplication.java delete mode 100644 jmodeller/src/JModellerClass.java delete mode 100644 jmodeller/src/SeparatorFigure.java delete mode 100644 jmodeller/src/images/CLASS1.gif delete mode 100644 jmodeller/src/images/CLASS2.gif delete mode 100644 jmodeller/src/images/CLASS3.gif delete mode 100644 jmodeller/src/images/DEPENDENCY1.gif delete mode 100644 jmodeller/src/images/DEPENDENCY2.gif delete mode 100644 jmodeller/src/images/DEPENDENCY3.gif delete mode 100644 jmodeller/src/images/INHERITANCE1.gif delete mode 100644 jmodeller/src/images/INHERITANCE2.gif delete mode 100644 jmodeller/src/images/INHERITANCE3.gif rename {jhotdraw7/lib => lib}/annotations.jar (100%) rename {jhotdraw7/lib => lib}/java_30.zip (100%) rename {jhotdraw7/lib => lib}/jsr305.jar (100%) rename {jhotdraw7/lib => lib}/libquaqua.jnilib (100%) rename {jhotdraw7/lib => lib}/libquaqua64.jnilib (100%) rename {jhotdraw7/lib => lib}/quaqua.jar (100%) rename jhotdraw6/manifest.mf => manifest.mf (100%) rename {jhotdraw7/nbproject => nbproject}/build-impl.xml (100%) rename {jhotdraw7/nbproject => nbproject}/genfiles.properties (100%) rename {jhotdraw7/nbproject => nbproject}/private/private.properties (100%) rename {jhotdraw7/nbproject => nbproject}/private/private.xml (100%) rename {jhotdraw7/nbproject => nbproject}/profiler-build-impl.xml (100%) rename {jhotdraw7/nbproject => nbproject}/project.properties (100%) rename {jhotdraw7/nbproject => nbproject}/project.xml (100%) rename jhotdraw6/pom.xml => pom.xml (100%) rename {jhotdraw7/src => src}/documentation/changes.html (100%) rename {jhotdraw7/src => src}/documentation/getting_started.html (100%) rename {jhotdraw7/src => src}/documentation/images/draw_mdi.png (100%) rename {jhotdraw7/src => src}/documentation/images/draw_mdi_small.png (100%) rename {jhotdraw7/src => src}/documentation/images/draw_osx.png (100%) rename {jhotdraw7/src => src}/documentation/images/draw_osx_small.png (100%) rename {jhotdraw7/src => src}/documentation/images/jhotdraw-duked.xml (100%) rename {jhotdraw7/src => src}/documentation/images/jhotdraw-seven.xml (100%) rename {jhotdraw7/src => src}/documentation/images/lion.svg (100%) rename {jhotdraw7/src => src}/documentation/images/lion.svgz (100%) rename {jhotdraw7/src => src}/documentation/images/net.xml (100%) rename {jhotdraw7/src => src}/documentation/images/net_osx.png (100%) rename {jhotdraw7/src => src}/documentation/images/net_osx_small.png (100%) rename {jhotdraw7/src => src}/documentation/images/pert.xml (100%) rename {jhotdraw7/src => src}/documentation/images/pert_osx.png (100%) rename {jhotdraw7/src => src}/documentation/images/pert_osx_small.png (100%) rename {jhotdraw7/src => src}/documentation/images/svg_osx.png (100%) rename {jhotdraw7/src => src}/documentation/images/svg_osx_small.png (100%) rename {jhotdraw7/src => src}/documentation/images/webstart.small.gif (100%) rename {jhotdraw7/src => src}/documentation/index.html (100%) rename {jhotdraw7/src => src}/documentation/jws/draw.jnlp (100%) rename {jhotdraw7/src => src}/documentation/jws/net.jnlp (100%) rename {jhotdraw7/src => src}/documentation/jws/pert.jnlp (100%) rename {jhotdraw7/src => src}/documentation/jws/svg.jnlp (100%) rename {jhotdraw7/src => src}/documentation/jws/teddy.jnlp (100%) rename {jhotdraw7/src => src}/documentation/license.html (100%) rename {jhotdraw7/src => src}/documentation/license_terms_ccby.html (100%) rename {jhotdraw7/src => src}/documentation/license_terms_lgpl.html (100%) rename {jhotdraw7/src => src}/documentation/release_notes.html (100%) rename {jhotdraw7/src => src}/documentation/sample_draw_applet.html (100%) rename {jhotdraw7/src => src}/documentation/sample_draw_application.html (100%) rename {jhotdraw7/src => src}/documentation/sample_net_applet.html (100%) rename {jhotdraw7/src => src}/documentation/sample_net_application.html (100%) rename {jhotdraw7/src => src}/documentation/sample_pert_applet.html (100%) rename {jhotdraw7/src => src}/documentation/sample_pert_application.html (100%) rename {jhotdraw7/src => src}/documentation/sample_svg_applet.html (100%) rename {jhotdraw7/src => src}/documentation/sample_svg_application.html (100%) rename {jhotdraw7/src => src}/documentation/sample_teddy_application.html (100%) rename {jhotdraw7/src => src}/documentation/stylesheet.css (100%) rename {jhotdraw7/src => src}/documentation/toc.html (100%) rename {jhotdraw7/src => src}/documentation/tutorial/index.html (100%) rename {jhotdraw7/src => src}/documentation/tutorial/purpose.html (100%) rename {jhotdraw7/src => src}/documentation/tutorial/stylesheet.css (100%) rename {jhotdraw7/src => src}/documentation/tutorial/toc.html (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/CDATAReader.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/ContentReader.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/IXMLBuilder.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/IXMLElement.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/IXMLEntityResolver.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/IXMLParser.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/IXMLReader.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/IXMLValidator.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/NonValidator.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/PIReader.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/StdXMLBuilder.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/StdXMLParser.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/StdXMLReader.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/ValidatorPlugin.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/XMLAttribute.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/XMLElement.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/XMLEntityResolver.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/XMLException.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/XMLParseException.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/XMLParserFactory.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/XMLUtil.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/XMLValidationException.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/XMLWriter.java (100%) rename {jhotdraw7/src => src}/main/java/net/n3/nanoxml/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/AbstractApplication.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/AbstractApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/AbstractView.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/AbstractView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/AppletApplication.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/Application.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/ApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/DefaultApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/DefaultMenuBuilder.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/Disposable.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/EmptyApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/EmptyMenuBuilder.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/Labels.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/Labels_de.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/Labels_fr.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/MDIApplication.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/MenuBuilder.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/OSXApplication.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/PrintableView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/SDIApplication.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/View.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/AbstractApplicationAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/AbstractSaveUnsavedChangesAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/AbstractViewAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/ActionUtil.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/app/AboutAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/app/AbstractPreferencesAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/app/ExitAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/app/OpenApplicationAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/app/OpenApplicationFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/app/PrintApplicationFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/app/ReOpenApplicationAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/app/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/AbstractFindAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/AbstractSelectionAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/ClearSelectionAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/CopyAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/CutAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/DeleteAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/DuplicateAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/PasteAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/RedoAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/SelectAllAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/UndoAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/edit/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/ClearFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/ClearRecentFilesMenuAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/CloseFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/ExportFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/LoadDirectoryAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/LoadFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/LoadRecentFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/NewFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/NewWindowAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/OpenDirectoryAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/OpenFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/OpenRecentFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/PrintFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/SaveFileAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/SaveFileAsAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/file/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/editCopy.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/editCut.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/editPaste.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/editRedo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/editUndo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/fileNew.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/fileOpen.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/filePrint.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/fileSave.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/images/spacerIcon.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/view/ToggleViewPropertyAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/view/ViewPropertyAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/view/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/window/ArrangeWindowsAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/window/FocusWindowAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/window/MaximizeWindowAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/window/MinimizeWindowAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/window/TogglePaletteAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/window/ToggleToolBarAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/window/ToggleVisibleAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/action/window/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/osx/OSXAdapter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/osx/OSXPaletteHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/osx/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/editCopy.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/editCut.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/editPaste.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/editRedo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/editUndo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/fileNew.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/fileOpen.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/filePrint.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/fileSave.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/app/resources/spacerIcon.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/beans/AbstractBean.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/beans/PropertyChangeEdit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/beans/WeakPropertyChangeListener.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/beans/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/AbstractColorSlidersModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/AbstractColorWheelImageProducer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/AbstractHarmonicRule.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/CIELABColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/CIELCHabColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/CIEXYChromaticityDiagramImageProducer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/CMYKGenericColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/CMYKNominalColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/ColorListCellRenderer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/ColorSliderModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/ColorSliderUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/ColorSquareImageProducer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/ColorTrackImageProducer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/ColorUtil.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/ColorWheelChooser.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/ColorWheelChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/ComplexColorWheelImageProducer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/CompositeColor.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/DefaultColorSliderModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/DefaultHarmonicColorModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/Generic CMYK Profile.icc (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/HSBColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/HSLColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/HSLHarmonicColorWheelImageProducer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/HSLPhysiologicColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/HSVColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/HSVHarmonicColorWheelImageProducer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/HSVPhysiologicColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/HarmonicColorModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/HarmonicRule.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/JColorWheel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/JColorWheel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/JHarmonicColorWheel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/JHarmonicColorWheel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/NamedColorSpace.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/PolarColorWheelImageProducer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/QuantizingColorWheelImageProducer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/SimpleHarmonicRule.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/images/Slider.northThumbs.small.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/images/Slider.westThumbs.small.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/color/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/AbstractAttributedCompositeFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/AbstractAttributedDecoratedFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/AbstractAttributedFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/AbstractCompositeFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/AbstractConstrainer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/AbstractDrawing.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/AbstractFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/AttributeKey.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/AttributeKeys.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/BezierFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/CompositeFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/ConnectionFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/Constrainer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DecoratedFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DefaultDrawing.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DefaultDrawingEditor.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DefaultDrawingView.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DefaultDrawingView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DefaultDrawingViewBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DefaultDrawingViewTransferHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DiamondFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/Drawing.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DrawingEditor.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DrawingEditorProxy.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/DrawingView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/EllipseFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/Figure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/FigureLayerComparator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/GraphicalCompositeFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/GridConstrainer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/GroupFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/ImageFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/ImageHolderFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/LabelFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/LabeledLineConnectionFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/Labels.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/Labels_de.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/LineConnectionFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/LineFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/ListFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/QuadTreeCompositeFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/QuadTreeDrawing.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/RectangleFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/RotationDirection.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/RoundRectangleFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/TextAreaFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/TextFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/TextHolderFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/TranslationDirection.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/TriangleFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/AbstractDrawingEditorAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/AbstractDrawingViewAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/AbstractSelectedAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/AlignAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/ApplyAttributesAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/AttributeAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/AttributeToggler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/BringToFrontAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/ButtonFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/ColorIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/DefaultAttributeAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/DrawingAttributeAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/DrawingColorChooserAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/DrawingColorChooserHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/DrawingColorIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/EditCanvasAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/EditCanvasPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/EditCanvasPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/EditGridAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/EditGridPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/EditGridPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/EditorColorChooserAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/EditorColorIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/FontChooserHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/GroupAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/ImageBevelBorder.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/IncreaseHandleDetailLevelAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/LineDecorationIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/MoveAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/MoveConstrainedAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/PickAttributesAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/SelectSameAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/SelectionColorChooserAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/SelectionColorChooserHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/SelectionColorIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/SendToBackAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/StrokeIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/ToggleGridAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/UngroupAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/ZoomAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/ZoomEditorAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/actions.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/alignEast.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/alignGrid.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/alignGridSmall.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/alignHorizontal.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/alignNorth.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/alignSouth.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/alignVertical.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/alignWest.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attribute.color.colorChooser.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attribute.color.noColor.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeFillColor.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeFont.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeFontBold.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeFontBold_de.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeFontItalic.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeFontItalic_de.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline_de.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeOpacity.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeStrokeCap.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeStrokeColor.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeStrokeDashes.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeStrokeDecoration.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeStrokeJoin.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeStrokePlacement.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeStrokeType.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeStrokeWidth.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributeTextColor.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributesApply.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/attributesPick.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createArrow.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createCurvedConnection.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createDiamond.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createElbowConnection.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createEllipse.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createImage.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createLine.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createLineConnection.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createPolygon.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createRectangle.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createRoundRectangle.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createScribble.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createText.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createTextArea.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/createTriangle.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/editCopy.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/editCut.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/editPaste.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/editRedo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/editUndo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/fileNew.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/fileOpen.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/filePrint.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/fileSave.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/moveDown.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/moveEast.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/moveNorth.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/moveSouth.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/moveToBack.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/moveToFront.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/moveUp.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/moveWest.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/popupIcon.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/selectionGroup.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/selectionTool.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/selectionUngroup.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/images/spacerIcon.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/action/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/AbstractConnector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/ChopBezierConnector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/ChopDiamondConnector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/ChopEllipseConnector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/ChopRectangleConnector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/ChopRoundRectangleConnector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/ChopTriangleConnector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/Connector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/LocatorConnector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/StickyRectangleConnector.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/connector/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/decoration/AbstractLineDecoration.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/decoration/ArrowTip.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/decoration/CompositeLineDecoration.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/decoration/GeneralPathTip.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/decoration/LineDecoration.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/decoration/PerpendicularBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/decoration/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/AbstractAttributeEditorHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/AttributeChangeEdit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/BezierNodeEdit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/CompositeFigureEdit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/CompositeFigureEvent.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/CompositeFigureListener.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/DrawingAttributeEditorHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/DrawingComponentRepainter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/FigureAdapter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/FigureAttributeEditorHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/FigureEvent.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/FigureListener.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/FigureSelectionEvent.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/FigureSelectionListener.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/HandleEvent.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/HandleListener.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/HandleMulticaster.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/SelectionComponentDisplayer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/SelectionComponentRepainter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/SetBoundsEdit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/ToolAdapter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/ToolEvent.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/ToolListener.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/TransformEdit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/TransformRestoreEdit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/event/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/JAttributeSlider.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/JAttributeSlider.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/JAttributeSliderBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/JAttributeTextAreaBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/JAttributeTextField.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/JAttributeTextField.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/JAttributeTextFieldBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/gui/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/AbstractConnectionHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/AbstractHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/AbstractRotateHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/BezierControlPointHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/BezierNodeHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/BezierOutlineHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/BezierScaleHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/BoundsOutlineHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/CloseHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/ConnectionEndHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/ConnectionStartHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/ConnectorHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/DragHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/FontSizeHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/Handle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/HandleAttributeKeys.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/LocatorHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/MoveHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/NullHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/OrientationHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/ResizeHandleKit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/RotateHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/RoundRectangleRadiusHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/TextOverflowHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/TransformHandleKit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/handle/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/io/DOMStorableInputOutputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/io/ImageInputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/io/ImageOutputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/io/InputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/io/OutputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/io/SerializationInputOutputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/io/TextInputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/io/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/layouter/AbstractLayouter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/layouter/HorizontalLayouter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/layouter/Layouter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/layouter/LocatorLayouter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/layouter/VerticalLayouter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/layouter/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/liner/CurvedLiner.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/liner/ElbowLiner.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/liner/Liner.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/liner/SlantedLiner.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/liner/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/locator/AbstractLocator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/locator/BezierLabelLocator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/locator/BezierPointLocator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/locator/FontSizeLocator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/locator/Locator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/locator/RelativeDecoratorLocator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/locator/RelativeLocator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/locator/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/print/DrawingPageable.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/print/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/text/FloatingTextArea.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/text/FloatingTextField.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/text/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/AbstractTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/BezierTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/ConnectionTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/CreationTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/DefaultDragTracker.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/DefaultHandleTracker.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/DefaultSelectAreaTracker.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/DelegationSelectionTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/DnDTracker.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/DragTracker.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/HandleTracker.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/ImageTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/SelectAreaTracker.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/SelectionTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/TextAreaCreationTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/TextAreaEditingTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/TextCreationTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/TextEditingTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/Tool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/draw/tool/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/Bezier.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/BezierPath.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/BezierPathIterator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/ConvexHull.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/Dimension2DDouble.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/DoubleStroke.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/Geom.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/GrowStroke.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/Insets2D.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/Polygon2D.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/QuadTree.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/Shapes.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/geom/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/Arrangeable.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/AttributeEditor.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/DisclosureIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/EditableComponent.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/EmptyIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JComponentPopup.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JDisclosureToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JDisclosureToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JDisclosureToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JFileURIChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JFontChooser.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JFontChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JLifeFormattedTexAreaBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JLifeFormattedTextField.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JLifeFormattedTextField.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JLifeFormattedTextFieldBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JMDIDesktopPane.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JPopupButton.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JPopupButton.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JPopupButtonBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/JSheet.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/Labels.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/Labels_de.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/PlacardScrollPaneLayout.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/ToolBarLayout.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/URIChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/VerticalGridLayout.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/Worker.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/AWTClipboard.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/AbstractClipboard.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/AbstractTransferable.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/ClipboardUtil.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/CompositeTransferable.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/ImageTransferable.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/InputStreamTransferable.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/JNLPClipboard.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/OSXClipboard.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/datatransfer/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/event/GenericListener.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/event/SheetEvent.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/event/SheetListener.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/event/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/filechooser/ExtensionFileFilter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/filechooser/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/fontchooser/AbstractFontChooserModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/fontchooser/DefaultFontChooserModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/fontchooser/FontChooserModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/fontchooser/FontCollectionNode.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/fontchooser/FontFaceNode.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/fontchooser/FontFamilyNode.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/fontchooser/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/FontChooserUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/BackdropBorder.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/MultiIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteBorders.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonBorder.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorChooserUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorSliderUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteFormattedTextFieldUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteLabelUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteLazyActionMap.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteListCellRenderer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteListUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteLookAndFeel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteMenuItemUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PalettePanelUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteRootPaneUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderThumbIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteTabbedPaneUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextComponentBorder.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextFieldUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarBorder.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarUI.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/PaletteUtilities.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorSliderTextFieldHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSliderModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.northThumbs.small.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.westThumbs.small.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/gui/plaf/palette/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/io/Base64.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/io/BoundedRangeInputStream.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/io/StreamPosTokenizer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/io/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/net/ClientHttpRequest.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/net/URIUtil.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/net/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/overview.html (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/color/JMixer.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/color/JMixer.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/color/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawApplet.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawApplet.html (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawApplet.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawFigureFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.html (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawView.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawingPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawingPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/DrawingPanelBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/Main.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/draw/plasmadraw.xml (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/font/FontChooserMain.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/font/FontChooserMain.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/font/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/AnimationSample.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/AnimationSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/BezierDemo.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/BezierDemo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/BorderRectangleFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/ConnectingFiguresSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/CreationToolSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/DefaultDOMStorableSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/DnDMultiEditorSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/EditorSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/FileIconsSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/LabeledLineConnectionFigureSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/LayouterSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/MovableChildFiguresSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/MultiEditorSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/SelectionToolSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/SmartConnectionFigureSample.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/StraightLineFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/mini/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/Labels.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/Labels_de.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/Main.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/NetApplet.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/NetApplet.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/NetApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/NetFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/NetPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/NetPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/NetView.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/NetView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/figures/NodeFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/figures/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/images/createLink.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/images/createNode.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/net/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/Gradient.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/Labels.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/Main.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGAttributeKeys.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGConstants.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGDrawing.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGDrawingPanelBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanelBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGView.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/ODGView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/PathTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/action/CombineAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/action/SplitAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/action/TogglePropertiesPanelAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/action/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/ODGAttributedFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/ODGBezierFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/ODGEllipseFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/ODGFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/ODGGroupFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/ODGPathFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/ODGPathOutlineHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/ODGRectFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/ODGRectRadiusHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/figures/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/geom/EnhancedPath.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/geom/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/io/DefaultODGFigureFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/io/ODGFigureFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/io/ODGInputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/io/ODGStylesReader.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/io/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/odg/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/Labels.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/Labels_de.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/Main.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/PertApplet.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/PertApplet.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/PertApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/PertFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/PertPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/PertPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/PertView.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/PertView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/figures/DependencyFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/figures/SeparatorLineFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/figures/TaskFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/figures/package-info.java (100%) rename {JHotDraw/src/CH/ifa/draw => src/main/java/org/jhotdraw/samples/pert}/images/PERT1.gif (100%) rename {JHotDraw/src/CH/ifa/draw => src/main/java/org/jhotdraw/samples/pert}/images/PERT2.gif (100%) rename {JHotDraw/src/CH/ifa/draw => src/main/java/org/jhotdraw/samples/pert}/images/PERT3.gif (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/images/createDependency.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/images/createTask.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/pert/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/Gradient.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/Labels.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/Labels_de.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/LinearGradient.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/Main.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/PathTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/RadialGradient.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGApplet.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGApplet.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGAttributeKeys.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGConstants.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGCreateFromFileTool.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGDrawingPanelBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGView.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/SVGView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/CombineAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/SplitAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/ViewSourceAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/actions.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/alignEast.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/alignGrid.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/alignHorizontal.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/alignNorth.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/alignSouth.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/alignVertical.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/alignWest.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.colorChooser.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.noColor.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeFillColor.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeFont.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeFontBold.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeFontItalic.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeFontSize.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeFontUnderline.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeOpacity.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeCap.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeColor.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDashes.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDecoration.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeJoin.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeWidth.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributesApply.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/attributesPick.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/createArrow.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/createEllipse.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/createImage.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/createLine.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/createPolygon.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/createRectangle.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/createScribble.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/createText.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/createTextArea.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/editRedo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/editUndo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/moveDown.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/moveToBack.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/moveToFront.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/moveUp.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/images/selectionTool.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/action/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/ConvexHullOutlineHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/LinkHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGAttributedFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGBezierFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGEllipseFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGGroupFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGImageFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGPathFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGPathOutlineHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGRectFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGRectRadiusHandle.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGTextAreaFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/SVGTextFigure.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/figures/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/AlignToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/DrawingComponent.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/DrawingOpacityIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/FigureToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/FillToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/FontToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/LinkToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/SelectionOpacityIcon.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ServerAuthenticationException.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/ViewToolBarBeanInfo.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/gui/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/io/DefaultSVGFigureFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/io/ImageMapOutputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/io/SVGElementFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/io/SVGFigureFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/io/SVGInputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/io/SVGOutputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/io/SVGZInputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/io/SVGZOutputFormat.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/io/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/svg/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/FindDialog.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/FindDialog.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/JEditorArea.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/JEditorArea.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/Labels.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/Labels_de.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/Main.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/TeddyApplicationModel.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/TeddyView.form (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/TeddyView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/action/FindAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/action/ToggleLineNumbersAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/action/ToggleLineWrapAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/action/ToggleStatusBarAction.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/action/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/io/LFWriter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/io/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/regex/MatchType.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/regex/Matcher.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/regex/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/text/NumberedEditorKit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/text/NumberedParagraphView.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/text/NumberedViewFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/samples/teddy/text/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/text/ColorFormatter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/text/ColorToolTipTextFormatter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/text/FontFormatter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/text/JavaNumberFormatter.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/text/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/undo/CompositeEdit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/undo/Labels.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/undo/Labels_de.properties (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/undo/NonUndoableEdit.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/undo/UndoRedoManager.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/undo/images/editRedo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/undo/images/editUndo.png (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/undo/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/util/Images.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/util/LocaleUtil.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/util/Methods.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/util/ResourceBundleUtil.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/util/ReversedList.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/util/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/util/prefs/PreferencesUtil.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/util/prefs/ToolBarPrefsHandler.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/util/prefs/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/DOMFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/DOMInput.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/DOMOutput.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/DOMStorable.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/DefaultDOMFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/JavaPrimitivesDOMFactory.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/JavaxDOMInput.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/JavaxDOMOutput.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/NanoXMLDOMInput.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/NanoXMLDOMOutput.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/XMLTransferable.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/css/CSSParser.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/css/CSSRule.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/css/StyleManager.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/css/package-info.java (100%) rename {jhotdraw7/src => src}/main/java/org/jhotdraw/xml/package-info.java (100%) rename {jhotdraw7/src => src}/main/resources/JHotDrawIcons.png (100%) rename {jhotdraw7/src => src}/main/resources/sRGBmatrix.m (100%) rename {jhotdraw7/src => src}/main/resources/xyToRGBmatrix.m (100%) rename {jhotdraw7/src => src}/test/java/org/jhotdraw/geom/BezierPathTest.java (100%) diff --git a/jhotdraw7/.classpath b/.classpath similarity index 100% rename from jhotdraw7/.classpath rename to .classpath diff --git a/jhotdraw7/.project b/.project similarity index 100% rename from jhotdraw7/.project rename to .project diff --git a/JHotDraw/JavaDrawApplet.html b/JHotDraw/JavaDrawApplet.html deleted file mode 100644 index 64fbbd431..000000000 --- a/JHotDraw/JavaDrawApplet.html +++ /dev/null @@ -1,69 +0,0 @@ -<html> - -<head> - <title>JHotDraw Applet</title> -</head> -<body> -<h1>JavaDraw Applet</h1> -<b><a href="CH/ifa/draw/samples/javadraw/JavaDrawAppletHelp.html">Description</a></b> -<hr> - -<!--"CONVERTED_APPLET"--> -<!-- HTML CONVERTER --> -<SCRIPT LANGUAGE="JavaScript"><!-- - var _info = navigator.userAgent; - var _ns = false; - var _ns6 = false; - var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 && _info.indexOf("Windows 3.1") < 0); -//--></SCRIPT> - <COMMENT> - <SCRIPT LANGUAGE="JavaScript1.1"><!-- - var _ns = (navigator.appName.indexOf("Netscape") >= 0 && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || (_info.indexOf("Sun") > 0) || (_info.indexOf("Linux") > 0) || (_info.indexOf("AIX") > 0) || (_info.indexOf("OS/2") > 0) || (_info.indexOf("IRIX") > 0))); - var _ns6 = ((_ns == true) && (_info.indexOf("Mozilla/5") >= 0)); -//--></SCRIPT> - </COMMENT> - -<SCRIPT LANGUAGE="JavaScript"><!-- - if (_ie == true) document.writeln('<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH = 560 HEIGHT = 370 codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"><NOEMBED><XMP>'); - else if (_ns == true && _ns6 == false) document.writeln('<EMBED - type="application/x-java-applet;version=1.4" - CODE = "CH.ifa.draw.samples.javadraw.JavaDrawApplet.class" - ARCHIVE = "jhotdraw.jar" - WIDTH = 560 - HEIGHT = 370 - DRAWINGS ="Demo Pert" - Demo ="drawings/demo.draw" - Pert ="drawings/pert.draw" - scriptable=false - pluginspage="http://java.sun.com/products/plugin/index.html#download"><NOEMBED><XMP>'); -//--></SCRIPT> -<APPLET CODE = "CH.ifa.draw.samples.javadraw.JavaDrawApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 560 HEIGHT = 370></XMP> - <PARAM NAME = CODE VALUE = "CH.ifa.draw.samples.javadraw.JavaDrawApplet.class" > - <PARAM NAME = ARCHIVE VALUE = "jhotdraw.jar" > - <PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"> - <PARAM NAME="scriptable" VALUE="false"> - <PARAM NAME = DRAWINGS VALUE ="Demo Pert"> - <PARAM NAME = Demo VALUE ="drawings/demo.draw"> - <PARAM NAME = Pert VALUE ="drawings/pert.draw"> - - -</APPLET> -</NOEMBED> -</EMBED> -</OBJECT> - -<!-- -<APPLET CODE = "CH.ifa.draw.samples.javadraw.JavaDrawApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 560 HEIGHT = 370> -<PARAM NAME = DRAWINGS VALUE ="Demo Pert"> -<PARAM NAME = Demo VALUE ="drawings/demo.draw"> -<PARAM NAME = Pert VALUE ="drawings/pert.draw"> - - -</APPLET> ---> -<!--"END_CONVERTED_APPLET"--> - - -</body> -</html> - diff --git a/JHotDraw/JavaDrawViewer.html b/JHotDraw/JavaDrawViewer.html deleted file mode 100644 index 8b08ff902..000000000 --- a/JHotDraw/JavaDrawViewer.html +++ /dev/null @@ -1,63 +0,0 @@ -<html> - -<head> - <title>JavaDraw Viewer</title> -</head> -<h1>JavaDraw Viewer</h1> -<hr> - -<body> - -<!--"CONVERTED_APPLET"--> -<!-- HTML CONVERTER --> -<SCRIPT LANGUAGE="JavaScript"><!-- - var _info = navigator.userAgent; - var _ns = false; - var _ns6 = false; - var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 && _info.indexOf("Windows 3.1") < 0); -//--></SCRIPT> - <COMMENT> - <SCRIPT LANGUAGE="JavaScript1.1"><!-- - var _ns = (navigator.appName.indexOf("Netscape") >= 0 && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || (_info.indexOf("Sun") > 0) || (_info.indexOf("Linux") > 0) || (_info.indexOf("AIX") > 0) || (_info.indexOf("OS/2") > 0) || (_info.indexOf("IRIX") > 0))); - var _ns6 = ((_ns == true) && (_info.indexOf("Mozilla/5") >= 0)); -//--></SCRIPT> - </COMMENT> - -<SCRIPT LANGUAGE="JavaScript"><!-- - if (_ie == true) document.writeln('<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH = 460 HEIGHT = 350 codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"><NOEMBED><XMP>'); - else if (_ns == true && _ns6 == false) document.writeln('<EMBED - type="application/x-java-applet;version=1.4" - CODE = "CH.ifa.draw.samples.javadraw.JavaDrawViewer.class" - ARCHIVE = "jhotdraw.jar" - WIDTH = 460 - HEIGHT = 350 - Drawing ="drawings/demo.draw" - scriptable=false - pluginspage="http://java.sun.com/products/plugin/index.html#download"><NOEMBED><XMP>'); -//--></SCRIPT> -<APPLET CODE = "CH.ifa.draw.samples.javadraw.JavaDrawViewer.class" ARCHIVE = "jhotdraw.jar" WIDTH = 460 HEIGHT = 350></XMP> - <PARAM NAME = CODE VALUE = "CH.ifa.draw.samples.javadraw.JavaDrawViewer.class" > - <PARAM NAME = ARCHIVE VALUE = "jhotdraw.jar" > - <PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"> - <PARAM NAME="scriptable" VALUE="false"> - <PARAM NAME = Drawing VALUE ="drawings/demo.draw"> - - -</APPLET> -</NOEMBED> -</EMBED> -</OBJECT> - -<!-- -<APPLET CODE = "CH.ifa.draw.samples.javadraw.JavaDrawViewer.class" ARCHIVE = "jhotdraw.jar" WIDTH = 460 HEIGHT = 350> -<PARAM NAME = Drawing VALUE ="drawings/demo.draw"> - - -</APPLET> ---> -<!--"END_CONVERTED_APPLET"--> - - -</body> -</html> - diff --git a/JHotDraw/NothingApplet.html b/JHotDraw/NothingApplet.html deleted file mode 100644 index ce946c936..000000000 --- a/JHotDraw/NothingApplet.html +++ /dev/null @@ -1,63 +0,0 @@ -<html> - -<head> - <title>Nothing Applet</title> -</head> -<body> - -<!--"CONVERTED_APPLET"--> -<!-- HTML CONVERTER --> -<SCRIPT LANGUAGE="JavaScript"><!-- - var _info = navigator.userAgent; - var _ns = false; - var _ns6 = false; - var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 && _info.indexOf("Windows 3.1") < 0); -//--></SCRIPT> - <COMMENT> - <SCRIPT LANGUAGE="JavaScript1.1"><!-- - var _ns = (navigator.appName.indexOf("Netscape") >= 0 && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || (_info.indexOf("Sun") > 0) || (_info.indexOf("Linux") > 0) || (_info.indexOf("AIX") > 0) || (_info.indexOf("OS/2") > 0) || (_info.indexOf("IRIX") > 0))); - var _ns6 = ((_ns == true) && (_info.indexOf("Mozilla/5") >= 0)); -//--></SCRIPT> - </COMMENT> - -<SCRIPT LANGUAGE="JavaScript"><!-- - if (_ie == true) document.writeln('<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH = 560 HEIGHT = 370 codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"><NOEMBED><XMP>'); - else if (_ns == true && _ns6 == false) document.writeln('<EMBED - type="application/x-java-applet;version=1.4" - CODE = "CH.ifa.draw.samples.nothing.NothingApplet.class" - ARCHIVE = "jhotdraw.jar" - WIDTH = 560 - HEIGHT = 370 - DRAWINGS ="Nothing" - Nothing ="drawings/nothing.draw" - scriptable=false - pluginspage="http://java.sun.com/products/plugin/index.html#download"><NOEMBED><XMP>'); -//--></SCRIPT> -<APPLET CODE = "CH.ifa.draw.samples.nothing.NothingApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 560 HEIGHT = 370></XMP> - <PARAM NAME = CODE VALUE = "CH.ifa.draw.samples.nothing.NothingApplet.class" > - <PARAM NAME = ARCHIVE VALUE = "jhotdraw.jar" > - <PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"> - <PARAM NAME="scriptable" VALUE="false"> - <PARAM NAME = DRAWINGS VALUE ="Nothing"> - <PARAM NAME = Nothing VALUE ="drawings/nothing.draw"> - - -</APPLET> -</NOEMBED> -</EMBED> -</OBJECT> - -<!-- -<APPLET CODE = "CH.ifa.draw.samples.nothing.NothingApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 560 HEIGHT = 370> -<PARAM NAME = DRAWINGS VALUE ="Nothing"> -<PARAM NAME = Nothing VALUE ="drawings/nothing.draw"> - - -</APPLET> ---> -<!--"END_CONVERTED_APPLET"--> - - -</body> -</html> - diff --git a/JHotDraw/PertApplet.html b/JHotDraw/PertApplet.html deleted file mode 100644 index bb988927f..000000000 --- a/JHotDraw/PertApplet.html +++ /dev/null @@ -1,66 +0,0 @@ -<html> - -<head> - <title>Draw Applet</title> -</head> -<h1>PERT Applet</h1> -<b><a href="CH/ifa/draw/samples/pert/PertAppletHelp.html">Description</a></b> -<hr> -<body> - -<!--"CONVERTED_APPLET"--> -<!-- HTML CONVERTER --> -<SCRIPT LANGUAGE="JavaScript"><!-- - var _info = navigator.userAgent; - var _ns = false; - var _ns6 = false; - var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 && _info.indexOf("Windows 3.1") < 0); -//--></SCRIPT> - <COMMENT> - <SCRIPT LANGUAGE="JavaScript1.1"><!-- - var _ns = (navigator.appName.indexOf("Netscape") >= 0 && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || (_info.indexOf("Sun") > 0) || (_info.indexOf("Linux") > 0) || (_info.indexOf("AIX") > 0) || (_info.indexOf("OS/2") > 0) || (_info.indexOf("IRIX") > 0))); - var _ns6 = ((_ns == true) && (_info.indexOf("Mozilla/5") >= 0)); -//--></SCRIPT> - </COMMENT> - -<SCRIPT LANGUAGE="JavaScript"><!-- - if (_ie == true) document.writeln('<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH = 550 HEIGHT = 340 codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"><NOEMBED><XMP>'); - else if (_ns == true && _ns6 == false) document.writeln('<EMBED - type="application/x-java-applet;version=1.4" - CODE = "CH.ifa.draw.samples.pert.PertApplet.class" - ARCHIVE = "jhotdraw.jar" - WIDTH = 550 - HEIGHT = 340 - DRAWINGS ="SAMPLE" - SAMPLE ="drawings/pert.draw" - scriptable=false - pluginspage="http://java.sun.com/products/plugin/index.html#download"><NOEMBED><XMP>'); -//--></SCRIPT> -<APPLET CODE = "CH.ifa.draw.samples.pert.PertApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 550 HEIGHT = 340></XMP> - <PARAM NAME = CODE VALUE = "CH.ifa.draw.samples.pert.PertApplet.class" > - <PARAM NAME = ARCHIVE VALUE = "jhotdraw.jar" > - <PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"> - <PARAM NAME="scriptable" VALUE="false"> - <PARAM NAME = DRAWINGS VALUE ="SAMPLE"> - <PARAM NAME = SAMPLE VALUE ="drawings/pert.draw"> - - -</APPLET> -</NOEMBED> -</EMBED> -</OBJECT> - -<!-- -<APPLET CODE = "CH.ifa.draw.samples.pert.PertApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 550 HEIGHT = 340> -<PARAM NAME = DRAWINGS VALUE ="SAMPLE"> -<PARAM NAME = SAMPLE VALUE ="drawings/pert.draw"> - - -</APPLET> ---> -<!--"END_CONVERTED_APPLET"--> - - -</body> -</html> - diff --git a/JHotDraw/README.html b/JHotDraw/README.html deleted file mode 100644 index 7f6e1c9b5..000000000 --- a/JHotDraw/README.html +++ /dev/null @@ -1,88 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - <title>JHotDraw 5.4</title> -</head> -<body> - -<h1>JHotDraw 5.4</h1> - -<hr><p> -<b>Preface: This is a beta release [JHotDraw5.4b1]<p> -This beta release contains the latest CVS snapshot and should be considered as progress -in work. It has not been extensively tested but is aimed to give developers access to a -more recent version of JHotDraw that 5.3.<p> -The release includes numereous new features among them: undo/redo support, enhanced MDI support, -many new figures (TextArea and figures with HTML support), zooming, minimap preview, -bug fixes,...<p> -Moreover, it contains a skeleton test suite which has been generated using JUnitDoclet. -The tests are compilable but not functional. Anyway, the excuse for not writing tests -because there weren't any is now not valid anymore ;-) Anyone contributing tests and filling the -test suite with life is welcome!<p> -Finally, developers who require a more stable release or are not willing to bear with some -bugs and exceptions should not use this beta release. Anyone else gets a preview of -the new functionality and compatibility. Any comments are welcome but (timely) response -cannot be guaranteed. -</b> -<p> - -<hr>This document gives an overview of the JHotDraw distribution, describes - how to install it, and offers links for getting started. Please refer to -the <a href="doc/ReleaseNotes.html"> release notes</a> for more information -about the 5.4 release. -<h3>Contents</h3> -<pre>JHotDraw<br> - drawings sample drawings<br> - documentation documentation for JHotDraw<br> - javadoc javadoc generated documentation<br> - pattlets pattern summary slides. They are referred<br> - to from the javadoc documentation.<br><br> - CH the JHotDraw class files<br> - ifa<br> - draw<br> - images image resources<br> - util common utilities that are independent of<br> - JHotDraw<br> - framework JHotDraw framework<br> - standard standard implementations of the JHotDraw<br> - framework abstractions<br> - figures a set of figures and their support classes<br> - applet standard UI for JHotDraw applets<br> - application standard UI for JHotDraw applications<br> - contrib a package with contributions to JHotDraw<br> - samples<br> - nothing Nothing sample<br> - javadraw JHotDraw sample<br> - pert PERT sample<br> - net A simple node and connections editor<br><br> - sources the java source files mirror the<br> - hierarchy of the class files<br><br></pre> -<h3>Installation</h3> -The distribution includes no development environment specificconfiguration -or makefiles. -<p>To run the applets doesn't require any further installation steps.Refer - to the <a href="doc/samples.html">samples</a> to view the sample applets.</p> - -<p>To run the sample applications you should include the JHotDraw directory -in your CLASSPATH. <b>Note</b> using a relative path to refer to JHotDraw -can result in class loading errors. You run into this problem when the application's -working directory is changed with a file dialog.</p> - -<h3>Getting Started</h3> - To get started check out the <a href="doc/samples.html">samples</a> and the -<a href="doc/documentation.html">documentation</a> delivered with JHotDraw. - -<h3>Legal</h3> - These release is distributed under <a href="lgpl-license.html">LGPL</a>.<br> - <br> - The original version of JHotDraw is copyright 1996, 1997 by IFA Informatik -and <a href="mailto:erich_gamma@acm.org">Erich Gamma</a>. -<p>It is hereby granted that this software can be used, copied, modified, -anddistributed without fee provided that this copyright noticeappears in -all copies.</p> - -<hr><br> - <br> - -</body> -</html> diff --git a/JHotDraw/build/build.properties b/JHotDraw/build/build.properties deleted file mode 100644 index 234fe2cb5..000000000 --- a/JHotDraw/build/build.properties +++ /dev/null @@ -1 +0,0 @@ -dest.dir=.. \ No newline at end of file diff --git a/JHotDraw/build/build.xml b/JHotDraw/build/build.xml deleted file mode 100644 index ebee28b61..000000000 --- a/JHotDraw/build/build.xml +++ /dev/null @@ -1,370 +0,0 @@ -<?xml version="1.0"?> - -<project name="JHotDraw" default="main" basedir="."> - - <!-- Give user a chance to override without editing this file - (and without typing -D each time it compiles it --> - <property file="${user.home}/.ant.properties"/> - <property file="build.properties"/> - <!-- user-dependent properties can include (for copy and paste into mybuild.properties): - junit.class.path= - junitdoclet.class.path= - versiondoclet.class.path= - checkstyle.class.path= - namingstrategy.class.path= - jdo.class.path = - batik.class.path = <batik-dom.jar;batik-svggen.jar;batik-awt-util.jar> - Note: be sure to use forward slashes as path separators even on Windows systems - --> - <property file="mybuild.properties"/> - - <property name="build.classes" value="${dest.dir}"/> - <property name="build.jar.name" value="jhotdraw.jar"/> - <property name="build.jar" value="${dest.dir}/${build.jar.name}"/> - <property name="deploy.dir" value="${dest.dir}/deploy"/> - <property name="zip.file" value="${deploy.dir}/jhotdraw.zip"/> - - <property name="src.dir" value="${dest.dir}/src"/> - <property name="images.dir" value="CH/ifa/draw/images"/> - <property name="javadraw.images.dir" value="CH/ifa/draw/samples/javadraw/sampleimages"/> - <property name="pert.images.dir" value="CH/ifa/draw/samples/pert/images"/> - - <property name="javadoc.dir" value="${dest.dir}/javadoc"/> - <property name="mk.dir" value="${dest.dir}/build"/> - <property name="testsuite.package.name" value="CH.ifa.draw.test"/> - <property name="testsuite" value="${testsuite.package.name}.AllTests"/> - - <property name="javac.deprecation" value="off"/> - <property name="javac.includes" value="**/*.java"/> - - <property name="manifest.name" value="jhotdraw.mf"/> - - <!-- Dependencies on optional packages --> - <!--<property name="needs.batik.src" value="CH/ifa/draw/contrib/SVG*.java"/> - <property name="needs.jdo.src" value="CH/ifa/draw/util/JDOStorageFormat.java"/> - --> - <property name="needs.batik.src" value="**/SVG*.java"/> - <property name="needs.jdo.src" value="**/JDOStorageFormat.java"/> - <property name="needs.junit.src" value="CH/ifa/draw/test/**"/> - - <property name="needs.batik.class" value="CH.ifa.draw.contrib.SVG*"/> - <property name="needs.jdo.class" value="CH.ifa.draw.util.JDOStorageFormat"/> - <property name="needs.junit.class" value="CH.ifa.draw.test.*"/> - - <property name="test.packages" value="CH.ifa.draw.test.*"/> - - <property environment="env"/> - - <!-- =================================================================== --> - <!-- Set timestamp and check for optional packages --> - <!-- =================================================================== --> - <target name="init"> - <tstamp/> - </target> - - <target name="check_for_optional_packages"> - <available property="batik.available" file="${batik.class.path}"/> - <available property="jdo.available" file="{jdo.class.path}"/> - <available property="versiondoclet.available" file="${versiondoclet.class.path}"/> - <available property="junit.available" file="${junit.class.path}"/> - <available property="junitdoclet.available" file="${junitdoclet.class.path}"/> - <available property="namingstrategy.available" file="${namingstrategy.class.path}"/> - </target> - - <!-- =================================================================== --> - <!-- Builds a complete package with all files from scratch --> - <!-- =================================================================== --> - <target name="all" depends="clean, main, javadoc, junit_test, deploy"> - </target> - - <!-- =================================================================== --> - <!-- Builds a package with all essential files --> - <!-- =================================================================== --> - <target name="main" depends="init, compile, copy_resources, jar"> - </target> - - <!-- =================================================================== --> - <!-- Compiles the source code --> - <!-- =================================================================== --> - <target name="compile" - depends="check_for_optional_packages, delete_dependants" - description="Compiles the source code"> - <javac srcdir="${src.dir}" - destdir="${build.classes}" - debug="${javac.debug}" - deprecation="${javac.deprecation}" - optimize="${javac.optimize}" - fork="${javac.fork}"> - <include name="CH/ifa/draw/framework/**"/> - </javac> - <javac srcdir="${src.dir}" - destdir="${build.classes}" - debug="${javac.debug}" - deprecation="${javac.deprecation}" - optimize="${javac.optimize}" - fork="${javac.fork}"> - <include name="${javac.includes}"/> - <exclude name="CH/ifa/draw/framework/**"/> - <exclude name="${needs.batik.src}" unless="batik.available"/> - <exclude name="${needs.jdo.src}" unless="jdo.available"/> - <exclude name="${needs.junit.src}"/> - <classpath> - <pathelement path="${java.class.path}"/> - <pathelement path="${jdo.class.path}"/> - <pathelement path="${batik.class.path}"/> - </classpath> - </javac> - </target> - - <target name="delete_dependants" unless="javac.nodepend"> - <depend srcdir="${src.dir}" destdir="${build.classes}" - cache="depcache" closure="yes"> - <include name="${javac.includes}"/> - <exclude name="${needs.batik.src}" unless="batik.available"/> - <exclude name="${needs.jdo.src}" unless="jdo.available"/> - <exclude name="${needs.junit.src}"/> - </depend> - </target> - - <!-- =================================================================== --> - <!-- Generates JavaDoc --> - <!-- =================================================================== --> - <target name="javadoc" depends="check_for_optional_packages"> - <antcall target="standard_javadoc"/> - <antcall target="versiondoclet_javadoc"/> - </target> - - <target name="standard_javadoc" unless="versiondoclet.available"> - <echo>using standard doclet...</echo> - <mkdir dir="${javadoc.dir}"/> - <javadoc - destdir = "${javadoc.dir}" - classpath = "${dest.dir}" - author = "false" - version = "true"> - <fileset dir="${src.dir}" > - <include name="${javac.includes}"/> - <exclude name="${needs.junit.src}"/> - </fileset> - - </javadoc> - </target> - - <target name="versiondoclet_javadoc" if="versiondoclet.available"> - <echo>using version doclet...</echo> - <mkdir dir="${javadoc.dir}"/> - <javadoc - destdir = "${javadoc.dir}" - classpath = "${dest.dir}" - author = "false" - version = "true"> - <fileset dir="${src.dir}" > - <include name="${javac.includes}"/> - <exclude name="${needs.junit.src}"/> - </fileset> - <doclet name="org.jhotdraw.tools.versiondoclet.VersionDoclet"> - <param name="-versionfile" value="${mk.dir}/${manifest.name}"/> - <param name="-version" value=""/> - <path> - <pathelement path="${versiondoclet.class.path}"/> - </path> - - </doclet> - </javadoc> - </target> - - <!-- =================================================================== --> - <!-- Generates JUnit tests using JUnitDoclet --> - <!-- =================================================================== --> - <path id="tools_path"> - <pathelement path="${java.home}/lib/tools.jar"/> - </path> - - <path id="junit_test_path"> - <pathelement path = "${dest.dir}"/> - <pathelement path = "${junit.class.path}"/> - <pathelement path = "${junitdoclet.class.path}"/> - <pathelement path = "${namingstrategy.class.path}"/> - <pathelement path = "${jdo.class.path}"/> - <pathelement path = "${batik.class.path}"/> - <pathelement path = "${java.class.path}"/> - </path> - - <target name="junit_doclet" depends="jar"> - <javadoc - classpath = "${dest.dir}" - sourcepath = "${src.dir}" - defaultexcludes = "yes"> - <package name="CH.ifa.draw.util.*"/> - <excludepackage name="${needs.batik.class}"/> - <excludepackage name="${needs.jdo.class}"/> - <excludepackage name="${test.packages}"/> - <doclet name="com.objectfab.tools.junitdoclet.JUnitDoclet"> - <param name="-d" value="${src.dir}"/> - <param name="-properties" value="jhotdraw_junitdoclet.properties"/> - <!-- <param name="-buildall"/> --> - <param name="-testintest"/> - <param name="-naming" value="org.jhotdraw.tools.testnaming.JHDTestNamingStrategy"/> - <path> - <pathelement path = "${junitdoclet.class.path}"/> - <pathelement path = "${namingstrategy.class.path}"/> - <pathelement path = "${jdo.class.path}"/> - <pathelement path = "${batik.class.path}"/> - </path> - </doclet> - </javadoc> - </target> - - <target name="junit_compile" depends="junit_doclet"> - <javac srcdir="${src.dir}" - destdir="${dest.dir}" - debug="${javac.debug}" - deprecation="${javac.deprecation}" - optimize="${javac.optimize}"> - <!-- <include name="${needs.junit.src}"/> --> - <include name="CH/ifa/draw/test/**/*.java"/> - <exclude name="${needs.batik.src}" unless="batik.available"/> - <exclude name="${needs.jdo.src}" unless="jdo.available"/> - <classpath> - <path refid="junit_test_path"/> - </classpath> - </javac> - </target> - - <target name="junit_test" depends="junit_compile"> - <junit fork="yes" haltonfailure="no"> - <formatter type="plain" usefile="no"/> - <classpath> - <path refid="junit_test_path"/> - </classpath> - <test name="${testsuite}"/> - </junit> - </target> - - <!-- =================================================================== --> - <!-- Style check --> - <!-- =================================================================== --> -<!-- - <taskdef name="checkstyle" classname="com.puppycrawl.tools.checkstyle.CheckStyleTask"/> - <target name="stylecheck"> - <checkstyle allowtabs="yes" - allownoauthor="yes" - maxlinelen="100" - headerfile="headerfile.txt" - headerignoreline="2" - relaxjavadoc="yes" - parampattern="." - constpattern="." - staticpattern="." - memberpattern="."> - <fileset dir="${src.dir}" includes="**/*.java"/> - </checkstyle> - </target> ---> - <!-- =================================================================== --> - <!-- Copies the resources into the build target directory --> - <!-- Resources are non-code that needs to be packed into some jar file --> - <!-- in their package structure, such as .gif, .properties, .html, etc. --> - <!-- =================================================================== --> - <target name="copy_resources"> - <copy toDir="${dest.dir}"> - <fileset dir="${src.dir}"> - <include name ="**/*.gif" /> - <include name ="**/*.html" /> - </fileset> - </copy> - </target> - - <!-- =================================================================== --> - <!-- Cleans up generated stuff --> - <!-- =================================================================== --> - <target name="clean" description="Cleans up generated stuff."> - <delete dir="${dest.dir}/CH"/> - <delete dir="${javadoc.dir}"/> - <delete file="${build.jar}"/> - <delete dir="${deploy.dir}"/> - </target> - - <!-- =================================================================== --> - <!-- The next section defines the Jar file layout. --> - <!-- =================================================================== --> - <target name="jar" depends="compile, copy_resources"> - <jar jarfile="${build.jar}" - manifest="${mk.dir}/${manifest.name}" - > - <fileset dir="${build.classes}"> - <include name="CH/**"/> - <exclude name="CH/ifa/draw/test/**"/> - </fileset> - </jar> - </target> - - <!-- =================================================================== --> - <!-- Create a zip file with all deployable content --> - <!-- =================================================================== --> - <target name="deploy"> - <delete dir="${deploy.dir}"/> - <mkdir dir="${deploy.dir}"/> - <zip zipfile="${zip.file}"> - <fileset dir="${dest.dir}"> - <include name="*/**"/> - <exclude name="**/CVS/**"/> - <exclude name="${deploy.dir}/**"/> - <exclude name=".project"/> - <exclude name=".classpath"/> - <exclude name="**/.cvsignore"/> - <exclude name="*/bin/**"/> - <exclude name="**/depcache/**"/> - </fileset> - </zip> - </target> - - <!-- =================================================================== --> - <!-- Run examples (and compile if necessary). --> - <!-- =================================================================== --> - <path id="example_path"> - <pathelement path="${java.class.path}/"/> - <pathelement path="${build.jar}/"/> - </path> - - <target name="javadraw" depends="main"> - <java classname="CH.ifa.draw.samples.javadraw.JavaDrawApp" fork="yes"> - <classpath> - <path refid="example_path"/> - </classpath> - </java> - </target> - - <target name="pert" depends="main"> - <java classname="CH.ifa.draw.samples.pert.PertApplication" fork="yes"> - <classpath> - <path refid="example_path"/> - </classpath> - </java> - </target> - - <target name="net" depends="main"> - <java classname="CH.ifa.draw.samples.net.NetApp" fork="yes"> - <classpath> - <path refid="example_path"/> - </classpath> - </java> - </target> - - <target name="nothing" depends="main"> - <java classname="CH.ifa.draw.samples.nothing.NothingApp" fork="yes"> - <classpath> - <path refid="example_path"/> - </classpath> - </java> - </target> - - <target name="svgdraw" depends="main" if="batik.available"> - <java classname="CH.ifa.draw.contrib.SVGDrawApp" fork="yes"> - <classpath> - <path refid="example_path"/> - <pathelement path="${env.CLASSPATH}"/> - </classpath> - </java> - </target> -</project> diff --git a/JHotDraw/build/jhotdraw.mf b/JHotDraw/build/jhotdraw.mf deleted file mode 100644 index c88d5613b..000000000 --- a/JHotDraw/build/jhotdraw.mf +++ /dev/null @@ -1,65 +0,0 @@ -Manifest-Version: 1.0 -Created-By: Ant 1.4 - -Name: CH/ifa/draw/applet/ -Sealed: true -Specification-Title: JHotDraw Default Applet -Specification-Version: 5.4 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: CH.ifa.draw.applet -Implementation-Version: 5.4 -Implementation-Vendor: http://www.jhotdraw.org - -Name: CH/ifa/draw/application/ -Sealed: true -Specification-Title: JHotDraw Default Application -Specification-Version: 5.4 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: CH.ifa.draw.application -Implementation-Version: 5.4 -Implementation-Vendor: http://www.jhotdraw.org - -Name: CH/ifa/draw/contrib/ -Sealed: true -Specification-Title: JHotDraw Contributions -Specification-Version: 5.4 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: CH.ifa.draw.contrib -Implementation-Version: 5.4 -Implementation-Vendor: http://www.jhotdraw.org - -Name: CH/ifa/draw/figures/ -Sealed: true -Specification-Title: JHotDraw Figures -Specification-Version: 5.4 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: CH.ifa.draw.figures -Implementation-Version: 5.4 -Implementation-Vendor: http://www.jhotdraw.org - -Name: CH/ifa/draw/framework/ -Sealed: true -Specification-Title: JHotDraw Core Framework -Specification-Version: 5.4 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: CH.ifa.draw.framework -Implementation-Version: 5.4 -Implementation-Vendor: http://www.jhotdraw.org - -Name: CH/ifa/draw/standard/ -Sealed: true -Specification-Title: JHotDraw Standard Implementation -Specification-Version: 5.4 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: CH.ifa.draw.standard -Implementation-Version: 5.4 -Implementation-Vendor: http://www.jhotdraw.org - -Name: CH/ifa/draw/util/ -Sealed: true -Specification-Title: JHotDraw Utilities -Specification-Version: 5.4 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: CH.ifa.draw.util -Implementation-Version: 5.4 -Implementation-Vendor: http://www.jhotdraw.org diff --git a/JHotDraw/compile.bat b/JHotDraw/compile.bat deleted file mode 100644 index abeea0bdb..000000000 --- a/JHotDraw/compile.bat +++ /dev/null @@ -1,15 +0,0 @@ -@echo off - -set JHD_DIR=D:\daten\wolfram\jhotdraw -set JDK=C:\Programme\JDK1.2 - -set OLD_CP=%CLASSPATH% -set CLASSPATH=. -set CLASSPATH=%CLASSPATH%;%JHD_DIR% - -javac -d %JHD_DIR% %JHD_DIR%\src\CH\ifa\draw\applet\*.java %JHD_DIR%\src\CH\ifa\draw\application\*.java %JHD_DIR%\src\CH\ifa\draw\contrib\*.java %JHD_DIR%\src\CH\ifa\draw\figures\*.java %JHD_DIR%\src\CH\ifa\draw\framework\*.java %JHD_DIR%\src\CH\ifa\draw\standard\*.java %JHD_DIR%\src\CH\ifa\draw\util\*.java - -set SAMPLES=%JHD_DIR%\src\CH\ifa\draw\samples -javac -d %JHD_DIR% %SAMPLES%\javadraw\*.java %SAMPLES%\net\*.java %SAMPLES%\nothing\*.java %SAMPLES%\pert\*.java - -set CLASSPATH=%OLD_CP% diff --git a/JHotDraw/compile.sh b/JHotDraw/compile.sh deleted file mode 100644 index be489e760..000000000 --- a/JHotDraw/compile.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -# Set up JAVA_HOME and ANT_HOME as environment variables, -# or they will use these hard-coded defaults -export JAVA_HOME=${JAVA_HOME:-/usr/j2sdk/} -export ANT_HOME=${ANT_HOME:-/usr/apache-ant/} - -export PATH=$PATH:$ANT_HOME/bin - -ant -buildfile build/BUILD.XML "$@" diff --git a/JHotDraw/compile_ant.bat b/JHotDraw/compile_ant.bat deleted file mode 100644 index 223e0dc54..000000000 --- a/JHotDraw/compile_ant.bat +++ /dev/null @@ -1,5 +0,0 @@ -@echo off - -call setenv.bat - -%ANT_HOME%\bin\ant -buildfile build\build.xml %1 %2 %3 diff --git a/JHotDraw/doc/Architecture Overview.ppt b/JHotDraw/doc/Architecture Overview.ppt deleted file mode 100644 index 4921b35ced36496ae5569e5dd9e73295ed239188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70144 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 diff --git a/JHotDraw/doc/Changes.html b/JHotDraw/doc/Changes.html deleted file mode 100644 index c8790f929..000000000 --- a/JHotDraw/doc/Changes.html +++ /dev/null @@ -1,203 +0,0 @@ -<html> -<head> -<title>Change Log</title> -</head> -<h1>Change Log</h1> -<hr> -<h2>Version 4.0</h1> -<ul> -<li> -added pattlet slides that are referenced from javadoc. -<li> -restricted visibility of the classes provided by CH.ifa.draw.standard. -<li> -generalized the start and end points of PolyLineFigures to a LineDecoration. -<b>Note:</b>this breaks the loading of pre 4.0 drawings. -<li> -LineFigures are now implemented based on PolyLineFigures -<li> -some UI tweaks related to the look of handles. -</ul> -<hr> -<h2>Version 4.0a</h1> -<ul> -<li> -javadoc documentation. -<li> -features -<ul> -<li> -support for cursor keys to move figures -<li> -support for snap to grid: ToggleGridCommand, DrawingView.setGrid(); -<li> -alignment commands to align (top, centers, bottoms, left, middle, rights) -AlignmentCommand -<li> -resizable ImageFigures. The ImageFigures use the IconKit to share images. -Images are currently stored by saving a reference to their -image file. The file names are relative to the user.dir -property. -</ul> -<li> -CH.ifa.draw.util.Geom: geometrical utilities. -<li> -class RectLocators: useful locators for rectangle locations.<br> -class RectTrackers: useful trackers to manipulate rectangle locations. -<li> -Major rewrite of Connections. -<ul> -<li> -connectivity support is implemented based on an ObserverFigure -interface. -<li> -ConnectionTool supports the creation and manipulation of -connections (splitting/joining segments). ConnectionTool -takes a prototype of the connection to be created. -<li> -eliminated AnchorFigure. Its only purpose was to add -ConnectionHandles. -<li> -Connection support moved from the standard to the framework package -<li> -ConnectionTrackHandle changed to ChangeConnectionStartHandle and -ChangeConnectionEndHandle. These two handles enable to change -the start/end point of a connection. -<li> -ConnectionHandle takes the prototype of the connection to be -created as parameter. -<li> -ConnectionFigure.canConnect(Figure source, Figure target) -to constrain the connection between figures. -See the PertDependency for an example for how to use this. -<li> -fixed naming inconsistencies in all signatures. -<ul> -<li> -anchor was changed to start -<li> -target was changed to end -</ul> -<li> -eliminated Figure.connectionStartPoint, connectionEndPoint -the new connection infrastructure made them obsolete. -</ul> -<li> -Figure is now an interface and no longer an abstract class. -AbstractFigure provides default implementations for the -Figure interface. If you defined your own figures you have to change the base class -from Figure to AbstractFigure. -<li> -eliminated: CH.ifa.draw.applet.AppletIconKit and -CH.ifa.draw.application.StandaloneIconKit -The functionality of these subclasses is now part of -the DrawingEditor interface -<li> -IconKit -<ul> -<li> -simplified the addition of new custom icons for tool buttons -<li> -Applet and Applications load their icons -by overriding registerPreLoadedImages (see PertApplet). -<li> -Icons are now identified by their file name without the -.gif suffix. -<li> -Example: -<pre> - kit.registerImages(tracker, kit.icon("TEXT")); -</pre> -<li> -extended to support the deferred loading of images and to share images. -</ul> -<li> -added FigureContainer.forceUpdate() such that a figure -can force a repair of its image immediatly. -<li> -added transient variable modifier were appropriate -<li> -DrawingView: added support for additional background and -foreground layers. A layer implements the Painter interface. -<li> -Replaced ScribbleFigure with a more general PolyLineFigure. A PolyLineFigure -has an optional LineDecoration at its start and end. -<li> -packaging -<ul> -<li> -moved Animatable from standard to util -<li> -moved BouncingDrawing, Animator, AnimationDecorator from standard to -javadraw -<li> -changed Transformer to Tracker and Transformer.transform() to Tracker.track() -</ul> -</ul> -<h2>Version 3.8</h1> -<ul> -<li> -added Drawing.orphan() to fix grouping bugs related to connectivity -<li> -added Drawing.replace(). -<li> -added FigureDeletedEvent, FigureChangedEvent. Deliver more -specific update notifications. -</ul> - -<h2>Version 3.6</h1> -<ul> -<li> -add Figure.decompose(), Figure.isMoveable() (to fix connection and grouping bugs) -<li> -Figure subclasses now have to implement basicDisplayBox instead of - displayBox. DisplayBox is a template method that factors the - common displaybox logic. -<li> -applet package: provides base infrastructure for applets - Common applets now derive from JavaDrawApplet -<li> -application package: provides base infrastructure for applications - Common applications now derive from JavaDrawApplet -</ul> - -<h2>Version 3.4</h1> -<ul> -<li> -make reverse iterator package private -<li> -introduced an Animatable interface - remove animation methods out of basic Drawing -<li> -GroupFigure propagate setAttribute to figures -<li> -make locators, transformers sharable, don't have to override constructors -<li> -CommandMenu return false if not handled by a command -<li> -Merged DrawWindow & Draw -<li> -Figure.handles() is now an abstract method -<li> -nuked the HandleKit stuff -<li> -Name Changes -<ul> -<li>DrawApplet -> Draw -<li>package framework -> fw -<li>DrawingReader/DrawingWriter -> Reader/Writer -<li>DrawWindow -> Draw -<li>cloneFigure -> clone -<li>readWith/writeWith -> read/write -</ul> -<li> -New -<ul> -<li>PertFigure -<li>Selectiontools support selections with a rubberband -<li>DuplicateCommand -<li>FigureAttributes class -</ul> -</ul> -</body> -</html> diff --git a/JHotDraw/doc/ClassDiagram.html b/JHotDraw/doc/ClassDiagram.html deleted file mode 100644 index a1e655379..000000000 --- a/JHotDraw/doc/ClassDiagram.html +++ /dev/null @@ -1,10 +0,0 @@ -<html> -<head> -<title>Class Diagram</title> -</head> -<h1>Class Diagram</h1> -<hr> -<img src=classdiagram.jpg> -</body> -</html> - diff --git a/JHotDraw/doc/ReleaseNotes.html b/JHotDraw/doc/ReleaseNotes.html deleted file mode 100644 index 90bb6b042..000000000 --- a/JHotDraw/doc/ReleaseNotes.html +++ /dev/null @@ -1,275 +0,0 @@ -<html> -<head> - <title>Release Notes Version 5.1</title> -</head> -<body> -<h1>Release Notes Version 5.2</h1> -<b>Note: </b>This version requires Swing/JFC 1.1 -<p>The purpose of this release is to:</p> -<ul> - - <li>Use Swing/JFC GUI elements instead of AWT (where possible)</li> - - <li>Support for special Swing/FC features:</li> - - <ul> - - <li>Support for Multiple Document Interface (MDI) applications with several -internal frames has been added. CH.ifa.draw.contrib.MDI_DrawApplicationis -the base class which must be subclasses to takeadvantage of managing internal -frames. All examples are now derived from this class.</li> - - <li>Support for applications with splitted editor windows by deriving -the drawing application from CH.ifa.draw.contrib.SplitPaneDrawApplication<br> - </li> - - <li>Drawing windows have scrollbars</li> - - <li>Popup menus are available for additional functionality and control -over graphical figures when using CH.ifa.draw.contrib.CustomSelectionTool</li> - - <li>Toolbars can have different tools depending on the context of the -currently selected figure and tool</li> - - <li>A new composite figure is available which delegates its graphical -representation and figure attributes to another figure. Moreover, it canbe -configured with an external layout algorithm that contains the logic forhow -to lay out the child elements of the composite figure. The new compositefigure -is CH.ifa.draw.contrib.GraphicalCompositeFigure and can be configuredby a -class implementing CH.ifa.draw.contrib.FigureLayoutStrategy such asCH.ifa.draw.contrib.StandardFigureLayoutStrategy. - </li> - - </ul> - - <li>New CH.ifa.draw.util.StorageFormats that allow to add new file formats -for storing and restoring drawings (e.g. using XML)<br> - </li> - <li>Build configuration for <a href="http://jakarta.apache.org/ant/">Ant</a> -, which can be used to compile all standard JHotDraw classes, to packagethem -into a jar file and to generate javadoc information. Some instruction how -to compile and build JHotDraw can be found <a href="buildProcess.html">here</a> -.<br> - </li> - - <li>Some minor bug fixes<br> - </li> -</ul> -<br> -<h1>Release Notes Version 5.1</h1> -Changes for this release: -<ul> - - <li>the delegation based event model is used to track figure changes.The -FigureChangeListener interface supports to observe figure changes.A FigureChangeListener -receives FigureChangeEvents.The old mechanism based on Observer/Observable -and the notion of a containerwas eliminated. A figure now onlyhas listeners. -There is a new support class FigureChangeEventMulticasterto manage the listeners. -Using listeners is more consistent with the AWT/JFCevent handling style.CompositeFigure, -Decorator, ConnectionFigure, and Drawingare now FigureChangeListeners. </li> - - <li>StandardDrawing is a CompositeFigure. It is possible to inserta StandardDrawing -as a figure into a drawing. This change does notimpact the framework package. -The Drawing interface is independentof CompositeFigure.</li> - - <li>Tools no longer receive the DrawingView as an argument, but storeit -in an instance variable. Existing Tools have to be adapted accordingly.</li> - - <li>SelectionTool is more open for customization. The trackers to be used -for thedifferent selection modes can be overridden by the factory methods -createHandleTracker, createDragTracker, createAreaTracker. The MouseTracker -class was merged into AbstractTool and could be eliminated.<br> -The selection tool to be used in an application can be customizedby overridding -createSelectionTool in DrawApplication/DrawApplet.JavaDrawApp illustrates -how to use a customized selection tool thatcan handle double clicks on figures. - </li> - - <li>DrawApplication supports keyboard short cuts for the common operations. - </li> -</ul> -<h1>Release Notes Version 5.0</h1> -<b>Note:</b>This version requires JDK 1.1. -<p>The purpose of this release is to:</p> -<ul> - - <li>use JDK1.1 features: event model, access to resources, serialization, -scrolling, printing, cursors etc.</li> - - <li>improve the packaging structure.</li> - - <li>improve the support for connectivity.</li> - - <li>implement several minor improvements.</li> -</ul> -<h2>JDK1.1 features</h2> -<h3>Event Model</h3> -All event handling related classes use the JDK1.1 event model.This required -to change some method signatures to refer to morespecific events. Returning -a boolean to indicate the consumptionof an event was removed. -<h3>Serialization</h3> -This version supports to use of serialization to make adrawing persistent. -CH.ifa.draw.applet.DrawApplet andCH.ifa.draw.application.DrawApplicationsupport -both the oldstorable and the serializable format. Support for thestorable -formatwill be removed in the next version. -<p>Serialization is used in the default implementation of Figure.clone().</p> -<p>StandardDrawingView supports serialization.</p> -<h3>Resource Access</h3> -Thanks to 1.1 the access to resources could be drastically simplified.All -the resources are now accessed relative to classes.The images directory with -standard images is therefore part of thepackage hierarchy. -<p>IconKit could be decoupled from DrawingEditor and was moved fromCH.ifa.draw.standard -to CH.ifa.draw.util.Refer to the sample applications for how toload and access -resources like images.</p> -<h3>Various UI Features</h3> -<ul> - - <li>Tools support to use tool specific cursors.</li> - - <li>CH.ifa.draw.application shows the DrawingView by default in a ScrollPane. -There is a new method createContents that can be overridden to customizethe -default arrangement. The default size of the view can be customized byoverriding -getDrawingViewSize().</li> - - <li>CH.ifa.draw.application supports to print a drawing.</li> -</ul> -<h2>Packaging</h2> -The packaging was changed to separate the framework interfacesfrom default -implementations. -<p>The framework package defines the coreinterfaces and leaves default implementations -to the standard package.All key abstractions of the framework are now defined -as interfaces.Ward Cunningham has suggested this some time ago and it ended -upto be natural and logic evolution.</p> -<p>The implementation of the framework interfaces comes in two flavors.Abstract -classes like AbstractFigure, provide default implementationbut still need -to be subclassed. Standard classeslike StandardDrawing implement aframework -interface and can be used as is.</p> -<p>The framework package was renamed to "framework" the old "fw"was due to -a temprorary bug in the used IDE:</p> -<p>A figures package was forked of the standard package. This packageprovides -a kit of standard figures and their related handle andtool classes.</p> -<p>There is a new package contrib that contains classes contributedby others. -</p> -<h2>Connectivity</h2> -Connectors were introduced to define connections between figures.A figure -can have one or more connectors. A figure creates aconnector for a specific -location connectorAt(int x, int y).A connector knows how to findthe connection -point. A connection figure keeps track of aconnector for its start and end -point. -<p>Figure.chop() is no longer needed and was removed. Its functionalityis -subsumed by Connectors.</p> -<p>A set of standard connectors is provided in the standard and figurepackages. -</p> -<ul> - - <li>BoxChopConnector: finds a connection point by chopping the connection -at the figure's bounding box.</li> - - <li>LocatorConnector: uses a locator to find the connection point.Thisenables -to define connections at specific semantic points ona figure. Referto the -NetApp sample for an example of using them.</li> - - <li>ShortestDistanceConnector: finds the connection points based on the -shortest distancebetween figures.</li> - - <li>EllipseChopConnector: finds a connection point by chopping the connection -at the ellipse defined by the figure's bounding box.</li> -</ul> -Connectors are optionally visible and Figure has a method connectorVisibility -to turn their visibility on and off. This is used by the ConnectionToolto -highlight connection points when the mouse moves over a figure. -<p>TextFigures can be attached to other figures. The ConnectedTextToolsupports -to create a connected TextFigure. Try it out in JavaDraw.The text figureis -connected to the Figure that is clicked when thetool is active. To position -a connected TextFigure figures can overridethe method connectedTextLocator -to return a locator.</p> -<h2>Various Changes</h2> -<ul> - - <li>FigureEnumeration extends Enumeration to enable to iterate overfigures -without having to do a down casted in client code. Itprovides an additional -method nextFigure to get the next Figure.</li> - - <li>AbstractFigure was split. AbstractFigure no longer keeps track ofthe -FigureAttributes dictionary. The dictionary is now maintainedin its derived -class AttributeFigure. This change enables tocreate Figure subclasses without -having to use theFigureAttributes implementation.</li> - - <li>Trackers are gone. Trackerfunctionality is implemented in the Handles -themselves. In contrastto Locators they did not turn out to be reusable for -different handles.The class BoxHandleKit hides the different Handle implementation -classesfrom the API.</li> - - <li>BoxHandleKit provides factory methods to create Handles forcommon locations -on a figure.</li> - - <li>DrawingView is now an interface with a standard implementation, i.e., -StandardDrawingView.</li> - - <li>Figure.clone() is implemented in a generic way in AbstractFigure.The -figure is serialized and the clone is created by resurrectingthe serialized -figure.</li> - - <li>Image handling was simplified and the preLoadRegisteredImagesis nolonger -necessary.</li> - - <li>Commands know whether they are executable ornot. They provide an isExecutable -operation to check their state.</li> - - <li>Name changes: ObserverFigure -> ConnectionFigure, LineConnectionFigure -->LineConnection.</li> - - <li>There is support for transparent fill colors for AttributeFigures.</li> - - <li>AttributeFigre.draw() is a now a template method that callsdrawBackground() -and drawFrame(). Subclasses should overridethese methods instead of draw(). - </li> - - <li>The signature of Handle.invokeStep() and Handle.invokeEnd() was changed -to:<pre> public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) {<br> public void invokeEnd (int x, int y, int anchorX, int anchorY, DrawingView view) {<br></pre> -The passed arguments correspond to the current point and the anchor point -of the interaction.<br> -The old signature are still supported but deprecated.</li> - - <li>Doug Lea implemented a nice PolygonFigure with its corresponding Handles -and Tools. Check it out in JavaDrawApp.</li> - - <li>ElbowHandles support to adjust elbow connections.</li> -</ul> -<h2>Samples</h2> -<ul> - - <li>the samples are now located in subpackages of samples.</li> - - <li>there are two new samples: - <ul> - - <li>Nothing implements a minimal application/appletthat can be used -as the starting point for your own applications.</li> - - <li>NetApp is a simple editor with nodes and connections. Itillustrates -LocatorConnectors.</li> - - </ul> - </li> -</ul> -<h2>Converting</h2> -<ul> - - <li>If you derived classes from Handle, Tool, Locator you have to change -them to inherit from their corresponding Abstract class.</li> - - <li>Change your tool classes to no longer return a boolean fromevent handling -methods.</li> - - <li>Change the event handling method to use a specific event, typically -a MouseEvent.</li> - - <li>Import the figures package if you use figures provided by this version. - </li> - - <li>Tools should call editor().toolDone() instead of editor().setDefaultTool. - </li> - - <li>Add the serival version stuff to your figure classes.</li> -</ul> -</body> -</html> diff --git a/JHotDraw/doc/buildProcess.html b/JHotDraw/doc/buildProcess.html deleted file mode 100644 index 2a7c4a076..000000000 --- a/JHotDraw/doc/buildProcess.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - - <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> - <title>Building JHotDraw</title> -</head> -<body> -<h1>Instructions for Building JHotDraw</h1> -<hr><br> -<br> -A simple <a href="..\build\build.xml">build configuration file</a> for <a href="http://jakarta.apache.org/ant/"> -Ant</a> has been included, which can be used to compile all standard JHotDraw -classes, to packagethem into a jar file and to generate javadoc information. -The command tostart the build process could look like (when invoked in the -<code><JHOTDRAW_DIR></code>\build directory)<br> -<br> -<code>java -classpath "%CLASSPATH%;<ANT_DIR>\lib\ant.jar;<ANT_DIR>\lib\jaxp.jar;<ANT_DIR>\lib\parser.jar" --Djava.home="<JAVA_DIR>" -Dant.home="<ANT_DIR>" org.apache.tools.ant.Main -all -Ddest.dir="<JHOTDRAW_DIR>" -buildfile build.xml</code><br> -<br> -where <code><JHOTDRAW_DIR></code> is the directory path to the JHotDraw -package,<code><ANT_DIR></code> is the directory path to the Ant installation, -<code><JAVA_DIR></code>is the directory path to the Java installation.. -Apart of calling <code>org.apache.tools.ant.Main</code> with the parameter -<code>all</code> you can specify one of the following building targets:<br> -<ul> - - <li><code>clean</code> - to delete all class files first</li> - - <li><code>main</code> - to compile, copy resources and build the jar file</li> - - <li><code>jar</code> - to build the jar file<br> - </li> - - <li><code>compile</code> - to compile only</li> - - <li><code>javadoc</code> - to generate javadoc</li> - - <li><code>all</code> - to clean, compile and javadoc</li> -</ul> -Furthermore, Ant can be generate debug code when the switch <code>-Djavac.debug=on</code> - is provided.<br> -</body> -</html> diff --git a/JHotDraw/doc/change_log.txt b/JHotDraw/doc/change_log.txt deleted file mode 100644 index f37ef15f7..000000000 --- a/JHotDraw/doc/change_log.txt +++ /dev/null @@ -1,18 +0,0 @@ -Change log -========== - -JHotDraw 5.2 changes (29.6.2001 by MrFloppy) -- SelectionFigure is now an interface. The default implementation CH.ifa.draw.standard.StandardSelectionFigure -- A FigureSelectionListener interface has been introduced in CH.ifa.draw.framework. An DrawingEditor - is now a FigureSelectionListener and the signature for all selectionChanged() methods has been - changed to figureSelectionChanged(). -- CH.ifa.draw.util.Command is now an interface. A AbstractCommand can be found in CH.ifa.draw.standard. -- All commands used to have a fView field. This has been moved to CH.ifa.draw.standard.AbstactCommand -- A CH.ifa.draw.standard.StandardDrawingView has now a paintComponents() method instead of a paint() - and update() method. This allows the CH.ifa.draw.util.FloatingTextField to be a javax.swing.JTextField - instead of a java.awt.TextField. -- CH.ifa.draw.figures.AbstractLineDecorator has been missing -- DrawApplet, DrawApplication and derived classes are now programmed towards the DrawingView interface - instead of using StandardDrawingView. That leads to occasional cast when some additional StandardDrawingView - functionality is required in some specialized cases. Applications that were derived from DrawApplication - and used to override the createContents() methods should now return a DrawingView as well \ No newline at end of file diff --git a/JHotDraw/doc/classdiagram.jpg b/JHotDraw/doc/classdiagram.jpg deleted file mode 100644 index d73a1e497a0c831c0a48f556bb9c903f6ef5d9ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17784 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®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 E02o%sV*mgE diff --git a/JHotDraw/doc/documentation.html b/JHotDraw/doc/documentation.html deleted file mode 100644 index 33b2a9a7f..000000000 --- a/JHotDraw/doc/documentation.html +++ /dev/null @@ -1,24 +0,0 @@ -<html> -<head> - <title>JHotDraw Documentation</title> -</head> -<body> -<h1>Documentation Overview</h1> -<hr> -<ul> - <li>A description of the JHotDraw <a href="packages.html">package organization</a> -.</li> - <li>The javadoc generated <a href="../javadoc/index.html">package index</a> -.</li> - <li>An overview of the <a href="samples.html">samples</a> delivered with -JHotDraw</li> - <li>A short instruction of how to <a href="buildProcess.html">compile</a> - JHotDrawusing Ant with the build configuration provided<br> - </li> - <li>A <a href="classdiagram.html">class diagram</a> showing the mostimportant -classes and their relationships.</li> - <li>The <a href="changes.html">the change log</a> of version 4.0.</li> - <li>Some <a href="drawBackground.html">background </a>about JHotDraw.</li> -</ul> -</body> -</html> diff --git a/JHotDraw/doc/drawBackground.html b/JHotDraw/doc/drawBackground.html deleted file mode 100644 index 18104bd36..000000000 --- a/JHotDraw/doc/drawBackground.html +++ /dev/null @@ -1,28 +0,0 @@ -<html> - -<head> - <title>JHotDraw Background</title> -</head> - -<body> -<H1>About JHotDraw</H1> -<HR> -The JHotDraw architecture was inspired by two sources: -<UL> -<LI> -<a href="http://st-www.cs.uiuc.edu/users/brant/HotDraw/HotDraw.html">HotDraw</a><br> -HotDraw is a drawing framework for Smalltalk. It was originally developed -by Kent Beck and Ward Cunningham. -<LI> -<a href="ftp://ftp.ifa.ch/pub/ET++/">ET++</a><br> -ET++ is a comprehensive and portable application framework and -class library for C++. ET++ was developed by Andre Weinand and Erich Gamma. -</UL> -<p> -JHotDraw was developed by Thomas Eggenschwiler and Erich Gamma. -It was originally planned to be a trivial case study for an applied -design patterns seminar. But then it was too much fun to just stop there... -<p> -<H2>Acknowledgements</H2> -We have received valuable input from Uwe Steinmueller, Doug Lea, Kent Beck, and Ward Cunningham. -</html> diff --git a/JHotDraw/doc/packages.html b/JHotDraw/doc/packages.html deleted file mode 100644 index 6929647bb..000000000 --- a/JHotDraw/doc/packages.html +++ /dev/null @@ -1,60 +0,0 @@ -<html> -<head> -<title>Packages Overview</title> -</head> -<h1>Packages Overview</h1> -<hr> -JHotDraw is organized into the following packages. -<h2><a href=../javadoc/Package-CH.ifa.draw.util.html>CH.ifa.draw.util</a></h2> -This package provides generally useful utilities that can be used -independent of JHotDraw.<p> - -<h2><a href=../javadoc/Package-CH.ifa.draw.framework.html>CH.ifa.draw.framework</a></h2> -The framework package includes the classes and interfaces that define the -JHotDraw framework. It doesn't provide any concrete implementation classes. - -<h2><a href=../javadoc/Package-CH.ifa.draw.standard.html>CH.ifa.draw.standard</a></h2> -The standard package provides standard implementations of the classes -defined in the framework package. -<p> -It provides abstract classes that implement a -framework interface and provide default implementation. The convention is to -prefix such classes with Abstract, e.g., AbstractFigure, AbstractHandle. -<p> -Classes that implement a framework interface and can be used as is -start with Standard, e.g., StandardDrawing, StandardDrawingView. - -<h2><a href=../javadoc/Package-CH.ifa.draw.figures.html>CH.ifa.draw.figures</a></h2> -A kit of figures together with their associated support classes (tools, -handles). - -<h2><a href=../javadoc/Package-CH.ifa.draw.contrib.html>CH.ifa.draw.contrib</a></h2> -Classes that where contributed by others. - -<h2><a href=../javadoc/Package-CH.ifa.draw.applet.html>CH.ifa.draw.applet</a></h2> -The applet package defines a default applet user interface for a JHotDraw -applet. JHotDraw applets can be developed without using this -package and they can have a different user interface. - -<h2><a href=../javadoc/Package-CH.ifa.draw.application.html>CH.ifa.draw.application</a></h2> -The application package defines a default user interface for standalone -JHotDraw applications. This is only a default -presentation. - -<h2>CH.ifa.draw.samples.javadraw</h2> -The package for the javadraw <a href=samples.html#JavaDrawApp>sample</a> applications. -This includes the javadraw applet, application, and a viewer applet. - -<h2>CH.ifa.draw.samples.pert</h2> -The package for the pert <a href=samples.html#PertApp>sample</a> applet -and application. - -<h2>CH.ifa.draw.samples.nothing</h2> -The package for the nothing <a href=samples.html#Nothing>sample</a> applet -and application. - -<h2>CH.ifa.draw.samples.net</h2> -The package for the net <a href=samples.html#Net>sample</a> application. - -</body> -</html> diff --git a/JHotDraw/doc/pattlets.jar b/JHotDraw/doc/pattlets.jar deleted file mode 100644 index 93bbdc01834529c6b14dc214771df12fb91c057f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376878 zcmWIWW@h1H00FbLnff3ahB+A+7zz?gN^(+5iuFOtL>QPDI2fL@xhmNjY>ax!z`*d9 zfq_8;Sy^IoNoHAUu3ma(TJiUi%^Q5KBuq$*_%i?D|NsBl4>T}}YWzz{Oi4&cy1-cI zkR?0AJk#Lr&-4eSQ#ubn`uXa-zL4FAWiq+G{Q0xR1-C~${xN;d>;BF6+vfk@|GshG z&Vx?OZJzUI37ePh@V))$<f|1`&gwoztL_@D{m}g;Zf)@&?!%L}o36dTw{~(!<;Rok z)z4PB{P}hN!VL|ftGAAwdHd|j+Y8yx&qkYSuCWO>^G&_P5;!+=m+P<3DJ)BjE-gRz zb;W#nlj^w4s;9daEj2dxiL|i1Sn%^)Y}Dy(@3t7&R~=DNTlw<KOsjR9#m^NK8bvTO zpax6(DtD>Z3=9mPu?I^5(ZN!lLA_vERcyXjhj+i(@h?YNSFcx0G(XIB^!$hH%~j@R zrrWo4xRjO{74NqEYU#7#^Ru;crNoq_Vip;de)1{r|2Z?#*lUUSGjWwO(a#=UT(aAx z{_U=>lC7@Z;ra7}Hx_^1vg>HnZaz8AsN}j+kG53$1ie1$-5WD~ee9!0DI3_(0;g@~ zsV%THBZ{16lJj$N5(|n`i4Gm)M6>nW+vIa>w&B~)h4`!vp7gHx->$VczSqsnzcX+7 zef~4%KMG$jpLnWOTz?Z^<=V)?)aS1|zW#mrbNR9^Rrk+jwsE&iKA+qYT3=^1Ghblh zsny!`_St(6?fky~|MhMclXl}`c8fBr^4nskLVZ4TT$&egQGM0nfRGqTi(0R3?%TF+ zKeXqh@pRp?*d^PY>?#+&-*sVXWbw6U>-uvec4fc5!ueUZFG6nXhwxj~zkC$0-{j_v znZt7pEnMt%Hr#!~z`*c@fq_97Ib2dJ3KH{Dhz^zVEJT`th064EAsMTKugnu!ck!?4 z^I!bY`<D7Y=09Wp;YX2CV*LA4E9>=+yqOpN=4#c6SI4ANSDJ=u-+jE#pEGOD>=i#h zr+GfP7-RRi)cCT#ZQTF&^F`bvos)x$y%&3gxTnmWlfAxpe|B@s*D0SQ-mVOt?DDj- zHf;*q`M3v`@%5Ff&Xw5b&y;#C^YUn1v6;lK>nUsI?G92dOn&+9N7z%>_Ox?Rxv7=U zwnQepo#;J%>dtjB`A@MV8k=L)(XbpPgd8|&nMK7V#D@(cKPg53y0N+Xx;H=j5xZ9z zXYHnmPnY~|_^2-O{@>;5$)K<iuna4m@INH`iP`kWlU{jiJ2x|1pDy$NyYrBH@+_~+ zdnSMN&C|BO;i-MGKllBX!{zrg!roke?30<1la-e#()sd5%Cl|7Z;R(WxN#ub*i=c~ zce3J{^1gdLS-l%v6(_r<xBgzo6Y(I_ta#qHTT7h&_G%t8{(M+uyZ-G^6aUhe&oYmf z`E1-~ReS1KnfvRb-n_W-lh4EuhgZ<TMi4n@GV*hY&r8T9O=<7$BX@JBo}0MQD>rcO zTWeF}+w+#h|KIp+XV%gCnOv+=R!%E_3vIE`i=SEcsAxj^>XpC$%+y@Iye_h6X8F_v z`O6PmAKrfUV_h*f|C2pOx7qmo{wgYe@BYc1KHJXfuFZX`tF-a1?U_4{dct?rtWB0* zId9M-K6mAeNLy?B8%MNC6Yu_6bEs*>(KOZ7U#G7>9l4>*d&QGuzPI;km&x8p+n(Wj z{N0_y*Ouq_MIWDUQT8z?{_@l8w^%Y%Zo_B$5-A3TB1N<em6@88pPmm&G;hnRLxQjG zdhg|NNQvc46N?ki40Z)axra+HcBv_HK2+3qbQGM_VR$QxaqUs}yOoR+(+_zkU1VCM z6vWdZ7QKa&g;(nCgT-6zZZ%|F+!gJx`r4v97i!OIrr$CAW@r2OU-|p(M%QM%Hh*qj zpZ)h!ZSgsMtG4qoT3(D|3`ZFZjI*cBl)QVU$7MP9Wlt3=&l^2Qjgl{(jZiTblV<YB zsomCoGf=4W=(P);CEG5F&2CP)rg*09+^@5<*7ABBI+S)Or(7W?P3=t5@0)2eIWON- z+iH08o!P9&Wd<jGX5{XQynOat7AN=b<aGwK_p@x67*UcaCMzJejC*!#4%>}&1`G@( z#tr9~UX*MzXI2q&NXqueNpYBwyM^UP@|?VHlXVyr7#kw_XP$XxxOjHzrJHegzU3It z&2uyVonw4^!~gvM`ckRK3>&BKvg(?9gqt_%#=&E68BXPMFr>fcn(=nNuW)sN)P+Ws z#(fu8u*Ci~KI@zkX*f;nw!(`XIStj8gPaRCd?-@2T-73S`KnRG-V2H1<r`Kn-Igb4 zxFx6Hlg7Pr$9t+*FReVT%Kq1kb?b#<dDT;gl^-%sHoxGho>cnp#I~!mlV?BjUeYMj zJOA}X)ygaJ?7__Ik{`4?tMgy6w3r_!T&^1IV{Co#!Q?Ajbgk|FKYY=3!nDHYVE^^= zVsq8np4;oVJZ}D(dM$NlbEvpdmbcuSeLo+EK5mp;Up`H9wel6Izf7w|S6_KoUGjMU zqViVNKehQsqT>F1mNl>5BisCm>1Zv7jcMov2f=dN-CCM+vpjZO_#r%{f<?MESN_q? z^Y7<IYwi3Oo48-@rR%w9xtrx*L@VchJG^zn3G@4Yb%hpX4!?^Qem*%>JnP0LQ-@up z|8Gy`Hq8j%8~4$WeYH|<uJ5#(X+C1QeqQ(c-e+pfJGXkh_Ps}67Wp02Ha;MmS(m+W z#x;qXvF^K>xnot7&ij_W{x*GixAt`Vb?eg%Z_PBwQFyMZct0{BHS}`c%>BC4Yw~_5 z{&e1>8M-&;Zn-<Zj^!OK7d92&E6vL%{k6E-d76QBhEiei#3LehQk}CaKipkbI<vp@ zNvOB6D|6pOM)ilG_cyI&IHWp{@&3*qRmT?J((ycYjNkl8{q!=Otm=0S%%|TcJY)aB z``l+jX~VyS@9*Ef-*Y$i`SXa&-mI_BsJZ9tc_yM%lYKC~%TUGWbI6IsZW7Bnt2`R- zH80m#HTP=6qJZiZ|2B)<RBJOxeLC%acFKF318+IKi`6Y|XwQo`+mbhTSM}~^|Kx(d z{nB|}kp1h6`%C|8f8F+Oc`)PA#53=h?-l*?{~3C6{qg;$${#)|-(RbJ_s_#W=Id)G ziTw9?l*Iq&spb32%f5a;9gx{KQ+)Y~eU-~zZu_xtm%6&SvfYNm+l%jQpL0aXZ`<DP zy`kDtQ|B4D{{45kT~cwK&1JUL?wh#0B6ccP7aUsqEbRSled%4-E{7khmi_YMn9#ms zd-=cTm>;zJr5b%ZMtQw??4M6}-g3UUv@M*U=em9U*T4J1|5tov?r`}tQ>vTM`oQ6` zzw#?DE_$~-NyeRbk^LdlBlgCrYc`0@KcPR_F!$g}u4j77oe$ZW_8ogGYqYxNrb&IC zR*FFJ^Q*z1wQrT*7f}0gP`bMC*oRj0!aw|T9w$FJF^kPC^Jd$&G)?LEyYz(5`(?(| z+8jT5mRV{C)1%D23yYGq{w%Y8<uGX;GqdiygDV$^AJq`QdD);g%>BrD$>ZH~-z_~F zeBk$v6Cn(Xv?VyI!>5%8Xs159C*Hyx=Up1lHP`dtk+X59FZ~i&uzJ1ego1n{K7XCi zY=hc2Je4J3zog#&JiY&lcV(0H>Pc+6Axr;WPoDOnZ}+?IThqVzUv_3Uo3mYe`-Cg} zbvIknx9_NY{`}~jMf*PG^vTH^?GI+wu-E2h`)&Tn(#9;~tFO-Tl$_mm|5q?*xy@JG zETL@EAr|g`;&rCs<39(EZCbL&CVQ&b8NJo!8f*e_|L&AsT~OYAQGJH>l&VY99`T0c zJ==G;r?BPzETj7z|4l?oSOTr?oi+5@xU?y2eZ29Px>ngQr5R_GcAWG)xqZvewaF{q zDx~L22AdRey0D)<b*WxB-@mM&tg>I>((J3XTc%tI&Hb8V_)XaQyUC1KJ2#x1x#rf< z2G*w&7B61?Z=-d(Kvui`ovB-=2uHlV=OTGu|I&>4Gyb+lUzWOb)vf&7<G%E{v1`kt zPO!dX3|^dTKQI1SaMWpm`KAHPH|KaiJw3a-d=AgMy>~V`>EE!4m>Tw>@yo-*tC#;^ zd>!<EnYnf5GS_=yl81QP|B8Q_xZ3kbf%f4wnOdJ11b=<8u9|3UqcL}B@_`?Fl)j(! z^gL<F&U1xzSHtJYTzq+gQ*Xb}eJiEezGB}?tDGB!CcJe5H$pZ@HM$sA-h0ZP$FWYc zf_w6@<a6^bm?@sFo;+>oOs|!Db_pq@Ov#(`{(QdgB8@X_@>1QL0SRi$mCl(Tx1GFk zy3yNm6(OI=GV|D?Dpw!A?2&L|;hgy0sk^qkc)u+)W2viHuavLe?w9kwi8N@7s|kem ztWIX~-M;^{<dtiNn@^j6RJ9N(Jzv;t9hUgM&+>Mu_@ejrn~Hz++58IFAT`}a=4;ZP zV7B7e8(rU<&$*eb^ZOd}-}mu(-{o5qW%D0+$7H^d@;Ur(>GA7-8*Z{W{nP*RK0vsy zGJApQ%>KR;4)?<pf5*EoY;<AS-QMy`?VC-@mgtN(*-{E;*&okNStMk0@@(fVql-CZ z6F*y?{p}=DpyHx?P`BPFrEJymkG!iUhs@8KFY32=)3U4farRPCmLdmg4r({XXeBAf zWTk!9-l`)mp?l@b^ZGl}<W_Ig&R#yLiqqDTL%@4$UBB&z3F}`jTcrO?>RQo0-7c@{ zw9Z7Ox);lP<FD-b$+m3InvXKw8WvG|mNj-oPU1cwBXB)4ZA<Hm-Yr*Ju5U|yI$KK7 zCfavJtW{&k-NV1O-QV|JrZxA4m|=LrgXua?zI!w8F<95JRW{yI;N||gfzkcXZcX<( z!tdvBKQLHsnt?Sx|GtdhKO#<vH*Hi}aj|^%>~|&mN`GBlf4=_L!_8Bl)QeWRUHVg? zdALmJ!3{-~yU!B;b{KaGYQ22f?Ebl{X>)<(6~zr#iW}e6ISQvc@P0h7fcd22x9KMi z?h(u3SRSDL{hNZ6b?}5)hquHAr$+Btnj@t7MXB-99@DkGyWZbDckPaEX2rZ!q5q$m z&3)T*ZUw``9l_gQPn_Djy>Vl*WJvnD1z&yVU;TM`ZT)Li-S?YytMzJ}(ylr$adS>R zdF6MU{}YjqL80ewq@QnCV5}XOkT}DebJvTPPZ#U^Iow}xD!TepOl|MGbNkj*xm|A0 z$trj^BYyMkvbUmdPki53dvE&c6>IwR?Z2DrCHAkg_b@ni#g_T}g@<#?8ufJFr~3a$ zx$gcXzh>I9ScP~Y!KkMntiN8rTHbura{0Zp3@d(#T-zV{Wx?_CFFC0jPc6K1VX}Ct zdVEVMPtlB7y+<ipNT>y<BG`shW_yx95t!FSjLj@}8au+us?qh0sfHTLD(mIR4B zes#;@V|R3$IP>Z~O84yhL@VbTOnNl;(R`C$K8v88Hl+_{CvN&&$RAnb=&|X8-*cto z^ILP@e3aVtywC29(l=vwRr@<!X2rh>Gs5*4Y*RI-OwW)o-{rldsO8=L2&K9En3)%@ za!DwkJTdgiu1`N=r-}xwkjV(2bJ+R*7V*SQ-k0xRyMHI^_NkEab<AF+Tk;Jo?fyP8 zPg!fN9HiBJtV=I=<&wR57aU(l@piWq-L3z6wf&8@cu8_wifG5*l8*<L?#lc)DNDZ2 zGxBMBT+iGt?)#jpFTT0HyRB?b-IkqU7mu28{*2gnzk}=F`|k-~{;IWkM4vfrKD*sC zZ2HePZ&^G}g`VpE@pIdHk>agf{1fJAx{1WE{WN_gx7FmeJEE@q^0u8K_Fk!6KCag9 zy2P$UiYb*&MIOQNye{5>+3(u4dhK|44(0?DdA&SXr_18Cip#gFpg`I!-$XGX;n$Y$ zi=Oe7nr^yN;C@(7r?7cvLE`dX+w2S6b$77j$ad;}jkqm$f7c0(?Zpdr*2FSMYr9w~ zt_ZxfB!Bmt4Iw_RT3497I%l;C-&kJn5#7GI<eyrUbIff;mV6nhJy&`)uIu|rKJMq& z4SC$R!LG4iYsV$M(90ZAeVz&FSJ(V_!ks<Udb`j3$g8X(6S!aA?BujQ5&r*NaP}_y z*!_=Z`J0p}2!FcfmXgle?=7Zs{9%H{nwyJ{8J{b9lOy(CXy3`z9b2+vj{Mwy`%C@2 z!Z}T4xBo?YoI77X?Mkwdvr3tk)44OHD-;^v3-(q9GAkr{hGqB12h~rU6yGMz)+e@@ zvnRlqbDDUw(!#PoITtm4W!YYn^Y^+`wBx$?Ps=x__9R^vSNyZ5QQ%PERDq7rJU88H z2FBA{*;^Hr{5-D<<^SJe!y3fK@%HPlDW=<mZ8wWNTqwFw_U^SN=dT-*Rh8JK(xx1I zxUFZGvemAo$1XauJn;!KzAEj@#1(zeS3x>twt|$hMT>!%fNQFH1j`y{8J*J1xY_Z> z?^0K~CnS5FuTGl1uX{7cecPjPleVd`ePm(So$d2L`ugJ?)#sI$q&<pefAnOlVZr&t zc>>vNMicGr9Ujf*+x+O=oPwM2RvXGP<R1hbxVyRThk{trmRUwO{r)98?_SV<%)LwY z-|zMl{{?Q`wbfXXy-C2glX?4b@93y4A@ws4YFTSN_-(Y&u~JfN^R0u<9H$cbC#uaC zSgw59wn(5=u2IO_|LO^cOwo(G^$xUJFDNR0F)2sd&oyj<h4eeK3DWZ!4Xi~X?N!~T zR2B){p5$_z=|TG2FR?yvUo>pg^S!CCTTyT2SME12UUJ@Dq7|qY+n1%J#4<Im`@yf6 zz(jeDzrOdf8=}hWJ_#{!IOZwFFyGX!zIr(HmHPd8MSo={8!pkCx!;7b)=uc(z7<9L zAIBEFx;|~iZ0_s5@0TAq>Q=6o^xLlK)SDZh=DE*)@8ozS`9%4@ME5E$;ey+H%L|^q z{j06CKGgq=GT*v0vR8fud<t4^5!3vk-Qq+hkM!FO6?ay-{Nq3JMWIgpgyWQ-3Vf$_ zuy$m09P`$FJ@K+0_o)MWj(w08=qUUo5XHMe`kBSi8viNo!dGKni)oycVVlw%YBK%o ziYHIzZtM!?d)@YGrFB>D(}x$c{BNi=`<_|%+Ie^T6~kN;q0J4K&o>`_pl6%5;Bu5} zQrbhig&jMmzSw&9<#S7;nSUy_z2G}{G}@qF##8CAQ{U6r@JpME+ohg{bZ$4-%zSa- z#8MYa>(#%nO(++cc1B89^8D?PkdR|uyZOIJMfR_|a$5S;%@k{olV_C<OsmhFSJSb2 zd;8iM5*6=ux=h>i?zOV=i%maQ1RXryKE=@a=sEd)JUO<XraHV|v!u<x_n*aw>PL;! zmdw>&_pt4{-kuGoR~^t%OZZ<EVrSOjljd$CEjuN!b!-1NPELm;mn|E4rkb1OU5*HN zqxkNm;OeNJkf2O`#%F8g%Hp-po+)0TcKq6g;7-BQH8+;Zb=<km$m%7<=Ks3b`H=a^ zOSh&cl@-bgye<2-#kS!%hkM=byGJkoG-F=LaNhl$=POT1O-IXo-ThZ@pM1BzH2rPj zrU!H8%g*fx&Sj0-ZLIMl%HAloWvlG%{h>Fr7ihdy=@Xn}G&8w-{*yKJp5NKux*h1$ z)3*IodqyC>xaFjZK?K|3wUc{36#U6%wTKAce=%Uf1*Rl7=QmuP-j<sCM2|i$(vR7o zw*1iZ+Vgz(D()#=*Sd9YRSqMQX)ROL?N2Y&4a`@D%Ju)?-uS}6^jCY!5y#5^Yg$Tg zoLS|$TDWs&y?y476;aWw&yT)qc3n6}b4!ShNo#N4dj6YECWjUYNNsZHmdl%Bt#Z;b z@=T^d$!T7GmmM=*)_=Y1aA+@wM7m)_v%{NW?u>WYPLB&Wp0-WUy(oQR_0qdM4_V}^ z`<8XxH@efV_a*56mbNnz0!b?mir)9mf3o0dw~(pP-@O_xo$8-*XSc1m6I3h8w&nHx z*UgGk_pEt&phorYvqcUr<;gE!JDKH1Zj-K^ZF;4%WBmfLt_`t;CeIDlD2A!+e!K7L z!&5u`Lit=coELJYo#j4d{C!_h@5zqcB47Ww-*cUO>*?w3>KunZ@2Ous?_t2*GI9Nm zBD<G%I_$NtCrA936+F8wsm0+;$wRTMnn$lWBrl0=XgYRAOM620+M3XUSGCPGi@kiG zPQMy4<LWi76Y&|7ZhqqTKG=0(J6D^WrBKuN1sZy~Ulx99?b|nh!`}HE9IMamIPuh7 ze)9+IF!`1IxqZhbEluAx%eBg&@l=T3dG6dM@m+4G4srKBKQS}q|CNIC6VjsF)_;{Q zmXZ~VTiN;h3&&+A)(0<az1F2$rRbS%-t3X*pqw-%uB=~}rGE137h(_gNbb(_`1{x} zuj*r0?N<$ny|*9c{bFnRqGr41)Yf~O6OTI>S})!|?=DBemHA53ZL?*c#;)Ud)GFN8 z@a}%Z(UzWn(Lw9x7T0pP%!x4!oDy<w?}ukhPtP2_!R&FdlXaVxVeE-t+>ST?xC=b$ zoI4?NiwM`evyVHS1h~Yu2_=*r4VW4m!Ktagv_L?qO@I3yzlH0XGJ;yU+=LS}_bkx9 zcWI^Jg~ph^TfUtOqDAJIFdBH?4e{v9DV*q?+iI+LN4TIt`3!qZ^Is{6_B>N7(_j8` zZkPF6YDZ@a%$sodY}2=s@jd+}Mc(`4*6!?nGfV2Uln29s>+^THrGHUhBDl>`i|s>! zdC!yt!<$^ktt`WSe|f6^<M!K|EAuA5p67KjG2yrC|2u)l-!Uy+`c7bX`|>v$$BzcM zz0DW@9Kxdgb8WzDIg#IcdOu{EXVh=7eWLVpmDd_eiEy_?ESXoC*Uvm&%(A?F)|M|< zgWhcL-QT2gEk2I@<B_|*+it9SaAVSpS4NK#{L`lPHg9>+rFF<=QS+a+m{>s>t-X_< z)QYUyuH7#lm3l0qW17HzX)#rgFJB96l;#-pHS2P}_+7p)(w8+*!cW`GUuN;zm>2yg z3S`uhzeLQ8(lTij*r~AF@rT;g_|BxIr{;V*7dP*@sHXQ+v*3ABey40r*Vt`3Z=?Te zp7>g)X>&IhDK4LWppBVNVWxJB@Ja@`f3lic=O;dWlD}Y6>Lt^+Z#2@MKFhdi=<|Ow z?_QmU=N5%lZ4H?J`lrR~)y0XP`_|oDdE#rP-TryKX#&sNch5MmY1_xfb^T{P-93MI zrP9^xo4isXXU?bo`qpA&;`oJI*!=r#=SBaH?5O&_B1gk1^~l3Q;n!17gjTj{%vtih zUggbCPrpP@*5C6RSFT(3QJw448$D+({y5gjdSO!^h^0S|FfH36G1ogN`mv`WlXJo4 znR}LMuFcxCdC%07??STeon>TREz>^3_UhD>IJH~L)Xf%cIpPy?GklWd+an)zt)mW} zYC59H@b75aVr@&&j4sdrOE0|^Uas8Yx$*r}sjJ#oHhfi(3|`qKR=r!{K#tSf>nrxu z#xh>DyImKZEcEiK^ekJxJM~-S3V$B+o%1-I@!!|o+cbYhvg}IA`n`4ijo$a$_J?lS z!@t(2ayrY(E8E}SoT|)sWQE^aEB~@PZJ%!>1?6k+V^)3fDfn$&kh1^l>RGPeE_<mx zZ?Ak1f6xEl_M~@P)-ZVa_m$7LHeK4}uuy3u%YA|MXZEdotjaC+F)FoacduBbh5!FW zb|t}_U+%?uHdxK?KE|#wQ>%W*&54g5UoL&knKz|%dHp{lo7mD<Mk4WC?Yqjj!XHOw zf7{P++2ZAuTn`Zz#d&<@mu(%lC(cqheZ6=I^Tj*GF;_!OetcTIZA1K)kadTo6ir$0 zH*A_9{`%xff7g)nd)Gdm{7~BX&2-u7^wpc$HhuAI4-T9AhWr1;x$&Fwe}6g7!MnAh z?j-x#t`~24Id48W&!qmtvgqEY^8XQ~I|To?yb11`F+El4=>#ULqLgC>8z+ifb2KRb z7H=?Vn%(UFpWI!g|E5b6FaH?1WZs+^kw?3Z&B{62KFvV?MDwDGHS4(VlwDNVdvV9B zgoIm#P1BN#Ha*SRtf}U6_r8Rpy3I+CN1R$K4+ZSp|D$E%E)`yj`HfGHTLnaaTVM76 z&9)a_v&@aJ&nh|<@NlR2=By8o`{Wh$*rv*Sx+Q*l^NseYrxW^XZy)FJ>lC>k;I8@e z^zCD=nf8`eJB0R&>0Itv^?PTgCF7NSmlaH}{(Dq$aOUaE<=@usTd}{Z<51jP2~PW+ zTiiCis!p<2QgQzJq_b`M+o{4q8aqDD2xU6H`;DsgZrzC8+J;VRUia>5yfx7?vn94j z$#y}m{HCBqzWeuYb65PA&k<(m_fTZj!Uq)}Kh2Z5e6{)CAF;oar!dOtUitX$#^ejW z;r3tGpXLlGpS#1YOiy*%`?NnCVL?A%%rgJ!&vV6LcEam4*2VeC743&uukZiRv*tns zZxPEi`OU9y&h1ri%eLE8-GAZdrVsa4dIVpzv+`M3vLH>c>hmu%wXn_2&C|5xKJ{+7 zx}!DEP?&ku>~%F0^mLyjtk?U^(i<`5obM;qW#7eQ-gTNio_0<qTs503`{bWV_fCA1 zt=!n$Av@c#P<+M8=r0?irBakm+t%bid%OGFld1pLdp%NIX(xGcm2CItTf%|)<vTl$ zaR1nM=+D>d#$Ee^RL)<`b@&@!!o0%lu2y=mamkm!I|moMnAUXnFjKeEqrcl?Vy|z^ z4v1MH{r!L>=e8NYKkj@vV`2L%wOLlC9|BIT$y>ge$?=w9sIS4Xqsl2yGM{RmKX)VM z+AX_)lXjEtN#1_@{Xw?T^a~eQ+4rxEoh+-pnM;&k<j5D5W3^F=yQ-evyD;H`$imIH zrCc4q$KFj?>HK={<9V0dR94NuT6m6WpG_{i?7fMVbzPqyZJQqcV0-evN1JCql#ATi zJ->C%?sX5BKGaca=wJKn>ARcduYPXyv`l@O)Vxo#=KbRNf2}jb-d=p>5_S0CQ~g_Q zv;M8C`}=44k(*4(#|*97<fqQq5Gx~eq~S4RIuFD4mEYytIv;)vmQb9da9iWR&3o6{ z|D3n0cFVZ%Om|ZKp>M?xKG-L=TYh+CpLpET;IsdYm;M$lAJuL0`E1&SW-*^%STdLS z{K6yW8=nX4`p?;ZZsC_1%;y)*v1gy>{L+$rp7YKGKAZMQpVVc{+9#QT1dTz01t38? z5bK4%#h>|84pjf=Ml2O*V{=t9P|-d8Nr!<!QxAQTDmUH0z);WK)9vlFt4<;e&8_W{ zNgnNa5>-p2mn_-6+cC&Xa01&)wuxa`OLi~a4Fa?O{;zG{d;9&PIqDXQ%Ias&e?Q5; zqpyJdhrXAW*R^Zc=G)hQ`}U1ZrPWsXfE?>qc~{=~M|$Ti@tL1;W?stK`A>A_J<**n zvgTdrnt38?=TFVe>zyn2RYtyd|NR?PwzGEG&aAYVS$!|M+BUMnHnPh8#xJ`YzxUqw z5xbKm_J^C@&Nlm<Zg;BPY%5*t|8&%T?Cb67^78Td^ZB`dUS3{ZU0rHwYG`O^a&oe_ z_i3-nuYdOMx;$aW;~7&9FX@rqKmWR*rnzBezv4;%#QJ$km)<Q7ieF@$_t@zBrDDBH zpVkK#$vxgYe^Sx>NuS@<Ki|7VEH_;|Ph{HMr_<(537H>yP2ObN+-uw8{^{2Ji7pF_ z_&O!_=alHLlm5S7x#;EAU0-*s{k>}6-<2DGZ(aI+;oALs_wHT2diDDC`2__9H8nL! zNl95*S$TPRiHV7+si~!<rP~)*ug*`%uXwX%_y3&4mwWPm>?;4Uviir?{5M%8pR)2^ z)>M8it9)Bp^R6^8H#s@ExVShwJG;ERyuSYbg9i_O{P^+Y$&)W%zLX|^|M=p`*9SlT z{Q2|f(W6hFKD~PN>e;hr@7}%p`sdZdhYw%AeEIe*?}z_?;+?)W{Mdi)PyEk(HJ5|= z3^gG}H@Pa@6(pu#+_3*qez-=9o1O1Aqt)t@I!>4E+;6n|y?TgJlg~P>bOpI(fhiUN zQ>~|*$+MfG7CzT}(y8|~J8S~xu7A|uxAp(RL;QUVPMwN@Uw`lEo30(q%e}!gb<P>J z4`Fv7TFA4DT1+?iwBvDZhKPr9m6GAzcfuYI4{W`ed%at*V1ls0r8Bpyr!!qK{Bd>L zZdc(ysozvweLvqT-@?8q_|omQ?QD%}t$t=pPvkp(?19ikk&9A}9Dh8dT_*V3D4tM= z*{tx$pvtpU;Hv2jfg2Cot-2&Qj~;o))bg}-xklHi^!~Z)wk=fW6gMcbE>dhi_#}G1 z>)gL{6J7E}>x_g$mKX_rd(Zqj_vnU{*B>OFU;jIYxptq4;JNbOM{VvsRA2LR+hVV8 zJKGsjm;?`O-2J*yAoGTsz`SqIdlQsaGim7>UH{t~kin5-+++6gbDD+D`UK;qon`gL zllF>l6FqACyHa~r{dNUymltLAua|3l`u#S-lWF$b_)VXF9}!|;2r<1E|3aZXij&*l zBu+eX3g3cnPn)wA#hmzkSEO5I_TBsQKXaA;zj0me%`&TRZT>0>{wLlpQP!1tl2UWO zX2IDHY+@@9?VTw9^2nYzTdqsB8vmZ8|D7SDal*&J+1i6c%wFe&&q5E4Gu-JlI%m8~ za&0tx7CozrpCa${$!_(Wdp+N3J<qN=@O!_dQv2_prF(w4N9NVD%+T6ZE%{yR_sj17 z)gJ$D$W0elGB%vn@`me%_%^l*xhsCWd~(;<wj0d7mal$uuGyRCqVvt<uFK6e^9*5R z$Y@}4e<Sjz_tD`?kIpULyls22OoN7H2HQb>&$~QZ=W<-FS)e58B<0%9Hz(qjpGi{8 zy>~{XqPINvBrf@Pjm=}*ewl`+(_{EPN$T$PH+rd}ooRX@FCoJ<`STMg&)p^^de3XR zf7zU?`*N>xO7{8*xj_PRmlmir{`(Lu-_LpS>yJ5mn7;e)HlF|5vT-B-`3bI@1g|!n zh;P5``cUcN4%MdpGfF3&Yn+w0m36gSYw5ct%koL~=iKtxzZ6`I37>xPN$jp5>AiQ0 zO^)?RE<d(acAvP!1h?>h)rs4R{8yVStbDUwKw<~a@|vDR&5o3gN*!&1lus{seALRP zFPUq-(^he3hOJHNj)+qGm(QY;{#^Hed^_gvvaIhR!P8VeecYj9-8uEC#rZi+uXlO1 zZvB{daq3c2$Fo2C%VYiPe!hNOc=zV(%a!uCZyPUM`}g+gzi~frzjoeau=9wi6vJKC z?V7bLcX^_lISyan`s)cRb7xi83T7|umSv`X+*hVL|2r6Yg3I9R_b1n<icDI|bC7{S z;N%w$`K7n#SYDXG*vFC7aYEtYzZ3rbku9>W6^{;-9e>dA+fT&lWkr0*We2{EI)N!# z4B9=vWCO0xw_;;U<Pl(wn31<g{KNMI3txw)m!EWe5qf+v`}ou~i$Xk8=IpAJ)?XyM zc+<&mKdM)H>o4+?-psuI?qgP~!}Yteg@UZwueC7UtIUhfJoUe3-Ew=UqN1GSsC%N5 z#NKT9`DiMW$;{;*f6P~if79kZ$TWM?LYFs_T-7h=tShO>XE-~5vbDBvU*tQ5=zIb7 zjdtmCUM`+_NZ;sO%XTSO*=_TrTIavnc8)FW^ZS<9uD1KSC6nWhFJwN}toZ9&fWkX9 z21yOGUq&y_%WctKRWtu_g3P<Q3RC#C&Mf>L7dH1sqs8%iOD$!LW#-4Ym?`a9x?Evu z=$wx|feM?Ny`Hw0@v1Mr%YURpg5U9Q(5Bd1+%|7RT^G;)cly)8uChnlWfuL|pr6{^ z84=*fpptf^Yft+I@c_d^j?21KD))Yu3+I2dByV!nfxqr0RSvdq9$9JZP!W*5IMsI6 zMq_^o&3(*Tr^WKc_zaAGtDLLoIPHE`l3^ilu!ZLo--I`3S{*kTyy8>OvGV0^lyTv( z6cjGpq-TH8c1F%NTXmyj|EKO^Js&N#PW8;iJAbrQYd08QdNuQRqgTMgobGbbYln+1 z3}SC~FOChKW^-jydE}INZh<dOt6$N#P1!lo_m+$7!rPCgBs*P7RZ*O6|8#BmYLQpU z>Gg}&=D*XFH?KTm!T$5^0*|v(gR8bCg?Da}nEZXdg3C0U2Uj_FCZ9bS_C3P7=gT(P zSNBcN^-tLu_u*w<wf|M0#Jb*Ytw-P5&n?+&uPHF4BIKWBd0@#c<KsU!GUVK~)H`l) z_i6Ka!zAu6+8ooje2z+vV%>L8N|9T8UCZIu`bWOYPMFc9z;=|^q<Q;qKa~)MC7h4M zTTQZTf9I?|v~Wk~<f{9;!RvZ1NZwP)*!4b<Kl1X4=1I)<CHsZr*pDaV2f4~DzYw%( z`{El?#~v*^xG+g%j=k&~-9Ms|7YYw)32(6G+}Kp?I+4%OV$lbdW!nwK^!WlqEJTjv zZD6j|-ls4l_g-pwvvTyVRevIPDLqkY>0Q9m5yV!(9_zI0e&8bBm9fX$1cf^nH40=o zofcW!8Y=kX(8KWkpG9-`ef`2<d8f4aryJjty>iPRMEvJUajS4Qe4c#p%m1!pYj}(+ z*?Tglbu>ivw?}#RZ~nU2ysdm1Q?=Rls&11trV=N0r|<14mGe1$?c@^fXYIFU%}<IH z+Gl#whj+>Um?!t6)=KT%eEZ<ewQncJuhD#EInU7{`qrX{tN*-wT=4hc>4YC$H;djc z4K*%Jn7U&5yCqpi7pPbr^D54$44uEwZQhX!R_U+4^G%$+c;W(q-si<x+DkvVwj8|u zS?yv(t^WLcecA4mj3fV!S=`*)ShJY#O1=DxaGjb-EqXh7ds5zPj$7O1_lRM^bCaH3 zy>UMU*Sr^1dtqHIGT*}Jj;<=7to@Nrng4H#F8fSaHT#C5{Wr1t$esK4rs~Yysr6au z{ht$RR`b@zSjDRR$hFF>)IR^qEL`C7>bv0y*M6@wba}NU?C!0iv?W)r_CK7<_aph& z(}dH1I3B-w8TDlTp=}p`-<$7q{8{O`uRHR6Sj*>4_e=k1;>=SMd2W5WSNZwL@9Xcx z{n`^(_d9UI($A)THCNB=dy;;7<JMD`lXgDo6WSVoFK|uRm7N=v)WTj@zOeqv6IwIN z?sen464r$);?K(!==3aLoXK;udDrn=rfCLxAu<JCSHG$k|Kn{?loA(Ps`YKFWRsTN zRQ~|~?Vqm8SSs<BWrmfS^4xvqaG>%w|1X;gl^@f$?`;j^+p6i|Q|&YR+!Vjrx4Pb5 z^ob7dW@a&3Iaj#F_d;IeW4@1`6JvxYzk2oX{p<Q&U(^?TTCB(=AjJJ6O4mB#Dc|nz zUpvd!E-3UkQD)Ei(@sbAtVXvl|Kix{-JC0&KBYZdF4Xd}yKdT3j^g75KR+$>?k~TW zmlm|&!I&dm$>6q=N7{V<J@egmJII$LcU)W>x`8{ByY!N%IIChtff}3huZZ3tpX#Nx z>(WG)XZy(go4MzV$BeGci49wp|K8%=(6?^30}Dq(@Z@Hf+2>f87-p_www$tVQ^1kz zEuq%6#;cv*eE({is1koTXZQO<&xH@`HrA}1zjrg2OHpYdcj?kk&y_c*9X=gY<8b5A z_Sp;9HU6^5YkG8f%Ob~zc2XLXq8<foo$!A4ycbD<D=Ob~)G1c{iBg)cc(}svO2>^Y zw<oZ#%~&P1R4{UOQe+NWo?&FUtxL;_whI#$oKH+<->c@ucwokFgSi%KfBcmY@mzP} zd}7pr56Ma=x64gV_`c!Hn~X_6=CA#;h40SBKf)JTckP<}_e;Vfk7b=V^gR^K4#clE zzhAslX431Deh!&O?=1Y6_!ja#nYUKPSLM#9Nvu+3KQ5-)tb88%Gj;AqDW(hT84;b2 zjvZ>cnPvN+Gyc!(N4n2sT9!Ap{WOV6JfrgdE%$34uGPGnd@U-6Vr!N@vgCLat^4SG zTCYY>h|jlV^QArZg&S{rwicFXH)<*MSJ%b)vh|+6V0hK__i3&@kGb|v47xRC%4ZMH zS6fr~=Z0&&@N~J<_hZJS7rzys<{Eda9Z^<&Q|{&B>~+P->x{FP&d2vVnx`o2z3(Zv zKi-n@-<yW_qFyVDq>`(%f~)UM?qJZCRzIrCy!yj^Rqpyza{odEmWS1Pti9;H_N&L* z|8s9itZRGJ@?6R5$77~PZ@TW5CN$p3OV#gv+tu^=V84i^*b^t#kE<1|#F~3<Oz3Zq z{wmt^SEkc`<udo4=&vSA<N}qIwkx~OQC4;q^xxokoZ~@P{*<Dmj)kidn9D9zXxBtu z{ZhcOiBYEW;FYcmA|H79_zYYxnE3`zIL4lv!nR)d^2W){Umj}IKk%^laJjK0Wk>1z z{FDd!8_vW(xy#$65PCw~KInpa(O1r<fYobKB$QhM=S9d#|LDG#=B<}}p3_HaVw!=U zR907ib)S$SpHmw9S(znn4uQ+`bf)KAN_mj*n%n8$M;+T>21%KHHxe#Bb7XjOg7@;d zs~6j|7(J$LczCDJa?d)Jum5JcO|5_VMA30$#dF>%Mavi*zv-N)l;g0Lmt@GR=TF?= z`oMAXqwW)G^Sq~K_H$+GbVTWNRO)o7YW7qM|M0&ms#Yns?8NEKZLW#sBLDP$iRrvA z-u?7D<8{92`%ipbx1sC&@{|d0J&gBtEZO0;V29iO9b&%bCC3&&Q(M?!!1i<DjTs!v zF9z37n6O?}_d%Hz-}}iWzsfeUCneeMOSpHZJ;(gtyqb4v^Va|Qns?%Mp2zh=jJ1n6 zHS!icER=3uXY>6`{O7yNa_*`>ef-Gu@eZ4oMNBiF@v+|M5RR*AmZ)&~l@>dF`;H@$ zU#1+kHOVch`ewK1(&v;%Tr19UN?s0em{#GoErw~$;-b|t4`Xa1{Nq`~cgQQpoM*GG z^DSI_ZmOzZc-{J9mshKmJg=lXh$cuC)XZJ`NVBZ}J>MhIHBGB3Lk(M3|K{0{!!vDq z^Qu=i*=DOJ&656_+MkoO>v5c?%%;h<mv(L49?L5`dA~Mq=Z*F%o$T<6H&gvsPUW87 z-E%)Q$n4MVHPhBjSih}yRjJC_;ws@a#fB@2zpgsWzxc7s!}*W7UwU?)>{y|ENPpG3 z|C}sGbL^B_pI(m^zFk{joVi20x9iX5re%T$Rc>;wzCY!Y>dRH;H~uW)%h@9LAjyH{ z>^;$qyHwvUX3(2^=%2=nhb9l1wo9Gnot3qB)~lIHksbRB^F(S7>c6%1dG#SBTcG90 zyNw;MLqvA%)Nz|)Ui3+~@>r%xt-Z{jzB#}2Z6Xcgj~ib+ds*SjZ=XN*+mn7<I+oAf zn`U~6YxUw!<!pM!&YV)-d_UNx9*QaR_H3IRUDZEvo>+B!)ijrmzCVHUZV9vsy%*hg zUn@i^)AB^?|3$J{%GZnU%4$_xWz9SqDwUaK`LI*^$Gz3w+QHr1!rf-x_WOLNDgDO9 zO%jY&MLVypx7GXgedo$jgR5tMuPdIgTIJBvsV*mC<1ZZbU!EGdF!ac>rCPfq6*mc_ z+|av!=j^-q-zm|~Q^V4%12j_wM1|werYJ;Dj5!*mv!N?ms`BdJk1N~H`ib0KV6%T$ z&1c;uEBzhIAFOC?^@(pgn4EfIY0v46sTUtVE;4@peA@L#>y90>yZq4ag@busey~SW zy-RWZm7@AH#q~Nj53Jnb)AZ0msklq~pS$dWC#lP)9Tr$SCt&j|UlwI2mFMpnpRLW8 z;7|yx>AiA5VAtMduT*xPPw?BTllg?#mpQ-VztxBSZ|g6LcrM}dOm)#TYmooeDspN0 z!GE?hE0+Iqj^vZ|3(N}7)hbr)QuydBp86!`!4jSWW`V!O_s{H6%zs?4WWlt%kC*l9 ztdo^hdY=1y1!p+V$*Tdu9-7X2verRoczX5<Hs-CW%UQLoFSO@ips|8xu8b$2QHF-A zmgdtfw)grK&(81utIWQlu=^p)5~=BX`r--}8nZW)9Jx95U*^hLKd-*}rp|jnB4ciT zkXuiI%S^=wXJ@&ccKQ(bVTGUVyAK8~JC^Qfu>7j;mf<IL?zkXp#VHe0|5ZmkIVWEJ z!kxP@D09QYbv0WL^ej5a)BU^0k#TBP$)0tGxBse(jeYj%XM;ueBa6)k>gx=&gxOae zJ(2f4XZlpFeucIKzYV+mvedsl&2j&><$lM?@6lB|^163lIvJzsoTT(|&9{R(j^}DF zI0{@VntkRs-(<C&@4enxS5EdY|NKWjh~s|v){FI}-~LUSF6Z$lMMmq)tNoiQ+Qssx z_=%crY6zOKW8UkSY5Sh2%eefwIj_lViNwmIOSOt-Sr?sK%A%sou=>KknhPAkzD913 z3^qSBSej<NV{!2X>DKuz2CKeKTXM{2!g`^^f*)<Ze;Q2rC$zs~^_TVNtPxn&&AWJY z;;I$WGt!?%yt+Pp-BFo;>6?!|+Ao%|MI^TC_pPL7s%N+oWKSIMVVS=6cFO8$@7H%* zo>_1?cMp61lRr`F0rTYM^{7Rzb<EQJIc>K~_MXn~wsPfH+qk;rOO&0?J2-kr@Bev= z)A~`Ph3<t<7rJ)eEa36d>b%}DE6%GX<XKiq$G*GfAN5#1YkKc{(xjQ8DyHHt>z43l zC+qaz_Me|HaJ>B*%=gN9so}GScQzVuzRMA5s;FPgqqq6P+=Ww5E~$#&;cmXPkW=W; z36ZxRo`#yMpPtA)&=Dkd>XPBxQ=d;9`#58h$0fUEl~XEIO5?UPZR&__o~-ct)RtDE z?Z$J{-<((<yleiN3Gae}@@GVHJ8w?wu_$`_id|D)PUn{~d$m*XS*BFBGEKAYO|#}s z`uMA7@v&>l&S#yI66=E!zpczG<7&4LnC2OC_oTGK-Mp9IqJI6m-F_(IBx~HWxooKq zIqtGa`(1NnSN)|r(YGq>{eG6^w?#hdh<GQr-@jhtf2@{y$G$(aWMa3kwW@8ex^`FM zk(!|4(Uc0+`)}&ZKTL?@i?F`QXjc66xN@oWHm|KurAk{ERtH91f07cdabf=}{nvu0 zV=Z{|SuV_*`09-PoS1-iX@|XcryP7bE3+<n$@IT=%dAC~zq*uObx3^&`|=}K!d=$8 zGOY~#lB4v6w`kkTr5(<*^+nEd7pBL&zcW8MLv_*mYfR@>wyrZhq!*Tde)*fGWgDWn z#Y>Lz&zQ$^YQ|pH{;>5E`}LRJ)RT4B6TBU9(`dP2`MRYc(<<t7Bu>QYZprIm@4p#v z)ID-Z#>5bJ#lO6fmbqEdJ6|i9FWq=6mUmb3-=zJGCkjm#87}k;x6)eGC9h?8pzXA& zi`nOdPy0NQgKH;doX>n?7xwbwJ<T)|Tc4d;I#NFM{M_|QUA+_HZzso|m)^Zkd3W{v zk5_(uyK>L(=bfJ)ciw)o^ZW7Q`e(+8*WPbwzW+dPomTEHZ{xCmNA~6()}1-q@NdJ~ zo3;;}{&!z`#$EjGbi!;7`JE}>c8eFy6W=Kry(&sr<FwYTnFqI>d;PY5`|mT`k8j)l ze5?6^_?x8{8B~0@PKsRR{V3p5G*LlmtM5sU8nMUkM7HX_lqgD!cS-u1d(*;dDbLCK zudF|L>bR|SJR-HbtG+@eY<GS38_jf%-+PoMWxQLR=II*j@%N%l!1-V=aZa_1R#$W` zX_?l&{<*kxNo?AcN8K)~YS%=kT24}&x~g_jd`sU!p5J%w%@cX{B{5K9S#X}r!xEvX z)84kJUXx**U>(kDXqwBhN9t(#{^=_33au12cwODSi7W6RN0L4Nst@Xmj_hE|uyRu{ z%TS#6=|F1a$>kCsw%A#2Io(y8a$v&S{a<v%rQLp+ZBdFTEZ-I<dP*gs@kJuXs+$wr zzuK=0ZdACw=*`AoU!@a17~K1&S-JW5LdI!4*6T!TQuW`a<o3O>Q|T6&>0=-)b=2uR zA4m0s*jp^k9wE9H+9P%@c&j6}>TR9L*2JVWP924_uj*`jv#jyNlr3wvHlFT%BebJQ zLOOQB1Jze?X+0m!SC|;g-M?u1(jM6cjXsHTsjkj<A%FZ{3AP3P7Hs~wsopr_6^C<> zRZ-LDoojw?dLrVxR=TKfYmVCf_T`Nnc^_@=3#A@cVRK%#ZgZQIir{LdsoxYBXT;RZ z{8)A>sNM0#B^hfKp+8MO_FFTmSnS`}{3DQkp_W1!hqltkZ48Tc-T8ed@N1jzkEa@& zdG78{%84r4Sf%vpM6qdS@o~=o+zAD$Z4sSnNt>1S&G@Wyj<x*vnkPS(h~2TUEn4Nq zeL2tV`1~f>2Bt$Z`2#pO665(*S5?3KpgcL|CR0O9^_J-}ufF9^5BX@nl{v)GE_9Y$ z_5E%GM@9n)i7hWy<lJa5uTT4SZhvj3<_Y`#-1Uo6Bj=01KJKS}{ElNI%Z%Miqcc+$ zx89n*`ry}Rmqg~ed3o=g^Gu4(jXiMlH~zyH3Itp2vZDUBsh!Wf==W*Oei!NVe;4$+ zlHA3&J3Kd;KIP8yH`kUN6?2PWi~7~vc~<$h#~#y#hqfkk&W~JpXVULCmu@+3J32#9 zrrvvY+}DSqykC5eyFNYDv6*$nC*KREA8!;{{9erQV*|_HPakzSCQ5$0Dt||<Kq;tS z=Yh!q1GVF9dZ$E-<Q@hG3W)mL6fK%LAu*$HX3#{ze|C$L?|!O1rxJ3b^q|%Lqopsi z=Wn>(bvv&6_N{()5y9`h0c~O5*UmRmlCwT}ZLM7O%!Nwx*nj?9JJ0=Tt&%?@Lxbj3 z&C827UU!XGJM()>KL^8s;JdkBKgzoseic6c|HH?pY$v}h{{A$!a<#_?11<*Hd?wBY z)lL=-jwN<13?Gi){Nr$W=KAk7vh23*0ZZ~GTO0km@tkcN!=zM=NmJHHxOKeZ7ui#~ z$k(Zmsq(nOw#?)!>vktN9GrQcahHZ-`hJO&BAXW3i#$SS^gVqI1l5!?+a^cod!Dxz zT=yucE$K-gvtioutEWzitmgPFk@{czL#(@)qGoA+iH`e{hXoQFMYf8ZpT4mpl+!Zk zj@C;4eK+pSZ{4KIfB)M~i<sjz9o}c+UcXOuF}GA&SYf$f+mnC7Z%)pia{cC#{KUUO z2X;vOGPzaWBL5_1%i{$q_bjjEY8G)tOyB<}wkTo8`_!$ug+iN_ZI<Jaf0ClUdeR)# z-}j@dzcf!)oBUvlrH+x@r%w*YD|mgQUinuYPV=0j`EJ%189C-Ip>?bDzNv<ZoNHCK z+BbRSvEyMEwx=x3pLdS)_MM+kgj;Q$1g~bUoApISn|JZLu#YRd&wp_WZ#^Y6TS_us z;QPW_1I_i9SD)Fepxvl$D|-L>YMw2VZ7v$~@08yiQ+O@#=OmkXn<kqJe`tPITiAK9 zQ^9zT#G0w+UCQM{cq)beUAkw`q5X38e$|!ge`4$ZovD3nC>0bkxp`XM0cjhHS@$gG zCY$mI7j|6WSUS)1@xtT~Q~5asdrHn-)cm_g+r)zPe^97Hsk8U;uqB>`mZEEReF_)6 z9lUmu+<uoQ_VNdl3yeZj*xnroTJlVJeVpa#sSlmDFFjjqA<QvH)3u{*rkK9pQ~6yf zoLZusdv2cl@-%a2HRr_WzpAq&A5K|wu6EP*e_I!r&oqgitbepfEAEbY?CVosA6sw! zb7&D);o9O#m7g2CqE9_Jl@L1hUOBt_&K(E+Q!PH^&u~4a5Uu-k&B;BtW(zM33Tfrd zm9@%|b1Povu~_Kmk!1^G*q_P^x-I@yd^W(+o6YLx!KJR(RvtK|VSU%~pxp9nyYFN^ z%k7umy<_IB*D_zGuCMcOTIO)*XPHRmafUx>!72NG_H8d$>~kz}nt!3>nKfs%taHUI z`^24R%LC8x3F+Nqbyss(@q72fhe>B=CtiLdzz{Lz7(34*iM9HPbz=1{Puc}6{;{mE zb~bce6ur9nKNJ6j<`uoI3@q0^+Xt+C@S=i4q2bN@fYR%I<-7~0={QH-&^XR0a*Opr z`}aqOId9L&5Ih@}u>AgAuf3uk(kpYfq_cdiIVH{#bolT4RbQMK-pO#hcKZEKO#aXL zGYj8O2-2x!kyY;riwvqdaVC)OXp``s*iGx-td%sb?_>W}r+mmyaPgtP7y2EJ%zU`? zw(GoI53;wNDpZfJ+VN?H6>CGx^Lp`Vg?rX6wq=Z+#>#zrwxHhG@1DxL!&JB3h~E3r z^k7taq)8qt&-%&FRveGzUVWK)8t0Uqt82EL3NZAP{rB~gS<O_dXWrA~=Pp;*$Wy#+ z`bKzO=-sR5Y%iAmo)!CQLc{fa+eEki<=pB~Ex^9M@JyXJ=k7Nl-u88Wf9*OmH!<Vc zjC(sXx#sV?UH{<7rb45CeRGzc6?$$H`MYv4@5_e$hhG~xxvu7X_U+z_%Zo3*w_M0} z%&Pxjz6!VhFSgq;@-teWJegKEOa01rrG5P!HK9|l<@e2fr2E<@yg*LE=ia*`1?8T) zleGgo?YSPFO#c1BYL4Xkx$5^G?lQRiDk^&VJFEI%r5~SqR_$Fi?OpV~1@pyT`?yHH z-*)!P<X2}_GzYr;ihjI!!qx2$t}c9M{59oF|8BNvMeEvUmrf7YExG4qCTDAS*?p6h zlU`7+xYd>Oy8G)sy=`${_w}Rd`Td)iZmo^fw<!oeohRg7wff?g@RUoJmOI_Cos*n) z{_07-?`iRDOz!*t&Z=2etd(xRP3Ci#!j&~&69nTD56t3_U3w$a{<Fo--<LKAzT4!r zt2igVvTWx}osg4aS^s|=sp8zf>n_Ks6uYexzyDhEuW<dtp2AYkCpoVUyM}5Wm{)eX z;Vawpe2=}h2WRp&XzW^ZZrAHODVMJF74qJjpLKj!UVZxw#)BEp{#^cY?8d|kdNVk+ zo?D*TbX@dw?*9&v5cgdn*RDj=Xy2=P<Qg$u=;U_y%Tc|`4mt7VVWBbmG}J0Wu6=u^ zI!!`5>4wIKt9|e0ZMo;Nz>fP$m_^9HGbimULh7BBgO=W3=dL95REKGG;^Qu@#k<{l z4?nHHk#%>~tAzbxev>i|KNs^|D!AO^g}|G<1$r+ZT@`sO$yfg*>xo;A?u8RuL-hTB zDt~Knt5-g6U!<ZGG$(oLRNpgq-fG+kT{TfV__9Rqy&1jQomv_<Ty8B?ySaGf&Bdt~ z7r(u<Soq4~*%ua1zq~m9a`J_{$rg8$Q#ATq+p;#@4d(plt@7$D%NHX?<0<V%swPKn zvR3`y<$YbIb++cBTXOC7abmIe7ihTrO@HX=ofM|pB<=Q$^>3DcD%Tt3-V-$f&YRs` zif6Ok=3H1+q2IolqhPMk?~j#@mTeVI2Rd4o8CATN6pC)TEH}sTaihv?k%|ld%C{9n z#YkEPt;@e_x$t~w7F$6|^h~e)`!sg+oJeP3;b`Dx`gc_4xhAJrp*x3=tiWTw#UEDL z9iFDDz@#9<HsMB*H)G15{>Fc2D*km{_#HoUQa#(88TV6|cWyk)#pIY4dd{-s7uTXK z*XMA}p8KIPYr)(70XKbu*Y9&U;UJWof51whQA494)~_qRQC8`=-l~QGc@Krx`W5=~ z8&*u1W7J|lhqK`T=jNSD7yO_3_snJf0>0RcYIFX%2jc~{=5WeMtdn$Uy0-TVqtx8s zsnaj>U*%Xdqp9url|74}NvvGi7xL${qQt>ZD+CPI+?aQ)H-$~yw4p0AK=AAL?}-kr zihma+dKDaOY<oNLYWC8r*&Es?I5F&Z+OufC<UD!1oG-#Ni?;r~5Ov{2-JutbO-99H z>cW~c3Sa5}Op{N0oY9^p@L5E3)#OG04MUs*vQ`>wSo{0_$t^Lnj!KJ)=lzd&p7%y- z9=o&Tp94Od8u}PwE2QLR1c)%6|8oDYfjTEg*Zid&8hrx3-xNQ@{qxU>SKWMQ*^?LQ zim4?J8>6}#uT-(_s0eMCpX6{#LSBzupmX-cJMoPoZ|rSVtk&IVXU|*va@DIvcIkS2 zv)X=LFHp`;yO70WJh`bOvhDM-sYdU9Cx86Ik>G4ykx=&UqKo)fw(6Eoj~(Yd{3a1) z@a>|&S+5FZHmzz+E$$#=tG83qqw-nH_4)hVdKS4UrJOR+ZOUc~b?|Q9S#;`@O>{-N z*ORnY%9pli{M#}$g=K%(k_$a-@m8~1gmx`aUC*=AZQ{zb-ucT?H>yRKw9MHMzobcI zeUZs3F1uAi{JXTc*Z(RH=@s7~CHpI4)s$tbtIlyoa2p5NdYlqjtWq7Z;jx#BKA-P< z*0UCYTJI-a{@t-LD@bAY4A0D+>jIh2rm*YY4?EqrZ0Y?unpe8rHm`a-Ki#@hb=Fsp z7KvqL)6#DnE#CIA{29C3vsWi){`nkv)5YZOc1g4EvL8~P_k<?BZI_Je&yd<V&2qb- z?8?cK_cKi9*RNr-{@=y(eBJt8%`!?c#evKbTJ;%M%}p+yEj+7rZOR?_F6*~vo>{%p z`n90-;q<qLUL~_X->*6~J(ep{cG}TDvro6`a9Djjw)e`ta?LlVUgwtU-f-7*x%0ZN zVkWQt(&?%*pKeRYjceIn^h`7IOns)NFn64e#})a{Ph72|HgM1RI{B5xBSGzT7r#r- zw7V6vXGfGv?xpPpSJu>=oGP+LM1#xc@Po{BKIWTx%X}Og{T~1GdoZ0<uVL}2Nh<7f z)QyBScRK|BXPZ5HL&K|xOZR7QdlGZ@gPUHvQYhc)oHc^~_g+0Ae@Zw?<7A+!b^=Ss z;zI{bpVhB#IJ@**^S&O{lnJb{d7aaaAOBN**U{78>SFn%M%}BPCR>f-7AfcYcQz<* zz7zCU;oRBFOSdgs@@dBuGk3qsR}XER;l1<7;hO~+SL&H;`=p|?C%(C5$TCNI+uVZU zrZ)W(y*w8+jZFnVHa<2se!KZeM)l6_%$-TLGaBwq+@H=-8}s7v!OIFccci>DU4KuM zTyXWu+~$w_AKYVCz8tyqYtSx^dkn&>@0f+?Y-ykDx=j4kp}D1Nf_abZDgD}Kez{Nl z(T?f&Z+wxKyK$yqBd-lt&6OD@OxOLNU4N~zReH(Z`AvBNoyKNwgg7onvTIDZxbOt` z_aC#>^rasiN_%?2S0vGdD|z#l^Ru<0W^cIK@m+Dn6~#24byly0)7GqwOks(ZVTqp1 zJ$rw~wjJsA2d&QLWKL6QI=ti4nHl@1f7<sgp=Rc@<CnyL1f5#6zQ{`9|K-|~1)Hrq zGOTURELh{>eqoieNm=(y^E29AmyWBxxnlQ*{p|;1Lx)pY)e9ZhHma}rFTY%_SN_1> zUH3JNBMN68-8pgRj#n(1Kdsxmq7H4Fw_df&f=R%}ak+ufjpP$O!M!=#j``&)_Jmcf zV_*7n-S+E$#SRJ?IQ&b0z%Th_-Wq-fmJ=6DULKYXVTfcn^rWCN@(RmAcDMS*-eWU* zwfiPrTlHzmC07Nf%NwtXu9&=S>;Ju7S9aZce5{LcZX>(njhRzk?YwwG^!$t;Ek<U) z{`E&UD}-w)=s5O0`+W23r5EKpEWSysKeEoTN9jh9-pa^NB~A-}SFGSowkW!>h`axG zMD>mPB@)~#yiVM`(vTv_a9>zt%eVf!*7+754x4_4l{HAGpRjVNOiI}}|2O}M%s*R~ z_|0JLS^IGPd+qtnKCUNHdRO|T{><89xn}3Rx%EeQ>?G&Cs5)oi%;IuS@2>Kx>DlYG z)F;+&ky@Pc=$gvbl;V3AUA8T{wB*I>RU7BLT)3?0p5=ZsPw}7{ukDxD2Z^Z0nkVua zo5nq6c+1VTj#p83b9k`qb2<M@trLBk8eHe(sxO`@IsbgMh0n$RRUc<fTPOc(kuT5p zw1+)69wsV1iuU`$Rw(deWhFm<r_}znhvd?qRxE96R$h11?VH;f*C~-%@ds@lE&p~V zUgPw(XI5vQHlN+T#Jk+@ptWNB4QCy<ko_O-%$ui}-Dkc@KK0Do^;vOOHpO2m|4?hW zRoT*7?B$N5O8YM^t4Nu<%ipT^<DaTi)yvdM+sdvgAId27zOd?c#P3sG|DLSw{$hC8 zqS|gnRJr68;m}(a8G0XfKi78KbY#!cm8p6Xmc`skXaA{hwC&&M6IFb$Y0g`Z4MNP? z|MjNcpBZB9lsWC$4pW|jg^D#zF2#kj@BUlBVEp-{`wlUcDT(jC?|Q(M6~CbHS7zPC zoleiB5A`{%oZqa;AuGK6Z^r5Va>svLuj&YHJ9e_YYx#vb|KNF7KIc9OH@hkMQ~0mR zv0I*BKBkuF-kLb|v%}%5x8ABIEt|I8f7*mD;}4G|ude;9^*XXRoYTL~bJbn*jppu! zk9AKQeLOx>JA2yp>|bk`lGtPytyc}${_TFG((0ZmPGM)y<W8?=l{A&ORlWSy2bHsR zdtw+rKi$0}WzJN+7w4m%+!lM`)V;9!>ggTREho<Xb5hS$^xPhn;vdD=WvsSWXqmUY zUst%>I^eCn)P2$WEcd+r@Ax=<mu}PR19f$wHp{j~T;yGR?Y!iwc{8o_AMd|<_qWz( z(<c6>+%jLj{<(5dt;?z8-8JT;4c1k6yU!-<|8Q>p!MS<2&KBy+n5HZ)dd3}d_U?P0 zdp4Uz4(;z1O<=!tpX26fy%%w-Vht05Z+zvyEx2vk70Ek{61u`Q@#p5YW<_0ms&<R} z%w6Ne_g4+%_PX0!x*OeE^1Ejt|Jzv3_`P;!e$IiP^erMbeTleZSF!Aq@C5_2(_eO+ zm%fr3bw?-m?9_*Pg{B)dzwgj7J@t2o&%O!+moTXxpFehd7kE@@<F+sCRIZU)uF!8c z*G;)Rr_5jeG5T0D>Eos3n$HPAma~3-`M%QSNcNSxvLD~A3r_vqer9vSH1mB^cjtdf zyMNoQq3dVD{m&ond_Hmd-scy0KTDiCZSn9l%i+^1_fJnbb9&3U(>-5Luep7?;4tTb zlanXEv5aT0dR=SL?&SNRy}{nom8JfQ?46x`=W^`%91^zoY?`L|cEKUW$ei|H%ZuK> z2`rLp`St$X&zzH;ryo}`YKEQXXKI`BZj(WMMbA&Y+#d;-3)alOA$#|SlhxHzD|<g* zWL<B!Pq*#2&Q7b3%leKgHZNshkVtl9oVMS7jp#RyFRul^x-U^yQ2sUbs;pPX%aT3y zj+f=Vb%l@T6nk3FIIto(wZ6d9e9oav+sLG1SNmCN56UWQ3XU4^iSr*#+_<;R_t^>c zVk?=r{qyw#&WG!7-J3W^_u~3ut3<m!iL=%lyzWlkxH~m&&BnQ_i!64fMy@NrHCt!v z?&R3qZ+mvzSnf)W&M#+RWNiA+j94Pw!RD$I@x`0Do`Zp*f{Ow5V605g5@{pw66q_I z@s~K6*gnX6oRW}yI&*2DRa#v3^jT(`7c5<oVKsHu)XerpmbG`Xww%y4S>JQYr2hnu zzX1OU>;6NF84eygWBi_()zfm4_vX9bSl?*RcrSncGuOQ1hcDkfX~@Grk43X#eoaly zhKQV+nm<w}g5C;kcvY2m)z+udrsk}9kX%u&>Z@<BT<5&Xdi336&l|T%PtGxa?cH+q zM#<H?J?}qCvM@Dzs7yNfWY(-%+qP{pjCvbT`#8vJ*^9t=2Fnvz|3|c*|MPD{!avuO z-=AN(`RG&r(k)jnNj+UX?dvV`*SS7y%?DGADsAH8<L`g?@Zrag9Up9~S9UM0IUbu{ z7qZcA-DkF|^V_bqt1nx&Y}xYVKWp|mC<t`Aczb)VdTIIf%%5K(^|1;<-A9dP=A@>& zE(}=HovJl8tF-j%@qYOO_y2vXe;efZ@4A`&<L7D<E}VA|D`B7Im$je$>Q<}Mi^R*8 z9Xh+`)5Y~&_iPQU1WZp=g`TPDDe%7kFf#bixlJ~Xwx`!=K7Dd4{>{1XYjj^%zAK5f zIJHi-zNT}}^4v$E?k{!S(j(`-UZ?$D`L}5G-Vdvme+xfQcd)PYdN|J|C+o|;d!)76 zvp3dWDW21|O2608_^$pQ>D9-h@=moRUt<#$&i^PS?Q7`!W#u`O*w+Gimsd-swaqMN zd{%l^M*aPPsfF)e-}>3FvYmaI-PzJ6yHlNA6Xrepb=2{ft6!tP_u=dMzSqT%SD%WK znyxPK-R#|$+}ufLHf&mRzCNQ?clLA9>iu7GgMVK#x9E7lz3wE7?cTPulCvvQ+Cmna zPj&abvWxZFv90eoWAk}$yqU=PU4PGoU7wgwytMkC|AOoN(PQ@o-s+dyl-pd~QT=1V zq$PWgCdo4`^?X`-Bul2PZK>6D#@*W*iZ)#Su6tVJ@=G&b?#ujd?nj>!;Nwe3m$Uk) zY24p;LOe}Q+4TFlG#S&5Iklhsx48byQ9I^nF#GBAedX_7o@_X=^UZ<}pLWjKys>HL zoeNX;{@LSgIq^^WjZH;%hPxaO)XROYdtdXfxADYJar2)~_kDi2z>CFSn&mDlJHwfa ztW&rjwBO2NSCC+pd>7U<X*pwH)1^HHs}|_khiNEG4qDSPWzrmtM9ZZ;T1&#rI9f%& zd=KlMTFM;Q9qOC@^UBdzVLJ;Z9=otb?BZ^obscdVb@G1SkNVwR!o{-LTdKePM_9_0 z^8GvWyJs15Hb3~)q|L?Db5?bm!d%7v=_`_x78pC&->KU9_4a|OPt8>KC;dD-tETX$ z?t;{0)iej5#Yf*>u$}sdZ^mMeJDlG)Oe}fH>gIh<(lx~E-un(=&lw#d(wf>jUR9B& zwyA`B?aq~Q4eGPKylh&sokZ<leS;G51)n1-SfY0vY`GEo;+OI+K29b9?mbVq88&=e z(f0P>A>n&=)8<bUo~q59{&?Ryp0;JTPPOYj{ii8^Y|`o{$`^a%pT;N6c($$UqI7e; z*0H>E;hM)Di^huzSLj+lO_}sC^l8Ygd09_Q4i;)USx$bKxO`TvR7I%ibn(EokDedb zUHQy&W!bCNNq1JCUAR!~k)OHo-t!i7UVJd$y5Pd|N_X9QpEdhEr`1&M$@>`pi}NhE z?V~rorH$`%-`&znnREZv3Tdtk$;aDwU%8ywtylD+EiPq2>uk&1T-VPxZr5E{b97%{ zgO=3V`i<wir}J)0I{Tk*QKrYHg|EL)|6l#yKxjd0T0`&A3XL`vvlK&<xkot*m^e4F z=U!VUtK(<#Xp)I+<XbC?kG3pp1YR}1yWu6G9+||ol{r$D&3g9HliymLB3O1^u5g+2 z=!ou>&g9ZrtB$Vph!C_9t=*ixeWMC*ujZ{;r?bxdkCJ38GIDd|7u_+JnPIuaUc22q zUB~rqYfD8-Y-IQ|<8`Wv$x7zT8<U^$1yudj7b<%l^`4Dqfv2>So?zgWIV!IUI_vky z?K+`geemsdt^X;xpZ|INWMn9O8_2fsNKL=`ZS9CzGmq<TEHFvkTw8caM`+EJONTfA z=3n$hlQlR?^u#;9jA?0?Ijy~Nm24~zDqotTmbWriX14I6Y0r!jQopU7cZXZ;*d`mX zWjXbFv!&nZR3B5GBCAsU&4u-Jhw~jH_Q!5z=R@bb`Ki+L=E#>n1-%-l;}1-j%YIWn zDc<~aTnFb9<<Ilv3zau9sZRg1d%ICJx5}9}J@pkA-ak@4xtK#hC6{5T_aELrua_RW z_w3TLUH%VP5?=Mi340vU*u*@YsnsfDicHSbjk245>KQ#N5;$}|p8MQ|2yJuLgKrfB zCv`+Si*hphsT3R$6FQRe?nl@T@eQ3#?JSEMels@Zd=OmHrfVel^Z1kHuePer$=jb9 zz_IwO&40}km-Zdr^)Z0$s%dog1D}M1`Nk_1x5;hI7h*7PP!?u3@>ld*`{1gx@?K3b z4WlP&$=(+enp9RaW!<rFH1vF*cX3{8jD6dcB88XRv)dY*{U4XUnK%EMO)TTiJZ=X+ zqhDu}ix?Kw-AW6#w=oyq`S5~-rPZO|r%!b3S-5ift1Ox4r*}l%J8@&%N-MRi)g`wg zE*|-`a^JMml25I*<37uU-8WFG?&oY4J?m_Hbz|?GjjD4Nr4|XlRl9sUBgQLai{6h5 z1<i8`D>pCl{WC$#{=Mx&Gnv3Wf!{8?)36YJopm(Yp}p_=A)lu0(i)Nh@l}fy%Y!bv z-sG!y@xRqP^O9Zg@;3&*9Q+HP_`SRnR;IM-@`I}Zf81ubPgIY+us1c}`;n6Y3M<(> zj^6ibkbPsfZ!PEg<xjmXrb#4z{g_tE$YEpfq~D-pXG@nW!*BO_KP02#F0<&xZ~9Vq zZ7*;1=Od3Lv)4QGn#m>qSzz))U}e^%&ci3l?8}zREYRG{w^YD)-S)T=gD;QdIL*(W zS(g%Ys(taL{U>#76N-2JzfrHs7?%9S*<`QrgpViA=frQUPi47!d8hXK!}_JEeYQ;T zn?#uke)0!+GqZ?*55?_bb5+_pvG)E7X$FQ@GT7QH#^CnK^rz9685g(J^BmJiEaBEr zRaErwFlKQx?~$<-oSHXLN_DaI5_hldCCv(|3QJ2oI4&s^-247V@cHGP_BQ9^3*xVT z)>yqyMBJIJDXc)R;s2tA3mcsl{`vd2aY{$M#hvT=JozGL@)M?+dxe?nPc%Pu&0NdO zeAPDdg5A=lzrA&TOP97w^Iow(8y@bKe_l6cz3-g$XYa1pwK*sAciq}Od24F*WdG#l z{LOpwXT1#bx;aew@vQT9w9B#A?D^2Qr>uX+$DTbOdv<;4-S_ceOl`;Rul?P9edkV` z(9qLcw{~rAet!JARlhG@D3O@9L4NW#>!+6^6W(No+=}$MR$6e$)at2~&Q~>~&tji5 zt#^O0SpCCf?FXIBKmG*YEOq)<nsm@t>zk2m_3X%PfdRXsqACLdzb{`_xqa*B{J5W) zfmci8p8D2Z^$mQRTX?wC^>U%}?a0{Mv9ZVN((ii~UyuEr5FUR0!Gi}!jvV>&<;$Nx zf6mXh-@fbjHTL%H?#KCmw|(1R_uF`X#YN*9D}yStKW}$c|5%p)C9mMmliOEL-g$KN z%%6*w&VODSUoKo+{&|1iwCiEv;n%NS+qP|6S$X;Q@89|P`QL|a&oe83U-rGfudlDa z-`~&g+_`gldV25r{MM~omzS6K?*045|IhymY}4NJKX>2%WA$?<DDPnJ;G7w<s(80E zheqX@wpE|24lnF~7^!9Y^RN8Nd6s&-S4DV^ZPIcxTzO55Prc~%)S0~3#cF*;w@980 zT6?%JwQKj^IH`5o*SM6_B866++sef>@wiRWv#?uppE##qbWzx~OU+ZqSY@evrvC%6 z-BUhvR0Thk6q_k1oVKQ>|6gFkfo5yti1j{Ujayf4X=ODnl!)apou488ahBL#R{JTP zuj;Y`{(MsRJu-c*fn}!eCcRf_IpUpj);v1iF11!kYRUsvE%m+YF05nHmRlusz|Oq) z&IF5HKQ|gDYIH1TnSbmyqnUG_tIJmwF~OHD+Mm9E>8s3qUhPq@Gkqy*m&qQVC2>#f zuBrL+{byZa?i5q>cCqh?!$$6N%x`HqD(!fyxMhFZhrd7gIk)$oHM?|J_sQQatiGN` zE0@2JuUJyJt}RG%QP{<jZ>p;kedeiF{#uiGCtL81=8CNzc{wMeMB*QxyXAh6@!i*q ziIG>V+-g>**t)%{QMZrb`+w3+rsvsJw>@0xFWs7~lHB7386It6j8(F+JRo4Qa1N6a z3lpQ`a`g)-bEi)%^W0IXCMda{H}vi0Ug`M>#&bOUH@?iscgmS{?B}~OzX!#_?RNsC zj?dl0ac<MxKQEr|pLnuOKicwXsc6mPE}_hvcv01Z#&5cfnT!@3ozD~P#eMnB=~G@G zH+OoS{#<>gvM&4z%i(zOX?lO|t<16hzc>79>;B{2mybU_7yPr5>s+w4j9E~iO`!J4 z;GocFC;I0GRh*4CdHmx0vVH13-#1h$KmD3`ns3{m4W;`F-+wrLvEgNj-qR=DE#H<- z{A4ft{d(~Fy7GNq3-uS7DmS&3GhX;xem6sH->Z46!m6y3N=yUhH1!3qJ*nU;Yj*aC z<-@<$N9MiyQa)pM%>2zK_kMhJzN2&X`e4EO_y6v*-OF6|IOak^^xYr9i`SRlcwU{> zH@Q4}X8rOj)|2D3Gj)SH)iNdaT4sBzCY8Oe`uVP`+-BpqQ(GVZtkRBGUM>Imvz}q( z{>`rGF`oQ0Za<jao%-*|)5)xj{WI3y`l7k)*U!{T^KBMC^ObncYJX4SyXNX{)%ROn z;?5jRyVZSW_1ZO`&TN_*z9(P$x}f=tWAcvXXP%47pSTxu-g2ptb)V(E+16#(#r}M; zSrPItY~y_1la;%5KK|3ZU0A{&es%x;#Yy%5=K5%G-<enUzNLV{|E_XtRcGehmW)O{ zh8<6e&pnjAKG*8mlBqA(a(LV~7uxZ^-0J%}<NDvS`ae%S(mA&O-5bHAzb~IXm##`L zp7Qd{62%>o`VP7)mYD9`<h^BG7jK$HzHPC;)fL}Y)gp`j&0t%e;;^Z6*QeT(Uzp+w z1?4BM)@l;e?`L_s;L_=Yg_2ec5{H~NmRg8iEmI9Xlk&dH-n!BA;s)Nf-wD;6ZYLjm zynRu#Drst++>yd5A2aNHF9-Y&zW=yCOog?iS&R9Q<nfCdUzyr=E^K_h_PE6J7fj1? zr#hZ&eJt_*VpF@gbF<O)?^ae8_DxTv7B&j~E%ewU7L$-7ty@qnBQG9%;@naz9``@K z9@2L^&R4LkGrgVm`R>8Mu#T2VuUph?U&*OX;*y*BdHy7pnI|64dBztX-<aqj&i7OB zE{A5>k}aPM+8KUSYn`wckFQ7#zVMnW@BNNhcIURMPI)o8SKsjM?I;hG{R?>oayC3{ zd|K6XNhM;dhwQwwhqmQ<3h%4jva8G7#d^g*4~|96pEg<+mQTFp*V=F+Jon$EDJL8s z2p{BGzVrQ(9>%7d1u}(QHZPi4lJZ48IBxIrmCS$flw*xrkM1q5<g{aL0xd^R_58a0 z;q~0r$`;M{cSKK4_PQ$TcH`!}Ea_Kwrv<;?z1{3mjaAY5$n6I{O9`rLSsTTc%~ecs z{(4n+vRJ$LyGx=U&UDDvmDTolUohGwQg3kdwa~WZ`Agn}9>4SB?4c8Vb<GI@KdwD^ zv-scdqRqKK{>HpM6uGqg(|MO&E5A8^*{-!dtm~`1rqjZk>;EwQNYv@ozGa&_@k4lE zm8Z%}w^!%0vo0Ugdh^&>G_!6xtLC@&liIDddR#BD2zCBBa`ji!ijSe$CyvyV?fSHC zL4<_n)HT}=IZrG1d+0FxLj1S6hpwJsu|41HeSlqKsq5dT8=m{Ry0$&Jx#upoe|FTB z;}i6J<EMMqpW7z#N~!c_oraI?k~}l!{fh-YY_>Qowaa(5b=IoF=mr~oE4|~ZnDq8V zRZZP@%KqOhhuhcKxm5Os?6#QemDzIYi}$XmhYuH9{i|}YQ%a6hG>N@*#A@}O`LC^Q zXHNQ6X{08aGy8Ml<(-}#yTVVn1kaA#8&Upy%UPw2t=`-YLg&`BTr)es6+2&MrFQ)r z_s#D0>3d)PW!)m={@hH;_Vv;;Gban}d~05DXn*e<o5y?Cx1N5h8pASI`iXK#XKUn| z^=^UpuT8tQNWj-b=#8^kp5*N2t_hm|uIsM<o@Oa4wlmrA@#L+i+ifS^=IXgFEI8}y z&n?N;`tdRT$BteRFUov#$anqnOZ%=SA3auP`uCmWveXVKuPLT=uhZh{^)KdV7)$-m zji|AWm3@4We_q1_pA*c1f74Iu33zt99+HZ^|IYi!gSg|~PW9KPwB5S0vG%vP`DbCn z-mgcc*!z|(TjL!R=o8lRvFuuH_l|?#lwz(WZ}gd+!XIyG6ZvhS(iW4@mcsIj!bh`h zg?v;PH)=jQ5V`Pa$fpYjI9YE+T}>(5!?B|BmPK>k^jplUrn0|KcKzdJ`P^32I?Tx< zzMp@g+TV-b9a`D5R?ISc;J^Aq_r=P|eEy1y6g=nMkBsw~=VTqwx1eBd>zVem)8xKC z($FvVVzTqom@kuJ<;x{}!1(LdjuSsW^|0F~Jvwdttz&!OvLo-UPdZnAEwYsh+9(vF zXPfS|ORB8)FKd^Ax`JxcBGH`B4ehFrgg&b^=6B8HkGlCwjCIYOxaLm{>H$sna;|mn z%2+M>=V91Rp2Ps_+z0X{rTxNnXE`$#dH+&~TB{oSBg>`i=k_?^O@?((4LBHdZGHJ! zas%Ve*X^`k-IsfRfBA)7kr8{W^Zi;c8R;}hY_m`FN>Oe)`8l*{LWsvRw&yB`FKXs7 zuc}n;G5nLg;;Zxds@d%MsSNWr)&Kr3yZ(l}#byciD1OC|?Bx+k8J3IRRdI5koaUS| zF(&AkxX!li2e+3`dGYD@?*DJD-YCAA=*M+Os5ne9(4bM(z=iSlrmM3<L*{M^e`s(% zQ=oq0iwnGUQNJP<1&V~-kx%J1oh`VPpHsM=Wtx(jz)~YKmySheM4HnN8oZu9No%uX z{GFz6F3u0q`D#?zc+(G_nj$85sI9N_p#I*i|8sBK7X}t?EnhH~Cv;hIMS#$c*purj zkA*xkae2M-=i}1?hn!4I=iSY?I9WkfB-;Geqm_11-BCBZ?kwU=`QQ<AgiBgw$HL>Y z#j?T=y_+lc?!U6lgMUUg6ZDiKY?L<Z-BFo%C^ouH!>-BKFlqXs|28oK%xne4iOtMS z_OtG-?sie@-v8f>W3ps}VF8EQ;wGMwzw&JwC-Pj^L|f--&Z@DPyuy>m;;z}I1rK;E zjMvTL>Uhz;%a`NLg6?;M{bjD~lTS(id27y8$sV+T>35mNmrFYPq+5c`Zts(FI`5M3 zYT3^T)616KDHDD0qL8V*p*Xtg`}0>n9^UXhvRl#f3V+YLot=kzZbpBUn6dTm%+fEM zt$`9+-;&q<z0G*pU*?mH>4x2t3QjFq@K^TCO2+q*EL9vSSv!TBp9?R4rllOMa<i}Z zY&}n~$p3_0nJc_<3$28`A5ShgcwN5UIrF_~wzsH=zuUV5wXTMmayGS@YHsq|udZ?M zkzake<KljinZaE5pY-jlFPpkxiPRQbmF?FB&bK*byldlJI`e(3mdCjSzuw1F=NrVB zsYh>Cf4J(HP3}UGd%bCnYJ2Z&w9e!By=__k*He$aN6H+n;hNehbH_NeRQt+yk<Y8` z(<;;t^~!Bqv`D@u|61IE_P1NDXM4NOR@u`cd8@mvWo|_M2JgJXSIc+tJh|h0ZkGT5 zlBx5&=TFq1*w|dv#Le2ZN25%{cw2U_%EyLz&(*v+FR8T2yg7MkikH(2mCT?o*<Kq0 zYL`6hcYhSvy8b3_iNa+ojk{~Os_gnr`ws5xP!nzv3ssx@;JU=CH)VMmyEPK5SZ6Ap z`DZ=D*LwA(Q$IC}?OvCkUjFx||H(xkop`(c2=3MFxueu&y(m2I(Zq?Fw^|Hte!bu< z&vo(V5u=h#-$NHf)Hm(P$~zV6^_-JQ&S`qJ;3TKU6V9#6A_`C2YMnAP-)LJk)m?v% zwyS)#>3l9tZ#$;ro3_u`_-m8!%q7(`POL0E@^IR-=<eGe(?vYCiCuVbr1!0ez``%5 zR(}2eOGP{O_QHUbL6S+rUKvH6-ZM|QFmrk@Dcq-H5vSWVTWj%&oP{SI?K;uLn62Bn z)ivR5?Z%iDJZqA*uVpg+{wDSMOu!qh$Txi&-@fR6JE!q2SNB`I2Hy@nz7&m0QJqMk zE)CAlx}6%@E4J6)wc*Z`e$=j&rXLsa_r=*wo(~vH4cW|p{NKy)m4EuHHB+OWP2Z(5 z<-{h&<9i=mJ9a%i$!fxc>x`~ivrDZqvhMbOdEc6IYUA3cx!g}>uRo3D5w)EpTHDdZ zc)#oS!k(^)*SHo){y2X;(yIN~%005T7bJ%&gr|K@ILg@k^uX@615C~J&$QkqYnz|U z-V-M4aJuWJ{Dmp+njUOyJUsD%m*6bcnzKb(^FLI~3NbVFYOqQSohrb&uhF?Sd=-Pe zc(J(6(|206W+%Gr99Hs{Iyp_h;kZNZs>qS6N4l>rt`!gpR+zm?YA*LN@fIgv#%-eC z7re`wdZ&p&W$z5L3!50zt%BC~u4i*D6l|<`z}e6|!_2v7;soyN$xEG7#eE)~S~K}{ z$Ax38{tr&<Utpi~{Sfb}_WIDv1qZK2UAggaO}XW_C46g`pI_^o+T6Rf(S1#xO7)J{ zZvr@TAN<SRYQAH&<7|oa=XWkQP7h3G_2WJ2e&V52iE-3SAq^(I7wfWS7Zto+l@?{w zR~~cFNY43!;A4$5?7AKo%DTAcA6eUOX|1g7IC*NFT*xZ73A*!6S$bwX<enur{n~eN zy9WoR@dWc;bd;Yc`riE(FZc3USNHg2)`j#Rd9izcMp|6Px8Ipf%zHCy9COw!keH*z zYv>kJ#B{!sEoecg_sm;GtcTtol}UB^@UryqvFqRF$HyL6vqNEFpIvQ}-?p+yWtr>T zudc^Au)a-ywyaMk$yf2<HLHcc1Rv>nls}h!KYiO#|GrxdbIiUt8`h<2Ft{^)td`y7 zq;SDdc}I8E<#{h#?(kUbI+kC!uxkA^-}B+TFW-f^1<8LDsL@_5G*MXP{F0At->z&l z+@5~zz|&gAPYN3pj?`>&|G9(x3U9`vhJQzYFIc$u$6eb3@m&iZr@5W8IUQ4Qi#vnk z0GCx5zu=qgSKjfLwh4$eHyU@i>P3XV(Ot*Q@`Tm!Q#!BE8}se2Tu<}fuyzde3plR2 zA(*w|ZwbQ@(--HS3%<IOx0df~Qc(8WJZAQX&8#0kgt5n7S*ZB`ilz<w^~^Q}Czdkr zzptaWu3Ie1R2dTR+)wYTRpO^z8j}PYE7JMj)^S)ivdb@Z*R$APv*hCc?BZ+JuWehO z>mC2z`d{taB&oL(rQRA#Z=HT6aier7d*nkd){Z3#k{>6^`?t=pow&byr^Ls?!UYEc zW~_6$A<;Km^oQk^Glg%$w}i?IoouoX`q}0GJo4Kan{@Mq30?WuoK+QPxxAcpcjM<Z zI>HY>_KJOobbS&VEf#t4go(_m`-fR)_bsrW?5Wz3bjP$VU)bl=|BuS=o>U#wnAmuZ zdFhGX6K8C8^>gP<DCN9+HdgeTaloOi2kK5}+?LMXlp<T!*Qven&Ds*Z16f(+JCcg; zFFSl%%2{2rHc$EFN~TlN(W@S$98;PbvtPTfaMsDfHxth^l<e#G2=q!nKSTF?#GP|{ z9G=)eTev0LbHlz($5nImcD1kY;+V3eaC*mFfpd`!u4?)`OL$$5csac}_t^C=kMDtl zox2Yn|9o)WpO-dv3;P9JRd^PidM;s}zr`gm=1L>$L5?IF#h(ew13r4LdCa{3#Cgw4 zpTEsu-<YRWcDVmp@zU<3%Z4$N5`(QJ0(VV``&haAn8l?FmCs|ha0O1XaxY3Q3lg%| zvb27;G<lcAM8}(#_FOf3>hb&1_S>p_UPldIiY#0maCU{tOV%}lN@9F^R!jX~n097% zTqqCl^gXVk*Qe{h-~YtKZTz2R*2m2XSNYo`C?}@z_p}+)vW7NW`Gb1*X4U<f6P=mo z=&*g$$&bSRqRBE-tGDN52u~_jGL+su?}So#iu<f@Z@zt;bpNN$PxHeInkD{xnY5Sv z^c%74IgHtNCeOcCVRh|C-8$R7(ZYKU&)Rl=$Mu`nSFgFtd49?CwajvUzij`x{YX}` zeH~<YVyf!7tzAL;Cj{QP!^?R`oy&ji32AM<B^B@1E^j>GJLld?xtx~ES1ROW+Y6sQ zb4w93Vz_CbbHbn@$1(NNr5<~k4Pp~D6>IEoZZs9E-1_iq$)vfFMM-(5trPYZ+pk)d z@+W!zf*o!v?=PSGs;7a$+(WzO*W5E9m)>2!;B07{=5Vg*bU<?Y?z7MKp7E(*Xt^Ui zGhcD>*O}f&3cj!YvhBj%_pjQkw;EM{H=C4QweRAe-A`_@99`GK>N0ip1|HU<Wjjww zvVVKMgzeuAso2xbyKUe7oF93Ud+O=xFMYp^lp=Wye=~hpa_#JbjY2t${~0-LcK+9$ z_2<|1Yq>(lWRyQu@BeV}4u8Ky>$93kGeR#dx14u+^U5!641e7BJ?ht*ZN!o#CZ~F8 z@h0~P#a9@+l+WIH+;&_>E~$TB%bwb;|FezV?;p2GOG`3X@aJ&ePIkMlt%oO+sh1yD z-qH16vS7Q{C)@S$pME(0vO76--|=%vYrFPNxVG`!bLB-nsVjdATTZ(?bArvw8++fg zyC<B!%>SXeZ{w27=D+^VH?*=lX>G_FKh3{cby^7PC$)QRm%n(+|1s6Kdc56!Z*TE) z{$Cdj`~5|he&KD6-D@4a-QuycNKD__Jx9;Ze*7=<f8xzqFV0_z?UU#2QZMVf|Jy$( z_MEH33D=kNSHyR{Kg@GTrC%gv{UnwtC*Jq_L~6XvdwW*0POC7&;Kr?IJ<q3nTlQtf z{3HJ(zEsb8^6h5WrmWOG^^vU)cWu7@jrs2V3-R3&^DC!+`@8JT1m@<}YvtxL4@9fp zN$)>lANKlSe{|lx2}`HWjQ_o4e&FT>b2#g5>%Xs`xoJVuo9pL4);g|rdUh__;p6@6 z``T7NoAxZ&{UpA;{d>8)&iDG%_x`%?-=DX?6F(`n#fHhNO_M>!p-)$W--p@za$G1! z^#L7WujQNBx)(j${=)lmWWD5J9oYu=^}82NI-vMrLafY-B)^td7k-?7owqW*W8cr4 z)7NcZ`_uCmE3f(MLOsI|Q<^y3rf|QjTbSkYxLbI|v1#kCF;%?gnd-N&Rmvmx@yZWR zRZYtms>t8f-Xe8hr+k5AFW=cH&t``i9q<3Lu{K#OcY1X7mV-Id^ggZY3s$eT=XidY z(dmxmdifO9uLb`@F7SB>&SExJ_6rPll~QCpTwGt*&(-ynY3Ht|%DhZ(Mc({>v3r|{ zj?%rd8U8Uce&3TLrr6K){NuZsVb$dsx8{}v&x(Gh_Evs|!g70S1^L;^0h4wyRm?r2 zGB<7ezUS<x=RVY#R{rmLI{SXMVx9NQ@AC5BD>fBb2z<-3j4_(Az-Gp^ZBcTEgtS&T zoCu9r>+naXkwv<BzQ9@utv&u<Bu<$I-4*|~$v2?$R>sQ?>my2A+&*sh2|LSR`>}J| zqsHPFPrSFpOgiW7w*9@6b4h9SM=zO`euWI;r=xm{7FJKv{*yR$*E)syI-Wc+3Y(Pb zUKF#R+?=?r<i=*hM|n1hrqk*)ZB5$>CuXMJvj1o0{70Uv)Fgh-<@#m1_2<=;LVUf< zTn#nL{^UQ|Y4G^@u9HsRHm|pOvr%&EtFGHVU#p@vT?$amP3>c=wbfM(WM)?0&Bm<k zz2(K46+s*3Dc#<?wyW;PeqLMW)BNvQ-OA>ez20gPpX~B$is8lcK5L3D^v1-rI3KC< zDqXz%n3?*vcg5H25(JHVnfjJ3opxcS%h~iJSGK%LJ1LiEC6;$T{mh?#CN_~*9Q4g4 zKcCsZd{cl*uu=@yzf0<EE|+haD<6(LbY!ja&JAa;-DjWlMb~qO#UuII?{obkk6#X} zIw+Jcz3i;#$+#{Zwar_1=N|I0-9Me}V_wjjW7U$obY^hR<z6fklO}z9O4<+CY253k zo%glxd=lZ48~iL#a`CAs1EF2-O8rZ}GflsL+3H%u&*-}6FAJAtw24goA-97^%k=Cl zz9jLrkH4{n#Q(`Go&WdKy3ca)r*=voy87&n_cEQQm;7H}cxH4$NbjlDnb14WeuX9k zoXYjd*?l%QMoj6g-O4jp-`TBQs`J(``N@TMhUt=eZ!PuT1>AYJ^G9C5t?ZlGyYIff z&fd}UJ<B4z{d?7#O+Dw+RyntyFZ0{c^FFVzu>F19)dfBG9WR%)-=FW7*s<pSM}_d^ z|4;7N^yc?w%l32M#rGddWnQ<f+nPD=AJ3_}9eZ!Q`%_TQzme&{qauY_od+B_&TzTh z)oK4<qtu~ug{$8=X5NVcr5W4KbH#7j8U0<SBYLHEmCk{%8CgN|nB%;-4DYgC?6ekG z%=}dMzFpg;6vv;NCr&KtUDMcLHEXK;gwKt;+P=@1`)C)NsGQltW~Xwf`^d#Qm(D9~ z8>fWswlKVKG~kTEnSUF$AD_)%=kP4@c+X*}xAEJzCB2y&bL)9d&N-KckOOJj3|4}F z6c?BH^RNYVXT`|viWc^e;4=`~*f#r<tH3^?<?kXo`+I-*ohi^>$7Mdp%cJ$%&7!Vt zE3&HmRG&R4T+{4up!+{#0DNMvm(5kl>C4xX`qB&x*RW3PnSdwuCV!0=<~y*~Jn2pM z3g^tuiz^hCns^vXz0`B(>e9G-H#WJYq_c!?;>Ej$R!fpE8T{J!{;%=7=XUmUKC|0A z*U&h{%^CIM@meN*#{b=`R;}vo?OnTe?e^{F3Z{R=P88~{s#eY}Q_e43oKU$qr#E=} zzQBz;LpSd>D7D-EeV1AJ;hPn)H-F!|`BVP4+ua>*cXqhl+u?q{;z-QTqxUP1ySuwD zU$R7D;)z3t4n2DG=+&!Nvt~(&a9zE1Ygb65b@cro`X(P0#5PW!RV&tM(SLSN=ZPKN zC+(a?V$`4BUm|vIiRj(bDY;LkubUbs6J{R!JnW9hwL7BM?_dAtxcK7SxpVjK-OJ3( zoSdBe`0?Y(lP62?q~+!1WoBkpR#vXw`#PcE$(r;R%d%hWEB{iG@<?QJ!Im90_H8@o z%{qKm@9z1vYu2v)`}cQwZEbCKc6NGtdU^Tx2M-v!kKS9Kd-uJZjI6Azy!`w*bLPyO zH*fy@__(-x@^j;2WAEO%V`F2(@X!8#{=o{@5B0M@*FUbeSLCc?_|lx27;5>}@xk-; zJ-=5KSszw7<27@`t3B^DwCa8z-S_IxJ&P4SDr=K`9qWbK!)6xN`#wyNI)A*;=jg3P z4|x{mS9ky2dh`|J5&ti(#YJZ{KP2|w_uAK_ks<a$&|v0~>z;uhSK9Z9@3ZT^a7?{x zdfU7!)6QSL<u`4njt>jl2BBqvp^kGyJRB9OjJTJ|sUFh$)GfE=@2lsj%lcW2U(64( z^mO^BXK?J(g813Z9RK`JJD=Tpd$FZa;Fm{x?90`?x75wzTm0&~VW>R&=Fn)V4cxx> zzfEtCmf{b;;Mgy5#pqSv_1}}?X7~Qdv%4#II^6H@RYN9*imCCxk~g=VV{Q-)?Dh|T zc|lzLNA9b%#r0A7di~ef>sM_5yL0!!x$nN8OLf$LH=R@P^gnM0#p3V_mKRsa8~!}U zU(ZqdBg<gMv1>7}CaSf&8t57(>2gSQoZwBFa=($y#+PS1kIJb_@!YD~hYefr`P^Q2 zoFjMYn&VxuZ`K_5Y>LY}a{67MZZN~6?UD>a2e~fI(^C4sao5B6j|>a}9FFbWjdmBb zI5n1?c(qgb;kGH84ru7id~jhyv<j~=i}xg5wmn<E6@&(-EDqZ$(x-mC*o^<@L%t@F z)b~@9Zgh%y_HX<2_-XuGF_qVL6?$zO7Ypp>_+@)^&I$8*s$~;h_Q_=Dote1fZosJ{ zUnT`inx{5<{z~I-zfZZIPW>(F`Tgj!f2tGrianiu_ghY&;F0+=?#S)E^*_=iVdvw3 zwK|3waaWhU43)Fcw66%b|E+TV>M-Syn}#;WLuVS#&^O3hKU4JTrtn&aHD~TxolpC{ zzA*Uui{jk7CmS@S`Y%0PF?Y(Ba;M|Tm-Xa!E^kudyvY33WRGmf&ku*US*K6!y8ryz z?>(VY)ldDenyD9U$1d}%^6gfIB;$Qk{P;AU@|U+O{aid_e}(mb$-k3d-cj~`Sz*SP z{J+#}p;CwK>^GNR_NvDlzhq5Iot4MDQrt;wQwM{)sEzfBsOJZl&TM4}l{RWP{P;8L z^0;-UkG_{Uep>bW+xY3Hla@KZ)V}AkFZ6Etl7L8K*I;wSti_YH!osH|=-4SNyf)+C z{sl*pF7q0SUS7Sw`pU+449gM<`4;)CpLpx)r#P`KL8-cllS^|Sr|Y-AS{@wqpW~mk zlk6c*iHicd24B8!<gDQF=uLaED{%9@E|X(sua5T4-xT>HaL)4DzeVLQ6RchfSjxF| z%UV=?*7#Udx?^JF(`UiIAO3wi-SKO?wT$_l_y4{XseWg4NRs=y=9%pTx5J$QI_&*h zIC*D1=Stu;_?|d(shXJNW9Gf5yrxg(vAtB0DPWlRM(x@WA-!`+o*N~4Ur(M`7k13= z42$dbQ$-FM+P|ESid^Sd{@LpBg{g@*9Zq|PFVuRI?3(>jPeW5JUafoj(U^&!*O$iy zi{~EhI~Q|P=Hi2pt*`GUPI<F=s>j6gGtbJbFN$<(hFo^)IX`Q4YUQa<8B0^1ym0SJ zzT5ukrT*_K)ph-k|9EmOaJefO+Mw*YLPFxLVAaK?vqim?cp1(#ivFI;<1ZxW%$n2m z_ixrbb<YRukNB^!x}@}AXN#p)*!_uq9%hr8o+Jc)$o^Kb=ec{!%HCk+D$`k4SZ{sO zd~s&^9LFx_X(r1%?4~O1+mgmw>94v>u;SwFlP-RRvd8`T{!Gr^@AzeZh`(`|=Z){V z_n&euI~IL=O7e<BL9fo&3Eqw<HtN>8zSu^nvUE+)=h>D)@%-P^U*4af>cL|^U44>z zdcCUlv}H09+@hAJTaQdRVRvS4=)uYIqNnw4JMD43_GP_mYRDXs<VWUSN)ysqWmYZq zdVTFGlR95i!p=Xh&&-{;AXUgM=9Ae2w+N%;&$(yn)s{*nD($TZv6`0eRH70zrJ~H6 zf9v=A%kDjQEqYbvFDlM5Y2W<I;riR>_nkAH<2-YdkMi@Mn?*N%oTA^or8Vt@7f-}O z`E66bEL!=B(csg|w!Ivj`Ik2<RXp1v$#&*#aQz48g5urm3IQKqbGk;lWY7F(SozQM zSHr~VclvJrJ8-AtxohsZ<aO=gW;sub?(4*!*iiE}nzxp-pF2j!*!E%$uTGd@m+AAP zlU`hLnlUTQ_E%wR@QhE7;-z}(GrJZQ-{GBK(SBNGqeN8x+&IOOBrDPSsu!E1cTV@H z(GcX?{EdyFZPqE~;Mw`dUWzX72{O0d6;&>`tKCmn`s2?nOBr|sK1}?ddO_;7c+<mH zuk)6RpTA_3zbAJzB&zcJx+a&xw-auxdhnlb(u?$@?hKLDOdq>fyXf52je9Yz?Nmqa zWHrvG8$D~L&eZ<xebC_c*%im6|6WR-lg4;m*(6BTTI0vXJ6FOg%PazeI@kru9dAsM z;PqcN^>N*s7*)5^8*d+dGD(}oMcd!v@QF5;)Rkg<uNR0KtFBuqw6ZwR)R{Bt#7e&f zJ^B;5&gO4@e|XW^&WQnrkL~|7Ec^8QisR(Puac%QGt7T}>D1)pbBZaIWv1K0&TAC) zaC?RxbKT}Atu$xN_2A}J=d$-RF8}&s(YDKt6N{v>?^h@Nduyxt<oM(&t>C-SqS5hr zi*N1kZ_YVy(t9O*2k-mY_hOPS_)D!i^zIvP{GBu3E`Dc}s`z7hO8J@5(vx0X)7zfv zbnic%KlKWqWzK=Ud17JnP0YTo`d55zN93KrY?rOJe3}!sB&d9E{Ch0nx8};Qg9W_~ z3s$DsFp5g`9PdtlHedM2*+U)oeH2`L9pnQ%FR`-pZk-%n%CJMy*`dHq^7P!@adKMq z3pj2pet%=;ob@ui3)&j2W0WS{b#XRx%-GVmZ>Rmv3-6~ZoMg~^|1Wv@#A&%Fm#^4p zuyyku@!E20gVHN5w@%DVoc3Cwvf=p?!*^4Pt2L5~H=L+_{=5BH^7p+DG^20u^DmyY zU^jF0*J+hKN1i8L?=9?Z6P%&1Gm+Qj+!;k}r9FO&|98%MbD#fZ{;$J%o5jM}(|qQp zWa+aR_RSAC`abqsbfJIQ#rbwGYQ8*MQYqDbxo&>U<SQBWTDo!C2c`sYE&XfzKssw~ ziFkQbp4z|JE@$?due#JFUhkVa<-}u^y_HS-Cx0&Rd;9HuH+#(dU-Kt#xp;f+v2}lz z{rYf|Kklw!wQ)E<m*?k8mCbK!AH7_(Wlp5rTsQAWZgst`o~)A;maDB?zdnDvL{#4F zvo(@uB;RmbXGVxQw9XN<cX_Y*H{(gqCF_?Z#ShA>_Pu^HOT+T;iu}5FfAY_6pZAw{ zL(>lS07a&6!AotWRQD}eX=}f2`OMmPX1u1^PuBTf=6w;?T~h35{>gmPZuNZjSrZDo zqhBuD{UVK<&FyA}O8(x-2X@|8tv=}7JnPbvS9h9J58CuyE{lI<n{0S6$w|@Lc-EYt zU;hnvZxm#adZg2vKL6@GHZPUivko}jEM;1I@SbK>oL_9zA-!+=X7Bp5?NuCCqSobw zm3#B@dK-;ozTLNYV%WJ$c=^I_JA(Wb=X`rNW!b(7*Suu6U)+*cl`%uF(q+Mf#rl5j zjCt$VBu}^?+_mAV(K=zx1a84eod0(zii`bAdmjBG!d+#Lg;M1;T`6%TMfpn)<XX21 zoVeMkuswwP(S?e?XBM-qnXe_XbM4vdjopW`R`1n#B6sb22lw+2%`cA}QW7<2>}+z3 z7hIU9x+`^|qTL$7|C1IcK3~`>GqF?gq4kCgS<AWC9|p$Nesgy!O#fBLEdH+0!sSkB zu*_!bxpu6(=gA#cw^5GG?7MPE<BSFOoS6>m4}ZTl&0U@66Qe>vq(th~6MnKn^0}%1 zt~`FrzT(U-Zl3kCnoso=Y`eWZw<&g4``x>u>ogt+|DS7GqV;gC<D>@nNdZ-pJc=jX zh`BWRl|og*rXyEBPZZ(qnSJZ)%Bg2$HpkfSe!NTHq{X|Z$yoOIQ3K!UTllVI_;qA? z9ecjjV7cE`jj2l?_%@Z^c#*fHVTsOyw=2uo_Ix|LvLz@@d=0}hna$^m7ybCO(ogV8 z=Gv$Ui8U_L_Kz|%ZUyAdT2s(<H*8k?OXGga*(>Ufm@ZsVZngHy=@Q0n0kLNvy3#Lx z%YUn}Z@KcX-10+<FK@rRR%1&>>jd*2k5_U}O1~bLde~#t+{5;;Vb!ziqAw*U+DbO; z>apLQlkw_|>C7|Qb$8{M3sb7pIA^{M$b7cq(Qm(3YrfY+2LC<DKjX{x%(BSfO+4Ly zyR3FGDsL7zd%7Vkap$BEjpxxXtC=J<wwl-kEL(YH-)#mZ&GU@YTTVx--+FQ|)cOH) z{lgzUmhsPY-d5kU%!xeDl)L6<&Wu*yk43q1rmZt}y)fSBR(Nj7!^<6)^E~{yPRQJL zjNGDI_Ew|9x-`SNs6WvpO+2z`o8_nboBgkSnsDEk#pd&8=g+PIKa)QHY^rV)GGV<m z@#mV)%Wg$S7I~fIns{^Bx*|#2gO#>rg}pC->m(M{v%b8u)W6*LYdq^d#+`}>*)k1y zPtO%N$(j4Q>TUlgshL+?+1|%lE-;G!`e90*Sl!R;J8CC(WxZT%n15YXE`#U%(hu5v zS6m}?OvFDZZ&nIaz4%#m<8{@Kd?rgfm6o1tTe@=IQjV0BUTY73Xl)jnue-pjbla?} zjrMW#{S!F(4#ubE7A#C|++h5XBShf;pBs_OriAbM&v;H}&5XrIq5_^}S8{sKoN_AE zD^aK9P1vb?r>XpBr}xK9@4xtGmcUQb)F0W$K3{*s{OP*QtLu;c=x>W*@MwOs!eeK^ zswByi3JH84HXmST<UDzXF~zc__2dr$=>zS_pX!fHZ3{hhk8^5@`~1S|qWW{R>JBlk zS8-f_hEX(M(dOfno;MEp39R*ecG-JA8Fv)_39qT(`zN29Wmn8l&1dKC*Sb^XYOtre znOs&=ZB(1LlLf;QJ=R9UrVkR1t*kBW9!AD1qjps4o?jYtF?^x@Ez|Y+8Jcr5G%6L| zU7cExq1w;XXvn|9a;8B4#z{wBO8;5W)OpwPr}Nzm2F480{sLb9C;koB{SpKn*xZ7D zsZNLt3BUE;e1(JJJF%&&B%i1Te_h7CWs~KPq(uU!WooiGeb$<6(R|=`Q(Zj%(i{Va znFcciMHcxy*zPa!X){}$%ZtmGTKr$V*?Pdo>blJJi*uB_v<#d?D;Ihh1*Gb(Sn-K9 z<S6f|SFYZ@8Q!rX#f7yC*TtPqU{d$o?7LH_{B_-*XBFNHQn|Fcs_v-?FfjLuOWi!( zAd_`JQ7EF_e&@Gs0e?Pxnp+=|@O7i8aB5#t>EGD*;VnK9Kd0;yn|jD~?vfKzJTCl6 z|LuCaGvoHmz}u}ae#cKa`TO0aYnu(0HB1Znd1rH7(5uF6kGhvI<}6Vye<(e%KW638 zvVgS@Hb1G^R%+hQ=<nL{oF$l{y}E0f`u;2Cc@fjEZ}ZuGWmo#EH{M2~+4nc_Nl2V6 zp8I|BsvjK=f7O-DuC4lzoLKT<PoHN?UTpl8=Z_9-y(#f=;fAh#6YL(Yv%0&XAgtDL z!)}hm<Kc&HnE$A%QEB8`bN3g!p{~rv{fTAsRPTP8b9d>L7gH}tc;+)7DJ$=rP{qD3 z+kabd!gBRRHx67DUKx9DwU=m4nZRoAtJ#(!A0<2YeR;)w{!RCvyW)Fqh*#eh_rE<~ z<J$b3JMSm^e}58fbmPWz7kz8f$zO`X8)R;9W|zg+?|8+ozNKw_@dwc#dpCYvt&?vW zB5-W7QOk|xJ>u4{1UX|kxb}y=d4Im)%&Cp+hLO6JybEO%+%jrb+?_x95&vB+g?;b8 zsCEmea(&cF{xwr>SL<y>uk>qPNsH_J!ZigFT=Qq7)G+LiU2yTU^SR=W&W78f{48`r zGnRRj{!_PYTQJousin{?vLi6<cS1>1hR)sQW`*pY9i=@jdXrcB-w~bpN3d<(X4hh6 z@8Zi>y!E+5(hf^~Y1-+bwqx;I8_wJBm;TH++I+Kp$IP~4i<O)^jkZp9sxEI$$|@{6 zHD}}eJ?f_3msaxH+9X8U*gd}TeAXtdiGQ?g?bvPE_%=q|miQXJS&)6((wGF5`$7G) zKW_Oad*5n@d)~$qt=AM-#n&uq;)<0KE}y?KcWz<D2_YGq_giM=UcU9HGB@7ku>FHY zT@R0@RryFC33~a9<ExdDm2LYX(>&!Zr$4zJH0J8}{?_zWHEOR-!rT(}n#4!z`3q*K z_U)6~&}gzY_W7DcXEw|`@aT(#dqCLY>6@2TpYQB`+PW?A?w`jm{62p=F~NlQ)x!fO zALhK+t+aCYyp2Z`<c{pQabY$8e`O}K334*RE3dn6S!$ageUc$6WIuPg())vdx)%Pq z>MVcx>4HzEx@_F$mF?5hjyaN^m3J*^L!Q#C8n>iNo7+yWZZ_IuwfgR#J<W-8qfcMn zyR&qkPMXq`(p0`bR%^ExU*8#=ysdq*N{d?YQ`YCv{?j|tyBEJ@HSUwO%MMX)n#A(> z$9}_<7(2FKk9YPQHQTGbru(#umG+kXSO4DmSHyRC(zgHmj4tj!TvgOn{WkN}{7=4H zZmsK{y)IbtcJk8eW~|S)ZU`1GcU8K<abx!W;9uMYk3U>_*jm2jvg;0xy*HE&>zrBj zwe56LSCY=9?22U8Z^}PEs{Q$Rg?-~Zp@nB7C*Nqg7I$%X#MBKHvXAGz`=GbEJ}@uq z^uc3yiys*)KbpPBJ9^sn=wJS2n*?sp+ZebmGrRrCc{aKCYO~)h`}M9(c~kks`ZD9` z<(uD^d+uuQ@&B_~)`NTgo4pE4)3ee{k3N~Y=jWzSwwbEz4riGg%5pAN%-XtL$3<VZ z)Y_eUZQ1S9iaLI4Cf@JSSP>+(z5QK!=-RpUVY5yJT-|=iLZP99#f$%qiLF@7+(&2H z_WC|HdjF@w>(lv;|MHW$mQ350Q~2}#{@?ZPU)t4|3$>>&YZu?wzT=Ja%yQQ4r`tVm z){2~-A$v<Xee%OuyPa*^roVV!?IQmucO|pDuIl|b)vA|SanmoY-nh4LIvWF{9e2^b zUCVE7-gDeP?%6D_=Qr+sW8QFc$NrtM9=qf&i>&U;nYY|+j(rOUQ%YRj%ka6;Px}_9 zixtjIKYGYZcB#a<7jAyW?LyosJQ}xscJSo<xEg7C)@R4R%PJpBuKX=4N(oUaZe73{ zcc)G@_ip~gexL1YRJQ(}IPZhe-^ueUx;9kQwd}BCd4FDI-%Nu?o(v0bue%YxfBOA1 z3X1|7JVRG4w|dbh`r#huLe_(eFAFH&+$A#oQ&EkCYmc3KMU}#X&_&muJ1o#XSNYxG zy?fohn_qwL?RF@Q$#@$2tpD_dj@1$mSHCzmjlsC%^g@lrY<xSFzU}k6^7a+iI>log zd#$eR`m}e~0-haDr&}#r?k{biESp+kx5O^hzxMl`N9#N<pS2L%J=Jd8!rb%wOwMP> zOljg(D0{Olvd^?TGB!v)dTa0Bl6?<j?rp1$P{@;VIUVzfv(((JjAz26_^CWC%qLO= zrLr$6HmKJe43Q5@RXVZLXSaa-wWrB1kJNImFf~u;T(j!trk6E3MVc}1v-SmN=dM(^ zZ>d+lG&^^->c<M6IkA~<GoGA0df~L<R`2%WDVtTCGD^N}IbE{jG0UroR=;<Ns;%Ak zWa1O{U#4M)Zx%^f@wM^xdDlC|?N}>qwmV_^ZsSXFGq?P@bC+HClG(-?Tib2YCa61F zM1DJRVefv2z_|z5gLe2$-plK^)_v2FwfY&n=gW>2iPWD+KP!LIXWGmyt$KkG@6TVe zUbn<;8AnZA-q%R;yq!Bse%)THt~5LM&Y#k3i`CQL-23tCx12@%dh=?|=S{I$u{U;^ z?<}1k@%sP552@#Fe`fNIdU-6N?0xOug1%J#xQCyA@2D*Q?r=nzQzdETq$A6nd(G}; zN_`4xzGYK+%X((UY1Yo!fl{&=?}Zl_)LI&QT5mkQ;Mn=}_vhGdeq^xrYhdtfuot`< ztmbJDZ^^*LF*$~nNkL`a!-FA<bR2GQ*G)`*r~ZiLs?U-=n~pPeBsAFD&6i-%_4leW zX!D;vVdLb(Q=fg+*&ki?I8$%uMDu+9()yEy{A+I?+{l!9!i}NleTLWSDXRNl3*MeA zHBDjZbusCnTF3jZKZ%&Blpk|DlycZpG>-q@w%iBGt;wR5_md~jtT;E(lzILC#ok?Y zmzO;<+Vb$d?OMH`nSVROj4oX=Oz+E0lFEAJIM1k+hvjO2_6Nt3NuEz$POC6o*iw1Y z<<#GY>)P1N6mMJ%H2ByvZ|C)&JjZrKK3}kM+q&onXUiXUZtwnesD*d3P0`n{qIy3y z94GHwbi!Oab-Uh?XLgHcSG}L6meG2TwLtRRwESPYK18(G6dhe>xmG3cYWt>h!Bg1- z-*eYK`4Psw(PKjOlzFplGG7EvTD4Cmb!SGEd}6P~wU_m$e?JoaddRJ<D3`UZ`=i~> zZ{GSlZ$EnOZu)Z0-{gW-M=d-hpS<J$czOEf`M=FILb#kA^2*M2sa)qa^L`X(R{Hq# z`wd?cne@v(?|Lcrt&WRd>Rkw*w}h41`X!6(_S@K*-nqQ`{IM51zMqTH4-K%}W8t=W z`_>N&g|<fXU1ImmFRz&PF5cp4ZM0BfMz`nEtvU5~Gxl7K^YK4rxHkQ9aPSu+zUqlT z_ZqEcx!?cdpV91}@!EMR0gi`~jo%hssr~Ifqvd&C;Ya!Ne^146>gPQECcpl$*`n|F zj_-YwdvEz-uJ^U)49$#l?WSudzOP-st^0OOK410y-*;p4w*R!X5tzx$(W>%M<Jh0h zl<-1cn==CJntQXnoqKI}2J{sf90)lnGo`=%yH9d>8>_ip`zuB}rMBz`;SZ1Q{``Zv z;8{TJM9z~%a`m^;)LH$+9t7{%*e9-#apV7*4;uqJMS_)1o6i@w`Ydv{^Ol`|$;WF; z{+&J$y5eLl@08a`lf-AGF5!{sHrRQx$F<la_~)^#+RLYE?%le4Xyy-9hbuS#yg!$A z{qv$#9D6RwNG`m}7jdn9M$Pk=J(Y?xOpdzL%+Q(B*|SGdP2XUmfH+TjqG(virKicv zOpJ^Evm@r$`ayT0wJ|w=mt$b)RA68bW?*0_NGvJINi8YX2XFK@1<$WdOAQz46JOh& zn8x9_OY~))L{L@3Lct}woue`*6ueltd-p^MsU;J|1Tz^kRai6IcI^NESFC*P?>#rt z*ZwV9Uwh8V>r~ewrD=)>N_(;o{0|5ZFE1$I;Nf9e;(j-I!(Go83!nO2G$`J(NHyvt z*V?S|#hLA4o84Di-^sSP_iA_C%*uO`yW*`_??nDsu=Y>h8|DjUj2X8NL@)2>?^Ap( zFOV*u{NB!G;oij;?-^#qtK8CmXJ+wH(Lk`%B`rNYJS1d6z>0V8-d+8*?C7*@lRKU) z{&A-H%b)HUXHNf!DJePU9P=+O?xkzm%UCZ?tGzsP1M4P-{+kfIH#TT%VCeVl8*BG( z{vIEA);02PY@qBep05EHKi#-ee8u|94cklCubUeg8QI$Y{rvp=(xpqcZrytK-@>&M zH!kj6+5OP-%Y`S8PkjHpa^~mO_~qK!{g=7RH+!3RukQEWZ*FF0W^P_yUjF?%XhWNy zpP%0LGCA|Ii`KvUf4eVVzC1lW{rU6f)2C0re*Jp?^5@&PZ_hCK_3|a>hyOq8C4WU< z_&+!1|K$H~TX?<+C-D7d-Lr7Re_=Du_LCXT7ZX$z7klaL+4v({XX%2=r!taHdN9qc zIm4YA@-l*Jw%^v16035Qn$K6+gzsGWC%W&&@8+o+mvNm9h_Olkcj(Yp9)&+MC-AV# z$LtOfIg&8z#vOmwt2JSoW#-bx+$}0u87DIjI-l%y`009c<zu6WSphZ@TR+&<txa3Q z<0sMMw_iki;vA0MYxLb5X0=?-*|fJ%yIV~B+_^BZCec?j&K-Bl=v>TfD#m*=GQMd> z?dh``s#)9f4)I-0b@-&x{C{2jCgXE&=1<8#s$kyAq0_n~N$=|RomWH*MZPM|I{4S< z_0FOiX$L*^ms?l9TlaeZ>*kIA>rJZn-I@2<Jal&b`<HI<^YeT~GQNGYS&)B@zrOzc z+rR5S3vBx;Ah7dr)eGOiqg4{~KFt5>-_n&M%@JhVt`zF~qJH9|hTmN&3<?a)2e?j7 z<6uZ=KjF&!_m;VmM2xHOM8C^y(GzWKb7mLD81qFNB{5H(Ai+1~y_?XSrCHWKv(oFW zUA-sPs()QO@3G&l*9y#TH^u#Atv!nU_aEUo-T(Vc<g#_!r6afbU3@z8+)MA>JKqPM z(g_S>4%PWN?XZQ;%=iB`ZhrPN_t(wmKkcpFiMAYfe?LV<tLV-2Wv>bal2eK%giUMS zJ@xyk&n(lvb15e$X>~6?Y^A;GPsOzVB0Jqatgx7>ki_>*`*jTes?+;oWM!^>ceLo2 zYCCaX*0gWa6`6&P7AAT6_G}W~7CO1={k#~dC9hWXP296?W=F<?r~G*b@^`0~UYULG zSgGZrb!>@OeCi(@y<%g#>e}2r>*Pw$a)-CqS2IS$EU*Qa{*^wT<3=G6z7k8RU@ zc%7$t&!cni*0Kn*^==Zl=Q;1-`TiU^QI;8Vm!EC@7=NxU;uSM%l!NkCpUGF|WvSe6 zGuwG?`7{0rp3EN~-F}~V)#mo^%S91-PWP`)`Sas=cEC<1)gyUoy7896J7nBEwe$3k zW!&|VE$Xe4HoGP{`#2|0gv8^I|1Vvu6j&D+U$8Uo>)qcqd&MehYyMiNs7#NWr}lq~ zg{R7HgC-9RS%FO_nJh|G{Z>4j-dWi6^-8W1d-5B%9^F@ql(zA3Sz0gZo+o%u=E}CY zcVx|aJ}l@jSrg*4Y^LxL*J<~kc7%$VE%Ld?Yc@%oV}4cHs)hf3yZ-F8kMDgvC1&cy z8p$0NG6EIX<ddH??b_tDJ8YWB9_M@8*<aX}rt_YBY`ehUy`uU&zmSlHxz+2<^6%cS z|Nk%ipu?OfOAi0P&)>_N*9ZOEyXZx;jqlE1`*pnj&)adkefOWUlBxj(N+rq(5_M~K z<j*ZU_3VQGoVghXx2$bkZK<_fN+h2rX43CPyu!?THn1dgw4FTg(n(^u`(4IG3ypY0 z_QZb_oEUVwvqH&7@yeDj3}>XR4t*%AO1i;s{mxT+%DjA~U`4Zr%vnw^-5fitXLp=j zBI&obAxI{#PWbr4?XFLk2b`1jXi4$(>k7%1Te$9$!K}(KulA)jTH$LX<@ZkU_cvs_ zzw%YTPtKzER|?*DoL}Xsp*OQSP@b><*Mm-z4I3+L7Bs}MWm*??8QOF8ujKGPc-c<5 z+(O#DdRETXn5HLn_8yF(yzjT9?pB}rvuUdOc^$u*OxjPmekL7PyZP~a<UZ@^+@Tuv z#YR@=<L2my=Sly5_Nso~=DzP+%K5i2v<6*bRtbGE`{|U10A1eoz9~mv+dh5&@AUJZ z=95K(u6w@{T@diAX-y#4>IqAPo>(cT#jTNhxL-%<(%1CwC+t5><=v9o_^^c4l}}*t zp$+d9g5tW^MQuAu?=26x6m%kY>7~s_#M^f+QH|Nfx9XaV{ie^`y)%v;b6i}aIc14a zMA+HTsEJyek6xKRwV-r)o8l&c?Js!GU*3K--`K<2=F&2|HA4Acy%i6|?4E!1!@ZXe zjo)|8%JY+0{C*kl<C?EFtGoUc^WS^7Ql}(H{+D&>rKG7G+q3dsT&rg6&q{IAHv4(E zcVqay-uuhFgpRII-e<G=Z;$Op1GVXLLTmqB^Lsg?Iqp`$8coBtqjv0CMZLl6vkzvN z-7mj;|CZA`mrpORA1bNx-X7b0`qqO-9an0?tL=BIcAdEpI(5$3l4DD6p1b+0J?71+ zbw4hb9xsWx+ujwg`8VW8?{2Mj*~BG0%w>{k(T4W>YAjQpE!XjiWBcz~WiDQO;atWh z&NcjZg8$}j6<Htr^3&(Yqj#LFwpUH-I})>&c{hh+PujIMn{QuwCkEKB+VwZ=u5Cx? z*`mVG7Q6dL@9^qe-23XJxy6~Y;VM&hYs`<CFBRvuZOPw5KeE61dQ?p~zG-u^{>*=8 zH@pZ*-gAD**8j?7OLFd9JI=86YPjo%Srz)i%i^*=dd5C7v|G4Bw?mBC{>_n)&X~IH z$5mY{hab%pv@E~WaZB&r`z)1f#f!C0^eP;?95R1x?9Suf>7l{iTOZ_Xt#Rk{n)tHj z__T@N^>+U4i#`#vaeL2ulW9*QH+<h_qb@yvhCg@x??0ZMpJrRme){Fbse*{|mpLya z{(MxNKK-|Xfa}xk%L>xI*DVxOiL<^fz~5WHs&&%!AMEz#&0II?tWBKLtEV2*HfOQ_ zV#kr;l3Sj?{oY2wOJ5W8Q?07c^8VGDw(VTZpTCPlFGwu;uetfc8^76kJu81igzqRi zy7{t;_dWNAfm+|DvtQTvX<^!6*mf-E_dboH$V$(`B<sni`<DinE`PC9#omE!izCy# zd)t0{PcF+cJO4k^<<s)?XLk;-dmA9_7o5>~{F>33<^E>zvi+$+*>PSz%*!6`{Jpa< z?#`wBLvfF7eqaB)?!|ZY{icT&ey;iQcOH-9^O7aUTn*12mbb`$9&+qT`<ry5iUa#L zG#~0O&Dp=(spp?6+k^B2|9B_Mb1C1g>&u8)SR~gcW3qdi__B3TyXE@gzn{pwZYuEX z6z^OC;fI-C8Rt`YVmJ;LvV_Tr*fYAOe!Rbd@x#W+&J9kRN?w^)95IX%Fl%v*Y})t7 z%zB~Omr{?Jp7MInTrFOn7XKD-=C*^<dm#?Jm8|Q8pDJiH>3!U(@z%Z|b^g9G#iYJ< zJ=071Dir?OGIZV0*!sh8Yu#&E#wXfG=JnNVS*_i-Kw&8}qxHL|lb+OQ&8cQAdAp-x z$MVErp@#|IHfcpF>M}^)yD+y$Ol=}Z9*5hDC%^6r<#RYHEk4KhRKPlr<49)g>jeFR zHHIHvPUiR3cxhtG>8PY&YSa>8GUbZGlso2AK4}_H*=76XXp)BRoQRa!?*EOZtk7W* zIwhd$zhd6G({FX_tPY=bJF&Q&Q$6RJXvC9i>C;TUUwVA}+Tx31;yKHvx3pi)>+CWX zj5^8ib-&emEeS96=1FX4-<*4?t7x-prrht8KdA=_N-Yjee!5pOwPk8X%UOB$pdJqE z`y6GFk?}_E?$+)5*YZu-H*H53li~DZJ}<w$UHWZ8?(X!mHkT)S>t|X1jZ(UsrewH| zXO)@kUoqXy`m!~7dm27Zn|r$;z52zvz7X$~>4(FAA2NCAzlbf$S1i8l%S$%dVwdDu ziE^G(4Lwr~O#~-)vaLGHre^oqO{VAGwznHs`*`W!mXR^KdPmltW7CJ~Equq5PPti4 zbl<u3_SJMZSIsCFEjP>g%F#BxKQHOF8s7c*Mkh^tV#D44|M;Kuu5*6L{$x+a9(mzQ z^KI<@t$t#&Eje&yqNdHmO`XAeE%Xk5o4e2djEqg3yy|iHgZDb;a(whYQg_Ph$Xkyi z(OxoF{LV}(HhNKf_@RH*=Gh!u_-<=W_hDx2i&U8^BN1D2bbH#QzShap?|1({cxAa_ zSjV0P&vTZyzkd}J^iel<mRx&vphcByYdiO0-kSkDi@a^xGt(~U2s-T#nc5e!_3wpO z3oZJ++P`oleJu7bwO{m6W9s`wX420&Gw&H4ej8*S_)NYwetpL=Rh_5}=d5FX9eep$ z;rJ}!7c-1pzE9jDKCRe3_}c@mh7&C}#3K2oeK~(mOmvYX^Nnc}Lr#bn?Cd*pWqpp^ zOY@f}+wxDoiTquf`ewzN<Qt1*3ZGoQdAWM8k&RVFtyRh<*~{IDH(4)!%wT;uqmTdL zQ@`&qi$6~N{OmZ}#D#2}*M8>-%y56FTYb6i&Y518rb~^+w)^DN-AygcQ#H$9nSIZk zrIqidlYh;?-)ExXOWUTx;Db$H-kuUV<I~UR`RU{fuT1NngFzjw+a;%|dHnc2ZFamz zoS>jx{s}+bV{1D&77KV!RrqRlcjEs2UJDOSH1|kZa(p7|eM22-F`F|6b5E+O$2~Pn z>tf`vS7haGkjdM2CaGtiLloOzVV1*YJrlkuyh&O!L3j6z#hYiGp8q1YC39L)T26Hs zXK0P<jotkZ{q(wzy3BKWP;zcsM)jPZUu-tM(3@S+^iXK(xggW!QyBM`x6ky;`E_mT z?3*SXXKt;quz&VuUB{%nGC{kkMvs05-P*h*`_v}IH1Q*KoFYL@j`QZFo&I>*>r=Vc z6kGS7R(s|gnSXdowTAhFK3$7dN$=H8ahqHJIO)-1Zo1g_ijuwe*0=tyDy5+(^NyIG z^4g#C`-vYb%ZYup(yM-NUe&E~Sby^?#?7m)?3ZHoJS}?mOKSK+F{4DEr|V4~MIAf$ zX3J?qW357wwTxV9e0|rx1YZ9Z5gNStn%E7uqRqd9gl^89{@i}M&#i5%WnYTKi7J~+ z2-I6)w%A#N-Pq7)((as=+G~@`BhRJnn7(?hp!!64G24F+>_ih8^h-bc`d;iWI&Iya z+_Gam-xWslCtvT2$=9#A9iI5lS+_efS#bI-f!l9xnt1ng=lz%>Wo0pkyKdR1ImdcG zx#gsvi0RnzZ)yY6;;BwX-Dlq>F<+KW{4l%bOaR*?!y6BmO&3;XII1CN^*VAt=gQev zKA$QnQrYD8_kvqyd}mQd=oy~N-JT|`g5741SS6UJFSKIkSXHd?x9zy~wqvWFr7c?R zA)eE0wpz=>VR4>AbMyAqR~Js0Qn*^7^Hh7G=HFLS4smeLGVkTv*vntc_BXU|VqK`; zqFmv+wT+Bl{>wH#m~&0P&s4*CQb1=}*ts1Ge6BuQF>OZqmy7$~OzN?|#B60$Y_(~( zRZ)HEliLfexiYP~Rjs^xtxq#sO-z@+*HMvq-{Qlij@+oHn^n3_S8RIp(m2m(`Ke`H zrvq<oRO`y$Vib1ig7>*=`!%`K8Ou`V&6bOO@$+!Sy3@V7U!Jn}?tad^OT2j3^xeC{ z>q^%z+<iT>%51($)wbU1GG?v9tqffGHS-)h*G=azePQVStMh@YzP%pH<hr9PzP?;& zcbMgJpm(&utM9c-%J^-bv53B4zBgxL;w**(F}GOlf2~NZ`JiT>q$yCfEwN{A<NSE0 z1f!O3iZh}ltfrMPKM3}{uM)ICHKAvpypYG?3Eh?P&Mv!{OQP7Dbnh|TPk5HZGI4&; z+vf>d8GHZa_8Xq{DqhCV^>}&852lb8%yy+04|Ey?X*E0+6<BHHlWpZR^Kx8kros(b z<`eQhPwZIi-hNj-6ksj8X~Ng%OzfTOn%B-?%kg#4h?Fffsz2zkXr+hOZZ<8uX9CLw zIM^hgtVlXAy-uW1zUB86w{No>g?hgo<o#~`=5xDvZ_%r!Lw#HL*VPvJI32hw!l>r5 zUMeI0qu?_E$A)RO&s-H=yKt!gIQt<k;ogbk@*<A?lJduYG&i`+SaIj$EYDTHCq8&B zbs~^$gM7Y>cgdU&JS@)+vsANWUlM$k5!m3&!20FNDVHZ#JubPLcC~SN_yxvaw$;?g zWt#J4YtaAM&-i^3>?`Uft+LNdx|jS#^4@_u9Zf%lUW*+GpI9e)J(REzS#;p~>j@l8 ztNr^;n?#))ju~C<lS{ra-!XBk!0ZVx3u`%!eKb*X6DSMXZz#Sn_Hci(%2YuGjhy$# zPb)}ql}hRKXU;iq{722$|ND`8$@_wHJtsKqJht$Mij02e+iU48lMa}2+lw}*J*?cU zb$4^t>dpRA{F|fnpKnopes9*fm$pk@Py6`d@n-!_L9On#zp{_xPM*?VqR$|Bmf5*+ z`{}r-_MaQhzRynlxhYP;tdXfo^yg;2s`u|KzfF}}q~j!dRO$1k)`;wRX`F=((|$a& zmt(!O?DvbKGaehb1k_I9)(DE-b7xk#YN(}wpY-|@+|^1?eXA6E(-rl9Z*o1B9)9&a zQ_<;@o4t?x%|Cta{-sUAZEQE+Ex#!>y?fTXu2Xxjrs_<4-yQwukgncd{aO3EIAXWH zo$_Wzcx=Llx$T@SjJ;hikA0Td{QUk(<5lMlwHyx1tUGHjbD{e2`oySpW^0OkpRSc% zyKb({8sB@`$A7Gx!e=eAjoVS^@I&_7r~JdrL-YB1SD!w#yR7B5<)X_oleTSRVO#h* zNBLN7sv*zr(8wEi;$EI)u}yW|cj)8hnW5dU=kxURMqj(Pe5viZ<B=NA-vy+(Nlv-- z_(_ug(ekvXe|}7!z+~#Nt0%cvyyan@Xi(lw?cAjAIjz5}J;U=)J&ZcxpPME3q~q#R z&QC}56Q;+>FRwqUX}(0$@ljREfrSSDPjr3hxwon!@&6o^_~wev4DoL*Vsk8luj(>y zF8Ta?cl~0oD@#vh-Y}ala<g{nz3(zBR0CD#?fWBq%=!1>XWI)N-)oXH{CL~9rtEP? z>dA8-!#uB-NpCLc^_ltYn!V&YHbuUv@<+Mq`}4Akrd<o)<{Fro|J=!pxovyVBAZ>T zhokqrm09ZLQa!<Y@#)kDzKTbM%8t(n{6DGgIP>hX$#-5E>25By^RRi9a{1JY4|l!? z%v^kEiq>a$|FDZwrsmZs-E&u#x*l_9yIi^T+0<<lqouC-KK$5leDR^m?pG^cl(9da zyY_3B<;}f6YB^uYZK*n^^5y*BTlbG2-`{XDe7VER;0Zr9Rep%<eqgfy%9Ehj39Ej6 zamklleEzTG(deYlN}Vq%lg=7X3OBoQ@MrPWRl5QXxb2*nedmz=H`ZkF%MTQe8P+ho zFVC}-4(!Q#cIKVyy!&Q<^7b$KJZ({_m}=ptkCE4J?U;V)$@DMHb)OcB|GbyG;@{Sq z2%kVVm+*CQN6OE1hNLbzIsg5_FtsG#*8R6<&5q~NC_jAW=&haC<v#1n?!EIgUw~(B z@418jr^yAG2zuSyT$%ZPy<ygjPHXN(RlB}&o)dUxE_l#9(4W=(?RH(EIhg@Jx44*J zH+ihn{DWuXjIM)g%l7&?pItXe>BKsvuYD5d9WDGMcRyNdksh}6^~MDSivK!Q%$Mct zol?-eGgPMLuy4Bf#+n^(clCGm=Y6|ZVyffN^gZNNL^bcXe{=3g`QF`MH*cH3#-}!Q z5eIi4J$doddzD@P*6re|a(Yp<$*F)pvU}ZpOUs*92TN+M{QJuAz;L6rVVZn@z>0O! z|HWm6|CBg8NMF1xcDkBdBPeD%C-Y-__KP1yQ`?gtezr)yEP7Ds<c`*vi=?_mlMg1{ zQ_y;wTVb@h%1+0-+Ff<-?Jew%U*`qdvCWQL7qYW6)gavE!#nPC{9$LEZmJ)9?zs4Q z^@f7Vu-rXQpT)|y=*^Ve@@tOY>M+BY$I+slfBS7Nw-~VU?bZ4!)48gUrT1T_=kn_x zZ(X1DWZ%|^RoixX$KPekT_Pps*<HW;w@<x}TK=E;*=}<kStP@<&s68lj*B%snAq1> z{QAA5L^W5X+jPIr^L@F)Lb&gmxj)|Nx@3aM^WCeD-Mv|Q=h5}wmoqQK3&;ifZ~xJx zGilqqscgIF{yP6m`RB41t9inuq<(km{r}r38F}W9zPI@?XKVe+IMo>}cll-4FN+D@ zS7DWRqegPiS>@)&qgO6m=MyM;&N%Ug$%&-BP9IJ_ba`e{^6(Si$CHn{bIeZ&do=$@ zbn)_;(rX~(E3uzx=04xWOs$qp@e@z&+Y&hO*xSsG_?Ju1mo2`uI$;9C9J@)Jtm!@t zoEpaIHx^8Z<Q8DkdLz12L-gD)MaIx~+j2uBv!+eZYl-Ino8R=@`b~`yKhuVQ+4ANO zgT-$%FLY|y@F-BgA$Q95NfKLZ0#2^yj5yvFcV~Vwvk6CN_tN;YE`|c_Cr@4~RAhg` zHTCYQ*-MWuJs2?Kh~YguZqAqI{Kfv|ByF3Zu|P~lfU(K_?DW^MTzm6M6_^`*pWRuQ z!}fQ<A=ctb)<kD6dCR-4Il`>$%s~yVTzfaPTvuFN$8_Tm!z`P>_Z$ScZ=~h?j(u3g zF_njd@#WulVoAcBtn2H`&sQg0UL}5Fw^sPAS82yN_a=YX74g?$fku|3U*h#V$)8$I zSF~nr-E&uKT6x43E5DTOcdZ_J{(7?a<m-tIEIZFC|J1s2>RGnd?4H^b<LA#)3whto z(W-1(rnXg2YvNy*|I9B{il^<q=vpXxRbNxIDe`w}-?2I;Y4J~yk4!fnKAo)UHP<aS z{M~1kt0%2ZulQZ9)M;~nu3`NpA}#9mrpIS<T=t%LY%?qU{qe`@i~n9zKau^tPUo8b zyJi-z_2)Hav*dZ-4pELXSUP|CnmKoFmhSyFN8$GF_jg2(`&`hSwe(@h+OQK6`C3;L zJ3g=45uoy*N=v*vDgSHQ%ewtp=T3&&{{PPP_Og!uhl&98z3uhUg2$!RFQ}Y&@hyL= zQ~c?dcEQ1qwr%>o^GTrh3bpk=RvIPyA8?6mz2ZE}QR~`i``^o-P8PRczGAn2jg#W> z>3egYafaW#Ci?7{?ffNrC$}uHeZE@a$6F(Thc5$|T3A;wUz@&Wsi@n;*>BRHT>d4n zTvEV1qj7Fv*QzB?cy)Cb?YfvSS^2$iSlNQob5Xw^-}SXSpYCxl=jWZ(vGcxVSp|J! zGH)qc_<#0e&m}=wLW;XWYSc|-K2F$Vk}0Nne#v!>@|Mi1xEYF`ySDvy<liE?HA2z) z$hYg^8M7IxH`M-+{4JSX6?AX$fw2Aqd)#_HPbiH_T{h{;)&7=*3A}Ts3+U`Ex)eX* zL|Y@9S(VWC&xKY8E<K$X8tM2xzT-_m<JE6UGEbug-<IUH9@bs9Nlo(P_8Cc0%S&hf z3u*CL`~T2_veva(Ciau>nSDt)-7LH^r_6NnMea?Hxz`76O?nWP@n}=B-yzLSsTV!} zd}|EQcwfeHZtvP&u5P`wO-z5|j(5&ExwSg<@ridW$;=FP)wdT+wNUN9*#36C(XAex zH6fWHb(>%8Q9t-@C8O@u#Ds^^C*%_@d<k!iJn-SoPxoW53_c{}&seV6$KH^l$}7C= zOoLtIv)wOO{M<jsqmtcH->~;WruyAosg^VMq&S_db*yS>h*6x=Z+qo~uIzV1*X?Gd ztN8qkx#MsBE0N#5Z9|trLTkvr(_RZCr%TLI<yWnl{d`G)YfR)?<((_J^{%eH+P5xH zX4a+r<SWf@+pf<l^Oq2M(;d0(Tx}V*eTjCw_tHE~zsDah-8HIgj>w3dy?XI1NnKgF zM}|FaVUZ5m8P9TzZDeM0O+0cV>r3W}IPGn0Nm?_DZggxr-@s?bp%dKZzV@!BKzzJ< z*y9fUfThRgM-_ye3RC{PdX@WmYff*TAC^;ZS^O&8@v!?<%i_XQn`YU2<X25T>$|DA zp(rw9+AfW?{pri|3XP{arhVNk8aahAa7*6x&+lF+t$j7~PUiCTr1;mnlJ@<LyjlEp zW$eDSW#>5;><;Q&_5XY6)7BGbHKGeEN@SJHKIlCA9{aP5zwM6H(S3FONde9K?Z3ok zh)uQA(=ONj)Klh~vFZP_%G(T?R`&(A-C|OFUa7YEUfGq|LfV(UuiJE>XnTZ@p_W<J zy8e|rr`qMn?0O<RMXpRdGI;GGR`*@H%0Y+pg}z5@4;Qz+b8cbH$<W`H=aNF~Ou~Kg zYj)-=&D<>Id*b_|-^Eia#80WMjjd1J>-5g4)m<R{%a%rOwaw21S6n=Kdg`6{otHNM zP1+~&>2uSR)X?421^#=u)FcN6U6E%<Pd~G|gMVo>JD=9C)5emA<xefV+b3mr+MZh> zZYtL#zgv>0H;Z<~UEOupuPXO+@mE3FxUJhJz3&m5_WX9+-dB5e-Jcn&um8nqkMtqc zxobC=eDG`i^*Z%k+wly?^K({<?>qA3<YbYy8S4(DtX7}d(UICyx-aOzh}@P$?yWmC zj>It4u|<Wjxj$$S-T2$8elO2Q$%Tya8)D3t7w|TPc=VbbJHbEkwcf?-tehE_w%Ynu z>2Za~>{pnvuc+T~ui#8Z-$@~rf2}0nJ-l|j+dqGAHS5wFh5|y-FB1=0R6M-ez5DI! zr?dAdZwq?ASv;(a)79<IvOQJzp2x3$<9R*%Bm;vG@;v!OHdm$k2#@kV@(c{m6tT^d zn}O%auZM<9H%w!FARxnabgs~yy*sQI2HfcizO&R~sepoG_imALjd$;Y?%ch5H}T!v z=RY|=+rIhC{VnSEiN@5QKYji*N*8=@_#YG$v}x0(PhY>Xs<iDnU}(dcY3nUzb9$y- z^VxZ#XXK~o#_fx;&$7NFxywfK&yKAhE4O~z|4*>wrTD)$e}7*!w^CA4GBw@0VZ(-9 zyLPQzoBK8YtW)e^Nt16+%0C4rJ<CpcRvUD$IOt$@)Jea*k7<QRODq3oC*F;|?U0`S z{J?<&H*Va39OL@v(W6tRPTjh7EAst=%V!>ae)H+@p;xyb{d)H7*|lre-o1Nw@7}$K z4<CN~`0?b)lQ(bPy#4In=XVcpKRkK#=+UQ7pI*Is_3YWRZ{NPXd-v|&zkhEZ{rdRv z<I9&XfByXW_iyV5|Nrj)&;3;S(Eqq;|BuyMEB1Zj^Kew0y#CB9E|-I;m*m%+dDoa2 zsJ-NL_|q?~!iBfj@Ps|(b7@?1=){4mmCl7cuT+0IU;U}<DRaO5@<CJ9#hHKBxobO{ zwmx=nnIhB1TR4Ghk436_Lnc$CD)-I(2PAeR%Qmc;b|`-Ng<y;S*LSG*{OJz6nWMPO zW~S#FX%Ab69+vFVLwn_!js&juy>aFfze8$ChkAI<nmcbe52l*^xgN3AR$%SSnG0`( z?6sbBCU^I@^()irZM?PqOb#l3`><qU)yjt%#dkl}ES(awEXe!s%c8}vKi<mlKK#>a z#T;=)1-@M@U)zg=yNVd}zCRRtc=TpnQ;fM-R?hX~x1!#iH?KPMU31FqX!-Tc!Ud69 z*Jka0=l9HW^1p5Se%Zvv_8+d3+`4!FoxNrge$JJ>l>b99>D7uqE^bfa`CWEP-Dp@) zr)$J@$Vm4VPtC$3#!U&DCz_is#&m69(mz@1v+&G)sg(+A#Q3NDyTYdtE!YyRxKps? zu3~oJBaa^Ii<elgSsQ*TIcmMJYtNC+bwUhlLh~J-x>;SCvut|hBLO#k76t>c<4&)R zo|xoy#p#o||E#Nf)QioQDV<@jnY;Pk`2!Ob*%&J_Cw&WA9@l>6vPfyi_am%-*D@O< zdZ_$c+1Ms0d6UJYrr}IV_oTy3CEpj9yY+8Z`*%ml&)F`(FriO>_l!exA8vT^Y-_=4 zj~!75O?a25+%Q>D<vVZT65dY*5jS6-75Kfmf87<mSqpD{x*@vp?}y2+TUe7n_HQg> zy>=_d+4lFQtM96>wJCZ%`*f>#qTuXZu3L{TZZn><q4(J2wCvl<Hosfk`)a!Bidgsk zx6b|)uc)wAuRijXacf@4xyd*Ae7+c6UH808_OhIeWPD#l(dDO~cKI`J%PHOMu&~Q< z(KoergIP=JuY7HZei5U*IMMFu{}0CD4!)E5?A{pcWBYPPNG<ZxYlg1A)MfQsEOi$s zGHEd%Hw;bvG$$$O^rzdFwf&cGS0+omzS|_J$vbn3!u~teR*%kS9Se1F4RCI?P*mWa z@%wS_kz+?Yqi#Ru*JpUJQNrcLhYgZW@gFyc9{g^)F5cykez8T|?T3ZtH#a>h)Q^2J zWq-0jaI4sZR&H*GX2&*xqRBFSijO|5O%7vt)Ec<@PwJLE4ObVve^9bS%8o7ZWrX6( z(_Htie|VOnbFKVMinmZp_{@Fr`*rhKRl@SJq!rgH39q{C&v&^-*43gs&(zPQym;wW z0nXM<UKKGrjh5SPDc-rDyz}^nTi?46ft-07!qven)z?ia(k1ocS^x_-Vi`w`o^ z`t>dwu9{D-f}Oi29=rN;vHoi9!kPMU)@S&<CGJgC@IAblMcYIxBb3WpG)v4U)k#ux zhT@K$XA2#?{_P9R)c)mkQ(oo1^y+vqrz@^alT%uGpUnEw^8M^VZMh7VNQ<_=>lRx5 zn4*1nQ|dySbDi2Z`wsM-R$0!&aq`H|45<|i=ek+kP6!(n^M;%X|I@bn<{_PbJ*JCK zve-ZS^Y=`FfTPR}NzVo*3$Nw6Tdv!N6zi$7e&KUEu+qn?^i2Fq4pYf}Qxx2<ze>G7 zGwiar)q=z74<7EiRbk?>)tGb2)^&@P=S-fsIfixn3hz0KE2idg^&ji^e3zCT$(<>$ z$q~l+euK)2{u5h@Rk!|lw~O)nZ{B{r;MkhY71Dc-Y@f6KvYB0T1^a<yy_MHrvUjyM zeRfWMclNrZxM1s{-wz7kFU>x4roFy((Rb&^b^h1u86?_WAKkJ1#OSJUpy%DT%hGSf z4`sCLtT~~SS=D-SL%zAC%VO6}H7XmOFEO~7tpDKZ@jWGHRm{9ad@RP5T?*#A%;L=t zNUd`)T59ognFHI}(+Vy^P3`RA8hwF_n1W}VRNSenbRlJdL(8eBoN7n-ZyeRl6)^d< z)zX3?xbKQ|Te`N7I`hiDq(wIQyX($Ri!d#mxPa}B*MzXx6F&^j7j@Zmn6y2NnCX6Q zQSbDO%yzXY8y93sDxWXAF0L_!U2TR-&5GC`mrYk|vTVF8{W0Mc)3tCbpPO!hwV65* zQmZbyIBey*JAba%-qpH6TH7nzS^Xcb`X~0KEH>?%)e=|9vh^7<q227Jx@&FknwBJ4 zaO}C&v+8VAq<7|xmnUqyOv<f8uXEOMPrLf#j)D1V*^^NZuNWj9Xxe<y>HVh6l<1J1 z(>)?K_pDyjoU___meuR%Cx_&2t`89U@?zQ1We3Yx4dZR9cfEJ0N^5={_v~Nc3JHO_ z*$gG7_chj7XD$x0FE6{dSjHkLW99{wBDMd=%}(6DvD0_ntIAos8g19#wF(O73%s=c zSXU{}uAP6M<geV}yXnt`^XIMWmKh$Oou3%4y&!de*Od!KSIt+i;pi&1oF$#6^Z!%u z!MP&eJNo#x9k*Ix95(mHhy3YcJ3Nw2mQ8tcOf>J{CL0EpiZl;PVX=$?&p!e_ec9f< zuct3uU6{<di1~-mIkj$qYdlJI|32zm`Ml|fqxFp732uGI%#-;fWKZ2=K9xDUys*qy zZAx9-#>S_oFBWSq+Z{iB($om%Em?{sLN;87_oZHNuY0(utl;MT3yaHhHpln=t=9_D zv-+}ramK9F{L@EP+}I-f-S&1z{3}jV!#9)uaMrZ=IIq&&`8L?3=9l6A-B+LKdF1f< zzHl^@-eeWAbzkN^XWn~lubVy|yAvIy#P_<`_1Veu?1IWhAH1b)_>D6D6nwq5*W{A5 z%MLv*&afB#uJT?7?8;sWq*r@SzkiN>KKoYD8rFv1-b%}z)BXMSZFE0wQCxPhVDf`U zKPp2%)n&`C{%~EJ|9#?tsCn6&IT>q%4ta@AdYQlPOL6SMa~7uNm)Q>HY_#CtSl--i z`0VnM&r|;P+eltNd3&8?5F3MU%KL7vm9t%onpHmh`WnNO_qhGZm6$EH1?6{ET+WpH z*%lmf`qaPczn?w5ZhZdZw5`84{{Hs-dhvg^s$grCr|o%{ws#9Wy{3EUV|(4g?WaHV zueJVis(+z|f=GgD3>*9JyzZ5?dl&7Gn$&AH;{e-U#p}n@!>j*fu6z1+o6)MbM}mG< zX8wG;PREn+>|a|359UQV6DR+FRAXm-hQVQDvWUAWo9pFmY=;%~7}k03yz+91qyOc{ z8RoC%e)y`R@cv${c692;A9J71tWij1ugOUlm^Jf^c7)8Qm{o7S8+I%T{$u1I!^N{B z?*I99YM<CY{Z@YQW506cuf;0A7n}Y%fB%LC(~}PmnCy78rq8~8RPkeCW=5a?rQ^k) zjX$zIP^=36Sj_tNSF?>G&q;x0ZX8~ll6SV2So1DF)~oz<sce(=xw`-T@f}9_lPu&M z`Mex-*U0{5Hov^1D$h*CFELy$$~ep^OL&FabLV~Mw)ULV3sK*3uHu$%$CL(b2`Qi6 zY?s>fT{#D*N*-rjm>f9adZ;x=(nYRmkp`+QQu5ia-W5w~wt57})a-lFR{Q4v9!}08 zJA<^jjk>;pf#+sCnf2*{gLBzc-X;6lCkM^Uh@HJ-X8Sh3jh>I&Hay<6*|W7~Q^Ul_ z2EA9!c9+_10vvy?OQ;iLld)aMGwJrhiQA6}_AY$dJmJ`r56_N$xYqjNTl<G|Zf9$9 zZ_Ui~?vBdiui3e-Tq*9f)SCN$Idt#eE%m+odc{-5M-vZU`qZ^&U6+DGDevv3&?ghr zf9}}x-9x$luF3kO<x}-U@8%fYj4Vp=ja{N*yYoStmzm!cu`Z>WtL53>?_a9aDq%0% zTTsWaK4Z$17v(9NeLg#^l+3Kt_B6?sSx}wel`LTFXpp#Z%cRf?{l^~UbGOO4EPHNr z@S29(<ShnK87pM!d1iXv=+!izVRdHB36>VAM;{nWWlZ$yID{|s>eh1XTy%Avzu7Yh zu2k>Nc+Uw3K5)(P+wy$Vq!TZTwHhlQEPwGivR=)V>zU7#JE!{v8)ir}^d1%8FQI&h zgH!0MbMpK%t{)rjn~K|>ko;;PeaBf+Uf0=nveHlIKH*6jSA?Fw`tc=5h;^Or-_)6x zn@UeP@rdp@G%;o&Gyk7+-6uaf3w;mvoU&;V??y-2n1?;x0gqgCGlIMFWn0&7E$835 zuGK-~w`uoIpA3z{B)7?JEg~;goX_aGmKv?T)#tiLyaKD0?3wBrFYKq>S)XY!iGS`% z|0Lx{1>Sx>VjkjIDa+noEq{Oc(FPCwNRK6xdPV*H(hJPDeDRu}c;&d(gacDKPE88& zh&W?YU4Lee!oOnG56|7cpKo$AF_<k^+s=6Y@R>E?5nUd;ueV&wmd@BCTDkp1vwg?W z)rZuzR|mK1FIQeXU0}NCH`#f8{0Fu;N;@3Zdy&8K8K>N9A-;L1mIVmZM0{{cTBN%5 zWLov9hYBa3a!t0ne#-aBIn`GGc+CZZB0ejcHh$50a^a)9{IR6&DHa_Ue%uL-Tyfv^ zuW53?X+hpOjKXC`GqNqrnfIP%-&vFAe67GFfBTM|F^{<e3hy^glMPyT?`{}l&=<dI zEft0AY-z{aX{Tq(8ckbc&$zB9&GLh(Y3u4gPyAH=_%*irA8kyPtNi};rHr}b<;@o& z*C#M8l5h#NGpp~Oe{({T>;Fghd=tF+4GgcI2@lfz8r`{GMRxs;N%^IPE6s22m$=7a zQ>Dr(p4~lZadXNKJL^|(g7~x-bym4=*q)`$>DRB|H)Ff?h1EV+v=&?L<`K&{ye_Fa zPFXFKbBdW;!ZU{qU!DDX*!1jgmI;RBaE869S^Z*B^IWA!kHx9oXAbPj3F+oIvhM0p zh1uJLjy;{eE~)?aHjh=QZ(RK1->*E*VtK!_?0=onN)gx9D!bQdY*}%jX5A5+ZPGC! zmPf=(nZl1&?mj*9lmyGoOp)+buCS}NucjNmsL=frad$JnoX|oRXUm`)+AJmCS+yqG zs7Oq|8<@a1zu&ZCde)+~nJq0$(H&XUs@c`L+5a7~q`9(Ln~JteOnoX)^u9^<aDSHQ zd{5WQuL52vZ*kW;to~YuW8dGl)zc@e&2L=2-64GAKcS4kpyvfTxrM>+H?27m9^Rjj zneQ&&yzuUYi{8_dp8a!f7n9?5sJzc$(#X83f?4&&nhBd~I2iaUKa}wDe7yf~QcRJ= zzLV@Tp4R`>vp+gt)Z^8rEw7b+`}!?h*QBuJ*AcfJ3ci=poUZ*%E)d+f%xO|}irJZ^ zC(lNj&$oQqcIN*L$vWYTHs^K!j$AqO#%RvlMOl)H_g*~t9qE6(%~oO0q6Gm)j>`3u zB46Gwe02Q6wKGfpxCZZa;@`%bw&v%=WwDB<m7|L%1aKSdaXhog%_7ose)jQ~H7c9G z8eMq4<6G*^$8UEsJ6z)wdFOKBz00S!E}rjQvfuvMaH;d>rB2stt;%;=m)}oyd~n-! z%01Uhw_LYf`ns}5Rr92F?){!yp_}y=q^QW`9o?LIYO3G2fA0EAv*q?^r?be<HqdoF zvOM5++1sj{`yKDDZ{Kru>wW1<MQYQ0%aV&(qN+v1tM>2vvTDNDm7L!*UwqH}`R(PB z@3wW>Z!gEctiGzucJbGx4=eV*{l3)cii$qRk<f?Fw?1t9vEj`Z#v709E6X1~pV(-8 zg86exfz7eMMOjBmq_buSI~?<~*vHM3Rk&wb<)PV!9FLuI{5r$&Q^o^zQHDI##`y-m z#m)SZ>@rFmJJ_X*wtTkU_~o>9;O{fef6Vhdf^-{PKQC`?xmCj~6Ofe9_aQyj>R(N> z|LVH>neUgo<osaTB$&X!bc*#}%QyeZ<eEJhe`Z$OTsYeC<ch~@_6ozOHF|byT*Y)g zuuTwT;9n;*^`?aAjDX3E2aNp~CQ7*fPGZ+pZJ4mm(DwQYvC|i|?|*Fn@^SgKkJG1q z+&=wd2E$L5fE1>K2~01avv|3QrFnclzooO(Z}x_@@0wr9h^Q4kOZ@Qpq08MA7uKW@ z*_F@MXa9HMcI?`gCRCL4Wdp~Xv~{w!9lOt8Nj-gKV$09MWNqnVU$oRy@-2T$wDJks z&o(oi6rbXDE5YsC^PWA8i|-XKFm!zIa1nQv>^7}pZ_lXIkB`n|bWdD&X-%eCdS2ae z>)jmh`eP-oCu#jp&RAD7$F%ZCe5KjN_jhiT7k1qaSSFc#S+&bxwFUpu9bRqQ+%I3L z(oQy3)x7;=hrH5f>+^97*MAnYch+CP{bk+Hz9ZfJQFrcK`8?-A>ym92_5UJ7nP=rP zuC4Fa?BzP?^YGy34g=-8Dz-n*WYoP_Kc(gBg(WddzpR=v<>8dns9j4%?z*^%H($JP z#OBdcuipzyuN)~XSQc0mdQGb};nS%D0`8C2)iu^`%Do));LxR%jGVoW1q)5LF0PsI zI=SHSORwVSLt5EYS6>&k`8`{A>C=bvQ!`^FK3*tV-!pZ?A+EFH%#RmuNVxLEE{)yv zRqw7(S34et?phd<?LRNI>h)CFiCN539xXepTD*GaUyo+t?N2U$3ia7my1P~6P1h98 z->dW(<AhbE{4?FFE>`XOwq9N-J3@c^0j1mXdAC>o-S*RXJL~Q3t=G4?x^6%I@QX<L z-cw%7voe^E+$vPcSv$4PW0AJwy@PLW^n8m*y)L%Y-SLBufmgrm@vL3ubsNrI@0hN% z?r^37?@7J1>nd4g8<*WT33p>rGGm&&vAa2b{oGr5d|&&nN_=w`4DaKQ^xNYlyl+n7 zR_%3X>t6dL*PgaxUHU*!(0>0S2hGzD0|FgXjx3sf$-3{m!3L+vDIXYY%{@AT3b>wX zw7km@oVRho-xWD;R~*X!efVKdcjV3R4Kg>2ZioC0TkLMb`qk!i;l34hj(Zr-3tq4J zrI9TWXzl+|M%4HAikBz1AKz*3@-{f<{?U2HTW5Ej&<=}{Hs5Y&v{mxj@7dRS*P3@M zls++YwW_`G`5-^;J4?5_`J11*e*NU@u#)Tif(w~+zim`pnErde`Sa8L$uBo6O`9b1 zacu_I7wPWF^KXU!4G8~kaDBIH)AcFa{{49qRAu87eT?nj-alXJey*$j{QZk}abafj ztkTAN*%c3N?ONYZ_WIFIQ|GLZ52w73U5Z}va*KzQOM>yVJ;!X;WEs2e_Eve&qnmtJ zZrXxmAD1=J3pOWu?w&AHa8>L+o)<d;)8fytwf}6qUSzwPp?~@O-Cv*kPZv1qlhd{O zm)vzd*X<SSvR-y3e)BDlez(83UXnXcKOp7Yayc2{-$z~girii2@w7^I>J|M8wt3On zI)96<Bl~r~Ym-jil;!MQCt(+-`mf4H;6;G;y9m$KiB-K%^@JjMY~42O?JJJCtaN=t z@T|qNDtAoaH0SCr7k)VNr^uvC`}1dX{Vv$w|Nq<a)BDaF>svEdwTDb(s=p@f?Z5c@ zx^I<Q>mp7bsAzjVxi4Nn`|@Ye{Zmq{g7p0l{}S`J{~y)W<t3-|yri=JY;26(`Wp*! z()S;?cb46MY{8D72|GHzY5u%XV3{^2ZKADj><gI-tqccR87>x{D4El<o7p~rBTJ`X zhL_VugB4M>>gKA>C+&ZIRf|vi?iN&(r6>~q^wg0BwJZPck(jM5e=Oy0tecIe?Hsj) z`I3!MbC=KYOc0S)JaG1dew?PW$qbjz9*bQz-`SuaI=NEM^VHjytfC28ll^_;4G+I? zSuUJ@iZ@ZW*F1imdwA|KixTUQyzO$T6Fw?xMEyEl-Q8k&rgqbp>&oZ)+qUd0S}gkM z<LRhX@3tPD5!ZG?U**$s<-aHY*l%34#@O7fxUQ<kX#M?nZ>GI^bN#n*N#wP#TSgvv zC*y72h*dXhJ~8?#AN$SC_(;Nho_TdLXQxT?rbyZBp1*e6U#DdTH6QoflKrdv{rHEg zzu$eS+sf>g_~qH}lImS{ACAAc`~L0Mud*|pW%y<;3zGS_*rc6BX<_7279&@Ib``DK zxTPw)w(a6vz;#kn+U3-y!b{D1?!l_HTr3^RP8JN(2NrbfFtCd`y=T?GNE5bXwGsv{ zhIw;RGN-Kds$p-QD`KP^x3B9_@lE%cht8||XH5^c^?7th`fy9*h5$WR^WPz?&rFW* z{&(qCw^)0Z_>YCbjrq17v78KrT45^tTy6)QS^CRwsmw9%hkvvhWmYmVe_gq<Pq1W0 zuH%w|!&f5g7Szn1Hu3j~E^D2uZo#Y9>9n0#yim(Mdilb2I)@jpT$vlUd}Xf4nZ--9 zXU2bDxAggq<BM}2Y>YNv&oAGzGMOd%>Xn=Q3yxme+p~P_^erAA6klw~@?L%2HF58u zug@idSiVp5dVgj54V%eTTXsyD?H?dmu_Sv#5(A^*iYN00tr~;mU-vM^$#FdTH{;Hu z$=O9O9F+d^x2385W03vn{5M=yulMVu`ycsD71s66UQ^I4P?vUN$t4%T^;$DmOER3? zA?TB1{~}*PIzjBWD#yVY*+<=a-j!5)9iMWU<-zUu{T;`PA8N6G-T1;S#knqE>M1Ta zrpC`xpZh%FxGTDo%`s<t&8Ny)8YdTA(qdOKt~>RxxAQ>ZZVQ2heRoSNukOyjd_By# zNq~EzpziPD8N8t<ce|?Fp7j3tfqkRYz9XIT$J-noD&<?%o@k1SR|lOI6Tek%?CEk~ zk{WZuoMMA>OpnFyo!GI6@q1DI)q9<*z0KavD(7$2tLKV0Tgv`<<@U!FY)kD`TVJP| z*4>#NBhWTu>ve};_HN7V+NCOg9Qb4(>~FHmd|#yEQ@7Jo)HQ`?u1JqFeQO&ow^b-e z!oEj8m!a&D%JqWaFG*%^tLm@n^e>unn0Lau*6PrOb8MVm?m8K><e^`W#+#rUk{2ws zET(aU`23x*M>g{q>rBr35gadEo-bn)IP}b|c9HHwKjsED_j=u%e;zM6s_1HD&iM4T z>A@0jwc2=>OQJtNY@Fr1Z%#%<(!A-F$(Iku|Knfll(@pjMygM@^uF~rt>*XBKHa#u z)ucJ4K*C6(BXc7I|4;GWtcmLyjK3<+l8q9OT$?rP<5u@)GgME#wfSwGcq`Pta;AkA ztGcPDf;<1i8!TM=(;2q$dg;U$^ISQZV=~>1Va)>3({Dr#ubniUvaUo#Sn}a-S&`2S zDQj*xY)V;pbf$~soamiD_HJ0Y{^D8ZiD~wd*LTeHW(>Dk6V)#}b1}y<v6X=eMcYIA z?3R4&@bxtRzOK*EbNP`P=b!3QhnL<^oa_Abj-|(E-r3@J)6VbwT^o38$s&clb8cKJ z@-n~N`%-74<AF<6t2L)?i&8V(?&Z4T>BrZX_P;!l&N7F$Ax&BLACGQ;+M18ACT^J$ zZ+J&NA>@CW$IZD7x4A#M@So7T@l3g5&bRsJ)3s~eB08=eJjzq;<v(%B#gJSz^C;#e z;<=tI_M&H6x;Lt_ufKdV`Ap=3j72MCwzke)lJ@jWPvX*J{#ONdED>CA@8}E9$Flk= zMc(17>VAk$&9K_NcNfRxSK75I|8(}d+DLmWi}*X&O+~JE@thM3OKvBAUO$WF|M?uQ zwO{J8TtA2Z?BdrxuA1Kz8T*!XD&y+MYNvi$?fttj^yj^@`{5tOLPNK%GF|nyYe!9q zqsq7PS2K6(EDXQ5OZdX>n*5o<+Di+z^)C2zDX6$wde+nL`P_e5e10xZE!(D?q`hp< zCf(i3>yIz{Y8I5(yYLC$IioyngQ&O5bb{IU%Y1oRTR!{Q?`2$XgB0)j3iVGr^N{P> zw&z!^dskkom2`i9Q|$2WD@*p@-tzq3-S{cy|L>ZA=$-Xz*TXRT!j)<K=l)%_%3N7F zd)F(8qbp=O*xZBtr_JmsUpzmN^}Lbvt^)brX)NA3o87AGR%Yk@_I8Up)cbSwc6A4V z{9k&R%%_$u{ueU0^VyUm!P?fVlH|)IFCJ0ne3;I=?d2<*1nZ3M!_!g??{wvT?RkDw zooh0?YuMZ9y&ZL0>Zc~vdcXX~^T3tgxZHfNQN;np59z*LW`+}e-!1E0@VUBN`@B<X z%!^qMZ*_;~o+y=n=#}~F_`yD%yjPlmlS8g&c}{<7nwFelar^e%^X=ZoX|-W%W6YDd z-u`RX*t~61bHEAKXSQ>gc4i!SH=)8VR_M8A**c|pCogDP>RImkuI(8Ayl+NS+1dEu z%0&`IKaO>DpUt*kxMrp8jVEiC`h1`IYMsK)8>fWabi*PR^vGQKI5TFs-*$oWMYA;` z>;IdIEO>Elszh_)v$r<yc;mn3zT&u;<NET2yPcl=rrRwYrwd=Mc_rg2y4TU_(Y^;s z0UwJF>hw((O|&|$bI{qgc*)X8-eYb1yRA!h&$;)kCQ~`7b3NmK;TMPZ1|;3tTBqGG z=ezjAMIZdC_<wFV)Hs1{;dQ_F;^(!FKlaX8cy*Ohc<^%m#Jxd^H+4SOem#-)I`mcL z{)N}>9JYTm^R%aqlkCPX#r3?lw{COtF$X>^JihXc>S3<_tI5jl#~b$79cwpRtv;>D z&U^FQcVBr|FYhy$KQ%V6|Jl#0#{G=*x85%6|MvUp=lB!*q&t%4-EGMhH?X{~`-ks* z-M+2f|1@U2=UY4D`i5_}LN7JEm-BDGKI8bUukugkvl}Jd3--)5Z!NO#H?iLHT<Tih z|3h{2W_175IlKO@=@i~SHpQ<$MDC8?{odi*ZVs`}ca>u5B_@2{?e*fr-Q;J^3ztPs z-B3PXb46&HW}!gr(=%K@g0%SScbSUUIz+#pepanH{#lgDH0JYa&P@I1i|+b1|L8uu zu_8_IrlWm!L!5t>>&0niPnc!iGd@<|VRKOY(u~V;MK2a-+zgtvpZ~mW9`hZqU(*=) zo9cen$;_+epLesI!!Eo%DRlRC&rQ|qb_DSKUp~*TX0u+Cd~A!OMXbxm*dvv(DqCZh z?2Sz+OZ>;saN$2g0Q}JE$!xAl|0eA2y{y8(;H`#jv4A;vvB0#{Xb~RqymSePAeE&{ zr8!qB&Rv-N!fjV{kbuBTwwLcFyn8n-uZ{1ez|vxebD!tM7uwDFn)qJ6;C^*%bXXjl zQpT(PPuvykKjgi<yv)qZ_U+r(Fy(`~!s*2wW<iGpG*f$~m^q%Bp_F=d!Y45gR_`T? zuI}v;70T-k*;E;{t@c9UF4Lk~lal=#KUbQ3beUDVbNe^Ps2>WtwexfTuD{c)|7X#= zJxX$S4^NCwns9F;|NTevY9B9Jyx7>t$ji&?)$7;0ckMFElA1O<>R+4MoMX%8E_o8; zzU=OiG+Q<`+qPwP$DhcgiQio+7Q0;3R!u}9xNG7{`+3HvzjK}5c6!zMS5f`9tMxu> zuj|g9z-k&Ede(gD*AtI^J)gAf_^D~#%g)ViJ6F$pce!oz|6Og>)z$6o?dfT0&z?UI z4+}FhH|PJwR^IOZpRaFDpTF(5-ha~b_RX5LTXyzN=QVTI=l`1>SrrrEsC4b!bn|~} zb8_?Z-@kbyBO@atFF$|Yynlaxe@`p_fBzd}(f=R!Kfe6=^XJi{N3VhxE8M+%cmL<r z?d|L;LO(x!V*2s_k3Iie=2!pk%KVr9znfFz821B#=Ad<E>-9OBC!9@KVpgxf(;uhk zy>4BCM%R?<d9_Q{75uR7O;K4|Q+qK(soQPm!Hn9E6<XVWMog<Y+<(%i<Mzp48O|q7 zxTM(BwME<(b2aUo%(Us@-k`J2-|OecRU}9^EUn|nth!_F>G1GRr{JF3r>99Z#J}|F zaun%UP`sL@eC7L-*&!CJiJmLJxA}kn(Y)dQq3F51x0cvgx4KMTZPuDI^TU=$wn@Pk zFShJFea%^=VZrvyhc@3k7RoAy$LlxF{MQ*5rd9v`!(5YDm5PS%-rv#L6cHBj%I|XN zE47EWcPn?kITk!OH@w}rwQJ|>mQwTm)1}{RU$)EY-MKnmm%Rb2OUmtHWY306_?MR} zzCTxfJT-LJuK5$chwtCMth(x-w%HF2$Je3)3{x3`Ha%c$kdfH?WJd%K1A~{Kf_#@} zUa}C&vDh2SmhkDAa;l0a+~i!y*ZROUz~|$Pwh0Lv-?)9&z4gS6OJ>TuV_o;;-qy7@ zMM{QjxM9F`XalFo_eTd)j*D?-q{M#{dU_@DJ9A0ODG8ykbCo25Oy}Iv2@3t|rW?G* z_{$8T+&?XRMkT^>Yc9Ph$mQR>m+ur`am~z>>f(*Na=L?KS#tO{&0&`R_G!zWuWK$l zuR0xZ$w}C4E!SM7ucx|lu7*cWE_vf|`qQQST>n#E^;70g3Ga$GW@es~aeU38t26!j zHa~iP;*@tZ)9HTh)d$`z-`br2#{ae33@yLc@oFq}^Ucm^w7>N_dtB&bLXz}9v$eDS z{<&?~_LcYb{j_NjT$h(L@7%cR+u<^v{}XbTulVD#tm?`9b-$atHosG!`O&^h|JReO zy&+qk{-}L%cy;>U^V^oXGIzSEtNq;3`9#mzYkssO+e;<mx9!q<YG<;^-q+f|qyF;u zroMG&Z^rU%V|%p6Uon5-6WIn1DS<EhcdmFc?eK*IYjg#bW}cbrDI%6Md4j?m3$4O* ztz!SsEWwRl7nAD#*-py+*1lB3>8F2f>4zDAzn*G8zNW?Q&ZhEnMt&_xESL3G9@_d^ ze%rodzSSaObH5qL^zGGOv`*sT%8Le7+vetItzYA9rvLNNRG;$WWs~oVoxgX~(&f5O zX4EZ%FvTr7o(tb>TJdl0<<#~K&%eAYe`}!rX-nZr&Y#P_8njz7wCmUyOi{nIdVbK! z>ujtB6SzMdFKK4832X{cOq{+-LTjI|Kw)9Yrk$DM@j=@kSlxe6`o`wT;Xu!``;T9q zwz=Np&^q_+ci;W8cTx|TZxN9#cl>Pxzr5B70luiOo=GxnvW+j__CJu@@S&37UT~Ub zaHh1>bNS+}XZA3CWv#2*D6u`dI!0i^`uUGSBR_EeYx2ssFW<NQ(oXf)pR(6nahh>b zMVBW-nB%OM>rR8vFRZQmRVOP=Vo9C7hiUh-1iq;5%W>yg8gIVPd%Wk<jKEI;hOvPi z>=*tvez?xi9q-2Qe{ojb-5>f@udTD6AGELAv&q=U+h@(gDY9-R53_C5mz}lVFRyWC z{e^l9y(1Sb7PU{kF4Z2F{!XU%K#GO>RS#*;i`ugy9~>9Y)7-~X(8Q7T^x4KE3GL=n z)@a*uHBR<ix%_p>o+W2r9VwJDUj0nxvQh1?)zdZC3Ll*_Z}DR{_Tp2OQ$O9gws`BZ zlE<0v6MbyN&68)X;Z<7_zh+sm!NYCGmoIZykIebwe(<;6dfmHoR{w5Z{WPKPYS#Q| zi$htbo|`&DH-h1maoEG=ZIvvZEq2_Ce*QV{-eS<owre_P8tWAIKg-%r+wiE0aooCb zMsB`Qk08I6M~yDiiDoa&$xJTtEWZsBB?NbKFEcQ!HN77l<Gkz1%mvI1RwpL$AIMT> z{Gn>kVGy_^apLTWd7ksRJCutoOEf}Vl|xuh?!MgoKcMx^4I#Ei_ol2oHYIzShQg_@ z`KL<NPj8JrCUEthxu|}#@XrA5TEE@THRh*YpVNMC<I!i|W@|m4!PV^Cy7b%C*;$#M zGGC_H?8#kpP)bN#$LHgLfK99hxu@$Vp8KKycaGGW!ljIv8)gcZuH@RVeBbM<Yv!oO zZr-`}@3+!JQ{HaBcjxxOSwWAqis$y}6bY-z?J)MxI<4c7;KJ2&tvl(x<-Tn{D{f!< zz3P^w4%d4o-SfBYYJ%;P?l^RR4SulxZqucJ*(<Lf4LI9*<kf{why6ZnH(hAm5@r5W zwDS3rEE9Gw>nT@7e=gVfn)}?)bl<g=S4CsR#o8ynd|bG_XzCWjZ}X<^R^N44Ids}( zzP=Ajr=L2yPx#ZdeVf{H?;oi>TkE^Nu9sKi<rC?;#yyrhM7KY3TQTE+-yWgH^ZXOJ zr<JeOJ^xie+^4Pk`S*nvru+U`vs~ky;r|o4-p;W*`Rny3yk7YCQNrGd(@*wxzcv4U zSbxVZv4&$`oH>8&6TN$Q#=DSOuhU2DmiNoe-9IVD$6ZrbTw0FdpVwJwju*$K%xsI& z4P#%^b%-zL@vb?ApINF-W%ys&Y28zJm-WJwJ{65y_VGeyA&a<9U0b8^RYE<EZ(@C7 zf7?~{YL~2<;yoK*TIlg#eQgmlr6Nn`?my$;RcGQEbhZV4ni*I+VauH<+7H83%F7&O zpKynDy%e4%Ft2~rw~Dgb^i@kITJ)$tS;d$WZtCvzEU9@;W7emqi=Iy9JNTIU#pJNV ze)sitC*S?KeM;+sT`Om<UdcY|w#?z=vd-Y-;ElR-+r857WuIW!W+}!$m&Ne3?tHOr zJR5i1nbf?_Ic!~@ZhI5MhbhSlPt_T=Mr0rNxOe_;xK?P+(eHNplf^gMvGwTxv0^UY z^id~$eNfhx^{3}ujNZ5Z#5J~M&G)8AMaiE(Ea&#~PtJ>*iog9o9ZGw_6FJ%O)bH+G zw#xrg^4<3r%ZY9*S6y^Ha&lS3W7dHE(?jcc<NxqYa(#HTbm<(c?heCMr{8_}lzvz> z+H?MdzrP|jeOhGTd~cSPRzt|tU2D$>zRun$Y$e(q@#)2W4gHr-+K$b)yz}c#Lj7l{ zS^tGn70rbeSJj{U+tU5@>lt^`6(^gIEw&c#6OmO6tC(~8Px;yR=R%@p?ll$Ov~Nb* z2h$mbq5n>Y+;y9@<iZIz^XoeAjdgclHg5L1x&GE9miCtZp0!RP$LF`my<1YY@7T|} z>o&Kzs#}&lxEHo}p2^w&?QeS0cFEr>`ceJ#@y>`xxys>NG^64kl|8lCXJeFdpe{S_ zL%;Kf+xx$?J>T|xVa&pt`QknQR1E$fSDinh;%q>0{TIQRqHX#&7cdy7iDu<KzwO35 zVU~tf>;cAC+rLd}FgMF``R;V7*resF3A^JL6J^GK&HvVyOl|u7*YG{_&yr@AJxvPw z?t0;+j*Ct^KKkw$a4CV)W5blZ4L#u-Qlcg}WgG07DzH?n=aTlpi%V?%4}49YcX?{d zw)XJee<yl1?sO$--ry0+S}2|MR5WX{Sk`r^R~uwrmB?4Q`SU#IdmO_0;K;+Bt*@V{ zJzhP#ZposhK1$czXR^+2Ivlq%c<(9Z_OFdn%qOBV8Z#<2db5t~bUskw(IRKSw2rH6 zCxZg(2ctbFJVO}ecV3kBY2Y%cFj>W*D`le_%CK_PJTcx~vpIL9Mjw}vdOD4Lg-zF+ z{S1qbGCFxC{)<`>RJ-KppBMH|8}#nHm}p-0c*%=%&o4?XyZAoqV^CC}gM)yS$kpE2 z9ZhWh4l$w*-p%f-xf*7@_<w<`{B`fm_672rUM!x=%x17<VePKyT@B{ORqGpE(rj8H z)EcVRzF$#Q_&~o<;$>k(ZlS(~cHs{G!iqJ=Ql^=7xqM`^Pu?1J<>K!(8*SHy>4cu( zREZ7V!{My3{cG4}^K0%sIVFOe6ID3t&phhC>+;a~RZm45i?YeBFFmU&7tJ|%|IND0 z#2Er1a|IsMEHcPmq+Yn<kk_P7&XZn=TgckoKladk%iM<Yd9S!xPU?I#EAXs#jN7d8 z;kk&KaG~t(7twW_Im8qucQ*KWanGnXJIY&n@Jj4I=hGYZGD<c^&t7@CT2WY$<L;sj z_g6@VT)1=Mn5|RC^w}r(8fZ*yI`OuJ^HumXvqf*)5);*KOqeAqsG>We#?+tTgHpx( zV|VvW@!K|cjYm?r%##}*FSFf9xXt5dE>?6!Ys$$v7CxE(C!X5&#F44!jGyOIAMU@u zj_%Muq$`#)Y4Ri^zemkWw)a<W(7%7$;pXP~Tc4JBor+05rIjnZgS+I0!s(lp1@e~L zWO+>ERD|>Lr~O|3bi;3@^*72V9NhK9Q0igzqO(@lpH*F(_It~u-|rR09p<$w&1qjX zpFOUYUH|fy=^`>eCVju8-qd?ORU>@~cVplx>CLmB8t><4xY{`N+*+5G9rxaOM7(?M z%kuoaq14}%+np{vzs-5zo~Fg*uick=E^YWMzRoP_;RF>USFVJ0VooQ!Ro;Bc>GN$X z-Q*t;%dKi8DpFIhrFO~5)~Nau*K}GnCN57{`aw4H_lx;YJSJK*1Q!Y4G2UpuJT&h1 z*=?zD?{6J#*lgmL^XK{IHxa?vIrSd5Qm52-njL!dB}R86zj)p0DQQdR*PYGr%bn`L z?3X%Sr#Edg?`Z?&>t>s;d2=5B)Ds=*;i9b5towBDjj3ree<t|z>T3CDW=fj9`=1kE zxn{!3yma%h8sUkNlO`UzGU?rN2Y>qrHea8-to1V{d2(s~?x~t^^zbY<y$1^}ze)*7 z%AWKpdCoK82^zO&WL>+pX4bzMV!8A5G=9(Y`p*2UbYfy<=+n?tpM;~9h0l&P);^wn zrK+;g)K;B2j{W*Ur&P0Q_rFD#51caIa5yL9)&2R~vhA~DbVUL*itZ;r6F9@wr0r$! zW%B()tE}a-KWe<<aCy~XcWv*-mC?EjB`<p{aduP=ad(uvBDmMw>yqG8$I#_Y*Pc4X ztW-H*;<QNNR+UKJ;;pNzf~xs0arosO)!)MPbE3Bw<Gf2rN@mkp5=z@xR@W*OM$T{3 zoSQFrEoO3f$>yGl<d#X!3)l*)ZMusO7v57-tSg*n%DHj2+W+~zVRmQDW}Yp}o-cW* z=FNAmTXxo~8nttdZCcFSUA@(JRjYA-{H@tDuXJ^Pw@VRNDl={SjxDLY_c!*O44X3V zk4Db_XYLoLDO@_{5b}BQ&L2;YXy$ES_J0G%$?u^Nht@kRsm<=Z`R&MWg}Ya8?M|C< zH88YUs(j7@KI`P8x6Y@|XuBE|Rp4r+af7+}TCzPy|Anoc4A*{MyVAU7?LUnfyzLxy z3j*pQo>*6Y=k<C0Qt$Sc$gr7neE4Qu=&({yT(kVl*$X=!zT31~@l?{Hrq{1-rd+fY zyuw>z9`wNZ`LtJwU#813dcM<U^Lbl#d}DpD>3Ob~26~?xL)TulxN&WPgO!z6%={l5 zKXQC)Rf}T9e1yX;@l;xNmbTt$&Gr)Nma*Y1^xLd|ZPzoVcQsu`zi%!IJ^WK->TH{3 z8$DmThTfm+<h{tN-)PVGlpl(b25O3{EoW|;<HH|U!B)TY+Kguji#sl9r+l(FdLZ}V zgD-3Lo^M`!V)9y+cFCrxt@n#hxZZeMT>0)xZvQ1O^+_2I;vLsYy%uo3?|=N%`bp~c z*ELtfT>ooZv)`&%q|(Y`$Nm7Z%&@BGFMlwX)@$)?e&}HILgvx#?i+rGrd*LosawoA zg`wA2Dk;s?Eyk%KlK=1#^>e0c^!}X4zqzMj3a8XFK|^Kkm3D7hc=-0{{Llz4nvnk7 z;GN6ES9=1^+pOwsU*Z|a@U}YY$hws1=M}PjSqH6jm$A&4<J#5Qw7T4B*2HS3M~_<+ zQfe|A4fb4iJeU@=ZDD=?&3xf^b5)F<x=N;~d)?w#-!1sp?8!pM&<}ivSzEX7DZcG{ zIH~EYkX*g*%=gg|<xjiI-&yYsx2)_GGDteGL0h!r>($NSE|Ez!b5boo2=E=Noi-)m z`-7bK$z1bKPMf1zew88pd`rhU77LCSs}{1wrC-t!F345sU3mWN!)w{~Zx&p2HPc;u zX0gPk&wiI)+{zBJbNVL~$t}q2BJef(2*bZsJKrAU6Ip5*7g1VxWXdK9r^^Bh|B5c0 z-FxA^lf;c2g`RnWY9ZZeN!?<G9HN&dG_!qZ=kS~7o@vpXAz#fXrRy+h#cv;{S+1cm zx)qu6$(^3HA6Kt_R<^j2M>3aVvxMXB8Ao;mKHs&_%(A7R{APTP>d6Atr?0)DzInM_ z_quk>>)dBAxvQ_d8*gMyeE6z={S@z7t9wfm{mp*ZKXouv{_$^ZVuCnVWGKU#O4Ees z;|DFdcp3Z}UwmV}ezB_2^YjukHNia>I0SO$3NajGXu6#KHRn?a=cll<pB*pM1o#<N zTorim#%YyPH~YMcvuDM)A6!0TWz_EkFV%&s+)Mhn*1H-OFN+9e+9f;j><K~J6yf!L ziw>j*T&QF8PN>+kis53M0T+*`N$aaXE|-UjyXL!`JsID6jQQrrx`kJn?qr=b`q9}s z_aL|8g5{neMp9n2p$z`-pUH1D*d8`z`znToaY0-5XMdRaLQpKpV@;gJ8pX0O{#o*= z&wTiJZ<PMr$|iU{+#ssj$@r$W^ex9Huf>Jhx6g3faPa|e_rmPs?_SSzEBJS}G5^(4 z#*2X!4&NW9Oe{Kbcx^RT@J6%X-_vz|ukvd-ZLmd9KlXW41DAo4IB)E1F;{-Eg-NTp z%YLfP690N}zQ<FhmPKrRM^u%5xxRbg9%#I!QLKK65W|c6YKxxPiR`@byr!Ei>Smo6 zH}k{AtG_K;^>E>T0r&DQYs2<emJb&mJRi8;(rm@2x`i<f(*GB#6+GHm)O`1y@~SER zO_%(*d_Q`v_SZ81$`Z<0wZBhZ-)zfkhsE_DvyO1^hA_sM)Xz(Ju<6z0L-iH&Gfv#U z-1KnOezV>G=jHwT`}_U-pSL%Af80Dhd-3Mz{hNQ!*?j!nX7#5#Up{JjuF2Q6wZ?H% z+ONLyk{e$&Zhvi`_I!_0#hN=(Y?;3AMWvr~zj8DXjqOq^dE6GRzt|zU#->Otq*(m1 z?c$dUc9v%+MKfQj>0flDqpdvVk&e7e<i4(L{xNPR;sXDET>SQ+c+io{(PoDy6i!>Y zVCw3IyVv6L>wHe>w49u`vfe`ZN2i*d)s_QCo+_Pt=ToEZ^-9yLD7nFVK~mbAngtR~ zQe~pg3w|Guy7ORZK=Z5zRSP+%ZgXVbee%)cxsu;l4|40CYiEnvRb~9|*#7H_9`Ju( zvwl|QiuccimMw~Z_jrZ8key9O+_K-3QqP!uiaTMpZK`_n1#7Q3tFPLET$;i6QVsc; z?@PB?oH=cGa<{w8XZ~%`ENmaA1lF&cW2URWr%r$Jv@8E!_{^PL9HeVIEi!Cgr9+&| z>K`dTBlgX|=Op^~;lG7b&2}8~v0v}6YJKNk-+ANf=BswCyL-fSN6PE!vNg3k-P(dT zPw@0hJ9{kbWWdbFpO#O%&K}uu{nOXg=hOCVefjRKt+p=1f|DX54MiR<FPD08b01w+ z;hnO0mcFRVfiq9!)@{=k_Evq??zL>6`t$=UrYKKcw{QJ~Pv<sR&*<6y!G3-A3-e{! zGFs0&YX7!-t*cxTb>QhIw_Cq2x&3Vq+E&4_^IB)x&akN$1KO_Tzs)+VXK%vwHu&x@ z@zW>g*yp;~haG+rCR8I@IoEF4uCsZ3sjsf^xYsRRP<?97Q>iycmxPyZf2esQk5Acn z`Xi6WW^Ys%n$^9Ykhe=-((BM~<(TI5<Si2_t)$$qCvRVUYD0T4W0ked*IROPjd_3G z%u^1(P^W0U_GQJM>%N92t2aN@NHfs*oGYGsn{|<SmiIHsBF(~>+h2L--rD=LOg~x1 zdiq!I_N$rYhuy!dubW`co?I`qfB(7CT8%$@zs=sY?3>J)0B&FRn}?U)ZsGAUnZuE> z=al@1qh&&F%YEm(>~H7@;clFLEd5qNN1@tLrc}S|%8qZQI})>}^ga$SdaX21Dd_id z4vwYI<L2soH4l0Ey=Y4!&)1?a_m|%5FS80QDmi+{(!f>1yX)2Qb5|wxepyy5%64CV z#r6LuK6C3M{6b$W&S-wnkNjY^{?7E`+6v+Szk|O|t}dwke6i8F`BeLK@%T!{DT{w@ z)_d4}ck?@4yB%F!C1zUlciC)K)ZSlGDENNLjIQ5nj82}e*|TewPV(esZCxh&r%mfi zojk3tkYoS0d8LJuza95?{$tfP@3*hjvHKTTN_-DX%q~5<-<$hI<gzHU*OAZLI9}YI zCSv~j_H`c4nv$G_kHWlO-8o=#K=5{M-1a5q%b6M6pV;s&e|{n3LJTLfDg#5v|G5Xx zYe%iLxTqf6bnGF+xqWMWHx$^{yIdG7xswOdbar)<2=#HFsjg+qDrvI%No9;Za6 za~u#dkY`}O;KKctxhnAR(Sr@m388OGPKV?qUXD<+vN-0aqtB6U-~GWj(s5dP`P|5l z-k!_Fo%@uwEf##2ZU27qg-25+b|{F-f10enGC|&@l3~U(gSfz$mmV7HOJ9~h-VxZY zye=ri!te76i<!X(KT12c%Z05v<KM6|JYey+rD=}!YCqzO#2ExT^?Ro)T|SWZpzK_5 z@{F)ImzQV$w)fZ`8Tm}_d!=ZkA%9C>>Gb21K8o#2N^&Z`o13Pxp2_4|+KmapO=c?5 z^P6p7$8<#t-Lu#r{JAsZ(O>uYJCirD1v+&yFD}jdu{<(<f4gv0{Qi$~J5=pgb~j$H zv)YhvJLmJM$v4hP6|<adInk>-Uw31(Iq$4VD-2GD-<z&#dFJP)y1iXjLc3q63LQ7S z^WtK3>yAHryE+|u@*5miiOU47xN=tA^r+|^c@v#87Qr!$f2W)H=RaNLE&I4>`W=m$ zfXf~mZ_T;drMK_@TD6HU!n(PgQx_aPrvFa;OZQisr*jYYXUYCK|IFu<3@6J=flRZv zH$CPaoO??t=$KLa&GQ)tC#vwqO}(=5T+&jf-SKwKH`t^<E?HEc&#c9=iDlMKr!%)d zd$BCJ_iXJ6m)ZL}lma$*C+-eezyFS+X#cJ0pX6E}{b8BcA+Ti4O@*)i4>vBqnbN7U zchv#Q*rJMu!X-0R(_B?2_ViD@$!f%PGr;!~-?`;Ud)`l8I@|M&uo?eJ>9m)hrKYCX z+~m(P6=#3dTg%yKywClN`22ILmf6OuTqt^5vaeu%ZN8*Qa#+uT^exI~?l^62<KfiY zz3=Av4aen$KS{Pd<87;0#jiJEhoS%OXA4?qO<Y~EXTR2B&%`F%u64m8?SU*cWlzkU zXCApbZStHOkNegyv*}pmGUcPolx4P_7rpm}&1lt$+t|N;LcHUKw3BAfoelHqHZHjP zJh@Bupyl_-AICgbs<u4dn_(1@b6<FKU|Z<tgW@^5@v$#^Z&d0R7}!2fs#l%O|Hu8u z!|TeXA&)m|{tpUHw!G{&@6Ec1C8w7<XiJNCRW99{y*P5g?)fXkHmJXSD!#P#(01J} zfoqxZE+N%?H>K}xd0lc}DQn+C%NYwgUwqqN8M%gca+!hhy9<9cH$;4o_0(n-J#W7# zqWQdK%i%e5#ThRAIg_+HFVS`5G4bY;30hlLzZ0pvy`e5Yf8iXn4L5%*tDC=KRnc_a z1DxqU{<ayXdrSLIJL{Yh`-Q7*>%J%RJ6tDMHE1z2i0&6JJ0)MHlXx-AY1@^mQ!o5e z9&}oF&M49Tyz*yvY4~)W$5*OM(+vdlI@o@cay8%BzRgl>Yi?I-weHe__&fU!RXzHj zGS5=uLWf80%AiTb#w`D5ZQ{*)bxQ8TMWIgSi5@cr3fiojtb7Y?r?am(sQ2*FqBNG3 zr<>0hm0om{G&-X=YfZXrPG9A&uI!sFylWD2{Q`F1$nTgcp3<oCT}WwpLgd>=xuPr7 z7_Ec0Z|!c7=iM=7vD=A{N_tMbSIS#&Z-{8-ymUM$V!P>^lgIA=c%iy_?+?XEO&f~t z`-->s&5L`*yIzZ<x{lN2^|lk&^|tT(q&oYL%HH|KpHoC{-kIh<e@)ZtV``GMM#35T zQEep^8^SI`&h`HL@}KjW^6-7?xmwJ7raRnm(9_acU9sOm;z~@>r+0q+-D*b`UkW-C zSD#tB@u_+}r_OJVb@!L(?0T@scD2E~t;&0!D3`3BeIZokouRo|{7>6$6HbNAc35)D zZT(I?jhFuIpQY*#-d^g{^7_=<i&K~Iu41S?&sG=o$Ax*N90#}PpKp`>KQ7BLTI9X{ z!DarwcHRTWP0r10^bg&7R61k-Q!886Kf>9IxBpanXSMzQ+@oDT>--G6Vnjp_%+{K3 zQ2uZ4523m2Kdry!-{F`&{et5Q^H(8!2QnVdoijO8?Yohe7~k*Z?S&<qSC?|$ns$1p z=clU@>v|=bUwgjnzkL6n?B*{bySKbuufDsha?0zRIaj!z{5KKj=vLjb>6nVlOuGd; zYrE#&=(YV;CijzlrQSmcLAKhDFJJQImU$YM-nYsL;*Kn|lsRK2dPu1$;EwM5ka>$& zCA@ud$+AA=K*GNUKG~aVR_vEfHlMm!;N#t(KN5`M@AoHE-%8wl>&w+oheOXkRZ_Ot z;ia^Ak!o6<9nY&7Nq>vyE&q3}t?I?agRbg@j8`Xw?OQx0@x+ZurU3z4>>qwjXK>HD zK5g-juhVKDWc*)rQAkS2`1r@!A17LF{d%kXW9pd=ZgubY-!8bQ)xf#!{^gUKa}LK# zt<@^&ZSt6S@tjx|Z&md2zY~tGIjFlz{I^6qUt#>`BRS#A;wRNaG4Ba4wcWFz?RxSW zp}>jOCoUcDE1T1LFI;S{4vPqz#$ImLA2)iNF5b|uZTl9&vOMC*6qfu&lWRGu=Qg&U z`WB%gBe2+N#xzZPW9$8DW$)|iBt^5BZL5=(NDAxjKC;qD{h^D|(_I|f%$@DT=KG19 zHPinmZ2Nd}<=rhaTN=Ihv#t4aZ~4r470%5IzUNMG$!$7vH<Tq@dD;UxyB6h}Z?#_i zTXa5RzG2<g3n}d1cFdOZ4EV-(?hmtw<HzWhn9uCj^SKt<E_?boZbD6CuA1%Tcek@{ zEqiy*(OGBZtGCy~8f{k3Jef9W!!#4dg&G>w%D3I>HZJ?kzl~K*(pRpKE3;J7v-btt z+3#!4OHE2zS0i-r$k~6+@)LX$9xS+|aJ&5!qvE~!x0X+eTH$<)f0Jw#+uuMB#>rlW zcMi_yvoQL*+P+<DSA(a~z3F@BEI)gWC(!RT)47^Wr57HmeNE)Qvf}(c+j$2Mv+#Vm zH+9q1!cAASH>oZ@d_&)VQ`|*^f1;9d*BSSJb<1vlruA-O(F&P7_hy;b9$YC${#(t~ z$xL}`sGPb?`nbD*_avwFFP^X5<zlX4bWQQ^ZpSK_Iku~eqm?u>=d4w_u!Q%)f4zC8 zHhpW7yZtN<ZZS<$u(4Y-`DTn!ZemJi_`IcCb<f)L&SstQ(p#)~xxv=c$-6&nPGZ#B zsxV=L`;^a1cSrX3bZjYJW0E~rb+6j2&07+V?6B#R&bPU+OzMVK{9&tkVk&h<)Z(9B zcz3XGdY|%*$EtChDw>Dpd`J&YSTQ}T@<G<N<vCv$zEPBF{e5C*fRkU^y=?~?TstEf zcpU5w|47d{a7e;Nao(qYL9>D*6cc8&8O`^wI5H(<rkIKI5|f#%t5!9)d^lLs&Em`} za{97bjQmtKZFP-ntcMHQ>LaHdx#+L?K_mQ)<}$wvZ+TD2ew-L$rWG#cS2_PgS;a|N ze~st{E7^_9&Wla@FW_5k=o7DZg7=3|k50?__(>+*U+-9)*v~m5&o?}?^cinPXyt*I zwr#5&G=q*i%3l7a5&Chfi+g5!|0KpGFP*hhT)u}M`0&m8p`?Dzr2YG}6mLhqP*nPP zFjsm1WhqOe?27bFjfeh!OKZvw4OD-f#$f*U<<v=q>d7e~4?U)Qyy`Y-=fRafZJnMy zy~)P@ahusjsoOIX8mf-JeB-fUmfxQj6-wpTf^UWW)QO%dl;yl?eP-36=`(NCeC3}R zEYp@!%>CB8rugfpm>ZX}{#JZ`Kk4euedml820p#IY}zL6{<p2%!JXWKtABm&jeT?W zcazC>@wSEQ+v>b^Cz$$pcxHQ5>6~cOIiae5LR??NL|21P_kbX`*Kh7q=G<Bt9HB`q zQpwCtbLAH*_FlN+lo6@4<$v{mCxKljIrb*C)CoUY9P#ui!_Ar5v1d$`B$QY5i_fs> zm?6%kV02Pu61(0DbHNE+ape<QZn4cvnZ)=g>a~dG^xv1=MVV&Q9ZYs<@H6lJySO_o zG(TlyM7GB4Wqprl>=Ao?Lc?a|lRFZ@X9S;|{&kCamiO|f7M?$r92ODHcJ!X>>K(SZ z<5#Y(^ZTCcdzETuj&4~{Uahg~_>a>X@24$po3>c+v|+{X(;LlC-@h34s3ZIlukjy7 zhKc`~5o@5PvAHVAcuA%iD=;vu#Cl+g1$YhA<WOf39?-=i5<xHX0;HCxsw^#Dv2b_r zuBA(MTem7M*&Qs!vV>iLapl6@kN4dFDf;}8jd=F`x7~Z^>1yjMf4FGEv7@ns`-l9d zO`A@gI%Q^N_V3@nhA$`7RhF?QzF55E;o>bP7x%neyyoWOIX@RKx;l5&)y136PVRcU zciZLOiLaX{9^X3meskyb#Vfxro_T)m*87W>{@)vWV6XFq&AAtrR==opIMW<`q`CUZ z-269-{qNK!Jlb5Jl#`QFR#p}n8R_ioTweZt{;gwApIw{$;mKm~y&|s{w5)z{=Jk&| z?H_uMpLlcp#hvFn{_Nc|>GPdUtIte&J!jMLk{iixFJr@A7N6^X`>5+|*R02@j$Qt> zt$Wca?TELJzu&rj>)Z29&yLUPJHG4O^kef*Z`(Kh-Nb$S_D!5PapugKJ9k=I$n4v< zZ{KbEANeV7QVPCgB)v+>`X;ik>Yn)@Bcs0t|9*eG{^#qPOGgiV`g`Wl=`)wO|GYo? z>sftHZtmN6@00{O7B5~rdGh4hbN5a^d$;<?!^00hazA?U=FOWwfBt;>^y$~HU*Eoc zd-~?nzkmNee*F0Lt0?Hs5s6#X7yi%9`QQEjZ;Qn(?FRzAPV3ff_%AJG*L^S}_TqUC znX1;9oxk2Y8>-lpWiS4ERGHIc{$kB1(q6}cW|-7T^q3w{GqN~)y!ffKcl}e29kOeB zO{e)LHwPCMRZ2WMI`QC1lS?;)T0IRc?YZpEWjCmaN^SkYx17D$t0P8VZkpX=Y2TFF zcWTN?`JV~cr9^$S@tf1dI^*2K<r_Xu+rDe>17Raezt_!6<GNo;`!yV8GyK$kusvq! zx3;;RK2zlGo~`2)&f(=r(K?zY8uW%q;-ryy<lQoTubI1lFs^M<EZX!ZuGex>_Phlz ztn0O^I=ph!L({Z^L}NLGti1p6eD>zB|Ce=ky2HK-X8H56lWJ~W@Ap3+U$E@u!LW?U z3RCai-dr!tx@xcO`Tp|h?e*E`SN#i?I<rNPMQPJb4!2~D`y2-!-M{~%P5JN^NiT-2 zH+hsdYTf5KzU#*Ao&}ugx4LSk=WP}}8WQEVoa^E5_ty@*OPv{U?&xRT!i4Zj!v^^i zne!U{EYH;r>^f0q?b)|5$vU!Ae&bxGiHUXd53#H1_BFqHIcxdL2fXi=y!?6SetMCW z;rp~(6@3RcS$Hj$DB8j-u-j7Y=dNp&>o&jLy)$k1i)%L<!_GWq)!30zT{-dfu4$1E z9)J6L#vxB^Sxv0sZre^3u~yp%qtI_Y`}CPl$5pzuugy)9nt0({|Eg)t&0b>O(+gb^ zFMiKC_NvJ0f@A2zUyO^^DF2_Qxi{E$_EwQ;dxPTUzEw$yHj}tpc;$&^X8hm9yekgO zGd*yqI^-&k*uB-!T<h29y-hs%GtkVWpx{!a*_o<arCT%VZ`E#(uDtbm3cr9mdy191 zs?eh_*=fppTIbo~HlA3@z+k+lJmJ9dn?+R&F3V5VMBMotTx+8&^+Lz(!_nV1ZA_aF znfeLj7#KDEoA|b9Qu)b;pQbmIdROij_@7m{|A_BZM;Sw{-MMR@WKZ?(4y_Bl{9a|z ztM8YU8tuZ1xwh_-+kCmAtMqgI+g-D#dw=*;G2Mr&=tnwB^k*HlrR;tA*X{_fTQxOy zV&v89hN@~G{#PwH_FB*Rh}x|7q6NqKX73l_Ii0Rk@57bzaze7vf4`4sKL40rX;rzI zTX>b=jehapx3&ewg?%mvxLWn8Aj166$BHW|HvZplZhHChw1WPOzdF|{PO@<X__@Af zE;0UR+y655(I@#M$3tc@b|iiH)xT<w#-2-w6(aL$cg}ccyURj)(Xu?D@-rrNH5OK` zPi>CwJI<mY=$W(2?%vz0`}Wz~o%e6KLYN{$=sJFnGO?CrAsi}lZ<)F0vOYc{)+F)t z+po<N?->b&i#FZd`&#cQyR6Mw@nb1Z*gkAJ?=*9Y+4mo%UJMF_v-lS-o09f>(vrt> z9@<Qvov$+Kckw!*mn_d7{$pG`>1Lt8)|6jUj_Nh}UtV(jR??w1-js^w9eo`y>ReZ) zPQLQ!tNl|$ugMuZ>MPqm2k&HBoBZ^oojGrM#v*r%^RxGTJn=_!L(usLHi>Ggax>4| zH=28(XNzoO+36$xr`FE>zTo@c-$k!C&xu-OK3lS3+7!|Fvr`q7w?47|**#^BUJ%#D z1fNZx9>2ONzVfM;f!N!Pg&D_PqhfV>&PLTa<v&&0n=5qeq3Jg($M(PuzAe0r8cV<X zPrlY<^J;~D&2hE0Eqa^NlDsQVKdHa@GINP#L7T*d84WDgC0;yvkfBoKxH84jIjM%> ziA1aAru>DymCJJso3;jW&F0&(<vHK}GnM8}9J}?nZ`B>=KKwA{^zVl+7L{IHQ0RAR zUyQd@^BMD3zK=r0Yk6Wku9^i&PTH@pQ_<?lVR&}h#e*l9q$5P;INn(N=<-YL=GK>< zGc;z^#z<<1FJ;=V6|(2p^H1q(53eY?s1Pq|qP|LP|Hj9YeVoKzdrQtbtypMpvT^Th z*V6T|)2}|?^3SvILuJNK4GDqz;|<fVG9AC-^+BuLUN=1Mnd@t36K(MuYkrp0t9;C? z+;Cfbeu<9X-oS62vuyUv_?VIV{Q2dMduk^0)LN>nJ~<}s6Pytft+VUjx;~3--f1qq zt7c89xUR7~=&CTU=qk^DSC@1hHB%P9Z1ehchV;#dt@fPr@-y}o8m!uK|Mazo>B3$` zoE{4!9_|snk>cUy75g{N;qlg8jHOwI$xjQ;Naac{JzF3z5GC7wY>nJ0AJ?h2^K+(i zfA$St<$hg2M%`W6?(#g3((EI9ul;(j`L8zO;<l`-^0gt4UOwGYys^&JQY3yRXRm|M zi`g&!=*el{mj1Zsesl5W7q1i}{S`{h9gL1jwq8vCbyU#U>f?3(%dAtDnr-f!rm?Lm z<Ip+x?EcnO_aE;J&DK7vdq?MLANP|$C1G#hvU24|^NtA4kY4u8n(5-y<L$o>YhM)) zQNJ3qsN~tyX-v^tAJ+ZtlV7<(W^MVg8CQ+l#5$F|cHgo5KG{rtn}pHgxvq>CTpU!3 zH4jf_;f%R@-K^&MnkA*zKPh;+E&X#lc<P(w^-($Z4u-sws$AjNd8XIo#;^SD*L$lv z53Buk>z}rMa;~esNBBO)uHMh7Q~9qH%RM_CI;(y`)_<#pGCLiaYe&t)BemsUrB3+z z!!+*m&HQ$@iL1((1kb);jDLQXY44k}K_9d1%w=lj%Q_!u-V`zaG;Qlg?Z)8yj{_xM z{n;|xBkJi{Q}sU!0?)|4X4oOPF58^XR#A+Hjp5=QO;L;Ho-fgV!@93tSjzMIgKzl# zz3;@f?VX_ekd2FH;Z9lM43o&BiPdY)v~AxqRrB<%%pdD5Wg{CVEH8L`wCL(y7cZSZ zQ!J!rTsPCN@ltV`&tK2y^6rJUW&4Eh57cBPUHrVd%5CQ}`DY2MTRW4>&uC1){Pgph zcfOx~omzG*ekzx}vI3{<=Txoh_Fv}nmn^dui$AW`o%LrPzwZX?>FyzUQbqInb3*<; zSQ~7v+rE#%eUic?mn8iqoiV!$!|q<zd#xY&C2nr~UMur}(D!U7;?F6C?%vk1{C!(1 z^QoBE_a3od2za2icX@DB-()$DZ=Tze_nev3%e+=}xlh*l%TwHrD2Bb?yEQY>b%hXD z%hJ4uaf@7)c3F5lO1<wqV@klxP|J%KHYjKuob{I>iBa(OayN#=xoSc)J{vEcYZ&xF zgXgBDgrvQSVri}B58md7(FgP1Oc!}K@wUR3>93F7ThDoNebY6DXvxU?GS@0^b(_sU z-)_nBKuCyF>b8}ZT>AX|3X_`Ek|u1IGL`RZ;8ci}-uhTMBWAiFlM5FE`$C4oi3dv+ zQf6>nd~yAy(gt=G$vurOQ9cdqiZ|!6Zxdm4ox!x?!k?A*lr6nmHk@ry__*@2r}LjH zPQRj=iyfq1X1&sRpL=w#^HU>d(OXVar#Z)mzH?GkNqm)C=Ew6ur!HoNLqzH-tvJo= zPt3b@&GlmBPKug`+nTuEG?*;0fp1m%j?1w-j6GXk?~}G}UUuS=c)h31X~*w>wshEd zOJ=OlR-fK8|9krulhaFNi}f}{{;AGAR&rQM#8K3|`&(K!Z+O^@r58PlQ*Lbv;aP9l zy*$8-bF$Tp!Xu}Qnoq{8Z)HA|e=PIpI-_(&aVg$?Ti57|>l9Dznr6)M{$t3&1#XAW zRT})gbmB!w%3qnP#XCHXCCVz!6?^;A?Ajxdy6q)%75Pukm)p~9y>Yc%q329CZfC>W zi5s0K70wUV5p!D{q`Wkl^QZd#<I*3DS$Ss8pXM!kfm?UlCysT0wqMaXcj9nOqQm`O z%`?kct~>YLov&F`E#H3nt#WdK$kVl%F{>U|$80`x&}H9Jj{TKva!+0?S$LvMNYSn> z<(J{+6Q5Kz>BK%ge{%OL!(UM+xAYj^3JB|%nsBFP%R-)D^<b{4>-?^y8dY1VYb$-K z(01K5ckffHmsMs<9rfJOHKqm{s7`Wdzo@>^NkKR4+$6@ii_Kl!&mT{!56L!iIrn$( zOv8z3r%G4NTzXD%a%5B38?^v&(NiB=4PqbIz4hKL={AMQDyFVp@y!hXh9_Fgk><vK zuBsawX&djd4PG}#E}HH7Hs5QuwlU=<oByRtRPFCPF8TbX{b}yHlTBR0m#wXoG*;DW z{uQ>6_I0Zlk`&mJ;h#OPbjG729{*ikf;!Dr)Dv3j?N~czaBo*Vd6lVXA5Vt~$En@R zA1BX#-glsQ`McuT;>HE<3ty~J=82vp#yZ)~G*#zrMSWXTiQaPV$fY|LFXyT@GMt_! z^J59O+eXRilq34f-%Z-&eSq~wNpQu};N&%nGu;+!@5q?nRl@DqXEvK@ZkI>;ZKuN< zzeHc!5+L_&t<JX@e@%WbTrqQnitkCEM}3R<7Tvj1Z!_8Kr2b4ML+g_l#cnAxUugYS zaP*3a8|!C{Iw3{LFG+oG-t&HMRof-@X30_hrl0QHeBzb6|F?*A8P=zN^7@-HRll=i zLBN9Ov=iPf(^qgGG_n4Y5D-7Z&&(&^^)K_>T>YvaoXiPdE=9S<EQvEX#XB+gSQE3L z_|5Hy0@)bU9xhdul3J$2AQ5x<@4_wjSBW^qhh65I%y;t8BG&(Z(%<fQ|Ee;3Zp#Lq z#;NLM64RDEwKANdeWCH7QG*>5`#}NKg2k5&zwGr=s@<!X^|9F_ahq_!vNhr%&$L<| zw<|uI8q4<Ur}FW4?ww42Gvz)U-D>oA;impISq>|*0@i2U*q&vwJ8RG4tfHk^uNG!K zo4TedY(-Vv`l^fDt0bN0ym?R@RrXa=z^s48KIUr^HeAs#dfXti^N@F{;NxR&G!HZ# zJ(WN2%eU?YdD_9Mc7D7kXNgAVPckxhEZxA}*39lFyJ>#f_WW%>rkyyqpX>F(s7E^2 zcZnT0UBSJ7*&DVW#`|)F<|*;*+@~|M*7oAU$DW(F_14^5yWCoMyY=lX=JrL>=Tq0} zM|CcUI@;C4J#Q=b|80vWEaJImt`OlC)U$_^S;sl~V#>dO>2Z&mw#oi>K7Nx^PIz<h zJ?1s+Q!L9385*RO6dua|dXhKYyzAe>12)$BI~3%;v&c=6X>(495P!DxmE7+WDM$VP z1r{!yXRx^L)?Ke@Q|<^(-(k1!<kR9#=EiiN2X=jHl~%sa@par)vPLPKGxM#2zwZ31 zx4C6+@9f>Nw_x9?u<o{`H-epY_hX$q>)bPYQvTa9S2%_3S*SeoWZH%uenkuNQufWN zvNLzTVOcR{*WU|!XPb6DTU2bk>+_s#uM_u7PXFGRTA`HL6B?Acb@jQe$=B8=yX~*O zxW3wQdG*rG)wx@%|8A^q-jnXVBRzV5`t|kc_REjITd?_g#@6RgHa_p!^Svqbz|4!M z@1ADUZGHXt8vCCqYHpMLg=dwnyVJnQsW)-$oX{uxCjFLCbCB<1yuQ@-?$;zq<<++* z@6DLhAM|ps$w~j4PuP=Bt<$^X&-|W;P2vyxj3V}kU2He5v02PxvxwKME2{r>a`&^@ z51d-=va{WN*rN4d7n^WESMZj3!O~YBa!>rh$;F}-@a6PO29AuJSOpE1M;el;EZIR8 zpVIBGPHs9-`#>W2KsHO?>zfn)391OkI_u52q!KuHQ2^^skI0j)ckVGd1pW}7nH}NV zbmoPIK#PgedNGrkOU|VmHC?jF5cO_gK3M4cY9cq={YZutuN%CK9SY<h?4K6d=Actr z=eWf~YEJUOWeZPyUGP$6e&fFfv#R2m-aA~q?{Uoa!~?s8g+eQ|nS^?zHQc+eobot$ z(lb)1JLDC^geNLzj!U_(UHl{2wo%GtVSwpE7w3-`U3?#Q2CO`<{?PnVvsu=e)tW{7 zO8f6DGm0`e`2D^XU+1f?zs_DJDU*DH9rQvN&Zs+e&iTqCQs&1yMPmA7hi#^+mIVwG z9tqpp`)>a`&x~&#o4B9wg0mSc^}jEC^Zk)0VZ&S^F2DZdTR{`Xg6_vRoF>Q@hcdQk z_&r*&(_Qg_Z;<~Q2AgvUP9j%)V-!BAWhUO-!OpkpD4W3!jevJDGcUN^weXy~G><Po zZCOxe-+yg~1yuoWerosVe#rgq-!I9q!$2apjcZ}Ysr`<<Sxt*RtqF?rXVCpsdCRmf zhl|gVE2VN7%dUnd^OZbvJN0yziA>gL%J97Ky5Zzu1`pdwLHAR1^^V+}ILWKZv-6pD z?wV;)`!pTyH+tj=|E$jGw`Sp4`Mc|A`{7vIJWuBG*UTFa9=m+cXLon==4sP*PA%;E zJY^Ga;M~H1NmC1j_WfF$KWXQ~16M7U+njsgdP@84*L_#x!yEq=xLoyGY;-55*i>3v zFSB9S-d>eupFdAAGub-t!P*~(o=9iSP|SSoUNHH@{HgEkv+Mt@vHyQ_L5%+$p~(AY zG57!O+BbiDUBKP9DOX=!+w|{|=G%4bE{TsnpMIwHQ>Um@rtFwsZU3a1e6FtR{%q;g zS86)m`{v3g8F#Hm7bd8Poc)v0YpMEK_Tf~c9Buz~l}ej5&4lLtRxnai4eAZN*tXGC zaKq6l`;T7Qd~}<hpU%}E&;J<*y0+X*U{Pm3-dM8afXD8;3G-yrt}kymcm2bsKjCvD zI4k$b<bUSB`Rn$yb(gOf9oYD`>$RBKv=yd@erWypw)@4~rHVWEKV=g>X|31Zrp^0D z?XXytI@_uLi|+j3`TgS#m;Cnj*}QjLdgY9Sx4r*$e$V4mOUoaaRqN}%oH$W6_6}=Q z%SBEV)>Xfb8eLqen9-{A__vV6{o2ymfi;)!X^XT;yj3@UULWN+C-g&h#EX5k4o_B# zByM{ryh$Ob`cA^>4o*hz8Ivv9PCLp=&7LCb&KS%kcPw$;WJ!(W`_JC)-yXO-Yt5UF zera+q*rzA&*)Xerb8hDQi~U9`_}u+39iP-4?Cxz9+5c{)Z`S)D`zd1YCX3i^U(R@l zd&x<m`02f87VKX6MLzldUGYb~;t&2=L|)M}DDpoXW2re`%WR^(K-dlQN8aXNEWcgx zy?xT_bi+=^7i{}_AKhp=xA&dMj_Ot239(Uz&nt9io4$@VkzW<CN#@1!{+spcWtI>5 z_Ga{~dG^sN)<Ehy$NWE&Egp(1+6MA8EZcXsS4g97iIc<A=*@9o+CJ+yZ__)?v@U1! zsbJmnAHH5%eE3q_rFDKxXUzP2Y~T3{Mz+8Ev@Yz-aif<UPE$W$es(%$vxedBZSxvl zq&2Q6ST*DIC%@*hf9C9B%a&|>A^$jJ!{rQtM1IDNY%c7ECw4yzVcjFYnE(3XE;Wg} zD+P~RU08EQdGXg~+uhBHd#@)y*);joyhjX^Ru^99NjMbhlHR2ek{$jf$5Z5Dv~Yb+ z^#|ksPWf-9ym;_~ZJu0Ias0=qn1de=+B_}b(dC-2`s<DAIe(LPAzQBg&YhDnW#N_w zm&+%yga>}UslTyN(tp{5itj7iop_aP`}P*TI&$_?%fwqdYPRf7eR+4w%^NEZv`oMF zgJbGjt(CJyRBUZtoylDt?)R#@{oeKE``0s=-sJr#FvUD1XyydplON2dELy0N6&-Z3 z<&9hO%&h+@k2GDG9G1MgU37B&`>CIoZn{z~a_J^-wUei5+0;!xWv;VtHu)Cv$#vhp zh7%^=74I*7ykf~_Q^8kDPgO2TOo?KjWxr)rZ`-D=d<#w6?lNjTxu86k?KF$xk|Req zE>wH4s%ihfn;RJqyfmoRaQ|Im%gd4Bv`Fwdg8^GcLguZ>bN*)rGcvQNoLlmxVVcVk zmvg7pcRTeJGcsl`%{QO$XDWBfqiMh1Ot}Aq;mB2qKpCf;v)zmn8Ye&AdT0O5hM7WZ z7DV!Is9-%mdGc4U+3e@vuHP;EyR@43@x(vRnRj<Iy_*rMb6D?vpYN6T*KMto>^ja` zDmX8E*!{n`&znb6$}8YXK+wHcrEiZ*3j{1(d;V3&)8hB%bdE*-W}R_h*;37oo5F-X zGwZwEJ$KQe>4D07Rh5jQi*=jIM2>t~FQ*?fW3}A&AMv8<LZ8oDNq*AL(J|Hj<I6FR zGhJZ2Ozx50Y?i-RH1mFbmlWgu)Wf>)4%eAfRbH+&TbtM45w_pcziidw+uJ64Til<J zd4b>D^JB=z68XfdpZ|aK4-~txb5)+;jqHNoHyuNYRw``}$zK2Gq1CmuzaM|y*8S>j zXV9xDJTj{}mG(Y9zgn;Vm6`q86E7w*Eu6!wE5ew%B}YZ$s9MnN^=?bWLafqX-Zk~} z{+D^>1NWjc*(>Ar&5piM#_1g^^vA7|*|e{E-sOi^PV5f59OPUW{pZiDTSlBK&u+eW z)ja=Myhu*nd&|ZDR&ZXOpkaM2#%#V=W{gSC#+axQzbfX?;+*AY3<}=G?zmJ~(b}8k zwJ;*~Y-aK@)6C4ouB=&Z9ihUj+7pc`{IhF#KgWDi3!9nW^XTTsJ6&I1Rqc&7QaZM0 zR(sj!iL=-wt$Sa8v~AxS{j^3>Y|FXNw{o|yo3wJHDc^R9zB|u5PP=c{J@MeUxYwdD zH3rue%bM~Fv&uh5)@d(Lnc;U_?%js}3*Vf~m#=xhKW9qRZ>55W)1SkxZ!$W&>hR0i zJl4G%XCH4mw=3zj>Bso*zPd?w|4B$RcE5M=e?4>0x{TkM{{!S&A71!apqG1nYx*(q z@O86e76;@c30}W{CFv<2<BzT0?}YyE%Ze7g^e@+Hw)vc2Peh%!zspVhd)@g(j@#F= ztA#Sv{SQw4tm%!Yu1x&uS6}f^>UE-8s^<}Y?v2tvXWZYa^2_C(SIhhP_MST5zE+*w z_5JnR`y3l04*ZRae4l;b@ym{g2cO@@<v)0>y^52;)j`I?M7TvOl}RP%_38(_Y)ix( zHQ3K<Buzc{;%q^IN_0xqp^{e)4Ye{UFMXQg;y7nbIh*<Z>4bR~T(qOQPP#g4$$4)2 z8t~Bkdn?1#%}I~rPsz{xc=13|-psN{_FJ+$qOVOVGGXYLv)~2e+LaEc5-z*Bl$3=< zHS9W<-Zw8`UzWHfkCxo6XorB79m_OV?m1fU;qHV2j+ov#5-O)}8;gWDSabG8PZQfK z`DcURoQ{v*t>32Z<kmMky*ucF*vAJw-cBm()mZIf!V=4@S2diTQj|MomXK!{|NAVh zu6Xg#t!|ECmk;_Vy)a(;%zLL^;{<&*?@P}WYohbY*gkS9T`O}vQ^s+(;<v`u{sltI zGLue3&*yE}?jU659`vkag{Zzyz)e1@>3dBwj_TjKv+m6k%juuRQ*;efRy>+zH+{Ey zs_vEx>mJ=SnqDrI^*7T!;A(lH-v6=-QD1h&nm$Nd_dqm7xlf6OQ*oC58n>z2CaSz? zX!(3zJhA<z$6oQE?zVIF>T;VVK71X({d~U0GPjLWCyUL>E%ZE_=<OOFAUEAlyR?0+ z#SN{Qwr3Xk#O{6GZpiHJ)ULc&_8#Y-RSs66{Kt<?o@%jV>*a2JHKs*hIrpkF{@|-q zj(@1bJooTto90E6S06mPO(^K^i6keBn1$Rc<(7$k=Ii)!bDwe4VGAB+UaPkf1`qCj zREvCb)T`<;bAIV1;d#&Z<rn>b{UN3|{cAcyW5FW<*}z(n#3hoZ+BFlBC*E5v@BO-5 zZI9q$7M3r4(oC%k)vTuy6Q||861a9LL-gOXSqALf#Xdhy{NSy9x_Rx9=%Txv8CBj# z&uwJ=x$56{-WR(Qz1`XqivBKj&B%UiIP3Mx=7X=ew=6w3@v!o`M879)n=_wS-HI*D z{+MXDccJ$BTTMl!Uxm(h*R9@t%2@w+L8wOavfz|E0=gRIo6ovF35-0NVrKay_2QIh zOXF+Ds`#$79G?2D;lPLRWw+NvpIdQw=H&c6P5&g1pUAjx{mdlY-bBmjqsVE4fTsbg zo6K&fmhIIn3Nx8~WwGZh`F|E?RKIrwr7n>EZ#C)D3m1hBwXTz0Lhnk~d1y%*|9R)U zn<LArZ};X(#nOL|tY4Ps>8@Tk$^2xFp1quISe0FBP|5-IwW)VDx!2tOSoQPvi!~N= zRHu{_s+p+k{eLR@!;Z64;jr$>5Vy<03tnaC>#!bg-}mI2+&jCb{^fcfDxKTU%zCnB zwzb~nimr{5bB*qWmDg1k3s${LxLE(`+`_N-BlYUO{yKi`jbop0=~s(|f2IZA?+Uoh z-213`=Y8$N_9gq~O<TS~S+Dj1+r&HOrvnysx!qwm@2R`aQm2~nIArTI)rEV{A3i*P z-jC1I7*`}8P0l!dZEOES3E4S;y+teiZq0Mwqp~dZYRt8ymI~hsSv6USL6Hx5Pp?_M z_e1NmKZf5$cFdJkEjadTv%%FjXWvaIu66wOTWWQ+4*T)DDxV7PNwK>c&Zs+dwlPaZ zHQo2ka=xf5FAQ(V9Wn{|BpVp*sA;_FiO!?PvVLy+I6E6opKkS+Tf}Nwn`HO;QtOI& zziV=wk~y{Pz1O@IEIPtp?D;zUl@c5KE#-aPXKm$7<Ldc(1OHBIcd?Z=`X>{4`qx^W zFBRLi{ImRbNbKSEZOX5%Zv686NcNHZzq^jFe*W!zroyWKY+W<HGkp9N*|O%pSmOHc zAC7<h+_H(||J(0Lc8_np7ME21x4UMqU2xp%>8vZ_zt<l+?8w^Sl5%Bn`TLm*e&k4n z%N`Pv2!F=R;_Fj&D_%X|^06Yx4ZpM|l<KNp;WV0U>7G9`*GVb;j?+KGu8%5r?B> z)m@4{uy$WwWug2Ljaj=mD(1)r+W)#cVc($@`{v24u2}Z}%kkgx3+Jh2t)F(M<l!94 z-_H_kukBWx<+?{pr0mOGId6L>haCM0+xa88mh&&U*`9Qfz3ja+ujumw4$K_?<q>NP zX0W*`wd#0r_bV|loL9zn&Wa^?jltBb@xly?+qNI%DAv%tt9$qE-Mfm0R!bbcq?RnP zW>a=adcx6pFoV(4aY~+ws@t6R*7ZkrTAe@oJI-GG{rk|MKoPM`oa}!Y;~4*Sx3#f} zaPe|-GNv58%NUt=l*e$Bm;`Hf&mvy8lVXei@GX8;u=Z)g#fE#CR(B<K{@?s%pXtXv zTR-gF`eknk-@dKij^AKO$YEYD+idtv(fr&(^K}ou`#pSa7r1<3XE@`>?eCNGYagv^ zo@CHCKkrb`d*`6ZlO}!o^yxuCMR0I%dHMJCRY#J%Zx{OfN-R287j`kV;*_h?xzwVA zxhcnTORnYmn5pUUPYx*fzcORFKv@*S{u7O{&kp|=y?STa^u$eC1~;c(-#PXBPt(~? zuV!D3@875J&urWLsn_B{t|Xs&wf>d$yN9~l<8K+nPh74WJH12C$N4$)qUU?|eqShk z_x9~>x5dksEvx(UW8;=BTXyZ*b+`SNL%+=8HvZ#k{p#ue^mONc<BR>;AJgY^?_00U zg8lRT&)w<sOIAzMPZvA)Ol<wLX?|g0`OBWkFB6lSRyTj`y2QG*>({PbyMBFse*XKn zZ)N4=<mBc5-@a8Dar;=#+q-XM@5ss6zLA|bXU?2?^XAQ;A0HPN7aMCkXU_dQcM=R{ z96#=U;Q!}(*0;Rh{+k`If4qP8gk#k#HpiC-<Y~P8-SK_a*_s^-OBBSM)<-S46Ja*P z<J9v#Mt36m{1#61UJ#Jk)LWBwakZg*<|>KP&+5#h7BsDxb3(js|9+#UhWhpfZAG3x zUMu%181%R``Zhi*ZY|PbRsSyIFkh@c=vT+>>zc+vKX0#2*VEBYcWh*J72CD1+QCyN z>m^s7$JdzFkHwuYE>?D&H2+|@af?Yw{lnRJzl*QAR;Kz>LGB87c&vld`kwMKr#%s~ zf6u@5;hlNTmm*cQ+{EOTc`S!NG`F^uCwEnZHgB{L44Sv*Jd*{_lNwd?@Y2jFwpEwq zJI${*R_~bO+A~Avd+da{F(GsQY&dc*GDyAj>>K3*85QZq;};z|mPl}@+>+H(uP^@i z+Kz$MY@4uN+}AzTA-|Gu=>KKA9dMBKxtp{@o9T@Ro+p>SAL6xp*Bm@!hjzAibFD|> z#>U;EZF~LeeJ$1;-y9OQR=r@$yLIYC{Eq29Kb|j?p5L;4wb`Vj|KH{<@p!x;Z`mnf z>)d6U#-aJkR&&40t-BVM(yIDW+A23y$~q)Jb>{E4xvA0CkEKsAGOWDC(5`;t5<~h0 z`K2`ib_y~F?j7Yix%s?Q;fbSGrCr*5t9#0IijEexiMQ{6uwJW6GOSVjmd2*H2aR~{ zhlD<{xbh}c?8n>p2fdSo-h7^O|HOOo@V~~1lN+zUd4K&{S}D8bb49Jto7t<|Z+zQd z_V>2^iuXqo?Q<672d+Kon$Lc<Ze?bvUB;>;uQj==ruzQ*RO)8(f5X;;l`|JFa1LLy zt};(!#k$3cj&Bzv$6aof-T9^KZ~pb8drsfayYgr4?laE}f8M^vej&D&KW^d8!rS+v zH{Ys@+1R|@RzS5cSY+YE)zhuE-4*w^zkbGYccUxp+f8dDG!^H)s7~?ydm!$@!<!7w z%ejx6$Nef?pO)yO{yqHLpTK>I2i}X?vD|)q_rBpI_h-AhB}*4B?v}shHD~(fUv7C! zULSW!GHInfPfjnsw()LHD*MDI7nB<2`f9U^{7cNY-19Q{_4yCCE1szvvR(@PX{h~u zt#;$d@c;jAOxh8@{-|O7-nbt9$0_-rww_8}_gAO%&9<i=dv*5AO`N8&DYzh2Y12vl z>z}t--1NEpKHTonj}+tee_RWS@0y>yz0_#w_8G}CJE|`fE`7m$@o><Nv=7^!yq|Y_ z*Q4q8@6YQ?yecod^R2w{MUI8{b<=fkKH2`deqZd5LuMXFO7kkbR?6q`-~MNp;CCUW zzg(O<@v`OlZAHI384O;|zT^>j_|jYMG(pC6ZiceF$3N1hYGn6DZ!zXQ^FLta`_7l1 zDlaQI`z{p3?}`;_m~%eMqG<Me<AZ@yINC~%D7M)*9Wb5ccxMZ@l(Kh;P1-k`jU^V9 z`}$vfQwfvWYT$U)svv7(M&oh!+l#z=l7wt~uk%G7pSn9wYmQx~(2|IHvn2iLXD5rL zKb+-ll74>vvB@IZ^G(9Pr6pE)2vq($X}oey((xT}`_4r*&sqOwTI&++q@{t<f0~<w z%2)pMetB=QL__7fJh9;KaeLfX$mRTuj4D}u%==c#=j%Mlfw`yF&cEceL0sef;+B-p z=Zsce*&bl{ImUQr+%v7s-ivoNF~3j^|2*|#kdU$Z%@>(*x0b&-&2f9_`a0cLGY?A& zhrC!*$bNf8hVr4ewP)X6yvkA5Znb;SMg1R6DXVw&F-i9vkvk>a<8yiD<W~h3TPJ$j zKdF4^DHK!V{<QkS`Ok}97w&j+^~CoJw?8Kx_^g!~bJhKA&YOGc3)~_PXiwX+zSx1G zn3MU#%2y>#FI^>Hx=dYk;YCT&g#M@OuRV%a-P4%Kpl0=SX=2gW4?JBTGF&Gz=;+1< zE?Tj&$IB#pk<?z@kFOcprYDtF8(p|K^Vx*R+o_V4k>?jMZP8|E-&}kC@mjlt`p-@k zCgGDc&RGfPUvpcuW&Mn@v@WKw3+i73cI5{j4!bksDpSE8f5W>!JnsH@{>W0|mbd0A z-UXj;t}W2^;k$Wm_UpNO*6e!ppy2KmR-y31OI90N?6-UW=TMsRv1j&=M+zp}OeDYX z2PUVp&A8jgx=PqAT=u2i!-S)~0oT6%`BXK-HRb*CX<3`4J=B^my83VkRxF<MZ2?<x zagEfv=%4FrBOXimJzwuRtG&Uh#zd(*^x^iKexGFKT3kDG=(#ml6h~z7T=mO|ajj8x zZqqJa=6?RHSZKL^N@3Ua%RLWQPwa^kT~TDQ<;(lN%A0YeOmQY>bSIhbUs`<b|J|qe zx|Nr_czj^8uE{>p2i7@^H6=N()$>}pwjB7c!&k>!73EN(`nt>H?!PW6spy}pe=Ze& zUF#5V{qoiNXWDoFx!iv%q0OB<e;vnqmo3ga?}^Dh(NW;PSMg)w*~dpc6wM`%<hgB` zJlp6&dr|N0<&~f3_x%%a*EW4xC&eA79)I!9q15w&GR$)S7<krkY=|`V-=VI|RW?a0 z!m(oo`-gKJ9PZ9eeM??1yS;6H&>Qi1IZi8v<5%|IPHDJw-d;0s!^_rLj~Gq{1e-<G zt^AX4rm%m;^UJGq=iit<|JT!(mg&XXf~Ic5zuV^8b04m>l<m31+Oq$t;-l<0Pfl`a ziK{5eZB2-{cG>vtPxFayMI~pyzhoz4(UF+)tSZhtwyHQn=+6$hfO)xl60EDj{ZAWz z*}Qdua$9o80S){7%M;WK4=lR<abw~U&;5~Ci;n+2x$E1i-0;cnYg#_fZnfJuQP}?J zBX=)dEB<fs8ya`*+qQVI{Ezz=-#D+{edw`!eeFr+ixQu=i4>YY-}c9T%6X<qPvYk+ zeSSZ8Q$}e|k=2dp?YkI*`c7;t?A`YB5YzVEoAwlyKMnrel)r7E|4*4?0k?j{zb~7* zb%ODJcQ@y_u7CS1%=mu(KFypwGrZxEMoXt{dEF-oi)^n=2F=&LJpQ$HPO@Izr+sf* zd;MDjO3v(YXFZhr$L`_biTvWlA#+bf3P1ao|Ks#J`yEl&|32YYFN}(P-M__0)H#WN z`AW^$*=M567pL*3Ti$ox=CSX-kJn5FC&h;%H?9>1d#NM`&glDiJyhX9=kW#+(MJc~ zzIgWh)8YN!-rqg`@4n&c8SSg@O`mkvBHJ~m#Vm<uLhVke*E?HQyqIm!nErfc3~Pmn z&Y8zvTaA3bvbKj6Z#i{9W2sj9-mnRWYyNxJ+>N^!8PL$%QqQUVk-K(I_^Ew4GQocx zS5AD;U%2=C0#gGEnIFaNbN2HbFm&x+&--EXG3!#6rVP&&3@U=R9{i3tB<;S3f2Esr z?XHx!f{t7v+jlJaenzn60>^uwS1XTkFy-B<n0?{3sZn-bmh`QFHyjK%W*IEI-Z6Q$ zS3-dF?Mme)+v6{CLsgD(I56?{PCT|XO=Th9f}<Cg-BzxAD(SZ(?=Rb%UQ?-ThGiGI zmtE}-ZRp5mc9Z$|FEzQ@v-e~#qnU|-U2elZQ<s@x=T+6a7BHH--EP_C5-^oP;_mX( ztP6T(b=Mio9P{G(a>cOHTljfaLdrEiCOgJ^)=sx_OPV<zEna#sA#cH>lAIX^u|a%C zm#@-z6MQH@L(bhb<Uve_+!Sp_A31~cE!r%dFRnhfV|`G4>B?61GF`QAG3wtYso8$x zR$tgNxowJNkBw}^GM|grqt;pq<i|<o$X@5rx&6#XQG@Bq)RQsgl2;C=Pwn$Mb*dmX z>wk)U@~m#&A3JAE3CI&W&cOMVrT4g@<@TzC<&D4pG})LHEWM!l*=5!HXHyH5gO~zN zPW^PyV&_VKtDyN$t={jc`<kd2`gLw{#Zp~!d;8+0@wJ;Lhi==?Ssc|f=k4YQ>rb+U z_jtaSwJa~3Ey^GE>-OxDYvGv_BPS`CO!0A_biE~^CtmEn=TcdnefcYn8L61heR?8r zu9^ICcU2APH}Bt9d|mf@b8g1!>!q&8v{k=rS}$jA=6Sc&=k#o!dtc6*zvs+Z{q|3% z?V9NloR4i!RO#7pfBo}W#5k?Kz^gMwoNJX~?(&_T6*ujlrCoJjGV}Q|{cp3Se|ucG zv^;on#l&N2-r>Jk%XdtEld`;DrGCdou6y6w7TX6;^?I~YW6$b;Z|bI=5})z)j-7Ud z{qz;8+H%J;h2Dht=x9gt^_m7=>GVB4quq?{SJ*l0I05ax^~)n)IlrF1;NOofvA&<) zU97*HZLF@!sEO};cjlC=QW(eNGgE(V@z`&|Kk3cO9-n5O({h_^&c8Y|SC{eC?53Eh zf2{r}9h$M{>e@xsZD-Ca9TitQ`k$$LeQ~$5c+vcCqLVK_Dob-@IC1E9#k%)PPJL$N zW5{E;88_iH|G{0}?+^T&lxxFq(EngVf7*(JlhkkeY(D10dvR%k+0U68?dgKea-lch zZ!bPw@O5UkOshkg=9le%_?4bEIX*qKj8VP%g5%9S(k_-Fvm<|THj4T<+_^dPIoqb+ zKQ}w^`W)z7?WXenr~Pq<u)J8+74rh_3ESVeen9DPgzLGbT(Jwg9^N@*_s6MuqRq^} zc<KLZN<$Vt&Ykx%?U?4o`L%KT!UOg#G~Rz_vF!AND-QkgWfePAugYatl)Q2}_j~z| zyy?xl_g3U~X56~(bhqcvW1%h)YnkqQwRMM2&9^)yuKLPuC6m4Q16f1O8^VQAN6$BQ zA9_@lC8eBmWX_(7%x>4FtlOWnCZ4#pZvIxLOeO^m2FBW}O~JP(AMc7*mc5*C%RD@& zFp%rPvQ^!o>w3j@X|oGj&t(2E^ZTvI*CQ16H|-Nh+IZ*hkEB&I9<4e3C_h~)ExSq} z{F(pr4eDG6-xVCVzB2y&>iw?Q?)P4MWi50dG*M^y*YC0{l|QCAp9qmv*|KBVsq0t1 zo3GiFqY*C?*>Zl$eT7RW<nBj^PPuIs^+9jpqtntq?!R~?wlb{3a(4XX%Fv5@*xt95 z`g{L!aaS%(e_DI!b(q=tXDkw02c2I$D1CnI`J^8@i=<n=S#O{8d5w5R+*04(t4r1X zxKB?DzF;l-t&R2Cp)IwXmCM9F`{ld-wc*{iXPR_`>(}f%PsR2eYdaeA<5|$+)6(_g z8@W<Sx30^wbKj8fv)VMISMyW)YVAEQrgvS<^DY%HD?PJseSFTpDSN+m_iYnXIrJ;k zdsBpaTcmqffxBOw`}(zA7I&EYm%GGmJ*v9t9jAb#f5asBb5@6@an0guGMw#vf4Z3~ zchDQ||7FLb_fF&Z9=7Vej%wMfmM5J894h|}eb=d-Z<@=xbPGqzCByx`1rlpL3va)x zO3<v&5j^O(!o9p~y-xZ1Rhia$%KOZwt=Bz#{b<+R*qW=~&h)x%{_C>J^x@n6k8jtU z_-vYW^@RJT8wFX}OTN3fG#xFPx~b^jrv0<uRDAbYnfo>V+QlH=(lz0aCcTgTJMFns z?F_^6FxSpxpYPIzn$jEDmPR+JrOdx@D?MRSvRHJRl-6an6`q;~hoe`VPg$bvvh@1V zz>nXz_A<EFpZK);%Pq!}yBRaNrmV5>x+k+#qA5tvVP)CEE8zjN$~AJ!yBuRbI@W%6 zJUqeivGY%%X9_p?-tDh#oRk(EzEk0M$%WJ2D(jV5j`*eq&ioU=T4a*`>z~Nqef1hP z$rEPteK2R>c`ET?iS(g1*1am1G}9~QcgoI@(2$zl;uj_9w@=z{sf4Gv{7D1(lU$M~ zH6<#~yq408ki57{p)`iMCZnV7UPsMTH@1JwS5!?)<{T4@?*1(1_kp?o51UHBRkn=6 z_NL55?m`)tSJ|~qYCQR}Mfrb2=duG#qAfgJ0(V1<ViR~OxXc6D6GYg5p0NE`TeBr_ zZjhwM+l$#Qo{QUESFhgZ_U*Qe!%5q&r=|-xyV*UKik;}ZEKthHDn}*AC{xcS?V`tz zAn8ZB%$zrvl9oO!iecJwOI@5_y?%zj#U&@6HH;B)ldH>BI*o43f6U1&_2r;|z;d%0 z-qIhYuzgB7bz*^dNvpTl1@2{wR9r)j3V&(SsrIdP_g}&FICCxI+J+ljdyQ8;OiXiG z!nNeUXR}l8_t;kLkx|&r>M(P5$JT1L<CA|q`@-H=CeoCAZ9!v@&eaV+`%XMiQAy?1 zxZ$V8^^;-JK_>GD7MGJG88$FUI#1<FziM}O!(IRE+C>q&4iznJRGD{9;_hUN7Yy^? zr)l3lBERsY>$3vqD30Z44#qA$cB=MCpb49>+m|cB3dy-aj8-0TG7C3s{rBOE(hipk zY(F-iIke!(JdOKI0Y6S}h-q43qW<X{w_$iz&DPb827(*6GA3?h2|Rja(aIx1sdw9F z+|A*X63$t$@6m#Nd8`&b()}}y*tDB!>TND*o-<g~I7{x+X@>`gd35LbzqjG@U9pMJ zj6)*xYWk6ddv{&Vh&bl-ZO5;g(%9sj^Gbc*hfl1r{x#F=fHFhF5o5NmwJb{$HQm;~ zi~jR(heT7ZWccDa38_u$TE6|oOlHB?UgxWrJdyNWZgOnX!QL;6s%qWN9`#tsskm1A zXkpHk?)Pdj%#+;Q7*rw@{25(DOtzTJI<n??$eQlgY{3s>4kd3BeDYv&p+&Beo&ZbR zgS5|QR?KY*>M*-fVfMvx<zsGjzI{1O!6$S4#Vg7-E#6w_yGD5pi^6K_;FnfAuFa}o z3*PcxWqWef_KhX~9*b?-y*c-FUcy!{=|HA!*IFVx+ScBl;5IjBW|aOhhO#}TitCQc z+qJyA75UC(>YJJ^cYdnu6tCN~)Ot<!EIIbd<-8LnwYf}tBQbwXV@}!Od+$P{-btGD zBniIx*L!2z)tP#iWmev=U2Mj?<3Gd8_`?rvRi8fXJ0EsG^8shI{@!lq?r`0ozxJB# z_+F4w^R?j9!-B3?8E&6m6khw3VfQ6t<BJ#R=P#aGlC*a3O?|Cxw@yFddN!rIR&1VG zYJPse61lujZ>IOGcpTuw@IfWRPQGT_sgl1=>gfWt|LvYW`*CC5qZ@9GCs*Bh<GB7@ zZtSTK{d<!eB@Jg+I_$h~xPO7BxXqI}D_76cy7pdpxsmbV$-+Uef<GCA?Yi$i^_76e z-Q`bbZ_0C=wqNJ$vZm*AMN{{9rrm2OelwjVwRoARuIhwGlO2y0<;UK!+_;(DR#f6n z&c|;je7EVDe0p+K^^(Z*H%l42^Zv4~yW7g}Y0uobl?4WzSAJ~IdB_vS)->&EqSMy% zy8qiQ&25lsyI*LyyQ)OG)p+igKZj>KTm9WzbJd_$(yLZhvs5;<RQK5|SLX|#B|eLr z{XP75Ls-&1ecANZ{warTBVSkLN19z(Bk=wl`_m;89`{7(?W)`#Uns@ApL?CoU)u@4 z*PNWOCn{l$ywf}@^YAGdM^7~D%l)mF&~^3V&yLQ26VL8`!e9RDPwf80TIR5@`L})* zCQNr!iCe-Y9;<RxJ?@9pM;p(_){B;2JYf`lYHr!S@?+sm9gh=}9@jN$r+<z<8sK1k zx=a3Xj@!Wty~m2CioJf^z;VB8PjHEnNP;mBqf3H)y<^51-`nC}Ti)b~XdaZ(5}WRE z+0;GV*>Gl%lE`eI@?gukfr~xt!ppr)yDu+F|2AuPjN(7Z-MQBvaZXN>(|;Yn7-{@D z<Rtg4$HxmNpFgw7;OC$DkCh~=e|=mfuVVl3tYc}B&MxPJPukj#`F;~N6ju{?c~DGt z(t2I*Bi5&ns$@@-zwve7tZS07p+S#Qug_L=6<j9%vn_rt`<aM-U6=T3{q3uN*`@Tc z$;|c<^J;k*Fe}a>UCX3Pl-pN-?(^3=`;G?8`dj?>=A&=bD=xe_RlD`~VP(FnTzgCP z)i0*^i7(TWw$-{Av@t|%yWL8Q{@WK<sdb!=Q#4}vQQkKB=MSOc8~2qIr$;}jxoxiN z+uc6l_UVJ+dxKaTcU5vVOMiNG-%77y{?&N3&Ay?@`pPjW1|flWHvNeDtI447(`(Wf zW4q6jzdbj%-}1zP>CwDTKhA&RkEr_4`$kG$^n>UI&Q<J|KlVgKbHBKp<rn{B#p3E+ zNBo|yIx9JA%FAFgQxS<xZ)b(fxcudONW{YpYN6k%MAl2C-%gt>b=~~U=OVFQmVUlN zw@PLC+)Ba^Pj^3RoX2<Y;M65W6B$JoePdYkf6MeQ?9HqHyxdWf%$xhpX!WF!+Vo`Q ztDo1h7)HJ7-&`8KWFK$*@pVTz+f-ZoN=i&444>N{*;=#uH|zgPss9}0_e;JPcx&@R z@9yW8&91@Ml&v!F1>|{)&OK~zur^uC;bo-q>!!J;0eLYi)_*>wX61YOf~(^JpBI-| zCUX9Ge6eQz=G#ldceW;{J)1PwRrX;^arCZ-mp<=2_)~T1r?oou-kL(aImX+MXN1iY zKCN4G^7M9lp>*Z~c0JzTlAq>x?wv38TS@e_$C7&<&lY)i1*OHS8unB^kG`tve<7*I zOKf6_;C`E9Vr3IHtbg-k>T^StM-eaf-+dS%)27U&+neg-bUIkXb*|PX*$I9h9!Uf~ z&#F+pv~yeCi@+;O*X2sT4EoROerBuS*()!*PT1{hF<tC?GQC<o`3xUB<J%I32X&&) zcI3(*x7sCN9U{hXKyKRF*H*c2efk&!%jbTX<aM&basKKXR~RK9{Lg6raClx7f8K+L zHw_{?8A{*Auew)w?$e8}jvWk#YJasfTw(0saG13%k#C1a;I1d1d>^fHoi07~!pExE zKSd#%Hhif1^7r(T2GGqW+w-S-d|P+>R+&!o+9-p~vpt{e=M!?P`0>nOZE4@pKKJ4s z53h5-FRNmDI?Kbk>A&2<wTJpQ$FB;W_rR-M=O6DK?d?Yd*sjC~F4@KW@lgHh-(FuE ztLLvtyx7oq&FF^zA{(h}`@H`Pl_yT(_T)Xce(M3%%;{^_cy~VQ+EkgQuk$^vPRorW z_4A?av3;-Zhpd@0SJb1IFLb_$yt?|oTdI<$at=8wyvbU1-CFg0NMJ?ACbJLhZ7FKT zo6<MU`aW+}N6H$;nJ;eaPf`ClO<?T;$^H5BZrNu)z8j>i^J>x7`fV0Zc6$Cyz2;qC zSpRtYs`X007P&3ouQ^%fdt2w;S-N#Ee62FQtDQqTf=;MuO#NtTxViW5J|Wqi{{na_ zw(PVzc_nG`3T6QfNpX(}l@-4xIXbquAG)N<`Pk<E3rUMr`~RI{Te0f;*@eevUt2gW zbop<O2xT8Lq39Vi<fd<Ny|1(;A>nl5@`($BXR?P*k8AQen{e3b--K1se{Ih0=Q27a z`hLcj>6X)f^_{(PId1KVoQTC1i}uUDuyOK#wrz5U^Z&W0Pr9&f{cU;r;1xrShiw<~ z{_icdJibUJrcwEy@U4G-=^Nv$_Pt!ZB8x5Yp;&NNOfpl^@p(5JRA>Cy_HDE3e%bc6 z%Ly@-R(|3!I=cTqhgyos|IO9ie__GovMnp>BtOPXoz%2BPc3MFP{Fz=?OT!iovti6 zR<Q0^#)X?3STjFd&0lwo>&!lv!{U4#me0CpmKx1FU440B{U4RzS7O2n+;_ZRX7YeJ zUgT?JblC6iBQEg|_X%?+r9JeldDG^>Eq<FZ@<|V)-hz8N7ay6&nrr-3`7^6dv>@%u z#s2r=U#bpY^C@@tdY5-;{oe=dQ&wEwa_`q}{x1J}j|APdn5yks_O|>9sILe}ZV`JR zSyAA+EAQL#mxcTGYAC(zPsusoqgm+PQ+84L|K$(5tJI=cDt8>+yZp<wI<>cVXH3oh zdT@R38rHsd>g(Jsw;DOjF!Oy@`ERAEn^xtuW9MDflx{pYk|X}ZbdpQ0#g-dKg<Lk> z=wAIo((_7cukw}~-;ItLcLl}-Y-UT1)=$c|vJLONzih7mh8Q!GoJA?&k@<femgO_A zm28{wR{X<?v;%>M@;%QBGGDv5!6{kvYsvnZZ}f5=tq)WZezZ2d@|sA`rYWCiU7Kw8 zzD94=yeg3c*8|sI{(n-6YkBQTb;C!G=Q_MA&}-Npf90b_{DN~va=ce2_dPD|Sy2>u z_tTW3Dh{nrUpIfUe-T_6a^}zzTRF3;_WS<Ft)=}flHOkTnHpFT_;-$9=f_6Fd#A0Z z-Yh+@JNLi?Ppw3@V><7Xdpy(xq@<pNFPr~#)5Bu#Js*F_{PdKuoi3;(#FevWcb>OV zobstDdeh{O-w-^$kN2X`x@{__yI<(UUie&n+bBEuqM_^lLYoz9eY|g-_b9w4U0SN! zUh(Z<=H;u;&hg)F<VxaGdiQ7k{)PQEwY6W&&HvwB@$RF=@rs2SeQBZIcl#_|zI@^r z6};KAGg|3h_vB-Ie0!f>Eem`8q>n#xjc2LIt@#}s?c0B!>(+n&y2fQz@!{u^mJz0w zLN1!iRCSkCn^f)Dd@F3*jwI&eZ&mL<*Ikpty^vYGR=)b4c<kCY9uL`kUBC0Z$mP(u zq5L)CwPdQseb)C{npb8$mfuqTdOt(T{Pebo`b&g7{aY{CJ~?k1^{b@keC01z@duti zrT0%-QsOK0<0@0Z-=D{OwFQFzonAR5r7+H|;E3_t^ZKXmo?FLyD!*}lnC^|!zPAsl zMNR5#(=T%R-f#EEEB?)n!(tk3J%0txY}s7>dh3U*)Dv%1^KEU@5A2;FP_WnF!M<-V zWVP?KZ_@q3vP8LX>*;-3vu>3IR<{1%&@EQ?@SNz?1#XqA;;wH0CsM|+$1RGp^1k2( z+ij+^Jm)bvckO$)z5aKbbeXM&Xw|g8zw_KR-(2&$UcEV|HSp}asIO<gZ9K1X>ealG zd5u>C|NC4!as1r@H?7!rsZJ~hj|-+e;ytu1{)fkIRawmiC!EE$UYl`4@oVg^vy6%Y ze<$iE?VQdXdGPK{v9-sV-iAJ`(EjVzdUUnnch34p!A>qMk@ICYHSXG@8`5Uz*JnAQ z_r`>Mz3B_gvle%j{|spOvF_GmP91~2uWUQqO(#u%$X@zkhRGMR=U3(Gy_T%e(skM$ z*4FpP_t~f7b-p(@ZBY~Y!x;Ck@sT-mM_Yc0scy}uC+8(RbgfwHCVoHm&&RkkMMP1= z)8&%wp6b<tCnxDma{e{XCYL#Jj<zz(V{_Ljd(*@(afxg?#<9xfRQ1bK9bx86zZ?wF z6!`Q@qg7P$Q>x=ry}Yv;Ec^A=-%~qf$G=Y0Cu6PKn)3Evu}6PjoSB&=sb{FIzIl?` zO-BtE|NN!?+EZ29_3uj`U92H~=uoV|kK@1W^=(<sN)$EmTAK6kT+kMi-hRid{f>T{ z&5n&1=e1<$vu!cA|FzfVmb?7h?DlV;9e=woWH!3cXiyShY$egkH`BHLhD&?gg2Pf9 z+YfWLD@(K~|7^EE#qa)--~Bf4@gF?L-8B7m>telsH*JlaZqcVc>GQM+yUqBfxo7a~ zd99(y^?Z#$_YLm}FRm?QY4iTJU%x}>-N{7@P8qRpny*kiIpfo0uXz_dm!v#lJGmw2 zPC?fF6Qw2%Mls$6F77||Lv}Q3J#T#TQv1=;PtMyN9L^r=p8WDr;ipHZ^ml&rJj!|A zZTkmHqvM%&Gu8L;CD`Y?T<g^S=5Y0u@iD7}WDk$e5$aiMvdh*~7q3Y-)01Hk_>HuF zWj33u(pP1^&$FZ%7))ictY0xS0Iy$}@-$w!PyVfW(w05}&V!6h%$`%<@x2Ulsygg2 z>msw;@)C2N3DfeH?6zK_;^t|7=l%PClHW`3^Pj7%IM;msxrW9`Zmt=M8^ao>H~e3? zY86-W!3PC9mM>RVQ2fEiu~+co?x|+`LJjr@ZQmE#dVl53nAf-CW?0Or|F*-leD~H* zd;Yzt&3#>--)vLrBwO8n*MjY?1?&A?u6L^4+S}WYA3wf)$&x3}pD(`n;?${At5&T# zcI?=+Y15v5iZ3=T{XNlhMoZ7^14mX*SaSQpl;0ga-80U-{jz8Cl0Bb8zT_qy3@tiX zoAog*?_yNo&B(f+w!5BfTlDf_`0LEt-_G9o)z#JM>FN3T?++X}aO1{}A3uIPdGZ8) zOvR~Fr^4K?yXF5+48Q;H!HI__jyS)6@%F=&{Y$5|Z@k(5(_URW`~Sv$`}S?zxN+;& zt(!M*-o1PG{{8g@1qBrq6(7rgC+5EX_Ws@BcmMX+|L^PX_xJPj^Y=f0{=B}vzWl$r zaq;o@@7=Srvt#;a|KI;WLGS1KxsU5V?Vms4NIgr>qx}JEPQ3bXTs__V)#?-Pc$kbe zmurSSD`^kh`*+Wk@R_%zStoMVE)1D^U7q`@p4qGQr{sN}Y?SZ_{uOF4N9#pL<g5R! za;i+04VE+3wB0InG&G5{k#dbv$qM`7r|DNWS>(ojlSg+W%NjG{WTJluoOn0c=SRxM zj|sUe6W7e#)Y$e?%c$WbmrJ~et?J*!3@i#(fA*Y8yq4Mfdt*@YwSJM=&pFNh2kg@q zcrO}x`%}Q-^=~ig%rvOFdhFHRlTKN>j~^bJwf81h_d%Yk%WgFvtvbGU>ceHb7Tdr5 z=c0dg*6V)rUoscfl+W@mzn#4Ez46s3sq^0zUjDIQ@a)k3?iHMNewGFQgHIwint3(8 zx9xcQ|F*=Lko@eu`}bPi{cU{f+P5Dw<QB>I-YF1n@K`%pYt}EJOA;xSHdEa*emwS8 zR?y(mb173e>dxGDVEVh-WsEFY9Bi37|D24kbRV#MY+&?I`?7$S_>RmMs~ujr?YOW| zDR{;S2D{)b2EOwur}$(%Op~~Ll216udEVRnIene4SIc`{yR!45PM!6cg+Yz-|I{MY zZse#Q=I+`SwC~!xyrs9kZpdBkTgiCKkwJZTVSoB@#U97?>Nm<Z$?c!SsG_;yX~U#< z*)J>JKIq`Fk?yxB`z~s;X6wI_?X?RVpYB=A@QufOJCE^foe)REWjmILHUH$yz3KRz zi-%`{w?PiaWTU3Tj2+Q#2hYiEDs8OYyy#)d!Vm8D;{W_Ie=GjJeyGlkxo?%!R@Y;z zUa^;-oAvG1z2>gY`}23&iHWJ)(0X&#Pu}d$Ysov|)>1!;t{jrO|7B~<8{V&at8OpN z*gy5_!@YO)1-2`uzZL!e&;IpibCKh7MSeL?nJDvm#?_!r(zlwpc1_<BdUw6h{&`=V zFRH3D%as0BZ?>_2{3u0WLH)k-X;W;&915#u$o_eDUdwgoqM6JkmV4GLO&8W;V)vW7 z?a5-1=aa40dzLL>y54?ie(tU1&Rq!|%)4R&-sHIF9qM@avq`rx<;|moCodembiJ>+ zXWm&3>#&9twe?Hn%N~Ai5Iw7M!#s2P$)n9Hr|+o#D(%PBe(SZ(EXgU-Hfb@}qy6V= zJ^hwecmH|c5}}jAx9W6a_Ut`0<%;aRH>Dy4ci#ywS$$XTN^x|Rj9I+gp}t!mcf94R zv;Tij=JM%NwdECxTi98-vgY4C#kV)F`{(JLXNzm?!m=*h$evPAI^V!iZ_&pqQzslc z?`twy<n+|Ctv7$G<tZ+Ck!H`a{=uKq?Sl0UnkEt(j@<uujqhcHwidHW`?lo@U822e z>IWG%B%HQ9;62IapO`^gtXtO=t6R~rFO{b2SwH*GtUB`%7i)Qn{QoQQk9(`k#6rp~ z!dsr#%~}|@Kw(~z_|wBy`xbTFnmA{%9bZ_;NyYBt&r8|m+C}EBnbPvv@Mff=q-ucW zl<OOd82_8Z@OBojtP-uhw?wA>aOk`zm(G0q`oUbz{YLBaeK+d%bTQ8HbUN}u^<v0g zqbIBv>->&X3fL^Q%bYd&MZ#2@W6u?PV~RZ#PKbD3x;}5hnQEcK`TZ<vuFdyX8-8A} zB6PtSqf>{QWEqScHJSR9Uj2Ku>c^4~HGDHJJviPvx#icw8olfMzUSh;DIJ^r)8>8g zl6RMDOYhv*d9v&KhA2BrUpemkug)8vczVsYZoikyarv~FvuoF7eA#5Ec8$}0$FqN% zFKHip8j&Is{>8||*Qp|U$^T!W7436dSMx+&ShU(G>htnHsTMvR)1BrDhI{fAvpvqf zamLN`A6Jperm(uHmlWcfPu+a1u-N5yzxZ+fSGJ~J%34R~ADH%AXq6E|-h{W;ls06R za6RhN2x_#|@?WMiNA!lD?Zlt$O?FG=J*5sG>JVJZejzw<)9%nN!Flr+im$%Px~M!% zYs%%)7yZwVvaNdGxK(23b9psmk9RBmsxHiWr{?7tcCM;P&NEr`jmXO@OAY=$m$=*J z_T0pcC+2;TL;dq?-UAzFhn`ZaKlCkskGj}hcHx=QSKlwSii~2n*Nx0%zwIC{`m6lt zvpv35hoh!s{HW!OdHDB`i&xWxKljxg#8yAz-W=YNnzXcFVMS?nkI@m9T}#i2?VnM* zFzB{lP}+6hP>-tPEA8?m7TIa+QE^yx(#GnpywtsrA5X3pm%dre7uPzgr}^4~TWhm5 z5B!sPe(3P3DAVPQkK1yXS?c;(7>)<+-;sF4KX8&=RmjuxVIL-J-{1eoQL)`><BH}@ zpE;M7X)ZSqj=HfbQDOgN&AZ?H*7_=ETwK_^Z?V#WRT;f3VV6DcpOVvYUh`U__$uqP z)jUBFRgRjMujcA!FHfj+cYAt5h^;VE@?_&xdExZ0NpC+nNy+$zJexXe;`TXx$0Rrz z5=}1g{Wd=!F2ozc{AiEIFWv=WESHZwdLfiJ*Q4l+r+l08{x_Ru-tDk%?l59$+VJN7 zzm<QP>Wr=IuQ)Ny=@t1XY+JP2(72~q{^5;<u?eg1sT|X(ejfQDtFP_D{P2_erPLOS zZs3plw3=`0#*Lgmug#cX$RVC|>;BH~UN3zF*K1yrKlZ}(u1|Q6$O`L-)$eL!_RL%< zzf!YU_MY+1y)$#W)~w{nI>;cH#^C#B>8Xy_o)+^LKGFO9;%!G_`qjc4PS-thbMJm= zTzmZOqgRu6{ffKl%>KqDY5mVW^$%<69tquP(XA6+yD-DRP_%`?`y@Zd&+F$WskyEx zdE=Fu(5w>uG=X_zRAa0{<C$qEu7(G!nHFJmCHkcK>kYDNp7HtxzF3_%p^`&r1v8`l z@~rqaMFEvZIj8D;SZ!v`yZ%Hu^1MmZ$!&JGyl15(TDsl4m+NhpE5jXReR^T-p8J6z z`ExvEER7!?T3P$-wO!=)#ar$O={|Zl?`zu^$##i%<~?siUdB|OubY4WuU*XE%*1PD zzPg1E8?2cpH=5pvdEx!m%q6z6p>t19V#b+GpW0`3i%d!X8(!0BAegrBeB|rD#)ctG zc?%0PU)m~8J14Pl^T|7BE;yg~uf6=+^JkxzW#5;t(NomtUVOvdz94=562blYU7>y^ z-=}Cz?)<g7^2e0<pRJAAbskQ>e6h4<sd;*r<DJWztajfxpZq=i@$Mzri9*{e#4m<d zhgn^`9~}Rz?r_JtXQeLoEBdldUY-@hIHOGa@aamXm5<j=)1Ccphj8Uu_vtg=8mUfl zpOPNw6ebrrcP6jjeMQDvDf8Rwu1~vn|9owj?AMbHhdygOQ|D08IoHng(0l5W-yXs5 ze<z)rF1K*+-etxc6Mswz5kKLxzVv1F(x*N*77B}eF0;OEG2!a|+n?r!ukkV5yj-XI z+*vkho$C?n4!pk_y^_zZ-e>8dS^8b4FR{OlIIx=G-#o1Ym;0|CeK`5cRq1I}pBz3j z{N2egd3A%S?K@S;;LE<V|8j=EUgF?pEUsl7zvXJXUVXTb>)$=P^Gm&#J<TfpBq=Yj zu3dc2M`L3l2hllE&2JKT_1xHRK4Z^5zslL~C`a?x?nK9DJARqIe)qCSv0_J+|4;k- z_TO29DpOxb9gC?vevS42ORg#R`1X7=)?T+<=OF)@Ad^)m`Og*c+I4al-W1e58q6JR zuv(B~_a^?wB`z(M?5|suc?wR}MhCL(XN}Z)eOS{|*^O68?CH*yKT3;A_A-4oHA}Kt z{y^~f<pT<@_dU2}=Wk+D!7H`$E&KibU4Ps~OO+%_(*#NzJFHqS?zU=-xi<Io!*k)S z`7O&22H(B5^`qOuKS@#n-|8&C$zICn;@x**)ryI}VKcVP-m~~f$K`%Y)(;NX-3>~4 zlI{P?{V|@*E53Px#%oh+UP-Pm&JWKpRkd(ebZ$v$I>MH9G_UvYJZ{F632TI$3?z=Q zNS~~dmiaL&imyax!+OmbCI{Ikuq;qpE4wywYd4FEZiH)2!B?peo@X!bS~H7GetcqS zj>H)unGc6_etYuIX_bGj^0rubAIHrc!;RjGI(w6KgEum8pP9CovB~-p8=qyq@XF)D zCJ%)yrap4G+@M@t=PSo~@$&bASJ&UL+*%=U=|=3OCj#>I+n+r88c?kjx9x69&(GCD z;m`A$Hx&Fmuk%UM@0pm#-vdU98F>>=u5U9p&0DEzxU%>9N!=@p&R$=6H79eeQD*5A zJ6kWq&X1XfPcofZ)+k@k+?MjvbL%GKlbeLEIDS}lV&#)B?`0F6ZRdaaFxlVg<snX$ z4c1$(uY8%wxa_@tL`bl`ib~9Wk!fG|RGbs$75&d9-mZA`>w;?yjT?mRW>hvVWo>*l z$6l|+Jt*d|*JGv}hJ%Nc&%U|D=zQNZv~2P=%hdUqw`C4Z-1%$O)$@nvZ<OGU;FQcw z70mne_+`Y!@FyFVKY8)$q~7<mzH5t`nuGr3)$e_M{_p8kn{!ij{(X$j6nr`<nlG+Q z%#2TLLsZaZ*GWAF)0f}iVlopw?_Iya|No5{_V;J!Uz+jBPjB{=g$<cDbI%`jJFzAq z)h^Ot_k+{VZH(^8I5a=|E<KHz>wEssxb9gQ;!g8E=Y}f%5BMGT#k}2SN_Ap^S7JtT z;t!|9C%%a$zJWbk3j*&PU&Qi#(UK{PM9L=4JFuSFHsBE3RA1w30Y(Q^e{c8T@}6bh z(7*8u$7`Pc?nl3+A~KUNe&J7Elbmzk?@IO2B*{A2e3={5M7+2UN-D+%%?>iU5Mi_> zz^EwL$Sv4PF~;ia#*$|j_m=1_Epgnzq5HchgXeq3vBJWJr~@J&M0C;wdq0bGHtVuh z3Hv6NtV!Xh_;!nLi5@3Q=9Kvw)8kvF-REd#W%N=g*m=p~-NkeU7lxXf9*&2jwiP<B zoYLz(p?B_#+}V@b=Vo$>JUn=B?!iNj;ro6tJy>yI*?*=V`5!rb81uC^Og<|k{I<}= zXXBjO`*Mj4Q+&VqXP$l(kg!z#e4><sOzV4%wk$oy-wc~y9gzPPepF=7?fp(?G_HQr zYGKpd>B|`4xgn8tnj*^^7M;aqOP^K5&7SR^yYt10C7qv7iX2gO;B}t1zp249X!TZh z&9$bhuDoG9C9vV&{`6DX4g3>s_4r@i`ZKui;Z2eG4XI4)rcApS>cu0<r&Q_}Uy!P` zVX05y()i}Js)dG}ZX0x>-)v>mNl32BDn0kw&GsalE$@Vm*wA;?1$~Md*94aT*k*TY z!^&%mSK4h|xpC#n%8e_(ZqwX0ciYeH9>voWi~HS+<5xZE|J<_dN7|Vq*)!{zjxRr# zlg{+$%9qD-YaY*ir);mevHWS&pBwi|YkRjOo-fzfr_K>!7ILcUsP^IKhXfWR-@Z|m z@j~hGnfX(cW3|Pr(mawU{`efVTXl_=m-3BCRSS9T*UsIrb8f{-S+4+rbYbOf&yphN zANzIt>ixT`T{@5LnfE2KVxMi|Ipq**VW|gy)2~@aUVPBcoD}HIef<97Of#lxp^Mk0 zH*&vz<F@~q(W@NaCoAWFs5!$ezd|VO>ywurCEYuFW{AC*!g2kP(z_;~;^K;baRndl zgm4_&<7E}{V6Aie+_06#ndx5BkA!@0Ggn(GVZ5A0LFw$iWoeJwqjbMM*~P{h{L=by zdsIzm>Td3jLOhNR%I_}hweu9*FH}8$?yh6fE$_Ixtap^V2z{SvVtirA%ctKI1;Z3K zYI%HeV*b&6eqp9#+*#WL5AMnT;9yUDKk1*`>A5Ggwq!9ZT7UV_?+xA8d5u3X=R35n zGC!rTMq}mrbuINw>)(6&u7Caf-y7A^nC5_>3Dt*qsy^fev<h0YOi3{~B$)F*d~fj4 zH320ON_Wzx25;DO|L`3TxAKb{H>!wr8Be-=an7I9U(Q}QF_HJ|{=eUhr*5e#F?;hk z<4TWxVT0SHE%yoz<-eZv@XDl%FAARVY?0m;?rx*gqmuOE?)8nQ6wRHD<b(U}bGkX} z-#i{JdW^fu`gusxeY5JjJ{51Tm+sdvP0gP9AY$HwUGpWLE}UJXZ1(e9#iaY$K@)_n zu1<cT_%>W&@vXT=obM7oZ+`ZqTsT1DTmBBg9VtxgjYmX|`jmVwU1Ie(;s4#c2ae1S z`OqA+XQwaQ+bKI<?%lC-x>b+ou9JI@&YANsD9`O?#L<X1(%(14e=!Tuwfi-Fx%`Tv zNh>nKgc~oV%syl*7H$)2;CNYm?Rl2VXEmzN9?*Q5++pDyqFOTTKG&n;9{SQ{Kle^f zoq27^?+_i9usJg?HE)ry^jb1mr{?(*_Pq=2Q)W-LaJX&qDO5uLT9xj#<@$Ep{+8@b z@m-pK?#qve15Q?tewtTokMixj`S+mlj(f&Wwq&nZaIb)ES^MHu6DNqUD4dk25WF;D zi;IfIEme6>xre%I%pGRjySeO<>B_E{rLTT<ru7ND?egM|e<oq|$bsbrzkX%a_g0J2 zK;9ntFVBm50*W^oxP7_5qjml=ce_SE3$0c5(Q&@gTw4Ccmn?t#x^G|epUE&@RB^$j zvzwlr&0PAG`?Rn4@pjdk%Amy9@{GCZc@<0E^><C&z3I@T%g5jBo#guPTCd|-iGLIS zH~oK-Q|bNA*lfX96{qVAyY@fVGY`nozSlaDPrvAwciXg->A`Cb^()UZ*`dVLJYDE~ z_;Q>7T+tToeAoN`i%F_@aFy==`MPHL!=xvdmk7CRzI18N><823K0iB}e{pK=`)lQw zrDxxg+napkaC1qv@thNU{C$>>J<f~$xc_6lbNct&7x|-)@LP-Bi`@EM(8p3Rs$6?w z7V~RI;X<{_I<*;xczg=Am!+@<e`{E|;Qnf%`>Vyo1zavHzxZ~+)my9fF6-@nnJRtj z-s)q^HoRND{m-258G?CpkNyAX=~A7i(_U&SEjKgnjjOx;L*8G%g{8jC*!RMO=h~LX z`C56dHQpz+O?cMaF8=bs+>txS=BAkAfsH2on{HT&&FH_ybgSmkvePdMMV~NmedfOR zY)3Jps*%~3Rj0WvUIo>fD}9a^$$HU$(rth3uZkGMPDxFx7$3`JQo0&hsUj=v9(@rF z&wVMNn{08Jb@KkhQ9|wP`qEMHa~5ziR(ZVM`lnJXa^{xrmWQ(Rl9)SV9|gUud!%*$ zSy|>r39W`L%f1xdNoU`8vuH+%^S|P`{?DuIp0mw-o^LnnQ5v_;4X5Vollx9QZdz)u zct(E*_swb7zdZ~LnBS`$c=amh(xxSgIN6svsmlj#_sRQpoT=Y`iCv&{*}K-p&ucW5 zo`la&)7xL;w~24dweA_$3MUs$wcnfA#<}oW@7GJbxy1qVg(~mOobh2s$F<Fj2Txx7 zm!Na`@uO|hr!Ky=J#umDmn|Rr{jZ(2=gHi>CV0c76Sm?0zb_uVvm`gSap9fk_jUFD z%IDvkbkDFvX7Q=>?sD&s-C9$%WBQdZe_t5wJ%9h?#0OPNi{h)M8ZKWivF4;gU$2~t zkJYNGy^}s%w~8`w?EGG88ttR~UE5B*=1+~u)1}Vt{BwnlGgSW!^|Zee$lyQe*sKx- z&bby{Ud6FyUnG}%hEICdR--a^hB@EXYs->&jO8EiPFcJE6z7~{Yc;ao>P{8e=WluS z<gMFTl1Xv=7A97$U71FLUy3xXc1N+U>YH-TWS7L;q`N_rOPbQFt5T2Y-rM1870<J3 z&9ye;Cqc2-c(eBDZfCo|wL#L%LViuj@^eO#+bizcKdAHlllRNI;Yn(v!PSkG{w#MF z<XpVE@u`E&ax?bdUpv2gSiN2U@-Kh-2Ttof3hTb~Kc6w5VevKxtEheY+@|;AmRC#0 z-CEaS9oO`tcOBcm61P1e9cx@Ha(I{9n=cYCk-s6UyHwX&MBt_UjNF|zCj>scvHoXl zbK<10stp5cgU(SEyDioC=E(nfdG^nhWtR2z|2vK=a~`P<RqUMl+Wf%t-3L@=x^mr! zJj{IJG4s-R=4WBnA0l0UA7MD#G}mSN`$umA{F_7;_Unc_r>y=t#W8A+YRIlr4|3QT zVwgX5$Oqs0DaO5jE{9T+)Vrk@%5S~*>rno8C-~mtullFOWma7}J?(zzl0R1ED>fV# zFZrrJ=fdK9=jKoUeRUOAVT*dF&U}XREG=J;M`qOj`8W5HzsA11jsN>)mLzYx@mAm= z!(?Ok(DONQ(+@YS2{^U>`=KjypB!;$NzhXa2)p296EcNA{x82G8$*S!&j|(w5AS&o z6BA=SQ(u1Q^1D9a!jv1n#%0#7KKnz(R-gR!;Hixb?}Yn|T0#t!8uk%W&uzWVU}~Ya zjMweC&%`i)W<GWcZ{5|VZ>v6^REvn{?YuhwkM-<JX$Kl-2r~s*`}M26Z{=c@Fp)G< z;}P}Pu%%kRxWr`H`NDfKjuj?TpGUFWKD2+`w~ZSVuHAq3;P<M{#kbC7E|4spFHwHh zko)gW+lRjmTwiAS7@qrRRS;(^@=PftyS+Pfc56+V@4VisJ<n^UXV^}dGu1CVEMHf; z{@`xun+dKvB&WI0j9GKWb`5jID%HN;{s(`&4WBNuPG0Qq@8o<jdzEjK2}kki=h8nn zh#kLtyJ7j9t~DP^KW#|-b9m|pS@Uh}@}Bj@>-hhE{cFGyJZFEv^y|-GZ3wYxSm(R# z{DV)P+ONWQ?9`UpYb7cptEeD!diJkP?;>rCd%7*>_sr5LkNng3?_E&ROQ|=z-ZZPP ztGx60{H-pJFD(yu=c+8af9>x|zVMRUPTVX0KY8(BPt21wl0k`gbPrXFG)c+Ls<;tc zyzh+VtCqbYw|47W7w*pstUY5F|7NN{&$(;UKUCJ#?Ax@ISzyYZXuDrs%G{Rf>!z_J zI@Zo#<Wo3<bt%W!V}ItA&usefYU#WkJwNv!F+4n7c#4|0g!9HzvjksV^A5h&$6B!X zOvhT5)Qq%aOsu=k%(J+D`a*mU>sOBlGn$!MQYAHyH;bm6J^AQ$YUGdO&Q}7TiTrFT zdQ<gy;jh?dQ}oN3=FJm4@#$h6*WB)vwN0Pxc%EJ9SI?jBJwL7O@ms&C$-i~v{U$AC zU&c74Vap9okKG);>N-aLWfnXfemuWgH5H#Se){yqb>7Kp`C|g<TP1H+R+uEtt`GYt z5%NPlsnDc2@Y(ZExvTihgqmkRZP<9PFJES(%uY6am1m+m@0hObmFRuZ$HR6gXJ1nI zu?!pYe+#bE`6c}KzV^$vrn$@Xe~QsfjZ?p3_f2?}zW3ymn|j%Gu|)<BPyRC?wxTa! zb5*hkcR#gMf`LI&3fokkA$Tfp`g7|!+*^*upHWacr_ni2p{o0Z?V{-iITn473o3Cc zaZ~3ot`bmna(ln`yPRs(ltAN)l4oq6{}cUw_-}1Qb!~jM{rP)ZS*IQ)g&q8nT_Jv; zJ|ip3%F2q3g@qwA(7a;K^`P||Kcz*edav0e8g^7_byo4p-2SU2doC93GODP~dsmnH z<=?F{pKslHedeZo_S^E85Bj%q?<nHiQ^dQkO1kQ`NX;Y3f93|?4w?VD#a#DRvh{2C zeqN8R?(WkkPH5=qty{G!D>paxU!ZM#biK&Tnh6azyiZ$l``Pq5#<VYsb6*nczAWBN zc|)M&_K%j&Pwuq7*}A;r(B?CbKF`U&e)8vyFN?fWF6KVlezxh-*GpZG^;4I}*C%|g zzaw@%u73Uh=-WkMcbi;I?}u)mYf^G&>$mcfk}u!C`}_F#`1|YY=&V_@Ca3({pLg;$ zuOuxb<gBG;?|LC+BQ3N0oy?xs^7fLm5A~gkIir^_E$p4zvv*=){o&U(o|b<7`n9yQ z^zGZXckkZK&d%=c?*2U5y8QL+8*A_GzRS$R_WAq!`;#Y6-n@BpcXzk-nUhzqii&j~ zeOLh6TrT}g`@(;}d;g#8pF2VM7~}3EJgZjhIcJdMm3Nu(%Je*oCo8L_Wu?~T>-0|e ze90lzv0iDi6Hjwg=)(lA<?qZdA6&Km@Jl8$=g6$9u8U_rlB@P^zIycW|AxtmE1g=B zWm_IRasSM;;ZpdMsDDT1NmeE9+QL$BBfYdQXirjRz{K0^%VN6>T!o~HX8jY0m1|0U z_oj0eU-SB~rIw4OKkae5`r~TIhW)iiU*8R!V)N|&a+Bl}9{hVIN636yapKC7CtmG; z=X^XSJ4;^B-XTNr<RtDD&t|IH#yZWB4`yY5&RuTQ5V&NC*<5$S9KO$`%(~mu^@Qi? zcFieLES&rKs$OTxvT1uwYX9%Ly7AhxZu{)J8+WMR($3ke{^F%k_s4BvZ&;swFIZPr zeOve2r<D5AJ$wJ&4-+n0$J$&cwWdX2^Yk^Xle!jNKcsMK&g+Mlgf<H>BrKiOedKua ziGz$Har<QK4qPehZ(Y)6IZ4eREB4(@kxEAy=c5PMVs>;qE0;NV$c9@vny*RK>Ep!9 z&(t?PUU4>M#fx`oTs||iwL{PEyU&&P<HTfLzLe`9Oz-A!B&z2NJx-aQHuJ#Nzc)|b z<e!xJs&2i-VKv{i7Qg>Wto{4E;q%?OcM_cPO70~WoffLRe<FylB4_^PvR%za-}Q|A zKHaiA9equ5+WcQ-`MYlf+?%mlMfYuV;YIOcq335(Do@^(Io`9q+Rs%qw%axJ=N%QB zn>R(Of7@GeRPqIE+49Pv?)2*XH6QncHtPg_?Dn-Oe0=+kjqBotOP?NX)izwpDz<*M zrB<6}OrO+6*Hm|3_TY!9k!wY_oIkavZkEMU@h8RqS30ZdzuTIUpM1YA`>vk$YRi=4 zwZ}^)cF88}Qq<a0U%i4S=Kr^}dH1hprW7`R`f7Mk@|y6YOAGQ>ZGCJpIYX>#L8$Y* z6&447s9&C{^WEn0z1uFGw_GZZaE3_>_1W~5+RhDms$oAjYT`%xJX86_f-B7?=jhI= z+$I=nz4-c@C!xK<S2SkZE^ese<;(t9Ieo^586VC^OZ8my6Tk8Pdgx`&sqt&h<oCv{ zxs;HfsJ-yU@9D1t9lJ_-t*m>u&fT`NCq}!|P|wf%B$wJg=}0^GaO=u~f7vC8ziz*d zO?}Mhp<?Yd$8=uqqF}>5(S{%QnXly?;<xqGjg*j{<-UR4Oiw6o%iGIVXHCwRr$qLB z{QM)|Kb_~s{k!wdTC;?P@$q<i>ga!cTfZjCr@p+rRnKq9jty&nC|oG32r4UQww+tu zzI*AuOFF;HDnCBI&o}8AqsuDUA0;yqk}~A%zB;fkR8eCQn$G?x;H`?`v6f3cPXxPo zOD5GGXfd2vrx+IacF~CgEyYgzCrI!-*!513?f&8Ilh|#tRqBkJ{>*z;D*yC+sqMaF z2cCL-RxG$GC$?*U;2gKR6PETSJexQD{M9%<39WUtLi0G%E=>%p{h~T^!d00j{&~}< zuXj>rH7;pkSJ^TrDuF?>i!&$W^MRsZ8*7uypev_yrzHNL<X81Of6?VkyUCt)EOq@d zyA9Hh+fQ7?d}`A1`I8=TMOv~wy?nr@Y@Nih`W<ZS{nvi@y2YGXow>->Y15~kBbqmp z;;(v|7TX#pDlF`-S*r7;GT_4RXff%<*An*4`(9YZ{&JiDweWA{v)noO<$kkH**9T* zi~E7+zgKgHl!a!^Qdj%7|I%}>9SaWlhdhgVc)-oQDtGb3j%&ADnA(m`4W7uOt=rF& z*LQT`%#F9+G|y?)`F471bxq@`l>D<kb)Jdk$D7+1g>po_46}H6>)-QTde_%^FE!n~ zDDc(F%GWDDCmp^zx$xal)-x3`7Nz>j{N)RlU;AykdH=0TE{|>`->>_m-^lgTM6CTz z`oFtL_kT{SzICHxf5&1Q_t4^vU-w+!_Fz}Fxl&i2+Oe~duS<@3?){(Mnb*<XmpSvD zQdQWIXC8-x<{p}mKY!byz%9$J1a3Z4k@q4!R^`m=efOIZOEN{@UTtV{KhiWa(!Z2D z@&~iVF`pw#C(cZp8{v4Pc)rTEjD7x}_5|J1`W|X5VOmnswI#?v$3ORqZt(XLC0wyu zs~NKQEqls4<A%;!+b#*&Dfa7KKdRo|m3n5^u|FnxFSYW6r&nG3qoB9oljG6q9mg)Q z&5f91GFQgo@{ArKo9u*JS31K&XGh1#eb#=}GPlWO+FMPoz4HYePQ1K-cy;+|r#;bi zhVIN8P6$W7QuFyUzxt-l6H(_^NvxB9E{!hwGFe=kO>jATe`Voe`^C5ay*Op}gma-> zWcA5^8>W5b)tbY+%P*<urmJyVmxy$v`se*`(v(*B1U2Rbq{MwI$O=6s(eq%<?-dvJ zGI35V<hyXcWWV0;BgeIbYnbZn55;}kzkun5qtC<_>|4Gm+3;;%-d%iUtLXPD#ix9F z9m*{JtX4d{an+Vz6LstUuTJ#dl-0t+e39+F)kM{o-mj%i*3QVUU^1NkOuJ>uUeVdI zH*NP!uTb?7$XjLeXHIO*v8gJnrk_2-nQ--7=aZT*`Gu>i-?KgGRQ&j3PPR}?RAr*t zommBfBD!)B4K0BtoPU=V_jYLaEQv@nsp$RsI>c&!%tdKdr_AYU3v|{ptarM8P^)F8 zH=_}cnxFzl<SFJk-MhFC-}~;#s&%}2Y1M<RCk3Z^r>j}`OlsJ{DR*kpMy{;-@5d&K zC?q{zJn3+F-OZ=B5~kT^b&9h4cbUaYGPUr!7Bjrg+<Mo|z@slu^vCjr%^uvsUj4fx zm9OQ!ShP<&Mct3Nc4ICBznMzl7BvIj3-x#T653P37dhIn<n-K^com-;%n*O*?T)wa zWS4XF{$Ey@_vT^s-7|HMS$`dR&82?XfMepZ&lBa`Pv}nNe0JW~wd(Aplk93|6qgHY zZxx!I*44kJVukCC8`-Mqi(7ruj;-3i?A*RWlj2zhQ!H10p84#Rm(-QNbGAL<{-Aj8 zYPdq)+MnIuzj(z>PVeZuYWaNEG+8}4rSSIcX<ffWE$_YWi~Y27#zN&J=8&0^&)#V( z_GSKE654Wm_OTb*-<5a&{8D!^tmWp*vW_#KR(W<z(O2K&Hm&o-8@=oC(i1-a*NuH@ zTlFs9CUxVZtn2$i>y~^;DKOf;b=!N-n|bMdfh)z%UtQo>d9~5b%*W`d(b=5eLLYn1 z&w6uoYoE{O&y#&~8oTQnmd*|N^k(xmyZJjN-<VML#xLo0Nt;jUb-&eRdB1x-S>E{_ zb*#@lo^UPLSpNTFOFvDID_SqqueM9i=g-J`ua$MW=!5a)d;I$!F!IaxGQY0%?3mfF z?-X&wS@ZuZ*~(XwHL~}X|L}<Zly&=HJI9*hsi)RPiyZhLP~Fa@7AUmMPw>>M*QtA# z{!hKO-%WMHmxX4s&%2-TE_UCy>(uA-aY{aIqVrG2wduZcF}UR-VeT^HocoM;w}`m5 z1Fuwhk1AgC<Wk9-sLikJ{N(PUzP(Nd85rGW9J}S*>fAip`ATiW(dJ{dTfArOmbhng z_;sUMqDR@}^<}f)_wtBs;qEpFS>4Zawz_AN)Sv1@1ySzy=f4Xq`Ecib|1H6uGs69v zCOw`upSL>ycK!E^e=Fxx;qNDA|28-u^M^<3Y3z@wyJst#?Y$<xzHj|b^CdEQR~kEV zUp`+whdbBm_9vAE52YP%+<SMTO6zE;MTFS7UpM~#`_Z4DVAsC!Sj`9Z(8l)<9#r=k zrf6>Pz0Y!Pmc@+N9jo6RcfP+sm3gDp@eRiVIcGI>zGZII?o(Uwt3lc2(N9(WX-1qW zQ(Rt5cj@s_%Jfmvy_(1|^^;oK#kP$$Zw;1~B(2<7x|*x|TTQ;5<`T!H&mI(=OxphJ z+J=`OgW?vS(E52$;dONAH?jT<*6i|cNs2SJTj>~0l708{iRQu;rZTQeKPD+!-kT6R zNx|#b^T~^hmNXvNdrLX;6h{*K<Vj0QlHCori)w9<J>7iA?)a)@QJ0oQdM{bH?Z-5p zucqgO>sBmznJcKCqS<=E{Ksx7&r2Q4tCiQ@S3Z0$w8WrlpIz3Tscj!!N@txuI?J)H zLqp}!_xRH@+#XK2D<GL<*fgI*?9>&bP!*=mGZ`*vx(dbXCRA>b{3#?U)9NPaS|_P` zq9?ys^1ir{);gnrEi*%fW}3RqEUlZ#d*aNpV`rwd`YhkJ`V8N#HF}+E<QD4~rA50| z-<ENnsK=Cfj$3n9_z&UB{(B=CS`C_?TR(f#0NSqD;=XN1=`<bV2e$mD)?BQY(mGoG zNmIv3k>{X~{nB|&eM~co%>NYWPuzLEcc(e`&hqe`46$<iQsnqj=D7b*T))*nGGC~` z@#gvtrzeRGLdWFpJbV<f!sPDCGbf(hdCD&JGNe|YeVGu0@C4zLDuFZCUAAK6=k+_- zde7^Q^UrzNKNA)-D6l;Fry0L?(uBhjFGN~7%pX3T^PE$XnTJV0F1bO6pJmgj=RJW; z<sv0Hmsc4(o9HlFmZn!GTlLvC$*D|D7D|~d;Lpsu>5b-@`A05CD8JaK)S;zSWXk3e zuweVK12?>tgd`NYnS9q?cA9ZON~7le^FuPPT)#PgJD<>?DSV_tHhwYl|D4-(x8=_F zxkTozwV1KHMc`?~g5W1J-33<ph$P1R`ubB@%llBC%GIhT)6eU77Q8#yS9*`{+qQnK z*A81J35Z*!|8?E<Nlmo3)99$}b*sFNp!CRd>W<ZW-t*1<R;%(}U{U0wX{!{pRgGO2 z`A@FAx#-K{()Wv|yi_}XI#IYqPWY)~*SR@90<HY-WklxgoS|@N!>6}1x?Y`nzkE@T za*4fIPyL&>sZ|HMwyt5QRqOa$on>mX$8Wp-5h+pO{uf^R0wR5${jGF)GTrfM+|S2` zJR4qBxXkoCs=U0gzPC#(L1J=B&Z!gW*{f=H`1?+sen-_YrJXTzP2(G#*bnoCZyxHh z+3p?x{-S4=z{!Nw+9e$GXAA6F>|ob@b<^*XcMhgJVa<OT*q#eEeCSA+kfk&^D|2Jo zgqHu-Cu^M;r|WagHI1?n*v!B6NcR-g*9iyxQva!_vy0FA{y(j0=?2F}iFL1Qj9=TE zTxb8YivP&9`)rrZTf9tLW}CSDGB1f=$=Pb^@WH+_aQDjTYQ}e&<%%3{WNdbP(#w+f z-!8mi-=+<Yb;_){MvbB8KEFtjTJCml^{(&f6Th!Hb8NyZ4&Ij^MP5G4%>2l-@Kol> zBaF{}B_7n$%q-E*_~ljGvcNTB`%%W(J~1bKas}?*(peF}b^WGU#n)T4mjcsklwI{V zDXw*wI>~kXc=kOO^S9?`EtdCs`_g;k`qYg#E1qy|e_J;#&3wYEpHDlrjPIv)a~5P~ zEh#ZBOHy3#Z|GjPOzuyN$>kZh=lCdpoYE1JIGcS@XVS9;Zxz~v8r`K>tZ%=ZW+i{W z#Hd%{>(Q_4a!yDt5Lvq8XUhA3;q%3Wn)SELYj*v@lX(8(qeV(e?=7}mj@**EsHSzn zzS}ODogViOPI6(pZ}POG|E~#S{*k2p-@kuR7TTG2NW`sbL&pM3=KZ=A7G63si4U~v zGg&O(TdwhMzI^OHFUz@i-;);U91dZMORwG1^lSgauW@4Ud;8y|+dcRm|BBznz^3i> zQo%rnn}5#9{5Ip#teu{;iA#9Txks{W!fqXx-rjt4uuZXemF?dv_ilCUJHX06b)vY| zo`WnMCe9f-Zr%zPQ*TWwuyH-<9=A8Hm|597=)PEOex$~o^BhvA1Pd<<yBW;Lcqshn z-<I?D4?6M7Twn1>mLq>^<2IvTW#(latvkFUoGyBqJo>xX<Yh3kvu<EBL%NHw%?q)M z-fH*M7u_$8wAoaY5R?Dv{!JsdcQ=e*TTPO9x42tEJm}H(z>E3IUoM+3{<b&S|KZ#P zbGN;SZ{pn0dbj5L!<pCjHulec{p!Q_vXebNYs!9aS?L#G?qhSt@0WnX$(q~ewI;jY zGH_Tv`CM7sl6#-_t!j*2w(S0Sxt%L6X6erSGGQJ={ad>ybEY_XoH(l%zVlakN6%M> z!*{O=n1BAb?(5_olP<pcHFIxRn+fZ&!cfV0o7siY*Xv$1i)+dMUfy;5^>nx7Kg$Ai zKQ=hs*Rjf|$}8)xdeZXaaYMu%;r@$!otoP!^zXmf+3?hIlGFYj8B*8Y@BNvjD7i}B zTOzLihSC}?m-1RBchAR;s*Eb9g!AW$$t-Rc$qcRyv3oVYGupsyMNHXKnNv3W5i#y( z)(Muo%dS!njlS@EiM!FV<^5_AcaPOPosk{()PG;B$9XxeuIqRDAAPHv{Ph1aZG-B} z6{VRem6>nKGMSF=uu<J?lf3QCi>svp7SET7$a07-DLES_Yx*@SLF`TaEd8yUj&b~P zF)Q*kS^6t|_uLhN468Sb__nue&-eXw>iu$qo!gnSR~rZCK4sNpJAO7f@k}}YwZ6a6 z9Y3NE-C$TJVqTPSdymKGKeN|NJo8lK(KVatD?+b^rOyt#_UMJ@uLuA7XL26#JuB7A zr1@6Z?O?*qZ_G>H-Y68+uK#`K@U)Z?+v~S^z1R{~Pkk$Y$?@m5^8(@JrzY}RdlY$} zT6QGuxc9-nrPu0SZ9l!9c{@+>wx0e8s=QNVHm&Cg>4{sw?!tRmq>_EMd)?27|6P%C zN8|qdvYrrBW>AtQ_54poCc{Pcf{wEhY5aO|73HQ!SlG{TZBfhVK76It*Dc00(5P_Z zrp<|**89uFzG|nw6<=`pYt3Hn&&kKl|LncFF*mUDDo@7tH5;3@%}aaq_P6!ruOEM{ zTPD<V(=IM~a=YCN)xP=q2ZZ;szu5gN{2be5MZSC13o<vJUV2|Qn%R=Q=C#<@ujgm_ zY;Bd@TJ@u}WB;cEN4JFU-evu+O}4GP>zG@5UYnVKb4x#yPLYvFRF$pi_gNVimb1T< z{m5Lm@nFTOL(6sV{BB&R{mVUh`oEHOo1Gi0?#m@Rh)En$;3?E=Te4Tyc~_U>;lz1$ ziAUXMe%iN1VoL3;Zzh!=&tCBOw#z2wmExAICN^De0TI6gKL;y4m|*9%?_St~|HA+0 z+}7xJulStRJ6GgQY5Js93s>)cD6BlKBx%}<n~&9}teNxa=Hi9^Qwwz+FZrt;yPlfE z)1CF8Njj+J%KY?oDyH3{PxKaXTG?LjUAE2L{6_zSi>f-wm(!o@nIF&Rwf)PE!W9{N z4%fCt#8j}y{&*Hw6A{V~$Ma*m{%-bPVro7O^Lek^N^CwetI*tV{#lDZ6P|r%zhqZc zrCGJjNG9dt)OY2spHsDxziO#ZSGyYe{@n|&4`(BO_V)OFyLRfaz<)=R``6Aie|xyd z-u=+Nhg0pJJrCJaTJ^i^-MU)^H~JL1T<)Ykm-paU9GYFdf1gRw16H<6b-9HF!7FU< zckZaXBVA%Wzk2tLy4_o<b~o*gtuEUB@loF8M|svS_~uq0-*COId_z@v%kINA2W9sk zm>c!rTyw$nojYEa-8tJID)S*I)mKmC&x4IhOxyJ2e>Mb~&2dY2HhiWyzmnhS`Sv2F z#Xbrh->xppGMb&%r}XLSv?{6jk<k`w-<g>>KRN5gA5`wH?f&esY=<8|@9FTa`ZZG) zZvVZ?!#LWk$*<o3{p`A(mHBP|{=Mefe9gh&?`!76TDvdGEIo6*{a9)KwA)HAc>8>2 z@8JutGUoj^V|(qMz0AfENjkfg<ZJ@Z8U4w=D}Mfm(xihgZj`++p6?oeEq<}^?~OS# z6`b522OnR#e%8)YH;<*Cvp;?Ima?SpxmfY+`)j_X&W_m=oB6jxx#o<*EKf#;mD8Mr zryozOoyk%(=i9+Nk+O$ke>qpo%iv=$R9vV$zg+0na;Da7%Lax$^FKO0nXt#vl1rhz z>$|3ajKa<37e6bhNZqjc>CV^h@aJjwZmrpziC;wi?w+QrcI~5E!^;OV&umOs)xh)n zNPgqI>YSA`-m!n_dScox*^nyjHZ?q&@$C61CI3D5=d9T9cy83qzY!V?mwZ|8_Xr<X zonP~+%INu`wI07hU(9{8_{MLM+9x+Jxp(P&ogFH5{+6TDh39|Q^sidz^tj7umQwMy ztFw|;KXi%`vaX8pX}E$stFf5PRcXnC*6*EC3=CE>*k(11AhR0f*3x~<Z-rT0y#qIA zZ4s>w-t3wk7NG66a_@J!g&ULK$5y*I<t7DR(Q$nnxcS?PP{m_^|GhiC<NV)0h3B{} z&R5PWo)RK*G=Ap6kKkQOjExRCxw(l35(=_~%ujYqyL9-Z^kWg9!c$@qyxB5GzPa6f z$Mx#Z`6GXC9eI7ojv-sPVRKWg<)Qqy57Or)syiB9mz!v@f5+<co!d7YxpCvhn>RTs zLXqL&*Dqe&7!zxMy~DE0!>;4}9q;qI8`S5xr^g+s-`RKKfa0dYi}87nKW!`a)+?H@ z-SWlRq$^UZUhUZSbIXQDn|3`FyV<cibNA}^Hrem?y_R_K?wy>3goM2O|F5sF|M~Oh z{r&ysY;AqN*!bO!^&L}N->zP;I9Po0=KAS%_j}LB`JYXGKJERpaKHNXe~<tA_3PTT zYwzB@J9zNm#fumB+uttFjt<}b`}*(p^4;w9|Nq%qTkqbnW5=F7dwy4!m6o<1e)#VF zd&d9s|6fnstMp_4xzF}L<JD6--!sY{@t>N_wXanuxUg1cjpm!)B^B#_x$fNdqMB#! zhQF5*az8pSoxc5IxmKyFv!=|g7yZtqOO+*=#16-YygKbxe8l$Kw6<3h?L8gOiOin- zJ}HIM@ubPVO|vxCw!b=dB<tIz-3McSc*caqbPDeO&~iG1?fSovl!7|1gLN{Qzjk#L z-tBn5_zfrLLFFeqBU6iO<wKnw_bol`Q_A{n*6GfIHB1~rKbYQUb}W7Fc4=kF!Q1<y z?oGX0Vt44s`)iDPtKYo4C91Y~ZSU{RreeyK6Sgfoyun}Y_kQ==2FJDUE?jcv)!Vb` z(#@K8<{!HieQw+F?)%SImv4#7Nq8k2cFgLQUVnIX^1GR)R!gT&<Zoo?`eZG1r}d<W zWu#-efDCuUt%PS0ng7>|x5%t6V3N9hH6iKSr>g=+8-3Iy7Ruc9y5YO_(vJV}qE?$f zEWdZEb>fw85!Vc=gl{{sSfAy-#<A>+<28w63uLcFNR_$-9?>p&R<-3q&--0-Odjs3 zyu-a$)~xbn;-jRNDEp16Tb|vx^I7F+c8=$scU#x1K054FnK`TD*SoA`sk`omP0N+c z(!RYhvt0Z5*7^=b0j`2rPIj3S>jdup$=rC-zV3zq7emFVETOlyZ|3oTP=B*c^MI_= z=f8)e7J4-7Hm%y;Q)KnZ(!sZZF-}IKEH}F7b$CW_hraT5=M{mURjlM$^_3zWjkoP* zQn>y9?c4Bj;iCKDhXT)ic~iJz0lRCbRe8i`4!c<s?MvUR;$xTOYFlwuEq5W;=OxjW zLA%+SCAS2B^66-)-1~F!-^FI%4jr6Qc9Qeb<31_lq~&QjQge$F5=0Aq?`X2@y;xhV zn>u~Z{_peFw#&#IxK>(|q;g?;&X0R**>`NLH*zq{pJH=j(!&a?BaLfpWS<?BnbWsm z(yhz&9B1xb_+igAMfdykiM?@}UQr1VuXA05J6V?fdA6iCtwlO(5_7^`mWJi4nLX;& z;)Md0a=9lR)11q&bE<pgKXvioo{h);FS~W-?K!d7dOf3_U1zOgS5@?}#QkdvT^_f} z{?Y%6OTuoidt#j%R&RK{ae8||{0<kh$CW;-rZmUTef~G`U0Bok>|?nfADp{0cTbPu z;j@mOmlhwX%wBwa_mi77JJ#NaOuv&TqigtX!Q4HT3aejFT7UO_bko7J_YVfhN4((p z@gr?^$QG&cZ8lfG8Esh1A9Z)3;cnZjg&QSi7VI{be_XVD&!?TU#CK1r{}W|7|CtQO z1e*mr7*6o~c>et@`;-lALa9&fKP?eh`$78H`d9-6rEO0cg4D8F=AH@{+Qr2t+|RD~ zeajzVbMK_n{mkO`jaTn+D@kMh&-?qc?sOKD-#`2=7|r>St0?)_`sWhO>l}sWKUy48 z^L+nQDw)&h^DKoo$!3#;U6!|pc{w*fd2?99>}a{`mF*#1AFc8({z|de6gK-Qo4xu@ zYAM_NE85y}rT=@kKK<!oZ+%1mT9wdqspvl?(UlHG4^{4cpTC^*z~t7ZPKR&2@;#=v zY<hR!>Ct9f7<S0b+GK@B<*X?Z(Vv)VTu<8aJy6m9;r4iytN5BUHZRr9MFF+m0^gM8 z9FIB2r6W4aGR$CR*y1oP>9w3Xs*}CfFOh4URlqm9C1-irq^X=PtNs|ITb!0zvMsIB zb9Tznx@oOT7U_Ck$#!wPV0PbG!-c!uZSG&&MgF1buV4RSSyQCV^MA{^62)aIb5mKS zst4aRJ|-RiJL~B4RFTUUN^`ncS$j3syD6V!J`~l|W*br_b9v>vz|eaYR%~fE{U85d zxa#h@D@EqsImdt3UY)nQdXwRD&G{#cLw2XkpI+b)u<Anf$+*~~EZ1NEl-<ee$GbD? z?519&-GBCKZv67Pc*z^*Eol}`j}v#bf86@z+xArkvaf#%E}ng3c}K`^F>BUyi`o}F z+J0=}<HReAGM1gnJ<E7?X2bE-Q=ch)`($zEyx039Gh7#*=?Qa=Ew{gT=zF5I)y|v7 zrPsx;erTV%%;o*p<;RtUeNsx7-OQD{eZzg4&EtnF&GJQF6pNWvociRt&B)8-M&OQl z?!Cv3t?y~9+Hy-S>VT7~iIW4LhC<VXS5{>K5>I<~3Cx^PS88xOe@1$DUBd4FU#~Mw zy%!)@Dmyo3>g}4JLH~Efp7!F@-FemNe)=`R;&6Qz^MqHA`>gicPnYg5J9X~U=Pifa zcV%2!S*KTh*HWM7x1s+3XVXd<%Wkk=3@(@XvGdF2N0rO{!+)FZ7iPS<$|87{8Dsoe zwx{lu0r_XPE8hEaA@xF34_~Z6=!Kjg>K~*cTfJ@^uDJ9doIUM$(>$Hf%MRD>8Z+&& z^0AZMU8H&|YG%nNi->=F?Jge7F;~t_>Tui4w?g@1jNQLYuWo#laJ**n&nDULtY3QP zjYGHZ{Q6ap@pfl)w9A^Qr{)Gv)SK++HtEO`hThx!%btEbm;OyOcvoM1q{u5))o(s3 z8Ma9o4t#%2!vYffKW@CYa#x8$iu=5eRWch-ZGZ1-ylb&WsqI9G`vFXCZ&pdg`Y&5y zK4q`e-CpH5)q}=IwI|!I(SIc%Zy<kB<Hw5+&*mq(&6HoteTi*T{*DUU%Qn{{o*M7U zZ`wWYZJFFc#w9IwZ}kKgz7AXY*RN9HB%hEHmztv57LMbO6BG@_c^0nqUQ)J6!zb`$ z)*{z>)*j90I%mFgXBHm3Tw(UmWvhIA)=uU_uY+zs)3ra9eRJI^n+0i%Gp{h{Zm7uY zFI{uF<Nk`9Hd9$YhR@<U8DRQYcs7Gmt%!Wiipg8p)Av6AzE$bKzBKuY)pfJx6mLGc z@S+jVUU_TZ{M|p58T7WD@OsiGH~rqHZ!Q;OUp-qaZ(;sL>io>zF4Y>LoXTI1ow}5C z?A+-kdF7_U>o|)&&F}T>abEAM{d`}N@V<b;o7dOOGOsYO>sD0JuA4B)^J(&Kng1J3 zg)9}exp-}b_{yb0@w5Cii$7(&7JYmr{DrXA+|<l_W=db3SI+CY8r&AgbN@ZFP2vrv zb+0z<ocCL{wD$Jw+tQcMB|lPb;{D7!XN86L2jkCY=4c5Y{CCT#^?Gjl%BtT_Y%X|6 zzT;;9*7x`Mnd^FfQ`=$_BARt7Z?Y`={ORwE()r7eeNlN=R-$0};mC}2<&1ZVV$an) z7d=&9C{oZLt@{2DU&ft@^V3ZHeqY_`G~+3Aacf%MyQ5XlpLUiv{IOs4p6OyNA7AMC zypIpRPhQCu)6#H4ykWJ-30c9InbSVUoGhCDqWDi+qM~%`Mg0PoyU&xiKd9!BS^wwk zN6yA)GZ~yMW0dB;ezR7Q)#;bOsr5624z=?ND)4zNUHWNu*y4?07nUvk^F;X6=To<} zF8RNmzrJgFW^GCXcVI*A68~9~suoUt*1KW-PQ7@88~sZ{%%5I5epdU;XCXBUg$M6g zndcOG-TtxPoL{>8%1YMX@@`VM`PsJII$(FvwMK;hg2tzC-OF#B_Z7HuR9$xE<3GUi zQeggkkKcPm&D!crdR$seF7I)RIAmBiOPu4c{i~>%=PRA|lp2@*$uwE}b%Wi^vm9m{ z3nZED*L+;@ReTQ5v{$pX?P7TtpufVyO6`^3k!=abCk5**Gc;bd)pA*_-ZEk7&#yLy z^1J7l8!lb4Muy=Z+x@f6|DxYi6`YwKoS`G!#^l7Bz|?Ugm1B!Y<tz>fr<I3Jotn4x zL1mC>w*Y(bffAjTrxwp%JW|^zGVj^9lly0^J=Zkti*Ueno**TqjkYoVQ|z6)e2;x} zQQp#Yc&qSPGoF{fzw{Zmss;1RI;?s8xzO7CwTteFN{Ra~S~}h7n)=6ODw106Hq{3{ zC!M<FB7RVcb)B|%#k=QQAEwHP{=8%n`giWy>(5Gz{wIIkX@Ac-Vc*0^#<$%U_Dv9B zO!(C0q_uv|g(%LXt$|$!&qrBmPrdJd_{kmVPbyPGe_v)lXVQ81N5y>+<^2*;qGG(i zN=!wTPmQ(WO3czvtTLTzC--aR&8hP)p7Xn>+<pJ3{$ei!EqCq5&fZzatJv1houaJu z*w4E2vXODn(^3(w;2MMC$)?4UbCz~b>DzzGXNK8n39hrV&YxLm{`gRuDQ{I~^l^E+ z^I{oZ|6Wd&JDQl-rmw~2cWToKjr@m(*VF%9=l0plVN|(b!RdJmSa?@tRfQ$;{j*Ab ztMx8)YMzjRaze_yOFs_8_&lGxLVZ!)htoOJj;+e;`&aW#fA<?B)m0%OZXWgLX3f8P zspitFbyBy?wa*6~eRV=%^8`J6fv@ir&g8#t{aP8aD`75YiALaN)%&s9{QjE`L>%RI zVd|UPo8)u)>%z^I4SF5&7g$ZQ{LVjHa#8%&NpS<64Xf==EY1FEJVU?c*n)BohT1=3 zVV_sMaMiZ{{GI3DN~PoToD>fy8U9cD_$KM(wWQ45t&gr>Ke~xW_0uHP_if3aGT(IX zJt!67e5X^8v8hrldeZkvyz6J*yB+h*%(?76i^mkL)$L+|JJOCV_TcjU789?3vgG@c z91gbhTbp0CdzgRNZ7`)$N@?%kiTiGP{0~#fVU#TCZ84tGe#d)SyW}+Yg2t&rlAgYf z>-X*S{58eA?f^SugQ2T}B||{joN4+Kqq3W%R2VL?tXg%7$&n$n*wMs8OhVf;F{GKP zckze2At7fz?2o!M<G{r$1>28gvx$ZY6dKrdF#U+_cRVpg?+45J_44^!=lfX+?!UsL zFBoxib2#UvHD_2Kc^=T_eCT&~<&P8PCYCW3LQEB!X;*R&^Js0=a>-k@fwO96{Flf7 zW$JTQ%B2OL{t`CRpQAiIxR|p+i7V7I?WO(Pkle+R6{d_bn?!!jzN)HHQ6WD^jxlTB zvVGx<k0x7NMEYI1V07(~c+-{Ck2TGX>L#YDZGCT)-#hkfImSA5KGPY7PdXy}VJlY( zeSDsFN3J1rlO02c=7%JW*P*PhpNm|4)&DZfHgomnyI0O$n3KzMtYO0AdX~p;M2@Xy zxv%`l?S|%p-wH20rt)y#RSaM3CvAJs<*-Kh<hq_!|0<F#wObEr?Q@G}UN~WQHpBi# zkz>{jk7qZ3%s+fU%+N8@f@jV~OP5uaXI5A$Es&h={o;cb`^FO`_MP#$aj*EY6c2=X z25)_F*8Kf~mF10l1YbW}U(GxH<&h%CwRI=NzIg83G{G!)<-tk0aX<ep_i~%K=7WoM zsGv%+^s)_a%x27vnyH+y%G71vPO+=k<S*FGxNLXlT3*1S6PqWzHgH+V@8|z(o~>h) zM3UsLjOlk~hMss7|G@T2p?=tWEC1Cmw+JU(lu?is)i4!_ESEgj>ZSIw)s%OIzH3>~ z-$^zGT*XH!{>uvPF@II{NVN3ei}??=1p@ST?0v7?epNE(<(-crI_KULv6KhyecSZj zWs->a-%U-WzDinRhnfDp&@`>O-PtBJ#kn*fQ1z+2Q0?DIUl&^G_p-Jxn)IS-<zMBM zSN?=_<g&;F$H{*9wdwn<<tsni_Rh-hd3W@+rrCvwmJTL7U;gxT%}CY0#QI%xYxK+C zA8KZHr<uRG+WfUB>{(m9){MEYtGd4ZN&7SJ`R|~#&9_%>Qh$7vUDRlHuNd2o`79T| zzi`OlkI}H&yr(;Q*L3k|@118Wb(xA!yRc>YgUX-#H19}={mnRdEalzPbD8y~+Ya1X zrvK18e^yCEMb19<$X9#4<WF8}Z;q2%{cp+i>G{duCb!zMRs6ms{jd7-hKbMgmDj#i ze(S9~*IfDTuQN>wt+h)G^)4s%{9q3@U|$lqzv{3`)f3mde~$~5FtA=#<M_KN`+Z?h z#QPUd(&o&N+kEDWhUW3@wh2PBdaHMQvfa?M=w5co>g8`UqUBymMW6lg^hElUs3*t& z@v>%bKJZv0&4N*X-^Uqz%`aG;ZkPH?2%T!2`}e0srpfWuAt$%BUP)34JYnE;??wE= zTCXQ9F2YZ^Gm=i}`#bsd$r$~-_}u+rwBEYgo{Y=lo#H3Tq|AMMXQf)*CBcrAgD*Om z_V>-KEf<J9Vq>%^%J9)y(KEWi1=&yLI)66*da+^N&vosW_wiq4ld0V=JMq_x`+l~G zGs@<@W#j+ybV4h8=%=4A+Vs})hfZ~`{qw{2gW6l=n-k`h?BBE_?WB;;;f>-6XC7oo zis$inR^1Iu_#b3$z1Y66jO}T9<U~t}Nrq22e#Wh|7yi37-t64nYlYW*)z0i(DgO31 zW0}CzmlATz#nzs^-2Y|n*|ImB^K?1-=JJ}GEEbU7x?gJDPsPg$pI3|iEj8k~t*1Ac z_l~ol7N<qj`B$IX=G(M7iEvMzp2OiHo^d-p<is?2Ly<bZD^stxi%mOpN6>p4|L(wj zcb9I9t%|R`s<bQ4xk{{9+?4&-X}({JXN2|j#^3ThpXJ?NpE1w#dGEw#k;F~AwryRO zv*7Zv(@nx&#gq3mei!|Gzvhp>jF_GBgn7Q*SJbji9J5O*vw7xb``53xeVr4qC+c*= zlP5n~mvFF}Tlz|MExG^vO#6(CuA@24hI};(bM7>q`}XhMsg-;M_w_|4$tAZ(c)ie? zkWlz-#$)4?oQ<DuKDVDa;nSr;wZ2Q<Msd9R!ru1Er?ZJ%x+dbtd$2hEz!hFG#@BNM zR;eTl^LwlhY^w1t`6Tv4htF}gS*&N^$4~yo<-hIk=T>{}zwpnqX2H|h&(Gw3IpZ)b zL8jpOhOpXs&$~UhzgZhx6}I@_%=V(KBIQ?1KDVzD`V^qtGOcWJ^9(Uhxr6NIWLEE( zu;+%c*1FAcANt<M-Trm&rvAgObfvB5<~u66?bkNC@?hhSg4!)L)u$vGk1+MEdYrW9 zZu%1okL=sqj^)39a$DKrCWF|M2b^*(=FKUA(dU_-xPH`Na9Hj<CF14RBYMJrKBVNC zAFRy%^j1#wdDZFsS<LrT=Pg#gwpiKeWkk+|EB4RNioZIZUh}$Z#Rkz!oMP4=WoO1O zc>L|>+_cEUDcjy3pDmj;r?Ng}6T6!Qd+)y65qf{E_Gy{z`skjnv-^aKjKbx4f3Gb3 ztKvA{UV55fmXuA%nLPzp9P9sl`uy_VpOe{#A8#*9e^j`OH9bh_>M{P^QR*p4*W7n& z&KHrjKV5a(v}D=jW0U9Gw_8um`g_jT>_trclDnm93k&(qY6b0?8@}Dz^xqUK+2U_c z{#9iDic!-L4gY$+`Qx2k+>hUVI(_}cB>f*noBk9Pu`qj|_<TH8N+b4{<b~wJpA8kI zWCj078cLm<_cLPQ`RVH`xN9Yz=e;pd^7p-4H!tOhc>LYir}vH3ckTGUYL8Bwq#Ms% zZ>hNS+oIue>7DWMi~H9H<j+$yz4JPzVAuQt``Lw^8h2`s`pbOZJbRsJ%zdvgTjO=d zRbRh2xV1g#oy2Edxt%{a)7PmK?(31(yZ$RI;A2YGQ?;@drz=Zhzg84V3R-`N%CLWV zJn7ooFXx|W2|Qq`H28FD{>~QD*C(G@yQb-+i71@7<a>nWh&2O)&(sGFlb8QH((vv= zoPpia&H0<26<0iA-k@?YZ&7Q}C-2rTzJ&{gu8PDZ*KgKdtGhKPaQXe($XmBxRT?#x zv+!71&vNCOP-mLDP$_kR=dyg?Wf!J-8E)sY)?faTyJBWtyRB($c~9I-&fAME!*omX zS339wK7BWN)5DNyQ)Z^>-RhFpxO?0BLh#@H%WNO=&pf`!WlgWtV?EyWj{d<P9wspN ze9t)Q(^@xo^PT;&45xP`)+)T7>2qB8+sn-JhqYcG_7wcw>b899znI0|&)@f)>GED3 zmc~#de@CJ>W!5PXgSW<0yG=rV?0+lw>Dj&OUL5<Deu{V_lYi*{-?Xn8`J$P(TkoHl z|MD@%Gyn1puesN6d%Qw4<-+uq-+Ox`zWfYZ?W~#b^ym5O3Q?z}ES1t;2KHIs&$;d= zwA_sAXZw1y?0b`f=N5mzw|CmJ)$vv3$_qZQWJUho8@~Ck`u%6U1~Zk`de2`VG}(Vm zns1Ci;{>DCcc-s7_^hLRa@Tnyo!21;cHdf_H2LDj<yv>H);hhP9}-e`G{nT8b0w!9 z?;e3LmF*7&+d9rg1+5IyYvWw)opabvVbby1LsCY18C+L3A5cy7wOrKqtNf+P%H%~% zWo;{Gd7XLqyh!PC&#d0!3O=Q%3E}l6A+tFX7B5=0M49*2Eh(<vr&H!EkcebuHx0C9 zp6&d-Xs!R+%&KE{I~N5++E19V?`CLo`##sEGdv}yLfVfVP?LYuc&z=-3axp2s~2@| z(fe~b<w)$TFzdG!HxKVkIbNxk_U0=?%fyeGb*JyYxSY{r$ay1HX!2&ef6b8_dv{i( zO3nGr+{~vKBw~K~{{=TC@tunNrrli3!sm3C@I+OXZh6gOQD*;4Wy%eem?@qcK1e1A z{hhoZ;cilEC|}i8#;5=1=}rE8BKnZpce|<Qquzhqve?t<N>O+2$70QcUmx*gv-Rl* z{##q7@u%XXSV-yqC5OY$)HjBf3wl{z<J+*^^4kB9DMeXxw&oQdTI1qjxjkq4R?F?O z-@SL1#N_dA+gWl~*lTy4GSl|m-zI5$?yg<FHM3kgp>Il=Jd^V6yY4^Om)N?=Z{OI- zpfbC9T8TY}<<^$Y-B#5;=`w5D?6mEp`D?e#dL|b2uY@tq(8p4foqy`tbt+!xr0?(M znfzz=X(6vd-C9wn6JLM5HZgjbQd6F8vCS+$qq1-6$(>bcRmZn$U;lsRWaG*W2Zba# zy7Lv{J0nw#9<{AC*=yBw_tx9{3CC9(mQ=k<_)&CCAv<#KF2$p}j_{@^7{ph6de^!` zrt@9}NA7%0#ibdW?<l|j7?8$foWxpK=_O?+)^O!NBVs?!GB#Hwfn<i|E|Lrki?Hs; zF$T|EO-;9#Zdlx^>?D#K95wq^kn2j@?DwHr*H?&6;j8Yxp}ei*MppkV*G}7{YpX(c zr{%8dDE<Hcx8}R<-+L^cbK5*G54kessLTC>joK{F8~!g^y7cLT2M^xA=XY?86L$DG zsV)4|v+%BI;a*|kr{1p%S+hPQSFhyFdXvQPD8B2r`lh?d|BKx5=<MB(Vshzzb>Y|S z#0~aqTmSb?|Iw@b=ZftY3xj8OthwHcHJ119`Q#YKrh4ax`jKPDk_=`%di3blttcI_ z-4UVYw=Yx(%-bT~{;&CzUGwq(y>9c5raltX{9zzsXY*D|s91DvW%HSPr?h@_>sg%E zIHvwIej!)B(Wz_ur>vV+XS*iT>ZJDn=!nv(@uguw)p1vAg6}k}&#=kMuw9+KcU9ib zwb|CWuXY@T?#Aiw?e+EZJ9qZ1uC8uw8E7|-#fyV)d3)u0{N|MNKCoub`&~b$&+m`4 z%whh%_+Fp6zGvqApJN>ru}gOLLI1O{XY}r!)19xgHcofl+I8#JtzDa&m-p_?n>TOY z%F4*h`Froj_Kl^xcUA7(+<pJ<{<}A=t*or<?Cfl9ZLO`X?d|v5TJ7DlXV0!(yLRtp z{$u|?Jz*!y-~7*i%>V7?jGSbBz>>2$t28g2gH!c;bWCYnIZKPLZSYpL{pM|M7cv>c zKQFbP7pXYQaqYGQ1<6(M-^vzjE70h@pJouec3p;w^O?8j4>`ncJm<Vf<V3-Vv^hGQ zfkL6{*5s|cr<|)V<g0#jZi3+<mptotEhjt|I0;S-eS0l$+lo~C=4Em*oXT%w&v#C> z=eoAve}>LS&%Fzhf^Mk<y$W3N@SM;DgMWr4Yu7z1uV<Rw*1;(r$YLn?Q@vyoSFzdD zSr+vnLZxTlw0zBW)i8F{Us|$F#?+<zox-v;dV8Nl95(*<(12UR%J85|hu)E!Eom3i zg6lqaKGUg8)9v2vy?fd<S@|WV(_c!?a{lV)%e2Vxz$BZ<yq}ACt4r&?RBN~|-<!MP z)uWQ~pYGMa>si#=)*WyR;nO~-GDlULqiEvWsRA8FC8l3CE_BXg=&e1OWzqcnTNX>P zMTzdDzfbhHGBHe8!2Ljt^(51ehCf;x4^%T)G-OL~bykMCBnkU^T#%W#-~(^E@Ol5x zU#gBD8>=1n+|PM3-Ga~gcyGw#1Ch~JqR-FmHCg>3eRf84$Vyip{m`!3CgIq>YHka^ z$>~h)XWBCLp`C2#oTvML@=SZV?HbSF7QfX8KOM5TxzLjDe)+cj7MG_M)-vj!%S~0! znr``I$^Co9XZjD?YwJ4x`lqRPCgqUDw4_I;{!K|w(3$@>?25nj+ps42r_)ZiADOyQ zOflPYA#3DKKR(r|^Dd^Ey3Tpk#~K^YUcRb|C%H^I?d|FB`*kb!o&U*Y^-1^aB)>;` zt8-@ul=j`PSa9xM(zD-xHhg{m<+t;jqiH`AZ-3pt`|jZ~hKhqrr#=!q&!Q{s|6)0d z`K7&!^Hxs}oNfC=|4P=r_0wZ(Pw;L{c)-xHnqU5CYmpiE7l&?bKekG#?{Ql9{ny<O z7BHxKd`<UFtDWp5EB22nJw_9`O8sk3|CnGAsup*D(K5pj!+U>27u7B5j&NS#bTwn* z=Db)Hhl)K+g1RQz|GrfEE-%^m<;ja#nOzU`Gj7NKPFpT1u7A|Il=C5%e%PMkseLNz zBQhVPEO~t8K+w~pQEOftJo=tRbl>T(B8&MSalJmIaJ#xeB(lGvY!cI>Ytu>?=3II& ze7W3<!Rny0)%w(Tb2``F;#cH;{egRWuEqC#w_Y&p-(mM^;lGO7p5n=@wLe@ZiR<3@ z7249XJ>Vtx%o~Ro*1URlzv+7S<;)hBoySFN(!W0|+P&kI*!x>Ab_A<hTOKk`cJh## zQgcgQv$k}t;w`Zfc7^k-4WZTzCGG`6XJZsh*EL5x(vT3E&HX6ot%|9w(*>UALfwz7 z<bTMu8ccpZam9+Vz=S@hg|jM`xb4te_1-=4&&J9p8+N}<X_z3hS&Vbf^x%C}bDHOb znAr0RExdKut6XN~s+s;1+g^JfWSzW%jag3i;N<qrT%DRvk~~uUIx07HMqYAeduf=l z)3m%PVs?6zymrB<$!}U0tqqLtsjYASo5-(Ry!+ht9OhLV`F+OH-;Nk=zx?1^hDJ;7 z(rYggIYeGgk$LW|F{jHZ*WvCL6;9ij1Cq^oj3@S0zi?CL77Uf%^JB@|t4EIA5P!w@ z<;~O2w+?T1{v>r!ME0rI)#}GFhE7{Az22I)bfdJ-vhVv|U!1$B@T=9=LN=RiI*Z@m z_e#6wv7oEc{M-FCFO!W@ZL_}keDmEm>6wVS&Cj&|{f|DEajjxazLfHnGjRIO-EkJz z%2)2ax}g8&d7WvK?&WBFvMimjIA-tX8q2o2H*ySS@jErG^!MGk!9VAmNzPKOY@Ml( zd8^Ji*8iQpODXLA1<6ejC3|(1f_8savh`zL^+m0U>FcLf#+m+Y$7Fl-G_OrQ{!wK~ zNUHXu<NU?q+2*WOYdOBItl70$C{*{I#-*T)yop&|d=n$L=uPiSwQFtF3uJHj;ljM3 zyx|mgqR<Z~t+P!%#`zx;St7*!FHSNGsdJjPf9}d`(|szXT9XqlEIb;L^Y;FEsaXbV zrCMrhg#(`7kN8mXD{9fXyXSbF3lA^dq+@8D(G~QeAo0?Y9)WlJODm;iHg8GtXFWRK z_t)nHZH_O-8p}@qGYwJJp36JSg2Um=)H|lG?-M0ItubAk_tdG1c>(9w>-<-OZmC{= z+9S#xX(1#3YF!GSMWAkw{Quu}v%mI~8)of$uAR@V{`;R-Nn-LMlTcraOL04jId**U zSM9rB_vPdI{k6Sn&p$uUZ8|JEn{~q`V`u)$rHS4@HXh@e@NZGG%Wf%0+dWP?l@~cX zSMxo+6r*ao`^6&3wS3~TakUT1FP{DL;9arB`bSc($6WbCcB|dWsOVkwbkX$t`_zP% zWghm*`pTdo#xx=KU+wcJe^^iZJ$#m-ZRqO|{lTm4;=8{etd>7{+K?BM>$UM2+xDAJ z6};y+G4E2I!pX$ex%Qfot?kR;k2(%)9yg5^Eq;5iNT9Q!+0!%hrc#5`CZR@_yFS&N z{YzIro8a;yc$q!-2iKTiE7V^#&g1ygsq)|Yp9EW(ZAodx+sBp9QYL03U1B+s<gd5m zY1Fg@J(i8X3)wI15_w@W`+`oii-DKd<G`qwvWzL`WoJGQyKs1S&_w%fO5ZkjF?tFt zvzw{q<d)^u9JWgNMVtBL-4?c-N#9q-Px7|$zVPp?PWM{Z7E5n|nah=D2JHG!Z4-UO zr6E`?GM1q@=ks|bMwy!|`bReZzwR=5TV$hekk{i4N{oeDoungvb2!%Tby`$>{fet? zm5AQVl?!>F?|WYP?`7g!)y*Bk^Y6U)Grh`X)pc{D-xdBda@X8Txf%D*_5bTPe^UAR z_1{#_j}xx$HEPj*Vfd!hY2y5E+pM<oni;dGYrlI}l>NptsOkZmbnat;JvT4*9&fKm zRnc3tEYT-x5BGshJ1b&!W(U@^InCyAUAv&Hy5{<wGv%p!pM=l*x-$0sTB*1D6L}x= z-#N#B`sV!W@v~*>wiwS3lzCrkdv*F!wM6r$mf{wHPmAwy#p{Wue_SmuuqNAg<)n}U zvwUR)mdI_m9lLt(rWn5^H%>3#RjL1_`=plD|34}dvJ;Q<8sAjC6*l4fmt_K~Mtw1& zR%JgMZ968$e9H{a_+9R%pS*Lw>D9R(pG^?ly?E+&!)dGQn$5SBv~0cO=QDfn{mnVc zWhMJ|d!9_S`Evc{C-Ds?cK=RHd0F;i$Hc|kOis4%vNZ5+=6|WOpI`pu#LqlNi>}Sx zxKUx=Rvy2tKO`9aXE&}FJajpfY5l>bIji4Ixp&ayn8@~MwW+a8&d=*kW!lwu_hznN z_{U}Qw0&ClDn;f+uW=MP#!)wG!t^9Xr(=pr_Y{*}2ymL{Uwt$C6r1DAWdhdWVU6>n zuD@IN>4<(@WP8^0_Eo!g33D}UWni1@rLVg3rpis{*>StHD>JufY??iP<zCm~ea2=J z-Y1=2ToTN|Z$Hy0;Zu=mZ;hh6@WVWrhn<s`&o6!L)*^Rp_5YOZ6%i5}4UQhZk^N=G zgwwxFI^K1cZ<-$VV%mkMy?zNxj<!vhx^dITqOR*z{vQtcFV5gQ{btgN6(-%KPQh^- zUre64Vgbke$GjO@CMl12|IcJk?KM2k{k}s@Nb{unzoIEd!hdJEUa6Y6>L2r!x{2b3 z|8xGFu&DX8aiw9<d}i)hIx`A7k`iYsM&~!|?cdLow8bu?WcFggw;OfDw&%%ge<{1Y zx9|65k>g6|=gDV%vpJuWKRaCT`=6O|8)7@pFFDeC{@2na>eAayXB&1}H>o+Aboz21 zUw-VAqmo?ywIiCd59Q0R3|#iZ=>3(m2N(}ccy?>=x^uIR-BL>VQK#H^SEci^`pX3u zitoRW?Dupq?|uJ))#lTk4o#g-xsI4DpD4D^J%Qf;=k&}h?H3dD4>a*y+5bf<?Q*zT z{V{#DJSFQ1GHViUUY$|&QmaE)^k8hpr*8K>Gren{No1cDO@8>p>GbjSO)47gC#G8q zr9S@g=bmd<Tr7j+6$#VsUk=jGXU=<ed(Jca>0%W#*_OL1AGx?t?L~oniAuPY)h<a{ z>-N6gF6tMSsdp}4K4Zz^noAd7zMS#w%bA^D-kkmt6Xo-dz0jwTbJ+>@;7NU)pEe5q zPkVgr;j(jL=kBWBtC5<os-gIow`MIDW7uW?|0PrBPt4dg{pT5}8(StX4D6Yhz_{lo zgX#I7oF~&y>@A!=)9cB*q_wNBOKP5DQc2;BOIv#(ZGC6@`q?S@zf$s-r~l79x9|4s z({?+~v;_#p%P_~-2dY)osm0bRed?TOcjI28?4mW?6Oxauc*QhNMWX7ZknKd(Q|lB% zk}HkMebz{?Nr`@&@$s1I;*JMCGLQC7@@6@qtP&99&B9x;$<C1VLgdbdryZTEI5+52 zx-c;D#&RgzmG`lpG5K+CADa(Pz(cLm#x;je^!kTKtEx@>?Ql2oda+N$2`BZ?Ty>@& z9)&EIrldY#zOZ_ls6eR*3mda(KUc?0$>b^rdC`?}Qy5KGH<p_6EC@}{jNEYll<+=2 zfqv05aX*<|^A<jk&w9nOV6kSy8mSy@$5ea&HxV8Y7c<R&y;!_duR*>kaB?t{ymtE9 zp!-|@Y~8NbAp5m3$gsay#CvW3)oX$Mtv{wVFPoy9ZSpK@N-jr&mrlq^i4PMKH4pvW zd~5Ni2Nz^YL=**$6*FQ^F1sgqisz$)=<hZw_CDcn76)@8wc6%rHOxQQx9jK;_f^lg z$Q%E9^UUzuy876L^_<=NnlGAG?)}04q2R>(_oB~TpJpz7aQ%n+kuaA7ehp<x2Y)>8 zN`BPu`~F^fXUN>2VW~NG=h6cm<)5F;v0FAzUr9=N4IkU&wKjEeYd`MWwMt3i+8Y;l zmudbU4mF~@20TlXo*e)2Oz5?or3GWc0h<lU?RN#Q$nA*gme4tEvbI(?`rY*C(~B7s zFKhhKV|ZxHy#L{cWQKjr`?syCwVVIHb6wC&t|z^#YX7bFdp7-)_OGe}r3ek?GxHri zLVQa^mhLg|Zxml{bCYpay2Fo`ntQDrKBY|IlT}E+oIn4CbgZiM-Lq1*f2H2<F_x;0 zmik+7$`)tJ_H#vf<E(jQo!uQxM_m+mosmgh;;E$H*w=a_;?VX3v(zsBG1B8`IB;s( zw|SLs1nj%k%q%e7ym*1;a@ILd#PjpS^o2QpZqti%J2}mkGl};k!@kQIp3_QHF6tC< z=iV_js8NbscJWa5+J&iCFEM2OwOi7-`_#SJ{7XMyGV8w*Fws1N<>tA|w~o2D7zubC zF4@?)|4Nj`Rp0Ybt5hdz_}*aHd1P*1ZnD3~{<YpB_G#LJIr29|r_bFaxh4DWq%(1) zSJg7lZ!@1#wdC91y_cR}c`l<On*VoAgH3GP&G0pgy7CR3&#I<PIxuyO`#COQ$vL-V z*J$d_Wtze*%WpdS$5Sf{<J~)=cUR1roThZS!pCM>Z_|1yCKs07;+KM2Dj$U`3bLs` zrst@c{w^)P)Uh@B{GVPu<q%8N+i82uvV;GMJn;Q1m1uGQf!ltoi%&de#0#GZKjv3I z|LT5IAt|L>;)+rq<evS17Ij_c^8Fw4dJJ>lWYp{Ljm?jCxxXRMzrT6M-PGwi&SxUH z9!ZAm4>GkncD4J8;;$vwU+3qCB&sk??3~i+G;6u*Z;{y_F3h-RrqH)-36s|ZiBB&c zoA@`(4Pofdta1&CNL-MkskKJ5)U%gc`TNh-&mEVpOk63khv79xic%nt#qzYtd}kGV zY(8DykSclh!R781Sy_LV-v7(to6C`BaPLRygzp{|tnZ5LV|Lxl-ji8ypu%FgsN5s_ zpl!>WOZeo=#JJ-%CAaZQCf$)cu$AxM=S@3USl`cam(Mf!IJw$x#;=2dw^aAKbGn>j z5ZmqXuDU?_h=(RumoCeV&MLL#?kZi9_s!*E)*f#Rtxir~{3ydMHfk$hC{t7vd(k(c zuBB>=oZ|l9lH=E$XYuV-Dwl*;&2MLGtrs~$*@~@?X7T>hoqtV6+9S8`NHMRC5#OoL z61w8u6HEQXEHBUh`#OAqQ9^8^cJBpqulDDwdy=+Ij`~yo%>0}7@1DlZ$KEh66W_<v z8&__<<Ha|(FB|Thh}lrNGwhg@vCr=`p8#dS<e=bnS(AhFFB`0TYP=`%mYd$>H_w7k zpS!zf*5fail!cuS*3OzZXU}Fm#^M)iEP2ZGiVO9Ar|C^Ew2QCWccA9pogAOG;DBi= zkL1=LxZK*KwPa?Ue)jK`s#=Rb>)S5a_38S=@A{{2uK97d$J@Nr=~-*}x%-z->?`j} z3I8)`QAu_!TTIFy-M}N$R&->%G)bQSAXbGZPG(Y0Xx9%`Z{IzO^8>4H1{EFe{^=-Y z7TI^T`jgl8BL&ya%uP<qJf43u+GtO)^B?t~2YQQZ&z*VTXO*4UG5_!1Pi&id@9Y=U zpZjA9<An_;`lMc|Jct&Z7%yw{nnmS<wWF97SJ->a4dzMKT4L#MW1cO%nSCcWd&>W~ zTIJ<4TKZ1E?X8_FD>QXcXvg0xL65R~WS%bOy>R!s{IWQH=Jn;$oI5}A&HVK`!1POI z2LG%3&R@Uy+dR1NTk+QKgW0@GY+g?hi_9>YE^ayDs6kA);f6yKybgC;M9y%k@?p)A zZ1?=1_VTtzgVN-r`WrGlzanyUkDTMP=$GGe?wvu;gV46iC+cTp?eA9c>OR<8_oREt zdY`RVH(fYs9B2Jp(zWjHoBOjp`lR>iNgPYh+rNy<C*>!zP~Y{<53c(!*V&q&D;2x? z+OY{AgF@!~UHRqsj~xHL-|wHWu&H+XzWaJ$zL!4p|G%2zfwvbK|B#*5yDIGBjAe3q zyE`TZ&zk6ed_nK`hdcHzz4l}y`{J$>n*V3(oNS&KTrmIUh70YlZFk?VZHxcQq>*ly zB>h{?#wzvJU-62HiM1X1)_dZt_UyG~v9V>6(`#U1=(X4Mli_>1cJ?*Redf7;ekq>} zd#|p^f4bs=ozv_;dkq#RH-sxyZZB-P$o+dxuI$Du-peALm(4i4Oz)<8-0KRb&lj7d zFYXH2sr19^Z+rdeOJa`=lhcx%x4WeFAKCI#>V@3zPx{+l#uiTvXUpt<<8W3rqegno zLAUQZcfK!boiP6_?<J;~3~Tk*Ka_749xMOg>3?aGMw74fq?c-u>o59T`}R}XV^Yfc z<mwkc4CRmfO;k_(z4QO4$_IBX|16%Rc};$+e`0WJVEAs0hlX(_=AWi_-nED}mcJDc zJ!2w=any#dNw@ocExvo??w(9bsj2#3bq=a>d|RN&)>g!2(DlSKPJZ4Dzc{YC($M_M zqf<NU6OZ37td(2y#C-Gb%O<sd)3<)pDX4xCdM&N|cX9fgDWTggzC0t6=~sTyJw^Kd z)9njp-<&i1XZRnZCy({{&&}QPEor7rKcCs<Gl9Ennv=J!i<rld#xM9n*DE<CVGZy4 zo%Z2TsVQ>ZYnT4}IlunbMMYi(_0$i35fl0MpVtuf`dsB}_=|JBEB~*r`A;p}UOEV@ zy|*h%s6A}kqdSYsUundB-WCw`*Vnga!|5RZUH_()Z7VsT+wtz~w!D2plRP;;r@629 z(DqjAIrrfFY@=qc?zo<V>mG&|=O_s7eK@ah?Ol&;L2VEBy)^fpesr5b)#B#u_ievT zuQKl8)4j!%m)9xL)4yidp?CJ7=S=Ljy>m9&$CYkixlz{V>DD)=O)R&{pPj^~lxFhx zwL##Dsf*{NRy{L`&AcafF5}zz%6$h@cj}*h^XIUT*@M0rp5NXcUA{H$N$}J++o!La ztsJ>tX~vn4@9OKqqQ0fij<1x{Noqdeue)xqznNQ6NRdun&HuOh+uUuo?)iFr{#*U; z&m+3-v);RR=T76#RL%o$u5N1K7ybFPV@2-jrw9C<e?EO*C>nBl^4=E@!*}TKid*~P zgQ$nY$BA6ky-G{_9_?wkB&>W}N;T_r0Ap%Ygk!JK-{W$OqHgQIN=;qvxOV<yjT1ZX z+d9}(be>LLZoc-cu*$Q37S6+xSx%b8j5`A_-3pkt=ZeJyQI207eGCo(Dj`Mv3_myz z`Y<*qN3=LH{NP|>s5N)$RBX)NIBzZYA<gZtCtv04_#mS5#%-BCJA(+D=HpfUbJn!0 zZmiEf9y))wPtV=Z9n24v&f03~L_NRvuJTtx{K3H9Cjk#ReXVt#{@{LTEE^h@vg}~X zy$M%V-m~8D-sRom$|C+yW8S4I!eJ-l5`&LFI+VZcy<+HIr8K=>>HBBwwh32WJ<P~( z5_!^P1)HnV)|S-gOB5IwJ}ELV2s1D+6eO0E<fN7q>u2Vs8yK2^CtaqbItw!_Zry$` zBelef)5CkaMb(s^yd}GLvo0wvSzfZe#IxMfqkW6Vb%A%k@5vY1-+g}Avi^akdzhbF zzyS+^Ev$Q(|A?!qs%mR%+uPeaWE~Nn@G{UvSTnI<%CDX&W=^Lhlv8~t6s38vc2}oz zFIl7-bn?~9$zPkN9bUWe^y0qDi|3tQyzqB#@B76Q)h`{9&U{sz|FYZUv+Jziin@RP zN3zH5Y`wFyHI~KYex<A3t`^%}u6KSPQP`U_;oipoe*_E-4QI}rxpe7LUS8hV*x1)w zdrzOefBuk=|Km&j!NuzrU&?>9Nxpfq{NYOzCPscYjO5>F`9G;RU-&a$QJ3B(@Aa3v z^NO|Qgt;fKJo;TymH+0`|C_YF?VFlE{raDkSvHwD)>-d&>a5tKx6W1UTHF-#J7H$Z z-O~T2n%Rfd?$3C)C-Y5B-W$8Ok~^~Ax^DYh@lLAlh2+b(Z)N4==FOZrbN>AJ$jF;F zZrpe;eM45xR$9VRcD~iTx%Pi|mRQ==8e4t6VgAd;rq<N7{Acmcch67#ymjpBsb8PZ zT>5-Ut*AB~a^q5c{r?v)UVQoT<;|NnmDT?rzIgKS$@$M0U;h00^XSo|SFc_@d-m+z zyLUhTyn6UBvruPEWhLVu`~U41>=yjX-~8A7-)>HgW84hVlZC>j-~TS!+~8WjWZeUI zizjPq%+~BHFqk#vcv|j~f42*4dQ(J}#yDTh5Skp-`Y*%zV};c6ml4}yl24{gTk!hh zt&HTCCLBFi&+<$)SahmAHc>#2VNGL`#+Ii47K*6{YJ~J1%Z_ZH=~@<G7;AW%r&~=u z%P?^tOM1P5wb?l%UABd>Mjor5cK)2O!_D4>rF+s$xyJ(f_hnz7UH!{(_X4fGeDY=L ziw-Z~m%6d%fxAZ1wy1w|mG^V`Xm*%fSbwNs)83nA-u=J$jy-GfIN&pF-ofUB2C@M= z&KGh7I;2YYKD*JF&+_v9B1e;qTGr<;|D4;c{Qe$yf{3HB>Wqz6@lmRRryOT6`l`&; zithR@zJIwl>z4ZX$t=~g)@Ayx=Zx)k-ktGl&;9Do!!bRqb9p>3cKU|N-j>`VaP7|W z?facPbx&<OtYOQy{cz@?8D&a$*mTR3W_q0}TXZ9euY8eZ`;4;W3h}jN$*kW`mpyjL z=P!S}Fyl=1#xF;%RdX5~`?S}^_21&XDm%_(G~UuyP!L#EDgDJ-H6)sY?*fl<^D@RY zPrfZ|`}Fkp%raf~-;sXKXV`D%bzft*jQjnRUFcV<HqWD9+xe$eDym)U_@kh;=I|bd zV_k<2Rn$G)v`4}!)}?U6p8iVD9``Fgo?G5+EcHyeVi+7bga2n>Ug+tMg{gNZXrJ~B zy}anGXX)#@qn^I$=F3=371$<oCJ0opoRU%KxAS!^T>iJ;a6;n)ktv;NpQ{v}{>W@g zo$>X(TdaWgmNNaT+uT-}3$C7C#L0W`-i93Gy!nz|9e>$hDMm^Dd8Rk<P5$Aj-KDzI z?qx6EY}ZpB`uwj2lfK0?)~Cf6MOlB$-`IC*a%kZk?ngPB^rI%J80ETsh!O2)3wm;L zryIvJYdv=f8O<4Oidl8jAD@}J{CV)A!^}@lwc1@@cR9#=*Se=a9zKm(8u@nl8(u-3 ze_=BfKY599%YVIgw{BJayA+AvS~>N>=@~(Vw(AvcUfuA+Qgd?lxlPRN`G%@reNXSI z&FnkSvV6V#{aLFID8HX%*ZKGFxA)htcFg5y-26MXMd!G4h0oe&hvRmon&)bIPrb*( zxnQcW?18Qi>%0=R57iy{CDwnpF2aRrlY*tvz8V{sxn?eMi(JEPx2)uT|J6Ke-cnQ3 z^$R;cePz1;Xj;wt`a0X+(yJc)c;Dt?T2fs1?E3Gm{M(~XbiTD-sq*SMd)PYuveY9V zv!|z8-mMqpU-bFo`Tr7OGLz@U#~$6kXUzhMlQw%_vu66S3tha_;IW6}z=D|yb7ttW zO1phD$cQaCo~kwLfXDsp`JdODSg=ZL+EDlB%x3{L*W@oO=7n?qb_MJaNET_Xt}^Pp zxMBNWRs-`On^n^-&y`E=a$s;`aFmJQi&JW6x|OMr@8~xFY)JF3l3s}yN0Sya1PI>} zxWS+-8vf*zUxEAXz>Oz;d7oTv;*31iA+laAu1E6es}C<3^pCqPoqgCv(Q{s?>H6lF zDaRF68AKIg{u~fZ&D{PorS$aOmBn)FN<3F@NN?1CZanG7vi$eDZ(n3|^kr#Goten> z{?v+B>sO={eN0MQdvVt)<)aO=8ozjUUwprdclt{GEFPo0iI3YpeayUT(X+<!jIi3L z=X%V0RPR*06n=KdbJpZCuRWDTUY2Rc3w1?Y18Nx>4tHMT{n6X^<lde>bEB8WTK!88 z<gh8fJ?6M=)9rN%6NDc;aAr8YjZJm$%ec%<-*=qSx@-ExSzUkYwcgXmH~0%(&zQq0 z`0T5@`L)@T_h+v2>GTv>GiCA;x!F^%Pf7MTCpT4a;(YHjd-Rfmw5DILTIs=J(Rq2s zhgAn}ysx~Y6Z7?^+G+dBzO&Em;-)*rhaNcm^y>CEk_QUXEw%dpwB)-s^grlG_~;<a z(iWniXVdEH#KSk^*h2BpI%Z?JgZ@_hnwru&n?5GHq=X+{qjkhxG&U;WkmJw2Gv=h; zh?ls^b^FDVRnDh#-qr}DRFoZ)v6$27x1!|q)d|s3=gl-GY|;}sDy?8sd@;Y`(dH{B zlOkV#-W~M+?z(3=tEP5L725qr$!5Z#u9YWOa;J%yEC2m`J=gnn%GT!RKVG$UI(t5R zX?7+)@okmR@r+ree>YsVU4NoJ<X-pMV{1baZS#4qUy3=B_-bXU?Z0EDTaPTiQCuu| ztm|k;_P!;KMv67r6Mh7*yu8CXy{F#8$A9vX$U9|MPA*6k{#kLIxgu7)W8IIW6lSl` zWe?_l&s+D#MR`I0<+W$#WSn|rnw0TEb?z!|;TbpLc<u7+jaMvvt@Q4q#(GoR;^iOI zxXq88j{f$=J1OD1hS*_$W!?&g*S<G9-tBX{$3OWJyOIaXjE#M))#qaEmA9@=2%r94 z>!oOYy<}is%Z$+ey<Zn}ByIcYYwl;HC2-xKEaK*m<r7MF+}<|Nbm=N4{-=qTG}jsa zZdm&zGAH2`pUwJ)vq$x~E@jQVr7RK<!Nne?>9XV5`w1NU#V01PoacLIB=jIO`efIS z7rVYa6RGz|7MP*FxPI2{Q@*EOrIa^Z?(u%^koYEOebZ`%r!pZL;{Ka$H}`*@5nEHq zI8l9;(z&hM)OPD-@5(5<^WSpAx6NrYo@-zA_@%Qn)3^VKlPaHdYv_$f``o;9&+#j_ zuL-?%Jo?Q(`#H@M_swG8?(FyW^4WA5&#In!yS1usHfaBf$<#dmY+A|B$-EbY-oMP4 zJo(QWN8P{zz57-Z_q1=j_rEnM?fdGa>`P2$U56`0wsBhgNb<Xq+T6oY=J`3QJ|IO} zWx?zB&#LaYMousPdH?L+HlJ0c^(E%+U+mU)r`W!E<GN#?%{>2vj4FS2+nZujZ<hxe zfBOAtOT0+OAM2*)lKNBTot?Jgul2GV;iwXwa{UeQ`lk+L{r)kX$FJxdmqmCDyM=M+ zGq+;v(hnsOZ%=>tz^bZ!Z{pWq{=OT_-|YH#@b`1&>l3xFPoGk=PWgd)_w{D;BVJ2Y zvu?;OO*meAYQ<;Wf8ICsew{8-UHkoWs9oOmg=;=Nj=A=^bY{`@jY0PgCmsLHD`_`H zYO3*_%1=MlB{`3J98i!x9dJl4PA>AVF<(*pqo;K)JAWJH{>qGh@-$Ix-|t)T=Dm0M zI*##5T)xQg(v|tl{br@W5aEXto(f4#xLIk>D;4Wt_oy|EeeZdHLDiW(+j*GJaDFml zR{j6$%4g2MVZz*eH@KbH*_j+29X^Ofy%4kN6qH!P#N>R@;Za5cOTiV%QWu%S8~E06 zFFeKk`r+Xwr`{$H){`gPH3Ebg5;)krE{IDimqaRLcsJxM6=6Ngao{-1!<1iE!T&{% z&geS8`8ST?=!uRw-{*1lc1}sMTrqu@54VKRp8dQLEP|J!Srapo7i6$6S{^*>8N0L; zbBF%^id_<xUzrZ<%}@{(F<|PsCeGHL{Ney(eujd4?-mC~g#!I72d<?&GKYorEzaBA z@s>WEu5u@wxoNAj*ea%&J>3U_TtBBbO}Nh5wu0f&JLNA56XQEFCQJ(nQ0USR;I9&t zYjNax%Jl1iVN-^qhr+|%x<-x`4eRyJ%nNzHeNErYsWl2J8_KTTzc0(LFTbE&;r)j$ zNzZ=C?B1CXeKTk5>Yu6DJ6E{p=!9>@twlms$Mu%HE;}6aHjpRkLe5Ec3yp6&Yo(Ie zf6QUn{VU_}BIbvM&zF3h-t_VMt&h7ui%A_Wn{o2fb{D>&Kby8Ivp9FNxtni%(=Dc! z(PnD2Ebab`75Qhcc1CWH7vQ`vcx0j2^mkg%dbmpWaMpVYZmHlZ%=^Q1ME;}A&X|3l zUcc>{DfHv(<cf=TxgJy&Z%$U)cUG0}6vw+=>K@reu^&|*ZLPS>q3Zoo<#dJmVWUY; zZ%-0Ec|@VxXa=*}=d5*my-(^(v@E(I?zMqY^{yJ*j459}?d=I{E9Tt4X@QB3NRn~U z%%X+!HigZ2)G%w2r`kHZ1B|Q0<qoEsPfh+3>1lh-@9X5$FAazH^r!R~&dsdTF#WLn z<>_S{j|}bjm#cH7s=QA5VE>@>lDFO--)lO(;R$BWt+O7=&Aiewb1Glq?stbIX8O(y zKKoWouxKTRds9keq|2=WrTOgo?Dp|Txq8YqwZAHEzGp2MFt6kMo8`|Rs=b-}H2>AT z7EO<kIRai2E+?&>Wb$U!hq?C?<Ua26b+}^ne4a^l`W1<<QGMHV?;UjdBzZJ9`o-c$ zjd!!3<s4%A`B&s|%`=~0+aq7(dL9W+^PI+YKUMOs)h(flyw7gNIyxPbrAmq>T(c={ z@vOY_Gg_1LYHpgT<gz8#?xh@ER=v3L>b059e>x{{ZN5CaMsFt5>}eLqrdn{#XWDJ> zxt-nF^lXmc`#;Anx?DRm=lC|KIN$e5J8Rl{-bgRJqrSyPbG}kU+C`~ZdmgP<I<;t# zTYtrm8A?{-zpFQFP>?^kr6uIsidFk2UM&?ajg8RBbbRxp$$0j<GqDA;-gRAI*&b}i zxI29Ij^brO8<%`}8dLMOeQCs(NW}zwkNAiSJ1#IgByg(;SqSRfwoLgxLA%ab`{|^Q zg(Wwx`y4+O721+%p||(Y^ebl-{Z>>|Zr>vle4^p#>JNcSeq7vZa!T+1@plXMY}w?v z?p3&}UNNI_rJU)t=d;}Rs@*+xQ`C8q$G-YKmTBANPsyKbUwlW~xYeyb^xpq<kLIi` zTCjRvOX&Fpp~7!&>i@Rz+8(Yh8k#?0_dfNN3k}zAGhO*|hq*TA%9+3C6@F?Gt=9VE zH+@N1%r3Dr&nxu!_n%thnz^oY+ls#ek0OE}yf8ZQhD&4S(c{}cG%g6g_2KGu!~Lt@ ziZrSAJalxilQ|{&M{#xiWxa2wE<c@d<!R&fqXsu#PM;#PFrC?D+If?WjW;Gw6ufz$ zVcrwbm_wD1T&gb^%t}dpa#*8hOHBFMokizY)SI{-*890rIahV|s$Q+yy~<m8CI>pF zn*0te->Xm^rg3=JsuX$6#m4uR%zL_K)rA);wRU@kGsRE6#NsJkX0n!bbN1@}`{Ob$ zx*l^k-?<}RH6TQadC}{gtgkBaW4>>g!le1d_0pbwn>KOri}$H-J!ZD;SYU^u#w{+n z&DSJCIwF<`SJ&|5*Vp-{xqeVOD#W7mVq=%a#N4?$Q{OlI+IjJ9z}IWDGFr2``VNQ8 z>~sCh7r1ZHH9q}-YIo`VF6CRYlwF@cin}-=|2aocjl=qlUAs3Q4qqwfdZVXxd%K`e z;=`)Fw{J#eN@!oIP{@$UX`WHE{iIl)NjB3>n<XD#nD+j@_Dig6>ztB#+9fgT%699P z-0QQxpZ@hhxrbNaia!rtuN2SpzqaXyqSl-PB{flR9l66_W{cncGc&m-?B|U;ukT%Q z&Y6DK{oYOYo!8vIUU7H6dH>X_+bJ(^>nmR0aDGDEC4q>AA(lsY9;qDMp7Ow<V8i!) z@&UgW3Vv#y{fYT5i*|-v+NmX9cWj+s{Z+QUu*!Myakr9h)0}>}pK=Vn=veyK(RaV& z+c%DP&pH0x>Uem$<6`ksiozEaja^Tdw@T$WI0b9ls9HGWwpmn$Royi{U}4X|%Kt)! zd8gsOMFK7}POxZdE_fDpanWtAYlkoLak|7uI@!uzThO*(vD$+C$BeQwOx|y0xKv>E zJdQV&cSHD@6}A!9H!@9>XX|*&C)h|BFke~F%>1G!>5r%9)t<J%Ii9QLA1g`_xy@=a z{k=k5_L79<8|N&)m=w6_lKO&eKO<tk9r<>ULuvM=c=_hy6oC%M$7dR%qWJsLnh$J0 z_QfLbz+MM|aEr!?^{Y>1{45ek&)?u9TM@-7u<}v9irv=t;&YF%+Psr_)Xx0IQt{m- zjW$0O1NFNLQbk_;HMzjh@aYjh=b|G8*Jo6*v$uR`6;}1r<@KL?bi%#0tXsPl?_m-Q zI<S21R>NtUfpssLlUz<_>^>m&bIHfA@g;tXbI-hVOV7O1<F?={<NBS?kN3DcRbTw- z%z2tcc@oz%ao4R!?j4yS&CI^l@E*f5;}C|R(u7nC2OhZvGo070acL}LR8Z*UVsP1c zm{Fqi!BM{rH&(a$$8d{TPT6{kVdlx7Nd^n=ux~o^$T5LM;!Zb{)`F8cOMB9qIvh@H z6jE1VQNG)l!PpR>*_=Azb5Y7oCSPqqMuh`+XY6&6dAiv$w#!~+TB3@GAMeveC-j%~ z%!>I}WjOze&(GI+mM@=Qif~-Acz529ZrQs!x<}Uac?2>aX7poQ>&|MqxcqmpYxCD8 z1CEWEE1VR$kLG00-_g+Q#hsuhFoSLHjTur~>m+K=-IwLzYV4UY;Xl)NzQtGjZ*O+K zw4^j_s#qH@!{YxAp0`)eU=ZQGp>#%~VR7%pZ|xf%`z}~xTyVSogSYq%UI8Hvhs(E_ zyakgI<}@y5*SypFhxg2%gU4RX;Cm7O`oKi-7xNcJ3-sk~_+eHhASKbn#dS;QAA@4| z;w8UX3b|uaj9NAvbF_JVU{3v<pGOtm6z-1Ld3)K_De>vsdIhYV-c+AylX$^+`%vMo z;+ydWyzL&(k3Dh9tY$6kY)X4@cZ*~6?I*muSGe5X~-r?_sm<hy8=H_=bu-7a~5 zn>F{1wat6$K-nD~vO6T@Dr~fu)cofAV4cA})$Y>Y4ZE29*_T({mCfmssbE>&(!ad* zo7UwWWwpV=>u%WR@Y<KW)sIa#J$CKPnVw?LrAdE_QdAt{PZbHVS6Q8^INSMXmf7CL zr_BDZGkUkf@y(KxAC{;-IHF;_c=6xrmGj<es>!B`g#XTR7k7?+*4{p6;o>8Yk1PqZ zWSrJ>#J0Rqv|PApij2%c`@GLL?>uE%B$?NIsL64XWuX!W=O=rmK#tI)Jioh_>r?L6 zaY^QVPQ7G0PqyT_@Wwety>oT!#R^|3@nyd{sdetmqQ|A*&;N+z^5gvUx<>0}|4);) zGuPR7PrS>1r#I(q%JTs4e~Z?%q;K5+MQo-!qqvvYviduMGp^;`z4m;S-0`T)uHVVi zH}S_h@82EGyZ*=i7|v(0oZn+Q^Wr-9#yGBAuNt?jSmy)RksyxvOCB!kTzA|k=HOX( zt7xyRlxTd_hs(U%V{_Lg<>s*a2z+zBF5UVju;|TGZF8xok2t2ipHXGLg|&Ug?Xc?V zuj{>cg|;gEdwz6z`^xwe?+$tOyovkZ+<oMs)pd>cSCo`umvPrWsoCZIQ`N+N`lqL? z@!yr7NFQW3mp*dAy!qFaT?tNRpC7OrFKqjzGMgplo{fBy!It)<n3b2JrtatMFTHZ2 zt^dTb^ON{remx-ko$L0Zb7%XaW@|;x=e}mvC_j5|)%NAWrZ;c5`5#;-_Sp32>vYfA zT#@@rSf(reUU_d7&%5V6olkizmfcx9BfhMD@j+jSk{v4BGUxvc>Ts;Px92;H`aYXO zzOT+(|DOE&P3&iJk8eHde|TnuHcDP(3b+`**>%qI@2yP@U(%Ln-DZwI$Re~yu;Ts_ zr4CJ#?|h2YMv3_vGFCG~xZ9jwhH52Uiam4OxI&bv;;CM_{nNS+^=_)+_ATOG$Adi6 zSIMuOrtx&b=aYqR4+%&~B^&B=J`;|tId(|+_~zfQN}rvb&msDtN82<<>2CF|nouj< zn9phpbGNfHFa7s_-oYuip1b{BxPC=y(iUA`uSJ(zbTvx#&K?W8Vb7oXdWTnkie>lQ zw9jUd=R~!io_zA+-VL2F=`SsNFYey@`)ba9%PEV$7d<!le)hj%!=x{9dG5kLf8|>q zJRGul4Ws3|DbpuB{&;@6X0Nba@Y!!C_cJc!>VC89>ACWq_Qm>dkDvb1wfN0_?g+m) z&NckE*Z;b$J9pk47XSV4R>fTF7U{e<-R7m^7PD&|i-Rv*{PKQk!Qq?f&&vFEZTwx6 zqsm|DxN%bO$*FyFudfg;FpSyr?en3myRZF&&M)7_+4Ir*hP$i4q(vM3R;`YYnftbj zThz$^*LA<cFEZ19q>6}7y>TISa?0(xX@&PK6dh77-<Mx=)_2C?|2*6uRm+PsE!*Em z`Gu-w#BzRAwNz7I<XY^Vvvcb8NRji_6LmEz?)K+=(b^izaf(~cP*-NpbT7|pukDU| z?zeDixx9GwqiDbQOU~Af{~rkZoq7=yfA%f&zt9ycxgXA1k#XwplZ#h2>g2`U>3uc- zy2*z>ch`LV$vq?fw#A%<uD4C%X2l=3IlIU8xRL&p`0Km2>~Oult!zU4`G3FPi`lwg zFO{i1p4j&O*QsSJ-oM^?H~(Q1&VI(!b}y1mI6+}*Ui_UWi?5b#dCeGc;Y8Rw2^Iyl z`wN*Ft|*2vIP4Ct(qLcc?pU*9*YvVF4o<^k@2dUyKmPfip1)xJ<D;fOO`5jo$dz15 z(7QGJ;qucLe_vG4PFN7&yoIlN3*+qrWqe<grKQ==xvi}%T)|zS!G4rKeesQp4+@-l zOh3PkX4uF(D=?vRdGm+3QXBUpb{iU(AO3Z^e?ytaXDg}RNFTZO$KAf}Y+NP5N~@kN zQV^24aqn#5H^o{uSN5+*3?J$TzE5*McV~qngUP46A`Mj$9GtAH@7;D`+<KIm@y>nC zSar_6ub)>7o6TFNy>*Jb{+<n=cQgE4{-Jtu8EeS@{d-w<IWV+~-kSXUfdAcnyLHds z$)Bfvzvg%!dl%EZ(mL1leS7bJw6oYN{{F)1t?Ih}=Y2J?3Y6ZkYpTe*ZX5NA{wi%j zAK3>*=O%wkP2>Jv`TSGVuE$erzTZ8*;G|u0^W8d)#{qkPa9uE&rm$PyTbt>Ot>Bb0 zC)>}nb|+3@6tr;tCg~g%z+_*l_GIo9!)b1-Sqe}4yr`a&TT&dPQOUgP|M_pZGUcnk zl$`SKOO(IXqv$ZDQC>jLR?<nhhHI<*juNejr}EZw8t^ZjVG=sy3TI)*>F%YGwjV@F zoi^Bo>w4_<_kD0KDe!DgVD<ILBVPk+c5lc$p4D+%X_E4UIV*zd9_R{WNSc5C@y&PZ z)ersM%o7i@-`QcnG(&Z|meWs@wjVF7x}$RR43AXu-?ym^dB`(S<$uC8g^fn1ZrD$b zS!L(`LjStjewoEtA<1dyt{pa6XKX%w*WJ8x?{1l$D?a)5VsBRC_pN&l&WP|WFjz99 z+ba3cY;WDeht4kA{2{UF@#NJ9lLVC$_m=kVW%YkzW!sr>ed3(RJ2ho?w;L~<KjF1~ z*3UU9PQiT#+gB#~?7Z{3v3XwYd&d2>^N#eHp6)+zrS87Cj(Kdtsej=eXV0+QE>)XW zDf#r$MIX62+c$Xc4XL`}ebl{k!-PxwJihr(<a#vmv$SdTPS!oXrdwTYOU@jPy7*<E zS|z*voXhuOE^SNF%lJJ@fA+pPzgOqEIeu_m`N3+l&^njL_k8zkTw>QJ_3c}eaJA=6 zgTH4cOW*QW>rZq1URfO4cC6*7x$CuGO}msstQYtc*tx8j^ou=|`M=r3B-4l$mmDfN zFGegn==X&CaNmw*f#83JpZa6}?&(rJQ1~KF_HSF8_Mf)u2j=segAH%;cdWlQJ$&zc z!RD#Y{SSF7v5D&(f8^R{`lRc?W20>h(-!S^@Bb6NUP1T31N(39ZtPid`%j>*?ak0_ z^IdnXUJ;RT@Nwq3f2(!3&dSSq?pSQpY<G9zhG+VXtC#D=tUk+7y;kZ&D|7Bu&+{+c zv}EFgu3L9hB-{3^4}Bh*=bwJOD!Fpj>hICE{lT`e2f6l?&6&GDFXnBevRd&{(*s=x zPQ+(v{eJZ{B4kaxu!LQ&#ltYCM@b?-t$Kr3M*W;L^^u&(=0&~SF)YC$lf*i<Jn`+g ze}DQ~Wp(8*o33s&GhABHwnHXolkdukHSP8bOn0yc%)0nj_U+_pnF>7eGe12NmkO<W z_NQg5!flVkQv%r5^=Jl|Jj~_D)m)}rl+C@&aN|e0_BlH*JX#k}sG7RMudd*1*ki@? z(??eoNoIu{I=xNAd$Ytx_iUr^HMiO(rEo=m*e#mI8tutF!T5N^4$;=;xHV6=oG1=% zuUI{^XpQ~JY3HB6^?&AQe`C$ARGleZrYfsTZt9#%`LpKkgOx_-Ew4p>nwce8w7&4W zz2Wxnk%#^k2WQ(J{3f~EdH%faV-jbC<Em;rqMMp7|2X{0<Ywc&)9(CjzB?prKAbvn zHc(mi^qQsXKAQ6-ycN4>Hk(=V{j=51GxxsTuU1sDVhWq_9|hOh?>DWFUOXeJWAmn^ z1(ouA6?c=)Eid@=#8Y%v=I@7BpK*#j7JjmN$<6FC$HflE@|JrAq+fh=CF^~4=yNNn zK#j#uYu`Lr<#8!`f9$XG>G#@#vz7K`SFV3zGws!?x0_8*Sb1u&Sk-S(ZYqvj`*4BQ z+cuv<R>38&*XGWxWH)LvEfXx0WmK+dTIBq8{hPP{&%XLTMYlAulEwAsf1_&sAp6$_ z%KvKr@^4OTKk?*B-0O9(XNJsvze{Cj>~)*-_b1tVOq||(_FiHAxu3sQufGv*=b2IE z?-J*}FgHw=C(ShOi2wVrb-p~cnb~`NYFFNnK6h@uYnEo`KVjQ5D^+BV3hi6D!`l9& z@TV&CT@#;L+!4*ZfBD7k!tI6Eo8=1ReqGFOPx)LIVfMgi>GAydgwKgqF>7QZ)qU2i z7ny(kyUy#R8)X_Z8J}7F;W299UZ<wyTBynDu_UE+b*pTKP1N*#$(y()U%0(9_My}N ztHoO^tDgNWG*UbxF1}~i8orxceGgYIE%$Rsd|Y!;`|s&lc8=GSi*AYqa`JYqxNCPz z_UN(co7xtwo-VgH)%xMWn8cGOx1T)~#yu-REq2=L+P&<R4BsY-ew}FkHIV1Q_dvZb zdvCs8yzAX!x3|kHyEs@FT>h~mc9O1Qb5)Y`_+2qYjDg{|IJQL%rr<>l)4$t`G(0}` zzHj&B!0CH8J?8LC4flu%+oZX=$gTCw=IzFh-dMM&q_2Oocdo8-^olda=brVvfByNe z_CEWX`}Q{H?LXM8fBtoaZTQrQ+qf8Xnfe+3yLx+{zIN@}@#E|hdhFN_oqxi6@>JTB z^l2%f+M8}k8$Htf`O|t6+ovb2lh&kGugfjZdQy<`t|skKN!qijw0C70?`zXuI@UE? zZTzUV|Fc^3?>TiGJ2r6NDCbrD=_*_8HpjAk?#@O2dlsEsabDbR#)}s(u3QPRk&6!u zym;k`N&K(mRjbmhb>>Ml-}N|W!P8;eaYXLelKHHv^IFyBw=SLIvOKotoJH69n7@;X z8_rsu(y-`0Z+Gx%+!E10f2ZxA62B?#{-*C+KRl?`wA?*qO1$I0xWdNuR@$o+LrvxW zW$gKL(I@An%JtG1v#)cu2}DIlS65ZJxw#!Xc5K=5<>F#u|Gs?5D;Mhc>wKj1<l}Gm z4&Ph2dE33y^B(?PcyVv%%Ez5A@9u1Ee);qC#FLvpzMQ=B=joUCpZt8fbm`KkPoGYm zI`!+<Ql*JI_U^6Sxy9+<_PU*ZckbR*o#^rV_wV-h_T$HoPv8A}`SRr{Mn7M@;`;Fa zk9_m@DWB?NzwG~X-%lebmhsz43&GUL+=C%JO6xgO<E;-R{(1GX<I|gU8rOb*D{lFe zZ@baPU)geg_>(Vc2flK}eGjX7??18P_Vj;$+}|b4>N$NZ<~{!(0}dZqO`gZyPfs{~ zxg6HV_=f3yV8Q7e&jUHf9sU>^B~ANtxUJwq`M&o`%1X-S2Mc?wYLu^Qeq1);S^Bd0 zw~ZpV?#;`)a#d<eV^(1dL)J=hO@)nHCtqjY`n0~vK#ebH+Mb6i8{e}$(_`3fudStF z`=H=g=b5Bk3xBxm{}UQ{o=Z3)vF~l&gM0R@d*W7Fus;ssd10!u_<E+$9E&ccZAvfJ zEL|(5^EPd%AIsFn>!&g#<b`j?{(GlW<`P@DKO@iPZoIVimK_g+9PRG?y*&TtqNP8Z zYBufvS-oTFQ+va<1LDjYGjqk6SF(JrVCvw%F4mm5>cdh2H|N_+1Hx1k9sBt>0z%k+ z9Y|zIFqx{fTwyB%1H&oq6JbxjMs4nTuxs7_Y2H<m|J0(4EZ_T2`O?Ls^X;G4&)F+> zf2*v2Y`Sz_{n3ooT>rhVm~Z(#J*DT&{<kN^C$~G!);(NozyGU|B<J=e{3nmztlYR( z!_sW_lccq~K8IgY6n@>bqg-0;gvjoFHM32wi(b((OK`N%x6WDr?!I}?suNXyixO4D z1+?ewnD&tAW7J{g=2sId70(zS`YFHT)pcXr>94u=-6&xXUN81!-q&?c!?$l1O$$5L zu}6PRw1u$V+4Ohk{rgw?)lQy%E_}mGF9Xq=t7Ob;_J_KrF1<G^NI+z!_*$7O`SUeJ zU4kVRswC~7JAdw+Z@N`$Yd<U3tzSREKD$^kYxU1R8O6(48G6$)<SdLuJzI+=9Obf_ z(S0xM&V+k+PVn~KpOV3RQ{?T$U6!^TOXMW-12dhE=vR0OhDz;Ra&lkf;zf>&RHNp6 zNceR4--0t)6S*HP-~Igb!)eB?a}`C!;@j5uY~=dB(JN?v=iYTYW%`(3g_l)7))A9` z-?ySFN7gT@ty|W2ulLUiliY4`VeaL%6|1}FuHJcarqonsjvd$bf8u1>@K>6Hkz?(_ zrHlv7wQTEtJ8!RC8K`B?FXCubc){}Q6l-Pfi}x9}3SRu=9BLf-klS2%bFj?0Yo9-; zetl(p?(gocKEExl^F5QbUcNS}_>p^3_YM!|$h{mtOBPQ)`f-knfR^oj=?V8N@5=}7 zt}Zmlds0zoks4f8xWwrB#^S;~5_R7{J<0ES{Pd;NzAvA8A~qL$-g~>Vy0p&VWkqS> zrl_jY%DO$D=W|?2V_eV?Ch$9tVQQLKN9zTyiMM%MVq0G@Y^pRU@M2iBc>cm9L!YQ6 zJaR{ze^2$|z34Z8mo(G$KVEyc&hc1(qxAMdvj9^!agp1d4+BG-V(wq(WV#yFI`530 zrk+)8<|odnZTDi#j-N<)XUG;{w>hWy<ck175zXg;=N|5kbN#rqbEEaCPmHs6wtwhR z|N1Pqc!$zm>*omq2fEIw{gQsJwa7iMO{CbXj#VImll|9$B<6F;VQgwkq6<t6%@=RD zvew7Qzu9EYPBu01Z+zKT!nTD>j$5wnweIt`u9vIomYr=}ZTtT9I^80FuLDAh<hz!H z#BNqjGZs94@O#g;<TtV|1+2SXA6gi?m@WF;$=kt}Qol}Ya<R2sk{h&0)^^hQr)w|p zw-xFHC0%jQ`FiXP4`YaG=l{4bd2v?~63UYdeg<x=+_LF{zRIRkTWcKlZ=LA+?88k3 zuj>2rOy=E=uGC6fvTo`^7smXkJ!@OD7oC$(TXrWsAl#uVd|ybPlFeS-pGG;Mc{c)% zyT*Tw+8bt=cjmFektY||#uPr!vR%?U$5d(M?nAc=Y@#0(|KpsMnWFcuF|>N&hjW`g z*qWF!=kuQJY1{g%qO4}+ZPUo;z<UNKH*nb6Sl^u$XHm50z!ohQ#(OtPCao?qym4yn z#Z>L&`Werih0ecTt#2^*&F|3I`iM7?Ggk}gr7uZ!jb{2(c{lTh?&S?CV(oAF+nP?R zeKmi<a8XA72Osx7+mM^x&ll@OC9a>GV`951AjRaOg^lbtYb}HL-`(2_S5_x{o~So@ z_DQqNkrgJohi#89>h{<er(k1S91?3C@#eur``rca->g_Rb=?uonB=^fe|Jn<5c+7& zCHw74<uT@;b{-L3Z@53PD#qS4;!)gX`~7cA?`-fW51n;p&87|0tM2Sr7W&Hc=Kg|^ z`a4^)V_)rD_3`&Bsq>{1lv+hKeRtje)m|oX*Y|`Pi-J#y;m?_qr8B<2GI#m6gjXzB zOliqZm%p!;%oRP9J(ZQg_&U=Ae<9PG@0x^CZJifAb@^GEutT+av%g?pqe9=Y)P}A~ zu>)NKXEbklNp_rLk~q9##!BV}?)B5(E#9DTtY_l#N8gsnEnUdx6OzpJU+V)~gs0$+ zgUvh7NidY1Vm!p6W<8_p(1q&{ORShLUW=Ty=c0ye*OR}o&wj6N%=q_AgFl#c<88x6 zhYy`b;ZKVK3>3K+cyXjH&|_v>r|Z^GF|{GlD%SV;H07!}OY*hOC%!)4`>Jx?VdlKR zH1)d?TYjC~vBN$75!2J8JXY~fpQOW;5{`DP;aq##+~M5a^nTgo_4iBnyLs|6l+T^x zE4XE~b`ab84v)%DUp#zDp9<T35Dwr>(>b>2jhpK>hTx9PON#vDcgvp8yl<qKvOu|` zF=OFg^|W)T`U)m{S`(~w=1o5HZN;|L)5MmE?$G0?Z~yn<d-VOU0<W%EZ;jOIxuCXk zr_sj0yI<EU&wa7|(w;f9vvx0S_eghVZe8^AL&E=eN<Kl4-H$n{A5K`YcyGdf!K;VA ziof4|CGezu(b-x5Zr<N6e^}K(<+;1s^;zFvvAgYBW4ljai+s1rDU+S+o$^%sUrTi@ zD^aNzWb+QOnsaVPioK8BMg14`SM39z{5}2d(DM+#vbGRi{?iY+zl2rBX9UDAZd$A< zCbMs;&CH*NwmQ66b?wKMe1F#2uRfRmocg9l<aXm>m&rG0OV93oak}kW-?9Dr7H0oj z9;sZq{q|#*3|G{>=~c@0FN)=4W(m&SeU9r`+c)Q_=g)6{>b2`<_T<SjGj}Tmw$)B9 z{<g9rL}inE{)wa#(|qTH58}G_<w-w}`a9Y9qS-6)yVG|?2Or<(US_+_)J@Bs+k9Q# z-UQ*fzr^PIy!jk^K4+#^%)WVl)_=Lf5^wd^capo@oPEx+ZAO*3GWI)OBz&23y!zzB zzjD#PgA<uotW*)pu6bb3ydb;CWKGOOr(a1rb|Kf+P1jjJrTPwgR!o`Idj<aZJ&8i8 zE1o`zx_q{NMY8(Zt)CwBX?A-v@BQ|<;I59jx!!pN%Po<{SA^q)b(V@-q(5fg@KuxZ z`?QY^mX!-cdXGK|+T-aKclPlo*L9!fn*NKr5pem|h3&FZOV=%ITf>(7-b7CJwX)Tp zZB=_xtDN$iYC<<OTD;s)v7#|-#h%)Jb!o*l(<d^9RbMvOw`mZSRcYokbX(tAx#(ic z?OA^k6!;(1YFizPu$jeGpr*0ly^6s9Uispte?Aq$B2tPkWF9&$EYs>-5YSU&RcSpt z^qYMAk_SmHN2Jc@tP>KwBynhw?@#>@1;wtqPv6uoZJ%YjOQ!BNw~XvrE{`P9Gt&ZB z&D!+BUBmV6Gj9j){rZo!U8VC4K3A%J5MN~Pv}Cb(Wb(9)-!pAqnC9khT6yue^x~-x z6E~gTqrtgv($>7h#c{O{6~o=`O$ynVYij7Nu6Qr@pD=r)rQ5wJ2ldq>Yi33sUTb@J zO*ZepHFv+-?W;T~b-br5`RLJ&*N+zZ9WR`F>?6m<qn}S6<DPMZd(oqZJ1Qpbs<`;F z;^XBC&TTB7H(S`%ID=NONX9hHNr-JaRC4I?Wfs?ME~z(NL?^q1hA1&jUlBKbh2`88 zwX;?np0-4L_7}(dDklY|ru29lt@VCYwAo_qrUl2ekG}r6{GE4u$Vm%Z(`gTcyEgwl zvh~byQT|QVzWWrXD6NwDxx?0TmUzL;*9rO0Ei>kvxtn=rCdXNymQU{_%L8Ywdn;Kz zH_0$(M@3}JB2GQY*29kqR+jEq{UtNzm?mGzfu-9#)<@(WUgN@fEPzXrY0qkVKK+#i z+oPm8R#)^n><HC#3={Yq@34gLOyU#GoQabzas84w@MFiD$i18o5>=O;US1N)IMr`= z$)R0eokb;tjyXDdF(1BU?Q`j1_sd>~7fm^@KA5!ksWvF-{S9mIeR2AW$jU9tstx$h zTwa$s;oQ2=od!Ok>=XQ$8aFpAD2o0SwmRfq$$JZhbfX&+T^2U)oEnsudUCdFCRam% zaZq5hZ%M-UQif?=-x4HR&m}!8J#8NNE<U(YQ@XOT&2OfhgK30T2;*n5rIY;}dHrfv zu1aIwvwl{I`OlYSF)fd5rLE_g9G(9yT%+@hnnH4`!I{j9QibnrPYEoLnt3^5Uh<h4 zl80u0j+z=eb(Z12$JNRos)e6Sll)zN{9V3E;*4p04s6V(@3$2hrT*1Q?JrvNAaz@L z*4fIil}4Y0-t=tT%yF=~lfiiP{6L+^?oS8qq^~)cx*%a<jPca(4~;A1-rT<*r2h6p zQALQcC)a^BOc4T&H&=vth?y$aGAys+6Mm$vP^g^#qO$SZ@}>YwiGIEVX)QZ7CI!j} zJ8nL4;^mQ-B}XEY_=}H=oU^M}n=Q5Qc-wQIHjY(?VoDEK2|eIRez8JkhC|Zk{H>=H zA{<XCCVv&+XRvrG7gFDnyKMc8qLnjN$?)VYt#Hc>wV4)`6B4_|IOxum*iAx_Og~v- zO<DiXJjw7rNG4#poeE?82crz*pc^-)d+u+Ux7qjx<AFBm)HC;<uE~7*hWF{5%}>K) zo)pRTaoPRkY77_M8`SZnT-1D1YHeYF!;j;K_AJtWZ?{-mQT?t_K!(Z-Z4M6R3l2Uh zzkjM^GN`tg?@FyPDo^<S?!XeR`OCk0?NmSbXm!d{x71|eNx|P_m4p`juan%GwEBYo z>Y)FpX5E>%&HZG{(-Q^kp?f_}FMYN(gl8{1XS+tvvW`Ci{Bt`V&F@NDFH*kuu>Q69 zccyx8y*U>g2zmHpb!7dAz4uF<?i)T^H>GTEzd%fx&lj^ki;(6k9@hUK^8d+`*&BKK zajYlT?-`yCqCc4YI)Cxct0?<`-;V`<x;M>pjye9^y85eqY69ntQ$n-O=gEFm;{Eb^ zP4C?GQoHv`&s_5M(3NF1_N~WxvMTtNylm%Uy;mVwZW_B(ujy(<Q~s{(>{adgTI);< z*K=N)&NpxFTFxD6-xw0B^e(JnD&40hs&e*I!B)rVPs4i-EUeGlVeiQMbf?%KD~mIS zEe_l;JHaUZn(2B$^X^STe^^r2_{FvEc)IfP^5k0!|GhI?F<0u$k2S{@1Y~TD($Ic; zdgg}$g<ItulF=LQA3A&UjE$JiGRa$6Pt>(um1QjEG|u$hcVEx-w%y#v<#RI}Q*XP3 zypoyO8{YfumBy0m9eG#m-Y<#ntNpd%b?5TqZgFq?`yANf?uT>vuGzX`VjWLy(DkSM zdpBG)W2|W3I(z%v<^FZOZF09>H>pjT*|5p|OU=RU``W(Uk$;hSXnSnwsvozM4s~VM z$p7w`C%to$<gK2sRu0c^mB<^&D$cksWn2E!)@SM6-t0v-tM-)i-g+rrJt=cGYt~W4 z-gQg!op1Qx@-J2G>Ml9nvgg!7uQdzpQe3nrXq|DrV!v!ze4px;Z5ubnYCNb|yZURR zxY6EzX6bt__wN<_d->8le&_X#E23N@bKcKY;^%bvEdBTyk63w8-?|0SXWW*)Gx9B% ze^H>_@xHj)`k=teqPG$!n)3gB;K(fY{iZ<dnu`}0+tVB~!a24DyC=33&2xNx_<+l; zjtzpg83zC2o44KEpVn}2@6wF*p|`@#U))LfoVVF!{$FeR%W=o=_k25_B57k?_&D+9 z!rZ^f4o=&f1)4bnS}k|H$q3%HKjVkSgTRh}s?({wf1Fk<_P%v=iiG}$6}gw$l#TEI zuT}V_CKt>iRdGa0?NcR7j#=Uh>qMPzN9wbl{JnK{-Z{>?m<!xu=F6h(^(Etdjb<5r zd69If{@rhu|AM|X4%a2kFGR&&aaO&iWn!RZZ(p$3@Zi#jN9)3(cQ-YDIBK!f-zQ=s z<JX@{W)=7zv3%zI<-kd)XO79UH!q(*KVtdGKPAVGmRxgxdi807*}0kPOoLk=?ORj4 z-paTBv1Uv{;eWB@fbNUjbGrmGA3wC6#l_I|;obbY?{`*Ay4I8Wr)JTw^2^GL(qnUt zi@q+8^?h%0{LG8RKR@<!?NgWYf4QsN##&ka;WMk!w`aC^20Fh<)AbYIdw<ugPn>$O zNsBG^Evq<Z_tl1J`=J8|e(HRiSl=Hp>GU6+E4inhFP>*CceT2YkzdvE`Jb9vt6e#Z zW_3$t%K5)pKQ%YAw0nO{kkQQMUsW4soiC2n`}ikaR9>HZhJHNfFWtl9%Pft)gf3S6 z=V|b9;mdPvPyI8$$V$~4r7Yf-8&jv4ecArX3|;FV`$X%Xgzsh(tbe7D=U;68SwH{B zZ#%mQ%;NK#cgg#;*X)+NZ4fbg&x$koLd~&}|J)nD{9$4K-xLy+WzFfeZi8upA%A$C zaF&nwvB1`v&JR@`TZHXvKea~hWWJvM(Bxn4%9QTo*~?=7G#>0@I#)C8?52qDmbI0O zeU2Hu{S&n4zLi<B?NxuvKZ`EDZ?T)n-MhT_xkSdt&$+e!Ul#r}_FE|F8g5=GU{~3l z`z`N$!J7jcE{Ok3>~|DD67sRB=G|+<(wg_S6^B&sroDUmtp7Umf@gt#XUk4FC-<zn z_TK%_ik<vUj^6KYYwX(P^4V#}fp@bq);>SJZob`lPv`31ZOe>iU+?6;eS7-t-7(hH z{pEaT%KQG5`5Bd+n^k^pr&yVuemTRP-3!!rPZ8TK@IQ9dnb=p;VsG8weSLjd;`SY$ zU;I6K#8lGig|gK;_qHDSIr~Vd>!XMF9#?NVu9>h={l$Lv^LK<ZZwmk2t6sNN{or2x zpDF(vkM0v`|G&@Y*}j<5`wqSTdp!Ji*B$m#{(K=id?A1N1zyf%f2GSlYd`;%^?W5e z_)C+S?K~A8NHiv$4ZSRG5PiDesbR$xi3ukb2_^G+xc!^le)?4Q`zZ=_2OfVn(t6Tw zI=e5hzRyKxs@#4nwFUjIDt*3kf_=h2_ssg=dheO@ugJD{Ep5g52`&8!+I=VPuh#e} zY;K=CXSr&X`)aP(<diZA(He;pwd;+vJ|#Vx@S699Q0B}V4Z5G!U*2t{z4)P8xQ$|X z)P(={S{R@FM;gRl!{(~=utMhd85stKP&sUa*k+JH?9ymqhQ&vZ-%wLfP*6}j!NB;E zPjJc7-MgIy1WPa7y=1t{{X2su=gEt6FIfr*NO<(@cwfE$Xzje;zaP)hFF02@@3Wt$ zW5^LLh8=yyoImulva<U6`t0oN7%GnF^4;#;VHb9eX>~$tZF+C$mV>Kq#An_}4wc=I z)wlhX-~Tgr^Ly^(o!K9^=li~mf7-Tw+f(%6*sZGMw>2BS?YsW|@48r~cXOBw;+_2d z?z_LE^-c}n{+~jPUwd|b>)-#mv%jzJ+=&w!nwpME6W_jlt8My~yVv)4VrTotO!g0R zx*K+!F8EOya?3U6TCC5xII~AKyoHlPI$FgOgS+1wo!-uU+U(S-|JO|4Z!eqoG<=Tu z)r9T|<*L2kzsk1H-8<viy3g}%Z(O_g`&;9>b?X`%8#_BYU%q?^*$j6#es45$GyC7> z<9k;eerV`({z2vc6Mqj_q~*Lysr*`(^e-*#V^-qRy29M#<mBSw;_~wH`uhJLK79D` z<40Zc_qzWdo;-Q-<%>x3!I+qsn7Fum^ApysU%xTp&Edn$5B~q$&-q2_%l>me<A3I> zFZm$H&|Ps}H2ZTM>towgbJwfSzPC&^&`j67Ci<mzxlqOao>kg19mx}VtJbx+@ThHk zIb}AVQg>T$Wp3N1DX+TSja}{Kb@;DM?_oZuA|R7`@PppL<APIS?{fLgI^;iT>dFsk z48lK33LeG1wTXOb<JaWuy)0=Z>jEW?b>VR#W>*zNPq`hm7hK`nW6l4EVTNYpYn}tO zKK?iUd>7}pWxRUQipfFe%^TIFJI_eyy83$v=vFc7)E-&G#<XhXgcUa*TL~P$^?k_~ z`)ntjTg(10392%4_gYZ3iSztsp=%C7^Cn2Fzr10YGwa_ev!e~Fg<G|DzIwY>yk6|p z`~z*bZtMMD_r0dRV&TP)pQW1Tt=k~+KI3@Yyd2)=StVt664x7ueome{_rIrgORg=0 z%gY^d9p!Borm`|fm^A0!Um%&$*>Q4d(@KS)0EU&TSEOmwN!(6jF}_o1JZbHY663DV z>{Xww^Y=e?IWgJNdD4vK!ClfDfBb&2$6}(Y^RfuWO-~N7NQx=nKC=Bw$Ds<|e+Sn_ zXqGNtBw}i>#S(LV-%<{}gAzL@e{yr|QFXm}wNo`t|HNjClWbvObDl{(NtwU)^W&+p zo6Z-`Oq*o6iD%+thXpzFvmKA^3l-3<Y0y(?)Y`04eQM8reXq^>_w~;;$-bHXq;;eG z6r~66`A^N*%oy~e!NmL$M^}7B;K!*ctndGa*iI2(W;kD9|B$6+V&r4SdH*(rt>JOM z>yrC``SrAG&M!IY)?YV#(VgECrudnE^X$a>zFF4}TlCG2fA~LfoygXGr`Fp@IPcuH z_iBD~*jpj#r`z9L*4~?At7-o8c9rF~A1chgJ{6y`^S^%oc)r0{^tsjLg~#V-c~&gi zZoQFZj_co$bCJvEiqAe*qkE=5F!bn}l~YfwUq35NrcJoZ)?ZLeHZDb3rdrQ$uKynQ ztm4?_m>skH%6+?p3;rd%cK`5gMfUNTY;!6mPq}u(?{R5~mSOR-`+a)PbPw<Rr+Z^r z-H+`aXIf`fYzwe`661Q!i}@|fGUg>GbQpLVQbiuW-;+AM^<vko53ic|!=(k+Tn(Rn zQR#Si^vCx*)^DH8+i~<*+S-`)PmQkCRlRfSdbD#z^xb;dKYHc&SF9*sx%9V$P{@hu z9p^uP{TCIcttF-rdm!rhFLs9=^Xhr3PhI>bZkgI=DHZ;!xO-;B@#1p3<OIdWh4Ci- zf3|P9_PRUrruFx|ryfh5nf%*GZmW87$l5D~oxe_N-BRrSX`^OQb!*z!fTEAr59z=C zw_VU7eVH(OoD{>(tqe`Gm!4R#wNb}R-@)a1?2jo+9jBaW5nx<pqf{;w_v?14>> z4M(C3uid+<qF=r4+`i*}JNm^9Pm63~*j8ifpTGL}y$ya>t~;mB*gk8^vgm)O*j;O4 z_AnSt@L3;Mz443pq&dzE>uox3rLb)DJazI=i;S?5JWI~Kia7?_&jXfA7U|7vUq4Yt z`9_u0W3kvDHU5PUzFx{)bKFDmuWFXVr)MU54FU&0d^n-OSRm@Xq(%Me1%vqi#;Oe- zrA=a|R++5GshKvztSLcIQYPfTxu&1rEoTko$vPe<d{oj!4?ep+S+w-_{1EA;qMqqe zaRrl)KQ-goVidmU#@Y~p5+0RFdRKWAR-9#Ty4<uxwB&&Hlh}mM+Pm{#r>vTGVr9>_ zdr6729k<3fTQ5-C6;a}ldB&D`a%-4w<%b<Y{j08?v{MYJ-6MD`^~1rNH_Rjald=o$ zymvd0FP||-PVu;!&#EO{V*0uEJQttL>$##Px}n3jjkB%zyvBnci&kdkm>zEXFjqBh z`m@VCz6XpZasT|k;4`08%D&m=A{J_wG*$>?sP8Van&obJ^6|9d&26jBi!^+>@Hgen ztUx2)hckCQ={o!QuV#~zo>Xn}-FTUwLLEC!$-ABUI=d}xwfr7EEuBs+9%JtM7Qcde zlbiqk9^+ZBsm|DS-|9%(Cieq38m5>nSiI6;f7^+9O_B%hxlEnbpYgIG<d>sN))UJ! znzvTUPJH#mW!JU*=;imXP5j+1tTQ(-)lXb*!fNhgdp6DFOAPL^Ise@B^i`2lChzk8 zUe`Evyz}tOwZ^7qLEpFJ|I0~PztE|FL&2)At<C8(9!P9luy)_}ja$DQJpU;Ef0SC% zs{K<|tO;>nDP8}i%;AdE?Aq8>McO}dm0o6RYsdVGW4rcwciOQE(PFdLRzj^GGJ+#_ zNA7yFLu&2E#nJ}e_W8fQD7^o)OyHy12@&2+9UD|HlpC=BaIk+gXUUuitGl@D&7brI z=xh00&wZo1%9?>u_p2mti$`435{9X#4s>x;7K+)d?B_h+%hVF`d4=V%U;JL%Ba(Y3 zL_3}GWqxCk{#{Y8S=zuah3jbG@#)81Ise;boOZkr&lP*(hW4FV8w}kF_HC0r(|%OZ zcmqTF{kIl>6iSao#5I&&E1AA~o>keq>e_4bUfp}`?mJWd@3u+j%1(=_-aWl9m&-ug z)m!V1#IcIL8b43@7m2Lb4L|(wT_aWPp#4EG*nRJFuLv*oCgnw$O<hwS-Fcz<u5j&1 znZ{#9%@>*fZkv7c){SGQ+V?$*d3@iz_-u0T)%$M$XC&u8+uf09%9quCZA*ljg0sPb zonc4#E=Rb|juq5ec6y`4%z#>VgX<FJRZm{^{@v?$=ZejOvN!WOW8GHAv)z#9)j!d? z#I9Y-UMi`h-tW@(pt!XE6QzHA)OO!$u}*M8j*qa9m*}_otqhm=KC(H<PIgG}%{*S` z%Wy>CklHyhZ`p*kYrJo|W+<+0I?T}EVvxHe%aeJf(Jtm^`O9}~;VsPEt$W$y#8Qq1 zPNSL!3mVSsouB=k>%2PC#Dv5{bHo4SFic|IF0f!}$g=7LhO<l$rWmD^vrBX?PL=(? z{h(QXaNy>4^%|`c?-*tag{k!_AOFy#^24#q@ucINX$7Sk`R^|$ul%!M>gkQA`QF^U z-=J=PU0yCTru6c?`4uadzu&BETV=Q;!|`^j=`*Qy&Z(Z0pX6`Xf8K7R%Kr71(Y!5- z?`PieNnMx5e6F&u_58IL$Nt~yx+Is$&EmQA<axh<p#3*WcYcYwTK|19<C(cjk}m~R zh0j#?f3j-h#3Zj=!{^dByMDe{QzN~}*x2ZE*zeEnJ!`*Q{}o;(&bD{s>9*5ve)Y<} z{r+y{l<#&+rf;vWu)33KDfi$&^Xtn}ua2CT`L4|(vbmIX*$UbFUqkN2SXX<@-+y9_ zy{%hW_3<U^{eQ1G`E4S5{yFn{6Yc&!f%%2~=Z$&HFPd<N`X3N>eyr|O_bK`g%YVtN zqYgIG2gSM^7B6?oPpRx@VflJsQ;kf;zdyA#t^#$QAq!rF9w_G5XVvN}&)k(#^*&zw zrPjiGQ#oFiCH*nwasF!S#CzFEzGt?xuej4$*SRZ&c>B(mIwjr_)=@E>zR+yPyaerL zCE4IrnyU?$6-4v*HrSo`qtiS&U<b35RjTfyPp)N46m;IKJbPt|sBX~2H3~@w=e4l& zZRwrfllc3ClcSwWNKf#&eWk&6rHV$+wS=A}EDlIfx6u8z*i-1NOPPd7s90k7w{tCJ z(NYCVFHBwaL9AcYQebQJC)q6mlfHcY{YH85GPnIR0`A*X-k+mnFSTL8uRG<U*^fVm zEdHJEHvc?NbG+095l*IyZkn^33d@e&D7R9|$la76pD_Qu@Ah+Mr&OxV(l#FXzjxmH zu+4>6{oV-8z9=$}Z*trkt+*@x{o$3>g$HU?Lu0qS@K4z_xocK?>qmo4H{!dR^rat9 z6D@U~_-~S?l>fTN1<IZWQ;*rUHC`9o_3EghuTx;S)v={c#}XalIj5{QTFSpxBH1={ z(t^NA2G@)|O>AG5dS8-O*H?1e$zt}uJbumgFKa4Wl-q)~cC1-zUcRRC`6Qp}Lm%oI z6Mdd_ww>(QFhz65a)vstX!9SF1r+v(A6k^qYr`CF#Ps9KTKTVsXC8jA$No#B^vT5A zng-`X`oDy%pB6IzXvqH8S9GM?6*g`WFud7taJv(i*`djr^{?0N<FrURu*4=Y%xV9n zZEGWsq)DuCSh68f=r+Rx2ggItwyC#-XqMcX;w${)(pjO-Y>V`{7b9kv{o*;`C3N#? zp2HsQx7try0$r+%J0GbvFzgX5?|b#ZWBsJN9g@{6+?3|<sYM%d=>Fg-iF@+q$~l{R zov-};rE@&H_y3;s)!!^`xxKaYl*f6qouy_7N6vV>bi!kuIg6W&Sf`#6691{E_hNm_ z%Q=hROsX!9aWqU%Eo^&N=<v<P$0f$S^HS}SLyr}O7JWbDp7A(fV@**qd(-R{`|2y_ zpO9ti`n*5)x&7{qw_8MNrfPd^){Qt=p8EOJ%?<v0GITip9XeI5tXuHm+}(Rl9+81L z8vQR1{BvyD+wgk9g<Ts9o<>LY@FXd`UAxGTsq9>ghR>yQQ$l<BD_A!e{Z$f@Ui9#x zqSB|MJQkXHWz7pppKl4#J2dst74x<%P4SyNib-=kbi^gAzI)E~YMwOfOvhHQUs0dz zmlV#86{$_uD*E~BnBW<~OQ+V!2QAqbJ1HYt%5`$?!3jq%2dojE%D>(7u|oY!+wfoC zm<}@3oM(P4^tin0)cn|PozuGK&W4$lr=Cx7QMz#=u5MAKva))+utL7J*8fi~egV-3 zr~T@ECB9-m)A{VzT%X%|Tv9ExW5PsL@*k?bz7p|h*?jxt7}uMt-X(QMWUY;gTNSl; zWz_PO_iAGI=Em%O9opMmc4~!P##+0WRd)MU+AUnUvTZld`JE*@*}vvEovu3dA!15U z_h}P>0Hp+#K!FRNGc7$_{|V;4z4<$QrdNSahOhD_HbWJm+W{_b_)5htKTv-@Cw5Kh z0#~Ch<(a+{bnba<^HHgmp7hy#(r?D@Crj5p7hiARy2G}0S%BB%V&j^!nE|Fge{X~= zcaw|I|1n!<p6HULtN|VsZbh6G>;by3TP-5%Lgd2CULIofH)-(HT%dHtUj1bJoE_3L z80KZy6{_ZbX|=0%Vq*Ge>UGuh!Kc3!dS73zc5G%iCtl-w;5CE5Zq=zG?~9L?D%{{b ze)Q~J!^WVqjLRJ-L<ueMI`rU}A}dq$qeoE>n@k-qsKxwt=%}tcz2>d^IR*jo_r>lE zxrfbEopm=HU~xF$u;?4d^WB^d$r4J3Uf)aTR(^ixNM0!alV*v!|BUZenP1L1>XcFX zO{4l}W>vf5#4rVM?+G(SeJ*}lJWZ|P`X<Sb2A<|Gc$s(qJ>qnN-6BECLe?R}ef8(y zNaluFYDaEP(z@$)vsL`MmH*idOgG-$xu)y!D8W-v+QWG1C6_FQmpqv^O<O;;95xYJ zk$cC=Q^JFz#%h06`G*HJom14VuYYZ{VabHqIc1&8uSvHFJehcztzq8O8kVTWr=Rxw zTGqc@neG0d#Pg%(?m1gl*1TtW<dDH}(o<(;?4$aVwM<(I{v`dp(pAnCwuUwGiKB?W zl&reLd$+0>9mQ4Cw(KYsDAt^svNSHhj&H|n?Rh2ZYZ*EYF8C?I7TEvpXzRC^Vc%}f z`X=epJc(WLedX^fpQ_eJRDDc2!TC7TW*#^5^MkARvo~?vU*O~um}s}6LnlP!kGfWs zq-b?_SH0bgA88-9+~INWSsYgRA;!Ub?^2~&{hxoeGt8FX2|20Iw{4&OezC{=fAy5L zziYTMFIP-RivHHHbJFB8t>+(<-zLV#bpO~iW!kBS=|zbexjXhdWmy!b*grpU;?s#6 zZ%-Wg95~<o-V*aADia?id=i|s>(2WRHWt;Qwx*KhZhlYa-R*jHqyN&IyAxN;uU`D2 zU4zAV)^j~mkGPN*HIbjsxWAvjb>5tZ7WPU8wp#NvbN>XXe283`Z*`Al@m-hyaRTc$ z&byc{|MD!u)P(xFzX=?(FI;97Zq*H*xm@^BNaLfkjq5Kyp8Dx=$-c*Vi|Vp=?=cdb zEF5+JDgUGMv%K3bJz9TgvB;aGohyz%<0);spjbb9@!ixOm7MfGrJSd`A6o}*Eav9C z&SyMpN@w+o2mgZXw@rI5{(Ga1m!a|5PW?GPQcqX@*euu@vT((-39;K+g!^M2zImBB zWr5aRAMv<Fv)3yuf6h~UN@n}?kJB<`!k4V~IkRT_`aF9ptK#&qe(ki7l1<G1-w)q? zbNY*o!<2U+bw&P@9+})q-es%QuUHgVcIAeqwfV&!=dD_L86_Vt?whv#<_k@$V;)N1 zBfB4-i>qL*Fk2dZywEkMT{rArURjY{Mg7C=PrCS2lm*x8-#eP~@muJ*_YZWK(sqC3 zzPWSFK_=yms^=~)<zHF+Ry+0mArbfV@Ks^gT-6)eoL9d+y!=Pu>B!X;M!}y19nITU zKTpg4Uvqukrt5iWx3A}gUwild8pD^@4ky2wy0y*~d4KQ4q?X2Ax}Co`m+V}`_h)v- zrqe+dofTp)CR^q;Oyx2?P#+dMXXfN~p<4^L_=#Aw@Sn}n771S??#>l*XuVnO<umey z6Q1;kOv=q``?7wwXr7dd>xPiYCNldz`b-Q_h`YKe&fg{1*Kt9t$?YuxAN!g57Jj`T zcuco;zfxS1pyQ+7?bl09FIulUA~P>Ua#r1vOMXt>Wt+ZCk}ml!J>}Vld)Wr(`?<7E zrkI~R@o@eH&-JltmiMkVUhr?PR($rtz`o>&GvBYLW;5-lKRuUt&n8gl?)ucDCiyH~ zB0Celxh4JN&k}Q7o|-&uLhRlcqh0no^8+^Rx=~~@*E%~}XQB0!y&XII>fTfdxKG)h ze_-1D#p&Y4758L+Z+Cg&cjft7mirqbdBV$dqIAD}KXCBy!k63Mytwkyvd>6<(|WG! zg2l|W?9G;+Ua!>lOFX^e@sYSyt?Sb+Cok=`w+dVR;`#l8vp+A$p7qeHQ|j_tIqM|* z|F`V=SH7^Wc*s^R&wXJw=fptYIhAX^d9?ho<2zt8yDEZLDXL&e`fRB)^CtY0Ivy*! z$H7LjOx@#v@Sm0!EE>C=cJGLbZ%R9D`+57O$DH@RTSa+UxE&Vm4ErIsN-n0!vajjJ zdo|5fIjJ|*UR<nGySZ$U=5mX<kDI?lX(&1#{pi_t?n>FCr?y{N1J|uuv9faMhSt<y z`<ZTXp3OOK@l-tSinzey<Yk-eC%Sl^xvpccnid=XKTd64@bYM>#KSu7f8&DoYkZI1 zbbNN<Kk2x4(>+#g;W;<MPp|82MP=lBt0R-T`&L?Z*B8$H@y$x(<|C<h^>e3H&%Icw z+m`>pb?QUYClBw}pZ&`z)t8{}Dc{@eyp?COxyDlMho_~jTGi`syZy@Ea`KMD{IC0z zH22r#{@Y_EX_(<BmhzSH@Xf4+7JGKYTCx<L^1ONc&OhHhOZ_~S7lj`&Dn4Lm9mD08 zApPz|U9nH(`*RU@-v7G4xcEK4oYi~&>+kyI-}%Sc%-LIOvA)wvZ1t?_x%;2}EZ8!i z_s7x=dZH|9i>7;DzB7SSdC_E^g_mwk>0b0eh;3(PuBJ<1_s_-^Teph}pHz9!E_loO zRDs@RK1=>3s*HRL6UvUxcknoH=y%eKIZ@(kXX=Z3s=ZjcdwuL0wxt)D*R}sqy3Cdy znN>e6=y`gf;)X5r(oUuvV^o<e5%=Ys*oyTfEtisXPBN?)t10kc=+RDfIk&sWgiU?g z-8qIEW4d%qV=eygoOUU{qEe?N*-rmu*fJ}>(sXZ?m3pxs1*hE1&Jj*y<L%#O`G$G@ zny;Vv(j!mIm+&eveAB!Aw_VH5E1Lq?XEALSDK3;y+8v--|K~^n)08y!9KTLc>l&6j zec@L!e3BEUwfPIHCcVt4Kk;(X?gc3iy}Z|5TD{smTi<BX+q0Wva^}0N-psB3*pTJS z;tv%&85GXGJ13p2KWY1qdrZ!vmJ^u5+h(P;t(w%6c06NcZSFn$(x<XK{;$F#a$Y|P zmfWwhCBX8Ikk*r33P0{$w0*hm_2U0*vmWJsQ+CnX*P*BqQuXuW&fm>Kug%lm=532P za&z^rS8;Ws>z3s{F>q(qSo!{Hd=z6SqitEwstYT<YG;3_>F`^4LM&-l+?oAr<6@ig zSJutpYMyan!n9?%7mhHkQZs#8?jx=CH0WvCmN?_3CK<=Otcsl_joV9qn*LeaSsHTh zrE5lZ_K^kIfqVbh7)wlg*pcZxd3|qjo7A=5&2DAOmQ;xyj9A!u#pPK2o@r(I$CjU! z35wIb)!`XXX7Jwr@AB2b7un~R{}OTDnQ)&;Ot3UVYmtFd%9{@}S6q1^DRHZZE%=Ny z&yRnXKi*kcb?xKE_v;en+_K9v69bD~?$t6c*&|h6o8`ZBwTJio9HE0*{o4<IT4mLF z(I84C=YrL@yXRhn-O=_spIfPY&h@r~Y^`$cj?ULpW2IcZHauUq|1-bx*)`|?8nn;p z{`}guJHbopYtwrj@xG40SpDT!a{h`f59*cCzrBg;-RJL94UOaKRc`;g$a6K!VNYyE zTkBr;=4Jht`?=x{`J9p3mT=2#t?12&>seDH^Gn>X>OIqEnxp+~<L&SV*LokWJm}w8 zcWe8Wcf0h1rax`B`15~9zliQ{n>9U}ckjRRzj5L6TK~ZFcjx`T@YZMl3X|E-cYAF3 zJA*Y^KxkKE<(B;I_0gZ}RbC$a`Ss$1{bxP8O_t}%74XXUomzJ0e8S2$qj@KqVy;Y0 zeH?A?&-%x>>6U`;J+98xDOzm|CzK8|KR>^5rNn)oqYtP2uD`45|A&d+TKm*N+iO)f z1lv_M-LrUnZ|&9clnSQGCsTElmoV~nbjSEEdb_<p)$PDJ);Imd5zX^<KR3DXc<JNN z;>u(E%S)P?g3f!%b2=GTq&d%6z9m$iX=efFJI)`w4|?Uzd2+JyV6xMemoK7%SH1|b z;ncF^lGuJqHo4Ix=v(A%CgU5)pEd?39oXE)%JMoXd&#EX(h2q2FG7AswwabD264Pt zdae9&+n>{Y<tpqJ(`0r8a5Fqv^{4O45%DKq4((`I6WmpF;PdQmD-n6a0QVU$xZ{$n zrV0Lhx#ak3|Akqxdny&5N4qarl<e}+>A}?r`4hc#Qn{zhEe%jvQRd|2bhYi#FE7U! zOS!uL>D@(pc28euKk>xOIi26;`CPTgQQGNZTBK=L`oj8s@OH(Wr7nAJtk@J``&i~s z+>OSsz1lfe#k`FI?}UTP+x^o|zCCHVXI^e#``;Po{z*Ujkml}lI6Kek`KIfRpBA|u zet*B@9rKAmu0K)69Yt#IC+=Cy<GMO+#s{B&lLOp$PG7%u(U)|td0)3$XmM=KI(jIL zE52c_$kX_2^+V|bYd-m%s#<&NgS@e;%|gFbQGu20OPH%3%nRpZ=hnaUf3ER@5AAoi zss~;5RKN7aWA~d$Ga1DFy4D}OZj>c?Oz7y*$~o+<?-{2at1NHYta?RT#PsgVqBH4} zJ9SSPRd{kYe|^K8DfTw!9cysq&tvZd{Vm_-SUR)$uDg5Yt^SNw^HZ+IQ+{`Ct`2tO ze7Y<5#Gf1XS3d3%-od?0{>Reh-!X4mZ}l8YDE_)+=L7z}PmhiTf7sb3^ppRvgM!1K zdIrP}p7o$(NpH+GY!zi-V8gnD#~eKQIkntcns0I2WP#PIHl|O#wyZ4hSFm!}o5-!1 zu4}Gk<YvC{J)`j|{rz5V0ppO&RaxOH1y_6J8lL+-FTZfz>pS%}=hb)2clUM=cDyIZ z8pSq`>0kH0eRfQZ9GsktDM#a&TJ@&rcw}u;Sz+sWdE%0%E|=;YFSX8>JmguWr&4=l zY2)jko5R)1?8MLS)q8VKZZ~VZ#gEBzn9j#EdFnTNo>Nq*c(GIZ(;ep0r(ISx!j%m^ zJ3e&n`Ov$wLfD(j$Ev=4AD5%Ln%c7`Po_+tZf<H?T3-HtMgF|p-22^rw|&puJ9o<7 zZRwn2DY8e?<<+0Zsy-FApCXewJ!Xmc<V{|lGd6Aho*KS0H2dgO?Wv{pQr6q7s{f0H z$xppD*=zQ?Q_<^ZSC>_@^II3V-(U=S{-D%cuKn=Cj}=UfAKu>HzH{f!rAwFg?mHOz z=f$@VFYY}!@$SZvhX-C<{O~;c&-BBcC;uK@ntkZZ(JOauzUhCxbH28=_WruRw{G0H zaqHHtyLa#2zHJ>ByFc!x!rJ`U{I~Dkzn7Phk&%;=lb4@AZ(iJc`FZo_Pxe?cd$#m} z|DWqw?iGLfpS$t@vHH0I3wJTD2`bDq7y05EVAyq|$3%qhh=bgLPg|tB+k|eU+!1q^ z>i(!{^Xg-am9OgJmrlz<%@+GEO_n$*KL1n6tkcJeMQgT;yU#wozu|xYn}UwAo9jHY zX{pm3PfuOIaMB=g@hm2RjCZLQb!X|UUM<#fdCt*&8o@JJUrtJ&d477B-?kMh9JW*L z@f+`SHe;^ho}slNvDioK!T*$J31KN*+YH{zRQ#BF-ze<hj$a%O86Wdbl*Q%dsnux) z^xxz*Thz-MxWb{8Tkb;PM+1qkpKNYi?_&6<&d;1NXT{7mf$g{Ksus=qeQb~QGsV?9 z`(hsTE)zQNMPRGJECbn1)lPrjIe6&r_^)>E_^$fhbN(#r{nxj3&U5}8jhXdD9*1tn zcIgKw&NKLM|9rxlQ|v63+)0)_UJH^e=Y-`ITQV)$X(oCyr7@y2sX2U&OYzU#bw@t9 zaR2RkdfMqvm$26AAENr#w*Az0G@6yG8dxT^an_Ozfg5N2d6H6W+8Xu5nuXy(a*!u0 zqoP)3!=!yeq5=)<?#T|H+w?`X)@@#vWcz2U$l_e_?em@`7;f)V?5=))CN<~79Qn7V zIzDHDH7_aFaokv;@~nMMj^KaS%wzjPdO3<j4;|qMQR32EDq`M!a^_0y?nfqfwY-du z+>JT?$!CpL*XJe8E!{~IEuAt`+2&uEI`d&@-qo3hCG%c%b%k$Ob!ky$-&w0SC%^gG z_9@L^w9uHO7<K&_%j&FCy2YP0^4brVWkv7YZW~o}BtP_et$09D_Wa&9PSdHsI(J-u zn7Qh^Rr&3*Z@a$TU66D@->&d=q_LyY{@vQoo^Ly)|6KUh?Q4sL=S177YhQb~Zp!x8 z(bk`f%YSE`vQW7#{@`j*^OqlUnQi=gZrm5N>p6b^qS(Suv-ZzF(y{of<f0_^-&)@) zCtSJb-PKgL)&0Ir&G8V8?C%D@CVW2l<;3qde`e}+b&K9Fk=wH8;f45udh4$`PVEOY zbX00g9t(W_kn%0n@U7Xe3grX&=N9iR+hjO%wwPVP?GVqp1vAwIjg~lz1$|=<7SWhE z@9)d`eY3)wO4IiXJ^g+z>|)fT=h>3y<L0hU-+g6n{*#~Y=L&Nt9nm-QHdwE>P3zQa zy=~dIzU!4qeR#Cw?zEZVOYX0dJz{l9?psO!7j}2e!kzXfe*OBC;IiT0r}ybU?Wec1 z=ytANyfS_L`o8qoSL^-6{{D}dt9RTZX8zj5xcK?`)2_$I-+8mkfKkFR=*x=l(K0)) z<}}<qeWK_7^7?<q8@I4Bc;(7;G=J#ZsWI&?@1cMz4^MpVYImFKD*fqpj)6^pgzMTh z*S^nI4+?YOIO^B_LPj{cb56v<g(V6NYO)-Hk6R7azh=(}T$Vbayq#;qvF_EZfox37 zcKd~uj_W+;;NN=h1KYy$GvqzYkIC-UPw@$rUtnm_G5>+C%_>7q;b$ualDG9-D1MxH z(?Lc>=}VVonp@jbtM7RSMb=tq6!<@V&L5H!o*r@1@yCPj?7Oyw)!ucp(0vknzI@HA z+GLZ)uSeHyk9Gd(lX2sbSNBTE66K9YnLaIEtWX>!JS|_$nfF1Ma%!8x?DGo$tTvzV zk9dB5*-N#hvJD4TJ^y~R;=kzWch8rJ)&A2y`>^KrqWf8SS2_=iKm43fSh(5ugx5qf z=B4b@)lS;-BrdPE6=Pbj%YCJM>59{w`txE7f3JAnXj4*qU3J5x{}&I;ylwJiM&SRG z{;$?KY(Mx%_yyA!eQV`U`Bint*H&cTJfryY$+dj>S^8_dz2wYWl$Xk`+_g4bBVlWz zy_^_pq0rSgXK%|sbZ5Q#<h)$^Imz<dMxq=q!w=1?opt8d7I9IXS&o~}E-U`OUF6pk zXV<)|Cqy=AyDq<Iy4tNWUfN^pG`6{Sq!!QkIqkIx*K~>K#rKk@9gL6-kL(MN+~Dm! zVbZ0umU&Y<zuU=~%YN6mnXuyB$)ssp?iZ~8=Cx{@;-NIF=l!plj;(&{XMgrfjLh}L zdDkrhUY+~qT{Oq!$gArX8~e`kY0ooRG&w7d>(#m1O;(ww<kmNy?mz3xGS@`>&N|nO zm*@PS&Dj!ir=?0Is^_eK`MfP=Dp#v^ywE#ye*PBI*Vp%bdSAt)6UchQJ8!?=RO8jX zUhgkxZF=5R>@(A={x^q1$9}!*e>diq-m<igdw$*STeAKNTL*?$Ck}BN`8KVYywh>T zy8?4(i%kX*cY8$J4&DrjbNy8@=gKO3<1Ge02PfWQW?yuzPLR#%!=;^}3tq_HxDuhK znb$1H;D2R($6u)h7v{RKKUlWnZ>duLl6Nx~Movp9nW^*Y<2`55XQ>=ZO{Dzv4lO$S z$BV<)ZiR#TWSvB}j8owWR)+&`R~8n==mkrbF}!#X<i_-hc@i&U#jcc1CyH3Oe#{On zm6bXF%iC!2oB)P^{@xEs3p5!v)m~!QoA%jJ(YIa1ZgESB$cmaL3fg~eOkMt}aaDPj zpj2WvD}&t$4y`VBUB{Ik?q+vAJe@iCxhwztY~7)M-Q^zJ5_Z$PnGq|bWclh-Zg9lB z&C5E#WaP4QMa!Xk!IO;{WO{b%?K4-|er?B{7w;o<V|>beb{ppfG0xCSO?PXGUo9p( zwN<~~^X5Zu<JB!MpETWDmQ?QRbGiP_f%$vqn#&p)@~@tHZ9?&r!q6ASK9WzSU;9wH zed@&ZuFlaDuc+Fy$zS_vbj<k`(`2z#Q(UV3j{jFEpONdSyVyT}o5I7@J@bz5Y^uGx z^!NQgGYr?HSf8GCW&dTzlJ(hMw@$4{DD|9~pPesZ;PoK)af;Z@JI(6dua?eq<GlE; zultf2SM+7w!0mpkj^8ya{pV}&&2zTWIr)tzzOwqJh^AXjSXH#}V6>g>Vl(?vRXr1) z_59l9Vnt^=rL~Hq>tDS(8qQ&GW{1s*{D7%7kx?cN+uumYUd^cACG_UpC&~4N7aoZ> zt>m-c&R2X@*E2#V?RMe66$^3_%`Wa0J5_aY@zK1%zgLfJ6kM&M8u9G?<dYl34(z&k ztURVw;K@CoWZU{54{Hxpyt{F3AHU~*g`Y`QKh8HQOWbCytL5^47n%Dn^4G(Cdp&js z`#)o^bm_f(O``An@m~&Sj=isEXWr0$aK_pC*Sg=P-g@$Ao7#8I84sr3vJSs(eq!%> zd;R(wd9nge^80S-uKP0U9mhPEKQ{OLU+z_rx)-B!CuaW1&Ce&io|1b0f8+a%S#$ID zSf8lcUORvNuK1>$$lJRe4!oOiU(~&?cU$F}yu}Z+6IZb<4CnZ*rS1}bkY8g%yV%W& zhLpAkD-zTl*Y2P9f6vsdzMorsKiysTq2kdRUarf}4BRI&D!a+M)_i~5KZonMUu&lA zB{8m!E9d%JN^k6%z*@eGrOmAU-0l{!qb+91P3eD~S4S&lI(*7uKBoKjU;T$V*SCt< z`4f_+T)h25!}Vpr(qkF?+a%;$B^H`bGpu7YWV~tUC~K&=+3>_>36bcW9Zoq*Qgcci za&pRYYTR=k<>YL75UDduSI<{b@34`cwt}9uwcc`Ny?ish|2pd$boY5E?mJ?%Pe);& zlY;fWRm%I)%=W$0+1IGM&{J{YQKN;r3JaC37j9N&w4QyTcv?fU_m?-}9x_{eWcWN} zI4iC*Z+od<>$+ENo#D?Dua`zfJqh+r|F`IO!+CZM20yU?hFRC1MKAI)%k<iHNX6>| zQ(e%Evl=d0=AZrhY)tDJEUOipC-!zst^Ir8&UYKLpTBfi5A?Cwx=prs4`x}k^4{Xi zJiA4i&o7ijFS@en%ip>$0SYq{C3ipHva2=bRqle7yOeKw$?xqF;s5=(dNF(X|CxP% zll|l#pAhj_&!(wx{Nt)B{opq<n2)U7`9?}$(s{*W@e6xb<|S}=Y*Urp!?WdHLi5R8 zO^gmJxLo>Xz1(QvQp}yf)jnkogSw2SO6z6C{7b$oX9~o<Y?~_C*4M!K*ynP_x4G|A zG^drBxHZ&EomkI5<I4B<ub568$XH;0gmdDlPfAi6CyuP-dXRKud;JSnKDUVzTPHRK zKKYfM@?pJ*-JbWR(Ql4OpHL0Re0(o!eT5@G_q}Fm1_e!v<`lCE%g=`I<|U{EFs)kI zv+eV@LnZe`lAKx|Cd|u;o%$vtv0$RM!wZ(h-O9yf7w%NfzFb;&{@@wUCx-f!60S{Y zyG|YSW<S(jnO}CDS4=m)?4bjnEXPv5M#~*%&z<2=*xPe5>}f2=l^N2ltCrM#uuuG@ z%wzfEg%a;y1KHz7?q|0=ex>xmCij{tuliBDx^-M^4R;x)sNS1XK0`y^bCu*ag(DRT z0{iF4Fm|*vZ{B4XzG2ShGRdR9%8#!9s(zR$p0DrM;`LBf-(|%rkHFx$VJt=NEQbO@ zk4$>J<lvKMxgj}1v2$`V!`GcknHZJw^Z<|PIWduwET&8e@r}FU^uvu02DopZeB8&T zrT%E5&lcUI8@N~8o1oLG#w&c-ZaZ5~XO{i(mk*W}2XIElbCxVU;&J4jn%&%_)<d&r zX{z<yO%#~A;pe=r=}zS{?_|z*5`X)Qlc7DfpxQh@!t0(YbC6Zl%GjFYB7DpT1;kfP zEh_h{zTjmUUE{h#Nu_YNl6=_ALxC%`BVX?IpXkEe_oSd&Z_ewtp@QkGj@==Xq{E+{ z36IEd%Gzf6di9$cE$v-fXXaTKH2z<9>Wks&6(V2e-Lw|?q^YJk$yGvD>O|}Li=XFi z?f$&gTYT$jnNsupBCoHld1co0%B=X+waZ&4dA)j}F8_8z;JP_Gq=i^A1UDVCQ?QUf zI%f{w%)-5%_Ff`P44-ZY{Z;b2qr!0YYfAjd-ukP-g=R8muT4I_aLMJPk5fx?E|*@K zq4Bjx&X?QqQS_EQ3vMmzFG*RnXv@;sa=j)@Dy8pAO&JTG?3ptq>6&lYva<^=Ub)%u z;kl8frhCHjWht?}9=@-|)~*Xbz^*%u=PS2K)B!f#_@ahI#hY2wRhL&w^cdF2-<x&s zQ^@9!Xw6vf_v@dZo*S0$FnemoWS>Kqr)T!AOZM-5AAIB8l}n-3U(&W#{wrPnX46Hl z%L~;tolT|G+Fv!Q)HP(Z@78c}yWh<pbeE6WmQ}Rr-rFmjUszM0)}49zYsPeeK7l3Y z`O*}$%}YLipWNZN@8F5APA}Ud{^mbhT$5?c8+597u6!kb{q^(8r>5_;c_UHHeERLD z10{vqmX+K&bZG8Zc|ljR9~)|3=g;Gi(%9to^1=Ne+1cW1HlG*Obkr<+FDxwE|58NQ z#m!LZcjpHA<^SsEDegbXekisotn;F<#C+4rCk<iwE@|HrH{`9JS%0-p|K&6$hkeUg z<%{&B7Oj^(B`3JSsY|EyxNh|KqPo|as^5%e{91TlNt>OyJ7w`5_Jo&ujNA2et8S@w zE;^y2J4f`;qo^zIXI4#62z#U!o;OLNVfyjPvvnaSqyvudRak$$>-%0a>P70bPuBIu z3?&P%$83>3{=MLe#}vWes##U?m)u$(+_$N^R60-p$1ls!3$^_lB$5_vZNFHz_3g}c zcEM>UJa+FpP&Hj~X}NgZrLD&f7_#inynFw{rf%W;M^C)+{h#YG?b42G%XfP$xSqSM z+W#ceo5uI6`M&<Wb9N=WvFnNEFN+SxEV?*j;?HO~-D~^&Ki=?5dLphWX?#sk>e=?o z*XG~r_`2cDi&Cwh0fuFk8LzL~yex~Ci8~`Xg-^P=N%ruwpWa@)n=7j~uI8(YFzi{d z_3l&dywCqtuC9uo(eX6ttx}WS%p-eTKlGbFb**{-NjB(^-AvAT3rr0sOqY_|T((WJ z_WdRK*0&}bUq&k&JhMsNNXUIo?1%li6H>O+rkmQXOsef(ny>EndEW_@GPw(Ng|@SA zC_kFBX|J=hTZMo75<Tasnaq0Sf7d(bESzB{xbY#MuFB=BE4*_)#NJ|DtlskQ%)cw@ zlZ#B}x9X|3MSQh*R~M@z{W?};kFBus?Xw2@YAaH@U+?>~tf<`U?R?D@Z>OZanDVV% zGvfP{oXI!)H<t@|U2)#iUYP3=7GA)zf^o~5-1*B~uT2mM{$uO1kx@qGTlwSNhu>@d zTKE3koCZy;18dh+soiy%Cj0sHZ~3QdZF7Gw|2WI6@vfZLOW$Q%=egN!S~yQvY?rU& zws~xmdxKQ$jwW9`qOOv=QqRAawJx+SUjLR@g~pS=KknGfZwytMKTmIdqn?yvu9frE zciR+RyLfDTKfhi(`(ILG->-^&59B>AUoH8VTPJ;SqGF4}%K$aMFN@#Sc76V_{AIB0 z^B&pEgJ~1raUYKCK7UN?Y22R~JAPY*e1H7?;mW0}<xiJSuY0-LK=}BpDR%s-eGixl z7VnB+n*JwgQP1uhH&QkT9$&Xl^y!YE>{IhnZ60(TxOX@IuxLr><(Y*yw@1ouZSLLw z@eA`eo#d=(E6Vm8#eM($!u54)&Dz^NP5F=B=KT7tA-^^xIzgDjX}|M}753r5eyx)W zZT_WuPO1)#s+<~qEiaUB=c)<&SKZkBD<w1ZXH{rxwXbg_Z`Sr@oiUHEor`b&y5^<s zTFIF8l7;JMYpkDrb8WQ3b=}X`*H&HInKSL$+jZAvcbLzaVjg!Z_rOHyjz7HH=kfM0 z?G2xET{`ZLi+t)MY3oJulO!hi^Sn}Q(-E9_-9<$Gd)kgqX-n>=nG_kD)f?|iH!jRH z{#hk_cJI_<EB8!I+&;DS&Z%?vPrbZ(D*D!`{r9vU+|vuXr>D8)wx099=fc}oS8dCl zw(a$VOY1UpAJ#IO{=1&bCQv<RcYxzmA3KjN4`0?9zp&Eq5fD#{n)T#@Kc7+7i#@iV z*G_xCyy08~|BLl6x3pY(|K3*N@xQz3Ne3^h?A!YC-zCjDww8bMyLMjeG+269w%7Um zzg--~$7~;6TIc)1|L;-NL*M6f#aL%vm^=Uat%_YQo7c#$;D52a^^NyZk%^L?;+M?s zp0zW5a*y%wW#;fa4u_Y>qqZB_T$My`Z@bqZ$H1VdfNjf)1$fkU`qMD!hNhOu3tXGM z3%hnlFW9krw+MGo)RG;$cUy~;H;I+EKYF)LH%jK)z1kkz-+yORHqI<gOL?;7=g%{L z9B&_}K2RSR6trpEwl=4Q_wL<mxbi_<;qT-L-zKkkxOvCL%}Y*hUh{MFo~N6et~PgF z-Mr{)_olP<$;+*y*Q*C_PxpSGu07v9`o4Sh|8VL5($gPk-(R8rd_#Kw4EOy%!r%XR z@#4jlDO1jzIrHezqf3`A{rXiU!E^1}wQDzT?hL%W;m(y$>Lwp;%>J5~em`gbPS5PO zsoHmq<u9~$e=%L1^gsQlU*%cX(8KqCU3)(N>-wd><-D@_ys`On58K+>{{8#+@ZrPB z$;p>5Up6*2E-o(i_V(7+)|Qr*o;`c^^T)x<jf?BUudS<U)4Ohdf7$eT&%))VncoZB z_RhTg-{E)f-rc)*@8QFTA3uIPdGh4TmoI;U?{=DRUw^NR@4nwTeSQ7)>(;GXzdk=N z@7=q1@7}+^ua^%Rk)1#P{{8!m|Ihyy)sTPq|N6}T+W+6SXne9x5Sr<-O>e(Bhh+Q3 zf+gz~*z@@4&ex5Ow~%l>k-FP1=zp<ApOexg7rro)SuX1X6D_#3<@}S)<xfw`)|h$b zQMp~Le6B`lqccl$#fsmq$xI>_rI!0LUUG?9^g=|&b5;STP8MTR#EFxMi`G>6WGHT1 zWOQqZnEia7<Fi*^kJ|S>bi$3J*98_TB*iEd$F{L3I2YO8)U493&e*svce|$Zsxph6 z9vtpIx~t4yRod@7+W$Yx;@4b#LDywhu2mR?FI#9}c<oxrwvcqYd8@D7tJ!$%Rn0cb zoA*AIuU6-n8nbip*Q|V%&Xv1&y}f?+;urr`o2Tct?cV&fZ9!+K0fWGXoA2s>zccu9 zhxx`F=S9awT5Z^6%zB@%EGge>XMbl-?%#Ls{`vnC?C-SE>r^?(6i|C;8}kFn5?|X3 zN9DIQ2WGPSFn?IX!QJG!q*U{8$Jgkyhcub`%Z^N#x^TB6&&t!Rjv*V2R%Lv8);>4G z?B`Sc#0j%D9kQrMt|~T^yKu_CKJwP5zb>x#CjV6l&1`E<@y(sxEHbG{mF0jWzY#;t z9OfHd#@(VfL_}SgzbG6&o->(g>tg!|#(huh@~Y-mOqsSrI^l=>lb_1-{FWP42=VN) z*6))NkIKEJu<UkXL`%w~*GY3ln3jhxxEG$}zxUmT6FtjQT~}^f{xtRdF{@`EC(Tpd zcCX1fH$?E!qZ2+C4{e@lzxYRTzoc{2`nzwFHuwIV`MR=r;q9$kx+hNk7^>QH)o!su zd2zbp(^Kp1ZT9udS+f1X;(0rjr}8}CwkYLR?)JPjTvjG;O6LCknaZ=-_+RPV-xv42 zt^0OHvF^vpzl+%Coqe!LeCE1WoA`U*|Jfw3bGXK|!P|D0vSWCeQ`b{2<qdLjYa*@B z-TboA{mYkvtGlI=^AruU)@3B`n|UBl$%Wxb;*L90E-@Zx_L%b0*nIM#^9&5r+)sX3 zC@#<Eu*t*fY{)O>hJ8%cO}DFzI1fBI;k02#-swkK2|YhOOOBqpxjgd9uGHr8v)`5n z**N&szkL0-?RVhUzt8@DJ^FW=z0m8!%PbG3U9!@Bs`l@bP5a@)a?kFwA6p<<xbRd< zR8P-wW~oQUpHKbRu<rHSMJDabC*N2xYkBazHhcec%L<M2&wICO&J$nj9=lmQ_x<-% zG4<0M>*wpocXK*2MEUqmSZ+0YkA{QDPC=uoyS$66_OA?!{p`Q@cAoL|SKpfd@7d79 zb$<Wewa4Qcyj~h#f9ty7)9G%ZQ}>VDk>ox3VBwT!+q3uA+xx~ip8jLUxWaydsIU1U z)6@T)>=|lUi#Id<XZ^si{qECWrgbNmU5j}+Z<l_>OXYBZf~3sjthTPtz8-RpWcZZ$ zub6SliWOh(UQ3e*+7Rl@vpad!$En`WdwZBR95l2PJQliRO_E~StrG`!KJ;tJYX9N( zu8?o<ztAOl%AyQz_9q^dh%SwEb+yp3J~FdXlsD8w{Z!PnCllv&7QI-Ybdy_NWX9gE z()m9;!wi&EeX~u4SMT)m<w%(zwA!PieBvGTL&6h8HP-Y8cbJ{u>!Uuoz}LgWbjyOJ zl~bmE-Q#!4U3=N|iPFL6_xR}r>!e+gl)ao+ecX>Nj;*7rneqGYz$yJ3eqQ=<IB4$j z*IVSa2z@iy*{OfT{H1bN`=n!kHGh6PEV<(AilnpC6}<nd=q;Yh5Ld$ahrvUiAz7-W z;~3v@4mlQs&CCw(Y#DYi2KyC8vcB!RDWd&`@!ZSLLKANVPK^w#FZ=bjWag%t2QRu+ z7k&3!X>ssI$%+TLj23KNpM4poc`ga_xS?rYB*%05enOa{W9+9F2Qquk?a^JNf6nrI z&QcdaiOauP+(p*iJvPP7G|$0fP1su#H`cu!ToX8aPCtxIJEy3p-*(ezMJ?~l^9L?m zlGZyCY;|dtxmDuz=kHe^__IgFthGSxbb&jcSWvpB(HfD1Th2*NeWVzdlec^IKe^z{ zAL|Y-XxU|;c_yty>#Vx`|MhcLhBY1Aw)N)H&*C5V?<!cjN<V7()F+$|pUzp$^R-c< zN@Qi!u4VRbOwZV?&OV-%sCl*RS!6Qzl|w5p`RE((VtKr}TUE5dO7|v9`T41=E^CkR z$cc$g^Lm!>!pU>arEpDq=H6S|>eniJnfhfue%&tm;gG?*x(dbcH690lo4I%ypFd=3 zI+G{i!qMQF(XSR=Ol_U}@EzO2*FwR@nis=oxAmpWjB%OVV8q5>WvjOS*4}5^m;cUV zaGN`yA;vv(r|s181uH-0{=W9|1gq8yi-r|VObwIszKO2h?#ELuA#a$oLf%$X*{AKZ z_q_ki;<9Y)S<L)L*LPihydg#=dPTz-riDiy1xyrUU(D7ipjmlq14r9r=M%dZxz4cv z)e$0|ofLFjj8{Bx*QeX5myAU=^{cPkQoGd9Xm9wO2fs2Jvu5i{tyT{63;D}CA%Et* z*RewT4_YpJ7|{Kzu3n(iXn{%d=j{(9L|?z>o4maAMeo<RZ9lm;)tN@*u4|C2{!`RG zQ!OpH_LZlgmyjms?+KdKTt6)o&M$ekh1EM-VP<-<(q8F3!fP_V%2)<|sft?BoxAE# zbMLG5wz}K=Odm#;KdU{qzwe^^<^?&Haym>>I_2&ET6)_~OLE$-fAPlr=QHit8&WB2 z&-op_I;qZL`;nhJE@{7wioZ~$*L!K7+??Ehr~9uQ+-RF!Yw>MgD)-;n2egj2ePvmn zfA&dy$^G=^9qK*T<W!!XKG1*prpe=?wY4n4(-%7FTR+%wjnV4qYLA)Ia}VABv(@9W zqQl8J(Mv(>m(LZ-PMgDVo4b=~!2#y8GvA(OtiH3JGyCc6Gh3%S|GU3`*`1>4Z)Km| zsF!K^ER=ZvSIm0#s{)GMDl^-Pb|@_PakbfiOSth(MhC|+{*oD`3^q#|KgFyrsZY>x zwfXvuche~z4;8-TH3jEBg_O977`^PDe*ba561$6Iz6r1H`m^b-DgAD)uQ@de&Gt?x z-#ja_P~!Krj?2C*GKbsS4}RUaKX&>5cNR~6|F!t~?rYiP{+pFLpZz9%i*pV2dhYDs zVA-F2MlMM;`uFV%DPn7rjE`1tGG<FC-SX{E+5P65rI~tbM6Z6fnCpCO?Ubw?(@w9G z;gYeKn)ZIm`I_H?4PrG+SF(*~cs#AWwmYG5)0QtgPd%OaV{h42hxn{~uX$2J?2%R` z3%Q@$&-ONFIiKV6rdIygTPC(yR~S$4`fX*m??+hw?tQk8ww+YWscl^IC1hI{`#$eH zyW0u}o&BQUx!l*4+;)D4Pescc1>S8pgQ5?L{C^ZszfZ{bREgRh_Gy0)9oW8)fv-IJ zz&ti<`^%m)%KryVIN>}&BXNU8{e~rZ2EQ85EoPhcy{Xi0{pDq;AFSJq*|o&_D<*YV ziuR`oUH6)>Vc(i(ALL?QtznAcXO}gf`Hp$YMps|sJD#O8gEuo~Jw5Mh?2$HKV$*Ul zw%kzTMk9%p#itH!+^yfPp=`|g-{jw~1OD-C#Y|r~qWSu3IkqovcIewU>C)cL*STU{ zwy(D^tabf2RkLol5z|?YiO;`FT{-RJJ}qwPTDwg_6OSs|S?jW0KV0V$AbsuVi6zYE z<FD`AYZcf$ZJX<lZGZh7pE~EnXgcb<v+=a#%sH{I+dJn)FXQ{X#+Y?XPR9lR|4_Pl zsF`iSwy7rsZ$FHyW#9Juf<~763fW!<qdJ}9T9zL7`I$G5*Bp#q;qg9yX8gg97O#8G zDPm1x`CV!M7QDB#^;^2bQGH%~8Z)z|$%pLC^B(LwZ`H`Q%XiMSDT)u8D>d`?T<8=2 z=*4t1nTa(}X{y7c<s6=Zfd|aBu2$JeH?jE7D!2WoC21h1*I*^*G{tAS`_j1iZr_h; zu3S7txBt}Z-_A;tcTV24=JGxXThU2*Ih&Vt<rFpg9XZagDHWnQag*jNgRH8?lqzYK zJ(Vnx=>l=dm!?T>-(c*);n&j7?NaxA$90Edv%_bTrY+KTKl6wsvBqT5M31*~#An`A zo_lj~=wgF^k28$sxZGZ#EY{}xY|Zp<j&HeD4Vaat9n+t7(RsR~+=PX~3uUDl%bJ*5 z%|8fzI@BEU&{TuLRd8m4i@?DNk!pf`i(T3DQ^T(B)f8JV*})X@SNk*<PyC;QJ=gB9 z`Jgg+nz>rF>f^^s{CiAJpU^kHu>Z}=<8KNr-yGSL@bcLX&wKIn{eJRJKYXLBvUVyv zZ^EWPrd^F^H7$b<a`E)tlWE+!=~3ik_nkTgmDd-~*<Mvyajue|N9OALvz3o}E%TX# z>MVX1xmJEy{-$Hz&kWC>8lrD9R{z`^b1flBk41;2icNUa+#~hwCucgxOK@>JRd6rU zTw4;O`DOM|o=Qu}fFtW(ad%EuYL%1x@GaOcA>~hXYx~z$H}0BPlhz%d68@-1ePZJ% zkovSS!lHF@>AN<^qmdC0H7nA?5*ue-lbY|>I^&Pd$xb#ofu`_?s;TFhbq+4k<ea`u z?#ZUj6Z+G=x);WOx#GEflhISTdy5y_FFecbGiBF9u{xE~8?D72DNi-cWuLJ8EMofe zgi%b{WOkoIzDCjx-J~;FE9cjBc+_QT)aQ6*dCu)+?K~^a?jIFzv&;YFvW1Uqmi6&p za6VP!(K=(RuuD$=mm55a3R?<}+<awUtaNhQBHtk0&AwYdbMCelT3v1`do22BPMB)E zn$@*1Q^Ck4RqX?w^3KoX7DUQ?+5R+Lb^U?YUh6nE9$|E3TAz2vX>}W)uZ^WqO3GF% zXY*<6u3K+j(sp}k%G;m~-@^8Po3DPZI_qt4^jgmHgQtUa6;^-qjej=hnqzmg)=}5I z`C+$m;#TcHV)rtPEqg6rMnL|l*zNmXG<5xXs}}OD=la8KF5glv%E@o-yTIT!pOw3` z(Qw_t2<@dadG`srTi!9Xo|Aq1vv!R!PuYTsb?WI^JBo4-tS#ALSMnq2qQbmX{kB^j zzdve6#Iv0~7Z><q_Dt`^vl{2TtGL^~c~`!xFI!yEpUBczQ%jev_?pIbmLu@2Mx<}p z+ft86UcR@z8R@+*{0+j_i&;;PI{!`V{Z_I2&&B@tuWfW%8+MRw?ZUXV4<px3e7m-! zxi7`T&u(qpl;)*MS5nJvEIhVuT3@Zn^S%WMr4u5vBkvu*prd~|gY{E!)`qid#8peH zUP-ynPUC3fE?4zp_*@&28CD%#U41;N`g(Eo`Qv?d3;P(G`xMvreV@3dZ{s(<b9JsS zRdp^0ZE&7->WI`y87;X8(Ld+b=J+x4-C}Gii{aQl^;=V;*2j0ncTVLn{PAFl(N>sH zA9XQoZE@hj&lcR_-F!N%Ey4z@0?Y!o(+YHbKhE?OT*Bor!RmsvaFUMdjQ5igt}^|& zz>(7N-f<0c#Mc9BJ<9I)3d^tGsd%kXC)BoM+ed@{#l8BWelZNQmN86`v*^xE60!&n zG;|RN``;S-fB$Vhq5MaxY6iPB6*PDsq_)jyYVmeq{6BZW`w7uMjpui3%1(T!8du?M zf84A7U+8{rM!D&l%cGc1n8?Xrx?KEEFh6nM@l||r=LJ`UE^YE)UM}ssM*AUKnce#u z;iBfnE)6pd9iDm6y}R-3w)UgGmh}@9yuKZfEqeU_#5-PArM9)gR<|avddsln+QyD$ zolg%g&Y$w(BJ1CjG>$~s!}4A3-8{#=_8dR8>A05Fu~m<*AJ2+A_R8Z};)IWGhYOe3 zE}zr&B2DN7<D1VmbEYRtuC=s}y#DL?yuLzPkMHcIVZZgKZuFaApuR3jMDAcmr_*uA znML}7jOXINO+LyRx8zDvAAhchr|ImQq3of#$2ntSUk4m@|7HAsW%h~p(TDH<-&6lQ zyGmau@$83GS)pkc-b8rwByPN4wY)!ce@TZS|6jYR^ArBdzMJ14!7KLduxtOnCDJ9& zp8Q^Cmn{C0yNS(V>EdJiSvVe?oiw3NZ7NR^*X*}VZo+Xc-TFUj=k&~x)=vD&nbh*@ zQhW5rlcArb&vL|z*t@Y$$*#Qp;fl?)%za9~{}%N-O}HBVQ!4VAT>rY)<thmZ`wjX3 z3H)ES`@@De#rd(pjpAG1&Rp=<Dn9B<^}PHr{j_^qto+iA-bJ4|B-I@M{=uF}1tDfh z|6bN^{TCj1mzQz=3{~z+I~FWl`fcKmlzFLVCcpe{Bp<d?)v0a8(P@=Cmvyn;KH;oX z+tM!6%-!4PB>UEL*@8K(&mTI(9dccLU1hHtqxhvz*P!|%$B&vkd>I(Y(jC3x+sPH% zUa$DL)`vw%v#h+wOxfz(v0XP4zr5dg?rUf7*Ok}5W?t%zeArvLn0E({QMsm0D|>;< zOySnIY%3!(*KYm3Wwz^Y>q}}D2}X5mEW$2ubK1>iuFNhr;#?y3?`_rP7UMZ*)NS=P zJec9ix>w<E&f<uGeCrLJw_a2~a%$%j(zXztJ<%@tv8?QA{khS3DszuGG5*!PS@vB# z>w4ezX)_M%u(XSwUNA@d_v2~TJJnZszFpEO&A;!{qJ-&7v(uZ8&0u4$R%UOH%L{j? zj9Pis<a3q(rHc4l<@TEw-}){pFZh((^VlqdWP`uiXR^J0Hhu8veRuHc^oXAJNZ+Rm z&bvK({KxQg%f$tIBM<Se-TK?~?@Eb@b5303{%ilv^6u%LrB_$~arLfSlKsw5kZB9| zZNb3wYu$0jj-NkV#Z_-J$GrHlXZVw(z8_yqly~3#ns81`P$Jt>lPyuAZTdq?-Cd_Y zo+|8%JvLune3ism%~R91EA@T<qEe9`e!AsrvHD)GWnr)4uFh5KUy^igRnPSc=7&Nf zvzJ@=v2vbs-g<qz$obUW=e(C)s14%0t~;yf@*!)1FG428)5?wYgKA8I-aoQm$fC+M zUt;1jv11Y`6Q8;J%35&#?%ydZr18{FlFjt*%*g7+o7Qyxx+2BX{jqyi4yS_c+&<Ii z&wF)Eqrz5vEOd^)k!aJnJpbws;e&ewjq9Zn?uA}D82{HnA|rB5sAf?|=-!~n$J{(t z{OfGyf7rY1{O+_j`_k_1N~_(UroR8-pPJy*{iQ+tvT243YVSuaU&wZPzRFB1(IEDv z+9p115AHUV9s4bsf93RnTmR<#DM+-wac4KHXI$#Cdfu6)*_YE4X2)!uy{Kuay6|L` zndPU<YVJIVF#Q$1OKozX-_+lI<(xhx_d|Qi)J1YmY&>$TD_x*&x@%AYciXi_2|a#^ zM_-RJ)r-fhxxe~L=+S-l6~%8kHioMHJ6HF9N!->Y_Th&P^{}#MH}-}&%1Nqe-alZs zdW+8YCHGl_)>h5?@%`9-_Ne(<Ol!itKIUDv`*~BOTztYI|EzP0Jm+m+b~B&Y|9;*X z4IlprCtpvT8!O50lDFwhQRjwz`|=7Vo++H0IpJXNon1@wG>bYdz7$T`l*_+=yX|2{ z*FL-VbCV@4UrsDNbl*B=zh@KU{^utmo}8TY<^DQ(W6!GljA@r{FKXm?kuvG!swoWu zE(#3+TTZNzXBYM~SB}li*I@8HAU@BdHr{Nan`XF?^Ir$MsYg4+z6ag)F>Fr1wAb+P zOgBsS8_#*?MSPCf8gSql@1pmgJeNjzdKk1sybjsyq}?T^Z>u7~@Q3I95$5H&ef`Zb z>(`q!RWH1hvi+jyr@-TmTfHRi&1Q_;t<`+UKtrP6mc?$)!4GoMNd?<4-+q&G<h9qL z@?67dG5+7&)*S4a!#Rm3{=}p8QT*C!LhCmk|ChKsBKOMP73J>}Y)<Mr{5@W9_Fe&B z-17ed4<9~0{Qd6tgERUkoDx~aFU#uDVcqsaPq=ozfl_eb7de^c>vcaBCr;kDEA35w zrO=PUy;c8quQ*fk`@!)?m8H8kn$Ec%`(*B~puJr`8{g?WOn&=3=C;gi38qF@*}JU! z*wW&!se8zlGZ^db$miRnef_(m!tWrNxes`B3|(|iDz+{+jt}c?>?%9zkil7R+L2~? zK+!KJ_G_$~kNCXcX_F45E@Qo|FOkh~)j4pl`h|PZae3TFS*xdPDr*Q%?BCJ2mw)Xi z)qV1QS~oofwcCECF&RG=o+fcR%;5T!4*k-ai3t-L*KGRm*Dky@;I!rRRT4p$Pri>e zk;*gGWYQHe&HN;g_tjoSv-cI(mmEtADX$v#9eX}GaoEhtn&z)JOG+!K-2SSm&g?BE zC3PP%UUMo~WJ~X<Kkb=#q0}bh(!=~+4=<W7K3E)K)IIr<n6dw+oVZHQzXw<6UzUEd zDnI;n@Y?+QMH^0h+$!66zM!CCS!!%vP}lj4mENn5o^a9ZIDg~uiXBI9yne4Rzw`X5 zelg)A?%pNA_Dd9}zBM$7`ZqVaAa6?~$4(C&W?_b%;=NoSHk>{9t2uq+{0&w!>f<e# zUAI_W`YrUL-<jL+HmlDCX2vI5@^4QO6#nCKLUW3++_jBqE4444<l_Iwpm%##Nxjec zSs$2mxZ}^)=|pXMYiqSq@$dc0${jJ6ZWPWhFnhgc$Cb~*xBpID%ed3@OS@`y`Mkd| zhk|9w-flhlGJerB7Z$#tln1tJ8FWs3d=s{}?7!Q-bguSQa;+QP--)?+@3_2}r$}P{ z?Fr(?*3C82S^IJ4nG+XEcOAI*f701mstQaR0YVPb_h$6Q+|oS6JvV5{{Tcfc-FBU| zTKQwg+P}Xhzu0iYZ=vJGh{_vkAwe_lpWN#oo8_=w^g-FPo43+*UaL+yTK;yQ)5`n; z!DV|nHZq-9eUF9F^V0!;hDqiA^=mkvG{`q-1$rdTuy;Lw+U5N76<;~$d+)fa9(C4D z#@OfP*}}(PUjBS^^nK{NtA9@$|1U`pbT|-hR1w&)C)<&=JJdim!}bnq`~ye*Z`O=? z7OO553HvE6(`$1*)akvNCGy#n%{v(nHYdne<S5>1Kj{6<W*<*mvtjeG$$tcowgvoY z{x)@P=>t8#_lq<<S&JU<PW*U^!9-EP^48(3Dm(v>IMK2<8{e;Qo@O9=cg{SUAIJN> zCfD4)AJ4XP^5KjBj^-?W+nB4qz>SNCXA1ZE_s2|R7j%1_Tek0!+`+F0lRVe{a<JA> zZO@*3V#e#W9-0d3y9JGB_gLjU)aO)A{lPUqM#@Loe*bUIxkugBtz10g=(0bPKfYSy zbbD=T%!0VxdjEP?nWYEqQu@xYUaEP|i8oB)41t~B9?f`hf#Ger_M)W6&R<Q6D|@Gy zS+cI+=zFxbUG;s_@f3|uI}h6LR6f`|dD7dHJ7b=A1odX~i>|M~T>1V(>S_M>Osg7y zeE#VX6i~Rw>}tThpG;>2R;cvWuuXneqj*puWY%(D-D{=))GeEO*GySZmGr7cF!t-l z6z`6ztj{%u(H*^umM*9|CB9o|pQH3s`P|}_-P?Z&utZ-KIQa9+^2)#c9RGqme;FTL zu&jtl-fiamPqRdC+1M{F{&4jqbGlb${S@iwuodD4dPX<RLuXzHIW?s!E8Hx5>dR#h zR(}@I7hyHKI^*e$m*-vd4l>2Ak`<T{THdj`K6TlY=>l_KZhM{nt@z(+qYZ0})YC6X zDLh{5Ep20XmUE_TbLOE-g8Q5*wZhgYiAj4`M&uYdeG#8Md$snI54zU#OD3g>zs}-& z^Cahu*bnohkF(n)&#zs}TXJWrSaiGYOr5Z>>DSjhd;Pfg+}q1D!pc@oi(1YvQF>}| z&#$fTZ~F*j?SF2gpF6erN7iyRS)X~f)7#8HuD(;7W!pNhXMRj@_OsTTKJO%b?@bZU zvJwBc;~eMAW6O8FwDP>Vi?1)YjDKfovWf9;`7Qapb6$Pfd+A1H@q%2%8B5CDV&=3h zIU#*mF;uMll7Y*=h|9+h$GlKWUD;nCVx+$9ne3}I1wDT^+I|0ctn7#JqRDH-k2G~9 zq`J7>(llIpxM^B`YKZC;&7BfSCs%AXT4wxY%B?GjCtqzd%DdG3VvZfh#z#KUGdD~t zI~Vg}!=v2DnSaDy&8cPBC>9enbJ9O$JN>u(3k75*balRPp1MFnROv&*^6aa&;s5UW z>it(|3E8LQx?7&bC2XljUcBJiSAr~E5eJrcuq1fNZC|AjcqZ7fVW~ycg$ZXkeg;`M z%PhPkbnW<C$^UJKN~)C;bI;t)bZq^5h&Au!1;Iy4*>}u4DfJ|Ajciiq^Uu4Fy)Kp( z?A^)H=aKjF#`=YexYlqsRo~=I<DU{7l>OTMQeH0i+#7uBbhD-Fo$p%lwd}9dOATab zWLWs05wXo^Gn=c@9fN|It&$83U!<^2SX=73d%C@yo*FIOu=wb9!(D7mmzK78lxs~| z%<j?O#;LTT#l$D;NCT%wUzo$LDHG21PME+paf+Lhirbz4|LeMbKl&Fp=QHcM%6Y|G zwwOLmk)5z0^?~Gr{V!g>-o0xV8#_DmrKEKYOw+s4rfU^6t>SgO+qWRm|3ZmEhNaK~ zKNeZ>CcQ^@1RO6^*QGuvOMLh9{I%DYK7C!<dw%KK_b<B_cvtWL{M?acdIFQulSi&E zj(R`YD*fq*`X>#Oe`oB!U6OX?@Yum|IEFp>LPkkgSeU1$XKZY2boA}>uYTRs?`6Mu zvbs~!I&<gp6HE3NN-pobar(oR(<`=|e(~jX%bl}x`rU6#s^6J9{bcL&nMbeROnvP- zKin?-ZTOY{D|4;%G}J}HguAlVd+&=0Gm)#!v|XFOcV+(mOz9VI-pEKuNJvZn{`mO# zojZ3fUAlCOp)UW$?{h!;?TfkH=l)H<`y=?z_tScR&K`Ji@_Xmzl{*g~T{?T?%+n`# ze!e;1ym<e)X<;1p;o)InVd3HR|NrgXyLa#Q?d1gp1)D$3-mtND^WO4`ii(nwlA@xb zs;a88va;feqQXK)1%bT$e9%O9?hgF}|6e=(pZdSdsr8N62H#_BYfrxKQrNA`ar~;t zmjw#nOE+A&b!cCO+DY;59k&)Ws_1RCFnhbJ|Az?UWFw1x?=A=InsHenZ1=tjmFRQT z>4Nd`MqEm54R(Jum=f;Y4EQohl9BC(NQlN)uAn7V!ApAXwO*R|^GKOj^r>Li$ihs2 z`vSeBiAHQk%1&Lp9%*QN@}0}x;Du%PD*k^B?3=)H!%%VE=kxj#PF%9A*|D-Lmmztw zhVJyAwo)#W)C#We=MXrWz2f|ZojJ4W`<0x1JEGsdjyLn;U=`B*__bo%>agjVmpBZT zD4kQfmMHk|cC*(0H4nBLtZ}XCT9nc8a%ReOmDGM!*VVSwpSN$eKW+PQ`<%A7YsJ;0 z?c3VeZ{OxfZ_jqFY?FO^z2)=dyYY)<W&eAcb{;Sis<~eJQ&uwmWzmVgFV~7#T!Ir+ zCmlRfs@lcbXl%HcjVUCg@gS1`gMcqv!qdeS3=9og6I!+IG)D7nlrcH~Zu9ANTo#K| zFL_;mlv;n<agvI9mh5BK_$lkuU!TknPv9|;&s$<=TzvaSLgSA=C;QbeicZrLe;YQ1 z?_2GO$p<4dI!|u$uQ@UOW#H1Y?O*$5YoDtUeH%9CuaSw^wC7)~6NI~YQtJ9jKmOSh z+A;0sO|3%~PS*B81=~M7|FtdU)ALmSbS19Oks4)QPK!n3L>6(eZ#PadDK9&f{mYW2 zTw7{c{F^Ydzk0XVX8qm%cpbNK!j0x{OU}LxdHf@<^seFg)H~f5Wcu%mud-Mfpd{VK zTe5XukL9laeor()Bo)HXwPr00pI$IEqh)oe>)pivi|yCeFTWd~xvVm6?Ncq89iMB; zW~&M7F^k#miT8W3<JV;0E#2-VUnlRFS{8JIP1)+jCC$EF>)*54zhS<s$MMi3=#<@b zQ5pRX@q*QRZGM$q`(LzZTXo#s>WDDyt#uKacA;CoP4;l!yGu%UYyYd~^`dsU{`02G z^6%>t6M9iUZEb;#rB_nyZC*a@>3SN|57fOh<lkInyjC;n=eDLO-LJWwIsNy3@ShLl z=geK{JNsizp<9{!6zj}KFH=N3mK!cVvN34U<M26km!C@<ZP~T;(4C^a-TT`6*#6jl zzov7(_(EOk_tWl~tIV#Sos`2IW~9ldSDwx0!com@Jg?>NGGD>u>HG^N6%HKc+I~uH zJ`a0;ep7>?LACoICJBWXhs!>QnDMT4vTxe?-ncR6pT(bS$Ig3m)-T_`Yv&EEg>!#% z)QLs3_jj$H67OmvwdLv4Y2o+p#mxQ7+5O@7v|Ss2t^auYxz_qO9J{|dofVt3iJ86H zNv`70o9s=0y9<^*tPzT|jS=^KkjNq)$~aSO%WS*X20;$%8xF}_uigICz>6o=;j7H8 z!$$QIy5=zskK12A++pLgGC<TR;6j|-w8auD;uLGG)=l?+s3F#-m$IXDG5d#!u9KJ< zj~&?(a3YFt(y<G5a}pVD=}#<eDZ8qjH1pus(?@c(_$N;O-?_xU_s0$=r+cFA>z*tX zwbPmRg85>4WY5dBLQw~M41$dU85)8P{%kld!K_>@G09^Ew?|L)cOmO(aj)*HfBU+5 zGDCoMu;aoO?O(l(4@x(k6Xp!Mn6;zPT(UBLvhAdbM-r#ja3#vxZl9ha6VAHtiPz7% zsri=|gzHS~lXugYlhU_vVZ1}kA)^qj7atQ{5;7Kl`WJl4=aaQXS50qNJg?Um6I<D% zN4D90ZeuA^yz{1@)GvZDchSw?i+_BSyf@)b(u=tt4?QxgSk4wPBO^i~a@VRYjJX{q z6`5aSum00iow;WIpGN5k9uB=_X(omf6q)1<@Bg1T-~K0auekrx(DjFIz6fuB=pV7@ zrlpkR#wCmYD&0t0*yb-&`|j0!p{dcYj3m6$HwCx{&)~B6J>q4h=On&*owaH1qh~Rp zUc#PhueSu4?>&CFsxf%;q^g6P4w}bKFOAyxc!E2J{<}RrqK=z(O%dO`b%n`H+trJb zi}y0^)_UOYySLV7y6LySyQEUHoC0so`S9k&%eq#RkK$6FudD1%%g+q@+!+4(L!jhG z9(T<MzOA!;&&PI8C}f+yWkQ$uvzzw|%x{&NtQFOE>YclT_u?yVNB(x-pw&CS*<Zbv zTiN%d|5!NRy{gRJ&u<*reg0h2w@=)2wch`^W#D;e#<nwkA$xOUGNvd#XL>L%bN)2m zzfXSe6)jk_WzK~~2M*6Hn526BQ2D-`&c+XuvTfPc+WxpK7jba^^&4CZ1dT1GW*(_A zd2O<D6^DJ-?>pvsVHaj72%THM{9!@;%7sQczn}I=dL`bNzU*Ib{?zFvHLZ5P_k<r< zV0Nyi;_JKZpY1jtiTYB!*K}Iz=enKmw|3SY&X#HU%qTj`ipMK|Zu?g=g~p)edX}{n zbNxRu@q4fF*1dRJ;L5H8ku~3w)ZVEuE}G9&v+dPBsTUpAnf02JuSHr-%&7d9d7<=( z)<(JAE4Q!QQ1J2Y|LWRzH$N21h5h<IU+<bp=7$N(r$jo<YqxOxd&7}iAV1sVce}#x zG_!+-c~a7!I-Vcia3Uy0y>#K>;A>ZRd3cH@UD($m$H^-G(K@5i$5n&1yOybC2BQNr zSHZG5=DiPE>}JWZyt;S1yqRT62kV9^y)!#ktx#*rk@_8RFFj<g<%QOR8z0$f>RaZ9 zOuwS8mHR*;_fG%Y>XoHIlb9Ha1ZyWu^_(UUxyDYqB1zil&y+bk*aA!!aZO>D*7o9w z`uFtzl72%A<v+6=)^LZ0g=MU`<iCM|edo4`>sRPpTN$`*<AdEl&s=m2&yLx0)<U=W z_TwjSR+lm!?tZeSCb;c-o3wx1(|NOg{t<d;Q1b6!)%t~>cQQWsx>_*Mb$j6MJMZJz z*ILS~-uXZBQonKC&gVRL6_ZUZzWmy5m7H9!^J`6{UxZsi*7c}cx0fUbZ73>Eo4q(R zrS949{p-^=uY0{GKg}{^diolv_x`Fi(F<a?E?WP69pBnJ--D8cCAR9=_v}sH=_7M( z&Vh@0RW4uByq?~>5s=uFs<8HtoAe@<m!7g+reE(Eou4F;?_WCom%;k?TawoX2>jY^ z-I_Ty?}Jk81%_9Om3yC*uXbPZ;lYvG{Y5!<KcCz_bBpnIe;)nH=3QOpF4;HvwQ{{& zniXBVS#zZN8E<v{n?2{x{qvK2wq42j^oPIm-nB;+(f@zeRn5LI;rQ?4>mFxa{_yQv z(Zg@gYD~@uoR?~ITYn^2ruAbz*XrjV%hUw7DX|Ic<&)463VR%`mha?bzE{12;kHmx z`s+JWp8vDy^V+Yp_r24^($yT<Nyh4tEcRFWR(zS6w!Po>RQQ>R@4ci>7XN#3%f?Ah z*@<!0ZeG5rWn9ZtA4(W}3pSW|RivPzR^P+QtK>!8k^@`je=aWE<-x5rz2Tq6XTf0Z z&6h6d@$T5ka3@4hXrAC!U1^v04Mt)WK|%TZn}S}NY>%C_@%@9X+fGl2xbo?|srz2h zhN&~%#XS!N&viPrdw%GOqZSUzZp)au{U6NCUJ)L^9=UAA61AJt7*Bp*I<ZS~W2xq~ zyX6lS*LkR%7U^ksVJuF1c|#)9B|l`_Qvt1X5sB0}qK}UYy=~ZL&{r$Bp{r|k9+zCg zmb9OOuEw&q$#OB?VrA<UR_Qa_&gU~f$8jcO%Y%2u`}V8(O-nM_*Lv=`xV{<xsTsXL z46`fsGXDfPtLfQh*t#9_3|er+M9=lw6LFKkH_e5PRTo~QOcp((v}CdWLCMsfIlh}_ ze$9XB{YKC8Q}UPhSzY|cY-{oapT3paWtjYK;=+J@sYyXyX3VT7EcT{n)}1%|KJW1( zTk+yeCAa=cewf|<XqyfH-35DsWKJ&76<1`B7v!{*`&}n@&PvYi*A$uXmTOx5vlf4N z+$r+%%M+D(?0gAN9xnOLrF{O?#<?@JTav@(&(!?$e%HZOyBe#Wv9Er{Ur?#;x3%T* zj3+xJ|4%7tmk9~@^``x;xu;|F#WQ~mZ>&{tzh3cv(w6OvFaPDqJghBX*7(IB`fl3H zykEPu&nDlN@|XF!QDqi;qO6{DhPLFSDSC2!=}}6(+h_IusQR{J*8L~j%s=chF>p}m z@HP6pI5n)$AuKa3EV4N4XiV5u*D&7Vvbi;7&8gq6H@sPP=8f3DXK$|UeDkgQjbB>M zcAIV2g>K6?98FDPpS|&L@s0Q5Hw>T6;ruzrv;6d&mko1no|*IW*__Hf-MXBQmPWXI zpY`FxtnH6eitGiQ?uar;2{+Ewx;?#N+sV%s6`xwdis$n`(I{f>NjqR&5x+S2sODpl z*Sx*;=ie1y&faI@{Ym58{yit!H;7!&7BPqry~C@Ma7rs7Q*%e^Z2bp2bS|h|v{G5P zKIHnN?&cK-8KQo!J7Um(^M22=_jmM@Z4>S|B<-s93|gPJKWpi1MvI*a-`WHG7*5LD zEmM(S^l^6-N8SQA-rLHR9ySs#U*;{DAiZKSQzdh<f}HZIEQO7;{?GW#uqd0qfwNA= zJo#dT;-agXm+Xp|B@Is~9{m4Pb)JBKZDA101P;bzft8HiT~kdIXIz;+GjQ?&Dai>R zia0+?99YgK^Ok2~6XTlDIKg7Um#Z?I4c0wB>JXyRoy9B7++y*L^+B<H^pkL<ABlx2 z+&iZDU4JCIVTZkXE6c8r-$L(lDa-OOG~e+qW!rIp;fZO&`qVzo3FmY_e$tlT*yS|8 z%YK$?>0bT0ic1f_*9z&;s^fSy&1YBH@ld|fN}ZhWA2LiGhVxRA^Urxo?3i}&^U*iL z?g2}dWt+&Z{;l|!k+Wpy8CmUrYAeORe4kXA7r?H=t@t8j^8M8_Ro6%T^4)Uigho%{ z+1?WQ{ik2NU(9^mpy<G=_vc?9TB~4V(D3+StQOB=4Y%pH_HFyVV%IPIE5BHu@GkK? z`r_X5#haeB%{j4M;HCQnC#wsS6prj<vpK=rcy&WVzsJ0HP2n}K<7JylcixzL?}~cF z#)@a=J|`W{Br>>)p2&`Ho^NqP+O3Icw`9b1Y1=G?hiX?Bs(fp@x_fI)Vq#)T&)$hi z>`mW#JKmQX-YB?x@tInXj=sT)#Di}yD1MTb3w~wD<T*F;y@tKkqpVCPeG^roSq5v) zp4{GbcICCRnT}^AZ=Q{u(%OBVXLIuo>vun_GJXlkHf~jUb^LY3kBL<s*H7I(GE22< zg8ToUu?^3ygZCVDwpr?UD0R&?^Cw;pzTbC{xO=KK<%_`fZR;=SHDBrw_7CT;(6bZ| z$=;Bmv}cvprKyXKL}wj%aO+#_^pczvzWuAux-Wfu;(2U*i`{kZB|BnPC8n(s+MCa| z^I?4X>C5gLmrPP|Z+Rxa_ta(iiS`=N?oInRn;1F{f8ae8#%_=_-LdlG%=8yaCeQKh z{G?SHzUuC-jiuZ@6;H1I%v-nM@ZY%__DiBS{(i4ML9Y0<a&oWL-Te5q(bb#YoAZ}S zXH9<PT(L^D`iz_di^UhaC%QLm5?_agz6wo0ees@G`1^^eA^k27l>Y{1{Jq`7KSg(@ zt|8~6J)D#MYG0}z+d2Q&lEqAw%Z=_n?V0;sX!6M=t1lh>cV<z1f-#GIrRyWZYrYZ* zX*RybJfF<&nJZYmFn(ni%y3IT`HueM!nW(utG=HQ3e1nJ-<1~gqHI#9L&twHJ(<~8 zCK^ugPFvj0Cnq`K{Mr*0>MaZJA1HO>buqV8x#M`hp}<c}W68=xsv?UQnp|O!|HXB^ zCyBf6P4Bmvl2-P|x9vEhx$CEJX7}E;8+eb+zCM59ukV-G&fNda{=lHOGj8oP<$%{W zrdM<^{NIsK)0pY7LqE+!T3laz{v&IFKb0web#gZ|y>F5}!md)0XEP`2_58`cIy#;L zX-{Q!4|ylteejcU@yRL5hK%J06rEEnlSOiqLxk;*XRJG}@aFNCQ;&HLotqOL%T=E8 zb<wf5y;a|~9}hR%k=kCngeB^KO$d`*pZ$`u$Dbc${=4?+fXVbE?dyE^f_7V9+!oLv z?e&cNJ(JFViKXGk+?U+4*rxxs$bQ*8mP5C9#72joYOUUMTRg(Lz0_VprN{r#?X$lQ zo!2<*dtqNrN}<96{+LQGnLB?Jj+OTbEm+5s*jT>vrT<1Y|H=0=iv;H>uHx`dovZl$ z9b@0m46}0WO=oQcW|>ZzzoA$yb8${DXW+wJUUgZ`4I3o=x6btDo_TtQ=)2cnKfgXu zwC8-~GDoxfjb2Jy51#&ZeA*Pg|9kE4UNLzZU^RdLOMi>-hyScB_Gj>D%B|~Y-1sBv z^32|O!jV6d*rV%~G5>J;_SGq0TS$uaQhu`A+2-bw<V6*}k7hrq3lfiZTiheW{A8n^ zY-{+8^puCJ)gPvq%{C8ceYuS%<>&*B-@mW%8`|1GUe;RZv2%v~74C#gk=*@1qdF?j z=dAbGf7JGfhU&!`*RN?<*%k{)-+gQ7BsL-9(eLbsHFCFSc-)@+(`K7}@jLPCk}u2N zXw<$Cs-G3#+n~EYJ?Hi5qi5!?&JM3joR-`*Y2(6s6LYry*mLUp(%gr<%teaPwPjyt zu04AsGkV9=)SX*|Ca}!(oMjp<RsQZ){J)7uS37=R_Vi?R;lkO<84DlIopkTq=iaiN zJ2c<0&)HzPB9YTS^|Nqy;_LqSlaf{6ZfMys_gkI4wa@RAvay%Qfz6wa3)qM4+;eQt z7E^vnw+k0@HcVze{^XqDM)l4+If*V$5^`!=e>>l33C%FDO)g&0aWQH_XY=-&j2Ip_ z>!gK-wl=Q*=boQ?_I#CW%GGD5KF<yO%vf>qjJwR8k58{%i@URO(^1#fm-(lqe=c7k z7;>gzb86D63ku1P+GcpXc;p|lXVS^^o%28Tz6}5MyJxe-><e2?KD-)vc`nD^z2!`d z5_`8qZJVHd=h=$0CmPQ_t5j7Ju-g$`DDeM7ZTKS5MU~wKH^Vjd@7iOr>*35BUlb?) zO}M#NtK*s41D~H0t`s{zKbB}!akO#OdDo0mAB&4CBW*n6p6x2_Ir-_F>T$F4lOMB} z9j{3|&Qy84N%pwY{yx!+9~}(a=Em**e)ygE4(`rPx4HiFh%;<GyY^?(W<MSA<lh?6 zsapF5CI7DN%Mbgr(jq_iSGPeW`@G#=>u)|?oB!Xx@a2xJ>Nb&4TVpRLcLi^)HCbJ= zs{RE_@!VZ?Yqop~KdG!JQ+cq~)8WP|ZsD^2H|o3Iah2NLu1k;4*=4iyWn`zw3pL5e z7fQQl&Fi(PFSyJSEE*ZI**mDMWQj(9>TR}Xf9|FV?A(8&nDO7Y1?${7Z|f$NN6M5% z&MJ>gOP{t^W45#HxmO$gR~pEOSpE80@sRUs-1kfWdOx+jyd>CsTh9IK_j+Z?*x%hk zO5q|?zlAhs^u`qLElUpn`MPNL>z5m{r*-~VxmNer?(7%)HY!g4E0J@5Ya`Fhj;r0P z`4{h>CivmT?TZX|8cy);IQXWhUh#j{N%y+X>bZR%zY87+4qDR1WT@F2z;?vZbXH5K zq7YYPVDHjL;h{-Yn->Wlb^7=1)YlV?-{*zfhudDRa8~!dvCMYT%_rOArfoSMl)voc zGRJj)4u4=j6V&&^Chx&%?G+UlFT1SR@!;3B*QSrl-TIln8~K)>U6pgosWbBIH=S28 zG4H&zFI7j>e*JM%?r2sWL;gp<Spj@GHXCyJckWY6+ibDrecz&ISB^x<SbkIAVBeXx z*``eHk3!D%{;f8SHRl8QloPlAdTsU5)860s_^U5ROP2b&o9zC&fBNTmo4T*hBj#7? zZEd|Xso=o*`1RjZ3$mUb(%(}zx&MicW8saMUvDIQLT~Xtxg~H<?oST4^3yGQKiS`t zIC=Th=DmD>w*TMEd^EFMxTbQ~|7?Zx@65hD`}J#Dh!3mBuLW+c9bvI=G(XxtpS66+ zoQX-Rp8S!|4$*WCtvY&TMe6nJD;e_}j$VDaMefR~`-UOn*Aq<2*InI_F0Q%m<exvu zYt>$_jw{qH+y6C6_ng57mMPL-7w}ctd&WA=4%fQ7({HxDevs4i#FNLZ=DJ_qE41rS z@9WZCi)0f#Z9g`$f32Fd_|>FemyFMS{k3Vok}B^Lb9=t)(i;C>PBjU!i(YSDQ^Y;3 z$yW7gZo|rpSss#^Q>^dzYZ+}**UFw7a&@iSS7Tjn1D<Gu2a;$0I5O<h<<5JQ#Me64 z!`6ybfk9)rj5{C8&QAr#41c(Hsvcx`QZlo!P2W&n<A2E=IoDkO9O+H}!}sb`Uf6r4 zh2vY(@wG9gYS*^JG+w-ATbxwIw6ON717C&WpQBd${$7rjz8|hEFShURzIkyUo}_<? zUXsi^(Ma!Ewzs)y`HGw;myB1=Y0ADh?c_P-MlrFnjem~%_I+Hm<!_N6=cfI$=S-S6 zA)-uyk>TinM#QYmRyJ3q30JRV{*+)~c!F)##>fCXYcnl1Ubta#>+z0-Et4muDZ5WM z(K?&qvSg`?gTNBWyS*OQGbV^7ZfW`AHr=DV{YnPQyZ`m~@8=iH7k^&UR9x4;scX`X z8LkQitj~o$#G9Cy<mBeo*48qvocO;W!91vH`>AQ$v#y0lUE40T?Z1hA+>Bj!B&_D% z{&^>=D)#1&JGDGVcD2s?as18>*SN~#_o`}le(vq>?LB+ujE<(J<HCU4+}v*atn^pX z{D+14A6;6XG_gFs=-j35bw*w9Cp?vIO-;XFH)qPicV4gFXWxE*`@;482C}lU875UZ zIXOi|MP+4WnVFfgck6F7TS~}S&X~1Ne)hhfw$-MaE9`gg*|lrewr$(CZr!?jcXdHQ zK}AKy{#~W}s|#vsYKn@QjwYQye_mf-|9$_)>({Su-@cunpTFV%^Z!5X8{!`S&Hwzz z{NHX)$wTZ8Qi`^FtkxU1Oqg?;C3x<AS;n-$vrX4Uz8nkSzO9>(#dR@W@zcdGS}PX) zQ@Js_XmZ_^?FUU7zcWW_Z9RI}qwxCP)_=Dq1uE2OH6->)E}pCI$PmJE<)o|lqtk-> zW=uZKtyeS4CpB-1xXrJ_d#q<Uu5EPJ=Kt~2GDnr)*UkUW469ll3#Vm#{;ZR2r^!p4 z$}<1`dF}+8f;STbVxR3^xNKHwiA{G@UzKrIvBBT1cOC^4zx|dmuZCywvGcp`p1fo( zy6mw1>+j1~-{*gpvBl)i-2AHK%_es)RcyH<=yYVs&08g#_<m}2u}^4BSg7n#*FBwy z;f<Z2VP3*i`6IQ-ORbkp_FTR9tJH4e$V9VS_sXhoe)81{*S>!LYgJNkwq^M5>woV) z<z!c3XxEzJ`R!rUnLGV6zU5d-Jh?kVoMll<^p99?mvt>ovPVBR%U9plYj<9h_;X>- zBIBJG=O|CtZVb6L@ytUX2a6}&1?SF0UD@0?w`oOq?1n`iEA?jgvRG70t`_@pL2Q;n zVROPyt$8~)%PD70KlkbB%9PJ;vnnl~hwTb|b$l()?MIu|p7H119qn<hpMin#z^TkT zlZ#BX?9%rXms@{-Xso%QS>(IE!?EN)vL0;~r$lmJOZvZ_>&qbX{(MpV1DObon6l@m z%F3TN7cFC3cI)lbsbbULPd)5%>RzjR_dCPg*XPFFX1(TrX6^3lo8BA#5nx<)`**p{ z)HikNF^gAnWTv)<h6ukYl)aMhq-X#2GkfOz4Ef#cv&d-Q`=>VfN8MKaP5kV);Zt1S zHt&n^TmL4#TO5|B5STc7PkYqU@6x{O&#V58$zrwS{%-EdD1K(@)%aWL-}-kSJY}P9 zEAnf;U)9Q7t?UQPP0~A-u1hI4%abcootkITF!g~tgA?PzMHPyFgN^)(c3;Zb_15c6 z$Csy!Wg%=ws?C;tIP)+^=G?@!m$UR0UraYXsrP$t-lImfUBPYzD=bAAc68aR8hzU% zd@@Zghi|6QN5z*4zuqoC_c$&0&3381rPI|yEKdFYVs!dc@$JLD|H`w|8|Ux)@l)&K z@lUI_Mr=I1`fJ6T1uxw;{oDH^s){wcmjBYTfJI-IrvLr>)$iF;`)hYEP20RG?(B>? zvukfXJN&Bo)yr?o>o;ciZEv4iT_fqfR(JXYNB->n#ZO)S`2~jC$q7wNzGpq#HS*Ub zW`%}(V!g%|-k0iTwbrb;?e@iUe*MR+;#sR}6E4f`W$q}gjMy`4TVhuH+cmXUmNk9; z6Z&Gl_2YHzJ0?{yyxh3#YtFmst}pQ{la4z+xM5?%SMfY~@#BP73vHMTebiTeFXU*k zm>(c{&vja*3|H{^`ZfJ87gb$I<_{^J#LAKD_3OIK4ar?;0+mU-B=h@}Q#!a02!4=z zHs|=CO$jnjU2e;LlV+-$xry<vP1@0Gi}D$?W-0_UTBt5hlW>`BF-wN`z3?fU&aI*P zOXeQ?!nsMlR^fA%|8`x!b*0O>PCENeE2~`e&0u3;;}KVZx^J&awn<plo}Afwd1d}5 zx4>1(#lo7hn)f-vwx=#Q81|9<(^UV@oRgO<?zWi0^H8e)p<DNyoV!+9XYvmTr?Qr= znUtaua(MI4Ctl|+S^2!Wd5`DDGDEQqoNJUqdQWj)?ffWqJgWN9)#3=_c`UgHh0EJZ zX7AKd>-l%Z@xzYh&w;<1W9u!nTvp{QYMGyQ_H?a){FDO@{~Kni+fDVzw_njybw06p z-6oz3A;L*3Rb)Avbfsr7->%4*++#N3;56px+%gB$SMR+LuT*<>S<iv?9}{?|Yjvhh zViw$WAuP$r?(d3&nvT;|zU^QC^KE8C#r;()F3qodP<`y@v%BY?vw3LOP8HxZ%ntEc z$ipe_6eTK9?=?|t&Z5f&Q)4Ea*fD=c{-)J_N~<p2o*B{hf1k_l!h}_)e(yOnr{(vY zCT3CHo57hgldK;s`QG&Kk;{FX&Kig9>ver6EavJLvSaXmxo)@Re?gC+OuiuF1+R+F zws_YCEijmOGUw=xk3P?y+qX}-`iNywTUzs-`RiLktjcew)~-ME>FTxV`)98yJ*c|+ z{6@CTC*sPltUURF>Bo2HW5FvKj^Fh@yz*+B4|l0)rkKr#fa+PM`?vxouL=mwD>`#% z<$<NgRyd0;N|;yc|262&wS2W@m(oAJ+WGo->;9T^u^!(pXBd85E1ti{{kibD$5prI zbk6@_Hm!dD&KLdBT8}0z`J*uR<my@eHS3})8!{EvtutBiV_HUm{(Y;<A5QkKpW?YM zH`@D`>DKoy#b3=&m~-z?lrrh{E)C~h73=0}oc!_XB5r%L;H@!VxmxsHZmw8=`CR<h z&i*S$D*4tL--}zA>Jj)cHFu^*+OBM#7~!ci%(fiVE4{m3_W2}{h5JrE{VArv|4zZw z^KXKuL+-)*YiE03(2&i`%Kx^IajK>57S&rtwr@njXK!7*PuDU(Bf0R{nky|E67Lwb z2pml5_@j8TB3v%!{K1JSD;oq>y%Jq;l5HB#GFcDr2$zQb7Zu+v>e_psKiBwcuM^2< zU~%NY%<j3j_Hz7p{S*B8x`0;1apk~Cwu^txw)a*38anUr?`8bk%`eL?;l29Uz=Szs z_Rju~OyS)rhu+IZ3EOU;_q<|V&hcKJk5YLbe*Z2$d+&K!UF(*OnqB561G_g(x3u3~ zS+Xu~Z@<#>!X3+}3F%fd=GG>ClFU|_`763rOLnjEvDp4wMW4AucHX@0vr2E$xBFUp zdb0QDpU;RmBYQKIYrW@{+Z&yyCma*=d~Kr2Yqj|BIl;wCjo$E2pYfNgcYBNmci!Lk zZ&YTzIk!ynnRk&;Y@NK?hf`Tk8+v?|&)@i2^FM8Ek3fZU?|b$nrkFD!-bdUv=A2ua zQt)^B`n2Oxp>9kc+rMqus#2Q8zE6G4=jpn^cmCC-MXh{3e{1sD#vf0^+Dqr9Pe}h+ z_gk={r2K}{@yH`bmmFU7V(n_POI2$u9<0<n(cyY0&D*}H!Zuy)r*7PdT5Xs6<$t%D zS8<fo2iZKZ*y~Yb+_=ZSTH|Wg?aT6e70sV&EO_yJ8r#HK`_nQk^|ybSu=shC>W<%5 zf0z`F^_1h2S+^Hk*WU?!|L~{Tp1PWy))RJ${c3I$TT$tI#LYst?vJ*Ku`++)gej_A zA12Q>c*>E+w_~2%-u*M?>~VdO?rx~_d{^;;Dvtk_au(J#{~|x{w)nXH_I;*|b4$CQ zm~T76kzVy+_R1#*UU*k@sW+|R6rA_WMMv(-lT%g?XBr2*S?l*$n%^}vH|=fLSBDk* zc5!ajHn8pZ71GP~uCM6xgSlMKTH1ST_$__7C+2WH4E%KE{vV#%oM*zmMWwrb30$G% zc*-T8nQ_Jh6>j~P_b&Y9jD1(4o>j5JL-^(H)hb8+g{`<AHN&!W$J5q|9a9~5m@3`5 z_Tcb@&2Ja=Hmj>P@UJ$%plejMa`pv{S1iojWgQItiSp$Zb&C!LeRS&k!8qT1?sSWq zqz!`0HDa6u4;XOIxIf2n|Afa&dD`Pu+=UJaY*+KTZ`w8e==$Y)N=-UiVuG==<YMoM z#99i+mWtkW{VJy_XWV`~q`hP1{Ev0vuWlwR*du>1EJO0_JOwG!pDRD<Rz%I)%>J!J z;PH-1PR-duzk8EyBr|g)lw?jHx*F2&F5clBo4bQydrjWrOFl1J`9--a|7%@-%3bj1 zw2@j?dHZLEhZm118kK$Wy7cz-WVR2!EC2Mdzpkt8k*T%`^I7zFhJl-(-M=|elM1Hy zSD5W%ljdK>sUhaK;ADUPX5Srpg4Z-XEqMHIOnur^Q7Oft>QpW)XK?6^<h?s*d-lZL z`xDo>;TeNhr^=`0o>Gd2lg@fJ9d&F-JHL195{3YycRPO0?ckK=oo~E)iUseV&I{Z% zj;Hr76BkS=JpJBsKimE}f_0?|`I2{3tN0&3Xns*G&J}rakIAWu#Fdk(V!F#;{rVJp zC0o*H)pUjJr!}X(E|!lp{5<i|bmn{u2bO=UwBp~oF8!?jrBp@d&Y_-_QkPz?2|glX zkrX@WZKy=hsY#MHMp4UM7Krokc;(-*IQzs%Xw9+7(m%PImlzwJ{yo_x-FWpn<JFlH zG&ob{DsDQ+eRE3VpPM~7b6vN^D_du5+NH9oif8kiUwbwgNJcWBjdb1|xmHoW=a-!e zo4b<Q%e5PyInQm|?kmX>;PCtQl!bo#7fQ`xIW@=isZ3l>*^{U+X^{)1oO}9vz7(G< z^ZPEm`ta>lXEhp@{(szKx8oe^g=dVapFi|`;@I<<!}zn@|1-*UGfpe-J;}@;5glQ> z_~^m~3(nr>Ty&|eN%f$`j|3Ud2BCiucKd|;qT~!b_z#5r4U7}uxz2X#iipHXu?_Ce zvo~t({m1)+Rm7;5QSlZ-k-CivW8V_lya}cg%HK%-<C@wcsJh*(!D9V|oopKUAu6w8 zJFWz~%sY^>z;#D}jaz6}x$6`yfel;{C$IdT-I%iRme;-~z8eL@8TDDh7v4H&BH6%y zklE?ume99v^Iiz}ckg8Pn(|rn&&~r;O(F`p42L5&Dv1A>YU!|3SmAMql!1e~CTAGS z<6X`Ny#!+781h`0<Jts&sP6caY9sfaOSEX6&U5~COHwKWclyo>bY)&y?i!qS^!$9$ zwZ)=u%|#7mw@i(lG}YE^YVEzL5}|hDVeda4IThzRZ;{8Gr)l#R&FuKN{J!!pyZ)3( z_oI%UJ6YtU-{Qixzvrv#+IO`x^ws${`3h^4d~ncspAvTTne`f8m!BJ5c?$m?SoTYI zy<26n3rmFZyVLa#B*TS&ga|9GHs?OXqAMerab|&I(DhYMy2Y=4KOnWLt0AyeWq&(I zS)hQvic@;n_02O4Bo42sI{j?f@rP@6tWA_Sm>bemlpT`%>ET{ZGx15E?u9#Ob}pQC zVoR^h-RZ4+Jk<i%FUh)mzGAC+bK>?@n`7TeyE3u;V3IkX<!c)`L+>YR)T=4#Oi`C( zTP{1_e^aBU$bV$+$3F+w{(7+R96z@yOPlQtmdT5yZ_P8e*~ojwRe49k!FP8!^0yv1 z#4DG&h^_wJ_O)wxr&#C9EV=Y8{Pp<<zH5}^_HN^NDlx79_o`XjkICuw2EJIv|J%`q zweiO<4zZ6Wb1ylZ+n#@3i7EE^?3;<N9)8oQ+3;+28{0u&@z~Us`Tox9HfFmmE>3Y# z&UtorQjEaiDUPq#bLsD$so<`eraoWl;IeB<zbEL-X9)92UOGF{D#-lX%%~d+rmu1I z;ExSn85Moz^R&FyvL(yI=SC&l+xc$vN;_J|a92Tc$(aW&FT?{s>F>+tm%Av{75j3r zLFV^KSxx@);!c^I_}di~CR#V4;djo}&$2(>hMiy#jKA-u@YK=zg(1_@1GoL3Te`M) ztuo%dFlX_V{FhQ^l4ZEgP0p(Pkkhc+I_%e$&5LeFb$t5Rdi6<ez$5O1z3K0^p7Cq@ zJb&d&+nC&}jk@>Uch5doW3}aFb?K7o(&N5WUu&v)H&yjURr`ung=a6ZR?<m7TEn;F zlJEb<%cViT0t5A~KU`B~w{C_;%nG}84nNb6yndXq`Gwv@>xlPB&+5<JtY3AZKIWSJ zk<hBSYI>VOXAA#!y7bEWMU(ZOpp>0~)*W{5%vY4xH>gj3Q_7-rC{uCOqdoP{CjC}C zay?BkZ<B@6{2s-dtihq3E9W2EQJ;LGO#Iivd-=XPcecwWZWg$=esOz;OFy^U*P2ao z2YQuXiq3rCRIT@A<w1#p+M3f>ez$R*SiVp+c<o_s?!(^y+vE-Y8gYLWvf66MxklM_ z!K`=ovi8YV?AuC9u3nkBX;$_Q>vlHh+4bAwI(zqVWc%-zS?VGGwac~R=(Y<I`}-$n z?Rl5YdTvMG{9Q(iO-o)>2<ex8RkJyB;jOmlxp-~6;*e|VOI0^F3;ekG_*T-)<j)H^ zza>^~=T)!jwDEo0Z>rYOvGb?+@%cgjMIP5`H@`@mk+EHM(?lt*NzpSByuL74f01~# zJ9v-4hMbann^&EW;#ea0ZhD2G-?e8#k~bIoJ>tsAc)(h^#^e9Ss_*SvH&^|sT)njU zY1VuF*{f%T8i~A4TPx%4-IKevrn~K^c=_7O6;)E(lccjOl6|hEG#T#Rowq;Q)26m* zi|(4E={(<b^rxtB_+Af4xPR8k=+p*_$!p&Du*hG1ax(aKnD5h!x!eAqJ$qrs&qb5# z(-s}cf0OvVU-bQ+ue*P;?f<!K!keG-b3d=`{`|K5^Z!8m3A@+V|5BIgZuQ&0yndeB zPL_Jf)qj)kUhCIC-FP|C<MHvilh)ncEc>o=;q~;wjQMhWD_Aa<cf{=CsubYo;kW4F zp5`25X<fN??xsst6-ANvbY?Ht)0oz&zC?TTQm(&ln*DkD%#TbyF5r7R^>qL3@Q&$W z9`D2D4)m-}(GS=3319gqe5GXazEp_@xt|+XpV>bzMs?DQiqscBv}NabZ9AgY;V!<v zY5#1G4Xe%;?{HJvQMYTW7suD~lTuyn(Q0ScTz3A`SZU$PmXUcm-0|+0`iz~TtJ_q2 zj&dxJdB*)k>TN|)s71rK-pmy>o8G6zZ8rbkGGm*|)%=@lfBxCGO^7Yq{X~w_8)3or z=4n3Dr{De~ceu|odhyTN7UAg3*>1tAx6?xJ`RiCN=6>|-!M|W%i`T6S4~rRCapcTv zRi5^fyV&@6gxT3<1-Jf^-^<d}?_K%f7<fhTh=rT+-cOS>dt9IC^6K?59N3h<e$`yZ z*}`uwt^RM@x4Hjb&>_y#0rmU0l^=SNJ;};&-}<>5->c4_<);x<y+gl%_g>Wbd;X^s z?JQ?}_FYsSBb^(S8olb-g_z0xzq0)v|JeTb;;l25MTaNW-M*jred$ZFc&F^oiRR}7 z*JcJuKfieH%EOy~A0}FVYMS!z-MxPgC-9};l>7cd_8))sgqfZfyi;b+TF}5e$;;=1 z%EudDAI*5P*~Pb*ee0jj>K~lG-%mO#AI#+XvL)_ii1w!r?N=eM{;rI_pLyujN_NI? z+9I!)wfs$LEag0Y>`C&|dmA_ZbN?W^?P=Ux&X<9Ee_35roxi6tL)W-Uq4jg?hdbgz zTMX7z{X6pL&*Kl08Ky<k+Ri)>ttgCY`TS(hj#EPRju}}`PS3BYKYw=bI=49~EtaJV z@;USl{MAr?HF@&y7p<%LtgaSmF8`Sn^WoFs{(`0j+)Q)4`8O*be`@i3vFrA5%jOlQ ztu9Tsns3g(UUJ3b^}nC2n{?J<b6*g1T&%n7oU>c>9+r3Y>^b+<SyrJzb5BIutMlGH zD}AQ^Nm%)K?!l(np3iR^tmXfFw2pW2t<XO{TmNjoo2JRXb;<U_bN|1pzpHbh;9t$5 z;NL%=trxN|`o63_a_M&u%Xi;ppIx7%!@lEdcA3}JoxJ~DuTQq_zhB<*<f-HT)A{cI z-DbS|7-t`0Cimy3*E-n;+!3|+?>jaz|8eo<nDCM-Sh)4;niK0!u{>rt!|T^5+j#N( zr7QKx$3BZD&wO!<b=?7@85sh-ei>~Crd2KLI2`1EY<BM1IpTHSE4J*izQx)VFR?kD zb=#u?xn_=+<?3cvln&&?@a*Q4|B@u{{^0_Lr87rC#!DgBC9m#(-+c3w*lV+^&lh$- zsQ0hl^R?f{c<;LRA7AqJo!x!NL+)HnT24pdmrE=*Nhke9y`P@gDV@Z-QMozfgg7G$ zk6Ze-i#N4)K9tYAE53X}zVzW{i5`8s-hV%CT$-0#^K!?PXWtzTWE4H!a_x7kr{(b{ zw^Fk$euuI=-Yva-@5=XSFXohQmuv6NWmHhRT;Fl|?8BI+F_*31ckl1suQcP#yW0G7 z|MeCZpOyRb{{1^S2PPv6g=<-ochtF<HvKriW>u=A&qAi6ev7VEPdk28vpn%UVz%n( z{5?U(g+nS<orzlPux_cs3Xhffp^JZ<(FqCYJhp6wTj#st{sl(O&)s^Bf*Ixs$VeUR zYT8^ADiD<Dz1eAH!IL(wl||D;7KZGs|H85IqgmdWg;##mKjd7^y(lvKYOA|wi>b@9 zwOOV|ra8Bos&4DfGF{qN)v`5i#f6g(+idrDwY5#0SS)^e=}lWcm1nco%f?slV^U<8 zA;I!^(v(&IbORiiQyCmZ^fomzT(*(WJ7BcQev!YY3+wl-Ey3zbuC=f%5Le2ZuxRz0 zpWlSHOq#aMZ+Dw4YxQC|M@xxi6CFGg6DEIBiu|vf*P++Vm!E&Pc(%!mc^h}NEvl{z zx&KH$?DfO#-`w6={Js%5Gw~FgaMH=$yIL1~dEjwZ|NpsH;%820OrCz%@r~~@MgJ*B zbPvt5+nl$lBY{hNd(R_{yeQ>ktV~P(u?KiFvxqP-F>o;KU~^TvdF*mgg(?HXe>E)o zTZ{}LGbN$nGF-x`(iu`50&^G|S++kAkZIbzd$%=9d3m`M@4I&<Vp|p#Zg=2#_s;11 z?0UoOvvn(~tn$;ZYk6jJ=IK3l_@TR_`oRAQQ>ILrK7IS9O`pDgWnJRF@4!X7kC`^z zFYLReZM`Mzy=U2Y&$K%oWup;gb2@sjMudHq)g8$lHksD8FL&EX?znsFht2E?+lXH_ zw^;W@vB&Lhi~Du_PPLouPB*)X<95|Y_x@5lcI;Tw!3Uc*Z8~=B*t>V{dUq{*I&ItL z4^JllIJ5Z6p4$gnX1_SI{K1vw8@??6(9?e7&Gj97W}kVqd(WxmPY$)Oxpe)_skw`~ z_KR)}-@hu)>(xB&*LvDg@u#Eat-7rjt+3s9!uDnJw!fQr{NBZV`}R$oI1zHt;?A8r zr%s(}U;poqbmKhUzIi?V^K^9X{%^bIq(1-G!hGf6>ytNs=hhZ~U4L)c^m))z8_njM zZ~Oo6?{3K6m5PcA@T|?ZZ{_bRzkhi9;mM;%k3N0+^y}BJZ{NQC`}gndqhB9Ce*F3K z=ik4wAO8QW7ue+f;Qw8o|I+`9oj88VZfNt-35~xX-_+y0-aP7mwgS^+CpGs~3kx*b z8t$gmZdsV2(imbgD`MA1iCIpoqgJx#>PVhXFqAz#F;8pmiD&;RxA5g^1-me;W%4LF zlHkR9OQE9rfUk#>;0cyU2lpK9B^?@5Pn<~e-tu2tLn4y*p?+@Ggvyp<TfT=?#<bp; zHOKVkmqww06<Kepm1^#U<SQ_}61U6~TdLrj)%0tvP)Uu*1$XsZksoy*C-{Auf9IGR z^Mivk&gUNME!ZL$Vr8*eXUVhZ9~qvnc4)kLnb`j1X{tN7v;yB{f#9O1Bm1TvurE<C zHC2;X^0=ygmxo#W!rh<0RY-=GByZaN`d>}9!n41tllY%}{FSioRKcp{zkmLFbiZO> zQvUhZpAXM@`Ya^>eSIkV#XMG~k88Iz{qPhsU}W&}S}0Iq5wtMCVbuqHMHU8c1+IVX z(w78GS}*D<c7;7Xq~TNl<ZVDy`P#P{EnG~K&$sZMPC0m|`sx2i59|B?c?&RIe5=y+ zF#5fUXQ7g0`>DpIQ=C#NIada0vhtq|GAZ3MHE1huMcHN3m;jwisjhNfn;bH4J(G;O zr(K<J-0AIIoos2VS24HkTf}z8h4+g|X6@fQh0Eur*0-WRCtj|dlx*40*CnL-qW3}2 zOU;$sZ+w<yZjSA+yYT1K)Ri}M&sa`gcjjw<-L3N;dA3%oR>`X^v|pDOx5aW@=Ka++ z>ss%8OjCPs;G^nwZ7CU9^PYYA_M&MACrv!*obn~Z(BAi8@;tM1+qmYN=`Ky5*dAaq z`ETE`?7b#=%ZnWD{@ao?srFK-;h(oMMVn8Q2Z_!5UJ!Jk=v%J&r^uFd`_eD9PEegC zHgEqH@p*3VRi61ZJuDIkzx>YV<nOmXl4iV+o4S>K`imWMK2mi_whb1G&YB5L;oB*t z{pW2p=i`V?yXXA~Vc9LQt}lJZJ64`G)?W?3AKT>fQ~hvETHMShuhU&z{H1@%+wI%X zP+y~(x3a$be4@8-n2oOF^vx}?&oXMPHp;tqH55#1`o8b&`l{sp_r6q?J)JlGzeQcH zq<&%l?seN1d{`slswiA@BQ5GhTEvnv8(SUWJ5sC5w3??*+A;N5)tpilH+BPC*_v>% z7b{90Y}uM=k*c&$e&w1uCI4A{K0cD@^;-9B-3srA52JLsS8Cep{(JJH$kHqLdlBnn ztNNXKTEEql7OHRWyxNfSXI)LT)W45k?Y{g`cGg*V+A+7iQn|>~Y-vbZ=Is=JCdq{U z%BOF?R%Nd8JF#c)s&{qVTNxTuuCmMTS=_?CUA1ra&At<svMq@@D!!f#tN}Cmo_x9Z zS9jCzy@d}K&v6l#I5qR+wd%^W^cAai?{htSSFk+AIjw!K=+5)o--wEP)ov=Xm~*d9 z{h@%D?T>w?5s{a47wvuAvT?H>)5jO?X~w~!6^?h=rgyJg+3wbT<6+YDDJI2S$*#o< z9!|}6De22h*5vD&CG=>^g-J)^yA*b>dY02)@bG%w7xT<z7FTb}CslU$Uv|@0bKR6S z{ow21%<Z~bSF!}z->J4ryk7e7>_tA0=T~nVoS%I!aIr_rRgI&eYgW~6`mdtNw9iXd zT~F=zl^7=u|NPTobM21FyNWl3roKP$@4b^}u}i)F$vsSKr?}oyzS8o-syJlb6kTSn z%@6jTo7JcLRAchI4HtK^9q#b9{K%Ea(6sZ7{U4=<`z>7O;%60^{nV}8yjU%E(#>N2 zFQ+QLuT|eGe)F?g%;_EVU%j<|%s>0|kMh0et~Ikh9QW6>cx>_Gqu$z-jkR-kibd<i z{O91lK12J6=ne6|ZuYVn2jV`sK5%G?O*<6pymf*Ye`Hi~j@jPN%UWFbg;;f_Ut1!w zy~Q+lzJIj4X=Q}z|5M)s4hh*z|J1%Xz~-!zR%*^Zkt;#V1j-iNDYJ-OR~)_4H1Tj` zm}dOr+UQghm-UuPn{ROJTf1%2`b&{g(K&DTtgVzk&Uu7s7Q@3^{7v=t2bsN2H@x_} zy|nSgRX2}Kr}uZhd!_tzweOr*&PaD=%}3%&Q(d=Ba`XP~VI0u(fbI2k^~>cq_DChX zGuLZrW?@*+Fk!>g7v^&xIQT`SSh+>lMn94={d{fJEUCohT6gW|mFIG_9xQNMV$s5~ z#6$hVRz1nbudDZbm%Ut=K1Vd9F)Y)O;s2JX@>Q*J(&@=_S!Zr8U*NeRb;g=^PFva* z{`9gCQxi-1`=VQaVZ?{U9-_bW9`%I#{62R3a_xGJ{Vz|e9FLg(*~dlAXR4lkY*p$a zH8zbGM>-0%e{Tr77|wBXK|<_wmfB-p|E%`^Y5$&5Q~1J&?{zP?`h=|o4M!qow(bnI z3Y%=PdE1jKefq5yugq%ZSS-}LVo~u^{y1Z})?Md@z>iB8tFp}gbz3<^^WR>>tv-3v z<AQ=CE^fWIeev8$8<Mpg_M6!jo#|~>SSw#CnZMb0Rm6n1Rhd2~=i8>o=glv_tj8<+ z-T%+O!|}3NZye<xoJ#+8nDNxs<1al}`B<CyG#yjV^KjVTJ2ag)Qm)glI5RqY)s9ch ztn!P>&f6bl&3S!0sPCTP-Rw81-xpq+^I<jj)buI)GdzBzyq8Mz{vROX>T=^mQiXP? zi}-W<ZrQq7wNa~1-qx#CdzS7kw^_MNSMR4{y;tikJLyU9!XB6>uAdbuz4yb$wY4m< z5+CooPoF<w=lcFAw>v&|@9wHcuFVUS%?XWK&1&_XCHq&H-ud&h8G63iE!lH4QccIb zWU9a78{6|&+jmPII*__}!ff@n(+S$|>pysESW9kdn8UN3-M;tW%!zxC2&|qf^@w}E z+DC5b&=c>hy`9*3_-`LO5vKO{Mc(pnKV6zmB$Nie>AuYo8=_tJ@Tt`Qe}0qpee2tq z^ew6VWo5y%2fowZy$*CZ`grrX#_WBn-`Q>)wDl4%ifNf(W54ye)zXSbZQGYkPg$86 z^z>uG<hxrImd-i8Gs7d#Qs7Ck-RHH1_ddH+JQm+Ow<6ztQSzD>Eb|iB_P)OF+NJ5Q zap{ccbNBR~h7*iI!9O)W7H?ABu}hJ6-tiShQjHa@48J<69KG&5dYk;U;nk~|H%kuR znDbJ9!Lv)*|FsWKJ}(kkeoXY!rQbp2uc9P_^{Y!)mQOk<YQJHgNK*9kc`29wxZ2gu z;4M8-KWVPO6sM<id+mS!-1J}B^ua&LqyKdl{hWDc-nW<UEqQb{X_{JI{ato{_lF+G zaK#q!6%mVS>fY<?tUJ~HyuNiwOUNRwo{(L;19!`D+GGXq-5nUaByjG1PJ!RDAD${^ z6sf$34d$)0{Gb*xG0a<1(N{3iYvM(%ABRFGa#*q`>sB<WMX=b-*lz1$t>Y5mI(NQ8 zh>KUGz|5d4#vxu_u6t}l@+`m1wS2i+$Z-Z&`HWd%GuqN;gr&{!tDX^;GUJf*3_(W= zKJ5c@SQi{;+7Ql_E@7A-yw#xW`j+q}b{3{q_A|W}%6~Er?Y*sBGhO+Qyb=?qQu9t_ z=dDVIZIwOsOLsMGn001j%N)n}U!~GsC9RXbDBb?KIMeX#)JC@@JLHAGwxl(D_^a^S zWx);sfi>%HZ{cRY#dPRDYtx(uTq_s7ZC%vp$q=B#@lRYvL*U;Nu6gW}1>dm6>+vw< zGR}Hfz`k@*>!b!-ZUyGW62%WAsu$nLvpH1wTqDD4%3oH!+685{Q~AD^#JHbMFH@JT zu&4;Ib@G*X=C0hptGO)6evT}+fC|g;o1WY<84NeYGcL0WIo>JRebi9&<byb)#k=Pu zC!c!kbjU$LMdl1s!;fp~CT~@0)~htFQCZZtr2Ns;CHnoIOIl7&I(XoJ$(<!$al3t8 zJe3{?9Xyhotn|@9K}PYfOrk;Q()V7k+u~ob6nKdhoBmiZ^U(hl=k@*`HZ$7!VSb|s z_cBXOo3qNAp))sr%0IYy=ZBj&<)<oUPAbWqbcrV`ph$B?o4DhynPt0L!>evA_2d*- z{_>tIXShtY+TONf%NCv03OW;)-tsehVoT`k)ISf(-@8XnG@Jg*Hhi~baHMDC^fd9! z{@ZSR&wK7HxyZvPfloTmvok`@*e~Y(w!ddI`~r`Q%sbyL`EQ|Iz^pSqQunXB&VQfP zcX8ISWA?SyZZ2-OZKMM?$wzO_IP3HKyHC28Z?S6cre`%V^|ww%Rz7VB+IUm0s(n&w z&pLtX$lIY!Z-SO?&ar$`<6UgT|90Bew+hyl!GS6@ay#cW_sv^pe^kY`hW%yNv*PDg zcVY`apL_WERpzJndp^nE+x%(1)u;HdPsTeg&v)K%z1u)A=h8in$d{X0xB?lj9cDFS zUa~2!W>Lwx7Z>#`{55Y()0-i=f5o~<7k%b@kGeGB0FPTYli%XZlHU)fxBUFQs>v#_ z)vG1t+uBx<xpx@mD&-XjzR&u1cH!>klD3-cK%KI@lnrx(yLP|ayR@!l?eTi|*T<Zn zbX@bh{A819x!K(Fnejm>N48x%<n?pq5szbDADFL+^{<??Y{N%kUHR$9C$sgYs&4OD zb@x=9=F8qMdrD^t?GTx8MygL`d2psb`<J`i&pDVYgSY%rc+<+hMx=86G-aL6qdU8T zrMbT^e;n~4ZHIH}3H{zZVcMG>EWMklwPwkIh{qadlFTe;--@)<lw-ZO(>?IsJt?!i z@1h?|B417UQ?YjE+w#1dGL=I2j#kOrge^YxYLTy1Y1dnKEq|Sy-`1|ovBqYmGT!$b z&umjZc67(ogzI~3MA&_m{;6$H{+bk*6tc0_MXxt9^p*WS=6RE@W{8E(J@a>OPqX#) z#eTmV3krN%UrVOH+sSf2C*4ziqO*i`rory-?C%%tp6bP)!FQ_W==#P_6|!E%D%rx` zv-z`2-%nkq>cTtWekyan(G#Jk`&QY=-s%-GzvHRQ`z5wFBi8K34!iROynYwl#5SJU zq53<nyX~T3dzqo&Z$IUIALAWG-&M(<3bnIz^P281Fsnf3@rKfyM^=W-xHR2rok{kO zEg7lXUzBWpv39FONbT+an#+Djy7%wB`ayczwB46aZQHrhbxP@yqjr9RU)Q+q5@R(i zV|<)5YfX3SRuR)>@^Y6Y<rY7Vk}ix?TwAU^hwJA)Pp+3b$`edk54Y%~*|5e72`AsT z>^a}?&bfUiORJUa<vvcyv)c}KN();ov$c1TPh7qAPwm>x-*yVu?Q7F%OH)|foUt)N z=BjAq;&X=<pFVR*VnS?0;^lug@0Oj}?QO9~<;d;Bk;W?xmwif~dHh!3)BfLCEc^C2 zZdm)Sy(n{umHE0hll7O}H+=2(eJ%caUfhp$i=XQ($-h}RZJ)D=Ksk$_X3d7Y=*qg5 zmq#tSZCbayhzl;=v0PxQhgaK*2c`L~S@|N9Zmd_m&X(yf@b$b=Rln;#pY6(V>p2!D z>A%#h+Py(!^UTEEdUJ0r`!XqU{wv8V_g7?>KG`>+`7uKp+s8BK<oGN<pAQvHTmAK> ze3ryRDV<d<5y{R461#W~?0+A9@T_61`Ng}b@Aj{JdTK@TYpK*#t15PXKh%G~NL}>E zrRGUf?GsmjTW0ZYtACKUSf9De*CXYz!jD_szobrhQ&fHG*3;dq-d}Y-q_wo}x@+D9 z!3nERZqv>Gn^+hhEFSw~L%06-3AxV{OO9+`Qz2IxGAXfSQU*ufT5HwiR<azutty`S z&YvZo^yfU~ToH1^cB<yi;|0-wrhW+NPCC9%k7dvGbtgARv2rW6DF~eCp2;4&jn&Be zXSvfcS3yyM^1l~XBuu^PWxH_$qveeWaR*r5MV#a=`KI!MZ)Ntm@+8UJru6VaccTr~ z$NvWvttqn=n14!sV{B%&Y}pBh+gG@46zADo;(letnKxBhT7TY(HWu^WefM9nCfl++ z7WOGF@ZWx`HNkV`M!TN+Q#>^vd2LQitnQe5ppW~g(2RrgISyKfHdagIC(fvAXWhKj zU-9JXYd_c)%brQd^1XPRHGJVpp=)PyGS7Wm<6m&)NAAbp=imFwC?8xfVdr9=|NIj# zuYbMS=bP~SKhHSdJWo%0{xt6D%=q*to?=t-pC6SFH;JoF{UdgvH0#Rd>*73d;yoT> zzA`LgXTON+{t;VSB%ZrV+}ib!uF~PNkzHA3xBOit*Dm4Nd-%})3BlnXw_aTJXMtDD zqYf|bRf^U-Uv0R(!1cf%)zA$rU1=rOSMTUw`g6jy?_!3*iqno_n}oJ*ob-KHki(`Z zjSW$2_D8+i9yM=w)XlxW;`VNg`n_w_|23P9q&Slz55IP2U~KS=%9hmKrJL8Wz;1`% z6H~u*CRHP!x%(s*F&%lfrF6oCZ5~Q?;w$?!w3qb?HwnCMJ9qzUNTJW%OeYp20SQ6B z5RPKa^2L!dTXOgXL~fl3U{l(d;CJnS?zH+Su@3nw$2+evb+PAN&}4jRc%A)1A?GhM z(WxJHPHk{DW{LYd`<ol*joR6rr|LtdZa<>m&{6-;(W@gojKNLyf%)<qE~{Do^tbF; zVs)d|;ehy|$v1UNQ(1U}&ZJJ-|A^s`UvbQzmn+;E=X?#Eln`=<(amS`K8fdbcc-UL zc-z{yfiZ2dW#Mb1r1WR%C;N98KiU1hHKcPz-0oHX3Ky)6uv_*&$xxrE`e?<+xx5bC zODkGVR~TQK+c@)wZk~^aij9q=(>W%NN1X3JJbfSXQ%)oEeqvGh@7(DJX9oBbBu|t! zXDqC5mlnUu@!)Me13&ww^rJ_`eyy3+;+e#9A@!iYz>%fux$eb>R8xMwNnbEKry;Yr zki+Z9cfMcZI@JgMlyl#cR8e-}kY||`%H$>OYO0+e^-Wg#TJw?RoKcVaqxl5l{i3U7 z4W{-o+;25l`?`NAGk^Cf|0BQsl9u$j%UpXP?T~AGz_HyoK;e+m<&7`$EhY#nN#C)0 zeC=H$)6&uhoUeHnRs21ddhciO`Jboff8M^mnB~Cr?(!e<;tq$o0}ikj{X5Ej_yVtu z^Odvt%Psb=;SUn5W89xC@2@_2qWUXIHLLrp;_H4jdiruT`1@RpWqEjgqM(J5kfqzv zh0OcrZJ(Ii<RQXqIZtoHq^Qd$Z=Sot>pz<((#%n)u_vx)M*8+&pKtj558;VDrK@5V z%qNhaxBq@Zp0tO?-8oA4ywo>jsK%JjPf`mN-62-~LUcm%$qvsQ+)di=cCF*q2zlpm zQlD35<MaHl)62NGoL_I8%*DB0U}pIG%=4z_uRMIa{A;0f@Zrzzn_o>kux<N2=O>M` zXN8^qerC`2Ez`r}Z6@7(b>aZy+z|04@yhEsPMV$+UB5zf{r`=OMH2IOY`AHXDbyfw z<NDPu{}0pq?fO_>wyB)Bd49s#=kvZlw@bTr?C<=vnyKgF&h*sizA+G<C!C+S<<Z>l z=luj$Ojjr^?ojoQE{v~=j$gM#HeA#HRo&WGTf-loT0QGY^o2mP4^OwQUAx_Mk^UoR z{mNa}FDyK9y7>Ouh2re#|1EY%7$`eRo#1r&bs#^~UrXo{qxXfc50kuAWM;ESCq4Di zlk@!%nX>%Pp%RU0E;n4ySj`O5YINJa%}QvtlUY}9w#1?4WW$+WsXHv<4}KHp66^o1 z#202AqB-@vD35ZGebDNV|6TXl!){BSap(OYue9g3w4c%2rscnCa_weh7+==ppSyV0 z2~)ZFT*W=xjWd>ZeX8sATtD%>s2%&!o2%ky@f@G{heQ3`Dj8od*O{-+Wv-R{*V?df zciohaxki7k@1D-wS$BKty%0bBp9LxDSMO`e@0Vk&UbJiT&zL|ZN1?Ua%ik{Cv3}CW zeSUh?U6L{O_d2Y7`JQL-xPSUG|GgHYz}Z?yq4@Kw>I0%1YnsE~@4no7uVZ~%{yzWh z%V#V9Y<vGNfBpLR9^$;e4XzxqV`!7;HhA=}G~~9Hp_K4%{SJ<*+<6|NX@BK!31?0$ zu2EPmF>T4+<61wCEZ?m6L}6-Mok{X-Nx?6ilbJ7i-p}9Sym`x}bG{$fZICeB#Bu7_ z#l!&Ns>|+WEI03maNK<1%=@RgXN^c{bIxNPyOo=qU8Y?uoHViN=!>G9z4{xsoVnGz z=82EJ;^Iv)hkPTr?nklR6lHz!esw5|pj@Mj*CCIPvtElN9?6_~H2=)(sjB<i3Ries zo?^24gb{z?ic`gJ_nEKO`seUx-7+1|tBaPc()bq}8+&<=YwTr%H@n-mrFwR^t$Tc- z+_$!W+OCsa_utEJ{g7K8wZ%s~r;uTaL(^J`&u^sCa~otd?IcAx5?B^I`W|^@+l#L@ z5nHoo2V6V+$~nj7cv}F2**=-aS?dIS6^eRi%;VR+sC1{+e3e0W^^ddS6*a-qr!<)b zxMEp^4l>RN+x~!gV@wAp)8dUea{t^e-8tG`bj<7F<Vr<@t83c0B`R`+xf|q`*YH-~ z;qi8jx~;Qm?cw$2lVrssqjUR?p7`2qo3(e1k+901??rRZ%WZSAxBPSap^t3tRxKUP zuWV2L?y`1X+mjV)=k>PW`Nq6YT7suHnYka~xuU5reT^aD0l%;nL)nT_&$S=#J-A+X zD7L~X?f>V;WoPD1daz%IE41CBzoz#=dE=!ijxon(y8o#6D|qW%=ePHN!5V8#cQ&ni zJSP=7?@X#?{^aTVVfO|flXs%OPaKtGec`QNap6qY#jooZ_g|Ebk1z7GO_YDVo#og$ zUx5nOn!sB|C0EmzaarYs#N3fDmU2GWCHN(Ejlr4SfBqE<#VYN%?sM~f_96ZoLXDr6 z$Nhi)d7?by`tQH@GQRIn{rUZ4($3bEJ&o@dvF3$&U)dj&-2CQclCDg{1bhCgVb>yy z)y=$HwB61)#wUv|`zP{!GKb18-<6C07cYEvd+Iv=<bzRX=j5oR@Xq49U*_ii+k4(# zk68yASF|@hbT{;<2$9!exLxt@ed)4ib2@`~Ob_Zl6kC3MMyK3?Q>9Zs3vkU?5oYtu zaMjLud5K+4)0SvoI~$m*``&o1=Yp09>6sZOjvxMMu{{1Ec5{l^_lB~KDj$>oCq9_K z&lP<A<%a6>$Lcn&5`OOU<xZy8o@X@-lXW+-y*_)Q`7ZyYaQ`-Cvm2jJ%skunRBq;@ zU(f%=I+<+dIJV4LX?AGmi!B@#7Yv{57xi1r*5a@wHpFO_<`XOaBR>qICP`-ahczVX zGMUsJRopuv=GG3MovuqQ^*??sT(;wWh}%i8neV6G5Ee<~u>HJ5Ba`b%h}*gwA;(p7 zjGA6AlkpBHSigD|`}7XU-euDnu9kJReCgJ_I?LoJyV=VFu?sj)TAu&n$!fA`-{vW{ zPR&t&IdAv3tE(Pw^AqXgRex$>8b7D2JWRagh4h(14a0>-KTJ;>)`*1t>s`Lt<GneX zIPc=dFE9J<<d}L%y!~EOSsVE3k7wVPQcLZ&!;d=exXv;1z2W{(<Bs7z);V5h6{UNp z`F%Y<cjHF(YewyF_eiDl%ut-7pYl~^X0v2^TICV_FSmA2t%&%ctIAWCa)h(xREF*3 zg>gH#x$XBcosd4a_ETZ`3G<h!v-YpJs?M|W)x?jP{h2yuX*{KKDp=hDd(LbMf9|I; zW9wR;gKG93?$>2h3`Da%1XhZC%#V0|Ot)@R_7RV8pWj^x(W>Q4<)P=~lk}~ZY+7}) z<H{-iJEBf+r_3u^xxPAl^A*j7EhkjsuYWc$icnjyDz{ut_4oqo1{wPk%XH6|uKBT& zqxfgfod=Jf=PF<N^`<)YPwDd@{m-Yb-w&DmDCWb4zUGTnYFp1QKU?)>tC``XW4+w( z3jD6#Jas){?yrIcBC;Vmnb-eL_!HCnXrs-Cf1*!hG|%NX&E06@q5M#0EuZ1R{Ajr( zzVbfP=jN(WQF70?w%`7+{L-=Fj9<MRG2R8|9_oErW_)AktQ;mYBgR>|haXhN%rX`~ zG*g*-4g0zayI!xJd8auk=S6Y{!&>JwlRnwSB0Iu6&pDU=+d17#-r0yf)<WvWtlqOb z3O5yhyMDNmIit5k;K}1HQBR$&g?se7y4bP5-`J&O6UCJs^M2;rs}nc*PvrcsZEAnx zaEjBtN8P_}{1G?)_F;Fp`mE!3q{Q9CmhV~8w_ZJ?cArt~_I2}5-1*J7e(Uj*X<N4y zcP`)L+EUZsBGgzC>Cvd%dfMMBxX4Rs$IH+2`@M4)cJTOBO5Hayckp`4tg^vUxwG3< z@aN??eaoPfvUOX+xqs)B>hE3o@S3DSr{?V|x90!;p4dO{cAoqH-&=hhzV1xr@sp1_ zaj2sz@9mmfY=%r)^{t1cr}y)$m3noN^UVAm5ohFTBucN$IeTQqtewY~=Ulk)=IsnG zr;nSx%rg}nCnZ#eM~3^py}tPMx~<OIvf<~{<QMNgQMa+{pYtb&JO`&A-p01MzEf7W zx(c(*J@x8$Vte3Gv;R8llT;68PV3IAI8|5XIXB8>&yv?>)z)*CKAls0rKC9}uRXGX zS^uc`p_aWOy0$&jdV4dRgmcclQ}6TBZa-RjL~qaiMsM>YF%E~Xt)D(~k_7+j@5{Ca zME-BMB6yVLSloKge*5bacP)#XB5VJ8(&h6GXX^G%*?73Eu6~=zk=MUGe|`Rv>Ts6( zMdsbxHd8MD<ZNQs&s(PVqUG}6Ri$}#>)1b^uX$(v-%eiID5S#mtJwCy^R^zI=Oho= zo_|uFR3enaF)w}Xw>zsI{4{Etv|`QO<>@J}_pZuys5q0KxAxnVceVxJ^%s4L`((W9 zz3#qirS<D#HCM@M{rYGZ{^Ql*n2CRr=gd9nr)GO<irLlK?sr+czltk|tLHX(<>&Bt zANaOiC-m9-0-L)_Y`R)Yerh_|SS`KiUc2;S&x>_;9q$)J9{f9>{r>OH=f6G6TBb_3 zD0j6;rtGj>{CGKktN-br0^Ld9y1D{hR$nvjF0ZZlo>P?-<YM+*BRjBS=Rp-UD_xU} zm}?(QMba+*R;)QLV&4^{Vdt7$^yAum#V?;W{B;ojd+WaHmI{~YmyXUb3!9{L`Dp(! zV@E@V^h0}=+<E_f_cqp@?|W_im9_+*X_E?wed!o-T>1KPv)LZL7CVCfy`CJK8s@cs z3U}76KzTkJ?p6A+WnT8PBL50<`GuwD)dU_r>!UeO!k>MC_?<{S{)26uYIR2&UH(WL zEt4^OIAO+O1>V0pLZU*pXVn*G%`NYBK7aF~-lY@0L1*V$Twlj8*|l5D*ZAqqPg%(( zUu4}<L`{#09(p41>zV6Oowh*r+mhEbJ#GZNzBK1oaKHZ2y*qSW8m4YKCwxcP@ZaLv zzW)A*E6XLmCu^wwSGZrX>`8L^^#2M|PYbU<p|$vQjnUCB8F$WQ{5hM!BrvOk+jmim zTCqd$kp(NWE|?f+EV`l5WNKn8IxCci)!cb=@IuLq8J5-;_DE;g1*ql6Ni`USoiGej zQ44mk`Ig7R%CO}0kJM9FmuRysY;c+BWjIr7fzQ{IzcWtyIvx5W(Rw-J>Yt3-jXt{n zEAE_&u-Tupb9K(@SvjX4M7XcXao(Dv9I%bc=-LCV+s)SZJ}BKTQM$cd`D(qg=?9~G z70R=hn9G$Le`Ax#m!HyV(8F(VAn3`l<Fk$*pZ)Y!d4h1#rjr?)Vm})(^L(oPyy<M& zCg-$IYt<ij|M_(I$c2e>SvWo(nRCbG`<^!!cKwkzzF{Mk!(G0qKVsc~m%7;!-)6@r zikodLG}@?cwsE`hMz+cKMS@>Eobg9mdwQVG|5LoPCra-=Fn5<tBj0EC`FAy9R{GwZ z<ty6dyEnquc8Q<uEywrl!dXd6*Cz%qt=e!Y>n11LQIQ!jS)Z?b{`5QI_O3f$PKyM@ zy)+Myvrx32$ozWI6!x5+{iij3O#S-<4=q@Dxj^M|$2Vb49<TGYT^g!h48=?R3{&^C zX7&V2oN5!A_VY`~*E8(~s#}CoZAvOD+@3CHe-Zeq;`N?Cg2$gsyr&{Lk7?=rLsgp( z`JH=GcuuAA`xCQUPwcOIo(g`-7xN<AWvcoE8SY;a&&o5O#qflEwCsy<{bthhKCd{Y zqH9he=bA?wJPofpKbraJ+05M`SK0GYkG$7<@{CK};b^R-rB-7l*Z#s|(LZaATU|{| zx4n}TY&3M--y)xA9K1tIs4hA7fagD{RFzuQQ&Or?zcVM@{dqfW>+gM)hgxU)=Y4q< zwKFUJQo<?eRiD=xugc@jQq6L$;x3=rwSM6$Ce>5NUM08v;ym`M`&k8_QQ9jBvBd5$ z)2?ZsB(CXpZwt9(X4=i=+|Bn)>KhYhr;Joz$gF;cv#XDAikJHGH7?~oqq=>As#x{e z&1+rHPg~kPXX)i{s`j5%?|1h9>xl9<_hx)?`rxx*$493ZzB--w?DWID(}IboCuW`w zR6Tt$R`;}_^XZM;rwezV{<!@#XNPuYg|=si_R0I<K`e`I_T1QT`lfN6nej3O<B3e? zIGgsgZgoHTpn&Uu?3x05O^XdiTb*CsT(iOGp#h`UiZ^<PPMFoK&Rk<<q4QzwUzr>8 zRzLlA^X;M4H+y_+oqW5+We$kwrCoc_B(~^9ej#r~lIi`+MHdbx9oNpiwYIcQW@ChJ z{5lR(wresWrKVHDAFU0~D2cY@EV0>RmwvbI$fPW><twJhUoef2mgbC>_dOibK5b3^ z);0b7YY&TkSz)ih{No>g0DPg=E;d&sKi$9jCCUs8wyM|`Y8mN)4kEt%I9i2aG3$rS ztWB}Aw-#>By?y7_o0HpeZ|8n{cJ|t}XWMuu=jMIB_x+#r_kVVCKHEJ1J#p&vhmTFU z+1?$nVf^PE8F};Av19k|%TJK}%jf)GYsF`^#6N1k-}+vB6?yfQ@6BhiN58pVe|ho9 z*HHOC3D3WOJNx|Rt@rbDKg_NE;hS)0b@Y|h)n7K}|C#N7$o~J6A3uKFxpQaLs#Vjb zP20C`pMCGz?6>xM%E9M_H_HoszQ3q={^QU8R7LKkPq%*(x_8+$yXPVQPOom9QoDbB z#-5+|KCNH%ck8~_3%7n>y!HRW`Y(&~|2%zu<iLRgKYsi;bm$QH@?G%is2@+Bo;dRJ z%blN}Ufn)%=I^0TkFVYDZ@qf`{_FGE^>)|(gKoQh`&L#?Zr+?ZbLP*FkBh5&Bezd> zPR*P-@$vEZ@7%d__pYstjg75sZOr|>d-m+vyVr4Hz=8k2?b|-FzN?@8bN|Qt{vC== zjB7hoihPeYCw5r$xC#5J9uAywh3jY0*`<pMTjrES3!hDW>?ty7qsk}Ur;{_k%rbSG ztSfpsGUr+F&rfToZmz7!TOK`mZRlr*32b^6r6F-^C1x<N+`KqPhe@z$yW!%U0gqNY zc!@PL-MPFl)Z&9fDns6ln$>56dOw!1pZ4Ju|Kzl>aiyjh6G!N3W7jNoUO5+`Icpwl z6~5igzW$~rqhPyZNJF&_+ZIN{S+@Uf<eo3tDtA`g``ARy^6hhVYO~fE&U~9^ADwG7 zUoYg{%N;k~lvv-M_x5Mu*K!4()|jQ+Kd0>vp8N83O#bz|7oBD%P4tT2?!M`jx<Uif zo9T5sufF==;FodhGt-UckKv-M`|WLF-}{TN{P*Vn_ir`j-^%|zKfj<kRwrii18$pN zhZ0z<G`aLe{@h=-us-9d&*6)mg}#S5PVUe+EI4PAx6=dW`I?JA7=QIq4h&W=Q`Rj0 zT9&*|!{t58=4_YQZV5Va?_Gm$2u@R(l$&1PoqX%VJ^x8xU37e>C|_Id_qbwB8%yTP z8*(Wxavxke;{8!UR%NwJ*!xQ1H8&h4wT5h3dnrP+gD+UMtw>?!v;OnbG&d<7FL}63 z`gQxuOWpd{>ZaXzJzrVrL=nH&<4V8&)00vq{7+pjedDLKX>Ag(00SQb1C!(QJTKEE zuA;=$Qq?VOfihwOHcD#j9BQBKS~8o~+W#@$diTPd-BL<nFP7|nd;48T=xcMqmAhk? z*4u9l->h)B<l?vJ<M#qNMen9rFJHU(@<;Z_1Uc`R>O_-b&&)T`wTC1($;2Lhv9>?> z%fXm$so#%!y?y?#yZ_DVw&vhv`gQ-kL|4`yljGX-bWTG4#-sMrZ#CDdZx>x#{7w7o z0ofh4b<<_bn6AdFo${|f=jP!$B~K}!^soMsXSIdzm+kztBTBR~JpIbE5D8BI+?J*X zT9dTa6y!g*Yku`!%yV&7nc9boo;Gc!QZsK_Yx~OV?C$w!zN5~-ed7#Y>3K#q^Ct0h zuh#vzFzD9nBXVhlvBp1n?q<B(`^ql!zQN{MrTW6@Ld)Vs)CB6Lb?iO!@aI-XtLM3A z`#(M17gg%~($y#=afyu5`NvmY&YW+0%_xz_W!ua(Kkl5LU2FcW=!fn4(21tp?|S#| ze*XKP%J<f){g<=t)7uL}!+tCke&71$vb+C!=XcqccU`=H<QeyMuf)cuYx(5=KWe+$ zR=>Z+WP$(r32Tn+XT5K;aGqh@azFX}>yOu5`2IUI{l)(0i``zdue;n|U|7m^m@nLi z!DrtjF?%%zfg9&0MjX)KIiA|}K2nFRSjPJxJBM4tbOH7ks;dt!<Wo3O=jX;Bve>~$ zOYVsikJ`?CT@_QNtYF>1=n-(ZnVaRyN8{>piGUTeS_0A=UhMHboHAYH*8<_-hUPe< zRl&g)^X%tsXSpxX)D_i{q_3(b)INpFI&6t%mgK`7cO=~3`R+Np^UlWXZXdU3<GG*n zRVOj@6|VE>*mvQY43oWrM3*^J^#f;9p6%jAibv+TT-(jVKV3$xE^@NZpM6W6j*I4; zP+GUSQiz9HDuLk#GeeD;z>$5XKize&ugJOb^Ss{4=7=LcA#!4c)-z%sD;+5~srjyD zN(Rpiww{%mo$n+}T+i>WY3eqa$)dh2^nJ%1rtMFw8Yh)#otV1R@=M+ZW4@_x-U^&6 zeX8=b^RNAh`@8L)+iN`gBpGyTYvYvTOz-a4X7TL2y*uqJ^TXo#>8o7ksXb@Tzq=)G z#RQhR!WEWl?}#$retKl%GBG9N!kCV`tCrgB-{!aa{&b-#ACHK%e_nU|PO;w)KfQ6= z>gCr>rw3~rSFCuNblx;ObVKEW<AVNe8e9ogrH_LuZr;eew5LckI#5#6HTTb#&E9LK zt&Y!Wee$Kvbn(;O2XDPwrloWG+t!OOu3dleXGT=shuRgUuB)#~heu?dtX<K(&%gdK zdot5L*E5#s7vCgabX#ANZ(~w%{@N@X-?iWN+nKOc`($6)m}q2pIVf|zc0}U)*2f2I z&F*&{U!=6Ul}Y``th?pO`@e2k!ynnA(4@u|pmKzxeNT8)veK(JCCkmjcFEtKE%Zuu zjVP~Z+=W#)mc5nP`zCb8uC-sgW5Z{xTf(j1lw9wlVZLLVbjh25d17-4)0XbOcRuN* zdaHkM`d41T(CVp47H?_~6<$C0#x^bF>kMs=;(6P}qwd>&`^TH4dsJ4aBIH28-Wh6f z*BlcTuZVb?7W$)V`_rZ0p3mN9R<q3Og=gsHQ%mN^I=#NN`o`nu!OS6_cV9Vs_0nZG z&Aj~Ii;En$ef>1=S-;C6!PJvW?QQnTe$|`1*hky<vCK@FyZYbC7`wB}@1EXWsU;WN zI_s*@X|q>V+Si)B1%5qQBdO8i_aQat?8&Q>3*PTuw^4gRa25Zyzkk^O_GLb~<><{m z^E+el?716udA)w<(&Fm0=9Z4dM$`X3MiB`w+okU)zrH%%=XLx0dk<vJt=<q7yZM!7 z)6e+BdDUEzwN46e=gpP;mh>X+cbMy?J@U(!T{%4MtMJ`6#ouwabwBlcl}@=XWIna* zlJU|9OvgVf$}ijY=-=7Kg4<Q*4vCB9JvycxpS59^bwF^|_k+I{HU~5A|8%SN<i6WM z;R$Q`@3v_#o^!4!zOpj6&plLsq4y!*tCi6!*5(B4Ft<MDX14j$z771j$91}Id{;R5 z!}7P&1@YuM#z`kcH9E=)t6y$st^S!@x9<Ew?}O*BKYzb8bo-JGs}?8xOL(@;^YgpY zoGTxm)k_qJ)qH-(chUXdcC2pKU5a-(inw|Rne_&L+cD|D{b_%;rcPe>Qa-xa?6#l4 zzMtzX^<T`1Zc0hon7z+Sj{9H~=jC64a=X_zWX-I;BHl0gUsAi~j%iTD7coV#rm1hH zykI}5&fUpe%lSio@un=78!z=XFJxIX`K+&JeM`2i)`i6Zp6r@8{T)^B-YdP`e={^R zy;)%D)qVW2-}UcuI(^%BQtrU#mi^^FAN{{(S}@`3os#u!X;nGXcV3!*Hk9deA$z~m zsblYqo1e8+{@R}CF;iD<oBa8t^%YN|I_?`)`x@O|U&CYA{O8}ET9p!8PV4p!``*8` z{#*6rl|Og#RQrgt6%*IJ*|}RGFPO)+cUse){F6xuva2T@*FICvyk*k<X{=81OQy#> zUby0|?S1|0Y5Vu>_nFV8@cW#j{k-S(bv9?;I|Xa>Enqm5pb&2`C(d9`xj|ByK~cKF zp(uf0#Rkue#RP;|c-oq$b16<J71rRFDNF77q1(Rh=(!wUH%AGl=dxb&Wl!CZJheyc z*Hg<Wy#_ta`Z)_Fr%&XaEV!mUGwp!&g8q!O1Eo0%%lMdP9(pnRP{WZ!#cYfU25W+Z z<vwj)A*5u$%@#6qp*lm`Q_Z%O5q#~Xjf}B}ner1HXBfQOz2ShsgdM%>=5TXF@;30W zrA9w$ywUJMui}MBpxbf5ypA0@Nr7q|55LS{J0K!)fp5bqTcd5pR&}~oA1$qB8mNh$ z5}&+IeDX`#$#2hI5@%)q*)w&%Z1UQ-T{cUKGM-gBq+VH&Xut1G?46a>zeIL>KMgxC zetntv^@p<8Gle5!U%oX;(rsK``1xjjua-ho@ZagBf83@#%t-&^P<khyciwEV#5~E= z83w-{<mRQ?-EKL<Qfl)%Qm(9~Mp)MKp8ny4U$<GddF8!R-`B_Y;pXNKZS8L#&4}dq zmu~o`#r~O0fYon9$=RG)$FK7|jJ2({O%ULYb^6(I{sY(Z=C+?d<@zs3ysv59>2)jo z)^7bH{b{9%nj!bTHCEp*`cP?Vd3Iw`#f0QDpAv#4K1^1L*>AY?Q_{L@&37MdTrbxu zdaYXR^{Vl&Th!|LT@NQW&7FDU=ybjPO!F4<&pP2Je)PNM`A1%*mly2wT>ov#)g!`l zw)w>@-R>RhnI-e@*6GJdCnl^g%5r{rnEA|>t(X4na^>Dv=Tn#zP&vJ@vi6JQ&f<L* zX7l<y<`oLhuJ|K$B73vr+ap~QUZ!imcsWh;#00i44?P#0_L{Q2T>5`jiBiqExykwy zuU=0S+B2_oxopbQg$o4}|GZS&>oR|1fsnNC{F0B`=U=JHWB#JLy;Ea-tNr@kgSFD# z6H84GEHp|fGh7xMx5Y&2a#3rb^Qnj3)BgS_KdqRX*)G4ND(vT8o}_;Qoh&gc=ihft zeK_TK@rgMODfQR(3w^8<dDQi>ZriJ~jG}yoJv+oBqIYoqOR|}*v*)S)uIc@gulPDW zJG<a9$6Sj=e#;Jb-rin($!mJ|!AlR1H-7A$Zu#)H`HLTqCVw`2d7yK$q`7DH_M|DN zrd9?f7WG6tGEIv=kX+xz?{{HK^}^Fm4(Cpu=e#pp;N(j$>nrDcde7wSI32OC{8qF6 z<&9@HI-i<(S)}NR_!k8xVWH`Q#=Cy(Wtn$zXN^+Pti{?}`!z+MXlTFHT6j|TXvLPZ zO-j>l3a0Wun*Mr@n!x^Ldm^m<S6*mZ8obx<^w*;Es<P)(n^smmSpO?>ZtZl=Z3YH* zUv=2pgMx&`81{$nef7lS3dgTs66TrHp5BsTKN&9bxSn;(tSzBw@(&9m)<x?~>6{X6 z`T0oL@mC*i9}n4MJ3XpodHjJ*+&6AkUQJnWOHD&c!_`0Sn(%71qZZbJ(f>D0E<CfQ z^!|#u@@rhS`?@}Pa_Zcp8!vf8>O7sl2`Z#Mm@91Hp5&o8)l;<l!_$W=mw)rzSC#O; zG)w=~fzQdRKg*wA4?VU-L+f+nWe0c9;$NbD&a2p_s4})|uKoLBSJXMTTYU2vleTfa z;1sOl{n57k+v-@({rVB@C)kc{u<=@OW#<00>Bm*yhw83crKZw;-|rx2y7SB&<>ibw zH&!e@_C)37%MG(m$mOU66z`dn_%!<J{)?YlJ(oXNd6cF9Z_hclisPZn6HYZMdHRH? zyBsg(OJuKGCvK86`D6Cv)7il<GJ|jB1pjO?&GugA7|d#ORI5aE{+5q#pNY@knH!zD z-6gYac3g_Y*F@cYs;M&5pE92|ej%2(qwEF$39}^Q-r{7X?Gu0AH-5VP$g+%+Yvm{I z%riParOZOZ>ww40SzjhZ*B#UObvN*q>n~UDgR18?r=B-mYG&}Z_oT1%<~sjt%dcIw z@Q<s1&VH;mTyAAj`mxy(XKL$u7WSCgg&p)T@9Um&JgvMv-akE#f6MP+xBR@_XN&yJ za^9QIx;Nc3KQMN^v2OWH_WqCCZ+SY)`*@uU`hCZ@smF5V`jfU+s&;izT^~2U+0?yN zXutXIj-%C)g_cjt5`2tz*7hIS{cz95%fBrj?$La?H__QTeqxtn^Q^b`nV2qxmj5_; zFMGeq+w4D!p6s`s-2D6MdwajKvn`z>`uv~Lj~E1fs!v$fGWod3q?WrAd5^KSI32ON z%-qp(;?WkTjXEZWx1RV_T*qgxJ-0-B`k|zYlP0{)<1<>w_mHF1__+50hPD?0Q(3ki zl}K;<S@^hC_xH!CU9t+RwB9RcsVtUyzDmZ}g=_DknH+_t9J!Ayb4rDeZeZJMyXUZ7 z!}g0C^WvR_;*u8!-YmU)X7MM6Cm&e@{)Xwkm9@QYZ>_gu`n_+*mCT=I@g}+6wYq4q z@Vp(L)bF6bIgh0T-5Nzh_ij$t%z4$f@Mp}4up^uw9cS&G{PX=P+i#op`cGc6;Eu+# zmEEQHy;Q$WT(ff4kCnTMzqftY4C%i$$Lv|A;hcw_uQT6m>U{P7veoIy%+Zs%)Gy0x zPCj?Z_!7IzhmXcwZ}-+8OHY$ESbgVd|INLL8~1RX7R}BSS+nLzw2Fw+CWqNSH+MxR zbMJj}rh4A*G)A{?N!ic2RAv=@tDLlaZ_?2yt`oThe0%P`obB9YsO<jl$=kig2AiL3 z{UsT@cxS;eZuh)>yG=NK_T5`L|9G9Bj!k!ZX!P>DY_&9tKVDBG6pYg(M51JrBA0MS zEYXihc@v$o?f>Q<Pwy*9zZ7c!AT+&*r!S6!QU3C3)yqE>oIg(xUm2x-AxF%EvmvW2 z_uc^qzXX|2b=v33PH-6)exG=}-FwG&{m{3%vDesc{hML$p?PDbPd4+q45{@ItZQzF zthw=Zt;L_n!e85&)M86T<63t~udiZTv#I1!*XG17@%F?WE=O!z8pSyFFlQWf;@H<J zaHR6U!xfAL2MP+Bvpf3)|J|&b!~AdoV}f7XymJfzYf@}y7tM{xeJjNl?!<dw9#2v@ zbBL&b=q85Bn+*!45^qxi9<n;@s5%=V>!10y-pxrsZQ`-@2DPR)CQR|2AhpI?wZ}jy z=BK@pWucN};f#i?NAe*R>#~34-Bj4xYU)~MW9V|{E5ih{>K`_mJ7uirC|S?BeQVZ- z&)c4@H|63w^JU*z87~_}t_dGo_8BX^m^a1XSar3lY`+_?!{){F@3qgK!FY+2O`~m% z{icLhW{($j|GDdSJHUu_#XF`chUHHhw3aBdD)<_#QDaqmD(<tEG2&j*jneW73KC%) zJd1el2<O}mUUI`fk$vN;H7`XEbEaz-*S_)Ua9HA_VALqE)2YMB-X&97X!R$?KxOL- z0+ttyEHCU_@?LuWy|0!Lo{4I_;cm^7`x=#hS7~OO76-6g-q_~!ZSvt@_U)H#`_F7V zcvWpeg@O7!!Gm&<FHa=@R(NxC>!$RZnV(;9srenLcS&?P73-o^^V{O%V~d$@RJL9a zoVP#z;|b~e|97wa-#O{u`kIojPU`v>UhnBSvwnj0XUP_x7hT%cyg9cP=fAr3db{KO zU*7kuCcbn#c=OlXSyjhQzB>P*x5jecN1m5k4AU#r@86Jnt+xI3G``obgwJXez2bRv z><CNn1PLj-P;(CdO^bU?c{)NmO6QhZ=_L3{UY;v9@m4+S+@pa$>Q%?%ns#T|JvTKk zQ$Js)*Sb$dq$ED<TF8;d@e{R83Xe|>Fh~oYKP{4T%iCqO@}|4)$Y&Q?mS=n{t?N8f zXPBwADo69=T1}%JN~t+)T+c!b;wC%oPnV5zI~6mxzxns2sQ3`Cp5*oJyxNX|>}p(3 zZ>&G0_vhyF>1WGdJe}V9ZFOR#Wu)ko`FXsOr?%{#{Y7nV)6|$htgCkJyXWj`a6oC_ z)A+7iH@h}1HhR1J(t#ap%Z|RfyzNnc^42o8#(v9{{TYkY{Z_Hpo;ThT;os_4JM+v9 zsZYx@EyTjs^jicdCrmQ9cqDMi-L3zh$m%oshxknrTz%oQ^VEM4mzxu}8X3)Ce`+}W zgo??Dn96^8`Io{>uD{r6psewtReM|Mze^@ED}@ZZ=gwc)JAKbIb-m0Zn~z36+`T#N z?<udzof(I=-KjWtU+2lo*=Fyqd(VE}b$JK7Wr0L;TDyL{)nn<N`>}t%UplA#eDy!; zi`sTOj=g%g<jB0I+*<#PQ(oLIeDl^J>D9rj8QZy5-|*J%;g=21jr?W3c3Y*SvCWj{ zn`iz=E3;B)6=N0PYB;REaQ{6)e)mJdik)#9(>M-0UoucC(VW_&s8Y_Qex>2W(o0(6 zUQaV*G*UK6d~X-dyrijO+_nC~k&Li&Pbb&!J*$3c)68>|eH60$4=%mFB1BK1Q{kH3 z)m0bQnM<C%YIix);2k$h?Ip|W*&FBRPC0jZr@@PYKbPe{dVasO;`ZaDY7_tOr<T}1 zxX<3<@?I*-N~F<EZ}R%`&$&8{AtsYt{$ESdYJU1UV&A{HS7RCr1Z-9w+<P{uwP>PG z<H6>;UbgoHYq$Np=rL!?@l!K4-7o+Bb{|8W2?J}90fX>Mfse{9Tnvm$ireZFyO|g~ zPTFYx@KKLdG-%!QvGJ_Pqvfx3SFl`f`yVIo5Y3WgxZz;nnJ4Xzd&3QwKTQ12U(T^6 z=|uyhvC4r*TU-n>xus`VeW{%s`ocd`s_n?HTL!m3e44f>H~)pto#~CdD{HnjYFzd| z_ow31%LnUXf3TWKE_$lUvxLLnq2Pw&-Dn|I$*ru_GCW+qNu0Vj_O6_LQ+#T(`J*|v z(k84}C9}KsdS6zO&aUW3Z#M~F$bMl|6w#jCTypC0v^7VpUL3G1;Fysa@W8&Pd`i{) z<Sl|C6-`@KbvZrUapj0$#_cOAhD&x{S<0z%`%3Cb<pnX_mh+knySW&HFMbL9c;&K` z*4gblR)wnUD3nbVTH<l5+vtqxEl)15FOyfX+_xzadb;D|3eyVaX)E{d%Gvc=YUB0O zQ>7)&E3J#J=-Kx2U3Hkw`d2$;3-oV3Td*<vmgytY^H!U7RK2qNv0+Wl46}3{>Dp)e zdoQM)+Z-cX80L5U{-!x1Y6ch7mg@bR{i>w<r>Ua7WBTI+6`$)@oMy}{zy4)WuB&#! z%x%favwoK(>F%qYmTGeC;-^Y+akhJWk2;Oj*5`{|xgPm8R%Nd5%rBYibI-0=a<5qb zP4J^lnb$6A%nvn+TXw$AWa*hTOTXW5(0i?P^+3#JE#EH^)`w?Iog?i1+~7sqOx4qg z)8|T`$b7ox+q3xxXTGnAzvg;-+2vn;tCN))OZVzUPAhzU^Z2aD*)P65+wOSu;g!P` zTjt-hei>o4@7gg%o%PEmJ6>WlU-&wuDy(*j?3Yh*pZ>m0JG`y&bg}ak&!5r3Istzl zd!GFnb2@Uqm;ZO0gYJrNzqb6dxt@3W81H$m?5W=-?QEz_-0o^}{QG;xEz|y%x~qo% z-Iw0`SgB4t@r0aQ@2;IGQP;Ogl|5f;uCeIa_E0XzI&Y_mF8`l#aLlQlH<{x{d{7A| zSLr?JrM*&*=kF?hqFeLnoX2s^J)bsxJaF)-t!w&Jex36XGxYcmS1k9EwdwoQxsBu9 z6Sei14n7U24@>`j_H3N)uRh08cIABY!~3W9ubIm@W7?s$ZQj*Cc$I7WwmCkV!tpFH ze$`d|J^NZ`D()-vSn_sGc3aN7q!tA)<3-kPo0m(MoUJGlTE0nQ%B=VM*zNl#99+%* zW5JV!IcZ)SZ=8Mc(J)_bPk0~Cl-t#k`)4Y8|C3YBNa)X#HrwUU^G406kn7>z|7{D- z9bf!^y<U*)r2CczXU_JYS-3xa!#B?KsY@S(cfC3qyK|aE(5$K_O7G2{H?BLRvMuas zl3Vf))y=B=7cqWXk+#<P<+R`ZCX3xW*j73S-tA>+4m9tr=LlBKmJGP{N5s0i{&U0B zs+HFlxLAg=x^7;6xcb`1rIAMt-mjOvA$s_|!ePPf+M#As&YPR3yq<Q6Ys<6azt26a zeJS)ldxf5m(J@8uJrN(=7xY-CC0)4Ry7NIMx6|1J3{z!OvimBRT$Aj0BFn++@VU;g zeNOK4lFpMR&y&5KGb#mB|Ibmc++8$_=T4K!ChaS-7nlA!#~ETac~6pB_JUWZJ;P72 zc5VsD$THkw_c~K3bW^pA<i*bcURuIGA1#~sRaX0YTL0$U&EhLGB0JvMb4PtlQ1L9D z>UrKjqtIa6wHMcfU%ij&_4M7UmYaVwpsFWZ+^EXM!|3Xpo;gC(G*`27?H2!XS@?g< z#=lSf=1i>DaZ=d%vngFJcz*GsMDxgPw)yc-%9FBUmv$dpe9dWb#wWfPk*6o`=kszh z-npk=NGBv=otmtU)uHq?(h8?PcsQOdeoz;6C_eJfN8u+deF7%8HXn$88)I`n*!PX0 z6>IEq(ahPmQe-;yE-Wiut0n#7sLZFdRK4)EjdQy7c87<oDaiG?FsF9s!?yT~7N2}) z_S^bv`NVAu-!1R9{*=V#{dG3${<Sn6IH;f)tZ?uaLlcjM$olId^Tc<VbqI3uEf+O% zz7{L3B*E-nv|o6_f*_78AI6Q0F%}VX6jTh49rACJs?K0AJnBF3EZ4%s4T{S)Z7Sa~ zO=kbQE2rw*xi;i)c3r9aj`7aXkfonbG;hn8T*$HH$HuAQd*@GASh%-JWW!3S#O)8o z+Jgdvf1NPD*ZO;kN<D}A2WG=Rrg@2eOLHbO)NEg=cjnrSC4Xvu^Axid+)&vl@OS4o zJ@bzdzIBa@zOwqLe0dSD@))l&n{)b~7e<Trm8_X9-gUsGZ`bYj*HoTJbF;+@2uB^f zw&eA;q@Mp4MNcA5eKz-7#@H~MXLBTX&twVX-dQ)Jno4$eq$J6$cK^PtdD>qeJxi-y z5;f<iF<-Y`vua|ZLVWk4#^$9<-#t6_YDT(y_58(?uRnVhU$OpN;ED~GC2pU&HnAuC zd(r)+()r)!ul87fk2y$p%6|Wz{*=>u`D@S3+w-BmH@;$TVyKamnfU&Obz3}UK05e{ zS8#XnEaSs#L-ck_{fl~G|Jd!fSAN!kX!{c`ACDQFh+%8~Z2a=X#N|OErthy59W$O0 zGwF%+x`~UH9bsv^61~38|8Cv-1;JZ(a(XUfoYUByE?PTTwL*hoha$)E3A1xr0!}W< zU~k}AJLS^s;6#_Y&~Fn9#Aa*N2(#+k`=R7!%x3lE98-+rDPva^2{BnWuOzEHrw5lF zi^(<5_c!G5o;E{Zx^m}AkG#*)>8~EH|M0lZ<LAYj3ZJ_V%{%$HK;&#|ZQ#xyy1T@; zr0#P#bNScxM9GPf4}Tw<HD`9){3TblH?;24npwJYYL`O1%<?Whrp5zu?yoNYnEL48 zWX?-BU0c6?`XhRE!m1DVIydP2k>#DAR5Yo=J?ZA&i6^ffHF7)k`R?zJLNEX3*CtdI z9p1lhNASw^-4a3qC;wVlUb^Vtk@UUUoAvwQ_T^F%4XI0-);@f6!@Nmm;={0sd^eU9 zpL^21;o9l#_beJ-@Gh6gn_<wg`E{fK^Tj5!REylJF)GugSZA{AU68I&ZuRc{KY!8N z@*PfdPlPm2t$MVp?2(jn(%KyRyz`Gr9<^+^^fNj->0fQK(k6$%2G_qHisnpSA=Ta4 zM$Zxs2lUSoJswb1xNt82wPe1f53c<8NjqqAViB*qc)4tlxI|F03YSWn#L;tG{Zl!n z$UGC0N>NpOUMByHS3d6hS^ou7YObv~X*N~FL2j9~ezeU}eIB_*{?j}BQU#2J4%VkT zxywd&=1xhFImRifKJ(#W>(?z$x@MPqyVeW6n?GTXj&5d9VAs^P*H6B@Kg$wiHuvwJ zDR!6cT3+E<ab4rT9G7<NOk1t=BgZSwuYYsFGRn5g^70XO^JjwM-=|qcHQJ=foqIiN zTG}GhG}BADPp#6LrPAfJa&N0Cn;Iouw|=(bO6V5lcP!>|+grT5Y~FR9%0FTHPS5n! zBGY%3dXL}Py_41ZZCZQhy3@5~xp(f@pLzei;=y}Ik(Gu^t0UDTGPNgl-VL_;q^xM^ z?x-27ywhXhMbrJ9?K?Pc*X%s;<KT|_MP|}P1zUwz{CwQGA}29g`Pz+74zEszEM8}_ zW7(Ha2YI+FSFGM+@j0RFmx`E++50_#zA_dLy@z*OsM%}A8yt>$pc{~MFR!`z#}<`W z>iSX2D;Q?+tljYb+lQH4T+{W}ChP7IlaWZ1fBdF4MWo3(P~wt^rCP`ti{)$YPdfg( zvn?<@!%BSLGhr7gkz@bY-H21aA9yY*;Ll}_uoq7L59^9G*mSrm0(rFO-EwEVaYc=% z-)F0{$o<CHC1!JCnh&e~G`_y`(~hT;H}B;wj!vpguz2dM)p_#s6OTzZb)Ma1RV@?c zY?=}4m2qap=IYe>&7Xp5RI^s5oRSMw`8eU{nVkRE)^Ox~{CcjS?(!S8lQGXuJXt7k zTc3Msa(m{_qNz(h?Ra!=C-;dvPygN#z4OQP-5=hwe{`?^nS15W-fMrFkN#O)ef>}H zk3Yq~{&@fVlYRTo?Gt}~zyDc3;b;HvN{u^A36)*@R<g&g)xA`&@ifA&ggu~f^|u14 z9>WILKWq=Ksjpn?dw~CShg?IWBafS5_I2aqHnnjbc5DfMm?zjIKmN2je&x#ez!k}C zD>$=5{|bfk@MX@n%&c1CmALF+&YAG=-q2`oKL@@CuVe#{OXf(<5_H=2b8Gh^NAIO# zr?x3PY-s+be(`Wma)R&%xt?tgmODnTD-_&+;^5vRntPA5uH1VhcjuAE8;?kDJkow$ zkcWW-`81_HY_3XjMT*_kG7JnKWw9;NF$OQvnI0NFrC)qqycA2}lIUG5tS<vjGPX^5 zm!`q_a@xFwyW6I`lXGHx`Hn4f$;5Ye_W%DU@;l)^d$z2d`uV-<vQM69WM%dF6L>vf zUE}|SD^_HrrapcAm|5kpd_cr|7nAp@JnxqFzCWn;-DuhOO=;ghU64+Fv3Jqc=1E`I zPWwA`;pMq~kLNa?p1bh%(%$cTS3d7u`u%PAfA{SF#nT@I@9)U&-(a17V=nifW7?nY z8Na%yZf0a8)aW20Dth(WwQbwB>4jfCt1R8`^q7Bf@b}4^_5LR79SYW8Z2XQ%_`TDl z_fEm@9(K$=@#Xl6HQiVKoc^+C^_ok&f83e9<<Rjjm-bhxzE+)@ZhuOTYt_5r)qdVt z^4$~4pZ1oEo?U)o+UZ@>mhakjdfU9^*Y@4M|M%_Nx3#skj~_n{4i4t#=GNBMo?XlA ze)n&?^Wt{n;_Gvnr!y}umu3Eb_ppC$^7F-$#UC4AH|AFN)(-bx?f<yA{4%%s=hOb& ztG}O?e*OBjw6yf?+qbK$tJ~Y#-QC^&U*G;7UF~1puCA`WeEIU{&!119KK=Uj>;CG` zw{PG6{rmUx=g%Mb|NMXMi@b~f-#`0t|Hpjcq#NfC$eB&eDfM#~FjL%JSO2wNPojfy zl4A7a+ro~=k~d$8pL|{1SzFRiHGH=HgafO>R@nzc8%#NrYBobLJltZE-itl^O#;GA z+PXeY^$45f8mP){$|d@k_47Ryt!ehZvnv(_<p{Es>~Xfxv|7<2BYc%<#{`k(hdGY- z*~BM%b8YYrWPQ1HyMN%zRPC=mW$%2&lK+^bcHixgdfg<v&r~L_>6}4=%j$xnxhL5F zFY)QAjqTACY&bh<z02gTXE|Rlt#q9h`qX`igm&xxz3nXrszg?)rB!V13gcj0zt(U6 zvX+kKYs<Q;=FWEf`tw``1KYkd-{P}R57x|m`zqu0`qz)QuIqTd(IDmY+n?`3W?qbl ze*O3B$!7uEKE2;|{P*n7%~v<x-~T_`RPFVw^J*KfMlqNbe~eO)`~NOVfa8w+(r-en z0+Sssrn53?#BXHunkC-D&@hYZN!P^JQ8N#Cd|3W+<^6K8*)5xQZ_I1k`(BjAb?@9K zX1vLb8~*i9Rgyf>$!0wLPjC2x`@d%|U`o4Pv{WG=z3WO_RbFeB)!UhBuW!FTvMfl# zEPtuwC2z;zoW<<hf_V;$>j;SDTDWq2fBWo^Np|quxi0lS-|o&y5SslcqU6}6k2$<` zU9yGC{mXrBmNh2cmb~xWT2_~`<L!IVr!AY_i*Gh?yj5)I-SslKbp1CUrAsBEUb&xA zve|P_dA5q{YJXn;jepfG!~1e!+vi124>`g)y(oppQOuiL`<tN5%$I+@%aj`17ruG* zJiO)K)e5$MD^K`w_}<TsTcBBeTVSTn|C%4KmwbO)c>3s?w}r3ImfbA8?YyFD=9OZL zz*3hxQ{Q^BU)%PrOug#nJ`owyuHOq@w=Q8?BVF$?O?!??6i?gP=jz(RexIe|g!!(D zJ$>~g!^TGX(W~r*eb4o_CTgvJ`zKOLGv#rxxUSIUH!+<uG8<&YMK7e!{Bk(t$=Rrw zFDqw=`SPz`9r%1@!OK;rZteb&n>y>IQPlr+OUrI#`Mq~Jcdhzd?nOcI^(i6G%#RfP zZ2fcm*T%m$i<Yf&K3uS`OXza#^QjVlp6*)K9LV*|<m|EPdzRmri}r;s{(f36IWViO z_jKyXemU=-d~D^_N6%?a|D2{2*}Ge6wanM*q70LJ?Ww`KFU|j-TK`u{{gCS)7qvZs zD_hlf&;Kf2);`B_cHi%x)8BtLy)^ypY%iVFa_gtv>6c%BJ>mWQyno9qYO<7nP4Mqu z%+OKV$I*9A+}*H@>)Ejf-)i^S{prcLrSts0d6(?eO!uW0ACHHfa8#X}9xUu`K7&tX zWenF!<A{off355b@5q0SjhnOQa`v$)$5d6+<t)@HCME4{YF@+R|HEPWl^9$0^FiCV zoo95P(^E=jd3DR7u$)Qw@M+eADZ5{4`aRslwUb5j@7*(pmM3aW-09-F$@a~z<qvNi z-l@|2*Y^D$Kjof}pHBQrskT?}Q(i0bN#ohC>Yw#?#qA3-*t=Al8{9=$RW%;;@7*m{ zbG=IHasPDxZq@7hj)h{};XkA&_%Lw4FiWhCWinLhJicVZtF)!o6H^Z@l;;RZcbfhu z$xm{*RL?E{(=!cvR*RmV9Jcaab2sCHhL8+RH6`w!-YyS&%9xpVfBoqB_qEvj<XumE z51kLHWK#+7$>h}R__Ohb3U_7q6Stg_^MaobpGj~Ns*mX9d|)1{aYMD!OV~F(N}Nyj zp{e`T4>l&McTy@^KPq0>Jo&gzX;w`Fr<qh|$Yi@^T0)1LRwRfVVJrIZ>Tu;+t+zX` zHt&43^8cwM{|6aGPp)+aJUrK0;IcvZY29?4V+XfZ=8Kh2JpV*wVWk^$cF_K{7yPZS zhy0j+=gF>)c!dn}KgUmITWr2Q@#SUJ*`JE}_bi=iedt$v)Jd-&-P3Y+cRT5y3fd?T z+a%w1yyTUXo6#G^rHapLQrEBb-SX?3<5hu_Ob@x+j<wAPR(zSb*HO;%`iIb1728ck zMoNySmTXK;%0Jdts}&rs5V<EdZ$*?<V`=x#BC+{@Pwfrbab}KdU1GrZRo`SLt#y5; zc0=<VquAYmjZaiAs&f90>QB4mdckhN<lKw;wTemKyKe6;PyDoMVdjx@SL9}|=YAtL zY3I(>7Ogs!y*n~O9xk~w>7M9%)tT8(#I_!4oErLOwVByw57o2YFZI^Gi~k!HEVF+3 z+w1C0Jg=%`p6of{qF2uD!|rzLT-KijITc?Qe!4!hjk&M0z1yWkI`cKp{ldc*^Dl0n z@cP?T-E*1iE*1W~_S&H`UzoFb*}2%e$K*8@_Wj$T`}#))lPJq(bzhn5!Z-EvZcVe3 z@!TVKPvK|j<-?+}i!-|HvO={(|28gB__c23`R8319{r4oKJjjS<c0g4JkzC5+wEU( zpWwqi(`nkpt(~UZ7unxj#kG2mZ&UqWL#<U8Hq0&9R+!WJ&*znD*~T-Aj9Nqs_g`1e zuijm{;8gIDkM5rAe7U9TGBxiiTFSrwaCH6ogF$zuF4!a8u6_0Sq`o&zuJ6>67Qg-+ zDe_&Rs(kXw#a~;Q&d;<Dw0Xa*=)=ULMqR&Gy)3_c)ayjh(TTQa<9Bg{JXTmRT}<Fz zyb13-PwPFN%c^~t8tPyEI;pfH-nH)j+3(t>SC;k2IJv$PKekx<Rri}mT-SOsS^r8d z-8YRT|5Dj<p@l8MU8}Ts-uW%-xLTlWZrH)nS#%+$>}bHWH+@nO*FSz)bCgYdZh-h{ z>q(FIvk4txZr-gvIYVM&W71D8hILGzxv!Xb779#vZm8rtpyl27yztP{qN#oVbNDTO z`CGLt6n(Izn5FdnR_hw|xlCy#EKx}>6KA+sYWQu6mU?w;V`|VAYl(NPXBoF<q+Xt^ zsdw~|jKqq@73SF|BTVP<1m-f<IBl_KaH=<Xbwc=)Opswu)wb-fWxKoIXzq#)&i?Pl zy+4mpoatHkrhhCIvElarZR9F@{zmPrliQoOyWZxTzLM${G0u`>HC+V(@7j}39Wz>B zTFoe@^Y_)W6=yQCC1u;*s9m48ed?U;kt$0U?Vh8zn0do;;Wb8LPFJ_Dh~0lzC40uH zqeeT<d{tGBpY-j=tzGUf*G*uHf9h4w;#z2z6JU2gWx}4&pF;ba&w5t9UUZ1{`J3d} z^`58S{wo!by0YS}?2KhmGykQ0<8f=+b7gI%>VE6Qz^pwNYKzl9C#EVpho?MupS4@p z#M?YKpu2wIzn}6eCzi}r>|!tJi8$*S{6{+CNy<5Ui~Gl`j-_*{c{+(V_#d--sdt3S zOl6OuBG<+E2gbGq{5xKlNX{0yHCf<Gaadxy>Ajc22}=Z6@+Y!=%=+!4mbr1mEBg<f z$zuDwc};58%YM02`Rw!Y(E6CeEgX4Aj=cZgr5W*3EuxiY&KJkr8ZTkNC0hehGUOM@ zs;+&ew^p@7R?1-UJN38W+LA#N7sy&Z{@rPLrR(QzTdgxoJda3c3R-4+WGt0Bmm+YP zIeDXzsvgg(p6LP?o-wWK`Mt!Kx!ae2dsEa;pPM#5P0t^yth9S_@`~q;n1Xi;^gky? znkQPOJlxsz@J_<~-wI5d3ytUO_z*SoLr+EjW!dvZJPf+W*RSzcI2^n3oiod&Q=gYV zh*mR}<FH6do2-6oQl7l+rcLvEuYB!3Fw;-$QrQ-Zk{E#_310R`f9;$VQSC8pae-Y{ zuTE96xJ~>5K`!+<zMP9+aR?`5DfsOExOm#t8||+rMsLh9WSu0!X1RcsM~uZjsa-Rw z(C!S2z&Ey&@7eB%ODu>!J|~JTnditl8}W#Z=cM;#Jlc0SEt}7D<Lj*)cUm+jc`n%a zb1zqSY38M*BZjKadY`IX-g%`%$)LYdpl90ao;d5?qWqqNsbSTxw){}~InhV!AcJzl zZ?j|bbpow){5C|#JecxXW}R@@8)ajD?;~N=E>f%Jve)huS;WJ)B=KsF^QM@uDu(f@ zXFtC<FUn#QEm7v7UUc`^g3qhXJllh!j$d6>SGimE(ptgx>+%M-MPJmcd-Ynz*=L5! ztTkU#6nBL(lpgc!b^RQjC$jLE$Ew#{(*m0>Zc<%x?^4&9A3ZzOAMvQn5ZQBXgI`7H ze1|t8--7raviXPb1n=F`xL>jR_(9J)`DfmjviD4tYK}fUO|C)qd_yj0lt(^C^ItiG zZM>#SCzv|uDF|&Zx%Y0>nG5QzEwz=qr(cv4TYqfAN=24>&Tq9^+ZG%@Q`I{0*c(Z1 z!5-!9euejqy`oQ8?K*3vc-~I<)INpn6PB_E6uoIrT`-+HfAws;{MZ^Po9}N9v)wqC zdwR>1jAeF)jPo?2?}?<vF{}+Y*6wJy`}*SKsnwr^SFNiQ6=VLt<dT%tVX4K}8@X4A zo>FOj8O+RFs8Cm+8vLYI;9U2i9!&|4^}gQwlUzh5D%Ne3<l;#?604}B^XG((>AuAD z+BfI7915Jvf3lv}@7%SMGq^fcpP#=K(rWx*N%yit?(1DTrGmDn1{oJJZLUr#e_)u< z<+N>!&-L3oJRFl{T@Lbvedu!)dvCWkB5GoP@0Ngqq>oM$zg7xbMb|9|H<SsK`M24k zXrslibr#bWsl@G2ndrJ*<>qP?(ZHr3k&`w?OezhZ<QzClJ7(7U=%^Q=Q9T;Ee<P#z zMMS+U36Js(4AYJYTOWPxgVU<E`(ih{Prf|r{KRMb(G$Hbmkf`cQmEc(_>#el?XJA* zJ)dJwmCZ_$1%4@ZR4x`bU6tI@lx#V@ETsM2^NS&p@3~XiOb$%{_*y6GiW!UH_K3=o z@Jgq^Qni@Uh0&!?Lra@i?5h43`E^6YSC>TnZ@kQJrH?%l<=C+0xTE5uZ8d)*Stkf> zKF(lizd11E`r;SwLON@e&HuXf`F48FYD!XKTXd26guhIg^Xh{NL5X@rJYG794KLQ( zXgcqb*(>L8kaZKA!umfKFJ8~y`R~N-c~_DeE?9o)P&~#URjxaE?VoB}aU)xYaMlST zhbOU2kXpVq$MVG+Erw2;Yt>#;p5Bw<6q^vsE5)*4-4f+Ew&cu2QwN!ou9rPMkH5VV z;_yC{!8U5bH5RQUQlSn9;=C7JbmaeW!u6ljfeTlaQ%`3Ha64RH&MFybW->!q@VB*1 zoAA{c0-P@d^XC_>JZ3rF_|#3Sy2<s=$|fIGI#t;{b>a71b|0>lWk%-<&x$FYU!-#S zW7)>J%_dd<k9;Winy7BRLd~e7b;7xuU%Lb*?^?WQ)|FW|gEae-%{m)?NE^1lI~l6u z_)+hEM5g1OBp1Dny2d+r-@2@wp^>{qC+}3g<NJ_?^1e@J_IFHLx?$f_hEMA~-S>1p zJzCFy>i?5($4XW!R`CXy&Td{2!f-ijQg^(|o9t&h)Ll~4r_7#mg@4<E;=T7dokhI% zhHm>5@y+tZ>;xSzz6pmptx{xa=SzBf_MBR|tJ#l{d(|b*weQx%98bBtye#ZsjNX># zSJ*RGFckk$aNp?Xdh6Tu4SF7a*S(zC^DQmI9MrAdz1tVneBaD#x|A!y!#l#Z_m<iv z<MyVd2OKlzHTzjzNnUrK`|HcCr(SH$d|CT%*Ol!57hZc@eXerrdDHQYu1nsmI=|zo z&_#pSt=szkS?+V5IDekp5{{>zmdH)v6ks*{|NUgsK0VGVcbQ8+r=R{{9%2*oMfJy* za{X^g6V^y%ojP7=X_7wwN$8Gh#ZxnN?wDlA_nptx)_bWRJLS|@_E;Hq&5)^2li6c; zwE1-?-4E2fX_JzC>}j2g%id`z8GANPDLdV(D*J2e<C8xbiwzd@uXZkc?zFMG?uBDk zz^wUlvmVF(`fxJ*?zbYV<9{dcwb#CItTkCzbK>$G#p%wHotC>kma=FkD4e^b9M|~o zVZjYo)~SDV)H}V@K5el7wqf!##v7Wl3l>f93_cLlv6TC={BoAS{>84nZ=*zmb^I^b z_+8MO?iD2*uvaH6ShptZ-Tyj`+?QQntnX|+(9-^D!AEJwt6OH+ZwfxVVDE)>Z{HV3 zSlu~&sG>k$vun+PMhmC2OgAT{6u2Jas@zqUX;<}X%bUC^bw8^~Hs`{#qvCI!n6DI( zsS>x@GT0;U*p=&3taVl^>PAeodf-+dw10<#tNBsJNluC>Pil>`4~qT1ANn#^&t>P? zJ9~WVo=Yyyo^aO1mUFcxSNy#GIu_@jNtg1UOYZv-Ri&!wV3cUyIC;AyZ}Hw=rwhvO z{#oB7DP6noyOD9CXy};_HEcbRzg8b<+;Hf_)1&WeZe8Li)p&Mg>9r}mPPQATUYn4# z@^(UJzlZEHj|=}T6kT#PCq-~7im94={LSMR^Vl`_m)BO0wURz5qOTtYHXNOnvnlQR z?i*Hf&6)Zy%=`L2HXv?ZLDV^sd(kRM+|k>;Z*7U*buwmec5G>GjL44Yza}%v6@Etv zr1!F=<~_Kd#gVo!+IY|A58e(poQ^F^TzAmwgxyun#9akDx8?J4?}^<0<&xTiub($X z*yr=qT4o8HOZzJOXQQ!(Nmbq7xe0+b=SAXFeV(l6syO{w>C~h3>26ui4*l?cES&Q( zx%_RJtG(?9oA`=N&%Kq6_Va#PY@sx3|E&27T<WAZY~YnTtQ)oejPc7#v-4-oWRoX* zafX<s|95&NZgSN9@9I7iYrpwrF+AmW{*=wL-Bh;cR$0wGPx*VgDyd$62g2h&`0(6% z^U3)ohyA}57vv7CmT)b+)4O_0znu~PFRKg6-B0znc<$;xw120j_2oYAmy~psOIP?N zvb?+Q|Lo5^)5rHDoYLN$7J0XLq0Etu1|o89$9~L|*Y7oPlQ*$@GsmIrZdFOcnH64} z4=bi$O!Hl4a^pkCi*>Jqp8PnxV7le^pATPbd3ex%&#Azj+b?`9%>1`ebWh>=Y4zLp z2y6Vaclq(saB<0h+uq|_-&D;`e%7ZI-^1l%-|MTTTe|KIL%v^t{rm;m?cBQ*-DYxp z%;4C)!nbu_%gsm1TV}4AI`vUX*>jfehayiF9#su!eeu=ol3-_p<J7F?olf^7x0Ziw zx4LM`HFM+VY296J?-z4F{m}jD;sW32Gr#_Kx~BWJa+ANrtj`8PU&C2;wAjrRO;_8u zIoXnbUJYON4{p~p6GBrZ{>5Be;jw+gJiezkrlB^;wsxyG#x-s}He2rbYel`sRg<@M z{fpVCvp!>vwDsrCWv>2n>&>nFe)Q~N@~$tJ;cnE>jeGm&Vb8D4-c`-sW=H==WPM+v zzpPs5@15Bj%}*~|_|l^KkCAnRQf_A4i_)2Qbo273HBS<)Td{5Ov9?u{3KuQ63Vu5G z8prad^RiCtpZVf$s`>q|@6A81s=Hj0vMOhOOQu(XpV;lr52hz)^0qQ{f4j!IRmiM1 z^6=;5_TgfkvZ0#FvlkxDmorQc4psb9n7LuXOp$j}i|?JkUB$!S@%Tvpd$URZmllLe z?G%}Rj#F2vM#tuZ$(mZ>Z+jBIpNacmb6l9I<Mah4hFfxi`hQY<l^EWueh%NHUoxrj z$9i5%8^7zSP8^bdE}RVgf9jaAW}4^Hm3fYnEO~D=oxHkDbW-M;@LiX$lug-W_sec! z@QU}Vo_M)m{PX<%ysU*u&z1{t_11n3>g75t*K({eZK>mGdA6m`7M86&+Mze;53{<; z+!-r{n3sQSuWPosA8e<0-q51+*)9{84{tn{8$WqkIw_$vj{nTOTbjup4X^X%fA-}) zo%A5n-C1T@l;X_iKaX)V-I;we{JB%s4aaWQtnybmx5byLt)Hn_lxQ8-{PoX7ulvrj zTiqufXf>LfzJB5Vv(MJBXKwzy%K6Yw<@UUXdxKMUu5CVjdHU_gd%NC9NNnBR{ammx ze(p7mr(2Icny++QyYjyA@#V+o-3k4DOxiF;@7~^*#WoW)h59r;-dE@o{wP|#^;KW% z8pS>9F77WqrK^A8)bS(oE%I)5!dm){cJ9Fsk9Ew^TRHW)?kcq-o|A7r`@VhBnY|TP z%R}TsbZaMQ#ouf{`S_DBNBR03r?yJ}ClQk(<^GCF=q~yf(6r)X{@Opk@4v9&x^up^ zr<BVkImo7~rubQD7t`v4HeOEFKTExoj^DL8CBOc^_rE_q=T<BA9SvEp^wVqB_imGw zu7Aa6nk(*ERiwlEb=9Z$)fHDoShu~pI>kPCy4ivSMTS#kwlDmcnNhOSWdZX_IcEzE zh8OKs4VG;Z2b%gksx;^DY+1~G{=53e7q_$a{ME7H;aZ@&;Qf^u+`grymp82aq|5rI zfc0<@N78xyY+dFhYcDkFgol?r<T*GcV@g5zb<5d|N3~yGOgWcQ^L(F-u}#9RQoT#d z+g6^m*nV%(8HXF*&Vda=ht(|4+*skT_+oYNRb8PDUZ=X8CwJ$W_f6iYpL=2B=c{q0 zvz4aB8c&Ts%Aj*X)qV%F8~3s8&z3otX|id^1<srH(ICy`qhXSF!s)A%Zq%EG%%72R zZ<27&mV#poUu+O-J2QFh%gB8ue9h*zrcqaW8(rT_IA44rzN~lkLZxqKty}lMsh9oU zWw9kr{dK9*i6u#?w-#UQpJkO3de_Z5KU2VHV$dS3M{g`HKaRc5GV!q=^9e<!=T}31 ze(z0Q&vNhiSIgZdo)dN$7tG~-J7cR)Uc%`r3)$)X@>}0JecExL<hb)w-LFa4Q@$L| z3+1}h-su*9=doO$h<)yb)cw0&PVYNoa%^MVsU3I1cP)RJ!eyoQF;iTu<Lja6>#Hm* zr49z|lllMfUG({Y^eI=Wg4Mq292R*j$9j5~SnMi|O$+T7+ljr&US@N&y#8ua|D?G8 zKW9iknZIh8)XS84=FUBT|DJs~W&ex?ERLTl47#VB>=ryWP1(Wn$zSHRjL|R7sc(vO z|7^u36VtP7-S5`I8!^xMlTWapynMXS!ld!t($3u?#{XSrY)aXn8Q8eMWcM?d9bwxw zIX8L!ntR)&MR1p7WWT}>=T9z6mQIm8>LWa3f1=VU#Tz|Y-T`hEWlFd9-tKv}$@AIe zt1f5COA?EtcoZW!C!LI#F~!ohaI?;gdLuox8*?Uldhji>l$?Jl_uQH5I?JD!&79Di zcTh{0CD3=CkItk`3D<vI;JKJH!)F!Owg(#oCS9L9*C+4Iwu<Msbn+`qXMU2FJteBN zB*DvQ>MeEFzZ0&kVR$;<>$j;G&r@B2pe+~YIGrhV{yFh%*SEajm#be)YqEW!Bk7d? z_5aif-@IxM`1EF7zf-dCcwk0-_~f*lU?2YDX2;fC^ygYWmA#YkQ0rE<OLr@dIeM0^ zFl+RAkz}bK$294R*@}a6pMPtg<Ql7=mEGXP7x=UCv;|ZDtoQE0JJ)f#-aRIEO0eeX zmymU;LWiZauAKh#vuN&QTdxUj%hxpbShJaNvIu{$_3r#uFk|VQ!r8T_el6N?KP7&p zL&V~c;$<T7tB<=0{|sJyDR<c#K7MI|pZ16Y1rD;gD!FcdXw0s_z_37(fkBvofuSI= zq$DS`q*y;QH{HO<1Ugq4F3lsI+RVDT<<W&leudv3ge}=&eQ@cHZ9AL`%hh+V=N7a- z3fNLnaGmLM-Dmx@wKv6|@3epYrrSL%u5JE#6NXCRmwX@Wr%ai$X3d&4YuEn$^M_%j z;Qt8{a;;nB4zl?N9rM4W=Ko2|pKF?b*Mw@(6ZWaIqm`#iN8fiBK3}bUU!D8Dy7&I{ z*$vv;Cv?BR=pSe3Z&%1~|7iZ-N6AS^K|w)A#>U=WUZ+l-diDCXw3O7X+qZY`+I1~U zditzr|HDH4k1z2D7q4G@DgV)?`N_rWCw=}_+@-(i^t?-_=Wkw6ubp-7Rbt1t`01=u z%df8WSLHpQdiMKQS^eI-$M^q=-_`b@pdvp0{)Gz{Uc7km{{H^u%a^C8r;Ce=PoF;h z`n7A<u3!IN_3M25G5O<Z^VFW53%?#;r*C&o_rCtxy*l}K*8cz7zjp1~w{PF>-MhEB znVE&Du%e=(rlzK-sHm!{YWME{pUU5VeDQ>}u%@oAuCTDMva+(Yw6wUmxV-#(QQg-M zA3l8f^5xert{?yZ?B{vP{ObSS`TxcL7c=#I<eG8(her7H`@%hqr&A1K!Y_#PEebm^ zZMD8khuWh}v9jy*rG9xTN`4L8x3EH`(@{3d;8K9mv}1X8vvluASWP_ozG{cnrHExs zOly8i9AwmD7x&!%cLgWwwEg`5ex%9h70NZYES&Cnh<^sR!?Un6pB)n(_8!`KkB{5$ z|4jYp%+h;uX9M>v4&&ZpxKM(_$%<p?L}$gXp8}6EEqYzNWPZ1^mXhJtsSY#FJfETX zchS??SMSRmh*)#NOyu>dwZ0uUi@tg-?)>&_@lmVKhJib$O`9w_<MqW~F7B^yve`(? zj@c<(w$XOZksO<wH_NvE-|b=ees28fvloLF-#wNRe*EsuwD>PJyK1;q85(Rv_5NSZ zc%&$hS@h<wn&h94f~k+6AG@+X{(r9Ai4BqsUI}|8I~>F3y{~h!nf|`}mdrfqrU};! zr&j29CH|T#!lcciddYeL&)<yKsak%rPhCaNDOlu)d4(VLmvp>*HbKtUuPt5f<QCT3 zT<Lpk7IY=d*9`BSu6A03Yx<JU|D=__S;WY!*6Q$_d8GJ7s$BX7p~RU>oGxvfnKv<O z^K?g>4O8ToMR(jdT_l%s=X_c8hMVU<-dcU*{MX&CZ=MUbFdcZoVE?@3{f{YuA6t)m zw6nXe-zU#dU?ZZc((wNyM-_wLu@?f5zt`BRCG(`n$Sd!+mY)B0)A48aZgmR-P95Iy zgZ1{}tQ&G)R<vDm>tCg@y!_<1->Q6@Gym!*h$$WQ`T3yu;Rc1kQd_>Mb%ATmf<sCl z``%WLJY6JGA8H%JHhXL7H^EmN&RcpMUo98X?v4^GO5|HRJyBb|*ZKXiQ@7vEoL46O zqDp&pLfPK3bFrr<R8Na~_VRd3-GprhFBuM=vdu7<#pgBK;af=F!j$F5eXXykN?clS zMCNZnpu_c;r;~gZ`Cb0O++Y+G{@rHfdC9%{QBP+n?UCPmwfy6`4eLaGV=um)F7eZ_ z{LPw8`<*|VMe^icUac12^IPP{?!%><sy?{COL0|9JRYaFOK+QqrJm|KxucTx?_O@S zjh`mDBwpv)>Q%w9$BJ*n|J`wn_hpg(wxq1oJwYY)hC7ye?{JA~dF^Z<|L<7UJi9l~ z+c(?Ei7dCYQ#y4zBAjPqp~nFUDb8fS7e5mNq|c~NpW6IxnWp?EAq}hB`-^L?zwZ?P z`(^7PqpqnIiBq>V{7>-?X<j#7VYbpiMxFzo=Ou;sKJGia(PX*!%!gZ^OmBaD?fZ1` z3kRcKTrQR8jd|E7^G)gdmWpp$UmdLe$W67?;Yj{${p)z*1?#$ydHtmkA<q;3l)rqC zaHYa<kKbgIp5501E5mLtJKP&SlR4+Y?KA%bp72j8k}6uim*s7#z_uAp=D+stJyL(} z@V6?idzEe_-{a=Ai-!lXv7hi%Opcr3S-+60BUxc-@~(~}seMOFpZX_H`5{&3wv}O8 z;kl!l?uYbLIS=gI_bRA!?*~?c4(2smTO%euytvKfQC<86JN_E0&2G0;cH8Yw+WBtz z^c`XW2Q{X(-cw~}NSMIlDb4okWQp$__jE;H*Pra1{{y+VRc#L3HF09c!_7<nn5*(^ z`owkalHr<}$E|O?%KfC$YOJ$MP<8&=C&$11i&=K)m~N!0vh>TKzO{7=)A|AxRW9#X zef6>QR)6=@sHAGCAjXf=?zkT5+Qt<=llx}1%~Z*ZZ4-{InVJ)|ZTY^y8lw}bT`x*H zA3Qp-#Qjd_xk{gzANKv3a(@2mJHI~~UECdhH;BPu4pR?f+rG=wrnb&HwkB`7r$FC7 zKH)uj3`eJVU)1(-SLI`TqhZ+R5b{!yamtJLH<>TQFdT?D$H;Z*0*90B<d;{b3%GT2 zFhm72$6ab-D?U-b*Ez&->H}Z5)JmPuFLq6A0<oOit6Qb`<m{@fWV{W<Rs}9I;J>=N z@zsyZmrbJ0cRA!~NlssR+E+)?OlE<cV8|J(?#0}?KAc{%zp_}~>2C3vKjq1jv@qV) z&J~d|_v<pvuSan^Xw)SqdVTkrX~=ms*Z6qU1o>GPUyAlU*nH>mnyIH^OrJ0Ke`le< z-3M<rY_Gk&kEgt+Sg?DO|8w<6TjLI|aL@F)KF>*~!S6U{i{IHz({hf7U6ap`ez-nA zd(L6e@a=J0E%yT+O*J{mcB9UF<Ld*dV((cOoYMZd&H4I@*yoyB^E%#HeY&?vb8{Ql z-1K{;azC^cbzjua)XAMVwS43J6FHY9b9Q`{KU?;T^IB%@9p#)YyjIO7k6(T_TKex5 zzvZUMtsm|MF1@zwRw!#n<(8?UAHJzQPH#DtH2aVC-q+qH1x`wv?pIuBIm*d0|M1d9 zud{YVJkh(dT8Cq^ulKy;Sr#(qpFh5Rt7h*_+l~9w-KyF@Jo3Bx@6(a8&T6#{KYpyb z;&EZp-Q>5+4?DcQ`)ftW)ss{Hwtwv0aNni!>@VrFY|R^s?tea6IZODZ-1^Hu8j@p@ zzx|tDdvM94Z?#@K%yK1T)SlH;8aaqC&w9Oko7$pFHYYDXx#m@*plq$bRY})f<*|<b z|9dW`hpxVr?w5Y_?Edxb2U#lYg1iEzKCoXTB*B>U+4aED3%(bV5`r>cNF2#B623O) z_pTUQ5v7S0Z-qOpJZ}jr#7keWxpe)Y6u--LM)r$WSSKFzx$x;)Ur+7nCaFVh@;8I~ zb;Q{J1t@)dx^2Ei!z8OPL8Y3v`@_oaM4MiZVT!hPd2v4KdCm1?tEkX*$#bVgDx1xV zkNTM7ah|C!Co8R~TkDAPYRipfNvk%NX`P%k=c!Fi_9dC+Ua#gpy~A~3<3x=EE_)v^ zG^{GAxsom=uhbHw<y9xmI6qu(!7;z+*RSuHN%kaHS)P3S@&3LW6C9fNIg~GHEC}`K zoVI@Z=^LRA$<vB%>Xj=WdV6r@>jK*)b9YC^Z9L#ru9?}o;Plzc_ZZ7fGv~~*xg`8^ z*VC&Gd!O#A70r$Rxvuu<hnZ!0OOpTQeOmYX<xialwa?XdovPLUbvm=f>-n|na}3|i z)go4}t7Ds?wCL-5k0U%L8PfvW&aGdwKmN)7_f``^E9ac7+Nl@*((1~*s+a_6hK?(W zDgl$zq@8zMd~v?o;OeWOh|upEE~j0WJmRm_@Nn9ApZD<867l_M;%d_uCmOA+<8*k+ z`Q!AI{!H!X^8NjX{2zX7l<l#07i=rs7iqO%Z>oiyK!=;)sTh4Ro--=*PrKe@javCl z@HfMx!n<)Zdp<Yns4=jG)_)WcNw6`h;x{s2I4bs!+5UlbQed{=UHR+U6Etimu!#LA z)ci2@jopMMjgBt+6FaZ(N<8-JaH}Y9vzPtCi>;Q2r|!JwBp4iVSo~RH=;kR8IAe0H z)+b#2onR2yab&}J&sAsLy*m4Ms2N?$JI!q|ZQc&~nBJ)p1wVeN=)7DiA$2t5i9*w( zb<fwWX<9l>NPtz+)7#8StUJ+rzDRLvk?}*Zj~AqigWC-9viPfu#h9ELr!X3SPrKIU z=v^Sua_eYP!9kS;H-&U0KNcjr<RzYrkt(!W@cPc7ubr2flq7E&onPpD;Pu9{&pWfV zj-=jvCigM*19$SO))K+(hm_`X?{kpoxm!EKeb<!jwbNHmkxx1)npPsZvi<czFY&G0 zkG`@KNOgV?XeV<vaiQ>Ig_Do{PcK&UoLX`qZJq4hdoo%tMRz}0D%mD<Zl28V^M{V; z-&|X-UgoZzcV7G515?{~0%GNRMADtS_t~wVS;D@P%g9BK!^&15;UeSO3teUl7*rlS z^EiF4JkIIF<@<Z`>lbY~`Rnq8{0GO3m;KdwIBDmDuKf=KZ25c~u9j{t-L|lFn^}fm z#bzHtr=t&iCL0Llq#ZfnAwToPuL&paJu9_j_@(r8#eS7#n(F?}lC$F89P~cBe!8E# z=h>Bd;#oE74y+qLTXPtzE!di2GWW)&2a;WT4{X1G>7wtktL0mlJ@qQRz2~}Qq4CpX zpU#K;?pnNy-<YOO_R(GF%ezZ_>ooK0&MjpRC9Q71$S|6frO>lm`OBVi(U&VP=bimx zV#AZ0`sLKK!wMx#3za8w8hn<B{oLZ}^Z9{??rz)M>PDUv{=MZ(#p2n6eT^^eJH0&j zeWqCT?;ZhF$I{sP`>*%Pi@f(YO;z&{`L>D2?ece#j*}Zt{z#lDS~YuO(@eoRdI8-h zjN<xM=AFyf);UA#q}ncD{~nKGi9);QC;99zaO<9xQaUH;Xf}7X$LWL1C5kq0XHs)c zczKs;nct^}_uG{BDPFpl@zklq*l1Sp-U8>}Iwj2&lm4Zo{M5S~$@i@0;F;SZ1}D#- zFcmrBec5#8`V*lO%+{&sY2>87O?+@Uuzyag>)#?y`FW2I2W#I*(~uDK5Wey0)ZLj| zEd)+@rRdbWpZD|U#tCzmbOdkch+f}ueR&4+{6AYIB$kNj1f4r671|=0^5L7d(Z=P| zOr;jst^AR-qhjUG9etByoE$&+3r-dY(bn=v%k*Ax<LI`18;*GMv0U6T@jj=hxX#V2 z!&|$wYE74N{Suh3b(BFnX-eTXN7l!etHkfKotm+8<uctVwe=-|Ha?rqKT#;0Xk0Y; zblJpaQAwAbCpdejsjpIe9boX_<ZI8@)9j~AOXK2l`WGS+7y2ZbQ;f@LJ-hZVZ&t_X z?G{s;{`kZ@t86{}a@K_va}GWdS+FyDf}Mn9ved4WR|^W}|6Z;by<_c^H8C|SMY<;H zn8}8D9(-r;ZMo0{jlT7ahVn^od6PG1f6)+Hlat02u(Ij)42MYy?S5;rqRR@k(gVze zBR$o=ERlWQ)LCaBY?TnVdu?F#{d0eA#N9Rv{{84MkHXsDnPS~p>Y7I)+yA))8HIm; zx025#ivQJ$+d3<L=S20ZPw5d1@wX9cx*Gjo^H%emEs3Hl4+gJ#*q_OKJiCB-%C31| zS1PXG&$!4}<Mqo^no}-4i((UFnYm-)MC;u<_!{0los?a>!*I6g-}Os1Upj7i;XARj zwB};(1<579v}cQErDX{p&fqxBUNvEw0E7JA$c+08r)Iy{uIz1dIj1%Equ13>TMw_D z8Fgfyo0;uZvCLpKC62Sdc70SkSe6ubY%1FmjjJ-HceO;{hRt57_36T<F4q%_-^*-f z+WqxIhjOmBjnWTKuM<zCxld$ypA0Hf$<aUKR2-Y*EtYk<KP=|P#~TmA*4PA<MLsb* z*n8UVdVJ%x>86?2cYe;9*1q||#_E$tzj2g)Ni6?%OEd4x*8gwI@9VrX@p%2mdvV03 zNx!w+rR6wv9$e3Vlyma6jhE;0TmjDaSDeb%*A@joe0_~GJSz9qwJTwBY*+F7i=6Gv z`>%bauKG!p*)y+>yFd7M8-9H${y<qKQlc*_nSuS+LBmZCBj$cEU;SbK<v4rJy_c^> ztj#;obVj0fhwDF)gBxBtYMj%Pe<#E<yXu=}_1sxi8hsB>%wZ65yP|P)Uc_{{+%(+> zf3_R-bG_=>XOgl0L)QEk`|Um)uj71Jr`cR5xxa4bo4VHP=l<!h{(I_>&;z*xTb4^L z+oAs}{>rtg5YEgXCZ##cf7g|(*!*viPu|3Qy_@;O*Z;MTPb?}hnO(EM*N&?|_@?KL z`3G1IELv6O(D5v@|4XQ73d^B-{!de<$r*f9o~Wr{5+s|mK`OxBt#JcC!`=@|%>pk? z2$-Z97{DK3b$FuCs)j#m42yh4)PxzX>vb6|jo-o8Imd!4u<O_lfw(z)rM_&gHxO!+ zJKnKGEmO{DUa)Au<C-Hoioe`8cVcaL?{brW^{T+zj|H#Hlh1hiqeNuEQR}as=NHb~ z(mBCFsXO$^i=5tn5|dU%hV(Glq!}=#-L<IV&w9<eX~nAv|4i(}?$m#pUA7>xU+R;| zs)HtW`m7p<L=JGy(mDLm`L(0-S;3bZoi>;K>y6{BdCjni&tdXSmx){s&9!V_TbQ4k z1wLUqmUpUQTIuB<UJ4vXee6_EG}T&7{<PgYfZ>89r<L91O9r}+ZO*>5KRw@A`-Z9Z z9y9G<HnTbZnW!rosi#_~Keku@?x}SqCPJsU@50y3yA_x%eto{a{pnOaGbwG>Q?V*R zb|%h3KE?;HNl)rodE(&a9ZLIWKVNNmEPuM#oBl5QFdZFnmipa-ntVZ}akGmp6$@9h zg|*ydkz2)~ANZ$(_tV$-t`m`6ucEqM28Fh$q`Q>5tUnOOG3~In_~XCE@1LGNYPj2T zUu&JN-y$Eb!tYrpYWDtbx%z1C%pjd0uk;y5{u*wsdeRWSWlNO*-M8<YMUEyeIbQ2{ zIPf@Ma>?f)lV^eKGo5(kE@$cKoLZ%E%4*R9yY}_#vbP@A&iONMszTS@^xY0j<!^)4 zu75e`6}<CyNqF?T+jIEkUUDk7PV9ZCe|lxv%gPcJ>7c1AQ}fMra)Z9y4w|a;IXdUl za+V?yW%CUA$@zjI+Pf-eL_B2t9@{r#_Kj20Z^TL`<;~t(JaY?IY+cX8Na2&yPbaRJ zTv@oKGTc)7V%##x2+eCtXFs12otgW3aqdQkrz<8jF0puY*0lC>>!;FhvqVm}PvLpJ z|DwUZ^v3z#M{eHA-Pvk3O<l+G@QjtGu1QLYoz7lpvrAjKYU`1eUH5i*E&ADf{!xy; z+Ir#44Zm}y-1+kJ#Qx=GCRVR4_bYF<$vKs1<5;aE@^0s~khtF)V}IAZUvO)u^}iJB zYejQEy0EXi8-1jYeapV9y<ORX`s^Q5I$Q!>HVG!#eYIAy6`y#s_e7j~L0A=YN4@6F zNmtkCE}5^efobNnE0J{)Qa>k8y1pT6<1gI>0k^pNCRR?6)8*f=cE)7?U1sU)&nK%{ z+-93{KHu~I@=c2KavY|=IkrZoX0K21!_Oan6}oQ^s9#t9?n%A1;g(9fNE4=~&-DTX z=L^~Gn6kftC!qD>$C>>{XS&7t9nbDtXnwqYN0rE}-+2?xiOKNaXFD35GEYr!%Yp5C z7cO<rJ$3Jdcz0X>C9A7SZQGuE{B-AQ^FF@JAZ6QO-7Obt`-&c2=jQt4t+ny=b)9SR zr7|mp?!7J-P6}Ce+jahm9FFzpJhgvLPyU_0`G@-Eq}xaGr&^Ur{#SA|{-R*%XDU$l z$z|DlHK`rH?cE+_%56WJrPH)$v(&WpOO6=rd*&EqRPs<XeB)W!*O6yF?fP@_@as1d zPE@~qVX;U=edi3FMSsrZdM|%(c*reU_o?~%h1*$Y*zgv`&UI5fIZ=?8iM^&!(^={J zcJtS5IidbG@il6mG1_JGjAV|~=iXTN|LoEGQ*BQFn^-9SbJFjX`tuddtM?stPRV-Q z_Dw(Q`_x7T-@3Q+4)ogwJ^fJr`cLc2?dGl8|8lgQuW8?XQZBoGwRh~VeZ7XR-hnQQ zwO4SL_tmam-{a6J_vUWG`&Tv+{F4t<^_|@xDCW)nxrtHmM9V|_#Elt+%Rh9joNXYw z@$T#2zc=X3x;|a%=KimCxp$PMHUDi0S^CMQU7NAHgh8l+Nv7r7G#{<Gdl_W9+|Ecl zeJNdS|HD@K%9SdsdV^ncFO<(poHO^JgVs@tSsq(sTSKP#pNM-YV-jz)!}4E=QQZRh zGtZ39);8Y^Q4`ikDZa73+Sh)n#+0L4i_Cr32OSdJZKr3?e(}uY?l9q#PtsyEmiMR5 zO_;TP=4xSnpU_Rp7LwV;H{<TNR@TgGm3+c`sU)NB+6pDvQ?=V#=dRjbY`5f|%jdbP zdD^wNeos%Iq2Rl3@2h<qpH)0HSeGz|W4G+Jj7^PU0%}_2|1!7buPxDFmdn0txyJKF z_uQ@*ALr$U)t(am>+<T|h7Li`1)nx>ZN9sHwVzQ@P1(-7FT(chUTc=H^Y*gBrEzD> zs_xA`A{2an^~|r|tr``7oS5%9@4Vl)*O!;wIKbL}rtrg`9op(Y9$I$`FRbo}-TL8X zX2IMeI=%OQZ_~cg|6V0d-};rydFD5dTmn0n7R<W#By6q=NALXy9eG=|H*FVc-_>XQ zb>-h;t+#vA_r0+G@cNHdom|ixhJ6<_=e;}T{JC31;ql_1nvU6eUpMoejt<(|WH@b^ z(4RZ6mtXUf+g-f!!j%21PSs}#9a^fhA^y#+(xMf2&o5Of+J1S3(zmWtYqk33H6PUa z7&q(pYLkVjm%}4J1>~7l{+gs_>bi|FuT*v4UA0otjRAf0*dKb8a)yd#%K7@{*7q)a zuK)RK?U#9V<~mCveLQEi&D(u8{noKfv8FjMPJf%4`u*m~vxkpmPSf2LcIJ}tr~g?y zLiQV|g~q?K+VXDOi|#Gojur9At<b#sNnp~x#~ZdEj=l2z4#!jDPkiSyO+VR6KQR8b z|8}nFzmHwV@`XD5*o`^s^bhAtd2uw(Y@6KvaklHF>4(lNy2<wQZ1T@<3D4}0HZX~C zZYs$Y^VBk8nx=Vcg4yXU+G3~9Hw0A_pKQ3e;K06#nd>9%teY*(8iZzM1aH%9;SgY` z+L_a^q<!P7y-WR6nv<Vg;Y(Y!V9ST5m3GR{!xyC7Dpd}ssJdy)eUF*p#Ek~0i$@o> zY3dfYpD|+iv*T6X`>7?HqI52wVNCPz=6ZYN!Rsd))h#7;!Z9%dw_e{Y4LR^&;)RX2 znU04}l<Oq~pFEfE_xNs+gpr?E!TjsnUKPa$D1JHQWVVngfu)u4bMwwu{AT`XC#wGn zHlFLYoF_f$%e8Hj`5tCZzLfrLksZg!1@BfK-lTX@oo~*%|591^jvvrC7@l#T|M9j} z6;{!IW=3y$!+oXyg!AjOTr&b&URPi9l(V_ef8F{u^SONH&jkmzG3@xL>A7Fyf_v*P z#}1~#NU1jGg<P65RauSnSoc}4OMQC9+;L)>K<C<78{TRu9V`09AQQgm&%q^)O<x~R zQvdKv)~wT3b(PX~mdN#+_J3devik0YrEFaxw>cuKnPpryitxS<@76!Lqr&pfrNU1Z zr=pIgvFJqo=ze$kVvB7n3$x4DH*cRBJ`1|Nck<JnHcKyW%qVl6u=e-CJfDg=>H95j z^7@2*nRfWb*8jY$k4)#XXD(Oz_s{twOF)7{(L$w%VTtM<>sR{!`et)*YwdDlyA@jw zF-_k6wO=rI#dQw$V`{r}bvP8J^Nak7o6}^t>2k#>gGVv`+98g<GyY9<bDX$DUiEO@ zbjw*v4N=ZA7u0zYMH>5GnW&`wXm{A*%`zotYnt)jO^%u=o_|)U@Clu?o~Dt*zu0j_ z_(yLs0msYiVGlQ0g{CdZyk_Udx%CXc<_U&E$7IHk%~xEmMCECBo|(AHVROONmN$O` z*Bm|+ApeF*EkC<+J@+c}RVRPB{k>)s;}d`Ki^+}?Q%aVwEZX%Z=%Z0*fnd?B3%{Ps z+9_0H-LgnEtoGNFn3cK9dpGT#W~K2w?6Av^V{TtLeHS+{*gHO({Y5b^=y%MWD4$j@ zPUZT>1!*0rEFrVqm+xFx`>*}k`66Z$>s~uY-M!OWv{s8~+%4H1w!tN7>sRC8lh+<I z9bd9+mV2k{LDn$W>-TDw?6;nGa&vzOzxo!vA5Ye6)^+;Tht&LCb$6rK&itPpXV&JQ zQnxvw?LF;8i*mj$=d9+fOXhZLE$<HQ`(3x~)#OWWrqvporY~%)bAO%G99A6hH>=HE z_};g7E%KGmt>(@CcBrU&)wJ*}^QMSvGO$W<I25TJJsWso#kb^A=I^eFi^RK@s|Pdu z;t{<t;YKr4GQ+p|N`C4&UwIFm<X{xucx1r@h7ZB4sSQd&(^U3M`Q3E1@uSjl&dHqD zw#^f~Bqz4>&GD-nIL{w@qu{h=Rg9auLak@{$_;B|bBh|^JC^0{id^KZd0hQM)A{P$ zr1Zldj+-~G50ZUxXNgqEd`F9mR%=UzpD*5X=;KjVzJlY*Tn@6W8QbD@4u~v1zqP~U z#Y4m1pqx*^o2G^?I@#0nCtAm7)5}Amlb6rxye3k7yz`@%L70Bl^l#<c^4EplR+4;Q zWa@qO{Hna~6?Heu7cRGYB2g9bF+aoaXW8SYm(1697rOfY%oUA#Tpl@HFeR$Rde^O* zRsXp62?ubW+&eF&YwNV<$%oD{@0#x2ePh+qzcaOkOZDeAC_ec%J^l3IJF9gf-<Y&6 zyV8^=-K`K?<`%yGE%!Gu^R;PRy7s0V&luUyKIJ^m;a#<GXZ$HGF4<2?UEyE)zRY3S ztS6STdr@F<a^feJnc3eaB>cTvGc)?ek=w!FP44f!zw+6oQ-9M6%uA0>6TY|Um+Y>y z`b!>|&6*+=IWag~@9$IQYroBW+|$F?_1AMBwo#l@%(8D^oX`4{8K&<(wc71F@YY{u zd%>J{p9|9V%SKJTHqU=epPoI-cBcQD{E5Nw3)h#1%s>0Fc73Gx&tr;<SA1Bu)-dFY z#?@Ev^|U9Qe_VNPrr1NSlxNSrm3zJ`6#V@3(4NK5Vj{Qio>z7*h0oDDb^63DKDTad z+_~oc{GWOK)2?k5US4qjYHZ;7Z%4NVFL*xT{V(70+3DZ!-nz+OvftOlaDCjNub&Gd z_v`+Nk87@ZEpC7KZ`qA1)l1F{eDN{rFAG+*T>AT<uCsER1lOu2ZOw%B%@?<(e3{9& z<n?^MACvjA8Ol~G2zyB{v1*P@V@}};IS~81`oPTng%?f<+$=RX+qBMj?M=Qy8P$ld zH)|8v-Z#Aec#r4(&HkgOj{9hoZMd-IUxj@dZ>&cC-`elotjW2TXZ(8={Iq|~;uD?i zp?7CZjNR7VE^^}Y*Sp7FYg@@QG_$)eYE&*h9Ju7c3aJmdIXn#){xb%^FCsY1=Bjk$ z`1>EPWf>R(<r%Q78!*)aT|_V~HF^r;;uiU7v0g_+Ukbep+O>Q4^`*OaPYiP0<s30# z+PimtoT3xnO^TS17x8G%`=6rE5AU=;^QUp<PPe!~zlQrd0$cjZc>jophK5E*-)?AN zU=S?qKUSj7vwyOIi>Ktm6rX@i%QP&Fr|hxxI>@v%qcdoelV<e&718%s-@N<EB3^R$ z{g*rMNmkyItd70)`~J+j9UDKoNB&y8hAB^$S^f>vd0S^cd)N5iE{kfC0_qC4&li?s z5=u%+x^($+cX#*eSFfzBt;1Knel9(`|Ij49N0+_{-kjd}Q9Lkndg09S_(|`b1j`dw z@^8HP{G{dXNY>>ukA~k&E%&T6zuy&*smd>z8vS#r^wQAdTXm~*@21~B9awqw`qZ;4 z4()1xbZmFmv&+Z&PXFqgee2utU+bFRH6A~=aNfLm3l}cz?Ce~*a%F34>(#4Q=iY1F z@2sruyno$qH$C@b@2cG8+K-(-uJ*ppZ&96p{CS-@I_vHH&fN9YzjJ22jozBr^?3`z z%*@Tq%*@Tp%gVle`^Lw|*Vos#Zd<v$d0D{i>hk}5^56OV{QUg<{m-92udlDae*JoR z|8x2I`GFc&E?*Y@@c&QzqqDj{>gT@Q|LMM;M}jTm^av3y)17+{My!wEY0uvGz1=x; zs*z~cXST(jJKj!j&;H#0Xywwy8X~W`-1Zq|PM7SvBKptg=?00jA#3!1%~gD`alcJa zybWKI&twJ5g{ne7H=WnGH$71)p7ru$hFO=?vob9BUb@IQI4gL#ST4`yKmIwq-=M_e z&G|<>r9vK@duC}kehFT5wqtHywIS=}1vl1bGH6{m!u5)?>RQ03?fbsH4`5nr6smH@ zWVTbHn!t|Vea4o2CzmBTFMrwW9JyKj%dI89(mA&ND&SaRt{3-F!D;!=Yx|FU3lP_w z<dg07XUc<hpG57~-Z^^s?9y}BJZiMp2yrRRRN;JZ@4?*~Zo`=RQ(-S(?XY$Cn>xFv zymZkz|0|O>UD>@`F2MZx|7*u~@BTkIk!RUg2ZM=ks|3WHPyP~*v3pWw5W<%!<iN1~ zE{Ezyy_+11Ke*+!1kXQtU@4=5BXhz5MsEfkg{+?$0%ign8%hiu7rziZ{A}Wj<*E-q zK5`WlE6kB7`}t9*!iKf5?l9NSjrmVzY@eKXE_0gZu4_wgb2z`>`!?jVf$d`rkA=Et z&2MiKdR@`JDgRo~w3KN)lgt*E?fy7#c9r$bKI^4DL3yD|cF&Z*weRgSt6VLkr>=Ky zDi)u48u5*5(!+1nt(iqEKAwJ?Z&XVLmQJ*usaKa<W?6PK)htytQ0K&)2?pLqyPAsf z=X^SqZ=L#omDRd$|3l^3@4mfS^XQZI$^RN{o1=xjzn$Ng=knrt-p?N^f>Q6UnPL?E zQeo=B+rK#N7j8F==4f9WmNL;^^cLgk64&CHhCg?&+9m&TsxR+qr*k`dpS@MhWq2lh z+mnCBjgL#jyEi^s!ax0ggR+l%?}LzsSFfBXwD082du!hHuky2nL+avbr_?4qTGPZC z+n+syt+wB+PcW0st7d!uG22tSRy$Z|Jt`=$(`)?sE$LCp?9BhO?`+jQU!csK>e#*c z_uYdFxU^3{4f!xL@9~xF{`hLm_quZ|yyIJs$4$9$##PKmb8~pynZ0MsH_h8p7Lgby z*|Iuj4VUCfm9?x1`*sKJu6q8VXl~nw%csxIcqTC4=2Y;NvsFc}Op0C=m9*q9U-oW8 z-n0$2r?V9gFYey{uC)Bx-KLAT4(kdT8_llYHKp+W>fM`Womzd!=Q&5|o#vBu^+pbF zit4S-XgMkS#!s2#Fk5Hl^lnduX}m0P28<Vqn|9XEu{Erlmi_Mf<y&*lOs-SShz;3n zIjJ;UCiRU_x_GgkKfn3ztN#6(Ur#k&virI6bN`;2TeqK<iT`kUe!yp`?YHv|cYmp7 z>MZlp)J{Dt&Zw!(;(WKFPW|AOK0|*Og=vn;>D7BuD=fcGII?N|CeK&*zvw1EsZaaA z+^|G@bLQ7ix|I>{Jb!F1Hr^_*hEZzMWe(P<Hh-=>T<^p9>Yw}5!`%txJ>fFT1I@o4 zW05eKu|CB@^zMn^wpA5Q{2Ut>=Z1bd`Ro!~&6fpgiO-7@_Hrmn{r>A<e!52M*RQw> z7bof}vlc$Jb6$Mps(k*R%+1L*YmO~_fBvv<;Y!W*qHa^ZoS$^5PSoH-f6t1ab8F8Y z)lHccE_2n(-ditFGv%VBWb5|1ORpRe*<_o$hiS%!0~Q%fo>M**UGU!P^8a&>Q(wW+ z_-854GY@OI#;jD{A97*My(aI_B`W*WI09JqE*6@w=!CQ)N7#d9h3h6x`L&R>i~r}W zM%9%p(er*RbrtS%H<IUYuaW$`b^23A_eTzeXE+O86y{vtu}wbpT<G5wTss&-WeiP9 zdN*vCdq=!AOUS!xmZ8xXg=?J_KgD_-Ha%qIS<7l0S-JG&k}us%YFC3)J=a<(II-rx zz1cUZ_x|_h{G7n1HTB1iNGxn=%(-@4?EZ?VoE=RitG!j~)%kwEd6KTRar&jl^}*j6 z4qy7Jf4YSGWBeb_r;~hc^3UzLBzbFB<@;4p^G-1Sn?BVqUzKBd3D?@|{$?NkGb(SJ z*O{@tAy9tu);ZFy)2C0~n3Qq)qwVxnUJ=>14GIpvdi(X;s##_K&5O;f%vaTay}IY% z2@lCd*AKS_e?LCw#IgADb@NWytx=g9IzK-0)`63!6<+72&XveMe}4Jj6}!yupA3nW zohFxc^_6p=pS$8er;Br^n$}0~@Vpd{dMf|FqEsfVN=$qGo7eH%&;DQc>0Q3S!Q&s- z1vJX2A548FoNRyM^QKM0_4bk;Z;pgcP4%p~9<%P!&*!^dKl{FMe$1^4NfE)VyLl$= zTjgYbRA+hlL@jC6sH03XVopCfdD@giX@$Ur&J2y2tN0#^E7s;*GC0<d@8j<JGWgbh zZ=UlicDu4?&R&v}SK1e6-y*nua>6f*O#%~-&uIDneUJC6=?7MObA;bqbTT2-<v3SJ z1%H;)Bu*uf$^TXqT6f5O*;K#8KfXFN=Ayuw*GwDKJ>zE@M{pim^|v}Hj_LBUYdw#) zPuU+kxBKLMkFNratK5=gVpsA_yj0=UcXfeYRKvtAwc@|pHk`lvFrjeQ2{*Us@)PPU z%N=SmB?KPLKk}(fR`{iE_wmrsh|Ql`swYY7{u7&XNPN$oKTmFG{hwkqxqNC6+mW1e zErOw@Yl`H9CBA$Yue@3&HG3JC`1xcB{}MhI(`!rr*=-PW)9rZw)+4gX+VR(%qYbM$ z8RfPG{L441oOWQ@G{vjR<=<BR6Y9CeA<ceFa_i5J>o!O!zh!8z+Ap$Os^s~G`}_Ot z7Y1Y>=$<C$vvsomlkcx1Ug_2zN%mj2qw553M$Ku4#kVr29Q><xvf?!VKmX;4|GwAn z<Yd-7ur6`?#+fU{9&p*Kw-`=caC*|hi$~c_4k#zStaDG;Q~KucjY_jub>WX(Zy$NB z>2xgft@+NqyQ@z43QY76cyf1-kmcMuCS_q&UYF7<aT!5}&ppmwr;-_6>Ju*!=HmY@ z<zS!B_lxffCWxkJZTer!VC6acgmjpP%Xx|EYzG=m4l8f`tMt=GU%*7))AuNgjrK&R z<$Vdsg>$*%mQCHk_O)Z*h5i~nL(v!7R*v=0<nmYdo^}lVy}swPG>4P_3*|HM#>}@@ zPnTfJYUTLMljuET;o7if16O8gh2V_+ao;K(JfCt_ZTM5=Vrb~IAo%k!{a=QvD`R4t ze(f}m@KIhouQu^Jx4GG(cly(ID5-N>o%`|R^W6WQW%dt+7AABp%lq}ZEd1}wyq7OO zru|v@`(xFgmx5c<ma#2PY&m6D8(_7i(XZX{`^BAG)^BlK?)T-#IVnxQx`y_H;d_5- zN3xa7P^cBq6gD@_6;SC7u6MY0WAe9@+c$i@^Sr~_Gf&Opvi%|3X((L3VarsRw;Rrc zdTlsSv*E^u_Rmu#|DT=^RKc-wi9u`1iP9a$i?_zgOiX^d)5+vcQ^|oj8b^+{9uH{I zzjE-DVTZ<*in#Bh6W^W;E!Z_Jfc?(1?V{@qb?uegn5<)NC@QIR`Ay39-k|GxLwuop zv%w#W{E6Sf-}RP8a7^nJx@7k!o5Smz8@E_tfVN~`!H<qDw!a?MynQ#poBzEV$GLBu zvwzJ{s>ylmabt<C6w9aDMP8R!j@(gt5~cJcI!?_wW=_3JCr@j_`xDm7Jf5BT>{jJw zmgU`*bfhKAbCbZq|A`TIF1dtMf95-TXy$`uhy1tA|Jl_Nz46d;)*tnTlAi=zEp8p- zQjAezOR|fVC=$BKuCTav!<)UOhs|fU?C5yx<@x9}Cr`7a#eS2Azm1Lt&vu`!aMLX} z)@{PC^34nLN(?i7e>JLpyj6QCFK*Y4nq_|z*D#w~{f+pLqqejB=Q)eDog&<wA=^8z zEb%mH^4#3AasQIVg(j)<YyBUEdUzG{e|ga##?Jg=UE7z^O-j!ldG5qlil+X2scW${ z@z(py3emGOUo*A-T3lK-X<y;VO-8c}gw?;jSJ^LpO>E)Pr&GNw=Pk7Ly%>D(S;7uq zLvfdgSCS6}INB7>q%6ywp`<JqG-ti%qTf$4-nhlQ&ppf1{eYn~^UPxZ6<-q$J+2l{ z;d~_0_~L7)U5bJ7!3&B#Cfxd_wTFC5Gj3iqmG&{6Wc+rcnQEG!^<-}UL_dLNo|al& zb$(K*f)51*H8bNU)tO1hGz%15a=!A?a`L@pi}qO@du_RB>#Kbkld9sCCZ>o>=F0`I z%m|2=h@7~nf8Y0coI3WNLS=mur!Jdu?M-)u!z`9lsz&?<$1Z7oS(;k<&trl5sc%xA z>qO5u)SbSUf7UMIgx#*Qc8OvF-a?`g3ob5Omb&2DF0mz{ew=gap5~lYUne<h@tFxh z^V>I;u`*wM){vD@9bfFfQPSd##noV@$eMk@+budxtq!I(U5>Ba`f!2pfxecDPxs~| zUw!z<Zj;Bvd&`(7cQ6J#fB7fItaim-ZJ%cLQ^#dIKG&)BUyX^(Fqt2?!oh97!@4tH zFW-OiWABOkRcW5hk%pP)UN^t=J@ZRWoU`-V%*Y7A)0H!Y^I2psZMflh^3t-Gl5cOU zbiStde&&ts-fy>U;O4&PZF~Qh+WPo6bLDbQ3Ef+jJ^7B-iBiE{*6E*S7X4bCee8km zmqwO}XJSOmq{45de>`TswL(QV`N+)+?`P}IjLge^GO>E%-1)r=*;jAc>uX$gh`svR z-ROUhwr%P<x@pz!O;VdaS=q1MK0RvAmrZ_qo>otGb6;R2rJt;|RK!&GmYF@D9f$Z# zrjmJ$-p8~%IK5+bnN|j@D2m!&WcGKjzU2CillY!HXkIZ-yt#dfys}uog4@zH8$wR$ z=RaIm;(DsiQ&6rg)}|%Ybf@^QHJZj}cW=_+tzW<9*T;2I3hNm;uQ%{!8T`rKV3bvG zE4yHN)`tMofKO3152Ki(o1>KeM@{O9+Vm}|tBg;ovb=5Ql#)C{zFNHr^It^T-L>Uq zm~2vKnSa(t_uM{}BD2tR<JjH5*#s0?3j|LUs&pD{*<CK0kj202w1`yy-H#{SudmiI zU9nKg<b?Fr7U@K`-h%&bcYBVh|NZ86c<C`_lO}Pg3*p~hmG%S}_g;6~DRtqH|Bk#y zBdLZ*zq~np_dELt%}!tNVP_ksZ$iwz%t<Hg`{k|Nd;S@pxW1i@r_j}Z_qV<+j`5E^ zZuI%EaMFQ>oP>;hj+1w*ndu$da)lwT*g=rZVHV>;2?vF1i(f6f$X3Xz{a^8uHDhvt zgD@|{suq8Rvt}Q^vh7s3)V%iD=@kFv*&FiN4sNoUb&Yd}q2OM>&2QgwMi}prOkrzt z(7b8du$g<qt(We3ya!l*uuRODspziF|4H5WYt|DMZSO?~uUqq|aEb@89C|JP$K;lr zvz3xXr-u+n=ps%PQ-=2U_qI8+gdMW=KX)W$*?rFG>#yo(B?{Ho<O<K)J1yj@S=FI( zPJ=?u44taiCbQSsR)?1~+`9En)SpA;g8Y^>T;;Eu4V|7FSYK@ZQ{BZGxpLvV-LEn< z?LJ)jx2Kn3f@GC?rGC{S{@X6~>23Vxv)7;dJ}>=!by*Hu#k9RLf3wvOO3Y|vnIq(K z!{PKfy(dN-v3r*teZa5S_nO_r$$qhUmV!wSg9%fLW!glwfE<R}#f%Zb!jHWK_O5QU zovyHG&BB5MDxF7U4iy~!)8PH!bK9F|@p?;}#g~XHxAA7>ze*MFkgT_l`Mdd~y14Ui zmNiqm8&9&ewkIE2p}8{Y%3ce%%^?f!H7?%2FZor~wH}dA&R<O!9^SdgHTA!XB=fzT zP7VpixqW849c#1P5`>g19p6r6?=6|bc=Jhf%hn~r55mo!yvWz8Gc4%Kn%@&JBk|j& zy_=T4o3T{lwut0yBbnQr63%w1eQ(QqWOe#w@Al6P=$Tv*qH(eRwdYd<4VFjmo-caL zu>FQ|fTD&M%PA(-3nn%zzI~oQ{o{hX<Bog3YHtzFDmBolm74QqBcIGMhg@ww8HtH2 zR+JUpZ7dP^tDTn@b<yyh(=*SFkN4Mavsq)hLj7isn&Isu-&|+SD482KZJEL2=bS}P zH!6O4&{etjx1m=3@*i)HZTz1hyD<Cnje}u3)_Q(fn=9e+c8%-I#+t6GNV^j}dxClL z)KBgF)T(q^YFp6S-*5UAPRr-5blA4-&&h3b+-7q2+~7PkHHLGRW#<>pvkp>^PFZ?R z^HRMi5Pk9IhW^ijk)MySCHnmi?8!4L{K{d(k?xWc^;LLj?3}$@9$F->NH4J9k(Ayf z>NinlyGla3*;|qK%jZXlM4KNC{<~dak%3+3(L3u@F799Fp|vQAG4ko1T_K+FZ*7yi z&1Sz^KV5XUP|SSMdp~SURC8Yjojen(vHN3f1gA=_z)Z2^`33jP{R>yW_j~4XY1gM( zmCr3c`e)<n7hk&Bw)55T;#<DYHoQH0^}^ImpU<((IC$&z<}WMGnMUXQIXQL3t4RjF zzki4yy3}dY+MROj^bfh#mOqPvYv!luM&$g^-l6+oi}d>2Nz#X}`H5?N7E``lXx6<? zbPC6<C3i$FJV-sZZR)Be*8_St{;ApbGrhIdPj})%?e3MUSvJmB-4NA0@oi9(?IQO# z(ML~*Y_eN1XG^L_=EjNlcWm+7#1Xq`rCeOIWWG3m4nyI`J>mN4tk?G^=uBYA<!)=2 zJAeGw+vy3%r%thHS(`7W-qR*(b42g``x}3^cH~E&S;<rG?^&|=Q^UG8-APkDm+STG z9;x{hyJ=5kQm?ngw9{HqCVv~Jwtduaui0wzpY`YD%IE84jINw(?78w_!(`saX4-x_ zg&q#(D_4J6fBDs_+MD?ow@gz1`Q_ZtN0<A9vIAGIZ2EP3|I(<QQ%sM-q<V$J?=Rau z^=7F-j*^z}rOnRna?ks%`5qbaInUj`yqEvzlE=25@%Oixm}%*8+ncXZy>p@8>-m-F zy19SXYOXfhoMn0?Z~Hv0IWI5Ag>JBwk-VoAFz5J{2&wWH8TC^#cmKb#Q%Y%v{g>U1 z!D)-R1CuJsO&*56J(n`8R$^PsrU&WO9$$V=QF%UP&F?8mZ>PL^`K9yMSIOQVH+4i8 z6>qVMv!1_Y_WQ^0cWr+Y^=G1qNoL85DJ5_G(-Y2qZvS1#s-63#bC<Lw+r8^0=X;CH zjsLTJD~z&XpR&603!ke-;fo#fyDwjlU9oS5<)nF4xhiha_8)Z~Ss%SU)BeTe$u~`z zHuCDMV)v@vt+VaqH#JADJ(q*pH4jc@)!8_?UnwT+{Lwu}7yg_7I%d_@sVCD-?V~pC z=&7&C{WDSM!MlHlj+&;=E|&Yhh+&_>^XOj2I1$$!Cw|F2<CKm)D0}Y3k@s9a@4D>n zXX=FNub0_Tqg{LE*1A)cDi`{8>HKSdwW{T=?7FhGbIN9}HeR|>L_btCZ(EJss>T0j zzbQX|voxmUSHP9+&p*AttCV*2{{CO5gUdYD-CV4{`oDs>wZGuT^ViI79yStp?axg) zYuj>YpH1rSOXjkE&qZ?AiOlIr-?dFHZEM^4yKUzJmx=$_#GE1YSje%?;)e~>h4;0J zJD%t$*#*q{r{8iWi8-_0?8zeySNlfKt=mK<y$Ic$x-T<VTk)P$>BYpr%O~m%mnXc~ zP<(pwAGcRunj4OMuCBM5*ex+TXz$J{vpS3WKHBP=-5O7&|8d@(V*S?0lz(mRrr;+& z(-PnAp1RxZ_ff9k&Fcb+<|-dHTYvbfV{^#ytB)Gm-8ov{b!NuD_<X%+=C0+>?2|N) z9@hABPRBj?-mE_-u2^rEJ8d+v+ToB+PW98H`{N9khTnc(dFonxphS$NUJ#3TY0^Z+ z`m0W%kL$O`g&pvo)zp!yf9ihxygc4C*J#U(?K`GKf7j-<Tkzv*d3el|&0l!m)t)=F z(fFyge^>vh|4$!SbZ)!Ic0^+H=Txp;p{LKrtvT~{*M++~w}ozAID5kF?)$rchj%CJ z<6F7X>UdDW#F`zO``@$v+jPytW}}aB`Qw=jkAGTxe#-R?;tU4YlVW^l%+{Ic>eDN; z)BA+|&BZ^<zLoV9my}L3J>57<(Li7NU;ic!t8mL-hhGRDRi0RF&f3P_T&sB?ceUTl zxfVYHW)^p>i))>2^Vp-c{M@Fvsr9-o(Y^)S7sUDgsA!0e{Zh3$F7^-SnZ=5op7$3h z{&kw>9z5;FD#ze|r5fiaPg6=xY@TNHTcLlO*8j5RZM!U5#FuH#f27gEcIm|PmG2g3 z*Q~$1D~F#UYD!<Ojau`b;{Am)R8*Qw7!*nl2c77dW$rjroau@0g7dSVGhdl7i6hP? zEKpQ!>4gP`or`BInDzfp@nXeamSxHDhl1FeVh%;t9o&<7>i~zqRwe<SwxqR7*QWWt zS|0!91w)JZ#v@I284^Ov;_ITe=6o@odA`>uzg@|fv#~`oYp>(#jHvjep3>lpN)NK` zGE8>6U=(w_s<C!4#|y^aBKf9<FYT+Zr%1k3@>1a_DcL46Gk)3@F~j5sOZ1h3*4}>8 zReY%BjdyqVtv9Dv*K=5gn7!Y!(=wzyS?6Z{!GgF?kE|!!i#OE^Y%5-L{r91x)=MAs zS*@`QJ1iHw>cjEhalc-yNqkrA`9$x>vd=g7f8w%leld;3(EI<tbqVb3+n-Kes(iZd zR8EFtwu*mya`PISeb$Fx&nax(ewA1KQAXN4{&jaxJqn2Q`nUYCS^u^lYtIS(adQvb zDE;|WkG%IP|5tzdlhl@9|7xY@Ieo%&=eczimh<wsCO4M~A1$37I)&NR?MVH)NIR4H zcXj&qL?q8z$s_*1WOwwPznrBuD*t{ytlBPpFTr6MV@BKKe1Q$pXa9z{UEcP<eSgtU znNMGzX5Rk#UHikl^yXHzMQe9{|H0_p7*sE7e8P<-^Z3K^XKuD{Z{FGbYRl_<`JGjp zPWj(;jZ{6%IB$;p;>_Bk3hx7-O_X&ty1upN3CG!rsnwGlF6<YMmhA~$!1{HnxNBOk zb#hu-?bn;HY%1!d42Ab@v6-vR5PGZBT)|jf_pLmGdr_A~_=CVd%D)V6{V>X#mFRqR z@*B4>ox6JXO71sFDXma&HJK@(m+a|$W0k^j^O+LzNuKWdKbEXuneXEzyCLO4ZfMBo zd4Fax>n-8rI(z1R7_Zpztx1wj>6`2HnvWMaEt$v8`X~9O5BKusLWh6@*G`?gD0d;V zopTjW`n1<aF7IPmq_;Zm?(rLaWe247inO=f?Jt#nx#p)w^L<q|i>}Dk8oZ*WOA7e4 zjYIsRxeLFAGufT0C{3~5ucsDrrm9}@y!u(A#JUEyDPE7J9>`HS5%0(}W2Yd0(2`gM z2B9t=uU2FJ&5<8e1$eA)G_mDAt+;LSc+c|B@y>5VQd+l6>Z)_IVZCe<+}<fO(WtB9 z#@hX1eL`Zt4r<={{l>KNd5BxqO>Z|D|J2gdXs@o#+=;4Z4Mm&PR)%ac>&p;-H`QgP z^o^e<64&s!K027O>daKZ>Lru9g*&&2KC6~9N<05){myj8T;me?t%pBuKhxnIxh1=- zU|-Fz%(Bw&<!yB#iwow}L^{t+?~A**&Sy*0SI(7JOb(cP^H*3#UE+S-dno;N5WDQ! z%G+O$?MZ)Ktl+n8)1hCJJ8rfmMXLY){`S{q-_5;O7smMYg&kt+-n`lOY_s3FxVLPp z!#AJ3E0BIYAn~y8qMg$eBh$Z6DLX8?Z|Aj-0qN(R5*Poi`Vn*c&VtS5$-6I3{2udL z>d4XbfEzz}46kqey}QdvPw0y(_p_=$bu+GP`VfBX`?K>tQW^U_PVK7@*D^9#B5VFw zIbxq@&VdPiJnxgZP1m>|n2@Av!t}m%{)`z{YTp`cd2l%6-YPx6RHjtnrxgJj3TGel zEq%V_N&K^2)4Q(i_P;4wT^9PcGtNPC)}3RA_b#4!!C|ZL`JGlZ%3pM)O6*+J7E4*@ zevmy{=v}pbT6E3A4$<y&hcxD$<1cqfZoj&lpWA+O;YNms$aBNT*j$ws&3qoUMU{b} zULD)quo-x6_;PZ*3d3U74<~cy+*&g?W_IrF$vbBXn`ht7xxKCT<hI*6+qcf%d$o4n zZ_{^w_gg$?o^yZV#L3T|8h&iQ+gi!;XZoZ`leTW%x_-UBg6SW5p1a)**H%yYxO&gg z)lE+)cRjUFoz3q2yt?E3<f-RZKkZNNxIer1|Jv*iTjQ^Ed*7H`{$+Lfo7wp_B_$<k zX=#y>k;%!)<>lYQVlQWT-@bq0NcW8|_gC)x{;%-+#+&OW-pn`Lscw1n`pwkuk*WES zQ`=odt3|h_U%0pbt?l~O(*9D}{8ZibU+2E}wOxN<;rDkJ_wCzv@#4jqGiUDHx%24J zqg%Ibef#$9e&=NI{bBdq)AQ5C;?$nK7Z1DlJS=Y7wRvIN?_Dp;+xGoma((^(A3uJ) zdGqGcqet)W@87=r_xtMO`p@g{o!48pZr!@|>+|#T-@kt^FE4+8ect@}^W)>=?d|Ls z{=fe(@hSbs|J-B$kJZ~NcKu<@a8jGN_WXN(r+<I0Cal?)V8G*{IbZj7fQ5|f0mhp$ z*&0&4%$_cjPMC`It6y9hF4bc`&1c!hS-vT!O{e;$f86!wo=m=0u%qLL!yAJ?i~F~_ zIxrhrzIE#o(op%r;J;GAK%{`vWKq=<(Ho2_G`wGC#l%nVej>CZ{QImdvs-ic)QZgJ zJUwi;P(^G0Ca*>@1A~AF|HrDIf;T(~6g|Cur&?pjy=@D!|L&{Vl317WFv8JEx+G(t zi^xo&EkAQM#_T;+AazPLHZ<RC=ISdqf2A+J`?RKd*XFlH%k??Fb{B>J{(3M%sQIE# zc>Cj1F%zBU6`6neSF`nGS$f-*8ch)fhd8(2Nf*B!+0ow8VWZ9SflcOZg4Vl|?|b&z z-JSRT%(rj<o~w0~?Ed%Rkz7iW`jS1?jmw{`KK4i>etwy){pan^*&n+-n%u5%qkT4u zU`2Hkv*Rh2)}$j<$*d1|oO>$bc*4xTRZyaLwVGhan|UG^&#aus`shpVTlR}S)2==H z7_(tM*P<PNPjx$~M7><0)ViglJh((hyD!M{<X*l<CQMI#CjH#-l#gkOe2Ld%gZ|Xa zOLN>__-~4xp6gd+)35DUR4aeZ@6#Xgu0#fwh97k+t<R>s&iE8`=<=c;{ke7w4s2&d z<vy4vPvMzx@orjhnfZIi_s%VA65m$Z-AQ{q)4w=Mv&wIVWsICQujTqo`*k+!-=5-G z*2#F$;ryk=X>QvOv+q$X>s>sd^z<^%6>+7SQ+F^VKlv1X`_MF|!bh)+)&xbJDpC5m z;_<Um7y0&2o7Xe($v&^B5syu8TW^|s_qg=^tcvyO!c{vH-*{C$a9_#wi{r%Z11BTC zG<`0W7pV$&mfL!7O>VUY&(?r{wb84lNoqWtZ&&?2^qAsGhoo;QQGJ}p{3b9MT8pF~ zeOET?`;uQ}ZXZ5ADhm_o%)H0kE7!eHLG|*hMGsE23HESAoNZ@6aOvjuA90(WD(Eb& zk*J#fJW1u@mUA<g-`w1FTH*KY2OpVU9sTfw^N04{H<uN1PH*_ez#x>G=KFJlz0l{& zc?SRD=UHuD@#Nc9{kAFro6v%D1$Htv0at?JME3G0luSEcE5yY3_38YYZXS!1zdC;x zWqGz0ZsUK|AG?Bi+RF{;TUA`s<Gwg#OX_(hzS2AV=XA~FbzR#&{lDw;G3MXyxswws zcSm0;tJxjDbyaosjLo^r<`i|DdH1LK$F8>vjl@zlSt2rDy{-HE_*1I%-)pW<A3w`F zzVZ9JNY(exkDuPT(B!1xRQs?wKX2~TJ5x~n^SMN{tK;4;^87|g>IPpMS%QCduqP_5 z__WzBzVzz(<sUS!eqPZqhu^Vs{r=l*23n2w_UC#TXU$7Gem6WW)V%VASn?zH=<tQ* z1<O|0Pf#`ZpTzdr;nVG%y06zUA8LyH=~Gv5ny>!q?!GH8l@8}|v$LK~bWO6W52!FX z)pzIi;)-q#vBZ6SeGF=IlJrh!#`T|Gdh+}8L(|QbIDVb3WDQ>T_|L^IM~;`CPUhFA z%yE3BVf}D%jd?idq>CX_<TgFF*}xl@qjJ=w@296niut^Zoc48hiiERfcG}5&xq0`{ z{3lx%a6f6?=g!dGV>Nf)!;l}2S!xnmpNiH632Z#~=2%(4g(Gq&KJM9{&pGq-er=ay zg;pObk`M6cb<Xpgz#`cY;k!7ckN2cSti>zGV!mn3H~;cIl74VZizjURiS+IRHxt$^ z3h_IzGUWJbi^BA)Gj<joI?<rGA?I{m*efRwro*>h6el>POPrm_s^9&UapwFV%kEF& zve|6*lWQW=^To+?i?pAgKJiNI=0xLI)2mD?Bai&>6uz_Z>&&}TM7H0!D!wV-E4}92 zC7DB3Z|g!do~7N^m@7C<?UUxqjrZp@vY$@%lxx_yF=LsEwmS2l+d5NE9<Bbr<<!!n z(c&$lZ_eA*Kge2YQLnZ6+L_R>idV~$x;2_V2y2T}ochq29KO<T_UlsNjsLvMR+mPn z2ebu7$SPE=;16GAc65G>?8Ewuj{hBrQyN(Pjn_3XOw~AY;nKC2Wxh*~)qIi4mTdjn zdZztZ(Nd|7Z%gjAYw#@cWMR;?w@Y30bKzAZjbFxHnojlq1l^5#m?x}~V`q{3c}rbY z{}{)&<A)g!6n#DT>gfJg`LAr9!k1^?y{)$WUzL5?yG7TRzMH?Y?Ra+i+<j-eu006# zJma2KrIqnRN9)a=HTK^OZW$c7`cU`jlzXX0b#XbtJx>nJ34f>jWWN{F_G$Yr&+)$c zG5m#f+eYC#+1|dX*V;G8@ExpK^6~)J>mR}8l9f9R`C_A0*aGMAUG%xkYhn1%Jva2- zf-}29{#=RK)pBoT-lUs#zqf9%+L?bar)ziGv1ui}pH0(>XUy8G*woN`X8oCSA6EbS z+;Z-?Pjc4nD}tZ>R+(z;b@N=g<<;+o^zW9Fb^7LR+!X2VE+3|u<|dqdbn^4hJfGE9 z-<W*9Vcy>7k@Y<1BvS%k`^V2uS-NB2@|?rQLgsUR)>+Qz_u0L;Xj$C!=Y6*R%PdSM zt#X#*JHA7I$=(fNVHf6VhwoeO7{(N^|KSu1tKG+z#|9jBTPP{O{p4?<)YgOLp5{FT zJF-6Y-`u^nCQ>#yFV|=Gz70qE+YSex$a#^!>DAgjk?~ixGJiE>uN1D%4SE)lHo5xG z`7EDTE=S~M=B{0}x&FM0(-pR9ExC<H%1(+*xIU?C+so4l)jyiby=RLxuJwM<tY#c@ zC*_7v+&l@*Gr#JNRlV?1eo#F<B3+qJmrr5aVjC}}U8g_fSTATP_b~2UW_+{aYR$2_ zV&My->KAJNr`T;>ab0OefNEvfLsgBd|3AGy@@GT9MaIRU*FQYn^6fp(%eO5$54NX8 zOj1$3Dt6G~UzPKsEUByOcX>@T61`;c*S${JTu8j*!qm9e>F-#TV*?LWGACXPm~PO? zZ@2MJ@AmyI76Huetk?Uvk9+NVus&ng>RD5@dBZEN#tU3anXmQaef_WaI$MQx)vGop ztz7W;&7GVzPn$L|%GOTZcHfetCgw)MULj@6m^E6}OD=!jQJnO8Uqwrm|0WBu?3R5m zqtACGIBb)fw(6T+)UB;?H&$!^iDmuhWGDB1U(EYMkFWnV6%tDbI9dI2o=8=PP@ve~ zZJSRQdGhW^X4-aSisOTQD<Ay-b!N?B^L=MCx4hpu)1~bGmdQV#78OdIz4Bh~zw_sZ z7e6&ldvC}4<>IsO4gO{4*d%=28nmC=1wK{eYCL?!FvV~4?SseFbodV#3Z@?T`dQoX z&3;~nsV{@XI1d!x$`UYR<@m<FZfoHGpy@NRK3`p07A^aSk>hJp^X6HlWy?IwxDu8N zl`i&NXsBCp<;v~vs%4_dg~jJ>62m5$-B0?SaErUdh;wJ*RVD3jJ`*NhEWdos_wplO z^GCUVH|nS@UGw&FvS8MBsaGFFUX`3YZFyMi*(%{@?<AkilzVnp?%8gsXWvDh`3i`g zke2gt;OBN}=zZSTUffX__DlF!aNvoTdr#D^&3&gMEI3JS;!U}Ud!;7+7MbWT5P3p6 za*c50D@n=3#s(g?hO)#RWr+?644VuOt)Fn>T7k_Hrsny7D-r}6lWdweEqlCdn%E@t zSh)LF%f&5Y5D;!q=3si&@IY`~g2`NtlaC+%e(^!AgdzB01y60ot_AtIPsJ|%vzW6e zFltf3CbbXO{x&$u-Z*M#6B$}@cc%u60iy)lw!=~K=T!I-`Iec>KD;S4<Fr`!3(@{L zg8i2S`?rbpf0X&psN!?rnfHN<zBeWr{aM@SnlX7nc-DrLm-i%Alxe!&_d9&SZj!;Q zte>U2cZ^IX{<NGp)u3~(KBw6K_A{E(&d(K*Ec#GfAk-h;;L#?!t;OASlXltW?n<d% zza9LGTkbYk^RIT@uw~k;sy1Dl?Q=a=b}Bb<e%;*bJo|cR5?A{)Ufrg(Ass)f7VE}J zPYz?d`qXKYrhE&Zq3XsfY$a)z*QTcbpL0e&P4CQ6y;Vm!K0auyNfLLwmhgaaXWER} z?n`>!o;DQOsNJ_@vK&kL=No60H(pR`cWK?^_`$i#+c(s2rX{~o#QU2i=Wkr_y8LMm z)6s92uN?_KP@!Y;<JN<c?|koc=I-EmZnkg24AzTLmaDorr2Ceo_^r?J&C7B2yS_fx zGdWI1m;c%ilWncX<Kj(yuW+1AlFRudziDUe4CA|NuiHP>TU)uYa>r(cAo2bu8Z*=K z%U8q*J-hqi>D}5F&ulB6+NM4c?Vq?)pM67=6kqK&tw@&r7qln5EK2i?2(0yT-Ja&G zZnV>86VtpE3mkVmh}zc_E3&cl)8E2M1BD(*v6Lsmj_#^=R2=rj&Sr|pU)RK(CnOU4 z{@QuZH(feau6ORa?y1^j*&%sFjVmW_-=&tEL+AS@X`GyYOtC0&=l(rDD^_lry6`CH zTFrBDnq3pt=zO1|I9q5@d&u^#Cv};xets0{z3=wv&(dw@KV}zMPUvw;lJd9}xk1b1 zD%;W{3Wq~dbz^<cAI-GA%rxthy3*x?dwp)}=vF8l*V^2nVPm>H!g15tIX@N5=d3ui z^oR!kN|xZ&E&q0Wahfiqxs&P0($pN2z%Iii--xI}pZJBo4#rVozoPxVY+sjo+h~9O zlH$WfojP?ZgS|ZKB2=&1)?fDyl@I)SoT2{fgt)IA<zH`vpW9o>WcB`t?M4O_f4zG( z?<_2$e@)Mtp?$Z=>p-xP?$Kn?OWXl$2Sop-oLrK<Lp_$`SBT;Axi)(1YtC>gOyG3L zTlib~r0X&MJ>4Punzd~GuFO&X<e*Ygn}6c`(O3VMT~+5jutZm5(ZkORTpM}qKOa1M z)!zPETib;24aHMUCVf1vtt$TM<c3RAS5Hoi`1qPhcE9+?y@G1eyLZLBkbL_>Rq^{_ z2Mxx$J7K%kKgz7g>X5FRtRcrYf4|Dgi~kduXYIN?xnZ{c#vevLlP6rC<;OnrX|rk2 zmk1BG&MAq~i3fL?2-w9>w`vi(DlGF~Eyu{RGwhPz#n9JZqmFLfwBWvG-2AAngjo$= zboYJGd?&qjQu@uRINpnCrqd+99sKonVY6>xOX#&kwK$Ep!ZUCBSjm0bBkQYukJs^J z4v)fot?N&E`-E2W74B49Z7jSt-T3PVqm5oc+vD?u%I)~p6&>@Kn|dqnmG+~JA(QSM zp0#XC(OT)era6<o9nG72WZ}(c>!vI{CgU;nzT(jkZ&B{_Wr^v%n`%CBc^GAVpLgNp z1WuLj7P%*%_6q!sSJZw!@2T9Sih@~H?uv;&Y}>BgjSkG)%CqmD_A(2TLx$<GHkVF5 z(vX!;YnOe$V%^VQik<==k7y}Q+<mW3d*>}J%Ra;R6W8SIJ~4mVVY#{xCEdA-q0b-f z(yr|dw0&^VFJOzzt7RrD*GueLAkeWYr0Lwznfv#vEp0YkpnsusK}gYu)3NiTmW4|$ z`SY}tVR~V}m2kN<EzaZ9!*rsoT9+HM-aq|q!~KS`1#8w!cD}UvQOXOe)0cVdCw-OQ zb|z%I(8-3(D0TM@vlqIj`xMSE+ahy4;8XBvgU^39OkS{N?)r&`)xMSAzc_!+;`CWB zlf!DAx8>EYKYS}udGF$RPxd9Ng*Er4F5c}v^_;mJS6Q+;)4Y?ZvrcC0WuI)zm^g3Y zKIi;Lxz@85_b@I#dNC+7MosU{`exNw;W(Rx%89%i=Pv#l`>wZX@?00;#b1QG-0hvr z)vEvbev{;ADrv}H*Oxx&CkLxR{gOX@oww{vRZQG3JDE>rGhhDTS^Xj9-^b_vQa)98 zP^X<;$@*b>)4Pn525X}~R_u<|{Ijg);0E3M?tD|#-ksohb#U|1H_^^~mc6~xIlZ1A z{cwEF=4gwQRPKb!S0aDpPve#koltL4y4Rx1K(+OQYFA+6Dvc|fB~)t+!uJ#h998tY zdN$?g`TQL}mR#QP>VO>Y11(Qpryu7ppJlC(SQkF&h_j=Dy>@KY<u7x@=DvU1G`CLS z=SzMq+2yW|YnQ&ic3nG;_uk3(tGwr01SedI&oX^lHP=mQeH7P=kXLv2^IWLcovWky zZ=q@0A*0!4>hXV5=WgZ^d^GjM!gXO^&UUA5l0NTo>cgc|t0twyOjDTCCvpB-byOS| zSJ6Yy?~nC=_CEVGSt-I@W9q^3OZ>JcvV>Q8+z$1#P7}NPGVP(*ytU`_-^;{GYD~K~ z@4M;Z!`ZGWIXnvmXMGV%TDIclJF~Fjdy!{1Tufhi_iJtU*7~&;Rr}47vLo5cruLd& zzFQZodZ%{5ZrduOt!vT}Cf%rHxpe=FyK-uBZ<fjFn};tQ%&OJOD&0`DH*NLib!s6$ zQj&a2XFg5IPEGcBE;sAwlFL~KZn^KO(%e$~J@@&;<L4$jpF8LM{oMYwbH8twWw@!Q zvpFuJYR9wmmdmNTdRUBlwqz=W9Y4N_burt!s}G!#!rbqaAB}!zE7};V=fz-^fA&*| zz^^k*mm2gIUiC3MdVcCGC${!nqfN|Z51IWAGw1DRzITWD-#q4nZ<!x{XAazSn7{C$ zv*%&wm|ruhihk5}A2x{DaiZ==s{o5@g2-%pIZXjJMxNVeSl93$OcZDJ`YE5-d2H(g zIprVn8^6gaK9PSVB|lqI?)8s@8j~)bUZteKqTuk7<Hv!5kM|QNKTq88De>vL#V;b0 zcQgdf@AY5vogpT{Lh*xUvQ3kkWzM`;FU6N%_LwYuv##NM{0x<ClNsLJnpR!=l)+|q zQ$(cU4L@_{tCdyei3#PL4hR2t@U(3B@wz<!Wad9>Sy_n#JZwb`j3vk1H+&AvU|^0l zXp#{K%ae;w|6QVY{eiq}fQ1}COUGQ*-;<Y1-S2c<pUiVRfoZoulkmlU<9U4xoZF<A zN-bZzlq))g<H(!thfM$L_>ce0me|_rxPC7G`Ft5&{(rpI^{Zm}kB9QJcQ{X2Z{I1# zoYfKcF;?@)4@S{f>o4f7ZzvQ$zw^4w-s>vX*Hh%LFVHs^Q8Ev4Gv_q1&wueLZ{N3j z2Jh||)ZaPcA^Gpcx8&aB8(dHJuPwV7@&8o!N}<)|tNF86ru&C6{SL04aQakxp8wZ( zJWtQHJ~B5bIDKi;vl;)xB3q^%eErV<)fTm9jb-zu-qJB=4X)ia>)p+&xq<hXmwZ2% z_x#|)$BYXN_g;>hmT%**Yd5E<y9smtrSF%l|KCr(5f*sVZKIT5`2qJi-BWqDI8R@? z@6anDYwtO?r^(%SHrKvd^Jr!IT9d%Mzy8T?X-Ct<<-Iu{7Qfs6-094l74|-X(*B)$ z9e?i9-dTBG*G%8XRbSO<rmorSQ_}<^wa<i3_uplDrgE?G)C)1!PxT7?i>aMbByP9j zpybv-mvb4ho>?n4ru(gnbf2D}^3>{nbk>vE3dxx<nNy?NQe^8_DyqC>SJ_dU^yRwy z(uZ%REjajU)5PCzj+Z;`y(2c|Qj=G-15?xfj0JjJg6jGgQWRKNyXOo3tln2)A!Rpn z{qwK?0yGTU=f9qzwbX~nZ1V5@Uyl6w=wW2|Jt=N$P-}_}=j9hYY~3$;qz=7Zs&2Zg z|7M8XbSF2ZUgNDnOJyDkD4o6EJ#mq};lAGcO@FivmtM0Byz-W<tK_cN|G)e8GlYN4 z+naG>W9$p@8>^@M`xv+4UG}qE9<pHtJMX+Tip!MwbZy_2b)^~3Ij*ryGGC1TFSt<k z%rsOoO#D};$Ex!5y#Yy6J+J-!DHjy^cdhxAxbtV%EjpQ&uHydxV&d+*|1Kp?zHv7* z-y-el-)OVLUk{e_c}U#cE`I&~{;VFi;{AJf{lEL_U+0&jALc(lJ5gqB$Ha#1xBh+% z%fBJ6y#IK`|L0M9_os0G{Wzy1m)~{Snu%YtE}A=-bxSbqtE~Ocw7E{F+RC+9#*`~_ zYO?mH>Al*58cAPP?x?lq3~hdrKK04zW3ES56my>0dOh;lzx7wSN)JC!G?NVKPh+>^ z**u%&SgnBaUY(<xZ*B1je;^yM&RI@M)%|Vg9gXt=$2%2|+$g)T;=m>D^9xUyd0ky{ z!chC<!XsOg?kzd8S@_JtGvz^dmgp2%9{IRX=}X0pB}$(d&vS}7FUn){PVg#R<@GSy zWc8^U&W9nB7wcw*1t&=6u}xmWH>tRkW47k^w_g8~!o$NWli3)!7#03YILx1+<`%B9 zZvVT*ECQTt2I)S1_xx0TdGhmBhI1=CZ+rWHZH7*OFq_PwwcFb#-G3FI#%{ou^h7pW zx8MOI!vm?=f?Leb7N|2YJWBas#Br=tr{Hxek8J#HnKX^k=$%hi<fd=6Q3={(R{P_g zL#PW^!~zwC%2bK6yk~4bJfm-&dn}@^)y<Nye^pGO-2O~+o~%h<Z(NcJ7q+hud|r2l z`;CRu&Au&Kv5zmUYGR%7b%xQ-_0RqlYR8+ogd3+`cZ*g%n{uMJ@NxI0%kCm~&+BN{ zX0k5+=bK=#(yHy&wXaHCH%xmjmE1Bt>&1Oz`<jTdx*OY<^2Bt!le4~(wdK26>PLZh z7j|4@TL1Os&FmF<@%j%}EMFzf84$T_&a7`U)p@(8v%N`43{<`J+POPsv$R{w1dngK z=F1B)c1JEN3!Pu#@oe=0wg2mu26D<9XnuTn%7b0{LG*6<i%Bci?X%{ZvDuul<nzC) z@4GVUwVnU+o!#>|Y`t@_eO}`;kMApQa9KWxRL%E%Uy|VW<HFIJk5i?*V`hHcyDCZW zqqX%5rPX1%Cw5<y*(bVFQh!RX;_kk1;TT1mPr~y%?D@lmYo;$Qc3XU=|2p@wS<`lZ zs@-wclOgKsH!rJSkvAv(+p$=1|6?oeMN>^2FXo6JKi%`O;49-R&Nk=UyQk>Ha5EKM zQC$5fh51BdaK!FiM-MKNT$5l~`u>iJJ=dD2>Bl)_j>+l-#jU!V*Z#rol+zCpCPSnB zmf;o2BJ=hB%-i|V{@%xe&n&!+m#*`EzIeCW(tK^$&of)Y1J&9u9!vIDo_=@vIWxA1 z^=u(iZ0h>9#0zWQPb^Jc;`{#?YwGELEtmRqAD%kaa82{%ew%)egbivxdioa&fAW1J z=y0e@)qBnq`>BG{^p;#<jW&q-p!q^qf5|r9NQ3$vr5X};I!nGDir&=rL37q4-DUk= zQJa>R_!zF2X8t8q`Z1|@rntytqcAgJ?YBLTd-oa761f#2k|~&0Yo0ra{l@}@S5sN8 zOxUa@mGJQKB5QVK|I^<0x}R>JFEr_SOnAz5+vy*7W*Xe=YCTZu_UfDY<tOSDuA(B& zr?fQrv|9xy?fg)%_Oj`cSI&u{Co9>EkGk%8{V4v)j&lK9SR>eGXm6OI@Sub7h|}H1 z7o3*PYf8OsR&j27{3osR`r%H?@}F)sWlKK!n_jb+HTBdy(d{Spx-_)i{jK%XIQebe zw}P`%CLPn7{48j3rl~<(=Gye{lh)~9E4u${Z<2}l+3njGKHX{k#6UMg=>nr4-~QF- zne=R1x&0pZ9#j3DoxeGpt31PZs&abbgsW#+GKvq@FWNYdk=bHq_s2O&ZE+UN8`u`6 z1Q@Sl{;J-#C-d`WW$tTB1D}f-MgLsg5~R>@UF)}?@4i{nw8E2bpPJ+ByX>ZOgFvZv zGp`ayAIH^&vB?!}8)IUhe_z)2xuDze)B*Oe=(`2FOEmT>KI`xH@LrIX{QKXQT6?Y- z-LhXNB0|1b_D}nm+Ohck!~^G^#r1A-aQLd^dBsU`jYg2ZeNMVw(?;{Q>UUQcKIQ4U zo9CV_Rj<xewPD-L6^rEDR33R7-Q`<)Qc8b4gJ*W5Zd&AhPM_BOXYTD=pJ67sY~s}o ztFD)OZ2NZaw_4GkeZR`tYY)maZ40ozxb*dnsY}-WdMCO<C2sNI{#Qb)()~M5Jlt+^ z>W#C?%%Afa!e8HY;D0OreXFOk%k(daj^5w4Y}E|q`8MTqfMnfeH~mE+-)c;S3jb)` zEj;Hh7Ph-_nYXEr@y_$x^Z3?Wd-UUVapI+Qtvl{syJYkFvwY#gbw{r_nSI)F!O`p2 zk$<bV>LtEg9ymK_tB|H*N7SufK{LP9DthyNl-(0o_HSd>($)!U@16QpwC7<hU)HpF zr&7+YX*6DLW@hEUWSX6*v1MoDF6-GdzLtu%FWPyr@YXFE;azs?kA|un?#w;^a8^QM z_2-|bS4=I4KDNcqKK=6gwcH&J&+l}p`d@!!Zaq8l@7MhsZF&{ImB~$?8!c?IHnzH6 z?@r35vV<_3ri*{{_I~*K+}g`iNlHSyd1;cjZ=h|Pa@SG5@AG7SMcK~EN_rz)9lt$b z%ljy<7CoVEmhIt&w~nW@<U8km?azE=RkfsOF4JV5viBct*f(BSUzzs2Rra5h=<eSM z{q`y^&QGfS;G~)rYgE3AZ)?vi^$p9`8{OK}XIi#L&9n9H>YVN0Zn(uS`<*N=6?ng{ z{Zhs8H8W>@y!<EP<<u~vqFCLH6EEKW*Z5@jZr3vLwA(NHHyyE@vpx5{$&ZJ+!V=G_ zJ@!5htVoiK%I+-YG5=)oZe#82@Ml$1f}f~P-CUMl^d|b#%e%>WVedIk2ELdx>1AuS z>PJ4_-Kj?(|5bgVoZWqN#qUosCkx+B{n8TqEK_FL^ZELz-#8x~zs<Jx((3Lb*Y-Ib zkG_<=$v-aox^hEU!nXLM|9n#aCcXK%_xsoO_g^dDxqA73R`8n?dVG4{)UK8D4t$&Y zdw=17y`wf&{32F)Uv|pJEiC9_x|%juUiweg^ELBVM~HSvE#lj;RlVwA?yid#tryS! zoM5q=EBEs?ZVR^>uYk>lhAO`cC$ZKae(3jW^UKZMw#~meyN`Z3`^#Kv_y3TuljXV+ zXKkLy+SxlPu0wF*mT<!_D`u76|5dQ=W7*}9%`aTO*$Z|A2X>~d<lgg}<44%XeAiM1 zlkMAXe6!uxrM+iUlv|hmQvN-@PWQVjZipOBd{^~4usUC3_X<gN-5>1osqE(GZ~FyQ z^DVB5h^cllsXA(MOC_e-sYyj(QtQ7SPlk=`EtA@hT|Jr_qhh(J{mHbp6T4Mdm$yxM zu(U%@<?KS+n(Er>S9edQEizvb#5PwbZ9-0+VIl7%$M`D?Wxw9bDfN_Kw!5hM(S()J z_D5pqs!K2W7oCqe=~T+jT)v|AxMQ=(q}ux{er;iyZCKm(YF={AL&LMpt)KJQB_6m- z)~G&+sm@>B_NCjs<F~;D>y?qLOOCU!U0LjQHpVK}bJoduJAK8L<iB$NyUb;!RW<K* z_x0=DnBTKF&YrvMze@9&<2f2jug;on!I`>vaf+q!F^yHnEUZ#qUq7~}{fJK8>0_}+ zj>HS7K01-f%cr{2>(Z?L<w2&UtNM5UJ?z&d=YK}-{mkjUn$x1yyv|LO@n7Xuc3-(e zb3x=zrnx=`j#VuE*O_AKop-8jeh1U?C+{B#eqZYMj``01<t4Kp?Y?`Zch%Cli;jf3 z8DF3H<9FxsXXe*>8brQ)SKH&e&apD1@aOE8M=e_ZWxcp^qM@tf)HCruKG#n<!aq9= z!=&oAMTES`Px^Ycr|Wue>(dn{C%zO8d@3B;9(c7$GWTL?Y1!n-@sS;eXBG=heE+S` zTw_LXy+7;grBSPvos)4(6{+i(B<?GAW9eBl?OD~neI3gFixYkFA5~qt-hY^Bh5zbL z*C+GlURbt#nXK|umW|7{TsLrUn!0}BjN6jI2N%3NeWZxNQB>4bOP1q(`4*=>H)l?p z+-;0Sj-Qu=wl1=Z{&lf+((Ri^Uf-GW{FX{=MZ$SSEvxrDi`99z3g6pSx$s%V1MZVK zKV{3}jk()j-AO+o^DJP|xq$OqB!9RG`do{TI6J$4*3sLpGh3#7W}R`!?bqHN&3#X{ zuHp~P>XXct`>)5nRj^yl!|tHp)D(t4rkf|^^?shQ%Ko&&)SXH5B=*hxP{)&^Z+7j^ zOrdf{|5`?k3#uubKeQGqo}NCZud4C5TiDg~iXV<!X7prQ9ISCNNMh7h>ojyxSuD9$ zXT^!g*u6F@5_+;Oekg6Ue`(CVOW?Wfs`hzSnpK`_PAAFnotu6nXN#6j;&Z)o{%a*p zHf0_$x^?uGR+gpf^X?NWe<Suk%~LXY^jl-YlaRl$lYR0kUG!S`zO+WJUTW7-|JLY> zk?-jzdZioxKFU&ykdk>k!Q#+`&dx+%vAk`v54)yS*o%wrzF=}@VwrRhyXVS;C=(Z+ z%ymsJ5f53v#V@_I`Nz+;Bf6^=mf1-?yX&pNZQ5<>=)`vMkk7NAcJ@EI&zp0~4_|j= zn)71Ir$29AobR@=e<C~c3aiI&g_A`mK3uWcUbsTzqWZNc#=OUkF{^WAg7#V7O$&;> z5m;&9)A`?Mi~8zg?pI4w+EQ5_9@%l!(~T*KIq8_`CigYlk8HUhS>P3>v~$CpdnWHE zsl1u7#lYgaL_$gMv^q<@k4w3Gh0<Odg{)C6eQD+U@{sH6Mdtl1o@>STzf{}7l{!EB zQO1j14yB8dzvvi!Wm$E7b^Y4wGHb8jTYp_K=gQ+elYo4aqFfWtT$Aq^d0QfKw(QE? z(wehnc}~fc9EWH#t9J8Ub-5+-xnJ(&e^HXqu?>CxetNL4$voZG;HdD$Q?GxUYOvrv zQ_{5zgA`-?UyRXZXT+{^9dS4i@A*Xb=gs`<vw!aAHF%ZiQ_6Ya<u<XIAD(Uh;NI^2 zXR5{->$If38=L23ustw7d~Cay)4ooY9Id$zeGD$HFV;MCxaRh+txq4h2K@SUw&BEq z33Z=OGpv&~TTtGSVX?$#X8tn{Mw9<5FFii~&GhRz-s|VqihMga_u09<N6$6iK9_vr zoN(|odj^FMNEe5kU~^U4d;Kbls00H;xg@qlUgnTRUa8K)42xMG7)m&=QFM0Lb(uj` zL?j?dLE)0>U8Y4!veK4SCFSMEPh6C}q^NoKL`UwC+WWt?-?jg)v3SluM_FB8TPul& zeVsro!#{6N&y%N4ojQD&S)hH7(xYSDnL<l=IgQ*{B9oiua5^5G^Woy7Pm@_4FHTyJ zQo1y!Ht)mZGsos8JgUlk>1Xg=A)?|@&YpE^A1?2!Q;$;=*K_<azp=vo$<k<zgQh(X z#QHwF#a1tHa(13PY0{_9pI5J16%`dFc6xPs_G^CTMc)n!mp#68?t$Qq2Q8aFi0tv_ zu~V4W;G@K{Jf?kV?$T#-mOM!oE;={q^T)u*mK}FqKUwtk&7rG@HZ4BYHuu=J!);+X zd6tT+|EyW?YLQIs-1u(&mG&!h?N;Zhg_zt8**?!KfulFpTz9Vo&$8{?%X4yal9H10 z^71k>GdJ&jouB_dG5r3&2PYn$`0?)w&%V9?mz94hN%>Qgz+?Ymwt-EhnO(7=Y5AY@ zmuWd{_Lk+AyDN;h|H;q%YJct8HRvfI-@o(o^ZSQiJNGYdPJYhaHF=M|^W~L&>+kRP z_X8gUa_*d-o?c#`f1!m;qr;B9ds+YN|1TX;pz{CrpZ~r8>zpRN5o=Ih+#Z^;<@cn( zPp`g*rj)Tc-4F>%m>PLk(L_J@-<Qy|?`{V59LuJ!KlQTzS(x^v_v=r|_S7d@O;C!T zYd%NkSMhiM`qF>P*%z>_SS&TiLY8CK@joJZl8uRfC4P1^wVh^D^pMfi*m-)>XBI|9 z@wFkskLI46)*s?gv0lml%Z)acA5Zt5TCV=+h|i_FE24JfH=en%x%X9!#FiJI-zH0? z@Xb+@J^IbiS5S9_#<9PzMAvkjn9s=gd(9zU#aCu^&$ABvHCenj{`FkR)y=^onq_B? z$8j8Udi*YB`eL3;6ZeeNB~Fv$vTL8O4Ny2+X=HuAGvs`SMB2{s8IfP5BzAMJX}x!8 z#)8>}%Wn%GZCkunx25~>eqmFt+_l$RPG8>p^y0Q{|JO{PQqAi3=|&c-<FUvMkBa>( zs*j2*ou2!U@#>bSugf=TMDQ*szZJ)u@{j%M4+e$>Aq;b#s7zvrTd*XC;{zW9--E1Y zZ7jt{zRqM3od1Q@&Etup@8O@GYd0&a$nQDD`Ta$6YWv0$pK^|@xUD|pXjZgH-jSEq zZ*z`Fvqng>d_Hz|rq{<OC!K{<Up0MNk|Vv=a<b*|@=ud=o?o1uX)p0tM|f^tjQQlh zZWn%L?mN)9w&(rx;z~)!gErQdhO^A9cXGxV_{ja_%XLiZ(5Vb$6#9Ql&D7vP?&=LQ zgilYFy_0w^ev0geADsSyhdX+GcST;4j>}xKVV!SgrvJsXLZ$SNbyp{Ri0iEWwAgT7 z$q}_nYd%bWcQ5YRp1*SCq2C)yGY{9?T@!jx=;xp7AHIH=u&M3rD%O3sdgmS7`|9-B zM~knm{=9dw8N-bK-z1!!a;xv?r9L{Lm@gW&@X}8+-6uP^f1UlB`C@LB_~s>h`|29y zZhhMMzP9PI9+T~z=eORh*d6uzKU@5lPxJZq&N}e^D#z=M;b9v}K6BJenDOv<-$BdD zQy0I^^8J=-s$AYZYsrV*=iM}KT&ULk{keR8|KU2mzccnt2t9Nzs7buOKdPojaNg#% z+q>tzxa_<2jnTUr<sh5v`n{(4^@Rl+dD!iD>#U6m($XzB9eyL0cfpqYj6bfP6~CtQ zJXf4``NsmD?K2<Myx{u1cUk_`2=}W0U)5IKI96t=?<5&3fA8j}Y~?vcoc4kuM|bS6 zSas^a_AL$m)^}em`d3zZ>3C?}*L;sB9gkj>_`LgRS{C&B_Sc(hQh$Ek`9=Qu;@90% z4?H)Y{`%wnyn@?5pPK*p`)jfEp~Cl{Z)?9fv;Fq#(`!H7p1rzz@&B9;acm4chZ*L} z96l*x+;F8<;*$AsjuUGasVVeI9(7Gh@yfLQ&a&ZCQ+mhk_MdTTGiBC14!pEcetVMI z&KU^`tK~Z))E+h~Zk7^dRXKiNLecZ%dBvcTGa3y&8cjViLLROERdf#XCAa)Mw)V_7 z7RjA90l8+2w8fSRsH;s<YFd5ZeV3H|7tWx9hG4Jody~b?S|-~5(>-w@M(pRZdsegU zc&<sW)noQKKV|>(#kYR*)eAB1pMIF<-o%>FB-KYA&5ZY7zCU~{<wd091f8Yno=?lK zc`l0-e6w|H3IB3u53%RPS#vd5XHHqQ#8TneL%)50zg!EQD7tXxAK`lL>CX<GX?`Ch z-}V2|wdhy<>7ISILHDF`B6K>tS6tif-F%u~^3px?)!R~I!aDjlP5b+Dosq@fmQG=< z6@OP)Hea`WRrK`#y}&7J6wQopx~@vOAV2Aj-Awf}&tpC>?Fz~iovjilef?eduS=D& z^No35pZa)p!L1;d174h~J{UC^x)mJSxFF=Nk(OzwRrjUO({@*dKUaS28DjK#y1G!c zP3SKU)oAAOujNN8dv6}TxYK4{tCDc5>%GhVlO_2lrOahlyY%5kjpupMUHV2^MulMw zvUOZ5mRvrdEE#GWDc}&AoW6;{HttB~=8rp#R({&IY5`;W?44YPb3#)uMRrcTuspX` za?8Wn%+IH4+`Z~<ylCC*$@>qjlKeN%dauqrzCQk^e^+t;v$!26_1fg*x^?H>Vz+Jj zc-~>}<x?{}OBT(aqP1`S|BZ<?0dE7c3wcfz>sQBbUKahJuvEQZvqz{)LBWx**_?$2 zOZ~44#+J>RTz$;^aLk(TiKg$e=e!qt^X{ER4a@A;OE>=9%ej2}I?XlZhLNjIbbOQl zdAG`Z>id69vM(0jGyZ9H`{?hddVA%k|5J@M$>-LXy8A4T-dyvzEi&y>t8;2&j-8L+ z62~{aI+jQ8{saA64E$OT5{`;0+*NJ!*?FkF>P6Yn=(^pqLU9j|FWup_uKcE>agd<G zqm5p#>TY`Su^LP`;Mv*NyPK~~=t<dzsU;akk$wyet0bc$Uu0e1%(IH8T<+Itj~#EO z)&#V2g~X)$idR)kmv&ya>k+%|NrpSIi3>~Fm-T#d=hC#^Q=d`hC6e@|wqc4!lj4D6 zXN-jYs$H&_AZO<I>s){HkK<nI&Rxz<ts0N^%`ttZeTt>!hWS4BAjKq}1xv(!ceCv{ zSywZ|`A+i;*X~1WHU{N~Jg7-|{bT{lj#$YB?h<*DX~|DHo_yW%EZ+IU4FB^N79I1H zFgJdGAWr!8CMTWw6I5(lIR%V;UmvzsJ?oedzU|ZQ0{O(7m#<1DKinUrAM)Trby~2( zrfQ#TEsliwDw{dBr`WucU{o>W^XE68YII_Qv&E~wj#~eBx!5l9OFPamC-l|q?Nj>h zh;evN->&?1t@vU0xSt6{k$jrpvi&(7)iNVR<Ca|WFRk1?O<v`4euqhi!ly6XoZsZa z_S}8@q(C>Z*YuX8Z`m{xGm+HIo^5p#pM2w%ciFdy=l=EOK9<L8Ip1xQj=4Ga?{P=< ze;YT>uE~!%Fa2XfWXbj0%i||4t>?>h>sS@8S+{6*M~-W$-K7oJ`_d}PP3-S|J)^1Y zq?{jX9kJwg{MFXSZ^f6MyVm+@etEa>rn^tJ?$fG%n{-*~-RBmKk6k|hJ<fh!vo-jf z_~m|?NSjq1b=yRi{XF`y@0w!Qtkii?0?*G&oLv@>|MB@}{*5Lti=Tgu+GBUuz2^V+ za{H#dkIQ6YqJ-_tZ+Tp1K5q0haPOWNb)Be->+UV~$*xJsyzi)X)Kuv1jo(L4YkpMU zKlRw#9?wYc$k(N(FPcXkI&+2j`K$fC?dODydDZuyk@7eq_02x%u}Ji!Z7N#|a~8+V z6gk~{w=J%HD*slk?&PdJTle&7PWswb&i}DJ;+*D!1!t$7`^h-tzTP!n?r-yozDc|+ z$};;NAawEcLKlImz1_<ne0ItU(JT1pp|3H~|C%?;;%)rPyZOtT`170j|F7XM?+xdf z?!T(@LwD|c4acyPoWh3QmD94yG}9eVn#OOeSKDJdr|-DRCZiAEAJ;H71|9N{I~gg= zZpnIb&3j*we@Bk}+i6<Ivp3;e)wSo0Ii6`;pC9v?h}W5~+84&lxNS4zle%5Y6YiP` zoo~vCFE+S+-=TlwyZKMWqo#lDkkQLO-^-Au^tL^$Ls9VPHSYW<zPk$EE}2u$S>E7$ z*Yu^?R_MvM-h7T<?!Qj<dOvO5S)9H0WK8aYjCafL-*r^~wI(kyY~Bj*6pl;E8$bIx z*L~=IvtU<?z|I2#+a~LCMV;{5I>9a1<K(u}_f5~|OZ%yw+f{yI&Q!Y<O)(R`Ub(eb zI%f0T`>S1@b63@G4C?&9Da1LhWnIu}9qwIc&hN-EsbTuI(`ISN(yc{l=Xrm-f7^H< zJk?Re(_7T*s@|oT51%I8R(3nLVm6Oy*}};WWoGPq+BUD^=^Lex!nPWX^`h!h&njQG z?BF<8EibaR&1&WKedqp`Hh<mGAC}dk^!}VHU(xGb2j_AA|2pSkQP!K@Bd1(#U-w6q z{qt=7mNv!x)`dMazpb1mnLYdaS|W3<MC5geh@>7Sek->^JvT}5#ZJ<ze_4gas)t=R z4YM{36PI0WFP`1dZMvw}xKcKKneg$%hf?WNCDNPwHqY(eeEg{8g=7CKWZ$n4e*Z-3 z{UnL^ZGGQobbtTV*WG?u?Z+O!50^bTUZf{ZHGMdRm7Bfp(x#+dgXTgujSDkp+H7uM z=wGRFf?>`P2EVB;eIJi}xt`-`^`<eyE8!Tw=;9+~rNLAFlrNh#zvQ*P*X{#%vOgKI zI<2ld`Lp=s+8rr8xn9R#Ptlt@Meh2PeMhF;W-K{%A?B3Y2`+7iUzu}*o*I9&2z>Qi zxM6`+YvR0IdvzB-)(`g-J>@<h;Zt~R=k`mp?+6#8%p}#g1CG7+%pxj^ViM7_de+ao zf7wyucA<K-K=CSeHQ9DQ`At6x)-f-Lop|qoqLzEZ))}2PmWt~{k8JQtY7c*K-2aV< zhlFSNlFsJKvs)Dx&wTmM@j@PBhxHw$cBUm~eAIJXj_-9+>T9|cneu7fgql;zPMJ&# zG>T;x`*ezzEig>5R{DMRfUr2rlqA(|_tw4}KVC<R7RU<z;JX;kHKp=u{v<0+rK82h zMLZFb4*Koty608Sb()-CHo-WIaZiEAhBb>1Zn=E_&@K6J7KivnOM0^xSk^@znR@BF z;S%RUhtk+(YD!gdMV8MJR_xgICP1xXYx})#p^5)14~84FzgKu<D%-J$%b`SvHzIT4 zXSPR^98dK(E!%$k)fLgqjkkZh+C587(~#0IiuGp|j8w5zREzwp5bwPEK=77FF7CTR z=e!JyI5zviI;Wa%GjE*WkGjKG`i_y`cA3`NKdUM~Jyf@TVtB_(()qq5!(7$v3>%-c z9i5uc%XsUI!0pFEw~wnH@QM<!5kBH%^@{C6*z!fv-es#5LZ@!|b1EjoD1Oy8r$xtN zUc@>6%K6TDvfRK>cEy}UOn3ae?u8W24_GM7u<^u+0R2<DZt4CPxXN61Ug4_c`i2h2 z73>H7lAmhr64<`6XhQW=_AUt%HYv>|b2cq&$!BVvr4g(0vPH>rY9MP;lIf)?(@pP8 zH$0JQy}eB8XscAJQ!iKS+Eo!bF4Ol!346Po<6rku{)mpk)9+kC*;~KdP>)xw7xB9$ z)#bQDfkA1<N~TTkR5$cBZ|!@#W6=-31C#iZ4zZsIT(2GBFSzvMUgsqN9j#N7U)x)9 z9Qov6wBQq?<);Z1tc-sD%OCUVoa5DNey||r8jp_W2?dM33kA<bY(+vioHpEhC{&}Z zl<~D`?)K}!bCzjtJ~n^(@y#YPeajcBF>rPCG_EW&SE<YWvF!lg3WeIs-F|l_KT-*O zaHPRhEW&=CX}XGed&$pbW}YYa<X2QGs%Bi$**N*po)2>^_QyqT2;IYfhBMt%@Rz2B zMyhc{x;@7?sWsDU4n~!0TzkXFQ0RX3z4=C`n~K)l|Dvk<ryVs|A}6s)q=!kbrS*59 z?;eqzZQ8%fST5$)pNZ+^?rghX)bx4Rw%yCGtv;IDXep_FEKSwQ_3wTY+4>V!H@stF z(!bnE-!J&NqN#LI%<jOK8&CXx;c@wZpZ_d_Nk=rU)mc==t6a@FQv2{+<V1szY44cx zTyOvJc=<Pe(apI_H_uCY<mh~Ru6oh@z=ZV+X9b7{o=+BjqV3DC7-g7y`-PyMi@FJq z$=8efZuYJ>I8>pYqQ&l9{piNF#>S~%4!!(c(zyRo#I5(Qx5s-Y-{8_%`>*W%{K~1% z+^^?ow~2R%1eWrhSZMjaL%GGSy7SBDONV9`Et;`bbm@y&728F@&ec*I_x4%FGKR&o zrPZ4r-6wSIP5P6I`r<iR3%|XYyGU-&98P_c!unV1Kd<^Wb@`5a2N!oV{7K=tVI6!Y zIl|h>d(Y~9my=~WlZsyoEpmUCwEN7{HjfKdS3G_sXNz#yYHZAR_<LNnep_<H#P1u{ zC%YKtoPHmkv#$HQnU>SL%J|&l-g6f+=>BEe6n^3DhldN#|9%r^tJ;>jO?jhwa`>A4 zwO{JXFVvOsyDoY1zb?RuvG#ZG$r$^(MYSF)9=q&TzVNBi_OC{5<Er1&p5-0N$Z!0% z#%F`+jn?1O{ab&0$jC@BC^zxl|7}K+eu(vpd4B(SLOFUAH?5j|Ds)XrkyT<*SA5L$ zx(yw6COWApv#M^i)jfF3`08)td9Kp$%jf^?7pguppUo)5fBO=jyDRv0GQVGQ>y}vd zisRaG16y9({1=n`=N%ONVw*POYo+z;@2O@7ip6GHN#8M&-esY^U-Xm5$->n;%GFlu zUaWeTxY26+N&cU!s!H>MmD+duEM2w5HSGAKBhFW&l79RV^xVrn*P$+p%jwMbmr}D1 zrzGa@iA?y+%ANXHd^#)hf7VA=SueAce2P8ziMjXOqiK9r-<*!yZx5ZPdgJSo(`xaj zYwqu}|2)}Wv0qo*`slL+#eY?IGOC0Q{(O}7<<6lc5sL)(9=Q7MQA-^2hkKJ`?oUcA zlNL-ncWuerY5AG8>(_4Hk-NAxBw(xE#Qdj?QMcQw8D5<4xqeWmrSR*;-B-0gpXc{8 z5WlnVJMS*p&9V7wAGw*i8M`z)*6Oz&R(tXH@NrYMs6TBzNndZyK0aTwUrg;tP1UWX z`|Lk9=y>U>Zg8v@Iw$B-Z=n+_rF`kud~4%~t9O*&U)9`b(G&J${u2HmO~=f8oF=kG zkGIbdtTtGhd_i-giQd&)Q;%JI8z3~BBRVzV!sf_ZTk6$+UC3_u<~YCk<raS55V@)1 znX*rp{W|;VZO7}X#htgJo1e3_FMJpEm|>N!{ZGxCi7J<B5~BCm|A~8Rx;LtQ@ih$( znUW8mOhTrf`?vkl*R*T9W6$ru>`~}dyL;mzXLt2~x|XjKHf5{YRVyyM#3#6PKljeZ z$+xO&G_CE7AHLCbwuw)A@@Dt;BkD`Ns%3tg9Gxzpruw^Z`n%BR-KDpFtDP@XiCSbT zmov@x&1+3JuIUO|X^R$JPLdH1KYP!0qiC7+{?}$c(j3<UqIVS<)m8^|b@zrOo%NJn z+ap^Pe2djU*8X#>Z^wJ>y^?yG)<Ujpf~L&S)9wBH;9dT^n#q$FE&ZEtd{?SV$iCHc zmAw=Us}chzt}0N83b~oL<NxOAjf{7)Got=iu5k=eyuENm#pMkbc*GBXlQ3FyJ>gV; zVbA}{FQ<d%dLBP~z~uexcW*`4Kitlv7_h2t^Iu`(^Ub;$;%iD`KOUU;ELi8w&nw)A zom1c3y!UYP#rU6DHg|8#pSI9Z`SJR<Zu#E(&NLs_>Hj8SvuK*^?rl5VS8!jii7Mxr z=dZkJd!x^EJE7@yZPOX=O+WGF^n-1uFFZZ{;kLJkaG#+UlX!AR_vd4(OCC?URiJr# z$Cl_AHeow&ruoSo>1RG46JPSU`_>25(?2#v*RTpN^lA!7_E_;*&18x23#r>2XHU0W zi)Lzjxyt#`s?#4<9sj*b|8LfUw_SA^KeL{E%j$Vq74xX-(ub;BzpKptR_%NH>-?v$ zm)^ep%60kdtRrW4Jv_VY``K;VyB2%tvNt?lTkbH?`Uuyf1MliiK4eIlGVM{(it6jy ztO5)S4DW4H7$<Z!1oDUrXq>z(?!ok6;f`oG#)!yT{s#;Eiz~Nm(voykk<^j<X&bHf z?&b6_`>3tHM^zMeFJ0%dRrl$Z?eol4{I6^e-IQ`jBK6tg8Mh~PJt!~RZRpluBM`Cu zite=BCT@xK7h;zj<k!F4>o?i+n$3l^o1=5SF27v0?L&t)Geh}FrHf}wwXQ5({yR@e z_+7l;E|+&-N=0RlDF`~O|9n12p)7ljyOvkv-UH3kJU8Y~oBwiZ<D8UYqjeS9_7;0r z^u@iuQ?~C~-p+Qt(D#SxRv!I4ZA#$(ONnc(dpz}g<-aEvTZAf2X#U83udsa8l?~=^ zxevZ9*mzX>OiIDiPx;9fv3hqO+<N;b;o^5iNryM}3<2<C#80ugD%~mH^*>0Sf#I(L zwpj!V@GQdh)OcZr-N!%n8b-<9^(fc22-@YiYw7OY)@(iRCcS$%ZJL<MlHJmrCpqW* zw$p!HbME`W(!EXpo9Ay?Bl2Z(p}-}v4{{&kySlo<!ouq6>KeA3sCPJ~&gk2+M9}FL zi(-1;gzXhSk{Sax{8^q-oBp6E`|<CDm)#pa)NkRe*v7Z3kb5^*M_o~G#fMJEisMQ( zkLLXaoe{oi)236WPDx2i@7}%p`s-QKqHgIWc%~Ohs%P%p?)Y(g;eCM*`TT}A&u`q> zZh18P{;9mprv+Xv<)69q{LQJ=uA;X^w;rFnSNyGQ$Dv)TyN><d)%Sdpm`m+-?_mB# zpO1TgKau=CBR>BAi4!NjeED+c&Ye%6J{>!D%<+GJxBTLC;o$Vo-TKP=^OmK}KbD@C zE-t@ZJZ_oz{5pMmowfUQ^5gPz{vSVg?%ctH2S0xNc=P7XqeqXPy>{;Ow}Y2o{yhEh z=F_K7uU@@+_UzfWZ{Pm?`}g$IvyUGuGc{J!)`AB9i&w}^{QrIPzwdv_g_SbaHwc;- z&HVM}Uw}zW+TV-6nhtVs^xiR_*>-4Q#v*>R?8UsU${(jZDlocv?9s*)x2;}(Hy)eR zS>kv3WBw-JrIT+4T%Wvk<FZZqGaj()dB3WbS<)jx$IDFp)C{|zpGQPJROa$dV4QM7 z=aKW#7WqGHkKa$!;{WV4F=vs13s2Hty@<AmMY|J!%~=uSy0riKrP#!k2RAQ!9<*(5 zUA2Kw`FEa`1qw?f;*aP?@Hfb`eF<Y}=rxlu>u!1f`Fb7ugHL^$PtP(o*z{bgTK8v; zlIpgbauQnl?lbr`r4)J6mh;3~mH)163T$2##rR<wr&@#f$>*A-<@e_4ncmFvD^;Gd zY8%_)`1|!QfBvf|HVIGtv3j|5Vf{|)iQkuQe=hm4pm^8M)!VOs=Vxdw)aICZAWK`K zcVCS*%WElrXBmbCA$*6YHZN*<yq|Y*(@Z7jZORS5!fqQd^|L=V&{|pMDPihY{KGoH zsnXG+l{YX^#e21=O4oVTUD}5Xb5eO2EeaPcV9Ma^er#{vCw64d#H3sPk<TVA6@GeX zMx4*p?-uv`&6^BmQ)X1Yc+>Lu(FG~@i#J@NQaHaXn4Y@(j9hezwS0v9vt92~E~W4G zUl{$gb)kWL+OMGUOX;iyzkSjVwU$a2D;56e|CHmiX^Qv0wL0>mZ9b_{ooXtf)22Ru znHD)+Wp+Zyv#9~g6~e;~c$Ma^x?S`$^3$33etxfi1=JKa*v~lZryX2lpwqpXf6v=l zvjW3TWhWXuyZnal7w5BGs@=lBjn2P5H|y74liS^Wi!ZI}R%i=riA-L*EI%=G!s*Lp z2Yr{CyDRStx*nK+YRdb<M)kG_dHf%m_XL}39eQo?>EGM(<&E2$FXjZ^5L_+uaQD{b z;mT74*IZw`<z?CR<n=wNSFb-_lbe2Bc#iTKb9;NeTX%h&_*dsIV|jl*udZ{!Ce!Z8 z!dd_4PD@k>*PXa9-lVfqpYaXzj75P`j~VB>oT+1e)8i9x^({kflv<zhU+-5891pgy zlCtF8H}6kn_ZE}xzkjVB+C=|ryZ(;<yzl4fpXaPqS-Md;q(S=mhutf_A30VrZN)jc zifc3G9In<=I5DAPmAdqk2di`W-<1WlyqWACnXv49Vd-W5*>XD3((7_I9gKRuj#IvI zrf|b?^W&H8E+w}7Ua;`o{>zEnU+Z-ru86;J`#STJ)ofOaj&tk3@|z*0*Qc?I_4XY* z<?uf<z1(ef%l`W*_Thx;zn@#oN_M3Gp7Y+HrSt8vnc4SVSA9%SzkR@_I3!E{)%V+< ztv+)z=FSN87L0jeu_LK$<C}&6mMx!+S-z^PPG}E2a%$%jqbUpK3+2AJ%y6zTNn&pk zW81Zf8g+{&o4TLbHpA!^yU<-hiSOs%3fO$M+AyPO%cAbEk{M>aFAJC4cz(J?bkX4` z83R>^^Q#Sne!erVOw?Wam3_{U=G`s{F$QhA?=%=*3e8v6_PO@x`)?j~$)dQ}94q$H z)J?uK1^-Q5ZLxm7tH}4o%7^^JKRQMnow8!n;v|*poD;c@UTH~Q9Q5aUC#T`jEj*i& zi*~K=O+0WqLD2rdg_SEJCw%4gR9gLfM%J}bubobuo3Gv2k@mba>+1VPbLKk-mxP7r z<R0Jj?M&~dTmHRURR1O|s&zba_Wt3W?pG!r$n-q%_||X9yA?(n5_1-M82wzKrX(z% zv{*sA`i_kR?~EN1jt5l|mG%^0Ww-IIF-YI3@Z@kkyG;A0{WW2EMe=piIPdrW<$BP1 zA!7c_GYT)K>G+*{^0DpFk|}l~Z!D+o-Y0mglHF~VW40xSTac#DAI8OOA*V$?hRf+* zt$W3N-Bn!u@`-6~rkRSpOSKkSc=Gsj2p>2)UDsvynt)Ghe7>zo_~s*W`^BxyWWGCX z?B~sLSMYdot<A7-OY7WZ6t1-U`!62L7Y`oH%eb+9gU4g-7q*?@-)erZXjJ@q^l+B{ z>SfP8V^7K1JJe=8w&|Xx8+JG_-sY=I@A{C<?ys(heBI-;=wggVZnLw=p_pS!9_5Rl z{}U1$(|1xKB~df->dk(=IiKcSE~`puU3&8L(=&@+#2r|uy6WTGRnsE#JN2G!-R1h> zdhBh7W#4Wssd{B=8rJR~ck;O`-`e9m7jygsKV@61e1E&RYpdQ%;cWIl-(@dv+?tpA z>9zXSPj7AhZhbfVmXH06M{^#!`c!+$TOZr6wR6{lb#grZ<s~Z?9QFA1;(cmmjzQlw z7yWt5tA3PAr2SJB`Dx7=se3hNrBQnEk1FO!qX*%+54tw1hVJvpj`gjR<tV;n9WP^- zdHLnmlM*-9Tm7GHbf5pg#{Q=p^-Hcem_A&%?ZVN#f+F+Zo!&v_v;P;&P5=5c{p+8t z;XkjsObuIRQhxKzTF<`<KdqByx87eGm!-k+`o((h*dy%o=Uln*HsK%B-YLbQj4j(f z^SxhF7Rkve)e*URmQmrtn9UYzL?5lKjJM|qTV+}^^NM8I)Ze?W{Z+IMzVcpyU+!Ol z$GX$DvU)L7oTW-tCWhNw_P-Q!W<iC{^6w_I18>KOcw`;g^-xTAzn4SELGH(1kF$I$ zvco#>r%b*#$JG4S)ZI!A6Q3=P;E7T6m7J}(^n<PKwk1q!qh0J4t4#G=Vm$NAs@~jR zE0;VDu9&;Qsd(O_oxO5NshO*`Zq5C4=b-q;U0=7Yt#$c$=;_t(&z~zV-FEKiN$!5V zBfnB(Zhv=nbzh%z<k;aWdo7A=B{VL+|5Ot`=Z(0rc<^l<Pez6ZNzdM~Zg`pR^yqfI zfky1Xum9c({LPa8XHqIE-qF)~?nb+snJic5N%jTI4)bf$oqeaORA}<_+FQ8`I=oUf zG?sGWv7K~y=N_(r&GJt_K9*{((l~r^!Upz*lcqoX%;_e<RR3$a;ncgc>RC3<lrk(Z zUfFu{rIh>vm3@srzBJx*F=G_5`B~pzP*pI2(b4T=&E=ntnopjlL@+5yR9v=p+?m=? zY<;ot&cg-LD%K)tvw9*Nzr@*`n5d90!hXx&ijPS>mf5R&m%_yCr4P)!3=F*rS|8*+ z>YM&Anu~9`{$2H`{qw|j#pS(z9KZX#&VGfku=sZp6V{&S`lWJMFW&9;cTd-!>jV$( zW@I|oxIa51BXgq6*6rej{rq9i{)WuHweOteGIcB0E&GE5Wt0Q<c30d=TweKaL&b-G zQ&xPQ9<P!4=yS-u+#31gPxV&%Fun_TbTzZ)f!K+i4xiapq%ZkZ*zhm7<5Z%{1<phP zkJ-0Asd22d*O<)r$<6KSMWYR0nr(v{WiJL99CbEG-K{oz_A<AHatqr}{$Lm0WxckF z-!>>G^A+=Hn^Nzp84Ee}pYj_v>|#B=bjGgD-Bv#v4WIQ&vdKw5SbXex2yc{T?o5+) z@q&q5lN4J&@2b1<>gta~H*OxUj8`_leM%;&Eh!dTAAf7>#=PFhy<0+Gu*#faHR+S! zR&iEMU1PD-X|3d8_4dO%)~?}E+G(?3n`ViX*e!!BrHGx~tDXe1a4h+%rW&)-_Ku(0 zq?8*<HDR-B6=NC{jP}LcJ#Xu^G3LaDE?rGin|2K?t4nJxx=ijru&Gx(E=RQOom3Q` zm~VqysymnJ19$7?t^r%!FK4&cm0#cd@ay8pu73;Gc{_<5x-OS>PWglIsXK+IwWe!X ztX=l>ps-TNs-5$e*m@<~U6tErA|-3T=5-g7{^XSCqoT2mQBq5fo|SLC-q$v3Yew>g z8I?LK^A{c6XnDM*h`TzXtG+SodX?uMAvK-u;vEYP$X0I6k+Zn}cxI-C{><A`TU;GO zPrNXdcQTncW6Ql0ZZVFJHQHR+c=pc8-y;-uQRppaNwUP_e>*dBwq!3%SDUc#K*xo| zm_W|=1-efboD6iC<C5$t_50#_7tN#^O(84IpnIA|Gc}83HMve}di86bI<j(A&B|9+ zD`(wXd28m%U9u~SL_ezBUb+6)@f}z7_ROElv+0||#vK-6q5%QUQrv-3XXjW<($KwW zBL8vg+b@c{rG-^Kv9<W}FI>T%B>cfShL^o<WABdwX?dT&YZ9hzmvnWO40V@ukvD3- zpk#c}XVD@%>z6ZDnxz$)ZkQRld}iL#$fc3bUKUL5Tw1LYT>Wy1<}#Ka_RGv8en0yh zSyPd4Bi_qS)$2{|fy~Q=@7@bAgrso4JW}_~kB`$_UwxVM86M5c*Um<YrF`!DcXyu0 zZKX}!%PwkXr!8FdSyWeb+0i5}%}gWZz%0c>6CJ*|v;Nk99k6xx9lm`st5WuAo((uK zPvpeinpQQ&^-2d1I)4tm7FG~hu*l?jxog^i&E-M~uFlWQBwwp^&Nl3iROS4t$$vCD zd+N*L?Q0~1r(BD3Pf?0boK?Pzd2Ys?837N1WLEp!voBeFRBXS<%|j9I&#=5cQ+CY5 zt|G0eT;<+m6T!XL_%_bio3c@IZ@yo*p}YGGt1CWdwaV|_ikWp}`s{n_KWjYsxXfe2 zk|*ucpRPU=oWW*i<D!-_Q^UAf-|+%do?FnT_sdvzDlI&1eOzwVk>er}v$7t3m=eXJ z6>|8))pWg+mIi^9I>|RhFHO+3&-d!RBHI2t;$_K<BPP@TZ#&T)so}qLZA4S(kFLw< zCtpf_xct0F`q@Y4T@{KGcPp%RSNLjrL2A0xUx5$@@7TvNKl2)QNiqkljLvj+_T4vi zS*7yIXHi@Cc`Ul=!kfgxV-UXZ^(%3krBmNUy;fqr6r-*EAgeTT&+KU--Rd<Jy{2sP zIbU8KTzWV(TFPwMx~tOaX*$-XTT7nSe!jZpfYk|yqZJm(Co8NJR&3h4c~hJG(=%>Q zP4=#H?aNxTX;t;YQ)=IqWp(b9S`eQ5D#W%ekbjn1rP@NL)lEv9uPBFcX-{6ODZo2r zN$<>ArI-I`xK@1ipE~tUujy$C$$pj4*Z#db7u=GyT)9_tMRJDj_ZBX{;<XN<ysZ*9 zUPa7~**T4SvsU?r#@N13vn1UorYlXIwZ%1bfvfGUsC(O8t#`X_U+r4I^(e!|B$r!R zN*A)0UC(-WJ8SCQtjkxkw%>ZykWs3XySZ2}qxf?6=MTA`PvuRPFRpPcblUnzVaZ~z zWh;N?B^NAYy;!>N)iVA=_ZXKw3Obs=^e7_h%=eI5zsLzwE-yOz^xVU&h1+Uo{0MzL z?TS!u*_|_5n=CwE#?HOEdhXVab5)ntxizj!+q*98{<?2()?GihZr%IUv5#uJqW_+# zYM;{jUC()W?8Ji$YLY(~>2@uf%pG!5G+gq)6BYhPlcsyJD8?(E=VWl!t-bb@Auqfl z;ne$OwRaz^eWz>7(AiO5Z8$@jBY%3xN(0%HHB20H18;qNdr!RKj_YGvxB7IhW3NS9 zXJ|}5mBZ|_)g!{CLvy*~9L|bAEqkwAR$$XruwdgidaK0x^64{|ivf;BB5&0XD82N3 zW31|;#XoKSKmW-cI}BVH?u72?ZB$V7Gcq_ZmnoaU$Ff0$he4XxDe||&{k>Y-INO>& zz7euboimZ`n@EVz$qB5A_OlqJ=G+abeIUALVdB?)Q;s$+Olab-<66IK&fQPpEK+sO z4_Xu_ocdtBQJ&|oM}nZh4hEKY&W{os9QYaEd`~bHREgAkv@>-2hOLYnj5nEzPx`j} z;s@jRg3&=UnzFSEa%PA{&YxtmNs3=idH%EO>aC_uuC0f77AE)wOxdXvwxGz|RBGCB zHO;KU$%|y1kFl-NZ)ywK^NMx9wDFHKH6?$U7Cd0uQO)|eGeNP@MctrR&Eap#C)Nt? z8IMbDX!t3Zm!8=0a!a?N>LvlzO@`WCR?FQNY8+9h4_Y#>@2v15#+kPQXINPjI~LB1 zvYEZ>O8c92J6GiLN_zQ7`8Vg-FO=byvVY~Tc&*O&wg2KD{)?abB$xOnuk}~nUpudD z&!qDYIL<z(ovZj^zT&Bw4_AHp`ZUx|O-x$j^kl8KC6kv=(_NPQV%gz++t%7l6g7S1 zcq{0b0*isxxrg`8o-;b{xVtfRt;{s}iWarEF&Cdt@d-6ye|~K13YL35-GAmX$3FUP z<oNI1|F8<aKZ{;J>5-7Tv}{shX4XB{eJQ4sTQ8(t{;)>wT)k-1jGw=wuQ?p8ZQXG% z#NI97q==KQFEhuNO$F|&Yi?YctKQ6Sdg<GIvD)P4hQZH2@B4eq>%8kU&X$|EFV-x5 zH=RrALY!OujKrsLVYh-`zG}%kowamL`IR+nS=Ssc^7Fn35r6sgcK7*(1=roSunVf+ znd<fbsL5|59wpAp23ybN@6ft(XSIe@=KQzQGh1(U&38@t$dL1V*9Do#BZ_BJde^8) zFZsUC&8oe;c>bvcn%$dkC!DMQsoLaqH}meSii7V0i}H<f+k2;<zMrRB7UxvYoBQ1S z<n^=G|IfD1IosUG^7NY1kK_~K^MyV&`OjV!SkS+x`;?L1J>B>S52igS627w@lumdz z+l;4GZF#A@n67l^edcOwvHXKNt2*PC{hQB|**-bCMmmk>w~5%)rfrkAY+n3iq4t&q zrw`2uZVdCvSN_l;w{-gv$wHBfmdljmw1c*B-M7BAP4|29ETh>*nveDxtd8q)xvwA} zEwo$Z)b_P4?S1c(-Bb-uKZ(hj&T0Q<^`axYnk}!p73&6Wd1f@p&X{X%<kOeipRL>8 zEtG%2=J??Ul7(h`o%`)w9)@}SJbu*bNN%RohOF;LHoTVEWfjqMT&ihm(p%F>M@t^h zeKC1%UxK7p&dMIKIfvU9i*CsHrD68)fb2$Pd9Jfx8kEC&Cg;ETDIR%y-NeL0$?j*g ze{Xn_{OS7S+7F(E*43LjtKaaHSo><;oSA-2K8JI&7vD+SL^u2BW~0uhN5Z~~6sOJG z=$d)Y;839TmaOGP+p0cESNk1`7y5Hozf7+yI)C=YD!-*A-@WV1*}D#3%Y3!2)oUSR zQ3u1R=TRHGZ}~3qot)4c+_rS>djDv-*jIl7Sq1(*nYof#_}FLTnZl_vRop)_`~PG4 z+~9OkNZ0rM-`+ES9otiu?bZ-nzhTaYMSE^=WHDEq3$d8U7{apZ@sot*!nGG_1!u)n ze|oL7+)nTPJ#CSKP4D*>I^2ksIwq{$f8*ojeeWV}EIxkY^I45`Cr|tik26_(c$3Id z#<+i*&u-CPSmNV$k?V_z&JMACTVC#!UTCbD{ph>dkC4EUlQ-l(y{R)#t2@o0pDJTt z?|;tKYoqvsh?0Xl-p>w~`g_7AvRd~3+_isGug@%WO?_<lv|n@n+2o`@wW>vo(_Y_a zeYpD4p?prSrSD(!NmWlWzb|*~>Ac;Zb9dj0sW=k*<om3CaXY=bMf&G{%1CaP4F7D` z_*Lcq?PH?t-#vGIxcq``QJd_uWBc#^`{i<}FetLD{w>$}>h1Yi|7J|9dcfoRD8|fM z(d4jeT7O|m@RR*_E0!0&_`2xZ)5a?gTra%&bWSMo`_HfIAHI%#@Y?y_>)`jV_n!@C zn0{rN2geWIR+qL<+a%ub?ktd)c&d*@X8zd+?ro>mg~;p-U@+SFYMzhK+@y6b%U<n^ zk-B|-o<Y)9=2jiK-@WoPv)a9OI{ni>q4LW8RO_UTB9kIt9bdJy%kt1e6)E*sQ>9GV zoFk={&)OQlyO!y|l3D4udY?_+IqBxC=eyQ^du{u0NtF1nx$mA!JKv0|=c)QLKmI_< zt?6#e5A*MN*IwRdB-y9>pGW!fPBUr$RAZTc%Zif?rz(qdIIa7AJ!_kbp}&^<_iJg4 z>_24P)|IDkzm&A!a?axN`h6GP>i3>G`TM~R<1g>t?tZbgJ$(Ay!Y>RQ4omn=BV-#` zH>$aRG1NQtIXZ~tgH6l?Wos3#>3sK?8Was#nQw1rNV_c1x#_&vf(6@+1?SCno6&!C zhT7c&qVdPyeNS&LJ@m15hfGp&?F=Q^?!$4Wwlmty-DVurVDRG6S-`=r@I!A`zylUu z&3K*<g0G!;lz#pV61f}r=<Ii8$I?Fe_cvxgc4}r$3bDHP+qute9_NJh4rjPcEDkZe zIP9abt>i?i?&~{TeI>$A_tzLEFiHBVt83Wv{o{#v^?HA;g09eRg9D{~mHUe}pZ%P; z^@O8U#pB2GmA)lU+W$%B^_hBY)q68{n|g)){IfPu+oNoP&40f9c`G0K)wZtQ8no%( z&wt|HOqZDVy!>_e{O69{OC@*$Jl<B;9s1+@zt!DY)@p})nyE*`_UQ&rI=Rn%I+r`T z9q4}Tlm7ptk^Y?U>$i5i&R96-Q~qU+WW{OSJ&ERXwZ&uucE_EP>~K4gFneb5<~Xeg zCxa7AZOgNN%Pd=#KVindxS0RU2Lm2I-#7ih+lP^V%P)VrcG|vFOCo_Ul_Tccc0<iZ zuVcBtp7}WN?q&TaY+8`XuDe#3Q{>TKfx4yc%>mc8zYq&e`*Or5a--tBwz}mTyO~$M z6aV}xaQ9qU_SS+bp6r>y^ZZ_OysKRiI!~#Ozm(HGS1dn#?Qt&VsAp}T()L_CcB$dN z%Iv;XGuK<R9=0lt+|l5C{GsF7$jj~X)_uM+bEV$lcdNx)l3BHypQSQX)tt?YT|W0- zT~nX*{WR9O>NoFws9CKSoq4it-)H@G6YH<@zTdj*jPx<46D;X1Hs@l6Z^zs2Tlc;$ zCB9f@#)ch5Gv<YS+8684VzXX<Yr-Cm3b*~@bs<4Hw${A=)jc2WeLqhmpv*~Ca_9Wy z*k>Qp4@b|sQJ8bg=|$a-X^$%Z-w2u<_)qTplbL0z|DIi`H;V~=@$<bz`-O{AqU{f5 zA1D4^YaILFY|gtA$G7aex!$Yp&5YIOy{7$Pkcs$k_>>yMi>vl?SH9?<;?&u*a|&12 z>d(9vjBjb`ynQXdxIEG7vgNHyuWWZGZ8T?GyZ7U_7fRyI2j<mIzxb2Gby@Oj-+TY> zIVCwxW%%sR9<)5*;mZY`Umwhkc+vjq-H{U=cMC0Dq`iFZ9139JZeFkCyTR8teeII6 zd5@L0)ZX!3B6iF8ht$q3E)%bZaoMs({}KI@(9Bv9`h)e4_Kkf{Pli0$6xhjqbhSW? zSd?(q>x+Lqmw%|e{ixO?LqGBH?Ijx?B`u!!(7%3nx>Cx<Gxu&!``Ud-cQO}C`P13* zLRzKYf(~21h%lb~<g$Kfu+@Lp;uithUmSN87%x%(a<KEMkthGwiHBp@V+33O@GO0k zsI$M*v3TjGY#Xha`y-~>O%quD;K0;HL3U3*?7f^7UQoy(&>i_Z<be6rxtFHc{6EYy z^<AP!^Y>eCxo%$ix}wQ|yIN0pLa|1X>)J0jCW>?l_G!i${>k+TnR_?)f>+l5sc!<F zKX#wvDcYjI=GhcvDJp9ztSDMzwzOc`gsbyBZ)<347f0-6S-i~Y<K?wkehjsee=R3J zy?v_FW{TM6>|0)<dY9vZo5Fj$7-O=x?h$tLeh||d^<zg{%0#!V66d!snLJrm<CxRm zwyHXn;;DWMELfM!?+i=zbn%(o&R4o`<AJKXQ9M(B*=l{`7pQxjlhP1uXHmBMoL&ms z(mL@UWp?Wr8^YdhPn>mJ<n)RMGXGrpfBVf|`ujkJ1oQ1r+gxUsvCnt?fA*cej!cn! zi9<pCl}qL8uf&`=**dL#XOqUWen)2QwL$ZnCpo`a<l4QNV}+-RY)p`6wi4%|R|k&e z7_`5bx3u-sxvK9L#s+>jezdMVH}{-){6U_mxCDX!NuCRfH<kWpWYlf@o3iJl*1I6# zUvbR0+Fg_N&TLim-LfobzWECEqOA<pnG@S*cl}^k_bn!NSx?!5WAZo67w)>?G_Ub; zt*Y(q=r`XA%UzdDciwr-#I5Jvjx49dq>C|oTMphV`MY7-E{8komL^s$O}m^~_W8s9 zNa0zRd|zxmcklEG?VfCJ-`>r|`{Gg>=5xCro>=xNaM6|Dk>|KBeY?5U`|=W=HEq}4 zzMb@wue7*o&H6oWPl)%*e%Q+DcfXG_RWp638jE*_OV#W5)7&OzUJ5k|KQCC_;=Dmm zZhH2cm*wvne&^i2toXvii#KYHvBUlK!iEX1Kff(Fr|)FXF0m$-U+iCKWAQf5cb8@a zFPU*_q3wF14f2xOY1{RMCfz<i>ssuI+#R6>AI0tF+B{zV-m+jlzxXC&#h6&BiJvlj z-fr9cW6Q2T+|Mq?D5c~t-nwg(#hZ(_F6F*|uyfb0&PO-xRGvJTv~O3L#@B<Ji}&3= zxHz};FaMd(zxPd8eE!j^V}CcKpU>T%eBke^XWCui@)0*QTMBZyLvLj>>_5)=ZDn5W z@7R{>{8owSJFea0d)RT^z`wtE&huOEszcsioW!@`L}-fN<R6P)u)Pf9pQF?Jhw;J8 zALbD$|Ei{>tI8#8VP{f$e%(3n*O`E$hx+CIsLXSne1C1j7t@zT`#koQ`J~*_ddO*g ze$TqR55K?5+FXsh{c>yQ-#YfPyGi{v3r;Qll2NcimD}d(YU}Si`IB~M`(7|#_T41z zr<1o{{;Mtd%ef1Gb=BXmwO;s8?d|sF`>#!Ter_ogm4CS1{rk=8nAfdR94s7v_z_d^ zXW3kpysn@7!XeMVa02TTyd`)Fe)`vFVTQ%6#}k$ua&UM#L2OC#l!lV7FB~t~IA2QH zx_#GJdGW5YtJRXFOD5`NayI_1{eFMP_rDM4?0--@uUKTt6W5lr2?t7h_BZ@rv}{>g zcJ}M{@A*BN{~u1+Eqr<Jbi;kqjrWFc*%7{R-^C64!Z-h2o>#v5c}?!4vh)W<>5mFi z-<RjVD^7k~p8vG|HAnS^=GYoeYwn(XznS)b@7njVcjx!cy}Vu(AN)HyJ5QcDqob+0 za{c=EZ{EbL%#6s$vh4J*>T-@d_()&y#OfVy+Hb7iZMni*<(1;<n$;U}7O(lWW79)_ z*<UvMA8lIkY~hlZ8yCLbSiE8P?&^Yqf}*0Lw6wIs!ot$huiqbh@VtNF;)@>_-~5?> zbm`@T^8J%Pm)ncyi-pOFUpF&@-MRh!dw*Y_pP!$cd0F0f{`Y+S^56UY{QdRyK!>>h z`}g;EMO9&Sb#;CH|1V!ye$@ZdKUmQHb^qC)_kXMx4%*@0pca#L^wysD3wP*S^t5Gt zu2w#{e(Gk?*Id6A$A7%7&wo{v@7U%2?g83Y7q?Bmx#d)E+v{$(%auBAo2E*29pB_~ zhkshTw3k|gLXCptI<sT!P8zBVE|Po9d0P@bR{pNLKfjK1Q_ZoT6XW^}_^o@z&Q)01 zFo%55H<!y@7nN0bQE`g!$0&c*sgLekrLH*2%RFhx!++dq5B`aq@%O7b6|CLd$f+s* z@Yadfe5!)$kBeHwuQyICtCja%eeK!~``}ffiALA1m2hm|DDijIwR<&tTFUHWWV7>s zZoVe#<*@u-qup=YDSw__u5f>SG|G3O*Sf0o+gBetH6OlJvHV8B$zq-Z`UcSo|K3V& z>3<<v8_w`X=)>aa>q@r%efaO$qk`N=x3~YdXga%%@34~i!Y_Muf*5{3+VsM|%6|Gr z)^>qng@X^H!#pk*Fnwj+9N<-5+ZGVzS^L@JQ%6v-MXlv+wkB7Rx$?RJ3*tGRKW@lB z(jh+mpIbn?#;oHL=PQ^$Sd)KP=do(5(V4|dt8=agZz+AdEqLp_dwEAb=ke|J3w%|1 zw8x~Z`<E=c=qBgX2O?8NQ%{QO7%Z!ux%u|lkM}fh|9w@zcmHhe!_RJ<{_McOu%p31 z{49e}oQu;#J;UR6uQXc)6kMB5_FR0s{dSA8>y*nq#Si*7{r@T|e&T@R>+*MpH%3)m z?O*V<dy~2K3BQ|~_G{klu(Me6@Z-WQ=dJXbWmM%KJY1_f<AY+qQPK&{HLv1$G%lMy zoguKnWOAL#jf|O6@;2+_D^4G~Y9r;88n*w{?`69xS?AAPy;c1Gy)_?Gj?7#AuWr@? zwRdi6leMcNMG7bV`0)DQjy{FBHEQ2phMV|bxqBd^(BAIgW-n8dl7DBK-!*Nr>+F&? zoa!m{Te+}h$Ge-63yW8;N)>y%;o?t;-|w_TcCS%+{;d2AxAT?q9;uD1*dCa>&U@*~ z*QtNE;kwXn+2`MG-U*gxi)Lj@o4Pl9`Md=)w!5FKIb|r`-O?%PbV|8q8t<q4=vB|e zUL5*ASNG;StE=sKA1vRfY`FVAc3m<rU#`i@z8=eEDq+((7ckx5^LJ0C$LYMyxn_&6 zZL)h(sl7?E{6y*YcCYe%xAk>b?z3Kz(`js`maw4Z;VPxStM<MWUhq`aXGNL#m4AK- zt>&A~{=9!vAp7k8&keq_PBnZK3+n8izt>N`fYE-g|DS%9Z(9EMGXB`?o>QU8&9aBB z{-sjO=j0OR1z$Rh?oW<;r|#rnc5&hN&==~jwHqw%t+nIa6|8yc(8NO`A3m}1Xuany zE1LWFA?K81ZB1)$@?J`{yrIEan;mz#?8(Dt2An>h?1~j$?KAjt?)Pc2vkS65FA5ag z?s_onm(4aeVfEWOAG(wDb)T*j)m~OP#k>B!?aPoQi&p*gJry8-nuBYZT(HBcN7s(? z**d={5t;B@;rGs(&c!|dMfX%GOr7sn*t@Ye^0;CGOTy!WTll|)ua|x)%Fw%R*Eyff z+s_~R+%l;wdHp$^8b-U+_rG`kjrn7maV>8jXUDbfn=)(nr`<gt*dyWL^>gFWQ_bIl z?*6l>ob|x9WlzxO)s6q2*n~b)y<?C%ciZPHw`M5$NiPk2vHtTG^)J(u5*D(!G*4ar z*tU63`RwB&w=LcIR*HRI%Kv|Z*xnN}dNjp8D4kSVWS)G*fVVE5U$WTlKw|TQTLQ~w zwy~EBr@e1cJfZ&G)45J$Z)nPEwzS<W%)6IX^!0eTtc{ycyRSGr%x}t}$@l#@YxbNt z9I8FF($Yv$an>ZqnV}WTd*`~SoP2eNn|rS(tF_6u$0pMD%T8!&_^Vs)zIFRs!1u#C z+`FwTyI=J6UR%C3e)(=evCri~?)6{tmM-m_?0)pd+e_m0=Z`9MKltH3S+3~7oujWG z{`$Vhr&i=^@dVp-Dy<D%=kq<J0`G<^R-LxfIlbcadG{=rKgSB<>=v83WWKo^Z{Bz2 zOw`X^hU;$nPtvNgmtV`Jm8RX(|4w7!_HXi*9}iAs@_zk^<IX?1i?4SrZ@J;+9VXhm z_JK#+XUUoBc7Gh7FABDQ(<9(??(NaeGbV4_+eGU70ySd(S3c#gS!o|Ib!q(mb*dZN zR;8qrDK0iy`EJt!;itE=o$swaHLa1sx;OIf#GFZA!nTWAuU&L_X)TLqOR88%vf<Gm z0VVrmMB}?_w`9z`y<=(arc*alpT(_izizo?+vZdM&5jCGl&qcb-ftV@(mCrB)3zJz zJ)yYcYxFzY$7^0GpPsiPWTnjG*bm++9;WA>8^lf*%=~S8`l0OUD=hN=Z+pkDmHVK6 zx+FJh_oJ1?_lu`QhO;PdRCPFaFI^<7$h7vR<d<hl=DR0Oy%n{j+i|Ya!3WcpFqT*^ zSs@oW{|hIRZ8h8JU@4<%`Y&!gy1;RH;fwjp^%{LS)fC-6JH!XGYkNyPIyvdXj30>? z3_2etICWl6=-vIbEr3VIVS-4brSZf{O<%J<HD!r_clpb2crwW<-n9Dux-YT%`Go$* zF1)9ew6@mSE{Jlq-8bjp<CK~IT!Upi^1YW{zqj~L`3Lsk!aHxiELi+E`QBWf<rgzr z7k&(j?>~@m`uZ#RYjc&CyyQNr`J^PYzFPL&8gH?#m9uT77yIh9$XM~!)z;ZYRetF^ zDDdv`vzuR*J-YGoY3UKIh0|-Kub)f^`u%BEjrVNPUn%Qm^75;?FN@f9r<nKup#sg7 zH%hm@S#x3P)fp~!E!-@J72+m*JW({uDJT7C{e4r8d73eKiJ#}T34F<Ah|J$q$;mJC z?X%iJvyYmp+Vgkr*E?(QU)1kP*JS^nr9$&IRvpOM@akH>{ngX)m#p5I?t61iYv*ol z*DGd{E9)X1zHV5);-cAHxr(2mZxa6>mXZnZ;ZJ_$VPhb_{=dexe_!3ECEuxDe%7Uj zA#C-Bf|S)4|7F+x*|qcU!yBsmYAeI<X0sief7VE)RncYsi}Q_7UoPDEoFiU+>G4#h z1<8{S?M`I*+2Qp(>AY8B%LVldlV>sY@9$}lj&;zJH@vavd1~GMKMG-6rnZ-#5ZRE| z`uuHcuB(2`@18w|2WNkoV)<Qnwg}&~5`z!we_1!Y`|Z9j?~G6(gWZ)7sb>BI8v`?{ zuF6C!Z7h1SHT_4)c7uzhca1)NDR}g~WWV2+w`!vA@+7j4RQUfslDR{z*?hf>)8xs~ zil-H8zwS%C^5^}mrmn-6AJ=~~dLYWPBEN8pvdNrf_mkiDt>xeR@rq8V=(acQoWiF! zoa+{T$Fi<*P8&<5{9)a9!MPFTO{SB+hUmy_xX={;Yp4A7t%<zPa>8u9!*yh=p2hj@ znsdfY`dN~?@2=Zx=H$2jIB!;(80ENrYqOKB#olz?y4Du0OvfX7616QhJKIYZ*S}u% zpp7NIwWDp{)oYJx>vS(XlgxXwj`icTpL3+#OxI>#$$mFYWreM<;(FDul^Q9&>W7>j zu6@-bt7cVn@z%y|l5SHD{l6Qfl%cVSr}?T%q;>>@c}&gm9~TaL>^@PW<a<0$&ufb6 zm&H?Cr-{ZS9KMsQm{fDlu=x0@@N-{EFC7odmetzA%DGwCMJ~xLZ(47e$pyZezApuJ zf^v)WbreMImI~kf`$cP+yUH?u`)5CObiF);dqt{FzuK8E9DGN*V={-YKF8fV8}@Sd zpA{C#|1iPEu9#8mxEMEE<kW_|xcYf_gx~si&ShWqF7L?9&7UkzGWoLe^w>TwY}{6T zvarcMSt0GsJLZoL9!z4b?miYeA%-S?^X+{uzP&GV+h?!9NhNtcBSyX=J>f}8Z;XR7 zQ<RlOk3BHvkMGcPFfQbcDB$hf)2yy>TWY_SaLU}vc1*6a4R)NHU1uH?UVG^5ksEiD zZ!B_IJSi#g*p=-C6KmTF(^_h>yAI_RwCdXSuj_ab`bl}&<66e1AdlOpV%^!-9u1pu zg#Wta=Y|i?DZG~!89hAtI{2a5qwTjYJ2@Tsl(zE3mMg7S#KaOEkA6ABwj*I?>rcK# zG4iVxPF~T{wd5+-GJdzPnXcPks2_2hW81cs@%`l8Pknbx2=sjO(tfRlqLPR8l9kz0 zHY!EFO43SlHSjgExqH&#_2qrr_QhO^lloJ3`(W*jAGR*(Cv~N^_6NwhEzwWgn4Erc z%EA3hB{^@W?(IJDD&M!GeS@OdX7&839zVV=y_mRffk6H<gLl&>#+~Sh^k6xkP|;o8 zvVCnw_nd#P*7k&Fp5y*5Q*1H$WK#p{x|fa~Hzq4*Us^ro3FDp(@5}nul%+M=MNYbL zv*Aog@3ke4U1zL!uh2QV;?DIAongmyF3ALC*zL^!xB5)Ysckh`zx&<qhbpBst<d<C z$@k(?`avH(t}VWf=Z=Pz?`E~UeXV!)mNWYvsqeS6@~~gm?iIt?JzreBEB#ZFZ)Va< zkyF1HHKop(`N8<r+Q4@Q&d=tV-+%6)u(L*V_6CD}wK2vK-Rv66dCc}{AG)lsuy1Oa zZ(zmM{v+~>E(!@cb2MJ&im98wbK0aSF&@)(RFZc_UEZ~c#nJaBv!LJlcL5C7ghV>C z3wLP$oo-@N$1>42Tu1Uw;pxK>{5<I_M|d@+%+yZl+4FWsiD=RS_6p9%zlR?k(kPnZ z?ln>8SYZ^$WF_^fMdvq}Nt<Rooa@edOYY~a9gB8#Ja^4<HBU|TuPiy}eUZyHFtId# zx0_4qW~2Rw&PLxBkSyf>$Jdu|rD?;A+()0Mc)fN#yky0c=K(vEl@9*2c|ScviFYZB z-71SG4c8y8YbaT<>eA+*pv|Y!?4I4`etT)J&z9xZXZEBSZ)yv=xaQUL#SGu-`GmWU zEjT0;`nzqvkWZ+)Q^3!XfNs9ks_|9DQzFxs&vlA@$hLdsY3|j@XQ~dTM9hB^c7EBR zV;AG(jbiWrySAZkyVFefHH{o^)kJ*NUj(o$EIKe})3JZ=n$|vlxii`OOq3IUMZ5IN zqR{ISTRc`zd0Lf!TDMqZ+vmGlYXpUv1(w%IXg++-aVX<RQh*G{<r43UTLK?$F!tf) z(7rc0kI%VL%<1O6)fbdDG}+6Vg*+FZ*b@GG%jJ%{>MSc=_8Yjk|5*5t??u2=srIxl z`GLP4IGa4IOR_A?zLfFK-ZFIxf320{=Qlf}H~GI<Q=8rA75&>OJ2Nc0vO0R{<DlrT zwb8nv)q5kV7bjZtuW#?0?p`*DAy+Whg|T|Zni~wlHx@FnoGJc!*rEDlTJfWG22#3~ zVs|g<9P9Z~+Iw)7r%nF$MVsEaHimhd^2Z;Q_urh~QTpyj>D$y&*)8R=x}|gPl+O*S zwHE(f_A}+j+gtB%^M?90uZ~))rtsdnLh7gQ_s8DNd28%%F&yQWD!FU-YZk*hmQvBp z)6f4eeSK}B-G7F#bJq_TGwoTzo_Mvk{^noaAI--Oi!M3euu!je<G~iyPmBj9_Rdu9 z<x~o8_xmQ$c(u66aN+V4c_G8zCc`Z+5B>^v5M|H|G*{~vY*6lZx-ZJn$mss{N__aG zE3C;ME`9el{G!hB`)*?4our9UM;i)`9DMvzVVwkzFHh;>^d)LnLY^)9Yu~v$d#lNe zmj^e-?d3d_aOBu`Ch4wsLKA9a1)eZ@oVotMRMtjab$3$G{UcH_DH3Z0*&ffGG)X<- z*y~JzqNb|{o@k{vR6G|FP%4zj^3rQ<{K-8zMpfd#Cr6!c`Y+e7UC8<}E~YJTjmreC z2-`?Gm5B{MpBQw7v2On>an$F_JMZxJ0}gN9XSmHtm|N=OVV-96EyKfB^I*H8z~>ph z8S{(Y@-O)E;?Vw$rLR8ve*CDr_@nIqk4N^t`Pkg|aq-iSlj|QZ?{gGddi7|Cu(b3X z&P=`7^#`|K`L?@L_)DeGrftHe>sa63p0iNU(e7LRzXuE-jx}xAkzru<<h~PY+1bbI zS1ga4<TBgUV@h2}>E8S$YZmRkxVTyB*1fV725dWwxcv9m&Um(P=EKP|RtnAHiR93A z++w5?+EKW(IPHm$o{GuF5b?KLwoHCqW%Kpa$4xb+7mOay;*H<z9k}D+#XH=*oa-;$ z?9SN8@%8TGor@l{E}a!qcg46=T;k@OxyxtlexGnm^2e(T>3<ia1&Z~a@BA~za$TgJ z%JF@xm=^2*(KVV8uD{xOWtiG3)dpLZ{by^Anp=BoE={oCD`)<?qAYR7p}DRn@4R&7 z@PC-(nHK8f_pQ%yp5W$-&%Py{_}FtliR(hS;tH>2`m4Tro}6-ZPgVCNrcl$#IeSis zPkfd<Vcz+x(>Ah9w^{e9H|o&dlau}!h2M$V9Jpo5rCHyX+m)~CwExdG(Ni#x$Nb-| zDMyns&z)vl85EOq;>4Nu<!Kj|1isg~R;@2zGHa`S_>F+N{5yhv&I_kWSj=LOT&>FP z8EhF~$71nK)?{PbGH!|W$<~{>GXL*66{B6bIWBibV(2W%DHFArxR|YH?);TgbHn@h ztT~NIm*0hWP0fp#`oY=bkbP;S`osk-Vr|p2R)wk0HIj3f@Q=OaQ|^Wd!Om%XHiG6$ zUp)NIl5zUowvZ1gk*_R+>PlByEq8r<_0Z`p>t(iC-plxXpuOP#YA?6H>%A)`dSAYC z&HT2Sq~iAPWgp&t{n7s2i}9*OtaaaN>vR3q*?L=c=S|uj?^9;WT)vl+d2i|CA0BIu z%14=RF1xv}I3?F>gO@~|<bu}Ytew86#QQZ8DlR(RmvDOSy6@9X=R{w{mb*vn50t!| zv|C@uPgpfJGA2-M+c80*MU!O@^l~P~ubZ@eovKyI&X#rmVt+g8w@>A^3w`0!`oOV~ zcehQ)4<UiMf@LyReHIQPcm6-!yzH-{r;2-^!j?ZSn{2(4W;f(ny<0H*T9s(5fs98@ z>hEp$ZN*lno<H?krL<;N0Mi;P&Hjx=LQD7E7jQp)>Zz4Wb<$4R|4qGRt3L5Jyc7BH zPUQ8=%bM4g`hEJ_6PcW}{N1^YfBDS1{I?Wx_b+<${*;wrje8B}%DbB<#fqf*Y|J{< zR};8b@x-Q|54EPgF?3E@G3RNfsfNPkB8|PL9_(p%Tg|e!g@3OAr`3F(2tlvC6DF;G zs<tbkZoAddsXm;`cYll&%QO7zw(Sb*O|R?o>tCI%+$%Nh`mU89udbP2`S>`4KkFZJ zhYZidp8hv-gPo1e*uBVJb@_~nhyDArYc6ij4qSf!lj;5}Z*hZ?mzn!-W@a6@q8Pr< z(Rw#yy{gi*;J)<%$1?9HofUn2_G^dU5neI7vS(buD%aUsTng{2Jzuh8QjGa_HPPo8 z`(JOd>z?&|MdyiQ!ansuv(~n(xv}nS>bXCEL^tF{<epO2?|xi)wr5tgtHu3aNAf@Y z+pafz-f!PN>u|mFOpDJG4jeyzb=|hN4d<7I9KU^BVDGEWda=+uI`#hPCfDcnUO#_x z{<{lD1Dxaz-v1IW^jBr4uh9BvOSP&a>D4kDV`7eIdmor{H~BtWf=90xql1EwpWuf! z6LGWF30ayqV$3G7_-oA0&DyI!rRREO_KIx|it}PTkG*)t+?-^vH_SAv<Hz?5i~S3X zm!H4#t=}Zcc$)H#*}YX;VszHVEc^EFc+ysxlLcOLnco)8)e@FX)og!hVrBdL*x%LW z+!yD+IJH&tnT)BlZu+Bn`mxqh3nJ^5v)bq`4RgMIm;dzoBT=i4eUh2Cj@5G6PM!-7 zE9#jRm7dde587$Rn<5?K5t_KLwp3=~p4YkiJ{~=PRpWdP8`D!g7I~M7p5LcU_8tAZ zqwe($x%bZDbDPC(cx|~L6n)lgSLtoZ)0N*(-kacFzi*??zh6H>SHAu<XQ6A&Rj<=2 z`*%dnnHTk-H~ig%TMvslr8b`rpI(%!TOams=384En};7f5+4{`En~j(vvP@}zHau? z!WV}sQXGzGZZ%@LQ)}~nK6n1red<;1N434z90*bW?c_Wyyzk95{)@&<YfUfNXYH)f zaE=UR_~*BDd#Jfbk7q$pZL#LEz@m<Gt6naMiCVQPc~j*=wVzt4JNISHco{osmw>xs z*Xm~5ImJ~oHb30-&U5PghZ=4hl;3r)y|LFmHPrLb`VFV1H5**v-Z-!L|KD|IkI(zD zYR<d*iZ$ie|KugBKV}twY{*c@m^P6!<grQKKCP7xxDuyc>xrsT-CuP*HFfW`D)UD7 z=WL}G8`I`q44u^HqMh|^@x$jIqSQQgC!gK(arfJYi*k;!FMXu<f8&e9ndjL#(l(3U z{M9%^*JaAV-6aRFR9@CO`1dGl_5JzsIT62S_uR>xcD|><m~q`Mx$K9B)a-V<>Z;Y% z|7x{o{c|_(r^pu;Aw%9{iH@_|gidzPXx+cXZMN$r*Nz$P8^so%UA&XsMJK7X{DRoW z_Zt+ab#m#fopw^{lfdc_)!X6*%U<nsv3(pe`%%wJfhXG0fA-8xWn*x=zEqZvjX~$H zp+C=z?Xz!hNl)v37|pd&Kl#BKYX+sWl8g(3?rm3AG@AUZ!%3!whk;ipVOPG;U;ir; zvsDC|*kAm+_3X~SmT=9eb0&+b?@!&TVE?UsYSQmRJEy-0UYk7oVCM|2JH<h2Ja$T+ ztjr}Vx_2pNSl;@cvHa=L{XP#@&N}S0L4E1x{YeaFAv-28v_0nJ%6J~P;a$4adDn;2 zf_4Y$T5-Pb^|+?@{(f?w!2Gu*v-Rf3IxpOB_ghu9ar^%4Ya!(Z+|hPFWNW+C>;AiU z&RX~O&+bFBK2E<j>vH{cV<{HDt?%ug>%7-}eCF)d8pZ>Mp6$$WQ;S{WY3SqNSpUv< zL9b4Z=GIjfN!2Brx;8w!c$D)-Aal)q7mkR8<!!1({=M5<b+7!AN&D_F)qmZeRda3M znDi(nW;(U4O<mWc5fNei^ShrjbIQjbB5EqD-^f%<zH9Nb(Qtc#X6q97UoUm^x`J6d zcDw7jxhJuTCmQ|S{`ltP>NQ>tv6){cY`ARpXL76W$2u|DjiHP>T19^rEUmawraR>w z*EV*+U|so#YMc0N{~tQI(ql<KuVmUkzUi-w({;RR4{M)L7c;dzTk-y0|0Ju@%`#`N zC20rGDSGs|yZfe>fnxHZFNzQK?>Xhxd<e{QaIZRApYmlz-YPrIS$?PUlza8&Jv*>& zm3iJlt!K}w{vKX2ljG;y5?$u#<-t-yoibPA_P9D-c~hEh^jv!F&QJ4=+;T2;)NbP| zbI?6}SnrwZ&AImFE^$9r1kb*z#Q#g;sFsBKhGjo2*By>vuf8$$>MgxX_rKos;93@{ zb>^+tnTMI#jIN*CHZ6D2*-}4k+O>KPvxiTn^{08gR=C^~rE6A|X|p>`%f0bJuE}!s z<UExnA=7gG0u!Wz&An&NH9Dul8|SN+#&!3yM%z*mwT;tP8czQIr|O@ogIk~9<_nM1 z&8#DDem39vAoknMiqA7YMcVhx-abX2MM>t4JKvO7Os7Mg6q`ifi2pwI*Yk4v6?;?G z9TV7u_kHa>n=-4$mrwMcvd!AZzSG*|&TQJbIh8F}*;S%lbiT-}uQ8KLl$0HRJxd9x zIp1#n^Gr~&7JDV%SLZoCtx`p*6U;6pU3jo!%dtt1ORUe9t*DQT3if?d)4lRW(6Pv% zVs7Ks*6iOwcg*%Yy?yGCs?V8>o)kIX_jPY(RmJbn{c<Vk#^Imc3e!IBduLO$?*EeI zCZ~V6?A=oPcE;u1^IzqB)Y1KWdD4UQ`(FYkuTD$+r`&)3pO?)1cXH*Y|9`9JJ99nS z`o+a&o4n$DrhmN5B71fjE9xC=KdQ3ba;xCpC9^M?zpVZ8i97PgxvQt1Y&&A{+%%BC z^|k(SrIw1+V@(IAbzgdQ<<hkKud6IeUyB``FZlTeJNw?YgN6BDq)xt5e-)p&zm=){ zzOh^OZxz){Pvu#yp9)*G78<kdHxBi@c;NQ4^wqO>H(sCZB5Yx}?N8dKSbLYs#}nnI zO|N*Vx?--u%HZsnB%U=H3uR@#@0`eHD#!Eqb?fD+u3OGuKXPZeSDt3mnO6o2y~Uf_ z18;JlU&+1vm{St_tiPfsch8%$u2^LKtc6_5j{6+j5qHwM(^J#d!!6Mz)bsvP4<)CM z>6x3~E`C%nwd}*aoV8EtHs-CFcTVYP&C<{+PsYf`hm-R&mtEMJyXDA~)OGK+cXnhS z)ZtXG-n%sZGxNN&zH|M~#d&*Y-^h)7QOB9S{mas)v6bt$-SkU8KW*t$d%-x_+d}he zpHB}vYV5r2fsT{my!;B`o8iwk?)^VUAt7R?mPtjQ#j9dT^)IFR43B@X&X9;;Fi(kC z$TP`Zp-O!3NfS-p2W#$i^^33@tiAu`v7pn=!y983a4&z&5VrY*`H_vUiZ3NswOqLH zJ;D6Xi5_{ebMGF?b~>x|ZqJW--Cy*>^7@qWD7Uq%91BEWG5Od`bgl}M4!Q7VLr(Kc zpZ!bHYk!@Z$QyC+{q>yb>BXl{eSGe*Ur#|m;TzHkxaZkimAdLy>E9J&U<i_6U=U_t zU?@l|DalDKDb~--O*b$$08gAxeHt&!v$$=$p;^cm$&RKeN2Un&dl);&nkH>2ncmc4 zb0lNQ?%k|Q+-ys{uV*+4%uvwPU0`r*#(~QFpTp<yKmS#5|Nnu~|9PsSTb8thDrAUy zF#QoPEiJ9CuC}+gcc^+IukgqzYQ9psTi})@3)X6QT@y)_=6d#Z=d<jtU4P|!%~P0{ z8y8>aR({TH{HArM^~HnJlit?mJ@>AB>R!gPr$)G<iTCeQdFM}EyAHSo*(9H<P13wq z_@v>8_x>X{ZrphDCP#)ZJU;&Z&6_{>E=ydv@~MH%PX)VTecOJC83j^vJ$ugY<?!3f z;k}>Z{EnW}xBmsy%!;g;7G5|prea=b)y&|Hks<rS;{I-4^>D?yuiuZKx;#nBE0K5O zntwvqO9HQcTD`LQ#)ZPG7fP>ozJK}h;Ny?M!NJDH#w<*Um6esu_C*#3H3nvtA4>mq zY^dmwSO3~8;I5`$<-YF2e1En5b9((I?h{(K?3sQV=X37+>p8TiynmgYo&Eat>*(m{ z-Me?Qv$MCiw;$=156_OCBES2|-M`&`=ZEiRKYskUy1KfH(nJ@fSlRg#PNs0R7S-1B z{;2<#f7p}le?Ipg^MAWJMb4TgOm7R_xov@Y%QL<CFALrt|HmP*J!@T2?85|}$sLC; z6~qeKH9FhP3SGLdLWT9?rb8u5_NC}NUU@cSotN`Vm%b&p?_Kg>erMeAOYMc6uT}te zTPl0NYPPpEj4K<K?$N3$FTJs%Hp9HMO5`QC!pk>pcQ$lNPWUNX73a<BeND(mHTQ+Y zv}DHiHM@*8WU89i9<<`9J-<)FVY+<f^!qh?uBN_G=6xQ&QCh);C5HLUtR<lrj*BeO z%(KumSSrHws3}5O$I>mLV2=#X#Lk1tYaG*Jw#G6!uP#(z_9%$<-=?&;L)bof^{m3R zk&&Hh?>yC_{@gWN(Z;y#-mlJ*Ew|*0{|0Pc-CVQD*jUZ@+Eq_Q+5DcT*=6OiLFfFx zh1->v|399^kz^`RbHC2C<5^+kKK`{o&Si1%^hR)}Uf3Sbo&2kIl{P<vN*3dd{H8z# zy$d2%TqVo`91c&E5+>%zow_C%a`}{Cq0mDUvyC6t&OKyt(z@4m<Bd%Z56xijKW#qw zs>zI;;4K&S*aww<z5mC<xMpv**vX?dAC%7(<vpCZ#`Vi=-N>^4YmP^n-F&(}HNJKG z)Mpk}dv5-Fur+kw+~?)r+Jq%e98Z}3`IKnp_k*i;-q~m1QgJ@+o&2*G$9KNV*td4h ziiCTgdOYmrZ@M(&`WeyGe=qr}pQbJqtrl%^xO$+;-8t!7M}=be%1c^PwjQ4SqiXJ6 z^FrTic1tDq-rrPi|Ln!*o1wgMTi;I)UHG%!?A)vUe{XL2u<KL$=dY8F|2sde_4$b< zVebrX+U?Z6u=emb=Fd9+GE_Q}gl}57l)bX>bKCd!QT8{XH;-mSZ+Q8q^8Uvi)7zH6 z+QF}AHtUA}YLySCjdS{T8ijv3UH3Dg{g`i~%eIDyh387IFWoM=M*oM5^t){`JG2hp zk??!sYV&i8x|w^X_QfRK%}P&sw(Gkrn;{oiryjgSt8VI>!q}W?NguX%Y)wA&{(E-P zP9FiwA|d;uuiS4Mek=af#CPLhcp3X5Znhnq-&^aJf8V|Nnz6mK_&t*tE+6fQb(6xF z7W$tHcb1%c?)r<6*@=byjMEm}xmLn=qxo7&<R9LKhBcSmHYsd)?si;&DRR1nvUH4U z`+~%Vkmy30xHs1y%@5#{dOo*CyZMQhi?l^t&wD-pXSM>`hpR$D<i5vk_Fl8aL+0no zQ~L$>*vvKk@qE&bgz)0ZZA%_hmUu?>3hc4Ef9A*Yu074GckZ&tu-vss<}vH~|8vg$ zFRrcJ7h7EWwY}tvJbNZLL%>rxfzO2sy-|!Eg*(`lN@ZBO_dc^=5N&7{nA0Hq>?c!8 z`q#%=PZRiV^_zH|s{L~F_(G1Y{pO~>KfU;~X2%=urYCE8UrHy1?{wX`YTLn>&Jv!6 z+kfgm=}r!0cCyX(D0nZs?T%8bW8{_%tW2(^aRMw>5u$<oS3k5a(b!<WaPlPPJOeRR z{%=Zr6PN9J-J^Ke`C*5U!1}#1$+J@?F*K{XsCbJ-*qeU&^C;X&A=i*y<mUIOQlkI+ zR<c(mr~H_nv8UQ~Y3B4~jT0K@PVTka$?@uw#>Bd*{))zConONvdZ%5P{A5kiPxr3R zhkw1@e|ei-UF?-Zr<Q#CSMxbb?d$JrnV~nOx0c+VFll+uozO6G_ic~AM5ex4fB8pj zFUytX8Kqe!hmPOYYuzlXWyIpNFU+#^Z|>o2=L6yIlY))}<t%sgs@~soq521Z&4kLG zdpGSmy?<-;T=lyLgb%7OkNli`rr<k+dhuQTWgp{S<S~BTzuqN($<^a;R_&8+k@hx8 z?cM*VNxE12gO2(qKenH9#0u}|g@@ge7M-~JXQS`&Fj4;pb3A@c;@XhD`r2MejwP(q zxsK0#cfzD^+0Hu0<;#}*{jfvQV(t-vo+;}toRpYroAdN^_>b!;jz4BcHF-@AKP`8= zm{ar2ukfnmueYbRbuWp$|Lpcu=8&mfx_mR9IX&{WewDxDtmR*$&s)6Ks|i2;`C^*< zt;Jz|Q;(%BNqZ<`^)c(Y`}Z>%)o15_b2+q6Z|MS-+r0J)_pjXc3E4YM!uXSaI3vSM zt&q=$I47SmSZZ@$b;s^p$=&n(Cbjgvoww<fu*7q{Uy%#{#HMjhyrq9LUDwt=_nGqM zt?n0#%VcNl?JRt@R9BlV*~)P8{RgL>SuJS~*V(ATzRrAQ$?l!GU$+(Xipy>OV?F!I z#>H`ujqSJ9T=RQn)3^HL?PF_VYLrXo`d|4m`B>OGJ&(H$)>|6`wuWB#+O<rl*DcrJ z@eeJRUwg#G;-yb5PIEn6bnp0+c!nRx1b<9X`@r{F)Zg8|vRD4$zNBZIt5;l-H_d5H z`G5Jxt_bU`yw8q)Ry=ufSB3v&(R0T)U0Ks1r?IC%!{qZ6>8DOp?__3lFP7c4cFWh* zHJ<aN+9y3Nu->*y^A7*Rr$Jpw?h7Oid`VPr4ry@{>&Ttk%y}@wvh8l+QlSG&4+XDX zbmvH>gZW(1B_&%|UJh=k&z-in>XCP!;mciXzb>!S&?xhbF+HK1JVA}=NTbx+t}@+4 zWxT39>~|~kw0~P&wPO+Kdi21BAt9Kla}HBt$VP$C4?0|@bQXxj|J@bt_c*U*--5X} zWK&)EE$R}dAM?-J_QGzv`=7>U-;TmL=MKEATe$bp7K@pm=W7P?>`i^J$0)V%tDm=a z+}{gdt=czjS$y%*zXgJGro}zjXFvUZ&EgFO6XoL6j_f(U_{q(4CWZ3tSA~SU8!g0V zUEV$YXx97qn*SaWzfz{PKkW@+lwoz7x-~}kZ%;_aTETd!+YP7p|5;?!-f`P5T6s^6 zQI^3^>)QH#tUqMU%fjpR+9J)b`}VXxZ_K~DFUy<px!p~hq-w+N-`lhgUzd&iXRDiS zw&vHZH}jkhpZLDaz1X^K{_WnSr5h^K&VNdBxpaK?r%9W9zpPs9y-#q~ZQHtty`SsS z6%F2cUb5dcGfw&b+icl(yU#IV>%OXf{2#Y|T^`>Ii$7&A6YiKSF;&?3=IW2HmopyO zXs*`zzA^I1hVEtBl~=xZ>7M0P&)pdNx7Om&9dCX6=eM6{bzZCczWu5D`fm#?uRl4T z|M&aleea}KUO8iGJEz(<_))rB(9x*^d9t(iuK!hey5W=auUR%zFO+s&-gC!z<A=Wq ziB*T9D|fDcdG>Ub@J(0al(RdZHN+kFSMSoVU*fw=KH%!D(hW2Iy4~OA^f7Dx`?|i6 z)VEiA_aCs|6=t;Z(q-MZ&+By9YfrU`u<zaDA#VHp=j;O#M-n7T=5t<M{NT0ii{Bdq z*2iAod@%UYdihz>x-(qQD=1oR&SRD@WcIDAcCKEr{iU}3b0zyDOziy+@9xl7y8KS@ z{Q0dv)0gDe9@YBXVJC6z-y-dv3D^Hw2zSjAw|X7i{@BU>@X>#589DQ%P8dlAYPQxM zUUffv)3rVhX9Kg=ZRgt-X12)BZ;_JVihS3y%6rvf6{qrsZF1M<)ve)noO=7<J`+VF zFU4P(d7Zk7@1ys|?Mi;M(CMLI(j1QYW!C5GpE<YjrhKTV4L^2b3J;Hw&{Sc`Lq{c- zW*q+c&}PXEgI!m&cj*}KT4X9Ea7vcf{MmHVbzM)AfBv0vRw^V;sUqX~rC%Md6OF~I z6|YO)d)g5w@V7O)yM4a9(y{q+=lW`y&XuG+HhT8JsZ8K#gkNZjSIFgug$>JBJ@)zd zdeX<)KFhxPDB7|Gp0eKe>(sm1%n{2Ijn|~SNQn5cBF|=ds7tu~GL48Mo`>?=BqV#w zXIDS@TY2HKrcR@u$}cs=k9_);g5MN6<z^m9m{M}zx>HlTbEj_S)CouY{2o<IIMeFW zCar4!&Ce}G)&5box0r&8y`s8(?F6MBA3;+u!S8+(&v;GD@}8);#72Gj0=XrpEER)A zdx9?BTX`yS<*Gd;I>ll9&lP+ER1(^a*Ez1Lb~pNZ<kb~EwoNW_4vgXZC%Unu^Z8G> zn0G58dzFUz15e=_H#EKlY6o>_RNqzKz2)%9!1a$dNm~WZdFXJCqh^9+&lw)mQ#{|# z^_)4?lXrSgpK8jn$;OJa-!$=*tjH9LT3A2h<$)_v2|gB5Qb(4pV4bkl$5*WBmYjBg zeDLeUr?E`$1H}Vs*?w8CO}#$Ncu^hW3VWjnk@R432HC(3eMJeUq-T^VPtfA{^habt zPt)J(=7pKl4;Gq6%T1eXah7M%X<x}89g$O0AJ-ZrvRo-()H<-TTK@S;kqvtywuS~Y ze7nc4C9=6^;`>b1M&H*Bt1?zBG@HtMJlgcR&8y@9?+dp7TsAo9zOFX$@!(F_^efCj z@Q-=>qE&VGCJH7@U*l2E!`5%Kycl%n%gsn7-s_*%Ra{hyVo+RrrP*r1nJKcTmMZ+X zF3r7TlHiULrUt)fX}!$tw`*W+y~ZTA(4w2K;p3^<+jKVtWT&$pv}Fr1`|;CvOHkFu zvul)+`~^P+2I-5k%&IH>v4G{tp*w#MtXp`UG5h3)5N?Lp)NK+Aj2;DFxfT{;p?j3i zg2kq-lS$;y`MCYL`jxEuON%rsPq&|&`Fp|Xo@MKpGt?MA>g|w<yP<ufmPfWALab}G zHus9;33aPpbEYg{yb&E|z;XM~jV%n*R)5czGv=@f<;_p;*i&K3<+wcNiP&~yi|<<d z=CNsQdwP*2w5fH0nMUg^*^VkDi`pfdyhX1a4tL$E7BAgb)*710(B-gSL8>#s)PZNJ zsA;K!s07DcNmg~&{XwtKuw9=Pn#8RAkuUPf<<OaPE_}<-dd2k0CEx0d$$`4_-|XhD zeR+BJvi%PG7roT0R1B`!;A>~~{D4-XUq@H*!PIKqw@Ghhy>xq)_Wg_6)pu~oyM6hx z!G5xv*9SYT(mHMDF0=jg?*Drpn@I3>rEgxxzQEyA*M!qS$rp}S2`I=hGBfnAT|QH) zB9HS!@73V7OCOiKUTSzjeV^e*H^ckN36;wy?bP2X)OEo9WTw2-W38PNcL<;K$@~Ag zbZULPS!Tk5D4m$fqY1J+S45aij~DD;b>>V6rv-Pvb!W!3xa&Ws-Q19Q;n6{%X{Q+q z4_|3L@8$Y(UybE8j*~eLCN~#&Y}qE9`uRW*=dPHW>TB26hTiPHY^FLZIDLoV{3!XV zEp9WfEc7Yq_m=+AdfVJ~V*J#^8i`1)w``r!yDTQMo&5E!nn%|`<N9SU;eGqc1SWH@ zm=hFkGUJBwUBiS+hDZMY%k0ja&KrCG>)Mbyk0T1TFCHi-%8N<PPSiDJ3DZ`-a!BDT zli;QE!ZQoy3i;j_?RuV?^Wvq$JDzDBMV#H=y$csB&3<Q8`gig~ON$3bd%L|ReBjDH zc&6^Fp~c1Budi;jy34q*w#<5Md)dn8DF>qW=y|2MO+F?l%`1BUK*`=dlL*a^KWt@w zK407az3qT|hQOV`HNoZ|=N;JHEECKb^SoLuS0~Ulz*qn9zW=T*i3?*FHSG4+m-~Fk zw&~XU+WM&feyREMU6#B%z3#}FI?3aC{(Bkq=jF+-UuWd}b^5$mH|vOL|NM3*zPa;e zfu7x+H7wSzwGHBL7ERG~`@ox=^Lp{>*V+b4%I#i!H28FQcgcm?zl_leQkN>aJNh2W z7x4W`ee`m|-1`Q{_Av>r^f@$fXO?<f;&v;iZ6$~Q_9VTHk5b=M7FEG(s`EwFy`ru3 z!*3onj+tfL<vZT~@;b7#@`@x+?+2H%u!}wW<iBeO6^L$@|69Fd`@Cywe9bRLAKG%o z<ke1=y2BgZ$GdNS#AkfOvE|#P8-A|~`fn-tdj4-rnSXtUwPSDWzT~8z=Z|Q;ezNP# zlVvZTOuPTY@7<Gmk2k;13flg@>w$r6?$?9|A-7%zMfKlFKdmGF(^YnnREvwW@*ar| zLC3!SnH=4uaX@Beo|cX3=d!Fm{otAMjMMYeHqXmr@JtOl>bc8o|4!C~uG!0?X1Coi zkLu;zW%OcKO;+&vhu31}?3t!+@_QR=!R@d0$Ik4zFuU^O$+Me_(i&E>-N?%Mv2tF_ z{b_2p$yv7Dcjr2ua{RORcERTOy58%jR<Y09#Plxbc%9MDCCl&KYy7zXLv<4OjAMpp zL=Q`Q-T(IW&a9j9vx;}kDV}HW{N}|7lLMbC&o6me)pxRWa@$ccDd*S^pHF!?=cqn> z*7w;w^jJvbZ<Z;44`r}dKWUe|Y7=Y~yvUlJMVzf;O5LS@hrDm?JFuzl>6*OTZSPii zIF+{C6TjS8nz^w*$97{Nw}CzX#ogTozc##?CO7@uQ9d(2DbusNvnu)z@~wQy7ci^* z?_2Q)5er+Fu3K|v-;qsf6L=0j+;*nj?`z^rfo~1f2bKETymRh}3jI59w=&-4|FiOs znqNPjS9>h;{6}_|bmGIeF8n4={ib*JC@b<V5p%INs&v?pBHI%oF>kfhTuJ#K$zr=? zmI)uW61cNz(r=#`x@VJDWSD$A-_R-4b-qq_|Ktr{^LlQUtf}6e9a<%M<!N{I^7GHG z#ICuw_q$zEQPP8F%KVSYnI2qtyPh#|Z&>dAW<ie`{9b7<_FVQcPWE`Xr+;7OVWlz; z)#Q7%X(}$YsvrJNm|XkBX=z#8;$PM+*%foPNm+lBOm6bKu2uc)(#o?t7M}Zaa`VGO zt**zP>MmccoBl2L`t#cnpL6;DzwNCq(3<h_^OT9T?s@0D4yOM(R(|GzdB&_$<}o}I ztk*8P)}_;X^b#-s(&d$xX60Sruo3vPJMwp|!ta$SUsi_B@rb(i>73~@L$`<ARf=o< ze#9nM*!;O!9(ae%C|CI8ulF+Ivu^jdO7GtP>L6GDk1wjvcTUl{*wrt=F+FEd(X%S^ zt24e&i~eeK_cOoD^iP*;Quu6iBmJ&^3HhZxRYxU%+Gh`$YpIvA^1hus{l7r{eZl(I z9~Qhmx~)jXE#XUg)+2}KGm=8yFI{q6esbW%@3rnT@~8X%Ix?;L=N`_#S>5SZU;C?F z&s^W9QgO$U=l6Wh1l1EWlwb17|9&6*-qteZ+V2mJI-JLqlwaFqDwXegH2?0$qSG-S z4`(meQjM_eouMz^r9HoceU8Vb=kq;E=bu<J$7a8sqpi)<>cUkCg<X6Wq37&F-`a&H zM_XRqVRyC4<4UFDm8}Y|*adh$cOJXza#?iIPt%E4KRulJwc9wld-HY1^lv}Y`R=Co zX{Y;LPd~@+xlTvlBZ7O9JHtus`A;tUeu`H789$jxejfXN3x4127X17c{b%g^-`VxY zTK1pcF7dg4<-1Sw=D0?zwYnIaXUoU3@%1SsuAYZp3+~Trd|r2%wLj+5gQHyY?NWCi z6=`Xd@W1`oU+<NWL#Vs(|9zJoz8w7_#aeuc{lIpO-52y-e+pZ=pLio|r2W$K_|}A- zYR95J@oy-ddBCerTyeWP$F<s7yN*q|`NZL-=CQqZn}t7YYiU?LH~MFI_1$oG?eL8y z1`S{SGa$B+U1W1rYFjcrTv?8Rfd$((GGjyVX!zyQXwZFdA98y_3OGE<xtf|v%8#oo z*_~KYUhY+1Zfvzw+O?|0++%gmj_-TV7w<p%`}gBH`UQPGb4>L63l%cBf3Sa$_ww=z z3k%z~Z(qZf6YdI^n-7F9*<u)UO++*OTlmpOfj58MJMh!-{?~&C-kv-5{NRbl>zDFh zI`dp!=fg>>564WuoU&(oDcJm_@4xtjA5UgWNK4P2IyE#dj<5Z2byd~1*R%BwO+NR? z*zeM(cTB?X9u?1f^og(7``?o33YWe9r%kg>4Sy>d{x2_Qf5!X0dTZRouEvKRntv*K z-t4OR)o#Ck{c>}6PftsG_UxGe$B|>lj=g*F<MWI2uUnr!pQ-xf&@1Dl;_B+^^z`Qs z9z6K*<HwsfZyr5*RQdbC&mV6-efsq3)vIUEp1phb?&qgx_xIO(sC;_*l=VaW|F8d7 z{BQif-u{pJzt5b3J>m|EY%_D59qT#R<Tl@naDJG;(h_FpzHMWMMca$bXKzI$f6QQ- z>S8ieW>1REOwYAm`7&`<Gyk0|QF33mGRJE6^`|MhdsfD<ie7Dc#T+u_6?a!kh^We> zb5<O_m%>cCei{|=sRSSMzi=;HQb=X;=`!`}QOy~fX05*To<o*TvvTp*&RF-oQF|{d zGX!w+CSFSjy7ucx$`x@Q&LrL~4La>j`}aI5y6bfH?yiWLXMW`DHoSVV<i}<Qr8cL| z`t-zgPHS%^?ArXaWaYsUBmb4Fzt(KM`?Mr^*Xp<5)8bEPdp*tj{`l_36tTndcV*4n zjgNBuv^b|D#K3UFWvPb;!+##uqc5gSD)MG1C~T06`L}pG`_Jb^<wo&OtKSQMdVlt1 znw^uwo7Bk({Wb!PvnNV?aXOPJ@@Lj=Cwqxz-o*!`=Q?aNnBedyLz~6jz07(F$JxyW zb9`=eX-(=nHdU=_-`2efZ3h?Bs&{;0*Ux3~w+VE-!(P5@5zE9dwap&ugzp{daQ}5` zuZrut$9q#&eEI!X<m>utzgG$ezDzjqPq<3{TVMP^w_SxcNwHJdnH9SD%D7|LJ&q+s zG5CBk;@wl;ds@<_WFyn}&&(HR)Gs~RpfE{JulpLCtC;kR6_VR5CM}FyB5>!i(gU7H zCw_;l2|mNj+Wd3LB9*hxmTY>o^n1bPQ-7J7cS-Gjw?XTh^0gm@Jm(*IxvH?8wD4ZT z;VTl$eE0yDcMb31%u-+OKK@va%eyr$AIaSEX7aSBYeFVpGc8xiJNvytuI*EE(6a7t zFZYC($?kq9rz5K#x~o)ny6_+Q<kijp5A0gs?dSVR@5ymH6W-}Jt-f>{`fS|FvF68( z?~5Lsv|@WWXWl%1;oNO=vnNN*i|q|^t=S>B*t<Qp-*{^I^c{)6MGba*Hg$jfykJkK z$;-2Bops0V-*lhiH(^KZiCKcGTXyF<uT?2)WT;vFYWc#q*A#F55W4Nau>G3nX7;5M zWw{QdH2;6AKeNQTTyt~7mTHzYYs=D9xBvfBcUHA9C^J8G(W##FyXJeJ_kT&axAu5i zhGpd2Ppq@&-R^tp`0h>Ej2@%oav!JvxVE=v>DM`befoK?Ij>&O&By)K`O$1;$Cc~e z{!&ZRoxE17G5z1cT}fP@EEOWJ2`~tBwRZhmTO5-k6{5+m$HG`2^?>1DQrY7An_s5w zxLfg`?d!4m`zJpNx~+P7drIV?h!3-jmaY5t=c$JLv-P!6ar?J1C+uk`Wvn%r$Xvf8 znR%Y$sgyU)-<h)YQ-jttCUv<z*C<ku-|=F;^)-bzl}7^|H%lpfHk949iYa9KUKgH! zrv;W~E2nz)G;WWazR;(uHKM%vgW1O7)G401=U>|{T=-GzwCy+ZdjiK?c0G0I@4tI; z-sj?_&(E4AZc5?)>zVA#^Cvv;LI6*~&HLAaZC4cfU-D5Ym(umyu-0BZV_V?y#cVsz z3U$BSEb)*#?QrAq(@~fAW-rK`W){<5{9Vb^)^wqM-QR10$EyOA8&3xJ-2Xkh+T*NV zs!OrD@c*ydkK7Qla@$#0IrsIFo|Qsu^F9`)zJL9s>H1P1BaI^ARqBxiS_#e*G<bwO z>Jr6S=SJ>4{b|O9$en)K^R-exOUyT^*x{!yB6GmYh%wO7Jwv7Uc!4Nmuvkv}j7znD zXGohI@N?zvYd9wHPAr`%nt5x^k&v6u19OFH95f$nohb3G@dy9+bF=T9zEO10dFT93 z%$vEwwj6V+Uvod`%G7ASS!uH7@<D8I_eByk3}rRme|)w1QB5<CxW|R+{=JG}9h2iC zR~=jadQ)bO&a!1EGa`R-o5~&UU4HyuR7UCdkENR46JH8A1!cLun)BB=Wdg(6J*k!U z+qP%-TzRADEMafyR&&_ga4Xl<FP%S){_Q?B-PV<xQ(OC_?48O~M^Bp^{?Cq1GBcd= zJ*Hk;@khy~`}9*;ch$3&$7;M+w@rz?Q}`(R%+e$B;UAY&b<bt?ndND{<D>4b>Z1Hx zKaxMclT!Mc{?TyZ;j`*_PxF57Xj{7S@Xd^OSKNYkT+xa2o@}l6uJifPXDmFIHuHFv zvKAiw6)*Cv-Rga`)T6A#Y3nW4X<6)HkA1dO&!Anro@Z;R>EmSU8&0(id{+ZFCjb6) z;rZt4`){wGb!l!df0g0eZBvwTPE51U2neZ56up%H>iD~2{rz9kTi4!udXi0RP2P>` zU*Aj%`6;KBW4Gqd%fHrdKkWGG^|3DD#qY&I7dyA~W-ywkdw<XtI^J+LOW9dQw_M38 zN;7F+m`P*LzjEm>jlVuje|!CAXIPag@5BQVcX+?=_gvFttZdqISDg3wwhL-se>?Cm zGkSA>?gl@hr&*`FYz0DZr$}gg`yIspasJbZkMrLoyZ@Go_#^wSrR@3=#feJ4u5dS} z+%B7;bvOT}kF`}NU)}5wc~AfKb6mo0MPKK*Debx=KKp0%Hj$;9OzqXmSss|DKC2Yu zV3AL;vgMdjv%kXRdaUBI{)B8jr8(Q8HooLo`E|Fh+Sb`CqFY3dq;F*O(OJ{HX4A8Z zTzw%f*{|o<JbA`mDtv0qea{o+wmJ(Y*Dtzjzw*2EI<flgv-f}YDEP8v(uS7aB#|dV z;mQ@Oa$Urx7kV|SJye;RXR+(XrIw(=S9*(&NEUdWz8fHyF23q+>WYh{?w@!oGd}H9 zPHamoH#q)2WX+zVDND|6P;B`6J-GhbnaLYtCQitkbYHDV_`|Zj{INfcW_&5+c21po z-Ms39QOtuv=}8ytj;yE=UHf~7bI3ir1E2R>FPg$~!qG*s|Ht($YUQn$D_eE8eqZ`@ z=iRGo>TkK}PR-vGCeL3{U-sw2kHX3AH8weK1X;bDoV$d$7-k6EjK9Cd_;3nmpVd`% z1EHfIKb~pZtlH>kQOU}ZvdB^4ie%lNH8*d+Phn+Pc_1N1hv9-_49`)E*g)R<95LBb ztF<bR+W!~4JonL7NhvLn4Ks9od}0jRSBku7K48MbcJ@o)$_3nup2XY}*D`q0lBaZY z(VV*;AGSAS?%&m)5+awjd49fjTu7ClNxhv;S*}IbekqOgMUHxwG4kmgTX)GUo1`7+ z7T$Sp`<&CV|5eI8S3X<tX0PA>pA`xp{(hTne{+TQ**~>2(nVRH&0{W|^qzByLgTV; zn~Rt3yY}_Tld6zY%lGuXbe{0A_QBehd8HW#cJ7M`zq!mkF?;{iGv%|79AflkuPg4J zR{cMTck82&8{yy2+e_ZKzbAP4!OQa*Eq|=IJ(ri|)v_CMi?sJl-Fl_?tNqiBN0Wa! zn6YKIdEeW5^Y@a>cs(!uML+*9+{&KnG4Vr`VA=t{eRW4Ja_vei_#q>9Mj-QKkJc_N zS(QA|E%ooU@5`;)A+zd_xrmp@vaW@jq}}Y&yH?k-J1+iSlJ<bJI?>1M;EqSLW<H+v z^NhjcLsvx{^LCzD`90iW^^F|%_n#Xof3$xo2rYM;Y?yv_u>rTZ9?Nv6c1za#9u*tH zTJFxcaEobY%KQiReIDPR7W~k;{-@xG_R9XxHuHmx7Hzt<xJBpZjgAiwc<Q#K^8JeU zJyoG&QNHEhA=6oRuYNmp^FscTm=AyFSNv%_nfSzImZh%I+^3gzJj$uRWg@+1%f3Yi zV@#Y>4e$K9+w@+-H6t~&|5E9-OK<MKW!LIsxxAJA^s-|fI?+abAJ2KV$4q0twY%+v z&Tnr4)+bwzFQ2+%#=;MOCLOdDF!wa=y~g!bd4JdYM@4H6Tv&68<IOZv&!Wu?CnWD* zxMkIHKl9eMjOMMn!Y@<jx;e#MxMH`bmn~hz$|HN{qR3-gk3CXY^zliKb;hF$*82pP zW(oJGn<cH7Ry1?^<<}2tuPHt75%3FLy7%$+hhB0Iw%V;0i2JVaJkC$-x%b2?eiOfW zO<em$Y-g&5|F!I{1G%35Gf(q=JXmyz{Tu@;TW#Khm_nIf?uWnCC_edVZRe((qV%}v zY4^jqx+2vY3kx@A=I8eW&iyj?9@k^5l^jYkA^$%vtWP%ROlrAQw0cI@s%5Q;w=P{j z@>A>Jie1+=rz%QvJU5A)az=I58IGN2ye6NipEz^o5i!f6Gm$f&{fs+fqbOx_Ei!I< z){HxmORqN`VmZdcowb)G(p2`y*_p3&r%sBB`j{7U@rvI~*|;O6?|UE4bK9{t^6wF! zX4z@;^B%vubY+imv09&T`r4Pj*9eO(dNJKfNMP#D&-xuPp%r=JY4?(*yseAepg(J8 zz2y61;qErqq`!8}{%kY87&WbLU^JQh$@7uza+Vz>F8oiX*xOEbn)xH{uvfCC%KwFj ze;IZiWD99H8P9O*oOrfrxAWDDfzx|${AQZix0S1XRl3ufy*0U7xfQX8*WERlvAHWk zjft@$!EN>-rsT=T{+3Mq%@LFK+)$2#Rn%1=F!4+^hZZNpT$e;mQ+dB&g|N^m4$h1# zwK9#L3#mQ4@$u2^%ge4O_+9AHySt^##zXJ#tGDjQo~Jh&RCR6Hz;XSclghuuu7m2= zHtyG6{AR+_(_h3HW~sD$-fn$9VLyLIcGZ6^t;mMBwZ%TOw}*)8-)U;)`Z{~Lr%;~6 zz1^p54svn7ZdQ10v_C2PYqt9D?=6zQl3Oz~LbpHU+@(_a%PLefGBk8<sHwVH-0?^6 z3xf?;u6`Z9Dy^V<Mt6<Nb5=Ix?s-QqS<GJD8<=eooWrmskk57H@+(!l|C${(yK26F z4X<gJm+{=so;eR(d8RacvEVy7Rew@z#@5+a9&D1GyNmh#F3v|&g#K;XooeV;7N^48 zzue_eaK^V*-$NUg|Ga<g)4cCH%+=RS6XsiRHN%XT`~8b0I~F!vIcL<gIRA!+u63JH z!qPYQow+x}9R3oRRGzxH{`2-pe>bU^TkFhcIZ%;wb^+h3%*R;;%r55qy-PPG#xz?5 zNm;HETci9|kW2n!)}i>Nxh>HJ3u*+f>TXx<<aAuiaUzSaE~9J8`Uy^EZEHge!qnSO zPuHFsWsv%t`-R!m|ECZ6=(Bz*ns0N(ws4zV<@Tu5?YBy{9tw+oJ8^B_lH7Alx$Ac2 zzT0M(JMU)hz1ZA+t8@RIFe{y4+}rc{+L7r^<xX9@dnT_Cy!=c+pk*TW8QERTPdL=$ z*K$2~crD<Vxqks$Mw&rPPy0>vt@@KR4$N4ztX)}LK0(}duH}hyY?t(QID~J`3t#OY zUR@TR9v=QZ>$<o8rq%shW(%;!6h2*f`F+$2#?170|8(2lALE$VzNo@D%Y&_v{VJo( zA_2(;>*f`|)g*FMm}Mk`f?^r;OB)ZwS54bgy=>FT8^RwgW$wCpbHtf1C<ttHDwI6z z&KP9lVkp=0ej!8F@%JkjL|*VDYMDC9DSq%2{}4FkgWp1aUBj<24KDi_TivekmU64Q z2&=NjT7F%1KmN?-q}zYFzcOe&F@C&Q$Wdn|lW0ZUbc5!J2RLMxoUnVqcw~B(^p@)~ zPiFqw*JXdi%k7Yq$04)J^PPMbY-#luvEcaCy6EP5j?xgjs@ATJt^Mq-g^wkt1gHcq zVdAb~n7{MeQqx_FB>Fp?ejlg_5b5-GTCHhdAKLFAeB;`5juO^s4ZE`3duOcWy>IbV z<9qX+^KR20ObmLev8*fk;@#wp*~uUKlRHx$dp0&b)~tG*x$m*0<>Sb^k6)dcqpPiC znerspgmtCs%9?wBJXoId&%Wk#!+Nntv>BVRqi1kp_pJVIv#r5LCUd!N{jTH|$SQj` z<*@ge?utWi`yc<^@MhxDNdY}UJ(IsbPPx3f>GJ2Q%iZa(!jqq_InYu$?@aVRn^UVk znI4np<!=-JRH}dUisR?7Tl>qq_>7v>PCeRv*=ea~bM^5Ai>zl$<`qgmT<E{g@yx_U z>Mm>9pW5G?{#h?YYUh@w_~&g6Ep>iH-Fd|+F&b<Ntm%G<d^g-(-A(Vv|I~6>&&_ST zZ=tg3=gP?edqWa4Hani#sAK!#`&Og#VNc&DrG5P2qp|1t0>jQ1?!G&ww*GE;s-`{b zm04qsQ^9%bA1h?$Om&@REWB>Vyf3cue$#GtxX<!fePzkHT@S3*PqR^ctS`S}zZJjp z>7y1=0m;5ol&33-Yb_HoIv&LFaZhk-|M{k~V!iX8&AE^iTsnzkiAnB$Gf9rKzpuY4 z+Wpi=&NMmuf5_aHpp+FGvrlV8&pWTX-Xt+B#WhL)&KdoxIX=&?b!oZy399~Xdi!d6 zO}JK3_^PU~tZU(~=7mX}2!Hr`?`}tt|IZFzIkQ-7=IYt!3g6EC>iVOwd)}6rOS|K$ zt|`V=P1v&i%w5H!uYO;Rv%dPydgY_Yo@3?NonZzOtADXP|GwC(<+0NQRr6(@OSc|; zcka8j(4w<P-OGA@UuIhC|9Zkdk8{sBc+JJ8E#<Ym)faf5<6uBAgUO#+GUZVmm;PC9 za|&b%uDF}+u)d__-vv!I>s;9sp1BWh-O`DA`dXafXg<4G{^u{3-QVY2mV9II<Nc2L zZWGIVn@e6-uML-zuMlPzoVcQ3%W}yOp4}g}^W_BDXI45-s8~DW^*^RP8xCBOUn5$1 zeC__YtTO(Nx8H0YEwl(Tt?F~Q%htJ$m3^I?%q6w5-Ia^h-Aw3Jt)DG6a~|8Z&rVmr zR=u9*5Z7O;J84Pn!8=Qzv}>%tbL?T)rrSO9mwj`~5N)6K?Wugyvl~_4Ue=_U7snKo zOuxK3D&b3ElTMW26ZVb5-i}YW6~zr%X55r#d2mmp)a9b+FRtC9pVWOSS3j*(5AC;z z%*lzID7Mr{ykqOBs%g6}tzURABvv$M&*^7RRw*B6yni#IS<FAsYEr~?=AfK?OMZq{ zJeqSPR%dy|`H3Ip#cxepx!h%bMx9mnge*Iw-A_ATzOwb-(tY!jjf103X||Cf=O6R` zM@sUK?C=j4a$6}U$et2paqK<2NAh`V@8}CBbhDlZeO_;NXhYHWt$h>!c|T||YBzE@ zact#``|tOkcfVjIsq*G>o7fvM{kS7`)4nXtRMO=;_N)7s#;k<TT>9_0rkDENofmsf z>%oD~;*r-YOY`q8yrmibkN5v~>4RsbA5NDJJQZCyG1~KR^sfuE?&kk$F3Y~}#WOWN zZ{d{k?fT_blF5=kyxzFEzP+vfGWhVt)1P=aZZ*{(UzED{>xtW(CWZ#<tNuy!Ke(ko z+ar?IHDB!a{f9Ak%#LS$uMXC_T_<4JprDj8>1x_qcCqCP&v=`1vn(j9Fxyz>FMWM6 zSD8)$>t4&BTG}cz#W<e{-O{-#`|rbZkKUKwQ|->HH>eo5l&o&fy&^e7U1`fFf#gpQ znl}ddGl)H9sW~`npSb=M+l4+XqGx;*U)R|Ez2NP=>lsIG{f%4eQl)FJ7>c;;tmFB9 zTIYT0bd744FZNk)t{oFKToYig$#O;i%KF}2OV`aX4r3FU6K8AkQR2%vQRamYAIi?0 zda7o@D$dP^?0c{3-(Fi~&7hFrWFjFt+sTM|m#$o&uU_A8@m<Q2z6Y`lrhH5dx0)Ao zLf&W1F7??i>s<t2uk^B?b7;|hX|FY93uYWm-EJsyHRGRh=z-UgK8xyDbSHI1@A;Z# z7OES1N|aCeqD5eT@R}+4->zBwjaq*H@%sL+>!P^x?B=SMo~rE1*ckVoSNZB5i7Zq5 zzlL+x{=B{59P|1&Wu@O9N9@-(TUz4hHq%R>p>6)d6?5<E2r-3ZU;S)kbe2b%<A#Is z^~`BfKbN&^nlZUFd1Juh|9`^*p37|uTJYiSfxaV$%l2KXSkf2setmNE?D>a|Efzcf zHLmTn0(0xX!@1S-C;08%V|VGV)AoxWGM)cl{5&f!!1ct12Pc2uyYlvk?WFjOPygQ4 z6c@kAU;KH0{{K%?-`+OU&y;ovj5}gjeO%Z-`{DVjZN^Lg7kEjr)gAqHrek5%%SRl^ zo0@L6uan5?v%2Tuxyk$OiB;Mjf>LGmzkZzCv7~UxAtzbywkyf+xrHn5I4|ZYbvajk zb5Vp9pXINYDe9KTY8-VePaP84Q4@DETZeVp^lf`@9-Qp=A>FlYb!6z#^Cvf))H<Vj z|0Pr3{A%@w4x3`Nc<#+(%(#4PGt;&m2GbMvoZ2UL@3qss`<7=U7%oT{%zDQl|KaKP z*O!cU*etuUT+;BG-k+TbyC%$%H27Oks?hOBS7E|CU0x4afy||68k@H<&8Tl)*0o;m z!GjlSpB}x~wqQ+8-!IX1(H6@NDkhx%TIwV4_s&+;>D5u0tOv~d)qfREeb*Q2tNAWn zl;K0yD(A<=9KCD-Go~Bd^6V+?Jip<dzwo;=S{Ihhs(%!=_<5Vc{<dXByG>szRWL?p z9P~WB=(OLK*jdsC&$+wp&vAV;!{G0QbX(pEyRyGmc~Y}-r*m4BJaCtoYV>$ZR<E?D z;JW>SXH_p;Q<<w5!_~Aye@6eLBdLeZHn`VLW0-WuXYG@mQvI1L*TkuPp44<r`}L~i zThg;{{S$eA?AH6W1!s>1w&_J&_RnOr&e+ddv`3FkE#dskncK9^)Vg2JW4XU$#YX#c zj;prIgw0W3A5mXcYQmv+{rJvJk)l^FhboFB7QfNfi!7BmbmP;~ci+>3=gY?=T`rDL zjw-&g>e=qufk!WIxKb=uyWg_>?(sZL>$w;9EU*5&j`#P=y2zL1m*0wImG}J45_x*) zjz#I-dw<&|9B$)tvwOJt)JxfYRq+)!Ps<nePv0Bz?&s=@(@jstU*<E;`}BLu&lAzC z!M~qg&S}k?%j|jO_41ubVa*-xo6AxarrrOc?Hr)?(7NTpl2eydUYfabu9wxDZE#H> zG-bZ~#q95FftNOGl&tjd;^5PnA~<csqI-J()|m<(6Uq8>YfgAmN}<}E^b-=t*TyzI zs#9}f$zkGrJatLsckN3&ub+1&O-#wT61l|d^OF6xEDS9Y?%8+#9bvb+meLWpcz(ks zpVw=a%wSIlX?x&spdo$pF4+gG12{5--WDx6DxrJs**D&kR&7&09GRE*^KhGePMhS1 zsH+W11`@It1Vo%|m&(kYn)NFxI_%He3+C@6cEz*0DP|Skc+hg?y49o!>(5@~4t^7~ zJ8i}ZL(bzHg6H13{`;`=!<;Dl5Z@c+oPBStMTD}`FT3`ijo7J`y3{>EldWsZ8mD)` zmO&R^p1<<Qo@J@A@8yuotK{OpeRTS<%sFr+L)AVN6%9AVS@(hsr>eBayl@S=l+XP* zYo;fQ&)w9XcFRrwe<VGOEnV^B{`sf-8`io6{#<zQ{WI<hOV{wcHSIq1sK42CZ|Ehd zcj<5DDE#@qZU3~B>Vg*}%~^Bn!lr*X+`M`2hEB0i@i&(X%D(sSzbbn9EVI{=<!^-c z6#A4K252o2Pr2i9;qA(e_YOW6Ig?X*_LWvmztr=OwVRG^El5-PIKQUqZO3#|c8#S$ z`!1&0RhivkjoFa+;?&(LgPh=?Pp@uNd6&(*|D<&7iG5$+vGXk4GBMg-rP{_|Zp+e3 zPO5X4h4?ca4SOPKy3x@!D>n9a(a(S3SxX-<C6%0O3w&|^r}X=b?R#`*@vQxm-Sq3b ze1y;Kupj5o1kbV*FIiag>F!_lSG;$ewq81RVk%?eZ-w>i_~UiMx4xcqDeCTZUWPWg zc=u3FFGH^!9j8^{;{HK@rNy&)chC5ItL5dNNhj{lw+ef0{&b~D<@SJ6{aaVsS?OMl z+x*8&=9*xgLdFZHFzH`j869_?TrK~Xd+2*y#3h$^I<@?q#TV)y3eJ$pd>wVqp8rQ` zX2+t{7die^amHT1!yziKcg%n7<fB3!o&9-o3tWo3rU;o-&faHpMB}Z<+KXrNKdsBH z{E@sPc+JiQnkO%P;yB+CyeE3Q=F$020|iZ<A2Dz=mU22Wqi0KTP}X)yX8xoY)jO6; zLoUpT+$?Ii(DKooYnO7*J!_m{;!=E4LTt+e4|ktPuiYuSH8&P!uW+>FzbBjO<-26o zA(jcXx6V4nb5?B@pY42diSvv*EFv?K`-*e<m>RgGicT(HsrMy_ZHjjPJ)Q5V<#QOl zBIi$uu`H?M+Hvd2hdcGZ%8oi7K3j77u2|~h=kI0TRZp;D2naHLZ&TV?T)Nfbg6&=# z%eAX+8=MO}xFx5oz5XiK()RhK%!k)4I=fr^CGV$=iDt7_YkModTRUNzoON~o)vLZH z{ofwWyW+s$@BsOC&?{`NO6KpD?Yt(-z%WN1+YT!u$eeO&v<Oc_>%+th5gDgl(yXj2 z8Qb2yYg@Q`_wL=+Q{KIs6qxj4+N8V*@6y(n|3CKb??cP|4?MiQ8+P_GHA-`oH~c?w z`gC+eL_}27uV25IE-B9!l#u^vGEb#vo=WfhCBE-P&(0TJleh3(|E)grYj*u@a{kNg z^urp%*DVzPXXr0y=pR?e&)BKIuXE$ZjhUI5H*ellRaH$*P37g~?d|QIJ9n<Ft?lYk z-)`O9<quCD|2WhA<xlgEJHKzV)Gz$`yYi_2OV#g@OZ6?MTDyv-^S)jF)_y+MYdtNg z_)}4Fv+MSKJ0M@xo?s9WA1^P%Cod^EbJna`^XAQ)J2w{W<fz!#*y!lnZT$NWsq6pO z+2^ObM{jL@US3{qZf<`5`?qgpWn^UJ<mBY#=g*llXWqPhdGGeh$<3cXKRzZVCN3^6 zHumnFJ2o~pHnz5V_wHr<cmKa(2*1bw-Dmzk-S5w_a4+Mm3m!{f)&JpgJp6Zwc}V;P zamGaxPfpF!km*oN*&ZjErO~7w(B(GS%Uq0qxxuQiSG?xadeSz`>UrX2KDF<8Lu_AI z+w4<n69aWTEn9+gFLxeU%+)^Wc|zeCubWEZmvpDrui7$eP59#1i<1M6YTkOi^8Cc* z_ZYWw9&|di(DB8riwW0?6<>ZiAK$Uso5^|gwQ6R;`x8%Zy`KNg^-*2hFSD?m!@`*< zpPyPumAf0?%)NHZYSuUP`i^50PM4d>pPRNi%<=eUseigxX7@ZhUA}eRpWO1F)92mv zVP#-oPPw>IVR5=6$G`dZ5|a*{`z|1S?vrShRsKI+vzu%Dzm(jaoBQQx&*80#bH%0E zA9t`ZX1DQ&r@zjfB(m4`{PpV9x9?Y1AN1F62;%Q*c;3G0{XGwtsGp7*?jN=$l*s5h zKm4vWZT3Qi7fP-c$GGok2;7!BtMKKRevwwe?j<$avvz(>&~7W8P-s0Z`CgGVpUk{j z-Rucx7qEP|DAcioE79Y!mEyb&ObjUtcE<C0tU0u-ljHs3jM(Kf-u+Yi9^26Ri1+YJ zFINTS^7@Uxr>;E{v*zUDGap*_e{3j7J)5|2=Qa&5RZHVbEMgjeZ>*`dclx-NpG)cG zeYw&_X&bikblv;0`TE}ut4glDoou?_yc)FbS-VD_%$R*p{_Wzme}cKzYX9{xu@e=! z=I$PN+mtuz|LVleT}i7x7_a*gu3i?sGQ9uj);*6xs!Ckq?tH)fXve?i4xLOx8P{^- zhw{&ZLtk(D*_?a1<>&oPY&(u*gjQ>r#`}JlaccLiG@I|`%jeFvvg_<M7Z!}aeQwgv zh^n%{8Ijq||4z)=y=afO{r|7?e*f6RuX3{HV*m2YYD0mt&C6TVeplU|Zl>2;chhdw z;b`k6zR_Wm9B!1=Sf1ia-zW7rVnb?qwfU@9NvE%yl$+{(xm$AHU+igLUParvL!$B@ zA0(QyzkXU_Ss<~~c%#3EkVEAJrR`2CCh~u{1e`9r_4v&a4oht~dE-UfR=<0urvhA* z=Ev^VFW>e-eNn~ZONXX0>zFw+IBf~p(903J%0VPorG9DYxx$;)mHbQ{hxO(L*36Dg zIw#Yg^v&A(FY~J<^ZDC%#7Rg$75(|3$xGcg?^L~mY<Aa+Tc>^;zkEpjvisqC3^pes z>%(=gp1io{z}?guMZ>QwuTJa;H9VI8d)^7g?ypO}i1u%uzPq<$JyW?WC*OL0cDd4g z{r=;MGW-0Wf4KK@`Ds>m$Boyw?%E!nq-1%}oZ;miX+CQnhnVwSJQJDgB$~b&H8&X~ z*RQcMGhL{q!7BW1{XzyN>E;^EN{uB2f(>6g9QP?S?B2@6b;<Wa)rv`K+>->N`nZ>y zON%bjJ9ob-xj^2S#n#Er>OAA(3Cb!W3=brKZJp7}y~bFZ<8kKkqfQq23vL>_O!e*k zf5SoIObhdb>5JM97N0(vId^L1*8jP2wWmeu%0py&(xY6gv^k&0?(4YUb5Zebtjv?+ zyB=)1uPIf0c7<E!ijak;<0jtv(DK7)zS_O>Is)2{Jvjfb^Yi=axOjW^lxe1YzCM1Y zy5{-PQ<ncKdl}l49QJYtf8f`DVspZ6&ZIP3ui9BN^PXMUr=!UgB3Apa=kv;lu{~MN z(e_@$ExY;OxnF$!Ge5_r`W~HDG{v(&`gKg|dX~;T-F|GB_P8HPFmhow_wb(}k-O-# zwqizLa8uWXu8RS$nD2XYES+|CXMmc)RL(oR{=e+wYS|N}aW6dOV_P?;^!T%lB5ECK zKG&w3DN72?%-@%0y!_VlV`kdZAIJrUed!Z9_pYTbF8^Q3LCKXe|KeuOn%x{flSlXE zp;>48W%jz7tuWH`KeozrdSiTXsnW#RI@+fU7JIL}7T21*_0gul9;^GdqKiDtb%Iqs zFAsXYEGYZW+MwoI?}JDF_OyR{=Ir{mFKENU$&Dv{XH9z|m)U#Qw>LRv>b-vxi)J-- zaXH8Adv$Y@)V8{*-y^uDbn1mH{hnSUo6p~&`Oa^1#<OLL8;>$H{?iW)e_8r-#@UUt zbdKd%)n)|8&hPEo)}xhm(C4simDCjbl0vRqtKy!17d+**X@%W7K}nhET&WM%Ntry) zYDv6i<#u9SPGaq&hhIV`{*bu4+IdgF%Z;o@mmJDC=o6-M<=}#{)hm<CCWb#=_+jPO zmecEE(}bVg`N$ynr|_tfNBzyDD$5R!sz1B9(q8=hu3qiYU@$@BXRXhM?HfOTJZDq< zRaPot!lJD~bC1Sb7#1yZ7JVZ2%*pG#2EUj?Q)2&;<oAnXc3)76nGlkbd+MnEKNp@; zcZ+;@7CUphuq=9=Tfx=H-jv{XKR`-}cSYq9Rka;*cJUD!&-1<t+46X5ny97sybY;5 z6*7B|f!Ur*S5KI)*kNt^u$=SHN)MgVeBs&ie^hT+@Vnxs-M5sIRTqA4j(+UFde-a% zywPVhKlQv4imP4m!}Ds-+c>*h%ySagzdWw@#KEOJ-ALxYx8k}#PM^&0t(tNB>LPY0 zZAaJlKh}1=7V5fm*!{QP<2{!{yB0imwq&|2V08IS!;fo~ug*QR4?384Xr;5xmXt}K zbFw}jDZh5thGR;ra>YdX%LlfcJS5J=KPSY()2C9+weOP1?dPU8L1t%c>@FVgz2<Xs zp3PF3%O%tIM)$w7k^AZXbn4X1zsml1k9~2N@A>}1ZnZ7KjN$TELM(lZ`?ohn&Ym>) zs=xT15_Qw+W1qZ_u3diax<~vP-;P@Mlw&)CeIGpM+cDv4Uxt-L(p%Raf5{^|r1mCz z1U)ped|ufexG~wK_>s}xH<hzZ7bf@omTq|Ymu;4#^7#w4^MbieOoh|7u6+A_={-)x zRn4&*i`9}J?V9rbX@KU!;&na`mj!))df7cpv7~y2wBAC2L!9gmU#`4f=KD}w=+&`# zxAI$EK8Z?jC0ZX23RYm4*!*g)k~Tx;lThBd7X)}WDsV8$mqp*-dho>?L!~7N5*{`G ziYCsuu=ntS9|ntlS5;23yt((d?N5V?Vz&z;l}Zonw~P9{^nZd%*T;v;{a0?DxcVQT z?f+XHXN1!y|H}QHa(?CUCzofPuW?`YuJCzecCDUMgFU0wm+f13=*LZU6Fw{Gz5Qth z>;0Mjn{uLj%S)wF9-L09U3=8?xaqQYYkH<XTf=PfLh@$5VVlxhgF~BlZ}xjIgVFu9 zbebE7RsM7@|1(U>c3;c=bUim@xvT=WeVxK3rPJZY*BhOd%}dz&muK$xw|$DQ)=ku9 zd^u;8SM@H50$Gs_m&GQ0?TThSXq;f-vN-X6d!^xz)3pZLi6_hpIF2_?W;J?SFq@5U zo96myY|n2$GJm8tfoEPv%Elwpvkl!0gH~Aze$G`DvMD@Z$*#2eNJR3AEmO3`(pOBG z*0Dg$ntRfb4_kY0@T{F9vT|km45!_?`#DzL;SZdABH-syfqOnFCuPlQbvd5IEiylO zE7|bSf4fB!4~R4L@u(hg+$U!8(1>>r`_dK63*?)hz58=g>~GD#8GktVDiS|`UUGer zreKGtV21RMI~Nws-70Y*P-N=`p_9`kYfgVK-Do2r`YvFF&<PH{EaB9`sSp0gW_&Z& z+4V(%gE`MbJ+<u1@7K>iy;xY}s?PalPte`hmrj^G*-^0J>w$gAo?ZD8H>xy^6Z-A? z3iOJsF6&F?WUYVb{!+3<ez}l*zx>|QYnfH9%!<CSM8D^LYQchZ9}dY5{^0Ap;{E$H zzu!M~<tx|sV2KHW;n$~lT~3<v>3BquLT68+Som&xjtBRz3Kn(yA22?>`ANOi1-1__ zmQAbovg=sxa=nsu^<RN-#;oJh-_H^jRxRCi?B2yCJ)TQ>s+Tov4yv#YQt;NCmD#~x zA{5oZ#*%Z7DgSWI(o_WlxrQ9CAMTc!3pRdA;(Y0#&HbcL<->OKjn%6Pgn5rN<-5(C zcmA;ZY@=AsBcb}*cXuh@Ez`XFPtn#q<dUUV(RACxbKMUZcG+vpF}1gSY;;2EsOJ;W znbVG$raYMbLcsQgqHe+3IV^?|A@b%tHymC^=goa~^yyJ$Sq)wxbH%l0+a(ula-8w# zMR4%k{wuDN)KYlLHg@ue?sZY{a*>$lmJsOe9d!7a)AwIB3szNRv&}wxBj0f0qEk!F zw>zCIIihvGEz;5cBJ+&zJ(`Yce{U_Q5Wb+Z>#2g({{E?si?Zg~D^)0;E=l7&)BXPa z!>RR`rwPAU6+dB~@xxi}%ep?y-K!A4+VuT(gXxFX9)9bT);{@W#7>bdCWjSI9c+x7 zx+ymGi-LVy*qY^sj~+GRT==0qa^~OeVxNZ-m^o}8z8A3Gcjfw;wKtwb<~|7gRq86o zAL_V5tue&4@Suv+$?W#p$MW|U@9ilU4E+7!&yi*sv$^jRo@5+$t~Z*ebbO6R(ejFE zer_Es=8LyV-}N|_8+NTQc%u;8Y_5FHX<41eI97+1aRvo<&ikJJBH43G*W|)2AHwGb zZGBPm`drZM7bV`3H!s}|ve&ClzqiS{*Qmp1=JUXhvEDQDQ*X}xzj%vme&vh6m5ha& z_mg4_>vlSEewo4N?j-HP7BG!DR6#OSLF@A5b2q0LHrh07o7E%WmN4yN?X=a_Umb*= zXJl=Y)@MIe61M5f_G2Y|S|Ub;w{*f2W;GiNxh{H}qka5={-tBrnr@~3UMN}oA}*v$ zY^6`Zt&j;8oF4b1Y#)TLo}0d<F=%n)_w7EuGJ(r1-PnTlO8(rc$*#35VXH2*+IAr- zjqmWkOsj{NijGe#^2~Oc^!HHq++F-j3ug<JPTa#LzV_+*d*4zgef`&8D)HlM_@1xr z^H?)@{92~|tGxd0#smMxk~8HAr9Mrc<gHIy^XyB1%RAfI^F{ftC+$&NSC(cydG>UF z=BqfjQ?8p{-;QNEdFqwC`=e_+FUxC7om^8N@Wdpf{NICBn*ttAI;fO&q}}|Z{Lx3k z$HP3Pu6kqUwc_}r1uN&QFqyOL`rLN$?m9Kc)merrnOlvYWt(2jHT|Bs^-Sj0Yeye` zDR_8ux#cvG`MVaZjZvGLeu`;RsB+Myn|CG$XkHAqFq#m%wRU0dciF#b#$LS~+><%O zgeK%<Kj@VR>P`?6Z9ko{Wry+Y^li`oy**L?>WAZ{$P?Ei*W8YLbvbh0<;a~kuSWje zzWLkA;PV`siI;=>PW_#0Fi+kod^X2CC2fzZf)nFcde7lH!pPj=%iOzTccYufKOT<k zqp=IGbUe!GFym3kQ+0J+{7%2G<C`19_XToC*%Z12CPZ^~FgeYclp3<sWs!G@c(5B+ zGJ|G*MTfMeTY3q1`ahmf$7#0$E`*1Rq`CI(I?Sx};AQ0jIs41?w(2RNO$U>0j!tIK znBtJT@ZLh1l#QBu&W6mGXt-&LvX2*s{E8l(7acbyHtVpzm{#oa%uHp$*1x<aPGbK) z&JJ1Me|kIroZH85-(`<{DO~YR*h}TDc;lDumtVbqeDi+#?fIdvGdx35Yh-)!1@6{u z?+xJB5Oz9wll|5EU$ZAy?Z2FPV)YG66Rv2r;xHoviQ8$f_o`2<lQ8(2<+%Az+6B{! zqjHJYlyv%&R|grskUIU&F06Kzt~&P=W3R=$QH}1;_*~2RkFMj<)K{_GB>t>SY>LwL z|B|bMJ5Qc`lfgLU_p`|BDf>=3?(AQ(!jd`j*38{}OeH%a1Y?Ral)HBwFx<iYb-_aY z+hS=;ub#Bu>&BtG_{hV5OTI7WO<v4B>)`6d#;1~ou_qTxY97?T|KLsdzOUv}BIHh1 z_jES&DcqIl-gbA{oz(g_6OV*)lxthWZPFHVjOO)C-=U`audjefa&N-JzZS>M_8aqF zzH_60^Cy;5y522Il?)@77kx>*aN<X_%2PcRL*bntjW4R~opw&MSg0XlyOF7bQ`(R7 zF$bdG90^~v!r$AlH1YA3u--FsTR$psmhcCEpJ$~K8703*O|ShCr`EE9rA%29)Pt5z z(&&s?m%H@manYx%b(8tqk9>Kq^5@x-PtQ^^s-8UwdoB|9Y|0ZwWe%x1qQ3Ur%Z@5( zP021`$vmw5p*G&P=3Yto#<xk1fpKl!txKx9|CpI7UKK0J%P7$nRE(M!Uv=1d%d-V) zDK{=e2v|(9>*9QOK&H{FRp$!haj$5Zf?4x3A{J;0#J=Q~b}z8)e&=zW{bbjc=#}~@ zPZYT?b{+ftIO5sOs{%i>dp}P9c`;PDW97MvM{eq-p9q({|62UV%;}+z{$+2>tSr1R zN&S1~A8zI7pJ(@9>W@_Uv;C!H?UUcXf88vrdnZx+_T2jY#?R|R>*w0&Wn74QE7>hM zpSNgwLfq-!TmrJY+uB2H*v%Z1{#%9fKVOz3V0GrUU(RH+y?1}hm%Hz6_kVO;RsQ|i zHAmAnSE?7;ukl@Y)NZpy+<c$MCr!F8xV;n#>$(5sMO}CHF4pZ8=a)y<#w@?!?+{(A zk>#ndDenJV!`qR2|6Shs^Jm?%$h%E?%Wl5N+~$z)x}$A^=&nOg_x~09$7}R%XVbas z7Mrvz+;{MH_IGp4_dBV3{_9=A&<(#zHdkKRTeoX#r@Z+ojR`$Qmwf*2>a5=%Y%Cl! zXWEju-KQmeU1v{qv7h67-$Zl%dd(}FSS9XHnJeI6b@xJlzt*|A6aMdfm>A!%YsLnd z-PJFxtsYr#&JJHPFL+C<Ra@@X`Q-s60)+{+yUs;RK4{-s9c8xlh>-HCDuq)@Ix@8< z%=guOs(ZGeN||BSm)L}+wa+<h1X`;$wVxEetMOsI$gba#m-h?Yta;_ys+xa%T3P9* z8;-RfE-WaMcYd|Nq<D%|_NO^jqVA{ry-vN^do1Ef=>d(D(q~_H{Qi5(%=^ue?0}tb z*{&-dyfxL;`Dx+big$(!{ob71p`-qDN7jjNOAp*M{qpA8|2KC3-+X+2^Yg8nt7|)h zc~>ePFS~vEW^_<+>&*{Rb7pM&GO=#Xbr0oLkN<{GU{m2qm3{J@{gAt-u}spjXDXqU z9K6$fx9{6|K};&fCs=I-^USXeDz95bXFo{Xc5|Y>eco>UPU)7;J4bF*P0yL!%eF!< zyKUynb(!`qhrJiA_b@wM8saLuJ&S#=t7*8z+_VLZ2lpS8No4AA{u6!ODBrwIWc#tE z?aSD<KV#g^S>LsL*=JL&{KwWsnW;T@-Iu)Oak$@k_~@QJ_Hmo%Ps~5RymN-FLe8q@ z5RLbdKfLsAuKIoHsIQAEo753spChVQFCB|Jb!1ym=-V%)EHh0#UY;;{$I`nx^^TR9 z@r2pz*+1UOH~1;eIhu4Y<?4#9d~LffJwKVB{BpWq`TnT)!RI5~0uFU(#7bZLz5B%X z()yo#F*<*KD=(|)lrZ2s-?z7Xp2>X98&`@K3HX>;814=e-WX`OhfON>`d-^^-dXP? z_Pn#4VP_B->$c|Fw5M9H9Q3U>=<lnaXEtNoV=JCNrP)Wmx_x=gJ3(ciqDW7Vr{1)c zE}R^PRfIWM)ulRJ>r)!dnm2A&UDR3mXJSW4*^)^wpL|yI*&x3|zQKdNh5dfgF(r`} zjjM}7PN{reu{Uqx8hzbmi(D6<IJ)^NU#Qo{m<_*HGA(Z1Y_aE7`Hhg)0y_cq?c&+< zqtCW6C3U`B<xqC|=rj4Ov%4bvzgpe(Q#-LLkLT*;j=6?r_gaGX`IRX4PCoCR6)VAi zY$E5Z=SuOj`j%{z;5n6PJ=_0DqVR$VFJq#QRfuZVtO?RI<=_ju-=BOb(_mKSww=}6 zuI}9${rcnWYw<yxE_1mvt?a+gEcITmyq~viU-XK-am!a~yl#ADzjJ<)^uv7`AAYTg zS+mK#xW0X#O<NvY>AL=M#~P(|m!_TGC(SW$`kd~(^~Rf?3V*uwMJ;Jh_%9)@lXeLV z32mFY7X03Eh1>n&E4M@UHZHA8JN&ETNl2epv-#iO%vHsI^=;l+hHVt+j0xjZ;=UF5 zP@{46%6)}vE@~Q1Sd@Pzp=QG@W$~t1pEW<U#N!s59RB_<xUecVJksK2c(AHt-W#Ud z3mspvsZ3W}qqD^OWWH?Dn@@8N?YHL%N_xH1WBM;6{@&*Eziz7jSTyZsHLHmHP0`lC zr~Cb$E-Y9k*1holEK`5|$FJw}EA@00oKfHmJAZA0%TBY^T0y4T{1;w0O-Vl~^8dk# zPdV$)tXQeJ{!Hh@*XJ$&29`(^JpL_prPlJ)w&=HN+A_=jZR~fe*4cUWO5PsV+fJX> z-|k`TkLZ~-r&n_No{eA5Zu#XtO|Dmv+d`Ic{bc`~Zk0oab}U|!b=KnF4%NGPtM`5T zb)Z$|_lvySRVOz^9NlzgQgOG_0rt*nH_gboXVw)s=5GkRl5xjYC&QXON9g$8>v@wD zIyP;Yq~UpgWAne6-N$u&h3#+Y99H=A(0i3<=JB{?uG;;s^S&&Ye)M}oXIZzr;Fp_K ztcF5++POHT=7y!-s#~|`nrPFrd)GosvrF5q=2qWppBJl9bDT#`es|7noh1L<XtBKY zTw2o)&Hr|LoA>TF|DQhlyY+n||1XO#U4A8{hwi;7{$0Os@|U~6o-XGuY})_0zD%mG z`+KQe>Bh^yEl=@2-}8(6X8Vq`TD2F2tsLHdyZ%`UD_2MVOI~pEiCA{XwZkTv{LjBP z1gk&y)muIP<8*oU#cuc4OBd|ba#gF}v48$aC*Q9eoy%K7lPf<5wYPj)ba0iSar=r| zr{B!?HZmqQaq~ZpJ9fa~%&}^g1Ds0N)m<2L6d3{z>*h&be9m*>%i#>3Dy7?wF||Tm z<>Fi{GTecSmPy&X^<XpleQ3tT<Bui?GPN=`xU7h=Wo2N!vO0IF#HTa!esZ)epCfcp zX=1M;gUhSU4rk*T<@<T(&(gi5>0^Gl;@tK7>*Kx!&I)c-YINNt)yi~o`qU>!g1B3> zzE=xQc$K=jLOK3p=#i(^UWew*=eo!ibU0!o(?$84?(;40IN7hLt+;Hkl~u4_fYreA zRLj!I8m+STudwX)^)~D~@pv~oUz5Qv=4-19H1>XA@!#-TnQ!-s){9E4O}bO}zqCCs zyksi>Y2nMQ*W>eqKe^OCjSeoeD_dCcZvT7bBReh}l^3o{(n-H$6*MW^)AYdpxEG5h zgF<3Wf1Z6X;p+13G2()!V-^MPvae{}Dcqs3)iGnLYU8=vPl`)j8~@xao-@-_L!g0e zx1$p~L%$|t@VZSgBF>+fmo=Vbd!zc=UQDW-eczL6v*-`oclh%4FPAv`Cskm{jc^h7 zfM%wXI;>&e_pK>9Cz`?$owu;E`1izO5w~YkwD-wtcD6o}oH+BWmx#hjl{?2oCht=| zB|h<Oj(1~}xWb;7#wS+^dso+GU22kiePY&$l4lI-XQo$_rWkzB+IK|z^j+DdSKpeh zPLuS{=Cxg=-M;05*n;9!-ARwO^}GrAZFn@S;(1C*<TMd|+vu$OiP5R5udhtCln=da z8?x@*-3<<t@1$Ib`cmrTwZg9d^a{h3vS0IFZrSR)_<D^@K!C&4r{|i#g-?2Qd!4}V z3Ez(wn^;|%Fk|afk@D;<(`?(8g+%Yp+Ae2y<;+W!!YzXOVR9?YC!f5s;_i&AXVkNA zNcQ%>miSn^&Q^Bqsrap)*=O`bvT|~>p8i=qJ?vlkv>)5tPIX6qX55pM`eps%@H=&! zkLSNLbX)ZBRPVlO?)h1LeNo#3`*d4BoeBI{y086Dy8(NAo87+lpRM!#_4xjo$Fi;8 z&b>F^AmzA2N{8Zv1i?0~hZ27_-WF)B{&>B;;CO&lhhW>YNBK>T$3NKYGSFGO>&IgM zQ~b@po72O(|6XZ#%7|WJ5U^xb@6_yx7d9S!@S{(WVY11jXLC2VD8HX#Za&T6+L46{ z2Sg22np9iLWH<J%o^jJ_=l8h{9zK^({Swxa4(kk?y8fo|^y~V|Zolu?bv3DW**WE9 zpT$ody2P!$UUzW-?=_CPomRryuMhTKbX)j|hx5wuU3Tr+lfUqXizPHYUCF_D{ZPN{ zj%h-7PG9DHxbA4lpD?3Yr;RmUWH9Xe&xqJse2vXjsVp%_sZfG}K}m`M%R!sQdhVWX zZ?C7u3o|Tc{g7)QC1c>^<>1BQVl_3bqohxUi-(chlheK2BY#QD7LJaR=N_7l0a2$e zTC%;_dH%1&_wxVx=YFz0KYH=n#YvM(9U7-KK5zJc>GI{`!a`0C4u&P}v5c*HqGvg? zwz254H+?g1>Qi>S{`1g*nG2p5E&b1w|MAtCbB~4oJ-c%CztBVHif8TxU(_vFWA;19 zR=3Hr9gVAU6Rb(%to!(b-}5@7XJKKX1kbW1OO|Zgwr%a&xBjJfV`>k_xftmw7OUHS zS5f<HqWD`$@3oa(x$*KBDw{hd#MLzZtC<_RFD_zR(6`k6%L;ezOkTh7?~CB0o`t3h z7yR0=W?Dc@b!<?5@b$jeFZO0iA1LQ3D=XvU;ra99V{%s3tLy9IySuxynIrCexN-Kt zkBevS9DILtw)|%E{nNt2!otGC&CSfVZQovKap&H>doOR@pFNfL(EYcwbMG8Hc<|xF zhaW$FeEIU_&!0cf9yFBeR~O)LQ4;*{|KIyZ2Pgl_?*<>0Daxg^pu36ro9TY-DNTVl z(muRiKF{OCUG<wAW;N}L2=lytzuB~vx%18|Lm8{Bt~W#!Cl^WQ<bEt@`|){U&fHz+ z7e^MoFRM#_?ZtEAz<W!Vkf7FxohFO-GX(8h>2Tz%!888nT#O-33&aF(Oi)(Z($U)E zXvOJe7P@3s&4IJp@2ngbO%z|0eCOurInS&2d`{o7@Rr@7Q-W$LYi{Lh>$QGr3lLe< zl=)+Y0Q=pVEC;XC+Z?ZKis4V*St)#UYGFpK!D3Fy@abJ48nwOq4nJPia650+_x!+> zE`>k#bETb84!V0WKi4Kk+Gl6J{k2<P@?6&knEUTv`}52Fn7OwvMMR(e`LD=d=VPB^ zwf4V?>{W;A_U!H5V8737PWpw5b-p_+{%tq8chNA$g_~u?3dYP91qKCn)`po~UHl9T zM@yfrZdlnOps27bL@un1U);rF^MPw#61%s{sC2155fD69v2&-C_C5V6;<_I%r|QP# zEiTb@e3|ol9iyc26#byHqR)Ozoa31FcQN1GnmR6@WAEL&+9d86p8OCQ8FVZ8{oDPL z9UaxuGyAG%&CSR*`(ovG`(~^4<IV;*!(%x?`z(%oo$a@OU0NUM+4ua0?Y}<`ZHkRk zCd}Xd^Qu$K;@D5~xq>;Lsedz{nouHoDz-~$?piOd!#mr&HWlAEwXOKX9<Pa&&jiDy zMdN>qw)_wM_4LJx1Us{2twX2RdhNU%&02Qq)TP++vY=fyYffcX=dCCx&0+c<*0pcu z?zh*@TZX@>`~UWD{`STlGKKZ)3vHc}eUpt7_fDU)tLty-Wyku{pI=<Jzv;U8d`gSV z?b~+2q1(8dcU0c`=G^m1x#Il0_vM#QJmRZTn7C`vE6rbpNk@6y@=UjGk1vwpyK^dA zZ~Z>W!}tE%tnuG_``+3GFG6fP4ss^UH#z)zL+w+pMXWV0vL_uyKOK;jnEmV5?V>U@ z+r?bEpYBdR@+VYh(}o|%*6M6}*>PCYYK1~{mByd$sTG0yKc2p1WWRCE=Ah=byPI3h znM3z~uA2MxT>9jh;!DJ5mFJxQy!Lg5zTM_u>|X16YW9cQJuh|tQlsk`&9i@A)<>@Y z=E6T+|8Z8cED%;YTeQO`&*kuPfn}Q4Pn`Yb*xS_BBl+oGc;fGac3Z{1@Ud!pY;Cbx z8M*Xhy!F2Y;hSz2`pY~1PLr?Bmh}(x{1m#exO$?V%ADv|VJxf`OC}3&EeU9y!(8)r z{fB7PtLD?q({`NwsrY2?G1EJ5vLAgtn#S(l=I^<>_~nDAbGxo}SiRjIdag>r<>SQ7 zUe~|XeGvADv0JIIru)<@g_cs4`95VEy5IeE)G$A*&XpTs&iqWl=fz8Pt?q+)&z?0G zeB9x0;t|1r`;TMGofGO-^AF0cJKgLdI*Z9eWzF>I8p;w3i^7>@TDm(knHVh+O=D!% z_}_SCaI9!a!_LGF{%>smGH=!hRX#1BcyQUl1gW1+y-imi90^j+(+!nq-=w%o=Yc^Z z*L~jJUxJrXxjYy)2N?vFGFb-iJUT(X{o#ys0p1Di0R<Ae=D{XDvv-<X3cH_H-90yk zD|q3wf&f-4X{{H@eL>#y#kivr+Rx0b*3_I=U^KZiJL-)8si#4+<&`&x9y|1I$y%Xu zxsGL8cd9?V|EqF4JtUxW$K-vCQVfqp)_;^N+iG=ek9Asn8b^M{!LZe{Hb?UxH#}J@ zQkz_K>9LP-sM)i(2ivRGaLkW%?Y^1ZFMEFd1?Q&$p2a0A6(<Qy_;=&b9<vB-v+g%m zxj%Ta1(XbPE1v9IdP?Ju^6K7WGjDDSIqUECY42eZp^MEScDb`SKKx57-~O+xmwU5M z-?Ngw9VSbY_S^~iQL;+VWZDkjlNpI~)_KM1c;C=-m|8AWe%F3)r=Zd$Q?E83BQdQb z(`Qe!nW?$mN_TnpzT4><XL6su4P{_@DpShjcKzUCQHE=NQx_I-F1XM9<I2?RwP!rn z&plKyHTC1>%ZnG@{C0Zga=kr1naZ~pKd)crWjuLismA;8qi^3X*cEfup4niU_@88t z|F5~yZ?a0ho+^7iyYvZ9?33-+lYT`ezOoSiwC~u;C!4Q7y#7Wd?SIIzeecD7C*BR6 z%e6*4F7%3bOPJ-Q>E7F9US0cMacB3e_ES?#efOWdx6v<r<#a~%kbP_I)~*Wap1aA$ zBqMU!+HbNKVr_yhte)U``tC+8A^!iryO>-aG#E`couPMv*>v8~aJKh5KVC^VXU$L& zAIQcQv2xnoAMX=pXNsKWIHcY2G`cZrleq3D>wq7j*UH^4a_mT|Y&_%2ZyxJA<=f@Z zwl&>xihpNGbWaR@Hm%$4W6LayCznmPwRYF-+&GJ6zTl&%<lE00xMFjIo?I@CEBmA1 zv){~8Ibp81V1H;c(+tn)o{ejhozJ^IcT*^`cjWK&=+6)gf3Mu5FSgKG?^o%Jn-h6w ziv4*pyJgoK-#a>Qr!uszpQa^HWgwBK8Mu(Y<kGVP%FYUB8y+os+!`gaLQIJ7TiBwo z-lhpf|0^^muUp8Z!{l<OS;-+KKTu6dMQ}<0i)xZVi%EmD6E|x>Q^?f@Ck6@T*IcHT z6sP?cKILnZ^-q0~po#<c!wWe#SQ``XYCXNX!o6}<%B@sarnI&d)=o?I|A^FlRm&h) zzF@Axg=hu-9o7<CdOX%$jSTl?Vw7JHrWPz4xaZ@?RjfV5QA{OTS^`#I|0*ygau%%K zIC;*BdVxcATYWAXGG-p#()!im)`~wo$t!zwS9}zjCVklQ;m=#owkgIcR|tl^W?k)m z&`C4<opG<m&b`d>w?Fco=AN2t_5RO>0yn9%&2KJd*PXa?|Do@JTY<~s1A@NYy|n*} z#l@378z-NiEv~#$ar((2`Z&U}45x25E`vec)WM*lB1Z5QC5_4JSP46n0F&wVd& zPc2;iY`)1M&bCYMze@k{<<9%Ke}?^a_i2jK_YRb-jhp2&FV+7WTaaqNx=9|DXYILf zKfHG?YWMr%UEe2fb~|aN;3Jkk^?-3${uCuG>!%j`zdp^W?^R2f9Q86<{J-n=Juj}m zT>dR=_Q`uY{AaH>TRHLm-Txa@_UfJq*d?R0THQGB4Bx%Ld#ReHaqsu7RQ2b#ndk8T zo>YB-*TU4Y74stYOMbc3x<krDrd&Ov@sIz97xAq>;uhVoUbpx2vR7A_|18QnF7h#L z@d3R_m)`D@dKtcRnXcWT|MM#3BI^FlGqm0CO6QaF1NZ&q&sWIT%io{F{wINJhWdAR zKihd1#g@(FezuF_SsL%dsoW1Y^9X+6o%rX;&b2R3M@T4{l#2&sm!0fpO0iQ&7D;?t zw?OL9YTXlmO|G7tH2aF*WjU!s`o(g;9yH0baR0sWJw$X#c$j$F0j;DbN@usM(%JJ; zCHv(;zDvmyr(XOhDw^C|u%)NqT*&*oJZlmh8-1GhMtr$`;{C=nww+T?ExB&(Q^~3j z`S;U2)~)<DUwXLo`gu;Jeq6e_N2+tnEJ=<tr$2n%-{F<iJ56KT&Z8+WWL_=~&!78J z`fN_xk@NXFYMjesp3heLUiiiA+Z0o+DU;ROj%ElScD_{8<eV-WH<fMjrl{pPr>gAA zJ957KcFLPu{%U&8!`pfyx-ULB?(nX^Fum@EY97xrL#-#PtFNcr|D1TpwV*fVO6?>E z7dEZs*1rm_ZL7HUAoJs2Zhw}b3k&0oK5UPP$(k=}W0W$JN$<Qw!{pEI>24FOU2}P7 zRsJ}3Bz{I%R&~4B?Fv3AZe!1|O~?Art6qFKSz)`q(TVz&LvLAB7!Ih2uL<Cp+;`xx zkM$9^6(w_%t`@($X?66DY3k$ruKO}`i+m6LeA2sr`3H#>%d^WgYD;TWSg$|*QyTuD z<MzHUjS8waZM{@47^_<^3o&55xkjZyjb)AJ%vDAcb{$@ysX5`>pKCE)p~17xuHT~X z`mfMK*gAU83;p{Q#}0Pv{B`7c!A3Xz(_8Eor|`?0|LiemDq!<wn<f5I@RsC6)o;@S zR;#2iY`L;&rV`(xrShV(2kuSZIBkw#`+1*Ty?)c&mmj+LvhIbCiPYtmbN^b;9bNpH zH7}X#iJ@!3nRI&}O{w5}Ei3=D{%ks4vv+Q&_WZBB^S<8IUoANI>!O{StG|YaS=+7t zT((W3fAY%Blb>EMXL($}>vbU9eR<ksk%Q@f6r5R86+gN+DZEtckE}TL#rEDiH8+9n zJFQM}@(7=wdn(L**&~%NDY5hN?thyRbvAa=dF#gKbALXKUGQ0N_NR4qPwzhX+`+J| zW`fhd`;wPD+ozwD_Smq{I@TcMOM~v0>VIN0{pJcj*w&@3In`T|pM_5`H;pg!SsAOd zN5HaxNt~A)^A}83ZqZ?rNap$$!yb?@W1gp|%M4~69`30;-1n@Qk`8el$Zxo7e{=rC zeS7vY2O6|!ImRg{EXn6z$jYR$YVMn9?XGO?3i?$+j?N7>OhF2+OwZdil<ZbMQ?~cn zpTp;t#{N8;q4CzwqnvJB&vI0jwfWDR$P`<iuye2emgkBe%$GEs)_WlDGv$x~_mthw z6h-cGpVqi^aYli0K;hMh%GL<B{jHmpaP7AdOK^WbrOA3G^U4=%`8<qolq{0<eE2i< zv5Lcr_vb(TP?DX>X~6M=iKQh<!E3gB-7Uj%M%LY*7ityFK5e(tX~_=DR32@U5bgxG z054|;cOOl8(VLUy1H^+n{_dHrSFZVkm$QT2#-BCi_zMY!)hE;rEcRcp=a9}$^)6e9 zj<1ZFS5;qLP2Zr_vZY`0%u%*&%@d+lh0W)5UL&~V$9I9iZRZ#08F);e65DuIpf%-p zXo*ZC%i5638V+xGR&U)GRxKeKs9!TN=H&Dmj@|4U&o`xQv0O2YA#8Kh)h?YYU4mIh zZ@yL$dEF6ot<>mWX;EY;mu_i_<gT@M<EMyO6nWnBR1kevUN1Q<NTW^btwpW&)RsGc z=S#N~ToY*8(pooL<CohfgYfff<7P*7`i4oC{Ja?TXr7hL)NaM6JX4aT<{p~A@W!DT zInU-Fik!45c^XgE>NVGX-Zj=fy6O4v;_XGR{2zXuwD6hjH@-NrYv+2y&J-BeZ}j&4 z%>8oL`T&Nopzp3xhy8w(uexBuSP^yBI`!WAo68kimn~X0?Rn<=6^#G>&0F^3*{rQ< zFCYHe-+HQuchBe6N8G`uycgbCU9RZX^>tom*V|wl)rC@NE!z|Bz32TO<q;yEYfvYB z<J6ojdB0!YH+wEGsPf{x`+QH9I4S#=#!KCfZ>V%lH$QgZhjMXE@;cw!4^t)7YbNmL zCm3|*Z(sj^tAKs+mEXQAzxQspj`D7Da}tsbw(8^9cAiyNIljc_b&^&3A5QMLFg3^7 zn>ej?=c)zEO6ok_ax?c)``Z|qyL*&g9gfa@DfZFOqw1X3ulrYOKI(iqexl-_cGbFF zc^<JdR$IN=>YY~ReBf2>^MEyP>io~o5SDo@dNNFMVahYz_>Nhc*QzrgE-1LV`eSs5 z^_}-Y8<;2E^R9ZTYMj1VNR>aJDrdRuj!Q|q6sP|Pa?jYT8t1$6{C#alM)5#hcKi9l zc3Y<W-2HUxmU|Mrb3Z-QQe+V`-gQ%A-nE~zTXl@Domm!h;zNArQ@KkExBR=fG`}Gu zGre=$b<u9|E9SORH$xAbh)l^8RZXAkY<#6$Fj972oP9^Di1iD$ls)rbbN0Scp885B zEa=tQj(77r3wL(0<*RqeL?8P-Yv0+7`n8j{qzE>vnHNu+%5mE4>_^_5Egl7%CluV@ z5>qDq_R!YLmwPrv9;;ye5pZzv<9hGt^qwY}>UU}OclJs#^Y&c4c)UODP=AKO6l1lR z`o*h_Yu)a+-}9H;xyE(%k(qS|`r1O5>4z<vukAXm*y6(No+)RNUgq4tezxrXrLJVX ze)r4&I@d1cY&udtBStmP^jGM|@=qGc_meN?u9<kbNnS1Dm)JSs_WxxZua0^hbB~+c zul;vsRf+A=LzZio*{n^pUMp(BdwOQwqCY*>w-Z;XrW7xD=h7siF)w-59OH#%pIa|p zUet8ENjT^K@}+wx?Dn&Lt`Rz&<>P0bQ|YU}Uw#!oFL{ml)s*6;TaUK57%z%{^V6rf z_o<FY?zAP@-?oM~Pr2itfBV9vX*ut^-n%edjqZPa$6UNtaOy&jPjQ-D{mY&9Z#ca5 zn8EMuUEls~Ih$;?f6?k$<p-7A?o@`n-}l-5T&M1zNo{8ttZi9rqO4blzxlVdZsn|l zh7I#WZfw<>-GAq*J^zWz*|X)&{ItFD&HDD~mbZ8FKXKn*cksakwvf0;CDvOvY7g-A zOMm}oyX&3VqibgS1Sfo0Y8Z7V<-^Tq8@{gZblAzsd5fV^@O7|Lj_aHP-)!;8Ywbf{ zsyzReG^JX+^3J7=MgG%v=SQhti%QYR%ihE@eOr6XA*H~Q-ST^$vd8WAetf%4{<6=- zSL;oB|2(VRaw>iMuN9q+4_?Y&>|f1S@N1v_yvu2)<L_4ApZdk<>ypIyxFh$?woep2 z^G8Omdg?5@YX&|dH=?%qef*RWo8%jro*^xGK_=nuj1Onu-OqfTuaTRh{{JxZ>lw>u zB;7r{s^BXN_emRZ>9BP?8)9Wv>~;8(-d8!VKj4tC`#jHo0k=$+8~#3>nILiHp5~+G z&*n{H$9Dv&osIjgA^p|m$uZ6?`3GJ03dPwRInj4t=y&oGne&^?r%156$4H*F-MW)+ z1559*7*oBtP&Ljaz0D88o-Dp}?N-6xnX+9!ek81a$J@0udRp-DU6UU+e@tH-_~W73 zH;p%2Gp_VqsB&vsE_OX7yZS(tvwZX~1@|i#j>y{{JF`%3=SlG!``5+aS~I8c8RP5j zov~AP9+WMq-F!lnP4RZ@G}FFbQ@-liqS5v%*{fyVCC|9-vDE7E-yPrnu0HyA_UzgN z+pXCb9A{thjeS#8xud7ND<3=i{|`0RKeaZQ?(Lqv`^IGXi(hXTRB{`IIaru~o_t$; z(_!^@)tAI7BDAYHda7*_=Knp;W%VNasc!HjsRs*VPVYOa;3q0{Y`RA6{ORdT)$_|g z%@DkKtg_@vwzQk$rC*PxypMi=J1y2@#@F5FTi;)byE<EK+tthG`kh=C{f^f8_I#o0 zw+Odxty>?|*{V`1)7QzSzw=IC-=X!qJ7{$g`{Y~JEL{%GOTK01ykm=e{f^=8mi>RD z658J^y}RmYsLt)A36HNv-nry@XzgzKXe0i_kMiG+Uy6U~8^<e|`X}IQ=)zyZ8Qa>o zzv%n>CF9Li%YEHK?OroFI^Nk{l5UHAs4=JDc<S^&p&j~c-T`_|ci!Fdob7vRwNA;` z6%XYnZ~Xjr^VNToF3XiX*!?$X{toxwo&D>Vzg=Hnw`1PpQ@iKA-|=s6$zG2=ar=rl z|N4=3_g~uM!)L?po%K7;d#>bVT7N}xL3_oQ85K$XHoqPAoKTJ{6Ieg3gJHq7O<o)` zrg<x0E^yUtn)W$RV)eyUZakA$#O5!%I4g{4d6B@&+{dL6M*HK|vEBOdesW3R?Qa`y zt4Xg|F7a}D_uh=jzJFt$9*_<)yR3Vd>1>6bZ_mqZAJg~FaetVTX1(lbT4-6V#OC^E z@j17f4!n70aXM=G#h9}?pJP|Q*Z;qzeRK4in<mw7^}eM>zPY`XJ??&kr4GNq-G^Js zw`|hopa1oEv0dMT26;=qrJc9FryuU0d%S3h{e;4(xjTH`iN1cC`7~ngu77Jbz3q6g z#jbe%`ud$$<|o(w%i5?r!Q)tJ@yE2S`v3aM*7fe$%E8azAoym>pS*UP^Rr~WGI!s4 zq9>rZKI~2JBi5FMd6!q~&Ts3nuQT@B?#RTT_cZXbvp}<!fCG<-A1{N2Vq|uc%*NGj zjD9MLs}h95LPZ1oANEJxS@kvhschl#ziACSI({rR-kSN*-R5+;{I`o<{_<Zg-REDt z-nNH9!OBnPE^k#~{|~RLnH()g?$rxkHr>1D)!GSh*LaS5RZdDe`DEVi*`jQ-CbX5W zm*4#Kg%OWIXzSZdE}jopZKujypKxXJywa3amnX+^O};YyzRs%4;dkCoH3{fjzKB8N zA3I`(;s%?mlI1+R)$8OL7^)Pp%}|(tXDFtHMvF9TYioCNk)5K)&Z4QwDY+|n*KTRI zU5-+1G6^ddW=rha?HDEa@?G8%#|Lj}{~fb@e>BSc{@v~Oo<|xLU8;%qVZM0%LLS3^ z*TBGw$BrF4f1ZDW&`<u}k8uvK9q)W_JoUu!*c-=lj~oxa3cLAg{-n2CC!XHB?(*J+ zx2Mj1-`x7XdFlPdxer>SUsO7LX-@yrT>hrn|IXd=8;j+2)YRA-9Yn;%uV1@XR#Ku9 ze)X)W$=nuoxuZ*Em!!nA9*aMkdhb|@&9St2^=EI=MDHyTySGeP-q>q9m)A9Kt^U)m z{jz8I&$2%6oh9EbJ@1v(d@Hv1yV`bv@8CLq{J6Th`t#?{!^6VN*xUV|i_d4Px9>fF z&;P8wkN&-Ly7p(+uUo%9KPTtSn>TOXzn7PlojYfa&D!@iZ{_FCojVt@Sq-vNZEozH zyLWAEY;5f9ng7lIKl#F)#DDMqeYyWJUfrc|K4a*PDVwhDv{l^keg<#bs?Wca8swiC zr)Gcpz1VZ-n`v!XTx^dWg#xD(ZEZd5+4E{C+u^OQi&x4#Q=VB=dLmx3W*xit;nJh0 zZba}+neXzj+U4hsiI=oi6&zc^<QmR=yR#~=NkO&6g5#pPs7sfi+X+YGSey8C<H#(F zRjI7%iXD@_Et+`h=y}!izKXL>^Se}gHZN~nbXSP`(A2{<Z}*sK|C_}p%eA7RRi<n| zN5R}8ncS7P|IXDG^j&)+YQKGFP`R#rX0FAYwPx~X!*a51;&RGtV}4$}R<i4s?59tA zgQ`FOd=_wN;kEVOrgh)_$kZycwC~#L!<L3|#}&7{V-c%l_@~HWzTLKoOM%0tO6b>f z(M@|h8H4KNK63A}oSS><<%?haIyW>z^GlLuZ&kR{zhY}b&Aq)_1s0e*uF_aI?QE6A z%g)v|mS;?ds~M(>zto!8bN_7-OGfiSi$B4S@41;AXLy{(^S$S6noj(plyaGS{~l!h z(T)05UH`B;CfV@i^*fe~@f+WtnJjlM_@&U)j(Cwn>*J=19Qx9GDe>g39Ni5jfBU!H zF6b_>JRRcsDluhJ#E0&=ChD7a_pf}Xsb6Mny7pQ5rc}3*?%*D;r(H$0VL5Ay53Ss3 z&UEEw%>>JP))Q9=F5r^gdq|{6WU_DHO=G#xc}7*Q-BT1Tcd(>s|3753VAb?`eg91# z7p%B5v+|$9#w@nRt`(={HMLq5KlWv<u{qE>v+L2l)TyyKPo{M+K0ErCt^M<t@}nx} zQagQ%AL^)|jn@38u3LR#)8uQ5k2!bf9DN=T)vzh!rrYtg?60C9#ogeDeR}xV!(Y35 z`F?Mfi)s6``QA$f)~mP7A1Lz`DsX?ky`Y>)>iMLFVQky%C+OK{imceFQT+OimLN~* zg-h#~s-EFm`&9PMt;N<;ZT*+N`I>xV<~P>(FRX8}yTTUb{xf*^<Mu)Jr=l`e|0^V} z@MULM$N5GFhAxnjbe*;~{pl~BZ{GD=o7M{&`Wt?oyy)4|<JY_Wn%9_n=WXsYKOMKb zFN@)T97o&XBfD#Co;ou<oE-Q4{%*xj+G$%3Cmy+M@Y(u-iBVTeZTgdjef!IH-96iz zu={>@1-s*$#h=22__>Nty$Rc%RJx+jK;nM@;|2ZV?}gj`Iy%UF@fLGvH~S!*;63k? zQ0~^t+jsIel&xg2V!bmjr90_IZ$b5q1&42GKh(cob#LkWvRQjy&gOkl-`h67n~{Mr zbuPn#WzQMr9X792+9z#0d7;v_^WQf8pA&TZf1c*WMOUTG-+w7j{yd+RF}cW4I`2hw zj%<@>eUrh#)&!>8n*}Dg>Q%XRy~wu+I4riO@Aa?6N_#cJ&T9+WEi+Rrd9d_DsF%z< zqe~|qym&9rwm5H<yp_9Kc8mPaj|ES+RtjIA9hYFSk!8vP)ko}`w`lFJ+AUOgbb^T3 z617`Tg2Nowui3KuzkJ<mf7U0<IxmS#eZKL1{FA_Ur}#d(_pYe=qqAV2BI{?}Ka*r1 zN&SkBnzLVfDG%38Ay;SN+~mNYZ%;l7mT=vp{jDwi5Oej(4<-#u{=Po5;(B>8x4c_s zTY``24S%s+-u<RG{g!pQbe?TF)URK%^65`uA+zcierukwUXMFc{nSfH@!ws(cW;iW z|1sV^rRBz-nB_BhWH_fTZ8-IJ)8*X`Xa2f;GUNT<^dlx^&Dn%m%pKj%48e;Jsx)ni ztMQ9Ct?w{1-SBAB?xOv*VtSkM>&3Y5FG;Wc!j+uz=!K~3feQ;AD){o)do<Qsx4dW< zv9dC`Dl~bTM172ivFhBw#Z#tfgyl1cpJw^c7pOX+<z2E|veCiQ4yFu#yEUe7^WDDk zM-+F>L!p!3SG$}nPBHp@uUG9ufaaw)+;2|Im(}z0-)~T0-I=rGd#vvQmN%x2)3fhQ zO)?P7Fgt0$xo?BB#$K(<l2hidbd8yM`$vD^-lBtF0<_m`=+(XanOpz=J>!U(6GPHU zj6bcpd(mK>>%wY_mgzRj#GXEwv45T8oy)(34^0m8UGqxe>e>HS&0_A!?BAYq<!JN5 zxj(1&O<12f@1~FZ$z#_$-q-VYNNrep>%*xnOCuwmPxyQ0vfLitZx;)+OYa~2DEY`u ztc!K^{fAYRpQHMgw3q3<W7erGmpMBp@3`cOfBXFQN^|T!@W|!Nix5BieWj<h@7~IL z+4@V${qxV`Ui~aw*FNu;`zBD*zEkAWKJI?$*cn$Q{yzKS)#bmw;tsP4OVykB0{*Hk zm^z>NyT+OpuKlM}`#)@dl@YK0KzM%P+rK|%8f@V$n2{4CdRC?_aZ}&SlH0HSOhsIR z<#wHW!Xz*JfTys`Jk!hPrsyKM)t#Sp{1+;nn0j$xYI})*^h|53k{EM=^V{6kzT3UT zB2Fi~YFYdDr~kbgy|W$LbOKI)G3rx&^K8w>wk^dkR>|DCcBOQElaWrG)ZgcqYPD7+ zeBr+O`HY~~RCUj#I=mnF?#6Exd%CQMdDbG4?~f;Xef_B-T7A4`#*E|{i@FjMF2{E~ z+{IqE`)se3Z|42qC!gQB&b#9B&F@Le?Uzkjv99FjI;-*tOTL=F7D*CYZ^yfnze?;f z@7%euJ*+}5=dK7cFGzYSb^iZ4oAXZ7I<pEdykwke;m$I}@l!O@bo*5kGH3Cg(&~FZ z&HU0q??X>}@8v6=|EIr2^0Z@>vXj93@Td;$|7wT6ES#L_-6eW#Nyv#sN-hEVd#A2y zIKBP#EYSll8^UC3-dy^0`Q^X-+mAf&tj(PNF!M<MwTR2hzm_HQK7Y}@%=gtYFMG}` z@eHRlLyq*^2&J#@=U452D-^CEesrn#EFa|+traUiRa}Y_?>!X3;-3BIXiMyC&zUVA zhW-<p7p?JOIQ6^q<95UEZ|1x)I%a$Gy-DPvhdBmo?dCJyozwPdi>Tw}sW<1&nY7#O z4Of8k!N(he|4eBRig~oG^y9}Pugh<rI(x(S`QgWz5Atpc^?k}+ze&YG@`mq*Np-jT zu3RiwZ1wuXthJZ6+28Q~cWK|}r{C|+cz@aT-RwSF$)~?NdzO1|6ALtnj5y(wrN^Lu ziLF;JzErD|qd!i}-=vwDLzOLon_0PYPlCi0z6DHccD`7@?&?BT8HM~^;YsPGopl-q ztmYk?WwWrkqey9+W{3FpCnv7osNa{(+wcD6WQLQZ?UDjfU*qlHYfRJ?;?)JxU(SrZ z`np<zRrQmwN3gHjPwQoV3fsaJ@}d;v)>sPE>wWl|t6<<;bUU(h_W@Dgqu<;+ctRDQ z^l7|cR{ZUqt|+T>&4DMlWYz=G^nOPru|+!-vZN<o6S!p`tR{0r@%??RX`+#BpLT3m zyhU-d;-V!BAJr_JWVP^8+`>(n3qPG*Xe<@B#%x#o?4^$@?8A0zsNT5{Q^dM3zirjI z)^|&H7}v7RU*EiT)}3JW!#S4@y`4Avu&hLEoY_UIiAG;8y%gA0dE8&($ZA9Htdl#J zyV`Wu`y9O(yl8Rh#NL?69IGF7?)W3|(e`ZB+J4t#mo@Kc8?lL+biI3<%e?hWf61{n zx7!B4jJcMW7EknY2~o2;_{=W#wZqJ#i@9d4jorJz$@9YLCo4|f<2b*!<6&FJnbP8m zjLw@qm9;s!_scfN$u2&ow75=gdDFiIRlc!P8J(wUs%!Hsi;w$t%=+LbRyX5nxBGdE zznb;FI-B&XB<Z5Wnq!5%&nio{R3=ZIuxFNdkVl-R;QH<18Y_8BrQN0DugMptI4ZTT zD8CqS|Ag(*rWcB_D<bxk?0)e<!?oMP^v#Q3J69YCw(E{@Yo5dA{XFfoY`Lw=ef2K! zkL&k-W!qMHgk31@@}hfhif{WLzq(6m|BlX<%)>0}m6Lu7O}e||$2+0@Cse<vIbY1P zSbatJ@Ro?1mnWb4HmNB8ux)9?wL=vLr*GIjbH&ED9I880bW&n&$2`&y+cVGPWvcfc zNsFUS=0{IiA62tG%D2iwP{>J=De&VZwYwiTv2R|vxMBHhrsopxu1GVzefDhO^p)%G zMQmW|`C6=+s~(ua=zU;A&I!Be-}gzon15Xm?ob+~nKAiUgBtI~_hKBW{K|{3U05=W zy=}|2Wyfz;z5m#y=C%C(3U8e*Wvzpf=fCcf)VuwwC}kqkwv%0|9||t5;F+xwwDW|{ zrIgCNjH2Quo*64Obc1q(;?LMbz2noGGB3nN<l@&ucBN{?lQpW`#jKR4zuYeCtHK%n z^r_v{r*p40zFc-htJ(PX#$vnnW4ensZO@fF64lf3ZS%|bJv>WwXRqI6R=D<)?c++H z;`=kwAGq#ZVPvsc_`r+iqWD{k+fNkPRcKqpMSTBgaAAst;I-7CTWR}JPORMEvmo`{ zX1R0OvQ4kvrPo|FVB@v^yYF;;LeuMW?qyB9W-~UaF8KNW9k<I#?xR1sRljmAt>v=( zWcbWJ;Cy2C<hA0bUVUr`IFQQ3VCw#$dee7zsfTG3)voNSkSqM`>a)c4hWsAq88Z1t zWWJdkdb?<W*mn>0Pmj{Y|0Qi_%}-<zE?c!DL`wFng}kUwz)}&3BR&eju|Ep=B$^nU zo=z@tYJ4gF>92T3@k58yfX<$j6<=Cr&f^by#^ZbN`DB}B=dDt2FN%b2(G5trwq^47 z+Ig`8vpTJdQ*6w7FNn>Fs-0apIXdpR?3pWXwp~(o*fCvuTG*t#xE48=y+7OAJfdC% z%w5dX_hL<Y|CGg{8lrtuOg5(^Nbb_NFA|pWEqvg7%-N*DNlk;tWMBBDG|}rbs-G-l zuQ%vBJCS#~l~CN#a~~cZKK5wQ>kI0-C)=m2+Hy_Hv)tp|{S^66uPQHVNzJm^<0`Rh zFLPg=sO2kRg{e!gO0V*t)%1D3+@EDxE96zIW+*jY;HbUp@nzYB>OCnuZ)faz8I|*X zReGr3HqF(Z`<C$ZM0_;yyDi%^<7HM~pkedvAIDE*@gA~j>e-bW)3^4-oO_&cYaG)J zpIO~(`ej!#FL-vomOgju?W`MF(nV$2J{nR#_hk0W``W$viqu-Sqq*^?R%|!vD!T3* z5i^HB){fnL*Ddo}&a9>>rVl@uJ8qxtS3Nt3KS?I_($gye)+YIj-|uIclH~T9`7wXv z0@;P1Cp|bZ{n>)gY4!324;sThIG#4&^xc?y=QP!K5u8h}e*bpj=%q`6zfGB<Yxi7P zbIs|pWBAY5RTj4|MH>n>-%VJOzk1oWZG4@z{dLl6X|umPYu{zG%x3;JC;2tk*rj+9 zEUmr0TI!Bw%~g<E^C&E4h1L|#S7Ci$*A@G2{j*?M(*CW@1<Px?7cKf#+$zTvx#Ij3 ztqZ#hZe84aQSdD9ovhUnmtNm7)BRr>ZzK^~_`{)gk4E{aNi2`w8`Yn_@~7y^W7aDF z1$F!z<M}hw_;==3^FIyZ|GHmJAXR^Dg1*8H?W_x{58S@i^uBh1)!GT^f>T2+y!=DN z!&ypt#TI(=7QO18@Ots#<&|rM?LKeaJM)EZZ<EZf#Kee(iN9myiUUvVwlh6g$J<<| zyT5MknYz8->YA6<Ew2Boc76(TS`)L_Ow9}{mv{>%jw2k2tC-`DaPBW+2u+aKe#=E` z*^Cn2j9Y3F^Gz9Z6yi1g7EEVs5LnWrxb&FHEB(*x4X%s%J~9`s7Wh<B?;fryJuftM z>ZirLEEm+1SynPFuyqlg7vVPNMM7YSj<Cts0}R(P=g(lVHxAw6I#X~>R!Q4x#gY;o z!N4zJxeXQX8vM_8^v#$Ra$&=J`A=``lzb<wkMeK0cB{PNg2ugQots&+{LarmyjwzR zC!<7CmZ<suD;$4HEkfg0F-U|kSTKC$^t$l8ut-nf!{w_AJD-)GWML2!h>ia8yxe|` zX0Fp3gZiT^Tgro6COv;4aW?t9NyH|p^!+KTPi|?9a7tft@~sNbrshvt5eX8S6Tb3W z@lM-tQr<^Or%A`BsC@tIj*oZupXz%4!XVV?&mBWI_ic+R<sWYSC@(l;@s!DbWG6SB zo_wf(@}iL7N0Ls#liGqW{R`d{8T?5$_)W29#H9m;;k>H#{LDA!t>5Ut({I!>y=KCf zmuuV>-ka3Iztr?rU%u_-Mo!(8rb13B#qSoj8n-9ZwtsN(URD0eZo>CRju(1N+!epA z<Vl{XvN-c^<c3Tuw|NaLw(;?k5-hY0HYxAEcbCDp?p)Wh?wQwoc1_>a%-;ES?dy_U zhULE$+%^Ve>}dEB?~tlnqy08QBR+0LP0WgAQENn_)|jvPC3Gr2VaJaUuj=}XjVHtp z-dyyuLS&JHE|=x`J^D*+Bg(^%Fsxs7>5_`s|DI5(A79TIXM0|}qw8o}bE@FxH?<so z>6%xcn~&G*+Lt7$EnIkh>5~4c^P4x<xNZFvp7HhPrGl@w;<YC(myBQcDz_(tr^&Qr z%eo48cHvil9!SJ1-{-M;F>PCZg68IbjjPUX$b8UsZr+bMmIpV>O_uPSA?u`}AlR_C z&{k%#My&fcfyV{0OK)cP#!Ojq;Pl+(zm_N_textle=NmU?~cRteJdR_j^3GBp_J{h z-^s0Ix=V$)^n|3R??OK;PpsuLuX}aQDOK%v|1*=&j5Bj$cn{YJ<)8j@`MIRgZk9_c zB6~%-5AR#z{YIzt=bp_<oNuom`}3gY<uQd>yYrd&e?B*^eDCdajN_3|ed`Rn$biSW z@2k{TC_Qe9e}C<Tq^{vHud`>?JM|jymn~)fcF*qZTLH=XzY^)!B)_kT6Z$L~oxZX% zH_v~*o}RTqLkt^N|Kf9f6M8eV`&5_R`*uY~LUncR?)ky{6er%@xX>$2u(bMu*o4rT zu?ZIO`Eo@WT1(P1cE7A#n;pD!Z^WeaX8VoVPQI%0y2U8JP@+F-!AyJW&%W7{r%#<! zY;B=(*YCxVNB3nu<v$3$&bsEGXq&~}o@%)!(PL}>?p<g7_e5n#<mZoRp)z%+{B0ha zOqr8Exl_VwTDw~dPpXeoujiM=r)P6}oH|!mA~q#`zHXV^r$`s`kEU5m<@uJob1R-J zTvcW@e}U~b?P+2kly}wyuAS>~VxD=+<mEZ{XMBI4{PUn|k)K*L<C%h3<?7JRqc=3$ zs^+crvWouk>HQwX^G%}Xz0UEUzM*)t`{tIvQ{HG7eq+m+!>V?2pIca&{>yu@$5pHU z>=K?m^~sX054Lk3-}Gn0j@qc-QRZcOTi<Xme%`&p@1*ypKNdlM?dH~We|J>MRJXnq zJnzu^s7*zd|L?>F+*h5~dFNp7`=EXImp;9txa*yffAzWZ>F$QXoCZe!q)#(;sV?9D z^0BzIuU?(=7b^{mtI>%qdMYXVI#L)6)&2{_PvUqz`F^om>=E6E0v79Z*6@TX7MwGD z>OO7i2g|&srsDngKO60P?!{eYz%6b6_0{Uv(yy!59D0`_<GI%8+KDw6{@C<qJld8! zPs6KBG=RVQ%&eLXO1$RR>o3h%&7{ted(@tJ&eCfx&4w2kdV12;9z9&YqQ$wrVG)A@ z<LZn3CRcr5T4*g~@G;t|d()-rXwJ!!t+_u%!VaGcF#0-oJ%`-!sq!yh?e@Cq^v{3B z6RB#gpF!t0UJ2sptu<YeG_62l=d(t)m1(Vk_Qr~5Jy=U;f7l;%Zt;_>VqX@)89SWR zk2sz=JfTT=QGdbO=$GGXPj8cHGyfA-^sephlIxGyK6%XhwsyO6%}3?07kPgN<?8Ty zZfo@08Yw>KUhu9z?{dmD9MzaVZGD+!uJctf=5+Uz%MZh6?etiz*mS+h;`bxYYMq6* zS6ao!Mp~Rb5S(LnWme+$rax!0%4Z$1czW`{@08_{v;RsxQb{P3S@U++B-ICr_8-%Y z7Jn@5`+hjKCN69LgUKHr-+G)Z&L4gI$Xjdm4^9u;BhLL^xG9{;UwUu;Eq{CUgH_u< z?ziInKAU61*Ljl;owtfRB5!wm+uchmH*Q~KKl}O@_s_y|<^pD(4*Mq5KmK>t@l{;M z{leDX|G@?Qc@Hxlm_;Ajn18=NXy@FZa^onD%X{NkYt|@!4Ev;)>K)o+w0uKY+r!vP zEh5+7*B{Qg)AwqfkHzMNF<uYu9<owxyeuDc%E>&s^pw)AdP}Z~gHQ6VJ_^rzekw?1 zTFas*xooH6?WKSFo#dTnSF>)uqpijNn(mLUHqUAj5qo{%d6&F_DIeEqwzFG5@b5fZ zaXQzbwY-)|OLWbH3kw~uiGNMEmG@vdFS_;d(zF?+I+58em7D*(j#@EgvY+c$b@jVX zLl^YP?N!ScspOs0&427mc+4~o5s{60_8%p-surv02~6F(S|eb^w4LSF_jAl8fA3y2 zc}30fpEq)xUaw!?xui1nYL3)LyE*51PBrA1b?-})e_-7Ichlt@IsGQyZ5|VT-bk9b zM2B~q&$Vq?8+}aq*rS(5D@U&}+Q-|lcC$@+R9WDnv-wQ+4k8ggMUVb}j&DEESRHVb z%V#nNLt61)Mp3l|)-GX9|Kvh~F3s!@?%V2~9R2(}o0Z%DC2rC?j=Fbkc=<U0Uc)py z83u-s0)_`2+w85xE|odf_H*A57PB}%C+22%PW_&+mJ^d*fB$`&a#3WD#-0hwwn#cD z{}el@bYt!RwZhD56(8ECwtS3keLrvC>p%I4n-2)QDGUzaycPA1k-J9s`|X(9O$%!$ z9M_zBeV1P68^J58?kCds@7Qtq`G%~38{c=ltlWP2`xb8ZBkyY_EIhs5DkAF0|Ez1f zPXAB4S{3@TZ2OManqR`t-HH48G~tW!qx%oC)E(3%&#uszAe_VG;qlI`@BoiOmKyWk zeAbD!g=OXvAx7IT#XnmYSFiAQX7u)C$DZ%sr#AQfY--_3HeEN-xghvU(#7npZYDoA zMr&C;+RDzr(4zTJB&p<aOjSZ);=jTp@@A?Dg^Wzo=VTo4UKXUc<Ic{?zm8dRE_T0Y z;1dhtU?^goF-4be?w4mJ0#BC3tlIkM^kJ*oz*sYpwcFL@@(Orft%$DDz3_MGrWaGh zAMI-R`r0@`CQ)6Xb$-27>%jp3&b0n4ZZ@`7^V7Rnl4cw@{_@db-6h2<n+zU&b#~dU z5wg{@wOO|&Hk-3kGgC$W<?fkZ)lO*lbiKV{?DXJp%%gz$Z2$c>-A@#|5d5?~&(7<l zOmCj)v0$})$(I^o-W%oFC#&5FEGa$^b7bPhry+kc1mEtPsT$?0BWO|M_5Neg>p#i4 zOe~X@)X3~QwsWVw*v-Y~Sl*Z#SZOJKoLGKhqHd>RRht^Cs@OBTL+VEt?B&g$!5R8p zfaj5j_2cupZx-&33GAP5%CY##@_j*xy$#DQsw<t?Ipf8;Z~Ip3sBC5FV;8c~Hu{>; ztFrX+BW26=TSV`EzAC8Qa`eC1j3f7ARzI`ZDS4w-t^HTb#^nbj11db_KTU{ss6MWF z<(P+;TwO%#?rPUpOMgTyYV=<<qu=!Xm-|m<_|MDnbaT=0H2r;I>shbE#|5iW!`gC1 zHJ>;=D4Dt=c4l3TW(SXxioNQ;l}6JeZyviA`zidr4|9>r;`UibpS)S!c1ZH`6t3B` z)`m@NURrm!Ci|9ancYRHb&J;Dx{}>5G<~<?T%NRv?Js8@v#kzWTUwODsvEK|Q#S9P zZ_NA4d>fa(+c@px?u#=Y-n;ND{Eqrz1*_&jE9rNCf6rOZ`fa}Orpc?<$ZMZDZMyt2 ztLKdJX^K;3%5;|~AD7Dg9g<>qY|H8sg_Ha|kJ{e9Z1%XL(j)8o=ISfuCXSP5ZZEz& z)yePRnpCwL@lU+tTIb*F44m;Ow{E4H)Ps&|&NKFj?aZm^e=DPT_1@205u2mCwz@go z%x~OqW34=QkaA{^z2B?XW(t=d$!Jeck}G$ZrJm8!RbR1jD*F}LNfZBBiz)B0n*HNX zrA5^H^@+#!C%H}hVxX%1=t)=6>4f&p60dY^Y>%0=UYY1Ni|tgefu?@z^@lNEQlFGY zxI9?7<8<BfpQjg#RPEoue?)90SM=-k`zH5Jlw9b#_4m{DPpVtjE}Y3Qhuh?tcIdA! z(Xx?BexJga@}Fkf@A6sUmaZ71zSfmbbm7Bo(vxm%G-CL%+S88row-QA*<BYq;XN}q z9g|tJSkZ6o#P_owzHaQYa$2rBzrS;p&13Dh&<!HCrDiMn^xIQR`q?d+Ki(}|l@R}A z)urb#Mse1mf=+9?Vts61>`?8pws7guVEFy^!x=qi_JbS#1x{BFFOyMhFl)-Se0b^e zm)AA>eLY^if6p-aZQR=UZwq%m*dRBp=UD8*;QJi^LVq-+Pk*@~Hely@sjN(|5N@k0 zKTjrnT55b>UUb7|esRP5tE8FI3+C_mB9+cQ>F%V};gM(l%q};1@E|W|llWIJr}Fn* zw<?u(UgrJ(`P06l%OB?}C4LWj`;_^u<NTRze&4;$KXp!)xxcgSp<4f~D^HcPCGWSs z^y@#i?CIlt!F}Gh56xS<`Lz1H=6%|%<}(!L=XKOEhM%_Hx^05;)!;wb4C_3zq)Rt2 z=%;?&6lTE8;Hlc#+$X(bxp}p~nH}>c=nHfn{>V0$OSoj>_j~p8U%rpMU%dI^Y3E;) z^sGHD$h}y<@o8`K;q7y0a(pXhbUJ)C*6~A4?43t#la9Z6dbEA2be8>o^ZwN~`cc;V z%l;j;Gri5!9JTUTjFww^sO4rCrhm)U{kuJtv2OqTcU(L2qH1k=fBf@rkl+ybA&;2e zzs=^V#Bn3mwO@*Xfl~(C^uDPcXanNZr=Yt{j~;Jm?6BB1RX}B`fP})rl76|n22LzX zq}_NVRL^z<HZ8ey_pZnCh7#^erT4%86aQZM?)_oQ`19?>^OTn>a0?o7v#d*sW%}3M z)x{;l_x<ZvRu$#<8*b#el;+t>-90tq-l<u4PtCl4D*BFA#67LZ_?40OSKf+yZ51c6 z`_2o?yAnI^N$j3``)AC}A9tdD-HG}cXU%f&Hru?NZGXP@@A}fS<7>yRuU-4T_U+{B z*!{iNd11iImoHmeTc=K)s;jGeS~RrSwA4K@o<Aw*`=rh1n3MmzE}M5e<qnJby%x3m zElXn-Uif}7Qapb1cH__b!JqUub>;7S7Pqu^x4U@$liK*-adi<<rGGa6Te0t}$?_*= z+aJCEe(Lw3S+g(g+HZRHdFWaG(6#)!wbyh1zJ2?)wzl^1<HwUHPyYP*v$nQ&{V%q@ z=i>U-?C03s@~zn9ejPjKRv+tk-oEGjJ)g7p{q*C`>e`?Azb`f}J~}!&KK}l#Tet4s zwY9LYu(GoHzxn5eZKb<+{@zesP*n8k`}_NwH*fy@`Sa=1r`soQe*OCO?c2AHA9p|S z|8qUdvFthjOV|BBRd24?`JdxQv%mU(=F5!-)Snu>`9JZpC|_FGnF;@A-WGN}n!o+Z zf8+J~(;T%X`7Jc6S7`Lze4}8&rUZ@F<4Fe23t!#lkouIGpSfUF0589JU!S*;px<<E zr&l5?)!!}n6cV(nQhhb!6vq!Gp>1y7mTRWp2u&$CrgFJrfsEhc>pNaANLkBcz3@wu z*u9W-Zjv`<u1^zREfe9!_V$Ht%xkAfMN*6R*>tN;cxaQj`1UbrcIS4EWmj%9R;27` zI?L>1IccHI0jZaB6E~}eII=bN87TB9=7e<iZi<#Q*7!NiX$jM}z;Bl?-`OPd=aNsN z((RLrmPa}Uusz_rz_tBQ@sfQnKUHkie)Vx_RQBhuH_ttZe3_7a`t8$`^B3l9-FEHw z?bVzA-cQcW{lC(@BiB@*ooSy`%lW7&Z+$g(Z0=$>y=iUhgqH`dJFPrbx^)RdgN4Qe zR>nS+22KfeX~r5R4wgOV5}1`=-hF!Z@J96&hZeUU`k))Iep^}5Vnvs$l^V|%{kx-) zb?v=${M68uI>HM!y_ww^WwmX#r@`x3Wffu9?V%=p*QbhJn)58)an{W)b&IoC{#s|R zYX1I5?AEf<>sE)8Uw8WMI&E(In&<G0%Go04zcwB^qrYEiU+T`wCYzrA*q@<uNTtg> zFIDC0tD7~>o5b?Pk`7sX>-v<La(lmU&7z<G&Kl0GT7IBiLsNEMnA)Ml`QNurYcQ6- zXB9DJ_RhNCpg7yZ2SaCgIs`{$ZeNi9xi)6n=M7a}$M^Y6yDoM1Z|~Cbbu08j_B`B> zca-&P%>F;w>HF_pDxAN0iQ(&Mn=_|7tz1%ebH|e%U*9GD-@&W!{8Xc>%e&YslX!gY zYdd$@{JnFBx#w1XmXOS&b%*Nb)(1G5x_sW=e57HWO1D_=w*2&J9UWWQC#yco=GSYv z{4n0XBjU)?O)cv$7EU?YzAni^cjks7k6E84uWq{4y{Ufxlvcj~zD`efoL^oRvE%Xb znSUy*?O&abEA*Y+Ha+mD?6X7HlGk4Na*bQyTIzRJ$p;pf_Y_Kt+I%Yxx%sr~{nLj} z^E>V@fA4j0*NTrf1G-)Or><C0zh`yfneXrJTAy6>^z7kY6W7`M4mux_>{ETw72@5w zcro9}JM6RH-Z>QgFSh$u`|FL26U1LPe$0<*?|pW9@$JWDd$yOW-<>kQRy`y|=QBgr z-JS&!Vh47Z%;jSEWmxC(==;_Cs{N0DpT7EGJAb$|o5i1p_m{qt$~wFz@QtzN<bU~Q zKjYfWtKZId)tq{7?pZslUfDS_ZEgi_n;SHr<&k!B!<4^VZxtp^Rxsdd{v5Th+2Oy+ zj4TOep;zw}KG``M2t0dm`egZ}CG%T0Xg(Ks@vS__WM0ds1w|aWPj+XB`5jU?Z0RER zH&#E-?~p2|eDT3EDhy$NCa6bD>b|s8{A_Acno-b-m`zSU<@o;YpSa;+OqZ1k=l*n! z+q>ubolNw6)3Kv7JnD#J(c%dr3eM)Ujejs-E7*PJ^f?8mtMU=k^6M^e#;*80JAQk! zDMLu~)gqb1yQ@li0~q4&u;<*l%D?W%fqlB0!asVf?VWxnj!R1~zV$9gWQq)9XSF(y z)463{J1%^DCU97WA^y(fbe6|A_MEu<<k!O{b2(<`V-uJA&wSgH>A)Z<JWKz*x>~wM zVZ&j*&oxDPfwBHtsSVf4RO7Pl?kf58pzMTo-OWvjTLPv=cW*B3ysqLEt8hH~#@>%Q z#kmPD)l-%oOq%SVe^+L2L(x&;m8&|>=BP(bh}iPX>xXyON^QsTH%mL}ZAu!fGM0&L zI=SNN1ob4NytwzVS2&O7$V%uc#r>bO{8C5%Npqd;*KeB6&1GG;U(-T%iMxMfr`j{W zolli>HqO~=x>!v}w;&`Z)Lwg^toCZY9WM3r<=)Rc6Re|~!fP6QqWjN<v$>Hr8d)07 z6PaB1DQjJ<ib-n>41V?H_0-)37uV-4TjsAj)wO2gxh2hV*FATL>|p(+eJOihtpBd! z?A@p5y${!Ym{sk*TC6wvomS>$pI>UKno)O7M^F0xl)r<!&c{z{s~E3XfOW`L55WT` zir%f9+^PDCX~#}idy`d(TiVaQGoN&f(fadaZt<;Ol~eoVzU>$3-CEBevF5NN&tw;^ z^M?ERkNwPwm=@L<XUdT9bn8(;(RD6PjO@Y3R;+0Z+kScGhcmy6&f6`W+QVbo&95_K znlK~t7mt*4Kjm&K`mfE)dY`jSu)FVmUYE<s!x62s8SWUzC48FlY?W;MS9gQd%%hz5 zL*2jczN0RgkrsEFrR{#p`jw0^?5iv6!ee=i%aZ(4H(RX_mbjet<f-Y)gxBkHJon!) ze>p3npiohMSuAVM3*Swg&s18r-aYZDf>|!pbaxsD6N~fPML})m5w7dm7Z^_MY&|tw zhV6RuhKr}3?0R_C-0r&bGMCVmwWp$MUc64+krn#u&4<Tf(!bAj1p9;@+xBVOiAP^o zJkJQdw)FkB2XDX55SgjMdyZ2tZ2L`%qdR-E;#iDl+}&AxYe7_S=cTYq51xg;%J^!& zaAIue{Mnv7fxf#WObU8Wzu^>@X87IKD<LIzD6PKfywtqa6Mn}PcSQ^Tei^=CjYn$o z8i|mpd8MW;t#6%umZ(m2H1dy-TViYJXLVxfr`L=D^Cq4s4Bhy}vp`|PFJ|XCMFQK8 zS|nvV)E?YvKgqKFrLc?97u`02izf1KGSdI|)~|eAGvT0_Nr$5PzPATIU6nsMq5t00 z)pKk<$(~VHP;67vi?LJ^c2bxrQ1?$Oc7X^dqyL5H?q6mZhxc}WeHbUw{_dOcF>mj* z#yyXfAI*!r#pP+M^@@@C)P(f43z=`IG&Y~yUVeMhdFkVaL*@TJy>##WiPe?rON}Ka z6=c3E;;pW|!gZ3r?YgIK>NM|D$EHp^^n<r8;QcJKd3xeiG4C$VH{*&9(VqVOr2M7! z%I(*ybv=)+duJpfygsMk*xqUXYGVA9{5L=5d;cXc<LpGIf77a;HeSE|$y{$+WpYA= zZOrS1UDLiVPcn!N-LQ4P@U3T@KA9J~&AK-|edd$z@ZnC4Rhr&wb;jnuZ-XaqS+5~| zeMyUi*Thvjjm^KGYM93M`o3~(y;e?}h<1-qU%jhL?6x5BKP>OxA3h|uD&J;t{j^lx zqBTkOzihQ<guJe_=6>L_`_<;1_OAjSr}`PZJpU_Zlj!$5Ut|P>`Bvoq^tS$-ZrmHW zT-Wskx5v>*`OFXhzg{^zVUfGvq<iX#J*)YbakcEMPJZHZKBi{gpNslppKANp{_BgJ zwCqGX-~YEQ?ia3F+vS*VJ?HK5G%aD*?tk|E3TujG7qY~O?PxhLO<Z|WJcnS7uI!(n zV?i95k@J!^ZPSgL*?yp{c=DC@6+w}bzRn-3uB?jt-7T`RaI+-Gp`CL+{g4z`_{Vjj z_pW>WS$~&o`nyn0-g)=0nioGSAFkZcUZ42>`Jd?ELp_O23M&m(|0=j9Wq6~6LtD8e zRy|<)%{e)TbmqCrDoeX)h?co@HEd9Py`A~y`leauCa`>6nC{uJ#q!(++5FnK9ZH`J zk~zY=cH22;9LfKj5Y)(VTxo~JrQmhuN;T4jIZNZqRpTZ}c~&1?*3cuA;9T-r%Hg$% zvzjN<#E`vzA07?~>Uy%Mi***)f)}fu<af$ul<@i-^S#pcv{%@B#pc=T9`SHpYJ4*1 zv*Y=nGG7%w{W@$gPjK!o#h%F%C3Z?&a=GG~^~SgM&E1$cheLH5tooEx3e-DWJk0oB z95re%P+u1~+2z|tkJ75PGl#@~%!q6Zyzx;XmCacxS}~vhV8@dkIr}P>>lM!8K72E) zRy}92U|Ogguc*7C+Nsy;*)80vrfB&D@6P{tS?Jz*^$u=t(T%P_^FQA@vD&*zO^IuP z{FCIb3VUq67C7vy3W$FqGc{9?+h~8oTdk|VIOL}Gd<m@++8EJM^Rm-o$D@;L-0#fI z&VTQ6>AQEp1NHmMxTH52&)b!?KiGd_hR4Ub{vY@IaW3)Wowr@~xw*`5^}UxC8%<i! zllzO+QFp~farTsw{~P$+Pj*g?UAE2t(TQ2!%#w~WH3tlRLlxFX{+nFF;QY%cF6w1X z)z8wZE$u&bgf?zGr{5#LMvPJS<@SV>;M1!+8-v=PMXQztElioY!Z~uO(&UFq9rhVn ztER+MGAFIN5qy3Ik7D!YMIxO)H^_gUseOIs>MN124@F8>MMlR(T4zR9^G33Njs zsea|=@<TWO$GuLCuSktwntI<P<^I`p`<Qg*3<C#2o<2LaC%p&#j|-S2aflnZ^qET- z`0{mn@Xf5_<7BrvB9+JefoJ~TUrjD+?h5&>XO!98u>S%xv+q=o8?6Er3}G4T-sZf! z?WWepn%0%1wP13hn+ww`rF5onwVbeD(@l(<yKic*ukreBbM#ov)7F}+vuiYb8{0e@ zr`0v~l^;~r+3PT0`S)DColG}g{$$^j9X6>yph2hEHt$aQv`DMZd~5EXWWDsN<bccs zp$DHEL}m&)9Moeu{!)Egys5ImJ^}IO)PH_vep1z^=Dx8Md6U5A7MdKnXHs=tP{Up} zqnjFkM3{^w9^<?a&hW9O^Yrmu39QoP39q{!oTxdFnaUc@esTH4#IGvM)9;F=H)rt7 zeLE-oq-EWM0w>14F2Bp?%2XY{JhR^@w*3TarAR}>jUA0U*4#d@Nb=|Wt>;8|mhMQ9 zu{YBB`fZYr@lq?kqCkxmWzBPLY|)9GHK*o|<9dlD|Cn#AVZOj@E&1>7HtwJgDJ7TY zRpd)NF%o*>;_P|&>#j$Id1o(5GW?2-emFhe@OmKQqCbKc{x&;{J4A&)_`{sSHNl%J zup!CeyvxDDb!9wro(LyCF%@RGBdoAa*ulr|;C!C^UeP~!SLaE-y>am2lx-g$_cAv4 zZklAV%Ih)PZvk%h73*Hud${YkyEUv7GGkbxRW~Vc`rO%y$qkpXY89&Y&*GYM;85(* zt=;RV{p8eH&9>sm|K}R3r!3m{cuivuFN5DJ5o_+Q4F~_LtTZ`#;nw^IQ_4k>3!Cm( zILxnqAYysFvam^(VMm=;Li+)$&1F{8^K^okH;9QS=y3i^iCTXufaAy^<Kj)iJo*RY zvN^>5w*3`<@>9h8K*J)1O^rHTE;mxT-u&h4JtNg{S<Z)j#e?J}6~#gEO==4Zwl^nb zR68u#?eRf<URB(^UG=@b&Aw+3cb{Fn{p{l{y8ZiIqL=YRrPV||yP(VcTZMVus_u+q zoWA_g>ilo^TWmUDRrUGW`|GEkt$z3ON=3Ev`;BuOBN7~fB(6+YlKWgUq2E|`xAIz- z^`*bf-ezd{?>Ahh%em)?mRaD^Q$Eehbu^D0VvJiAmUrA!L(nXFVVY9?dao;U{A}(p zW*k?{4V!u6jl}g=GRu4qM>n_6KkEDEuxP2Fjl$UlON|9jU1*nC@!|f~GZPrw?rBcG zy3M+O`{iKnnf=cvnJ!-)d1$&$qtU6R$(*OW_9bcUyX$>vt|r&rT}yqq&T=mHzs<OM zoyC#dtcSTb(j3}K7f%*an^~Uw+%C7>*N2OH@0r(`AHHYuEMIF=y?rk$@7@K?dL@Zz z8xreh<l9fuyKR59`+=50+m!pc2in()<yMI=^k_Y^cCy?Yp4yP@E@!!1-`8(-m~i;d zk1Z<-lJ{gMl--*4Q$ty$@(g#)w?q2>c2;iKlz2l)dd)PWDqf=>cMX1(Nmp5M&*s10 zCD2jFab3va=f|jHD#B@V9`r@nK77;E`g&8lPhfkm{l)v!yJx9<(VWq}(m}=hd!GeY zf7;g+joVr0H9ay8FL5(AYP+WV{hiW|XOryybXHxtGI!bOJNGZ1xqos-<@`OX=R}6s zmpM;2Dt%si?~G^v2^~MLDQ~_lm?9bd)py?#ZjEHmIiG!XCVEB{H@rHeJFTSljgnhr z$c5esN9Jpkx|XqAHooFrHDy~({obojgpz_b6>Qp`ZS*KFC|c0d!^`Ty%dZut;xlrM z7kK1fcUU_$UG(M(@jG+X^6oa&)!G|5i{A5)Wt@Ee$5T@!&#cIulaCy+NpLqTdp6<X zy~mD+Y;8=t^Dc|-G&ETg+m+PhyXTepw(lZ>ujlvbbCrd8mfW~<u)(dt^s#y|$L)0E z^m%jEO<4JO$&t*E30I!X`TD)%>$4vH)17x$Zqq%S{71ytzkuEO9WzT-sm%W$d173T zI~JzpitVd*(-+Tt!@a;iE_-K3tJ+?DfqJv6Rr^oeF%Y$N`V+<e^5xO%(|4Lw%%7Xy zu}*4ZMAORlEd5hwSH#EbS)M%a>(>2gr+&4kF28nqy_fGL?^X%dGf^wgB>Y^sf02>U zj6)kuC&u-sAJS&!Q{K~l;x_X(y+pm@{ftwySDcwVrTgweHp_*_CcfYfn#gkY>Gtyp zmv2j5U;no(KH5fq`;7JRbF!Q|pRU=ezkaVp)z?=|54COd?kXD0ESj6F{i983;*Yqy zpQJLE8F@v2wT?+;yKmw7>*Sk%2Qv<b^6=K&)XofJGJ0v7&U(H_&n!x2^5^-%GgEax zAHL&nDw}g)T6oQt+U-yNxN$u<`CHGqM<RE{=DYjmuUq}ySXyHB-LnRPccnf*>W!ag z9`{qZYU|S)lY@2kVghD1di#HzF2356@mVo{_vHe{hwRa9AG0e~UA+@|#r5@^@49oc zxU9u^&fe&_bYcCDiX~sJzuy)7?A^Ya8%Out_&k&6;4A;M{G%IqT6S&n-EY|ECEUGy z>HQ70Cw`b3#l4u$`~2P-E7R>B7jJEy`BftH`#GMjMeaA;kC$9dl#-p?*2(iLdh$%g ziMu~|aQ*!F@9EK!Z%bC4eEawi!@OHPW;>$(?Va~`r{C;{o6f&@aOchJz1J7JyYsuN z>-YH|?f)++AOAx>K2`Sq5C3JY>og<RO|Xr=w19bo{(}cBH@-hIy1DeleF=j`AHNSi zRU3_Gy!S5pU$QJnhMRfn?;g|tX0BW7|9^G+U;F%!JmZUMW9A%<z4`41_cb@O%m`i- ze#5nAW5|aq53YFcjQ;jl^2dW2NgINLA8H@DR^0J=zQ%N|C&{x6Udd1M?0&QOfzG2V z>sGrLDf-Rc;QPCLUg7ka1urGz%kJNKYro|v=e7RH{QG}x%K85@_xr7Vri`h}`zI}X zuGwK2!sT$Ldg-k`xvSsL<%R40mDgw1UbAS*@}y~d9xd8=xS4Nf*}j(JJX05nX~?;F zy)$*X<K$9Zl61B0R$szVNoUTdj3?T6-Y@=p<lmd_W6L5>{?6DR8N2_?xAw0`eybdw z!TD`s^Vg*pxes|PxN&K@=>DAVy}ix4+YWD7d~<e1@_Xk`vMc>}t7UpVe#AVRPjbHU z9x-qI(!0l3zxuvp)AOpMXIaD2o*Z^EDo^68{`cbd-Gj;%m)wm_S5B@IJes=q!M_zn zqB0v7@N_b6o_KE0o?XBHawtrTp2~Bq_M4NH=&o;uZzT6ta7_KRt3<_edtv#iU-CC4 zstoI8vU+)cuGi6uyp$<5yX)i~x3!8_X6bLAa+%d`ZOQV?ywz!)KW!ge$aw2eoVqCf z#FFf{SvA3xXGHjyUc7f%>zbbNJJ0L)u4|fSeLTMOs%1lHRBy`31(R<wGVFeOEg&jZ zubFN8;i+=XTAph-uG>p4bAI>sZG-;~hd;uK^A7OoS9Ka#J-j$o?9uPIR=v~T&R%Eu zndi3VYR9+4FUG1jeQLK)RjiL;P^mku+RTzLooS!YPKz0NAFG!{d?`}nO=1gL<u!N5 z+V$TP_a3TFEP1@kJT~pp^wg5qbzANTHGIGH<J{+xVwGsU+duC8epE2?=7sOiVy~M% zt-ER+-#MfG_wzV8X;Gnmhx=S7XW3T&p3iSB<(K=mM6z8zY@1M@>WA~Sa|{%M+F$go zEC26jCv^JZk#d0`ug@NWvZr}$->Zma$-O@&zE*DflHT;B7u=zHe=D|MQ2(vy-Y`M# z{o?vlPrfM5I1;dUzUjZKD-UhXkl}T^<`ggf^L5FtV9PX?b2D}F<Gv)=FhtfYxOgsb z!O`_PORk??ek!i;d$LCY)6wb5x7xfUp6-lMk`(!W^64U-(1RcOPKkv0-qO8f6l40W z@Z;YNvrhayzB%6O^Uq+ePhTwlyvjFQz5K}(?y2V&-1;(W-K||}w%=mcpW(_X;j#P9 z@j|LH=h}-|EDyL2ojDYll_<8+sHrMUGi+;>+0BJbzqYlqZvFL5)V7Ij{wuR=Uc2oN zxg@Q=Z@kheT_-tN(5Ptk)>X!ze#mO2yxAHXkp8Clj&jPQ@|}_CLLWM~4S5eGuQhkI znch01H7M%(?AHA}%`@Eh{0qyMJNkc{c#@#*me71bZAPJOJ=2qOH~0ih7TxA`X=~mF zFGEh@ZGM}7UQ6ixcSk#C^2?1^6DG@kU{hf_&zYXv^8Dzjt{Y-YBFt}zrL}k7sMY^- zEh9YWqIObz*!HU#@fX>IN`Kru9(DIgfT^1Hua#-ncD)R~``#e%c-z~2-#*{t+7n)| zvLBfp#}fYX{_@G665b?>t9tO+zjl6Zyf!={MD}X5MULd1H5NY_CoJgSa*=1x$uowj zDmFrnf(&-2e6D-ua7@b%7y15W<D#?C?Tyxbmo(=IKJEEE&$a(evAOf3^9~1gY5nnY zs@zx+x%WNuOZD$lr)>P)y)?(GFrxd+#uY!l*~a&H&*#l_lQf)k`Tvji&ku>qpI?1Q z_0Rh4+?}`n<oEwpVS1;(UA~-&k>Mip0h)K&T$OGMYVmr>F);kZdXJ(Rc>e0@S9_U; z!|We+KlaIMzr1Ysvh3tXCFOj^m2HVLW<A^T^4+|5Gv3*qDUm*IU^%C1-~H$3E8@=o zZa@EA|HmFXF0W6El-@Ht%s!BPpnm1bl{atR{Q2t_Q;@)S2eU8Pf30Vhmm7Sxw(Pe4 z`MsQLnz@u&`KoQ@S!Lf}ecR6F_y0`HMYs9u9@u4YpSSj2FC9JKT6#bG?}qO4is|u- zFU)tkFki4d&X9lK$BP#)N=iyDUApw^*RONu&doOE?e^7GPvmspnAxsrdHtd0^og0_ z8zapx&g3_={C(4PdZuf+=27#Ps{AuWceg%`etPwKtLgNkrsb@r=}*7%FZJ!`jqRU% zc>7&tTU*=1hYtq_2YaX#<>lpNW@gsb)~+v4NU!*klJF#>=2c<EubR4#C8d7_cQ*Xn zS+aS@w;fvw_wD;CfBW|B>gsBCc6N7ncXf63{^;uM?DZGw`{eoi{QUjTpF5|gr?+n1 zx^?T<%lqr+<>$YD_io<2c?|#G|5y4Iedd4ey8p-O%@te!vPc|R7PjW>Yu;mO&kST& zo_){XZlIN}c}<kZZ6f!9aQ9bS?T=riD6gFQs@qNYW{H-M`|IxG!IkzsshXx!eA2ph z$*$`&o8rgbRJgF$r8iZju_*9fmyE<W2cDhcVtS`HiEVUEaCTW=xan?=qJ>4Xua{W; zGQOCJhC6be8h9tq{L#(ldR$H{LrkZqH*dww7kmc}a7+6x^<J!Srcrs@!qgLr>Z+P% z9tt}1u4mdADcSRib>vT6bmEw{?96NOjt5kI?p4fSc%->;kz`^P*W%7;-aa#9*WFHD zz|l1M^XEsxNvf_6nQC=gV&5ophZbG6zP<jR&Z~%ZzNKX`|L?x(uUd5V#jnEZ##z7f z?CxHzEU(>VJa6^IyI%{+jnj7<-o5*GzHY+CT(*Qsw{qD&8Ju@!V0hDLbLsh^oQQ)G z59XZ>SfFL5(DKQ$$F4)KCs+F5l%(yl2g8E4$)3F0bE}U@W3id@2Dh7^7PD?YJ;Bgq zb6acSgUznTDkLrj#jW`><wahTM7u=t8YV&E;7PxXDgzhI*%nkdNz?mCUe~eDMX#@< z8^)c{Y&*t&=4Jls-WkRPPYNO~hd6ruKB*@8MrUT(4#5d5aXNe<aU7a5Q~MKEI*7V( z%P-=Z*>m~;16QgHLyJjS@oI~^okiYWT+#}yy^^;!bFP@~e1q9&pWc3c^~d#Rj|ood z;I>$ib+`GvNayF|_ArL*+x%Lqc3t@SBy-~<kBo!i_bya<EwX=F>Y`JANl{`&*W+iQ z{r1OoXZxRxFN>O*dCdOFn?<L)CNq1z<CCsm-7mI%=hgLp_}XuGST6sqxB2F>zt_HR zdUZ?bZ^f*042NP**Qo_n%Dhr^{=0Xs(A(h1KU<m3r!uU{tGed)Oy*~KhhoLl^eI;q zZ&gkx+kdrm#y`{RM_Us1Up%_xMcvb*S7yIn+?}~H{myg`ML!Xt-3{|~pIE1I{z`G- z_&duw;%>{Gg%WAerC(29`TS$m|A~M9WnJ`I-XX|k@U*A>#{GlZ3aUowQ$weGFjiO) z9c^NAr6`nXkJI<b)g00dk+vKKIT5#G)Fmcm++<Wx&z(Mr$M2DN{l4;DcTX2RIC<|p zSGc&_PMz6{tQ-DqC<{s5P`rG*Q0r~gsAq5em+yXj?eDAIljX0g+o^}1KXW~(-py~$ z_X)ps{-4~bzSmXmq1^|Yn13b)?=50OD!wf^@%)a4;%DtYSFg`rdZqX3m1g&Ie+~I} z=zH6@&aeN&`EUJmTm5z6S@Y!bzx^+hzyIwr)0~r43_Cu~tJV?|+kO7TMvt{MiWf^1 zCb1vAcjuVK`t_Vsnwv6J&p%{tobgk-A^KXJQh=|(Z7sfUv3q?IW~H65dHzhfE|R@O z@{rYq{WCQqV-A^BWOzQDP=Ao|mHK4MujyGa${wLA%l?}SER>3EIFl^>B;q;m_4yhK zOQ%ad`Sy&vraa!^o~P3M$xnoG+w+Caw{S8QtbAz9z!djnN4LO?#M3)cY9r(}JXp|b zv9m=ec}>lf#m9qR*M@PuYCJS^BioLjv9jG?UW83*oANv0;-kH;XOxokuWoxR{JCW7 ziBBhA{k_XB^f|P?`9^+c$+0VwvqQxn2kig7eRjy-wv@{j)+djh&DgNG;-;kKpDAiO zn);XALcD(j&v#QV$Y1(GWh3Lmw}(Hf8%KS-FXPn`?WR6=kG_%lM{n2msmo$sx5pVv ztUMi})GTn}eucz#qo^mfuMUT8c(b>&_T}Y^)0NjYTk`%q74)pw;nfnGiGJcSe^;vV zEc+qEaC_M-Ly@^c2R?09&@+hov!=$%EMt2^+k%)t$4WEB$D2Cd&WOzD{uy0#GS%?j z^VSbuK^KoX?)V$WwD8vNjXPzwEa?9hvnWex4a@utyO(o1c9fScP>Hv=`N?<M!R{|p z*12v>Svt|ac&_{Bo_p_3#z`G3Set)3_Uh^TS{%>U%zv8vGPF@Gq~wm})}X}wUbEvA z=P3W5(Xu)FzDLV-pGR-srrkM{_&xC7YS$H^QFgIC=l0b8P^r%PId`_?`lhgbI~P^G zS+HVXX5p#d@y>FNq8e(8Z6DlS{$XBdwy@xolH~?|OBb@(REy`z6n%JJo%z4Kc<0Bd zU%ys3oWJFx9{uxFh5nwMeV_X~H=isz7*h0A<#YMwfWpbVk6(W~dNQkj+Q+Rt&LO+< z!zOx3e|yCF>(UF|XYpUd_dhwVT<!fqa?(lLX=fkZdswc?eWm8;MN{v+U*7y{;EX-z z6(-%mXrU)~_IE<YD~2`4QeRwdI_2%B%~;7YV`iP{!SY01$3^RERhArd{AoM8g{k{& z!^+zF#lLb_9FCOD&xzf#_7&gLQ)dOXw{x$I785)xf7ru$bt~i1!mz#fC#_sLrG}L= z^t!xJUjB>}pVyPS#LF%p6wwuP`k*)EK}651w-$!GE^W1cp3HQ+?rXTfnujm1AK&it zS}O6+mFNR5N3!=_cTcwKyC3{&5$~f*8fr{mxHrY0=x@!NSG}|%T0OyM(UQ)+!7<l< z+}`l?b-dmB<PX~geX3tZoVGq{yxL-^$BvK7{J-3?<jE}({G}<QwolNS-R$JX3en{M zry7MKtz9O+`?jH^Y~IER+lxY-4^)1cw<Gal)Q*|=mq+Y+FV?`j<L1ImZ2FSjfx783 zV$*{8ws3InzBT#9d^3TE{S4t(g&u4w{aSdZB+OJ+-ZeS8?#*h;;F9}G=Wfs_{c9^$ z<-9GWEN*_<f!NgVU(b~`JMP-LJ@b6zrTC0uxiyo$!fanJ{5(aq%=(s<iczW9>*D>+ z-xuY&IR3R!{8KmEcX4jdRK^3nya#g2L}zPz&YW-2a&3Q4N=}Zz^L(?-x1ZNs?BfaF zud|@aK{IR1`DK2w)AqzAPjl#)ea<MRHthP+<(tE<JX+7n-uGl<s)zO|6OTISNi~_} zi?vyG7IQytU~9Otwdurd#S3QJYvMAi7I^PfW5`Zf?;yomGx3nUaOlL^HzMznEwr5v z9!#y}_&&)fE@uBbv*|yyZ!caY>B3&gclQWe=Sc?37Ye=y(|)jCUa|DUhD@OqM>p5{ zT)Az!$idIWPNL_{Oj#rD1r9ldEoIv$&)&C#d*>bIpMO~=30JBMe}47MP~q>=#z!R| z&o8u%P!R82?a00Vr_^SL)yvn-PV7DY`ONa_E0f*Ks}g^GjBo$x<hH@b+W7Eg)0=lD zhD}LRJ#p>Dy~oS+J~Z)Pzh*x>kX`$1e7FX~W>bcG!v{Zo8{#<iH?EC+*=iyikap!) z>V4JMhs1i01@PWFq1>I?wDGX{t%QO_;x4A?uOkn<GEmUe5m>S+ebLM_T_Q%RDNn08 zxa!W!_`FLyepu~HfLKo$hh}z_snVB~nQ`Ba*m7(+@LloBw^jNcf(wsNTd`R2RCD)P zhRw$5Mm!t!I38+THjR0*d?(Md!+fD1Dx70aoKMY&f0EY}FY%`B!Sh2L#!RiJ7CU9H zy)QBOutnf9uA_--Itqkq|9wwgm>7TPVv5th%#QWl2Xj6Dyy+?CXo+P}(N$V(s+4W0 z^juA;-)7V1le$-@8oYeP`<mUH@!ARX8|;pI99-Gr0vS}aCTpBp>LGF8=+tqqqZ>UQ z8Y?FlyDpa%oLY7?uzPKQjZmiRnhUY|b0S>gpGdiSh+H;Ybl)>?Wthe+O=05zv7g^# z4zASrHAP29R&C2)Rk5jJ-9KITt&dDgc0a`;cw3qMg|^w%y@ozN#pM=B<eW=8-+fl+ zepZgPke<KFfnwp1|JpNzm#W8#o%WPCrz9<Q?%3(>N9)rIC6E4ic6Zfr2f2q9O&fkE z@y9qFQB;}~b$H%#b%sMn-o4?d{>pqk_31yYx<>~pD-$Km7ccj}Af|I)XXW)-5$ewk z>}Dt|`{H-V&TmDG({rVZi3WkGhMuBxLR8aV>7^f7_9XAu9pg?5+mm;+PJA)D*`#zd zNayG&jibxvL>oDL`Dy=iztg`ZQUA92dp|N~6Yx)Bc(^~IPybHRnF+I#zD-#c5@r7G zcx#5Z;X@Wl^L5(4<iAdo>iH5V_$c;QCTG&im|N#G<6dU6pY#;5N#{89W?P9D%abo& zq6bs@yw5MJW7J%1Fk37{$Ijz?^rqvFHZ$z(;E3PYujaCwqlrmEk!QI>)Pd?>ZD%$e z`p*4)=H90<xfU~&r#T5f^($R`XD2(S@#2>Sci-^-d$Vjq&g%0wSHHRWdizbW;w`7& zSRQPg^zt1W`%_Cf70;z%mfAcE*BWRqjt)*@N%Wp^ICJOcY2puaXaBvs;)wq@75CiV zj$JHy+3o6O*$VD*HaEW+-3>e9w`YkC|KyWl8w}SATTO3YoRH<Zj=k4m#ZuOJwI`Ol zoW2trEc91Q*++llB8UCkxSNAhMM5~9T-|ZAQR9JmoS8(x?MXtjHwjtH-=TXg)p0`2 z!~3^wE`8cynZ5e`yPf@uTh}Ci_}$HP)cLl+&OM@KJNRVMCIpt)2Y=`bx^?Hr<ZWC3 zRSWGspHs!K@y{)@-TcRlu8FqJ@;Z3Qca7*f&m}jO>YY-}JH~o2{NtZ*taUPz{_RM8 zKlQX%aL$~zoJAM%?Kj@=s(8NtyN2<}4b~Ss?SxLq{)}xg42$Uujgy)7USwMQp+LR& zx)Yo9!VS5unH$wPJ-yI3rR~t^ebv+TuZnId5Lm8X`@ZYX1x3B<-P_(A-#Y91>O09i zl9}yWw})>#6ZXw#;mrwCLJj|f+8ZD7uw5PT%dRQyi8Egg^MXb4+`;EN8P9Skrc{cS z#ZN7$h|v?AZrH+Y@<?sV`Mx7e3nv*j+D2yFIe+o#(RRtu&F@#+8+OVDTx-%@&G9*V zqqW!1wCvXlOMX<8s>qaH_!uz3U)C?=Kx0E7uf>s0XZgUua{Gwqtaa*|V)6MgC$0p# z?+Q9^qsJbq)1j`Pd?dS~aQgQz?}Ir#_f9Ta`NB)jzrfaq)i6*fy(3hq*4_I}!m6U{ z8S6c-F8RC5^ZF9c`^#6po&H+eXnV@(AG)qp(_OY2D+*3hP!o_14PvxS=2vH4&rw%f zJbOh)Y{=GyT(U1rwD<e(ZrWp+GCloa(8EXDZQjRhl`CF7%adDav+1VArd3N#zpXQ! zw@UY6Y4jw|+reG_(NSsAjK7xJ%{)F=PvIAjk~oLg;^S3*pF}4M%#y##_t5+7gPi#E zqe1)(P0S6iW<UA0^+NJNK7*jxz1y2@<nA107hL|CNqM1Pjg-QJelhv49p9&@l{#!X zC?AlP5o*WwLquU2r=fkRyjkOyp6Y9Nw+gdneaK>pm>{uc7Q;l}3~qV1`#fy^4e3G; zr+3r@v@Nf0;%Gaf#(JY^Q`d#NpMtMDx?e9mE`G2<Z*zm6OniB9^So`f1y&1pn<xe- zulHVj{qQC+<<1MXPN&P~bFE0_UK94x=-&708>+g?nu_jC4rknW<#o-kpo6^?atEHs zU)9hmj`k_A(YUwZv*)aR@^#nRRhmEj3X1#1)6-qD@j-b5^UAG})lx2O`o12z)ixhZ zJ?nH5PF!o+IJ4GtCHu#jyAK2@7{`BiTjhA6|6rZp8o^)kY^y{TY*rMgojyzRp|8-g zhhfKmoH00W8}d%N;pQQ3zAsbPF-H_9a=QNiaIUE=b(`?+$y+98Mg=<WwsLdXWKzng zQq<yLYt>P7Uc-Xnz#HoxU;7SA=4q};9{F6;?)INdn;3N=an>)s2)3TcPfgnQ8+0c~ zsP28>_Uc=g{Ntrlmn`$(3AXZhJ-c(2`Gk2HtHiSUjk0udJF0hzr#_ZGb8hjrNt}yL zO+7hv!N;@a!Mm3QSMLj6u|~7!uzc`F_tnAb--DN5x%@nTnf}MM#vPZFzb^avqcUYe zOj-R8xfMsBeS0GB>wM_=@*^uE%Tp`_cH6ubegEEjC&#L&3s;^Tl@C3^X?H~9?1VL} zcDo-IwiL3MpR>_D|0Vv+pH<>|3QRdom(^}BiikV+(fbVNzS+WY!iQB?gobl2NvoFS z5ucZ{>aSOPeC3N1_3WD+r+3&rJh8gy!(M5}lpE?bGTajdIK3Sdzx-A5xGX4QU%&6x z#Hmxm6V1*n{@nFLz&QW#pOg2ZkG9J+mUa|u;x^XiHvjHj;X2QtN$}m9?`-EY6tD0- z{4DhGs6~&IvYn)0-dtUWf`m2d$F$PorM8PL*=}*YFm(Ela}ME#7xOg?5_R<q+f0wI z4`K+E_^;<V_fShkrspNah(qVOo^Q)YGO#e)9e7AL?oZiD-JN#+Z>Rt4&C{%4U6;P< z$>cX{&(B(U&Em-3OA|%>zgJD&o@;vBI^uU&(9}oihKu(_M+PR}2+B+Uq)~opv*}X9 zxm$N`ReCt_sh6p6N_yYxgp21sW}W{Sb>7*v_3OqZYi2a=@qBseu+_xxZl38WB|br4 zcgIBTd4GEH>TlQBmc9Gs@<FAHe@VoR<JOnHMqR3Wx-Dz|o1}^7bYFedopoH-YE~}W z$y~L~xni??{8yh4mfRd`J=H(%_LTRQHl56uHauFlxOiU0+?r5(r?NWDeOI0zw?E&N ze9v}<FDqm6%A5&{HO%>(FDB(27h0S<N5Z4{*Nz~+hJ{N49T;!?O9=a_;-(Zf#VWB~ zA^ywT)UXLU-(v!I@=i^jb7{>_<^JdFeQrl>n;b4q;7B~o?aX68x3uNw&UsEj6K22n z>^Yzy>v&^}yLfD+q@h!~{i>?j)?wTFUno3%?HF~gQQ`P)<s#>&=PY-g%++i<tQk}1 zyWd&*qTBn&tvp@%kL8<kc8c2so-958zd=B-?8)aPuNShdu-MwN)@uC`vu9iXJt<vq z*(>+VtOp0(em?N>dtxM;wRCE==&gD8mhUqWh?e?sTVn4vrLNy^OWwZ7J$?GYvnN4Q zFDMtD;my7?`SC?l)+<?=FU&6-?Ogab>hXE53!jtk7EQhRWb*1)mi1599@2}t;KpEK z-oK1%>c!HihW9$>s{>X)3hxfQeB$Uv8Owd132CN=`?+r1WVyVi$LwQHN_Vx}w2I9U zvMaCZ&XHN*elCP>_P6Gs|1nDzt-kJE)|ASAXz`}C&pG{08eN~h%jY*+|IsOL4X+*M zzCYJyZ7x^lpDPhRL)H5tl4ESF`#-;S(U{s=W6YC3|IcDq>HQn)PA%V>lKJoavH$a9 z-`Q7u-`_9&f6l*Roh{e19`264wfWAw<^C#t8>el}{I~c`UB&uOj(6&$@-mH-9GYJA z=hxf67Cmau-nQg*%gJ+kOI8}LEUd3~nzZ!Jo^y>EN>A<IpQ-D*d$PXt<I$bx1*HUv z3cY!s-jkYA&f6&{eI`n<Y;k|!;YWMw*jNr9WtbhldG{%Sx&BJF@jKjfjc>%?YyP9u zIC=A0>F>dXw~ju`uwBK@)XV-S{Ls7UbA)0AlC3Trk3Mm0@}49EFZBaT=Fb_z6Y9@Q zVrD+H_2=m|JsN8#Fgo;`IRCic5w}zEr=qHYkAt0rFatxY!lj>zwv2BqEdB%}*|9mW zaBjcpFzZ@h%^UB|^)p0n?e5|{lV!P~<n8@ans?ss;&aj{nZdp|gE6S(2qVwlH`8up z_*l)<kkEBF#>a7U%N$;j-UTe%)u-}^c($&3++D91zP9fAPf?$x^(hhgwlfd^jau)Z zdm`|m9XAVyWQJhLl#joZtr-~%rnNA<D9dHH)-h!Ch_Q@5yKcS1t&GE0CZF~A(Q`9k z+QrthA=_H)d!28qM+h!sQZv)<sC(LaM8P3;ro`_J42C;8{=fW`HQ7K$S>f!}f<GJ= zt}OXg*ZVz8-g4$&vpLUXe|=U|-Ojl7`f2O_$y@#Yr*C;*leehctyr|^tlXaeFW1!w z)EHHNagCSVee{Zl-A`LP8ynlV*8BG!IkINzp$f*!BJ91hK6u$L=6(2f^|B*9lMhy! z9?<qSxMz6R{e#%#d<K<55pLxx4Ig=#;$L4oIdNvR@8P1zg16fLHvH5$Il21XHO(v5 zuEiS9Di<ib9lK!>`}FwRwDcpH#m+ybsxx)%I~jbFPoTH>TFABj;+Y4wPW{<7Qz&(D zROxy3ic9wU1G1y|6X!eBoXrlX|6A_h;QXj+yW``t7Rweq3%TiXC?mf~^JB*6SKm2B z;}#b)=Bi$Mq*D4aytyefc)p$X%Fl%jttF<cGiH~(=k=Xh@|EY>vl8Ajn+v~8;_aUO zg?BFd>^32B!?%%7XR`<=O7Wff^?6xg(UM6|t+sysnq}75_e)tOTJf?+<fLWB$;Ut0 zU3x$5?$IVUz0Nc9kI$~%Y42b6O+W8i;2Yl98D%%+bBwm?{&~AfY5uRkf*Zx`I;$T3 zJ(FB_Zo}>H0=tGamLE?l#W-~A`D<%!k#BWr|JP$do-0%)p6eFtX6ig~cF)YNDH1|| zWzU+ICQtqJF8uX-let;j?{9qYJZW3awcX)8e3!3m=k|Oa8D}P0_{rOB<^5UD17@my zPHJD%XdmPw@rNyTOHSVAR&ODr)tBGC?%7uroj$MD?RKi@?SPZNMON+H`&n5{(EaL{ z)!p(}RcA@co3Bp#Dbu=k!yk#9n~~y$nYqP6H;ra({JCiEl-pN7WX8Nc`?v1qtA>BB zU(fA5QF%c7+H~g1c|!Wzg%Y=|oiEN3A}?jtGcR`cdIPuhraCwG|9ZaB@lTqsnBK-| zZ!;gQcTg_<Q^UJAL~w@h)3=F7HvV(9FWjO1c&*RBjWax>KS`gTy<UIcx<zxPMRx68 zv1d*3^?#|?e^khy>aw{T^RM^vtd#ndVSR3=`DQV%li2?}+czRgecijhKS``y$Gwve z6{LA=lr}nlWliS46h8w^Gm~@uY?tDWwasJyd`5k<Rl?dmvv=Of{`0Vj$9K}%=>12g zEZnl?>!gS3yG~{#Ds#;W`+Ycpk45Usq@Js7w^;Vy-y^TJG)MH>Bsu5Vaof*v|2?W$ zkoYX<P^xK5ujEIoU;iU>HtPu2DcT9!?sRE>-2CcG?ej;{%F>R%wkSxv4wB5Z-Z1&P zOo)lE(K1cfxd!~4vQK7}_Q^{9KA>>n{t-Fjhw}5L9yuU0anmafe-F_s$@`o%Rz_#3 zq$U5Wo3JF{T3Vr>R-35&>gC$6XIrX<w?_Q`q84iSPxSxV%moq#HHK-w`t2uHt^N_J z;d)cEvmxKU=c$cG>{YjAMzz1{dhP#v<`_k1>n;A(-ur>8d)8ui<{Xa8VI=`RcTH3E zvR_|v`&0ct#d)pYxBK2lvK2S9l~3rMq^!vB=(N&gMbRH#pQF2yIAj;ZYx%t4YTIPF z@W(Z)gJ%vnv>)KJ;AeRxpJ1`&;en>t!8P)0U#z+;8M9IM@y++rEgOFFEtt4&Lfn=2 zHgf{Xo;f@`sB@3`o~nR{xPrsfpRYF`p0AOk@g_uBI$mq~guemZEH*RL-po^eabnrt zjkj-Z;t&>EfB2fd&3w=4R}S!92x==$by$7DXKIG|j>7$~znFW)*04QU5tCJ|<|4RR z>OvO#<SS=h?cKRx`i`T8f=@c$_wlSb>ODQMoU!pf(+ba34;H#VwU=~On*TlItxN5e z${)V3S+Aczqt>x;YW3eTt#9FrPygk%?zO)9Gwb^@DIwMNIJU{IcaEfOHgi9ox4mTY z#l!Kst5`gqU)X(AUm+>kbN;8k4Sbiom~GhWvlhj#KCBae@LaC2P-;Lu%lU^l;zg~m zhnDZ(oi-&RYso*=i{h&1zHSzt-e=j!@_yM~qgflSoV&HPH2dwtsk=9{<ZZS$_4BWI z+c5XaymJe}87saYtNhSWmSS|i?Bb)<tFu<i?GaI1zyG9-x{dm>a|Y=g^4E=~HGAl9 zw2PEyzizg$x!}8@u<)HHXN}~RKM(K=ojc$7-=y37k3QTU@#oRJ{52B0PEK<Zc@ir; zsXk(3hfZ%+%T6`X{TrVdL`WG+6!~WUN<5p)ba?e##S8a8Yc@smU)jO*HhB7qCJyP+ zkCLZlmPA~Xn!9Ai)`rUt3>n3S7eXRJGTTC<)bi(lU{g?0Ynkmo!FQ+PD*MW;s2SV( z{ni}cG@sXwIqiAe{_vZg^SiVY&z7vdAW$o9x-hh^(y-yq`O>O;>3f`_w5HmA<vKs3 zcv;r%N6O9zUi&21+&<3WX@1A2bZYAQ1yfd^dUCGcOiA1Oa!aCI?@^(?g664DTNV4$ zsx(+W{HkX_Y@K|>=Bl*n<E<ALWf>S8uueUjgQuRar#ge~ZhRoPSY(cYlb1u(1U^m1 zm+vI*nli4uIBD_j;9a||msqzj3SCmYYw&2_`@f>!57*kw`OJN;U0GNA==t<V?YsJl zxPR!oy1Hg(XXoeVI~2W8=6c+`KrHAEgJxpO6cabEnF>pNCw`h%erlQrtM-ybUl&h0 zyLa2)-i4Q&*FE04_Ik4+Pv)z_^rx*R-<_f=lyz(8<^0i$Z8}%0oOk!IoJ_M^jMGH9 z!0+}+^Y<hxD=S~Ve7U>3`}M0=R@T<xt6z&t&-Q=t(f#7e_LDcaE1nF0xbphNnf#2M z{2!+5KGCy$#hblrnpR(FYX4!AQuHu3>SD0l&9b_eZkbmzb5A=)e|OFMnOpZYG||*( z{jWV+-tAh#7a8$A<j#+Pi#7Ld6vp2F7<0e$%H98WEKBa&-no3)*u=!d*7oo3@9&o` zUAlGa*1Pxqtz9^A^1p|RH=b<2H}Uzxm8VbMoPF_S_s^rZe=glTb?ft&t?fIP?ml|; z`O^L3+0y?v?%cU^_wMR~f`XEglA@xby<0!;*;rlw;r+w=A3q<w2%5eB`Sa=1r(eH* zef#$9=bKOe{<RhAtf{PI{Imc6<Q4BP{@)(?Px}Ae7L9A%4@A0SmZ>c_7wB$?tly!w zU7zKPqh9bbvwVf7meXaaJIv}e+FoT_?97Qh=)ttOYUV$W*oP5ZyKiPJ%c;HS!nXhO z!&4r$AE($0u&?pIu)+V8zNDaTa9dh)liJT^4}ULo@rz-+P_$HhQi|<tex5Z+Z*Cr% zy^?j>QvL~1w^ka?P+JgmKT!6-UtVU`4LPAHe>-(9ru!zXKUQ^1#h*3o>oce6pA$+| z5>4LlX*6eWCj9IE^=t3SIqUatf10iKal=$r;r)*@3~rekUu;ND&OD?!E7yN}>ZVT& zicD@_9>`o!+O8WVspt08d0~b~ICt8C=UeYhJp6SZr&#-%vN;oEx)xp6=Z)vCUU-J} z2LFAFCB+)|_+N_cxxM_wj_4KNyj0CP-+nl7FTeD#3RBaH|38v1PG7^m=h@wOeil!| zJeC(3QTZ&BBc|mXIC=M*xzmaVJ+l{XIeBe%Vvnop?1wtOzh?`+Y3_+$$ine@t;WB* zlh$S|oc(vLL?BOO*5~UQ41t9rMQQ>Jt*pD-eK_027#z+rigcZtbZdsX$HTL410-0d z%u;u*m{~Tt=fQl(%&Ke|G0$5TKGiezIF>b)Y`=SHZ_fMK&3ot9Nu2rZSTsK;q^P%( zE90}%huDnI51G#RR0>vXV{ctKEtTDMW?s9`r5BE=3l3RW1}(dEqr~#|o=>|D&n>FB zS}wE9=#1c;`k!aL_}N2c&D;O4sy4Xw*6V_@;<n1erKw_?Q|BMk^2%PK6rsg^HEv_r z*1ToYuddng*E%n*y?%|Bk4T3_-VJrF)jI3%eqEEHeeG03nat(w;bt;V6<2@S;CoEM zdfMtetF+#qVv*U!aKuS{e_Y&W*|}dEmqecXeel+W&y15UU$EueG-KzjKhfUPx)b*; zy7pJlxv_sz=ZeCer7Lw5*~Lrco!{wBdKq@)$mJ>5|Li=L_*k?=Z_$x1abqK%so|Ts zK9&F8e}0DXjn|dRQ41HpYujPdQRVUcW&YuXo9_M$e75P(Pw|T7uP22b5&qI&+1B`a zQ|S@Iw|_()%@8kapMG;s+M+pyzttc9d|7q$*>tA+GJmH2ecH9?i~0$J_EkZhDVk3% z|Lu9a>HOPOp_Rw(UOTs9dTmnN#{9_bQx2azyuZ&e=1Jh;CfiRtQrB};UMj4<6j!TI z<H|noi2oh6-~$t1SiE{>UAt$_w0{@(&30LNz3OlC8MUa0PyN$b*uF*2zx;CHO%dhY zJ8Ls-=kGkNc7EEo*Y<DEb4yg^%sZi!yMCM7-J}<pdbd}z6f9FYcD{V+i;Q0`H-22( z!g7qgZvD>mKy{s61q$hmDlf9Qf4Am1K9{fU{@m$4bMlRe!dF-EFR?m*{%EZJEJHT` zb87Ycm35idH?f+12v3O3_f`|wEn2bm)yal?3)n6{`c;|SIrGs{p7OZb`Fz$zX1|#4 zPG_*)z`C9F536uiy<%km-+qT6!Rt|lYTuonehE0qA=buTc{?q~C$qRPbghc!?NiN% zJ{1?1y#Mu9EiGn_N{Qj@ySrI!vJc5Ce~N$G!dGx%PhW9|&VtklvJ;zQjx6sJzwo)Y zN24-M<;fnslqu6>L%sKV=mct{T$7W$nzh?wRi{qM#!0fxe|CE0N$UUkvgq%*e#UHR zY1c328BS``xEVgUF@LY|l9b#ovcqR~pUxw_X>&JxP5tN9?5o))z{|tR{&?ZjMMoR! zeHG5A8cmu}wZY}e6gkQEiYI|e6?J0T`)(x&=tUg5e5RQ1Ca=-4q_`fj%J~yGgcsCZ zEth|2wwrUERq?sXid+q*J8E1$`_DM}Z=Pnv5z=&0^;v9LPPd$QL*cKZFDxbhb{ug} zpL}~A*UiOVqC9-B8ARQ8T$0+&wc#*7%gU#9N#|UQr|>8koOajVcu19N)^4X7(QiQ< zF6GO*r%4~+*P7h4WThEfW=eJ3bZKVOXY)&!<eT4^bGCNd?zS+^=uinc4PHZuB> zyW`vaLuc(@NT2imIJIww)f0|o|E4~Y&R5&Jl5_5HCPA*Q2F=K<_+{&h4xWw*<t$X+ zDp>VP+WgWk=Lu?eZ(L<wRDJfSV;rZx$iY)<kL-?n)xMcuw9zP{WX|c!9J3ERYdEvq z@<!11^w5|C5|5@Pv>lmrw)Y_SX2y^+lZuzF(ONWr&Yhz4@O;Ul+uJMxpI&=oD&?Re zoqaI(S>NqLpHA+NWYwB3E3RUFPJN4@R0Ch<djtJl$NV$;lT*L$mHqwOM{<?%j+xng zza!@}E3#)!vAKMe`>mb81Jhai7F4Z2bHiNa>AlNI4zewt`yOh$$@E;&=3nsc!X(b{ zmy7?!{&lXtBf|UBY);KPoi8E94zGU5oU@9Q=9Rv`$Ys)%nK1^81}@S8cb<9M3(Y7v z_BX;X^^Jt5<KH{eHIi-O`Zo8ja}}H=u{hiDeW`t#Oz%_m7)8w$W#%3im$YiW*8O{- z`j)qE$&>rpYfYuk+Ne1_obDyJO7F|Fxm!)V&&`lIaqG<ouY2<Smf}YZ9WF$aFSwH; zwA*3YWw#~M%EemB_Ov(N-M~9@<*yZqk8;`WD@AzsK2Ba(w^nMYuIVn3kHOtbPIz79 zQ+`!EgYk6ajfh`*rxoh+FP<&6())SOXW}!K;LDN=m0}v7&#ekczC2aP_^A19HAa^5 zqmdJ~ZJQQm`+LvruGzn9yr&*qJ)5t%>+1LE?>bsHeVM9}FTok~{6?|l&NB0xcS@}b zUv<0uW8IVa@?eM+w?cKy@u0k)t~Ng(RoLv@&)AjuGCjbG|9bTum6=(RPd?kWSKH>z z6!<n_VRur5i+x$@!Mkqa&vpd)+Su6Xy|A49Aa;qq{ku>8Tm25H>2IFcU%e>*7L&1S zY!nyQ_vvT6k1Tad{w%{-vBEfMm0#n=g=bcqh_FrG)WjJ4RFT={{&(+Xnp`4{2@HBZ z&$PKdTg}LI<?(;B`}(8w4ta|b4)F}$f`baIMg_AC_Ab+ioVBtj`<LTK&iF0<x|_N< zRx?z*`MAB-?828aN!uC1Yy!?J7j^yRc<1Q)RN#(v?Dvk?*S6uC<}FGHV>J2xbMdKW zr}Cx#w##mp7t9J}4d3Yd@U(VPc;u<zCl(v)w%VOCl6=#{z*Oe{)U47zCZbQG%Yirj z=S!=3X5SvyIDJnR2$4F=tmaqv)X`(f<R70mI`X*A(Gp`>cF1X}sN=kKzyFn;U^JL~ zBF4oc=~DB`3jxKo`rm8LZwc*uc}GvI=Hqk5W}Y6dOFT*Wo;!*dB|>KGc=u0b<-aAm z|DJUJ)1OlQFGPjWMAt`)LD{O|7`skou=WHiJLV5EzeIf*CX1=e@IP*Gw)0(+<+KH| zYZh`cWV~U^$k@g9Du$iw%4UxxY!~t}S8QmOaS3#-?0Isvrzz7h>-8(Ch(#;@IWhh{ z*i$p>r}@E82M-qg*`yg&@H%8iF83bRe`R?Bd_~(1%RFhE{c_g_XQ^iAf_xL1QWp1^ z(z_)*bpo4q^L>~acc?bV`LMTw|HosKJ|4<{>=Ur$i;|e+oDFN<%+}d|KcZ@8wC-x> z;M5yu*Y8{UvgNE$Vd+6%E5T!;<u$bj3cS-Zr1poE3vM}KyGYfvi6zJ7?Ag_E8EZ~v zTs!za!CQW3jL64JUr#SNc9tb$+0&azdk(G+pZ157tKVgZyROlxqmx_0E?WE${N$ef zA#HK3F|$>Q$HuUv4ZGjms3>;)zFp~0(~@lQ#V6UmHtb%w?e|31-`iIFynpLOZ*9|- z{};Ja`EM7*&fKPcRBrXnVAIy~OWWjC+}Gw59!aX@O6^hh>{ib0RgUjkyyfENqU}kG z#10B}uiw*idJXrEJL#6Yw>>(-r17et`$fm5DVHh_F&{r7toC>(+bh$hpVqMHy}YqD zbHACIft*1uuiJ)Cl9N<bvKANjWg4!UeMz%snSBqxS*ib<qy6nVs*?BA6@?Z)x>I;M z{_(yBRhHjNE&rZ<v(|S_>SX2h&aA(d9O}5766}>ymY>A^!?*Czg1-`hak~Vsc}Ce< zP1~JkSg|y*&Md7|cjd&Ml@pZ{?Mrf_b#-rVJ@YQkLnPEx>4V{yz4u*1Ke(rSba#8* zrrjRN<Td#^yYlYu!7&Ho54lg8E1v7HG-~H}!GN_HKdjriq-Q41oubbwW7m?nbX{Na zq-j@M;~UwRJ(D=OI&0<+mkX|odRi`Aaa-2osdh}TCC*|xpO*f6?rAT&*8E$O_Gyy) zx4NiriP_&S27NnOYj%G96645&rdEoUQU{KEYuswvwWvoR?t*{Bx$~z@9AD;E%5G=r zGzl!p%G<hRPWO3Bg-bCtjWLgea&O;{Y&Wu*YBTen^{vK*JMCkg|0lT~7BBw(u1KAW z_0{9j%NH1I6Bycal)U<yZb{nq8~0BVnLBG)i{6}YD?9lIohOf}J@<J$FDNnjma)L( z1;WkK=frK3nEAm{Ir6&KVdH6Bz2^eln8l(!Y_*Q0eD%yT{-MgGJvnC0iI+<3bK*ks z;;x9y%G{RHbZ*IUndy-(GqQb7eJ>IJTWj}}U+Gfz6npKjr$5=fznC{|z4yD%N-oXT z#ZEEhOSimuyIx7^)ujlJ%+-;3VFvLoGlO@o_L#729rxVL)m1Nl1>O6+rp$is=D^5% z&-VWN;h@mp@bgPK&pff>?AryJjGN2&Pp>O~_+Id#+}gyb2`d)tymC%3Io|U2^Yu<V zmiDtRKNhmRf9}S#bAJm9BD8+xb<basXS{dHp6dLV;#iSqaW+#_<YIz0yqfngbN14* z$fm$wN457pNnh-+B=?Nv=H^#-#51BI<tCPtM8@rNP*n}?wOJx`cr}~$Vz%Xb+1`FF z;$@cG#O4y#tslXCZMEvBRjMafsOGL$jbFFa<yz3hs~0)0U3_)*V)fOV25DCew_o3= zbG_E-n(hV5i&2&@6N*1oCUw0j=sVYWh<$Fv1`WPOhF-z!9jb4yKjq@R!sdPDSGWm7 zA9L~3a?d{}9C&NeMf_PKdez(<``!d8pUY@AjGVkOVe-zn$xFj0m%2^PtrjlX`SPgT z%_kn$a^#$JwcmFA6pN|jn>5GqEmvS=@$*-WIdR6{W9}&Le_NZKaMeeqhi{3~@ty#q z(m#%Ft$~r<iuQ{oma|9PWm~>=@r~~R3!W}=&t?`m8WNBmEj-an^~%2k#v)rDnB8G~ zw2?RIf)(d3iDk1&qzjf^y?g3%$=o$pmxyvWM5ZcaUd;}^bs%GF_VtBqiAN@trUd-! z&7Q3t{3M*QCdNH|W?o>>QUR6#t(6M|FD(4gGGUWs^@+DTxz{Z&U&Zt%`=n~Z3~tG} zr~gOwv|SKmHLU%+`>90CdY0P0z+Fov0?rg!P5pa!-j5S1P9EWjbAK$-J5uMh**QbY zz{j&}zWCD2kOlHwua5PbyT4f9f8dDa3JF<;i2mJadb8GQnBRMSuUS$-prvi$a-SWX z@08d+YaTHBe&Dk~c=d7lSBm@0_1<NLIXtk+QYqa1#Akl4?#}GqO@Axxd+uIuO>{VX z`+D8s(@MvK&!jXo<S{f~Jlnv!<n3Ck|6aM_SD)TF$FH>{>!a-DTE+#Lk5(PwD_IhB z(NA(q>#CAh2NOi~wjXVN{>j-gZpQBCYx|s1R@`q7OutpSV9M(R`N#Jj8i<LUa?|(O zI5FczLeb1c`{WakZPI=w8)3wEz~^bA^mFAf?t<3Du2<Xto?%JfvO23yeU5a{H%0bz z1^1)cF>4rGCSB2ZJN>>PFXLkedxm{Xfz!Y3cw;H`>gNoduN7X$H_WJKk9xmj#(#@d z7BepGIOfOr<Op8~6Qk;!`mOW)Z^(XKy^=@L-fsbiPt?i;twxW1*L|uc_|9`}dUL{X zYF3QD((-Ms4%Y*^Vp%W5Yb;y3;&k7k2lk2&TwT4*FR}JA7f+VCQSQ=N+w<>Lg%Ic5 zLm@|x)XsAI-N&|u@lsumV7bzhMD-aK?o0ohzdY92>F1ar`1<9Oue0r6Z+Cc}zwqjP zC4K+>uA0w|v_4nidA6kH*$2BBr&-Te{{OYIMYQMJwwRuo`@+sSg=z<^_G}JkIKsiS z!Ff`M_4BD$o|PMYE{%MCRpoS{>a%q-A8j-<`LOM3s+8a<t)N43GrUT!HALtg)V(NC z<-GGp>xbAVn_kxck8LDgCn>Or_muYCbnDn^QBgAGa?F%@&VD?T_AQCo5%Tin>=4i6 zhDPmcSMkl+{OE98fOrhYvt^qXX=$AdDww|^?E9mT6ccyb|BHWe-ILjB;k2QreP7JM zs43x`zwT^15Mi`lP=LX5%e1*yW#Xn@x1aZ1&+U$3=c>i)esMOp*a&j(5PLkAyH=Pb zcuDqcw(Q+@*}pUFls2z^na!D-S`wA&y7<p*_NwiRce>jx2ur*CIz-t2-<5=ATW)(@ z*z14nq4QG*&oxaky-kaz3jX@#z4T0Sol4gUwi^Y_8rHLK_iEJ{Za(jzmZP_KPwLWR zYP(#{=4>{6QttWnWti-(<^4%MnfD?x4_iOHnya|e%4zDmt8;GpRvtb!qk`@C;<7;H z`nNL|{N|4qtEz97za}!%r(S1S?fsieeot8*F!kTPVrTVg_9PAYTZ=xQlP`+cnRi|8 z?!6Ur4JS@tCHZRVdFNDZxf|iJ+ixGq%7_Y2`uy-nNQBDY>8Vc`Kj;0gKDc+@7oY9V zx4c@m_G@hIy^|51*Lnr+3u*Oo@!vl&YohJ#YjacXH(z<f9Fv_fA@AaRBaVN?fmchH zPW0%K+~zw=uSOv6XUMmwZ>|4soc+c5^eWYrhu7@OKj1lg@@(g(WhGx&CVsiAvBD?x z@P@f}=1Uar;kwBl{r#;|`Kc@HZu=Jg&OZ~nrn$9V^PfwO&|AxGGD>T?`#m<>{yN?L zV4L>0=<t&p|L^FlPhI~0_p(slWk2N8oa7(u3r%`?b2)$P^8W1Q=g%*1nEpL|Mf|x7 zz2~}iTrb)9@o9$n*Eg1`nT%oS>DB>J3%@AbW@r&QYq`&;!=*A#cJV=*`*U9Hb@=ec z^68YL(?eaZ*sc8}Ipu4sJy+hwb?0RJcB_>ZUQ9f2!g%U}?422%^O~c=A`a~mI1<&6 zdPU^$tre!*j;Lkpf7hFMX+od?_r<h=y~T4f_UvDvT)(n=<C@}KI_qz)IN+9FdQGD) zE7a}c4#85{#d?iNHF90?`+k(zwq`R*o{e9>{es7~0`o^<t7Bg3-kexw!ELmw`Tq{? zx9ehKqE64-^VnGP(}jckd)K-AubF=)_x_~6nY9ZlY^y(SdYbR%!*<uR(kA;$-Q|mc zFRJDX{dcZ?k=C9#tthhV&|lm3(`kpTpT}*lpS$f-U96^WY39!N+qT%*{z|f66&Tk4 z{{LLd8&(IkXFj?wS+{<&?B>ilYt@hZH`yFEuUy>tc9iKyrxj)^_G}m2Jn!y~<yOD? z_hc>>ur7W2{N(%RQw~imjrg|T_x54cD{qartx)Md@%Cgg!>M0OG8hD=2PuW7I?MEV zD+;+R+NCMzcOpyU;ENf?8Xj6cUo6(_vX$Ts@K|2jZ$8=kkH#F`E$>sz#Lj-<6*Ote zHx&FC`TP9TcH^}<X1k9*e4L)%cGBtD2It~u#@t^cEZNiE6&QT>X}xg%$H!_Xx3gMr z^-un4pSAQbugdD!gDJPvf90+_p3N-Dy)0|)kMHIVpMD+Q>QR5^d(cd)=gXP{MdBYk z*(LsLvF94M=9#;uPn#Th$lgFh;f~PKW$XWa-t>AsUz!&0u7@I3zPs<1?6p{P@xMuK zYS<6ac+UUM_j;C=M(>?|?%Muxsl;<x-!hf=mfg&rZCQBmTVaUqwz3<Sr7qW(?7uNn zVpUI+=#G2tEin&Dxwprh{igp%=2zyIN5A)Emv^7k>uU0hR_^-d))dR*krSuf_S3E- zR%Z6X1#W*tqwRl($LxDMYkmH{1;rkFrY>7MRUu&7g9$2E%+^m;G2?nvF|jH=G(g++ z*@g3pzKplmO|8o}DOd89-E>INSy(yndVAO8tg{T)6uzEj^mwqw-B_c&_|zt|{be!> zt8d-uPdad6;$g-UTc0du=JH4pv54PhG1X4_?Gw8N3@+x2q(m6%PO(Vj#+;J>mLa`N z|Cs59!+%qM<huPVxb@0i^<=~ARq;33c3c(xStfO5>VAewlaQq^rA)6(Rjo8J-Ks0~ zT>RSE_-xl%pF>XaCCJDJyq12TwlT)}VqV0oxa0LgUZ2<5#6)l!Xg@Z-9J=|n)eA*i z5tDVt{$JU;eMMlG-oif(8U-#3e=Xo&cj@=vna0O$qoO5m^G}<-|JYZr7mSI&^EZC) zS6iLh>HF6vZ+7I)>0v(umpSY>cb;t>b7*2j?cpVbVQlJ`1sDH~Ejh7j+3JN?8xO8b zbp5lc%(ryHhjb4oUG0mX`a9gde{<>1dBe%%utHe)`DwH1p;ruY?L^ZR?WG*V+PH3t zTgLid=&E}dy|(4X5|LA3a~ihZ(E6ttYAZAEfwISGuaAosch~%PoPNvOmO0}O!-I3u zHp_%J%umWTeCuYyeD-o`Nif$^9>3#X*M<8D&)WUc>0|nJ_O;tv+?@QBd5+5ZCFg{h z-v2u9)HD9W!IKj@IOT3wKfgae_}-sPjsyFfpDezd&e4*2E!=61x289@a?UqC@i0>Z z_XWP?S$lM%uf)&Gsrje)eplX{o|2pIUzLT;4t{D_61}VV#x#ZOwK?6qCpVqSUTwW} zyOUk`)vFuYrA<?pTsQy!!F2m$=BMBL`Rfxi`^8t4v`rVCExVCT=Zp7R`$UeyX{=Ty zu`<(F+M9mayL8r$cXQ>pUE8yDPHWt}WlY-q*R<>Jc05$~XE*ei@t{WW=heVq=e19A zHo41PXbfBSsPLEBO?TIBn}4%>%TMZ6mQ3vCP?gQFRQ>O_-8uRPmqfCSsM+j=4v(*I zV!33oSn#fU`jd}JHk+r$UM!oN^Xt`Ty>sqg=TxlGUGR%}sqz}r*yZ!1W&AD#O08Qu z-{i`*Lz^~9Jg#qFcIV~I@PpRTf<F(pu1GJ6X!@6QD_<e^o9v0us1+SI%@Ss_sRg>6 zU^g${dNIOn>XB!yyR~lJ?CGDx^Ttc_pH+YMuRGIK7heikV!8U{#s9A^Zx5?HJbU`h zDS0K{-^7pgU$&e4rthJ&`Q=x+g=U3sCO^0<;dks?Z|@8F2v&}@40Fpw%uD|#aoXN< znCIEP&f>qsd!077+4p8uwjH?1-esN<C9J{tO4C?s!BH-&hrux~FED64jjeb+;qI+@ z50AFbu`H39X|e47zRyiPCK~f!*XLMx+f)eOopg(<{wYhlVt8F#&_BV-59xx_CfyLL zFOv7uDE1Vs^gVgjY8LnH(kqI)Z%ut1^(Znw;B<$ax>%lS;JrKR3+Mhi^?+k~SfAls zgLOgrfpXQ?=WP??&R@IXYF5tWHAS=a&6#e!<l)G;s(L;=!t<8nv)fx{&3dLS+w}HJ zIm?#Y0-r<wY+$rL{Mzj8y4gQp$vdnt3<!8GF1Sd|MJUVb#yaB@-79)I+h$$neASnw z_$r8P!8Dt<yC&y#{F)zgAphE=rU^GwT%0#PF^@i5#<7U=Vub7;-Ymrx-`N{8vgCfG zy}z|?ds%bFJGNWaY}~K%w+ZQP;qkm>t-AH~`%ijX{8(@A7U7bT$<p1T%QL4YcJ?#1 z3kMAgu3Qk5x6?j!eo0>X6Ssqs`<?z*^uBhB-t6k=#J<DFyu9Ftz^pnI(bdkYR(PF% z$nWr#J0YXf=)=ME@A0kdC%(v)i`=Svv9z2!QHo*u!inm0eza;co_W9N{)N?*dZI>6 z(PBQoz0dbe{`@a5YWcT~q8HohGEEpNGXHm-EcsyhtjpG)--+M+YMN=&xlV};J}+;} zqw1x543|HTmI`dMRu$uV`z3h+Gs}OZyK$eexhg%F+{n3Jih;pO2HWAe7T_7+X{q5N zed24`CD<kua4<45vc8-mb;)s;^Gml~qRc8XyPRh&Z0E~dBF*j=v}AYtI|+$L|NecC zzO(h+=cM`9tJjyFyXmFXC19v6@s8`9=!5!<j0_74iyyy!-FsAU$KzG<Q{4?+VG*j? zYd%%4nI-FXns0Sp|J8yWS4;Mo{I5uUQkeYd<FPlFdw)LXR-Z3@dVNH8e$QV1Ysc8L zUw3c)zQ63#{^FLowOn=|`*(fhIb3!8&d+1+?(T;let7ig(XCszzJ2?4bk(kzZO0B@ zX!(0%%iSq&KA+gqedEmR2_il&w_<(FtX4nJ;w+pzqu*Ea$TG3SOWp5`PMLl34)@mP z*LwBs)vWR;EC0`@Hg;&`B)*L;JX{-lye|EIWwidbrSJFc-M@PE>izrcb8_C?-(SCZ z^JZ^v@94X=yFIQX-aqi~!HIYG>(lqHSS@$OvgpOW`Y$;te@cp;RV2Qw%lVa-Bxbz1 z!hUy8Y)o`)Y;1J&?OV5Q-Mo48{(XBJn?3P&ciq2fZ)ay`X=!O~y?e)w9lLhzvbWp4 zZ{M+`jr{!l4gb&oZ?@Ub_V515&-Op>`#EsRGkk90IdygCUB{LwG0T{*R_;wq5WDL0 zRO-lkjVQ(Ct&Ow({If{g>A^Pj7E_4Q@!LkhA-N9|Rvq|lKU1sJ^{}MC`Mazku^Ywo z1bVs`SFM}j$hJo9W%Xq3>53Zi4_y2r_%GBg>0IFPn5p<>!-6M50p1IA`WQCcu}SIO zsiVmtrQ-j~ZHdc#*VT&C_P7Loi+y;#Ve9-rwmla8S8i#DeSej8?f2uzD|J&<raQ1o zaIWmz-L!BCW8W3Nt|F%9io-n@<N9=bpIaYJ{joJnKQHCtP6tba7Mm$QHQzm6m}SQ3 z{46AChn()uXv2Glv#w`pJlR$-qi><tu0w0hx7`1EGGN~|=Z)W#GJ1OM?wEMdTdKO# zDo*~)#aC~398Nm-ZJN98y?i?c2N`Vxg{_CZ7!;#VdMR|i_~s=LF)`V6hS&W>)0S)N zQcS1(5!x$tOy<-^v2(K?Z4f&c81l)<+x^M@HHEi%MHjQy&0XVIc+2Y^vr8fCz2gsc z&DI`09c-QVCm>Dxu1A3Q-J2d)!k*mmQJQ0NrSGD7S&aWgSFPs7y??wP2lt#!&%NyH zEZZFv`z3Ij<T}pl(VBe9kKSmeZJqNX=e6bgM|1R-zdR~=Uw*5|QmYFGyHk|6TU>nU zm=ja>GqI+>jLSK0>k;uE^*tpTA2{ado~xH%y(=;*C}dl-nqZSw>+|m&D~m*rD$d=p z>9u>FSNAQx{5Rdr)Amh0Ah_e$w@A^Pr@yy4FRK1sn%s4V{j2b=bL_mvWl!1ni|w;{ zBWtp*rAXdv>fQkBFSm<MS@_(TJj4Ereb8NvwF!>1{^W$moL=$5BDz;cr$2Sdo#}h$ z8VRg89`IW(Tj=?DS@Y8#{5!t{toot$@7mTd_apmDr5^pN-PLO6nZhakqant9+WN&m zl#F8o3$l{lN!eS4maEQN!F#Tz)BTItV*TCUS)a&D=5X{~6ylYi)}@}dFG%s(xmDLU z$r{M0A9-3K=ieyI*SnnIh;ehL$&;9UTe2^wtNJ<2QEp&RWms-Dk$t=9x;54NXTDft zc(&zG&++w>;~6$dU0QW@_Vbk1)mEY9>!(b8cE2_-`#|X4f8zajU8l%|zKdU6d@8wa z-N|^)Zgnw_RSRcr%Z$s;d$+<>@cx_Y{<{<TXI+?j!#Q<w&+N!^)|+lWZZZD0?XF!} z_f}!|$@cPDGVWI*v=-mnBc}E6@w!QT@<sNSc1CeU=N(pItGT>uf7_GK%j4gh?V6lC z{k+7R@Lk96mb)#yZ2s>1jCYHFw>#OKwp(Ci^5uzu+lqPJ-o_VLCt2_*JUYp`NxR(M z$c}G`>?zhx-jd0+)_h57CzV5j-Ysm9XD?py+}23q#lk#GKEaN2${WMqEuC%6*UIyB zVy*0p)IFAb&31318LusKifqvKy83iiWGsV2s6$VCj!Dz1h@a-uKYA{CDA2U4@WJ=T z<{4((4;gbMzPx184R~a$<B(YMY<q@Ew#kK8{2uacyVuGwEGXkRq|Va5MdyZ7U3`Dk zH-T^Y_ct}$%*)=_5p_O9g<H5|M!;7Y&A_%#z3P7oemd%>xx}rT>pjIY=)}S$pWMak zW`!)uyKOV|j(E)a*)e+!F26i4cD^B*v*hTR|10-Tc{FdS$67^AA&%fceus~%dR-00 z=H8wX$uebSf11wn+kzi?POB~R;q>3D^)#has{D%Rxecq2<ffP#RlnXA^I<zz;*!iY z!pk`$t_%NrYnyWK?aYZaS?Ql%srOE+c{nfb(T^ox;*NC0ANLd6b#Ku;@6JyTJEt+- ze19gG=irIC7hU?kXm2yw{_ED<^r!LttrsuZ*S)-PCFoH8b;~J!hi**Xto^2wZ=0)% za_J+@S4<~G(@ggLtNby&wm6PQRrfMq@LUHSL3XX|DKD4(o2fDBf?L4_`^6ty_G>6# z)=PFyc`bgf=)P~($=BYK`S)<-9J-#m)*-E6Z}qC^`ul4npC(NEE4J3k_P*Yyf6cF# zY@88ycHhid!Jl?D?qOY(sxKQl@A;OcB~m|ExBuB>b8>mp?~cAl>mn`o&-=QzYTiD( zJ9AcOM9+Hcu=)4~t7-Sy4xPL`Da=G%?A4!}|2AjF+rF;vPq-?3o-zO1Vik$@$Z0zl z&J};~lt*p8=f*2#FIgE5Y~cIz>brgYs+vh`=gLKvZkR3T#Q5(98v|zp3qQ|N#<^XK z?zTmT&kNbxxjru9?~N79yl%@b<?wzPxZ1PuOXtRdm0g#1C+}IaJIMKTS&`(`Jk_TY z`95p!++q@*Z59>tGnF-MPIR1q%$Ey&A?;l|d`hO7eu-Q8?%<RwKb1w@b<2KNq)h$x z_RGQi)753oS&L>wTsyC}cLJN@osF&Y@3TMqyU9E3F26};^!EJ={^l(_ovEC@X!hQp zJLG0hl%4rF`}6EuCp_{`+APh=n0)?u)rCoG^w!4Lz79S1bwYERY)w^$_m;0!H<Y*O z39s#&Hluz9Z{m;O>9wXU(+<Y<A3E`>nA2q2eSteYE!o$UuS6uSKNM`6WNNSC6Zd*o zzMvb2!n5bD53haDPv??+_EptOYWFTlb79q4ys2!5cmG;zJ~_2U`juJt!aWJmP3o1r zPZX3xTv!i^lpaj)%8=;bK6WOVzhlYl)2vU^o=x1vwXaZp4ciswIH47dQ$HSR<(t!C z&fu`#A;avmoUMdI0%x%53A4q8iqnoWI~Df$K5n)uFzbwwY04<B?myEUb#%j20}XMJ zW3l&romh{hik7%o-cI+h^XYuZaPr&hf0qhpSbWLi=Y62GN_Xbdl7cw5z<F#}4>O#3 z&^YTMqf|`g>C6=jyqcn=PuXMiB~~&S^H}IL1ntae-SC<HRMtKA&ODEYg1g;$eV$#? zzO#M8sW8V6v8D-gPL=O&TdW)0t1Ld%j=#KmT7Pu<FH`;drQt%ep9`Pk-L+DR|I>5t zFCvTV-<iz+F?ng_tz^^q<2<v=w>+Qavvr+7Mq<^A_x-IQ+vYZL^wg+KsMP!N^knnp zxUC8w6Ra+Yh<>`e(6F#@uJKBK*62Lr#q!g?eAe~4J~M|`bY76`G}BvWZyhi{=3u<@ z=ASq0>MnNNH)fXH>HA_UugmC_#PQ6NWBE~&Q159I!}3ITKc2)UtQPv$ar2o2`(Hd> z@$}#pAHQm8_bac(^1o@Fce<GJKlk{e-}QShnZEy#azXXa;)2_AnDqX)zkYr5;fZj| z@2}t7?|xfb;+m-b_x=PEnafA-ukYUf-{<c<TTM<L^I1HfH!U&yB6s(T*HV#Xr#~<9 zOqNZb7+1esQR~THww33M9>f+ty&Ncg;?dK|QqN95S2*W#+9Y=Qap70h^W-_iA9Ge5 zvWq%X=boy`D>&)V21$$m^H{kK8S->hNEh@<FXH5^OqU2+@?JD)hFH=akt8eOq(07# zOL(^~n|l4L&{owNulYi&7AB;8&<wG-@<=c8An)U+8*@{?JSlxLHSJ96$LG18uTvKP zRQcMb9Xn6W(Q8}yk6#bZ*K1asyPy`+_`a1XF2B{ay7lteJ(I$FCL~O*@sfDBU-PAl zbZ3K$n90FueuwoZD=*?W`^R99>O;Z6Z;7HZVKZ+FcJeXl88hB0vzor1r@q5;-r~K@ z9E&C8cowsDA7;y3^dR$*Zgz}}V%?88w~s|alRBe}=QW<(CTKH%@wxwP!ks~Teu=NS zCsGlnV-hHI&tBH$c8bMwfruN)E_ume(s>^)Yj3)7?RS`ppSt3lYTacgjP<yMi!Zb6 zY`>v!IcdXWp;9i9s)|<*kr%&uPP_hC;q>>wQsbsM`N}W%EZq1oXWF!7O1qS99b)i$ zzx>S7Pcm8w(P`Wb?GY=l^UuAXsLd=i_2iTaxuo7heYb@bK5qS?V{JEkyV%Mn4B1{{ z?qwV1&C&F-TsKcS&`Gb*#<I)q{EN;x_i`)ty!7^}nZj`3W4lN3lfHm0H_ntNH1DsO ztm^n;d&kR&S^EXr`R|>qzFiaLzqRmH)Afw4As>UjX9mCAK6z1HblRQ{3)dyTy14ta zm!!Trsyol^X8ViT0)fYtPHs2%-dVBv-;IR}{QcX_m)qA(uluX?^X~F5OlCj+NLw7@ zo2M=J>Qv@gVTSv9jp_>?nD$0B#;rUYXPESJV*IN4X)5Na4YQQ3(wJwgFcuDY>GA#y zW8q`F5V!E+XA=XSaRhGCaF0rzRL|SU&*}1nKlfT@#gt7+2ev%^u6!t8Ss?eW(%Z+O z6)pSXA6_-jn3(uu*#ujy>W5aF?`otQIwhJPV)UNUwDTO}g{P0ao-p+mJKititbDk$ zKdQ*{S<%V7qJt%sB0`lR$11Pf|CI5tvP8F%r?|4myz)#*hqw?&STf7(`{pd{G6%0V zJ(%hI;jY59<Fb#IIc$s7nWUwY>mX(zsPN+rYxZ;-t(mM}WFB0|)ynN%-OgUYsquhc z=fQg22}XJXwNvajr8P-2xTtdfG<)X#K5IpO$A-!c9gn-x>H@C|P2Co#Tau+&G*i21 zx8|n>+W#~H|D4?M<Mj3<{fdu=w@*vDzcXo7uRhc2_!#>Db7lKuOe_25O>TcL#%?i{ z;bh~wO$<l#tc-Fuye{70DbBZn`}s;n-(6Y{c5XBN<FEP8Q}eK4t&VuayW_!b8nH(z zGv~3aNEQ8{7J75)%r>4?7Jp(?eHZCuzw?}1SlP7a(+ZshRqJdXFSDt-zO#hS<;BBg z66ZCvIas(JJmh@D$l9=OTHctn1HnoO&XGwI13-*I5${L{NFf-Wm0GB{^zIKPzF znpd$PM($om!crxk@1i0Hk~yEW?RwX|Vn)Ia?^O(oM9=S&dj2<m>W}J*9qJW}UT7)s zsP8zob92W=?`@ZA))YmHI$Vn~WMRMkWSZTQKdehnGsP}+=nYk!Ycuh{tW)gT<q4)7 z+u1@^b1Z1twd2@hhOP5iA7A<Ux1c=sVEd}8f~zX+UR>A{xLW;R)Z&##HmD!G@NLDk zKZn^9OfRhCHW6dEB);TOyk@igCy^K5H$3_$`en|!Hp!SrEY~#ZK1syfjSD$-kVovr zqTbD#|GP@vBK{t#^)t6%{bdtB-{#>W(-m(H|9u@>+1XXRw(qL&@yZEuQ@r;7m|i$f z$unZ+p3u#!+4tG;iE=FXa&B?aYgOLzJ=N)g86i`<x_9d7Oqv(EDI|Wk<o4Z>&)?TS zi*}i^;@Q{P4NuluRh|{BPOv^1zcS20l;OlpAq`{xMekP?v9mT@(YbwZN*HtDt>ae@ zoZIPeG)o~XKyvz?*un{g^Q3JQIm=kKuWpcx-D>?!CDXjtp?K~2Wi_`N<gF$=m0j0x zZq|N<(^=`=8^87L{bu}bNnRD#Pbr6`h1Z)WbX)Ftd@)yi#=_Z7t7f0tGW*tc>xpKY zXRlj3J8|LckK1O?T-d%cJoI_|Ic{<9j*Ta|-!eUPN^su9@x19zYp%-f)7%!Jvp#SK zE?u{N$9dgr`bX@998`>(U9UtYrgr{giDUJuO*&S)=4X`m8nJ8XpEelqp511Vd*A6} zi++vsvQM71jivi}mrO8Q=3yPb#JQxeKsx5b&XCRJN0?PMRw>Mye?mxRmTr7|O@h}a zzuK4oYl5|_Pw8(^@=4}Cw$gk<>$R6^JQ=>y3X%m!e10EZa!6Q`&1_le->W;z_DA(g z{Hix^J)8XN>dkxW1Q)#8$ConsKvCY`*Ea*B@7-H!!<eYTc#-Fy=k|MT)9v)Rn$w$; zPc8qdHrb*##H9T-yS?pJ!9`c+i1NK!&RKTwyDRr^zPG=(Y~<hm;e&`2%lFmnoDytF zze4n-uJ#{ZvOFe9NS|f-;^yN)&0&i+KRv{}JAdNaeTL!r#!P;jBkOtpZ@s=Ng~R3x zSKD)be_o!o#yt<xSp`#$mVM;;XvSN;lKoOHzy2&f+h?*%b$tT^-*NkJOm5`ZqSU6r z=cXS~@_im3ds3yzH*U91zBU%~|EsH#FE5Q!IbXwQfBZ`NF%|D)o?QREKJ-1j!z(nQ z@9SQ!X}Q0a#~&>3^<)>{ml*w^-SSuFonGB9eipO*nk4u1%4%j@Xa1AtcJ9e>@rbSO za?~Cib*|vjoRhY)!v5<H1p`(4`4=Z?zDnodsosz@nSbGz`+Z%Fv9~@xzOw$rgZg;B zKeML(J9mD;gmB>;b7k?|<OjPQ+K#@go4(Te@(00{GN!v{^0r@RG~{^Zq`d9^<;^OK zErS@nFW<ZErOdni#2fGZZ~pteziTn|VaPobANAM8i?xF{zfQURsOI?Hn(0qAx5~Y2 zwcE_P<o+RtYlr54Yh8G>b>i;Ujp^NwFLhh=ajjkQ?Q*xxX7;krZ*98ME}C5W7|i~X zYk9ZrJ<D+IYu<|1-SXV&Vu5w-krQ}%uic#=>G{&g{?8@-q)Du^7uW7du$&&XwN5j~ z>2%T7)6?&ru1k8%d~KG<41=a;J1#}4d3aukaXhu~lhz97WyR?;SBhPA$hx!R!Dg*# z@BDVJ+BSL3+KHy81j;r~erMJBBr+=6I9TD0$KRNZ&)QF=Oo@E7qyMN$>c{3yTD;<| z+Rrs5MUU|5+Gt<fe@|+`yu4R^OSn^>>nzJPFxOpexU54zH%oWz^r!iDqW8~q+z8ng z_t`T#=uDikMGW(_Wx8|Rv}DsdGom8zuU{-_Hidut7LN<9XQMCheR)2y^w5QS9UDBA zr#_h;&y*|w#Z25__IGPBMdj$sdmEc>-#oD}@rz^D!mk+(YPW*aX5LuK(KOTKsJTxe z_ng!dA6?%1*u{#KY}mB>{1e`jH`Y3I9$O;v;QQqgpZYuZ*Y3LiY+ID^!`tSupYC<c z`}Def%C24?r?R}WW=Zi<le*SCKamqsxoG#Miw0-sF8==iYGB;sQ_RbM+b;RP(C)sX z<=0EkF1;(usgh0ZsDE=LOf`zVb=xFMtCM~9uOiCNy-(+0FzRORb2*UqTdk@>&`kEY zisiyD-t4PyPClX~GXKdgor4UU(t;lpce|fH-ovkc?%|8{Jog<MUf*`H{0la=lnYBM zEbhC$%%Rla4&R@@xk5$j3|8)a`JwOogMiOhBLA>VzcXj@E{}U`)7M`K`F&a5&u_!k zIe)whxBL#e#P>4u;2Hj!Pm63OWY#B6(tdO3+uF{!Ce07+GmrmzW_rI><TB%r7cZW# zb_zf6^xMuG-LIGw&P{!L+jznn2}{9*>`nR-<`bLVix?J_gnI5=rS240l^FK+hnwq{ zrDi)8G9LCXblabkl`~5v=C<;kB&ouZ4@*CBC>Oul!*l%9lC|%0*0AL6l=6(SI2L>2 z&X-yDJ$`V%SibyC(VR1%?`9lJ`s_Br=!*99=k-~CHtm;A+{JN8UamaJ^o)Of$(so~ zm$7ZjUvH66+n%pI{roEHqs?*o<vqV@9`~*_Jntg6bm1NS>z3;CZSVcw*YnpmWwp$! z^_xrk_4f9Ey!WnnM`;hY_W^r0&1H-QMePe4e=O<wlzD4)zLV$tlPs6(PPDq&JiNBn zUpR%)<+A5*=Jnb4wAJ@qIZ?-MnHt)))X=NqxaY=|eBuk;uPxud^}XN3FT2Y*7u~t$ z7SQtLjWw6`Ki)vE={s*Pyfyd41zpqdf{IPc=O^kMQvZ~0bbZ0GX{wGa-cOTao*Ud& z^quqT@{*sA&s|9|HvONn`n>Fmbz2YK-K5?!#nVu@Il`I6cIls*?1<eRT<L}%zE?>- zwX~h{^~ldj2Y=jIs1dH3u6^srq0Cb!mux=V`R-Ecx<h4BJ2h&aZo6{sU0V3B(%%cV zpYQiPStDh%)pMHT;-eYga;5)<ZD>yEbNaL?ZQA6wCwl}^QY(F5CQn^?|Lk_}nJ2HU zeZ5BX{gccupPJh$pWl5O#Id`6stF$>f4camWqR+v-u+lJ=Z)!);F|9oCq=WrN<S*S zdOV0d<ay278D2@{ESdV=zVeZq=lovn{>RL8fAbgnziXFn)fY%vUaEF8JmrVf+LcFU z^oWMk>AA#f9}`iv|JQvr_|syp-Asn_wbBb6*J_oA-q$w0cdR$c^q=2?3j*bQtJCdo zCwy49>w}3w+~cQ78`MKm{szxkmQr}^=7}Re-I5lIgw?rodmWHoY|A1d_-{6=Uzv!? zq_1ly>PXZ_+yCqT)-=KVbFc4?7%BJW54!^!t=Gv3oMlUQ->|N`{R!vhKdlq`_L^L^ zE}ERu==pSd+Et^p6~?x#j}7*}=*;r{bA0l~Gwkk{w@V1Wy3V&wzy9o37xNCO>AOwt z3C`Y8d9PFN%C?EiX4U=BoMiPs^UKZYuG3wko6F;#MkYP8bKied=g&GbY2AJH51e(F zId06-X_nJ=TH}=QX4aZRGn^E!3BGaly%zY#<HT=?jcb>EFI?~V$jHoo%8gmMLR&?S z=1%5)Gb=Y(*XiinOK-bpy*0Ws@zJ-)`0caa7Vm3Tk@<A!MwHB_$0DjS+`(_7WV(x; zROfiLc6Ue3IkkF%&^deQ?NM`9TRBeBGyR*hR<Cq%*Q9m4m&?|!>pi`2Qr_7Yi^8^F zQ(m&9`uEjq4y&u5Gkcs`JiB4<*~Q;CPP)>5-{f1a{I8jZmiSq-&t#6!__t)|_KSO# zujo0{c;VrM1&?m*YSd>GV9{J!bU9tF!A9*ft0e=^UlD2UG`0;wmmV_2O?q&Okzu}D za<jOJf<8m{p7p8g7+*ceITPQzws>*k%VNeExzDR#g^9iXr@GSk=k4F;WIgw#yEN#F zy`BH{)wJpFrtOQb{32&=Z2P5F`l{D23k?rvxtl6t_STgz`s)uZP>I*ATqv&n|8u-r zTjGPS%6~UH%(C+qh*;t|?ak>30pSZ>0g2L#%nU03`2)O}Swt9^7&sW7vAHUpjf=|v zro_MyuYzrU%Mv`lH90g~gkiC3d!k2Rd)|`WyLazi;%LRn$jR>5_U_!m-QK&b+uyyL z^e$}2{qp*wwL5-4ob!C|HOnHdO@C_A0v?DRVt%lH#flX-Zr!S?u4bO({9oyUJ@?B! z9#Z>H%-VZm=6;QceHu}FH6ra-Mebj5<6r33>Pw}&%nNI;mG9g9|7XstpGka`TYmmb zdiy!$|Ld39U*^kxIi~yJRrrz3(JvN<KjBt+by5A-{Bj);uHK#=A8&7MJ-u~n*S>x6 zB4Yiz=&TGY{yzI&KU=?ZyLkQgcAu-@JYUh{^Iv>wsr>xf8Id0*%qX84STj57!<-5K zC&m1j6!e8d``7fiZPVj-#YUAzNBo@>UK<+qJK*l8N&kPx7aq=zeV$u=-#hz%_VEkB z*9*$azhAg;;mVaOZ{EE5^y$;FW5*o*|G&F%;^B=aA0M2k{Qu$Qiz6@pJPQ5(!1w-% zw-0W-zVPJiku%0Mzfx=7<)wYBs(V?K`?xOmb7|Jc%DkV2nSV<wi>s@v)6<_nc<|uG zix*$MeEIX|Pu>3ynd$#ae?Lh5|KjJ9H(y_T`Sj`2t5>g{J$v@<-MfbmAAbGx?B&as zPoF-0`<C~^|3C80k2t^VKl|tYkN4_F0`D`JuTc49YH7>3;zp0#Vbh(piV0drd4Arn zWENzJ`Idcn|L69k6H5<yiez!S3BA~Qs>dyh+dcS(?gL4#QrE{X|J?7t?)Iunz0u<V zKSx(yQRMrHRfYyze3oviSo(L7Vc>Iy;EXwy6)V=A+jfiP*849Rr<R=9`Z-|178#bx zyAm-Ay02VnQEbmlY;NI^I(Ytxr0S0g{CN+~*FLh82+%KOmt{|~=eOUa-8${o--{u7 z+bmskix%-eV>-mMF=*M$6VKceWOBI7*F5uBA}ZdOqN$T7^4;O)%jm1?-+FMf>vimW zw4hh+%&OcMTna4iKWpB19y$HCLzX*sroG~lg9{~#Du1foyC|IYYPnqZ_N`l=ulaYO zx-hfa?NRUNg$Iu&CU08(+TPf0+5M)b4>{Za*zFR@{h9pX-%T!t)0gtuAHBGd$1WH# zJ%@dA#h;seiu}v&b1wDUwv@+FSL-HcdfuPS!Uyd<_Di4KYp`bNUpd8ebE%25on;kD zd=&iDemKsy;=AB)D5~D4vq5}0pGdgBfKcn(quD`D2R3e!_u^K4(ox{FL7?!^1jdeP zDc6qzrEIUBq{rlC&#+5<IX&dU#SNv4?rAfcIvkI`uNIp8p~I|w`nEUzaVaJ*_@k!i zJPveR)b}?qaaHNeSg})k4#m}M+wYjOam{{)<icrN8*(%AB=4+KQJ3qg3ksacuCJYW z%P?V8PH2m4c*w<|`66E*Th93>w@lZ5t?Xl4%eAv7rCP0?f7x@phBosx59Wq@OT}(D zFzilg3tF(S{?4Y$)((yQRvn@YHGekuXw7(9aP4D7LdR5A!+2Z&#wivd=4%z28FL%- zk~G9P*cP}|PfOkR>iEUKRi+=<jz?K){{4HaEat8-U;63^AM?}KFz#vDd`MF0n#HM? zeEqUgn!8V}E8?oF-7C37&s<A-iM&;*?DKl-rxIDV_4_3L{#AUGH7zzEb^EN4<|*lZ z`6d&yXU)CwyzEp+*38m<>Nj7ceYw1S^X8MQbkgn>UelX@th4Xf*S1jpBc{I-PdSUW zXU><Hc3W%vw$j<6!Lv^tpX;%&xbEhI`AfDJbWZP?{HTF@;_uA&C(BOkE0ksXpW<NE zdEF<FXV-JZ)6-uZPo2tgb(-tPj*q_=UzreZE_|v~?apb<q)5@v5?oUY!}lItSfBdq zrQW}LJ|}B`_jaxRC{}(v<Jh<Nb-7y(xL19a_FL|BWZm=a*VUzZyWgMY5)&8Kp1^YO z+~3KekAEi~Su*4L_5FhJE>GrniZbXI-F5KHdcX8Ji$Y!Tcd><A)=xP2!E{Ej%*6+n z{wse^*F2`$mXKb`mGdxBgzsnEg1@b|mKy|D=3enzbM3Ukf_Ofq=A8~P3cK}xOR#Q= z(NewnG4;fWv)keovg}nahOXFCBo}t-c0s+DQq!)C9U^N=_szeUFsse&?i7KNyZ-z7 zp82$QU9Gn@b@&z1)YjMBWu|PeVJ5V2-FXjIi=`8pZ7#WU3BG+~$HU)g7k|`bd!AgC z$aP^>_qvbQOf1Y7Je~I>;OD)K+@}lersRkJco2Pfi+O9*DfM@)PiL*0smDIG+y28& zKb=6mlq<50ueZdhujE)AdsVE#LsRR|oTZwZ=3JchxZ=RcyArN%6uFY0xtRZ2)p2_2 zG^0aO+AroES?p$B?3(<DU3lKrNh@p^cWKSlU3Klu;u+4a%1^)feVk|5$yWckk~Qqk z)vwd`-{R0a993s<?7vo@!pxO|FJ5n&<tcwiL(n~N&Y^GWyUsd>YEC@T?$647?^)Ag zuO;_C%)asWg(ic2^x0i@JH!&-DY|5)PdRZ~^W2f;cf~HOo}%^YkSXVbS&wpbR;V1D z9<X48=BoCUHXC;q*JLe@?$gj)C04!N-jD5+^%9{%BeznGU<KZ2^Rz7$*?wXlUYqUw zB+MW)bK1s}b`f@m6!J58T{(|rXjt-ef8yUWbLIOb$z^=At`vE?JluI!Gq^@;>WU{W z2@~v(NjL|v{5_%gN@3S}&d`+x$K_+Cp16b?@9us6^y8tRu-q$NUpO~=?d+EofAaMg z_nd=KiVOZ-G0uJX$nEOnHOl7PYl1%9x_$B;&(-6WAB-pFTvc(IZ8*b$-PAF9<F4;N zveW7pnu>jh*dceRyZQU7WzzLB^KXi1ua)PH`*q~|#DdUmKF+IT=5l@F)%TL{iP;-; z$5r6^(G9uR>?8F9Vp5iMuF=Z1TW?ch*BAc3YW3mEa>kxzvU?UsUhZ5F=ld=AO#J$9 z$K`K3i79dDPKbMMA01XGy@q?;)To7jTFeUFEIF%9R*C&%zZv$eqUEAq%%?Y1Z!EO4 zz6GbmvfR*kuVq!&pB+<b_uA$5i~q8Z_cUyNp192VQ><CtfoZGEp51>SXL&nPXWI+Y z<$Ci)Z(2u4o0~;%{d>dib?eg&YM&A{*gu=uZai?pJK^H|rOL&+|K%S~Pkug!$NkxZ zxJJWbe(Atou1ei`uQ~TJ>)m*Mxz;nuQOfJ*FPlFf?Ke4{zr69{SJo0O_fPXLaV=5S zWcc;b-Am)vg7wLILZW7?Pb*d18%~ve!gBtNj?JZKhne2p<B7PktaSGdwF?(d+^>zE zZZhHU$KMVci*vnxx&Cj}FqMkjW3cqnHLnu|m1|b*^Lw;+@mKXndnWx}UpLXNZ<qWs zqf6f`E=}-iwJ}c$zrHpzD*n~EyZ5>*!}S)=zQun%*ET%fOio?yM!$rrSL_=RpR_Hv zsxlYcFkPy(??q?ymwBoe%4-Uvy6jH`%$-xKR}%hFZ8rPPxbmH4)7?5|ylxY7K67)w zZQ9$%7gD2mR(%w+&$8!s-t#jg|5Dh0xexw!jt74ooyYw2ZqarBBkxmEi*);X$~&J# z2elsfseY)nUiI_SBOR*_^@pA@@LM5na_a7h`|fhi56^FQUiIBwy6QtvdujRMDb-Dr zRVB_k6&kJlw{W(KPT$_iyWW_7dZK6fbhp{PU!KY*JvKGJTXH`~@YAa!weGiX)n(2# zd}?wzxMt@y(J5b#9-8>MdQG%g?zg1h@|Ihl&-@bJa@#y^<BsIJC!e=&yS{tYjJ{y$ zt<$H5PX0aVWM8p$n1+28-?3k%$G0#470BY!R>QG7esR)bg>`H02ER)?p1bkZ{^Y~k zpD#Um?)S2j_0R3ii~rB{t#dYWKN-2mRd{2sla@!v-mZmim;YS9`N2lY!`AiVJK>5R z7AgDc-uz#Ti`Fd_=>C%|b)lz0*~pbmP+ei4OIyccjgsa7lbWZ?KlIo$zu4{&=3x<0 z71gp*W8Vy`1u-_-a{GS^#H&jQEwB+eDZ(|y!9mEK$xA`jPr2X&yT*e@nG>7q8#)88 zGA<BGQ7L3uAi1tVlWWGk_fgY-$_w=^wW@n76Hq19aiZ~X3YXd5&74a#IG0>v=3s96 z@Y3GB=t07y$&UnoTvK{bF#D0<O6C(sKZXW2pVjavscVS5$~ZqM&?c!?|BOKWh35Hu zg0U4&4SI^4QVHTAPu?y&py`=XXurfl!OusgD~2!gN&ki`S2k>UwxMU~hV5&PZ;)yF zu*cr+#jSJimpSJBYnvl=BC7qtB%xKOR9p4;oGIG-@J5>8&#D`O-p3Ba<mcvEmS>g~ zXE}F9Nyd9x-HvmP|LhU3;Qo*?QFhX72Jz4ROj^66ZvJ7LVC1z#&VXr&py?)&t<IX) zS(2J}eDuB|#h8`y?ZsjVp$N0K#Zj|1p82%MX2)J@p=6;YzVd;-zt`>ed~dNos&V_- zxldJYe$j1o?cM0m8zCON_}1|k<=uv<K}_<jK8CDGVOujUdOtof@6icGyURs}BD-v6 zGS3KU`Is-nkY+ubMLTYO%ZpzDVYdYI7;PGlsQLS`Zhq-9d;Q6a_JYFO*E}tk+bikK zxpWuT8}G8cv!!H1bcC85I3H!?J=^2irMqr&k)W<c=PfQyp+vP~zm^p-ot*aT<h2PY z(Gi<!y+2)7K2_fMW(UuVNJqWC{IW;&6ICz%j%00=>54FEpXK#y>!z-ATW(pHyjXfK zYTgyTzZV(GBC{1{ThF?AV(kkB-&MS+YxZbozc5<eEUo>sMu(xR$Df1w)DjVgOI`_? zV*Ubc1|C0rq%O~ql5^U1GQlQ8d)}p6UJ_|KmX8jEPCqbj{S$v_(LWPT?3sSTH$%~2 zlH867C6;q6mL0I(y8cK@y6@Y}HC)2WJ*KT~-=R~i{&#j^<p0Sf-cyf!o3g}h##E2# zCMn0S20S-7Gl8c)wZ_f+M%am4uBU@y{H|yDEZXpJiko*`&8a=&9jCOtoMR`(wI5+$ zq_OLeN@hLx{>|p6J$`l?PA{#SQky$nBr4y}Dm{7A!rVpL3B~hHS%+pR3a8yHe&U-o ze__y+_LmPY9!;>aOuDl^;dXD@o6wxrv<2r+&eZmqsI3%np*zAMKkPtyB*W};f1U*f zEdRgMP-m}?_VVpVr&{TLUvxi|Wl}zae$Mf2`z232P5iM@HDO)$|HrGNw=H&`^m6m5 z6;9uHoR#J~@pUaK{T?{)*QRGnW%Y}*h4d5SwCc7k*Atetx&5YkUSQ@oTb<i2jdt(% z?O^o0>!Wph`YIJQn`+icxfZ9j?}aaN4xQ36gGEt`FS%!1xQ>RWwsyAeZM|(J5pOoH zR(P}`YwLPNt@=kg>T}Dqw&~>ym8{4=n$<e}`18)7YK}SCGt2L!2PK4kS$E+(_o?}X zH(B0)dMdx9@Yam`U&DL0Uot;z7#?+S_S&g?jHj;e5Vh{osqR{u7q@fy`H6-aq3umN zcYB4}mH90G9<rDb8r~CPeq88=OuRg+;r!^;H`7<?&o2((F=S84UKXQze=&EAV~gQs zS%bJ4(<_U+MV9DQWEHq;?w<TsdEV;tycI(1b(5zBZ)1zz<u!Fpv{sKPr_DF<?Uh&i zW?ko+eYMbf!sqG9+)J-3p1bl<`HFw%KIQ2p2c`+Gn(n_oJZE)y+}h=Tc#9^pNWHsy z`kK2!(xyc(nsUohQl<s(E?DVbz4+bBZsC<l7j~we_gcj3=%zl2_vF98ju{#uZ+IIF zs@9~M|8=-w<$r7Xy=Cq>mp9txO}(METsYC`@UshFo)xfjK2Hia_!FGEvQ5b*QrYI{ z)nx{`>pF@8{~hIfwDZtZrz<(B6I_HZ34NaM(d$QS)snV^r5mzuKI(Vq^R0MUl5}ZX zwVHe8w8@R;^JB#>ckvqT(GA-8B02i=gY(}WekrSn{(a+i*6%+JJ2uNkNS`i9nsR?~ z<ImVd)kikHX_348s{6~Y46Y}e4j-Ao%jB_@ossE6!tUIQ*=@3it9j<GoEw>8uvzkk z`s#H$|JUWz-uUQ$BezPNHAwu#3hA4>f9LFr{BE&a>@7Fj;>*$8w;3iMZFRIM%=>=a zQ0Jkm&aI<7A?;po_Mc_mJnycTZQv~3oDFBzXG#iwQ+uPiGlVVj=F?R>eWuR&Q5&+l zmFK8gCg0DRLu+%nQk^Est#!JlCpR;jNmA8k>6z@M-7ZIc?&;{v)0O$9x|XktcmB_S zLo;`3Tb$(mEc?-GFTXL%+f%<zZBBTxc9H0}6RCF(R{t%J`T0%zXvvS0Jd4h}o$jrA z{qMTD_Pz$5PueA31u+$Cif_&p_5R%NeXG?=Nqf~E&o;mBi|0>k59oE9wAVez*zM9S zccW`=oBs9PcrxL@=az@8ZXcBLD=ywTuUC`5p5xjo6_LNuFH3#59Z<FkkSJWSQ)r*8 z!G@BM4dq`h)tlIHob%#zxSV)YV&U)Di(kzaGd7-D*mgp#kxl*OvEO@-Pd7Rie(U)4 zYsbw0_2p0WdBfrVX0N2LOojiSO#f@1>Nd+SpX*?@xGJE;cw)tJ^=lq=o~yGJXFmF~ zgGnJXgHd&Ythc}wjt>pT7`RIRq^Al*-C0s`KE<4=OMt=MOQt8N(?L**N05E(4gu!s z2`7^l9(cP_Jn=5~^h_1O4Ua<%*l*PL=g)f9!*lc^zkf>C!XmFd>00$~xo?F{V4A|R zh|j6W&85WAC5YYe#&XGIM<3IabK6wPo#($yc0BZ?;@h%>d5kU_zguLBRK2=e{H*TC zjU^n@yIrQ#pO9b(nDR2R`FpXH$G)!j;vPpnDn41@$P&+#zDeaLYpdoWfe;y+hWF_P zhWo7?GHd;KdX}f!^v4<hetVYdjg9CW$@WRfY)vzoLe8We*}n3Ps@UX!!W%aZ2N+B@ zt$Td)`=4J;-a(HxCy24TOpowfapmNK1mX8TuU5KVJHV8ubhKFc@0@S_J?=8?%{8j! zx&oQpPpm`>6dM;EZfst&?s>;6>&H8S5_^&^^O~HGHSlBQO<y--`6P=rrg~rh2^|V+ zN-|UzJmLvo$GU8hPxqSdzXUBe=f?!(yql!N@+Y#@p;OQG0QbxVOZgnWSSSiKdfejq zt|olcK}J2SZgY9<<2^##FY?Hk+wT4xcl;oa>l52^#Yat+NNXNub>KhXZg$W$>3&c7 zk%bj^nBo*Ok0{C<Q;ZIH@p7MfWGdtA14RX`(q<c79!}SJ-BEX9#=;ZxHZCybGH_Al z@MLnGTFWnZQ2a@I(&~5KVyx5VFnC(Ob!7ORwPwEUa)<0=)hWV^+Zvc{h5twP+0Klw zzR$=WZCkx+QG)q_#*g-M<<Fg%{-dPr;z76d0aIVpx^&gPU3FMDb<X!!RTF2;UwU>z zpT~xGITQRpO0Kc{vC8Sc%U>(6vsPZOZBE^=I8{|`drHyzoUpB)fu-KB(wL@;jpr^3 zUQ+Wsa{1!EmbcP^(@$Owx^$~p?`2GDh<5w=RTGMePQKjc#knEXp4X=Q_8rSiu{>Eb zO)uXm8^5Yw^LGE~v0|l^)7^BYc|xo^o&@Ta@2b^Ywn;R7aZ{D~uKBsCPaQ9x_mSVX zxT>^bTkzUBC3$~ytU6xUNc+a-zpm+Ca69_#2iIc8pQSI~FO_mQkmSqT{+>Z`sgC<o z@v13vcd3WGn7{7XoP^~sH!Kg$KeD=e^R{yejE=mg{5Ea>JY$83jkc<2s(*o3&~F!? z|0hcSwpgdln89jz)?H%l#tXbn(`+kLlpZde@%HiC;?G|bE$;e$%6dNc!iqD}XYXG$ z{I)&%X}5$(r?>E7Y39GomS<PI-V^;`<-+!#KW6_AwF%mMbV=a0L$#d!2Se1iFMFTM zxU_ov<lSGTXD^(yvTfb&eZ3bA!(6_<_UAb?d(EBT)Y%#;)7j4$JUNh`W3O>@sd;4W z5xFz`@{Ke6cc&~r&@X4Dcznu{Ov!wI%lY#@ADMTbM?`bxW{$sA8b(!K_mkX&II^E> z{ZL?Qz9xDser9(@e|z?(%`vS0NurYvb+#E@h<>g1`sMzx$zofi_`dDd=j)E%u6Jv; zrKr7sT*bGWqAUOW>0UnP`IiX|?vu{{&S_j}{N$YVg|H|`<vASIZ#ad$65>s_KkMaE zs9f7wU_0Y<^@rNK?Uijc|JfZB=D!hRQ>qo17Jh#kPo2M(l*fXN%Cdc@lP=9)wNYEz zSL+kE%Zi=q^37_~-FPoAndqHj^o~d6idBH$<H9>H+7r6^k8#!4&&{5>H2D1FPNm77 zm+da;1f3M&Rr*!4CidITODPI(KX>{~Ej+HTk~BAXZ`A6KIx|b=8aKNg|9Va#>2C4j zu=38$y^SSzxhMP0uV3$>QZ;?qUdQ+LC(~ZU&g6HS*u^^eMSS$3$q{9RQ9BnTDmul) z9b9q#`ZnX%4F!QLMJrB~Of0+}{oz-BVao?0mXN|K^Oy4&W~AFR%Dwfy5ydSo?L6&H zKeL~UWsgKq^7_S3t#+l`6eij!{g*lK*vjjef0A3|i2G!po$rj_tbMdjz%V)ge9K>D ztJuB0eDizzUv|FIS;V1nrEgLF{G|tMf6Mixy-m*i<YzncNpgtI&H$~lmEUXL`hAf< z;vn<)p@hZ$r5mp<u}mo_)vZ7Mpq}%|1l28?KXkogs?NsAzde;>9`ZT)-HHSIuQHWd zm~4^_HaU>6rAbNrP5kYBg}ye2>wAyJvM%TS*eAaChofoa_KUlgpFC@sVtM)OB&J8N z9!1Hn)_s!o`<2zHcu7m=bJx^smw4Q7ZniyWQ1tX$Y{-{&4B1{5j+R0S&;4S##TR$2 zde4(|Z+mm_v~R`!tK0tWof|TJ$Li;yKf>3qJ=qm&v3$Wom&2PEWN%$(d-99^rO?mD z^FuGKS=2w(tX)Rxitq6o#sA7YV-MSU9=A9sSbmFRQs;J)z)4f~{5krL=k|q1>64D{ zQGWTcsc+v5uS<J`Wi$Woadi;-yyy0(J<oQDJ^MZT>-_m^^TOu7{%5O`JvIE5-hK=A zk9oi6^qS9%Qh4`zhLoYiV_nA&C*|A@|7x05mYk$~|E;grJ@fZVy=M3LsVs<c^-!<j z6x+}y>TUP7uKU5kv;K=CFK$=){3YYk`M}dv&0jUMSE%?Hm0vM8y}WnF{TI_}HXB87 zYn+dgWDb0=(~_m{@ditg8tLn%iE&3GLlY(_{H<G3()9Q5nmxG-zn&LZ-MM_@boH}) z0#AghzlnI6nfUO>Yr)g^Pk%deNPb!E3`05biA&_?Z;v;~kl)8U{k{HNeuhn7zu0r# z<$PH_IZq;1?CxCYowpaw;JDB8Zui=quaB<%FZ(Y2_p`$HFIVjTSF5m#>-d&}+iTCZ zK21KeIkNb4d-QE7k%{N38K*AHTK^<+Puu6e%a?3jJlE;Zo9tN|^qN1vUVQnyy_{0V zJjuz=F7J|)(`!3Y^WRpcZ13Ir$~MsGR^q%!$M+jc|5x!R?G<HPxqs*Lv-jqT7nSVT zoatJTxIZTA@;k#Rnzy;~?j5<;`T0*D=Mqf?{dpIb+L!Gqne#jI)4R{Lwf_EVlxIH8 z$(!l-)l=feY#*z?b1zJ);5ueKd)3sX{XXBF=DrR+m+_VRM#sS>M`gb+KU1GouQ^+D zruXW<AE&J4b=Op^G*^35uIb6QXX6dajV2kXw<ph5>0T;pw7mEA&P~6A+f&~Z?sr?F z6=?cjal+^H4o-9NKJ|hanIhNVK5hwPr4w<d%6^{}e9jVd$5U2_qsz)HYx<Sl{~cCT zNPf5W+IjVbfA)(F&-P|jtWeb~eV4d@&E&4tf`(_0UVkbzGsS)R6T7Uv5!>^$p0Gsw zajjD7%keb~pVbnv<3nST)~v3*=W=c(?KjPL?(Uj=Jm;6%iMIc_47|dhvmM!*9X6io zX;|exEmY0!h+AE|BI6~C*<Y7_3HViId2abuh2M-{o_~HFyk>r>Bj47BwHEJ+lN7QY z_4Hce=4}eKopVNu|5A?jS<e3MOEXVD&)zsydFd6NAEx08I>T0J$jeQiVjBJ<{mi4( zWg&()y;n}iT@WIC?!slB%{oa_%-&pj7W(;HckgtQWfP1%E^8H)cCW3oJoP9}K-1@0 zK=5jBr@DCi@F$J4uXegEY<|6J*U5J;QeC6!Udf*eTRtlwPbfrh?M<)JtN$!-r#5(| z$Se}AHi-Yb>)4V%pVr)#&W&uX5<BUdwZMGEiCE>!v(i;WH(Zz;^56RC^VfEPx}8zI zw)v?uM9;LT$JD1S+-G)gqeggb>4})l`&WH9bSln*%f0!`#k0$-I$W>5N>SC*x~X4z z=VByZ-h=x2a}>GO6!`^p#oqss6Wljj`SqPN5#f7xcXf0#tjILB`yP=KJ*)iF3n8PO zW)HLPrzL*Y$i1zRcttb$OzO0_kf`$colEEaU7bE#d&|yk4fmh6rC7z8?BaZT<&{!- zVsWEJZth3DO$t%hJC<<sx~_a37|dqDuGg;<Z(v}xvM4uW&Ar(R+w7;^FbHMU?wxhD z?d<d#LoaP1m3I$5q`yo4lb}2;Wv}OgQ_D_$eVB6j_02a0&o@rfm$0?V@@;inQQ(sK zP=V1c)Ahe9qh7?x%)q%5Pb7U_#&4Xb<LOwPK39IVeVX!b+uVJ3XKl}{{1g4*drxhm z^ueP~InN(_A6b4V;Xv?)C;m^WBpnjk;`d8t%n6XIZsgKhmZt5rb*YzGsVCC|K2`qr zGUvmXof*&6C1vcr^V6NN?9+{D8S4A*e)<qvB)a3paxpDCi+>M}9=s&>hvP-BuD{XW zBYV?)?>!KC%d_{SLtF0IX9^~}n3809^yi(FE>T$>E99hee{1L2KSj@1KIz(>>9$h$ z?<#kTz;<291CKZKWU#%e+#e&I=OJ%#@q~N}uk8zSW(JO3t7R9<+_8)5y3wX|&1zlq zKAmNSKYjL;v#y@^bMG1p8~17lPO}q#%lXY(1+UDxoo~}`ev<du>~%k;2b}$z@ALnS z(h6qPitBHey}G>YbJdQA0=rCR@$9Pf&|v9Ps?2?waOHRv^GvQ;;(z<E{gSt|Jos{c zbExoAo3*Q)A3EwdoD14jzvh0K&&1t%)t@r%S9e9^PQPw&Nnrb?>65<2>+D`|$vm#u zJitJ`E#&s=DeelctM$`L{;EE>(7B%X8`ED^VaY~*^CQPA9xoTPdco(a*L9(?Eb#vQ zO;J4e)*k;Q{cPf6|4)<6V|J?Ssa0C#6Ff`o&(S?jkvkmLAG5PIVAgyfyv+HGT*j$V z&l7VtZwkt8)LA}xqx(foMbT-S80W>yZxZJF)3bj6n@_oRzHNVY>56=|ymq%HPUctX z{R>Zv-~HV7b5rLf)BBUBNuJufmoXx!k|)Y{wzfu_to<C5TOm!lS9nwz&&F;wI5O$$ zRz1ecj0U&9v~OqFxP3z#zw$(m{!+ag4?jQnexg`Hdg0eY7xE4Sf0>%8u`619!+bMc zTd|KTGE=uGyL2h1Z@(?4{mjkgmnwrzuGT@Gi5;^=FZ;g#sd2~o&V6U2>(0BbJD1)5 z%z4H8pZVjB(-^1tMIW2ed|op#<w9hahx7GwZZBh}{+$v3N67MFXp5cquJczaC!LD9 zc>P-bte?@V=BRIPIAph8sdvr|hTSjK{Ezr}bQs9;&$xcoEl|?o;+q30OKz%b%snhI z|FY4osD$H+5AT*PxPNWu9~F;x^S_zR{XKE>enrQiIl-%z^~YQ?isftGq~hSgz@B`g zsdet=2JZ<W99I^q-SnGv?cz#>rN?h*D|G5V*V^>KZ%N3+B5Nm>z5Xdd#*1fXIh?Z7 zPmes7kkjD0qo^q4M2X)r^F_I@($mxv4mj;7y4oale&5uE)3X+Zgw?tHu#QS>X?s%r zg~__(&8@2q8tn4@;rGK|9<=N(tNUCueLwR$m6=X)MU&s#F-oTTsv5gbWoz4dVw;Ro z#XN4_=eK?`aVr#8W(zLq+wOc_?~2{dO|>1DZXK%KyZe$W<C4{aJZf=8ym2P+9V^&` zQkcKpIu`fK?mcg7bvcW+MnJ&F?jVVUzY8}%d#(|2tUu*UZ_2ygl)HT?%?~UsKEz~I z$eG*3OT{hV)!))0zVl!=^F!6n50{uKBFk;}?2(T%WM6-$IsERS)sBlzEf()z>7KpQ z-Cv2xWv0NsrQefxwiSKqPFz}cUGsSIN97;dTNADqczc%It?7@u+jTC4UFpxmZ~B=6 z%5G1ub-&!o@|{chLQdi8sm1)PeT+Z;vN8RP+PX30(Qhf%B)&&g5vC2X)rNbL125kZ zdVJ^o?Yy1emrXfv>A}h4hTkLYO1S!(rp{qwom%;9MU{8K<Ciz?_49MANbVI`aW*?~ z#v}PFOJ=2S`FZ2(PjeylJ}$MsgI|T!{|YZJ7EZ4getst~fWhHKJ<>toEo`nz_j8w2 zD=;%KaPcxQ2r)1)6eO0E<fN7q>u2Vrq*mx<l;qA0kIlbjAW|E*^dGzSr6uncvI<Eo z^<K2pq-0G^Z(4l6n&FY?4&~!hKAL~)F6YgY)>xh5&ap1P$geNo@6G9#owK`ApUs~) z$H}FDX`(gHVusqTMJFqNJk9<;JH0eg?}U7zTrOAA!gm!St@cXiC+(coQr{7L##?ER z=~>}zdgrCfPH$7WI*FsFXphRgQt7@!nF77b#ky4E^=z^|lFxaWiLc<7oG0Aav}wuG z13Mjxk6mn8%Q@eG>#$$-X^j;pI_wWJ)w#U9R+elL82m|bkKFw~E}tg+%;P9pZsa8` zD#Meq>gDy>;-$YAU2Y2rUY2&JJovV|-jxKYZ#JvXOsd*j$SAz^PoCT3`x>fq6b=f! zcyeehD}yt`_F7IikFL(nITM~#cTLd#prf4OD?G7k?yu;X%}>6~;Su`MV7%*u?Ln?B z-9}7XZ!$)4De#+@)|5YWkG3;&zZ>hA7^N-WV&N~o>a@Cs#Fu>cdkSw{|6S~4-5gXP z!+oV$|CqVP4(<!Gch8+$>#NnWe&S8*P0zJnH_ZL7VL7?%=j=U~le4w9v4{uM+2&;P zXKOt8+xKMF<rK#+3*Ks7`S5M}sSTRTc5XQ_WeV$QZ>z<UqSChO&aI9~W0Ed)JvGgH zj(XLNV{+F58veQjZJ5NhH~mTh--R}%DZcq0XDrxuFE;-9sP_2|4UX$ivi3eOnzW?n z_m5w^ogOovea@6$Y%pbU&z;j|*-qjs?{!^yA+zAD%Z*cOY9shkQokPPt=+JYCH1<Z z=ZbwS>GC-mjx$TQoH8<*_g87-y~7)#^*^*ZO>sTGdC~{=h=mj7_S7=izn;~x!zQ6| z>qq0d163-g<_n)=5xx+Yxp3|;##?LV^clUdJuAK;cXJH?+MY`N4bP-rS%@xK_~n^0 z>z=5Th1=I#t_9n8tV5^U$L~nO!IE3<mOQMQ$$TH!eqCW<wed@A?mF6)Z8zVqb%jgO z^0%j)4E;QpZogf+-gKhO+vL?}UrU!pi(A=D)BjV@nOVjfVOsZYXS-v)K<|1n39}#l zC4Ksju6$apyd`yY-6|!88>M%)=AM50zVu0vLGnqr)>r?}+as2pJ!f-OI>o%a?mYto z!w&`q20_&Pl$NiTo|#tsy=3zSpDPIy5+lCMfB66ZfA#|njG`L<QW8@V5|S=37CL0f z&iI~XaQA2WgVHIThadgS^WLe^$@ct&*UEJ_Sg-GzHs_6T=brd$*Z057{L}c8O-||f zjVtP}<kzm4yQy?un8)O&A>Yq!y1T3EtoW}f_ia|qT_>_@>hqk*#nZNw%$gte!1nUi zjbA7KcVA){x^2t0t=qeglzcZRuHNNWGVe{q$=e3X=6O|J8IA=rE;8l%)}Q<^;pS(f z^mP&YvNlfh`C;{wm+|1Squh_h(^FpL-`%G1G@$g+maFd3*YdVo<<}l8DvLV4^|fw{ zd0zbUM=2ZFkV+d+=*Vo^`~MXK1H&iu(8)<GE+IN}wr3+k=i9CK`SKhemelCR+9kha z+Uj{O{`bBoG5<f7NB#J{|F?);&ij8a7u31^RY}ip&9B&gGg|Pfv}ICeWZT1q>-D`i zWX;x#w_kc|>E|uee!ZKu@7eb0o7bLy(!EK_#LRU27PC&5(lW#1<5pj-{RQ%$teqP+ zbF%6*Rjb@nG5ue9TsuFfSElLl#fr(S-;&pM_R|7YMd`a{`OzVP=EZO2HZoV6``WMC ze*V;_E1sKYJlV!Aep^~EcJG0sClh$l0*28*bkYq528KuI0h5<nL43eWM+A)0?=Rne zpJTHP-@j~C=h^57g40(NuRHPmpLw@t`Mf%NgLsEUyG)!erw6^5yI=6K%lepkLL2R3 zrqy4cvnBMO*7CaPQQ!3A%~e0gg;#m4*y^+2^7T5~(&zX0U+c-pNqV-eFt7a0mi13` z-(Kz#;+=QpzOkykS;Z}%%=4C?Ha|{!?yWm#&FoD&YFkS}gUW6mQFZ+*{DoJiEb5(6 zr`Kxhf(`o~UAV{`Gl%CIS}-WHJ_@@p$-r=0nSntVIrkJ4lqBY5f>Oxc8Rap-FJ~R+ zSJdE?73x}W#X+ITfgy8oiK0lOg9h6YH-{yhS})G1SS(~&!p_Nb$$Fv3W<Fgm9|r+J z5x13G+XPF~=4`uJ++zLx)UM6t_SN>g=bzvAr?l?<Z@cF||IPbsr#{D-uk4sw<Glu@ z30ygRHVgp_4Xg|?3=bYI%(jtR@PJWF?!hBQIo4Unf*H7269O6ZSRZU$aJ53rA(2r> z>_94`jouc?^Q;;%4M$mb#55ddPG+o-b9l(8BX{7bV>p9|L=Q_I>-9&K7eq}oDr~s> zpFjF&!&Q>}VV2Xu%^DSYtml&*D;qA0h|N2Cs5r7hPTY$-#`oc)$QYaH-On36n>SWe zaPgmi^l+!mi){=p49j?)aj3DLbKt4aFp%K9<Mq&S@`bqv4lWAVA;Q(qD%fPswmwpa zYr5;hLd66F{(@OYmlo_4k;`D8p}J$Hd*Vlp7`Y?t4q=Y7BL!?{Fg@XuQ(_2aD`pXQ zN_)8QcSGYr4;{HJVopq~1qG2ha^jnWR9NzP;)-|b$Yq$E;9thN?%Bp2HYYq7R&h=d z<K85h(pq!eIm~gkqkV;d-V;7nkYV2)Lk~J{Z*^+kSa~7rgf&+QE3aIH(}hR@i8IV| zp4G0A_+s(FPE2N2TTN@%vELD58Ky4$k*9xW$Ze54C1}*}T~M%#)wSu;lUg4ZF5bTW zgB9}AKPxc)u$MYzqbMHDzi8{y)ob_l>Dk|xvS09rTgIU&xO!pbiy3c3{>VNM4%v{e z{oY<*W2viLU*sDv(Qwr%H@1ft8KrzwxiXXcjP*^gYdoy&eXl0gtXccw^rAkg<K0R{ zvin|FS^Ai)l$`hE!!)C~RcG!qy>V(Scv&%-{lm5=rQt%lYd0`t&bS=TJ!jKr<pr;1 zp6z1t*!ej2q1UTFdS4g5yHtDc)P|af1NxlD|7i92|6nU)<$U1PTUT9TeCM;p%VUwd zWZ4r7b5@;u$XOJ6Z=T~*?)8PA?i*YxTvy(;Y>q<pOCd}5#jgG)kF4eIWeM!Mp=2Na z^lsvuRgVkiZZR|CTT|jPt90M9X*;Iuv)#D8JU(J>bbaBKce6e3*&bYNy(XzPYTl)~ z*Nf+u{yO|Nq#$_eAM3Z*H?O_;bjkeFeAE7{cx-F#J%8;pp(2yY(utS)`!CM4e!4$r zkzx7HI}1zC%iPK=Utw~wB=E6f(Xl^fTpKs<JFnat?|oqMzQd~uUah#X-!Q%Jm-Pkx zNh{`Ty~B{{waS7iU_sTgxpyKW&uxpYHEZ|zxwk>1xZ>%yRmyF_$}d+gGhb7(BmM8q zp4U4WW;Hz8`Tgzmi+xA4j@G%Y=drQ*!p4$*_+qP?cl^rAIM-vlulq+YymSAL#q-!{ zdflEflH7`HyZ;<goP2B-SFQ5A_zx=riymbsFWB;y*;I6PSlbi5@Aa8a<Sgt~ZhRI~ zntM$9nC+s#r4P-M7T@BU{B!TK0>!nyF-umo7#d#<$a*e%@k7bph3AY{F19#f*QZ;% z=h*8r9-E36#8zCKe&5bQEbQ;rxbr>+ydRa`te#`U<!HE5r7z*Zu8vFRDlI?!tDMxy zKYwqKmSx4WTl*Y*j+8!MZriii{kNu!Nw3Ul%U=&~aot?MU#a&|=h;^uRZ@Om?$rCB z?i{AqF>j&!!==BhrLy~zgl5UweBYtIxctClj_}4l6PcY~!mshq`NW;rD!6bBi|aZ5 zMKaQgy{#qZj@~WR{`{^yVtM%A_wh$hh8lRQPinoBmg&8fP2X+#yO}k$%J!MLDd{h^ zUz{;3<*d_u;aUHl%$HwP_nY+@|3gvpltrI2tGB-Exg6$cpHUz2!=NqC<LB4=QFc11 z@9O_1T2`z7d0Z&i(ARBwfd52e{d~FUwjbwg>r&%hF01N#IO|b}$p_yVx1ypKOj65f zuWd}3;UHWkZu{(M`-~E4wq;9e?pdT?m0G%H;_?6y@v7sCB+pIq$%>KGG`<s?HfzJe zN$1uteO$lN(Y|JaME4oyq=tmuNfL$a)eCfECEc4s_f$zcm9OG6(dl^;Bp80@_1}kQ zt3nlp?^aK_S9bPxc8SNWwY#3onGiTz*WRIsBYfS({cj|%DRk~y_ek1e%AYd#2}f4H zcu;ue;JZ)7UuvCVLl(Wzy_v}G>V14wS=$}KZyZ)xLTx?qx1U-)-Pv=cd%<hFLl<v6 z>D{S(IBLtjlV0avpJeKvH~S*Ty{bpqtX`k{>Um@;zTQ41yK>pAhOa%v;cs-d?s<J) z#w_v8v$Uj?G~ookS3(QlHEj^$x>S(+a8JX5{g-@ZvES4c|0Iz8bWz%+Z&wxtoMB&> z|Knb=%KwG~nx9*qdvBX$ZF|Bz=+QL(<=1pOr5U_xPq6J2TQd316^%<$Zz5XMde?l> z`Qc$0spRWZ^?oP+`{dTDS8qIwUb9?V!xi*#+KVEW^eCOp4!2@mKd$!Pyw)=Gq>~f# z@yU<ZSc+fQw3=yjV}qUKze}n$Q9BNXER0)SJ9%RE&yVlKOa*@?scqKZBU-1Mx7A|R z-!}24HRUU3cP<Xms5m(@@Zt-%#!J<Ka_b+dml)`FFz4Mn;pD%5f`0Xh^S>n;9-a8Q zWkIqo|NiS!1Um0~+ist9zBbg_vDG^{R`=ik-^)#;b&6L8U-}_hoVPx8bxQt(i=1=9 zeO~#t+OZW`-8}j&fp=!^jrENsZ_2-O=RKHy_~5z1_|*np@zI^ld75*1BVG0C%PZ%v zyYxSK^`0{~W`_yZlvTby+uIa2*P!<0A88}54Ie~|-v0Xg@7SqI#pD0BtFA6zvgM@N z+at3>57szsUey)%ZF`=|r5``+($DeVKD*IxDdX9Opsil@tJeJCyZ?_PIyzOd=0c6c z@-F9KOO;={*VOgKPTQ55`e){`sOR33*3LOG(Ogb-y6(O_olW;wygR+Dvf?!>k8y{U z-f7qLH%G5aCR*HZ%QLdQz53wcZV{yo4yh44eot%BynJ*|ux(+P>ftC|*6WL3v0d09 zaP{1?4_XJG3x-{6-W#^$?&i$9+ax3G_jGNU^^W^2^K<1lpU&RbReJ5Q;mh*s($yI+ zPV1($oYm{T{rz;b_3_k$?@ZDwbapQ|%<=N;-Ww{`j!nu^lW&FSzNp={Jo~{-m#Gsr zJa}$X@oD`xg{@_t+maVJWSokqJ%9U0=$;*mmVIwG*cHZ<x}lK!uJ+U)s?wdSGb<zH z%Yx%ALXMV-&At=pGq?NVrhV()W*Z0D+`N?%``vLz;JT%`cC6t~x;IqrcsQ+7@n*^K z#3Cogoqzkb-<!pvEjT$gi?2d0RD8?st)=y%WxFhytGkli%(y$|?C!SFU$Wx!PiMm| zb1Mb@EKCYbdcW+@Nr8)ey8`8R+e|rH<{4g4QGMTPdEUx-HDB*t;P5>&bFp~P;<}9% z({i$umwy!WDR?9Pz4ahdRO#}MOGJY<UedX6<)zlbg$rI5FfDyBG0(ATYuQo-qeEQj zbCvJRSNfElcUgf&P4oJtN7LH6Ke+OoeGzckaLH6Xfj6GNe#-y#ZTVVcqWgM^Uh2A1 z_FdO^1%BOcRXmliNphy??4awm`(1@*|JiEKf9=zK=HgX~=6AF`&OZ;=>2|n&wNLc@ z?YVCz{^&EBw{rXJk4Asywv{^O-nwKyE1zj&(7MpFdCVHG7V4Z1vwrtk!fNwWw(S3< zJF+JhKF!dMN#$GmX~ondd9R&b`DR4T+a{|&b*sEDd;B>@{{AyA+$VSJ75Tqv`hf*? zuj9^s-Ln6d;IHk<JD&$Lz4|ZYxOn+7p5GU?pJY;7;<3IjIazSt;k&x-=kirs|Cp>i z^S>}?DjVnj30D$U`o3Y{vi^ED<Zj}#xW?8y4?5jCuPu1l)*?PRr~Wi^%B<+m3RW!B z|FrJ0y}Lc^Sa(g$#TA(ke$6bO6x}ZIbAM3z^;=)8u5+z*P}$IPCL}23`>$7t2jjQM zeN>;6WEp$Oah2!NM7KwhbC(&1v85m9=(y*+TF^W{dnXrT`nnlz^Nt4SR!x4&uV6KK z`9yZfrW*Oz^ZrzJum8`@X|<j&!{XwXxvE<v-)~^>-n;2Ww9|z{%#Rlxe^;AubZ2ni ztDAybGJZ5&Ho6?sAnLT%-sT?9Yo=dv3)+L5qaHpwY`>9xYsM0@`$t1QcD*}XZmqM6 zP3G@9_KXd&;T-ut_-3t=3w<5pm{v6Lnq>8y?S4w1>aQft$vU%pO%_Lxlr{eh|LoM> zlaG}0FJC*FZQ@;MkanA6-zm+|)@SlE5+!Fk+y4I&v<!>3alRC`?$UyKDZAP^E)3^p z{9E$KbJ0(xb(7z3*w$-e*5Q~n%lr7mD5hO(N2aWOqxHx6R^sIowVZ#%_vc8>bGubz z*<Lfp%u8U>*~y(^_pVNtoud0lmBVG;HU8H>j*D%6+wkpgaDrdv?1Wbd@7EN>UsY*J z@C*N(CG*+!?yi$UU+)Wa9Q$#xqWX`;;~n2DH?$pL)w^g~?LOglkcObZYK=aRiuf~A zj;OvqeEojHY@IEQzwW7Qf9}Iz*6gEjq)6)G*(Lm^%x<I$zpVCry03fNo5k0c>?t{E z^1HTJT<VndO6l~F_e}AfZ2xzNIWE6vwex>USZ(z4UsD+D-xOb+_1AsHnS=YCSv4z8 zK2m;mxkx)_^Aw)RB5kFs-HQ_Y9G}hUoAth<D9_;f*XOLWroZy|Y<?(IL-pp4!);H# zojR~Pl3n&s`?)zh+S5hO?VI*|!hWm5nA@2e(<cbL^ZD{9|KK<2HsPq(b6)Y@o-SAV z(BJ_3kBr@Be22Cu%;B52`9l-ux$~0i6g*ePDWpX_cAoZM{>_Yajqm^D3$C&LRh1~T zq1m;(yS+;(CvcPKshj?y8xBZGZ~eWopXKU7tHpm+^6K7H`P+Xj-f;Q9<eTGM_xhf0 z3BP-C+U?9QyZ`P@sGhYde&u_Q<Ezr9vBht#)Oei9eCtDnVd;_3uYAErR$HzqKQ;OE zD&KnxuioGGY+BKW4F}G$pX3cr)e`OXTWmN-uX``cr`FUY-(R9%rT1OGn|R<M-~7Lo z@7*UR^j|o|vnlt-#w@m`uQxs<$g4g)QXjl+Wq;v{73y;(GbdfNwAyi8z0D_jahx1) z=^nQiQA##)6JqnkTv!#9jQl4*V9fWe-?HrcyqZK6?SGb+R_<3}ogcb)&9WTT*H3=j zJo&P%MrWhWIkR<ltoC1Pb)I(Mx)RsZKRrA`(&CaC6JO+AVgG(>x0poalNru`jN4Be z@5`!NoO?A-(_)*$gy^Ccr^&w@J{BC&W@0kPtCDNl``lA0@ZjYY?XQZ@e0})cS>vUd z&8przFFstIEgBqFUiG!=g;j~v)_1i}zaR3|RhCxY_nY_QmQ`CN*KNvpyY!^R;imNg zzUkjL7qU$_c6rgChfyE1)`h3A|0$j`=YN;5)#Q!yO=dSTF$Lar{UWoC`4G2RtNES9 z8dGOII{tX?XK~5n--X%)7AO4PX~KNG<=w5w$@iAbds=-ow)K^Z@MmxL`MMu;rn7NP zVA4<eW@qD<-PV1*+<v}C=O^abXES##+IX3H#)IzpSEMiglY3q^f3ihblV9`u+8G*~ zW4gX+dG&=H__p?n(f7@)M^kzGQnVLI|2@8rHKJzS?K^++CtlrkMWTdtZC2j4i^mT5 zZ1GsI(zoKC60^>oV!g6eNfK+qt*<U|xH&KLK9|@!qdiOf_Ab6*$5~U&SjFV%xA?;C z(?)X(H=jsgdSe#+?^g6(x9MgXi*09bG;jOs7WDGz<ZSjDfqSw)t;*6YwlyB;n5bQF zJGI;-a*@ri%<J=-qqxppf3)3C{*`{#*P<7}N=M$dAHMMNcIkx1NvEU#{qWiMwJ-Xb z$~)^jPOd%&_b+~Hd1tGNv`)c`OYfAoXDV;p_H@#xEfyg`$7e0vB516YQeqP0DHU96 zZLnyQrmXGZZx^3LuXuZU>ihQ&_u3i1XZ5I0c70@cW#2sI(~(cUaeSz^Th1DLD{_)w zo8ddQnC~2#r>3)LxA><^q&99{<!1DB<CUpxOmkMPSeH}tV2M`9YWL`^x7@zH3*I!x zb<Nk-g(p@|HhiqAd8lK-bm!ImyLg%=@wBbm^89{Tp{6lk|8+f`N%!L~%{jd5xxqC3 zLz>eiw#W*coKP0S^>V3o+G**P{QWT>BVO;GaO3S2v1rq%MH5#Dr^@-QDNMUrEupPl ze!VX&VO>wZ!27j6rN_VA+4VqU@!N3r=(yQ-*1ygMYR=iYUM=2Xb$wCS6<HQ>EgiRr zsU^wvK9+s_dF2Oep1*zEzy4?4j*Ne2|L8|C-%6KV>C8K8t?>24oiAtDY~Jj4=(xq9 zpz!;9&2}w(#C2x+g`-iTVvp|g)s#zxKPvis>$&!xU!DBl-QAW19o0YIe%Jr>gsG*0 z6L}=__}5Ji@0zzZzH9BS$*QI<bFW<A5nW_>aZ0M)CpA|y)xy@>`mQxu6P4=b6(nDr z+I+=gOZ6VBkAFUuSF)eo^yU5SV(#o#|LBF+i}t^^lDqc1j`8=JTZ(U)ZhuZ=(W=q7 zd{O7F%UQk8(nt244rJoq*mv_*(8SM{Kg0X(zVu~jxv@c8|L^IeA^nvRr@rp&m5K9u zG;8U#psv&W^UNptzu@ujE6x9uUukmgK%z&eNcv{^gLWYy@z2U%svrCFb*}x}i<Utf zH`?fIx!V54UbX(S{Jh-Cz^lPpH+qk9O9pu@ySiEV<xi<<9pCkS*PfqxC2><_eZ_Wf z%M<V4Z|48l*?RKL&s{mH;`L{i>dgJ$@sIbZ$kW|R*)vZF9PImQy>rIu%q`!RvaL+= z-1EOn+U=?1EZ=&S*H8Xhl^;0e|Ldw(-ID5QpNg*W+LiB$zZ~egc>3$Mug!Uyeu0xW zKRiC~N=KY(ynX8XDYe4?k2eY{CTnjypy{8y|LeRirRD_-e{MVZN1n;rwL0mEm+CvM zGf%wU{Qt|f>{ZjX&R)gc;onz(y7*1ba$VlM)t4W?D4(nA`aAySMfFuO-*fkt1k`^# z%38YKaptU`D3SWyB3Zi@vE|+EXS&$=y}Vtge~Efld2e4pR8mhwgy;02@=haz&~3u! zu3XgP4VK88FXeM^Rsa1L@-@!_)b1rEPRN*hb3yH=+~|!VPO<Sf=W+LoH=X+I?PE1h zZ%z9G#@F2q#~Io0h)Sp5EZBc2yr|*S(J%V5p5HE--|J^~Qe%H=V(>e$S;u)N<Xk_h z9mt%wEHCz?RFWO*t<%ePPI_M^<D6aj{hs_wRl6O{S=;rw>#qJXSnPGfU_J9?(Ih|R z|2*%bYg0UU4o!P{cKPLa@f{O**4b|O@5ti2*?>D`UQO=m=|)%9q<rGBeEaCeq*Sy0 zTjn&mdF=bTZB9AI_Bur+vHKN|cE-;1%ze6Y`~J5pfAXy@RbrKUmREmk<}bIrDy1Lk z?0cQBt^XTj)6}{qz^?tqtgGFcTpm~K6W4i}1~MPed~y0{h_B)m*S!rAZ_K@#XP)IM z6HT9%%k|`Y_3eFo<X4-lc<9uzaAwYp&{P)IBfCGwu6%h~?DqTB0vlqwZzX3=60v-} z;jqG1)_;2|KD_uVRJ`_D{6hzu;|8I=6?KYvj2gxltFF7b37!6InxOuv!LCun?!Z!& zpoDPw!&2^jRs02^?~P`rN9G)Ce|eLY_xYM*MIZGq$zSQvnk{yRJIf_g&F<^Bl?JzF zWM4L|ytK?m+<AfR-talzx0cWEo4#$YV~zc<=J&2_`(s?TzWjGuEj?lXm3MXVcU()% zwR;WLOg<G+TC=?P^+AJXP5EW4$vgGy4yQ~LotY^gu(&|tllsjM$Bw(3+%ITc^3&Yv z)Xn9)<?R1Nc5zf}FLuddRh7@Y#_Qj=ApK{VpJH^F1%LnUy)Vz3*K9j?hq=OS-X^YM z{u>iGgItm<8oHd<u`r)JsF(il?d-4dR`wUvTwR%$RTUXdUGUi?*!zktyW?pQ*7auh zJ=xi&=I`&eRkDkC8(_A7>B_Wv4O{u<N#BLr!moB^zu;0io_u?WM9rU%Ijla<Kg|{S z`{|Cr83V7j8$8n8shJ5YMJ>wKZ8*xXl|!KZy7YeS{Yvx2-g26+Yy0}~<fpq$wU(>g zU7t^^+IyWjyX5q~yWhQAm|obta=6g`eR7oBM)yreY`B$@*BS+;Womng#2j2CA`qS> zziv;J^^7H=m;NNm%66X4UezTpVNr62A^gP*tvivHKVyFV(r;o8YC86MtrC;<EkDC| z({^78-DWQ@<zaJCc>N^B&kMX%m;c$(ZGM09=FYbnwlXJYmkJplEXl0o_dok9_2VIi z%%i?yp<S=)9_>0jdp-Y_czfT4>x}b-{#GQHa#&ifKIWKlJ^1DB;IqufC(UCi<NuJD z)XTr{j`H{4%WmIT#d#x1=9Xkx_`VghPZ<4wnIFGzV|^rR><eu@o>fg;KPF9d*1G=M zSHaU_MsthaR-vhDQzXQ1T02M_Td-yFBk4z{-g^A`BkE-*ef6BCh1DMBW%_-a*PPYd zyelg5_Vm`|=xGAeR`i5?4~odI;+u0y{~q&i=gq~UzvgJ)Da|*%yZor><J@|q*f*aT zv*qP)l^b4ewtN?LH&cr#EBS5v(+QqUjPmx+_kB(*%Vyi!o+fi5Xk~xUq<Mc%{&!qI z?N(EX-)pB8agN!1?mhFr#+1ITbB-{6D)n^YzOtRJTG4#9#^y$Uo?Q?A*YP8??Z40L z>%ZUiRr<K8NB7(mTVitY1Bd^Qjn(HP*v;ajoDC|DT-<X{O8ww{VdaA-t87k86nf<z zaY4GsRLAe>QSo)xd@rzE?Nt=6bZVD*vxa}S3+v05FAj+?1PU^+{rb6GQD};Qyu9qv z)ytXnm|a*8dN$gtvkE&aD=+qco%_mq`|Dq`t&(>4-M`Yh?KRu%T_?)!76gmmUMHRV zO6d02zq5B;DZ48n;M!#M%U^cqO7^4fx$h?Y{N4AUWyj=;h0!TRx4-Hd{e1gN?B=_- zzr<!fDy!}GsocHKb=j`i`$~s%uJ@Xk_P*W4snEqxde*-5h}d*Jg<ZmP4*a#;_&Fjb zBV)?FWo!2OUb{c#d+y|qvoC)AC---;jI2CY2Umme4|{c%M^4UP%v=xqyZrSn{IC9K zTDMyLaz<CLiYJ^52EWTuXH#>Sd=_3|U|_h5J}p*Ilv)Ow4I*kbRXh_hUs(F~W4-a2 z>UEpaj{44?o_fIi>(QM`_kZ8EdGyWZZ(YK^gI&+o3zjL(-k0@qmVVgz(0IwERb?AH zyVhO(lWMNNJ}p*yYE5kZvKjwQn&)rN47pSDKl!}<{<-`A85jSy+-9-;=CqGurP^+4 zZpKThOS=3zI^S}?n!m(&X?$W`+`lt_8Xl?c>{eUf5o=oR`|*=Nx9+rP-I~p-%HOYi zaH~3jUtGP}6lqGVjm=f*LU2;ZCng34GY+&VvErN*0|P_7jFQ~Fp^^Ew90cn8mi%d7 zx!UU_^Fxm+m#w;z1qZkoUs>47^-3Og`?hZD?kOMMTW2e9vRv|BD}U|v-2AkCmSr_1 z8T(g-FtiDY7RhF-S@=v?++*68xTT>Xdy0%{g_q&d<aLUoLhB-xT7_1&Eu67fhRdy~ z`+LC39q#S!?Pcb>-tBz$wmSFozHiF>y8=zt{FtBDe7^6hP|A<E@I|hTVq4h$p7<|i zIn8plU+KJBpJf|ER?M}0oNO3Awd!&1VWVY5R}4Q`xF3J@qt^b*BF7BJq&J0cBl^$O z_3zrqTPEUSd;hDO*J+E31)kj#xIe73*^zW>o!(OilU1uPWZah7vcIu%+I-#lO`N<} zPh@|q`60Ar@w(vkSMNz270Pg5=<WTxlV?xdg_qX+r#95Rd9aJwJn{6#AhoG>b2nUR zdZv)`dtvZxULBRXdPeuD9Dlu!2i@EemOUqEm+tq#nZcZ9Q#+-mF7tohvbw4|cW!LX z?NdoxFNgJ?n}541AlP-z1AP{UwT<6z+e!K#)tleQ_@3Wk`pp&j(U+??3Ff9ZS1o=! z>+8ab`mmH~{ye>Y1(^qZ66M7EzE&CRTHL#J)0cO9*kbKplqf&{<NP+V%WTGl(<TdV z^4^`@(<}H&A;@C)hSi6I{@qxYCURr@>FV1R4}~UND5>>$C|s4A{$gE7bz}CG=1+EV zQ_PnhnSP0RzIx%pG|98#9X}<OwM{&-W{$azzR?+Zwm_%1iv#91oqrtIwt!VdsCSvf z-NZ$rXJ*dpn#mTLaOe{2<H<{dEagRVHkh1db6&4uH0_A;G{e0Ox{KIM<}0z=x^^BA zxp2YpQHC1_@9ZhQX`51(rYUa?kShM_l3lK{pd;6<Sk(7U@}Z?cPgGJ{YF6#@J26e} ztc#st<%|UjQ#Ic6y>&YsxhUPGM)pdd*V<RVOgx|dl!~p>5w@F><ioc2@#MdUo_##2 zr*HCtb6Mfjv%mMhoAv+3-Kf(0xe=#d*K=q5^NIVP?65j#|MQ@Te`nuj1^0+QP5T=D zpAk_?bg;Q9^<7`i_>GZ)VKNK0EMf%8B2z<d7u_-ts7-IHzp?7F`*F5O+kAA-OX%dB zFDR5<I^CT$<q_XB32)Aa@3k3QTddwbV9#87b)M~RyP(}q_ZQ1Fta;YOeYQlCRcGe| z)5|rC-=jTRpKX00<+Rjm>C6iOC#2M#?wRH#CS|nqVX2z;;}`Wz$2o7UEj#W1B1PuL z%$A9B)mz#o1kAF0@;dex@8X3f2hQJGc-z$7V2-cmPe;Q|)$f|ug~dPPUlSJd*jH1m zXz?7s@5{P%LXMg;AJpm#^jW6D|5C@@V0(pAa!FE|WNA0Ao$t#TERvV2j&A*Q_pg*s z)c1fcL-x%t)NkbPml1Nd+kPd(LPGe*JU5ervgdy%FqgB}&SFpNi2I=+v;3ooeDlNe z&u6<mO=+1JrE9akICWPell|Ny1+)1LwN6F7T%8)JAaUkX$CDez0n192UmK|3{lK)P z^z8gu2YM9ddHr1Rulc(5ap7nGO&|K6{kMN()!*VZqS<;SXJ);!X<KPJ`}6g}UeDfj zKR#EU3liC+nV!YJKepjs>Ei0XW%pmO*}iWRj1sx=aYakFNb#b0UEN*_S;dNwJxSR; z_s+komt>ZmU>8?CVS<UD#=d`V{$5=a?sFzZG<U7ej@YT(e6bT)zx>)a`|Tg~x3|lW z?7toV>s_~WirBYPPnN|zwmp){_+~!Wec2O7%hF}$_1s4!lP)$_rKDHWuf1SmVA#xt zEtwdDlSyc<|7`<-e>_6}A5P1>q!tzx^^M6}X=(1QwAZ(r8s9FSz2oSF8?kSKewlCk z`(W;6^C&LiiAmP`c0ZqIJzt;w_qWwfj0@%)9&K4R%bQVIEyB&TJJF!oA!8cnvV*~0 z+P<xA3(qV#yx2#}^2&wj!PCB~x*vS0t|4-#`EPUWZda?^>u2_bn-?Efm)pYeQvA<* z@q<f~uc|QJf6X+rcP8uBxamLaJCbMaeYDkYvi?QWvm%$zP3eyC3w^lb&%zwZ6;m>~ znwFi}IIHeDzwIS%-43347y7oQeKUH+CY>WRVcYvE=B36`nHdihHcRd?{jmRWd0F8) zh7*f-bns5U8uwRyM*6?V&xW%u6sX2+eS0`GKwbCwj*zNko?_S8EqZ)k*^NHja@_oS zO;6&_8#8uZ$hVm0^(g4&501;pJIgL)9;%EeUZZ$^ik;NQg{)WOBECB>ZwZ)jx=nCF z+Qn+AwR?Ka&fU1HXRv01wVwJb`wI2j6-@jk;&I~N=O14+CofsGq<lf{F70zuXG&e} z$i4Npq^tGVyY00_hEsOeu(|zw$xt${_mtVJIwk28Yw3uL((65|y($8au6em!*?F;~ ziOvj-X_q!8?|sLcSCFVX!EWA^1y9+}iWU0VO_y7m(ah<$Y|+_O@8_x8qy;cqwwziS z`{wzl(zmmZCB>iF?eKG_c56^^yHk(+RdI*f^2FPGG0FXZoi@e`t0^t}bb7k<+K_b< zyNrAlPR&R=aJlf%rBL_o4Mib&?W+#6Hg<4H7#uJYZl2ble!wMXL9tNU4F!Q5hj$Aa z&b8N=oZKPNxG!zP7iD&HolDZQBoBY%s(&VQIn~$t_wFx$8M^s|*h*&ZvQ#?H9ND;3 z<hS@fu46NM)K{b(xVL`aryGer8zpmCzFQp1ck*M6SuvM$-;*q-$=WmTt}@Q>uDm^+ zvp=o)VR)7M!QD#f4oiIUcFxQH{p7<3o^$D5n?-iKJSM>yz3AOrTZ_+MH(1op`0w>5 zDfHOpnvFk}{$WOBj9xZZrNs-nJ8m*DFo?2a%NQo0jIlH{H~*G_z`s3SfBCojOy0&X za_ds=)kz+jO9VQ%FMSthH|t2lZI!+p=BN2@#NW?x&@@@IdK!P<+uhag=6#-9Ta&VX z?NtW1Nt)9#SM5BJaLPz+Wtw46xIoIRlRcRqrabbx>~q+~<HctWE>$%tx1^I#JPJf& z>e`~t+S*y!ZQ8x$e(~A+-)}v;|Gkqv*2&HE|LxolcQ-~cHOiOtt|>}$%(hVY=l>`o zZN1&)%ulAX0$0u`n`YB}H0Y||dA)Nw%u|hg6&Gt3uj#Y@;M~vS%&pWsJ@fc2w{N>H z@S5FFQLw%LHEGu3wXyos8{%GPt6A)o+E(BA^Hl2T<2RgzB|omKvirkvYsu?5W>W8a z6BlMozHoHmUl+DG{TDoQ+>>wAm_5_{vR>9(wQzA^Rny50G1f22AE@P6UTg7Q>c6Ze z>EKm^oZkyCJ7}D_vsG|G+Fk3OvVHy2ytl1jI$RY|U>L6dAok7U)QXzW3g$cit*`xj zY8U3Ty7OCx=y`YJsh2z6-U_ukx+#hOw_T-~V5lAQ;+h!^dYdlZalg#I$?@Cf#@1_P zXMaR+u3t4H_s7dCEf+c0>CVuecInQ>d%VZXEjC{Bm_Lj6#V^O@-gBN!Kek!qtxJ=A z@WnK<qI@Aa<BX;m2YxP%l^6Y#`*wErk$t+=|8j0SSeVNSD@BW}JL~o?YP0wbH*1Zk z@4gpPTk8~$N+%s$!e*O%z*pP<Lqcygm*BNFquERuY5|UUrha9AW+on=KK(go|BD&w zG3yh~FAYrMuL%E;^Xo{u&Wuxa*&ZwV(w2tl9X<5KdDG5Ck6RdJwRJN?Vir`nnYx%X zFP-px!;>nu&pw-$><I3@F;gosNvyN7?^#mKaiz5r{Ce`<%}ku@r1j)lYv<NkmwTsu z_BgM4d&0^SrP>c?Ja$%hTrtN;Hb=tVH&O9^f*AM2+0Pj}>wZMEhR*xTEwLp;>L2%% zKkEyw&6{W3{%PZ;*WpTWqLaTa{)%)dRzI7o()mZ%9GICI7~HYu1XI0?lH94Gw~J;Q z2-KeU`IqRu-1x1JjP-RhO@qhW8)yD<;`F@bF3A$s-KyPb@h<&K_wGYCHp<@dt8hr# zTK(-!R=K5(!Tl>)4D%LDDsmM$ZJ{zH*ioc6VGqM}Z7qw?3sWX}y6$MQ5H?6ycp^ni z`@<$n(YRwD9=uY%lJ)K3!H11Ex!G!?*ZXZ=e7#ZFWT7}q+}WR1&+kRMSvx;a59Jm! z&T^<W;hB@)n3@q;yJ*?V=LJqJOHR!)mP;*;w6@%9VQO+^iWbuxpOvX4a~D1~Z=RU% zu;Sy6O+D#p>ld%vc#!ALg7-JhcAU8&b}##i{YCc8`=&7OT0dR!;WpD(HSB+N>~Hh2 zJ<RTM+<dkC!NIpIwy&35tXR&=?P~lXx2DwW+=83syPdOhc~&1k((?0MZ|Vt?EEB&z zL+!TQUCnxTe&wF-m^tB<MdC)rwG;0b)~s#}m~lwDwqe%SXLVaX$8MRqpg%MrLZV;i z^watedgUK2?j?)f6L|XnnAPrEN4-2t7t{ucKELI2&ckE-TdlcCwHKGi&hI%MIn_U0 z`#ryd=*=BBT!X7O3BE~V=3blp`ui@SxKP9MUzT?+yI7jfb3%3Qq?xIEWP9r$9MhPn zcV7BJ@tr*V4d?7l<CbJ}bL#C{^!424{9v)b9Su5do3%H;6McSu>-y)NmD_XvUGDO8 zT9_v*f7os9rF)ybC-2M7HlD*b>E9_${*^ja>kOh+YbXi5c|D<EM*1W5Co;=f{R@)L z&Yb0N<k1YSIcyGG-&xsaEe-KXsM0zTA!T9oDe_cBQOl-)0Hup@7h)zEde4l?*w5<x z_g2z#zjV#H>z<{u?vI?M&MCQki;98@le^`wDL*ZaR84y!<`t_{Fl`~<Z{NhJ>*g99 zD{<Pud$i6gzQXKzf%?ilZCp;<gC{NPT4Mij-pM&j_-B~zT=`(F#CnMro|XQW=J0Lm zSeAX)UDv89Y3IE??ngMx-cH}JZ{O6QEslF1J?ma2^!rtkaQfx!!X2l)J_g1t-8Wk| z(`EG%r^R7AwVCQqvQFD?zWLs%MXnn)>x=7=THh1dT$O(227Y?R#K2I2HP4tq^Gx1s z2Z7qWC4UZ2Srw#xbz^aUh{GYXjT39M75Cb#ODx>h6nkXd;~nw$BR{AL%-Lq6!(IIB z%*@0x3p=Cx+oBjY&+$4X8t79H5#U$6D1+s*X+_M%Il-)bQ+%`zi5^jEH{>o>bX}96 z7G^S^v#o7*cE;8>j~72yE|%zV-?neJU;O>!c@GX4aHQ#ef4%qnS)(eZ&iNtQ5$RVN z?v)7buxC1b;r%UsE#G}D{3_E!BDIexZ=AID^5)aV&cRDV1Rtm@on}~|zV1Cs@co8> z&xNUy)v5p0V~d+5D-NF6y4$i_>`Kmb{|3j~vt0^q&;3^4wC~jMdEJ+4b#)4MDU0u` z{+p07x6JDO)?`K#=KIH%{y)QZ?u4|@nz_a~`ogE5?A|_2aq^1GmbM3@B(}ZmWiNRC zT}L@>XNWqtnDm9YziO{<xAJIh-F=nKW!v1tInztG=`8Q}O}W9>@1yfH{>Qr4H8T6- zgzvN5-+!*OF8H~ZNAV)%OH-bo^G#D(61xA`f*YY<R?1EO7-4esi^-1yrd2DBh0gVr zUEvn6p3N-k{<YWZg#WEh{`To|>omg;dAt!`vnHJ}y65|Re?fB2jCFce1|@qB8f?(B zE03G9Vi8OJuEk&T((bG3EGl4CYWpm`*;f0_?|avSkL=O!|8w)*p9f*`67rK>Zy(D} z%WqIVe=T9X#g6<g=dcId+4I|yW~z#Cup3R+QcpCT^C)J?fhjE07Mb4V)zx&c6=>yV z-6|xo=)UsF>kI5l+zKCRMTTE_v2@Xqlbc#vQ_cx3yA~k4#PMQSh;D_ZSO08@-RqBB zQ<!tfqsb|ezeQieC0iy@LPyg@abECB_dLrQ;cvSOCeL@!+wAk?>5D_h7RGGqbvULN ztJan2DCoVF)ppC9XJ6ih?Bls=w0wi_nun_`en;8shb7*w65&_6Y|q(J`{Txu$Dx<% z=dOxcm9|goS%Cjnp|%OmVe^mmTz(PR)jr|B*xFgi-&J`|{a<+VT~|hIj@kdCNE-nr zv$-mX?pEfPVP;@>iZxr9L$gKEZ8L$|b?JZjrOT|6?N3aaYtk1y$#~ZVq2-g729#W~ zb9&<C=F6nT5P32GOZRSp)W{{8>4(^bSk75iA51E&dbBUwgh7qVl<P3hbS5#40K;a@ zGiCx@&0Y%{w_S^oR^vIdv`Nr^%9WzL1f}aM)Fxd%bk@{F>fg(gFFUO}+@0^&HJ6>Q zb9cPc<|yMYb#VIc538S-sB+eu_f~9nVc+$5x5W?bZ!*@`YYZyCxqmt^#qIIhogPo4 z%=OmS?Jrsr(%06QU|Hp7zk_>GnN6RJ$C`Nt^FBYid46Z!)`Pu=D<po%9=*(ZXr}02 zecSTcM@=SteWs@*Rd#Ie{)2W$^UW7XD7{X+^Nxr4huF7AjpaA9{-$+CFOYV(+grt+ zeL=46uXVnE+w<c~Yg`Ymef~lxcdMShhGyUUw#9Zni`P9rv-8rkq=V1-N{$8UckB`K z3}nlH%cMB_?c*%@)mh%H{-sGF;{Gw~zVLss3;oKHn>_cP?AiTmzy4dcYU;*c4()67 z&e{6vM>eI#tqs)D{}Z?M<k6UGH+gh_R4}B??tQ&#mgS`09kY0~w#>`F|J&=w%C5>n z`}hd+Uk}$ZYxi14SDjn`_@=!{L7A7l{gwoQmcNc~YJXg*n!0F``j?HOx$eUCvp$ME zlzJj_@BWUnC(HgW{g!K8_`Z8{{nuX#7w6bo3cC6(kga|6UgGeD?K-b`rT)h*^a!Ze z<GVX;8~ewanTh-IBQ({DT#Yr)Og+<hc1xhnM(?d3S~zDY1~dzDKQds>Qk80Z9&tc; zWiM~PR<m}^HO)U;*H2oX=(+n?I9KgCaqXi=A6+nxDE`c_=akwZshi3+FS!-gs03ZD zme%T&y>&xz{&c(j1uO2`a%Ig|y_{}5&F0W0GrN%I0bK7&Tk3`45A1b|6^^|jdC(+1 zGA-g8N9@d0*Fy>mlf6YOSd@crvds&~?4F=>d(Y~-3VJ&pmN33t6jG;Ib}Fy)(9?&$ zp<j2$_ywD^Z{0Sxy07$iu$lLV&7ZC28mMxZOEbx=zVlLT{>eAG46}-s$}scoTwt<y zp-IB8g=Lamr?2OhrR=)NS2q2_e?$*u8k?(<i_os9+e{1$QCKsR1t>Gk4b9G<Z6NYD zZsq@neVLcODfZiK+a{%Ou|>_JviFj$oz(-CdmU$UCY$`PyY6t=M0IY|l7`3C=RaCb z&n~V>*$>J`leA8mUi2xL5$vaW(WLPu8`HX#PePiPiv-Uq;5AlEJdvb1Wk%+V4%4Z^ z2Mr2J8GGBRYf5TTzAt`wz|{Z#>sik)^xM2}zqsUK{ci4k)?w}nANS_D%<hT0Ala|< zKmAEW+PbY5PJhYXqYxDMc8#R}ktkC?Kl}MnZCReCjDFLuY^?fsf`4y@Oq77M-8$LV zfj3_-k<Qz&SV8JXUb>?MyJ7Q$RXznrm+7QdC2v1vu%IjKDNp<L$M5tF!hddmym<Nr zjov-48~N><@~)Ko-FnN<7NK%0@WrFGyM>wa1-`hQ6XW5Z-doE3SNeER=B2#(CL1lL zWwRfayVE9ne3s$LlHzk|Vln-P*U4MuE;;0NZw5o!wmpY)#DC|^T(a8A=uN+<@XlZS z_pjQ?AHN=X-2Bkb={wKOD_pwd-iwASKkpn0aZCCo624nwo8;d6@smH!ToG+-aI&5E z#UiQczjJ;$m@fL8m9V%pw)lS8q19H;0{<1|rF?0U<}Pxbu2Q__`{S4SG7+Mer++s4 z@^``Y{yCpdf7>i%8`#8u`C^($VSezmfE^~gpS(Gh=iBuo`TgwVqx-baH(Wj}&6S+S z-ugmrvi7XbXhrtM><f+?w|4u6FA;alSB+@8ZFfHC*z*PAA|E)sSD2g@nD8avZz`K^ zLuPAz@~JS1Bg(nw!q_&7Oj7Dupy%i4Q-3)^S>U{^++{D3e-jweCruIa4%y<XAv-m= z?Uunb87>1^qeWNrm^`$!W^QaW>z#XO(@xusuTwKL)lxgZ#mtsj7UEZ~vu<WwN6g|g zPOM!24j-*@m!7J+;o8SZIdVLCn*7<juNw82_SwjL|5?snY5KnZ3wPYk-)-FurykGH zQhnmR!Z|iDvnKgR?kv7ZPCt)sj=rvRQ>6LT>F-Dfo6lf#Rr(R7m>SH?z|e&?FIa-| z!qm{j{M%*%f8`YZKU|e~pzGS!$z{>ao=h^)8(VK~T(0%@+r(vlV%9USc$~`n=T`Tz zZ_;FobwOKxDFiCLzgz8p{PD}q|BJ3OM`W33=x%oMj9Bb)Rwr%4uGWaCD?++Fy@JP# zG8Mz6o;78shU6u#EL$<%>%x(v?=QS=U9P@d{h!I)^G@G;+LFJ|aepbWEOXZz*ZR9h z<eBrAaQx_gyL7u~l|fX@@{9K~AMDKkdnoUeeZ|2oj?!;h&RjY7<=nY?+wU@0*mRjs znn_eleqrU+_EPC%gSAa2^ZSW6`vc2wJXl_6)qN=NU<=Ds=cZ*rmpZ0uwC-(<kD0dn z&C>h%*BLLqe6M=xLy_S>_B&Vi^(hHWwK(<iLy_3Q<rQ=Mnl~SOkS=~h=gVc4CAWVh z@U?BOD3Y~dIsEtO<VMdD(TZhf*qS$+Kba){>thX*{G`AKPo1QHr|A~)>xrMV@M>ao zoVYYRuPN+X`}xIt?cG+J<n2DNB4C@-)n~UW(wmcQJpXUyem`qpz4Yt1M-9VH?rJ?3 zG5uV-L9k(;|6{AkL3<xge>}(O*(&YyH)8hs2h85pEj?iO*sbafo9HczlJD(aKNfaX zF4-SxEj9VaspeY`+Cm$@UrzculkJ||%kAaNGu%F=%wl_gkAL5$7o5UXJG#mir~X(d zB6+CwwqCyepMRTX)~~6(9{*?dHpw~l$ImTt&C^y*VRn7{aoR(<B(Zj0p4Lb8re1x^ zZZ`W~I4sl~d3I%eVQBc$39k=ZzABc?N-$#Xl{q>s&PesWjz~^-g6JRZt9%naGELD9 zu&z1YlEm%U8~E9&AS~!hBh$qX89~Cj$&JRGmfGHzW-%XRSX#PE^24#Fxf@zn>8_dZ zBQR^`)ERe|XXW{`9G|`F$l2QNcN5NBO>^E`eUyi3xolEH)Z7ADgXNpdCnV~rG_8us zR_AbDGJ|!Qpw?QgZFy35+M*i^OQffr|NL{Z&7^{4tGCB>1#?X;3zw9wjl8<+nAR`l zJxdEDgqN<5+uLUO`0y&Lf*6lq%qjW@4YIdJT%C4AK<VY$DT3QnFZdcA+!VNVNq`mS zt`(OI8!qK`u3?=zKl|kD;0u2hB<`kL_GH?5O{z#=pv3H{{rDP#aYB|~n)FhB4O`9R z41bUP^(!~sPTOFw`5$SVU^bhpl0K)P!Br*(hM(Amk_`<YdGL1LZ3CX#xW<3X&l3-@ z>GWPMo1V0-G3L$@hrHsuv2vpAo?9%Zsh{-Ryk7pPh3{-D)~o}YR3^2%n|RKhXR$up zv|*!5>&moQ-6GFsEJ~4DZgA6KLe><`tPHKAQ`1(q&75HHV55lF8Izu)Qcoiagkoyj zqRv{|TG|#?U0m>f=KA|@X1qVpKkGvGqQbNP%cN_{*KSjIU>)0SCK+`>j#v4A`je=% z_4_WIev-W>A!uRQb(^_eTUVK$v!55umeo1S@zk^zQL*(e+RtW)L<vam3E6#Z-p$i1 zq;m=uDZKg}7p*g0XRg)Pw?Zef_u6p!MlU|6Z*acs=C{u3j2W(H!|u1sJF36h$$Psl zn}^#~oy%6ria+JT8}_>ktMhqwA75zE`fqFY%9O0zy~bQ^Pc08F;5JXZy)`XHtJdtf zF?ZDB4UgN``38vW%vM%7TlLxE)>XwQwZc$Vx1SpxDTSYZY&vg)_sj304|y~HSFY(+ zzatb@d%<qC)$_eGPet_fztx%>6!q}#LjQT^T&A8spdoMHptmSde$h+iiyeH69Xqdm zJX0~BQ~%Tq+rLlmTzJ8DUF-?hbe-b0=8I3}&x%mJwA@>|s_w#D*LP3Fe|vVw87}NU znPDtlZO%Dg$s|X>c*l;SSC5?%=l@yOZ?XOMBK!N{0%v_swv@yOO-oB&f8`DPyo-EY zw`xPDL@tc?_-m3j^OSIw>j8&H_hqKCEo)e+ptj%en!JO4fYR2LEL)$wlrd9k@9})a z7xMd${Io8vYccv>N?-hb=D4+m{7_wEw2!+ft-@v9%v8?)n=R@w`41Wv2d?_!J|`k( zOR#Q2(}aafo^3wz@><)RXG?Sx1wXgTcr5v(BOK)HSNq;#wY2W%i04A(C0d7W`&r0- zjQDUm{>z8=BEPNIBsG>xJeRt^cfAvbq1!&EpEgI#c&>7ka37iEwB38Ua!BgS7c*=; z!XNohmDnaeDLB9L<+2%5#4pz)T4f8^T$MuedgN~~F)$Qk%?048>8a3hV^FJXTIQu? zT}-*(gLFGx6k9U_BBZ{3x~Ss*y6?u!+y#Gn|2~>4yr6a2>{<NVlJDDow|Ty~w&KCQ zRaY6@p#7V?fCWix!86t<h_Fp{VAfr`)67R=h8HXIJdKr4uN?5u3+z={-uk&eVD-;- z_ICC>eYr2Sx7pYBy=8a2(-bGupLOth;g7S$w<a~b_tlMi`of{QLX_P;>HNmxuhEmw z+Np2%$uzk)sXIikbZzCQe@8Y3NJ_CarM|Gd`#`HB>Z3uC!p4e273Y{YPY>LF<H51S zJN$pPoiS1is>lxfzvTU$DocKmefy@l9PUnhu6|?vpImkorA;D_uesVcyiZhrS9#X$ zac`*(&s~d8D_`0~HHX>1iK~oGzfq&7s>7vc>wf-{+u}-}$if<PnUaTAS=HyJXy^9j z|G3iFop^;)X}x2>ltbRT9j1M~wmIYMF}tXB1%a$?ts5T{t^40xzNue5Lw@y#bs7Ke zM=XE-JHj|jcgy)zC3$yC&I#T5x|+x9YwP#lhC64RS~X*#X<b}{=BAG+>(3b9?D)Rf zvGv-=+}&$i#6!<8|9x}p(u=m~d}mD4biU8Ie)yy;?;O)h?VH)YG;O%uy?3*Jue#=~ zM5noHGpwb4UN@enWHMV}c|p~?YwoQFoj=~@J}NtX`Tr%4G%hZ&wHAD-wtDOT6Y;yh zIPWhJma0D=sIsElIou-GH^}FS&HROIdSai%wPt9|Y&^vBlPNTF%9Mqs2CV@y;vOre znVdK&tLE0cGu7lMi;qB2)B@>#O-uD{8Iv9hwMajZn($Iof>X!W@qv)pg?`K286Jkw z2lXAx#SAXkD9<`FY26~ttBbD&t+;1qy~#OyZf@Qqu7|G=u)dDo=D@Xa%k70Tb~x@< z&N-BRr{I*&%LUIX^`<fgslMh4-g!7d{fGD?orE>o#&!vw+UHMyjQG%(bo!HeM}MDO zc2vIl6#vHP{S#iUl2|jpWj`V#EM{|6>OL}S_hu#rh6h+P0%QU@G%|m&fk53oufP18 z*M!}gI_+7;_Z4CjJe-7=#CYGem6I)y3U8SBR^{ye`-YaYmMjUa+;CRrevNTY`)A|l zdvlq4RD*S{hZIjdY<qg<l3A(-k&ZL6)ryxL4DZtRE#?hYOgxaRIb}wcM7QeX<b#2Q ze`RxSTiaXP7gwcR_<lz2hwNs4rbo{G6E@2J*~MMIJ1kn^!{TixS0#vTad#H_qq;6N zW$Vmym*#)$@jAL?_mfJcX{Yi`_M7Q4Pc`&aTrOF>HqU@ZX?~9qcT)58?CVuY-^^aI zNy`XLs(Y~2HH_n^X>nFIW5S(VYT`EA+~(FN%=?;c?eJ~lL$^O+_6_!l?O*P=?frMr zVp<ztr%jAiwbh5;iRCZe%}M-i5wTKZN1^UiwXao=nNBBG`dPd<lzXLYt>$#E_&c9h zvaSuh!l|^qFCb#K^kRq8v+9M`e&ks@At#WvO?Kmhq;+uzciS90{gFBBA#dP6qiavU z8iskT7Jhqql}&lxss)DDUsm&U^&XY$PySS+wJNFY*pCvXU2EJvOZd)T!DhLR%`ED; z@#}TM_pTWFf7x8^yjc2Pgh9B@;@0e1317Jn3Aq#Y#a>+~-f~y2aDCmC`BPssaON#r zd^YpV-DNh37c!b=9D2GnSb92}|Ji)C&f@L+zMcJR-ID+8lFJN(Rpx!k`N_BWZIk7v zeg7U?dC}|lT(c7|RZ<tQ2DEC<Ebe)rS<PZtnXoZT;n}SXS}NyvJmcOLTElqq(asPz zk$jGa9mbAcYH5}U55-+iC0jkzyso`MVY2a@?%yGCi#L=_UK7zDp|Rr1w<5I*rN;`- zosuvwopo{Tw9gUeRhxCEcPULfdQPxz|GA}U+41{24)K)f99Vvyy=ch<wMh$qsO<PT zNx%8Bie=MO9bxWo%OYysmM^zTef=|r|MmaA;Ox$nP&u>z^O3sX%h+6%mhnw|d5wvI zAqi_5ht8fu7FmF%Mqc}+-(qJ{d8rzFTUL*+!i%ZYN5B72Tys!#kt*Xu^Iu0}8;ckF zS$}L+@!p+&K63rFcJ_DOZp;ab0u~#bDbP&lV-hu<aVUp*p}`6ksTUb%w<aEPP!o;$ z;Nq!k%q+aq&2-`%zH|4S7eADjlabqT_(#%{+m<iBysZ&DA}ew1;}XG|nQig5%hfr5 z95Z?3+sXIk*!02=w%=rSUyqrg^nZrVj7u4NOvP8mymtHj<L$=eg<K{)EZP@}*$$=( zls+na;*j*Q<>Q>{wDXJeHXiIfTp{wqHgZZ(ar1{;kN)}H-*NUXr$A$xYS*;8h5y-a zq<_D~?ctW<d2H@GjfVV0d%3E&VXvo_-jUi>_~i11`U1AOffhTyyqojzTcKuZV8J^} zEC1-V-vpl?{do675<__4`C_AWTP$aNKGXQl;uZVE>q;74k9OKBoKAc0x#inOyQq}~ zq3mu;H$Ey_`M<e*SHJoT?`scZFa6uU(eK>1jYVPlB}ZPB+}rtblIo8e>&-MmCGNdB z{zPeVsiAZBpDhfV&mKEzH>*-f`eU8hiVMH?$-dWm7%5upzkf!wRP%>BjZ2R;O`Z3- z$Y%Gl)?mfG*0~1_IM@&0u>O1Dm$qyFj0-8+x7Mls3q2Ry@{RKZkKegF&r-4r;{R-0 zy5sWQzxM0)`fSO~_jfsUa-GwRA5$-Dd@1j9dc0n>i{<OLTe)-J`Rrg^$2jv|!^8uZ zL|E1>4B7LbZN0#gH&Vij59-Wl1dV4I_^zDs^vbOlm%Ov2L{0ZL>wI3CWN9wlz2`w@ z7n6}HcXqE<^2xOib<$6sKjw3<!Rgex)a_Rj+ufxOEjqJtNA6lvEtcqyma<)z1{0m! zwq{&E+4Ownq7N|)yPrq8E`JbkN>?-Y==2_+v&)xf)`%79Cael{=50S{(o*ayTdI5Y zyw^h)t;r|noPPB;%ULS#fQHLog;Q^*H^)9NpB+0hZ(H{({txVkqJ9ONt5WhjmmNo# z7#P^F^}Y?^bLF!Q1pa~AJjYB{{+*zfc{%qgL#K*~<LTQPvD^FkEIPF}Ow672?EZV7 zxLYYH!J&2%kE`E(EPnpEuqvs3#Z?A1w4o?2979p6Q-u#+DEQ2pW%~WglP^c!xgT!K zzPInX>HCH9l^6OKd7k}WDF3HqO`pS~^w{n&%dHEH<y`-*Ke6#lRPDmeU!uW7Q96?T zM}n@-ntpxyw1uZus2%WhlU@D1|IdZ)V+&a~K74#@W89RzzPlc>S#vFFd|#HSW5CQ| z_jzCS2L;c0!IgQ}uctYPe)UbU$nD>~|Det5^L_mrTii0AY-P8zVY$2Fy@_<M|FMlM zprNP>wW*MysB@Cr`g<$6|3-s`qB2bM4J;u;QLW&is4qw7oYlzy4@L1VIplLsidpIP zy})hHt|~_By$lwWymnkzxb+wR{jZAh#~-hGB>nK${+;Xc_;v;b$-Za^Il8kr*s}BG zzWArhBGSJ6Ebu>;z9{Sbfrfte1*dbi@ZJ0}F~_C-<^iYIyVCB29-6K7%(c$U+^Fi{ zTGrM@k|$+fKd$)IA)I~q%g(C}`{cj;nt1uwtsmO1)m|S`wQikJdl!33i0iCahh)s% z8(%#+D>Umahrjt<D!jv{Zt;b*bpag@l`EW$3(e;>A27Y=Sh@Xlboe3f#o=d+V^|Gq zmuw8%kW$4sM~|^OQg266@HC^dD{ehDKP<O>`g6^0PtG{moJ51utWO)*T_y_7R^H|k z>XWSFcJznL45n#MCmoTp461l)q}t`w$-Gs-wd?Mbyvk*ov8Po%5BZ#Ty&l7L=7igO z!L{X4VjJ~T?yg#MBGNrY;;&Wg?hW3j#p3H`oIO=mUlw<CllA)YjR}+cRj-yTe|f|4 zIQKNQ<2}*SzGpRky?=7ucGpc>>a+J>kw+x@Rcx+GdW!{rA7x@-(85~wL#D+;Al+U4 z3-u3dcy7pDQrVk(G>3WTj?TtA&vxDYw&I4*DyL~S-kG!R-}rWL@f`2lXYK~rdu(!% zla-rjV^aW{7N5*y>UEeWT<Dp`#ss$D8S50LuyJ>?MMV|o&M+|uX6302(pa0urk2%t z)TPjB#}AIJv+64fDjs}${P4i`;tQ{CRZ1MueR2Hb60w?{eEBxZ7jyhLc;!)OA79C_ z#TGxrs{8J)zCX*S#xE~&;l&DXz2L1^wm$oKb7S&CBNHB#(-(@X4r+8neY5~I^e<JM zQ{H?%5ZutW;rOGc)+M6w_`BHm^j`<puJ>=?xMJ>jag*)4I`-dd>#Z4E1tTXFuD0cP zkbR@~ciiTS73s3x&gOkJQoH=mEimP%R?dIUbNjsN$wdz?6>ss7?tLcs^3jhxi#G>D zuY8;%sShgqXEMJnyuu4==&L+hYO8R%>b2{ZXD{ud;vUqBN-RBQ8_xY#e$VGx8&Cbn zR`W%F>yzikyh-K^lYP+;dUR*;WlQf5JL8`&os#%tL%sTR<IvLdjNW*@15>i*yj?s~ z{7T37s|#FS|0=tadT6!Lvx#+P+fAw-E@kHKl{{_x{B1>*J9m0>N!_i6I)QJ$HkSWd z`Ek0-`56~dj6r4p)CZbQpLwqE`03sGwZx>tr|x#po!6y*<-^5<b8o-u)F|3?Tfyf~ z?`4HAYn8Wh^xBJQ2wzFPIn~cvI4jaJ@`I-Moq{V93^;>ZN?gx2s{3?^8YD*)b-%pT zd{=wkq`9Y-#YDNy;q=hhY4X5XZ_2j2@57@-HN|Gc1<n>|@@2i{zU$$RKYQCIa;2R( zv&ca}$930~%$UbhTu!RoJ+>!VHE_0WzfWX%UeAr<$C9aQE-qMBK0`ub>e7d4sm=PS zn+_Xy9?}t?k!xMv>LEFqn`_dqdy_;prx*WDYYh#R{>xJOn`y(l2YGwfUJBiLqvR9P z4BlEcSEcVw7tVnOd5&XE_0Wm!T=23eP*D$BFWAde8@p8{sDWW(Mf9w9PZxX26o|e# zVYc*7Z?1jC^9fGghgUsojz3p^-nM*SabN$N@~u(_T!LJ8s?Fl$Gd{IaWtN&jtn&fW zsdKVEOiA(*1}(jA)0yVf8FJWV&5Ai3ZS2>>16J=m?ta|8%wCEw#`t&K@iWf$pBBiw zPM-Dut=W%v5xI>A_;-n|EzWYRw(0sae`2y^WbHcfo7XG+mMppzX*jQA>MB!zeLr31 ztqW!`sB^!Hu&sa69%sU*+rcY$y>DwWxMBZBql0bVZPkrpMZC_do-1v9Ev>oWbCslk zUi9O0`UdyYZhtduxggN9=h^}AK#%oVx5v$fIwEg1N(x`tSV9W<YZ7wy(w9Yl#U2le zyp&<$Z=en-<Xdu&d(8~_m2xbIJL>U<$L)U13k@1$iyLN@zE_C)oFuP1{mVWsp3{%! zbuO)9eV--Y|5!KdVQ;{{`Zb$h*RJUaVYgBUEzCO`;+OR6&bmvQVdAwnzMrhnS_N7s zSirFB#IdJ#v+O4HX4p$dWXN9cx$RXEeDuu={j@eW{TERiLP{Kqj#t^wyZ7*r7I-Dd z_vSeJqI3IA;+DLS6rSVbI{WI8y(c4_7FKd9wQkPdZKo+xb~JyU@b9wAznAMvak?%m zcIuHT^?KbIEycrhU4qqBUHoj=ihO?ISw?=11qsWx2Jd;eXmPUV$ES~si<Op@n_Qcp zxa-P<z#{*~%!p?TSXVqXIhGX^GBegGS@>kuxkr_msYh7FOwWPFdECyO{@imk<&@E~ z>j93F93HYH9jebxSrU1ssD;IL`BTAV=W@*arYi1;(ArzvtI^i^;Le0!lZ8Du^`zB% zf3`gQJo1>u%ELDKTVjq?X=>UStvT_-rHf@NUo6MIizhrUU%$eWuQ)$0N3s4(WX>gD z)f}#ekC*@7sr@l-SM%BTN7rq4*`z1-H2)b=*}ooipxxhA?Zr$C4EI^FEDkg@2M={Z z7gwM6`IiW7_h;$_-!_insc7qdt+ChU*QSQ32`f~be)MjWzcW=)W#O{9KO86R-JO1Z zUHJ1KCu&1iGPrP=a!r=dWAzDG;KlQ7!a7CpAP?`_oo1Z|2Gh9MY=VPMZ*25f7vMT+ z^21+3TB84dy!dhA?MBD@+p8~R+^!Ya!1hI=TkGKQ+aD%B-=e~Je>PXN{)NVC87G?b z&lJDe{_4t^boou0i%g{QkGkrG?+UW7t$!7<!g3aii;?^Jmu!a>@-_s%aYzHT``y#@ zLGAuj#n<e0>L+_bvLzPGJSB54>cjk>*4uX(GH+awr@c72_{u-7Z#VaBV_K!U%_nm4 zP5uYPH_~j^$F1JGv9WdW>7@D7z6nd4{7Ni;@wVyV!@`yMg%>``*q+Yb`is-__{X~i z7g}fUcxsuvZj0s24;z`!2HxRITJIKc<z%1fg!HY20&D9w_HPTQ2xoKqTzLFx(0}&# zS@QlD-s>EezVy95d2a0c<g=4LIsNvGoV(j#uZK~MT==Xh$9Ud<FD^2imTKwzx@HGM zaLMB$`Li-F*lxdP<Bht#{dJyDoQYxom*>LXi>1qCBC_VFbDyuY_1b^&;7z62IoB6} zy1Jjwt<S38`a)9p)*F}G!B6g=spt#X&tloOIeWX5C}02K{L-U)?{*w``B2)`thzNx zYyO<=1{3%9zG>grtG4mNkK|4z=e;{?T(6vCcb#<Zgh`kRxAw|?*#<&8H1urMHJjr- zSM@3h?N?mvcxlD<iBBe-+c7Vwgo!J?mF1OYyhB%7tA@j}`v%6*^{yrsovJBZCqsQ4 z^e;1AOj9{4B;3+E>8FwLw2Z*XvGcA9-?mw@J}_yG%gafVlvI07RQe9+ZuU7Ro?-Fz z1Lrg6%?Zl8^R{Y!E-k!q>OE4L-pJ;v^r$cB?`bAnjd<{M^4iecd{84EwBXfzndfcx zSxeqt3u9ffX9A06{^F9mc2-9M!jHIZyKM5mF5Tmjn&ND&Uj7@;&Yk~!=V#5Fc^2}y z(g{i{7sUvlWoe&Mq}931c*Z(~2eZ8VOiiYOOLjpaaLMj+*hOdM9FDfO+1eX&--8<Q zFWnC}rn~LGY54d;|EvrBi#p%_-@#wE3p8TWy=`%*pKeCK`^5j+MY^BYep~VUX6_%4 zC5vvw8rcbZr<$MJKR22!%g>b2@7a~Dp!ww47cI6Zm{r8=zP5VPcTe*h4_q8gKJ3lg z78NwjE^B#M9mA8gYm*OVX5abA`%H6suKd+@x9BT5yfqaZR)P0(ue_dr_Sm6|olgAm zbIr{%_?qsWxSQ8@_Hn{8r~R*^v}Rv@-D~XA{?zi|2KMsA+gpXyrrLQ&COKxyl>ND| zR$1iPx@?{ok=b&t*)eYyKb>S3-k9iWW4tlo|AE~%k3X(x2(3{5^RIkOH#59g-@bCr zk&^OwRZTIm+MCZ)Yy?B+G#1*)HRx?B+}ppbKSlZ0c{Z`A<HqlERrjn;ihFuKSb4E{ ziEf03mHN)?S}Fhe1xafs?u);+@ICw9x+igQ*ZG6CEM{Q`t$6+T&d6->g&k}Y4;<|c zo-M++{%F2cXK{So@6X%IIl`Y^YLPIQbzNHh-mP+hievT~@7}jRS|s|f^=n*Uzzt3b ze@E_sZX59+XSWouM*U~OT2n7hHt>5JA|#Whu*~1&8dt`o4Koz8w%vMYzFziS+Prif zwcu%ndz)-Ik98I(EbV_e;nb2a#+wrpL)LVjwtdR9;bR7up^}g08O}6;^Ky>^b<A9@ zHoe;tbEHa9GiOOiO5W^;+YgFP>#g4?u=C|Jjo;oe-|nn;KOo1oLGhu=(oZ)E6Yuw_ zUj4Fv(stuwuj3lqLnhpj+n_4__@?63w|Y`j>eZKD6WSbV82NwcKcxL+o7r5ITDSC` z2X$amv9@ZU)5o#k6MxrV`Cl+S^U^m5&MmjSrn@{+b}-pDZP)8>8BL7gooADnpXPrN ze{bcvaB1dJHzmVwdyhZA6Eh!__O(PCJWq)T&&twc)tQl?c{PXavMh_!<`4s3-=#Y) zg=EY)Ez)M=wRBQ3ukg;)mo7yy88z)*N3B7VSHDs$KAgFnUv{SW#bmWFoHIlI#G4<? zzn<mIvhTX+rf5U%TaN`l{uj7zRD5-*-y`{pla_U5mY+WAlNY))?0?jDo{&Q(td7FZ zqCm|WUn4&7E{Jud3E%8qfyOH*G`=r=e0SQ%qd|w$n|~YpeiZUq)Pd=$lL%k*<8$!_ z;s3V3UEFhFg38%z2ik8haQ>BdcANdoBRUrp7q)LdH`z1;oCDMkKYp5U(g~CU=G`oN z%kw&^($C<{!O|OLYc2h!+C_iZ$-1`i#z*JtZW=mC*L4z7w*J(LdizNtcj_izNr`R8 z+D>n+l3t%D|CqC8a%zS0oO<ckdkT9*FBdIjj#^ece_5DG()rI`=12LGzaOtIGMt`T z&8GIFl+kMSJ8srrQ?n*K2Cb#ADZXERXt&if2m43~sl5xb4@PZlSr_yAaYa=-^J<4* zWr@!B`KxLl#l_sx_xjSqY3JiU`{I$^eLs5~*D@CIJ?C9+b&`qiY`)IXohQ%N@BL!% zaEqm_qSo;pOo@*~J(~|0cV-B7{f#yjG@L5CTPIU~(x#hMr+BzCU#K$cn)W)bnXKu3 zR!02Uh36+F<O4r0P)z;E=X35$pQ}_r$Ay^pJaxy8+?ltLV^ZjuN$$lu4+}3$4{#LU zQSNjx=)-a@u371MyZA%gJGrKnB>y-(h0%Y~)@7GxJaugKZ^}Gwa*}tJ_LTO#?e{gd zzY_JGn6~gusiS@C9j+aLOI^>}6d%4B7VGHl_A}-4w3vep@18{Q7k9qm{PFm7^PN9) zv%Jrh-CXd4;}6oP%~m#7B?*U3N-LQd7&@^fdL!t3ZDjs!1D?9L#((VR4$ED($SfDx z%xlp(TjGRi_}z~ytcn&L+-T$J_p09h)XrH~UIy5|Q2O~%+4bUd@pHf3m=m;SCe2(n ztDEPUPV%HIv*zPMhkT4@8uIQ7ipiXn>Cw_6*uOMD>7s#Xw%YQh#Sgx5n@HVzdh}_l zvBKho>CX<lpIIp)AkWs~BYp6D`-k@IQdTDWmu#BFX^!PaY6tZnMLk=y^TO#b(R&sI z8NOXtX(pU~HDjy&R$b<;DYKm1rk~mR>!3wPjZvpg2XEZ6*w+W%<X+)5vrthve1Lna zXTt=);?3+Ox9_wyoj$kZyY!juH_Mn+<R!C?yys#5A^GjZf!v$l+>;|TtyDf0ys(|z zXwUOIxjdg|_xXb^t_SC4uPjNsy;l27+f&PjEBL<$Uf(LDH+A2v&qtchsk~yHn5`_b z?A<wzfXy%GyJp{=x9I7lwXY6rPzZ|=c~!dS8+V!Hy?EJs66fQO@2WefyYy=#UuNu_ zYU8PwXUN{ZYISs1lK*nM%4r=|^A`r%$v3RqlsJFUOXHgg%Ryr_m1%dvL1Q!y^_J!) zzaGwIZB6o?wfkE8$;a|B5z$M|o15`8ZLn8(cQ*XDYggZl2Ps;&)-1bMdn%phmRSeO zy8OA%wgg#-?9Ws=clg=W?elFF@60e4PTZq$_m=P8wXY1mXnlS4b>HfHkxTbae-^Z+ zCz&fds!7b@@eEDYs)G$nb2`&b1uT-h@H1wUWtm>UoBT#5zsp-%Os{hXW+eFU46vCU zzKk_)g^%~<sXF!7{_(VSEtl-G_*FUY(+s;$Q(g;Ytq_wu&bFCF_hpx-Yw&|*tf~?H z3LjX~Y&>VU_%GO^lN7t){$mY(scM1Jc^Cikv6jVT1?}12X&l}#*J7H_=Kn8$?tb%+ z|AnaQjXw%=(%jFS%G&rh5P9#;4mMY%1^buy)G#wJNMqX`Yy_Qyy<N1}O`x`X>i>n) zLsq?EkK9yN{84X(*R~BVUYkU8XP<t|Atk{sVPxzPw)B(m@1wVwcP%{XsmpI*a5vp= z{=S0B#QiTz7{r7`pUukDE9x+GKWWmo;a1c1>?xL65?V*6rtNI=@R;$@flF11mwTh* zPJuaQ@9LWT(hDjJD--?y+$>3$_pTsip7C}0Lr1=g%YMJ^e=oo9s{+Rl*YZEPjbb)u z=GT1ZzrXR!_Pj-#zc^1YSQ%g~J+D1!vDNm!^1r4vo(eEN5!u#fS~maA(+l(UbvbzA z*2%s;@#gjl>6{I<=jZQY_LpWn@$J-sI==O9^Y${9)Rl`1>%M=!*#2P5*VoP7fjYeI z^%eG|56knP_|Lf=_rCgZgygM%MGo69o|NNRe(%RgON+z*HhFGb`ujzM7H{?5+tQPc zO5M1Z!y`YPzfZJq<rm*G%G~dspPsn8q>9B=%5E0#rZ;@?uCKqJyU5k~+RR{8kE!_5 zU-EnYS;qNw<{YkG^!|VE*KhA+v{T<U`b9?1VK)!mz%aXRZF^AT!_z-!+Vs2Jo;lC3 z&Xyr|<;T!<U$nD+JkJVP*vs~;ZbeJ}su{|Eb<9kT-CNAM^iYpz-`Be}Uwyc<+rK>C zE$0)HZ}V|(x&8NjlU5vTkz2OtY?k4V8J`3e)^jU0Z7(k?50sSYzV9RQJNWLuzuV## ztzT9-O~hj6TL!V_x#zD)OV~>ZaQ)Xa<PX@p{`a~fYl)2}Vv}C01Pg4C3FENQ4my*; zb>W4Pr|yKjD|e0rClwk!%3^3rYt_13^{S9{YG+JxhTrNLGozcQZns}ll=XD0r;BOt z5)aXglh-svz5R77OlL%JWtTFCFn;B}&$;y5^2tj@RtLR&e69M1ijVUlt}fq;+|L#W zvxprRN}hF7t;eUu=FyUaY7aH#=A0GdHi=JeKK(N9htKlRhtjpzn<n?&`oo%~J@2@J zhD?G;!p2tZ8bcF~kGmE|bm#nL(9r*I=GvQOS8Q?x-v{WnibSy}neK7wspxBKpFKVD z=n<7OD<lHDug~ijnLQzT#zH?Aj)>)+v9ZDLN;N%o!<M!RPWiKjZ_}K)r=>aXg^T%4 z+8^QLfAad0qPL&9j~4py8gx$J<}E$v_cY^5dEmMrIhmX0Nxz<N(bp=z+@-A;q@u(b zY^-?Ew&h!*{_lfRqGXtP(|)}>b8hXw+(}KprstNwcipj8Y<K*3al|<4E;d)CwcdU~ z=FAKXE3r);7=h=B=Y|I6FLo2C+vo9<zc@raR$j*XT<q-?4Nq<yaodzUz2N${Lf+<^ zuMaJ{tJ?SbwKaF&WQ!%sW%xH37~ik^{Ps*i)uVmyzcPeznNDky)bqZP(Ag#Fleo8e zgUJdn6N5{$vJZPP&kWh{pmS1G8e3RVcb2N9q+We%+<ALY<177R(!1N~2D5HFSL$## z=zbik|KqXukE_MUKx-!S?}ffNP*Ew&UVn66^8T;I!5#M}&(Z8XcKegj)abj`@^x}n zVyheuFGyjnI%l$jb5Y=)9vKgvxJ;Yp6K~#L5uH=;*kB&}Kc?VwJt2AfYuRsY+wb2x zE&TM!`w8p6mC6YGJQ39G9{!o(ACLOSGuHAvb~g?jyV$EdKX0<SnZ(({FMG>5+S*U6 zE?o5BR`C`O_U6yVL5DxyEii1oo$<y}GW^z@+=^!ht{Tl^nP{${G3nhcsS}&+t3-2u zFs%)$xX$XvT6jEl?f&NS!k+L;KT99pz3~12@m)J?jtQ-?zG(US)MtTZ+S49<-f_-% z<+>05D*WTpHf5i`V6}f<L*^9;xy3WXuXOZZUEnnP$G5r_E#{$Tl>a6rXZjq@X3y$n zU2XGx`O{z0x^rwV>Ca~~;6C(H=bPPMvkJwF#%f<Sh~|cC{}1~hl4!v)^Wf2?x8qIu z`j6(bcm7`b_SeJ7VvEFY8w)=5zE*qZ)cxJ(obT^y_x-*v``4O}`D@;*&G;zPI91{L zeFMXUqBMrnEup)_Oct9wDdOhI2#SbXJDn{rdcNv29=QsKr74QJ4HJTt&vx$;+H>cI z<ahq0)am>eC3iL*;+eW>elJUkC*P$fD;VBu>OFLOb8g<!)co^7QlZx-uHE?{jop1_ zq<ZVtZ9n>N7V>JIH=1|l&;co7w{(s>TVhNsmmS%y@oG{*u2ytjkw(PM+r_ulFC5x0 z@YGX-lO<YY(R4GW%S+bxZVhL8pLn{Ay~Ffb4_jkaYyOYS#TGknE0{zdne=U^@>W)r zD;sBJyo|YaXqMv2trJ=QPhZPwmZSRi@Cy#9q+N05iYiT0mq#CqUi|9F6|RTLvrnAo zcPg7AEbXm0Avde0%B**#g-D9~jfGM1nwRB|)@Dm=u@Bf@uX;Il^Ns%=|Ctf_Y%iOu zlI}|ZA8}>|hEG_Vd+@pH%LW3q?|uF!8Xo51X<3rFvt)zq<nGxO9<v_oVwFp+p3IS> z>EU(xlVpvdwtDI82ZtW8M@}m{KhHL5EkFMq^<K6EAq(9SXFLo#Aj7JaX3+dZ%qcN| z)8xX%S=onM8fS(WJX<*_>Ku>HQ>m*VMYk+!*?Zf-^A&uLKc3kBe!=DK?+XRW6C{pb zcKh(sXwRoP^Hd&4U+&1C{=y-@NRB-|>HNm*v#pw+_+K_@_8yBao_KO=p3K(!TV%OI z7bGe~G|n^TIM=*F*k6e~s9U|~`5oim_OHaG?^yJ>H`*WTF?QZ|UiZ!VH?6nt<S-n~ z&nsS(S$^q1*SDKB-<VD*ZIXHHS1xkk`38CZy^F(M&n(s9y=(C)^M(D5=5rb{bE>Br z-?7!x6k|=FxA^m#t5#LMn=JN8_puiUezi$IHq~tX^O|Q4<w9SZPh<;<WLBh^pV)M> zQe^Gjd+yO%d)6^8KDFan(bE5o<(vA|Unso(a4z%j`-tPqe@9rZ_Afc|>eHG#UnVWx z@j6_33KviQx8x#2$YgZ|)3T7q74m0o7P;+N&n6mme|vH$=l@W{?_auiE;ZyhFB6fe zbK_F+Jikf#CWYHP^8KR>cn%#j_~v(S`@abp?VNjaTyNjJvj0S7+XXu|%jU<y+bwl@ z-*w+F6Zu|L{P%Wgd1u($r=1#wMz@)K{;oZ*@nx;NDMzn;m`2c*r)#z6YE2G#X1VDn zm*Ub-7gi`93=!jK4dLJlpQUP<ms1>9u-I|^q)XGfe~L9rwIx~p_q;c4&ZM7*1uV08 zi*`;qwT8uf&YB*T7pZ=wtVTcER%%XP5!z|l6sa&V!eE#FDI>k&)opX197>v*TzI`O z`_k%=WT_bqo{Iuw7gw?F-MuH%*0k(*Qm9eoi?y1%cJUHf<=M-O9xxqxC!xnR?RneN z`-x}IG6nteiukqHsXcpH#nBU!)O4mrm~e##YPqub-8!@4Y10HYmZY}SIa<g1n5<9M zixlZT2)aHm`|15XO`5_tc0Af4XMFJ4k$%1%3l@94x0qBbu)pSKz^h!{gU|e*nC&*& zt*d_9{!%_7A01?KRSN!^<o=h5fuR6veFdNF25k(#;|1Lq&f|3(v@u*HsKcdk>B~5~ zSx=m7SZCk#i~o15?&CSOTZa-ZZ>iZZ_s-qo^R{-@?(P4OSADdBR(%})!kC1Vk({)4 zJeoNvN{mhI6W>*rBBMF`+uf9HtZb~lu)n-&u%-CQ%bP#7ysQm8E_*8fDiN;d+p|vP zLG@)1d9fFc<u+c6*JnPsnSb`unbrM~C#Sdx-zl7U+WM|V-u$h$+@|h_9X439#o0@_ zdaBE+%cY3<&p1$>^ez92uGx>wIed!?Lc&FRmftrtt}Fh@sZm@U%B!n?Y;S(T{HNLG zO8+`jr<duq3D$I0zf`cu+ZuP%;rWZ@o*vHcXYyJd-eJ!r*PQtG$C6N?ShjiVK83yh zq09NGwXWuB`|Bmr6|CX6_RRfwsJXlFQum|<t^rH#Ej68xzIn6w+S*OM+X5<fbN5s| znsz$sKkNG(Y5xmi?+!^{{BEB-cTRqCXioV;=WVOc9XHsUAendUt&i8**6+71cWOLY zH)mt%z4(U0tT}m$XWC{hxt$fT_^Xq(UD+Y~(lf$;f1bJY;`nsAD^kyM1S|AcPS1R} zcEY{6+Y$th{&kd^Q<w2q?IN4-tQ_~-S5@|`tLVF6#~OLy<j(tZEZUbp+g{#TzuD%; z+q1zg@4wwp2{E!<<D~xZRJBCAnNnH$j{~x%&)=_M7go*BO=9crG86NPe7eHHDx-W^ ztM639Ua69~Qxm+>UU)5-5wl3lo_ER{v4bA7T;ndTdh%q~fu7B&57;cNa|B-Nh>4!R zF(v$t%>gm{*GG=b>N_NFy8QK&8)=(X-3Yl9>m{;$E2HkqPmhX?W(k>}-8H3js&K5p zq!XPth0Ir5XfC?`OtaHqZH!`#+7c)BDW4ZPv^Fi7xoD@e$ds6cYu{9It*V(l<?>0d zFFLQ~IM?;AG7i>`xxO!1es|y7eX(WV3mv6@#AK&OF5W4wt&sKk*IB)umQ_*PuGBZ& zIQA!h!t%Ml_Qpm0WB>cC^^E+Tq_6gWSP{A9Fz6Ts$0r@29e=`Da|>jaJoI+aWkjuW zMqpB#n8uBHCy)BtJZXEq?Zb*2v)vTD-GVg!^6r~4b@H;@f`kvvy576p)5CYWx3mA7 z?8cn1?BaqgXNpuGN~vb08Mgn_J#uN$w2XzxJm%9pxw)4no-tnA6BRLIrSui!qnQuC z=$c491nnKS_c^}!LhWL|`?bddZ#5>)Iwy5;dG`;a4^>?a^|#!rq8G96eW}uGx4iNB zvsvEJ9sD;ZWj34bcxV)EzO3+yU1l}kDu>e!o0ypM1$-ARnd~RbZ`7`y``|99(&3Z- zW8&u?Xc5WDc=>1e86BJQ6Z=1j*A?$&b6L2Pv%BqX=6~)T>3?r`YfLzD(Z~93AWL|m zy)2vi+H1zoBP4%i3SC<LKY`b3afJcrwsQsFe@xk;V#RHv{3-193(?eL+<z-<8a^)( zui#$STU&ZoT&`rfr@dE`m}8*S`8!OJX4cggZyn#AvGkaHX+nsM{f?-a^$+&mJUY2# zT4{ywtpC>6USE#YIrxfMcH=IK?Rm>mB<;SfzB?t0r~ci$lTV$lzLm6o{Fm{DmbCir zj52?-OLubu7Jha9elP4$edrn6zmINRlsJ+uw}wY-4bPtCAy-U3n0e&)MH}=yI%vS# zcYo_YkBiD`UkXLvx^4at^Fd}|EmIcbdjG%A))?*3uT$6hcQlIeR`sn;v6%lVBG!?4 z25AqE<%+bQo0@Xy!FSP9Jib>ere40r!m7VRWvx+y*BJ}p35L$~>n=|BdDe6~dqRv& ziPqE|x>NL~+c2+OGr4b$_0!^eTJGEXlU<gD8GD*8@r*pM=2Xzjt!*ocvh`VJYftiC zdR8iKSH|-lDOXISb};s8AAXk99lcl1RZ@KEfk%D~*^kbcT$;pvv~ji8)Yl3VQ@s<4 zoqaZY?ag$aly`kS|BE}70V*XaDpMS)G6EMYw4B+jxbf)z;y)T!dt11JtNEU@3Li51 z$a`%1-tP~N#0IAYI5Vrg`d6M?d-7~or}onQGrt=ss@k6q={z@ON7&=PCRMYVHkZom z%JTbub!t%3N1<I+Qx!{A1aA%e#CRii=D}a9KFyAudOxiB?9{K)h|F}1%~k2pcU37< zW(I}|tm7Ks$@jHkx%sy|1peItb(QSqvdC9(=3eejidH(v=q+GTu)bVgyqYI^W^8#m z=hOT5*W`LA_`TPfYky<+=TB#hHyd+L7k{U}R_uTev=PSzYQ!}@m4h_mu7ewKAzCv& zM0n~3GaK)8Hk~|2#C-mOtDp4s_4Mxqnn?csCjEu|n>FVmyPicE*SP-ukoou0^82KQ z{j<ZioWI!k`(?7oAJNLbsioJ_Cf_}lz05=^|G2AC`L5Edzi$-lTw&v7K4|vB^6&%0 z8Q&MbywiB&5$9ve^JnV%b{%Ci=UQC&z<;{bRbefL?ZI9ROy#RmGAhkw|L}g(-2R>M z;{52M!2fwN2c{PY^zK=m_uc$;gv73kca~p&(8~AgalwxlvU4AP*b%a-^1}m5EAL%* zSDRf0b(V};j{dn<9JFpr=K6|P2kw^GaXgEgzF<WKf0*O6x&LNo?CpP^vGdS!D}$^~ zb-nGs;y>8UeavZf&}xtSr2i7H|DLrBJN8OgcJnTq{yeL6!+F21vMoJ#=>2oUogS&N zXD&$XpWC3hs<5^%?cNHvk~rS1Esgp2kNf>t*;l!2e`KW8;SUEJ*B;|NZTtNC%TL<6 zbGTmqau#=Uw2*PV*M5KZdasg0Eq2=$zs-84Z!}Ng%R0wpAO0PCdxop|`LpfeoxgX^ z`F-!Cz{P8RXXhBH)jqZSto^v~MRfay84t>jE)o6K`t2@5u%3W~$_!=MrjG9$TsAw4 zC`^wxG?UuGvN?^dEL&UUbr54oXNTyddF#wngfDH<VfNEwH;FQ8Rao*+^Z1jNWwmny z-aM~7mb~qWq<OVPa#rs?5ye$I5}tS)aqZ8wjNP(yTDPc2(vp&wmIos8KEFBP;<)O` zG84-unatOOqb0WXo}DIS8L&$8OH%ZKJw6*J$gk<<HEuil+U>K;jD+3|3cK=6UOUP1 z{Xf2OTcy+UpneB?fsIbh|K%^$d)2q5C33A0-e}kLTIodB;=0vG%d`E|Zy)$J>t$z% zM9PkhYp-XR#b0E!@atpYmukPOsaR3BA@}_qu1y#B*lwQuc9lii+0xJ3`r<6*<T&n# zM&8?}RBG|M>ieb*>nFE=`rmMS=j4<7B0~Oi|6@etvJ-5sN^g8_7u;iFVDQ1(QG!nH zN9Nr&5ctbK!P+NOB%{%)Y>o-H7UzcKqhb%%c3pZpdD1bn=*|$=Q+?|%GJn&NJ=HaN zhhO)H<|QX8^Tl}YKWzNF>LSAou@wOs%XW$wxHqz1p5d^CEj~ksCF_O8(Wz-phke8h z9u+E1os&7^l&Dzn$(N5l$w={j|M1|$0lAjN3$w%4Up9Vyg4^1F<8bET-zBf>%hqUn z9x2}?xUP81gDfMyz3Uey&)odXDgEW~ii2FOw;~HCo|u{?v)z7+uJhD|X$lc-eOJF9 zi@U(7-pIP~q42GZa!S>aFWRKvT;Ok?XWc0x=B@K!E$8R(Pv`RT^cwz{zn+tEd+wKg zjgqs^Yxi&B@aaihZvEv!_kC{mbA_wF9%ImUw&sbMRn`A)f$^8$$?4o}zY~LxGQGdG zF=W=3sN?P-VyCzM4V2Go(mp=xqtna9mh&So%w@6FFNkt+HQi$-o^tbz&FO1)w^L7Z z$GlTsd@iCWa@GG2v2Q+c{+jsv$FY)s`RgX1j$Jq9t$)dhZ%=o&uAFo9hsgHpnx+!> z-u`-$r1t&im)?(`IbW=jdcHg7*UYSz-B%a5z22F2uk28_)icFEIeCX({Jt(Wh0A!F z^|jZYU*?*Hoh>Q5)ztX>JNv@os*Ar?yZ9?DJX*5lrtjU^Q`9-$7Eds?*tuo)<x>w9 z{_I_JWBcsq_wRk5_Tq}oyapll&9f3-U7NA+y_8I(_MgZ_9f6_i*D>Y#Ml2~gnB>d9 z|4gvnGc~DDxBC;%&G2xzR%iaKsQ94hgiB9d&Mp>l>?(=PWV+7v#EW5Ni`x%hx1~vf z{yXFHKd62!_Ty3MN}V@hVpV*;!=%Zqn~tzVE=^vhzVb)pyri=A>#HZ7^xm5BEOnNX zny}C62`yJ@jy>jDWR|AVnbdcnciqBEUo#tvgUoeSNj-7f+1ruLDd=?OlE`GKvn`(c zd{*)>Ju02Eh-q(vlvqxusY3E1l`~R{oc=j{)L8s`KZ|tl_SvyB*R1wk`xW^z)KhG( zN-q!WoB}!sOA%`e4!ka4YA9ryNdLnB1C<gNn7k)1yL&5XTcb?gBgN}6<;NEbY4@2$ zbE&9ietYeHbLT57*;nkbD)y7+Yrgt&q%M3VLyt=6l<Y+_9|(YVnKylussZgXcXrlX zX7W&KnUm9e-z5P_s}fbhLi$*o58mYs(Rv3uuHi24Z`<o<;uhyV+b3?eK)P*l*Y~#< z|G$gSZ9L$=OK9EmD^1r51gh+vj~k_5o#{7Of3oDnuB`N<6)It?iX#7qZ08B_GG+7& zdKDp?|A4i(KqA7xup-9#n%$=Dt$7;`^8MZLeCOefi;6r|4fx_uPP%dRkIaSI(#b-4 zvk!mMH;CVtTRFoe!HGxu>^ye+KV>&c^|H6}A2SHva`?c}g|!OJZs*_g%$aMLV=v9g zy{GzkkY~v1*f<64Y1zO3^4YNH9-n2j@{8-4Wnw1nj<>nzNI5CCes^n_b@f=_mS4Vt zxq2@*@$hgbpFHC9m;L>^j^iKgr#<BT@TYXmYVin8P5&+Kr#{`8xzcjxh392U{Wk7< z5qweoad6<X%jTz!3ty0w-tKBr+tRz?1e;jYZPUl=gzkkH{{C?JM$5&I?{y<IW=-0e zyjQ-j{_&w(3bp&zIbQ#4efPr7eQWnFcoC^$F|*5T^~B#3Hgq`s6+0rb?%kVL8o@Wj z_h)K+ORoF<S~Z-L|Lk2(gZwMEZuH;j^*mqRJ9GXy;aTsZgrxqvJ??Hz^DJXG?wQLf zKFjxdbU4=xrh}7BGfqC5;q@kEwdB(Y+7k+$dfmL9$WIYqy^&RsGiAm+#&2`N_SsvX zzj!oe^OV0!xxVxqYSG9FQePm^FPQcEo56xJ)}BI!2kp96aekX`!`3okXLaLdH-8B& zraT9;Id9t2-@FmFNHGwW3@eisa=pD`lghVA9cm$$l@B?+s&;I=zxngygQ+%qgl;9t zDXOObxaAU3$D;H&$e>0}?UTZ#<gY<jjPJ-?zFV{=PRrq6!Og47I<DPJ`rPmrX$0*o zo2!z+g!7XHm>C$_u;v8tDgn@ua7Zg;W^d8S{1(MK;Zlp5N9JLT>fbL8Osr5g+dMbz z=XYyn&)Yp^v)WiB?t{DivmYyeFI>(npm{}u$2f*7Vu8a^o-~8|P8vK~jcjb7^}YrZ zyjjI<LW54<aZoW|p>*<O!7n~5S@4>#xhmqp_xCj)Jh4x|DTQION~hJq<NgoR&r5nS z{Y$kvxy^;WZS!fBAG0d@=DyZDyXwaTy_uIX_V9|&yz}Cm=YQY(8w0dWcvzwrKJRHh ztstke`9|XvP|M5w%)eex%Zqbz<^y*xsmzX<x7VsSd@7qAl~G|PUCUg3b^hUo8^@<b z8(GX|`=BbLD*S%Q_3A8UZFlp|+Nz$sn+XQI$EV-3lPH_+?RE6v&gU<bUVrtAn<Ufs zzD+!NM_2p2$;C_0o@PBSYcc!iVuf#2EUvfaMl)BIv43Cm^}hU~sa)%CA6TKhZfDHv z_K$I2`98AfCP?2?J^P>a^%sHF32$5dBBSU2Hi+FM^8VOXwWY@n#kX7TJdqlG?t<0* z_=c5N{w`)J?w2~bQ0hvC@_oDSb3gdY7CYB(-C%O;;ZEl4UhS}|bCYlWvF4q__VVp( zIiIEi8_zx0-&farlz>Lg+;0ayi5InTelfr4%)_fIZ})1o&wjRDz4Q0Vd*A-vuI||P zW?ART1S9jtiT8i_Ip6=)e)V5%NbZ(X`!~f+o$;xLJFW9WvzX8ACq@5cgBKt4@DRP^ z>AJLNBLiFN<SEP7FzCHm=Kqn^V4~?fUjALIdEXpL&Mn<^CyHlwMtjoU>|@^w+uttG z;r23m&T1ZQp^!VbLwfhLIp;2z>TjAA>&3e^@#M>r(3eHo-X|lomOSz}sxz~3l4h7l z#EUNXZu`K~*Iah`ZHip9<Kq#piMz56uhsEUeBtHjx7_mK>a8y%_8qdS3E$_iDd>fa z^i(6Kl~-J>!ix7rXwOoL_}rir?j~sX>5k{cP1g=LU6#84t~IObc}%UwpPg>G^KADU z?~b38e*SjD_h-L%>FnCNgkNQQ?1g!a|H7B_9{kVH^y~eLvhyk1*0P<A|74D6S)FHd zRhrV>9=wZ*fx#GC%gPwC;vnQCsAaX6{e(TJWyRk&b*XoNXM^}nu~)94Q}o=Uq;Be@ zToPPq0Xj*}ddhT_zDr6r6GSXOKRcW8qpyEXcrTkn!~&;<GoJ+=;9(W>N#?q2%Hou) z7~t%!xz0pb$|&+chk9#>(Pe>CqGAi5lob9Hl;VB=<He5?l1COVOb^?C)%5j={%C`a z#~U8j@8#RKGt6D+!`!?huT`Ti%<M`2@BSw0*&561-G7RW(p#P0uG``9)XUWG{Jr^+ zY*~%78WXrn*6y?awm8hDQ^$j6-i39g=ij7)Rvi=y@Ym|=ESWZI#=+?3-|Dr`P0Y<5 zSZ3W`l5u-pNqv*#?DKv8nJ#T9ce40vf5??QZmiC_o!^t3`r^n$_u%gbWw*3B*1vf- zH_=>1EAq+r81JVmbLY<sh}AjI=~la=%WB=!k4`TqOP<%s@L#k}ey5pZpkVd0CY{-9 z(=VRW<G(nK_1?9{!0bCkk*n$-&$Ulff8l@aVeiX7_7VO&p02UGsJQxc@%v@dbPgV` z+v>RT@P~H>YT`53bW2J+elC0=l<k}1th!}V9}`ViT--Hp=J&ZD7WM61zJG?K)ZYc^ zjw=fePFwf2%IL4FbawZbhlko4<-f3Rtp0eiE@+XvPllmvZrQ@}sh>q2-eH@0@aNLY zJlf5_pP5g36qA4Nf8^WbMaiG5lupfgvyEfn_EIUfd4(#S0TscEJOV<`uPeGWTV%#G z&dw=X%Q;Ou9wlwt>9FkD0#y~(NnMPlW=GHdSfj!};d1<pjIA5b1Ztir+Vl9bjN|#4 z4RYRFbgmgV*-l@{87*jXS-I$7(#*$6%V%!=lIP{OiK}(aG_T1Hy4S0_mL_uZXgxa6 zdg(+^u%BB=`O`%r)7B^~RF-_aztFpO@-?$G+wJ;J>sVs6*DN%BRk}cX@}+?OiIWxx ztz>uD9nUDOSw1Uw=DO8q!!G@2LL~KzY_3Z4C;njrje9M^R#zCqmLTNaf*t^OC3I<+ z=0TO0s%vvQyP4N11RQ_)v~VN)jZ<%S-7{_3|9*`kOUGi3x($1+jnmKHDeLQ>bA7AS z0S)(7C*!kA8#KAj%sj?&Oq-+SSj>X9WkE5SY9>A@e9UssgHCp~O^ivhn>2@I`uv4q zpZogz`sc)%yr_Qm+T8k?^@qi3UlwJAe6GL4W*@s+m-C0;^+lm=Vq4m;PyBCPq`NtM z{>#c=y7M;1EG(NIqf)dot9NsM`n1Mbi_;Wt$i%LG9sfJgSgK9z2%CS#^{Rw#pi_0{ zXmtGASAO`YiK}jFaC|<)-01s1oc6Cxe9k{3eQ(b1BX%Zt7NxCze|Y@@;jeeva`&6I zEnOtsD!13l+9=~&^SiCPP1}ASU+B^LZ))~RlZ|hWX|^8zG$-Lg>+B70qlD*a*IGRl z=8ihN;W79ygx%WU!w@{T6#o{`JzW^c>L$AJ!KQ%o59Z1~;`B-oy=VH?zPYrrW9p_X z_up$yonJfiR7B73vZ?Jsi4X5SoEhVja&=~7VBIao*s2d2;lDaFT-q-#aC%+wY%g^C z_s=UAUa*CWiEup!9folDWBjj;W*+nPa$fv&+%CRTJpPTl;;m#S`QVGs@}JyYV&iC$ z-!SLE&!xfgQ@Qw$=I04LFT49KeYdTP_GJ@AOP@!*4^P~F@s0WX3-;9i`?RFjUeRBw z5i(KPpkt+kh{wcr4B|5m_skS!5?{7C`45AS%7mvyi5^BXmKB`|I&tcq+9933i40p< z)_p%Q<GS3$v}sFi(vs&D?QLSVbIY`JW~^#Ek{zePo6NE&d81m^?w(V@*Y}janc`C( za>Yk1bCa9GcTxGtQ}SX%d%T^y7Agk#esO#5y2iIc&f{H1u9@81{53C`!hWoGShP@U z&KX0^Bq_#ci&{4=)|i$VHG}h`$<l;*OD*=#R}tOtcJkz3<=YbC6&*iK*m3#jS}*q( zS<B`Gv6&uA`w_5e8S81`gy1wLw}XDB>NNr1mu}@<(j@El`|H-VhwrYLK56fU3n4R4 zKDqn*x%qdoQx#JAm3tgY=WDM~Uml!)GG*(z+f_~fkXEW)VRKdb7Qw@JmWhF(4{K%u zFA>-pdK)=2J!vfP)(_0}W|P@)WbLt+PYVw+=cMdeSI!CAWjoiDjmfZAX=~k$({J8b z8gDj!{Mq<(?n)K|pTMLwGaf0mNgkVF)T-EX{lQVL%Mzj%K}9Pg)+A^Jz4+*<wPc2t zM3?9?=YuaFJQJSc_3h`)pEGZAR>el2Uw8RZ@p)dE7c2)iJgM9Jd0(Vku)v4KTCA^G zcr*BZHU3uKz@w{u{;JY1qnVpS7HtZ%;XCRzZPiwOQ)g%00K<-(OuCETev7@&$+nMC zxK~{J^o{6mR+ml9W;BYI#8$gZblAM-CPU%0V*8An5?kt;{+Zog<~{BAt#t=7OJaY# z+uGC@x;EtA>+YG0B!8Iku2oNeP_nn|{;k-yx9LGsYQA4HN)ZXux~k39nm9XdJ+Jcq zOv&JRUZtjwgPEn6_dop=*1A9=Z~LzXlhfxsxBN2RqH?rd$>3BQyWX@<tb2YL#`*Mz zw_I2M$sJ*SJVH>rY|H7cKX+m$bIyM7aIaI4msX9<vnL-zL<*~-er{pb`n;g5XPKXi zvPB=8YSig#kM)G(rW#g%7B|jyyS>{qL9_6n(CG?uiTjriotS7B7rx+e)my)W*!p!g z+!q^FO<wj~TfNY>tD+-ded7$LzsGd=jazF!z1B;*m+Q4}+gkakmrWl}Mp~WH=Y1Qq z{`JkM>!)9R^9@UxSy%STWnu(lw`0%y!bJ|834&9N3se((irqM89m?t}RC^e?ax=%0 zG`3f=A9<cK?v&%}n5)wHqoud<$W^JnA6qZ={rxU{N<g^BnKQ|G&d1y<u8Vf7nFeq! z>E5N>8uNa8n(hgI&a87GeTy8g$b8p{-Xbj4AF^xCiqu`)xsDN^_x-x^)o0(;b7q?V zq85c*?LMtk`1a8z4ol;ASF-zxPXBlE$`^90IJ0x&yag)hYMNSSF3kPUegDVz4}#0Z z>*Wk@{82qy<lOQ)XX1a||456Iud%r*+3%`)bBl?Ap#y8H$r!xZBou9<;S$es%{1u~ zM}2#qKHB+CufNMz{Z-D%$y1j7?5+K%V(mNoiesR?hmot?rvQ=Cs-*pyCJaoCLNk@R zirBbQG&&BkJd^$~)9GM<W4M==Xd+jTUV>BdK~;ZImYQCr2O;?}b!~2kZEY=WH@aU; zc{A(gYrZo!9~bHMEYirRxS#(=zVGUDsULBsi+mf!zNBA1@mth#+C<aoTIcs2^Hx&P zO81RCbbV9dy?-~h@r3ksF(_MFUAr*5D$#satJo2?e$C@mJ#R`EO6P1)wwJ1YxAh#$ zq3Y(J`acuQwKX%IpVd{|`{pd${)07F^Y334aS~3r^0wFZ$4mZ26N~R<?KN&&x=6Nl zogAD0w*}VU+Jn>6dHCnAy)0T4-lw{G$yF=+%a$8sZqMg=X!XWA%&RpdoqJZ)h1spl z`Xy0PUg{rC<z$>q`>qkSytX5ZW6x^l%c+I#KfU%floxg!|Dt*Aq3_l|tZPm?uj#oW zEIZk1p0#o01c~o&v*x~fb?CSA{3%QKoLinhrC&HewfUUlEUQVqFASu2U0_=$Sw8i{ zs;){N`}i3KZU3gSYIj;{%DjG?Q@2|Dn%K+BuH0_(>}6cf9i4t{v&dW5Me4y9(?oY% zm-H2|l6|0AqW3l}K+8sKf2R63-_q~5&+APRn>kxJ>snNLw(O4R=8f;Al<!KZ{EJoW z4xARg&g9lgg^AJuG9Hr{4x4&Bb`Gny{Mo!|QiD*7XO`70mP0}d&U|T*c-Y6`^=xLC zO3<en)7IwsUKKiVP2_!d&#{ou1yhbXSzq<anR-4@;?+hy@5t70A;ZIRoc8)gXXLB0 zczeH2a&FR0wc^`)<hf&b*0HUNasq=q0<;dAKieMk{Bv~A)v!|4vu>L%?wxpS);l5A zwGx*_JQ6h|ZyitmckIWkgS~5fciT-(arKV3j=aL}^ElOt?Q?-hleXMvAG^X0<>vzS z@|SHsKG}EYjeWw%ms;Flb5)9T;@AJi#K7Q-wITq|y-!802wb=t@7!|Rsyp*RL#WV- z$6r3}xRHG0%01V6sz>VYM;3Fl%sR$jZCm~9%$qkA_2=v2S2KR$4$&~V9K$8C=s;7Z zPeOo`f{7TDX@yte(wP?~oMOtWi1APj=B>3nx=7zL7knQ3-TSxiZ??YZd);*J`>j6p zkKN@;7OjZ?y#GGCz07Mbp^uZ-xjvQ9-SO(K8+4oblFx6lZIW7@-umqHcoK5e&rjb^ z*LmvVG=+%1zN_Ez|6b^>S_m1I4LfyD?QTJ{ENkHP^7mUl)<@j>dQ;{^PVGA`-r0Mv z<s013sd_s3#|4k>J!#k5=R0b@vQY0m=3cyk=~m#2pvzU;*yGGI?pvKcyx~U<SICQa z>uIMZxjlX|V^QMHvVzNPyFZ-T7!;>bYx86!>)E&)pPZLFhKTIS-t2f{*Y?S8-{efr zjd}3c%*d<5T~Ga$=)P`WJIC+ad*4sH7XNV9ohPSml)3NDnLYn>a@Luo82jy4HJ*yv z<=%RtH1&248{3}SjIosk`%W$^cTv981F8s2-x>+un_{T_^XG*V8SK}^d_<n*yor#n zYG#*;C|>6OocF~K$KAq~&*P=^owh7%v6_4_?MnH3qj?H*<~I90d~<2tckKgOKYbN9 zzE5BO@5@c$MV*z#ia)(~e=e>q=X=YxuCe;QO;w*{|LIpNL*2E0NNKIO_hYwc%Ffvd zr&yVqr#!XM?sc2Sn|ko8M!0)}Qd+X<Ne>}~Zg&M%IYwd5CvW(h<P!PrOyOQ-mDG_l z;h~{UOasqWqZy*AHk%f)Om<9O;+A1FQ_QH{;<1Tw#<H`#4A+lyhsXVT+<W|qk@Sb2 z*FxKNn943>u&g)`(JXb+)6G=Ucdhr&f*^^R2CBB_TQV~RQY>d0axAg(>-O|iot%@p zWXl0o=6BcJ?)fMA3PkMg|N1(*B_r<a{QJdQ_m_2hPh@Y;ex2o4RPaMz`2X3xy)9pk zvS!6hsNDUjQ20g-XUk3hbL-4ggTk7Bo`0v0=zQE}b5**K5xn{#69dCqtThIF(jEE4 z_U7d0x71kE=FGTJ0zQ8F)P@_U8lEWK?5kfKe@FC((C!MOhmJy*-rX#ocD1M`W&i4{ z3~iQLBC|5}SbG8!&Y2uDh-%U|dB$XFGWC&{@j}IkmR~BSc&iHYI`2GCqhTo<QxChi zz&dgL>sdFmx1G83`H))4p@N9d`|N+&%e?jz`mlLj>uJrX0`nK`_tsz7cqXoP(dIAN zCW$+p-s<e=c<KbYx!}AGGi?6i+po9_JnW6E6AudC+PLk^J-53F&9c7|uNTX2xo97E z$esDO`M;Fwr<oW0_&QZB>K<Rz{)0A8U(a>dVmfS?bFa+y$II=9`igI5)EM-&E|g`{ z<6SGBe&NlpxBE61wtY<wKF0L^-o_9qbE)O(Q$W)fanf>4*2ldn)_plSLtX3+U(+;k z3*M$hGWTXPZ(3u{zi4j!o5jAxbHW<~Q_t+2void{x^Ev@YENkGv3t9}sdR7u)J<6n zW5bpfKVG&>=TPkaQwu^8e(aH--0c!}^h@u@M8;hK1v~qf@uw)?InO2<b=vgtGSHxH z^sk#YE@b@vE_OyFE$3Cld-lcZQ4!ipR(G?N*zCW{Ik#KC_kYlq!!2sT7t>5j<b&jt z=fpSpJos~K9Y1$-?#J1EN%qsO|6lV;@8Y_hHjJF=n?(;?i2Yeod;LdXbHI=EHYKOh z;Cs6d<t86dnB^h2aN)ttnO!$`HETu`*f!2k=X|z>b5=Ts&yj#BECP!qQYWnt($I<) z>@k=mspV0$hM{%FFFyaP-dwA76D%(kc0FE{oyECI<m|;6;z}p0c5^Q2^1Z6Fw0y?1 zn!IN-0^=8N(2+eo=SMo%DUBExOC#44Nz-}_%-xE<v`oCWK>V=ZuRpS%L|;a4jJ$U3 zQ}>S_KDFUJAK8`}n>OyWTIf1UuJ3d2*+|x3&sG<o;&Yi&Ehjy38KW`doh{E=_8sNE zQ7Y;1Q+VU+?M888-B-^)LE7B-0JPWTs_(h;ObiSTSSt?j%=z3<@W_*`xx>H2Rf`<B zuY8=g)KP`8YwZoDJ)w!aWKuh~-Sk@GaLMlv<Ineesp%V)%somU7@eMNzF4ucB4Ph} z$O$E-OJ+VWSU%^J$7Pmf*&I8TO$z3n7v%G@BYOrXr?Z&%!XrM1UG4-~3i60PPY+nV zvz@)2y=*=Y`?{I6>$9IN^tX8-Y_#&{{k*34eOCoJYL;iG%njzYdMx;{Ug)^dre99! zFJ1R^ELn7GXR3|h_Epz%=5Enpo*F32*lz^cwJs;wE_Q^iKl?cJII0|>361ZCW<Avm zV`vM}cS*W#o^;^F*Ic(9dt}P%8-JSJ?(4T~X;b{D$8PtBW7iVU(IoxHHX3a4eDUZ) z?J~%&^~J_EHD=eezpR(>Uh28{qRpX25$j}mstaVxWU`Mfx#V7Kw)sJkOxfQHnF=Cd zA5Ljp*!1qLYxevp7mGZ@LlbU@YpYFrCAw#`k=*h75v}G<KeZ#Cr>-$s<yRsQ`t;|E zWuG*b?XH{ZxN+}`SWC6X#(|>72FHF2UvOnxo@%mpxzv&v-kdG#vX342s|Y@BbMgGM zHaGnpn-W%Lh&}E5nrQR4mpi+=r0Pxs=wy;3mj7;51TK<QvzXauwz{)=?xq%}-y%nN zZapun4U(`i-M`cS&Fr%e^Y_|#Y8bn#AK7v-<F#GkcDd#Qrg4si)9#BNU%Nqn3+G%z zKgYidHLq6qD>imGPdV3`QZ<qBahiTnapgnXZ>$#@y-xm+nR4Pn;N_S`u?5pEOYHUv z-0FOk$J%6%jen$!Z{(>jQeHVdf`^}Ew1pUc)0%W9#;{UltJaRhnxoHZl7DekGROHo ziaMRTX8I&Mm-Q=Vn}<fZZG1Ol&AjI!8S*t<zF~jbpDjNxdMRw_me@(pCZ+mp7R`MZ ztl%elT5swKAFfHQukADbl~4FBzT^Bty|NAOzAMGQaXS1gcJu4$N|EB-Z-0LiN7M+9 z*j$xtSKF=wO<kyCP5+QNZPaC0HZ4oUs~B$^XFgU-D>^*m_Tr>`p+;R+Pfsbk#c$a+ z7wP#ndmrTAr1N&3ZTjA*x9@kJ*Ai{m=hS=1;PBE0L9UQ930%#rEr%8eWh_`{dcBR4 z*?HxH!@{atWu#u5wp_LE$(F)8uBl!7_ix|-eA^?x+uPqSxVPcGpTPBnqR0PweRvrB z<7Tm*Dr5X?uRSvsFi+o`CsWgFdwgB!akcaJRFgr=M$WlvJ>OMS@Z;HqjRBTYY)wyJ zSe{)V?ecYpxaEWhn?#%E^KSl!99D9N?~lZ1PdCX1zF8Z69xip=?-{@I>Qg&`-dA2y zzWP<Y`3du%K2LQ>Qt~!k7r%x1hmhH$Y2^W{_ipHGT`28t$J@KscE$F?Y1eOC9R5|P zSr}OG)Y8g3du#LcDYD1Q5Bmw*xlNyE{KRYab!EGf2aCi_n@+426j}P|RNjQtt^YJ` zT|B9G%jMx3o*u50V^2fu8_TzKtG}q9_OLYbFXx)iv1@v!a_4R~nk#K?o5*SRMVr^F zwC(zC!<`bRHi3>NjA_smne%SZO!rNK@6(#O);_#l7z|ke{CVQii#+RPW@MeYd8ByW zceeYPkJe1^>&w2tbtp~yTi^Mt`Xw(Ig{y9MZQH!>zu{xeLl-qqD9X&;eYGwTbXwKM z9rLHfKKP*T-evYyvdhCha(%(Cf2X#}{<=2zR_n3(!6KZm9(@q?lNN4Wa!$xIrR(%k zk@gsc0>k94+nenV7%r9yJDnTlo?1QU>B1DY!#?M>D@Gfg7Ay7)QSa(*@i(gB-p;F; z$D^WiT4TP!ap_qi@!XbsHy`2Roc*w|ZGut5&s}GytvIpsf#v_!gku~@v-krdeMRh_ zx1INRaKtRF=$ebF>sj|h-(K`K?z`Q#Th=4lDC^nDe(Q)xd&iHqvo{JQrSfnXo}96W z$H<pw$-$OOJKvhhFJ@4j{xa&Gn&&ak{mbqY8fv8owOz{&`!Ce>PwVuy!%Jd>_swCx zE0NS9)x)xR-L^d|%zRTBs;o4c7T)tcxa&zmW$n(Z+%xsMPQH@*&5OuDPuN_Q+WE7q zXE8A_EX3NR0?&fag<gW=m-dN2+N$=*1n=1?TxSwy-`H{^V2#P!#Z9TvvdV^&-W>V+ z%WKB7M>9%-<Wvscw7s=?O_+Q8J?q<SCs-!7Xs*#nH&E~4SaU)o&s@ORl|`A$Npoe$ z49yvZjLK0QdOv*}kG=0WVR7}qQ_CA=1tk?FFL*C%aGsHAtu^jf5;-KW@J!#n*yHzW zS06Y1xOdaVWlCaSE*W;!Dcm=@Kc`h|`uuKIu}K>L`!;FrpZx9P$>YMO1E#tpChSnz zXWDTrP;QaQ_5}ttK0mJ|r{r_rEog2}n&RTvWbTsjccF$@$V8{LEFb6SvRSb#pSX1T z-7Wux&up%J>l)>ecgQ8tyz_zDyTuFZ-|Uj_NzQ$-(B^{ke@?bUA^v0knvMU|+RWWz zv+I-Y&N;i@6}qP%<JwbU(%^aT^IA#Kpwee0X^!S+e+RzXJ<DtP$5RZqE^$WR^gCaE zQ_Jz%?-M13Yc%6e)_;h7_sQ_D{`Zf)U%ziJ(*0Pskn`U1&j)?Ob|{?x`z>!(cF&#n z?>ukzyuWR1cI+)v$l3=<(|xz5FuzT67LT$wc<ijYXJwMyVg2W7J&rZ02fZc<h41@n zxA*T-@vy^RUY==96ya|>VZXZ|e#whSl`13A+^|T4$V-}ym$@GpTkQQZXN_5fPTl2@ zJ+E`wEix_rqzs;`U%$0A_3%X2-e@8AW2Wo;zdF`F%la*4>v2@Z_}6R(ww)8ZrYKmh zU=7>FKSebCmOGOe%bEVQ9dc(Litl0RWlW3F?ReoZ|H`vZoc(!hG5a@$R(i7(7_L>0 zmtx(-?0ewu9?rk}kFR|)eOLagyzA4ZHXgXzB({n7f75k|BVC$NlfrW^ozyO{YFxjp zQ15omqcyyad(ULLzg~M-r>^txw?`l5=*`c2<yzeMhY^vKpR>6tHOfDg)?{X2sKr_r zfTyvihTfli%S@nd|IFX=+unWQWq&tGZRg6jl65~07#HlYQ_q!e-P<4)tu%?_;r{n} z&n$K{`#oZhy!Ni{*S@P+wY8#u9{pxm>DYaWQ+;a_tCq>3M9$5+DyJ3(zF3gGc8i|| zdvR`p68GY@^Q=9-viYu3m3(K{@ZSA;`1SCE8uNRU>yF=L+^=4EuQhPq^146Imp>_f z@zs>EzPxT<>_YaxFP-K7&uy1mzjgY$b^kP`9f~M<=(Z{-e@%Vy@84^W2bfwhdR>vI zI{ZWN+^(M{pBE(9Jau|M^XB=$^c;>)D)PrKM&w+K5Lne>r<$~|*F}1Zw6Z|^w>WX% z>dOc15BPt++3)Fj%;s}mzRcnHlM3>!=5x>G%j_uT`J}Tbu^^@SorR=bOM5~^71OCG zvHR`w)}Hcv{)~6&vF@f6qn6`q<g1D^*HmwwP|RO-IY%Hpv3-F?|Mwh)^JU+aZr$$J zzZk~0e=hUlS3lIg-r9G}x<$)s`{fIt>!xn7f07=)=)nKN8X>2njrZeUO~_hz{-wu_ zpG84;^t8+MFW%A4<c;!st)38~(A;tSFz3H3p7xj5i~A(cxKq7hTSRy0i@#QL|9T7O z_kZ~p%kEZaB=hv)?*6&qnpTNU`s-ZgExnkm>fN%ve8F=QwznnEKg4Xg!`tM4_Uhif zCHyB2wa%YdQFOO?$wj-oIW97@AI4~{dFl5l&RRuaS%g=6Yqa#8yNhHmD6T1-Bo=na z;^f|rDuKIxyhjtu`EKW)I()Ki<-}DJR<HV4$+(uoc~(*^C$s9h30jSFCT_VJrQ7!* zQTc9=mOy~v?Bt%NuIuk?^%k7nkYv$S?#<%u`--#bx67QyZ{9kg*N)8C>=M+<I*I4X z;;dYaIaUg5!-~>ag0nBr{h=h5UVP!i-PQjZzt)~x!5#f)m)f`V&1o~|&hbtP<UYw8 zHX)rmY}Pq<-KYl_K0W!gFhF!c;t%5&D+}%{_^a7@`(^!-WqTCQUa(yyeE<F0+>L8m zgLG#+i1IYiJ@I8yUC=sL!_wYmLaM%VSM*iPnf5fj^U9lt_b$xL+48e!WzFNDUEbRm z&t2>GK9<J(`xehxf5VLLB|CHd7XP$Fo~HoitlEMOl>`O`hEfIw1|bFphJwVBlAP3% zV*TQR#N<@O)yyFY0SPzGoM&L+O}N9bOzMD+f<?iD1N93I)VKXlcx69>m8Hu*QbJPV zhh&L^m1CO428~*ampiN0AAP-f_kZ<_FH2L-osQV5_x$TVrn#S0cYfEtw)ejB;S&kG zNF&D}_x!6<ZF<JQ!0;aZrs$H?iV}o#t|UxIjQBGD;s5{t*$*@@ifa5zNlZydNV>pS z=#V8lV|xbtrf8+z-#+lR=I_xAk3PC3Of~%5v5#}~Ki$1&WBl&??)QA3>Q3{&<-GMH zgL(I)rOy{VpB*n&wXXZc9GOD3l<Qe{&tA2QT3s%+?$yuD51o4Ezq-AD`kB3<TG!;C z#9X>?<H{R#p_}&(p2>ZBBl~{->+{jZOU*oO9nJI;gZ`Yk^=hZ_mNd_E*Jj$?52)Sw zXpxBOzSKDF=`3uy*CN*Mu*l!I?ftct!PjQbmbFilnR~J5+Z?XzKfTY!%;C9)6eys( zqi>$p+nmJ2z+lJ5z#xJgNhQTdmq&Yp&ONZ(?(m=aVQ_WEXNIoC8OaCo?%aBD`t+1M zYb_(;?9IB)L9?FT@82Y>^Li7{iw#c~1Ux$4&mZ{Z<i`0Me(!$p<VVXA3z^AJ?jP4_ zY1#P3rq14XzT3U2t90u&KhL?lfIYmQU+3Quw|UmDMYn0)?`+C$F55DxbY0l98iPGD zReh_RPA_~W+P7!+55;*cZwenZ7SwE&t^6L8k$UBhlb8A~H|~Xomm=b#XK3@zj9PeZ z%96LY&HDsvrfu47!I6F}OHU`}@}e(Nhi(hxE&W<OSMEe*{$zp9i;sU8?}*>cYA-31 zprC3IAoe3TT<X6b@1GQjCAnAJbw6L2yZzSU9b$V7Pfv<wiF+P!LdJ3N?dJ-smmTRk zvt#Niw!os~3o#BcpCdaHL^*oT1)bfuU;|s&C9$l`gC-hJYII+_re6uWxMRyA&j;U6 zly3hcl6b>psYs2QcjomEN&)Oqq7luy0m>fCC8i#RyPPghJ@Yha<?R(`iqftfOG+(U z^DUjJZIN#AjD@GI)$hct?%FbG!tQ6coAzv2d~T)qIzH}_#GMnqFaLJ%)zS^#Ts5;p z*w4(_v3KR!(05{)yE5O&&tCUnW|*a5+w%1N;cm;*fA6_atT5wf@AeP>cXj{UxO?qO zzxi*k^8XVP`0Ht3VftWI?ta@Sp#@Vj5))mTo8+v{PBBy|teU*x;)46_{V!*z`YG8+ z%eyuBFD?>_zieWXdhb2IeuhHTLFQgJ165z9{o+C|49-7YZ`0hT{^-$aX`$kkXR|rW zf6h}`m$0xh*n{!>3SQf%u};5kha43>|911XgS*taL-ytIo8RwwkEoJ6*j$x9z0kbu z$H>4?!GtwUf@e7APKxzEWFXS^-tz~)`tIYo5=lLGC-sJIYw7pWdi8XZXr_#IruO9e z_b(qbNegc^w|$>^zS!>8!-gj{hW+i$icuyfFDP-J5<X#>uKepuOpa3iswnM!Z#w4l z9cq4=b@HWlzs>W{<z@G6LUsp9CocBew)NE+4H^Gq^PJzd>Mqp%uJkFb#Pd35{94-; zGV8Za+&*Dym|L!{$cu|>H%yRF?$wRvj$Ych(l29~%BkPh?ktD6?UoyAugz^SJz}4I zAm!guMw82--`MiL3VF!Ixh`OMo?`ehQvPJjS{qNn7WNs+&2z*y&v8!_IN&|;<DE!D z0hu$i?2_IuTiL9z=is-!GcpUOyt>?wnWEb<|AFiL^!ntx^CG=vUcI-RET8Rl`W5q< zrnOg|?LRQj-0rhkP|1gNrw{vu6^PvOxEjY?xcf~1lGkyY>%RRh{;_hE|K87^Ztp{C z5_Pk=Dh2OQ%=ThpV3@&zHT=PIY;&gs=3h1tXqa!F`TyY*^$QZ2+`>sqCSEd)X37=s z+J12H?3nP&N8aU>FRf?(ad6J$vZ$La4IYK>&s~3C^L)3=8+J}<zC+D_nI}D3;U8qs z6UoAvd^7ORN29&3s+N02{YmS;QPn6nC$1;r&&*QW^v~(rwC+DOUdMauo!1GcwPyl% z7vK3Pv&!kT<0r1&_bP3=jtlOVsGeXwZ%b^xM$y`ySy3J*7pX>d^avg+%1m5kl9JVG z72I@Xd%lby)3i;FGH$}jrss9%TwL@;YM$kb?~f`UnDaSY{Ojwc@=fno`~lmoT#lFi z2{)A;tV~TTc-bY)bIHKNN>TLCgSSGdeaoJe-+8w8w2w$eOxaGiZiQ8@ouaCz)&>ZD znj{_kzdvUA>=~BR4ICHz5={^da19jW^SzLE)6!vAbIl_Tks7VMX;CMnHyF3%%9#G_ z+Ijcml@l)~*w2!kvF3I4ubsVr8;+{0GTjebt=MHXu{z@D%dQuu8!oJhm^8b2?~d!Q z?j#;;HM2fxd+tMXh&Jc+XD6BBIX6Ffy7f|VF%$FBXEU{2_vM-0|7^{7(bSr8S%{_h zHpAm@K73%YTibh-t0mj`6vOr_d-pCd=c~7$IDcnDq^^VR#Y2nazKU*T{hA;@$->q@ zV*A~!gQd69J10AFWE33xD0#L`vpa0{=Sjy7a~t=TJL&Sym}I5$LAmHl<p28->!q)C zL_K+LdA#59ZQJF?Kkt;@nX>LleWU67(8Ifhb~H(!6*r!EST@V~?@s{_``N#CHd))Q zcHcP9Z~yYH(%d^Wy>&=wub0hLiSdfwGzTUIhF{pz9(Yn~>6Ca-+B-0R=9c#br-W@v zGP#AFKxt2B;x1E>`~!<$$3$ON>B~vKyYHBt;qxV-)-#SY*exla{`vjCA9~Bx9S^Nr z_VDFNP0vCTMa>;uptKjM|F359y}mu%p^<yG+kOjJ%r3q;TdY1=`TWg4TXnnplg@5+ zw7zvpD?IwLG|&0=dCpTaEJOAjnOH6vfBbXD*=KSb$5+2Ov3rt}_Tp(`L7QH1>AD>A zNUlsxTxpV$)om3#=?edQSy0-`lyS3M|I+0_xmJKq{dD`z$2Xr??}%URG=YbY-GeRt z^q~jGMCE)g8+f!O-g@?B6)W%Dy|vy;?=RezaGm4Q(;ZKk9CaI;HFg-DThS2SCG+Lr z<1?y;{LJ$e?mqThvtk{$<_{;aOLhnJ73T`y3l>h<YSlGU+vMuv)=AMD-|fj-`!1z# z!A8THK!p#j8)tEAhq_7@b2o)=2(4m{&b)phM2b7l@O_c{<-{V9RV!cai2CD@$UAj% z@C@EvtGqR)+O-tyw2QwizFIm_y7zaI)&4V`zvJRXCRNp3nW>&Hd0l(U%YBa?i`{$U z_GQ5eDbw=SeRZE@R_}giZ&2~vq?*&~f4J3dkMkjZOk0F(BTSY>E_=8{bH0Pn^68w? zyuWIH%<_wPv_ya@>TKno&TZ#KD);~Y)+2TSl;(m=*?b(C1%C)y{>u4OzUFgZsc-h* zqH{mr&v861S-g=ks&DC)XYq}??_-bep1PxT>a(v=Tnm<(TzQ+U@b~Sn=eOQ`S+jTP zyJg3;>N9$GzrX8`sBQW|gMnt#er7N+FzB#iE$zVbLvyD<Qrvy@x7Kq$v0QTd-_a<M zxuk^GdrKMj+}j5i&)%`p^t#@*%?5UC^Jf%KnkLr8^5mdp{JH(VpPzo&DL?t7g@vu9 zt0tGb#?Q$eEds)m=DEwKpR9QhtC@K-yxMP``I+X`yQ76_m6*@Jw9?)!_I|VI)wY|C zM^o2n72kUu|HZaF%GlfSlBsmX^^3VCyeIEoX+HCDiEM@Nyv)=qmz<iUbZ53+kjT@S zDmKl_d6m|(;G>1V->p?{@)t7dYcg0aZNsQ9^Sb)qrS~RP4$J4735v9rFFyZZUKMxU z9qS^YsSoUyHQE<1{czm#!STNgm(AXIpG-OC)BARJzqPP;X(MBLh||(9%2R|+D{xP9 zKKhocXkUy`Zzj`P+iN^FYBLNE#P0H*Ww^$5r(ld&`ij#gi`mX+he_>v&~!Wfxwx&_ zX~&Y2RmwM{eqJe3?LV?zFg5T(YeFu=Ed>kxi_0~|XD*1yh;+#IHZ|kS{b9~_o9pkS zV@+#c2#5bVuXxuZ)N_Vpn%+YXhws^1ElVE>KD#p|#3teDnSGACdMl(GcQX}hd6@-T z3R~Y+UvAa>tMuhAo7}~YY&Y%iCoEs5y*5k#OPc50_qosCv!1`0cHH{UuJbp)TV+3g z{(M>9(${Aj&C-u=xfR&IbG5L&5I0wV_l^k#9n<CX_0JvUc%-qj@8p8(Zx1;eDQ%q0 z^r3LZ@{8<q!j(VeegCR06RGcEdN^$wThHm6?^`l%C@!u~-kTY*{fF|8>T^fm&xt!M zdFhSdnkLoj&p@T&qK9WKS1-6wviXsu%|nI<3*In)yn5~Y)SGWF@0#pu-mX=@Zt7e4 zPe=>BK-cE()%|84!o<K3i#=sR=4nE5L1p2;GfV!q2irBeyzDknbCJ@FJS>!{zp#SY zuIl90tsZYql-+KPKW~{C8Es|qg8h3<-Jd(f&v(z6_k(lyJ}y6hzmr{uIV1m-o^kS! zI9>Je`R*@uZ(=nvKVJM65xkgPe7m{MzhlSdef}!GP0Rin_d4ENAEQn<t@X{fu#&C> zHO(DAaUH*xS|jZ5TxR`Mp}gi&-`?zr*{N5~IC;tGUUbUnF_`AfZM;-5IQz;>p)G$4 z-boxx*WBIJ?9rXnSGWH*W9zH@CzB=b`t57}y*2v7<cIk-Gatl6KDfVg%iq-|A0`J* z*wz)d)kgVwzQ6j6)v2*c1)P5lMw~6yp3*WiOq3(rA*3YgqVK(5y-d3wOcP_-9X8?e zUeW8k0kIq0qL%1NFE5b#QOk8vx7zE_E<M+C@-CV=%<N4vD{gdIaop=HDxLFD#`+DT zi;@_d4rg?MrMreyl{8n_wnZHJ7bA2M`h-mNkDmWFtCBk{^14@fzSH`?OC7xqiVLHr zg;_YZuDHW_w_sEM^6y7qrRGhSN}L_RerC?j+NmE_UfX?i*KLzmm)))|xqL8gzvZ#X z@0R{AU-dUg_WAAOZ}vQrd$mY}rSe@#m$Bl;8=fC6pPXLw_PK;?<3z@_uH4+pv&3gH zNG;)1DXf~g;bVb8!}^yks^_>4EPpxw*!+wGzL7j^>F+a+?NzwELntfrz?4M`Jh?b; zq))DYZ1sLe-ir3PbH(4(&u@6#S@G}i*3Ui}pZB-u-v8bAKJJ0kvsu@<Cm!b7`WoCC zzXD2yo457u3hN5FxaHhg^{+^iB~w7l4O1M`Ynd1rPGL`l;MtP7A!mzj83@>!8&|fk z^*`AtF~jrnvSY>;J2oz#u;Ym5?Zq3!FC=(}2rb;>Hh+h<w2*?y<!Q~4Yxn*A7G7QR z#P#KZ_ww?xlSRs^RVtee-a1WL=BfOrNZ!6=j<zPxKa<`PQ+M`tdHI(<MBgf0b8hae zO+RM%&b*Xi<*iq=^Ga{n?>%oLRtfPkAM|=-as8pM#hYc@o!N~}tNR?6{NUrMdz>xl zl13xjuBhVN8K8rLg?743_3%5+FFs9hkBQ&!h4LEn{001UuCD)cr8wJkf`9p3_RfR3 z@2zjdm$K+*?KM%6y|Meq_jkF9d+Od)2i{)3#Pnapf)fGp*Y@OA|7CgfbkBiFpAy=< z87<R_9B0WK^O|<R?Uu&0o2#2Y^l(Zj20T5|k~4#Gs{rp|?==r+USWG8v0_oo!?xq9 z@4u$2U#n>U?XYIb+Zq01UEL?kQZ_tE<Eptoi)Y%2v=1xJH*A>H^KJ3=l|nbS^_vzI zm;TIg?w!Lqt6TQEy7IKM33=7suSCiwRnL5wzDc}beW3gaJwCRA@J)*h*339KRi|rL z!UR#D$(%XO6IUj&_OICD>Jhl+o?MQA_??0@t@eW#>VwNqZF6}Tv#^fo-SM|-*Dj~c zd3WIoOSETh(OSOUd7O1cRUPW*I1ioeVmO~uy)NvjhuC_?3vc{R&2OmHTj8_bz}3f} zKYlX9RG0Z%q%X`~a@=+OHugY?c=ycZS91<s-!a`S?9;);p~gJ+7tJoZ-pko%y}0$! zkIqBxdg4+g2aCVl(PO;3<$He2`|NenQNi`+i~mhp9{QQ3EUvf3F#K0Nr}n<?S??Pk z3#oOTU2b#x%wsdfziVHopUye&X=?rT4~tQJ=&7&&{vl0GfbM~nkUgR1#Kgd0k3G3U z<|d}x&%b3LaQwdZNBcRSw%Bg@Ghx-bs16Z@Y^ALe47cBwi+#?p{$ScR=BNAbTXJgO zy_Tsh^swgn?<dvm=jTo~NHxD6_<V_Tn2`Sou6!Xe=Ti}NvugI7eb;s{Lc6{H-ITZH z5(g^GQcsGT@$6Z@yXf_&y%B}U7kSHrM61&Me>Z=2d=QvjA|n$2*kFg(vXeGxn=2U( zeV!uCW*#Jw`}L5co800HjyY?$^l7tm=PF#cHrY9C%bq<STsR_+t(%;&=TT5&+yR-l zZra-KQ#J3}y)jE%P+oq!>V(W$wfKYeuT)zy|EDq>J@EeI;t$u%)%KiQWFYGjxpwC> zzCFA7jz#NouUdX<N|5fswE{Y;n0nQV4Swu(dVL^s!nsR93+@DcsN?tE`BgGIcfutL z&p?h}|D?IxJFf(&UeKQJ{?D7?lZfiI^%)z}FNj>+VRK7Zx{dV~pLE{aLbeY<+l^ZN zZ9hK^P(1rMa_7f3FQGjzPw9vLw!L(VtKaL6=k`lem1l0{68f{?%R3M0S!y5qMc4oQ z7x2LU$?02mmcg9ig3o;?|No}2-t)xX${+tLqKbWQpHZK+w#6ZP>(A(G!RJ0#to}Il z;q}ZaNiVi5Vzv=Bix?LO`z$tUGZ$n4Gcst=a4H(ZGpY%#h2`3ZCH2Hozs_m6s( zS#%UNN3Yc8-Zq7`?d}Y-vYSu-M@;9<_9{QTzxZ7J^DolpI=b2GXNX<8ah)mq-tM+? z^+I;<!{*wW4d<3jjgn=4x%}<?{LS&tzs?PeSH3$@@7vbRdrj(*2GKzGttNA)wXSDk zV93Xw<}5*rQs+V|>b@=i3r?wDkf@!gHp4@CX>Nq}HQkVV4gKqiBhLg`-|##A?^vB- zdb+ctNah9pcQ<!dzpH##V^<}pf8&*sWmTa|*tByeyTT>C6AwnzO{(1$ch6_h%rL(C z9l~Yz6IeE{_MTRoIQhhUUajqG?{{}ecjs-IzUo4CwUN~PK4t!`uE!le>iRAE{KhDH z`I{`+#t#*zd>2g>af^<%in!Dn_(EZ8Sk&>U%|X&9zRLNoQ_Vepugaz4=A_t^lWQIY zHR>hyZo7EuRPUOlyW6MB{a#oh%5P<_Ak^%hnBuqoS^UBOhr}KoeIe=bgyo*4|D){q zRX>tu9_cQ0O5ONludC{XHk0K4AE$R8TqGJX;nud5OLx7k-@Jm$<UlAR8|x|AT&}fp zG9fkX4@~Z8?qz?ni0Q4CiQN1}wK=L63zW4qD||27UNZW?v9fbosltw?N!LwJYBwe{ zT&h|r;}WoU`npSNn|X!oz1DU~buSM|{OS9l==PNzOV1UmZ?#g0eDO9+`$j>xLROw` z0RPhb+><Lk0unSuoANvw+c&s$SwCP~Xt?X)_B(+GE7o@QE|-q@H}|~zs)<e6)f@io zP+l}wO~3ETJ*j&op^te>T}niL8A@8))$wZUU0U`sG)C(c!_?^sJBr=%qTG`>CVnxy z<#k=q!l$UWG+=75M(juDkW7XE$Ly2Z4Xg6k3eAhj5I8e$)0gB!3za(g#iX<pGM^rb zd?1#iz2ZjLY`LX*Cu<AjcsRs#b>?20bK&o@i?a?ZMbFc}kzyiq==sw*x_hQN_`E-8 z_1i%?|8<f@&G)utc3wrz)+?jEB2F_scJ%6FHv6x>=HiCKyOwN!^3!5@eUVhDMX=tx zKR>2iy78Ztry^bUUhk2=mya^e3i6J9$$aU4^4~`<t=@e8u%+dCn!(khwH7rsDfLME zcR-h!PT06N#GHwN;V#x*xgmJ3+T4)n{L2O+b!kEW4+qY3Ncy7Wo1xS>Wm{tBmAr)& z%yO~Mx0rfAPOyG`YW;Hy&#jEQOiHS@=Jn65#kZF~Q_r#Eu1>d|^eDq?l6^m@M}D*N z&qK4l+<Q8;bnR{xZ(Dz%`Q%yCZu`v#inskcme*aLba<<y^qZ8KtLIwE_vyLKYreJU zX}~94wtJy9vieG8n?E>M?775tFNSMvPgJDG$wl5<1SFMvpDt~kdTGK+*;hWELHhTt zTs}meN-MMoysfKWy#M|xhn>G<>xGV+U)Fyx&yCey(oR-Ea*i(d-{|li_TJ9+lC7DC zU%E1z6n#4;J-sP>ncfc92Maz%_a0+1Kj0m3dcDS*><!XacHD7pymqRHw>s4MsA;IL z>B;vuSfy@w?k;>Iwy?T*XVgVUt+majdgiIQ_VyFISFM`Rq@SwzR<7>hi>AJ3%6>5s zE4?;wP2&*F%6cXC`5TYwTFnUOh1bqoPB?ufbm^AXS<fnGU3FibotWLrZj~GJ?1*!< zdg~IQ*|Yj9Z?7!ztvpq5AWNjiB`~_?=PQXrOsuEauhh3?+%Ax5+!mdYbvM!3FW_qI zqTqj9Y68By-&Ju?zS!=X92I`cKI)04N@3O14G9(!2bPzd5>jt{aQSWYk@qi~W-7_^ z=-s~{`}vU1<K~d9jKL@7Sjhz@%=i7znQf7?aox*j|7<~h9;-Qq;@|VOhXu|4&ze)g z8@0!}(>fwME_VsTtE~$c+OjX1zpj4WS-<nMJhxw#TU~QsV)y<n@`%p(0ybBrYO()4 zmP`x`;n))zc&FIhkU&uFUAO*7y~Wea;HzvCR%J#ti6~?*5}l=ZIk$gZu}J@sb2-dU z^WTWSpL2n8i(SrX=OVlNwcqdlEUpp{JeF3z_?~P38k3omM9&6Ib2t`JIJGYB8GoU{ z#ZwPA?@nrGW1ey6eB`gGM;pJlW`~E%ADJcHt#{8m^wr+IQat%>jqR&076$A&X0gNf z`Aen5@7)Y7$Ak6w(m=KMDMvq0?VSX!y|r@}T&Ol_owlXs|2bu+BSmG?`_y)=+o|=i z_xP{KeZ7ay@rRh$m^nTBQTL1Y&t*NuQ*7%~CJFyZGwhmHCvq{?u4|K`t5&!DwiPV5 z#L8Zn*SAm6__A%~g{Bbey^hS<i?a<h0^VIHaa^=Itx>vVs>!v+6+5;rkl(+!K<v(} z$=%u&E*Tlj-dtCsl{)-l$`vj(ZfUq9cOdgYDks<X4@|YEUbc3IU1c=uI>%%Y5h?7O z<f$B2*tk#pltty-t#g0Bn02n*dgWE^UU}~AYp&O{ha~BHvmCxE+!V)HKV@pkB(=+` zH*zm$JZ{)^Y2m@3`GywS|2i$SBW{JO+dWpwoOLcv%hI&wzHU%iW#z5lhr(Ug8m=u8 z_dd3S-zt651(8iA`_D$$y!igm+b(tHb~k~E@5EoaPujNj)V~GwzOVS)S`W^>63xAB zk=bH{g$E}1{^!lUk$Cpyxj(k&&dOW-b!<0&mh|}O1<zOi8KUFd_pp0*RT=Gx^k!TV z=j~q4<uU*9pG6-R#frb3nw1}Eaqa2CQn`Ay{YaJe5;j+*X2vE#2_^=HBiNG~WR@Z1 zb|2_4uC%3p+XLr0Ec((E#xc>w>-L7uE8ZISSmk2Vy?8xkZszU&`&(9BcgqHDoyraA zeQ%AAKb{#A_k(k`-=Wjp-kTm}_)N3!1r=(M>i-HR-($Py5i0gRr~PgAmjsjf8-Eyc z+q9Qn-==e~)ATx9?uN;s>&lj0mXG1JaSvVeG~lBU^Lwj#N4q=Dipy~v55IX}w%5X` zf!f@fio2Y+CxT|ZA|o_;XWm+PZi>qHx6;Qs?7VNP@VT#AGj*ca-#l&x*Vl4+4$lhg z{xQAFj`=Y8-%G(y2Np)YxWD7{@5v@#COghB+cnQLgt`5HM6dQf9f37Wc|6n3i5&@l zAiLtJxyZGKTM+@;E4Jz^of>VUw}+)SX>o7!5y$3`soYLq-WDuVTJ_qAYu}XCE!7nc zKCLt6d;Xl=@@>YksKpDpoz8B3`{r6#-#XQ-b*#S63SH&b-s9MPk;7g0?Xfd6kE@vd zT-$MPX?>wr@tyk?tCltBF`kc~^H62s2~(jz8au1^*iZg!^S?DLdF8erOCp4yte)?9 z?s}iPe1tl)R5zO#?@G0mM^?lgpK#=5>7k~&_3ZO68G6qVZSwcs)^R^rex}m<ufNx? zn7YT{@{Xxl$p=J?mIw7_Bv0?1f9&h7r?Uc^|5=~Ens2kWd6}a4{n)*0mze$czVSk8 zOU-tn@(-b(t8`g&CPq1jE^jfB{q+3On?GwRUwqrxu65u1!Nc>V{D?vebnhkKvulE& z+R+VrN`lOnKvPou%KrwZgl(p5X%%%^;<`6wc1N63p?F2fWY27~jm>ZG)ivv<&0&jh znb=@sVf^^yOykFox8yZ-oK0`O=G(odz(P@bMtcs2V6vxm&Gx?czwbqOcB|h`d(LGm zp)aoU=ftmh-9N3P#nxYzz0Q{VUn6B%-?F=J?|!pk4_)+Bp|Z0!UrO)L)d{-ca!dI9 zZ|yS|Um521R4l10qf@Ny7)SEXEfchPJFOP^O;PxM)w`X8vHPZuOiyT}rn1f<;r4H) z)lxsE%P!bdcbRME;-^o9cPuYc?AR5)f2qNaw<!W^?picO+HfqAd+OC3|4k#<#I)di z?mrJfu@=TB&v?QZ&l^psXz}U}iYRmln0<am6m!{e-6b)H*czpqpDsJVvqIPPaK?=p z+$o`NO!ZrAt)I+2VKikzcId90E0+HI)$_RK*=;d@#Uk~cP1gERX=L3?MZMKb-clCZ zola`UdejL--<lHrz^HkS-^H6R{X}Li`{cy*|K#SCen%GunQA_swccXsE%W+iAH!BH zZrSR{9B$!r-SAFk(5b+e?aL0kWX@jgwBlHO{W3Yf1k**8AxHgX+=8S7qPJ{#*m1<c z-K%S+gUGSV9bb3P<*VsX*D1Qjz%=Qn)*fZm*-EcVs?U3zxu<ZkLLe*ufQZuJ1M)$O z&a3@z`}(M9>jLdh-z~Q9e^|0he9pw#X1tc-xBloSoPGV1^?lp~pY5~4ttTF8^qbJ~ zQDQ>e**{GeSACoO>)(~|Q}Qd{#IVn<KaO-_0O)2(p+nDZX)`e}yuzN)ppzruX4vuj z>R+v8o@Q1{>~%0zyyTH7Jq?u7%qvP{wi~JxrdVtL{U)QH`?A67z^4f^w~yQZuhn}Q zvr}>A`90@C+1DPJzv$^X=10yR9yQW6G4A}z=}O**_s@>rw0;Nk<flz6^G}}GSbX=4 z$WQBOflGHvzIB;-YVN+b{B6v~7jfljOxf~4`MF&Li}rk-a6W_6+GkJ9<X*O9nl!WE zxfPS7KWr7db>Y$hH?5AReXAq5WcKad>{8(AlGbSc)JH4p!qZ#-9~@r1DD>#n-rKp; z8PC6yd)NG|!tyWEx6HN&ZGTTQ#4x`Wu6}om?buw`dD47)R$RPOz+Sd1^2_Vo#?1<o z*UypUwN5nB_{k@7eX7n@4;Q_j2e-N+D)Yq4x2{jm*}tmjV8-J;|DSTa-h8@(QzEy| zCDLgVd#t+7a*5SN+)m9JTCOu4-T2a@g;rUb)GaWMe6FeT=Y(g`y;DmwyM$6ZqqS8H zIoS7#Z>cj{m9{MG&x%c7yVq9s+;kDE_-z)mJbOKV>bK$q{>9&3yq;|z=%-mF$l5(! zGw+Az<w&J@mYaN@yj*%z`RUPF7aEQo690HSVs%7L#MNMq<`;G<i|f|2_g|dSa_!TB zqhT?u?>F8qnfLA2`uN1dmT_x-OrBu6%v4-6?U4I%y_x@{vu|t?ix8+kFZu7-%dgSr zW^Bq&P|0bz^q)JYWN&6AKhy7w?%J80Z2mDfFWIv{dM;o;o71{)w#k;25~oY<`^f#v zw@0cESFyP&X*)e#p~}R-z=u6?LFYlvf)1x_ct7{0^_w3o?T=KPUm94<^OOp%US_Yh zg0-(}PbSMIktM#D_pp69u;$IS;05dl*ekc*`n#w8)4#Z|uFaQg>htF>O)^T>wAMbt z;-&bi`O)3fQd7UaxvG1XGH;AdW;!nZe9;e$W1d%*YG<95-a5%np?CW&vpi|Ow#A17 zg#vXav1mujsH-2XG@RejUCE^NNvC(R@!CDyd7c3qk43A@Xj#DQ>Aj&uE^E7My!F}J z*WD*_%v^CKbK>~`OZ`sYd9Js%KdYSfP5r=p-}ga@g;j>XSw6npHeu>v_1Z|@k2}t7 zJ{{5bX3MF~MN^7jG49X1pv5CwA;K^3W7B3D{i4-umI+(Hr9(^$Zx&vP@=PvM=v)$& zc)9w7^m6HK#c!Q%OSDX5n=(<6;oiDl?pu*R>`M1J_Mfd@*Kb&q7*Mcry-8mE7m3#i zos-Pu4xV89x!5S-{7a_P$<OT0wy)4(+tt6g^kS&+%=>prc2DbK+Ho{Jgk{#lC7I%r zpKtm7bh=RJ+gk~z!zNjLQ}4RswfmvU&iT<VrE}LG)IE576&qLoicDGASAGqCk6eA0 z-3iI#Ew5us4V*hA$wr3ffwQS_>Xf1r6*13`M$bEuFzeulr`&R<RMy+x%h=8-z@t8K zsj!*P(Kq)a)>mD#4FCV$vc0~5?eIL~sjs*NzWe?Du>XMGy2JCt)tT1qjak2?N%~7+ zl^pZW((wH`R`0)+mh<mgJ<%_A^Xn<){~P8bDo4;2iMyury)t8BU|5YkSwSZ;Zs%Pw z5U5>$rC#DGr^>0gB|(atCT_aBrSnSe;YVT>U#un{o3K^+_RZ9K<{t^iJh@zTuiID@ zf3{SgSIEbIXo{}>qQlM3n<iB_hVAf);L%L}8Tjd!)$W<B%cCs+Jn6f!?;wNUdcDX` zeP@~Er9<<A_X~-di`~sp4_#RPEyKum9-CZNb6@i#={c;=Po{3_x_MQL;o-+Avst}0 zd$#Q=nGkqHqeLKDd+p;>jw^YeRJE&JpLA!sx}2cXw2j>=R*w&5Zf;lI<t6@bML$zu zU)y<w;<~LB{Qq9Ya9lpwTr0vf|J33Sx8$8GCb}kC^=|S@WH<l%@cl_9@09{Om|m(* zk4ab_BJsp;RrLIeulY6Z7)Na9%X$*c@^V4$fy@nWqpsYE+Hy}j-~>}*xMv{m?wTEk zo&5c_{QWd}$BxV_%^y+MF1>vyI8nw*NFb)RY{>~vMd>D%@P`vFr9S_%<Qn&#E!X}o zP!n12qW#phHgm_r(%!Gv6RSZ(Dlby&*M9CbUR$u%aYyhC@n`q;Sbx0pqG{EkpITKq zzMI`=$^2V+=JmB>=C!5qr)1NgPpSR<`<{K}FY8^5?**-l7HrN){5WS>-?R2(MU0t~ z<}S}Mlk9((yDeemb|sFNdTS>c@6y|*cWm<G=OxKa8s<Bu?%JA=J*%NWB=}*6?mynw zOOEeaQvKt*#c}?EW0U35&mDEQuUl&Jt)9_3R=;YGbf@(W(>)76w&_Y~Z{5Z3vHszo zKZe!z@2#$t=dSCn6_=?CxQ|qPfi58wFnwD0pOJy#Ff+DkT*xhib0^=;yKEqG{Jr{D z*}fuHan;<Vh60{TOU_R7_{%ZX{K2I{Kk3a^^tSE3aGgPJ#^WVU&J8S2lq|RX|2OwM zkKUplUGd8Yk2b6^nK@ZhHyG4$H1xTD@9Fo#g0)i*pU*qt$IkPhYH!lZYBBaY{WW*@ zRVruY>FnAub=9S{vVH2)Cm&e+?S+NLzT*}<e8XR=CBF6r4f}RCFBNf%-dj51a$n#J zg^l3xx3y*gFT{Kos_MqaS1P&aq<5E89d5n+jK#ZT>$(Rs-RoA)b5E@2d17tz-1%9K z?SF=UFQ*BlKDK9m!Lw)C47c)q1{am)yWLFja^3LbWrx>-w;zS;e>pdIP3M)(<z0F^ z>vO`v%n7T!-HO^jOr3sB^3!i#m&0patM_?M+B9+7vfDB|W_LV`!cH?!c@gEpy6aEJ zp}Ak%4ozq~a!A4RD&L!pZ#wQNe|35*z~>h3{;+0&NYejbn)7?VH;ang`FZK~{Usq1 zZ?`O7*8F86=U)2-lS8(tpV{!?(IVpon_nEABx%~X%H!=U=V{NjOLiY$EV$?NbDhuE zM3iQ2^sRDEPMMu$Qunh-O;cg|4~?%En{rcH17}PyNcmi!y!Tb4_N?>!pU3<=B-vYi zuBV$l{^nYfZ}p9_G2yoF<C3_o5A$yo`OtAJX#0Gom&NPiO>URGUNrl5-ju^L*ZJLj z_Vf5(K19K^k<C@f|7*Im5$?tmc%oo!h<E-i2LU^Cq5p|bf~ys5mT2@Q=|~nNc{{}H zQh8e#d2GYlk5Ri{2mGr|&z<CS$s;#Zevk3y$NBpzca}aoo@2!sm99H!QGw4S``!o+ z!{kisUt2uhvETC$6|28tc6<7ZgD>)qEz-|<U>TjBy#43a8wI%+_{ug#tel(q{g-&{ zdB@y~MH)ZE*ze_<bU#zvJ-b>#CN7cvUI^FPo>Mw1DHmCzIC>`@`*g@@naPr@cB{}y zS5|wsbJ%&`P~pn^^q22xRq|iIWQMM5mMIR8KIHuoy%W6p!STJ1{XLk|eVOYYPWrA6 zn($XxS-E%h!e8g&?(6Y1E#yhv$hP`GNb1Tht#e+RItAuVU%|VA$0#zPdab3bcEIU; zjWvvCj5JjiKC5=mmir;glpCkM@$jZIOCNa8^xoYrE;2`0zroxtY}Fx$)C&yu3m-<v zFqz*s;R<lnZBl4aJv42-z>3l-{Syzd{<2+oJ}mrDnAF2gug5d2KCUb}?`rFpS17R} zzDq0c`j-3MY18cXFn$YY_N_d4eMSGN(ns!}HB6%ZtUu_!^Yx`@#re*TWq-AzzLiw| zv%2z?+eB!=v=>JYDf;U1D*1kuc%-qj_a<ciJ`FT~pDFtMB5&^Oli_#oJ+;)GBfdmR ze(5Tn88PcFyl;7OBk}S6!@IIJq`7=PU#J)Nu%w#z+=TA;dG<yt&+ccsw#Uw_;=53} z!|RZ|B@OPk47FYxD#*6~+F52{yVm-CN&Skj-?u7$?ElMxNMoRz^!Bm#$f`3jFnD6G z{2&tpQ{q9_NFKPa{nUC+#Vt9jNgh|P@lEhp$f{c(@np;G#ms&m*vi^`HR2b~uSj=@ z+@5;LOyxn%zTZFp9ei=9^F-3SUOhLB*1CpCn>jl91r<-G{wNf--*IiN$Sm8J-k0QN zux?+i%4sin-N?%Ndg@2Jvzbe0lu7Fu-CS|{<d>{0$&iyKtd8E#qP{;gius+gb(?~z z&BEC1gO|Ouc3u`(yiCZadA&&ZEG}N_NJk~<Fx5$qKmA&(*yNmK#J_j<qFjml&!yrd zZxw&Lweh#?f#kP}q9W<59~jSA9o;1Cd+ygFsWWAdETx0_(&eiCOuibF9^H4<XNgbg zgOxXJW`^jj4nDh-VJGuk;|oETnOtJ?B2!CZW~5Z5Z}DGQaV=ouBG$*7{~ikBwK<$r za97H1((mK`fk&P$Oi+yqEWS3=qHak@kmL7?GS7_}6{{6l&aO<8oWpZfzmKb^%H-qW zX^i@(qb}zjtXjPAzsI3@Q(}1zh%Rf7wUKT4kju>;l{mvWt={iN^Mu}pUaROUd18HY zOkc4v&HU!|f8w13bGB`|)@|qdl_^jCnE6YV7b-OZ^=+RUVvjE5RN#92yJN@Xj}mf^ z8(iEz9XRM2-(GHUX4Q#flgsl9=IQFMyfN`~RHN1g%f7dZ7y35UC;1+?&Cb;NetpjB z`xcKq&(FO0Wp(EHzVKJ|jj?^#ZQnC;^Zf3TE1Gvm@N{QvE$5Nz0ru(J-d*$j&RH5i z)pl~^ZO!)k$IB533v^puYr>umAtnZfT&xKTa$Oy0#tCxz;!l3{ed#I_SFMy%nAj$| zWY2~(x!e2YWI9coX68Em{BApW`qrr3d5@cSTF;+vZC`b+nOi@tyV78X#01e+<4t>9 zk2rNmdbeMEe*4L}@^z`H9}e<FhA(EmzFM_=pV9q|hUM91PmkxEp6d2^`=V2+tJ@!+ ze0pSKfVGK?);{O^J3FUcv`SgMm3ijT)jjWZT$U}F*4o&jw91Kj;Wa1eI7y8qO(EM> z1Zkew`zt~4U^3@ycSom}cRZf%WS3ttqk0d+%*$8bNZ(jrez5zvzuyFAvl(pn*6!V9 z?$4w@kHz!;)!lNLNspi3jXJsagrLQiJ<Q6D>5^HzY26K~?_SJci)2{ekZ;Cien%nW z&&>;M4^nSBYM%)+WBaghT2#pFe;L6~SDZSxiz~Zz)}@_-n>OhNd_4SV&G8NEyeEEq zzer?Rvv^dlmgAAP2Q>D%FRkP}6cqh|$1#YdC{Sd@3Zaa}v(A`=eE+FipE}3!%WK(M z%Y_G4PIpeqIxBoM{nPT-50=&jMJ&7UAiDBl=iTiM|E74beG${unKP-%gI8sZ<dMK4 zVdHumse`pf$s4yaeaMiyc2QkukKX5tKVI2p-s22vtyYxg-KBEL#(as(^t1msvyJQ$ zbTcRYlY9Qje9lF|^i!MV!{)UH{HkaCz0Zw(k9DJNj>!7$O3bTSE<Fo&_$B*uvq`l5 zTlRJH9m};ouj7}SKf@i7hCuhi9oL)q=?)VE!+)%^mXM3#=7yXG9YDB;{e-<vi5Fj| zyhDJ=MBW=4g;saSo6gu`d+E}xB&~^Bo+k~v{<-Yi;eE2~&6W0TRsl6S>FH^n^XC0< zHmiCuZ{D0B{TI9|p7%3dYgSCY-2LEl@{cPY^QLb3k)(ga%AG$?Jz1<KRrdT@Q=!>Q z%>xf@b-W$PDY<&;&Wx?=Z_R5yb)jg2&EdXs`JU#;e%~}X7e4=6eda<F!`yUrT1*zJ zM!k?!?s<CYkW=Q2Ridv}3Yq-*aZs`8ywf*<5@)XG)0EE1+{mtZXa0(H!J6J)p;zD3 zoAV#+%i{RAp)^PPY*X~yvcK->ZT|(z{wD7BKE(S^Bfu?VUG|f0(f3$CmaN>e!81+a zk<c>^rPIM@JY<hK<R$c75vbkD(7V&knK`d@k|~4Z=Q|>qrmTk?L>GDY#G0K7HfLXR zD7P!?a$wwQmr%XzsZtweO<%$5|6SQ7)xv+F$#jR-HS9@`dvB&K_gMR^bz{Ew^$lJ- zT3enkIeURY^#)6${&cD7cNR^axH3YArE-IpOV{qRd7bWIQz{Om)|=KX%b8m9Jbxw2 z&y2)<_YydEvbYvCOg>P<oBrcbhQOnrjmhpgx49PVI$*5-Gd0n*>d2nEj3>8l(h6Gn zSoE=zM~MwnWQwS8xWV&BP3{rz_bBIjtxs$*3p7lKRVyy@+q%6~ZF@zim|wuJt8a2D zr-#dkR8(&&lB<30{VO|g(&?}B{FgjlYjVJ}DMakmthcufOCN1}Zms`pWyif6@)^Hg zt~;A^-?6;@nb%Se7oj{iujCDr%QkPV6}OscpPb@&Y2~e!z5Tzw_KB1(colfKs&>~g zzLV+95^N9uPAH8!t5(Cwp7WwA_QT8CS*+z>SZ12!ZJRy)3s>dcmB)fs9BS}%?WtSr z-pFhA!+cFyuc_Ln`u^gt?0%a=AAebykszwmV)maq;^VCcwwy5sgFf3V{IxUMSM)af zlKaQ(!=26Nh3UtCl`#9I6&F5vw)=miv9(=nu1eW)+jBr$T6?kQ2Jm#i+7MsRMi^W0 zMwrWG9-j?G4jUYIxK!cWu<WeS_S=1%e6B~Oo}Tc;>gIZRRrTC$-!|}_KB%bq>E%by zM<)v{{HIO7c=97><i`}ZupK><InPW^x!P@iUnlSQ!JVsg@^bWVUXwWR^J}P3z4x)k z?yua@r~3CK+*%;JebK3q?5e{TZ)y|-s7A4gY8T4H90~teH7RC2^8>#1n;s`<?f?zs ziiunljhZ2$+><)BH6}A+rPx<5&LaCg<sAZQ-A|1Arp@3?o67flF8`Lu`s)lcFTcK7 zUSR*;$wFQ(WCF9^j;=$}*Q+Xab{zVt5mgc9E|>Y_QQg;!ww)^kB3QNlHr{E{ox!@s zVzsaGOjqXCtVTvn2Ce(4k^<{gkG<7=v%M{9b<j?xl~WuqEnK;D#XE(&hisGHo~bSM zTe-l{eQoRwEr(;=0oxpScPzBhTXSdLuC(icH`LeNeZGB~+E(wBl@ku-J?uXhGwIkd zi$BZXwKV!X+4-P%%LJu#UPIAskCQYEmG7nA3~6~CmD#GhAmwV=@!abU?EihHGzSTB zL`~T=y|U5RL;Cf#>`v*7o8JVLjyBnHOghi~{-@+>)}_0Zw&*6g{<fKLOK3;RF#+A+ z6>hsyAM|cqC1M|`b#Zg(7XHP`ACCA;{v{-I@Z{%BJ@ISucI28In!Rq~_G-o5O;e4( zU+<i&tvT_oX+?!u-O8Fh&H7Vp<1Q@!{6~MsdOc<4J+AXpjFw(^UEeBqkLTIPM@jQ~ z+M5|`V$V$4xmk%LGiuFae-nY8Gi-|=YMyOTh{{~zoc%&&$q9ou{u&$SpNVV#y6*6< zMV_C(Tcn>aV6*lMKKA}@@Tpd_|6DIBd#(0FH|pNW3=?l+zH6@>Qp({`Z~b@9r*rW? z8=s_y)UVpKmj9jG2c#2kK$n|s<B<?3Wny5shP`zFosa-;;HaAqT8|=}F=b0Dr{X1# zw^GwON_pp+Ke*_*u6Jf~`L^9gb!_`*6yI{4dxQBx`?ngq`tNtk%Wdttg3NYz^!N9j z^g0&2X;I{%V-t*~eV=sx`pvT%7MD*w<iDQGpUv|ir|#sW^*JIH@e#Y->NK+Rbaq_~ zTj7<Tn{Qwv%O<zV@wnqhHur;-MKg7d<?Q2F@TKBZZ_`YT-fdMc6_on}UnJzL-O#7a z?wzY}J=$caSP5hv)u?RZ5#u#1<su&sHUC`|=l1X&lScNA^(|*k*8JlAv)tBc3g5hH zuecA}D`jG<4HtFm^j%8yX^q}<dx6%)Z9AOnZ?;Z}@_MqG*GY5d){KP*g3LL3%{bW1 zr-=)dZwxXy6uDvcqF&Lgt;ZD<d8R*7-}|kmXIi_aN)&h1-fPElrxY|Tnxpn&>l4)` zy?x0qqr|s5tQCmqby@W6yOZ?!84Y~<=7~%<&F<t~`rI$$t54<JfICd#2KqX)s!i5E zc(XC@)AV!k@wriI?dx@?s)lV{Y?ilkrGv%^HRBywJEruVj=sSa?(Dg|Y5I0qt2@QY zR&Mi55<ebV9Js14NLz{HQkv&t7BB074$*CuyJY-DDuVu~FWt_y?(OE<xA)r3Clt5t zm2SK(8D8W1XT?F@t&3`&czoovwzQmL_1&T}+add+xU_$URpyC|rsWgVZdRUhYp#>u zml8a!O1rJ&THeH(C1*Endd1(qK67W2g}KMwI~U$~1SX2~X&R(lu0LG0`|z$MQ~y@a zxoltXt6BEkk?lRp@-%z?#vhn=eYWg8afz_D_1S?;zKyE6{ERQt*T<VgZh5{Z_C?w8 z!=3BoqMrZT{|2eZ1>GICebJsj$xI9kA=ryt$aF@?ebD;mx_e9h@-MeJc=!eX3<0Iy zDeDqDw`^UQ!YnuU$u5bQ-8cMp|CRo8bk5wc?Bf#}o+?_-fBSyl?{|9Y#}lJsV%^k_ ztEZ@bY+3U`OEbx%Tgl$nE-u}C@q-x8?(%P2cEl$#Jl~u-u}0Ia@$*-y-6HQ-w`De$ zZF#sUOuE=gVjeFu`&O6J4x3c_nz~bFoq3#O#=oGb;!<Cec3fual|xQ$pe4>Z(7Tls z!=<n6e6*$J`!z+Uh?JwLLcY<831M}IPqpnm$11XZ``N}bA9Fs5-g!J-U|I8F?=5W4 z&oBOPi&G#jEpP_k;xon8pAwv(f8XuCGb}q!*&u>5Owq*a$_mFylk=fgU%Dhs5^k+x zylvpU^3vR>g%j;{O>%k@L~B!ZPh?rh#wH$(EWfyMo_k`yQrUXuq>ovu6-T}FcI<6; z|8qxCt-QqKU&c-~r5+BBgI-H#s&=JjAJov|iodih_d~&LlU1Uo7g<+!%-Qp{K>MJl z;O5(Uo-IK?Tz;$#k+KaqE6#mI!*iC<TeiTUf?mDNe+8!eOb&`uSHBo{#opt?$yeJp ztvwd|?(WVzGk06ftKL@aB=_c*U338B_pSTx@f|pPh_mC^zKWkB$L4H$wd;kX!aDK! zyq^MAs((^t-s8GnN$zq>!0yX`d=z{)b#IXX?FE_R+jS*Uu*Kxd=O@f(w+fcl|M(@^ zTPE;S>Uzx9kXpyL^52rIZfL9hZ!5i)==-w$<9Cbn{SUve%buGNdO!BJ?hdp6+%GEk zzWk79k@p~MbLe61h{a|xCu<#k<$NtR+FknY^p&YuYhG2qzw^(t9%%y-=!&ibD{fa; zF)=WF$6j_qra_=<`RqV@-~1H<e<`sgEtxpUY>jBPwAK3Ne!rsFvoh8<-g*58m7PYr z6wO$kI2WbcfB!M>b8KJ#A<o%z-H*E;Pg(kL#+rg@n<UhFQs;ho{ItZB$1Te8&oir> z_+*B~N9Qb^f5YHI_TApqPj)9A?sYZ4!x{Q&?%OZy>dgm&Ltj{E#62{y@P7W%D6Kn{ zq4jxip2QiK#4T5|*@L4Dxnz%A<9fZLXu~x&qrJ|PGacXEHlHWxWS06o)8xJvXZIg& zF}`_~``$nOyy5mcM%g=ig`LwjNz}9bH_>aE{7?Ae7Dl-Vt`C>$dsf)>9y+O@^iynq zUZ7}(^sC1EHVy$@UK;N%G_Bnz5aV=Ew=(WP+v*^$QeLkU?T%Zg{q~w&rOXv@>*u5? zhd9^PY|*<o-#LN5v`ss@*jbc$_uA~-Ten{PYM4Ih`K^NGy}2)^iqCl5cAv|Mi<@ox zwCA4=+}=|cXt_44Q&jel?OSCl?&d8|msS+r4OuVRx#tGMdEL~g9|`pf4hOw>d$^>| zZGzAOZFkm^^L(mNQNgMaSxSG3`{bwG)7-J8|K4HOqf1L-?j6W6wPL-$rA@1u&C1~V z_q^^n&fQNxdCiut<|=-5q1);Di-l9NlkMjoJ2AoHdjwzSxzDySnY!2Y6%21PDTb*^ zt-i{<Deu|C$Yh7)i`_>#zv_LJ-}*yB?d6x8Lv4TK_}48<Hv1UHqImYHQLX>t^wgWu zd#XGyi@VG`7#*LzA!v$3Su#`E%^&x7#BGl$p7nD7bIYH-%dh8G3dP-NxV%B^*gyTm z$=5wkZx`CpoPBt9<Ibf`T=5sHoqpZ9s_!$ccfRT4dw&>rb?SXT`{?fZckGBB9OwqD zZSFmcGng0{V%Qk4Y~D5k&#kNtMQXDK7iH{gSSOJr?IE?E^MXm-t8KRfH_nWht(-b3 z$ozlZl($<vvw7|s$mdL2Bqy)gWoKP_{Nk5m_SUw_ni4%8Mavyc8VW^PpC7#b`(*R; z7|+BHH|MzT=Cvv?-QC-iKk<1)w6*E$HS)`SGEL&nxhfUc-g_JSMTUE;+hK<drd8)k z3#8AmU(9*ukn^$S;~dTYsaJ|J6P(0UFC1{lUdJoUHZ90eqc~*YlO=WgwsbsjoBTrU zLppcwD^Agd+j_bV4{wEXsqm#QexESkiM9NW?JZ}mh~gK!znj&5PkXfc@jQFY8FNJ< zY_s*l{M~juVQO@2k{03Ys$l0fv0TKk^GD;xiwjg|Op!bhoUQV{h;fBQQtOty8IDB@ zL#L%4$UH6A>#|Is#iZt>;l?k|_uXE0<LT>;M+uuxR-6&Dd7Q?cKO<`SaU~Z~@g5tM z#UHLu(@qLrQ?!xEvuBE4d7r_w+rHlpxf~2SS^9F*`O9o;)XUPZn3+X;rTDKb;aR&w z|I6KN4VFG1_r2O5-YR+c(UyxgMrsksIvww%&h85M{rO+<nzw2Ti&wfYIMy#J^{3uL z-mAX#**TE__q4xB>$(-R`+hAb@00m7<?>0h4O5M5r*bv(T;KLp>g+RXD+c}Pu1)N{ zd&_({;^cEUXR(Q<EWTO)SUozl(C1X?=6Lt@d*tLe&UEYie(&-2{I0s{$Q!escs4jK z3OA9sv|>ZgoeY-82}QPjd-9eu_fHNq**1w^k9U9Nht_Aa&rR}szsObj+(+kD|Cqd& zQt391+igF*eIof+_F8IZsrS-f7Uzyy&+*%SL~_%Q<$LdYulur}No<eZ)Czu?;t0)c zo|Qb?rtT1FZ}_tERr=|iuNyM%ZmMlJx+!|>RsScXyWCE&xhm;=%>84_#K2&Hz0`$n zG68SGtDg_v_36>GW$H19B@=I%f_8m|+-q=G-)WZCC!3QVyPr*d!udm%ofibE89qIj z^Zxw#@4Kyke^K$e`PItK)>2h7a*apVI^k^%Q#St5`B^dh?%8JVwK8_QjLUKi8&03) z^|sqw`JgoMt<=wbYj$pY@r-?;R_%uL%Qt`Od<fvR;_EWE;9oascFOLA*|`i$j|b<; z#dKfFSY6I%bV;I>PYhD-US=z*b(oy(c)MI&PEcvu#!{htuI^`yyn8;JtX&`H_Ar6L z%2a0NgdKO*>}&Y{OV{P)mz@EZnzlbHEP356xOTIJSGu8P#Gh*mwJv_!VVwWx=^^gd zJo>VNuc9=s$bI3<39oUzR2bSQ*DrPFYl46n&#h?-TonbkOgcVqb%EFyN5+li9QG$x zZr&phwBxbBea)I2PDbq)x4P!MSslpW+kWMQ_I#D4<~sWWPtFQUat;MGRe5G^+gy61 zEXZlG_LN#LFYArMsq#te=2=^BDRbP{-;#Gl>Q3<W3tvn#E`AYwU?ReyI$dbB;Vf<c zeUn4jSf6g3l5z0r9mlis1w0u$UTHkzXubG-#XJM9;`urExG#8b*>H5yFTb~oZ$>!I zN(tAT?XNEUW6IiyS4$<7q+aBHYD~L!D$A()^Q>cL9mUQ3PUT{2L`2;lHpw_|`(?gn zJM%T(*tY%0E&ns88_5<-+q36;=?%{0|Kc0YzfL-^TezZO@55YOuLYVLugqB9@J0Hy zxbF79cJJ4F)mI-{x~^|;QH^RH(t74oY_3Xm6|?+7$&D3z%M(2JGj~cZXqoBp`{9qQ z=X~n&T5RJH8m{ZoG|6;k#fb?ow@uG0YPf#HZCm3;|NX^G%%uUjk6nwl{r`FQ=X&d` z@VX;zhZmHEF4lO%tMSQQ@wMZTh)W#y=N~O!_kF>Vqw?DhmT7-^kZ6?lF#OurJ8{LC z-G7{SJ-M~uZC>k{E7weJ&Ar|CJb*QdZ<6?puX2YAE#7WCd8PTv$0cv8lqY7TUb*As zV;!}qb)Mm&2tD01Q`=l}1J%7QeEN4z@L;;3blbrvHy7Mnz^3?6_<q6u$hXX@x$pFy z66=kAu)Pb{JJ^3Kecuw_f_Bdb=jVw2GvNEPLios0t>aBxPs21`e!1^izj>RI{^pW7 z-@c0nMH=3heZkhksQOtpLRXCY%8Y|$okCiS_2({Xa;=Mh(ITzD{q#_0ODt36&w#bB zuZza6U88Zt-y~r=ho(747N1Pd1a2qUOY_7+(w<kY3(A|g#PVm<RR@mPrQu(;P3iPf zeIWP9ytD9^hs?(Z=RPu>yZ<uI`1bb;g$Fmk2?(w1eC*j~8MUY2$E#Pzo5TNITdyx3 z{_BHV=Ic<mX;*kp@qD#@P*o`AmOKB|WUu}c+e^>Q_P*78{8>)}lZJBDhPe5=X6~9K zRmTu0Vehu)cHY(p-ZlvnyO};@dM$tGF6A;geeJosyk{4Qt4NtUt>v8&lk&p6S|w-G z!TlTGX<wV6_UFCj_WFXTw_TT?zvPZ!Enax`Khx=5_rmw6H%3Qf?2GCWnKRpD{&I(^ zw||Sxc9#ZybGXW0JN50Uvw!37BlXA6vbid?Hr-7xV`5;)!k*l~(?Cl@Zs*-L;Hiyk z{Kx!oxmd)s(*Ze0WtjaQUuC;=&HHLzbx6*xYp*=!Eiw6gzkk!*xNVDWs5<0yE#l+n z_kH{Rr=fK;%kS#nDXtIa==|47QasYLwE4y5&?4Kfep9ymILrsy$f+*=T<6!JW%EAs zdhcFmm!f)|?QMy6%DQc72J>WmZP>TEop$_W>bLju3!A96H%TuYpM6*|w<=xf@~IVv zoSZ<t9LPq_)=Lvs>Ani#jFQ`5-0@&@i|!(YtEaTQYyKoYXE<f{Mq8n{%<w<gyX$%f z`;YhcU*MW!&ih9@e9wLlCi{6To~K`ja+?<ZEBn6bn2!kW4WWnAv`iLo1+31W5y>3p zxNKr{ORwN3Hj68@auYvtwUiu9`60FA%x@3(e90aAkG!?Luu3uZ)v?4KF4iLAwklG0 zA9LQ`uuj`+lhD)+ynmc-u?m{kEqCEt-MivbUu;-m@&b_+JI|duHZ|zO87<ujU79;v zXJyBQM$DXc-1wu5?tOu$dMCHJ{1oV1s}y@R%p!7!o59*9recMfy%U+WuicQnKUIHX z*~=GP)l-X{GOxP)is35UeDR4=#P24h>0!c#U3WY$9$k9w&evZ{gswc^$IdUX`$5^l zkH6V^Z7pgZ?ae=V@L}<R@3;9+_%mN}*R56D`I~Frd52<;TM>Wc6^s^aeR1%Rq%R*Y zlkZiTM;eyBH%n}!4n9vgmz2)>;Bx4O9=l6hW^2j&-rK*h@q5O!4}L3p8G}3LT;bC! zIPt8$^=sLc#JQJEKRvf_-~X`ZnC!Wp^zHAswOY*nbKSUBapz$y_pEc$XI}@U6tv&s zP?cxCwEFsa(}Qa-Z)1)XPt(eeO0VDl4{5p*bR$vM^?(c+CI$v^thF%YN}{<T-u;&i z1oo}J^55VTC!cEWMXt3TT3;vTDgEM@y8FOI-(_nRw{G6H`R=>(55$fA7G(+AGFVzX zp83)IzRjC+z5<(%*4)_na)L<jG8NYDj$VZ{owsiD%}+YN@SU>dN6zjyF^kwIU!CL{ zANj&^ZvBSikCMwC+*-iv@AT|d%C5f$-ySFqaNi=MVxRQluKVc>+oaW7*=HV}Z1zPA zluYNgwwOdMYMlr!7T-*13z-|R-0Q-(cg@Z%4XQbEyuoYNY&ybz&tl8`pSKU>>o_F- zH4_y&zWSwkLHyoUg?I6`-dP3DN+fb(ESoBgcpe>`5M=%%V&Rz!R}L_z@7a-YW;IW- z!BsPDi@@o>k2Tzxb5QGqNl|w|){+40jq6{qtaw{~W=*CIw+UMrt6g_)V*-E7p`P@x zm&Q65<U-yZ3ObPXvp1$lhubDdb*HFT+|ut6oV{#YZiO8SdU*PCYtqvjOzpEQI5KsL z9&J+&tz0RvG@!_rcgeR7@tl?BnOhCl7ynkd>Urqc1JS7Nn=H$;R?C#OO<|dOVh_`& z;O8^0F<lYT%`sW_E~r0)Wto8c$=WlA>ejQzPtxq3Ytqv2tW5T7hKcXQ?`-AoGpuZ1 zncH!ON*c7DF#O>D<i+Nf_KADnn@4!h`nmu3&cDpduRrRk{B~HhTz$*W_ye=T*B`7F zsA$^z?5ShQhn8Cb#c|A+)~}5>h`auK%RYgxvLBCY*<U~P&F}}(W!Ioff5e?n2edFT zFtlMU^&q$Yz&8zD`Ul!Hl)OZDmcRrzuj>v?Wt^Z<$kIE<4sC6IyXE!%=N2!wy=h8# zqG<X2$&b(F>wZ@Uy7~D(`n$Jw%B7U9ppsdWSd5&y4u5%_T4&1Fx3%ccE!j!AXPGVR z?3G`Z8}aSYU315)E=AOI+U}2TD}wUhJS-?N;j+2XWzE&K?uW&XIrEloZkcnQDM8ME zXJLWXjEiCVGEXuLyR1Fdh+YePny`>pr0THmLe^F9?^n8Xc=-8U`r))<=@Y-z8gF<S zwzux)2$(a+zrLY9N_0`q4f`gkiflpm>2^O}sPr$+5qYk=UR?LeiQBjL$J{(tu;75o zR<SLUq90`EEm#!ySYb-~nIG8;R<+!Eu~lR5|DacvQv<gD`O2h`EW<d5?V-)_NSW3O z=kL4RRaRzeO3dZfydx&};iKQ|F6{zQ_qf%^tY#EHxIV>l$+h$=_ilZBH+OT?x0sxz z(vf8x68l7p|5)E|%6<0M(Py^$2a}83=~B;Xs@{2g+f&x&{_SpNj?U?NQ<=;g>P;ql zawPO`voS>nt3+pON~>@AWxTW|)O+6{t4q@R**6?#XMZTZYnl9lClZQ9$J@5#D%>cF z2wt<`@tKEbBUYt4`*N0e)*dprd5QA~d-Y}C?VVdLB#Vgs+cf*%uH3zKSM|%2%a=dc z60)o2=d1U}s=K~U+!QT$zM%GiC~Jml&BT<Z;8y1*Ve?j<v-asJp!JH;cB(U{Cv_C~ zp1I_|gL91zdp>)9fh0>|;*Y2o$C{>Eum#RoknFMS{9&omi1Zti{`VDs;Yc@lQ=m5G z@0X)79H7SG)2)Yh3)L`tJHO`I+`0My*Z#0~3?Db2p1*$k_3mvVv6gDP?vxc@e0%Rc zqE8LFT}Myq)Nd0e28JT+sTMpBv^C^l-em^?+u)V|4L+^3ZBbdL)l#5i*}GDAYp>@v z);{U#AbpE_8+NaJng8MFnRT+Wrim~z$-kNT@x@;A&BoOg0xEAlDcRUqsA%`8rLayn z>{dwBd42T#y34aCmaAnq$NTo*U4OB8^Gnfg`wbJ*lmA{?v&y{k<Wx7~ESK05Zr|Jf zt$ZK3LR5;+H2&cU>;CnRB9AOH<}d0FpFOc$vq*JojFgAwqAU}EOx-OHw>B;fnQ)RV zRE>4#`uIo}j)+rwj|%d399(eU%E9NapY6=YFP|viIKERr<#4W5WP);}M9l3)&D|zE zLiRp$=ZW(j+g|wHe3jNshV_nmc8PfhJRXRiWJxs9+3=*iNySX{nx0Y&=N_iqlMPit z_ZMxeN=v+;e&pNN4vVPu+7mywu4viWuKvgDCHwE~vZt7?M~F+Mc)$5^t7NC!(cTGL z*-p9Me(4lZubu5$nq{DBF5AUwsA{(%=i<CT8}qEmvwIJ%y<(=n`PsI$clW%RR(JR8 zjpoH4PP1*5l#_kW{oDQc?+J5v%x$y#W%+)}|E4MDmaO=onJ!)1HmU2Rs8q>|i~n2Y z|5yL;y3qOlrG(@IovMu)KG81Sj<-!4Rs7Bin@RDpeXyIm;YgGsONr{4N87i2-KE8* zet7zpA8|7@mvr8_a3y5Xf{7g(8_%oNx0PN>ioJN^kKMVK{ua%CmuEbm|8|{T>!o_` z7bQP+@AV#F%M*>CuGDTFGV5BV_yoJy|2ebQ&fnRb&7ZH+T`m6R-A$w;&Oo==l*Q~_ z0_uR|V6SPRGc=GEq5gz=g+E(tOLmsH8lEwnU=o+RMqEF5_uIgUGon`Of<|ukZ`7Ad zWp!;YJFv}0L&Q~fp7TUGnI){dEzYyCGjIBIvuVv2rF3HriPe0c{jWbgYhr17>v6Mv z%5Gk@f~wM!pVsHhV!6NJTkhw$D|f8ET=vV%v?{llC*wbf;p(F23o5%WKhfELX1a0N zRv!lzo43nPwhCRd*!(SE(($Y>2E~4s=eM?R-54;FFE>>r_x@ZK7mvu3=RUvL{9Nu~ zsKYPK_~nORuzFeEISpDC`-AP_^?XI$W9Q#Z<USNQb?NnmJTEI}E<LKEe3Gv|Cy=|u z_JxX!U7JF=^#`^cQx<Gw7Eg$^$^I$3>jh)}&azY5PR#36HDtGNwp8bd#+!<qm}~45 zxS_@Gr__&sT6Q^7s#E$GcyW7sYI@|~7L78<7T~?x`=uiyrcO9;+ibSzRVMsAaT6|H zWm8!<RZVW+vFA&YBRt+t-S<}2qvYPK*c-<RHvj57^xk>9p3Di^y*q_ew!5ufl(dy? zALpc|H}=K<R`@P|cx!J&S(WI{(AstG^44peoHHLe^du(tnjbQG=h?I)<e}45=?l?Y zHr$+Zt4*rmR~Dmd+&s}7E4khW-a8XqHyC+jN=*C7{;K@?iHjGX@NTV{6e{+9>di~e z=3Yrwa{?bs(EZ2zI`_z~C62$U=R8igSX_8yW^tkTuA;STe#ak}cRldP?!YUzwol8? zsybc0rH|{6$b^62zIs1DT^Ij#@-_bZ1$j@_mA~6>fV|i3CY!5Lh4d5mNG1jbL+phb zc&26Ul>7d-9e9q<Z$I)s;VGwzLayYjWlJXp&6=3;=ftk&-2UrFGV@f*uil-i_y2EA zCimKej<x(N-&)Dn=iV=^*Y~(_HFd}S?fzjhy(hWWC5bs6iYSw*-|PFn?cUBwV)eI^ zubsQt{CRe^*#89Q^GE-jGW)uG&!bxlWc6Bgu3VD&&YsSEexcMB8I}Bk7qLgKe^f~_ z7v?WIKDq2gY-f!2VlQq@*DWsGke1yPFXv^`Rv4?E`1|9apkjjN?w-T>Va45>%|3+N z1sK-fWth2m_DBDM`R7^{Ugqz0<lB)T#<qRk*9S(t%_#zI@k&||-Fx09Fn^!yFS$E1 zbNS!9!KWUtXPxGxRG?9*{7Ni@bI&|Y-JGj4lpSV%-Whpi3Dbn<q8gp<2T~b%_q%Tp zHB-1Fkuj^NttRR*XHJN7@3kFs)KzQ>?p~5+JvUMAQqaku)oh=lCOqG?v$fSx;9JV& zQ=jV={hSl^EI5$+_95<EUF|6gmhCs#o}jgL1^0|aw-YtfxZkE6n)D@ybMvXxfTu~W z6FOSC#dKv^SA|Xv>Xl~t7b{)5|Ag++1Ly4ioS8ZMYp&ZCyQO)*C+FTcCnoPIC-d&e zS*fCeA5op=o8y}%?2B1^lvk%JY41FXD#eLBFLbIlWVo0&_?g7^fev(>xFK=>_2&04 zXQ-azQd}Ty+i8D!scGp&Yg^le)vsG;9%El9#^$5T#q*~_sMhSC`L&x}rM{c%t)IV< zTz);i(9LFldHYh4TYvO7T>e^jbhq%1mYL5!dp-HkaEn8Ad*hd_^X5x${=7MF<Lak< zAs5RIe!Y);_XOxRmXr{tZ|+PC3=^@Je5QICCAo8_pl&m{;<>;;<hZe4a+a}Ya#PfU z6{lXiBt)-UqH;F-!;v*_1a2vwVX(Wg`s%CO@^62AQSrEuBQ<Z{oJk_?!jqaJ&nSTp zHEN&zrR+)Us#}km-)@X;mWw&JKJw4ZUYq5g!?$VO?-ISv_BKQNbxf{rzJZN=6<_GW zrvab2+##FE&EhK*WY%v}&R1&<a}yN{y7WQ{a=csa!T>3wt*&!5Jx`mjhaT@%w`Epz z%)19On`_U{XRq7N_~h#Sbf-rZc0ZZkWlk4RX-;<c<jynaZk7)3Nto5<XvCvg*!(?v z4ePA#KAV!;?8<yeOP4qVu%1|@xpC2+9aBsAwq07MFx|Cr)|7<Q)&s9)d=9^4V4b*F zi|cZuOL)=_=Y?7(0U0(-t#e*!dVjWP*~_)V?Ur7l=gFrDqBHdTJI~!wuTKB#%{fIh z|IDr>rY2E&cg&xc#6Ouf-FvC#zf%s+U9UMQo4c&LepNOreaX9hi#D)V{jLhy_r>#r z`>E~yY1e<xta~jlzheF?)i{UEX4*Gq7z>^HbiVH1XI^_J`<N|DUNtPZb^4C#OR4Vb z3bCg}OT_y()IB?www7V7i@sRz%8e`RSNv3)aO7p^A<%5I-BRIc7Md*$YH5P|7cVqO zy;uM7Q_r(Q+{V4qE3dKnXcm7Gp1AP5+W%u!S2wPUt^GHv_@DH0`xh3;di!>M(^z8m zpF8KV)%%L=Lfbc7*%Rr>D1D`E-7mulcE5kIK6c%G?p9>Z@yqh7Yp!d3-@g!PYdPrB z6V8f*1r|&U3@X^mKr=|f16R3i>%$kkcleRTJnd;f%29#i4VNpnHZJ*SwDq>0=xooH zTay$uPkv&keIHoX^>xC#fcP6Ks<nSyJMC;gCY#M=S+2f3#r5F~oqDN_0!ha%g?)Ky zwNtW6+$-u&W^_*cLU!@Z+G4fo&gYNb%8nLm&H<e)c!zW5>baSv)qm$b4^WNbn>5|x zi{9eZ8FHI$-T|NURuw!Ee9oJbApAHj@1=^N)>l>vJ*l%Qcli)`NG<TdhBaJyg3B_l zYkj}%E1{A8djr3b`{s}Q1^#cF<jd#lFOk@>(d5JWSj9h{LO%-iJ+gZ9vl7l9eSJ}8 zx|7n3Xq^jMoLQVPO!{G7+`IK0J)W=TGTrWU^1B0fK(=CdLWn1~ZW!Adrp=KltmbUJ zmo54Kn0=gmU0E_QR8;9PcOb{^cJ-_~DvrMoPFfQ5PWSqusp}ryniVDe)I3Rb_R4y} z_YaP{)@-ese6#o1?>A@nT$%a3lw15**1VhC+gG<&@3M<of8Q^1`o7=a?oP~jpYi35 z=ax&0M8a}5{=URe*tb$<@v?(^#3J?oHlGPs-&uXEwnNG$>F!<+IUC2xj9Xpx#rj@s zyS#O2orJTD>U2ZtGHcl%(|RJ`tYN6hdQ|yk=C3OvmCx7wZ;ZOi9n>4W(2UJTvB>KD z1hs89fBcVl&ilHnj^Y2gm-dfKcJZbk*&Kac*n8pG?8dF@`gz~GJ>UzQ6`noupxD-h zel;9R&M&NcH)GEHYw7pr{P%eJ+p6M+@js-|Wzh8^eJ{Bci<uZ0xUr`+=wya(@nr*n zz2(dPCmvU~5K&L``dMH!*<=~t<SlB8#VoYGsa*@1*0khE%lwPq*f$3Saa?G0;ydRR zwYT<t<@I)U&tqzj?>#)I=$cvY5oqKYDQ|S_)8a3GpT1ZnJvZy=hi>bn*{W^@RfXp+ z^{<isxpzm=)|%juI}s&!-Btvde_L_a@|}y^D!1c~AEkC*jI5gH_xnwfl;gvXQ(n6X z2TJ6Ay>qamtjCGHHoLVn#&SkB^Uk~rPoge-y4va9($agw;;rGD>65HmICptX|8OMv z-W31I71ewpHupFe6%-i$VfiOMZ9>XhdxZ;%KbGv79#fS)>Env&DRbp+CVc$N720Ta zp#0Cn?;_3G-3y+ptUvNLth0EbKuc7y@}6aqVKus2ZpvM@lWI>jIFi9xymEH!2_NsB znI;>fr518+obp2|uRZFng~pC48#Y~dz{{Gr_2O!4|DJd6ZR;)>C|!)0{PPayTDgEg zZq=-hq6b4cvO>>asPGNhFXp$#^MR1>j+{=f&M+O3GiLTeZ|>UNdFx}X9++5I%f9=~ z{(zd}*Z(jk@f#`}aVm1=EAr;qa=7Wuo&8rsRye#|8#~3_hg;KQzv}yzD3+NmiEnLJ zAD^;l`>CgOGlL=yUFW@^vVt|LK<Z9y^VNk1b+$6zxT+)K{ChQP;k$*O1ROeE9Q?)n zD)p6X)^Ej>moIdZ@0P7*m3MQV_HzY0=h;^#wcd|2Qg2rMdnD<ba^*B{(EPya2u&}a zM|P^ma(?7T=x>jBZt}eUxaB|I<yY@L;;ATn+dGpx`M<cq2dkTpVmWgX5`SzGV!fae zS>^w`;mh{V`jS3}t@t0y@8kIBFn#uhoxd6Cm=XP4&=nr3i#}`oWn^Gz#a<6Xra(dh zL0c2*@|ON-7k<y_xop*HHV>5z2d1%1+x7O_i^kwJtk#?6F1fk>{>>#pOHHqasq|Ub zAAfHBS$6Mf1?BF_E4$w;oPLb6>Y$RUVM@!Czh7?0*2z}|Yw}bZ)fU|`;$L=j(vth0 zFK(LdH+=gn_-eq?nVkGFS3WKHz4+tR8=FIPjYU{;BVU}ol)9_SbK|E4n`#cV+-nN= z%Gzl*;c=JH8HY8d*W0+5vsW&d!oJMwq~V^O+j;~h%sF#8!>`|Gqf}C;>75Oy-iUDj z;bXpY!``&{-4c(whP^Qyj%HS$&6pB|PigGf>@IZXv&M;If$vuBEm)Jh``v|ZC)=Qd z^~MVp^xxVbwuR+#K=a?N(V8D*c|!~jI44H89Wz^+!rj3rddb9xS0Pa^cK?HeWvXsT z*Z-w(Em;-2Q962y+>Li?t54jU`#tY<vb=imtsgtzvws)8tG0fDvFmo;^<OOiaNi9M zuuiNveeaBB-u;H|=pR|E8!e|#p8j0GNcZpO6}PSQK8F{S9H`9juyIsfC>2n^nUZOD z+QUMM@1df<N7`Nvra6;Be@U`C=D&K_{+jVzllauGw>$4-UXYGkyei4(i|42M7<1X{ zLh5hsSFZc_NV3mr9_QLR#;mNfQ|t5>u6~_-y!`x4MmcN619G7!msWUo^k4pI>%F$* z@bhOE=b!lXLd<{vJbOfP0Ue$%>Mu~&&&0scjJ-?)Phs?i+y~8=)vdqs|KXJMh=!H7 zR<SN&$ZTd&P0rhHJL`!;n6UNcxk3Ma&lQfk$h+;6z`5tU-`D-vy?YNw(zY4>dir{v zU57M14=RDCFI4Zoc>VWHB6L_7RBujxD%)MRVd3+Vy1dhmyk`~XUf?TtO3O;$_4nY_ z1I4g<GjH+k4AD(bPc>h8=xO~$OzG;W6}_#JnOj`A7lMa{bEdSpybVzIy72MWWapNK zvo~y{&i<6!%BW{Nqo6x_DeJ5Q`TC7YzuU7sWb~KYAN)H@nWgam9P7Icn?2kP?#=cx znBUt}VG#Au%|k~sJwQ5RPUCA6ak1d&?3_oua}KYL&Q{?GiHS~Zoiu~->OzHD-WPXH zEd0BNb4G?@aG>bgv+@@v8MOGlZpuEf!D*(Vr1I2Yt(~@q+UIWAIpM&<f}1kQOIXdH zB^0vd_O>=F*Uwg#s5&D4;;;83z84FMmUc}tDvMndw3AUw@&&K=(vx!~oNhU-F)d&D zQ`BGn=eHF8TSfe#`<?4wNN&9HVEwF3_BTx*ZxWVvjGPi<!Bn*Ajl<FxwNJJ&i}ebh zv*+5#u(jE~abCe|jythIg}#69cU-kzC3#4BUdisqx0Y0%T>9n!Q?_P6dBW17&Rb<C zmg@wH+bCcB^hkr>zOXPZ<EO%eV@!D_dr$hkJf5(}DpNf5(7fHVAMLs~Z+8y!4B_kG zlZ9H7rOalDOP$g@a`BB>+TptO?Dx}y#jG<~7;`6umN=h2Bog`l@pJwy`ZkL|Bhu0a zttSjVI2(Pr`Q?7Z|BX9-X-BQU?<OsLwSg^PdCSK4{6E<?ocy=zXz|^~wa-HJf+`l- zT`Z7izI1<~@w&!$b4+G0k97MNk@|bu@wboug3kryVgLcNwVC=L8isipkZz-J4hsfP z*Ksj0F)%QkoRO)2SmMlIT?PgQ5EevN8kC=3VpUL_T2z)=WL2J@lU9_N>yVS5oS2i5 zUtD69YNelCRvcfHT999yS(0B=$py+s2(tyw?wA6)3<HG4G0cYR^76<paVbhH*N0u2 z0X9a2fr){G;dZ5?f#}W+SIe0g7@muvt^5J`#x<{`C^NNq>UG~fDMNv_hqZnOS((;p z-QHn&z$G$es&L7I#DE`}ylVxIpHEq2@b=S>$=UyPE_~;jT75Nt`Qz6GadLgXMRha3 zKCX)VBXjI%lh~Eq7IQnj8<vr^fB$BGP5s*6->}^Bew_dEx;?yW>vr`2O%1<(@a)%r zKZ<5Yef<2Dr_SxcPFud^uOHr8bDsTq#?QCEgI#|+ZT958u<^pZCCnFAUbwjAx~Z=8 zbFR5QyO?*aa6Y$$^Ti^*jh@^WTxCD0$u{V{3NXpMFsaLGijUNmC5!m1C$s6UTyZ$( z(gIb{(i^i)GCW;n`_y=&iUQjwdp1vtxgwZ;X@RPEX^XGamM4q)Dkih(?p&dKafze1 z<|_}Q%nL!Etft>Bh_~}k@45eUUsd@1glkW)TwlL?+w_NhIoDETmj5ftxu$<udqd>J z+nL|Ls|Ls`*|t?Ik6C{2X~?aW>{E)RZe_Aud0ukYPk4dh@>t_q>+hwr)D^OpF9<s! zEU-fKQ|!s@!2#M&b_eAwUl10sds!J*R%=ao+1o8qr|s``{MXzb%xL0&VBcIehtDiB zw_i$Kuwh(Yc8hVAy1;cmN8MAx9NU8fx<9czx~;jwwUVjxt;m%{HjNEYOUhWcR+wG8 zk-s{APu$+SY6bRttGa!EoT>fL&RTj?TbqshS5b(WgpS4;&zoBhHXVC3<?Suq#{WxJ zh`F$F@9NBQOxmzu_6ji(9<dVPt4$8(>%aT5aqp_!s^6R!m)qtyKiqo3?eK^TXIG!S z@Rd7@z2qMk_b%4Gk}t%*q%DZPU|sT7?CyaDX3p*#HeAh1{FgTKgXEthRS8%3eRY<2 zmOqg*{*Xa^qR$VJx+LKZRh!r4*~jsLjz(l;5@Eoe@i<{QkU@aqfFp<lOW*nd-XLv| z6b`CzYz;O>J!N2Ec*_7u;UL8f42ld4jq1qRCNa4rvn(}NFFi92-Gug4?ozKA7#Kcd zm|(|<l>Z?n6ks!<ZRe>iFgJ)o9KZl^Lo^eT3Ca06If(_u;45v=9bvDt;qDs-28J&T z3=G03Miet68If91keHW(%?&oks-t1P02LY#GeF@mfd$Ecw9KMn@Fh0r4)B>6;_wO@ z3ZTLap?@_ilKzbRT&(WTZTM_oBE`T^q=@eRBWy_8GgEW&)AP~Y-^S*uWT2vZ`jZX= zgQgz30hx-(2IQt27#Qlgd%7We0CXEj#20VodJYDL3NCa5di>B0FhVz=i_KMO>%`jo zE2J41Udf;vU=xmRfHArOy=<;ZPG7#B)R$&pxQ1bXXfe70Cg=wAgTkPV$@#k+14E|* zx(iDC&<!v}Hvn`JczuLN`5$=(hG!VDFn2Aw0cPk1OlEUc`Zr;B?`0JR25&WV7o0ka zZh$$u0ia`bWxOQQj1?FdR${o|+$VGcEYJ-AosrtA<Hg;t#K3S~8Qld&!i<Q!p)x_~ zz!Kd6&>56pmH9r;l4f8ql|?t;lPQ`3h6d;cEMRk0vIuuSwN!$EK~f6cfW3j}24JMb z#cZxhOCGd-@04O-u);_Ole5qbz(|RpgTe%o8J4?9GB7N{aDi_tx&as|aRn$Tx1>H_ zqQJoL2_qH`%|kZ;BPD_k`H}SaT`@(Bf#J6}dKgUKk8S`)N?gO{s`Riz=Jy#H28K{M zbOU0pp&Nja5<%y5Y`rnpuvL_Sfeph2k)P2Gz(|Rpa~ni&Z@bqZ$H1V7k(u~8nNSmw zAx26BZOXr6P%yJql7Zn1Ml2jqM>hZ?C4x3zPq=y|^QQy@!xIbx${f)QFv3WQpq;lj zk6kXRP-S5FkC7V}M4=mikrF|h75#Mo>X#@pFxaZ1$AV`Ax&as|aSxlTl3bBuceM-y z!$*wF^lmY_0T?OqAe*a_>-LAn><SDF3ougRtOMu<V5CIQK8qvA-~V_m%fJvQkM4y_ z56}(3NQt1u?~7(WkJ_Tjz)-J_Zos>L=mub<#1m|;N_($gWf7HNU?`VFH{h}gGipLI z!bpjy*j$zFl<)c<B+tO`7b7J~+M*kPkrL0cxhi>GKlg=0o`K;6h5>V8&<(&yiQolW zb*uF6iZL(*NuYb-YBibx#uzCPv__|G$@Fk#IR*w63>Q3}gl+&vN(3#JFn_mf=QUXd zhB+9~Xuc8M0F0Cfo(WG3QYw^SU{J!yOm^qd4Zui=H`rX2Ea%y+UMJ7MP=%2aA3R4l z03#)WW~4Z7#JcuNF)(mq6zluhSy0n~F-A(f%jT+dTTqMFOOAozCq@|5E1?^JkrF`z z#;ZQwdT~*ffx!X8fL{*i24JK_&|uz!$&H-rvDQp~;?NDiNQuwbT$RqoMdg1}Vql0@ zK~G3`D$xzVNQo_Mu1fcFmsBe-Gca)RLN0p*H8UB(&2{Fv$Oh!4q*j1tT98|LpyvK5 z=H+#uiy40~FfgDtQ-c?v=ug9FWrDQJY})%D)XM#Yp}lY+lJ=ZL?2Tkb1JOx07#J8H zVQBAKgrq$WdQl|0<CR$-h258AU^tD@wwbsXNqa#-Nn&0mdLtR+{2V5qg;y9D817=& zzi=<I0Y#~0=-NST><ht3A)lBS7|b{ju?GqKCHs)HBW`p=_5i4j-FJOC<2ObIhRH1G z1{^<#ZUA@%6tV%JHg?jh>DOK`F)(a~UI>kd{&$Db4FE50K{f!?#$LRjyW=Jk1A{2^ z8eW6}?8ng!054ZSHUQMdKL6;N12Z!NgFA)+f~U|808cU_8vtr!|I7{i^o)stp#sAI z*R$vbfF}!)4VcX4swBEwnO}yPf#E5J0WlZQ4FJypAsYZ{W4j3Lin`6jzz~IDz{<<$ z27t%skqrQ~v42D<rUo-JFmz!Uu=N_c0pJl^WCK8LY<*5agR4vo3_mfV(ef6W0fyj1 z-;oUfwXs9<dgN~~F)$Qk7+`-F-2m`m-pB@k+SuJkX6@e0#K7<X!vK#5=mub<L{J-h z8Q;X0*O(X>k}wR=d5mrVMoI*=v6JVy>^Q>2z`%wPh{n&*4Zui=pf<MNV!_`>nHU(f zFkGPV65Rldln6R9@q5#SbD&r_j$we@8*~FOQX;60ed=$k_F^UmhWo7O*;(a1x&as| z5!A+h)ED&kG}bWq@e$nsjFbp!W4CVUJr4@RR17bC`GRf$MoI*=u_YWfDXnB;VCcj! z;N^ET10bgzAtxkI8+*b2B|bIG3=Gm3W#Zvq=mub<L{J-ht+!v0IWq&pN{n<+@DJSp zjFbpEg+ceFfR8vc1H&f_FWg{cMYJnGrLqx5N(8mBgTE%Z{{;;+VYonn72N=gln82L zFLr#=0V<J%F%0nIKsNv*C4$=6hrX*ynKCmlRA2<+Y;JS|Fj69@js3>wcELR+1_mFD zFks|IHvl6gg4)<G5A2)*suvV7ydWTiZU9C~1hugZCY+xvz|6qVhGBq|D7pa{DG}7h zp3>bOyo-r}!5G5}(Gq9|Kz2wVr$kU2d;Y{fY@k?Jgy8}=X><cHQX;60{Vjrr?<^Ao zLm!3#ljYD2z(|RpHn#n)syDZo7#KP*yf9G_-2jY~2x?<TI`Qj&V`5<N#c;tK6?6kI zQX;60eIX-w^+P5GhP4<jIINCt07gm#t=^Hi>U-`y69a<-h6}E0p&Nja5<zWj+ts$~ zK<Pjo(*Rv`129q|sEysupIr?)AZQ_m7sL$F4Zui=phjM!{8MR7W(I~@3>Q2!MmGQ> zC4vk<zfc|2MuH4STbm;r0J~ltIU$1dqhElI(0>|Pe@QCjI&@_1pjIaORpB7*kXGgc z3nc52E)GXF0o2Syzt|aJLWwno2^c9E+ttJf6TaABn1GR#K@Cktv<qetCKT9Xn1GR% zK`l*Nv<pKKCOmS)FaaYmgPNLqbx|*NM3_+Hf?)ziYQ}acAHoDCcMKCSk~65WiGEKS z!i0^U7$#t(XHaW18SU09gbAuX7$#sOXi#$#{aPV}32gr8CSY%GqTd&TFd;t>!vu`N z727o+2or7vW0-)ECP6JuKD6r}5GJUEVVHoCCP7V3A+&S-5hnCTV3>fBCP8gZ^uyZ` zCcKKmFaaY?f*PIZ=X4`XaE!$;0V7R<TAk=8Fe6M@8INHCMw$dQJN>_=qa4YLFyU4r zh6xyH64dTQKX4Ucf?W!R2^eV-)bK<<SrcKx^fYu6u(v$X&s9X2a61FT1dKEZYI<g) zokfQ*;bk_42^eV-)b>O_0SsZn);tUoFw!Kb@riyo6T*a;LJSiy(j=($iGGp}!i0~- z7$#t(Nl^0>{d^OI33JOZOu$H!p!O&Fxe^Ey(kn4cz(|vz1}OSb0SFVWRb!ZdktRVc zQ1sp32oqfEFigNmlb|Lj`o3I*32z(FO~Bp;Mc<2wFu}SR!vu^p32KC*?~6m2@Ua!c z1dKEZYK5Zjc|w>F-hp8PMw-O7jRj%Cu`Ub~Fw!Kb9g4pD0AWI4FNO&iX%f^BMPEja zFyT}`h6xyH64VmyLt7q<Fu`OJh6xyH64Vq$U%QDg;pP+!6EM;ws40lPoDX3F$8-!6 zkkTafWgVdPR3H-=z{@&L&O|Z+v>pl43`DGfLSJ76(#pudz|he61zjs>wH3N{^d(dX z?E$mUYz~4isDc;*Szdx|0Tsj$1%`&k>F9<)ms16Jv$BCybux4^+)!d*aG1-=z`y_i D@sCm= diff --git a/JHotDraw/doc/samples.html b/JHotDraw/doc/samples.html deleted file mode 100644 index 80a260e0a..000000000 --- a/JHotDraw/doc/samples.html +++ /dev/null @@ -1,96 +0,0 @@ -<html> -<head> -<title>Samples</title> -</head> -<a name=top></a> -<h1>JHotDraw Samples</h1> - -As part of the JHotDraw framework we include a number of sample applications -and applets that -demonstrate various aspects of JHotDraw. -<ol> -<li><a href=#JavaDrawApp>JavaDrawApp</a></li> -<li><a href=#JavaDrawApplet>JavaDrawApplet</a></li> -<li><a href=#JavaDrawViewer>JavaDrawViewer</a></li> -<li><a href=#PertApp>PertApp/PertApplet</a></li> -<li><a href=#Nothing>Nothing</a></li> -<li><a href=#Net>Net</a></li> -</ol> -<b>Note:</b>To run the sample applets inside a browser requires a -browser with JDK1.1 support. -<hr> -<ol> -<li><h3><a name=JavaDrawApp>JavaDrawApp</a></h3></li> -<p> -This sample illustrates various standard tools and figures provided with JHotDraw. -For a description of its features refer to the <a href="../CH/ifa/draw/samples/javadraw/JavaDrawAppletHelp.html">help document</a>. -<p> -It uses a custom drawing subclass BouncingDrawing to implement a bouncing figures -feature. The animation support is attached to a figure with a AnimationDecorator. -<p> -Support for attaching URLs to figures is implemented by URLTool. -<p> -You can start the application with: -<pre>java CH.ifa.draw.samples.javadraw.JavaDrawApp</pre> -The <i>drawings</i> directory includes some sample drawings. They can be -loaded with the open command from the file menu. <b>Note</b> your CLASSPATH -has to include the absolute path to the JHotDraw directory otherwise you will -run into class loading problems. -<p> -<li><h3><a name=JavaDrawApplet>JavaDrawApplet</a></h3></li> -<p> -The <a href="../JavaDrawApplet.html">JavaDrawApplet</a> is the applet version of JavaDrawApp. -Since it is an applet the drawing can't be saved. -A sample drawing can be loaded from the load choices item. -<p> -<li><h3><a name=JavaDrawViewer>JavaDrawViewer</a></h3></li> -<p> -The <a href="../JavaDrawViewer.html">JavaDrawViewer</a> enables to view a JavaDraw drawing. If a figure has -an attached URL you can follow it by selecting it with the mouse. -<p> -The sample illustrates how to create a minimal presentation without a tool palette and -other user interface adornments. -<p> -<li><h3><a name=PertApp>PertApp/PertApplet</a></h3></li> -<p> -PertApp is simple drawing editor to support the PERT project management -technique. With PertApp you can create tasks and define their dependencies. -PertApp takes care of tracking the end time of each task. -<p> -For a description of its features refer to the <a href="../CH/ifa/draw/samples/pert/PertAppletHelp.html">help document</a>. -<p> -This sample illustrates how to create more complex figures and how to use -connections. Connections can be created either with a ConnectionTool or -ConnectionHandles. -<p> -You can start the application with: -<pre>java CH.ifa.draw.samples.pert.PertApplication</pre> -<li><h3><a name=PertApplet>PertApplet</a></h3></li> -The <i>drawings</i> directory includes some sample drawings. They can be -loaded with the open command from the file menu. <b>Note</b> your CLASSPATH -has to include the absolute path to the JHotDraw directory otherwise you will -run into class loading problems. -<p> -<a href="../PertApplet.html">PertApplet</a> is the applet version of PertApp. -<p> -<li><h3><a name=Nothing>Nothing</a></h3></li> -<p> -This is the <i>hello world</i> sample of JHotDraw. It can be used -as the starting point for developing your own applications. -The samples uses some standard tools to create a simple drawing editor. -It is only about one page of <a href="../CH/ifa/draw/samples/nothing/NothingApp.java">code</a>. -<p> -<li><h3><a name=Net>NetApp</a></h3></li> -<p> -A simple network editor. It enables the creation of nodes. When selected -a node display a set of handles that can be used to connect it with other nodes. -Nodes are connected at specific semantic locations. The potential locations -are highlighted once the mouse moves inside a node. -This sample illustrates the use of LocatorConnectors. -<p> -You can start the application with: -<pre>java CH.ifa.draw.samples.net.NetApp</pre> -A sample net can be found in the <i>drawings</i> directory. - -</body> -</html> diff --git a/JHotDraw/drawings/demo.draw b/JHotDraw/drawings/demo.draw deleted file mode 100644 index f7c5b2a38..000000000 --- a/JHotDraw/drawings/demo.draw +++ /dev/null @@ -1,82 +0,0 @@ - - CH.ifa.draw.samples.javadraw.BouncingDrawing 19 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.ImageFigure "attributes" "attributes" 1 "URL" "String" "http://www.javasoft.com" 220 160 100 116 "/CH/ifa/draw/samples/javadraw/sampleimages/joe.surf.yellow.small.gif" 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.EllipseFigure "no_attributes" 121 16 75 36 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.RoundRectangleFigure "no_attributes" 122 125 73 37 8 8 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.RoundRectangleFigure "attributes" "attributes" 1 "URL" "String" "" 266 73 77 37 36 20 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 2 "TextColor" "Color" 255 255 255 "FillColor" "Color" 255 199 158 143 135 "Text" "Helvetica" 1 14 0 REF 6 - CH.ifa.draw.standard.OffsetLocator 0 0 - CH.ifa.draw.standard.RelativeLocator 0.5 0.5 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.ElbowConnection 4 195 129 230 129 230 99 266 99 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.figures.ShortestDistanceConnector REF 6 - CH.ifa.draw.figures.ShortestDistanceConnector REF 8 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.EllipseFigure "attributes" "attributes" 1 "FillColor" "Color" 35 142 104 272 18 64 32 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.LineConnection 2 195 34 273 34 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.figures.ChopEllipseConnector REF 4 - CH.ifa.draw.figures.ChopEllipseConnector REF 20 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.BorderDecorator - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 275 159 "Images" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.BorderDecorator - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 2 "URL" "String" "" "FillColor" "Color" 255 199 158 191 60 "Connections" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.BorderDecorator - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 108 214 "Connected Text" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.BorderDecorator - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 222 287 "URL Attachments" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.BorderDecorator - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 27 111 "Groups" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.EllipseFigure "attributes" "attributes" 1 "FillColor" "Color" 35 142 104 14 203 70 46 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.LineConnection 2 122 157 72 210 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.figures.ShortestDistanceConnector REF 6 - CH.ifa.draw.figures.ChopEllipseConnector REF 48 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 192 192 192 67 176 "Annotation" "Helvetica" 1 12 0 REF 50 - CH.ifa.draw.standard.OffsetLocator 0 0 - CH.ifa.draw.standard.RelativeLocator 0.5 0.5 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.GroupFigure 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 255 255 255 24 25 47 44 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 0 34 35 47 44 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 255 255 255 44 45 47 44 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 0 54 55 47 44 4 4 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.contrib.PolygonFigure "no_attributes" 6 68 283 105 254 111 309 151 261 163 282 160 290 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.LineConnection 2 71 244 97 259 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.figures.ChopEllipseConnector REF 48 - CH.ifa.draw.contrib.ChopPolygonConnector REF 70 4 4 \ No newline at end of file diff --git a/JHotDraw/drawings/demo.ser b/JHotDraw/drawings/demo.ser deleted file mode 100644 index f405068ff8ee0f201d2afc67493b6ce18b8e9aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9048 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 diff --git a/JHotDraw/drawings/net.draw b/JHotDraw/drawings/net.draw deleted file mode 100644 index 166d80dc2..000000000 --- a/JHotDraw/drawings/net.draw +++ /dev/null @@ -1,65 +0,0 @@ - - CH.ifa.draw.standard.StandardDrawing 13 - CH.ifa.draw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 135 46 "one" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 62 102 "two" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 211 102 "three" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 134 153 "four" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 135 219 "five" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.LineConnection 2 145 67 72 96 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.LocatorConnector REF 1 - CH.ifa.draw.standard.RelativeLocator 0.5 1.0 - CH.ifa.draw.standard.LocatorConnector REF 2 - CH.ifa.draw.standard.RelativeLocator 0.5 0.0 - CH.ifa.draw.figures.LineConnection 2 145 67 226 96 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 REF 9 - CH.ifa.draw.standard.LocatorConnector REF 3 - CH.ifa.draw.standard.RelativeLocator 0.5 0.0 - CH.ifa.draw.figures.LineConnection 2 89 109 205 109 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.LocatorConnector REF 2 - CH.ifa.draw.standard.RelativeLocator 1.0 0.5 - CH.ifa.draw.standard.LocatorConnector REF 3 - CH.ifa.draw.standard.RelativeLocator 0.0 0.5 - CH.ifa.draw.figures.LineConnection 2 72 123 128 160 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.LocatorConnector REF 2 - CH.ifa.draw.standard.RelativeLocator 0.5 1.0 - CH.ifa.draw.standard.LocatorConnector REF 4 - CH.ifa.draw.standard.RelativeLocator 0.0 0.5 - CH.ifa.draw.figures.LineConnection 2 226 123 163 160 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.LocatorConnector REF 3 - CH.ifa.draw.standard.RelativeLocator 0.5 1.0 - CH.ifa.draw.standard.LocatorConnector REF 4 - CH.ifa.draw.standard.RelativeLocator 1.0 0.5 - CH.ifa.draw.figures.LineConnection 2 226 123 161 226 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 REF 35 - CH.ifa.draw.standard.LocatorConnector REF 5 - CH.ifa.draw.standard.RelativeLocator 1.0 0.5 - CH.ifa.draw.figures.LineConnection 2 72 123 129 226 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 REF 28 - CH.ifa.draw.standard.LocatorConnector REF 5 - CH.ifa.draw.standard.RelativeLocator 0.0 0.5 - CH.ifa.draw.figures.LineConnection 4 247 109 280 109 280 53 162 53 - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.LocatorConnector REF 3 - CH.ifa.draw.standard.RelativeLocator 1.0 0.5 - CH.ifa.draw.standard.LocatorConnector REF 1 - CH.ifa.draw.standard.RelativeLocator 1.0 0.5 \ No newline at end of file diff --git a/JHotDraw/drawings/net.ser b/JHotDraw/drawings/net.ser deleted file mode 100644 index 0ffdc1a5ad444fa1bb2ec339dc674ddbf26bfb8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6331 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 diff --git a/JHotDraw/drawings/nothing.draw b/JHotDraw/drawings/nothing.draw deleted file mode 100644 index 38fbe4961..000000000 --- a/JHotDraw/drawings/nothing.draw +++ /dev/null @@ -1,10 +0,0 @@ - - CH.ifa.draw.samples.javadraw.BouncingDrawing 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 255 255 255 80 77 196 89 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 255 75 72 196 89 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 2 "TextColor" "Color" 255 255 255 "FillColor" "Color" 255 199 158 119 92 "Nothing" "Helvetica" 0 36 0 NULL NULL 4 4 - CH.ifa.draw.samples.javadraw.AnimationDecorator - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 117 90 "Nothing" "Helvetica" 0 36 0 NULL NULL 4 4 \ No newline at end of file diff --git a/JHotDraw/drawings/nothing.ser b/JHotDraw/drawings/nothing.ser deleted file mode 100644 index 4a45ec5b7c9d9488e1d30a282bd975ba2479d4ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3067 zcmZ4UmVvdnh(X8MLoYKeQ7@$^v0Se>F}ENmwOB7Ju`CfR;FMpQmz<fG?oyOko|%{4 zDOclUvLX8s69c0sgGv&rWN>OxW@1ieRceY$Vo73HYEf}!eqKcpg9?fbC5d?{iA5=T z!B7U&<lB#ZdEcufIe|@<0ok3Imrk0A&iT0o`Nf$fscxC+rA4V}=Xrc~)OuwxF)(>D zs3fCGVl~-^fg=r~x448s$OjY%`lThAIr?F#$tC$k))hqz%2@s4m{eR+l$cxs(ft2r zuBgj2e>t#MloL_pu-aQuz`(%32*Slh3<4l)^+49@L9D$wy*9eRdOaf(1G6WCU~*zX zVsd6lrDtApQEF~#UWq3IPihXB<(yxdR}#&@4dsF&p@cy=8sd+f#JqHU|D>$c<PvMJ zeGCi?3@oKZFa>%b1$s~g6V64<7bw=uVPaqat7R!JV$etNIeI#A%*)J8EXmBzb4g9k zFG?)QFUswYyK|NAeJt47>WLWgSVO{-fh#Q{EHx(|>_rByv`82SXF7sg2nqa}v(x{b zQ{u{i#Ci(MH4sUxcKR@IrGb-9UTR)R34@%Evxk0WTB1HE4eF;ACFZ7<=NDz`Lrk!) zC}gN(U;)Jy2p6NJh%|7@E7l82O)g2yOV5EOMWzYP`!7p}y@oid2vrh?qqx&tGK&jx z5-XkZD@qtdAhDQOUZM{-8zVi!Y<DavDauSLg=GX-dSnJ?ghW(HoVLRaDK249Lk$y% zC!ryNP=^^dC^;YII!Hhwv@OUxQ0-mV{RA91st{EOSsd<TN%KuCC}9wV1Pds)=zAm< zXOtu+<)lK=H)C-TgD@g5!DWSa^Q$U)J=wv`z~sijm6M;C;+6=?-JT4bB^gDj#TofI zDHR3w4xs$Oz){Y@z`(!_is}*uPPfdQ9OwL;{G#F_20pOSiRC4FU=hZp;>`m6#-&UQ zY;Fu}X^A-n8Ht_@tYwKgrKvs)Ov%M14AKy{f}$`PWQaakV{k!Ya;kMS17})MdJ<T9 z2?JBKTQmb(8kh%4ZZbX$TqPN)&iQ#IsTCz94B`lr0unRxN}v)De>435|NnnMK|w)9 z1<2XOMGQi4r^1uY;SE`=Qm3*?m>5_*8Q3yXGt)ClJQ-NaGgC@3JQ)}(JQ)}(!8t#Y zfq~%&0|P?<0|SFE$UIP~0m8)~hk*kIBnsy7gIFL8=83>r;sgQ{WRespxc@USAiEqS zF3-Tg0CR&k0|SEx$W)O1APlw#;f5jxIpi`5l9Gz`LQ*TB1+)Ft8;d-CZu`T;z!Am3 zo#t5_l$x00pO;hV$-t53UzC}inHPazMtU;HgTfn<UU8&D)-<<#P^rO>h!T*1HK;1_ z$xj9qge43rDA}hNTJh=or==CAmOxcm`!MjQ`6m^p7L}!@K&%A$pVx<hH4Wqgc!dNi zr}cwNiZb)kAsJ2(8YGP1;J_E`OeGAQAhW;;53Cvz?9c>*lEOijLuHT8gC{43as~#5 z7?6d<MGU;~bOrMA(S@eZ&fE(tW@cdXWROhD&nv+iWNr+c1^JnICBd0hsh$ih#bAoH zxTG>C)rUbOEhx3HG_|-SH3d-ufLtQ#!@!c4n41b>>wps`qmuwA$uOvZNU&eT?bFiI zK*<7}XIU8-7?_KT7^LBj1UU(u7~n={SIq6<eZlJns^*Fq^ua1YF|G$!k>Z?@2&&jq zi#$tG!PS}yT&_{BMD47*cnlK*BdY64Km|Z<W=>@Z1E)u7PFZS6W^y9fiRL8`9~T!f z@PlmwMW&uxPJUv^t+yu^-M0DghKYgE4O(tgz#0Q!Req(pNvTC`Yo^L_PkGP{a&iGE z2w>)NmJ}uC6{qDF<rWt)D1Z$I6;2RO!=&JD*PDFOVCu?WQDC<tw3aZ)BhqntYJRT1 zV_I5fUTO%;0PBi^;vxoFxbYx0dT45dDkh40UHzZL%)sWtz?^Gf045E=q!EZT1dAAg zMGTE93hY0C;t)4Rm#+ZV!PXT81tkpZe)%OCnR)4;BngUp5C#VcqF4Z>8BM4>;XJ}f zOfD#8U|@&>840$^1jGWx1p@>A<Op(!C32zw3D|(mumkA_aUH>2XE5o8?sN1oLYIex MOd!sX0XY<e0ZrkYU;qFB diff --git a/JHotDraw/drawings/pert.draw b/JHotDraw/drawings/pert.draw deleted file mode 100644 index 3728cc3a8..000000000 --- a/JHotDraw/drawings/pert.draw +++ /dev/null @@ -1,64 +0,0 @@ - - CH.ifa.draw.standard.StandardDrawing 14 - CH.ifa.draw.samples.pert.PertFigure 3 - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 29 133 "Design" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 29 148 "5" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 29 163 "5" "Helvetica" 0 12 1 NULL NULL 26 130 45 51 0 1 - CH.ifa.draw.samples.pert.PertFigure 3 - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 108 133 "Implement" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 108 148 "6" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 108 163 "11" "Helvetica" 0 12 1 NULL NULL 105 130 66 51 1 REF 1 3 - CH.ifa.draw.samples.pert.PertFigure 3 - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 215 133 "JavaDoc" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 215 148 "2" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 215 163 "13" "Helvetica" 0 12 1 NULL NULL 212 130 55 51 1 REF 5 1 - CH.ifa.draw.samples.pert.PertFigure 3 - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 314 133 "Ship" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 314 148 "0" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 314 163 "19" "Helvetica" 0 12 1 NULL NULL 311 130 31 51 3 - CH.ifa.draw.samples.pert.PertFigure 3 - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 206 "S&P" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 221 "4" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 236 "15" "Helvetica" 0 12 1 NULL NULL 224 203 31 51 1 REF 5 1 REF 13 REF 9 - CH.ifa.draw.samples.pert.PertFigure 3 - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 46 "Test" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 61 "8" "Helvetica" 1 12 0 NULL NULL - CH.ifa.draw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 76 "19" "Helvetica" 0 12 1 NULL NULL 224 43 31 51 1 REF 5 1 REF 13 0 REF 17 REF 21 REF 5 REF 21 REF 9 REF 13 REF 17 - CH.ifa.draw.samples.pert.PertDependency 2 71 155 105 155 NULL - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.ChopBoxConnector REF 1 - CH.ifa.draw.standard.ChopBoxConnector REF 5 - CH.ifa.draw.samples.pert.PertDependency 2 171 155 212 155 NULL - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.ChopBoxConnector REF 5 - CH.ifa.draw.standard.ChopBoxConnector REF 9 - CH.ifa.draw.samples.pert.PertDependency 3 151 130 184 68 224 68 NULL - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.ChopBoxConnector REF 5 - CH.ifa.draw.standard.ChopBoxConnector REF 21 - CH.ifa.draw.samples.pert.PertDependency 3 154 181 184 228 224 228 NULL - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.ChopBoxConnector REF 5 - CH.ifa.draw.standard.ChopBoxConnector REF 17 - CH.ifa.draw.samples.pert.PertDependency 3 255 228 285 228 312 181 NULL - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.ChopBoxConnector REF 17 - CH.ifa.draw.standard.ChopBoxConnector REF 13 - CH.ifa.draw.samples.pert.PertDependency 2 267 155 311 155 NULL - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.ChopBoxConnector REF 9 - CH.ifa.draw.standard.ChopBoxConnector REF 13 - CH.ifa.draw.samples.pert.PertDependency 3 255 68 284 68 314 130 NULL - CH.ifa.draw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - CH.ifa.draw.standard.ChopBoxConnector REF 21 - CH.ifa.draw.standard.ChopBoxConnector REF 13 - CH.ifa.draw.figures.GroupFigure 2 - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 26 23 "HotJavaDraw" "Helvetica" 1 18 0 NULL NULL - CH.ifa.draw.figures.TextFigure "attributes" "attributes" 2 "FillColor" "Color" 255 199 158 "TextColor" "Color" 255 255 255 24 21 "HotJavaDraw" "Helvetica" 1 18 0 NULL NULL \ No newline at end of file diff --git a/JHotDraw/drawings/pert.ser b/JHotDraw/drawings/pert.ser deleted file mode 100644 index 774bf8993c1079480d1673f5cfe43961d7e70f9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10154 zcmZ4UmVvdnh(X2KLoYKeQ7@$^v0SgXBrz`~u_#3^7|L)dN-WRJOTYctm-oF&k`ogH zqbGw5NNHwXdT?q{W@1ieRceY$Vo73HYEf}!eqIGG6P@#O3-XIIOH$o3(@Tp|)6Vnw z?5Oq1Vq#$OWKc;)mBebY4+BRUL~n5kgOE>FVp*boX-Q^|epqU9Nq&)aMG=ECR=+qV z6_*qxCYL}o|G$|l>N3q=4(t`>L=-u!_Er=yFfcHJaB&fX0LWTBkhOXcYi~}kjc%}B z&&b5U?8zXQoLG>UoLN%onU`FYnwy$e;>p01ngeDz=a=S{L^E(hxu75`VGxdn_#-DV zFJ0e1DJwO(#2RcL0|NsCUuh9cfgVVK9#p}Ea}o0eiZyeX7#P56`HInfo|s#ZlUl4- zkXlrt7m!*6_4%YVE%rI9q&G4#uy``agCrp#g4NeP4BTlhnZ*S;iIq<I6(tNJ5Qip~ zm*@wjCYL1UrRStt`!H~&1>_f(gd`Sc7Z)<rF);ZsaHa(mr6L3>K*HeA1BW1p#|rWs z0|NtdDTv1bVigxL$RWpF8aRy<>xHCNKpk&?^~NHPpWFU0F>pjNaHn||2c;&a_~+$R zdNOdN`4?rTXXZs9n30|g@+EM+I6TOj=9ZsVQo_KG@ES<K8kEp{@{<!w@{39sRD7I0 z^fS{E^+AbVAC^D#{nOHlQ%j(#tbG{x)BKZ)Q;W({Qy^hl!XSsDF|8;uH?=&!C|e&Q zZ|%dtng;S6JSl@>SU<R=C^Ih|BPqjz!?C2KC^M-PmWN<TnHiji5>X{_c$zy6Zb)$n zgBq$MA)yX+B0`-tI1-sb5eUNQg$B%Z5T7BmEyz1i?OoXY1f0cHA*v9vINZmQ=9^eh z!XOHX6HrFe_ed<xC`nApNrhw$#^NFdVMI2B%L?!2S5@?SvV)m{$&G<4CqFU8EfG{O zcrtL7WE7<qXXNLkR20}dfKwkwIVjz6gS=D1!0DEmljEG9lV4O^#J~qOI<dS&4=lpC zRJ>WB-?)^Cfz6G9EiEypAS2O}fwe3#r!>`vfhoDTgh3kOR#4VR1{tCc))-unn4D@I z&A^#fl%51uUc$f>?H0|zmImg5(!RV816N5#s&jrGD6y6>h$Bo2NX*PDfl5I9&G7&K z@p%OW1qBrqATP)=Ffg=&++SS8zzcUXC;=Z`X!`8Ty|7|t1~yLy$+Y~u60BkE#=u#S zpP5$@oLQCX$-q(!rdW$hDsxhO7(~*7QVUB{i%U{d5K#tlvV;!<OI~7bDu^u%E`Ast zAwkLmb__^d%04YEje&uI1suqr?9NhL#2^iKB*;nNtPM9hyJBt+?+acxP?1)|pbu6F z3KBiIiWKLJL{K4~TI5-hS_I0QDsZ_*xe~Rr?&2{_42-C*D*?q=Ze~tp2?M7`YED^d zNoH~)xS&!kVPGpy%}mcIDK28*2iphAfO>8@`H3aB-kw}^+vdX?CI&_~XjE6gihi&v zztY^K)S|XEQ)RiQJm>~Fx&RagFq6Sy3Fhd4!UoJzEn(m+DN4*MPRlRKEiPhE0NV*l zW{}W;Nx?m(H~FN&)Rn)Yz@9>AEn$#HB$D*h{9Jv<w6x5;)DV~f))fWCMGUfV<3Vcl z(9{T3OceFH`ag-8fz5@1IoH4dOd5hoBM@l_7BK{i7#dX+*na>eIoudsz5-lgXjT*y zlrXTlq!wqU=iw?fAYlnA3L)jk@y#l%)0BHu!S%Ch9yp{CvRG3x*fM@l@&jRTaErrP zQUr25D8YjA5|->W4Q_}Mhy{vE1_lPa=^SL5I&x|Q321=`JrJP}b{sfWfVf6rt_hel zM-M~v&_<Vsgs~Gij2TTq4g{NH1!93Pm`71KfU0d!&@6`=haL_LU`sIbJ2S|47~w#D z-}@o?9_+{>1|fLLhqqG>Z^&YmI+axdZuqcefU~_P18aF^N=b$%17n3J17jt)D6?c> zV9;e?V31;9U}yq+4ODo6B7za#R$&B-bAfCFVK5J-3b{oC3IQso$sBl*4>BA*E+7uW zj0+Z!VvM+;WtvO`#|oz>s1*uo1cSqfis=#*A)v4r3i&e^92Sgb@U%k3Z~)~`P&f?U z{8<V1J(Hm!$on7+P71*c3=E*G=ET6jkcpAi&@<71WVP!<B&&6U1DM?_u`JOgKN%dl zR7_x?j0Oscp^(w0gF}MR2%gHQ7!II}1`3D4o6#17ea~cQ4Dvn*gOdU*qnR@>FkHdN zXoI0nV+6$#q#FaOrUq}FwiO(}EWsI>1>m3sxf_%$Ahj+<%`8xKfs7jpx$Gb~7#Iye zZl-oPFfuTJlf&T6WoN;@XEFp;UWmwt<uZ8&21Za$Lv1-Sz*~-x#xkz9;(%0hj~N&k z&cWky@aDdU;DBciRtunZq61ZNpisC!1VZ60I20I7;7$dV8i;gAQ6U5}1{4mUjy|MJ zLr)Em<crzApjTh-C)oE)hTyI)JP437AHxF%28Pq%1Om%sNL3uDdRdK6G909$5v*ds z@}eHxU+AF^i4)Awr+e>?krx~fEFr1ICE&oKVj_fPM*ATU43gkrV6=ccm5Sj2%ZveV z!_kw&0B1%<Rj}{z)P&&7s0~gaWMxKtI>9;hdLcs{BQri_JSdV#^)M)-gUnzA7hR1Y z?rIQmy|{=$9eEn67=0qmCAA<mFC{fExpHEc&dc-Xyw-z<DV0H!X$U#&gOo)KO2}qI z=0l40d@}Pu699Rs$t9WjdGYOU^Ck#Qxd@(4RL((>!)mM#1527~UP=jrBI;BQe7?y! zKM!Pfev!2g16x{fNn%k6DCEp5aJVNRKc^DpCdg>)#O3lq9E*QVW@2FVWKb?Zk;CC0 zK9GA{Qj_zG5<xyfpF)HBTOVWxLX|aWzR?ZjXz=7o34;J)lp8E!?Zd#H766*B0LLnm z4}$>2GYB(4-m(Ob1tU*Y$zTg~$D*SA@{r7e^Z$BZUYhYg3p_F?n+O%f>M<7vwlqi3 ztfvbDPnu_5UTRTLVoGLdF^KD5S_0!%6ftOFwGleejOuOCXTr%ZOr$3>fo4v5(wy>( zQc{b+{sno)3N*h8pPK@UR1_4zrlUcHB?blu4rt7l;XeZd18BAgECS1dOz_4i6UtN< zIAFIO=_)d*JD~=iuR|IYb!T8;m<KY35jJ2m5A25GA_i4tufirr^_(;E3!L&R;3@C* z_D5?r-aOI;nkXq^P{XPRHc1cHw8Np$=DVi&aj<LDVDt2FX{>PsO5y(Hd8tL9+$;nh z(q#lO!@;h11(l{CE_?(ZGHebK1}m_kTG)c(3KUqYQGyQC1&0P5NCDhE;6?`{oEr{z z5K2>rkuv9@4Xc6Uat3Tn0L<ILz`)=F4hWFbL5(RlNIWAu7E<I6gk$G0Ffi<fI}ha8 zCvYCfvCl9a%Wxg6VgN!Gl>456Eq7vIU<74IxMRV6#2r{13vQhvLKZaO1a9@wI+Zel zrorJE9PB)7sT9q5jdV+;ps;j<houa1DrE%q#G43)B_p^(C@x}<M=pDyHIbfsQGRIw zq`E5(&xri}valCit1F}<B(N4Y;JOCXRs&;@3mLE#w4fq~$}>Tr2`WT)57IcC0Im## zV9~-reqUh%0|Us-l+R8w_JNy;+#dNQ;1TMg#By*b5g!^%B@CRP*<Wy-2-XYAOAP=2 m|NjrF+)&nTfZPm~MP4W&!N9;E3J;aR8&-2L!V2VQ5C#CDFT7m< diff --git a/JHotDraw/lgpl-license.html b/JHotDraw/lgpl-license.html deleted file mode 100644 index 7106b97b0..000000000 --- a/JHotDraw/lgpl-license.html +++ /dev/null @@ -1,533 +0,0 @@ -<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> - -<html> -<head> - <title>The Open Source Initiative: The GNU Lesser General Public License (LGPL)</title> -</head> - -<body bgcolor="#FFFFFF"> - -<div align=center> - -<p> - -<table width=90% cellpadding=10 cellspacing=10 border=0> - -<tr bgcolor="#FFFFFF"> - - <td colspan=2 align="right"><img src="../graphics/ossmall.png" width="250" height="26" border="0" align="right" alt="opensource.org"> - -</td> - -</tr> - -<tr> - - <td width=75% bgcolor="#C6EFF7" valign="top"> - -<font face="Arial, Helvetica, sans serif" size="3"> - -<h1>The GNU Lesser General Public License (LGPL)</h1> - -<h2>Version 2.1, February 1999</h2> - -<blockquote> - - <p><em>(The master copy of this license lives on the <a -href="http://www.gnu.org/copyleft/lesser.html">GNU website</a>.)</em></p> - -</blockquote> - -<tt> - -<p>Copyright (C) 1991, 1999 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed.</p> - -<p>[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.]</p> - -<p>Preamble</p> - -<p>The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users.</p> - -<p>This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below.</p> - -<p>When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things.</p> - -<p>To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it.</p> - -<p>For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights.</p> - -<p>We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library.</p> - -<p>To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others.</p> - -<p>Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license.</p> - -<p>Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs.</p> - -<p>When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library.</p> - -<p>We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances.</p> - -<p>For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License.</p> - -<p>In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system.</p> - -<p>Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library.</p> - -<p>The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run.</p> - -<p>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</p> - -<p>0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you".</p> - -<p>A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables.</p> - -<p>The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".)</p> - -<p>"Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library.</p> - -<p>Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does.</p> - -<p>1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library.</p> - -<p>You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee.</p> - -<p>2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions:</p> - -<blockquote> - - <p>a) The modified work must itself be a software library.<br /> - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change.<br /> - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License.<br /> - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful.</p> - - <p>(For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.)</p> - - <p>These requirements apply to the modified work as a whole. If - identifiable sections of that work are not derived from the Library, - and can be reasonably considered independent and separate works in - themselves, then this License, and its terms, do not apply to those - sections when you distribute them as separate works. But when you - distribute the same sections as part of a whole which is a work based - on the Library, the distribution of the whole must be on the terms of - this License, whose permissions for other licensees extend to the - entire whole, and thus to each and every part regardless of who wrote - it.</p> - - <p>Thus, it is not the intent of this section to claim rights or contest - your rights to work written entirely by you; rather, the intent is to - exercise the right to control the distribution of derivative or - collective works based on the Library.</p> - - <p>In addition, mere aggregation of another work not based on the Library - with the Library (or with a work based on the Library) on a volume of - a storage or distribution medium does not bring the other work under - the scope of this License.</p> - -</blockquote> - -<p>3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices.</p> - -<p>Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy.</p> - -<p>This option is useful when you wish to copy part of the code of -the Library into a program that is not a library.</p> - -<p>4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange.</p> - -<p>If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code.</p> - -<p>5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License.</p> - -<p>However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables.</p> - -<p>When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law.</p> - -<p>If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.)</p> - -<p>Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself.</p> - -<p>6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications.</p> - -<p>You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things:</p> - - <blockquote> - - <p>a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.)</p> - - <p>b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with.</p> - - <p>c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution.</p> - - <p>d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place.</p> - - <p>e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy.</p> - - </blockquote> - -<p>For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable.</p> - -<p>It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute.</p> - -<p>7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things:</p> - -<blockquote> - - <p>a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above.</p> - - <p>b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work.</p> - -</blockquote> - -<p>8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance.</p> - -<p>9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it.</p> - -<p>10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License.</p> - -<p>11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library.</p> - -<p>If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances.</p> - -<p>It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice.</p> - -<p>This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License.</p> - -<p>12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License.</p> - -<p>13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns.</p> - -<p>Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation.</p> - -<p>14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally.</p> - -<p>NO WARRANTY</p> - -<p>15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p> - -<p>16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES.</p> - -<p>END OF TERMS AND CONDITIONS</p> - -</tt> - -</pre> - - </td> - - <td width=25% bgcolor="#BFBFBF" valign="top"> - - <font face="Arial, Helvetica, sans serif" size="2"> - - <p><a href="index.html">Licenses main page</a></p> - - <p /> - - <hr> - - <p><a href="../index.html">opensource.org home page</a></p> - -</tr> - -</table> - -</div> - -</body> - -</html> diff --git a/JHotDraw/run_javadraw.bat b/JHotDraw/run_javadraw.bat deleted file mode 100644 index 01e20b6cc..000000000 --- a/JHotDraw/run_javadraw.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off - -call compile_ant javadraw diff --git a/JHotDraw/setenv.bat b/JHotDraw/setenv.bat deleted file mode 100644 index ca4a20ba1..000000000 --- a/JHotDraw/setenv.bat +++ /dev/null @@ -1,2 +0,0 @@ -set JAVA_HOME=C:\progra~1\jdk1.4.0 -set ANT_HOME=C:\ant diff --git a/JHotDraw/src/CH/ifa/draw/applet/DrawApplet.java b/JHotDraw/src/CH/ifa/draw/applet/DrawApplet.java deleted file mode 100644 index 75489a9b0..000000000 --- a/JHotDraw/src/CH/ifa/draw/applet/DrawApplet.java +++ /dev/null @@ -1,573 +0,0 @@ -/* - * @(#)DrawApplet.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.applet; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; -import java.util.*; -import java.io.*; -import java.net.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.util.*; - -/** - * DrawApplication defines a standard presentation for - * a drawing editor that is run as an applet. The presentation is - * customized in subclasses.<p> - * Supported applet parameters: <br> - * <i>DRAWINGS</i>: a blank separated list of drawing names that is - * shown in the drawings choice. - * - * @version <$CURRENT_VERSION$> - */ -public class DrawApplet - extends JApplet - implements DrawingEditor, PaletteListener, VersionRequester { - - private transient Drawing fDrawing; - private transient Tool fTool; - - private transient DrawingView fView; - private transient ToolButton fDefaultToolButton; - private transient ToolButton fSelectedToolButton; - - private transient boolean fSimpleUpdate; - private transient JButton fUpdateButton; - - private transient JComboBox fFrameColor; - private transient JComboBox fFillColor; - private transient JComboBox fTextColor; - private transient JComboBox fArrowChoice; - private transient JComboBox fFontChoice; - - private transient UndoManager myUndoManager; - - static String fgUntitled = "untitled"; - - private static final String fgDrawPath = "/CH/ifa/draw/"; - public static final String IMAGES = fgDrawPath+"images/"; - - /** - * Initializes the applet and creates its contents. - */ - public void init() { - createIconkit(); - getVersionControlStrategy().assertCompatibleVersion(); - setUndoManager(new UndoManager()); - - getContentPane().setLayout(new BorderLayout()); - - fView = createDrawingView(); - - JPanel attributes = createAttributesPanel(); - createAttributeChoices(attributes); - getContentPane().add("North", attributes); - - JPanel toolPanel = createToolPalette(); - createTools(toolPanel); - getContentPane().add("West", toolPanel); - - getContentPane().add("Center", (Component)view()); - JPanel buttonPalette = createButtonPanel(); - createButtons(buttonPalette); - getContentPane().add("South", buttonPalette); - - initDrawing(); - // JFC should have its own internal double buffering... - //setBufferedDisplayUpdate(); - setupAttributes(); - } - - public void addViewChangeListener(ViewChangeListener vsl) { - } - - public void removeViewChangeListener(ViewChangeListener vsl) { - } - - protected Iconkit createIconkit() { - return new Iconkit(this); - } - - /** - * Creates the attributes panel. - */ - protected JPanel createAttributesPanel() { - JPanel panel = new JPanel(); - panel.setLayout(new PaletteLayout(2, new Point(2,2), false)); - return panel; - } - - /** - * Creates the attribute choices. Override to add additional - * choices. - */ - protected void createAttributeChoices(JPanel panel) { - panel.add(new JLabel("Fill")); - fFillColor = createColorChoice(FigureAttributeConstant.FILL_COLOR); - panel.add(fFillColor); - - panel.add(new JLabel("Text")); - fTextColor = createColorChoice(FigureAttributeConstant.TEXT_COLOR); - panel.add(fTextColor); - - panel.add(new JLabel("Pen")); - fFrameColor = createColorChoice(FigureAttributeConstant.FRAME_COLOR); - panel.add(fFrameColor); - - panel.add(new JLabel("Arrow")); - CommandChoice choice = new CommandChoice(); - fArrowChoice = choice; - FigureAttributeConstant arrowMode = FigureAttributeConstant.ARROW_MODE; - choice.addItem(new ChangeAttributeCommand("none", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_NONE), this)); - choice.addItem(new ChangeAttributeCommand("at Start", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_START), this)); - choice.addItem(new ChangeAttributeCommand("at End", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_END), this)); - choice.addItem(new ChangeAttributeCommand("at Both", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_BOTH), this)); - panel.add(fArrowChoice); - - panel.add(new JLabel("Font")); - fFontChoice = createFontChoice(); - panel.add(fFontChoice); - } - - /** - * Creates the color choice for the given attribute. - */ - protected JComboBox createColorChoice(FigureAttributeConstant attribute) { - CommandChoice choice = new CommandChoice(); - for (int i = 0; i < ColorMap.size(); i++) - choice.addItem( - new ChangeAttributeCommand( - ColorMap.name(i), - attribute, - ColorMap.color(i), - this - ) - ); - return choice; - } - - /** - * Creates the font choice. The choice is filled with - * all the fonts supported by the toolkit. - */ - protected JComboBox createFontChoice() { - CommandChoice choice = new CommandChoice(); - String fonts[] = Toolkit.getDefaultToolkit().getFontList(); - for (int i = 0; i < fonts.length; i++) { - choice.addItem(new ChangeAttributeCommand(fonts[i], FigureAttributeConstant.FONT_NAME, fonts[i], this)); - } - return choice; - } - - /** - * Creates the buttons panel. - */ - protected JPanel createButtonPanel() { - JPanel panel = new JPanel(); - panel.setLayout(new PaletteLayout(2, new Point(2,2), false)); - return panel; - } - - /** - * Creates the buttons shown in the buttons panel. Override to - * add additional buttons. - * @param panel the buttons panel. - */ - protected void createButtons(JPanel panel) { - panel.add(new Filler(24,20)); - - JComboBox drawingChoice = new JComboBox(); - drawingChoice.addItem(fgUntitled); - - String param = getParameter("DRAWINGS"); - if (param == null) { - param = ""; - } - StringTokenizer st = new StringTokenizer(param); - while (st.hasMoreTokens()) { - drawingChoice.addItem(st.nextToken()); - } - // offer choice only if more than one - if (drawingChoice.getItemCount() > 1) { - panel.add(drawingChoice); - } - else { - panel.add(new JLabel(fgUntitled)); - } - - drawingChoice.addItemListener( - new ItemListener() { - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - loadDrawing((String)e.getItem()); - } - } - } - ); - - panel.add(new Filler(6,20)); - - JButton button; - button = new CommandButton(new DeleteCommand("Delete", this)); - panel.add(button); - - button = new CommandButton(new DuplicateCommand("Duplicate", this)); - panel.add(button); - - button = new CommandButton(new GroupCommand("Group", this)); - panel.add(button); - - button = new CommandButton(new UngroupCommand("Ungroup", this)); - panel.add(button); - - button = new JButton("Help"); - button.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent event) { - showHelp(); - } - } - ); - panel.add(button); - - fUpdateButton = new JButton("Simple Update"); - fUpdateButton.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent event) { - if (fSimpleUpdate) { - setBufferedDisplayUpdate(); - } - else { - setSimpleDisplayUpdate(); - } - } - } - ); - - // panel.add(fUpdateButton); // not shown currently - } - - /** - * Creates the tools palette. - */ - protected JPanel createToolPalette() { - JPanel palette = new JPanel(); - palette.setLayout(new PaletteLayout(2,new Point(2,2))); - return palette; - } - - /** - * Creates the tools. By default only the selection tool is added. - * Override this method to add additional tools. - * Call the inherited method to include the selection tool. - * @param palette the palette where the tools are added. - */ - protected void createTools(JPanel palette) { - Tool tool = createSelectionTool(); - - fDefaultToolButton = createToolButton(IMAGES + "SEL", "Selection Tool", tool); - palette.add(fDefaultToolButton); - } - - /** - * Creates the selection tool used in this editor. Override to use - * a custom selection tool. - */ - protected Tool createSelectionTool() { - return new SelectionTool(this); - } - - /** - * Creates a tool button with the given image, tool, and text - */ - protected ToolButton createToolButton(String iconName, String toolName, Tool tool) { - return new ToolButton(this, iconName, toolName, tool); - } - - /** - * Creates the drawing used in this application. - * You need to override this method to use a Drawing - * subclass in your application. By default a standard - * Drawing is returned. - */ - protected Drawing createDrawing() { - return new StandardDrawing(); - } - - /** - * Creates the drawing view used in this application. - * You need to override this method to use a DrawingView - * subclass in your application. By default a standard - * DrawingView is returned. - */ - protected DrawingView createDrawingView() { - return new StandardDrawingView(this, 410, 370); - } - - /** - * Handles a user selection in the palette. - * @see PaletteListener - */ - public void paletteUserSelected(PaletteButton button) { - ToolButton toolButton = (ToolButton) button; - setTool(toolButton.tool(), toolButton.name()); - setSelected(toolButton); - } - - /** - * Handles when the mouse enters or leaves a palette button. - * @see PaletteListener - */ - public void paletteUserOver(PaletteButton button, boolean inside) { - if (inside) { - showStatus(button.name()); - } - else if (fSelectedToolButton != null) { - showStatus(fSelectedToolButton.name()); - } - } - - /** - * Gets the current drawing. - * @see DrawingEditor - */ - public Drawing drawing() { - return fDrawing; - } - - /** - * Gets the current tool. - * @see DrawingEditor - */ - public Tool tool() { - return fTool; - } - - /** - * Gets the current drawing view. - * @see DrawingEditor - */ - public DrawingView view() { - return fView; - } - - public DrawingView[] views() { - return new DrawingView[] { view() } ; - } - - /** - * Sets the default tool of the editor. - * @see DrawingEditor - */ - public void toolDone() { - setTool(fDefaultToolButton.tool(), fDefaultToolButton.name()); - setSelected(fDefaultToolButton); - } - - /** - * Handles a change of the current selection. Updates all - * menu items that are selection sensitive. - * @see DrawingEditor - */ - public void figureSelectionChanged(DrawingView view) { - setupAttributes(); - } - - public void viewSelectionChanged(DrawingView oldView, DrawingView newView) { - } - - private void initDrawing() { - fDrawing = createDrawing(); - view().setDrawing(fDrawing); - toolDone(); - } - - private void setTool(Tool t, String name) { - if (fTool != null) { - fTool.deactivate(); - } - fTool = t; - if (fTool != null) { - showStatus(name); - fTool.activate(); - } - } - - private void setSelected(ToolButton button) { - if (fSelectedToolButton != null) { - fSelectedToolButton.reset(); - } - fSelectedToolButton = button; - if (fSelectedToolButton != null) { - fSelectedToolButton.select(); - } - } - - protected void loadDrawing(String param) { - if (param == fgUntitled) { - fDrawing.release(); - initDrawing(); - return; - } - - String filename = getParameter(param); - if (filename != null) { - readDrawing(filename); - } - } - - private void readDrawing(String filename) { - toolDone(); - String type = guessType(filename); - if (type.equals("storable")) { - readFromStorableInput(filename); - } - else if (type.equals("serialized")) { - readFromObjectInput(filename); - } - else { - showStatus("Unknown file type"); - } - } - - private void readFromStorableInput(String filename) { - try { - URL url = new URL(getCodeBase(), filename); - InputStream stream = url.openStream(); - StorableInput input = new StorableInput(stream); - fDrawing.release(); - - fDrawing = (Drawing)input.readStorable(); - view().setDrawing(fDrawing); - } - catch (IOException e) { - initDrawing(); - showStatus("Error:" + e); - } - } - - private void readFromObjectInput(String filename) { - try { - URL url = new URL(getCodeBase(), filename); - InputStream stream = url.openStream(); - ObjectInput input = new ObjectInputStream(stream); - fDrawing.release(); - fDrawing = (Drawing)input.readObject(); - view().setDrawing(fDrawing); - } - catch (IOException e) { - initDrawing(); - showStatus("Error: " + e); - } - catch (ClassNotFoundException e) { - initDrawing(); - showStatus("Class not found: " + e); - } - } - - private String guessType(String file) { - if (file.endsWith(".draw")) { - return "storable"; - } - if (file.endsWith(".ser")) { - return "serialized"; - } - return "unknown"; - } - - private void setupAttributes() { - Color frameColor = (Color) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.FRAME_COLOR); - Color fillColor = (Color) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.FILL_COLOR); - //Color textColor = (Color) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.TEXT_COLOR); - Integer arrowMode = (Integer) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.ARROW_MODE); - String fontName = (String) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.FONT_NAME); - - FigureEnumeration fe = view().selection(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - frameColor = (Color) f.getAttribute(FigureAttributeConstant.FRAME_COLOR); - fillColor = (Color) f.getAttribute(FigureAttributeConstant.FILL_COLOR); - //textColor = (Color) f.getAttribute(FigureAttributeConstant.TEXT_COLOR); - arrowMode = (Integer) f.getAttribute(FigureAttributeConstant.ARROW_MODE); - fontName = (String) f.getAttribute(FigureAttributeConstant.FONT_NAME); - } - - fFrameColor.setSelectedIndex(ColorMap.colorIndex(frameColor)); - fFillColor.setSelectedIndex(ColorMap.colorIndex(fillColor)); - //fTextColor.select(ColorMap.colorIndex(textColor)); - if (arrowMode != null) { - fArrowChoice.setSelectedIndex(arrowMode.intValue()); - } - if (fontName != null) { - fFontChoice.setSelectedItem(fontName); - } - } - - protected void setSimpleDisplayUpdate() { - view().setDisplayUpdate(new SimpleUpdateStrategy()); - fUpdateButton.setText("Simple Update"); - fSimpleUpdate = true; - } - - protected void setBufferedDisplayUpdate() { - view().setDisplayUpdate(new BufferedUpdateStrategy()); - fUpdateButton.setText("Buffered Update"); - fSimpleUpdate = false; - } - - /** - * Shows a help page for the applet. The URL of the help - * page is derived as follows: codeBase+appletClassname+Help.html" - */ - protected void showHelp() { - try { - String appletPath = getClass().getName().replace('.', '/'); - URL url = new URL(getCodeBase(), appletPath + "Help.html"); - getAppletContext().showDocument(url, "Help"); - } - catch (IOException e) { - showStatus("Help file not found"); - } - - } - - protected void setUndoManager(UndoManager newUndoManager) { - myUndoManager = newUndoManager; - } - - public UndoManager getUndoManager() { - return myUndoManager; - } - - protected VersionControlStrategy getVersionControlStrategy() { - return new StandardVersionControlStrategy(this); - } - - /** - * Subclasses should override this method to specify to which versions of - * JHotDraw they are compatible. A string array is returned so it is possible - * to specify several version numbers of JHotDraw to which the application - * is compatible with. - * - * @return all versions number of JHotDraw the application is compatible with. - */ - public String[] getRequiredVersions() { - String[] requiredVersions = new String[1]; - // return the version of the package we are in - requiredVersions[0] = VersionManagement.getPackageVersion(DrawApplet.class.getPackage()); - return requiredVersions; - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/application/DrawApplication.java b/JHotDraw/src/CH/ifa/draw/application/DrawApplication.java deleted file mode 100644 index b4d091856..000000000 --- a/JHotDraw/src/CH/ifa/draw/application/DrawApplication.java +++ /dev/null @@ -1,1174 +0,0 @@ -/* - * @(#)DrawApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.application; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.util.*; -import CH.ifa.draw.contrib.*; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; -import java.io.*; -import java.util.ListIterator; - -/** - * DrawApplication defines a standard presentation for - * standalone drawing editors. The presentation is - * customized in subclasses. - * The application is started as follows: - * <pre> - * public static void main(String[] args) { - * MayDrawApp window = new MyDrawApp(); - * window.open(); - * } - * </pre> - * - * @version <$CURRENT_VERSION$> - */ -public class DrawApplication - extends JFrame - implements DrawingEditor, PaletteListener, VersionRequester { - - private Tool fTool; - private Iconkit fIconkit; - - private JTextField fStatusLine; - private DrawingView fView; - private ToolButton fDefaultToolButton; - private ToolButton fSelectedToolButton; - - private String fApplicationName; - private StorageFormatManager fStorageFormatManager; - private UndoManager myUndoManager; - protected static String fgUntitled = "untitled"; - /** - * List is not thread safe, but should not need to be. If it does we can - * safely synchronize the few methods that use this by synchronizing on - * the List object itself. - */ - private java.util.List listeners; - private DesktopListener fDesktopListener; - - /** - * This component acts as a desktop for the content. - */ - private Desktop fDesktop; - - // the image resource path - private static final String fgDrawPath = "/CH/ifa/draw/"; - public static final String IMAGES = fgDrawPath + "images/"; - protected static int winCount = 0; - - /** - * The index of the file menu in the menu bar. - */ - public static final int FILE_MENU = 0; - /** - * The index of the edit menu in the menu bar. - */ - public static final int EDIT_MENU = 1; - /** - * The index of the alignment menu in the menu bar. - */ - public static final int ALIGNMENT_MENU = 2; - /** - * The index of the attributes menu in the menu bar. - */ - public static final int ATTRIBUTES_MENU = 3; - - /** - * Constructs a drawing window with a default title. - */ - public DrawApplication() { - this("JHotDraw"); - } - - /** - * Constructs a drawing window with the given title. - */ - public DrawApplication(String title) { - super(title); - listeners = CollectionsFactory.current().createList(); - setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); - setApplicationName(title); - } - - /** - * Factory method which can be overriden by subclasses to - * create an instance of their type. - * - * @return newly created application - */ - protected DrawApplication createApplication() { - return new DrawApplication(); - } - - /** - * Open a new view for this application containing a - * view of the drawing of the currently activated window. - */ - public void newView() { - if (view() == null) { - return; - } - DrawApplication window = createApplication(); - window.open(view()); - if (view().drawing().getTitle() != null ) { - window.setDrawingTitle(view().drawing().getTitle() + " (View)"); - } - else { - window.setDrawingTitle(getDefaultDrawingTitle() + " (View)"); - } - } - - /** - * Open a new window for this application containing the passed in drawing, - * or a new drawing if the passed in drawing is null. - */ - public void newWindow(Drawing initialDrawing) { - DrawApplication window = createApplication(); - if (initialDrawing == null) { - window.open(); - } - else { - window.open(window.createDrawingView(initialDrawing)); - } - } - - public final void newWindow() { - newWindow(createDrawing()); - } - - /** - * Opens a new window - */ - public void open() { - open(createInitialDrawingView()); - } - - /** - * Opens a new window with a drawing view. - */ - protected void open(final DrawingView newDrawingView) { - getVersionControlStrategy().assertCompatibleVersion(); - setUndoManager(new UndoManager()); - setIconkit(createIconkit()); - getContentPane().setLayout(new BorderLayout()); - - // status line must be created before a tool is set - setStatusLine(createStatusLine()); - getContentPane().add(getStatusLine(), BorderLayout.SOUTH); - - // create dummy tool until the default tool is activated during toolDone() - setTool(new NullTool(this), ""); - setView(newDrawingView); - - JToolBar tools = createToolPalette(); - createTools(tools); - - JPanel activePanel = new JPanel(); - activePanel.setAlignmentX(LEFT_ALIGNMENT); - activePanel.setAlignmentY(TOP_ALIGNMENT); - activePanel.setLayout(new BorderLayout()); - activePanel.add(tools, BorderLayout.NORTH); - setDesktopListener(createDesktopListener()); - setDesktop(createDesktop()); - activePanel.add((Component)getDesktop(), BorderLayout.CENTER); - getContentPane().add(activePanel, BorderLayout.CENTER); - - JMenuBar mb = new JMenuBar(); - createMenus(mb); - setJMenuBar(mb); - - Dimension d = defaultSize(); - if (d.width > mb.getPreferredSize().width) { - setSize(d.width, d.height); - } - else { - setSize(mb.getPreferredSize().width, d.height); - } - addListeners(); - setStorageFormatManager(createStorageFormatManager()); - - //no work allowed to be done on GUI outside of AWT thread once - //setVislble(true) must be called before drawing added to desktop, else - //DND will fail. on drawing added before with a NPE. note however that - //a nulldrawingView will not fail because it is never really added to the desltop - setVisible(true); - Runnable r = new Runnable() { - public void run() { - if (newDrawingView.isInteractive()) { - getDesktop().addToDesktop(newDrawingView , Desktop.PRIMARY); - } - toolDone(); - } - }; - - if (java.awt.EventQueue.isDispatchThread() == false) { - try { - java.awt.EventQueue.invokeAndWait(r); - } - catch(java.lang.InterruptedException ie) { - System.err.println(ie.getMessage()); - exit(); - } - catch(java.lang.reflect.InvocationTargetException ite) { - System.err.println(ite.getMessage()); - exit(); - } - } - else { - r.run(); - } - - toolDone(); - } - - /** - * Registers the listeners for this window - */ - protected void addListeners() { - addWindowListener( - new WindowAdapter() { - public void windowClosing(WindowEvent event) { - endApp(); - } - - public void windowOpened(WindowEvent event) { - winCount++; - } - - public void windowClosed(WindowEvent event) { - if (--winCount == 0) { - System.exit(0); - } - } - } - ); - } - - /** - * Creates the standard menus. Clients override this - * method to add additional menus. - */ - protected void createMenus(JMenuBar mb) { - addMenuIfPossible(mb, createFileMenu()); - addMenuIfPossible(mb, createEditMenu()); - addMenuIfPossible(mb, createAlignmentMenu()); - addMenuIfPossible(mb, createAttributesMenu()); - addMenuIfPossible(mb, createDebugMenu()); - } - - protected void addMenuIfPossible(JMenuBar mb, JMenu newMenu) { - if (newMenu != null) { - mb.add(newMenu); - } - } - - /** - * Creates the file menu. Clients override this - * method to add additional menu items. - */ - protected JMenu createFileMenu() { - CommandMenu menu = new CommandMenu("File"); - Command cmd = new AbstractCommand("New", this, false) { - public void execute() { - promptNew(); - } - }; - menu.add(cmd, new MenuShortcut('n')); - - cmd = new AbstractCommand("Open...", this, false) { - public void execute() { - promptOpen(); - } - }; - menu.add(cmd, new MenuShortcut('o')); - - cmd = new AbstractCommand("Save As...", this, true) { - public void execute() { - promptSaveAs(); - } - }; - menu.add(cmd, new MenuShortcut('s')); - menu.addSeparator(); - - cmd = new AbstractCommand("Print...", this, true) { - public void execute() { - print(); - } - }; - menu.add(cmd, new MenuShortcut('p')); - menu.addSeparator(); - - cmd = new AbstractCommand("Exit", this, true) { - public void execute() { - endApp(); - } - }; - menu.add(cmd); - return menu; - } - - /** - * Creates the edit menu. Clients override this - * method to add additional menu items. - */ - protected JMenu createEditMenu() { - CommandMenu menu = new CommandMenu("Edit"); - menu.add(new UndoableCommand( - new SelectAllCommand("Select All", this)), new MenuShortcut('a')); - menu.addSeparator(); - menu.add(new UndoableCommand( - new CutCommand("Cut", this)), new MenuShortcut('x')); - menu.add(new CopyCommand("Copy", this), new MenuShortcut('c')); - menu.add(new UndoableCommand( - new PasteCommand("Paste", this)), new MenuShortcut('v')); - menu.addSeparator(); - menu.add(new UndoableCommand( - new DuplicateCommand("Duplicate", this)), new MenuShortcut('d')); - menu.add(new UndoableCommand(new DeleteCommand("Delete", this))); - menu.addSeparator(); - menu.add(new UndoableCommand(new GroupCommand("Group", this))); - menu.add(new UndoableCommand(new UngroupCommand("Ungroup", this))); - menu.addSeparator(); - menu.add(new UndoableCommand(new SendToBackCommand("Send to Back", this))); - menu.add(new UndoableCommand(new BringToFrontCommand("Bring to Front", this))); - menu.addSeparator(); - menu.add(new UndoCommand("Undo Command", this)); - menu.add(new RedoCommand("Redo Command", this)); - return menu; - } - - /** - * Creates the alignment menu. Clients override this - * method to add additional menu items. - */ - protected JMenu createAlignmentMenu() { - CommandMenu menu = new CommandMenu("Align"); - menu.addCheckItem(new ToggleGridCommand("Toggle Snap to Grid", this, new Point(4,4))); - menu.addSeparator(); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.LEFTS, this))); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.CENTERS, this))); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.RIGHTS, this))); - menu.addSeparator(); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.TOPS, this))); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.MIDDLES, this))); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.BOTTOMS, this))); - return menu; - } - - /** - * Creates the debug menu. Clients override this - * method to add additional menu items. - */ - protected JMenu createDebugMenu() { - CommandMenu menu = new CommandMenu("Debug"); - - Command cmd = new AbstractCommand("Simple Update", this) { - public void execute() { - this.view().setDisplayUpdate(new SimpleUpdateStrategy()); - } - }; - menu.add(cmd); - - cmd = new AbstractCommand("Buffered Update", this) { - public void execute() { - this.view().setDisplayUpdate(new BufferedUpdateStrategy()); - } - }; - menu.add(cmd); - return menu; - } - - /** - * Creates the attributes menu and its submenus. Clients override this - * method to add additional menu items. - */ - protected JMenu createAttributesMenu() { - JMenu menu = new JMenu("Attributes"); - menu.add(createColorMenu("Fill Color", FigureAttributeConstant.FILL_COLOR)); - menu.add(createColorMenu("Pen Color", FigureAttributeConstant.FRAME_COLOR)); - menu.add(createArrowMenu()); - menu.addSeparator(); - menu.add(createFontMenu()); - menu.add(createFontSizeMenu()); - menu.add(createFontStyleMenu()); - menu.add(createColorMenu("Text Color", FigureAttributeConstant.TEXT_COLOR)); - return menu; - } - - /** - * Creates the color menu. - */ - protected JMenu createColorMenu(String title, FigureAttributeConstant attribute) { - CommandMenu menu = new CommandMenu(title); - for (int i=0; i<ColorMap.size(); i++) - menu.add( - new UndoableCommand( - new ChangeAttributeCommand( - ColorMap.name(i), - attribute, - ColorMap.color(i), - this - ) - ) - ); - return menu; - } - - /** - * Creates the arrows menu. - */ - protected JMenu createArrowMenu() { - FigureAttributeConstant arrowMode = FigureAttributeConstant.ARROW_MODE; - CommandMenu menu = new CommandMenu("Arrow"); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("none", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_NONE), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("at Start", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_START), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("at End", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_END), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("at Both", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_BOTH), this))); - return menu; - } - - /** - * Creates the fonts menus. It installs all available fonts - * supported by the toolkit implementation. - */ - protected JMenu createFontMenu() { - CommandMenu menu = new CommandMenu("Font"); - String fonts[] = Toolkit.getDefaultToolkit().getFontList(); - for (int i = 0; i < fonts.length; i++) { - menu.add(new UndoableCommand( - new ChangeAttributeCommand(fonts[i], FigureAttributeConstant.FONT_NAME, fonts[i], this))); - } - return menu; - } - - /** - * Creates the font style menu with entries (Plain, Italic, Bold). - */ - protected JMenu createFontStyleMenu() { - FigureAttributeConstant fontStyle = FigureAttributeConstant.FONT_STYLE; - CommandMenu menu = new CommandMenu("Font Style"); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("Plain", fontStyle, new Integer(Font.PLAIN), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("Italic", fontStyle, new Integer(Font.ITALIC), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("Bold", fontStyle, new Integer(Font.BOLD), this))); - return menu; - } - - /** - * Creates the font size menu. - */ - protected JMenu createFontSizeMenu() { - CommandMenu menu = new CommandMenu("Font Size"); - int sizes[] = { 9, 10, 12, 14, 18, 24, 36, 48, 72 }; - for (int i = 0; i < sizes.length; i++) { - menu.add( - new UndoableCommand( - new ChangeAttributeCommand( - Integer.toString(sizes[i]), - FigureAttributeConstant.FONT_SIZE, - new Integer(sizes[i]), - this - ) - ) - ); - } - return menu; - } - - /** - * Create a menu which allows the user to select a different look and feel at runtime. - */ - public JMenu createLookAndFeelMenu() { - CommandMenu menu = new CommandMenu("Look'n'Feel"); - - UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels(); - - for (int i = 0; i < lafs.length; i++) { - final String lnfClassName = lafs[i].getClassName(); - Command cmd = new AbstractCommand(lafs[i].getName(), this) { - public void execute() { - newLookAndFeel(lnfClassName); - } - }; - menu.add(cmd); - } - return menu; - } - - /** - * Creates the tool palette. - */ - protected JToolBar createToolPalette() { - JToolBar palette = new JToolBar(); - palette.setBackground(Color.lightGray); - // use standard FlowLayout for JToolBar - // palette.setLayout(new PaletteLayout(2,new Point(2,2))); - return palette; - } - - /** - * Creates the tools. By default only the selection tool is added. - * Override this method to add additional tools. - * Call the inherited method to include the selection tool. - * @param palette the palette where the tools are added. - */ - protected void createTools(JToolBar palette) { - setDefaultTool(createDefaultTool()); - palette.add(fDefaultToolButton); - } - - /** - * Creates the selection tool used in this editor. Override to use - * a custom selection tool. - */ - protected Tool createSelectionTool() { - return new SelectionTool(this); - } - - protected Tool createDefaultTool() { - return createSelectionTool(); - } - - protected void setDefaultTool(Tool newDefaultTool) { - if (newDefaultTool != null) { - fDefaultToolButton = createToolButton(IMAGES+"SEL", "Selection Tool", newDefaultTool); - } - else { - fDefaultToolButton = null; - } - } - - public Tool getDefaultTool() { - if (fDefaultToolButton != null) { - return fDefaultToolButton.tool(); - } - else { - return null; - } - } - - /** - * Creates a tool button with the given image, tool, and text - */ - protected ToolButton createToolButton(String iconName, String toolName, Tool tool) { - return new ToolButton(this, iconName, toolName, tool); - } - - /** - * Creates the drawing view used in this application. - * You need to override this method to use a DrawingView - * subclass in your application. By default a standard - * DrawingView is returned. - */ - protected DrawingView createDrawingView() { - DrawingView createdDrawingView = createDrawingView(createDrawing()); - createdDrawingView.drawing().setTitle(getDefaultDrawingTitle()); - return createdDrawingView; - } - - protected DrawingView createDrawingView(Drawing newDrawing) { - Dimension d = getDrawingViewSize(); - DrawingView newDrawingView = new StandardDrawingView(this, d.width, d.height); - newDrawingView.setDrawing(newDrawing); - // notify listeners about created view when the view is added to the desktop - //fireViewCreatedEvent(newDrawingView); - return newDrawingView; - } - - /** - * Create the DrawingView that is active when the application is started. - * This initial DrawingView might be different from DrawingView created - * by the application, so subclasses can override this method to provide - * a special drawing view for application startup time, e.g. a NullDrawingView - * which does not display an internal frame in a multiple document interface - * (MDI) application. - * - * @return drawing view that is active at application startup time - */ - protected DrawingView createInitialDrawingView() { - return createDrawingView(); - } - - /** - * Override to define the dimensions of the drawing view. - */ - protected Dimension getDrawingViewSize() { - return new Dimension(800, 800); - } - - /** - * Creates the drawing used in this application. - * You need to override this method to use a Drawing - * subclass in your application. By default a standard - * Drawing is returned. - */ - protected Drawing createDrawing() { - return new StandardDrawing(); - } - - protected Desktop createDesktop() { - return new JPanelDesktop(this); -// return new JScrollPaneDesktop(); - } - - protected void setDesktop(Desktop newDesktop) { - newDesktop.addDesktopListener(getDesktopListener()); - fDesktop = newDesktop; - } - - /** - * Get the component, in which the content is embedded. This component - * acts as a desktop for the content. - */ - public Desktop getDesktop() { - return fDesktop; - } - - /** - * Factory method to create a StorageFormatManager for supported storage formats. - * Different applications might want to use different storage formats and can return - * their own format manager by overriding this method. - */ - public StorageFormatManager createStorageFormatManager() { - StorageFormatManager storageFormatManager = new StorageFormatManager(); - storageFormatManager.setDefaultStorageFormat(new StandardStorageFormat()); - storageFormatManager.addStorageFormat(storageFormatManager.getDefaultStorageFormat()); - storageFormatManager.addStorageFormat(new SerializationStorageFormat()); -// storageFormatManager.addStorageFormat(new JDOStorageFormat()); - return storageFormatManager; - } - - /** - * Set the StorageFormatManager. The StorageFormatManager is used when storing and - * restoring Drawing from the file system. - */ - protected final void setStorageFormatManager(StorageFormatManager newStorageFormatManager) { - fStorageFormatManager = newStorageFormatManager; - } - - /** - * Return the StorageFormatManager for this application.The StorageFormatManager is - * used when storing and restoring Drawing from the file system. - */ - public StorageFormatManager getStorageFormatManager() { - return fStorageFormatManager; - } - - /** - * Gets the default size of the window. - */ - protected Dimension defaultSize() { - return new Dimension(600,450); - } - - /** - * Creates the status line. - */ - protected JTextField createStatusLine() { - JTextField field = new JTextField("No Tool", 40); - field.setBackground(Color.white); - field.setEditable(false); - return field; - } - - private void setStatusLine(JTextField newStatusLine) { - fStatusLine = newStatusLine; - } - - protected JTextField getStatusLine() { - return fStatusLine; - } - - /** - * Handles a user selection in the palette. - * @see PaletteListener - */ - public void paletteUserSelected(PaletteButton paletteButton) { - ToolButton toolButton = (ToolButton)paletteButton; - setTool(toolButton.tool(), toolButton.name()); - setSelected(toolButton); - } - - /** - * Handles when the mouse enters or leaves a palette button. - * @see PaletteListener - */ - public void paletteUserOver(PaletteButton paletteButton, boolean inside) { - ToolButton toolButton = (ToolButton)paletteButton; - if (inside) { - showStatus(toolButton.name()); - } - else if (fSelectedToolButton != null) { - showStatus(fSelectedToolButton.name()); - } - } - - /** - * Gets the current tool. - * @see DrawingEditor - */ - public Tool tool() { - return fTool; - } - - /** - * Retrieve the active view from the window - * Gets the current drawing view. - * @see DrawingEditor - */ - public DrawingView view() { - return fView; - } - - protected void setView(DrawingView newView) { - DrawingView oldView = fView; - fView = newView; - fireViewSelectionChangedEvent(oldView, view()); - } - - public DrawingView[] views() { - return new DrawingView[] { view() }; - } - - /** - * Sets the default tool of the editor. - * @see DrawingEditor - */ - public void toolDone() { - System.out.println("ToolDone"); - if (fDefaultToolButton != null) { - setTool(fDefaultToolButton.tool(), fDefaultToolButton.name()); - setSelected(fDefaultToolButton); - } - } - - /** - * Fired by a view when the figure selection changes. Since Commands and - * Tools may depend on the figure selection they are registered to be notified - * about these events. - * Any selection sensitive GUI component should update its - * own state if the selection has changed, e.g. selection sensitive menuitems - * will update their own states. - * @see DrawingEditor - */ - public void figureSelectionChanged(DrawingView view) { - checkCommandMenus(); - } - - protected void checkCommandMenus() { - JMenuBar mb = getJMenuBar(); - - for (int x = 0; x < mb.getMenuCount(); x++) { - JMenu jm = mb.getMenu(x); - if (CommandMenu.class.isInstance(jm)) { - checkCommandMenu((CommandMenu)jm); - } - } - } - - protected void checkCommandMenu(CommandMenu cm) { - cm.checkEnabled(); - for (int y = 0; y < cm.getItemCount();y++) { - JMenuItem jmi = cm.getItem(y); - if (CommandMenu.class.isInstance(jmi)) { - checkCommandMenu((CommandMenu)jmi); - } - } - } - - /** - * Register to hear when the active view is changed. For Single document - * interface, this will happen when a new drawing is created. - */ - public void addViewChangeListener(ViewChangeListener vsl) { - listeners.add(vsl); - } - - /** - * Remove listener - */ - public void removeViewChangeListener(ViewChangeListener vsl) { - listeners.remove(vsl); - } - - /** - * An appropriate event is triggered and all registered observers - * are notified if the drawing view has been changed, e.g. by - * switching between several internal frames. This method is - * usually not needed in SDI environments. - */ - protected void fireViewSelectionChangedEvent(DrawingView oldView, DrawingView newView) { - ListIterator li= listeners.listIterator(listeners.size()); - while (li.hasPrevious()) { - ViewChangeListener vsl = (ViewChangeListener)li.previous(); - vsl.viewSelectionChanged(oldView, newView); - } - } - - protected void fireViewCreatedEvent(DrawingView view) { - ListIterator li= listeners.listIterator(listeners.size()); - while (li.hasPrevious()) { - ViewChangeListener vsl = (ViewChangeListener)li.previous(); - vsl.viewCreated(view); - } - } - - protected void fireViewDestroyingEvent(DrawingView view) { - ListIterator li= listeners.listIterator(listeners.size()); - while (li.hasPrevious()) { - ViewChangeListener vsl = (ViewChangeListener)li.previous(); - vsl.viewDestroying( view ); - } - } - - /** - * Shows a status message. - * @see DrawingEditor - */ - public void showStatus(String string) { - getStatusLine().setText(string); - } - - /** - * Note: it is inconsistent to directly assign a variable but when using it - * use it from a method. (assignment: fTool = t, usage: tool()) dnoyeB-4/8/02 - * Note: should we check that the tool is inactive before we activate it? - * this would be consistent with how we do deactivate. I think we should do - * this now and not wait till a bug pops up. even if their is no bug, its - * consistent and adds understandability to the code. dnoyeB-4/8/02 - */ - public void setTool(Tool t, String name) { - // SF bug-tracker id: #490665 - - // deactivate only those tools that have been activated before - if ((tool() != null) && (tool().isActive())) { - tool().deactivate(); - } - fTool = t; - if (tool() != null) { - showStatus(name); - tool().activate(); - } - } - - private void setSelected(ToolButton button) { - if (fSelectedToolButton != null) { - fSelectedToolButton.reset(); - } - fSelectedToolButton = button; - if (fSelectedToolButton != null) { - fSelectedToolButton.select(); - } - } - - /** - * Exits the application. You should never override this method - */ - public void exit() { - destroy(); - // tell windowing system to free resources - dispose(); - } - - protected boolean closeQuery(){ - return true; - } - - protected void endApp(){ - if(closeQuery() == true) { - exit(); - } - } - /** - * Handles additional clean up operations. Override to destroy - * or release drawing editor resources. - */ - protected void destroy() { - } - - /** - * Resets the drawing to a new empty drawing. - */ - public void promptNew() { - newWindow(createDrawing()); - //toolDone(); - //view().setDrawing(createDrawing()); - } - - /** - * Shows a file dialog and opens a drawing. - */ - public void promptOpen() { - toolDone(); - JFileChooser openDialog = createOpenFileChooser(); - getStorageFormatManager().registerFileFilters(openDialog); - if (openDialog.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { - StorageFormat foundFormat = getStorageFormatManager().findStorageFormat(openDialog.getFileFilter()); - // ricardo_padilha: if there is no format associated, - // try to find one that supports the file - if (foundFormat == null) { - foundFormat = getStorageFormatManager().findStorageFormat(openDialog.getSelectedFile()); - } - if (foundFormat != null) { - loadDrawing(foundFormat, openDialog.getSelectedFile().getAbsolutePath()); - } - else { - showStatus("Not a valid file format: " + openDialog.getFileFilter().getDescription()); - } - } - } - - /** - * Shows a file dialog and saves drawing. - */ - public void promptSaveAs() { - if (view() != null) { - toolDone(); - JFileChooser saveDialog = createSaveFileChooser(); - getStorageFormatManager().registerFileFilters(saveDialog); - - if (saveDialog.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { - StorageFormat foundFormat = getStorageFormatManager().findStorageFormat(saveDialog.getFileFilter()); - // ricardo_padilha: if there is no format associated, - // try to find one that supports the file - if (foundFormat == null) { - foundFormat = getStorageFormatManager().findStorageFormat(saveDialog.getSelectedFile()); - } - if (foundFormat != null) { - saveDrawing(foundFormat, saveDialog.getSelectedFile().getAbsolutePath()); - } - else { - showStatus("Not a valid file format: " + saveDialog.getFileFilter().getDescription()); - } - } - } - } - - /** - * Create a file chooser for the open file dialog. Subclasses may override this - * method in order to customize the open file dialog. - */ - protected JFileChooser createOpenFileChooser() { - JFileChooser openDialog = new JFileChooser(); - openDialog.setDialogType(JFileChooser.OPEN_DIALOG); - openDialog.setDialogTitle("Open File..."); - return openDialog; - } - - /** - * Create a file chooser for the save file dialog. Subclasses may override this - * method in order to customize the save file dialog. - */ - protected JFileChooser createSaveFileChooser() { - JFileChooser saveDialog = new JFileChooser(); - saveDialog.setDialogType(JFileChooser.SAVE_DIALOG); - saveDialog.setDialogTitle("Save File..."); - return saveDialog; - } - - /** - * Prints the drawing. - */ - public void print() { - tool().deactivate(); - PrintJob printJob = getToolkit().getPrintJob(this, "Print Drawing", null); - - if (printJob != null) { - Graphics pg = printJob.getGraphics(); - - if (pg != null) { - ((StandardDrawingView)view()).printAll(pg); - pg.dispose(); // flush page - } - printJob.end(); - } - tool().activate(); - } - - /** - * Save a Drawing in a file - */ - protected void saveDrawing(StorageFormat storeFormat, String file) { - // Need a better alert than this. - if (view() == null) { - return; - } - try { - String name = storeFormat.store(file, view().drawing()); - view().drawing().setTitle(name); - setDrawingTitle(name); - } - catch (IOException e) { - showStatus(e.toString()); - } - } - - /** - * Load a Drawing from a file - */ - protected void loadDrawing(StorageFormat restoreFormat, String file) { - try { - Drawing restoredDrawing = restoreFormat.restore(file); - if (restoredDrawing != null) { - restoredDrawing.setTitle(file); - newWindow(restoredDrawing); - } - else { - showStatus("Unknown file type: could not open file '" + file + "'"); - } - } - catch (IOException e) { - showStatus("Error: " + e); - } - } - - /** - * Switch to a new Look&Feel - */ - private void newLookAndFeel(String landf) { - try { - UIManager.setLookAndFeel(landf); - SwingUtilities.updateComponentTreeUI(this); - } - catch (Exception e) { - System.err.println(e); - } - } - - /** - * Set the title of the currently selected drawing - */ - protected void setDrawingTitle(String drawingTitle) { - if (getDefaultDrawingTitle().equals(drawingTitle)) { - setTitle(getApplicationName()); - } - else { - setTitle(getApplicationName() + " - " + drawingTitle); - } - } - - /** - * Return the title of the currently selected drawing - */ - protected String getDrawingTitle() { - return view().drawing().getTitle(); - } - - /** - * Set the name of the application build from this skeleton application - */ - public void setApplicationName(String applicationName) { - fApplicationName = applicationName; - } - - /** - * Return the name of the application build from this skeleton application - */ - public String getApplicationName() { - return fApplicationName; - } - - protected void setUndoManager(UndoManager newUndoManager) { - myUndoManager = newUndoManager; - } - - public UndoManager getUndoManager() { - return myUndoManager; - } - - protected VersionControlStrategy getVersionControlStrategy() { - return new StandardVersionControlStrategy(this); - } - - /** - * Subclasses should override this method to specify to which versions of - * JHotDraw they are compatible. A string array is returned so it is possible - * to specify several version numbers of JHotDraw to which the application - * is compatible with. - * - * @return all versions number of JHotDraw the application is compatible with. - */ - public String[] getRequiredVersions() { - String[] requiredVersions = new String[1]; - // return the version of the package we are in - requiredVersions[0] = VersionManagement.getPackageVersion(DrawApplication.class.getPackage()); - return requiredVersions; - } - - public String getDefaultDrawingTitle() { - return fgUntitled; - } - - protected DesktopListener getDesktopListener() { - return fDesktopListener; - } - - protected void setDesktopListener(DesktopListener desktopPaneListener) { - fDesktopListener = desktopPaneListener; - } - - protected DesktopListener createDesktopListener() { - return new DesktopListener() { - public void drawingViewAdded(DesktopEvent dpe) { - DrawingView dv = dpe.getDrawingView(); - fireViewCreatedEvent(dv); - } - public void drawingViewRemoved(DesktopEvent dpe) { - DrawingView dv = dpe.getDrawingView(); - // remove undo/redo activities which operate on this DrawingView - getUndoManager().clearUndos(dv); - getUndoManager().clearRedos(dv); - fireViewDestroyingEvent(dv); - checkCommandMenus(); - } - public void drawingViewSelected(DesktopEvent dpe) { - DrawingView dv = dpe.getDrawingView(); - //get the current selection and freeze it. - if (dv != null) { - if (dv.drawing() != null) - dv.unfreezeView(); - } - setView(dv); - } - }; - } - - protected Iconkit createIconkit() { - return new Iconkit(this); - } - - protected void setIconkit(Iconkit newIconkit) { - fIconkit = newIconkit; - } - - protected Iconkit getIconkit() { - return fIconkit; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib.jdo b/JHotDraw/src/CH/ifa/draw/contrib.jdo deleted file mode 100644 index 78669405d..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib.jdo +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="CH.ifa.draw.contrib"> -<!-- - <class name="ComponentFigure"> - </class> ---> - <class name="ChopDiamondConnector"> - </class> - <class name="ChopPolygonConnector"> - </class> - <class name="DiamondFigure"> - </class> - <class name="GraphicalCompositeFigure"> - </class> - <class name="PolygonFigure"> - </class> - <class name="TextAreaFigure"> - </class> - <class name="TriangleFigure"> - </class> - <class name="SimpleLayouter"> - <field name="myInsets"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="StandardLayouter"> - </class> - </package> -</jdo> diff --git a/JHotDraw/src/CH/ifa/draw/contrib/AutoscrollHelper.java b/JHotDraw/src/CH/ifa/draw/contrib/AutoscrollHelper.java deleted file mode 100644 index 00a433061..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/AutoscrollHelper.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * @(#)AutoscrollHelper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import java.awt.*; - -/** - * A helper class for implementing autoscrolling - * - * @author SourceForge(dnoyeb) aka C.L. Gilbert - * @version <$CURRENT_VERSION$> - */ -public abstract class AutoscrollHelper { - private int autoscrollMargin = 20; - private Insets autoscrollInsets = new Insets(0, 0, 0, 0); - public AutoscrollHelper(int margin) { - autoscrollMargin = margin; - } - public void setAutoscrollMargin(int margin) { - autoscrollMargin = margin; - } - public int getAutoscrollMargin() { - return autoscrollMargin; - } - - /** - * Override this method to call getSize() on your Component - * @see Component#getSize - */ - public abstract Dimension getSize(); - - /** - * Override this method to call getVisibleRect() on your JComponent - * @see javax.swing.JComponent#getVisibleRect - */ - public abstract Rectangle getVisibleRect(); - - /** - * Override this method to call scrollRectToVisible(Rectangle aRect) on - * your component - * @see javax.swing.JComponent#scrollRectToVisible - */ - public abstract void scrollRectToVisible(Rectangle aRect); - /** - * Part of the autoscrolls interface - * - */ - public void autoscroll(Point location) { - //System.out.println("mouse at " + location); - int top = 0, left = 0, bottom = 0, right = 0; - Dimension size = getSize(); - Rectangle rect = getVisibleRect(); - int bottomEdge = rect.y + rect.height; - int rightEdge = rect.x + rect.width; - if (location.y - rect.y <= autoscrollMargin && rect.y > 0) - top = autoscrollMargin; - if (location.x - rect.x <= autoscrollMargin && rect.x > 0) - left = autoscrollMargin; - if (bottomEdge - location.y <= autoscrollMargin && bottomEdge < size.height) - bottom = autoscrollMargin; - if (rightEdge - location.x <= autoscrollMargin && rightEdge < size.width) - right = autoscrollMargin; - rect.x += right - left; - rect.y += bottom - top; - scrollRectToVisible(rect); - } - public Insets getAutoscrollInsets() { - Dimension size = getSize(); - Rectangle rect = getVisibleRect(); - autoscrollInsets.top = rect.y + autoscrollMargin; - autoscrollInsets.left = rect.x + autoscrollMargin; - autoscrollInsets.bottom = size.height - (rect.y + rect.height) + autoscrollMargin; - autoscrollInsets.right = size.width - (rect.x + rect.width) + autoscrollMargin; - return autoscrollInsets; - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/CTXCommandMenu.java b/JHotDraw/src/CH/ifa/draw/contrib/CTXCommandMenu.java deleted file mode 100644 index f75cc4365..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/CTXCommandMenu.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib; - -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.*; -import javax.swing.*; - -import CH.ifa.draw.framework.JHotDrawRuntimeException; -import CH.ifa.draw.util.Command; -import CH.ifa.draw.util.CommandListener; -import CH.ifa.draw.util.CommandMenu; - -/** - * A Command enabled menu. Selecting a menu item - * executes the corresponding command. - * - * @author Eduardo Francos (adapted from initial implementation by Wolfram Kaiser) - * @created 2 mai 2002 - * @see Command - * @version <$CURRENT_VERSION$> - */ -public class CTXCommandMenu extends JMenu implements ActionListener, CommandListener { - - public CTXCommandMenu(String name) { - super(name); - } - - /** - * Adds a command to the menu. The item's label is - * the command's name. - */ - public synchronized void add(Command command) { - addMenuItem(new CommandMenuItem(command)); - } - - /** - * Adds a command with the given short cut to the menu. The item's label is - * the command's name. - */ - public synchronized void add(Command command, MenuShortcut shortcut) { - addMenuItem(new CommandMenuItem(command, shortcut.getKey())); - } - - /** - * Adds a command with the given short cut to the menu. The item's label is - * the command's name. - */ - public synchronized void addCheckItem(Command command) { - addMenuItem(new CommandCheckBoxMenuItem(command)); - } - - /** - * Adds a command menu item - * - * @param item the command menu item - */ - public synchronized void add(CommandMenuItem item) { - addMenuItem(item); - } - - /** - * Adds a command checkbox menu item - * - * @param checkItem the checkbox item - */ - public synchronized void add(CommandCheckBoxMenuItem checkItem) { - addMenuItem(checkItem); - } - - /** - * Adds a normal menu item to the menu - * - * @param m The menu item - */ - protected void addMenuItem(JMenuItem m) { - m.addActionListener(this); - add(m); - ((CommandHolder)m).getCommand().addCommandListener(this); - } - - /** - * Removes a command item from the menu - * - * @param command the command tor emove - */ - public synchronized void remove(Command command) { - throw new JHotDrawRuntimeException("not implemented"); - } - - /** - * Removes an item from the menu - * - * @param item the item to remove - */ - public synchronized void remove(MenuItem item) { - throw new JHotDrawRuntimeException("not implemented"); - } - - /** - * Changes the enabling/disabling state of a named menu item. - * - * @param name Description of the Parameter - * @param state Description of the Parameter - */ - public synchronized void enable(String name, boolean state) { - for (int i = 0; i < getItemCount(); i++) { - JMenuItem item = getItem(i); - if (name.equals(item.getText())) { - item.setEnabled(state); - return; - } - } - } - - /** Description of the Method */ - public synchronized void checkEnabled() { - int j = 0; - for (int i = 0; i < getMenuComponentCount(); i++) { - JMenuItem currentItem = getItem(i); - if (currentItem instanceof CommandMenu) { - ((CommandMenu)currentItem).checkEnabled(); - } - else if (currentItem instanceof CTXCommandMenu) { - ((CTXCommandMenu)currentItem).checkEnabled(); - } - else if (currentItem instanceof CommandHolder) { - currentItem.setEnabled(((CommandHolder)currentItem).getCommand().isExecutable()); - } - else if (currentItem instanceof Command) { - currentItem.setEnabled(((Command)currentItem).isExecutable()); - } - j++; - } - } - - /** - * Executes the command. - * - * @param e Description of the Parameter - */ - public void actionPerformed(ActionEvent e) { - int j = 0; - Object source = e.getSource(); - for (int i = 0; i < getItemCount(); i++) { - // ignore separators - // a separator has a hyphen as its label - if (getMenuComponent(i) instanceof JSeparator) { - continue; - } - JMenuItem item = getItem(i); - if (source == item) { - Command cmd = ((CommandHolder)item).getCommand(); - cmd.execute(); - break; - } - j++; - } - } - - /** - * Description of the Method - * - * @param commandEvent Description of the Parameter - */ - public void commandExecuted(EventObject commandEvent) { -// checkEnabled(); - } - - /** - * Description of the Method - * - * @param commandEvent Description of the Parameter - */ - public void commandExecutable(EventObject commandEvent) { -// checkEnabled(); - } - - /** - * Description of the Method - * - * @param commandEvent Description of the Parameter - */ - public void commandNotExecutable(EventObject commandEvent) { -// checkEnabled(); - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/contrib/CTXWindowMenu.java b/JHotDraw/src/CH/ifa/draw/contrib/CTXWindowMenu.java deleted file mode 100644 index b578fc022..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/CTXWindowMenu.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib; - -import java.awt.event.*; -import java.beans.*; -import javax.swing.*; -import javax.swing.event.*; - -import CH.ifa.draw.contrib.CTXCommandMenu; -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.standard.AbstractCommand; - -/** - * Menu component that handles the functionality expected of a standard - * "Windows" menu for MDI applications. - * - * @author Eduardo Francos (adapted from original implementation by Wolfram Kaiser) - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class CTXWindowMenu extends CTXCommandMenu { - - MDIDesktopPane desktop; //increased visibility to avoid compilation errors - private CommandMenuItem cascadeCommand; - private CommandMenuItem tileHCommand; - private CommandMenuItem tileVCommand; - private CommandMenuItem arrangeHCommand; - private CommandMenuItem arrangeVCommand; - private int staticItems; - - /** - *Constructor for the CTXWindowsMenu object - * - * @param newText the menu's text - * @param desktop the MDI desktop - * @param editor the editor - */ - public CTXWindowMenu(String newText, MDIDesktopPane newDesktop, DrawingEditor newEditor) { - super(newText); - this.desktop = newDesktop; - - cascadeCommand = new CommandMenuItem( - new AbstractCommand("Cascade", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.cascadeFrames(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - tileHCommand = new CommandMenuItem( - new AbstractCommand("Tile Horizontally", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.tileFramesHorizontally(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - tileVCommand = new CommandMenuItem( - new AbstractCommand("Tile Vertically", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.tileFramesVertically(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - arrangeHCommand = new CommandMenuItem( - new AbstractCommand("Arrange Horizontally", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.arrangeFramesHorizontally(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - arrangeVCommand = new CommandMenuItem( - new AbstractCommand("Arrange Vertically", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.arrangeFramesVertically(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - addMenuListener( - new MenuListener() { - public void menuCanceled(MenuEvent e) { } - - public void menuDeselected(MenuEvent e) { - removeWindowsList(); - } - - public void menuSelected(MenuEvent e) { - buildChildMenus(); - } - }); - - add(cascadeCommand); - add(tileHCommand); - add(tileVCommand); - add(arrangeHCommand); - add(arrangeVCommand); - staticItems = 5; - } - - /** removes the windows names */ - protected void removeWindowsList() { - // remove all items above static the items - while (this.getItemCount() > staticItems) { - remove(staticItems); - } - } - - /* - * Sets up the children menus depending on the current desktop state - */ - /** Description of the Method */ - void buildChildMenus() { //increased visibility to avoid compilation errors - JInternalFrame[] array = desktop.getAllFrames(); - - // update window organization commands - cascadeCommand.setEnabled(array.length > 0); - tileHCommand.setEnabled(array.length > 0); - tileVCommand.setEnabled(array.length > 0); - arrangeHCommand.setEnabled(array.length > 0); - arrangeVCommand.setEnabled(array.length > 0); - - if (array.length == 0) { - return; - } - - addSeparator(); - - for (int i = 0; i < array.length; i++) { - ChildMenuItem menu = new ChildMenuItem(array[i]); - menu.setState(i == 0); - menu.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent ae) { - JInternalFrame frame = ((ChildMenuItem)ae.getSource()).getFrame(); - frame.moveToFront(); - try { - frame.setSelected(true); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - } - }); - menu.setIcon(array[i].getFrameIcon()); - add(menu); - } - } - - /* - * This JCheckBoxMenuItem descendant is used to track the child frame that corresponds - * to a give menu. - */ - class ChildMenuItem extends JCheckBoxMenuItem { - private JInternalFrame frame; - - /** - *Constructor for the ChildMenuItem object - * - * @param frame Description of the Parameter - */ - public ChildMenuItem(JInternalFrame newFrame) { - super(newFrame.getTitle()); - frame = newFrame; - } - - /** - * Gets the frame attribute of the ChildMenuItem object - * - * @return The frame value - */ - public JInternalFrame getFrame() { - return frame; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/ChopDiamondConnector.java b/JHotDraw/src/CH/ifa/draw/contrib/ChopDiamondConnector.java deleted file mode 100644 index 13c634080..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/ChopDiamondConnector.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * @(#)ChopDiamondConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import java.awt.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.ChopBoxConnector; -import CH.ifa.draw.util.Geom; - -/** - * A ChopDiamondConnector locates connection points by choping the - * connection between the centers of the two figures at the edge of - * a diamond figure. - * - * @see Connector - * - * @author Erich Gamma - * @version <$CURRENT_VERSION$> - */ -public class ChopDiamondConnector extends ChopBoxConnector { - /** - * Serialization support. - * Needs to be fixed. - */ - private static final long serialVersionUID = -1461450322512395462L; - - public ChopDiamondConnector() { - // only used for Storable implementation - } - - public ChopDiamondConnector(Figure owner) { - super(owner); - } - - /** - * Return an appropriate connection point on the edge of a diamond figure - */ - protected Point chop(Figure target, Point from) { - Rectangle r = target.displayBox(); - // Center point - Point c1 = new Point(r.x + r.width/2, r.y + (r.height/2)); - Point p2 = new Point(r.x + r.width/2, r.y + r.height); - Point p4 = new Point(r.x + r.width/2, r.y); - - // If overlapping, just return the opposite corners - if (r.contains(from)) { - if (from.y > r.y && from.y < (r.y +r.height/2)) { - return p2; - } - else { - return p4; - } - } - - // Calculate angle to determine quadrant - double ang = Geom.pointToAngle(r, from); - - // Dermine line points - Point p1 = new Point(r.x + r.width , r.y + (r.height/2)); - Point p3 = new Point(r.x , r.y + (r.height/2)); - Point rp = null; // This will be returned - - // Get the intersection with edges - if (ang > 0 && ang < 1.57) { - rp = Geom.intersect(p1.x, p1.y, p2.x, p2.y, c1.x, c1.y, from.x, from.y); - } - else if (ang > 1.575 && ang < 3.14) { - rp = Geom.intersect(p2.x, p2.y, p3.x, p3.y, c1.x, c1.y, from.x, from.y); - } - else if (ang > -3.14 && ang < -1.575) { - rp = Geom.intersect(p3.x, p3.y, p4.x, p4.y, c1.x, c1.y, from.x, from.y); - } - else if (ang > -1.57 && ang < 0) { - rp = Geom.intersect(p4.x, p4.y, p1.x, p1.y, c1.x, c1.y, from.x, from.y); - } - - // No proper edge found, we should send one of four corners - if (rp == null) { - rp = Geom.angleToPoint(r, ang); - } - - return rp; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/ChopPolygonConnector.java b/JHotDraw/src/CH/ifa/draw/contrib/ChopPolygonConnector.java deleted file mode 100644 index 5a325055e..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/ChopPolygonConnector.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @(#)ChopPolygonConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import java.awt.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; - -/** - * A ChopPolygonConnector locates a connection point by - * chopping the connection at the polygon boundary. - * - * @author Erich Gamma - * @version <$CURRENT_VERSION$> - */ -public class ChopPolygonConnector extends ChopBoxConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -156024908227796826L; - - public ChopPolygonConnector() { - } - - public ChopPolygonConnector(Figure owner) { - super(owner); - } - - protected Point chop(Figure target, Point from) { - return ((PolygonFigure)target).chop(from); - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/contrib/ClippingUpdateStrategy.java b/JHotDraw/src/CH/ifa/draw/contrib/ClippingUpdateStrategy.java deleted file mode 100644 index bee3b8a0f..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/ClippingUpdateStrategy.java +++ /dev/null @@ -1,66 +0,0 @@ -package CH.ifa.draw.contrib; - -import java.awt.Graphics; -import java.awt.Rectangle; -import java.util.Vector; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.FigureEnumerator; - -/** - * The ClippingUpdateStrategy will only draw those Figures in the DrawingView - * which intersect the Graphic's clipping rectangle. - * - * @author Aviv Hurvitz - */ -public class ClippingUpdateStrategy implements Painter { - - public ClippingUpdateStrategy() { - super(); - } - - /** - * @see CH.ifa.draw.framework.Painter#draw(Graphics, DrawingView) - */ - public void draw(Graphics g, DrawingView view) { - Rectangle viewClipRectangle = g.getClipBounds(); - - if (viewClipRectangle == null) { - // it seems clip is always set, but nevertheless handle it - view.drawAll(g); - return; - } - - FigureEnumeration fe = view.drawing().figures(); - - // it's better to start big than to do Log(nFigures) reallocations - Vector v = new Vector(1000); - - // create a List of the figures within the clip rectangle - while (fe.hasNextFigure()) { - Figure fig = fe.nextFigure(); - Rectangle r = fig.displayBox(); - - // grow Rectangles that have 0 width or height, since - // Rectangle.intersects() returns false on them. - // These Rectangles are common, as they are the typical bounding - // boxes of horizontal and vertical lines. - // see my (regression) bug report on Sun's site: - // http://developer.java.sun.com/developer/bugParade/bugs/4643428.html - if (r.width <= 0) { - r.width = 1; - } - if (r.height <= 0) { - r.height = 1; - } - - if (r.intersects(viewClipRectangle)) { - v.add(fig); - } - } - - // draw the figures in the clip rectangle - FigureEnumeration clippedFE = new FigureEnumerator(v); - view.draw(g, clippedFE); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/CommandCheckBoxMenuItem.java b/JHotDraw/src/CH/ifa/draw/contrib/CommandCheckBoxMenuItem.java deleted file mode 100644 index 4973028f2..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/CommandCheckBoxMenuItem.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib; - -import javax.swing.JCheckBoxMenuItem; -import CH.ifa.draw.util.Command; -import javax.swing.Icon; - -/** - * CommandCheckBoxMenuItem implements a command that can be added to a menu - * as a checkbox menu item - * - * @author Eduardo Francos - InContext - * @version <$CURRENT_VERSION$> - */ - -public class CommandCheckBoxMenuItem extends JCheckBoxMenuItem - implements CommandHolder -{ - Command fCommand; - - /** - * Creates an initially unselected check box menu item - * with the specified command - */ - public CommandCheckBoxMenuItem(Command command) { - super(command.name()); - setCommand(command); - } - - /** - * Creates an initially unselected check box menu item with an icon and - * the specified command. - * - * @param icon the icon of the CheckBoxMenuItem. - */ - public CommandCheckBoxMenuItem(Command command, Icon icon) { - super(command.name(), icon); - setCommand(command); - } - - /** - * Creates a check box menu item with the specified command and selection state. - * - * @param command the command to be executed upon menu selection - * @param b the selected state of the check box menu item - */ - public CommandCheckBoxMenuItem(Command command, boolean b) { - super(command.name(), b); - setCommand(command); - } - - /** - * Creates a check box menu item with the specified text, icon, and selection state. - * - * @param command the command to be executed upon menu selection - * @param icon the icon of the check box menu item - * @param b the selected state of the check box menu item - */ - public CommandCheckBoxMenuItem(Command command, Icon icon, boolean b) { - super(command.name(), icon, b); - setCommand(command); - } - - - /** - * Gets the command attribute of the CommandMenuItem object - * - * @return The command value - */ - public Command getCommand() { - return fCommand; - } - - - /** - * Sets the command attribute of the CommandMenuItem object - * - * @param newCommand The new command value - */ - public void setCommand(Command newCommand) { - fCommand = newCommand; - } - -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/CommandHolder.java b/JHotDraw/src/CH/ifa/draw/contrib/CommandHolder.java deleted file mode 100644 index 2a91895ed..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/CommandHolder.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib; - -import CH.ifa.draw.util.Command; - -/** - * CommandHolder defines the interface for wrapper objects holding a Command, - * like menu items or toolbar tools. - * - * @author Eduardo Francos - InContext - * @created 8 mai 2002 - * @version <$CURRENT_VERSION$> - */ - -public interface CommandHolder { - /** - * Gets the command of the CommandHolder object - * - * @return The command value - */ - public Command getCommand(); - - - /** - * Sets the command of the CommandHolder object - * - * @param newCommand The new command value - */ - public void setCommand(Command newCommand); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/CommandMenuItem.java b/JHotDraw/src/CH/ifa/draw/contrib/CommandMenuItem.java deleted file mode 100644 index d7079ef7c..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/CommandMenuItem.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib; - -import CH.ifa.draw.util.Command; -import javax.swing.JMenuItem; -import javax.swing.Icon; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; - -/** - * CommandMenuItem implements a command that can be added to a menu - * as a menu item - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class CommandMenuItem extends JMenuItem implements CommandHolder, ActionListener { - - private Command fCommand; - - /** - * Creates a menuItem with no set text or icon. - */ - public CommandMenuItem(Command command) { - super(command.name()); - setCommand(command); - addActionListener(this); - } - - /** - * Creates a menuItem with an icon. - * - * @param icon the icon of the MenuItem. - */ - public CommandMenuItem(Command command, Icon icon) { - super(command.name(), icon); - setCommand(command); - addActionListener(this); - } - - /** - * Creates a menuItem with the specified text and - * keyboard mnemonic. - * - * @param command the command to be executed upon menu selection - * @param mnemonic the keyboard mnemonic for the MenuItem - */ - public CommandMenuItem(Command command, int mnemonic) { - super(command.name(), mnemonic); - setCommand(command); - } - - /** - * Gets the command attribute of the CommandMenuItem object - * - * @return The command value - */ - public Command getCommand() { - return fCommand; - } - - /** - * Sets the command attribute of the CommandMenuItem object - * - * @param newCommand The new command value - */ - public void setCommand(Command newCommand) { - fCommand = newCommand; - } - - /** - * Executes the command. - */ - public void actionPerformed(ActionEvent e) { - getCommand().execute(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/ComponentFigure.java b/JHotDraw/src/CH/ifa/draw/contrib/ComponentFigure.java deleted file mode 100644 index bc2d974e4..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/ComponentFigure.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * @(#)ComponentFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.figures.AttributeFigure; -import CH.ifa.draw.standard.BoxHandleKit; -import CH.ifa.draw.standard.HandleEnumerator; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.CollectionsFactory; - -import java.awt.Component; -import java.awt.Rectangle; -import java.awt.Point; -import java.awt.Graphics; -import java.util.List; - -/** - * @author Ming Fang - * @version <$CURRENT_VERSION$> - */ -public class ComponentFigure extends AttributeFigure { - private Rectangle bounds; - - /** Holds value of property component. */ - private Component component; - - private ComponentFigure() { - bounds = new Rectangle(); - } - - /** - * @param newComponent a lightweight component - */ - public ComponentFigure(Component newComponent) { - this(); - setComponent(newComponent); - } - - /** - * Changes the display box of a figure. This method is - * always implemented in figure subclasses. - * It only changes - * the displaybox and does not announce any changes. It - * is usually not called by the client. Clients typically call - * displayBox to change the display box. - * - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void basicDisplayBox(Point origin, Point corner) { - bounds = new Rectangle(origin); - bounds.add(corner); - } - - /** - * Moves the figure. This is the - * method that subclassers override. Clients usually - * call displayBox. - * @see #moveBy - */ - protected void basicMoveBy(int dx, int dy) { - bounds.translate(dx, dy); - } - - /** - * Gets the display box of a figure - * @see #basicDisplayBox - */ - public Rectangle displayBox() { - return new Rectangle(bounds); - } - - /** - * Returns the handles used to manipulate - * the figure. Handles is a Factory Method for - * creating handle objects. - * - * @return a type-safe iterator of handles - * @see Handle - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - /** - * Getter for property component. - * @return Value of property component. - */ - public Component getComponent() { - return this.component; - } - - /** - * Setter for property component. - * - * @param newComponent New value of property component. - */ - protected void setComponent(Component newComponent) { - this.component = newComponent; - } - - /** - * Draws the figure. - * @param g the Graphics to draw into - */ - public void draw(Graphics g) { - // AWT code - getComponent().setBounds(displayBox()); - //must create a new graphics with a different cordinate - Graphics componentG = g.create(bounds.x, bounds.y, bounds.width, bounds.height); - getComponent().paint(componentG); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/CompositeFigureCreationTool.java b/JHotDraw/src/CH/ifa/draw/contrib/CompositeFigureCreationTool.java deleted file mode 100644 index 5cb4a1b39..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/CompositeFigureCreationTool.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * @(#)CompositeFigureCreationTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.standard.CreationTool; -import CH.ifa.draw.standard.CompositeFigure; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.framework.DrawingView; - -import java.awt.event.MouseEvent; -import java.awt.*; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class CompositeFigureCreationTool extends CreationTool { - private CompositeFigure myContainerFigure; - - public CompositeFigureCreationTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - figure = figure.getDecoratedFigure(); - if (figure instanceof CompositeFigure) { - setContainerFigure((CompositeFigure)figure); - setCreatedFigure(createFigure()); - setAddedFigure((getContainerFigure().add(getCreatedFigure()))); - getAddedFigure().displayBox(new Point(x, y), new Point(x, y)); - } - else { - toolDone(); - } - } - else { - toolDone(); - } - } - - public void mouseMove(MouseEvent e, int x, int y) { - if ((getContainerFigure() != null) && !getContainerFigure().containsPoint(e.getX(), e.getY())) { - // here you might want to constrain the mouse movements to the size of the - // container figure: not sure whether this works... - toolDone(); - } - else { - super.mouseMove(e, x, y); - } - } - - protected void setContainerFigure(CompositeFigure newContainerFigure) { - myContainerFigure = newContainerFigure; - } - - public CompositeFigure getContainerFigure() { - return myContainerFigure; - } - - protected void toolDone() { - setCreatedFigure(null); - setAddedFigure(null); - setContainerFigure(null); - editor().toolDone(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/CustomSelectionTool.java b/JHotDraw/src/CH/ifa/draw/contrib/CustomSelectionTool.java deleted file mode 100644 index d2cb8e1ea..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/CustomSelectionTool.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * @(#)CustomSelectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.contrib.zoom.ZoomDrawingView; -import CH.ifa.draw.standard.*; -import javax.swing.JPopupMenu; -import java.awt.*; -import java.awt.event.*; - -/** - * A SelectionTool, which recognizes double clicks and popup menu triggers. - * If a double click or popup trigger is encountered a hook method is called, - * which handles the event. This methods can be overriden in subclasse to - * provide customized behaviour. - * Popup menus must be registered with a Figure using the setAttribute() method. - * The key which associates a popup menu as an attribute is Figure.POPUP_MENU. - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class CustomSelectionTool extends SelectionTool { - - /** - * Create an instance of this SelectionTool for the given view - * - * @param editor DrawingEditor for which the SelectionTool gets the active view - */ - public CustomSelectionTool(DrawingEditor editor) { - super( editor ); - } - - /** - * MouseListener method for mouseDown events. If the popup trigger has been - * activated, then the appropriate hook method is called. - * - * @param e MouseEvent which should be interpreted - * @param x x coordinate of the MouseEvent - * @param y y coordinate of the MouseEvent - */ - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - // isPopupTrigger() at mouseDown() is only notified at UNIX systems - if (e.isPopupTrigger()) { - handlePopupMenu(e, x, y); - } - else { - super.mouseDown(e, x, y); - handleMouseDown(e, x, y); - } - } - - /** - * MouseListener method for mouseDrag events. Usually, mouse drags are - * ignored for popup menus or double clicks. - * - * @param e MouseEvent which should be interpreted - * @param x x coordinate of the MouseEvent - * @param y y coordinate of the MouseEvent - */ - public void mouseDrag(MouseEvent e, int x, int y) { - if (!e.isPopupTrigger()) { - super.mouseDrag(e, x, y); - } - } - - /** - * MouseListener method for mouseUp events. Depending on the kind of event - * the appropriate hook method is called (popupMenuUp for popup trigger, - * doubleMouseClick for a double click, and mouseUp() and mouseClick() for - * normal mouse clicks). - * - * @param e MouseEvent which should be interpreted - * @param x x coordinate of the MouseEvent - * @param y y coordinate of the MouseEvent - */ - public void mouseUp(MouseEvent e, int x, int y) { - if (e.isPopupTrigger()) { - handlePopupMenu(e, x, y); - super.mouseUp(e, x, y); - } - else if (e.getClickCount() == 2) { - super.mouseUp(e, x, y); - handleMouseDoubleClick(e, x, y); - } - else { - super.mouseUp(e, x, y); - handleMouseUp(e, x, y); - handleMouseClick(e, x, y); - } - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse down. - */ - protected void handleMouseDown(MouseEvent e, int x, int y) { - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse up. - */ - protected void handleMouseUp(MouseEvent e, int x, int y) { - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse click. - */ - protected void handleMouseClick(MouseEvent e, int x, int y) { - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse double click. - */ - protected void handleMouseDoubleClick(MouseEvent e, int x, int y) { - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a popup trigger. - */ - protected void handlePopupMenu(MouseEvent e, int x, int y) { - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - Object attribute = figure.getAttribute(FigureAttributeConstant.POPUP_MENU); - if (attribute == null) { - figure = drawing().findFigureInside(e.getX(), e.getY()); - } - if (figure != null) { - showPopupMenu(figure, e.getX(), e.getY(), e.getComponent()); - } - } - } - - /** - * This method displays a popup menu, if there is one registered with the - * Figure (the Figure's attributes are queried for Figure.POPUP_MENU which - * is used to indicate an association of a popup menu with the Figure). - * - * @param figure Figure for which a popup menu should be displayed - * @param x x coordinate where the popup menu should be displayed - * @param y y coordinate where the popup menu should be displayed - * @param comp Component which invoked the popup menu - */ - protected void showPopupMenu(Figure figure, int x, int y, Component comp) { - Object attribute = figure.getAttribute(FigureAttributeConstant.POPUP_MENU); - if ((attribute != null) && (attribute instanceof JPopupMenu)) { - JPopupMenu popup = (JPopupMenu)attribute; - if (popup instanceof PopupMenuFigureSelection) { - ((PopupMenuFigureSelection)popup).setSelectedFigure(figure); - } - // Calculate position on physical screen based - // on x,y coordinates - Point newLocation; - try { - newLocation = comp.getLocationOnScreen(); - } catch (IllegalComponentStateException e) { - // For some reason, the component - // apparently isn't showing on the - // screen (huh?). Never mind - don't - // show the popup.. - return; - } - // If this is a ZoomDrawingView, we'll need to - // compensate here too: - if (comp instanceof ZoomDrawingView) { - double scale = ((ZoomDrawingView) comp).getScale(); - x *= scale; - y *= scale; - } - newLocation.translate(x,y); - popup.setLocation(newLocation); - popup.setInvoker(comp); - popup.setVisible(true); - } - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/CustomToolBar.java b/JHotDraw/src/CH/ifa/draw/contrib/CustomToolBar.java deleted file mode 100644 index 62755cc09..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/CustomToolBar.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * @(#)CustomToolBar.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.util.CollectionsFactory; - -import javax.swing.JToolBar; -import javax.swing.JComponent; -import java.util.List; -import java.util.Iterator; -import java.awt.Component; - -/** - * This ToolBar allows to use several panels with tools. It manages each - * panel and enables to swap between them. There can only one panel with - * tools be activated at a time. Currently, only two panels are supported - * (standard tools and edit tools). - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class CustomToolBar extends JToolBar { - - /** - * List containing all tools for the standard ToolBar - */ - private List standardTools; - - /** - * List containing all tools for the edit ToolBar - */ - private List editTools; - - /** - * List containing all tools, which are currently activated - */ - private List currentTools; - - /** - * Flag which determines whether the tool palette must be updated - */ - private boolean needsUpdate; - - /** - * Create a new ToolBar - */ - public CustomToolBar() { - super(); - standardTools = CollectionsFactory.current().createList(); - editTools = CollectionsFactory.current().createList(); - currentTools = standardTools; - needsUpdate = false; - } - - /** - * Switch between the two available palettes with tools - */ - public void switchToolBar() { - if (currentTools == standardTools) { - switchToEditTools(); - } - else { - switchToStandardTools(); - } - } - - /** - * Select the palette with the edit tools - */ - public void switchToEditTools() { - if (currentTools != editTools) { - currentTools = editTools; - needsUpdate = true; - } - } - - /** - * Select the palette with the standard tools - */ - public void switchToStandardTools() { - if (currentTools != standardTools) { - currentTools = standardTools; - needsUpdate = true; - } - } - - /** - * Activate a palette of the ToolBar by setting all Tools - */ - public void activateTools() { - if (!needsUpdate) { - return; - } - else { - removeAll(); - - JComponent currentTool = null; - Iterator iter = currentTools.iterator(); - while (iter.hasNext()) { - currentTool = (JComponent)iter.next(); - super.add(currentTool); - } - validate(); - needsUpdate = false; - } - } - - /** - * Add a new tool the the current palette of the ToolBar - */ - public Component add(Component newTool) { - if (currentTools == editTools) { - editTools.add(newTool); - } - else { - standardTools.add(newTool); - } - needsUpdate = true; - return super.add(newTool); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/Desktop.java b/JHotDraw/src/CH/ifa/draw/contrib/Desktop.java deleted file mode 100644 index 87268b6be..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/Desktop.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)Desktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.DrawingView; - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface Desktop { - public final static int PRIMARY = 0; - public final static int SECONDARY = 1; - public final static int TERTIARY = 2; - - /** - * For those absent minded components that were not paying attention to the - * listener events. - */ - public DrawingView getActiveDrawingView(); - public void addToDesktop(DrawingView dv, int location); - public void removeFromDesktop(DrawingView dv, int location); - public void removeAllFromDesktop(int location); - public DrawingView[] getAllFromDesktop(int location); - - public void updateTitle(String newDrawingTitle); - - public void addDesktopListener(DesktopListener dpl); - public void removeDesktopListener(DesktopListener dpl); -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/DesktopEvent.java b/JHotDraw/src/CH/ifa/draw/contrib/DesktopEvent.java deleted file mode 100644 index f62eadbd9..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/DesktopEvent.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * @(#)DesktopEvent.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.DrawingView; -import java.util.EventObject; - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DesktopEvent extends EventObject { - private DrawingView myDrawingView; - - /** - * Some events require the previous DrawingView (e.g. when a new DrawingView - * is selected). - */ - private DrawingView myPreviousDrawingView; - - public DesktopEvent(Desktop newSource, DrawingView newDrawingView) { - this(newSource, newDrawingView, null); - } - - public DesktopEvent(Desktop newSource, DrawingView newDrawingView, DrawingView newPreviousDV) { - super(newSource); - setDrawingView(newDrawingView); - setPreviousDrawingView(newPreviousDV); - } - - private void setDrawingView(DrawingView newDrawingView) { - myDrawingView = newDrawingView; - } - - public DrawingView getDrawingView() { - return myDrawingView; - } - - private void setPreviousDrawingView(DrawingView newPreviousDrawingView) { - myPreviousDrawingView = newPreviousDrawingView; - } - - public DrawingView getPreviousDrawingView() { - return myPreviousDrawingView; - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/DesktopEventService.java b/JHotDraw/src/CH/ifa/draw/contrib/DesktopEventService.java deleted file mode 100644 index d186a56e2..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/DesktopEventService.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * @(#)DesktopEventService.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.DrawingView; -import CH.ifa.draw.standard.NullDrawingView; -import CH.ifa.draw.util.CollectionsFactory; - -import java.util.List; -import java.util.ListIterator; -import java.awt.event.ContainerAdapter; -import java.awt.event.ContainerListener; -import java.awt.event.ContainerEvent; -import java.awt.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DesktopEventService { - - /** - * Current usage of this List is not thread safe, nor should it need to be. - * If it ever does we can synchronize on the List itself to provide safety. - */ - private java.util.List listeners; - private DrawingView mySelectedView; - private Container myContainer; - private Desktop myDesktop; - - public DesktopEventService(Desktop newDesktop, Container newContainer) { - listeners = CollectionsFactory.current().createList(); - setDesktop(newDesktop); - setContainer(newContainer); - getContainer().addContainerListener(createComponentListener()); - } - - private void setDesktop(Desktop newDesktop) { - myDesktop = newDesktop; - } - - protected Desktop getDesktop() { - return myDesktop; - } - - private void setContainer(Container newContainer) { - myContainer = newContainer; - } - - protected Container getContainer() { - return myContainer; - } - - public void addComponent(Component newComponent) { - getContainer().add(newComponent); - } - - public void removeComponent(DrawingView dv) { - Component[] comps = getContainer().getComponents(); - for (int x = 0; x < comps.length; x++) { - if (dv == Helper.getDrawingView(comps[x])) { - getContainer().remove(comps[x]); - break; - } - } - } - - public void removeAllComponents() { - getContainer().removeAll(); - } - - public void addDesktopListener(DesktopListener dpl) { - listeners.add(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - listeners.remove(dpl); - } - - protected void fireDrawingViewAddedEvent(final DrawingView dv) { - ListIterator li= listeners.listIterator(listeners.size()); - DesktopEvent dpe = createDesktopEvent(getActiveDrawingView(), dv); - while (li.hasPrevious()) { - DesktopListener dpl = (DesktopListener)li.previous(); - dpl.drawingViewAdded(dpe); - } - } - - protected void fireDrawingViewRemovedEvent(final DrawingView dv) { - ListIterator li= listeners.listIterator(listeners.size()); - DesktopEvent dpe = createDesktopEvent(getActiveDrawingView(), dv); - while (li.hasPrevious()) { - DesktopListener dpl = (DesktopListener)li.previous(); - dpl.drawingViewRemoved(dpe); - } - } - - /** - * This method is only called if the selected drawingView has actually changed - */ - protected void fireDrawingViewSelectedEvent(final DrawingView oldView, final DrawingView newView) { - ListIterator li= listeners.listIterator(listeners.size()); - DesktopEvent dpe = createDesktopEvent(oldView, newView); - while (li.hasPrevious()) { - DesktopListener dpl = (DesktopListener)li.previous(); - dpl.drawingViewSelected(dpe); - } - } - - /** - * @param oldView previous active drawing view (may be null because not all events require this information) - */ - protected DesktopEvent createDesktopEvent(DrawingView oldView, DrawingView newView) { - return new DesktopEvent(getDesktop(), newView, oldView); - } - - public DrawingView[] getDrawingViews(Component[] comps) { - List al = CollectionsFactory.current().createList(); - for (int x = 0; x < comps.length; x++) { - DrawingView dv = Helper.getDrawingView(comps[x]); - if (dv != null) { - al.add(dv); - } - } - DrawingView[] dvs = new DrawingView[al.size()]; - al.toArray(dvs); - return dvs; - } - - public DrawingView getActiveDrawingView() { - return mySelectedView; - } - - protected void setActiveDrawingView(DrawingView newActiveDrawingView) { - mySelectedView = newActiveDrawingView; - } - - protected ContainerListener createComponentListener() { - return new ContainerAdapter() { - /** - * If the dv is null assert - * @todo does adding a component always make it the selected view? - * Yes so far because this is only being used on single view Desktops. - * If it is to work on multipleView desktops, the we need to think further. - */ - public void componentAdded(ContainerEvent e) { - DrawingView dv = Helper.getDrawingView((java.awt.Container)e.getChild()); - DrawingView oldView = getActiveDrawingView(); - if (dv != null) { - fireDrawingViewAddedEvent(dv); - setActiveDrawingView(dv); - fireDrawingViewSelectedEvent(oldView, getActiveDrawingView()); - } - } - - /** - * If dv is null assert - * dv will only be null if something thats not a drawingView was - * added to the desktop. it would be simpler if we forbade that. - */ - public void componentRemoved(ContainerEvent e) { - DrawingView dv = Helper.getDrawingView((java.awt.Container)e.getChild()); - if (dv != null) { - DrawingView oldView = getActiveDrawingView(); - setActiveDrawingView(NullDrawingView.getManagedDrawingView(oldView.editor())); - fireDrawingViewSelectedEvent(oldView, getActiveDrawingView()); - fireDrawingViewRemovedEvent(dv); - } - } - }; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/DesktopListener.java b/JHotDraw/src/CH/ifa/draw/contrib/DesktopListener.java deleted file mode 100644 index 23dabd709..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/DesktopListener.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * @(#)DesktopEventService.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -/** - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface DesktopListener { - public void drawingViewAdded(DesktopEvent dpe); - public void drawingViewRemoved(DesktopEvent dpe); - public void drawingViewSelected(DesktopEvent dpe); -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/DiamondFigure.java b/JHotDraw/src/CH/ifa/draw/contrib/DiamondFigure.java deleted file mode 100644 index 5b4e1b0da..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/DiamondFigure.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * @(#)DiamondFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.figures.*; -import java.awt.*; - -/** - * A diamond with vertices at the midpoints of its enclosing rectangle - * - * @author Doug Lea (dl at gee, Tue Feb 25 17:39:44 1997) - * @version <$CURRENT_VERSION$> - */ -public class DiamondFigure extends RectangleFigure { - - public DiamondFigure() { - super(new Point(0,0), new Point(0,0)); - } - - public DiamondFigure(Point origin, Point corner) { - super(origin,corner); - } - - /** - * @return the polygon describing the diamond - **/ - protected Polygon getPolygon() { - Rectangle r = displayBox(); - Polygon p = new Polygon(); - p.addPoint(r.x, r.y+r.height/2); - p.addPoint(r.x+r.width/2, r.y); - p.addPoint(r.x+r.width, r.y+r.height/2); - p.addPoint(r.x+r.width/2, r.y+r.height); - return p; - } - - public void draw(Graphics g) { - Polygon p = getPolygon(); - g.setColor(getFillColor()); - g.fillPolygon(p); - g.setColor(getFrameColor()); - g.drawPolygon(p); - } - - public Insets connectionInsets() { - Rectangle r = displayBox(); - return new Insets(r.height/2, r.width/2, r.height/2, r.width/2); - } - - public boolean containsPoint(int x, int y) { - return getPolygon().contains(x, y); - } - - public Point chop(Point p) { - return PolygonFigure.chop(getPolygon(), p); - } - - public Connector connectorAt(int x, int y) { - return new ChopDiamondConnector(this); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/FloatingTextArea.java b/JHotDraw/src/CH/ifa/draw/contrib/FloatingTextArea.java deleted file mode 100644 index f1dff6fb0..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/FloatingTextArea.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * @(#)FloatingTextArea.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib; - -import java.awt.Color; - -import java.awt.Container; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.Rectangle; -import javax.swing.BorderFactory; -import javax.swing.JEditorPane; -import javax.swing.JScrollPane; - -/** - * A FloatingTextArea overlays an editor on top of an area in a drawing<br> - * @author Eduardo Francos - InContext - * @version <$CURRENT_VERSION$> - * @todo By default JEditorPane uses a tab size of 8. - * I couldn't find how to change this. - * If anybody knows please tell me. - */ -public class FloatingTextArea { - /** - * A scroll pane to allow for vertical scrolling while editing - */ - protected JScrollPane fEditScrollContainer; - /** - * The actual editor - */ - protected JEditorPane fEditWidget; - /** - * The container within which the editor is created - */ - protected Container fContainer; - - - /** - * Constructor for the FloatingTextArea object - */ - public FloatingTextArea() { - fEditWidget = new JEditorPane(); - fEditScrollContainer = new JScrollPane(fEditWidget, - JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - fEditScrollContainer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - fEditScrollContainer.setBorder(BorderFactory.createLineBorder(Color.black)); - } - - - /** - * Creates the overlay within the given container. - * @param container the container - */ - public void createOverlay(Container container) { - createOverlay(container, null); - } - - - /** - * Creates the overlay for the given Container using a - * specific font. - * @param container the container - * @param font the font - */ - public void createOverlay(Container container, Font font) { - container.add(fEditScrollContainer, 0); - if (font != null) { - fEditWidget.setFont(font); - } - fContainer = container; - } - - - /** - * Positions and sizes the overlay. - * @param r the bounding rectangle for the overlay - * @param text the text to edit - */ - public void setBounds(Rectangle r, String text) { - fEditWidget.setText(text); - fEditScrollContainer.setBounds(r.x, r.y, r.width, r.height); - fEditScrollContainer.setVisible(true); - fEditWidget.setCaretPosition(0); - fEditWidget.requestFocus(); - } - - - /** - * Gets the text contents of the overlay. - * @return The text value - */ - public String getText() { - return fEditWidget.getText(); - } - - - /** - * Gets the preferred size of the overlay. - * @param cols Description of the Parameter - * @return The preferredSize value - */ - public Dimension getPreferredSize(int cols) { - return new Dimension(fEditWidget.getWidth(), fEditWidget.getHeight()); - } - - - /** - * Removes the overlay. - */ - public void endOverlay() { - fContainer.requestFocus(); - if (fEditScrollContainer != null) { - fEditScrollContainer.setVisible(false); - fContainer.remove(fEditScrollContainer); - - Rectangle bounds = fEditScrollContainer.getBounds(); - fContainer.repaint(bounds.x, bounds.y, bounds.width, bounds.height); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/GraphicalCompositeFigure.java b/JHotDraw/src/CH/ifa/draw/contrib/GraphicalCompositeFigure.java deleted file mode 100644 index 6eab9f14d..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/GraphicalCompositeFigure.java +++ /dev/null @@ -1,355 +0,0 @@ -/* - * @(#)GraphicalCompositeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; -import CH.ifa.draw.figures.*; -import java.awt.*; -import java.io.*; -import java.util.List; - -/** - * The GraphicalCompositeFigure fills in the gap between a CompositeFigure - * and other figures which mainly have a presentation purpose. The - * GraphicalCompositeFigure can be configured with any Figure which - * takes over the task for rendering the graphical presentation for - * a CompositeFigure. Therefore, the GraphicalCompositeFigure manages - * contained figures like the CompositeFigure does, but delegates - * its graphical presentation to another (graphical) figure which - * purpose it is to draw the container for all contained figures. - * - * The GraphicalCompositeFigure adds to the {@link CompositeFigure CompositeFigure} - * by containing a presentation figure by default which can not be removed. Normally, - * the {@link CompositeFigure CompositeFigure} can not be seen without containing a figure - * because it has no mechanism to draw itself. It instead relies on its contained - * figures to draw themselves thereby giving the {@link CompositeFigure CompositeFigure} its - * appearance. However, the <b>GraphicalCompositeFigure</b>'s presentation figure - * can draw itself even when the <b>GraphicalCompositeFigure</b> contains no other figures. - * The <b>GraphicalCompositeFigure</b> also uses a {@link Layouter Layouter} or layout - * its contained figures. - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class GraphicalCompositeFigure extends CompositeFigure implements Layoutable { - - /** - * Figure which performs all presentation tasks for this - * CompositeFigure as CompositeFigures usually don't have - * an own presentation but present only the sum of all its - * children. - */ - private Figure myPresentationFigure; - - /** - * A Layouter determines how the CompositeFigure should - * be laid out graphically. - */ - private Layouter myLayouter; - - private static final long serialVersionUID = 1265742491024232713L; - - /** - * Default constructor which uses a RectangleFigure as presentation - * figure. This constructor is needed by the Storable mechanism. - */ - public GraphicalCompositeFigure() { - this(new RectangleFigure()); - } - - /** - * Constructor which creates a GraphicalCompositeFigure with - * a given graphical figure for presenting it. - * - * @param newPresentationFigure figure which renders the container - */ - public GraphicalCompositeFigure(Figure newPresentationFigure) { - super(); - setPresentationFigure(newPresentationFigure); - initialize(); - } - - /** - * This method performs additional initialization operations, - * in this case setting the Layouter. - * It is called from the constructors and the clone() method. - * A StandardLayouter is set. - */ - protected void initialize() { - if (getLayouter() != null) { - // use prototype to create new instance - setLayouter(getLayouter().create(this)); - } - else { - setLayouter(new StandardLayouter(this)); - } - } - - /** - * Clones a figure and initializes it - * - * @see Figure#clone - */ - public Object clone() { - Object cloneObject = super.clone(); - ((GraphicalCompositeFigure)cloneObject).initialize(); - return cloneObject; - } - - /** - * Return the display area. This method is delegated to the encapsulated presentation figure. - */ - public Rectangle displayBox() { - return getPresentationFigure().displayBox(); - } - - /** - * Standard presentation method which is delegated to the encapsulated presentation figure. - */ - public void basicDisplayBox(Point origin, Point corner) { - Rectangle r = getLayouter().layout(origin, corner); - // Fix for bug request IDs 548000 and 548032 - // Previously was - // getPresentationFigure().basicDisplayBox(r.getLocation(), new Point(r.width, r.height)); - // The corner transferred to the presentation figure is wrong as it transfers - // the dimension of the resulting rectangle from the layouter instead of the - // lower right corner - getPresentationFigure().basicDisplayBox(r.getLocation(), - new Point((int)r.getMaxX(), (int)r.getMaxY())); - } - - /** - * Standard presentation method which is delegated to the encapsulated presentation figure. - * The presentation figure is moved as well as all contained figures. - */ - protected void basicMoveBy(int dx, int dy) { - super.basicMoveBy(dx, dy); - getPresentationFigure().moveBy(dx, dy); - } - - /** - * Explicit update: an updated involves a layout for all contained figures. - */ - public void update() { - willChange(); - layout(); - change(); - changed(); - } - - /** - * Draw the figure. This method is delegated to the encapsulated presentation figure. - */ - public void draw(Graphics g) { - getPresentationFigure().draw(g); - super.draw(g); - } - - /** - * Return default handles from the presentation figure. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - //return getPresentationFigure().handles(); - } - - /** - * Delegate capabilities for storing and retrieving attributes to a - * CompositeFigure if the encapsulated presentation figure. If no - * presentation figure is found then the superclass' getAttribute() - * will be invoked (which currently returns always "null"). - * - * @param name name of the attribute whose value should be returned - * @return value of the attribute with the given name - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - if (getPresentationFigure() != null) { - return getPresentationFigure().getAttribute(name); - } - else { - return super.getAttribute(name); - } - } - - /** - * Delegate capabilities for storing and retrieving attributes to a - * CompositeFigure if the encapsulated presentation figure. If no - * presentation figure is found then the superclass' getAttribute() - * will be invoked (which currently returns always "null"). - * - * @param attributeConstant attribute constant whose value should be returned - * @return value of the attribute with the given name - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - if (getPresentationFigure() != null) { - return getPresentationFigure().getAttribute(attributeConstant); - } - else { - return super.getAttribute(attributeConstant); - } - } - - /** - * Delegate capabilities for storing and retrieving attributes to a - * CompositeFigure if the encapsulated presentation figure. If no - * presentation figure is found then the superclass' setAttribute() - * will be invoked (which currently does not set an attribute). - * - * @param name name of the attribute - * @param value value associated with this attribute - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - if (getPresentationFigure() != null) { - getPresentationFigure().setAttribute(name, value); - } - else { - super.setAttribute(name, value); - } - } - - /** - * Delegate capabilities for storing and retrieving attributes to a - * CompositeFigure if the encapsulated presentation figure. If no - * presentation figure is found then the superclass' setAttribute() - * will be invoked (which currently does not set an attribute). - * - * @param attributeConstant attribute constant - * @param value value associated with this attribute - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - if (getPresentationFigure() != null) { - getPresentationFigure().setAttribute(attributeConstant, value); - } - else { - super.setAttribute(attributeConstant, value); - } - } - - /** - * Set a figure which renders this CompositeFigure. The presentation - * tasks for the CompositeFigure are delegated to this presentation - * figure. - * - * @param newPresentationFigure figure takes over the presentation tasks - */ - public void setPresentationFigure(Figure newPresentationFigure) { - myPresentationFigure = newPresentationFigure; - } - - /** - * Get a figure which renders this CompositeFigure. The presentation - * tasks for the CompositeFigure are delegated to this presentation - * figure. - * - * @return figure takes over the presentation tasks - */ - public Figure getPresentationFigure() { - return myPresentationFigure; - } - - /** - * A layout algorithm is used to define how the child components - * should be laid out in relation to each other. The task for - * layouting the child components for presentation is delegated - * to a Layouter which can be plugged in at runtime. - */ - public void layout() { - if (getLayouter() != null) { - Rectangle r = getLayouter().calculateLayout(displayBox().getLocation(), displayBox().getLocation()); - displayBox(r.getLocation(), new Point(r.x + r.width, r.y + r.height)); - } - } - - /** - * Set a Layouter object which encapsulated a layout - * algorithm for this figure. Typically, a Layouter - * accesses the child components of this figure and arranges - * their graphical presentation. It is a good idea to set - * the Layouter in the protected initialize() method - * so it can be recreated if a GraphicalCompositeFigure is - * read and restored from a StorableInput stream. - * - * @param newLayouter encapsulation of a layout algorithm. - */ - public void setLayouter(Layouter newLayouter) { - myLayouter = newLayouter; - } - - /** - * Get a Layouter object which encapsulated a layout - * algorithm for this figure. Typically, a Layouter - * accesses the child components of this figure and arranges - * their graphical presentation. - * - * @return layout strategy used by this figure - */ - public Layouter getLayouter() { - return myLayouter; - } - - /** - * Notify the registered change listener if an exlicit change - * to the component (or one of its child components has occurred). - */ - protected void change() { - if (listener() != null) { - listener().figureRequestUpdate(new FigureChangeEvent(this)); - } - } - - /** - * Propagates the removeFromDrawing request up to the container. - */ - public void figureRequestRemove(FigureChangeEvent e) { - if (listener() != null) { - if (includes(e.getFigure())) { - Rectangle r = invalidateRectangle(displayBox()); - listener().figureRequestRemove(new FigureChangeEvent(this, r, e)); - } - else { - super.figureRequestRemove(e); - } - } - } - - /** - * Reads the contained figures from StorableInput. The - * figure responsible for graphical presentation is read - * together with all child components. The Layouter - * is not stored and therefore not read. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - setPresentationFigure((Figure)dr.readStorable()); - setLayouter((Layouter)dr.readStorable()); - } - - /** - * Writes the contained figures to the StorableOutput. The - * figure responsible for graphical presentation is written - * together with all child components. The Layouter - * is not written. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getPresentationFigure()); - dw.writeStorable(getLayouter()); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/Helper.java b/JHotDraw/src/CH/ifa/draw/contrib/Helper.java deleted file mode 100644 index 034af7f80..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/Helper.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)Helper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.DrawingView; -import java.awt.*; - -/** - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class Helper { - - static public DrawingView getDrawingView(Container container) { - DrawingView oldDrawingView = null; - Component[] components = container.getComponents(); - for (int i = 0; i < components.length; i++) { - if (components[i] instanceof DrawingView) { - return (DrawingView)components[i]; - } - else if (components[i] instanceof Container) { - oldDrawingView = getDrawingView((Container)components[i]); - if (oldDrawingView != null) { - return oldDrawingView; - } - } - } - return null; - } - - static public DrawingView getDrawingView(Component component) { - if (Container.class.isInstance(component)) { - return getDrawingView((Container)component); - } - else if (DrawingView.class.isInstance(component)) { - return (DrawingView)component; - } - else { - return null; - } - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/JPanelDesktop.java b/JHotDraw/src/CH/ifa/draw/contrib/JPanelDesktop.java deleted file mode 100644 index 1eab78b61..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/JPanelDesktop.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)JPanelDesktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import javax.swing.*; -import java.awt.*; -import CH.ifa.draw.application.*; -import CH.ifa.draw.framework.DrawingView; - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class JPanelDesktop extends JPanel implements Desktop { - - private DesktopEventService myDesktopEventService; - private DrawApplication myDrawApplication; - - public JPanelDesktop(DrawApplication newDrawApplication) { - setDrawApplication(newDrawApplication); - setDesktopEventService(createDesktopEventService()); - setAlignmentX(LEFT_ALIGNMENT); - setLayout(new BorderLayout()); - } - - protected Component createContents(DrawingView dv) { - JScrollPane sp = new JScrollPane((Component)dv); - sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - sp.setAlignmentX(LEFT_ALIGNMENT); - String applicationTitle; - if (dv.drawing().getTitle() == null) { - applicationTitle = getDrawApplication().getApplicationName() - + " - " + getDrawApplication().getDefaultDrawingTitle(); - } - else { - applicationTitle = getDrawApplication().getApplicationName() + " - " + dv.drawing().getTitle(); - } - // should be setTitle but a JPanelDesktop has no own title bar - sp.setName(applicationTitle); - return sp; - } - - public DrawingView getActiveDrawingView() { - return getDesktopEventService().getActiveDrawingView(); - } - - public void addToDesktop(DrawingView dv, int location) { - getDesktopEventService().addComponent(createContents(dv)); - getContainer().validate(); - } - - public void removeFromDesktop(DrawingView dv, int location) { - getDesktopEventService().removeComponent(dv); - getContainer().validate(); - } - - public void removeAllFromDesktop(int location) { - getDesktopEventService().removeAllComponents(); - getContainer().validate(); - } - - public DrawingView[] getAllFromDesktop(int location) { - return getDesktopEventService().getDrawingViews(getComponents()); - } - - public void addDesktopListener(DesktopListener dpl) { - getDesktopEventService().addDesktopListener(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - getDesktopEventService().removeDesktopListener(dpl); - } - - private Container getContainer() { - return this; - } - - protected DesktopEventService getDesktopEventService() { - return myDesktopEventService; - } - - private void setDesktopEventService(DesktopEventService newDesktopEventService) { - myDesktopEventService = newDesktopEventService; - } - - protected DesktopEventService createDesktopEventService() { - return new DesktopEventService(this, getContainer()); - } - - private void setDrawApplication(DrawApplication newDrawApplication) { - myDrawApplication = newDrawApplication; - } - - protected DrawApplication getDrawApplication() { - return myDrawApplication; - } - - public void updateTitle(String newDrawingTitle) { - // should be setTitle but a JPanelDesktop has no own title bar - setName(newDrawingTitle); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/JScrollPaneDesktop.java b/JHotDraw/src/CH/ifa/draw/contrib/JScrollPaneDesktop.java deleted file mode 100644 index ca5208f5b..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/JScrollPaneDesktop.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * @(#)JScrollPaneDesktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import java.awt.Component; -import java.awt.Container; - -// JUnitDoclet begin import -import javax.swing.JScrollPane; - -import CH.ifa.draw.framework.DrawingView; -// JUnitDoclet end import - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class JScrollPaneDesktop extends JScrollPane implements Desktop { - - private DesktopEventService myDesktopEventService; - - public JScrollPaneDesktop() { - setDesktopEventService(createDesktopEventService()); - setAlignmentX(LEFT_ALIGNMENT); - setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - } - - protected Component createContents(DrawingView dv) { - return (Component)dv; - } - - public DrawingView getActiveDrawingView() { - return getDesktopEventService().getActiveDrawingView(); - } - - public void addToDesktop(DrawingView dv, int location) { - getContainer().add(createContents(dv)); - } - - public void removeFromDesktop(DrawingView dv, int location) { - getDesktopEventService().removeComponent(dv); - } - - public void removeAllFromDesktop(int location) { - getDesktopEventService().removeAllComponents(); - } - - public DrawingView[] getAllFromDesktop(int location) { - //This is overkill since we know we only have 1 component... - return getDesktopEventService().getDrawingViews(getComponents()); - } - - public void addDesktopListener(DesktopListener dpl) { - getDesktopEventService().addDesktopListener(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - getDesktopEventService().removeDesktopListener(dpl); - } - - private Container getContainer() { - return getViewport(); - } - - protected DesktopEventService getDesktopEventService() { - return myDesktopEventService; - } - - private void setDesktopEventService(DesktopEventService newDesktopEventService) { - myDesktopEventService = newDesktopEventService; - } - - protected DesktopEventService createDesktopEventService() { - return new DesktopEventService(this, getContainer()); - } - - public void updateTitle(String newDrawingTitle) { - // should be setTitle but a JPanelDesktop has no own title bar - setName(newDrawingTitle); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/Layoutable.java b/JHotDraw/src/CH/ifa/draw/contrib/Layoutable.java deleted file mode 100644 index 3321abc02..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/Layoutable.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @(#)Layouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.Figure; - -/** - * A Layoutable is a target for a Layouter who lays out the Layoutable - * according to its layout algorithm - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface Layoutable extends Figure { - - /** - * Layout the figure - */ - public void layout(); - - /** - * Set the Layouter for this Layoutable - * - * @param newLayouter layouter - */ - public void setLayouter(Layouter newLayouter); - - /** - * Return the Layouter for this Layoutable - * - * @return layouter - */ - public Layouter getLayouter(); -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/Layouter.java b/JHotDraw/src/CH/ifa/draw/contrib/Layouter.java deleted file mode 100644 index 79a7ba7a5..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/Layouter.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * @(#)Layouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.util.Storable; -import java.io.Serializable; -import java.awt.*; - -/** - * A Layouter encapsulates a algorithm to layout - * a figure. It is passed on to a figure which delegates the - * layout task to the Layouter's layout method. - * The Layouter might need access to some information - * specific to a certain figure in order to layout it out properly. - * - * Note: Currently, only the GraphicalCompositeFigure uses - * such a Layouter to layout its child components. - * - * @see GraphicalCompositeFigure - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface Layouter extends Serializable, Storable { - - /** - * Calculate the layout for the figure and all its - * subelements. The layout is not actually performed but just - * its dimensions are calculated. - * - * @param origin start point for the layout - * @param corner minimum corner point for the layout - * @return size including space for insets - */ - public Rectangle calculateLayout(Point origin, Point corner); - - /** - * Method which lays out a figure. It is called by the figure - * if a layout task is to be performed. Implementing classes - * specify a certain layout algorithm in this method. - * - * @param origin start point for the layout - * @param corner minimum corner point for the layout - */ - public Rectangle layout(Point origin, Point corner); - - /** - * Set the insets for spacing between the figure and its subfigures - * - * @param newInsets new spacing dimensions - */ - public void setInsets(Insets newInsets); - - /** - * Get the insets for spacing between the figure and its subfigures - * - * @return spacing dimensions - */ - public Insets getInsets(); - - /** - * Create a new instance of this type and sets the layoutable - */ - public Layouter create(Layoutable newLayoutable); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/MDIDesktopPane.java b/JHotDraw/src/CH/ifa/draw/contrib/MDIDesktopPane.java deleted file mode 100644 index 3d5e8d0e6..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/MDIDesktopPane.java +++ /dev/null @@ -1,636 +0,0 @@ -/* - * @(#)MDIDesktopPane.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.DrawingView; -import CH.ifa.draw.standard.NullDrawingView; -import CH.ifa.draw.application.DrawApplication; - -import javax.swing.*; -import javax.swing.event.InternalFrameListener; -import javax.swing.event.InternalFrameAdapter; -import javax.swing.event.InternalFrameEvent; -import java.awt.*; -import java.beans.*; - -/** - * An extension of JDesktopPane that supports often used MDI functionality. This - * class also handles setting scroll bars for when windows move too far to the left or - * bottom, providing the MDIDesktopPane is in a ScrollPane. - * Note by dnoyeb: I dont know why the container does not fire frame close events when the frames - * are removed from the container with remove as opposed to simply closed with the - * "x". so if you say removeAll from container you wont be notified. No biggie. - * - * @author Wolfram Kaiser (adapted from an article in JavaWorld) - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MDIDesktopPane extends JDesktopPane implements Desktop { - private static int FRAME_OFFSET=20; - private MDIDesktopManager manager; - private DrawApplication myDrawApplication; - private DesktopEventService myDesktopEventService; - - private DrawingView selectedView; - - public MDIDesktopPane(DrawApplication newDrawApplication) { - setDesktopEventService(createDesktopEventService()); - setDrawApplication(newDrawApplication); - manager=new MDIDesktopManager(this); - setDesktopManager(manager); - setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); - setAlignmentX(JComponent.LEFT_ALIGNMENT); - } - - protected InternalFrameListener internalFrameListener = new InternalFrameAdapter() { - /** - * Invoked when a internal frame has been opened. - * @see javax.swing.JInternalFrame#show - * if dv is null assert - */ - public void internalFrameOpened(InternalFrameEvent e) { - DrawingView dv = Helper.getDrawingView(e.getInternalFrame()); - fireDrawingViewAddedEvent(dv); - } - - /** - * Invoked when an internal frame is in the process of being closed. - * The close operation can be overridden at this point. - * @see javax.swing.JInternalFrame#setDefaultCloseOperation - */ - //public void internalFrameClosing(InternalFrameEvent e) { - //} - - /** - * Invoked when an internal frame has been closed. - * if dv is null assert - * if this is the last view set it to null - * @see javax.swing.JInternalFrame#setClosed - */ - public void internalFrameClosed(InternalFrameEvent e) { - DrawingView dv = Helper.getDrawingView(e.getInternalFrame()); - if (getComponentCount() == 0){ - DrawingView oldView = getActiveDrawingView(); - setActiveDrawingView(NullDrawingView.getManagedDrawingView(oldView.editor())); - fireDrawingViewSelectedEvent(oldView, getActiveDrawingView()); - } - fireDrawingViewRemovedEvent(dv); - } - - /** - * Invoked when an internal frame is iconified. - * @see javax.swing.JInternalFrame#setIcon - */ - //public void internalFrameIconified(InternalFrameEvent e) { - //} - - /** - * Invoked when an internal frame is de-iconified. - * @see javax.swing.JInternalFrame#setIcon - */ - //public void internalFrameDeiconified(InternalFrameEvent e) { - //} - - /** - * Invoked when an internal frame is activated. - * @see javax.swing.JInternalFrame#setSelected - * if this frame has a null drawingView then assert - * because their should be no null frames being selected - * this does not include NullDrawingView which is acceptable - */ - public void internalFrameActivated(InternalFrameEvent e) { - DrawingView dv = Helper.getDrawingView(e.getInternalFrame()); - DrawingView oldView = getActiveDrawingView(); - setActiveDrawingView(dv); - fireDrawingViewSelectedEvent(oldView, getActiveDrawingView()); - } - - //public void internalFrameDeactivated(InternalFrameEvent e) { - //} - }; - - - protected void fireDrawingViewAddedEvent(final DrawingView dv) { - getDesktopEventService().fireDrawingViewAddedEvent(dv); - } - - protected void fireDrawingViewRemovedEvent(final DrawingView dv) { - getDesktopEventService().fireDrawingViewRemovedEvent(dv); - } - - protected void fireDrawingViewSelectedEvent(final DrawingView oldView, final DrawingView newView) { - getDesktopEventService().fireDrawingViewSelectedEvent(oldView, newView); - } - -/* public void setBounds(int x, int y, int w, int h) { - super.setBounds(x,y,w,h); - checkDesktopSize(); - } -*/ - - protected Component createContents(DrawingView dv) { - JScrollPane sp = new JScrollPane((Component) dv); - sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - sp.setAlignmentX(LEFT_ALIGNMENT); - - String applicationTitle; - if (dv.drawing().getTitle() == null) { - applicationTitle = getDrawApplication().getApplicationName() + " - " + getDrawApplication().getDefaultDrawingTitle(); - } - else { - applicationTitle = getDrawApplication().getApplicationName() + " - " + dv.drawing().getTitle(); - } - JInternalFrame internalFrame = new JInternalFrame(applicationTitle, true, true, true, true); - internalFrame.setName(applicationTitle); - internalFrame.getContentPane().add(sp); - internalFrame.setSize(200,200); - return internalFrame; - } - - public DrawingView getActiveDrawingView() { - return selectedView; - } - - protected void setActiveDrawingView(DrawingView newSelectedView) { - selectedView = newSelectedView; - } - - public void updateTitle(String newDrawingTitle) { - getSelectedFrame().setTitle(newDrawingTitle); - } - - /** - * This must match the signature of the superclass it is overriding or the - * method invocation may not resolve to this method unless it is called on - * a reference of specifically MDIDesktopPane type. So this must be - * Component add(Component comp) in order to override its super class and - * Component add(JInternalFrame frame) will not properly override the super- - * class, but instead overload it. - * - * Note be sure to call this method and not add() when you want to add to the - * desktop. This allows complex desktops to be created. For instance, you can - * add split panes and scroll panes and such as normal with the add() method - * but then to get to the actual desktop you would still call this method. - */ - public void addToDesktop(DrawingView dv, int location) { - JInternalFrame frame = (JInternalFrame)createContents(dv); - JInternalFrame[] array = getAllFrames(); - Point p = null; - int w; - int h; - - //should be done before added to desktop - frame.addInternalFrameListener(internalFrameListener); - super.add(frame); - - checkDesktopSize(); - if (array.length > 0) { - p = array[0].getLocation(); - p.x = p.x + FRAME_OFFSET; - p.y = p.y + FRAME_OFFSET; - } - else { - p = new Point(0, 0); - } - frame.setLocation(p.x, p.y); - if (frame.isResizable()) { - w = getWidth() - (getWidth() / 3); - h = getHeight() - (getHeight() / 3); - if (w < frame.getMinimumSize().getWidth()) { - w = (int)frame.getMinimumSize().getWidth(); - } - if (h < frame.getMinimumSize().getHeight()) { - h = (int)frame.getMinimumSize().getHeight(); - } - frame.setSize(w, h); - } - moveToFront(frame); - frame.setVisible(true); - try { - frame.setSelected(true); - } - catch (PropertyVetoException e) { - frame.toBack(); - } - } - - public void removeFromDesktop(DrawingView dv, int location) { - Component[] comps = getComponents(); - for (int x=0; x<comps.length; x++) { - if (dv == Helper.getDrawingView(comps[x])) { - ((JInternalFrame)comps[x]).dispose(); - break; - } - } - checkDesktopSize(); - } - - public void removeAllFromDesktop(int location) { - JInternalFrame[] jifs = getAllFrames(); - for (int x=0; x < jifs.length; x++) { - jifs[x].dispose(); - } - } - - public DrawingView[] getAllFromDesktop(int location){ - Component[] comps = getComponents(); - java.util.ArrayList al = new java.util.ArrayList(); - for (int x=0; x<comps.length; x++) { - DrawingView dv = Helper.getDrawingView(comps[x]); - if (dv != null) { - al.add(dv); - } - } - DrawingView[] dvs = new DrawingView[al.size()]; - al.toArray(dvs); - return dvs; - } -/* - public void setSelectedDrawingView(DrawingView dv) { - Component[] comps = getComponents(); - for (int x=0; x < comps.length; x++) { - DrawingView dv2 = Helper.getDrawingView(comps[x]); - if (dv == dv2) { - JInternalFrame frame = (JInternalFrame)comps[x]; - try { - //moveToFront(frame); - frame.setSelected(true); - } - catch(java.beans.PropertyVetoException pve) { - System.out.println(pve); - } - } - } - } -*/ - protected DesktopEventService getDesktopEventService() { - return myDesktopEventService; - } - - private void setDesktopEventService(DesktopEventService newDesktopEventService) { - myDesktopEventService = newDesktopEventService; - } - - protected DesktopEventService createDesktopEventService() { - return new DesktopEventService(this, this); - } - - public void addDesktopListener(DesktopListener dpl) { - getDesktopEventService().addDesktopListener(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - getDesktopEventService().removeDesktopListener(dpl); - } - - /** - * Cascade all internal frames - */ - public void cascadeFrames() { - int x = 0; - int y = 0; - JInternalFrame[] allFrames = getAllFrames(); - - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - - manager.setNormalSize(); - - int frameHeight = (getBounds().height - 5) - allFrames.length * FRAME_OFFSET; - int frameWidth = (getBounds().width - 5) - allFrames.length * FRAME_OFFSET; - for (int i = allFrames.length - 1; i >= 0; i--) { - try { - allFrames[i].setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[i].setBounds(x, y, frameWidth, frameHeight); - x = x + FRAME_OFFSET; - y = y + FRAME_OFFSET; - } - - checkDesktopSize(); - } - - /** - * Tile all internal frames<br> - * - * @deprecated use tileFramesHorizontally() instead - * - */ - public void tileFrames() { - tileFramesHorizontally(); - } - - public void tileFramesHorizontally() { - Component[] allFrames = getAllFrames(); - - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - - manager.setNormalSize(); - - int frameHeight = getBounds().height/allFrames.length; - int y = 0; - for (int i = 0; i < allFrames.length; i++) { - try { - ((JInternalFrame)allFrames[i]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[i].setBounds(0, y, getBounds().width,frameHeight); - y = y + frameHeight; - } - - checkDesktopSize(); - } - - public void tileFramesVertically() { - Component[] allFrames = getAllFrames(); - - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - manager.setNormalSize(); - - int frameWidth = getBounds().width/allFrames.length; - int x = 0; - for (int i = 0; i < allFrames.length; i++) { - try { - ((JInternalFrame)allFrames[i]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[i].setBounds(x, 0, frameWidth, getBounds().height); - x = x + frameWidth; - } - - checkDesktopSize(); - } - - /** - * Arranges the frames as efficiently as possibly with preference for - * keeping vertical size maximal.<br> - * - */ - public void arrangeFramesVertically() { - Component[] allFrames = getAllFrames(); - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - - manager.setNormalSize(); - - int vertFrames = (int)Math.floor(Math.sqrt(allFrames.length)); - int horFrames = (int)Math.ceil(Math.sqrt(allFrames.length)); - - // first arrange the windows that have equal size - int frameWidth = getBounds().width / horFrames; - int frameHeight = getBounds().height / vertFrames; - int x = 0; - int y = 0; - int frameIdx = 0; - for (int horCnt = 0; horCnt < horFrames-1; horCnt++) { - y = 0; - for (int vertCnt = 0; vertCnt < vertFrames; vertCnt++) { - try { - ((JInternalFrame)allFrames[frameIdx]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[frameIdx].setBounds(x, y, frameWidth, frameHeight); - frameIdx++; - y = y + frameHeight; - } - x = x + frameWidth; - } - - // the rest of the frames are tiled down on the last column with equal - // height - frameHeight = getBounds().height / (allFrames.length - frameIdx); - y = 0; - for (; frameIdx < allFrames.length; frameIdx++) - { - try { - ((JInternalFrame)allFrames[frameIdx]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[frameIdx].setBounds(x, y, frameWidth, frameHeight); - y = y + frameHeight; - } - - checkDesktopSize(); - } - - /** - * Arranges the frames as efficiently as possibly with preference for - * keeping horizontal size maximal.<br> - * - */ - public void arrangeFramesHorizontally() { - Component[] allFrames = getAllFrames(); - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - - manager.setNormalSize(); - - int vertFrames = (int)Math.ceil(Math.sqrt(allFrames.length)); - int horFrames = (int)Math.floor(Math.sqrt(allFrames.length)); - - // first arrange the windows that have equal size - int frameWidth = getBounds().width / horFrames; - int frameHeight = getBounds().height / vertFrames; - int x = 0; - int y = 0; - int frameIdx = 0; - for (int vertCnt = 0; vertCnt < vertFrames-1; vertCnt++) { - x = 0; - for (int horCnt = 0; horCnt < horFrames; horCnt++) { - try { - ((JInternalFrame)allFrames[frameIdx]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[frameIdx].setBounds(x, y, frameWidth, frameHeight); - frameIdx++; - x = x + frameWidth; - } - y = y + frameHeight; - } - - // the rest of the frames are tiled down on the last column with equal - // height - frameWidth = getBounds().width / (allFrames.length - frameIdx); - x = 0; - for (; frameIdx < allFrames.length; frameIdx++) { - try { - ((JInternalFrame)allFrames[frameIdx]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[frameIdx].setBounds(x, y, frameWidth, frameHeight); - x = x + frameWidth; - } - - checkDesktopSize(); - } - - /** - * Sets all component size properties ( maximum, minimum, preferred) - * to the given dimension. - */ - public void setAllSize(Dimension d) { - setMinimumSize(d); - setMaximumSize(d); - setPreferredSize(d); - setBounds(0, 0, d.width, d.height); - } - - /** - * Sets all component size properties ( maximum, minimum, preferred) - * to the given width and height. - */ - public void setAllSize(int width, int height) { - setAllSize(new Dimension(width,height)); - } - - private void checkDesktopSize() { - if ((getParent() != null) && isVisible()) { - manager.resizeDesktop(); - } - } - - private void setDrawApplication(DrawApplication newDrawApplication) { - myDrawApplication = newDrawApplication; - } - - protected DrawApplication getDrawApplication() { - return myDrawApplication; - } -} - -/** - * Private class used to replace the standard DesktopManager for JDesktopPane. - * Used to provide scrollbar functionality. - */ -class MDIDesktopManager extends DefaultDesktopManager { - private MDIDesktopPane desktop; - - public MDIDesktopManager(MDIDesktopPane newDesktop) { - this.desktop = newDesktop; - } - - public void endResizingFrame(JComponent f) { - super.endResizingFrame(f); - resizeDesktop(); - } - - public void endDraggingFrame(JComponent f) { - super.endDraggingFrame(f); - resizeDesktop(); - } - - public void setNormalSize() { - JScrollPane scrollPane = getScrollPane(); - Insets scrollInsets = getScrollPaneInsets(); - - if (scrollPane != null) { - Dimension d = scrollPane.getVisibleRect().getSize(); - if (scrollPane.getBorder() != null) { - d.setSize(d.getWidth() - scrollInsets.left - scrollInsets.right, - d.getHeight() - scrollInsets.top - scrollInsets.bottom); - } - - d.setSize(d.getWidth() - 20, d.getHeight() - 20); - desktop.setAllSize(d); - scrollPane.invalidate(); - scrollPane.validate(); - } - } - - private Insets getScrollPaneInsets() { - JScrollPane scrollPane = getScrollPane(); - if ((scrollPane == null) || (getScrollPane().getBorder() == null)) { - return new Insets(0, 0, 0, 0); - } - else { - return getScrollPane().getBorder().getBorderInsets(scrollPane); - } - } - - public JScrollPane getScrollPane() { - if (desktop.getParent() instanceof JViewport) { - JViewport viewPort = (JViewport)desktop.getParent(); - if (viewPort.getParent() instanceof JScrollPane) - return (JScrollPane)viewPort.getParent(); - } - return null; - } - - protected void resizeDesktop() { - int x = 0; - int y = 0; - JScrollPane scrollPane = getScrollPane(); - Insets scrollInsets = getScrollPaneInsets(); - - if (scrollPane != null) { - JInternalFrame allFrames[] = desktop.getAllFrames(); - for (int i = 0; i < allFrames.length; i++) { - if (allFrames[i].getX() + allFrames[i].getWidth() > x) { - x = allFrames[i].getX() + allFrames[i].getWidth(); - } - if (allFrames[i].getY() + allFrames[i].getHeight() > y) { - y = allFrames[i].getY() + allFrames[i].getHeight(); - } - } - Dimension d=scrollPane.getVisibleRect().getSize(); - if (scrollPane.getBorder() != null) { - d.setSize(d.getWidth() - scrollInsets.left - scrollInsets.right, - d.getHeight() - scrollInsets.top - scrollInsets.bottom); - } - - if (x <= d.getWidth()) { - x = ((int)d.getWidth()) - 20; - } - if (y <= d.getHeight()) { - y = ((int)d.getHeight()) - 20; - } - desktop.setAllSize(x,y); - scrollPane.invalidate(); - scrollPane.validate(); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/MDI_DrawApplication.java b/JHotDraw/src/CH/ifa/draw/contrib/MDI_DrawApplication.java deleted file mode 100644 index ede1fcd82..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/MDI_DrawApplication.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * @(#)MDI_DrawApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.application.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.contrib.dnd.DragNDropTool; - -import javax.swing.*; - -/** - * Many applications have the ability to deal with multiple internal windows. - * MDI_DrawApplications provides the basic facilities to make use of MDI in - * JHotDraw. Its main tasks are to create a content for DrawApplications, which - * is embedded in internal frames, to maintain a list with all internal frames - * and to manage the switching between them. - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MDI_DrawApplication extends DrawApplication { - - /** - * Constructs a drawing window with a default title. - */ - public MDI_DrawApplication() { - this("JHotDraw"); - } - - /** - * Constructs a drawing window with the given title. - */ - public MDI_DrawApplication(String title) { - super(title); - } - - /** - * Factory method which can be overriden by subclasses to - * create an instance of their type. - * - * @return newly created application - */ - protected DrawApplication createApplication() { - return new MDI_DrawApplication(); - } - - /** - * Creates the tools. By default only the selection tool is added. - * Override this method to add additional tools. - * Call the inherited method to include the selection tool. - * @param palette the palette where the tools are added. - */ - protected void createTools(JToolBar palette) { - super.createTools(palette); - Tool tool = new DragNDropTool(this); - ToolButton tb = createToolButton(IMAGES+"SEL", "Drag N Drop Tool", tool); - palette.add( tb ); - } - - /** - * Opens a new internal frame containing a new drawing. - */ - public void promptNew() { - newWindow(createDrawing()); - } - - /** - * Method to create a new internal frame. Applications that want - * to create a new internal drawing view should call this method. - */ - public void newWindow(Drawing newDrawing) { - DrawingView newView = createDrawingView(newDrawing); - getDesktop().addToDesktop(newView, Desktop.PRIMARY); - toolDone(); - } - - /** - * Create the DrawingView that is active when the application is started. - * This initial DrawingView might be different from DrawingView created - * by the application, so subclasses can override this method to provide - * a special drawing view for application startup time, e.g. a NullDrawingView - * which does not display an internal frame in a multiple document interface - * (MDI) application. - * - * @return drawing view that is active at application startup time - */ - protected DrawingView createInitialDrawingView() { - return NullDrawingView.getManagedDrawingView(this); - } - - /** - * Open a new view for this application containing a - * view of the drawing of the currently activated window. - */ - public void newView() { - if (!view().isInteractive()) { - return; - } - - // create new window with view to an existing drawing - newWindow(view().drawing()); - - String copyTitle = getDrawingTitle(); - if (copyTitle != null) { - setDrawingTitle(copyTitle); - } - else { - setDrawingTitle(getDefaultDrawingTitle()); - } - } - - /** - * Factory method to create a specialized desktop (manager) for MDI applications - */ - protected Desktop createDesktop() { - return new MDIDesktopPane(this); - } - - /** - * Returns all the views in the application - */ - public DrawingView[] views() { - return getDesktop().getAllFromDesktop(Desktop.PRIMARY); - } - - public String getDefaultDrawingTitle() { - return super.getDefaultDrawingTitle() + views().length; - } - - /** - * Set the title of the currently selected drawing - */ - protected void setDrawingTitle(String drawingTitle) { - getDesktop().updateTitle(drawingTitle); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/MiniMapView.java b/JHotDraw/src/CH/ifa/draw/contrib/MiniMapView.java deleted file mode 100644 index 81d38e98a..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/MiniMapView.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * @(#)MiniMapView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.DrawingView; -import CH.ifa.draw.framework.DrawingChangeEvent; -import CH.ifa.draw.framework.DrawingChangeListener; - -import java.awt.*; -import java.awt.event.*; -import java.awt.geom.*; -import javax.swing.*; -import javax.swing.event.*; - -/** - * Utility component for enhancing component scrolling. It provides a "minature" view of the entire contents of a JScrollPane - * and the means to scroll that JScrollPane by moving a rectangle representing the viewable area of the JScrollPane. If the - * user clicks on an area inside of the MiniMapView, the JScrollPane's view is centered on that area. The user may also drag - * the rectangle representation of the JScrollPane's view around the MiniMap to scroll. - * - * @author S. Ruman (sruman@rogers.com) - * @version <$CURRENT_VERSION$> - */ -public class MiniMapView extends JComponent { -// Instance Variables - private JScrollPane m_subject; - private DrawingView myMappedDrawingView; - private SubjectListener m_subjectListener; - private DrawingChangeListener myDrawingChangeListener; - private Color m_viewBoxColor = Color.red; - -// Constructors - public MiniMapView(DrawingView newMappedDrawingView, JScrollPane subject) { - m_subjectListener = new SubjectListener(); - setSubject(subject); - setMappedDrawingView(newMappedDrawingView); - myDrawingChangeListener = new MappedDrawingChangeListener(); - getMappedDrawingView().drawing().addDrawingChangeListener(myDrawingChangeListener); - MouseListener ml = new MouseListener(); - addMouseListener(new MouseListener()); - addMouseMotionListener(ml); - } - - protected void setMappedDrawingView(DrawingView newMappedDrawingView) { - myMappedDrawingView = newMappedDrawingView; - } - - public DrawingView getMappedDrawingView() { - return myMappedDrawingView; - } - -// accessors - protected void setSubject(JScrollPane subject) { - if (m_subject != null) { - m_subject.getViewport().removeChangeListener(m_subjectListener); - } - - m_subject = subject; - if (m_subject != null) { - m_subject.getViewport().addChangeListener(m_subjectListener); - } - - repaint(); - } - - public JScrollPane getSubject() { - return m_subject; - } - - public Color getViewBowColor() { - return m_viewBoxColor; - } - - public void setViewBoxColor(Color c) { - m_viewBoxColor = c; - repaint(); - } - - /** - * @return The component that is actually being "mini-mapped", that is the component inside the scroll pane - */ - protected Component getMappedComponent() { - return (Component)getMappedDrawingView(); - } - -// Overridden - public void paint(Graphics g) { - Graphics2D g2d = (Graphics2D)g; - - // Paint a small map representation of the subjects contents - Component mappedComponent = getMappedComponent(); - AffineTransform at = getViewToMiniMapTransform(mappedComponent); - g2d.transform(at); - - getMappedDrawingView().drawAll(g2d); - - // Draw a rectangle representing the viewable area - drawViewRectangle(g2d, getViewRectangle()); - } - - // side-effect of setting the transform on g2d to identity - protected void drawViewRectangle(Graphics2D g2d, Rectangle viewPortRectangle) { - AffineTransform at = new AffineTransform(); - at.setToIdentity(); - g2d.setTransform(at); - - g2d.setColor(m_viewBoxColor); - g2d.draw(viewPortRectangle); - } - - protected AffineTransform getViewToMiniMapTransform(Component mappedComponent) { - double scaleX = ((double)getWidth()) / ((double)mappedComponent.getWidth()); - double scaleY = ((double)getHeight()) / ((double)mappedComponent.getHeight()); - - AffineTransform at = getInverseSubjectTransform(); // for subclass flexibility - at.concatenate(AffineTransform.getScaleInstance(scaleX, scaleY)); - return at; - } - - /** - * Allows subclasses to modify the transformation used in creating the mini-map - */ - protected AffineTransform getInverseSubjectTransform() { - AffineTransform at = new AffineTransform(); - at.setToIdentity(); - return at; - } - - /** - * @return The rectangle (in Mini-Map world-coordinates) representing the area being viewed inside of the scroll pane subject - */ - protected Rectangle getViewRectangle() { - Rectangle visiblePortion = m_subject.getViewportBorderBounds(); - Point upperLeftViewPos = m_subject.getViewport().getViewPosition(); - double [] srcRecCorners = new double[4]; - double [] dstRecCorners = new double[4]; - - srcRecCorners[0] = upperLeftViewPos.x + visiblePortion.getX(); srcRecCorners[1] = upperLeftViewPos.y + visiblePortion.getY(); srcRecCorners[2] = upperLeftViewPos.x + visiblePortion.getX() + visiblePortion.getWidth(); srcRecCorners[3] = upperLeftViewPos.y + visiblePortion.getY() + visiblePortion.getHeight(); - getViewToMiniMapTransform(getMappedComponent()).transform(srcRecCorners, 0, dstRecCorners, 0, srcRecCorners.length/2); // transform the coordinates to MiniMapView coordinates - - return new Rectangle((int)dstRecCorners[0], (int)dstRecCorners[1], (int)(dstRecCorners[2] - dstRecCorners[0]), (int)(dstRecCorners[3] - dstRecCorners[1])); - } - - /** - * Scrolls the subject scroll pane to the coordinates specified. - * @param upperLeftX The new upper left corner X-coordinate (in subject world-coordinates) of the subject scroll pane - * @param upperLeftY The new upper left corner Y-coordinate (in subject world-coordinates) of the subject scroll pane - */ - protected void scrollSubjectTo(int upperLeftX, int upperLeftY) { - AffineTransform at = null; - try { - at = getViewToMiniMapTransform(getMappedComponent()).createInverse(); - } - catch (NoninvertibleTransformException nite) { - nite.printStackTrace(); - return; - } - - double [] srcPoints = new double[2]; - double [] destPoints = new double[2]; - srcPoints[0] = upperLeftX; - srcPoints[1] = upperLeftY; - at.transform(srcPoints, 0, destPoints, 0, 1); - - if (destPoints[0] < 0) { - destPoints[0] = 0; - } - if (destPoints[1] < 0) { - destPoints[1] = 0; - } - - m_subject.getViewport().setViewPosition(new Point((int)destPoints[0], (int)destPoints[1])); - } - - protected int [] getUpperLeftPointsFromCenter(int centerX, int centerY) { - int [] upperLeft = new int[2]; - Rectangle oldRectangle = getViewRectangle(); - upperLeft[0] = centerX - oldRectangle.width/2; - upperLeft[1] = centerY - oldRectangle.height/2; - - /* - * JP, 25-May-03: Avoid positioning of the rectangle outside the - * available area. Resulted in very strange artifacts on the screen. - */ - if (upperLeft[0] + oldRectangle.width > getX() + getWidth()) { - upperLeft[0] = getX() + getWidth() - oldRectangle.width; - } - - if (upperLeft[1] + oldRectangle.height > getY() + getHeight()) { - upperLeft[1] = getY() + getHeight() - oldRectangle.height; - } - - return upperLeft; - } - - // Inner Classes - public class MouseListener extends MouseAdapter implements MouseMotionListener { - public void mousePressed(MouseEvent e) { - int [] rectangleUpperLeft = getUpperLeftPointsFromCenter(e.getX(), e.getY()); - scrollSubjectTo(rectangleUpperLeft[0], rectangleUpperLeft[1]); - } - - public void mouseDragged(MouseEvent e) { - int [] rectangleUpperLeft = getUpperLeftPointsFromCenter(e.getX(), e.getY()); - scrollSubjectTo(rectangleUpperLeft[0], rectangleUpperLeft[1]); - } - - public void mouseMoved(MouseEvent e) { - // empty implementation - } - } - - class SubjectListener implements ChangeListener { - public void stateChanged(ChangeEvent e) { - repaint(); - } - } - - class MappedDrawingChangeListener implements DrawingChangeListener { - /** - * Sent when an area is invalid - */ - public void drawingInvalidated(DrawingChangeEvent e) { - repaint(); - } - - /** - * Sent when the drawing wants to be refreshed - */ - public void drawingRequestUpdate(DrawingChangeEvent e) { - repaint(); - } - - /** - * Sent when the drawing Title has changed - */ - public void drawingTitleChanged(DrawingChangeEvent e) { - } - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/NestedCreationTool.java b/JHotDraw/src/CH/ifa/draw/contrib/NestedCreationTool.java deleted file mode 100644 index f55a1ab46..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/NestedCreationTool.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * @(#)CreationTool2.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.standard.CreationTool; -import CH.ifa.draw.standard.CompositeFigure; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.framework.DrawingEditor; - -import java.awt.event.MouseEvent; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class NestedCreationTool extends CreationTool { - private CompositeFigure myContainerFigure; - - public NestedCreationTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - public void mouseDown(MouseEvent e, int x, int y) { - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - figure = figure.getDecoratedFigure(); - if (figure instanceof CompositeFigure) { - setContainerFigure((CompositeFigure)figure); - super.mouseDown(e, x, y); - } - else { - toolDone(); - } - } - else { - toolDone(); - } - } - - public void mouseMove(MouseEvent e, int x, int y) { - if ((getContainerFigure() != null) && !getContainerFigure().containsPoint(e.getX(), e.getY())) { - // here you might want to constrain the mouse movements to the size of the - // container figure: not sure whether this works... - toolDone(); - } - else { - super.mouseMove(e, x, y); - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - if ((getContainerFigure() != null) && (getCreatedFigure() != null) - && getContainerFigure().containsPoint(e.getX(), e.getY())) { - getContainerFigure().add(getCreatedFigure()); - } - toolDone(); - } - - protected void setContainerFigure(CompositeFigure newContainerFigure) { - myContainerFigure = newContainerFigure; - } - - public CompositeFigure getContainerFigure() { - return myContainerFigure; - } - - protected void toolDone() { - setCreatedFigure(null); - setAddedFigure(null); - setContainerFigure(null); - editor().toolDone(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/PolygonFigure.java b/JHotDraw/src/CH/ifa/draw/contrib/PolygonFigure.java deleted file mode 100644 index 107d821ef..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/PolygonFigure.java +++ /dev/null @@ -1,462 +0,0 @@ -/* - * @(#)PolygonFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import java.awt.*; -import java.util.*; -import java.util.List; -import java.io.IOException; - -/** - * A scalable, rotatable polygon with an arbitrary number of points - * Based on PolyLineFigure - * - * @author Doug Lea (dl at gee, Fri Feb 28 07:47:05 1997) - * @version <$CURRENT_VERSION$> - */ -public class PolygonFigure extends AttributeFigure { - - /** - * Distance threshold for smoothing away or locating points - **/ - static final int TOO_CLOSE = 2; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 6254089689239215026L; - private int polygonFigureSerializedDataVersion = 1; - - private Polygon fPoly; - - public PolygonFigure() { - super(); - setInternalPolygon(new Polygon()); - } - - public PolygonFigure(int x, int y) { - this(); - getInternalPolygon().addPoint(x, y); - } - - public PolygonFigure(Polygon p) { - setInternalPolygon(new Polygon(p.xpoints, p.ypoints, p.npoints)); - } - - public Rectangle displayBox() { - return bounds(getInternalPolygon()); - } - - - public boolean isEmpty() { - return ((pointCount() < 3) || - ((size().width < TOO_CLOSE) && (size().height < TOO_CLOSE))); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(pointCount()); - for (int i = 0; i < pointCount(); i++) { - handles.add(new PolygonHandle(this, locator(i), i)); - } - handles.add(new PolygonScaleHandle(this)); - return new HandleEnumerator(handles); - } - - - public void basicDisplayBox(Point origin, Point corner) { - Rectangle r = displayBox(); - int dx = origin.x - r.x; - int dy = origin.y - r.y; - getInternalPolygon().translate(dx, dy); - r = displayBox(); - Point oldCorner = new Point(r.x + r.width, r.y + r.height); - scaleRotate(oldCorner, getInternalPolygon(), corner); - } - - /** - * @return a copy of the internal polygon - **/ - public Polygon getPolygon() { - return new Polygon(fPoly.xpoints, fPoly.ypoints, fPoly.npoints); - } - - protected void setInternalPolygon(Polygon newPolygon) { - fPoly = newPolygon; - } - - public Polygon getInternalPolygon() { - return fPoly; - } - - public Point center() { - return center(getInternalPolygon()); - } - - public Iterator points() { - List pts = CollectionsFactory.current().createList(pointCount()); - for (int i = 0; i < pointCount(); ++i) { - pts.add(new Point(getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i])); - } - return pts.iterator(); - } - - public int pointCount() { - return getInternalPolygon().npoints; - } - - public void basicMoveBy(int dx, int dy) { - getInternalPolygon().translate(dx, dy); - } - - public void drawBackground(Graphics g) { - g.fillPolygon(getInternalPolygon()); - } - - public void drawFrame(Graphics g) { - g.drawPolygon(getInternalPolygon()); - } - - public boolean containsPoint(int x, int y) { - return getInternalPolygon().contains(x, y); - } - - public Connector connectorAt(int x, int y) { - return new ChopPolygonConnector(this); - } - - /** - * Adds a node to the list of points. - */ - public void addPoint(int x, int y) { - getInternalPolygon().addPoint(x, y); - changed(); - } - - - /** - * Changes the position of a node. - */ - public void setPointAt(Point p, int i) { - willChange(); - getInternalPolygon().xpoints[i] = p.x; - getInternalPolygon().ypoints[i] = p.y; - changed(); - } - - /** - * Insert a node at the given point. - */ - public void insertPointAt(Point p, int i) { - willChange(); - int n = pointCount() + 1; - int[] xs = new int[n]; - int[] ys = new int[n]; - for (int j = 0; j < i; ++j) { - xs[j] = getInternalPolygon().xpoints[j]; - ys[j] = getInternalPolygon().ypoints[j]; - } - xs[i] = p.x; - ys[i] = p.y; - for (int j = i; j < pointCount(); ++j) { - xs[j + 1] = getInternalPolygon().xpoints[j]; - ys[j + 1] = getInternalPolygon().ypoints[j]; - } - - setInternalPolygon(new Polygon(xs, ys, n)); - changed(); - } - - public void removePointAt(int i) { - willChange(); - int n = pointCount() - 1; - int[] xs = new int[n]; - int[] ys = new int[n]; - for (int j = 0; j < i; ++j) { - xs[j] = getInternalPolygon().xpoints[j]; - ys[j] = getInternalPolygon().ypoints[j]; - } - for (int j = i; j < n; ++j) { - xs[j] = getInternalPolygon().xpoints[j + 1]; - ys[j] = getInternalPolygon().ypoints[j + 1]; - } - setInternalPolygon(new Polygon(xs, ys, n)); - changed(); - } - - /** - * Scale and rotate relative to anchor - **/ - public void scaleRotate(Point anchor, Polygon originalPolygon, Point p) { - willChange(); - - // use center to determine relative angles and lengths - Point ctr = center(originalPolygon); - double anchorLen = Geom.length(ctr.x, ctr.y, anchor.x, anchor.y); - - if (anchorLen > 0.0) { - double newLen = Geom.length(ctr.x, ctr.y, p.x, p.y); - double ratio = newLen / anchorLen; - - double anchorAngle = Math.atan2(anchor.y - ctr.y, anchor.x - ctr.x); - double newAngle = Math.atan2(p.y - ctr.y, p.x - ctr.x); - double rotation = newAngle - anchorAngle; - - int n = originalPolygon.npoints; - int[] xs = new int[n]; - int[] ys = new int[n]; - - for (int i = 0; i < n; ++i) { - int x = originalPolygon.xpoints[i]; - int y = originalPolygon.ypoints[i]; - double l = Geom.length(ctr.x, ctr.y, x, y) * ratio; - double a = Math.atan2(y - ctr.y, x - ctr.x) + rotation; - xs[i] = (int)(ctr.x + l * Math.cos(a) + 0.5); - ys[i] = (int)(ctr.y + l * Math.sin(a) + 0.5); - } - setInternalPolygon(new Polygon(xs, ys, n)); - } - changed(); - } - - - /** - * Remove points that are nearly colinear with others - **/ - public void smoothPoints() { - willChange(); - boolean removed = false; - int n = pointCount(); - do { - removed = false; - int i = 0; - while (i < n && n >= 3) { - int nxt = (i + 1) % n; - int prv = (i - 1 + n) % n; - - if ((Geom.distanceFromLine(getInternalPolygon().xpoints[prv], - getInternalPolygon().ypoints[prv], - getInternalPolygon().xpoints[nxt], - getInternalPolygon().ypoints[nxt], - getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i]) < TOO_CLOSE)) { - removed = true; - --n; - for (int j = i; j < n; ++j) { - getInternalPolygon().xpoints[j] = getInternalPolygon().xpoints[j + 1]; - getInternalPolygon().ypoints[j] = getInternalPolygon().ypoints[j + 1]; - } - } - else { - ++i; - } - } - } while(removed); - if (n != pointCount()) { - setInternalPolygon(new Polygon(getInternalPolygon().xpoints, - getInternalPolygon().ypoints, n)); - } - changed(); - } - - /** - * Splits the segment at the given point if a segment was hit. - * @return the index of the segment or -1 if no segment was hit. - */ - public int splitSegment(int x, int y) { - int i = findSegment(x, y); - if (i != -1) { - insertPointAt(new Point(x, y), i+1); - return i + 1; - } - else { - return -1; - } - } - - public Point pointAt(int i) { - return new Point(getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i]); - } - - /** - * Return the point on the polygon that is furthest from the center - **/ - public Point outermostPoint() { - Point ctr = center(); - int outer = 0; - long dist = 0; - - for (int i = 0; i < pointCount(); ++i) { - long d = Geom.length2(ctr.x, ctr.y, - getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i]); - if (d > dist) { - dist = d; - outer = i; - } - } - - return new Point(getInternalPolygon().xpoints[outer], getInternalPolygon().ypoints[outer]); - } - - - /** - * Gets the segment that is hit by the given point. - * @return the index of the segment or -1 if no segment was hit. - */ - public int findSegment(int x, int y) { - double dist = TOO_CLOSE; - int best = -1; - - for (int i = 0; i < pointCount(); i++) { - int n = (i + 1) % pointCount(); - double d = Geom.distanceFromLine(getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i], - getInternalPolygon().xpoints[n], - getInternalPolygon().ypoints[n], x, y); - if (d < dist) { - dist = d; - best = i; - } - } - return best; - } - - public Point chop(Point p) { - return chop(getInternalPolygon(), p); - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(pointCount()); - for (int i = 0; i < pointCount(); ++i) { - dw.writeInt(getInternalPolygon().xpoints[i]); - dw.writeInt(getInternalPolygon().ypoints[i]); - } - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - int size = dr.readInt(); - int[] xs = new int[size]; - int[] ys = new int[size]; - for (int i = 0; i < size; i++) { - xs[i] = dr.readInt(); - ys[i] = dr.readInt(); - } - setInternalPolygon(new Polygon(xs, ys, size)); - } - - /** - * Creates a locator for the point with the given index. - */ - public static Locator locator(final int pointIndex) { - return new AbstractLocator() { - public Point locate(Figure owner) { - PolygonFigure plf = (PolygonFigure)owner; - // guard against changing PolygonFigures -> temporary hack - if (pointIndex < plf.pointCount()) { - return ((PolygonFigure)owner).pointAt(pointIndex); - } - return new Point(-1, -1); - } - }; - } - - /** - * replacement for builtin Polygon.getBounds that doesn't always update? - */ - public static Rectangle bounds(Polygon p) { - int minx = Integer.MAX_VALUE; - int miny = Integer.MAX_VALUE; - int maxx = Integer.MIN_VALUE; - int maxy = Integer.MIN_VALUE; - int n = p.npoints; - for (int i = 0; i < n; i++) { - int x = p.xpoints[i]; - int y = p.ypoints[i]; - if (x > maxx) { - maxx = x; - } - if (x < minx) { - minx = x; - } - if (y > maxy) { - maxy = y; - } - if (y < miny) { - miny = y; - } - } - - return new Rectangle(minx, miny, maxx - minx, maxy - miny); - } - - public static Point center(Polygon p) { - long sx = 0; - long sy = 0; - int n = p.npoints; - for (int i = 0; i < n; i++) { - sx += p.xpoints[i]; - sy += p.ypoints[i]; - } - - return new Point((int)(sx / n), (int)(sy / n)); - } - - public static Point chop(Polygon poly, Point p) { - Point ctr = center(poly); - int cx = -1; - int cy = -1; - long len = Long.MAX_VALUE; - - // Try for points along edge - - for (int i = 0; i < poly.npoints; ++i) { - int nxt = (i + 1) % poly.npoints; - Point chop = Geom.intersect(poly.xpoints[i], - poly.ypoints[i], - poly.xpoints[nxt], - poly.ypoints[nxt], - p.x, - p.y, - ctr.x, - ctr.y); - if (chop != null) { - long cl = Geom.length2(chop.x, chop.y, p.x, p.y); - if (cl < len) { - len = cl; - cx = chop.x; - cy = chop.y; - } - } - } - // if none found, pick closest vertex - //if (len == Long.MAX_VALUE) { - { // try anyway - for (int i = 0; i < poly.npoints; ++i) { - long l = Geom.length2(poly.xpoints[i], poly.ypoints[i], p.x, p.y); - if (l < len) { - len = l; - cx = poly.xpoints[i]; - cy = poly.ypoints[i]; - } - } - } - return new Point(cx, cy); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/PolygonHandle.java b/JHotDraw/src/CH/ifa/draw/contrib/PolygonHandle.java deleted file mode 100644 index 93ce88f1e..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/PolygonHandle.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * @(#)PolygonHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.PolyLineHandle; -import CH.ifa.draw.util.Undoable; -import java.awt.Point; - -/** - * A handle for a node on the polygon. - * Based on PolyLineHandle - * - * @author Doug Lea (dl at gee, Fri Feb 28 07:47:13 1997) - * @version <$CURRENT_VERSION$> - */ -public class PolygonHandle extends AbstractHandle { - - private Locator fLocator; - private int fIndex; - - /** - * Constructs a polygon handle. - * @param owner the owning polygon figure. - * @param l the locator - * @param index the index of the node associated with this handle. - */ - public PolygonHandle(PolygonFigure owner, Locator l, int index) { - super(owner); - fLocator = l; - fIndex = index; - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view, fIndex)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - ((PolygonHandle.UndoActivity)getUndoActivity()).setOldPoint(new Point(x, y)); - } - - public void invokeStep(int x, int y, int anchorX, int anchorY, DrawingView view) { - int index = ((PolyLineHandle.UndoActivity)getUndoActivity()).getPointIndex(); - myOwner().setPointAt(new Point(x, y), index); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - myOwner().smoothPoints(); - if ((x == anchorX) && (y == anchorY)) { - setUndoActivity(null); - } - } - - public Point locate() { - return fLocator.locate(owner()); - } - - private PolygonFigure myOwner() { - return (PolygonFigure)owner(); - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView, int newPointIndex) { - return new PolygonHandle.UndoActivity(newView, newPointIndex); - } - - public static class UndoActivity extends PolyLineHandle.UndoActivity { - - public UndoActivity(DrawingView newView, int newPointIndex) { - super(newView, newPointIndex); - } - - protected boolean movePointToOldLocation() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - - PolygonFigure figure = (PolygonFigure)fe.nextFigure(); - Point backupPoint = figure.pointAt(getPointIndex()); - figure.setPointAt(getOldPoint(), getPointIndex()); - figure.smoothPoints(); - setOldPoint(backupPoint); - - return true; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/PolygonScaleHandle.java b/JHotDraw/src/CH/ifa/draw/contrib/PolygonScaleHandle.java deleted file mode 100644 index ffa5ab53f..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/PolygonScaleHandle.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * @(#)PolygonScaleHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Geom; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.UndoableAdapter; -import java.awt.*; - -/** - * A Handle to scale and rotate a PolygonFigure - * Based on RadiusHandle - * - * @author Doug Lea (dl at gee, Sat Mar 1 09:06:09 1997) - * @version <$CURRENT_VERSION$> - */ -class PolygonScaleHandle extends AbstractHandle { - - private Point fCurrent; - - public PolygonScaleHandle(PolygonFigure owner) { - super(owner); - } - - /** - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - */ - public void invokeStart(int x, int y, DrawingView view) { - fCurrent = new Point(x, y); - PolygonScaleHandle.UndoActivity activity = (PolygonScaleHandle.UndoActivity)createUndoActivity(view); - setUndoActivity(activity); - activity.setAffectedFigures(new SingleFigureEnumerator(owner())); - activity.setPolygon(((PolygonFigure)(owner())).getPolygon()); - } - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - fCurrent = new Point(x, y); - Polygon polygon = ((PolygonScaleHandle.UndoActivity)getUndoActivity()).getPolygon(); - ((PolygonFigure)(owner())).scaleRotate(new Point(anchorX, anchorY), polygon, fCurrent); - } - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - ((PolygonFigure)(owner())).smoothPoints(); - if ((fCurrent.x == anchorX) && (fCurrent.y == anchorY)) { - // there is nothing to undo - setUndoActivity(null); - } - fCurrent = null; - } - - public Point locate() { - if (fCurrent == null) { - return getOrigin(); - } - else { - return fCurrent; - } - } - - Point getOrigin() { - // find a nice place to put handle - // Need to pick a place that will not overlap with point handle - // and is internal to polygon - - // Try for one HANDLESIZE step away from outermost toward center - - Point outer = ((PolygonFigure)(owner())).outermostPoint(); - Point ctr = ((PolygonFigure)(owner())).center(); - double len = Geom.length(outer.x, outer.y, ctr.x, ctr.y); - if (len == 0) { // best we can do? - return new Point(outer.x - HANDLESIZE/2, outer.y + HANDLESIZE/2); - } - - double u = HANDLESIZE / len; - if (u > 1.0) { // best we can do? - return new Point((outer.x * 3 + ctr.x)/4, (outer.y * 3 + ctr.y)/4); - } - else { - return new Point((int)(outer.x * (1.0 - u) + ctr.x * u), - (int)(outer.y * (1.0 - u) + ctr.y * u)); - } - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - - /* for debugging ... - Point ctr = ((PolygonFigure)(owner())).center(); - g.setColor(Color.blue); - g.fillOval(ctr.x, ctr.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(ctr.x, ctr.y, r.width, r.height); - - */ - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new PolygonScaleHandle.UndoActivity(newView); - } - - public static class UndoActivity extends UndoableAdapter { - private Polygon myPolygon; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return resetPolygon(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return resetPolygon(); - } - - protected boolean resetPolygon() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - PolygonFigure figure = (PolygonFigure)fe.nextFigure(); - Polygon backupPolygon = figure.getPolygon(); - figure.willChange(); - figure.setInternalPolygon(getPolygon()); - figure.changed(); - setPolygon(backupPolygon); - return true; - } - - protected void setPolygon(Polygon newPolygon) { - myPolygon = newPolygon; - } - - public Polygon getPolygon() { - return myPolygon; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/PolygonTool.java b/JHotDraw/src/CH/ifa/draw/contrib/PolygonTool.java deleted file mode 100644 index 878928b39..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/PolygonTool.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * @(#)PolygonTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Undoable; -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * Based on ScribbleTool - * - * @author Doug Lea (dl at gee) - Fri Feb 28 07:47:05 1997 - * @version <$CURRENT_VERSION$> - */ -public class PolygonTool extends AbstractTool { - - private PolygonFigure fPolygon; - private int fLastX, fLastY; - - /** - * the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - private Figure myAddedFigure; - - public PolygonTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - public void activate() { - super.activate(); - fPolygon = null; - } - - public void deactivate() { - if (fPolygon != null) { - fPolygon.smoothPoints(); - if (fPolygon.pointCount() < 3 || - fPolygon.size().width < 4 || fPolygon.size().height < 4) { - getActiveView().drawing().remove(fPolygon); - // nothing to undo - setUndoActivity(null); - } - } - fPolygon = null; - super.deactivate(); - } - - private void addPoint(int x, int y) { - if (fPolygon == null) { - fPolygon = new PolygonFigure(x, y); - setAddedFigure(view().add(fPolygon)); - fPolygon.addPoint(x, y); - } - else if (fLastX != x || fLastY != y) { - fPolygon.addPoint(x, y); - } - - fLastX = x; - fLastY = y; - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - // replace pts by actual event pts - x = e.getX(); - y = e.getY(); - - if (e.getClickCount() >= 2) { - if (fPolygon != null) { - fPolygon.smoothPoints(); - - // use undo activity from paste command... - setUndoActivity(createUndoActivity()); - - // put created figure into a figure enumeration - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(getAddedFigure())); - - editor().toolDone(); - } - fPolygon = null; - - } - else { - // use original event coordinates to avoid - // supress that the scribble is constrained to - // the grid - addPoint(e.getX(), e.getY()); - } - } - - public void mouseMove(MouseEvent e, int x, int y) { - if (e.getSource() == getActiveView()) { - if (fPolygon != null) { - if (fPolygon.pointCount() > 1) { - fPolygon.setPointAt(new Point(x, y), fPolygon.pointCount()-1); - getActiveView().checkDamage(); - } - } - } - } - - public void mouseDrag(MouseEvent e, int x, int y) { - // replace pts by actual event pts - x = e.getX(); - y = e.getY(); - addPoint(x, y); - } - - public void mouseUp(MouseEvent e, int x, int y) { - } - - /** - * Gets the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - protected Figure getAddedFigure() { - return myAddedFigure; - } - - private void setAddedFigure(Figure newAddedFigure) { - myAddedFigure = newAddedFigure; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/PopupMenuFigureSelection.java b/JHotDraw/src/CH/ifa/draw/contrib/PopupMenuFigureSelection.java deleted file mode 100644 index 16218a197..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/PopupMenuFigureSelection.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * @(#)PopupMenuFigureSelection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.*; - -/** - * An interface which allows a popup menu to interact with its Figure to - * which it is associated. - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface PopupMenuFigureSelection { - - /** - * Set the figure which was selected when the popup menu was invoked. - * - * @param newSelectedFigure figure which is selected (typically be a SelectionTool) - */ - public void setSelectedFigure(Figure newSelectedFigure); - - /** - * Get the figure which was selected when the popup menu was invoked. - * - * @return figure which is selected (typically be a SelectionTool) - */ - public Figure getSelectedFigure(); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/SVGDrawApp.java b/JHotDraw/src/CH/ifa/draw/contrib/SVGDrawApp.java deleted file mode 100644 index 9e484be74..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/SVGDrawApp.java +++ /dev/null @@ -1,49 +0,0 @@ -package CH.ifa.draw.contrib; - -import CH.ifa.draw.application.DrawApplication; -import CH.ifa.draw.samples.javadraw.JavaDrawApp; -import CH.ifa.draw.util.StorageFormatManager; - -/** - * @author mtnygard - * - * To change this generated comment edit the template variable "typecomment": - * Window>Preferences>Java>Templates. - * To enable and disable the creation of type comments go to - * Window>Preferences>Java>Code Generation. - */ -public class SVGDrawApp extends JavaDrawApp { - public static void main(String[] args) { - SVGDrawApp window = new SVGDrawApp(); - window.open(); - } - - public SVGDrawApp() { - super("JHotDraw"); - } - - /** - * Factory method which create a new instance of this - * application. - * - * @return newly created application - */ - protected DrawApplication createApplication() { - return new SVGDrawApp(); - } - - /** - * Factory method to create a StorageFormatManager for supported storage formats. - * Different applications might want to use different storage formats and can return - * their own format manager by overriding this method. - * - * TODO: Read storage formats from a config file. - */ - public StorageFormatManager createStorageFormatManager() { - StorageFormatManager storageFormatManager = new StorageFormatManager(); - SVGStorageFormat format = new SVGStorageFormat(); - storageFormatManager.addStorageFormat(format); - storageFormatManager.setDefaultStorageFormat(format); - return storageFormatManager; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/SVGStorageFormat.java b/JHotDraw/src/CH/ifa/draw/contrib/SVGStorageFormat.java deleted file mode 100644 index 00ab7766b..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/SVGStorageFormat.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)SVGStorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; - -import org.apache.batik.dom.GenericDOMImplementation; -import org.apache.batik.svggen.SVGGraphics2D; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Document; - -import CH.ifa.draw.framework.Drawing; -import CH.ifa.draw.util.StandardStorageFormat; - - -/** - * The SVGStorageFormat can save drawings in SVG 1.0. At this time, it cannot load - * SVG drawings. - * - * TODO: Refactor this and the other storage formats. There is too much duplication. - * - * @version <$CURRENT_VERSION$> - * @author mtnygard - */ -public class SVGStorageFormat extends StandardStorageFormat { - - /** - * Return the file extension recognized by the FileFilter for this - * StandardStorageFormat. - * - * @return the file extension - */ - protected String createFileExtension() { - return "svg"; - } - - /** - * Factory method to create a file description for the file type when displaying the - * associated FileFilter. - * - * @return the file description - */ - public String createFileDescription() { - return "Scalable Vector Graphics (svg)"; - } - - - /** - * @see CH.ifa.draw.util.StorageFormat#isRestoreFormat() - */ - public boolean isRestoreFormat() { - return false; - } - - /** - * @see CH.ifa.draw.util.StorageFormat#isStoreFormat() - */ - public boolean isStoreFormat() { - return true; - } - - /** - * Store a Drawing as SVG under a given name. - * - * @param fileName file name of the Drawing under which it should be stored - * @param saveDrawing drawing to be saved - * @return file name with correct file extension - * @see CH.ifa.draw.util.StorageFormat#store(java.lang.String, CH.ifa.draw.framework.Drawing) - */ - public String store(String fileName, Drawing saveDrawing) throws IOException { - // Get a DOMImplementation - DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); - - // Create an instance of org.w3c.dom.Document - Document document = domImpl.createDocument(null, "svg", null); - - // Create an instance of the SVG Generator - SVGGraphics2D svgGenerator = new SVGGraphics2D(document); - - // Ask the test to render into the SVG Graphics2D implementation - saveDrawing.draw(svgGenerator); - - // Finally, stream out SVG to the standard output using UTF-8 - // character to byte encoding - fileName = adjustFileName(fileName); - FileOutputStream fos = new FileOutputStream(fileName); - Writer out = new OutputStreamWriter(fos, "UTF-8"); - - - svgGenerator.stream(out, true); - return fileName; - } - - /** - * @see CH.ifa.draw.util.StorageFormat#restore(java.lang.String) - */ - public Drawing restore(String fileName) throws IOException { - throw new IOException("Not implemented"); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/SimpleLayouter.java b/JHotDraw/src/CH/ifa/draw/contrib/SimpleLayouter.java deleted file mode 100644 index a4d3513a3..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/SimpleLayouter.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * @(#)SimpleLayouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -import java.awt.*; -import java.io.IOException; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class SimpleLayouter implements Layouter { - - /** - * The Layoutable which should be laid out. - */ - private Layoutable myLayoutable; - - /** - * Insets to calculate a border - */ - private Insets myInsets; - - static final long serialVersionUID = 2928651014089117493L; - - private SimpleLayouter() { - // do nothing: for JDO-compliance only - } - - public SimpleLayouter(Layoutable newLayoutable) { - setLayoutable(newLayoutable); - setInsets(new Insets(0, 0, 0, 0)); - } - - /** - * Get the figure upon which the layout strategy operates. - * - * @return associated figure which should be laid out - */ - public Layoutable getLayoutable() { - return myLayoutable; - } - - /** - * Set the figure upon which the layout strategy operates. - * - * @param newLayoutable Layoutable to be laid out - */ - public void setLayoutable(Layoutable newLayoutable) { - myLayoutable = newLayoutable; - } - - /** - * Set the insets for spacing between the figure and its subfigures - * - * @param newInsets new spacing dimensions - */ - public void setInsets(Insets newInsets) { - myInsets = newInsets; - } - - /** - * Get the insets for spacing between the figure and its subfigures - * - * @return spacing dimensions - */ - public Insets getInsets() { - return myInsets; - } - - /** - * Create a new instance of this type and sets the layoutable - */ - public Layouter create(Layoutable newLayoutable) { - SimpleLayouter newLayouter = new SimpleLayouter(newLayoutable); - newLayouter.setInsets((Insets)getInsets().clone()); - return newLayouter; - } - - public Rectangle calculateLayout(Point origin, Point corner) { - Rectangle maxRect = new Rectangle(origin); - maxRect.add(corner); - FigureEnumeration fe = getLayoutable().figures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - maxRect.union(currentFigure.displayBox()); - } - maxRect.width += getInsets().left + getInsets().right; - maxRect.height += getInsets().top + getInsets().bottom; - return maxRect; - } - - public Rectangle layout(Point origin, Point corner) { - return calculateLayout(origin, corner); - } - - /** - * Reads the contained figures from StorableInput. - */ - public void read(StorableInput dr) throws IOException { - setLayoutable((Layoutable)dr.readStorable()); - setInsets(new Insets(dr.readInt(), dr.readInt(), dr.readInt(), dr.readInt())); - } - - /** - * Writes the contained figures to the StorableOutput. - */ - public void write(StorableOutput dw) { - dw.writeStorable(getLayoutable()); - Insets i = getInsets(); - dw.writeInt(i.top); - dw.writeInt(i.left); - dw.writeInt(i.bottom); - dw.writeInt(i.right); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/SplitConnectionTool.java b/JHotDraw/src/CH/ifa/draw/contrib/SplitConnectionTool.java deleted file mode 100644 index ff0f9ad03..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/SplitConnectionTool.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * @(#)ConnectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.standard.ConnectionTool; -import CH.ifa.draw.standard.SingleFigureEnumerator; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.figures.*; - -import java.awt.event.MouseEvent; -import java.awt.*; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class SplitConnectionTool extends ConnectionTool { - public SplitConnectionTool(DrawingEditor newDrawingEditor, ConnectionFigure newPrototype) { - super(newDrawingEditor, newPrototype); - } - - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - int ex = e.getX(); - int ey = e.getY(); - if (getTargetFigure() == null) { - setTargetFigure(findConnectableFigure(ex, ey, drawing())); - } - else { - if (getAddedFigure() == null) { - setConnection(createConnection()); - setStartConnector(findConnector(ex, ey, getTargetFigure())); - getConnection().connectStart(getStartConnector()); - getConnection().startPoint(ex, ey); - setAddedFigure(view().add(getConnection())); - } - Figure c = findTarget(ex, ey, drawing()); - if (c != null) { - // end connection figure found - setEndConnector(findConnector(ex, ex, c)); - getConnection().connectEnd(getEndConnector()); - getConnection().endPoint(ex, ey); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getAddedFigure())); - getConnection().updateConnection(); - init(); - editor().toolDone(); - } - else { - // split connection where the mouse click took place - if (getEndConnector() == null) { - Figure tempEndFigure = new NullFigure(); - tempEndFigure.basicDisplayBox(new Point(ex, ey), new Point(ex, ey)); - setEndConnector(new NullConnector(tempEndFigure)); - getConnection().connectEnd(getEndConnector()); - getConnection().endPoint(ex, ey); - getConnection().updateConnection(); - } - else { - ((PolyLineFigure)getConnection()).addPoint(ex, ey); - } - } - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - // usually do nothing: tool is still active - if (e.getClickCount() == 2) { - init(); - editor().toolDone(); - } - } - - public void mouseMove(MouseEvent e, int x, int y) { - // avoid tracking connectors - } - - public void mouseDrag(MouseEvent e, int x, int y) { - // avoid tracking connectors - } - - public void deactivate() { - if (getConnection() != null) { - view().remove(getConnection()); - } - super.deactivate(); - init(); - } - - protected void init() { - setConnection(null); - setStartConnector(null); - setEndConnector(null); - setAddedFigure(null); - setTargetFigure(null); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/SplitPaneDesktop.java b/JHotDraw/src/CH/ifa/draw/contrib/SplitPaneDesktop.java deleted file mode 100644 index bd393e4f6..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/SplitPaneDesktop.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * @(#)SplitPaneDesktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import javax.swing.*; -import java.awt.*; -import CH.ifa.draw.framework.DrawingView; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeEvent; - -/** - * @todo Gotta fix this !!! the selected view changes based on which split pane is selected! - * - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class SplitPaneDesktop extends JSplitPane implements Desktop { - - private DesktopEventService myDesktopEventService; - - public SplitPaneDesktop() { - setDesktopEventService(createDesktopEventService()); - setAlignmentX(JSplitPane.LEFT_ALIGNMENT); - setOneTouchExpandable(true); - - addPropertyChangeListener(createPropertyChangeListener()); - } - - protected PropertyChangeListener createPropertyChangeListener() { - return new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - if (getRightComponent() != null) { - getRightComponent().repaint(); - } - if (getLeftComponent() != null) { - getLeftComponent().repaint(); - } - } - }; - } - - protected Component createContents(DrawingView dv, int location) { - setRightComponent(createRightComponent(dv)); - setLeftComponent(createLeftComponent(dv)); - switch (location) { - case Desktop.PRIMARY: { - return getLeftComponent(); - } - case Desktop.SECONDARY: { - return getRightComponent(); - } - default: { - return null; - } - } - } - - protected Component createRightComponent(DrawingView dv) { - JScrollPane sp = new JScrollPane((Component)dv); - sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - sp.setAlignmentX(LEFT_ALIGNMENT); - return sp; - } - - protected Component createLeftComponent(DrawingView dv) { - return new JScrollPane(new JList()); - } - - public DrawingView getActiveDrawingView() { - return getDesktopEventService().getActiveDrawingView(); - } - - public void addToDesktop(DrawingView dv, int location) { - createContents(dv, Desktop.PRIMARY); -/* switch (location) { - case Desktop.PRIMARY: { - setLeftComponent(createContents(dv, Desktop.PRIMARY)); - break; - } - case Desktop.SECONDARY: { - setRightComponent(createContents(dv, Desktop.SECONDARY)); - break; - } - } -*/ -// validate(); - setDividerLocation(getInitDividerLocation()); - } - - protected int getInitDividerLocation() { - return 150; - } - - public void removeFromDesktop(DrawingView dv, int location) { - Component[] comps = getContainer().getComponents(); - for (int x = 0; x < comps.length; x++) { - if (dv == Helper.getDrawingView(comps[x])) { - getContainer().remove(comps[x]); - break; - } - } - } - - public void removeAllFromDesktop(int location) { - getContainer().removeAll(); - } - - public DrawingView[] getAllFromDesktop(int location) { - return getDesktopEventService().getDrawingViews(getComponents()); - } - - public void addDesktopListener(DesktopListener dpl) { - getDesktopEventService().addDesktopListener(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - getDesktopEventService().removeDesktopListener(dpl); - } - - private Container getContainer() { - return this; - } - - protected DesktopEventService getDesktopEventService() { - return myDesktopEventService; - } - - private void setDesktopEventService(DesktopEventService newDesktopEventService) { - myDesktopEventService = newDesktopEventService; - } - - protected DesktopEventService createDesktopEventService() { - return new DesktopEventService(this, getContainer()); - } - - public void updateTitle(String newDrawingTitle) { - // should be setTitle but a JPanelDesktop has no own title bar - setName(newDrawingTitle); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/SplitPaneDrawApplication.java b/JHotDraw/src/CH/ifa/draw/contrib/SplitPaneDrawApplication.java deleted file mode 100644 index 9c7f1af14..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/SplitPaneDrawApplication.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * @(#)SplitPaneDrawApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.application.*; - -/** - * A specialised DrawApplication, which offers basic support for a simple - * splitted pane content. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class SplitPaneDrawApplication extends DrawApplication { - - /** - * Constructs a drawing window with a default title. - */ - public SplitPaneDrawApplication() { - this("JHotDraw"); - } - - /** - * Constructs a drawing window with the given title. - */ - public SplitPaneDrawApplication(String title) { - super(title); - } - - protected Desktop createDesktop() { - return new SplitPaneDesktop(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/StandardLayouter.java b/JHotDraw/src/CH/ifa/draw/contrib/StandardLayouter.java deleted file mode 100644 index 921620d2e..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/StandardLayouter.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * @(#)StandardLayouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import java.awt.Point; -import java.awt.Rectangle; - -// JUnitDoclet begin import -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.framework.FigureEnumeration; -// JUnitDoclet end import - -/** - * A StandardLayouter contains standard algorithm for - * layouting a Layoutable. As a standard behaviour - * all child components of a Layoutable are laid out - * underneath each other starting from top to bottom while the - * x position of all child components stays the same and the width - * is forced to the width of the maximum width. At the end - * the presentation figure of the Layoutable is - * set to the maximum x and y size to encompass all contained - * child components graphically as well. - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class StandardLayouter extends SimpleLayouter { - - /** - * Default constructor which is needed for the Storable mechanism. - * Usually, the constructor which takes a Layoutable - * should be used as each StandardLayouter is associated - * with exactly one Layoutable. - */ - public StandardLayouter() { - this(null); - } - - /** - * Constructor which associates a StandardLayouter with - * a certain Layoutable. - * - * @param newLayoutable Layoutable to be laid out - */ - public StandardLayouter(Layoutable newLayoutable) { - super(newLayoutable); - } - - /** - * Create a new instance of this type and sets the layoutable - */ - public Layouter create(Layoutable newLayoutable) { - return new StandardLayouter(newLayoutable); - } - - /** - * Calculate the layout for the figure and all its - * subelements. The layout is not actually performed but just - * its dimensions are calculated. The insets for this figure - * are included in the return value. - * - * @param origin start point for the layout - * @param corner minimum corner point for the layout - */ - public Rectangle calculateLayout(Point origin, Point corner) { - int maxWidth = Math.abs(corner.x - origin.x); - int maxHeight = getInsets().top; - - // layout enclosed Layoutable and find maximum width - FigureEnumeration fe = getLayoutable().figures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - Rectangle r = null; - if (currentFigure instanceof Layoutable) { - Layouter layoutStrategy = ((Layoutable)currentFigure).getLayouter(); - r = layoutStrategy.calculateLayout( - new Point(0, 0), new Point(0, 0)); - } - else { - r = new Rectangle(currentFigure.displayBox().getBounds()); - } - maxWidth = Math.max(maxWidth, - r.width + getInsets().left + - getInsets().right); - maxHeight += r.height; - } - maxHeight += getInsets().bottom; - - return new Rectangle(origin.x, origin.y, maxWidth, maxHeight); - } - - /** - * Method which lays out a figure. It is called by the figure - * if a layout task is to be performed. First, the layout dimension for - * the figure is calculated and then the figure is arranged newly. - * All child component are place beneath another. The figure and all - * its children are forced to the minimium width - * - * @param origin start point for the layout - * @param corner minimum corner point for the layout - */ - public Rectangle layout(Point origin, Point corner) { - // calculate the layout of the figure and its sub-figures first - Rectangle r = calculateLayout(origin, corner); - - int maxHeight = getInsets().top; - FigureEnumeration fe = getLayoutable().figures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - - Point partOrigin = new Point(r.x + getInsets().left, r.y + maxHeight); - Point partCorner = new Point - (r.x + r.width - getInsets().right, - r.y + maxHeight + - currentFigure.displayBox().height); - currentFigure.displayBox(partOrigin, partCorner); - - maxHeight += currentFigure.displayBox().height; - } - - return new Rectangle(r.x, r.y, r.width, maxHeight + getInsets().bottom); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/TextAreaFigure.java b/JHotDraw/src/CH/ifa/draw/contrib/TextAreaFigure.java deleted file mode 100644 index bf238ecb1..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/TextAreaFigure.java +++ /dev/null @@ -1,929 +0,0 @@ -/* - * @(#)TextAreaFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib; - -import java.awt.*; -import java.awt.font.FontRenderContext; -import java.awt.font.LineBreakMeasurer; -import java.awt.font.TextAttribute; -import java.awt.font.TextLayout; -import java.awt.geom.Rectangle2D; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.text.AttributedCharacterIterator; -import java.text.AttributedString; -import java.text.CharacterIterator; -import java.util.*; -import java.util.List; - -import CH.ifa.draw.figures.AttributeFigure; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.framework.FigureChangeEvent; -import CH.ifa.draw.framework.FigureChangeListener; -import CH.ifa.draw.framework.HandleEnumeration; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - -/** - * A TextAreaFigure contains formatted text.<br> - * It automatically rearranges the text to fit its allocated display area, - * breaking the lines at word boundaries whenever possible.<br> - * The text can contain either LF or CRLF sequences to separate paragraphs, - * as well as tab characters for table like formatting and alignment.<br> - * Currently the tabs are distributed at regular intervals as determined by - * the TabSize property. Tabs align correctly with either fixed - * or variable fonts.<br> - * If, when resizing, the vertical size of the display box is not enough to - * display all the text, TextAreaFigure displays a dashed red line at the - * bottom of the figure to indicate there is hidden text.<br> - * TextAreFigure uses all standard attributes for the area rectangle, - * ie: FillColor, PenColor for the border, FontSize, FontStyle, and FontName, - * as well as four additional attributes LeftMargin, RightMargin, TopMargin, - * and TabSize.<br> - * - * @author Eduardo Francos - InContext - * @created 26 avril 2002 - * @version <$CURRENT_VERSION$> - */ - -public class TextAreaFigure extends AttributeFigure - implements FigureChangeListener, TextHolder { - - /** True if the paragraph's cache needs to be reconstructed */ - protected boolean fTextIsDirty = true; - /** True if the sizing needs to be recalculated */ - protected transient boolean fSizeIsDirty = true; - - /** The current display box for the figure */ - private Rectangle fDisplayBox; - - /** Paragraph cache resulting from splitting the text */ - protected List fParagraphs; - - /** The text */ - protected String fText; - /** The current font */ - protected Font fFont; - /** - * True if the font has changed and font related calculations need to be remade - */ - protected boolean fFontIsDirty = true; - - /** The width of the current font */ - protected float fFontWidth; - /** - * Map of attributes for the AttributedString used for the figure's text. - * Currently it just uses one single attribute with the figure's current font. - */ - protected Hashtable attributesMap = new Hashtable(); - - /** True if the figure is read only */ - protected boolean fIsReadOnly; - - /** A connected figure */ - protected Figure fObservedFigure = null; - /** Description of the Field */ - protected OffsetLocator fLocator = null; - - final static long serialVersionUID = 4993631445423148845L; - - // make sure required default attributes are set - static { - initDefaultAttribute("LeftMargin", new Float(5)); - initDefaultAttribute("RightMargin", new Float(5)); - initDefaultAttribute("TopMargin", new Float(5)); - initDefaultAttribute("TabSize", new Float(8)); - } - - - /** Constructor for the TextAreaFigure object */ - public TextAreaFigure() { - fParagraphs = CollectionsFactory.current().createList(); - fDisplayBox = new Rectangle(0, 0, 30, 15); - fFont = createFont(); - fText = new String(""); - - fSizeIsDirty = true; - fTextIsDirty = true; - fFontIsDirty = true; - } - - - /** - * Gets the text of the figure - * - * @return The text value - */ - public String getText() { - return fText; - } - - - /** - * Sets the text of the figure - * - * @param newText The new text value - */ - public void setText(String newText) { - if (newText == null || !newText.equals(fText)) { - markTextDirty(); - fText = newText; - changed(); - } - } - - /** - * Returns the display box for the text - * - * @return Description of the Return Value - */ - public Rectangle textDisplayBox() { - return displayBox(); - } - - /** - * Creates the font from current attributes. - * - * @return Description of the Return Value - */ - public Font createFont() { - return new Font( - (String)getAttribute("FontName"), - ((Integer)getAttribute("FontStyle")).intValue(), - ((Integer)getAttribute("FontSize")).intValue()); - } - - public boolean isReadOnly() - { - return fIsReadOnly; - } - - public void setReadOnly(boolean newReadOnly) - { - fIsReadOnly = newReadOnly; - } - - /** - * Tests whether the figure accepts typing. - * - * @return Description of the Return Value - */ - public boolean acceptsTyping() { - return !isReadOnly(); - } - - - /** - * Called whenever the something changes that requires text recomputing - */ - protected void markTextDirty() { - setTextDirty(true); - } - - - /** - * Sets the textDirty attribute of the TextAreaFigure object - * - * @param newTextDirty The new textDirty value - */ - protected void setTextDirty(boolean newTextDirty) { - fTextIsDirty = newTextDirty; - } - - - /** - * Gets the textDirty attribute of the TextAreaFigure object - * - * @return The textDirty value - */ - public boolean isTextDirty() { - return fTextIsDirty; - } - - - /** - * Called whenever the something changes that requires size recomputing - */ - protected void markSizeDirty() { - setSizeDirty(true); - } - - - /** - * Called to set the dirty status of the size - * - * @param newSizeIsDirty The new sizeDirty value - */ - public void setSizeDirty(boolean newSizeIsDirty) { - fSizeIsDirty = newSizeIsDirty; - } - - - /** - * Returns the current size dirty status - * - * @return The sizeDirty value - */ - public boolean isSizeDirty() { - return fSizeIsDirty; - } - - /** - * Gets the font. - * - * @return The font value - */ - public Font getFont() { - return fFont; - } - - /** - * Sets the font. - * - * @param newFont The new font value - */ - public void setFont(Font newFont) { - if(newFont == null) { - throw new IllegalArgumentException(); - } - willChange(); - fFont = newFont; - markSizeDirty(); - markFontDirty(); - attributesMap = new Hashtable(1); - attributesMap.put(TextAttribute.FONT, newFont); - changed(); - } - - /** - * Gets the number of columns to be overlaid when the figure is edited.<br> - * This method is mandatory by the TextHolder interface but is not - * used by the TextAreaFigure/TextAreaTool couple because the overlay always - * covers the text area display box - * - * @return the number of overlay columns - */ - public int overlayColumns() { - return 0; - } - - /** - * Sets the display box for the figure - * - * @param origin origin point - * @param corner corner point - * @see Figure - */ - public void basicDisplayBox(Point origin, Point corner) { - Dimension prevSize = fDisplayBox.getSize(); - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - if (!fDisplayBox.getSize().equals(prevSize)){ - markSizeDirty(); - } - } - - /** - * Returns an iterator of standard sizing handles to manipulate the figure - * - * @return Description of the Return Value - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - /** - * Returns the current display box for the figure - * - * @return Description of the Return Value - */ - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - - /** - * Moves the figure the supplied offset - * - * @param x x displacement - * @param y y displacement - */ - public void moveBy(int x, int y) { - willChange(); - basicMoveBy(x, y); - if (fLocator != null) { - fLocator.moveBy(x, y); - } - changed(); - } - - /** - * Moves the figure the supplied offset - * - * @param x x displacement - * @param y y displacement - */ - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x, y); - } - - /** - * Draws the background for the figure. Called by the superclass with the colors - * set from the current attribute values - * - * @param g The graphics to use for the drawing - */ - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - g.fillRect(r.x, r.y, r.width, r.height); - } - - /** - * Draws the figure. Overriden so as to draw the text once everything - * else has been drawn - * - * @param g The graphics to use for the drawing - */ - public void draw(Graphics g) { - super.draw(g); - drawText(g, displayBox()); - } - - /** - * Draws the frame around the text - * - * @param g The graphics to use for the drawing - */ - public void drawFrame(Graphics g) { - Rectangle r = displayBox(); - g.setColor((Color)getAttribute("FrameColor")); - g.drawRect(r.x, r.y, r.width, r.height); - } - - - /** - * Formats and draws the text for the figure - * - * @param g the graphics for the drawing. It can be null when - * called just to compute the size - * @param displayBox the display box within which the text should be formatted and drawn - * @return Description of the Return Value - */ - protected float drawText(Graphics g, Rectangle displayBox) { - Graphics2D g2 = null; - Shape savedClipArea = null; - Color savedFontColor = null; - Rectangle2D clipRect = null; - RenderingHints savedRenderingHints = null; - - if (g != null) { - g2 = (Graphics2D)g; - savedRenderingHints = g2.getRenderingHints(); - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g2.setRenderingHint(RenderingHints.KEY_RENDERING, - RenderingHints.VALUE_RENDER_QUALITY); - //Font savedFont = g2.getFont(); - savedFontColor = g2.getColor(); - savedClipArea = g2.getClip(); - if(savedClipArea != null) { - clipRect = displayBox.createIntersection((Rectangle2D)savedClipArea); - } - else { - clipRect = displayBox; - } - g2.setClip(clipRect); - Color textColor = getTextColor(); - if (!ColorMap.isTransparent(textColor)) { - g2.setColor(textColor); - } - g2.setFont(getFont()); - } - FontRenderContext fontRenderCtx = new FontRenderContext(null, false, false); - - // split the text into paragraphs - prepareText(); - - float leftMargin = displayBox.x + ((Float)getAttribute("LeftMargin")).floatValue(); - float rightMargin = displayBox.x + displayBox.width - ((Float)getAttribute("RightMargin")).floatValue(); - float topMargin = displayBox.y + ((Float)getAttribute("TopMargin")).floatValue(); - - /** - * @todo we prepare stops for 40 tabs which should be enough to handle - * all normal cases, but a better means should/could be implemented - */ - float[] tabStops = new float[40]; - // tabSize is in pixels - float tabSize = ((Float)getAttribute("TabSize")).floatValue() * getFontWidth(); - float tabPos = tabSize; - for (int tabCnt = 0; tabCnt < 40; tabCnt++) { - tabStops[tabCnt] = tabPos + leftMargin; - tabPos += tabSize; - } - - /** Iterate on the paragraphs displaying each one in turn */ - float verticalPos = topMargin; - Iterator paragraphs = fParagraphs.iterator(); - while (paragraphs.hasNext()) { - String paragraphText = (String)paragraphs.next(); - - // prepare tabs. Here we build an array with the character positions - // of the tabs within the paragraph - AttributedString attrText = new AttributedString(paragraphText); - AttributedCharacterIterator paragraphIter = attrText.getIterator(); - int[] tabLocations = new int[paragraphText.length()]; - int tabCount = 0; - for (char c = paragraphIter.first(); c != CharacterIterator.DONE; c = paragraphIter.next()) { - if (c == '\t') { - tabLocations[tabCount++] = paragraphIter.getIndex(); - } - } - tabLocations[tabCount] = paragraphIter.getEndIndex() - 1; - - // tabs done. Replace tab characters with spaces. This to avoid - // a strange behaviour where the layout is a lot slower and - // the font get's changed. If anybody knows why this so please - // tell me. - paragraphText = paragraphText.replace('\t', ' '); - attrText = new AttributedString(paragraphText, attributesMap); - paragraphIter = attrText.getIterator(); - - // Now tabLocations has an entry for every tab's offset in - // the text. For convenience, the last entry in tabLocations - // is the offset of the last character in the text. - - LineBreakMeasurer measurer = new LineBreakMeasurer(paragraphIter, fontRenderCtx); - int currentTab = 0; - - while (measurer.getPosition() < paragraphIter.getEndIndex()) { - // Lay out and draw each line. All segments on a line - // must be computed before any drawing can occur, since - // we must know the largest ascent on the line. - // TextLayouts are computed and stored in a collection; - // their horizontal positions are stored in a parallel - // collection. - - // lineContainsText is true after first segment is drawn - boolean lineContainsText = false; - boolean lineComplete = false; - float maxAscent = 0; - float maxDescent = 0; - float horizontalPos = leftMargin; - List layouts = CollectionsFactory.current().createList(1); - List penPositions = CollectionsFactory.current().createList(1); - - while (!lineComplete) { - float wrappingWidth = rightMargin - horizontalPos; - // ensure wrappingWidth is at least 1 - wrappingWidth = Math.max(1, wrappingWidth); - TextLayout layout = - measurer.nextLayout(wrappingWidth, - tabLocations[currentTab] + 1, - lineContainsText); - - // layout can be null if lineContainsText is true - if (layout != null) { - layouts.add(layout); - penPositions.add(new Float(horizontalPos)); - horizontalPos += layout.getAdvance(); - maxAscent = Math.max(maxAscent, layout.getAscent()); - maxDescent = Math.max(maxDescent, - layout.getDescent() + layout.getLeading()); - } - else { - lineComplete = true; - } - - lineContainsText = true; - - if (measurer.getPosition() == tabLocations[currentTab] + 1) { - currentTab++; - } - - if (measurer.getPosition() == paragraphIter.getEndIndex()) { - lineComplete = true; - } - else if (horizontalPos >= tabStops[tabStops.length - 1]) { - lineComplete = true; - } - - if (!lineComplete) { - // move to next tab stop - int j; - for (j = 0; horizontalPos >= tabStops[j]; j++) { - } - horizontalPos = tabStops[j]; - } - } - - // set the vertical position for the line - verticalPos += maxAscent; - - // now iterate through layouts and draw them - Iterator layoutEnum = layouts.iterator(); - Iterator positionEnum = penPositions.iterator(); - while (layoutEnum.hasNext()) { - TextLayout nextLayout = (TextLayout)layoutEnum.next(); - Float nextPosition = (Float)positionEnum.next(); - if (g2 != null) { - nextLayout.draw(g2, nextPosition.floatValue(), verticalPos); - } - } - - // keep track of the highest (actually lowest) position for the - // next iteration - verticalPos += maxDescent; - } - } - - // if the last displayed line is not visible because the displayBox is - // too small then draw a dashed red line at the bottom - if (g2 != null && verticalPos > clipRect.getMaxY() && clipRect.getMaxY() == displayBox.getMaxY()) { - Stroke savedStroke = g2.getStroke(); - float[] dash = new float[2]; - dash[0] = 2f; - dash[1] = 4f; - g2.setStroke(new BasicStroke( - 1f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, - 1f, dash, 0f)); - g2.setColor(Color.red); - g2.drawLine((int)clipRect.getMinX() + 1, (int)clipRect.getMaxY() - 1, - (int)clipRect.getMaxX() - 1, (int)clipRect.getMaxY() - 1); - g2.setStroke(savedStroke); - } - - // restore saved graphic attributes - if (g2 != null) { - if(savedClipArea != null) { - g2.setClip(savedClipArea); - } - g2.setColor(savedFontColor); - g2.setRenderingHints(savedRenderingHints); - } - - // and return the final text height - return verticalPos; - } - - /** - * Splits the text into paragraphs. A paragraph is delimited by a LF or CRLF. - * If the paragraph is empty it returns a single space so the display logic has - * something to work with - */ - protected void prepareText() { - if (!isTextDirty()) { - return; - } - - fParagraphs = CollectionsFactory.current().createList(); - String paragraphText; - Point pos = new Point(-1, -1); - - while ((paragraphText = getNextParagraph(fText, pos)) != null) { - if (paragraphText.length() == 0) { - paragraphText = " "; - } - fParagraphs.add(paragraphText); - } - setTextDirty(false); - } - - /** - * Gets the next paragraph in the supplied string<br> - * Paragraphs are defined by a LF or CRLF sequence<br> - * Scanning starts from the next characters as given by the pos.y value - * - * @param text the text to break into paragraphs - * @param pos a point where pos.x is the position of the first character of the paragraph in - * the string and pos.y is the last - * @return The text for the paragraph - */ - protected String getNextParagraph(String text, Point pos) { - int start = pos.y + 1; - - if (start >= text.length()) { - return null; - } - pos.x = start; - - int end = text.indexOf('\n', start); - if (end == -1) { - end = text.length(); - } - pos.y = end; - // check for "\r\n" sequence - if (text.charAt(end - 1) == '\r') { - return text.substring(start, end - 1); - } - else { - return text.substring(start, end); - } - } - - /** - * A text area figure uses the "LeftMargin", "RightMargin", "TopMargin", - * "TabSize", "FontSize", "FontStyle", and "FontName" attributes - * - * @param name the attribute's name - * @return the attribute value - * @deprecated use getAttribute(FigureAttributeConstant) - */ - public Object getAttribute(String name) { - return super.getAttribute(name); - } - - - /** - * A text area figure uses the "LeftMargin", "RightMargin", - * "TopMargin", "TabSize", "FontSize", "FontStyle", and "FontName" - * attributes - * - * @param name the new attribute name - * @param value the new attribute value - * @deprecated use setAttribute(FigureAttributeConstant, Object) - */ - public void setAttribute(String name, Object value) { - // we need to create a new font if one of the font attributes - Font font = getFont(); - if (name.equals("FontSize")) { - Integer s = (Integer)value; - setFont(new Font(font.getName(), font.getStyle(), s.intValue())); - // store the attribute - super.setAttribute(name, value); - } - else if (name.equals("FontStyle")) { - Integer s = (Integer)value; - int style = font.getStyle(); - if (s.intValue() == Font.PLAIN) { - style = Font.PLAIN; - } - else { - style = style ^ s.intValue(); - } - setFont(new Font(font.getName(), style, font.getSize())); - // store the attribute - super.setAttribute(name, new Integer(style)); - } - else if (name.equals("FontName")) { - String n = (String)value; - setFont(new Font(n, font.getStyle(), font.getSize())); - // store the attribute - super.setAttribute(name, value); - } - else { - // store the attribute - super.setAttribute(name, value); - } - } - - /** - * Writes the figure to StorableOutput - * - * @param dw the output storable - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - dw.writeString(fText); - dw.writeBoolean(fIsReadOnly); - dw.writeStorable(fObservedFigure); - dw.writeStorable(fLocator); - } - - /** - * Reads the figure from StorableInput - * - * @param dr Description of the Parameter - * @throws IOException the inout storable - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - - markSizeDirty(); - markTextDirty(); - markFontDirty(); - - fDisplayBox.x = dr.readInt(); - fDisplayBox.y = dr.readInt(); - fDisplayBox.width = dr.readInt(); - fDisplayBox.height = dr.readInt(); - fText = dr.readString(); - fIsReadOnly = dr.readBoolean(); - - fObservedFigure = (Figure)dr.readStorable(); - if (fObservedFigure != null) { - fObservedFigure.addFigureChangeListener(this); - } - fLocator = (OffsetLocator)dr.readStorable(); - - setFont(createFont()); - } - - /** - * Reads the figure from an object stream - * - * @param s the input stream - * @throws ClassNotFoundException thrown by called methods - * @throws IOException thrown by called methods - */ - protected void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - if (fObservedFigure != null) { - fObservedFigure.addFigureChangeListener(this); - } - markSizeDirty(); - markTextDirty(); - markFontDirty(); - } - - /** - * Connects the figure to another figure - * - * @param figure the connecting figure - */ - public void connect(Figure figure) { - if (fObservedFigure != null) { - fObservedFigure.removeFigureChangeListener(this); - } - - fObservedFigure = figure; - fLocator = new OffsetLocator(figure.connectedTextLocator(this)); - fObservedFigure.addFigureChangeListener(this); - updateLocation(); - } - - /** - * Disconnects a text holder from a connect figure. - * - * @param disconnectFigure the disconnecting figure - */ - public void disconnect(Figure disconnectFigure) { - if (disconnectFigure != null) { - disconnectFigure.removeFigureChangeListener(this); - } - fLocator = null; - } - - /** - * Description of the Method - * @todo Implement this CH.ifa.draw.framework.FigureChangeListener method - * - * @param e Description of the Parameter - */ - public void figureInvalidated(FigureChangeEvent e) { - } - - /** - * A connected figure has changed, update the figure's location - * - * @param e Description of the Parameter - */ - public void figureChanged(FigureChangeEvent e) { - updateLocation(); - } - - /** - * Updates the location relative to the connected figure. - * The TextAreaFigure is centered around the located point. - */ - protected void updateLocation() { - if (fLocator != null) { - Point p = fLocator.locate(fObservedFigure); - - p.x -= size().width / 2 + fDisplayBox.x; - p.y -= size().height / 2 + fDisplayBox.y; - if (p.x != 0 || p.y != 0) { - willChange(); - basicMoveBy(p.x, p.y); - changed(); - } - } - } - - /** - * The figure is about to be removed from another composite figure - * - * @param e Description of the Parameter - */ - public void figureRemoved(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRemoved(new FigureChangeEvent(this)); - } - } - - /** - * A request to remove the figure from another composite figure - * - * @param e Description of the Parameter - */ - public void figureRequestRemove(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestRemove(new FigureChangeEvent(this)); - } - } - - /** - * @param e Description of the Parameter - */ - public void figureRequestUpdate(FigureChangeEvent e) { - // @todo: Implement this CH.ifa.draw.framework.FigureChangeListener method - } - - /** - * Gets the font width for the active font. This is by convention the width of - * the 'W' character, the widest one - * - * @return The fontWidth value - */ - protected float getFontWidth() { - updateFontInfo(); - return fFontWidth; - } - - /** Retrieve all Font information needed */ - protected void updateFontInfo() { - if (!isFontDirty()) { - return; - } - fFontWidth = (int) getFont().getMaxCharBounds(new FontRenderContext(null, false, false)).getWidth(); - - setFontDirty(false); - } - - /** - * Gets the text color of a figure. This is a convenience - * method. - * - * @return The textColor value - * @see #getAttribute - */ - public Color getTextColor() { - return (Color)getAttribute("TextColor"); - } - - /** - * Gets the empty attribute of the figure. True if there is no text - * - * @return The empty value - */ - public boolean isEmpty() { - return (fText.length() == 0); - } - - /** - * Called whenever the something changes that requires font recomputing - */ - protected void markFontDirty() { - setFontDirty(true); - } - - /** - * Gets the fontDirty attribute of the TextAreaFigure object - * - * @return The fontDirty value - */ - public boolean isFontDirty() { - return fFontIsDirty; - } - - /** - * Sets the fontDirty attribute of the TextAreaFigure object - * - * @param newFontIsDirty The new fontDirty value - */ - public void setFontDirty(boolean newFontIsDirty) { - fFontIsDirty = newFontIsDirty; - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure() { - return this; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/TextAreaTool.java b/JHotDraw/src/CH/ifa/draw/contrib/TextAreaTool.java deleted file mode 100644 index 0517da709..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/TextAreaTool.java +++ /dev/null @@ -1,445 +0,0 @@ -/* - * @(#)TextAreaTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib; - -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.framework.DrawingView; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.standard.CreationTool; -import CH.ifa.draw.standard.SingleFigureEnumerator; -import CH.ifa.draw.standard.TextHolder; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.UndoableAdapter; - -import java.awt.Container; -import java.awt.Font; -import java.awt.Rectangle; -import java.awt.event.MouseEvent; - -/** - * A TextAreaTool creates TextAreaFigures.<br> - * To create a new text area, the user drags a rectangle on the drawing on - * a free spot.<br> - * When releasing the mouse the tool calls the area's editor to enter the text.<br> - * If the tool is clicked on an existing area the tool simply calls the - * area's editor.<br> - * When creating a new area, if the user leaves the text empty, the newly created - * area figure is discarded. - * - * @author Eduardo Francos - InContext - * @created 29 april 2002 - * @version 1.0 - */ -public class TextAreaTool extends CreationTool { - /** The field used for editing */ - protected FloatingTextArea fTextField; - - /** The typing target */ - protected TextHolder fTypingTarget; - /** The edited figure */ - protected Figure fEditedFigure; - - /** - * Constructor for the TextAreaTool object - * - * @param newDrawingEditor the managing drawing editor - * @param prototype the prototype for the figure - */ - public TextAreaTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - /** - * If the pressed figure is a TextHolder and it accepts editing it can be edited.<br> - * If there is no pressed figure a new text figure is created. - * - * @param e Description of the Parameter - * @param x Description of the Parameter - * @param y Description of the Parameter - */ - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - Figure pressedFigure = drawing().findFigureInside(x, y); - TextHolder textHolder = null; - if (pressedFigure != null) { - textHolder = pressedFigure.getTextHolder(); - } - - if ((textHolder != null) && (textHolder.acceptsTyping())) { - beginEdit(textHolder, pressedFigure); - return; - } - if (getTypingTarget() != null) { - endEdit(); - - if (getCreatedFigure() != null && getCreatedFigure().isEmpty()) { - drawing().remove(getAddedFigure()); - // nothing to undo - setUndoActivity(null); - } - else { -// // use undo activity from paste command... -// setUndoActivity(createUndoActivity()); -// -// // put created figure into a figure enumeration -// getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(getAddedFigure())); - } - setTypingTarget(null); - setCreatedFigure(null); - setEditedFigure(null); - setAddedFigure(null); - editor().toolDone(); - } - else { - super.mouseDown(e, x, y); - } - } - - /** - * Drags to set the initial text area display box - * - * @param e Description of the Parameter - * @param x Description of the Parameter - * @param y Description of the Parameter - */ - public void mouseDrag(MouseEvent e, int x, int y) { - // if not creating just ignore - if (getCreatedFigure() == null) { - return; - } - super.mouseDrag(e, x, y); - } - - /** - * If creating a figure it ends the creation process and calls the editor - * - * @param e Description of the Parameter - * @param x Description of the Parameter - * @param y Description of the Parameter - */ - public void mouseUp(MouseEvent e, int x, int y) { - // if not creating just ignore - if (getCreatedFigure() == null) { - return; - } - - // update view so the created figure is drawn before the floating text - // figure is overlaid. (Note, fDamage should be null in StandardDrawingView - // when the overlay figure is drawn because a JTextField cannot be scrolled) - view().checkDamage(); - TextHolder textHolder = (TextHolder)getCreatedFigure(); - if (textHolder.acceptsTyping()) { - beginEdit(textHolder, getCreatedFigure()); - } - else { - editor().toolDone(); - } - } - - /** - * Terminates the editing of a text figure. - */ - public void deactivate() { - endEdit(); - super.deactivate(); - } - - /** - * Activates the figure's editor - */ - public void activate() { - super.activate(); - getActiveView().clearSelection(); - } - - /** - * Test whether the text tool is currently activated and is displaying - * a overlay TextFigure for accepting input. - * - * @return true, if the text tool has a accepting target TextFigure for its input, false otherwise - */ - public boolean isActivated() { - return getTypingTarget() != null; - } - - /** - * Begins editing the figure's text - * - * @param figure the typing target - * @param selectedFigure the edited figure - */ - protected void beginEdit(TextHolder figure, Figure selectedFigure) { - if (fTextField == null) { - fTextField = new FloatingTextArea(); - } - - if (figure != getTypingTarget() && getTypingTarget() != null) { - endEdit(); - } - - fTextField.createOverlay((Container)view(), getFont(figure)); - fTextField.setBounds(fieldBounds(figure), figure.getText()); - - setTypingTarget(figure); - setEditedFigure(selectedFigure); - setUndoActivity(createUndoActivity()); - } - - /** - * Gets the font to be used for editing the figure - * - * @param figure the figure - * @return The font - */ - protected Font getFont(TextHolder figure) { - return figure.getFont(); - } - - /** Ends editing of the figure's text */ - protected void endEdit() { - if ((getTypingTarget() != null) && (fTextField != null)) { - if (fTextField.getText().length() > 0) { - getTypingTarget().setText(fTextField.getText()); - // put created figure into a figure enumeration - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getEditedFigure())); - ((TextAreaTool.UndoActivity)getUndoActivity()).setBackupText( - getTypingTarget().getText()); - } - else { - drawing().orphan(getAddedFigure()); - // nothing to undo -// setUndoActivity(null); - } - - fTextField.endOverlay(); - fTextField = null; -// view().checkDamage(); - } - } - - /** - * Returns the bounds fo the figure - * - * @param figure the edited figure - * @return Description of the Return Value - */ - private Rectangle fieldBounds(TextHolder figure) { - return figure.textDisplayBox(); - } - - /** - * Sets the typingTarget attribute of the TextAreaTool - * - * @param newTypingTarget The new typingTarget value - */ - protected void setTypingTarget(TextHolder newTypingTarget) { - fTypingTarget = newTypingTarget; - } - - /** - * Gets the editedFigure attribute of the TextAreaTool - * - * @return The editedFigure value - */ - protected Figure getEditedFigure() { - return fEditedFigure; - } - - /** - * Sets the editedFigure attribute of the TextAreaTool - * - * @param figure The new editedFigure value - */ - protected void setEditedFigure(Figure figure) { - fEditedFigure = figure; - } - - /** - * Gets the typingTarget attribute of the TextAreaTool - * - * @return The typingTarget value - */ - protected TextHolder getTypingTarget() { - return fTypingTarget; - } - - /** - * Factory method for undo activity - * - * @return Description of the Return Value - */ - protected Undoable createUndoActivity() { - return new TextAreaTool.UndoActivity(view(), getTypingTarget().getText()); - } - - /** - * Handles undo/redo for text areas - * - * @author gualo - */ - public static class UndoActivity extends UndoableAdapter { - /** The original text */ - private String myOriginalText; - /** The backup text */ - private String myBackupText; - - /** - * Constructor for the UndoActivity object - * - * @param newDrawingView Description of the Parameter - * @param newOriginalText Description of the Parameter - */ - public UndoActivity(DrawingView newDrawingView, String newOriginalText) { - super(newDrawingView); - setOriginalText(newOriginalText); - setUndoable(true); - setRedoable(true); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - /** - * Undo the activity - * - * @return Description of the Return Value - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - - getDrawingView().clearSelection(); - - if (!isValidText(getOriginalText())) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().drawing().orphan(fe.nextFigure()); - } - } - // add text figure if it has been removed (no backup text) - else if (!isValidText(getBackupText())) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().add(fe.nextFigure()); - } - setText(getOriginalText()); - } - else { - setText(getOriginalText()); - } - - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - /** - * Redo the activity - * - * @return Description of the Return Value - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - - getDrawingView().clearSelection(); - - // the text figure did exist but was remove - if (!isValidText(getBackupText())) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().drawing().orphan(fe.nextFigure()); - } - } - // the text figure didn't exist before - else if (!isValidText(getOriginalText())) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().drawing().add(fe.nextFigure()); - setText(getBackupText()); - } - } - else { - setText(getBackupText()); - } - - return true; - } - - /** - * Validates the text in the undo activity - * - * @param toBeChecked Description of the Parameter - * @return The validText value - */ - protected boolean isValidText(String toBeChecked) { - return ((toBeChecked != null) && (toBeChecked.length() > 0)); - } - - /** - * Sets the text attribute of the UndoActivity - * - * @param newText The new text value - */ - protected void setText(String newText) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - currentFigure.getTextHolder().setText(newText); - } - } - } - - /** - * Sets the backupText attribute of the UndoActivity - * - * @param newBackupText The new backupText value - */ - public void setBackupText(String newBackupText) { - myBackupText = newBackupText; - } - - /** - * Gets the backupText attribute of the UndoActivity - * - * @return The backupText value - */ - public String getBackupText() { - return myBackupText; - } - - /** - * Sets the originalText attribute of the UndoActivity - * - * @param newOriginalText The new originalText value - */ - public void setOriginalText(String newOriginalText) { - myOriginalText = newOriginalText; - } - - /** - * Gets the originalText attribute of the UndoActivity - * - * @return The originalText value - */ - public String getOriginalText() { - return myOriginalText; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/TriangleFigure.java b/JHotDraw/src/CH/ifa/draw/contrib/TriangleFigure.java deleted file mode 100644 index b56f96bba..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/TriangleFigure.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * @(#)TriangleFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.framework.HandleEnumeration; -import CH.ifa.draw.standard.HandleEnumerator; - -import java.awt.*; -import java.util.List; -import java.io.IOException; - -/** - * A triangle with same dimensions as its enclosing rectangle, - * and apex at any of 8 places - * - * @author Doug Lea (dl at gee, Tue Feb 25 17:30:58 1997) - * @version <$CURRENT_VERSION$> - */ -public class TriangleFigure extends RectangleFigure { - - static double[] rotations = { - -Math.PI/2, -Math.PI/4, - 0.0, Math.PI/4, - Math.PI/2, Math.PI * 3/4, - Math.PI, -Math.PI * 3/4 - }; - - private int fRotation = 0; - - public TriangleFigure() { - super(new Point(0,0), new Point(0,0)); - } - - public TriangleFigure(Point origin, Point corner) { - super(origin, corner); - } - - public HandleEnumeration handles() { - List h = super.handles().toList(); - h.add(new TriangleRotationHandle(this)); - return new HandleEnumerator(h); - } - - public void rotate(double angle) { - willChange(); - double dist = Double.MAX_VALUE; - int best = 0; - for (int i = 0; i < rotations.length; ++i) { - double d = Math.abs(angle - rotations[i]); - if (d < dist) { - dist = d; - best = i; - } - } - fRotation = best; - changed(); - } - - /** Return the polygon describing the triangle **/ - public Polygon getPolygon() { - Rectangle r = displayBox(); - Polygon p = new Polygon(); - switch (fRotation) { - case 0: - p.addPoint(r.x + r.width/2, r.y); - p.addPoint(r.x + r.width, r.y + r.height); - p.addPoint(r.x, r.y + r.height); - break; - case 1: - p.addPoint(r.x + r.width, r.y); - p.addPoint(r.x + r.width, r.y + r.height); - p.addPoint(r.x, r.y); - break; - case 2: - p.addPoint(r.x + r.width, r.y + r.height/2); - p.addPoint(r.x, r.y + r.height); - p.addPoint(r.x, r.y); - break; - case 3: - p.addPoint(r.x + r.width, r.y + r.height); - p.addPoint(r.x, r.y + r.height); - p.addPoint(r.x + r.width, r.y); - break; - case 4: - p.addPoint(r.x + r.width/2, r.y + r.height); - p.addPoint(r.x, r.y); - p.addPoint(r.x + r.width, r.y); - break; - case 5: - p.addPoint(r.x, r.y + r.height); - p.addPoint(r.x, r.y); - p.addPoint(r.x + r.width, r.y + r.height); - break; - case 6: - p.addPoint(r.x, r.y + r.height/2); - p.addPoint(r.x + r.width, r.y); - p.addPoint(r.x + r.width, r.y + r.height); - break; - case 7: - p.addPoint(r.x, r.y); - p.addPoint(r.x + r.width, r.y); - p.addPoint(r.x, r.y + r.height); - break; - } - return p; - } - - - public void draw(Graphics g) { - Polygon p = getPolygon(); - g.setColor(getFillColor()); - g.fillPolygon(p); - g.setColor(getFrameColor()); - g.drawPolygon(p); - } - - public Insets connectionInsets() { - Rectangle r = displayBox(); - switch(fRotation) { - case 0: - return new Insets(r.height, r.width/2, 0, r.width/2); - case 1: - return new Insets(0, r.width, r.height, 0); - case 2: - return new Insets(r.height/2, 0, r.height/2, r.width); - case 3: - return new Insets(r.height, r.width, 0, 0); - case 4: - return new Insets(0, r.width/2, r.height, r.width/2); - case 5: - return new Insets(r.height, 0, 0, r.width); - case 6: - return new Insets(r.height/2, r.width, r.height/2, 0); - case 7: - return new Insets(0, 0, r.height, r.width); - default: - return null; - } - } - - public boolean containsPoint(int x, int y) { - return getPolygon().contains(x, y); - } - - public Point center() { - return PolygonFigure.center(getPolygon()); - } - - public Point chop(Point p) { - return PolygonFigure.chop(getPolygon(), p); - } - - public Object clone() { - TriangleFigure figure = (TriangleFigure) super.clone(); - figure.fRotation = fRotation; - return figure; - } - - public double getRotationAngle() { - return rotations[fRotation]; - } - - //-- store / load ---------------------------------------------- - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fRotation); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fRotation = dr.readInt(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/TriangleRotationHandle.java b/JHotDraw/src/CH/ifa/draw/contrib/TriangleRotationHandle.java deleted file mode 100644 index 25b351284..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/TriangleRotationHandle.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * @(#)TriangleRotationHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import java.awt.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; -import CH.ifa.draw.standard.*; - - -/** - * A Handle to rotate a TriangleFigure - * Based on RadiusHandle - * - * @author Doug Lea (dl at gee, Sun Mar 2 19:15:28 1997) - * @version <$CURRENT_VERSION$> - */ -class TriangleRotationHandle extends AbstractHandle { - - private Point fOrigin; - - public TriangleRotationHandle(TriangleFigure owner) { - super(owner); - } - - /** - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - */ - public void invokeStart(int x, int y, DrawingView view) { - fOrigin = getOrigin(); - TriangleRotationHandle.UndoActivity activity = - (TriangleRotationHandle.UndoActivity)createUndoActivity(view); - setUndoActivity(activity); - activity.setAffectedFigures(new SingleFigureEnumerator(owner())); - double rotation = ((TriangleFigure)(owner())).getRotationAngle(); - activity.setRotationAngle(rotation); - } - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Point fCenter = owner().center(); - double angle = Math.atan2(fOrigin.y + y - anchorY - fCenter.y, - fOrigin.x + x - anchorX - fCenter.x); - ((TriangleFigure)(owner())).rotate(angle); - } - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - fOrigin = null; - } - - public Point locate() { - return getOrigin(); - } - - Point getOrigin() { - // find a nice place to put handle - // almost same code as PolygonScaleHandle - Polygon p = ((TriangleFigure)(owner())).getPolygon(); - Point first = new Point(p.xpoints[0], p.ypoints[0]); - Point ctr = owner().center(); - double len = Geom.length(first.x, first.y, ctr.x, ctr.y); - if (len == 0) { // best we can do? - return new Point(first.x - HANDLESIZE/2, first.y + HANDLESIZE/2); - } - - double u = HANDLESIZE / len; - if (u > 1.0) { // best we can do? - return new Point((first.x * 3 + ctr.x)/4, (first.y * 3 + ctr.y)/4); - } - else { - return new Point((int)(first.x * (1.0 - u) + ctr.x * u), - (int)(first.y * (1.0 - u) + ctr.y * u)); - } - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new TriangleRotationHandle.UndoActivity(newView); - } - - public static class UndoActivity extends UndoableAdapter { - private double myRotationAngle; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return resetRotationAngle(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return resetRotationAngle(); - } - - protected boolean resetRotationAngle() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - TriangleFigure figure = (TriangleFigure)fe.nextFigure(); - double backupAngle = figure.getRotationAngle(); - figure.willChange(); - figure.rotate(getRotationAngle()); - figure.changed(); - setRotationAngle(backupAngle); - return true; - } - - protected void setRotationAngle(double newRotationAngle) { - myRotationAngle = newRotationAngle; - } - - public double getRotationAngle() { - return myRotationAngle; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/WindowMenu.java b/JHotDraw/src/CH/ifa/draw/contrib/WindowMenu.java deleted file mode 100644 index 9560bee82..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/WindowMenu.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * @(#)WindowMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyVetoException; - -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JInternalFrame; -import javax.swing.event.MenuEvent; -import javax.swing.event.MenuListener; - -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.standard.AbstractCommand; -import CH.ifa.draw.util.Command; -import CH.ifa.draw.util.CommandMenu; - -/** - * Menu component that handles the functionality expected of a standard - * "Windows" menu for MDI applications. - * - * @author Wolfram Kaiser (adapted from an article in JavaWorld) - * @version <$CURRENT_VERSION$> - */ -public class WindowMenu extends CommandMenu { - private MDIDesktopPane desktop; - private Command cascadeCommand; - private Command tileCommand; - - public WindowMenu(String newText, MDIDesktopPane newDesktop, DrawingEditor newEditor) { - super(newText); - this.desktop = newDesktop; - cascadeCommand = new AbstractCommand("Cascade", newEditor) { - public void execute() { - WindowMenu.this.desktop.cascadeFrames(); - } - public boolean isExecutable() { - return super.isExecutable() && (WindowMenu.this.desktop.getAllFrames().length > 0); - } - }; - tileCommand = new AbstractCommand("Tile", newEditor) { - public void execute() { - WindowMenu.this.desktop.tileFramesHorizontally(); - } - public boolean isExecutable() { - return super.isExecutable() && (WindowMenu.this.desktop.getAllFrames().length > 0); - } - }; - addMenuListener(new MenuListener() { - public void menuCanceled (MenuEvent e) {} - - public void menuDeselected (MenuEvent e) { - removeAll(); - } - - public void menuSelected (MenuEvent e) { - buildChildMenus(); - } - }); - } - - /* Sets up the children menus depending on the current desktop state */ - private void buildChildMenus() { - ChildMenuItem menu; - JInternalFrame[] array = desktop.getAllFrames(); - - add(new CommandMenuItem(cascadeCommand)); - add(new CommandMenuItem(tileCommand)); - if (array.length > 0) { - addSeparator(); - } -// cascade.setEnabled(array.length > 0); -// tile.setEnabled(array.length > 0); - - for (int i = 0; i < array.length; i++) { - menu = new ChildMenuItem(array[i]); - menu.setState(i == 0); - menu.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - JInternalFrame frame = ((ChildMenuItem)ae.getSource()).getFrame(); - frame.moveToFront(); - try { - frame.setSelected(true); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - } - }); - menu.setIcon(array[i].getFrameIcon()); - add(menu); - } - } - - /* This JCheckBoxMenuItem descendant is used to track the child frame that corresponds - to a give menu. */ - class ChildMenuItem extends JCheckBoxMenuItem { - private JInternalFrame frame; - - public ChildMenuItem(JInternalFrame newFrame) { - super(newFrame.getTitle()); - frame=newFrame; - } - - public JInternalFrame getFrame() { - return frame; - } - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDFigures.java b/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDFigures.java deleted file mode 100644 index 8c2a90448..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDFigures.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @(#)DNDFigures.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.dnd; - -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.standard.FigureEnumerator; -import CH.ifa.draw.util.CollectionsFactory; - -import java.awt.Point; -import java.util.List; - -/** - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DNDFigures implements java.io.Serializable { - private List figures; - private Point origin; - - public DNDFigures(FigureEnumeration fe, Point newOrigin) { - this.figures = CollectionsFactory.current().createList(); - // copy figure enumeration because enumerations should not be fields - //the drop operation will serialize and deseralize which I believe is a form of copy!? - while (fe.hasNextFigure()) { - figures.add(fe.nextFigure()); - } - origin = newOrigin; - } - - public FigureEnumeration getFigures() { - return new FigureEnumerator(figures); - } - - public Point getOrigin() { - return origin; - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDFiguresTransferable.java b/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDFiguresTransferable.java deleted file mode 100644 index 9ae944a1a..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDFiguresTransferable.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @(#)DNDFiguresTransferable.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.dnd; - -import java.awt.datatransfer.*; -import java.io.*; - -/** - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DNDFiguresTransferable implements Transferable , Serializable { - public static DataFlavor DNDFiguresFlavor = new DataFlavor(DNDFigures.class,"DNDFigures"); - private Object o; - - public DNDFiguresTransferable(Object newObject) { - //if object is not serializable throw exception - o = newObject; - } - public DataFlavor[] getTransferDataFlavors() { - return new DataFlavor [] {DNDFiguresFlavor }; - } - - public boolean isDataFlavorSupported(DataFlavor flavor) { - return flavor.equals(DNDFiguresFlavor); - } - - public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { - if ( isDataFlavorSupported(flavor) == false) { - throw new UnsupportedFlavorException( flavor ); - } - return o; - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDHelper.java b/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDHelper.java deleted file mode 100644 index 709778aea..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDHelper.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * @(#)DNDHelper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.dnd; - -import CH.ifa.draw.framework.*; - -import java.awt.Component; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.UnsupportedFlavorException; -import java.awt.datatransfer.Transferable; -import java.awt.dnd.*; -import java.io.*; -import java.util.List; - -/** - * Changes made in hopes of eventually cleaning up the functionality and - * distributing it sensibly. 1/10/02 - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public abstract class DNDHelper { - public static DataFlavor ASCIIFlavor = new DataFlavor("text/plain; charset=ascii", "ASCII text"); - private DragGestureRecognizer dgr; - private DragGestureListener dragGestureListener; - private DropTarget dropTarget; - private DragSourceListener dragSourceListener; - private DropTargetListener dropTargetListener; - private boolean isDragSource = false; - private boolean isDropTarget = false; - - public DNDHelper(boolean newIsDragSource, boolean newIsDropTarget){ - isDragSource = newIsDragSource; - isDropTarget = newIsDropTarget; - } - /** - * Do not call this from the constructor. its methods are overridable. - */ - public void initialize(DragGestureListener dgl) { - if (isDragSource) { - setDragGestureListener(dgl); - setDragSourceListener(createDragSourceListener()); - setDragGestureRecognizer(createDragGestureRecognizer(getDragGestureListener())); - } - if (isDropTarget) { - setDropTargetListener(createDropTargetListener()); - setDropTarget(createDropTarget()); - } - } - - public void deinitialize(){ - if (getDragSourceListener() != null) { - destroyDragGestreRecognizer(); - setDragSourceListener(null); - } - if (getDropTargetListener() != null) { - setDropTarget(null); - setDropTargetListener(null); - } - } -// public void setDragSourceState(boolean state) { -// if(state == false){ -// getDragGestureRecognizer().setSourceActions(DnDConstants.ACTION_NONE); -// } -// else { -// getDragGestureRecognizer().setSourceActions(getDragSourceActions()); -// } -// } - protected abstract DrawingView view(); - protected abstract DrawingEditor editor(); - - protected static Object processReceivedData(DataFlavor flavor, Transferable transferable) { - Object receivedData = null; - if (transferable == null) { - return null; - } - - try { - if (flavor.equals(DataFlavor.stringFlavor)) { - receivedData = transferable.getTransferData(DataFlavor.stringFlavor); - } - else if (flavor.equals(DataFlavor.javaFileListFlavor)) { - List aList = (List)transferable.getTransferData(DataFlavor.javaFileListFlavor); - File fList [] = new File[aList.size()]; - aList.toArray(fList); - receivedData = fList; - } - else if (flavor.equals(ASCIIFlavor)) { - /* this may be too much work for locally received data */ - InputStream is = (InputStream)transferable.getTransferData(ASCIIFlavor); - int length = is.available(); - byte[] bytes = new byte[length]; - int n = is.read(bytes); - if (n > 0) { - /* seems to be a 0 tacked on the end of Windows strings. I - * havent checked other platforms. This does not happen - * with windows socket io. strange? - */ - //for (int i = 0; i < length; i++) { - // if (bytes[i] == 0) { - // length = i; - // break; - // } - //} - receivedData = new String(bytes, 0, n); - } - } - else if (flavor.equals(DNDFiguresTransferable.DNDFiguresFlavor)) { - receivedData = transferable.getTransferData(DNDFiguresTransferable.DNDFiguresFlavor); - } - } - catch (java.io.IOException ioe) { - System.err.println(ioe); - } - catch (UnsupportedFlavorException ufe) { - System.err.println(ufe); - } - catch (ClassCastException cce) { - System.err.println(cce); - } - - return receivedData; - } - - /** - * This must reflect the capabilities of the dragSsource, not your desired - * actions. If you desire limited drag actions, then I suppose you need to - * make a new drag gesture recognizer? I do know that if you put for instance - * ACTION_COPY but your device supports ACTION_COPY_OR_MOVE, then the receiving - * target may show the rejected icon, but will still be forced improperly to - * accept your MOVE since the system is not properly calling your MOVE a MOVE - * because you claimed incorrectly that you were incapable of MOVE. - */ - protected int getDragSourceActions() { - return DnDConstants.ACTION_COPY_OR_MOVE; - } - - protected int getDropTargetActions(){ - return DnDConstants.ACTION_COPY_OR_MOVE; - } - - protected void setDragGestureListener(DragGestureListener dragGestureListener){ - this.dragGestureListener = dragGestureListener; - } - - protected DragGestureListener getDragGestureListener(){ - return dragGestureListener; - } - - protected void setDragGestureRecognizer(DragGestureRecognizer dragGestureRecognizer){ - dgr = dragGestureRecognizer; - } - - protected DragGestureRecognizer getDragGestureRecognizer(){ - return dgr; - } - - protected void setDropTarget(DropTarget newDropTarget){ - if ((newDropTarget == null) && (dropTarget != null)) { - dropTarget.setComponent(null); - dropTarget.removeDropTargetListener(getDropTargetListener()); - } - dropTarget = newDropTarget; - } - - protected DropTarget createDropTarget() { - DropTarget dt = null; - if (Component.class.isInstance(view())) { - try { - dt = new DropTarget((Component)view(), getDropTargetActions(), getDropTargetListener()); - //System.out.println(view().toString() + " Initialized to DND."); - } - catch (NullPointerException npe) { - System.err.println("View Failed to initialize to DND."); - System.err.println("Container likely did not have peer before the DropTarget was added"); - System.err.println(npe); - npe.printStackTrace(); - } - } - return dt; - } - - /** - * Used to create the gesture recognizer which in effect turns on draggability. - */ - protected DragGestureRecognizer createDragGestureRecognizer(DragGestureListener dgl) { - DragGestureRecognizer aDgr = null; - if (Component.class.isInstance(view())) { - Component c = (Component)view(); - aDgr = java.awt.dnd.DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer( - c, - getDragSourceActions(), - dgl); - //System.out.println("DragGestureRecognizer created: " + view()); - } - return aDgr; - } - - /** - * Used to destroy the gesture listener which ineffect turns off dragability. - */ - protected void destroyDragGestreRecognizer() { - //System.out.println("Destroying DGR " + view()); - if (getDragGestureRecognizer() != null) { - getDragGestureRecognizer().removeDragGestureListener(getDragGestureListener()); - getDragGestureRecognizer().setComponent(null); - setDragGestureRecognizer(null); - } - } - - protected void setDropTargetListener(DropTargetListener dropTargetListener){ - this.dropTargetListener = dropTargetListener; - } - - protected DropTargetListener getDropTargetListener(){ - return dropTargetListener; - } - - protected DropTargetListener createDropTargetListener(){ - return new JHDDropTargetListener(editor(),view()); - } - - public DragSourceListener getDragSourceListener(){ - return dragSourceListener; - } - - protected void setDragSourceListener(DragSourceListener dragSourceListener){ - this.dragSourceListener = dragSourceListener; - } - - protected DragSourceListener createDragSourceListener(){ - return new JHDDragSourceListener(editor(),view()); - } -} - /** - * These transferable objects are used to package your data when you want - * to initiate a transfer. They are not used when you only want to receive - * data. Formating the data is the responsibility of the sender primarily. - * Untested. Used for dragging ASCII text out of JHotDraw - */ -/* public class ASCIIText implements Transferable - { - String s = new String("This is ASCII text"); - byte[] bytes; - - public DataFlavor[] getTransferDataFlavors() { - return new DataFlavor[] { ASCIIFlavor }; - } - - public boolean isDataFlavorSupported(DataFlavor dataFlavor) { - return dataFlavor.equals(ASCIIFlavor); - } - - public Object getTransferData(DataFlavor dataFlavor) - throws UnsupportedFlavorException, IOException { - if (!isDataFlavorSupported(dataFlavor)) - throw new UnsupportedFlavorException(dataFlavor); - - bytes = new byte[s.length() + 1]; - for (int i = 0; i < s.length(); i++) - bytes = s.getBytes(); - bytes[s.length()] = 0; - return new ByteArrayInputStream(bytes); - } - }*/ \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDInterface.java b/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDInterface.java deleted file mode 100644 index 601c8cca8..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DNDInterface.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)DNDInterface.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.dnd; - -import java.awt.dnd.DragGestureListener; -import java.awt.dnd.DragSourceListener; - -/** - * Interface for Components which wish to participate in drag and drop. - * - * A Component which wishes to participate in drag and drop should implement - * this interface. Once done the DragBDropTool will be able to transfer data - * to and from the Component. The Component will also be activated to receive - * drops from extra-JVM sources according to the conditions the Component - * specifies. - * - * @author CL.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface DNDInterface { - public void DNDInitialize(DragGestureListener dgl); - public void DNDDeinitialize(); - - /** - * When the DNDTool starts a drag action, it queries the interface for the - * dragSourceListener of the source view. It uses this listener to create - * the dragGestureEvent. - */ - public DragSourceListener getDragSourceListener(); -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DragNDropTool.java b/JHotDraw/src/CH/ifa/draw/contrib/dnd/DragNDropTool.java deleted file mode 100644 index eaeaf339b..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/dnd/DragNDropTool.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - * @(#)DragNDropTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.dnd; - -import java.awt.Component; -import java.awt.Point; -import java.awt.dnd.DragGestureListener; -import java.awt.event.MouseEvent; - -import javax.swing.JComponent; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; - -/** - * This is a tool which handles drag and drop between Components in - * JHotDraw and drags from JHotDraw. It also indirectly - * handles management of Drops from extra-JVM sources. - * - * - * Drag and Drop is about information moving, not images or objects. Its about - * moving a JHD rectangle to another application and that application understanding - * both its shape, color, attributes, and everything about it. not how it looks. - * - * There can be only 1 such tool in an application. A view can be registered - * with only a single DropSource as far as I know (maybe not). - * - * @todo For intra JVM transfers we need to pass Point origin as well, and not - * assume it will be valid which currently will cause a null pointer exception. - * or worse, will be valid with some local value. - * The dropSource will prevent simultaneous drops. - * - * For a Container to be initialized to support Drag and Drop, it must first - * have a connection to a heavyweight component. Or more precisely it must have - * a peer. That means new Component() is not capable of being initiated until - * it has attachment to a top level component i.e. JFrame.add(comp); If you add - * a Component to a Container, that Container must be the child of some - * Container which is added in its heirachy to a topmost Component. I will - * refine this description with more appropriate terms as I think of new ways to - * express this. It won't work until setVisible(true) is called. then you can - * initialize DND. - * - * note: if drop target is same as dragsource then we should draw the object. - * - * - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DragNDropTool extends AbstractTool { - - private Tool fChild; - private DragGestureListener dragGestureListener; - private boolean dragOn; - - public DragNDropTool(DrawingEditor editor) { - super(editor); - setDragGestureListener(createDragGestureListener()); - dragOn = false; - } - - /** - * Sent when a new view is created - */ - protected void viewCreated(DrawingView view) { - super.viewCreated(view); - if (DNDInterface.class.isInstance(view)) { - DNDInterface dndi = (DNDInterface)view; - dndi.DNDInitialize( getDragGestureListener() ); - } - } - - /** - * Send when an existing view is about to be destroyed. - */ - protected void viewDestroying(DrawingView view) { - if (DNDInterface.class.isInstance(view)) { - DNDInterface dndi = (DNDInterface)view; - dndi.DNDDeinitialize(); - } - super.viewDestroying(view); - } - - /** - * Turn on drag by adding a DragGestureRegognizer to all Views which are - * based on Components. - */ - public void activate() { - super.activate(); -// setDragSourceActive(true); - //System.out.println("DNDTool Activation"); - setDragOn(true); - } - - public void deactivate() { - //System.out.println("DNDTool deactivation."); - setDragOn(false); -// setDragSourceActive(false);//if its not turned off other tools will have problems since drag will start - super.deactivate(); - } - -// private void setDragSourceActive(boolean newState) { -// Iterator it = comps.iterator(); -// while (it.hasNext()) { -// DNDInterface dndi = (DNDInterface)it.next(); -// dndi.setDragSourceState(newState); -// } -// } - - /** - * Sets the type of cursor based on what is under the coordinates in the - * active view. - */ - public static void setCursor(int x, int y, DrawingView view) { - if (view == null) { //shouldnt need this - return; - } - Handle handle = view.findHandle(x, y); - Figure figure = view.drawing().findFigure(x, y); - - if (handle != null) { - view.setCursor(handle.getCursor()); - } - else if (figure != null) { - view.setCursor(new AWTCursor(java.awt.Cursor.MOVE_CURSOR)); - } - else { - view.setCursor(new AWTCursor(java.awt.Cursor.DEFAULT_CURSOR)); - } - } - - /** - * Handles mouse moves (if the mouse button is up). - * Switches the cursors depending on whats under them. - * Don't use x, y use getX and getY so get the real unlimited position - * Part of the Tool interface. - */ - public void mouseMove(MouseEvent evt, int x, int y) { - if (evt.getSource() == getActiveView()) { - setCursor(x, y, getActiveView()); - } - } - - /** - * Handles mouse up events. The events are forwarded to the - * current tracker. - * Part of the Tool interface. - */ - public void mouseUp(MouseEvent e, int x, int y) { - if (fChild != null) { // JDK1.1 doesn't guarantee mouseDown, mouseDrag, mouseUp - fChild.mouseUp(e, x, y); - fChild = null; - } - setDragOn(true); - view().unfreezeView(); - //get undo actions and push into undo stack? - } - - /** - * Handles mouse down events and starts the corresponding tracker. - * Part of the Tool interface. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - // on MS-Windows NT: AWT generates additional mouse down events - // when the left button is down && right button is clicked. - // To avoid dead locks we ignore such events - if (fChild != null) { - return; - } - - view().freezeView(); - - Handle handle = view().findHandle(getAnchorX(), getAnchorY()); - if (handle != null) { - //Turn off DND - setDragOn(false); - fChild = createHandleTracker(handle); - } - else { - Figure figure = drawing().findFigure(getAnchorX(), getAnchorY()); - if (figure != null) { - //fChild = createDragTracker(editor(), figure); - //fChild.activate(); - fChild = null; - if (e.isShiftDown()) { - view().toggleSelection(figure); - } - else if (!view().isFigureSelected(figure)) { - view().clearSelection(); - view().addToSelection(figure); - } - } - else { - //Turn off DND - setDragOn(false); - if (!e.isShiftDown()) { - view().clearSelection(); - } - fChild = createAreaTracker(); - } - } - if (fChild != null) { - fChild.mouseDown(e, x, y); - } - } - - /** - * Handles mouse drag events. The events are forwarded to the - * current tracker. - * Part of the Tool interface. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - if (fChild != null) { // JDK1.1 doesn't guarantee mouseDown, mouseDrag, mouseUp - fChild.mouseDrag(e, x, y); - } - } - - /** - * Factory method to create an area tracker. It is used to select an - * area. - */ - protected Tool createAreaTracker() { - return new SelectAreaTracker(editor()); - } - - /** - * Factory method to create a Drag tracker. It is used to drag a figure. - */ - protected Tool createDragTracker(DrawingEditor editor, Figure f) { - return new DragTracker(editor, f); - } - - /** - * Factory method to create a Handle tracker. It is used to track a handle. - */ - protected Tool createHandleTracker(Handle handle) { - return new HandleTracker(editor(), handle); - } - - private DragGestureListener getDragGestureListener(){ - return dragGestureListener; - } - - private void setDragGestureListener(DragGestureListener dragGestureListener){ - this.dragGestureListener = dragGestureListener; - } - - protected boolean isDragOn(){ - return dragOn; - } - - protected void setDragOn(boolean isNewDragOn){ - this.dragOn = isNewDragOn; - } - - private DragGestureListener createDragGestureListener() { - - return new DragGestureListener() { - - public void dragGestureRecognized(final java.awt.dnd.DragGestureEvent dge) { - Component c = dge.getComponent(); - //System.out.println("Drag Gesture Recognized for " + c); - if (isDragOn() == false) { - return; - } - - if (c instanceof DrawingView) { - boolean found = false; - DrawingView dv = (DrawingView)c; - /* Send the drawing view which inspired the action a mouseUp to clean - up its current tool. This is because mouse up will otherwise never - be sent and the tool will be stuck with only mouse down which means - it will likely stay activated. solve later for now just make - but report. */ - /* this is a list of cloned figures */ - FigureEnumeration selectedElements = dv.selection(); - - if (selectedElements.hasNextFigure() == false) { - return; - } - - Point p = dge.getDragOrigin(); - // System.out.println("origin at " + p); - while (selectedElements.hasNextFigure()) { - Figure f = selectedElements.nextFigure(); - if (f.containsPoint(p.x, p.y)) { - /* Rectangle r = figgy.displayBox(); - sx = r.width; - sy = r.height;*/ - //System.out.println("figure is " + figgy); - found = true; - break; - } - } - if (found == true) { - DNDFigures dndff = new DNDFigures(dv.selection(), p); - DNDFiguresTransferable trans = new DNDFiguresTransferable(dndff); - - /* SAVE FOR FUTURE DRAG IMAGE SUPPORT */ - /* drag image support that I need to test on some supporting platform. - windows is not supporting this on NT so far. Ill test 98 and 2K next - - boolean support = dragSource.isDragImageSupported(); - java.awt.image.BufferedImage bi = new BufferedImage(sx,sy,BufferedImage.TYPE_INT_RGB); - Graphics2D g = bi.createGraphics(); - Iterator itr2 = selectedElements.iterator(); - while ( itr2.hasNext() ) { - Figure fig = (Figure) itr2.next(); - fig = (Figure)fig.clone(); - Rectangle rold = fig.displayBox(); - fig.moveBy(-rold.x,-rold.y); - fig.draw(g); - } - g.setBackground(Color.red); - dge.getDragSource().startDrag( - dge, - DragSource.DefaultMoveDrop, - bi, - new Point(0,0), - trans, - this); - */ - if (c instanceof JComponent) { - ((JComponent)c).setAutoscrolls(false); - } - dge.getDragSource().startDrag( - dge, - null, - trans, - ((DNDInterface)dv).getDragSourceListener()); - } - } - } - }; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/dnd/JHDDragSourceListener.java b/JHotDraw/src/CH/ifa/draw/contrib/dnd/JHDDragSourceListener.java deleted file mode 100644 index 94cca89ef..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/dnd/JHDDragSourceListener.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * JHDDragSource.java - * - * Created on January 28, 2003, 4:49 PM - */ - -package CH.ifa.draw.contrib.dnd; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.DeleteFromDrawingVisitor; -import CH.ifa.draw.util.Undoable; -import java.awt.Component; -import java.awt.dnd.*; -import javax.swing.JComponent; - -/** - * - * @author Administrator - */ -public class JHDDragSourceListener implements java.awt.dnd.DragSourceListener { - private Undoable sourceUndoable; - private Boolean autoscrollState; - private DrawingEditor editor; - - /** Creates a new instance of JHDDragSource */ - public JHDDragSourceListener(DrawingEditor newEditor, DrawingView newView) { - this.editor = newEditor; - } -// protected DrawingView view(){ -// return dv; -// } - protected DrawingEditor editor(){ - return editor; - } - /** - * This method is invoked to signify that the Drag and Drop operation is complete. - * This is the last method called in the process. - */ - public void dragDropEnd(java.awt.dnd.DragSourceDropEvent dsde) { - DrawingView view = (DrawingView) dsde.getDragSourceContext().getComponent(); - log("DragSourceDropEvent-dragDropEnd"); - if (dsde.getDropSuccess() == true) { - if (dsde.getDropAction() == DnDConstants.ACTION_MOVE) { - log("DragSourceDropEvent-ACTION_MOVE"); - //get the flavor in order of ease of use here. - setSourceUndoActivity( createSourceUndoActivity( view ) ); - DNDFigures df = (DNDFigures)DNDHelper.processReceivedData(DNDFiguresTransferable.DNDFiguresFlavor, dsde.getDragSourceContext().getTransferable()); - getSourceUndoActivity().setAffectedFigures( df.getFigures() ); - - //all this visitation needs to be hidden in a view method. - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor(view.drawing()); - FigureEnumeration fe = getSourceUndoActivity().getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().visit(deleteVisitor); - } - view.clearSelection(); - view.checkDamage(); - - editor().getUndoManager().pushUndo( getSourceUndoActivity() ); - editor().getUndoManager().clearRedos(); - // update menus - editor().figureSelectionChanged( view ); - } - else if (dsde.getDropAction() == DnDConstants.ACTION_COPY) { - log("DragSourceDropEvent-ACTION_COPY"); - } - } - - if (autoscrollState != null) { - Component c = dsde.getDragSourceContext().getComponent(); - if (JComponent.class.isInstance( c )) { - JComponent jc = (JComponent)c; - jc.setAutoscrolls(autoscrollState.booleanValue()); - autoscrollState= null; - } - } - } - /** - * Called as the hotspot enters a platform dependent drop site. - */ - public void dragEnter(DragSourceDragEvent dsde) { - log("DragSourceDragEvent-dragEnter"); - if (autoscrollState == null) { - Component c = dsde.getDragSourceContext().getComponent(); - if (JComponent.class.isInstance( c )) { - JComponent jc = (JComponent)c; - autoscrollState= new Boolean(jc.getAutoscrolls()); - jc.setAutoscrolls(false);//why turn it off??? - } - } - } - /** - * Called as the hotspot exits a platform dependent drop site. - */ - public void dragExit(java.awt.dnd.DragSourceEvent dse) { - } - /** - * Called as the hotspot moves over a platform dependent drop site. - */ - public void dragOver(DragSourceDragEvent dsde) { - //log("DragSourceDragEvent-dragOver"); - } - /** - * Called when the user has modified the drop gesture. - */ - public void dropActionChanged(DragSourceDragEvent dsde) { - log("DragSourceDragEvent-dropActionChanged"); - } - - - - - - - - - - - - /** - * Factory method for undo activity - */ - protected Undoable createSourceUndoActivity(DrawingView drawingView) { - return new RemoveUndoActivity( drawingView ); - } - protected void setSourceUndoActivity(Undoable undoable){ - sourceUndoable = undoable; - } - protected Undoable getSourceUndoActivity(){ - return sourceUndoable; - } - public static class RemoveUndoActivity extends CH.ifa.draw.util.UndoableAdapter { - private boolean undone = false; - public RemoveUndoActivity(DrawingView view) { - super( view ); - log("RemoveUndoActivity created " + view); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (isUndoable()) { - if(getAffectedFigures().hasNextFigure()) { - log("RemoveUndoActivity undo"); - getDrawingView().clearSelection(); - setAffectedFigures( getDrawingView().insertFigures(getAffectedFigures(), 0, 0,false)); - undone = true; - return true; - } - } - return false; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - log("RemoveUndoActivity redo"); - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor( getDrawingView().drawing()); - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().visit(deleteVisitor); //orphans figures - } - getDrawingView().clearSelection(); - setAffectedFigures( deleteVisitor.getDeletedFigures() ); - undone = false; - return true; - } - return false; - } - /** - * Since this is a delete activity, figures can only be released if the - * action has not been undone. - */ - public void release() { - if(undone == false){//we have figures that used to be in the drawing, but were not adding back - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - getDrawingView().drawing().remove(f); - f.release(); - } - } - setAffectedFigures(CH.ifa.draw.standard.FigureEnumerator.getEmptyEnumeration()); - } - } - - - - - - - - private static void log(String message){ - //System.out.println("JHDDragSourceListener: " + message); - } - - - - - - - -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/dnd/JHDDropTargetListener.java b/JHotDraw/src/CH/ifa/draw/contrib/dnd/JHDDropTargetListener.java deleted file mode 100644 index 060cb31be..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/dnd/JHDDropTargetListener.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * JHDDropTargetListener.java - * - * Created on January 28, 2003, 4:23 PM - */ - -package CH.ifa.draw.contrib.dnd; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.DeleteFromDrawingVisitor; -import java.io.File; -import CH.ifa.draw.util.Undoable; -import java.awt.Point; -import java.awt.datatransfer.DataFlavor; -import java.awt.dnd.*; - - -/** - * - * @author Administrator - */ -public class JHDDropTargetListener implements java.awt.dnd.DropTargetListener { - private int fLastX=0, fLastY=0; // previous mouse position - private Undoable targetUndoable; - private DrawingView dv; - private DrawingEditor editor; - /** Creates a new instance of JHDDropTargetListener */ - public JHDDropTargetListener(DrawingEditor drawingEditor, DrawingView drawingView) { - dv = drawingView; - editor = drawingEditor; - } - protected DrawingView view(){ - return dv; - } - protected DrawingEditor editor(){ - return editor; - } - - - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - - /** - * Called when a drag operation has encountered the DropTarget. - */ - public void dragEnter(DropTargetDragEvent dtde) { - log("DropTargetDragEvent-dragEnter"); - supportDropTargetDragEvent(dtde); - if (fLastX == 0) { - fLastX = dtde.getLocation().x; - } - if (fLastY == 0) { - fLastY = dtde.getLocation().y; - } - } - - /** - * The drag operation has departed the DropTarget without dropping. - */ - public void dragExit(java.awt.dnd.DropTargetEvent dte) { - log("DropTargetEvent-dragExit"); - } - - /** - * Called when a drag operation is ongoing on the DropTarget. - */ - public void dragOver(DropTargetDragEvent dtde) { - //log("DropTargetDragEvent-dragOver"); - if (supportDropTargetDragEvent(dtde)==true) { - int x=dtde.getLocation().x; - int y=dtde.getLocation().y; - if ((Math.abs(x - fLastX) > 0) || (Math.abs(y - fLastY) > 0) ) { - //FigureEnumeration fe = view().selectionElements(); - //while (fe.hasNextFigure()) { - // fe.nextFigure().moveBy(x - fLastX, y - fLastY); - // System.out.println("moving Figures " + view()); - //} - //view().drawing().update(); - fLastX = x; - fLastY = y; - } - } - } - - /** - * The drag operation has terminated with a drop on this DropTarget. - * Be nice to somehow incorporate FigureTransferCommand here. - */ - public void drop(java.awt.dnd.DropTargetDropEvent dtde) { - System.out.println("DropTargetDropEvent-drop"); - - if (dtde.isDataFlavorSupported(DNDFiguresTransferable.DNDFiguresFlavor) == true) { - log("DNDFiguresFlavor"); - if ((dtde.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0 ) { - log("copy or move"); - if (dtde.isLocalTransfer() == false) { - System.err.println("Intra-JVM Transfers not implemented for figures yet."); - dtde.rejectDrop(); - return; - } - dtde.acceptDrop(dtde.getDropAction()); - try { /* protection from a malicious dropped object */ - setTargetUndoActivity( createTargetUndoActivity( view() ) ); - DNDFigures ff = (DNDFigures)DNDHelper.processReceivedData(DNDFiguresTransferable.DNDFiguresFlavor, dtde.getTransferable()); - getTargetUndoActivity().setAffectedFigures( ff.getFigures() ); - Point theO = ff.getOrigin(); - view().clearSelection(); - Point newP = dtde.getLocation(); - /** origin is where the figure thinks it is now - * newP is where the mouse is now. - * we move the figure to where the mouse is with this equation - */ - int dx = newP.x - theO.x; /* distance the mouse has moved */ - int dy = newP.y - theO.y; /* distance the mouse has moved */ - log("mouse at " + newP); - FigureEnumeration fe = view().insertFigures( getTargetUndoActivity().getAffectedFigures() , dx, dy, false ); - getTargetUndoActivity().setAffectedFigures( fe ); - - if (dtde.getDropAction() == DnDConstants.ACTION_MOVE) { - view().addToSelectionAll( getTargetUndoActivity().getAffectedFigures() ); - } - - view().checkDamage(); - editor().getUndoManager().pushUndo( getTargetUndoActivity() ); - editor().getUndoManager().clearRedos(); - // update menus - editor().figureSelectionChanged( view() ); - dtde.dropComplete(true); - } - catch (NullPointerException npe) { - npe.printStackTrace(); - dtde.dropComplete(false); - } - } - else { - dtde.rejectDrop(); - } - } - else if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor)) { - log("String flavor dropped."); - dtde.acceptDrop(dtde.getDropAction()); - Object o = DNDHelper.processReceivedData(DataFlavor.stringFlavor, dtde.getTransferable()); - if (o != null) { - log("Received string flavored data."); - dtde.getDropTargetContext().dropComplete(true); - } - else { - dtde.getDropTargetContext().dropComplete(false); - } - } - else if (dtde.isDataFlavorSupported(DNDHelper.ASCIIFlavor) == true) { - log("ASCII Flavor dropped."); - dtde.acceptDrop(DnDConstants.ACTION_COPY); - Object o = DNDHelper.processReceivedData(DNDHelper.ASCIIFlavor, dtde.getTransferable()); - if (o!= null) { - log("Received ASCII Flavored data."); - dtde.getDropTargetContext().dropComplete(true); - //System.out.println(o); - } - else { - dtde.getDropTargetContext().dropComplete(false); - } - } - else if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { - log("Java File List Flavor dropped."); - dtde.acceptDrop(DnDConstants.ACTION_COPY); - File [] fList = (File[]) DNDHelper.processReceivedData(DataFlavor.javaFileListFlavor, dtde.getTransferable()); - if (fList != null) { - log("Got list of files."); - for (int x=0; x< fList.length; x++ ) { - System.out.println(fList[x].getAbsolutePath()); - } - dtde.getDropTargetContext().dropComplete(true); - } - else { - dtde.getDropTargetContext().dropComplete(false); - } - } - fLastX = 0; - fLastY = 0; - } - - /** - * Called if the user has modified the current drop gesture. - */ - public void dropActionChanged(DropTargetDragEvent dtde) { - log("DropTargetDragEvent-dropActionChanged"); - supportDropTargetDragEvent(dtde); - } - - - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - - /** - * Tests wether the Drag event is of a type that we support handling - * Check the DND interface and support the events it says it supports - * if not a dnd interface comp, then dont support! because we dont even - * really know what kind of view it is. - */ - protected boolean supportDropTargetDragEvent(DropTargetDragEvent dtde) { - if (dtde.isDataFlavorSupported(DNDFiguresTransferable.DNDFiguresFlavor) == true) { - if ((dtde.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0) { - dtde.acceptDrag(dtde.getDropAction()); - return true; - } - else { - dtde.rejectDrag(); - return false; - } - } - else if (dtde.isDataFlavorSupported(DNDHelper.ASCIIFlavor) == true) { - dtde.acceptDrag(dtde.getDropAction());//accept everything because i am too lazy to fix yet - return true; - } - else if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor) == true) { - dtde.acceptDrag(dtde.getDropAction());//accept everything because i am too lazy to fix yet - return true; - } - else if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor) == true) { - dtde.acceptDrag(dtde.getDropAction());//accept everything because i am too lazy to fix yet - return true; - } - else { - dtde.rejectDrag(); - return false; - } - } -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - - /** - * Factory method for undo activity - */ - protected Undoable createTargetUndoActivity(DrawingView view) { - return new AddUndoActivity( view ); - } - protected void setTargetUndoActivity(Undoable undoable){ - targetUndoable = undoable; - } - protected Undoable getTargetUndoActivity(){ - return targetUndoable; - } - public static class AddUndoActivity extends CH.ifa.draw.util.UndoableAdapter { - private boolean undone=false; - public AddUndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - log("AddUndoActivity created " + newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - //undo of add really shouldnt need visitor !?!dnoyeb!?! - log("AddUndoActivity AddUndoActivity undo"); - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor(getDrawingView().drawing()); - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - CH.ifa.draw.framework.Figure f = fe.nextFigure(); - f.visit(deleteVisitor); - } - setAffectedFigures( deleteVisitor.getDeletedFigures() ); - getDrawingView().clearSelection(); - undone = true; - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - log("AddUndoActivity redo"); - getDrawingView().clearSelection(); - setAffectedFigures(getDrawingView().insertFigures( - getAffectedFigures(), 0, 0, false)); - undone = false; - return true; - } - /** - * Since this is an add operation, figures can only be released if it - * has been undone. - */ - public void release() { - if(undone == true){ - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - getDrawingView().drawing().remove(f); - f.release(); - } - } - setAffectedFigures(CH.ifa.draw.standard.FigureEnumerator.getEmptyEnumeration()); - } - } - private static void log(String message){ - //System.out.println("JHDDropTargetListener: " + message); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/AbstractContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/AbstractContentProducer.java deleted file mode 100644 index 4bbf49611..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/AbstractContentProducer.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)AbstractContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.io.IOException; -import java.io.Serializable; - -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -/** - * Base class for the ContentProducers hierarchy<br> - * Doesn't do a thing now, but we may need this one later to add - * generic behaviour. - * - * @author Eduardo Francos - InContext - * @created 7 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractContentProducer implements ContentProducer, Serializable { - - final static long serialVersionUID = -2715253447095419531L; - - /** - * Constructor for the AbstractContentProducer object - */ - public AbstractContentProducer() { } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/AttributeContentProducerContext.java b/JHotDraw/src/CH/ifa/draw/contrib/html/AttributeContentProducerContext.java deleted file mode 100644 index 6f08da4e3..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/AttributeContentProducerContext.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * @(#)AttributeContentProducerContext.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -/** - * AttributeContentProducerContext defines the interface required of clients - * requesting contents from AttributeFigures oriented ContentProducers.<br> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public interface AttributeContentProducerContext extends FigureContentProducerContext { - - /** - * Gets an attribute from the ContentProducerContext object - * - * @param name the name of the attribute - * @return The attribute value - */ - public Object getAttribute(String name); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/AttributeFigureContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/AttributeFigureContentProducer.java deleted file mode 100644 index afead880a..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/AttributeFigureContentProducer.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * @(#)AttributeFigureContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.io.Serializable; -import CH.ifa.draw.util.StorableOutput; -import CH.ifa.draw.util.StorableInput; -import java.io.IOException; - -/** - * AttributeFigureContentProducer provides content for AttributeFigures.<br> - * It gives priority to base class supplied values, and if none, then it - * gets the value from the supplied AttributeContentProducerContext. - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class AttributeFigureContentProducer extends FigureDataContentProducer - implements Serializable { - - /**Constructor for the AttributeFigureContentProducer object */ - public AttributeFigureContentProducer() { } - - /** - * Produces the contents for the attribute - * - * @param context the calling client context - * @param ctxAttrName the attribute name - * @param ctxAttrValue the attribute value that led to the call to this - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - // first chance to basic values - Object attrValue = super.getContent(context, ctxAttrName, ctxAttrValue); - if (attrValue != null) { - return attrValue; - } - - // no, return value from attributes - return ((AttributeContentProducerContext)context).getAttribute(ctxAttrName); - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/ColorContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/ColorContentProducer.java deleted file mode 100644 index f311717d9..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/ColorContentProducer.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)ColorContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Color; -import java.io.IOException; -import java.io.Serializable; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -/** - * ColorContentProducer produces RGB color encoded hexadecimal strings.<br> - * Ex: - * <code>Color.blue ==> 0x0000FF</code><br> - * <code>Color.red ==> 0xFF00FF</code><br> - * It can either be specific if set for a specific color, or generic, encoding - * any color passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class ColorContentProducer extends FigureDataContentProducer - implements Serializable { - - private Color fColor = null; - - /**Constructor for the ColorContentProducer object */ - public ColorContentProducer() { } - - /** - * Constructor for the ColorContentProducer object - * - * @param color the specific color to use - */ - public ColorContentProducer(Color color) { - setColor(color); - } - - /** - * Produces the contents for the color - * - * @param context the calling client context - * @param ctxAttrName the color attribute name (FrameColor, TextColor, etc) - * @param ctxAttrValue the color - * @return The string RBG value for the color - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - // if we have our own color then use it - // otherwise use the one supplied - Color color = (getColor() != null) ? getColor() : (Color)ctxAttrValue; - String colorCode = Integer.toHexString(color.getRGB()); - return "0x" + colorCode.substring(colorCode.length() - 6); - } - - /** - * Sets the color attribute of the ColorContentProducer object - * - * @param color The new color value - */ - public void setColor(Color color) { - fColor = color; - } - - /** - * Gets the color attribute of the ColorContentProducer object - * - * @return The color value - */ - public Color getColor() { - return fColor; - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeBoolean((getColor() != null)); - if (getColor() != null) { - dw.writeInt(getColor().getRGB()); - } - } - - /** - * Reads the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - boolean hasColor = dr.readBoolean(); - if (hasColor) { - setColor(new Color(dr.readInt())); - } - else{ - setColor(null); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducer.java deleted file mode 100644 index 66e8359d0..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducer.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * @(#)ContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import CH.ifa.draw.util.Storable; - -/** - * ContentProducer defines the interface for objects capable of producing - * contents on behalf of a client context.<br> - * Primarely based on the Strategy pattern, the purpose of ContentProducers - * is twofold:<br> - * <li> Detach the logic for producing generic content from interested parties so - * as to maximize reuse, of special interest for complex content</li> - * <li> Standardize contents by allowing for the automatic decentralization of - * contents source and production logic. Used together with the - * ContentProducerRegistry it is possible to globally modify the behaviour - * required for producing a specific type of contents. For example, - * a FieldContentProducer could be declined to get its contents from variables in - * an in-memory object, a setting from a configuration file, or even a field in - * a database record.</li> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - * @todo should entity names be merged with the attribute names defined - * in FigureAttributeConstant? - */ -public interface ContentProducer extends Storable { - - /** Entity name for the figure's current x position in pixels */ - public final static String ENTITY_FIGURE_POSX = "FigurePosX"; - - /** Entity name for the figure's current y position in pixels */ - public final static String ENTITY_FIGURE_POSY = "FigurePosY"; - - /** Entity name for the figure's current width in pixels */ - public final static String ENTITY_FIGURE_WIDTH = "FigureWidth"; - - /** Entity name for the figure's current height in pixels */ - public final static String ENTITY_FIGURE_HEIGHT = "FigureHeight"; - - /** Entity name for the figure's current text color */ - public final static String ENTITY_FRAME_COLOR = "FrameColor"; - - /** Entity name for the figure's current fill color */ - public final static String ENTITY_FILL_COLOR = "FillColor"; - - /** Entity name for the figure's current arrow mode */ - public final static String ENTITY_ARROW_MODE = "ArrowMode"; - - /** Entity name for the figure's current font name */ - public final static String ENTITY_FONT_NAME = "FontName"; - - /** Entity name for the figure's current font size */ - public final static String ENTITY_FONT_SIZE = "FontSize"; - - /** Entity name for the figure's current font style */ - public final static String ENTITY_FONT_STYLE = "FontStyle"; - - /** - * Produces the contents - * - * @param context the calling client context - * @param ctxAttrName the attribute name - * @param ctxAttrValue the attribute value that led to the call to this - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducerContext.java b/JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducerContext.java deleted file mode 100644 index 984637a99..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducerContext.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * @(#)ContentProducerContext.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -/** - * ContentProducerContext defines the base interface required of clients - * of ContentProducers.<br> - * ContentProducers may need to retrieve information from their calling client - * in order to fulfill the contents request - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public interface ContentProducerContext { -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducerRegistry.java b/JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducerRegistry.java deleted file mode 100644 index 50b16d851..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/ContentProducerRegistry.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * @(#)ContentProducerRegistry.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.io.IOException; -import java.io.Serializable; -import java.net.URL; - -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import CH.ifa.draw.util.Storable; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -/** - * ContentProducerRegistry acts as a repository for ContentProducers. It allows - * for registries to be organized in a hierarchy, so that a specific producer - * request will travel upwards in the hierarchy until eventually a suitable - * producer is found.<br> - * Producers are registered associated with the class of the object they are suitable - * to produce contents for, but ContentProducerRegistry allows for class hierarchy - * searches. What this means is that for two classes A and B, B being a subclass - * of A, if a producer is registered for class B it will be used, otherwise the - * producer registered for class A will be used instead. ContentProducerRegistry will - * always select the super class closest in the class hierarchy, so if several - * producers are registered for classes in a derivation hierarchy, the producer - * registered for the class closest to the requested class will be selected. - * - * @author Eduardo Francos - InContext - * @created 7 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class ContentProducerRegistry implements Serializable, Storable { - - /** producers registered with this registry */ - private Hashtable fContentProducers = new Hashtable(); - - /** parent registry for hierarchical searches */ - private transient ContentProducerRegistry fParent; - - /** Application global producers */ - private static ContentProducerRegistry fDefaultRegistry = - new ContentProducerRegistry(null); - - // initialize the application wide default content producers - static { - fDefaultRegistry.registerContentProducer(URL.class, new URLContentProducer()); - } - - /**Constructor for the ContentProducerRegistry object */ - public ContentProducerRegistry() { - setParent(fDefaultRegistry); - } - - /** - *Constructor for the ContentProducerRegistry object - * - * @param parent the parent for this producer - */ - public ContentProducerRegistry(ContentProducerRegistry parent) { - setParent(parent); - } - - /** - * Sets the autonomous attribute of the ContentProducerRegistry object. - * Similar to setting the parent to null<br> - * An autonomous registry does not have a parent hierarchy so resolution of - * search requests stop do not propagate. - * - * @see #setParent(ContentProducerRegistry) - */ - public void setAutonomous() { - setParent(null); - } - - /** - * Gets the autonomous status of the ContentProducerRegistry object - * - * @return The autonomous value - */ - public boolean isAutonomous() { - return (getParent() == null); - } - - /** - * Sets the parent attribute of the ContentProducerRegistry object - * - * @param newParent The new parent value - * @see #setAutonomous() - */ - public void setParent(ContentProducerRegistry newParent) { - fParent = newParent; - } - - /** - * Gets the parent attribute of the ContentProducerRegistry object - * - * @return The parent value - */ - public ContentProducerRegistry getParent() { - return fParent; - } - - /** - * Registers an application global producer - * - * @param producer the registered producer - * @param targetClass The class associated with the producer - * @return the previous producer registered for the target class - */ - public static ContentProducer registerDefaultContentProducer(Class targetClass, ContentProducer producer) { - return fDefaultRegistry.registerContentProducer(targetClass, producer); - } - - /** - * Unregisters ie: removes a registered producer for a target class.<br> - * A check is made to ensure the removed producer is the current producer - * for the target class. If not, the request is ignored. - * - * @param producer the producer to unregister - * @param targetClass the target class - */ - public static void unregisterDefaultContentProducer(Class targetClass, ContentProducer producer) { - fDefaultRegistry.unregisterContentProducer(targetClass, producer); - } - - /** - * Gets the ContentProducer attribute of the HTMLTextAreaFigure object - * - * @param targetClass the target class - * @return the previous producer registered for the target class - */ - public static ContentProducer getDefaultContentProducer(Class targetClass) { - return fDefaultRegistry.getContentProducer(targetClass); - } - - /** - * Gets the exact application global Producer for the target class, ie: - * no class hierarchy search - * - * @param targetClass the target class - * @return The producer - */ - public static ContentProducer getExactDefaultContentProducer(Class targetClass) { - return fDefaultRegistry.getExactContentProducer(targetClass); - } - - /** - * Registers a producer - * - * @param producer the producer to register - * @param targetClass the target class - * @return the previous producer registered for the target class - */ - public ContentProducer registerContentProducer(Class targetClass, ContentProducer producer) { - ContentProducer previousProducer = getContentProducer(targetClass); - fContentProducers.put(targetClass, producer); - return previousProducer; - } - - /** - * Unregisters a producer - * - * @param producer the producer to unregister - * @param targetClass the target class - */ - public void unregisterContentProducer(Class targetClass, ContentProducer producer) { - // first check that the producer being removed is the current producer - // for the target class - ContentProducer currentProducer = getContentProducer(targetClass); - if (currentProducer == producer) { - fContentProducers.remove(targetClass); - } - } - - /** - * Finds the most appropriate producer for the target class. Will search - * first for exact producers, ie: no class hierarchy search, then if none found, - * will do a class compatible search - * - * @param targetClass The target class - * @return The producer - */ - public ContentProducer getContentProducer(Class targetClass) { - // first try an exact producer - ContentProducer producer = getExactContentProducer(targetClass); - if (producer != null) { - return producer; - } - - // none defined, try finding one for the nearest super class - // of the target class. Note this shouldn't return null because there is - // a default producer defined for the Object class - return getSuperClassContentProducer(targetClass, null); - } - - /** - * Finds the exact producer for the target class, ie: no class hierarchy search - * - * @param targetClass The target class - * @return The producer - */ - public ContentProducer getExactContentProducer(Class targetClass) { - // first try our own - ContentProducer producer = (ContentProducer)fContentProducers.get(targetClass); - if (producer != null) { - return producer; - } - - // none defined, try our parent's - // unless we are autonomous (ie: we have no parent) - if (!this.isAutonomous()) { - return getParent().getExactContentProducer(targetClass); - } - - // none defined - return null; - } - - /** - * Gets the producers for the closest super class of the target class - * - * @param targetClass The target class - * @return The producer - */ - protected ContentProducer getSuperClassContentProducer(Class targetClass, Class closestClass) { - Map.Entry entry = null; - Class entryClass = null; - ContentProducer closestProducer = null; - - Iterator iter = fContentProducers.entrySet().iterator(); - while (iter.hasNext()) { - entry = (Map.Entry)iter.next(); - entryClass = (Class)entry.getKey(); - if (entryClass.isAssignableFrom(targetClass)) { - if (closestClass != null && closestClass.isAssignableFrom(entryClass)) { - closestClass = entryClass; - closestProducer = (ContentProducer)entry.getValue(); - } - } - } - - // whether we found one or not ask our parent to see if a more - // exact producer is defined - // unless we are autonomous (ie: we have no parent) - if (!this.isAutonomous()) { - ContentProducer parentProducer = - getParent().getSuperClassContentProducer(targetClass, closestClass); - if (parentProducer != null) { - closestProducer = parentProducer; - } - } - - return closestProducer; - } - - /** - * Storable write support - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - dw.writeInt(fContentProducers.size()); - Map.Entry producerEntry; - Iterator iter = fContentProducers.entrySet().iterator(); - while (iter.hasNext()) { - producerEntry = (Map.Entry)iter.next(); - dw.writeString(((Class)producerEntry.getKey()).getName()); - dw.writeStorable((Storable)producerEntry.getKey()); - } - } - - /** - * Storable inoput support - * - * @param dr storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - // read the default content producers, count first - int prodCount = dr.readInt(); - String prodClass; - ContentProducer producer; - for (int cnt = 0; cnt < prodCount; cnt++) { - prodClass = dr.readString(); - producer = (ContentProducer)dr.readStorable(); - try { - registerContentProducer(Class.forName(prodClass), producer); - } - catch (ClassNotFoundException ex) { - // the class does not exist in this application - // cannot do much about it so ignore it, the entities of - // this class will get their toString() value instead - } - } - - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/DiamondFigureGeometricAdapter.java b/JHotDraw/src/CH/ifa/draw/contrib/html/DiamondFigureGeometricAdapter.java deleted file mode 100644 index aa1323572..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/DiamondFigureGeometricAdapter.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#)DiamondFigureGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Point; -import java.awt.Shape; - -import CH.ifa.draw.contrib.DiamondFigure; - -/** - * Geometric adapter for the DiamondFigure - * - * @author Eduardo Francos - InContext - * @created 6 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class DiamondFigureGeometricAdapter extends DiamondFigure - implements GeometricFigure { - - /** - * Constructor for the DiamondFigureGeometricAdapter object - */ - public DiamondFigureGeometricAdapter() { - super(); - } - - /** - *Constructor for the DiamondFigureGeometricAdapter object - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - */ - public DiamondFigureGeometricAdapter(Point origin, Point corner) { - super(origin, corner); - } - - /** - * Gets the shape attribute of the DiamondFigure object - * - * @return The shape value - */ - public Shape getShape() { - return getPolygon(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceHolder.java b/JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceHolder.java deleted file mode 100644 index 109e55fb6..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceHolder.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * @(#)DisposableResourceHolder.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -/** - * DisposableResourceHolder defines the interface for objects holding - * disposable resources.<br> - * A disposable resource is any kind of object that can be disposed of - * according to a given disposal strategy.<BR> - * DisposableResourceHolder keeps track of the last time the resource is - * accessed to support ellapsed time ResourceDisposabilityStrategies.<br> - * For example, if you are handling large images that you can regenerate - * at will, the DisposableResourceHolder will hold the image, and if not - * accessed for let's say 60 secs then it discards the image - * (sets its reference to null) so that it can be GCed.<br> - * Within the context of JHotDraw, HTMLTextAreaFigure uses - * DisposableResourceHolders to handle the HTML generated image, but if the - * figure is not displayed (out of the display area or in a background view) then - * the image is disposed of after a while and the HTMLTextAreaFigure will regenerate - * it the next time it is displayed.<br> - * A resource may be locked so that its user can be sure it will not be - * disposed of while in use. After finished using it it should be unlocked so as - * to reintegrate it to the disposal strategy. - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - * @see DisposableResourceManager - * @see StandardDisposableResourceManager - * @see ResourceDisposabilityStrategy - * @see DisposableResourceManagerFactory - * @see StandardDisposableResourceHolder - */ -public interface DisposableResourceHolder { - - /** - * Gets the resource - * - * @return The resource value - * @exception NullPointerException If the resource was disposed of - */ - public Object getResource() throws NullPointerException; - - /** - * Makes a clone the this - * - * @return the clone - */ - public Object clone(); - - /** - * Sets the resource - * - * @param resource The new resource value - */ - public void setResource(Object resource); - - /** - * Sets the disposableDelay - * - * @param millis The new disposableDelay value - */ - public void setDisposableDelay(long millis); - - /** - * Gets the disposableDelay - * - * @return The disposableDelay value - */ - public long getDisposableDelay(); - - /** - * Resets the disposing delay so as to restart the time counter - */ - public void resetDelay(); - - /** - * Gets the lastTimeAccessed attribute of the DisposableResourceHolder object - * - * @return The lastTimeAccessed value - */ - public long getLastTimeAccessed(); - - /** Disposes of the resource immediately. */ - public void dispose(); - - /** - * Returns true if the resource is still available - * - * @return The resourceDirty value - */ - public boolean isAvailable(); - - /** - * Locks the resource so it cannot be automatically disposed of until unlock - * is called.<br> - * Explicit disposing by calling dispose() is still possible though. - */ - public void lock(); - - /** - * Unlocks the resource so it can be automatically disposed of again.<br> - * Explicit disposing by calling dispose() is still possible though. - */ - public void unlock(); - - /** - * True if the resource is locked - * - * @return The locked status - */ - public boolean isLocked(); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceManager.java b/JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceManager.java deleted file mode 100644 index d4b21b992..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceManager.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * @(#)DisposableResourceManager.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.util.Iterator; - -/** - * DisposableResourceManager defines the interface for managers of disposable - * resources.<br> - * A DisposableResourceManager implements a strategy for efficient disposal - * of seldom used resources. - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public interface DisposableResourceManager { - - /** - * Registers a resource with the manager so as to be disposed - * - * @param resource the resource - */ - public void registerResource(DisposableResourceHolder resource); - - /** - * Unregisters a resource so it is not automatically GCed.<br> - * - * @param resource the resource - */ - public void unregisterResource(DisposableResourceHolder resource); - - /** - * Returns an iterator on the managed resources - * - * @return The resources iterator - */ - public Iterator getResources(); - - /** - * True if the resource is registered with this manager - * - * @param resource The resource - * @return True if the resource is registered with this manager - */ - public boolean managesResource(DisposableResourceHolder resource); - - /** - * Activates the strategy which starts disposing of resources as fitted - * - * @exception ResourceManagerNotSetException Description of the Exception - */ - public void startDisposing() throws ResourceManagerNotSetException; - - /** - * Deactivates the strategy that stops automatic disposal of resource.<br> - * The millis parameters specifies in milliseconds the time to wait for - * the disposal to stop. After this time the method returns whether the - * disposal was stopped or not, but the desactivation request remains active. - * - * @param millis time to wait for disposal to stop - */ - public void stopDisposing(long millis); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceManagerFactory.java b/JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceManagerFactory.java deleted file mode 100644 index d89e67903..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/DisposableResourceManagerFactory.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * @(#)DisposableResourceManagerFactory.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -/** - * DisposableResourceManagerFactory creates DisposableResourceHolders on behalf - * of requesting clients. It automatically registers the holders with its singleton - * standard resource manager - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public abstract class DisposableResourceManagerFactory { - - /** The default periodicity for resource disposal */ - public static long DEFAULT_DISPOSAL_PERIODICITY = 60000; - - /** The singleton current resource manager */ - protected static DisposableResourceManager currentManager = null; - - protected static ResourceDisposabilityStrategy currentStrategy = null; - - protected static DisposableResourceHolder holderPrototype = null; - - /** - * Gets the current manager. - * - * @return The currentManager - */ - public static DisposableResourceManager getManager() { - return currentManager; - } - - /** - * Sets the strategy of the DisposableResourceManagerFactory - * class. This is a one shot thing that should be initialized before using it - * so if there is already a strategy this returns without further notice. - * - * @param strategy The new disposalStrategy - */ - public static void setStrategy(ResourceDisposabilityStrategy strategy) { - currentStrategy = strategy; - } - - /** - * Returns a new standard resource holder already registered with the default - * resource manager - * - * @param resource Description of the Parameter - * @return the newly created resource holder - */ - public static DisposableResourceHolder createStandardHolder(Object resource) { - // ensure the manager is set and running - initManager(); - - // now create the holder and register it - DisposableResourceHolder holder = (DisposableResourceHolder)holderPrototype.clone(); - holder.setResource(resource); - getManager().registerResource(holder); - - return holder; - } - - /** Initializes the standard resource disposal manager */ - protected static void initManager() { - if (currentManager == null) { - // ensure we have a holder prototype - if (holderPrototype == null) { - holderPrototype = new StandardDisposableResourceHolder(); - } - // ensure we have a strategy - if (currentStrategy == null) { - currentStrategy = new ETSLADisposalStrategy(DEFAULT_DISPOSAL_PERIODICITY); - } - // ensure we have a manager - if (currentManager == null) { - currentManager = new StandardDisposableResourceManager(currentStrategy); - } - - // start the whole thing - try { - currentManager.startDisposing(); - } - catch (ResourceManagerNotSetException ex) { - // we set it so we shouldn't get here - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/ETSLADisposalStrategy.java b/JHotDraw/src/CH/ifa/draw/contrib/html/ETSLADisposalStrategy.java deleted file mode 100644 index 668692b70..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/ETSLADisposalStrategy.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * @(#)ETSLADisposalStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.util.Iterator; - -/** - * ETSLADisposalStrategy implements an Ellapsed Time Since Last Access disposal - * strategy.<bt> - * It checks the last time a resource was accessed and if greater than - * the resource's disposalDelay it disposes of the resource so that it can - * be GCed.<br> - * Disposal activity must be explicitely started using the startDisposing method - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version 1.0 - */ -public class ETSLADisposalStrategy implements ResourceDisposabilityStrategy { - - /** The associated resource manager */ - private DisposableResourceManager manager; - - /** The periodicity at wich disposal is checked */ - private long gcPeriodicity = 60000; - - /** the thread that calls this periodically */ - private DisposalThread disposalThread = null; - - /** True if disposal is active and running */ - private boolean disposingActive = false; - - - /** - * Constructor for the ETSLADisposalStrategy object - */ - public ETSLADisposalStrategy() { } - - /** - *Constructor for the ETSLADisposalStrategy object - * - * @param periodicity the periodicity at which to check for disposable resources - */ - public ETSLADisposalStrategy(long periodicity) { - this(null, periodicity); - } - - /** - *Constructor for the ETSLADisposalStrategy object - * - * @param manager the manager - * @param periodicity the periodicity at which to check for disposable resources - */ - public ETSLADisposalStrategy(DisposableResourceManager newManager, long newPeriodicity) { - setManager(newManager); - setPeriodicity(newPeriodicity); - initDisposalThread(); - } - - /** - * Sets the manager holding the resources for this strategy - * - * @param manager The new manager value - */ - public synchronized void setManager(DisposableResourceManager newManager) { - // if new manager is null the stop disposing - if (getManager() == null) { - stopDisposing(Long.MAX_VALUE); - } - manager = newManager; - } - - /** - * Gets the manager holding the resources for this strategy - * - * @return The manager value - */ - public DisposableResourceManager getManager() { - return manager; - } - - /** - * Activates the strategy which starts disposing of resources as fitted - * - * @exception ResourceManagerNotSetException thrown if the manager has not - * been set, so impossible to run - */ - public void startDisposing() throws ResourceManagerNotSetException { - if (getManager() == null) { - throw new ResourceManagerNotSetException(); - } - - // do nothing if already active - if (disposingActive) { - return; - } - - disposingActive = true; - disposalThread.start(); - } - - /** - * Deactivates the strategy that stops automatic disposal of resources.<br> - * The millis parameters specifies in milliseconds the time to wait for - * the disposal to stop. After this time the method returns, but the - * deactivation request remains active. - * - * @param millis time to wait for disposal to stop - */ - public void stopDisposing(long millis) { - // do nothing if not disposing - if (!disposingActive) { - return; - } - // request the thread to stop and wait for it - try { - disposalThread.interruptDisposalPending = true; - disposalThread.join(millis); - } - catch (InterruptedException ex) { - // ignore - } - finally { - disposingActive = false; - } - } - - /** - * Initializes the disposal thread if not alrady done. - */ - protected void initDisposalThread() { - if (disposalThread != null) { - return; - } - - disposalThread = new DisposalThread(this, getPeriodicity()); - } - - /** - * Dispose of all the resources whose dispose delay has expired and - * are not locked - */ - protected synchronized void dispose() { - synchronized (getManager()) { - long currentTime = System.currentTimeMillis(); - Iterator resourceIter = getManager().getResources(); - DisposableResourceHolder resource; - - while (resourceIter.hasNext()) { - resource = (DisposableResourceHolder)resourceIter.next(); - synchronized (resource) { - if (!resource.isLocked() && (resource.getLastTimeAccessed() + resource.getDisposableDelay()) < currentTime) { - resource.dispose(); - } - } - } - } - } - - /** - * Gets the periodicity attribute of the ETSLADisposalStrategy object - * - * @return The periodicity value - */ - public long getPeriodicity() { - return gcPeriodicity; - } - - /** - * Sets the periodicity attribute of the ETSLADisposalStrategy object - * - * @param newPeriodicity The new periodicity value - */ - public void setPeriodicity(long newPeriodicity) { - gcPeriodicity = newPeriodicity; - if (disposalThread != null) { - disposalThread.setPeriodicity(newPeriodicity); - } - } -} - -/** - * Description of the Class - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - */ -class DisposalThread extends Thread { - - private ETSLADisposalStrategy strategy; - - /** The periodicity at wich disposal is checked */ - private long periodicity = 60000; - - /** Description of the Field */ - boolean interruptDisposalPending = false; - - /** - *Constructor for the DisposalThread object - * - * @param strategy the strategy - * @param periodicity the periodicity at which the strategy should be called - */ - DisposalThread(ETSLADisposalStrategy newStrategy, long newPeriodicity) { - strategy = newStrategy; - periodicity = newPeriodicity; - } - - /** - * Main processing method for the DisposalThread object - */ - public void run() { - interruptDisposalPending = false; - while (!interruptDisposalPending) { - try { - sleep(periodicity); - } - catch (Exception ex) { - // just exit - break; - } - strategy.dispose(); - } - interruptDisposalPending = false; - } - - /** - * Gets the periodicity attribute of the ETSLADisposalStrategy object - * - * @return The periodicity value - */ - public long getPeriodicity() { - return periodicity; - } - - /** - * Sets the periodicity attribute of the ETSLADisposalStrategy object - * - * @param newPeriodicity The new periodicity value - */ - public void setPeriodicity(long newPeriodicity) { - periodicity = newPeriodicity; - } - - /** Description of the Method */ - public void interruptDisposal() { - interruptDisposalPending = true; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/EllipseFigureGeometricAdapter.java b/JHotDraw/src/CH/ifa/draw/contrib/html/EllipseFigureGeometricAdapter.java deleted file mode 100644 index 672e97f9e..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/EllipseFigureGeometricAdapter.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)EllipseFigureGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.geom.Ellipse2D; - -import CH.ifa.draw.figures.EllipseFigure; - -/** - * Geometric adapter for the EllipseFigure - * - * @author Eduardo Francos - InContext - * @created 1 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class EllipseFigureGeometricAdapter extends EllipseFigure - implements GeometricFigure { - - /** - * Constructor for the EllipseFigureExt object - */ - public EllipseFigureGeometricAdapter() { - super(); - } - - /** - *Constructor for the EllipseFigureGeometricAdapter object - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - */ - public EllipseFigureGeometricAdapter(Point origin, Point corner) { - super(origin, corner); - } - - /** - * Gets the shape attribute of the EllipseFigure object - * - * @return The shape value - */ - public Shape getShape() { - Rectangle rect = displayBox(); - Ellipse2D.Float ellipse = new Ellipse2D.Float(rect.x, rect.y, rect.width, rect.height); - return ellipse; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/FigureContentProducerContext.java b/JHotDraw/src/CH/ifa/draw/contrib/html/FigureContentProducerContext.java deleted file mode 100644 index 2606889cc..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/FigureContentProducerContext.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)FigureContentProducerContext.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Font; - -import java.awt.Rectangle; - -/** - * FigureContentProducerContext defines the interface required of clients - * requesting contents for Figure oriented ContentProducers.<br> - * - * @author Eduardo Francos - InContext - * @created 7 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public interface FigureContentProducerContext extends ContentProducerContext { - - /** - * Returns the display box of the figure - * - * @return the display box - */ - public Rectangle displayBox(); - - /** - * Gets the font of the figure - * - * @return The font - */ - public Font getFont(); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/FigureDataContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/FigureDataContentProducer.java deleted file mode 100644 index 1e19b83a8..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/FigureDataContentProducer.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * @(#)FigureDataContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.io.IOException; - -import java.io.Serializable; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -/** - * FigureDataContentProducer produces content on behalf of Figures.<br> - * It supports the basic information common to all figures. - * It can only be used as a generic producer, getting information from any - * figure passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class FigureDataContentProducer extends AbstractContentProducer - implements Serializable { - - /** - * Constructor for the FigureContentProducer object - */ - public FigureDataContentProducer() { } - - /** - * Produces the contents for the figure - * - * @param context the calling client context - * @param ctxAttrName the attribute name - * @param ctxAttrValue the figure - * @return The string value for the requested entity name - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FIGURE_WIDTH) == 0) { - return Integer.toString(((FigureContentProducerContext)context).displayBox().width); - } - - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FIGURE_HEIGHT) == 0) { - return Integer.toString(((FigureContentProducerContext)context).displayBox().height); - } - - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FIGURE_POSX) == 0) { - return Integer.toString(((FigureContentProducerContext)context).displayBox().x); - } - - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FIGURE_POSY) == 0) { - return Integer.toString(((FigureContentProducerContext)context).displayBox().y); - } - - return null; - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/GeometricFigure.java b/JHotDraw/src/CH/ifa/draw/contrib/html/GeometricFigure.java deleted file mode 100644 index 3a525dbc1..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/GeometricFigure.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * @(#)GeometricFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Shape; - -import CH.ifa.draw.framework.Figure; - -/** - * GeometricFigure defines required of figures that can be used as shape providers - * for other figures. See HTMLTextArea for an example. - * - * @author Eduardo Francos - InContext - * @created 1 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public interface GeometricFigure extends Figure { - - /** - * Returns a shape with the figures area outline - * - * @return The shape - */ - public Shape getShape(); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLColorContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLColorContentProducer.java deleted file mode 100644 index 0805030b3..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLColorContentProducer.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * @(#)HTMLColorContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Color; -import java.io.Serializable; - -/** - * HTMLColorContentProducer produces RGB color HTML encoded strings.<br> - * Ex: - * <code>Color.blue ==> #0000FF</code><br> - * <code>Color.red ==> #FF00FF</code><br> - * It can either be specific if set for a specific color, or generic, encoding - * any color passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLColorContentProducer extends ColorContentProducer implements Serializable { - - /** - * Constructor for the HTMLColorContentProducer object - */ - public HTMLColorContentProducer() { } - - /** - * Produces the contents for the color - * - * @param context the calling client context - * @param ctxAttrName the color attribute name (FrameColor, TextColor, etc) - * @param ctxAttrValue the color - * @return The HTML encoded RBG value for the color - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - // if we have our own color then use it - // otherwise use the one supplied - Color color = (getColor() != null) ? getColor() : (Color)ctxAttrValue; - return getHTMLColorCode(color); - } - - public static String getHTMLColorCode(Color color) { - String colorCode = Integer.toHexString(color.getRGB()); - return "#" + colorCode.substring(colorCode.length() - 6); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLContentProducer.java deleted file mode 100644 index 72ff17fb7..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLContentProducer.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * @(#)HTMLContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.io.Serializable; - -/** - * HTMLContentProducer produces HTML suitable values and encoded strings for - * various types of values.<br> - * It can also transform values into their HTML equivalents, like for instance - * a mapping between font sizes in points and the HTML valid font size values.<br> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLContentProducer extends AttributeFigureContentProducer - implements Serializable { - - /** Table of font size equivalents between points and HTML font sizes */ - protected final static int[][] htmlFontSizeEquivalences = - { - // 0 to 9 points ==> size 1 - {1, 0, 9}, - // 10 to 11 points ==> size 2 - {2, 10, 11}, - // 12 to 13 points ==> size 3 - {3, 12, 13}, - // 14 to 17 points ==> size 4 - {4, 14, 17}, - // 18 to 23 points ==> size 5 - {5, 18, 23}, - // 24 to 35 points ==> size 6 - {6, 24, 35}, - // 36 and higher points ==> size 7 - {7, 36, Integer.MAX_VALUE} - }; - - /** - * Constructor for the HTMLContentProducer object - */ - public HTMLContentProducer() { } - - /** - * Gets the HTML content value for the requested attribute - * - * @param context the calling client context - * @param ctxAttrName the attribute name (FontSize, etc...) - * @param ctxAttrValue the attribute value that led to the call to this - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - HTMLContentProducerContext htmlContext = (HTMLContentProducerContext)context; - - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FONT_SIZE) == 0) { - return Integer.toString(getHTMLFontSizeEquivalent(htmlContext.getFont().getSize())); - } - - return super.getContent(context, ctxAttrName, ctxAttrValue); - } - - /** - * Gets the hTMLFontSizeEquivalent attribute of the HTMLTextAreaFigure object - * - * @param pointSize the font size in points - * @return The hTMLFontSizeEquivalent value - */ - public int getHTMLFontSizeEquivalent(int pointSize) { - for (int i = 0; i < htmlFontSizeEquivalences.length; i++) { - if (pointSize >= htmlFontSizeEquivalences[i][1] && - pointSize <= htmlFontSizeEquivalences[i][2]) { - return htmlFontSizeEquivalences[i][0]; - } - } - // not found?!?!?! return the "normal" font size - return 3; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLContentProducerContext.java b/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLContentProducerContext.java deleted file mode 100644 index c436ec21d..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLContentProducerContext.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * @(#)HTMLContentProducerContext.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -/** - * HTMLContentProducerContext defines the interface required of clients - * requesting HTML based contents.<br> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public interface HTMLContentProducerContext extends AttributeContentProducerContext { -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLLayouter.java b/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLLayouter.java deleted file mode 100644 index b27d79e5c..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLLayouter.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)HTMLLayouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Insets; -import java.awt.Point; - -import java.awt.Rectangle; -import java.io.IOException; -import CH.ifa.draw.contrib.Layoutable; -import CH.ifa.draw.contrib.Layouter; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -/** - * HTMLLayouter implements the logic for laying out figures based on an - * HTML template. - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLLayouter implements Layouter { - - /**Constructor for the HTMLLayouter object */ - public HTMLLayouter() { } - - /** - * Constructor which associates a HTMLLayouter with - * a certain Layoutable. - * - * @param newLayoutable Layoutable to be laid out - */ - public HTMLLayouter(Layoutable newLayoutable) { - this(); -// setLayoutable(newLayoutable); - } - - /** - * Description of the Method - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - * @return Description of the Return Value - */ - public Rectangle calculateLayout(Point origin, Point corner) { - /** - * @todo: Implement this CH.ifa.draw.contrib.Layouter method - */ - throw new UnsupportedOperationException("Method calculateLayout() not yet implemented."); - } - - /** - * Description of the Method - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - * @return Description of the Return Value - */ - public Rectangle layout(Point origin, Point corner) { - /** - * @todo: Implement this CH.ifa.draw.contrib.Layouter method - */ - throw new UnsupportedOperationException("Method layout() not yet implemented."); - } - - /** - * Sets the insets attribute of the HTMLLayouter object - * - * @param newInsets The new insets value - */ - public void setInsets(Insets newInsets) { - /** - * @todo: Implement this CH.ifa.draw.contrib.Layouter method - */ - throw new UnsupportedOperationException("Method setInsets() not yet implemented."); - } - - /** - * Gets the insets attribute of the HTMLLayouter object - * - * @return The insets value - */ - public Insets getInsets() { - /** - * @todo: Implement this CH.ifa.draw.contrib.Layouter method - */ - throw new UnsupportedOperationException("Method getInsets() not yet implemented."); - } - - /** - * Description of the Method - * - * @param dw Description of the Parameter - */ - public void write(StorableOutput dw) { - /** - * @todo: Implement this CH.ifa.draw.util.Storable method - */ - throw new UnsupportedOperationException("Method write() not yet implemented."); - } - - /** - * Description of the Method - * - * @param dr Description of the Parameter - * @exception IOException Description of the Exception - */ - public void read(StorableInput dr) throws IOException { - /** - * @todo: Implement this CH.ifa.draw.util.Storable method - */ - throw new UnsupportedOperationException("Method read() not yet implemented."); - } - - /** - * Create a new instance of this type and sets the layoutable - * - * @param newLayoutable Description of the Parameter - * @return Description of the Return Value - */ - public Layouter create(Layoutable newLayoutable) { - return new HTMLLayouter(newLayoutable); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLTextAreaFigure.java b/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLTextAreaFigure.java deleted file mode 100644 index f0b0ac157..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLTextAreaFigure.java +++ /dev/null @@ -1,1143 +0,0 @@ -/* - * @(#)HTMLTextAreaFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.geom.AffineTransform; -import java.awt.geom.FlatteningPathIterator; -import java.awt.image.BufferedImage; -import java.io.IOException; - -import javax.swing.*; - -import CH.ifa.draw.contrib.TextAreaFigure; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Geom; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -/** - * An HTMLTextAreaFigure contains HTML formatted text.<br> - * Formatting is done internally by a JLabel component, so all display features - * and constrains that apply for a JLabel apply also for an HTMLTextAreaFigure, - * including text and images, as in any Web browser, even allowing for contents - * residing on external Web sources. But don't forget that this is <b>NOT</b> a Web - * browser, so HTML contents cannot be standard Web pages with headers, stylesheets, - * javascript and who knows what else, just plain down to earth HTML code. - * <p> - * In order to automatically integrate "external" attributes like FillColor, - * FontName, etc, HTMLTextAreaFigure encapsulates the text the user types in the - * editor within a table with a single cell occupying the whole area.<br> - * Here is what the HTML code passed to the JLabel looks like:<br> - * <code> - * <html><br> - * <table border='0' width='area.width' height='area.height' - * cellpadding='0' cellspacing='0' bgcolor='&FillColor;'><br> - * <tr><br> - * <td width='100%'><br> - * <font face='&FontName;' color='&TextColor;' size='&FontSize;'><br> - * <!-- add italic and bold attributes if required--><br> - * <i><br> - * <b><br> - * ============>> User's contents go here <============<br> - * <!-- close italic and bold attributes if required --><br> - * </b><br> - * </i><br> - * </font><br> - * </td><br> - * </tr><br> - * </table><br> - * </html><br> - * </code><br> - * It is possible to write <i>raw</i> HTML code by calling - * <code>setRawHTML(true)</code>. In that case no tags are issued.<br> - * The user is then responsible for applying the figure attributes and in - * general is responsible for the whole display. - * This setting can be dynamically toggled as needed.<br> - * Note that JLabel resets the font to its own default whenever it encounters - * an HTML structure, like a table or a header tag. I couldn't find a workaround - * for what can/should be called a bug. Normal browsers do not behave like this.<p> - * - * Internal attributes like FillColor or FontName are exposed as special SGML - * entities using the standard SGML entity notation, ex: <code>&FillColor;</code>.<br> - * Any attribute associated to the figure can be used and will be replaced with - * an appropriate value from a ContentsProducer (see below) or its - * toString() value if no specific ContentProducer is defined.<p> - * - * The HTML display and layouting can be time consuming, quite fast in most cases, - * unless the HTML structure is complicated. This can become a serious penalty - * when working with a large number of complicated figures.<br> - * To help in this issue HTMLTextAreaFigure offers two display modes, DirectDraw, - * where the HTML layout logic is executed every time the figure is displayed, and - * BufferedDraw, where HTMLTextAreaFigure creates an in-memory image of the - * resulting layout and uses the image for fast display until a change requires - * to regenerate the image.<br> - * The BufferedDraw mode is as fast as an image display can be, but it consumes - * more memory than the DirectDraw mode, which in turn is slower.<br> - * The setting is specific to each figure instance and it can be dynamically - * toggled at any time, so it is possible to fine tune when and which figures - * use either one of the drawing modes.<p> - * - * Remember the attributes based SGML entities?<br> - * If you set the figure to be read only, so not allowing the user to directly - * edit the HTML contens, then it is possible to use HTMLTextAreaFigures to - * produce very elaborate and complex information layout.<br> - * You create HTML templates for each figure layout you want to use and set them - * as the text of the figure. Within the template text you place field names - * wherever needed as you would for a Web page, then each figure using the template - * associates the field values as attributes of the figure. The attribute exposure - * feature will substitute the entity names with the current attribute's value.<br> - * Please refer to the accompanying sample program to see in detail the multiple - * ways this feature can enhance your drawings.<p> - * - * <b>ContentProducers</b><br> - * As stated above, entities referenced in the HTML template code are replaced by - * their current value in the drawn figure. The values themselves are provided - * by ContentProducers.<br> - * For a detailed description of ContentProducers please refer to their - * own documentation, but to make it simple, a ContentProducer is an object that - * implements the method <code>getContent</code> and is registered to produce - * content for either specific entities, or entity classes.<br> - * An entity class is the class of the attribute containing its value, ie: an - * attribute containing a URL has class URL (<code>attribute.getClass()</code>), - * and an URLContentProducer can be associated to it so that when the layout - * needs the entity's value, the producer's getContent() method is called and the - * returned value (ex: contents from a Web page, FTP file or disk file) is used - * to replace the entity in the displayed figure.<br> - * The ContentProducer can return either a String, in which case it is used - * <b>as is</b>, or another Object. In the later case HTMLTextAreaFigure will - * continue calling registered ContentProviders depending on the class of the - * returned Object until it either gets a final String, or null. If null then - * the entity is considered as unknown and left as is in the displayed text. To - * make it dissapear alltogether the producer should return an empty String.<p> - * HTMLTextAreaFigure registers default ContentProducers: - * AttributeFigureContentProducer for the intrinsic attributes of the figure - * (height, width, font name, etc.), URLContentProducer for URL attributes, - * HTMLColorContentProducer for HTML color encoding and for embedded - * TextAreaFigure and HTMLTextAreaFigure classes. That's right, you can embed - * a TextAreaFigure or HTMLTextAreaFigure contents inside an HTMLTextAreaFigure - * recursively for as many levels as your CPU and memory will allow.<br> - * For instance, the main figure can consists of an HTML table where each - * cell's contents come from a different HTMLTextAreaFigure. - * - * @author Eduardo Francos - InContext - * @created 7 May 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLTextAreaFigure extends TextAreaFigure - implements HTMLContentProducerContext, FigureChangeListener { - - /** Start marker for embedded attribute values */ - public final static char START_ENTITY_CHAR = '&'; - - /** End marker for embedded attribute values */ - public final static char END_ENTITY_CHAR = ';'; - - /** Marker escape character */ - public final static char ESCAPE_CHAR = '\\'; - - /** holder for the image used for the display */ - private transient DisposableResourceHolder fImageHolder; - - /** The label used for in-memory display */ - private transient JLabel fDisplayDelegate; - - /** True if using direct drawing, false if using the memory image */ - private boolean fUseDirectDraw = false; - - /** True if the memory image should be regenerated */ - private boolean fIsImageDirty = true; - - /** Description of the Field */ - private boolean fRawHTML = false; - - /** Supplier for intrinsic data */ - private transient ContentProducer fIntrinsicContentProducer; - - /** Description of the Field */ - private static ContentProducerRegistry fDefaultContentProducers = new ContentProducerRegistry(); - // initialize the default content producers for HTMLTextAreaFigure figures - static { - fDefaultContentProducers.registerContentProducer(TextAreaFigure.class, new TextHolderContentProducer()); - fDefaultContentProducers.registerContentProducer(Color.class, new HTMLColorContentProducer()); - } - - /** Description of the Field */ - private transient ContentProducerRegistry fContentProducers = null; - - /** The figure used to draw the frame of the area */ - private Figure fFrameFigure = null; - - // make sure required default attributes are set - static { - initDefaultAttribute("XAlignment", new Integer(SwingConstants.LEFT)); - initDefaultAttribute("YAlignment", new Integer(SwingConstants.TOP)); - initDefaultAttribute("LeftMargin", new Float(5)); - initDefaultAttribute("RightMargin", new Float(5)); - initDefaultAttribute("TopMargin", new Float(5)); - initDefaultAttribute("BottomMargin", new Float(5)); - initDefaultAttribute("TabSize", new Float(8)); - } - - /** Constructor for the HTMLTextAreaFigure object */ - public HTMLTextAreaFigure() { - initialize(); - } - - /** - * Clones a figure and initializes it - * - * @return Description of the Return Value - * @see Figure#clone - */ - public Object clone() { - Object cloneObject = super.clone(); - ((HTMLTextAreaFigure)cloneObject).initialize(); - return cloneObject; - } - - /** - * Sets the display box for the figure - * - * @param origin origin point - * @param corner corner point - * @see Figure - */ - public void basicDisplayBox(Point origin, Point corner) { - super.basicDisplayBox(origin, corner); - getFrameFigure().displayBox(displayBox()); - } - - /** - * Returns an iterator of standard sizing handles to manipulate the figure - * - * @return Description of the Return Value - */ - public HandleEnumeration handles() { - return getFrameFigure().handles(); -// List handles = CollectionsFactory.current().createList(); -// BoxHandleKit.addHandles(this, handles); -// return new HandleEnumerator(handles); - } - - /** - * True if the figure contains the point. The call is relayed to the frame figure - * - * @param x Description of the Parameter - * @param y Description of the Parameter - * @return Description of the Return Value - */ - public boolean containsPoint(int x, int y) { - return getFrameFigure().containsPoint(x, y); - } - - /** - * Moves the figure by the specified displacement - * - * @param dx Description of the Parameter - * @param dy Description of the Parameter - */ - public void moveBy(int dx, int dy) { - super.moveBy(dx, dy); - getFrameFigure().moveBy(dx, dy); - } - - /** Initializes the figure */ - protected void initialize() { - fImageHolder = DisposableResourceManagerFactory.createStandardHolder(null); - setFrameFigure(new RectangleFigure()); - - // initialize the content producers - setIntrinsicContentProducer(new HTMLContentProducer()); - fContentProducers = new ContentProducerRegistry(fDefaultContentProducers); - - markSizeDirty(); - markImageDirty(); - markTextDirty(); - markFontDirty(); - - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - } - - /** - * Called whenever the something changes that requires size recomputing - */ - protected void markSizeDirty() { - markImageDirty(); - super.markSizeDirty(); - } - - /** - * Called whenever the something changes that requires text recomputing - */ - protected void markTextDirty() { - markImageDirty(); - super.markTextDirty(); - } - - /** - * Called whenever the something changes that requires font recomputing - */ - protected void markFontDirty() { - markImageDirty(); - super.markFontDirty(); - } - - /** - * Draws the figure in the given graphics. Draw is a template - * method calling drawBackground followed by drawText then drawFrame.<br> - * HTMLTextAreaFigure displays in a different order tahn most figures to avoid - * smearing of the border when enclosed in a weird frame figure.<br> - * Also, there is no such thing as a transparent background so we always draw it. - * - * @param g Description of the Parameter - * @todo check possibility of clipping the contents from the background to have a - * transparent figure - */ - public void draw(Graphics g) { - Color fill = getFillColor(); - g.setColor(fill); - drawBackground(g); - - // we draw the text then the rame to avoid smearing - drawText(g, displayBox()); - - Color frame = getFrameColor(); - g.setColor(frame); - drawFrame(g); - } - - /** - * Draws the frame around the text. It gets the shape of the frame from the - * enclosing figure - * - * @param g The graphics to use for the drawing - */ - public void drawFrame(Graphics g) { - ((Graphics2D)g).draw(getClippingShape()); - } - - /** - * Draws the background for the figure. It gets the shape of the frame from the - * enclosing figure - * - * @param g The graphics to use for the drawing - */ - public void drawBackground(Graphics g) { - ((Graphics2D)g).fill(getClippingShape()); - } - - /** - * Formats and draws the text for the figure - * - * @param g the graphics for the drawing. It can be null when - * called just to compute the size - * @param displayBox the display box within which the text should be formatted and drawn - * @return Description of the Return Value - */ - protected float drawText(Graphics g, Rectangle displayBox) { - Graphics2D g2 = null; - Shape savedClip = null; - - if (g != null) { - g2 = (Graphics2D)g; - savedClip = g2.getClip(); - } - - Rectangle drawingBox = makeDrawingBox(displayBox); - - // drawing an empty displayBox is not possible - if (drawingBox.isEmpty()) { - return drawingBox.height; - } - - if (g != null) { - g2.clip(getClippingShape()); - } - - if (usesDirectDraw()) { - drawTextDirect(g2, drawingBox); - } - else { - fImageHolder.lock(); - if (isImageDirty()) { - generateImage(drawingBox); - setSizeDirty(false); - } - - if (g2 != null) { - g2.drawImage(getImage(), drawingBox.x, drawingBox.y, null); - } - fImageHolder.unlock(); - } - if (g != null) { - g2.setClip(savedClip); - } - - // redraw the border to prevent smearing - drawFrame(g); - return displayBox.height; - } - - /** - * Generates the HTML image to be used for fast BufferedDrawing - * - * @param drawingBox Description of the Parameter - */ - protected void generateImage(Rectangle drawingBox) { - // create the image and get its Graphics - createImage(drawingBox.width, drawingBox.height); - Graphics2D g2 = (Graphics2D)getImage().getGraphics(); - - Rectangle finalBox = new Rectangle(drawingBox); - finalBox.setLocation(0, 0); - renderText(g2, finalBox); - g2.dispose(); - } - - /** - * Draws the text directly onto the drawing, without using the cached figure - * - * @param g2 Description of the Parameter - * @param drawingBox Description of the Parameter - */ - protected void drawTextDirect(Graphics2D g2, Rectangle drawingBox) { - Shape savedClipArea = null; - Color savedFontColor = null; - //Font savedFont = null; - //Rectangle2D clipRect = null; - RenderingHints savedRenderingHints = null; - - if (g2 != null) { - savedRenderingHints = g2.getRenderingHints(); - savedClipArea = g2.getClip(); - //savedFont = g2.getFont(); - savedFontColor = g2.getColor(); - g2.clip(drawingBox); - } - - //float finalHeight = renderText(g2, drawingBox); - - // restore saved graphic attributes - if (g2 != null) { - g2.setClip(savedClipArea); - g2.setColor(savedFontColor); - g2.setRenderingHints(savedRenderingHints); - } - } - - /** - * Renders the HTML formatted text onto the supplied Graphics.<br> - * Rendering involves entity substitution and HTML contents preparation suitable - * for display by a JLabel. - * - * @param g2 Description of the Parameter - * @param drawingBox Description of the Parameter - * @return Description of the Return Value - * @todo look for other HTML display providers as JLabel is kind of - * lousy at it - */ - protected float renderText(Graphics2D g2, Rectangle drawingBox) { - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g2.setRenderingHint(RenderingHints.KEY_RENDERING, - RenderingHints.VALUE_RENDER_QUALITY); - - // fill with background color - g2.setBackground(getFillColor()); - g2.setColor(getFillColor()); - g2.clearRect(drawingBox.x, drawingBox.y, drawingBox.width, drawingBox.height); - g2.fillRect(drawingBox.x, drawingBox.y, drawingBox.width, drawingBox.height); - - // get the text. Either in raw format or prepared for HTML display - String text; - if (isRawHTML()) { - text = getText(); - } - else { - text = getHTMLText(getText(), getFont(), - (String)getContentProducer(Color.class).getContent(this, FigureAttributeConstant.TEXT_COLOR_STR, getTextColor()), - (String)getContentProducer(Color.class).getContent(this, FigureAttributeConstant.FILL_COLOR_STR, getFillColor()), - drawingBox - ); - } - - // perform entity keyword substitution - text = substituteEntityKeywords(text); - - // create the JLabel used as delegate for drawing - JLabel displayDelegate = getDisplayDelegate(); - displayDelegate.setText(text); - displayDelegate.setBackground(getFillColor()); - - // ensure the label covers the whole area - displayDelegate.setLocation(0, 0); - displayDelegate.setSize(drawingBox.width, drawingBox.height); - displayDelegate.setHorizontalAlignment(((Integer)getAttribute(FigureAttributeConstant.XALIGNMENT)).intValue()); - displayDelegate.setVerticalAlignment(((Integer)getAttribute(FigureAttributeConstant.YALIGNMENT)).intValue()); - - // finally display it - SwingUtilities.paintComponent( - g2, - displayDelegate, - getContainerPanel(displayDelegate, drawingBox), - drawingBox.x, - drawingBox.y, - drawingBox.width, - drawingBox.height); - - return drawingBox.height; - } - - /** - * Builds the drawing box using the margins - * - * @param displayBox Description of the Parameter - * @return The drawing box - */ - protected Rectangle makeDrawingBox(Rectangle displayBox) { - // get alignment information - float leftMargin = ((Float)getAttribute(FigureAttributeConstant.LEFT_MARGIN)).floatValue(); - float rightMargin = ((Float)getAttribute(FigureAttributeConstant.RIGHT_MARGIN)).floatValue(); - float topMargin = ((Float)getAttribute(FigureAttributeConstant.TOP_MARGIN)).floatValue(); - float bottomMargin = ((Float)getAttribute(FigureAttributeConstant.BOTTOM_MARGIN)).floatValue(); - - // inset the drawing box by 1 on every side so as not to overwrite - // the border - Rectangle drawingBox = new Rectangle(displayBox); - drawingBox.grow(-1, -1); - // adjust for margins - drawingBox.x += leftMargin; - drawingBox.width -= (leftMargin + rightMargin); - drawingBox.y += topMargin; - drawingBox.height -= topMargin + bottomMargin; - - return drawingBox; - } - - /** - * Gets the displayDelegate attribute of the HTMLTextAreaFigure object - * - * @return The displayDelegate value - */ - protected JLabel getDisplayDelegate() { - if (fDisplayDelegate == null) { - fDisplayDelegate = new JLabel(); - fDisplayDelegate.setBorder(null); - } - return fDisplayDelegate; - } - - /** - * Creates the cached image, unless there is already one and it is - * compatible with new request, in which case we reuse it - * - * @param width Description of the Parameter - * @param height Description of the Parameter - */ - protected void createImage(int width, int height) { - // if current image is compatible reuse it - fImageHolder.lock(); - if (!fImageHolder.isAvailable() || - ((BufferedImage)fImageHolder.getResource()).getWidth() != width || - ((BufferedImage)fImageHolder.getResource()).getHeight() != height) { - fImageHolder.setResource(new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)); - } - // we don't unlock the image, it's the responsibility of - // the caller to do so, this in oreder to ensure that calling createImage - // will always return with a valid image - } - - /** - * Builds the container for the drawing delegate - * - * @param drawingDelegate The delegate - * @param displayBox The bounding box - * @return The container - */ - protected JPanel getContainerPanel(Component drawingDelegate, Rectangle displayBox) { - JPanel panel = new JPanel(); - return panel; - } - - /** - * Returns a string that is valid HTML contents for a JLabel.<br> - * Valid HTML contents is text enclosed in <html> </html> tags.<br> - * We enclose the supplied text into a table with a single cell so that we - * can also set the external alignment and font attributes - * - * @param text The text - * @param font The font - * @param textColor The text color HTML code - * @param backColor The background's color HTML code - * @param displayBox Description of the Parameter - * @return The final HTML encoded text - */ - protected String getHTMLText(String text, Font font, String textColor, - String backColor, Rectangle displayBox) { - - StringBuffer htmlText = new StringBuffer(); - // add an <HTML> - htmlText.append("<html>"); - - // add a table with width=100%, background color, and no borders with - // a single cell - htmlText.append( - "<table border='0' width='" + - displayBox.width + - "' height='" + displayBox.height + - "' cellpadding='0' cellspacing='0'" + - "bgcolor='&FillColor;'>"); - htmlText.append("<tr><td width='100%'>"); - // set the font - htmlText.append("<font face='&FontName;' color='&TextColor;' size='&FontSize;'>"); - // add alignment if required - if (((Integer)getAttribute(FigureAttributeConstant.XALIGNMENT)).intValue() == SwingConstants.CENTER) { - htmlText.append("<center>"); - } - // add italic and bold attributes if required - if (font.isItalic()) { - htmlText.append("<i>"); - } - if (font.isBold()) { - htmlText.append("<b>"); - } - - // add the text itself - htmlText.append(text); - - // close italic and bold attributes if required - if (font.isBold()) { - htmlText.append("</b>"); - } - if (font.isItalic()) { - htmlText.append("</i>"); - } - // close alignment if required - if (((Integer)getAttribute(FigureAttributeConstant.XALIGNMENT)).intValue() == SwingConstants.CENTER) { - htmlText.append("</center>"); - } - // close the font tag - htmlText.append("</font>"); - // close the cell, row and table - htmlText.append("</td></tr></table>"); - - // close the html tag - htmlText.append("</html>"); - - return htmlText.toString(); - } - - /** - * Returns a new String with the entity keywords replaced by their - * current attribute value.<br> - * The text is scanned for entity keywords delimited by the START_ENTITY_CHAR - * and END_ENTITY_CHAR characters as in<br> - * <code>>font face='&FontName;' color='&FillColor;'<</code><br> - * A keyword is replaced if and only if an attribute with the given name is - * found, otherwise the text is left as is. - * - * @param template The template text - * @return The resulting string with its attributes replaced - */ - protected String substituteEntityKeywords(String template) { - int endPos; - StringBuffer finalText = new StringBuffer(); - - int startPos = 0; - int chunkEnd = startPos; - try { - while ((startPos = template.indexOf(START_ENTITY_CHAR, startPos)) != -1) { - if (startPos != 0 && template.charAt(startPos - 1) == ESCAPE_CHAR) { - // found an escaped parameter starter - startPos++; - continue; - } - - // get the end of the parameter - endPos = startPos + 1; - while ((endPos = template.indexOf(END_ENTITY_CHAR, endPos)) != -1) { - if (endPos == 0 || template.charAt(endPos - 1) != ESCAPE_CHAR) { - // found a valid non escaped group stopper - break; - } - // invalid entity, error? probably not, anyway we consider - // this as not being an attribute replacement - throw new InvalidAttributeMarker(); - } - - // OK, we now have an attribute - String attrName = template.substring(startPos + 1, endPos); - - // replace it if present, otherwise leave as is - String attrValue = getEntityHTMLRepresentation(attrName); - if (attrValue != null) { - finalText.append(template.substring(chunkEnd, startPos)); - // append the entity's value after performing - // entity keyword substitution on its contents - finalText.append(substituteEntityKeywords(attrValue)); - startPos = endPos + 1; - chunkEnd = startPos; - } - else { - startPos++; - } - } - } - catch (InvalidAttributeMarker ex) { - // invalid marker, ignore - } - - // append whatever is left - finalText.append(template.substring(chunkEnd)); - - // and return it - return finalText.toString(); - } - - /** - * Returns a string representation of the attribute according to its type - * - * @param attrName The name of the attribute - * @return The attribute's HTML representation - */ - protected String getEntityHTMLRepresentation(String attrName) { - // get the attribute's raw value - Object attrValue = getIntrinsicContentProducer().getContent(this, attrName, null); - - // no such attribute? - if (attrValue == null) { - return null; - } - - // found something - // keep requesting value expansion until we get a String - while (attrValue != null && !(attrValue instanceof String)) { - // handle explicit ContentProducers - if (attrValue instanceof ContentProducer) { - attrValue = ((ContentProducer)attrValue).getContent(this, attrName, attrValue); - continue; - } - - // not a specific producer, try a default one - ContentProducer defaultProducer = getContentProducer(attrValue.getClass()); - if (defaultProducer != null) { - attrValue = defaultProducer.getContent(this, attrName, attrValue); - continue; - } - - // no specific producer, - // all classes without an explicit default producer - // get their value from their toString() method - attrValue = attrValue.toString(); - } - - return (String)attrValue; - } - - /** - * Gets the image. - * - * @return The image value - */ - protected BufferedImage getImage() { - if (fImageHolder.isAvailable()) { - return (BufferedImage)fImageHolder.getResource(); - } - return null; - } - - /** - * Sets the image attribute of the HTMLTextAreaFigure object - * - * @param newImage The new image value - */ - protected void setImage(BufferedImage newImage) { - fImageHolder.setResource(newImage); - } - - /** - * Factory method to create a popup menu which allows to set options - * - * @return newly created popup menu - */ - protected JPopupMenu createPopupMenu() { - JPopupMenu popupMenu = new JPopupMenu(); - addPopupMenuItems(popupMenu); - popupMenu.setLightWeightPopupEnabled(true); - return popupMenu; - } - - /** - * Adds items to the popup menu - * - * @param popupMenu The popup menu to add items to - */ - protected void addPopupMenuItems(JPopupMenu popupMenu) { - ButtonGroup drawingPopupGroup; - - JRadioButtonMenuItem rbOption; - - drawingPopupGroup = new ButtonGroup(); - rbOption = new JRadioButtonMenuItem( - new AbstractAction("Direct drawing") { - public void actionPerformed(ActionEvent event) { - setUseDirectDraw(true); - } - }); - - drawingPopupGroup.add(rbOption); - if (usesDirectDraw()) { - drawingPopupGroup.setSelected(rbOption.getModel(), true); - } - popupMenu.add(rbOption); - - rbOption = new JRadioButtonMenuItem( - new AbstractAction("Buffered drawing") { - public void actionPerformed(ActionEvent event) { - setUseDirectDraw(false); - } - }); - drawingPopupGroup.add(rbOption); - if (usesBufferedDraw()) { - drawingPopupGroup.setSelected(rbOption.getModel(), true); - } - popupMenu.add(rbOption); - - popupMenu.addSeparator(); - - drawingPopupGroup = new ButtonGroup(); - rbOption = new JRadioButtonMenuItem( - new AbstractAction("Normal HTML") { - public void actionPerformed(ActionEvent event) { - setRawHTML(false); - } - }); - - drawingPopupGroup.add(rbOption); - drawingPopupGroup.setSelected(rbOption.getModel(), true); - popupMenu.add(rbOption); - - rbOption = - new JRadioButtonMenuItem( - new AbstractAction("Raw HTML") { - public void actionPerformed(ActionEvent event) { - setRawHTML(true); - } - }); - drawingPopupGroup.add(rbOption); - popupMenu.add(rbOption); - - } - - /** - * Gets the usesDirectDraw status of the HTMLTextAreaFigure object - * - * @return True if currently doing direct drawing, ie: not using a cached image - */ - public boolean usesDirectDraw() { - return fUseDirectDraw; - } - - /** - * Sets the useDirectDraw attribute of the HTMLTextAreaFigure object - * - * @param newUseDirectDraw The new useDirectDraw value - */ - public void setUseDirectDraw(boolean newUseDirectDraw) { - fUseDirectDraw = newUseDirectDraw; - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - markSizeDirty(); - } - - /** - * Sets the useBufferedDraw attribute of the HTMLTextAreaFigure object - * - * @param newUseBufferedDraw The new useBufferedDraw value - */ - public void setUseBufferedDraw(boolean newUseBufferedDraw) { - setUseDirectDraw(!newUseBufferedDraw); - } - - /** - * Gets the usesBufferedDraw attribute of the HTMLTextAreaFigure object - * - * @return True if currently using buffered draw, ie: the cached image - */ - public boolean usesBufferedDraw() { - return !usesDirectDraw(); - } - - /** - * Disposes of the image so it will be regenerated next time it is displayed - */ - protected void markImageDirty() { - fImageHolder.dispose(); - } - - /** - * True if the image should be regenerated - * - * @return The imageDirty value - */ - protected boolean isImageDirty() { - return !fImageHolder.isAvailable(); - } - - /** - * Reads the figure from StorableInput - * - * @param dr Description of the Parameter - * @throws IOException the inout storable - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - - setFrameFigure((Figure)dr.readStorable()); - setUseDirectDraw(dr.readBoolean()); - setRawHTML(dr.readBoolean()); -// setIntrinsicContentProducer((ContentProducer)dr.readStorable()); -// fContentProducers.read(dr); - -// // finally add the popup menu -// setAttribute(Figure.POPUP_MENU, createPopupMenu()); - - } - - /** - * Writes the figure to StorableOutput - * - * @param dw the output storable - */ - public void write(StorableOutput dw) { - super.write(dw); - - dw.writeStorable(getFrameFigure()); - dw.writeBoolean(usesDirectDraw()); - dw.writeBoolean(isRawHTML()); -// dw.writeStorable(getIntrinsicContentProducer()); -// fContentProducers.write(dw); - } - - /** - * A text area figure uses the "LeftMargin", "RightMargin", - * "TopMargin", "BottomMargin", "TabSize", "FontSize", "FontStyle", and "FontName" - * attributes - * - * @param name The new attribute name - * @param value The new attribute value - */ - public void setAttribute(FigureAttributeConstant name, Object value) { - super.setAttribute(name, value); - markImageDirty(); - } - - /** - * Gets the rawHTML attribute of the HTMLTextAreaFigure object.<br> - * In RawHTML mode, the figure does not add any HTML formatting information so it's - * the user's responsibility to handle the whole displayed contents - * - * @return The rawHTML value - */ - public boolean isRawHTML() { - return fRawHTML; - } - - /** - * Sets the rawHTML attribute of the HTMLTextAreaFigure object - * - * @param newRawHTML The new rawHTML value - */ - public void setRawHTML(boolean newRawHTML) { - fRawHTML = newRawHTML; - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - } - - /** - * Gets the IntrinsicContentProducer attribute of the HTMLTextAreaFigure object.<br> - * The intrinsic producer produces contents for the basic figure's attributes - * - * @return The IntrinsicContentProducer value - */ - protected ContentProducer getIntrinsicContentProducer() { - return fIntrinsicContentProducer; - } - - /** - * Sets the IntrinsicContentProducer attribute of the HTMLTextAreaFigure object - * - * @param newIntrinsicContentProducer The new IntrinsicContentProducer value - */ - public void setIntrinsicContentProducer(ContentProducer newIntrinsicContentProducer) { - fIntrinsicContentProducer = newIntrinsicContentProducer; - } - - /** - * Registers a specific content producer for the target class - * - * @param targetClass the target class - * @param producer the producer - * @return the previously registered producer. May be null - */ - public ContentProducer registerContentProducer(Class targetClass, ContentProducer producer) { - return fContentProducers.registerContentProducer(targetClass, producer); - } - - /** - * Unregisters a registered content producer. - * - * @param producer Description of the Parameter - * @param targetClass Description of the Parameter - */ - public void unregisterContentProducer(Class targetClass, ContentProducer producer) { - fContentProducers.unregisterContentProducer(targetClass, producer); - } - - /** - * Retrieves a suitable content producer for the target class - * - * @param targetClass the target class - * @return The ContentProducer - */ - protected ContentProducer getContentProducer(Class targetClass) { - return fContentProducers.getContentProducer(targetClass); - } - - /** - * Makes a polygon with the same shape and dimensions as the current figure - * - * @return Description of the Return Value - */ - public Polygon getPolygon() { - Polygon polygon = new Polygon(); - - // make an AffineTransofmr that does nothing - AffineTransform at = AffineTransform.getScaleInstance(1, 1); - // and get an iterator on the segments - FlatteningPathIterator pIter = new FlatteningPathIterator( - getClippingShape().getPathIterator(at), - 1); - - double[] coords = new double[6]; - //int pointType; - // iterate on the segments adding the points to the polygon - while (!pIter.isDone()) { - //pointType = pIter.currentSegment(coords); - pIter.currentSegment(coords); - polygon.addPoint((int)coords[0], (int)coords[1]); - pIter.next(); - } - - return polygon; - } - - /** - * Gets the frameFigure attribute of the HTMLTextAreaFigure object - * - * @return The frameFigure value - */ - protected Figure getFrameFigure() { - return fFrameFigure; - } - - /** - * Sets the frameFigure attribute of the HTMLTextAreaFigure object - * - * @param newFrameFigure The new frameFigure value - */ - public void setFrameFigure(Figure newFrameFigure) { - if (fFrameFigure != null) { - fFrameFigure.removeFigureChangeListener(this); - } - fFrameFigure = newFrameFigure; - fFrameFigure.addFigureChangeListener(this); - } - - /** - * Gets the clippingShape attribute of the HTMLTextAreaFigure object - * - * @return The clippingShape value - */ - protected Shape getClippingShape() { - Figure frame = getFrameFigure(); - if (frame instanceof GeometricFigure) { - return ((GeometricFigure)frame).getShape(); - } - return frame.displayBox(); - } - - /** - * handles frame figure's invalidated events - * - * @param e Description of the Parameter - */ - public void figureInvalidated(FigureChangeEvent e) { } - - /** - * handles frame figure's changed events.<br> - * It updates the displayBox to match - * the frame figure's - * - * @param e Description of the Parameter - */ - public void figureChanged(FigureChangeEvent e) { - willChange(); - super.basicDisplayBox(e.getFigure().displayBox().getLocation(), Geom.corner(e.getFigure().displayBox())); - changed(); - } - - /** - * handles frame figure's invalidatedremoved events.<br> - * Never happens because the frame figure is not part of the drawing - * - * @param e Description of the Parameter - */ - public void figureRemoved(FigureChangeEvent e) { } - - /** - * handles frame figure's remove requests events.<br> - * Never happens because the frame figure is not part of the drawing - * - * @param e Description of the Parameter - */ - public void figureRequestRemove(FigureChangeEvent e) { } - - /** - * handles frame figure's update requests events.<br> - * Never happens because the frame figure is not part of the drawing - * - * @param e Description of the Parameter - */ - public void figureRequestUpdate(FigureChangeEvent e) { } - - /** - * Thrown when an entity reference is not correctly encoded - * - * @author gualo - * @created 1 mai 2002 - */ - private class InvalidAttributeMarker extends Exception { - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure() { - return this; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLTextAreaTool.java b/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLTextAreaTool.java deleted file mode 100644 index 3cca3b771..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/HTMLTextAreaTool.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)HTMLTextAreaTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Font; -import CH.ifa.draw.contrib.TextAreaTool; - -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.standard.TextHolder; - -/** - * HTMLTextAreaTool creates or edits HTMLTextAreaFigures.<br> - * Only diffreence with TextAreaFigure is that this allows to edit HTML code - * using a more suitable font than the one defined by the figure. - * - * @author Eduardo Francos - InContext - * @created 28 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLTextAreaTool extends TextAreaTool { - - /** - * Constructor for the TextAreaTool object - * - * @param newDrawingEditor the managing drawing editor - * @param prototype the prototype for the figure - */ - public HTMLTextAreaTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - /** - * Gets the font to be used for editing the figure.<br> - * Use a simple editing font, easier for HTML editing - * - * @param figure the figure - * @return The font - */ - protected Font getFont(TextHolder figure) { - return new Font("Helvetica", Font.PLAIN, 12); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/PolygonFigureGeometricAdapter.java b/JHotDraw/src/CH/ifa/draw/contrib/html/PolygonFigureGeometricAdapter.java deleted file mode 100644 index 8bd1b951f..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/PolygonFigureGeometricAdapter.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * @(#)PolygonFigureGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Polygon; -import java.awt.Shape; - -import CH.ifa.draw.contrib.PolygonFigure; - -/** - * Geometric adapter for the PolygonFigure - * - * @author Eduardo Francos - InContext - * @created 3 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class PolygonFigureGeometricAdapter extends PolygonFigure - implements GeometricFigure { - - /** - * Constructor for the PolyLineFigureGeometricAdapter object - */ - public PolygonFigureGeometricAdapter() { - super(); - } - - /** - *Constructor for the PolyLineFigureGeometricAdapter object - * - * @param x Description of the Parameter - * @param y Description of the Parameter - */ - public PolygonFigureGeometricAdapter(int x, int y) { - super(x, y); - } - - /** - *Constructor for the PolyLineFigureGeometricAdapter object - * - * @param p Description of the Parameter - */ - public PolygonFigureGeometricAdapter(Polygon p) { - super(p); - } - - /** - * Gets the shape attribute of the PolygonFigure object - * - * @return The shape value - */ - public Shape getShape() { - return getInternalPolygon(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/ResourceContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/ResourceContentProducer.java deleted file mode 100644 index c33422649..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/ResourceContentProducer.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * @(#)ResourceContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.io.IOException; - -import java.io.InputStream; -import java.io.Serializable; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -/** - * ResourceContentProducer produces contents from resource in the application's - * CLASSPATH.<br> - * It takes a resource name and loads the resource as a String. - * - * It can either be specific if set for a specific resource, or generic, retrieving - * any resource passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 1 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class ResourceContentProducer extends AbstractContentProducer - implements Serializable { - - /** Description of the Field */ - private String fResourceName; - - /** - * Constructor for the ResourceContentProducer object - */ - public ResourceContentProducer() { } - - /** - * Constructor for the ResourceContentProducer object - * - * @param resourceName Description of the Parameter - */ - public ResourceContentProducer(String resourceName) { - setResourceName(resourceName); - } - - /** - * Gets the content attribute of the ResourceContentProducer object - * - * @param context Description of the Parameter - * @param ctxAttrName Description of the Parameter - * @param ctxAttrValue Description of the Parameter - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - try { - // if we have our own resource then use it - // otherwise use the one supplied - String resourceName = (getResourceName() != null) ? getResourceName() : (String)ctxAttrValue; - - InputStream reader = this.getClass().getResourceAsStream(resourceName); - int available = reader.available(); - byte contents[] = new byte[available]; - reader.read(contents, 0, available); - reader.close(); - return new String(contents); - } - catch (Exception ex) { - ex.printStackTrace(); - return ex.toString(); - } - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeString(getResourceName()); - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - setResourceName (dr.readString()); - } - - public String getResourceName() { - return fResourceName; - } - - protected void setResourceName(String newResourceName) { - fResourceName = newResourceName; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/ResourceDisposabilityStrategy.java b/JHotDraw/src/CH/ifa/draw/contrib/html/ResourceDisposabilityStrategy.java deleted file mode 100644 index efd61fbda..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/ResourceDisposabilityStrategy.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)ResourceDisposabilityStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -/** - * ResourceDisposabilityStrategy defines the interface for resource disposal - * strategies.<br> - * The strategy defines the logic used to determine which and when a resource can - * be efficiently disposed of. A smarter the strategy leads to few resource - * regeneration. - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public interface ResourceDisposabilityStrategy { - - /** - * Sets the manager holding the resources for this strategy - * - * @param manager The new manager value - */ - public void setManager(DisposableResourceManager manager); - - - /** - * Gets the manager holding the resources for this strategy - * - * @return The manager value - */ - public DisposableResourceManager getManager(); - - /** - * Activates the strategy which starts disposing of resources as fitted - * - * @exception ResourceManagerNotSetException Description of the Exception - */ - public void startDisposing() throws ResourceManagerNotSetException; - - /** - * Deactivates the strategy that stops automatic disposal of resource.<br> - * The millis parameters specifies in milliseconds the time to wait for - * the disposal to stop. After this time the method returns, but the - * deactivation request remain active. - * - * @param millis time to wait for disposal to stop - */ - public void stopDisposing(long millis); -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/ResourceManagerNotSetException.java b/JHotDraw/src/CH/ifa/draw/contrib/html/ResourceManagerNotSetException.java deleted file mode 100644 index d85661bdb..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/ResourceManagerNotSetException.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * @(#)ResourceManagerNotSetException .java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -/** - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class ResourceManagerNotSetException extends Exception { - - /** - * Constructor for the ResourceManagerNotSetException object - */ - public ResourceManagerNotSetException() { } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/RoundRectangleGeometricAdapter.java b/JHotDraw/src/CH/ifa/draw/contrib/html/RoundRectangleGeometricAdapter.java deleted file mode 100644 index 1ceba1f62..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/RoundRectangleGeometricAdapter.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * @(#)RoundRectangleGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.geom.RoundRectangle2D; -import CH.ifa.draw.figures.RoundRectangleFigure; - -/** - * Geometric adapter for the RoundRectangleFigure - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class RoundRectangleGeometricAdapter extends RoundRectangleFigure - implements GeometricFigure { - - /** - * Constructor for the RoundRectangleGeometricAdapter object - */ - public RoundRectangleGeometricAdapter() { - super(); - } - - /** - *Constructor for the RoundRectangleGeometricAdapter object - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - */ - public RoundRectangleGeometricAdapter(Point origin, Point corner) { - super(origin, corner); - } - - /** - * Gets the shape attribute of the TriangleFigure object - * - * @return The shape value - */ - public Shape getShape() { - Point arc = getArc(); - Rectangle dspBox = displayBox(); - RoundRectangle2D.Float roundRectangle = new RoundRectangle2D.Float( - dspBox.x, dspBox.y, dspBox.width, dspBox.height, - arc.x, arc.y); - - return roundRectangle; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/StandardDisposableResourceHolder.java b/JHotDraw/src/CH/ifa/draw/contrib/html/StandardDisposableResourceHolder.java deleted file mode 100644 index ff8617e78..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/StandardDisposableResourceHolder.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * @(#)StandardDisposableResourceHolder.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.io.Serializable; - -/** - * StandardDisposableResourceHolder is a standard implementation of the - * DisposableResourceHolder interface - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class StandardDisposableResourceHolder implements DisposableResourceHolder, Serializable { - - /** The holded resource object */ - private Object resource = null; - - /** The dispose delay, default to 60 seconds */ - private long disposeDelay = 60000; - - /** - * The last time the resource was accessed as returned by - * <code>System.currentTimeMillis()</code> - */ - private long lastTimeAccessed = 0; - - /** True if the resource is locked */ - private boolean isLocked = false; - - /** - * Constructor for the StandardDisposableResourceHolder object - */ - public StandardDisposableResourceHolder() { } - - /** - * Constructor for the StandardDisposableResourceHolder object - * - * @param resource Description of the Parameter - */ - public StandardDisposableResourceHolder(Object newResource) { - resource = newResource; - resetDelay(); - } - - /** - * Makes a clone of this - * - * @return the clone - */ - public Object clone() { - StandardDisposableResourceHolder clone = new StandardDisposableResourceHolder(); - clone.setDisposableDelay(this.getDisposableDelay()); - return clone; - } - - /** - * Gets the resource attribute of the StandardDisposableResourceHolder object - * - * @return The resource value - * @exception NullPointerException Description of the Exception - */ - public Object getResource() throws NullPointerException { - if (resource != null) { - resetDelay(); - return resource; - } - throw new NullPointerException(); - } - - /** - * Sets the resource attribute of the StandardDisposableResourceHolder object - * - * @param resource The new resource value - */ - public void setResource(Object newResource) { - resource = newResource; - resetDelay(); - } - - /** - * Sets the disposableDelay attribute of the StandardDisposableResourceHolder object - * - * @param millis The new disposableDelay value - */ - public void setDisposableDelay(long millis) { - disposeDelay = millis; - } - - /** - * Gets the disposableDelay attribute of the StandardDisposableResourceHolder object - * - * @return The disposableDelay value - */ - public long getDisposableDelay() { - return disposeDelay; - } - - /** Disposes of the resource */ - public void dispose() { - resource = null; - } - - /** - * Gets the available attribute of the StandardDisposableResourceHolder object - * - * @return The available value - */ - public boolean isAvailable() { - return (resource != null); - } - - /** - * Locks the resource so it cannot be automatically disposed of until unlock - * is called.<br> - * Explicit disposing by calling dispose() is still possible though. - */ - public void lock() { - isLocked = true; - } - - /** - * Unlocks the resource so it can be automatically disposed of again.<br> - * Explicit disposing by calling dispose() is still possible though. - */ - public void unlock() { - resetDelay(); - isLocked = false; - } - - /** - * True if the resource is locked - * - * @return The locked status - */ - public boolean isLocked() { - return isLocked; - } - - /** - * Gets the lastTimeAccessed attribute of the DisposableResourceHolder object - * - * @return The lastTimeAccessed value - */ - public long getLastTimeAccessed() { - return lastTimeAccessed; - } - - /** Resets the disposing delay so as to restart the time counter */ - public void resetDelay() { - lastTimeAccessed = System.currentTimeMillis(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/StandardDisposableResourceManager.java b/JHotDraw/src/CH/ifa/draw/contrib/html/StandardDisposableResourceManager.java deleted file mode 100644 index 1b2ef205f..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/StandardDisposableResourceManager.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * @(#)StandardDisposableResourceManager.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.util.Iterator; - -import java.util.WeakHashMap; - -/** - * StandardDisposableResourceManager implements disposable resource management - * using a client supplied strategy.<br> - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class StandardDisposableResourceManager implements DisposableResourceManager { - - /** The registered resources */ - private WeakHashMap resources; - - /** The disposing strategy */ - private ResourceDisposabilityStrategy strategy; - - /** - *Constructor for the StandardDisposableResourceManager object - * - * @param strategy Description of the Parameter - */ - public StandardDisposableResourceManager(ResourceDisposabilityStrategy newStrategy) { - resources = new WeakHashMap(); - setStrategy(newStrategy); - getStrategy().setManager(this); - } - - /** - * Registers a resource to be automatically disposed of - * - * @param resource the resource - */ - public synchronized void registerResource(DisposableResourceHolder resource) { - resources.put(resource, resource); - } - - /** - * Unregisters a resource so it is not automatically GCed.<br> - * If does nothing if the resource was not registered with this manager - * - * @param resource the resource - */ - public synchronized void unregisterResource(DisposableResourceHolder resource) { - resources.remove(resource); - } - - /** - * Gets an iterator on the managed resources - * - * @return The iterator - */ - public Iterator getResources() { - return resources.values().iterator(); - } - - /** - * Description of the Method - * - * @param resource the resource - * @return True if the resource is registered with this manager - */ - public synchronized boolean managesResource(DisposableResourceHolder resource) { - return resources.containsValue(resource); - } - - /** - * Gets the strategy attribute of the StandardDisposableResourceManager object - * - * @return The strategy value - */ - public ResourceDisposabilityStrategy getStrategy() { - return strategy; - } - - /** - * Sets the strategy attribute of the StandardDisposableResourceManager object - * - * @param newStrategy The new strategy value - */ - public void setStrategy(ResourceDisposabilityStrategy newStrategy) { - strategy = newStrategy; - } - - /** - * Activates the strategy which starts disposing of resources as fitted - * - * @exception ResourceManagerNotSetException Description of the Exception - */ - public void startDisposing() throws ResourceManagerNotSetException { - getStrategy().startDisposing(); - } - - /** - * Deactivates the strategy that stops automatic disposal of resource.<br> - * The millis parameters specifies in milliseconds the time to wait for - * the disposal to stop. After this time the method returns, but the - * deactivation request remain active. - * - * @param millis time to wait for disposal to stop - */ - public void stopDisposing(long millis) { - getStrategy().stopDisposing(millis); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/TextHolderContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/TextHolderContentProducer.java deleted file mode 100644 index 1cbc7915e..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/TextHolderContentProducer.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * @(#)TextHolderContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.io.IOException; - -import java.io.Serializable; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; -import CH.ifa.draw.standard.TextHolder; - -/** - * TextAreaFigureContentProducer produces text contents from an existing - * TextHolder figure<br> - * It can either be specific if set for a specific figure, or generic, encoding - * any color passed to the getContents method.<br> - * The main usage of this producer is to embed a "master" or "shared" drawing - * figure into other figures so that updating the master figure automatically - * changes all dependent figures as well. Kind of a hot text snippet if you like<br> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class TextHolderContentProducer extends AbstractContentProducer - implements Serializable { - - private TextHolder myTextHolder; - - /** - * Constructor for the TextAreaFigureContentProducer object - */ - public TextHolderContentProducer() { } - - /** - *Constructor for the TextAreaFigureContentProducer object - * - * @param figure Description of the Parameter - */ - public TextHolderContentProducer(TextHolder figure) { - setTextHolder(figure); - } - - /** - * Gets the text from the text figure - * - * @param context Description of the Parameter - * @param ctxAttrName Description of the Parameter - * @param ctxAttrValue Description of the Parameter - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - // if we have our own figure then use it - // otherwise use the one supplied - TextHolder figure = (getTextHolder() != null) ? getTextHolder() : (TextHolder)ctxAttrValue; - // return the areas text - return figure.getText(); - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getTextHolder().getRepresentingFigure()); - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - setTextHolder((TextHolder)dr.readStorable()); - } - - protected TextHolder getTextHolder() { - return myTextHolder; - } - - public void setTextHolder(TextHolder newFigure) { - myTextHolder = newFigure; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/TriangleFigureGeometricAdapter.java b/JHotDraw/src/CH/ifa/draw/contrib/html/TriangleFigureGeometricAdapter.java deleted file mode 100644 index c95531263..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/TriangleFigureGeometricAdapter.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * @(#)TriangleFigureGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.awt.Point; -import java.awt.Shape; -import CH.ifa.draw.contrib.TriangleFigure; - -/** - * Geometric adapter for the TriangleFigure - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class TriangleFigureGeometricAdapter extends TriangleFigure - implements GeometricFigure { - - /** - * Constructor for the TriangleFigureGeometricAdapter object - */ - public TriangleFigureGeometricAdapter() { - super(); - } - - /** - *Constructor for the TriangleFigureGeometricAdapter object - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - */ - public TriangleFigureGeometricAdapter(Point origin, Point corner) { - super(origin, corner); - } - - /** - * Gets the shape attribute of the TriangleFigure object - * - * @return The shape value - */ - public Shape getShape() { - return getPolygon(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/html/URLContentProducer.java b/JHotDraw/src/CH/ifa/draw/contrib/html/URLContentProducer.java deleted file mode 100644 index a9cdf2c02..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/html/URLContentProducer.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * @(#)URLContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.html; - -import java.io.IOException; - -import java.io.InputStream; -import java.io.Serializable; -import java.net.URL; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -/** - * URLContentProducer produces string contents from URLs.<br> - * Anything the <code>URL.openStream()</code> method can get can be retrieved - * by this producer, that includes resources, local files, web documents, - * web queries, FTP files, and you name it.<br> - * It can either be specific if set for a specific URL, or generic, retrieving - * any URL passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - * @todo should we cache the contents for specific URLs? this can - * accelerate things a lot for static documents, but for dynamic ones it - * will complicate things. If cached then if must be in a DisposableResourceHolder - */ -public class URLContentProducer extends FigureDataContentProducer - implements Serializable { - - /** the specific URL */ - private URL fURL; - - /** - * Constructor for the URLContentProducer object - */ - public URLContentProducer() { } - - /** - *Constructor for the URLContentProducer object - * - * @param url the specific URL - */ - public URLContentProducer(URL url) { - setURL(url); - } - - /** - * Retrieves the contents of the URL pointed object - * - * @param context the calling client context - * @param ctxAttrName the attribute name that led to this being called - * @param ctxAttrValue the value of the URL attribute - * @return the contents of the URL pointed object as a string - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - try { - // if we have our own URL then use it - // otherwise use the one supplied - URL url = (getURL() != null) ? new URL(getURL().toExternalForm()) : new URL(((URL)ctxAttrValue).toExternalForm()); - - InputStream reader = url.openStream(); - int available = reader.available(); - byte contents[] = new byte[available]; - reader.read(contents, 0, available); - reader.close(); - return new String(contents); - } - catch (Exception ex) { - ex.printStackTrace(); - return ex.toString(); - } - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeBoolean((getURL() != null)); - if (getURL() != null) { - dw.writeString(getURL().toExternalForm()); - } - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - boolean hasURL = dr.readBoolean(); - if (hasURL) { - setURL(new URL(dr.readString())); - } - } - - public URL getURL() { - return fURL; - } - - protected void setURL(URL newURL) { - fURL = newURL; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/zoom/AreaTracker.java b/JHotDraw/src/CH/ifa/draw/contrib/zoom/AreaTracker.java deleted file mode 100644 index e049ba7b8..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/zoom/AreaTracker.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * @(#)AreaTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.zoom; - -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.standard.AbstractTool; - -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * A rubberband area tracker. It can be extended to do anything with - * the resulting area, e.g. select it or zoom it. This code is - * derived from SelectAreaTracker, which is a bit too specific to - * allow for extension. - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public abstract class AreaTracker extends AbstractTool { - - private Rectangle area; - - protected AreaTracker(DrawingEditor editor) { - super(editor); - } - - public Rectangle getArea() { - return new Rectangle(area.x, area.y, area.width, area.height); - } - - public void mouseDown(MouseEvent e, int x, int y) { - // use event coordinates to supress any kind of - // transformations like constraining points to a grid - super.mouseDown(e, e.getX(), e.getY()); - rubberBand(getAnchorX(), getAnchorY(), getAnchorX(), getAnchorY()); - } - - public void mouseDrag(MouseEvent e, int x, int y) { - super.mouseDrag(e, x, y); - eraseRubberBand(); - rubberBand(getAnchorX(), getAnchorY(), x, y); - } - - public void mouseUp(MouseEvent e, int x, int y) { - super.mouseUp(e, x, y); - eraseRubberBand(); - } - - private void rubberBand(int x1, int y1, int x2, int y2) { - area = new Rectangle(new Point(x1, y1)); - area.add(new Point(x2, y2)); - drawXORRect(area); - } - - private void eraseRubberBand() { - drawXORRect(area); - } - - private void drawXORRect(Rectangle r) { - Graphics g = view().getGraphics(); - g.setXORMode(view().getBackground()); - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/zoom/DoubleBufferImage.java b/JHotDraw/src/CH/ifa/draw/contrib/zoom/DoubleBufferImage.java deleted file mode 100644 index 887178c80..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/zoom/DoubleBufferImage.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * @(#)DoubleBufferImage.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.zoom; - -import java.awt.*; -import java.awt.image.ImageObserver; -import java.awt.image.ImageProducer; - -/** - * A DoubleBufferImage is an image that scaling components, such as a - * ZoomDrawingView, use for double buffering. Drawing into this image - * is scaled, but when the image is written to the screen, no more - * scaling occurs. This is ensured by the implementation here and - * by the corresponding drawImage methods in ScalingGraphics. - * - * Note: this class is only needed for a JDK1.1 compliant implementation - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class DoubleBufferImage extends java.awt.Image { - - private Image real; - private double scale; - - public DoubleBufferImage(Image newReal, double newScale) { - real = newReal; - scale = newScale; - } - - public Image getRealImage() { - return real; - } - - public void flush() { - real.flush(); - } - - public Graphics getGraphics() { - // Return an appropriate scaling graphics context, - // so that all drawing operations into this image - // are scaled. - ScalingGraphics result = new ScalingGraphics(real.getGraphics()); - result.setScale(scale); - return result; - } - - public int getHeight(ImageObserver observer) { - return real.getHeight(observer); - } - - public Object getProperty(String name, ImageObserver observer) { - return real.getProperty(name, observer); - } - - public Image getScaledInstance(int width, int height, int hints) { - return real.getScaledInstance(width, height, hints); - } - - public ImageProducer getSource() { - return real.getSource(); - } - - public int getWidth(ImageObserver observer) { - return real.getWidth(observer); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/zoom/MiniMapZoomableView.java b/JHotDraw/src/CH/ifa/draw/contrib/zoom/MiniMapZoomableView.java deleted file mode 100644 index 0853bfa72..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/zoom/MiniMapZoomableView.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @(#)MiniMapZoomableView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.zoom; - -import CH.ifa.draw.contrib.MiniMapView; -import CH.ifa.draw.framework.DrawingView; - -import java.awt.geom.AffineTransform; -import java.awt.geom.NoninvertibleTransformException; -import javax.swing.JScrollPane; - -/** - * Specialized sub-class of MiniMapView to handle the zooming ability of the ZoomDrawingView in JHotDraw. This subclass has been enhanced - * to take into consideration that the scrollpane's content may itself be altered by a transform (namely a scaling transform). - * - * @author S. Ruman (sruman@rogers.com) - * @version <$CURRENT_VERSION$> - */ -public class MiniMapZoomableView extends MiniMapView { - public MiniMapZoomableView(DrawingView newMappedDrawingView, JScrollPane subject) { - super(newMappedDrawingView, subject); - } - -// Overridden - public AffineTransform getInverseSubjectTransform() { - double subjectsScale = ((ZoomDrawingView)getMappedComponent()).getScale(); - - AffineTransform at = null; - try { - at = AffineTransform.getScaleInstance(subjectsScale, subjectsScale).createInverse(); // undo the zoom of the zoomable drawing view - } - catch (NoninvertibleTransformException nte) { - // all scale-only transforms should be invertable - } - - return at; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ScalingGraphics.java b/JHotDraw/src/CH/ifa/draw/contrib/zoom/ScalingGraphics.java deleted file mode 100644 index 93215c5ca..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ScalingGraphics.java +++ /dev/null @@ -1,430 +0,0 @@ -/* - * @(#)ScalingGraphics.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.zoom; - -import java.awt.*; -import java.awt.image.ImageObserver; - -/** - * A graphics context that can scale to an arbitrary factor. - * - * Note: this class is only needed for a JDK1.1 compliant implementation - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ScalingGraphics extends java.awt.Graphics { - - /** - * The scale used for all drawing operations. - */ - private double scale = 1.0; - - /** - * The actual graphics context to which drawing is delegated. - */ - private Graphics real; - - /** - * The font with which the user thinks he is drawing. - * On the real graphics context, a scaled font is substituted - * for it (which may or may not be precisely to scale). - */ - private Font userFont; - - /** - * The current clipping rectangle, in user coordinates. - * Cached here to avoid unnecessary scaling back and forth. - */ - private Rectangle userClip; - - - public ScalingGraphics(Graphics realGraphics) { - real = realGraphics; - } - - /** - * Sets the scale to be used for any subsequent drawing operations. - * All coordinates are multiplied by this value in both x- and - * y-direction before drawing. Thus, a value of 1.0 means no - * scaling, smaller values shrink the picture, larger ones enlarge - * it. - */ - public void setScale(double newScale) { - scale = newScale; - } - - /** - * Returns the scale factor currently used for drawing operations. - * @see #setScale - */ - public double getScale() { - return scale; - } - - /** - * Returns the font that should be substituted for the - * given font at the given scale. - */ - private static Font scaledFont(Font f, double scale) { - int size = f.getSize(); - int scaledSize = (int) (size * scale); - //if (scaledSize < 6) scaledSize = 6; - return new Font(f.getFamily(), f.getStyle(), scaledSize); - } - - /** - * Scales a shape to the given scale. - */ - private static Shape scaledShape(Shape s, double scale) { - if (s instanceof Rectangle) { - Rectangle r = (Rectangle) s; - return new Rectangle((int) (r.x * scale), (int) (r.y * scale), - (int) (r.width * scale), (int) (r.height * scale)); - } - else { - throw new RuntimeException("Cannot scale shape: " + s.getClass().getName()); - } - } - - // delegating implementations below this line - - public Graphics create() { - Graphics realCopy = real.create(); - ScalingGraphics result = new ScalingGraphics(realCopy); - result.setScale(getScale()); - return result; - } - - public void translate(int x, int y) { - real.translate((int) (x * scale), (int) (y * scale)); - } - - public Color getColor() { - return real.getColor(); - } - - public void setColor(Color c) { - real.setColor(c); - } - - public void setPaintMode() { - real.setPaintMode(); - } - - public void setXORMode(Color c1) { - real.setXORMode(c1); - } - - public Font getFont() { - // returns the font with which the user thinks he is drawing - if (userFont == null) - userFont = real.getFont(); - return userFont; - } - - public void setFont(Font font) { - userFont = font; - real.setFont(scaledFont(font, scale)); - } - - public FontMetrics getFontMetrics() { - return new ScalingFontMetrics(userFont, real.getFontMetrics()); - } - - public FontMetrics getFontMetrics(Font f) { - // returns a ScalingFontMetrics object that measures distances - // on the real font, and scales them back to user coordinates - return new ScalingFontMetrics(f, - real.getFontMetrics(scaledFont(f, scale))); - } - - public Rectangle getClipBounds() { - return userClip; - } - - public void clipRect(int x, int y, int width, int height) { - if (userClip == null) - userClip = new Rectangle(x, y, width, height); - else - userClip = userClip.intersection(new Rectangle(x, y, width, height)); - real.clipRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void setClip(int x, int y, int width, int height) { - userClip = new Rectangle(x, y, width, height); - real.setClip((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public Shape getClip() { - return userClip; - } - - public void setClip(Shape clip) { - userClip = (Rectangle) clip; - if (clip != null) - // Scale the Shape before applying it. - real.setClip(scaledShape(clip, scale)); - else - real.setClip(null); - } - - public void copyArea(int x, int y, int width, int height, - int dx, int dy) { - real.copyArea((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - (int) (dx * scale), (int) (dy * scale)); - } - - public void drawLine(int x1, int y1, int x2, int y2) { - real.drawLine((int) (x1 * scale), (int) (y1 * scale), - (int) (x2 * scale), (int) (y2 * scale)); - } - - public void fillRect(int x, int y, int width, int height) { - real.fillRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void clearRect(int x, int y, int width, int height) { - real.clearRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void drawRoundRect(int x, int y, int width, int height, - int arcWidth, int arcHeight) { - real.drawRoundRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - (int) (arcWidth * scale), (int) (arcHeight * scale)); - } - - public void fillRoundRect(int x, int y, int width, int height, - int arcWidth, int arcHeight) { - real.fillRoundRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - (int) (arcWidth * scale), (int) (arcHeight * scale)); - } - - public void drawOval(int x, int y, int width, int height) { - real.drawOval((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void fillOval(int x, int y, int width, int height) { - real.fillOval((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void drawArc(int x, int y, int width, int height, - int startAngle, int arcAngle) { - real.drawArc((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - startAngle, arcAngle); - } - - public void fillArc(int x, int y, int width, int height, - int startAngle, int arcAngle) { - real.fillArc((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - startAngle, arcAngle); - } - - public void drawPolyline(int xPoints[], int yPoints[], - int nPoints) { - int[] realXPoints = new int[nPoints]; - int[] realYPoints = new int[nPoints]; - for (int i = 0; i < nPoints; i++) { - realXPoints[i] = (int) (xPoints[i] * scale); - realYPoints[i] = (int) (yPoints[i] * scale); - } - real.drawPolyline(realXPoints, realYPoints, nPoints); - } - - public void drawPolygon(int xPoints[], int yPoints[], - int nPoints) { - int[] realXPoints = new int[nPoints]; - int[] realYPoints = new int[nPoints]; - for (int i = 0; i < nPoints; i++) { - realXPoints[i] = (int) (xPoints[i] * scale); - realYPoints[i] = (int) (yPoints[i] * scale); - } - real.drawPolygon(realXPoints, realYPoints, nPoints); - } - - public void fillPolygon(int xPoints[], int yPoints[], - int nPoints) { - int[] realXPoints = new int[nPoints]; - int[] realYPoints = new int[nPoints]; - for (int i = 0; i < nPoints; i++) { - realXPoints[i] = (int) (xPoints[i] * scale); - realYPoints[i] = (int) (yPoints[i] * scale); - } - real.fillPolygon(realXPoints, realYPoints, nPoints); - } - - public void drawString(String str, int x, int y) { - real.drawString(str, (int) (x * scale), (int) (y * scale)); - } - - // drop this method if using jdk 1.1 - public void drawString(java.text.AttributedCharacterIterator iterator, - int x, int y) { - real.drawString(iterator, (int) (x * scale), (int) (y * scale)); - } - - public boolean drawImage(Image img, int x, int y, - ImageObserver observer) { - // DoubleBufferImages must not be scaled. - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - x, y, observer); - else - return real.drawImage(img, (int) (x * scale), (int) (y * scale), - (int) (img.getWidth(observer) * scale), - (int) (img.getHeight(observer) * scale), - observer); - } - - public boolean drawImage(Image img, int x, int y, - int width, int height, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - x, y, width, height, observer); - else - return real.drawImage(img, (int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - observer); - } - - public boolean drawImage(Image img, int x, int y, - Color bgcolor, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - x, y, bgcolor, observer); - else - return real.drawImage(img, (int) (x * scale), (int) (y * scale), - (int) (img.getWidth(observer) * scale), - (int) (img.getHeight(observer) * scale), - bgcolor, observer); - } - - public boolean drawImage(Image img, int x, int y, - int width, int height, - Color bgcolor, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - x, y, width, height, bgcolor, observer); - else - return real.drawImage(img, (int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - bgcolor, observer); - } - - public boolean drawImage(Image img, - int dx1, int dy1, int dx2, int dy2, - int sx1, int sy1, int sx2, int sy2, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, - observer); - else - return real.drawImage(img, (int) (dx1 * scale), (int) (dy1 * scale), - (int) (dx2 * scale), (int) (dy2 * scale), - (int) (sx1 * scale), (int) (sy1 * scale), - (int) (sx2 * scale), (int) (sy2 * scale), - observer); - } - - public boolean drawImage(Image img, - int dx1, int dy1, int dx2, int dy2, - int sx1, int sy1, int sx2, int sy2, - Color bgcolor, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, - bgcolor, observer); - else - return real.drawImage(img, (int) (dx1 * scale), (int) (dy1 * scale), - (int) (dx2 * scale), (int) (dy2 * scale), - (int) (sx1 * scale), (int) (sy1 * scale), - (int) (sx2 * scale), (int) (sy2 * scale), - bgcolor, observer); - } - - public void dispose() { - real.dispose(); - } - - /** - * A scaling extension of the FontMetrics class. Measurements - * are performed on the actual, scaled font used on the screen, - * and then scaled back into user space. The object pretends - * to be measuring the font specified by the user when obtaining - * this FontMetrics object. - */ - private class ScalingFontMetrics extends FontMetrics { - - /** - * A FontMetrics object on the real, scaled font. All queries - * are forwarded to this object, and the results scaled back - * into user space. - */ - private FontMetrics real; - - /** - * The font which the user thinks he is asking about. - */ - private Font userFont; - - public ScalingFontMetrics(Font newUserFont, FontMetrics newReal) { - super(null); - userFont = newUserFont; - real = newReal; - } - - // Delegating methods below this line. Only those methods which - // the man page suggests as a minimal subset are implemented. - - public Font getFont() { - return userFont; - } - - public int getAscent() { - return (int) (real.getAscent() / ScalingGraphics.this.getScale()); - } - - public int getLeading() { - return (int) (real.getLeading() / ScalingGraphics.this.getScale()); - } - - public int getMaxAdvance() { - return (int) (real.getMaxAdvance() / ScalingGraphics.this.getScale()); - } - - public int charWidth(char ch) { - return (int) (real.charWidth(ch) / ScalingGraphics.this.getScale()); - } - - public int charsWidth(char[] data, int off, int len) { - return (int) (real.charsWidth(data, off, len) / - ScalingGraphics.this.getScale()); - } - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomAreaTracker.java b/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomAreaTracker.java deleted file mode 100644 index e4ec88f3a..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomAreaTracker.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)ZoomAreaTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.zoom; - -import CH.ifa.draw.framework.DrawingEditor; - -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ZoomAreaTracker extends AreaTracker { - - public ZoomAreaTracker(DrawingEditor editor) { - super(editor); - } - - public void mouseUp(MouseEvent e, int x, int y) { - Rectangle zoomArea = getArea(); - super.mouseUp(e, x, y); - if (zoomArea.width > 4 && zoomArea.height > 4) - ((ZoomDrawingView) view()).zoom(zoomArea.x, zoomArea.y, - zoomArea.width, zoomArea.height); - } - -} - - diff --git a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomCommand.java b/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomCommand.java deleted file mode 100644 index 81186e740..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomCommand.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * @(#)ZoomCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.contrib.zoom; - -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.framework.JHotDrawRuntimeException; - -import CH.ifa.draw.standard.AbstractCommand; - -/** - * A ZoomCommand allows for applying a zoom factor to a ZoomDrawingView.<br> - * Several ZoomCommand objects can be created in a menu or toolbar, set to various - * predefined zoom factors - * - * @author Eduardo Francos - * @created 26 april 2002 - * @version <CURRENT_VERSION> - */ -public class ZoomCommand extends AbstractCommand { - /** The scale factor to apply */ - protected float scale = 1.0f; - - /** - * Constructor for the ZoomCommand object - * - * @param name the command name - * @param scale Description of the Parameter - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public ZoomCommand(String newSame, float newScale, DrawingEditor newDrawingEditor) { - super(newSame, newDrawingEditor, true); - scale = newScale; - } - - - /** Executes the command */ - public void execute() { - super.execute(); - zoomView().zoom(scale); - } - - - /** - * Sets the zoom factor of the view - * - * @return ZoomDrawingView currently active in the editor - */ - public ZoomDrawingView zoomView() { - Object view = super.view(); - if (view instanceof ZoomDrawingView) { - return (ZoomDrawingView)view; - } - throw new JHotDrawRuntimeException("execute should NOT be getting called when view not instanceof ZoomDrawingView"); - } - - - /** - * Gets the scale attribute of the ZoomCommand object - * - * @return The scale value - */ - public float getScale() { - return scale; - } - - - /** - * Sets the scale attribute of the ZoomCommand object - * - * @param newScale The new scale value - */ - public void setScale(float newScale) { - scale = newScale; - } - - - /** - * Returns true if the command is executable with the current view - * - * @return true iff the view is a ZoomDrawingView - */ - protected boolean isExecutableWithView() { - return (view() instanceof ZoomDrawingView); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomDrawingView.java b/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomDrawingView.java deleted file mode 100644 index 66b0ccfa6..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomDrawingView.java +++ /dev/null @@ -1,476 +0,0 @@ -/* - * @(#)ZoomDrawingView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.zoom; - -import CH.ifa.draw.framework.Drawing; -import CH.ifa.draw.framework.DrawingChangeEvent; -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.standard.StandardDrawing; -import CH.ifa.draw.standard.StandardDrawingView; -import CH.ifa.draw.util.Geom; - -import javax.swing.JViewport; -import java.awt.*; -import java.awt.event.*; -import java.awt.geom.AffineTransform; - -/** - * A view that can display drawings at an arbitrary scale. - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ZoomDrawingView extends StandardDrawingView { - - /** - * The current scaling factor - */ - private double scale = 1.0; - - /** - * The zooming speed, meaning the scaling factor change speed when doing - * zoomIn/zoomOut operations.<br> - * Default of 2.0 is increase 100% or decrease 50% the current factor.<br> - * Can be changed dynamically by clients using the setter method - */ - private double zoomSpeed = 2.0; - - public ZoomDrawingView(DrawingEditor editor) { - this(editor, MINIMUM_WIDTH, MINIMUM_HEIGHT); - } - - public ZoomDrawingView(DrawingEditor editor, int width, int height) { - super(editor, width, height); - } - - /** - * @return The current zoom scale of this view. The dimensions of - * figures are multiplied by this number before display. - */ - public final double getScale() { - return scale; - } - - /** - * Sets a new zoom scale for this view. The dimensions of figures - * are multiplied by this number before display. - */ - private void setScale(double newScale) { - // "de"-scale with old scale - Dimension oldSize = getUserSize(); - scale = newScale; - // re-scale with new scale - setUserSize(oldSize.width, oldSize.height); - centralize(drawing()); - forceRedraw(); - } - - private void forceRedraw() { - drawingInvalidated(new DrawingChangeEvent - (drawing(), new Rectangle(getSize()))); - repairDamage(); - } - - /** - * Sets the size of this view in user coordinates. The size of the view - * on the screen will be this size, multiplied by the current scale. - */ - public void setUserSize(int width, int height) { - setSize((int) (width * getScale()), - (int) (height * getScale())); - } - - /** - * Sets the size of this view in user coordinates. The size of the view - * on the screen will be this size, multiplied by the current scale. - */ - public void setUserSize(Dimension d) { - setUserSize(d.width, d.height); - } - - /** - * @return the size of this view, in screen coordinates - */ - public Dimension getSize() { - return super.getSize(); - } - - public Dimension getViewportSize() { - return getParent().getSize(); - } - - protected boolean hasZoomSupport() { - return getParent() instanceof JViewport; - } - - /** - * Sets the coordinates of the left top corner displayed by the view.<br> - */ - public void setOriginPosition(Point newOrigin) { - setViewPosition(newOrigin); - forceRedraw(); - } - - protected void setViewPosition(Point newPosition) { - ((JViewport)getParent()).setViewPosition(newPosition); - } - - /** - * @return The size of this view, in user coordinates. The size - * on the screen is this size, multiplied by the current scale. - */ - public Dimension getUserSize() { - Dimension screenSize = getSize(); - return new Dimension((int) (screenSize.width / getScale()), - (int) (screenSize.height / getScale())); - } - - /** - * Readjusts this view and its containing ScrollPane to display the - * given rectangle, which is given in user coordinates. This method - * only works if this view is contained in a JViewport. It throws - * a RuntimeException otherwise. - */ - public void zoom(int x, int y, int width, int height) { - if (hasZoomSupport()) { - Dimension viewportSize = getViewportSize(); - double xScale = (double) viewportSize.width / (double) width; - double yScale = (double) viewportSize.height / (double) height; - double newScale = Math.min(xScale, yScale); - - // "de"-scale with old scale - Dimension userSize = getUserSize(); - this.scale = newScale; - // re-scale with new scale - setUserSize(userSize); - - revalidate(); - setViewPosition( - new Point((int) (x * getScale()), (int) (y * getScale()))); - forceRedraw(); - } - else { - throw new RuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - /** - * Set this view's scale factor - */ - public void zoom(float newScale) { - if (hasZoomSupport()) { - JViewport viewport = (JViewport) getParent(); - Dimension viewportSize = viewport.getSize(); - Dimension userSize = getUserSize(); - scale = newScale; - Point viewOrg = viewport.getViewPosition(); - viewOrg.x = viewOrg.x + (viewportSize.width / 2); - viewOrg.y = viewOrg.y + (viewportSize.height / 2); - int xScreen = (int) (viewOrg.x * scale); - int yScreen = (int) (viewOrg.y * scale); - int xOrigin = xScreen - viewportSize.width / 2; - int yOrigin = yScreen - viewportSize.height / 2; - if (xOrigin < 0) xOrigin = 0; - if (yOrigin < 0) yOrigin = 0; - setUserSize(userSize); - revalidate(); - viewport.setViewPosition(new Point(xOrigin, yOrigin)); - forceRedraw(); - } - else { - throw new RuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - /** - * Zooms out by a factor of two, keeping point (x,y), which is given - * in user coordinates, in the center. - */ - public void zoomOut(int x, int y) { - if (hasZoomSupport()) { - Dimension viewportSize = getViewportSize(); - // "de"-scale with old scale - Dimension userSize = getUserSize(); - this.scale = getScale() / getZoomSpeed(); - int xScreen = (int) (x * getScale()); - int yScreen = (int) (y * getScale()); - int xOrigin = xScreen - viewportSize.width / 2; - int yOrigin = yScreen - viewportSize.height / 2; - if (xOrigin < 0) xOrigin = 0; - if (yOrigin < 0) yOrigin = 0; - // re-scale with new scale - setUserSize(userSize); - revalidate(); - setViewPosition(new Point(xOrigin, yOrigin)); - forceRedraw(); - } - else { - throw new RuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - /** - * InContext - * Zooms in by a factor of the current scale, keeping point (x,y), which is given - * in user coordinates, in the center. - */ - public void zoomIn(int x, int y) { - if (hasZoomSupport()) { - JViewport viewport = (JViewport) getParent(); - Dimension viewportSize = viewport.getSize(); - Dimension userSize = getUserSize(); - this.scale = getScale() * getZoomSpeed(); - int xScreen = (int) (x * getScale()); - int yScreen = (int) (y * getScale()); - int xOrigin = xScreen - viewportSize.width / 2; - int yOrigin = yScreen - viewportSize.height / 2; - if (xOrigin < 0) xOrigin = 0; - if (yOrigin < 0) yOrigin = 0; - setUserSize(userSize); - revalidate(); - viewport.setViewPosition(new Point(xOrigin, yOrigin)); - forceRedraw(); - } - else { - throw new RuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - /** - * Sets the zoom scale to 1.0 and adjusts the scroll pane - * so that point (x, y) is in the center. - */ - public void deZoom(int x, int y) { - if (hasZoomSupport()) { - Dimension viewportSize = getViewportSize(); - Dimension userSize = getUserSize(); - int xOrigin = x - viewportSize.width / 2; - int yOrigin = y - viewportSize.height / 2; - if (xOrigin < 0) xOrigin = 0; - if (yOrigin < 0) yOrigin = 0; - this.scale = 1.0; - setUserSize(userSize); - revalidate(); - setViewPosition(new Point((int) (xOrigin), - (int) (yOrigin))); - forceRedraw(); - } - else { - throw new RuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - public void paint(Graphics g) { - super.paint(transformGraphics(g, getScale())); - } - - public Graphics getGraphics() { - return transformGraphics(super.getGraphics(), getScale()); - } - - private final Graphics transformGraphics(Graphics g, double currentScale) { - if (currentScale != 1.0) { - Graphics2D g2 = (Graphics2D) g; - // Don't use setTransform() here because that would destroy - // any transformation that Swing sets for partial redrawing. - // Simply add our own transformation to any existing one. - g2.transform(AffineTransform.getScaleInstance(currentScale, currentScale)); - } - return g; - } - - /** - * Constrain to user coordinates, not screen coordinates. - */ - protected Point constrainPoint(Point p) { - Dimension size = getSize(); - p.x = Geom.range(1, (int) (size.width / getScale()), p.x); - p.y = Geom.range(1, (int) (size.height / getScale()), p.y); - if (getConstrainer() != null) { - return getConstrainer().constrainPoint(p); - } - return p; - } - - public void drawBackground(Graphics g) { - g.setColor(getBackground()); - g.fillRect(0, 0, - (int) (getBounds().width / getScale()), - (int) (getBounds().height / getScale())); - } - - private void centralize(Drawing d, Dimension bounds) { - Point boundsCenter = new Point(bounds.width / 2, bounds.height / 2); - Rectangle r = ((StandardDrawing) d).displayBox(); - Point drawingCenter = new Point(r.x + r.width / 2, r.y + r.height / 2); - int diffX = boundsCenter.x - drawingCenter.x; - int diffY = boundsCenter.y - drawingCenter.y; - if (diffX != 0 || diffY != 0) { - for (FigureEnumeration fe = d.figures(); fe.hasNextFigure();) { - fe.nextFigure().moveBy(diffX, diffY); - } - } - } - - private void centralize(Drawing d) { - centralize(d, getUserSize()); - } - - public void setDrawing(Drawing d) { - super.setDrawing(d); - - Rectangle r = ((StandardDrawing) d).displayBox(); - //Dimension drawingSize = new Dimension(r.width, r.height); - Dimension viewportSize = new Dimension(r.width, r.height); - if (getParent() != null) { - viewportSize = getViewportSize(); - } -/* - Dimension userSize = new Dimension(viewportSize); - this.scale = 1.0; - - while (drawingSize.width > userSize.width || - drawingSize.height > userSize.height) { - this.scale = getScale() / 2.0; - userSize.width = userSize.width * 2; - userSize.height = userSize.height * 2; - } - centralize(d, userSize); -*/ - super.setPreferredSize(viewportSize); - super.setSize(viewportSize); - revalidate(); - } - - public Dimension getMinimumSize() { - return super.getSize(); - } - - public Dimension getPreferredSize() { - return getMinimumSize(); - } - - /** - * Overridden to scale damage to screen coordinates. - */ - public void repairDamage() { - Rectangle damagedArea = getDamage(); - if (damagedArea != null) { - repaint((int) (damagedArea.x * getScale()), - (int) (damagedArea.y * getScale()), - (int) (damagedArea.width * getScale()), - (int) (damagedArea.height * getScale())); - setDamage(null); - } - } - - /** - * Overridden to accumulate damage in an instance variable of this class. - */ - public void drawingInvalidated(DrawingChangeEvent e) { - Rectangle r = e.getInvalidatedRectangle(); - if (getDamage() == null) { - setDamage(r); - } - else { - Rectangle damagedArea = getDamage(); - damagedArea.add(r); - // the returned rectange may be a clone so we better set it again - setDamage(damagedArea); - } - } - - /** - * @return a new MouseEvent, the coordinates of which are transformed - * to compensate for the current zoom factor - */ - private MouseEvent createScaledEvent(MouseEvent e) { - return new MouseEvent(e.getComponent(), - e.getID(), - e.getWhen(), - e.getModifiers(), - (int) (e.getX() / getScale()), - (int) (e.getY() / getScale()), - e.getClickCount(), - e.isPopupTrigger()); - } - - - protected MouseListener createMouseListener() { - return new StandardDrawingView.DrawingViewMouseListener() { - public void mousePressed(MouseEvent e) { - super.mousePressed(createScaledEvent(e)); - } - public void mouseReleased(MouseEvent e) { - super.mouseReleased(createScaledEvent(e)); - } - }; - } - - protected MouseMotionListener createMouseMotionListener() { - return new StandardDrawingView.DrawingViewMouseMotionListener() { - public void mouseDragged(MouseEvent e) { - super.mouseDragged(createScaledEvent(e)); - } - public void mouseMoved(MouseEvent e) { - super.mouseMoved(createScaledEvent(e)); - } - }; - } - - protected KeyListener createKeyListener() { - return new StandardDrawingView.DrawingViewKeyListener() { - public void keyPressed(KeyEvent e) { - super.keyPressed(e); - if (e.getKeyChar() == ' ') { - forceRedraw(); - } - else if (e.getKeyChar() == 'o') { - setScale(getScale() / getZoomSpeed()); - } - else if (e.getKeyChar() == 'i') { - setScale(getScale() * getZoomSpeed()); - } - else if (e.getKeyChar() == 'c') { - centralize(drawing()); - } - else { - super.keyPressed(e); - } - } - }; - } - - /** - * Returns the current zoom speed - */ - public double getZoomSpeed() - { - return zoomSpeed; - } - - /** - * Set the zoom speed. Will be greater than 1. - */ - public void setZoomSpeed(double newZoomSpeed) - { - // check greater than 1. A smaller value would reverse the zooming - // operation, and a zero value would provoque divide by zero exceptions - zoomSpeed = Math.max(1.1, newZoomSpeed); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomTool.java b/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomTool.java deleted file mode 100644 index 2afca768b..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomTool.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * @(#)ZoomTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.zoom; - -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.framework.Tool; -import CH.ifa.draw.standard.AbstractTool; - -import java.awt.event.InputEvent; -import java.awt.event.MouseEvent; - -/** - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ZoomTool extends AbstractTool { - - private Tool child; - - public ZoomTool(DrawingEditor editor) { - super(editor); - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - // Added handling for SHIFTed and CTRLed BUTTON3_MASK so that normal - // BUTTON3_MASK does zoomOut, SHIFTed BUTTON3_MASK does zoomIn - // and CTRLed BUTTON3_MASK does deZoom - if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) { - if (child != null) { - return; - } - view().freezeView(); - child = new ZoomAreaTracker(editor()); - child.mouseDown(e, x, y); - } - else if ((e.getModifiers() & InputEvent.BUTTON2_MASK) != 0) { - ((ZoomDrawingView) view()).deZoom(x, y); - } - else if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) { - if ((e.getModifiers() & InputEvent.SHIFT_MASK) != 0) { - ((ZoomDrawingView)view()).zoomIn(x, y); - } - else if ((e.getModifiers() & InputEvent.CTRL_MASK) != 0) { - - ((ZoomDrawingView) view()).deZoom(x, y); - } - else { - ((ZoomDrawingView)view()).zoomOut(x, y); - } - } - } - - public void mouseDrag(MouseEvent e, int x, int y) { - if (child != null) { - child.mouseDrag(e, x, y); - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - if (child != null) { - view().unfreezeView(); - child.mouseUp(e, x, y); - } - child = null; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomUpdateStrategy.java b/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomUpdateStrategy.java deleted file mode 100644 index b1a8a40e3..000000000 --- a/JHotDraw/src/CH/ifa/draw/contrib/zoom/ZoomUpdateStrategy.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * @(#)ZoomUpdateStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.contrib.zoom; - -import CH.ifa.draw.framework.DrawingView; -import CH.ifa.draw.framework.Painter; - -import java.awt.*; - -/** - * A variant of the BufferedUpdateStrategy that handles clipping - * rectangles correctly in the presence of zooming. - * @see CH.ifa.draw.standard.BufferedUpdateStrategy - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ZoomUpdateStrategy implements Painter { - - /** - * The offscreen image - */ - transient private Image fOffscreen; - private int fImagewidth = -1; - private int fImageheight = -1; - - /** - * Draws the view contents. - */ - public void draw(Graphics g, DrawingView view) { - // create the buffer if necessary - Dimension d = view.getSize(); - if ((fOffscreen == null) || (d.width != fImagewidth) - || (d.height != fImageheight)) { - fOffscreen = view.createImage(d.width, d.height); - fImagewidth = d.width; - fImageheight = d.height; - } - - Graphics g2 = fOffscreen.getGraphics(); - Rectangle r = g.getClipBounds(); - - if (g2 instanceof ScalingGraphics) { - ScalingGraphics s2 = (ScalingGraphics) g2; - - // AWT sets clipping rectangles in screen coordinates, not user - // coordinates. Therefore, we scale the clipping rectangle to - // user coordinates here, and then apply it to both buffers, - // which scale it back to screen coordinates. - if (r != null) { - // Make the rectangle slightly larger, to compensate - // for integer rounding errors. - r = new Rectangle((int) ((r.x - 2) / s2.getScale()), - (int) ((r.y - 2) / s2.getScale()), - (int) ((r.width + 4) / s2.getScale()), - (int) ((r.height + 4) / s2.getScale())); - g.setClip(r); - } - } - g2.setClip(r); - - view.drawAll(g2); - g.drawImage(fOffscreen, 0, 0, view); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures.jdo b/JHotDraw/src/CH/ifa/draw/figures.jdo deleted file mode 100644 index 340c305bc..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures.jdo +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="CH.ifa.draw.figures"> - <class name="AttributeFigure"> - </class> - <class name="ArrowTip"> - </class> - <class name="ChopEllipseConnector"> - </class> - <class name="ElbowConnection"> - </class> - <class name="EllipseFigure"> - <field name="fDisplayBox"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - <field name="fPoints"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="FigureAttributes"> - <field name="fMap"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="GroupFigure"> - </class> - <class name="ImageFigure"> - </class> - <class name="LineFigure"> - </class> - <class name="NullConnector"> - </class> - <class name="NullFigure"> - </class> - <class name="NumberTextFigure"> - </class> - <class name="PolyLineConnector"> - </class> - <class name="PolyLineFigure"> - <field name="fFrameColor"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="ShortestDistanceConnector"> - </class> - <class name="RectangleFigure"> - <field name="fDisplayBox"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="RoundRectangleFigure"> - </class> - <class name="TextFigure"> - <field name="fFont"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - </package> -</jdo> diff --git a/JHotDraw/src/CH/ifa/draw/figures/AbstractLineDecoration.java b/JHotDraw/src/CH/ifa/draw/figures/AbstractLineDecoration.java deleted file mode 100644 index 3e50d5f65..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/AbstractLineDecoration.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * @(#)AbstractLineDecoration.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.io.*; -import java.awt.*; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; - -/** - * An standard implementation of a line decoration. - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractLineDecoration implements LineDecoration { - - static final long serialVersionUID = 1577970039258356627L; - - private Color fFillColor; - private Color fBorderColor; - private transient Rectangle myBounds; - - public AbstractLineDecoration() { - } - - /** - * Draws the arrow tip in the direction specified by the given two - * points.. (template method) - */ - public void draw(Graphics g, int x1, int y1, int x2, int y2) { - // TBD: reuse the Polygon object - Polygon p = outline(x1, y1, x2, y2); - myBounds = p.getBounds(); - if (getFillColor() == null) { - g.fillPolygon(p.xpoints, p.ypoints, p.npoints); - } - else { - Color drawColor = g.getColor(); - g.setColor(getFillColor()); - g.fillPolygon(p.xpoints, p.ypoints, p.npoints); - g.setColor(drawColor); - } - - if (getBorderColor() != getFillColor()) { - Color drawColor = g.getColor(); - g.setColor(getBorderColor()); - g.drawPolygon(p.xpoints, p.ypoints, p.npoints); - g.setColor(drawColor); - } - } - - /** - * The LineDecoration has only a displayBox after it has been drawn - * at least once. If it has not yet been drawn then a rectangle of size 0 - * is returned. - * @return the display box of a LineDecoration. - */ - public Rectangle displayBox() { - if (myBounds != null) { - return myBounds; - } - else { - return new Rectangle(0, 0); - } - } - - /** - * Hook method to calculates the outline of an arrow tip. - */ - public abstract Polygon outline(int x1, int y1, int x2, int y2); - - /** - * Stores the arrow tip to a StorableOutput. - */ - public void write(StorableOutput dw) { - if (getFillColor() != null) { - FigureAttributes.writeColor(dw, FigureAttributeConstant.FILL_COLOR.getName(), getFillColor()); - } - else { - dw.writeString("no" + FigureAttributeConstant.FILL_COLOR.getName()); - } - - if (getBorderColor() != null) { - FigureAttributes.writeColor(dw, FigureAttributeConstant.FRAME_COLOR.getName(), getBorderColor()); - } - else { - dw.writeString("no" + FigureAttributeConstant.FRAME_COLOR.getName()); - } - } - - /** - * Reads the arrow tip from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - String fillColorId = dr.readString(); - // read color only if one has been written - if (fillColorId.equals(FigureAttributeConstant.FRAME_COLOR.getName())) { - setFillColor(FigureAttributes.readColor(dr)); - } - String borderColorId = dr.readString(); - // read color only if one has been written - if (borderColorId.equals("BorderColor") - || borderColorId.equals(FigureAttributeConstant.FRAME_COLOR.getName())) { - setBorderColor(FigureAttributes.readColor(dr)); - } - } - - /** - * Sets color with which arrow is filled - */ - public void setFillColor(Color fillColor) { - fFillColor = fillColor; - } - - /** - * Returns color with which arrow is filled - */ - public Color getFillColor() { - return fFillColor; - } - - /** - * Sets color of arrow's border - */ - public void setBorderColor(Color borderColor) { - fBorderColor = borderColor; - } - - /** - * Returns color of arrow's border - */ - public Color getBorderColor() { - return fBorderColor; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/ArrowTip.java b/JHotDraw/src/CH/ifa/draw/figures/ArrowTip.java deleted file mode 100644 index a855314be..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/ArrowTip.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * @(#)ArrowTip.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.io.*; -import java.awt.*; - -import CH.ifa.draw.util.*; - -/** - * An arrow tip line decoration. - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public class ArrowTip extends AbstractLineDecoration { - - private double fAngle; // pointiness of arrow - private double fOuterRadius; - private double fInnerRadius; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -3459171428373823638L; - private int arrowTipSerializedDataVersion = 1; - - public ArrowTip() { - this(0.40, 8, 8); // this(0.35, 15, 12); - } - - /** - * Constructs an arrow tip with the given angle and radius. - */ - public ArrowTip(double angle, double outerRadius, double innerRadius) { - setAngle(angle); - setOuterRadius(outerRadius); - setInnerRadius(innerRadius); - } - - /** - * Calculates the outline of an arrow tip. - */ - public Polygon outline(int x1, int y1, int x2, int y2) { - double dir = Math.PI/2 - Math.atan2(x2 - x1, y2 - y1); - return outline(x1, y1, dir); - } - - private Polygon outline(int x, int y, double direction) { - Polygon shape = new Polygon(); - - shape.addPoint(x, y); - addPointRelative(shape, x, y, getOuterRadius(), direction - getAngle()); - addPointRelative(shape, x, y, getInnerRadius(), direction); - addPointRelative(shape, x, y, getOuterRadius(), direction + getAngle()); - shape.addPoint(x,y); // Closing the polygon (TEG 97-04-23) - return shape; - } - - private void addPointRelative(Polygon shape, int x, int y, double radius, double angle) { - shape.addPoint( - x + (int) (radius * Math.cos(angle)), - y + (int) (radius * Math.sin(angle))); - } - - /** - * Stores the arrow tip to a StorableOutput. - */ - public void write(StorableOutput dw) { - dw.writeDouble(getAngle()); - dw.writeDouble(getOuterRadius()); - dw.writeDouble(getInnerRadius()); - super.write(dw); - } - - /** - * Reads the arrow tip from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - setAngle(dr.readDouble()); - setOuterRadius(dr.readDouble()); - setInnerRadius(dr.readDouble()); - super.read(dr); - } - - /** - * Sets point angle of arrow. A smaller angle leads to a pointier arrow. - * The angle is measured between the arrow line and one of the points - * at the side of the arrow. Thus, the total angle at the arrow tip - * is the double of the angle specified. - */ - protected void setAngle(double newAngle) { - fAngle = newAngle; - } - - /** - * Returns point angle of arrow. A smaller angle leads to a pointier arrow. - * The angle is measured between the arrow line and one of the points - * at the side of the arrow. Thus, the total angle at the arrow tip - * is the double of the angle specified. - */ - protected double getAngle() { - return fAngle; - } - - /** - * Sets the inner radius - */ - protected void setInnerRadius(double newInnerRadius) { - fInnerRadius = newInnerRadius; - } - - /** - * Returns the inner radius - */ - protected double getInnerRadius() { - return fInnerRadius; - } - - /** - * Sets the outer radius - */ - protected void setOuterRadius(double newOuterRadius) { - fOuterRadius = newOuterRadius; - } - - /** - * Returns the outer radius - */ - protected double getOuterRadius() { - return fOuterRadius; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/AttributeFigure.java b/JHotDraw/src/CH/ifa/draw/figures/AttributeFigure.java deleted file mode 100644 index dbadb25f4..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/AttributeFigure.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * @(#)AttributeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; - -import java.awt.*; -import java.io.*; - -/** - * A figure that can keep track of an open ended set of attributes. - * The attributes are stored in a dictionary implemented by - * FigureAttributes. - * - * @see Figure - * @see Handle - * @see FigureAttributes - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AttributeFigure extends AbstractFigure { - - /** - * The attributes of a figure. Each figure can have - * an open ended set of attributes. Attributes are - * identified by name. - * @see #getAttribute - * @see #setAttribute - */ - private FigureAttributes fAttributes; - - /** - * The default attributes associated with a figure. - * If a figure doesn't have an attribute set, a default - * value from this shared attribute set is returned. - * @see #getAttribute - * @see #setAttribute - */ - private static FigureAttributes fgDefaultAttributes = null; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -10857585979273442L; - private int attributeFigureSerializedDataVersion = 1; - - protected AttributeFigure() { } - - /** - * Draws the figure in the given graphics. Draw is a template - * method calling drawBackground followed by drawFrame. - */ - public void draw(Graphics g) { - Color fill = getFillColor(); - if (!ColorMap.isTransparent(fill)) { - g.setColor(fill); - drawBackground(g); - } - Color frame = getFrameColor(); - if (!ColorMap.isTransparent(frame)) { - g.setColor(frame); - drawFrame(g); - } - } - - /** - * Draws the background of the figure. - * @see #draw - */ - protected void drawBackground(Graphics g) { - } - - /** - * Draws the frame of the figure. - * @see #draw - */ - protected void drawFrame(Graphics g) { - } - - /** - * Gets the fill color of a figure. This is a convenience - * method. - * @see #getAttribute - */ - public Color getFillColor() { - return (Color) getAttribute(FigureAttributeConstant.FILL_COLOR); - } - - /** - * Gets the frame color of a figure. This is a convenience - * method. - * @see #getAttribute - */ - public Color getFrameColor() { - return (Color) getAttribute(FigureAttributeConstant.FRAME_COLOR); - } - - //---- figure attributes ---------------------------------- - - private static void initializeAttributes() { - fgDefaultAttributes = new FigureAttributes(); - fgDefaultAttributes.set(FigureAttributeConstant.FRAME_COLOR, Color.black); - fgDefaultAttributes.set(FigureAttributeConstant.FILL_COLOR, new Color(0x70DB93)); - fgDefaultAttributes.set(FigureAttributeConstant.TEXT_COLOR, Color.black); - fgDefaultAttributes.set(FigureAttributeConstant.ARROW_MODE, new Integer(0)); - fgDefaultAttributes.set(FigureAttributeConstant.FONT_NAME, "Helvetica"); - fgDefaultAttributes.set(FigureAttributeConstant.FONT_SIZE, new Integer(12)); - fgDefaultAttributes.set(FigureAttributeConstant.FONT_STYLE, new Integer(Font.PLAIN)); - } - - /** - * Sets or adds a default value for a named attribute - * @see #getAttribute - */ - public static Object setDefaultAttribute(String name, Object value) { - // save current value to return it - Object currentValue = getDefaultAttribute(name); - - fgDefaultAttributes.set(FigureAttributeConstant.getConstant(name), value); - return currentValue; - } - - /** - * Initializes a default value for a named attribute - * The difference between this method and setDefaultAttribute is that - * if the attribute is already set then it will not be changed.<BR> - * The purpose is to allow more than one source requiring the attribute - * to initialize it, but only the first initialization will be used. - * - * @see #getAttribute - * @see #setDefaultAttribute - */ - public static Object initDefaultAttribute(String name, Object value) { - // get current value - Object currentValue = getDefaultAttribute(name); - - // if it's already there skip the setting - if (currentValue != null) { - return currentValue; - } - - fgDefaultAttributes.set(FigureAttributeConstant.getConstant(name), value); - return null; - } - - /** - * Gets a the default value for a named attribute - * @see #getAttribute - */ - public static Object getDefaultAttribute(String name) { - if (fgDefaultAttributes == null) { - initializeAttributes(); - } - return fgDefaultAttributes.get(FigureAttributeConstant.getConstant(name)); - } - - public static Object getDefaultAttribute(FigureAttributeConstant attributeConstant) { - if (fgDefaultAttributes == null) { - initializeAttributes(); - } - return fgDefaultAttributes.get(attributeConstant); - } - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return getAttribute(FigureAttributeConstant.getConstant(name)); - } - - public Object getAttribute(FigureAttributeConstant attributeConstant) { - if (fAttributes != null) { - if (fAttributes.hasDefined(attributeConstant)) { - return fAttributes.get(attributeConstant); - } - } - return getDefaultAttribute(attributeConstant); - } - - /** - * Sets the named attribute to the new value - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - setAttribute(FigureAttributeConstant.getConstant(name), value); - } - - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - if (fAttributes == null) { - fAttributes = new FigureAttributes(); - } - fAttributes.set(attributeConstant, value); - changed(); - } - - /** - * Stores the Figure to a StorableOutput. - */ - public void write(StorableOutput dw) { - super.write(dw); - if (fAttributes == null) { - dw.writeString("no_attributes"); - } - else { - dw.writeString("attributes"); - fAttributes.write(dw); - } - } - - /** - * Reads the Figure from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - String s = dr.readString(); - if (s.toLowerCase().equals("attributes")) { - fAttributes = new FigureAttributes(); - fAttributes.read(dr); - } - } - - private void writeObject(ObjectOutputStream o) throws IOException { - // Filter out Popup menu: cannot serialize any associated action-Listeners - // Work-around for Java-Bug: 4240860 - Object associatedMenu = getAttribute(Figure.POPUP_MENU); - if (associatedMenu != null) { - setAttribute(Figure.POPUP_MENU, null); - } - - o.defaultWriteObject(); - - if (associatedMenu != null) { - setAttribute(Figure.POPUP_MENU, associatedMenu); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/BorderDecorator.java b/JHotDraw/src/CH/ifa/draw/figures/BorderDecorator.java deleted file mode 100644 index 9dd80403e..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/BorderDecorator.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * @(#)BorderDecorator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; - -/** - * BorderDecorator decorates an arbitrary Figure with - * a border. - * - * @version <$CURRENT_VERSION$> - */ -public class BorderDecorator extends DecoratorFigure { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 1205601808259084917L; - private int borderDecoratorSerializedDataVersion = 1; - - private Point myBorderOffset; - private Color myBorderColor; - private Color myShadowColor; - - public BorderDecorator() { - } - - public BorderDecorator(Figure figure) { - super(figure); - } - - /** - * Performs additional initialization code before the figure is decorated - * Subclasses may override this method. - */ - protected void initialize() { - setBorderOffset(new Point(3,3)); - } - - public void setBorderOffset(Point newBorderOffset) { - myBorderOffset = newBorderOffset; - } - - public Point getBorderOffset() { - if (myBorderOffset == null) { - return new Point(0,0); - } - else { - return myBorderOffset; - } - } - - /** - * Draws a the figure and decorates it with a border. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - super.draw(g); - g.setColor(Color.white); - g.drawLine(r.x, r.y, r.x, r.y + r.height); - g.drawLine(r.x, r.y, r.x + r.width, r.y); - g.setColor(Color.gray); - g.drawLine(r.x + r.width, r.y, r.x + r.width, r.y + r.height); - g.drawLine(r.x , r.y + r.height, r.x + r.width, r.y + r.height); - } - - /** - * Gets the displaybox including the border. - */ - public Rectangle displayBox() { - Rectangle r = getDecoratedFigure().displayBox(); - r.grow(getBorderOffset().x, getBorderOffset().y); - return r; - } - - /** - * Invalidates the figure extended by its border. - */ - public void figureInvalidated(FigureChangeEvent e) { - Rectangle rect = e.getInvalidatedRectangle(); - rect.grow(getBorderOffset().x, getBorderOffset().y); - super.figureInvalidated(new FigureChangeEvent(this, rect, e)); - } - - public Insets connectionInsets() { - Insets i = super.connectionInsets(); - i.top -= getBorderOffset().y; - i.bottom -= getBorderOffset().y; - i.left -= getBorderOffset().x; - i.right -= getBorderOffset().x; - - return i; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/BorderTool.java b/JHotDraw/src/CH/ifa/draw/figures/BorderTool.java deleted file mode 100644 index 498afb490..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/BorderTool.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * @(#)BorderTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - -import java.awt.event.MouseEvent; -import java.awt.event.InputEvent; -import java.util.List; - -/** - * BorderTool decorates the clicked figure with a BorderDecorator. - * - * @see BorderDecorator - * - * @version <$CURRENT_VERSION$> - */ -public class BorderTool extends ActionTool { - - public BorderTool(DrawingEditor editor) { - super(editor); - } - - /** - * Add the touched figure to the selection of an invoke action. - * Overrides ActionTool's mouseDown to allow for peeling the border - * if there is one already. - * This is done by CTRLing the click - * @see #action - */ - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - // if not CTRLed then proceed normally - if ((e.getModifiers() & InputEvent.CTRL_MASK) == 0) { - super.mouseDown(e, x, y); - } - else { - Figure target = drawing().findFigure(x, y); - if ((target != null) && (target != target.getDecoratedFigure())) { - view().addToSelection(target); - reverseAction(target); - } - } - } - - /** - * Decorates the clicked figure with a border. - */ - public void action(Figure figure) { -// Figure replaceFigure = drawing().replace(figure, new BorderDecorator(figure)); - - setUndoActivity(createUndoActivity()); - List l = CollectionsFactory.current().createList(); - l.add(figure); - l.add(new BorderDecorator(figure)); - getUndoActivity().setAffectedFigures(new FigureEnumerator(l)); - ((BorderTool.UndoActivity)getUndoActivity()).replaceAffectedFigures(); - } - - /** - * Peels off the border from the clicked figure. - */ - public void reverseAction(Figure figure) { - setUndoActivity(createUndoActivity()); - List l = CollectionsFactory.current().createList(); - l.add(figure); - l.add(((DecoratorFigure)figure).peelDecoration()); - getUndoActivity().setAffectedFigures(new FigureEnumerator(l)); - ((BorderTool.UndoActivity)getUndoActivity()).replaceAffectedFigures(); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new BorderTool.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - getDrawingView().clearSelection(); - return replaceAffectedFigures(); - } - - public boolean redo() { - if (!isRedoable()) { - return false; - } - getDrawingView().clearSelection(); - return replaceAffectedFigures(); - } - - public boolean replaceAffectedFigures() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - Figure oldFigure = fe.nextFigure(); - - if (!fe.hasNextFigure()) { - return false; - } - Figure replaceFigure = fe.nextFigure(); - - replaceFigure = getDrawingView().drawing().replace(oldFigure, replaceFigure); - List l = CollectionsFactory.current().createList(); - l.add(replaceFigure); - l.add(oldFigure); - setAffectedFigures(new FigureEnumerator(l)); - - return true; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/ChopEllipseConnector.java b/JHotDraw/src/CH/ifa/draw/figures/ChopEllipseConnector.java deleted file mode 100644 index f12059c3d..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/ChopEllipseConnector.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @(#)ChopEllipseConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Geom; - -/** - * A ChopEllipseConnector locates a connection point by - * chopping the connection at the ellipse defined by the - * figure's display box. - * - * @version <$CURRENT_VERSION$> - */ -public class ChopEllipseConnector extends ChopBoxConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -3165091511154766610L; - - public ChopEllipseConnector() { - } - - public ChopEllipseConnector(Figure owner) { - super(owner); - } - - protected Point chop(Figure target, Point from) { - Rectangle r = target.displayBox(); - double angle = Geom.pointToAngle(r, from); - return Geom.ovalAngleToPoint(r, angle); - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/figures/ConnectedTextTool.java b/JHotDraw/src/CH/ifa/draw/figures/ConnectedTextTool.java deleted file mode 100644 index 97dbdc75e..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/ConnectedTextTool.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * @(#)ConnectedTextTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Undoable; -import java.awt.event.MouseEvent; - -/** - * Tool to create new or edit existing text figures. - * A new text figure is connected with the clicked figure. - * - * @see CH.ifa.draw.standard.TextHolder - * - * @version <$CURRENT_VERSION$> - */ -public class ConnectedTextTool extends TextTool { - - private Figure myConnectedFigure; - - public ConnectedTextTool(DrawingEditor editor, Figure prototype) { - super(editor, prototype); - } - - /** - * If the pressed figure is a TextHolder it can be edited otherwise - * a new text figure is created. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - - if (getTypingTarget() != null) { - TextHolder textHolder = getTypingTarget(); - setConnectedFigure(drawing().findFigureInsideWithout(x, y, textHolder.getRepresentingFigure())); - if ((getConnectedFigure() != null) && (textHolder != null) && (getConnectedFigure().getTextHolder() != textHolder)) { - textHolder.connect(getConnectedFigure().getDecoratedFigure()); - getConnectedFigure().addDependendFigure(getAddedFigure()); - } - } - } - - protected void endEdit() { - super.endEdit(); - if ((getUndoActivity() != null) && (getUndoActivity() instanceof ConnectedTextTool.UndoActivity)) { - ((ConnectedTextTool.UndoActivity)getUndoActivity()).setConnectedFigure(getConnectedFigure()); - } - else if ((getConnectedFigure() != null) && isDeleteTextFigure()) { - getConnectedFigure().removeDependendFigure(getAddedFigure()); - } - } - - protected void setConnectedFigure(Figure pressedFigure) { - myConnectedFigure = pressedFigure; - } - - public Figure getConnectedFigure() { - return myConnectedFigure; - } - - /** - * If the pressed figure is a TextHolder it can be edited otherwise - * a new text figure is created. - */ - public void activate() { - super.activate(); - setConnectedFigure(null); - } - - protected Undoable createDeleteUndoActivity() { - FigureTransferCommand cmd = new DeleteCommand("Delete", editor()); - return new DeleteUndoActivity(cmd, getConnectedFigure()); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new ConnectedTextTool.UndoActivity(view(), getTypingTarget().getText()); - } - - public static class UndoActivity extends TextTool.UndoActivity { - private Figure myConnectedFigure; - - public UndoActivity(DrawingView newDrawingView, String newOriginalText) { - super(newDrawingView, newOriginalText); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - - if (currentFigure.getTextHolder() != null) { - // the text figure didn't exist before - if (!isValidText(getOriginalText())) { - currentFigure.getTextHolder().disconnect(getConnectedFigure()); - } - // the text figure did exist but was remove - else if (!isValidText(getBackupText())) { - currentFigure.getTextHolder().connect(getConnectedFigure()); - } - } - } - - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - // the text figure did exist but was remove - if (!isValidText(getBackupText())) { - currentFigure.getTextHolder().disconnect(getConnectedFigure()); - } - // the text figure didn't exist before - else if (!isValidText(getOriginalText())) { - currentFigure.getTextHolder().connect(getConnectedFigure()); - } - } - } - - return true; - } - - public void setConnectedFigure(Figure newConnectedFigure) { - myConnectedFigure = newConnectedFigure; - } - - public Figure getConnectedFigure() { - return myConnectedFigure; - } - } - - /** - * This class - */ - public static class DeleteUndoActivity extends DeleteCommand.UndoActivity { - private Figure myConnectedFigure; - - public DeleteUndoActivity(FigureTransferCommand cmd, Figure newConnectedFigure) { - super(cmd); - setConnectedFigure(newConnectedFigure); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - currentFigure.getTextHolder().connect(getConnectedFigure().getDecoratedFigure()); - } - } - - return true; - } - - public boolean redo() { - if (!super.redo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - currentFigure.getTextHolder().disconnect(getConnectedFigure().getDecoratedFigure()); - } - } - - return true; - } - - public void setConnectedFigure(Figure newConnectedFigure) { - myConnectedFigure = newConnectedFigure; - } - - public Figure getConnectedFigure() { - return myConnectedFigure; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/ElbowConnection.java b/JHotDraw/src/CH/ifa/draw/figures/ElbowConnection.java deleted file mode 100644 index 66dfd54b2..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/ElbowConnection.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * @(#)ElbowConnection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import java.util.List; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - -/** - * A LineConnection that constrains a connection to - * orthogonal lines. - * - * @version <$CURRENT_VERSION$> - */ -public class ElbowConnection extends LineConnection { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 2193968743082078559L; - private int elbowConnectionSerializedDataVersion = 1; - - public ElbowConnection() { - super(); - } - - public void updateConnection() { - super.updateConnection(); - updatePoints(); - } - - public void layoutConnection() { - } - - /** - * Gets the handles of the figure. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(fPoints.size()*2); - handles.add(new ChangeConnectionStartHandle(this)); - for (int i = 1; i < fPoints.size()-1; i++) { - handles.add(new NullHandle(this, locator(i))); - } - handles.add(new ChangeConnectionEndHandle(this)); - for (int i = 0; i < fPoints.size()-1; i++) { - handles.add(new ElbowHandle(this, i)); - } - return new HandleEnumerator(handles); - } - - public Locator connectedTextLocator(Figure f) { - return new ElbowTextLocator(); - } - - protected void updatePoints() { - willChange(); - Point start = startPoint(); - Point end = endPoint(); - fPoints.clear(); - fPoints.add(start); - - if (start.x == end.x || start.y == end.y) { - fPoints.add(end); - } - else { - - Rectangle r1 = getStartConnector().owner().displayBox(); - Rectangle r2 = getEndConnector().owner().displayBox(); - - int dir = Geom.direction(r1.x + r1.width/2, r1.y + r1.height/2, - r2.x + r2.width/2, r2.y + r2.height/2); - if (dir == Geom.NORTH || dir == Geom.SOUTH) { - fPoints.add(new Point(start.x, (start.y + end.y)/2)); - fPoints.add(new Point(end.x, (start.y + end.y)/2)); - } - else { - fPoints.add(new Point((start.x + end.x)/2, start.y)); - fPoints.add(new Point((start.x + end.x)/2, end.y)); - } - fPoints.add(end); - } - changed(); - } -} - -class ElbowTextLocator extends AbstractLocator { - public Point locate(Figure owner) { - Point p = owner.center(); - return new Point(p.x, p.y-10); // hack - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/figures/ElbowHandle.java b/JHotDraw/src/CH/ifa/draw/figures/ElbowHandle.java deleted file mode 100644 index 90c2ebdb4..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/ElbowHandle.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * @(#)ElbowHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Geom; -import java.awt.*; - -/** - * A Handle to move an ElbowConnection left/right or up/down. - * - * @version <$CURRENT_VERSION$> - */ -public class ElbowHandle extends AbstractHandle { - - private int fSegment; - private int fLastX, fLastY; // previous mouse position - - public ElbowHandle(LineConnection owner, int segment) { - super(owner); - fSegment = segment; - } - - public void invokeStart(int x, int y, DrawingView view) { - fLastX = x; - fLastY = y; - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - LineConnection line = ownerConnection(); - Point p1 = line.pointAt(fSegment); - Point p2 = line.pointAt(fSegment+1); - int ddx = x - fLastX; - int ddy = y - fLastY; - - Point np1; - Point np2; - if (isVertical(p1, p2)) { - int cx = constrainX(p1.x + ddx); - np1 = new Point(cx, p1.y); - np2 = new Point(cx, p2.y); - } - else { - int cy = constrainY(p1.y + ddy); - np1 = new Point(p1.x, cy); - np2 = new Point(p2.x, cy); - } - line.setPointAt(np1, fSegment); - line.setPointAt(np2, fSegment+1); - fLastX = x; - fLastY = y; - } - - private boolean isVertical(Point p1, Point p2) { - return p1.x == p2.x; - } - - public Point locate() { - LineConnection line = ownerConnection(); - int segment = Math.min(fSegment, line.pointCount()-2); - Point p1 = line.pointAt(segment); - Point p2 = line.pointAt(segment+1); - return new Point((p1.x + p2.x)/2, (p1.y + p2.y)/2); - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - private int constrainX(int x) { - LineConnection line = ownerConnection(); - Figure startFigure = line.getStartConnector().owner(); - Figure endFigure = line.getEndConnector().owner(); - Rectangle start = startFigure.displayBox(); - Rectangle end = endFigure.displayBox(); - Insets i1 = startFigure.connectionInsets(); - Insets i2 = endFigure.connectionInsets(); - - int r1x, r1width, r2x, r2width; - r1x = start.x + i1.left; - r1width = start.width - i1.left - i1.right-1; - - r2x = end.x + i2.left; - r2width = end.width - i2.left - i2.right-1; - - if (fSegment == 0) { - x = Geom.range(r1x, r1x + r1width, x); - } - if (fSegment == line.pointCount()-2) { - x = Geom.range(r2x, r2x + r2width, x); - } - return x; - } - - private int constrainY(int y) { - LineConnection line = ownerConnection(); - Figure startFigure = line.getStartConnector().owner(); - Figure endFigure = line.getEndConnector().owner(); - Rectangle start = startFigure.displayBox(); - Rectangle end = endFigure.displayBox(); - Insets i1 = startFigure.connectionInsets(); - Insets i2 = endFigure.connectionInsets(); - - int r1y, r1height, r2y, r2height; - r1y = start.y + i1.top; - r1height = start.height - i1.top - i1.bottom-1; - r2y = end.y + i2.top; - r2height = end.height - i2.top - i2.bottom-1; - - if (fSegment == 0) { - y = Geom.range(r1y, r1y + r1height, y); - } - if (fSegment == line.pointCount()-2) { - y = Geom.range(r2y, r2y + r2height, y); - } - return y; - } - - private LineConnection ownerConnection() { - return (LineConnection)owner(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/EllipseFigure.java b/JHotDraw/src/CH/ifa/draw/figures/EllipseFigure.java deleted file mode 100644 index c9f70e6ed..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/EllipseFigure.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * @(#)EllipseFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import java.io.IOException; -import java.util.List; -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; - -/** - * An ellipse figure. - * - * @version <$CURRENT_VERSION$> - */ -public class EllipseFigure extends AttributeFigure { - - private Rectangle fDisplayBox; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -6856203289355118951L; - private int ellipseFigureSerializedDataVersion = 1; - - public EllipseFigure() { - this(new Point(0,0), new Point(0,0)); - } - - public EllipseFigure(Point origin, Point corner) { - basicDisplayBox(origin,corner); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x,y); - } - - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - /* - * JP, 25-May-03: Changed from (width-1, height-1) to (width, height), - * because figures were not filled completely (JDK 1.4.x). Might invalidate - * fix for #661878. If the problem is JDK-dependant, maybe the JDK version - * should be taken into account here? - */ - g.fillOval(r.x, r.y, r.width, r.height); - } - - public void drawFrame(Graphics g) { - Rectangle r = displayBox(); - g.drawOval(r.x, r.y, r.width-1, r.height-1); - } - - public Insets connectionInsets() { - Rectangle r = fDisplayBox; - int cx = r.width/2; - int cy = r.height/2; - return new Insets(cy, cx, cy, cx); - } - - public Connector connectorAt(int x, int y) { - return new ChopEllipseConnector(this); - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/FigureAttributes.java b/JHotDraw/src/CH/ifa/draw/figures/FigureAttributes.java deleted file mode 100644 index 732a374be..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/FigureAttributes.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * @(#)FigureAttributes.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.*; - -import java.awt.Color; -import java.io.IOException; -import java.io.Serializable; -import java.util.Map; -import java.util.Iterator; - -/** - * A container for a figure's attributes. The attributes are stored - * as key/value pairs. - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ -public class FigureAttributes - extends Object - implements Cloneable, Serializable { - - private Map fMap; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -6886355144423666716L; - private int figureAttributesSerializedDataVersion = 1; - - /** - * Constructs the FigureAttributes. - */ - public FigureAttributes() { - fMap = CollectionsFactory.current().createMap(); - } - - /** - * Gets the attribute with the given name. - * @return attribute or null if the key is not defined - */ - public Object get(FigureAttributeConstant attributeConstant) { - return fMap.get(attributeConstant); - } - - /** - * Sets the attribute with the given name and - * overwrites its previous value. - */ - public void set(FigureAttributeConstant attributeConstant, Object value) { - if (value != null) { - fMap.put(attributeConstant, value); - } - else { - fMap.remove(attributeConstant); - } - } - - /** - * Tests if an attribute is defined. - */ - public boolean hasDefined(FigureAttributeConstant attributeConstant) { - return fMap.containsKey(attributeConstant); - } - - /** - * Clones the attributes. - */ - public Object clone() { - try { - FigureAttributes a = (FigureAttributes) super.clone(); - a.fMap = CollectionsFactory.current().createMap(fMap); - return a; - } - catch (CloneNotSupportedException e) { - throw new InternalError(); - } - } - - /** - * Reads the attributes from a StorableInput. - * FigureAttributes store the following types directly: - * Color, Boolean, String, Int. Other attribute types - * have to implement the Storable interface or they - * have to be wrapped by an object that implements Storable. - * @see Storable - * @see #write - */ - public void read(StorableInput dr) throws IOException { - String s = dr.readString(); - if (!s.toLowerCase().equals("attributes")) { - throw new IOException("Attributes expected"); - } - - fMap = CollectionsFactory.current().createMap(); - int size = dr.readInt(); - for (int i=0; i<size; i++) { - String key = dr.readString(); - String valtype = dr.readString(); - Object val = null; - if (valtype.equals("Color")) { - val = new Color(dr.readInt(), dr.readInt(), dr.readInt()); - } - else if (valtype.equals("Boolean")) { - val = new Boolean(dr.readString()); - } - else if (valtype.equals("String")) { - val = dr.readString(); - } - else if (valtype.equals("Int")) { - val = new Integer(dr.readInt()); - } - else if (valtype.equals("Storable")) { - val = dr.readStorable(); - } - else if (valtype.equals(Figure.POPUP_MENU)) { - // read String but don't store it - continue; - } - else if (valtype.equals("UNKNOWN")) { - continue; - } - // try to get defined constant - FigureAttributeConstant attributeConstant = FigureAttributeConstant.getConstant(key); - set(attributeConstant, val); - } - } - - /** - * Writes the attributes to a StorableInput. - * FigureAttributes store the following types directly: - * Color, Boolean, String, Int. Other attribute types - * have to implement the Storable interface or they - * have to be wrapped by an object that implements Storable. - * @see Storable - * @see #write - */ - public void write(StorableOutput dw) { - dw.writeString("attributes"); - - dw.writeInt(fMap.size()); // number of attributes - Iterator iter = fMap.keySet().iterator(); - while (iter.hasNext()) { - FigureAttributeConstant fac = (FigureAttributeConstant)iter.next(); - String attributeName = fac.getName(); - Object attributeValue = fMap.get(fac); - - dw.writeString(attributeName); - - if (attributeValue instanceof String) { - dw.writeString("String"); - dw.writeString((String)attributeValue); - } - else if (attributeValue instanceof Color) { - writeColor(dw, "Color", (Color)attributeValue); - } - else if (attributeValue instanceof Boolean) { - dw.writeString("Boolean"); - if (((Boolean)attributeValue).booleanValue()) { - dw.writeString("TRUE"); - } - else { - dw.writeString("FALSE"); - } - } - else if (attributeValue instanceof Integer) { - dw.writeString("Int"); - dw.writeInt(((Integer)attributeValue).intValue()); - } - else if (attributeValue instanceof Storable) { - dw.writeString("Storable"); - dw.writeStorable((Storable)attributeValue); - } - else if (attributeValue instanceof javax.swing.JPopupMenu) { - dw.writeString(Figure.POPUP_MENU); - } - else { - System.err.println("Unknown attribute: " + attributeValue); - dw.writeString("UNKNOWN"); - } - } - } - - public static void writeColor(StorableOutput dw, String colorName, Color color) { - if (color != null) { - dw.writeString(colorName); - dw.writeInt(color.getRed()); - dw.writeInt(color.getGreen()); - dw.writeInt(color.getBlue()); - } - } - - public static Color readColor(StorableInput dr) throws IOException { - return new Color(dr.readInt(), dr.readInt(), dr.readInt()); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/FontSizeHandle.java b/JHotDraw/src/CH/ifa/draw/figures/FontSizeHandle.java deleted file mode 100644 index 2248b3e09..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/FontSizeHandle.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * @(#)FontSizeHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.UndoableAdapter; -import java.awt.*; - -/** - * A Handle to change the font size by direct manipulation. - * - * @version <$CURRENT_VERSION$> - */ -public class FontSizeHandle extends LocatorHandle { - - public FontSizeHandle(Figure owner, Locator l) { - super(owner, l); - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - TextFigure textOwner = (TextFigure) owner(); - - FontSizeHandle.UndoActivity activity = (FontSizeHandle.UndoActivity)getUndoActivity(); - int newSize = activity.getFont().getSize() + y-anchorY; - textOwner.setFont(new Font(activity.getFont().getName(), activity.getFont().getStyle(), newSize)); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - TextFigure textOwner = (TextFigure) owner(); - FontSizeHandle.UndoActivity activity = (FontSizeHandle.UndoActivity)getUndoActivity(); - // there has been no change so there is nothing to undo - if (textOwner.getFont().getSize() == activity.getOldFontSize()) { - setUndoActivity(null); - } - else { - activity.setFont(textOwner.getFont()); - } - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity(DrawingView newView) { - TextFigure textOwner = (TextFigure)owner(); - return new FontSizeHandle.UndoActivity(newView, textOwner.getFont()); - } - - public static class UndoActivity extends UndoableAdapter { - private Font myFont; - private int myOldFontSize; - - public UndoActivity(DrawingView newView, Font newFont) { - super(newView); - setFont(newFont); - setOldFontSize(getFont().getSize()); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - swapFont(); - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - swapFont(); - return true; - } - - protected void swapFont() { - setOldFontSize(replaceFontSize()); - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - ((TextFigure)fe.nextFigure()).setFont(getFont()); - } - } - - private int replaceFontSize() { - int tempFontSize = getFont().getSize(); - setFont(new Font(getFont().getName(), getFont().getStyle(), getOldFontSize())); - return tempFontSize; - } - protected void setFont(Font newFont) { - myFont = newFont; - } - - public Font getFont() { - return myFont; - } - - protected void setOldFontSize(int newOldFontSize) { - myOldFontSize = newOldFontSize; - } - - public int getOldFontSize() { - return myOldFontSize; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/GroupCommand.java b/JHotDraw/src/CH/ifa/draw/figures/GroupCommand.java deleted file mode 100644 index 4635759ae..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/GroupCommand.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)GroupCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - -import java.util.List; - -/** - * Command to group the selection into a GroupFigure. - * - * @see GroupFigure - * - * @version <$CURRENT_VERSION$> - */ -public class GroupCommand extends AbstractCommand { - - /** - * Constructs a group command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public GroupCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); - ((GroupCommand.UndoActivity)getUndoActivity()).groupFigures(); - view().checkDamage(); - } - - public boolean isExecutableWithView() { - return view().selectionCount() > 1; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new GroupCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - getDrawingView().clearSelection(); - - // orphan group figure(s) - getDrawingView().drawing().orphanAll(getAffectedFigures()); - - // create a new collection with the grouped figures as elements - List affectedFigures = CollectionsFactory.current().createList(); - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - // add contained figures - getDrawingView().drawing().addAll(currentFigure.figures()); - getDrawingView().addToSelectionAll(currentFigure.figures()); - - FigureEnumeration groupedFigures = currentFigure.figures(); - while (groupedFigures.hasNextFigure()) { - affectedFigures.add(groupedFigures.nextFigure()); - } - } - - setAffectedFigures(new FigureEnumerator(affectedFigures)); - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - groupFigures(); - return true; - } - - return false; - } - - public void groupFigures() { - getDrawingView().drawing().orphanAll(getAffectedFigures()); - getDrawingView().clearSelection(); - - // add new group figure instead - GroupFigure group = new GroupFigure(); - group.addAll(getAffectedFigures()); - - Figure figure = getDrawingView().drawing().add(group); - getDrawingView().addToSelection(figure); - - // create a new collection with the new group figure as element - List affectedFigures = CollectionsFactory.current().createList(); - affectedFigures.add(figure); - setAffectedFigures(new FigureEnumerator(affectedFigures)); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/GroupFigure.java b/JHotDraw/src/CH/ifa/draw/figures/GroupFigure.java deleted file mode 100644 index 12ff7a520..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/GroupFigure.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * @(#)GroupFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import java.util.List; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.CollectionsFactory; - -/** - * A Figure that groups a collection of figures. - * - * @version <$CURRENT_VERSION$> - */ -public class GroupFigure extends CompositeFigure { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 8311226373023297933L; - private int groupFigureSerializedDataVersion = 1; - - /** - * GroupFigures cannot be connected - */ - public boolean canConnect() { - return false; - } - - /** - * Gets the display box. The display box is defined as the union - * of the contained figures. - */ - public Rectangle displayBox() { - FigureEnumeration fe = figures(); - Rectangle r = fe.nextFigure().displayBox(); - - while (fe.hasNextFigure()) { - r.add(fe.nextFigure().displayBox()); - } - return r; - } - - public void basicDisplayBox(Point origin, Point corner) { - // do nothing - // we could transform all components proportionally - } - - public FigureEnumeration decompose() { - return new FigureEnumerator(fFigures); - } - - /** - * Gets the handles for the GroupFigure. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - handles.add(new GroupHandle(this, RelativeLocator.northWest())); - handles.add(new GroupHandle(this, RelativeLocator.northEast())); - handles.add(new GroupHandle(this, RelativeLocator.southWest())); - handles.add(new GroupHandle(this, RelativeLocator.southEast())); - return new HandleEnumerator(handles); - } - - /** - * Sets the attribute of all the contained figures. - * @deprecated see setAttribute(FigureAttributeConstant,Object) - */ - public void setAttribute(String name, Object value) { - super.setAttribute(name, value); - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - fe.nextFigure().setAttribute(name, value); - } - } - - /** - * Sets the attribute of the GroupFigure as well as all contained Figures. - */ - public void setAttribute(FigureAttributeConstant fac, Object object){ - super.setAttribute(fac, object); - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - fe.nextFigure().setAttribute(fac, object); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/GroupHandle.java b/JHotDraw/src/CH/ifa/draw/figures/GroupHandle.java deleted file mode 100644 index dfa1ff804..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/GroupHandle.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * @(#)GroupHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.NullHandle; - -/** - * A Handle for a GroupFigure. - * - * @version <$CURRENT_VERSION$> - */ -final class GroupHandle extends NullHandle { - - public GroupHandle(Figure owner, Locator locator) { - super(owner, locator); - } - - /** - * Draws the Group handle. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - r.grow(-1, -1); - g.setColor(Color.white); - g.drawRect(r.x, r.y, r.width, r.height); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/ImageFigure.java b/JHotDraw/src/CH/ifa/draw/figures/ImageFigure.java deleted file mode 100644 index 54c586fb2..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/ImageFigure.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * @(#)ImageFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import java.io.*; -import java.util.List; -import java.awt.image.ImageObserver; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - -/** - * A Figure that shows an Image. - * Images shown by an image figure are shared by using the Iconkit. - * - * @see Iconkit - * - * @version <$CURRENT_VERSION$> - */ -public class ImageFigure - extends AttributeFigure implements ImageObserver { - - private String fFileName; - private transient Image fImage; - private Rectangle fDisplayBox; - /* - * Serialization support. - */ - private static final long serialVersionUID = 148012030121282439L; - private int imageFigureSerializedDataVersion = 1; - - public ImageFigure() { - fFileName = null; - fImage = null; - fDisplayBox = null; - } - - public ImageFigure(Image image, String fileName, Point origin) { - fFileName = fileName; - fImage = image; - // fix for bug-id: 593080 (ImageFigure calculates the image rectangle wrongly) - basicDisplayBox(origin, new Point(origin.x + fImage.getWidth(this), origin.y + fImage.getHeight(this))); - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x,y); - } - - public void draw(Graphics g) { - if (fImage == null) { - fImage = Iconkit.instance().getImage(fFileName); - } - if (fImage != null) { - g.drawImage(fImage, fDisplayBox.x, fDisplayBox.y, fDisplayBox.width, fDisplayBox.height, this); - } - else { - drawGhost(g); - } - } - - private void drawGhost(Graphics g) { - g.setColor(Color.gray); - g.fillRect(fDisplayBox.x, fDisplayBox.y, fDisplayBox.width, fDisplayBox.height); - } - - /** - * Handles asynchroneous image updates. - */ - public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) { - if ((flags & (FRAMEBITS|ALLBITS)) != 0) { - invalidate(); - if (listener() != null) { - listener().figureRequestUpdate(new FigureChangeEvent(this)); - } - } - return (flags & (ALLBITS|ABORT)) == 0; - } - - /** - * Releases a figure's resources. Release is called when - * a figure is removed from a drawing. Informs the listeners that - * the figure is removed by calling figureRemoved. - */ - public void release() { - fImage.flush(); - } - - /** - * Writes the ImageFigure to a StorableOutput. Only a reference to the - * image, that is its pathname is saved. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - dw.writeString(fFileName); - } - - /** - * Reads the ImageFigure from a StorableInput. It registers the - * referenced figure to be loaded from the Iconkit. - * @see Iconkit#registerImage - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - fFileName = dr.readString(); - Iconkit.instance().registerImage(fFileName); - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - Iconkit.instance().registerImage(fFileName); - fImage = null; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/InsertImageCommand.java b/JHotDraw/src/CH/ifa/draw/figures/InsertImageCommand.java deleted file mode 100644 index 8f3b3a9c4..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/InsertImageCommand.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * @(#)InsertImageCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; -import java.awt.*; -import java.lang.ref.WeakReference; - -/** - * Command to insert a named image. - * - * @version <$CURRENT_VERSION$> - */ -public class InsertImageCommand extends AbstractCommand { - - private String myImageName; - - /** - * Constructs an insert image command. - * @param name the command name - * @param newImageName the pathname of the image - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public InsertImageCommand(String name, String newImageName, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - myImageName = newImageName; - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - ((InsertImageCommand.UndoActivity)getUndoActivity()).insertImage(); - view().checkDamage(); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new InsertImageCommand.UndoActivity(view(), myImageName); - } - - public class UndoActivity extends UndoableAdapter { - - /** - * Use weak reference so if the command is the last one which references - * the ImageFigure then it might be garbage collected. Usually, the ImageFigure - * is referenced from the drawing it is inserted and might be only garbage - * collected after an undo operation (which removes the ImageFigure from - * the drawing). If it has been garbage collected but is requested again - * (e.g. during a redo operation) it is restored if possible. - */ - WeakReference myAffectedImageFigure; - private String myAffectedImageName; - - UndoActivity(DrawingView newDrawingView, String newAffectedImageName) { - super(newDrawingView); - myAffectedImageName = newAffectedImageName; - setUndoable(true); - setRedoable(true); - } - - protected void setImageFigure(ImageFigure newImageFigure) { - myAffectedImageFigure = new WeakReference(newImageFigure); - } - - protected ImageFigure getImageFigure() { - // load image if it has not been loaded so far - if ((myAffectedImageFigure == null) || (myAffectedImageFigure.get() == null)) { - // ugly cast to component, but AWT wants a Component instead of an ImageObserver... - Image image = Iconkit.instance().registerAndLoadImage( - (Component)getDrawingView(), myAffectedImageName); - setImageFigure(new ImageFigure( - image, myAffectedImageName, getDrawingView().lastClick())); - } - - return (ImageFigure)myAffectedImageFigure.get(); - } - - public boolean undo() { - if (super.undo()) { - getDrawingView().clearSelection(); - - getDrawingView().drawing().orphan(getImageFigure()); - - return true; - } - - return false; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - insertImage(); - return true; - } - - return false; - } - - protected void insertImage() { - getDrawingView().add(getImageFigure()); - getDrawingView().clearSelection(); - getDrawingView().addToSelection(getImageFigure()); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/LineConnection.java b/JHotDraw/src/CH/ifa/draw/figures/LineConnection.java deleted file mode 100644 index 0364673b9..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/LineConnection.java +++ /dev/null @@ -1,374 +0,0 @@ -/* - * @(#)LineConnection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import java.util.List; -import java.io.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - -/** - * A LineConnection is a standard implementation of the - * ConnectionFigure interface. The interface is implemented with PolyLineFigure. - * - * @see ConnectionFigure - * - * @version <$CURRENT_VERSION$> - */ -public class LineConnection extends PolyLineFigure implements ConnectionFigure { - - protected Connector myStartConnector; - protected Connector myEndConnector; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 6883731614578414801L; - private int lineConnectionSerializedDataVersion = 1; - - /** - * Constructs a LineConnection. A connection figure has - * an arrow decoration at the start and end. - */ - public LineConnection() { - super(4); - setStartDecoration(new ArrowTip()); - setEndDecoration(new ArrowTip()); - } - - /** - * Tests whether a figure can be a connection target. - * ConnectionFigures cannot be connected and return false. - */ - public boolean canConnect() { - return false; - } - - /** - * Ensures that a connection is updated if the connection - * was moved. - */ - protected void basicMoveBy(int dx, int dy) { - // don't move the start and end point since they are connected - for (int i = 1; i < fPoints.size()-1; i++) { - pointAt(i).translate(dx, dy); - } - - updateConnection(); // make sure that we are still connected - } - - /** - * Sets the start figure of the connection. - */ - public void connectStart(Connector newStartConnector) { - setStartConnector(newStartConnector); - if (newStartConnector != null) { - startFigure().addDependendFigure(this); - startFigure().addFigureChangeListener(this); - } - } - - /** - * Sets the end figure of the connection. - */ - public void connectEnd(Connector newEndConnector) { - setEndConnector(newEndConnector); - if (newEndConnector != null) { - endFigure().addDependendFigure(this); - endFigure().addFigureChangeListener(this); - handleConnect(startFigure(), endFigure()); - } - } - - /** - * Disconnects the start figure. - */ - public void disconnectStart() { - startFigure().removeFigureChangeListener(this); - startFigure().removeDependendFigure(this); - setStartConnector(null); - } - - /** - * Disconnects the end figure. - */ - public void disconnectEnd() { - handleDisconnect(startFigure(), endFigure()); - endFigure().removeFigureChangeListener(this); - endFigure().removeDependendFigure(this); - setEndConnector(null); - } - - /** - * Tests whether a connection connects the same figures - * as another ConnectionFigure. - */ - public boolean connectsSame(ConnectionFigure other) { - return other.getStartConnector() == getStartConnector() - && other.getEndConnector() == getEndConnector(); - } - - /** - * Handles the disconnection of a connection. - * Override this method to handle this event. - */ - protected void handleDisconnect(Figure start, Figure end) {} - - /** - * Handles the connection of a connection. - * Override this method to handle this event. - */ - protected void handleConnect(Figure start, Figure end) {} - - /** - * Gets the start figure of the connection. - */ - public Figure startFigure() { - if (getStartConnector() != null) { - return getStartConnector().owner(); - } - return null; - } - - /** - * Gets the end figure of the connection. - */ - public Figure endFigure() { - if (getEndConnector() != null) { - return getEndConnector().owner(); - } - return null; - } - - protected void setStartConnector(Connector newStartConnector) { - myStartConnector = newStartConnector; - } - - /** - * Gets the start figure of the connection. - */ - public Connector getStartConnector() { - return myStartConnector; - } - - protected void setEndConnector(Connector newEndConnector) { - myEndConnector = newEndConnector; - } - - /** - * Gets the end figure of the connection. - */ - public Connector getEndConnector() { - return myEndConnector; - } - - /** - * Tests whether two figures can be connected. - */ - public boolean canConnect(Figure start, Figure end) { - return true; - } - - /** - * Sets the start point. - */ - public void startPoint(int x, int y) { - willChange(); - if (fPoints.size() == 0) { - fPoints.add(new Point(x, y)); - } - else { - fPoints.set(0, new Point(x, y)); - } - changed(); - } - - /** - * Sets the end point. - */ - public void endPoint(int x, int y) { - willChange(); - if (fPoints.size() < 2) { - fPoints.add(new Point(x, y)); - } - else { - fPoints.set(fPoints.size()-1, new Point(x, y)); - } - changed(); - } - - /** - * Gets the start point. - */ - public Point startPoint() { - Point p = pointAt(0); - return new Point(p.x, p.y); - } - - /** - * Gets the end point. - */ - public Point endPoint() { - if (fPoints.size() > 0) { - Point p = pointAt(fPoints.size()-1); - return new Point(p.x, p.y); - } - else { - return null; - } - } - - /** - * Gets the handles of the figure. It returns the normal - * PolyLineHandles but adds ChangeConnectionHandles at the - * start and end. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(fPoints.size()); - handles.add(new ChangeConnectionStartHandle(this)); - for (int i = 1; i < fPoints.size()-1; i++) { - handles.add(new PolyLineHandle(this, locator(i), i)); - } - handles.add(new ChangeConnectionEndHandle(this)); - return new HandleEnumerator(handles); - } - - /** - * Sets the point and updates the connection. - */ - public void setPointAt(Point p, int i) { - super.setPointAt(p, i); - layoutConnection(); - } - - /** - * Inserts the point and updates the connection. - */ - public void insertPointAt(Point p, int i) { - super.insertPointAt(p, i); - layoutConnection(); - } - - /** - * Removes the point and updates the connection. - */ - public void removePointAt(int i) { - super.removePointAt(i); - layoutConnection(); - } - - /** - * Updates the connection. - */ - public void updateConnection() { - if (getStartConnector() != null) { - Point start = getStartConnector().findStart(this); - - if (start != null) { - startPoint(start.x, start.y); - } - } - if (getEndConnector() != null) { - Point end = getEndConnector().findEnd(this); - - if (end != null) { - endPoint(end.x, end.y); - } - } - } - - /** - * Lays out the connection. This is called when the connection - * itself changes. By default the connection is recalculated - */ - public void layoutConnection() { - updateConnection(); - } - - public void figureChanged(FigureChangeEvent e) { - updateConnection(); - } - - public void figureRemoved(FigureChangeEvent e) { - } - - public void figureRequestRemove(FigureChangeEvent e) { - } - - public void figureInvalidated(FigureChangeEvent e) { - } - - public void figureRequestUpdate(FigureChangeEvent e) { - } - - public void release() { - super.release(); - handleDisconnect(startFigure(), endFigure()); - if (getStartConnector() != null) { - startFigure().removeFigureChangeListener(this); - startFigure().removeDependendFigure(this); - } - if (getEndConnector() != null) { - endFigure().removeFigureChangeListener(this); - endFigure().removeDependendFigure(this); - } - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getStartConnector()); - dw.writeStorable(getEndConnector()); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - Connector start = (Connector)dr.readStorable(); - if (start != null) { - connectStart(start); - } - Connector end = (Connector)dr.readStorable(); - if (end != null) { - connectEnd(end); - } - if ((start != null) && (end != null)) { - updateConnection(); - } - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - if (getStartConnector() != null) { - connectStart(getStartConnector()); - } - if (getEndConnector() != null) { - connectEnd(getEndConnector()); - } - } - - public void visit(FigureVisitor visitor) { - visitor.visitFigure(this); - } - - /** - * @see CH.ifa.draw.framework.Figure#removeFromContainer(CH.ifa.draw.framework.FigureChangeListener) - */ - public void removeFromContainer(FigureChangeListener c) { - super.removeFromContainer(c); - release(); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/LineDecoration.java b/JHotDraw/src/CH/ifa/draw/figures/LineDecoration.java deleted file mode 100644 index 09567f609..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/LineDecoration.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * @(#)LineDecoration.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.util.Storable; -import java.awt.*; -import java.io.Serializable; - -/** - * Decorate the start or end point of a line or poly line figure. - * LineDecoration is the base class for the different line decorations. - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public interface LineDecoration - extends Storable, Cloneable, Serializable { - - /** - * Draws the decoration in the direction specified by the two points. - */ - public void draw(Graphics g, int x1, int y1, int x2, int y2); - - /** - * @return the display box of a LineDecoration. - */ - public Rectangle displayBox(); -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/LineFigure.java b/JHotDraw/src/CH/ifa/draw/figures/LineFigure.java deleted file mode 100644 index 335a9c374..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/LineFigure.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * @(#)LineFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; - -/** - * A line figure. - * - * @version <$CURRENT_VERSION$> - */ -public class LineFigure extends PolyLineFigure { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 511503575249212371L; - private int lineFigureSerializedDataVersion = 1; - - /** - * Constructs a LineFigure with both start and end set to Point(0,0). - */ - public LineFigure() { - addPoint(0, 0); - addPoint(0, 0); - } - - /** - * Gets a copy of the start point. - */ - public Point startPoint() { - return pointAt(0); - } - - /** - * Gets a copy of the end point. - */ - public Point endPoint() { - return pointAt(1); - } - - /** - * Sets the start point. - */ - public void startPoint(int x, int y) { - setPointAt(new Point(x,y), 0); - } - - /** - * Sets the end point. - */ - public void endPoint(int x, int y) { - setPointAt(new Point(x,y), 1); - } - - /** - * Sets the start and end point. - */ - public void setPoints(Point start, Point end) { - setPointAt(start, 0); - setPointAt(end, 1); - } - - public void basicDisplayBox(Point origin, Point corner) { - setPoints(origin, corner); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/NullConnector.java b/JHotDraw/src/CH/ifa/draw/figures/NullConnector.java deleted file mode 100644 index 41f1a998b..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/NullConnector.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * @(#)Connector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.standard.AbstractConnector; -import CH.ifa.draw.framework.Figure; - -public class NullConnector extends AbstractConnector { - // AbstractConnector implements already all methods but cannot be instantiated - - private NullConnector() { - // do nothing: for JDO-compliance only - } - - public NullConnector(Figure owner) { - super(owner); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/NullFigure.java b/JHotDraw/src/CH/ifa/draw/figures/NullFigure.java deleted file mode 100644 index 408babdff..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/NullFigure.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * @(#)LineConnection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.FigureEnumerator; -import CH.ifa.draw.standard.SingleFigureEnumerator; -import CH.ifa.draw.standard.AbstractFigure; -import CH.ifa.draw.standard.HandleEnumerator; - -import java.awt.*; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class NullFigure extends AbstractFigure { - - private Rectangle myDisplayBox; - - /** - * Moves the figure. This is the - * method that subclassers override. Clients usually - * call displayBox. - * @see #moveBy - */ - protected void basicMoveBy(int dx, int dy) { - myDisplayBox.translate(dx, dy); - } - - /** - * Changes the display box of a figure. This method is - * always implemented in figure subclasses. - * It only changes - * the displaybox and does not announce any changes. It - * is usually not called by the client. Clients typically call - * displayBox to change the display box. - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void basicDisplayBox(Point origin, Point corner) { - myDisplayBox = new Rectangle(origin); - myDisplayBox.add(corner); - } - - /** - * Gets the display box of a figure - * @see #basicDisplayBox - */ - public Rectangle displayBox() { - return new Rectangle(myDisplayBox); - } - - /** - * Draws the figure. - * @param g the Graphics to draw into - */ - public void draw(Graphics g) { - // A NullFigure cannot be drawn: it has no graphical representation - } - - /** - * Returns the handles used to manipulate - * the figure. Handles is a Factory Method for - * creating handle objects. - * - * @return an type-safe iterator of handles - * @see Handle - */ - public HandleEnumeration handles() { - return HandleEnumerator.getEmptyEnumeration(); - } - - /** - * Checks if the Figure should be considered as empty. - */ - public boolean isEmpty() { - return true; - } - - /** - * Returns an Enumeration of the figures contained in this figure - */ - public FigureEnumeration figures() { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Returns the figure that contains the given point. - */ - public Figure findFigureInside(int x, int y) { - // A NullFigure does not contain other figures - return null; - } - - /** - * Returns a Clone of this figure - */ - public Object clone() { - return super.clone(); - } - - /** - * Checks whether the given figure is contained in this figure. - */ - public boolean includes(Figure figure) { - // A NullFigure does not contain another figure - return false; - } - - /** - * Decomposes a figure into its parts. A figure is considered - * as a part of itself. - */ - public FigureEnumeration decompose() { - return new SingleFigureEnumerator(this); - } - - /** - * Releases a figure's resources. Release is called when - * a figure is removed from a drawing. Informs the listeners that - * the figure is removed by calling figureRemoved. - */ - public void release() { - // A NullFigure does not occupy any resources - } - - /** - * Invalidates the figure. This method informs its listeners - * that its current display box is invalid and should be - * refreshed. - */ - public void invalidate() { - // A NullFigure does not have a display box - } - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - // A NullFigure does not have attributes: it cannot do anything with them - return null; - } - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - // A NullFigure does not have attributes: it cannot do anything with them - return null; - } - - /** - * Sets the named attribute to the new value - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - // A NullFigure does not have attributes: it cannot do anything with them - } - - /** - * Sets the named attribute to the new value - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - // A NullFigure does not have attributes: it cannot do anything with them - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/NumberTextFigure.java b/JHotDraw/src/CH/ifa/draw/figures/NumberTextFigure.java deleted file mode 100644 index fec1ef8ad..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/NumberTextFigure.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * @(#)NumberTextFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.Figure; - -/** - * A TextFigure specialized to edit numbers. - * - * @version <$CURRENT_VERSION$> - */ -public class NumberTextFigure extends TextFigure { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -4056859232918336475L; - private int numberTextFigureSerializedDataVersion = 1; - - /** - * Gets the number of columns to be used by the text overlay. - * @see CH.ifa.draw.util.FloatingTextField - */ - public int overlayColumns() { - return Math.max(4, getText().length()); - } - - /** - * Gets the numerical value of the contained text. - * return the value or 0 in the case of an illegal number format. - */ - public int getValue() { - int value = 0; - try { - value = Integer.parseInt(getText()); - } - catch (NumberFormatException e) { - value = 0; - } - return value; - } - - /** - * Sets the numberical value of the contained text. - */ - public void setValue(int value) { - setText(Integer.toString(value)); - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure() { - return this; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/PolyLineConnector.java b/JHotDraw/src/CH/ifa/draw/figures/PolyLineConnector.java deleted file mode 100644 index 47791e148..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/PolyLineConnector.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * @(#)PolyLineConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - -/** - * PolyLineConnector finds connection points on a - * PolyLineFigure. - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public class PolyLineConnector extends ChopBoxConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 6018435940519102865L; - - public PolyLineConnector() { - super(); - } - - /** - * Constructs a connector with the given owner figure. - */ - public PolyLineConnector(Figure owner) { - super(owner); - } - - protected Point chop(Figure target, Point from) { - PolyLineFigure p = (PolyLineFigure)owner(); - // *** based on PolygonFigure's heuristic - Point ctr = p.center(); - int cx = -1; - int cy = -1; - long len = Long.MAX_VALUE; - - // Try for points along edge - - for (int i = 0; i < p.pointCount()-1; i++) { - Point p1 = p.pointAt(i); - Point p2 = p.pointAt(i+1); - Point chop = Geom.intersect(p1.x, - p1.y, - p2.x, - p2.y, - from.x, - from.y, - ctr.x, - ctr.y); - if (chop != null) { - long cl = Geom.length2(chop.x, chop.y, from.x, from.y); - if (cl < len) { - len = cl; - cx = chop.x; - cy = chop.y; - } - } - } - // if none found, pick closest vertex - //if (len == Long.MAX_VALUE) { - { // try anyway - for (int i = 0; i < p.pointCount(); i++) { - Point pp = p.pointAt(i); - long l = Geom.length2(pp.x, pp.y, from.x, from.y); - if (l < len) { - len = l; - cx = pp.x; - cy = pp.y; - } - } - } - return new Point(cx, cy); - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/figures/PolyLineFigure.java b/JHotDraw/src/CH/ifa/draw/figures/PolyLineFigure.java deleted file mode 100644 index 1ba24034c..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/PolyLineFigure.java +++ /dev/null @@ -1,416 +0,0 @@ -/* - * @(#)PolyLineFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.io.IOException; -import java.util.Iterator; -import java.util.List; - -// JUnitDoclet begin import -import CH.ifa.draw.framework.Connector; -import CH.ifa.draw.framework.FigureAttributeConstant; -import CH.ifa.draw.framework.HandleEnumeration; -import CH.ifa.draw.framework.Locator; -import CH.ifa.draw.standard.AbstractFigure; -import CH.ifa.draw.standard.HandleEnumerator; -import CH.ifa.draw.util.CollectionsFactory; -import CH.ifa.draw.util.Geom; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; -// JUnitDoclet end import - -/** - * A poly line figure consists of a list of points. - * It has an optional line decoration at the start and end. - * - * @see LineDecoration - * - * @version <$CURRENT_VERSION$> - */ -public class PolyLineFigure extends AbstractFigure { - - public final static int ARROW_TIP_NONE = 0; - public final static int ARROW_TIP_START = 1; - public final static int ARROW_TIP_END = 2; - public final static int ARROW_TIP_BOTH = 3; - - protected List fPoints; - protected LineDecoration fStartDecoration = null; - protected LineDecoration fEndDecoration = null; - protected Color fFrameColor = Color.black; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -7951352179906577773L; - private int polyLineFigureSerializedDataVersion = 1; - - public PolyLineFigure() { - this(4); - } - - public PolyLineFigure(int size) { - fPoints = CollectionsFactory.current().createList(size); - } - - public PolyLineFigure(int x, int y) { - fPoints = CollectionsFactory.current().createList(); - fPoints.add(new Point(x, y)); - } - - public Rectangle displayBox() { - Iterator iter = points(); - if (iter.hasNext()) { - // avoid starting with origin 0,0 because that would lead to a too large rectangle - Rectangle r = new Rectangle((Point)iter.next()); - - while (iter.hasNext()) { - r.add((Point)iter.next()); - } - - return r; - } - else { - return new Rectangle(); - } - } - - public boolean isEmpty() { - return (size().width < 3) && (size().height < 3); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(fPoints.size()); - for (int i = 0; i < fPoints.size(); i++) { - handles.add(new PolyLineHandle(this, locator(i), i)); - } - return new HandleEnumerator(handles); - } - - public void basicDisplayBox(Point origin, Point corner) { - } - - /** - * Adds a node to the list of points. - */ - public void addPoint(int x, int y) { - fPoints.add(new Point(x, y)); - changed(); - } - - public Iterator points() { - return fPoints.iterator(); - } - - public int pointCount() { - return fPoints.size(); - } - - protected void basicMoveBy(int dx, int dy) { - Iterator iter = points(); - while (iter.hasNext()) { - ((Point)iter.next()).translate(dx, dy); - } - } - - /** - * Changes the position of a node. - */ - public void setPointAt(Point p, int i) { - willChange(); - fPoints.set(i, p); - changed(); - } - - /** - * Insert a node at the given point. - */ - public void insertPointAt(Point p, int i) { - fPoints.add(i, p); - changed(); - } - - public void removePointAt(int i) { - willChange(); - fPoints.remove(i); - changed(); - } - - /** - * Splits the segment at the given point if a segment was hit. - * @return the index of the segment or -1 if no segment was hit. - */ - public int splitSegment(int x, int y) { - int i = findSegment(x, y); - if (i != -1) { - insertPointAt(new Point(x, y), i+1); - } - return i+1; - } - - public Point pointAt(int i) { - return (Point)fPoints.get(i); - } - - /** - * Joins to segments into one if the given point hits a node - * of the polyline. - * @return true if the two segments were joined. - */ - public boolean joinSegments(int x, int y) { - for (int i= 1; i < fPoints.size()-1; i++) { - Point p = pointAt(i); - if (Geom.length(x, y, p.x, p.y) < 3) { - removePointAt(i); - return true; - } - } - return false; - } - - public Connector connectorAt(int x, int y) { - return new PolyLineConnector(this); - } - - /** - * Sets the start decoration. - */ - public void setStartDecoration(LineDecoration l) { - fStartDecoration = l; - } - - /** - * Returns the start decoration. - */ - public LineDecoration getStartDecoration() { - return fStartDecoration; - } - - /** - * Sets the end decoration. - */ - public void setEndDecoration(LineDecoration l) { - fEndDecoration = l; - } - - /** - * Returns the end decoration. - */ - public LineDecoration getEndDecoration() { - return fEndDecoration; - } - - public void draw(Graphics g) { - g.setColor(getFrameColor()); - Point p1, p2; - for (int i = 0; i < fPoints.size()-1; i++) { - p1 = pointAt(i); - p2 = pointAt(i+1); - drawLine(g, p1.x, p1.y, p2.x, p2.y); - } - decorate(g); - } - - /** - * Can be overriden in subclasses to draw different types of lines - * (e.g. dotted lines) - */ - protected void drawLine(Graphics g, int x1, int y1, int x2, int y2) { - g.drawLine(x1, y1, x2, y2); - } - - public boolean containsPoint(int x, int y) { - Rectangle bounds = displayBox(); - bounds.grow(4,4); - if (!bounds.contains(x, y)) { - return false; - } - - for (int i = 0; i < fPoints.size()-1; i++) { - Point p1 = pointAt(i); - Point p2 = pointAt(i+1); - if (Geom.lineContainsPoint(p1.x, p1.y, p2.x, p2.y, x, y)) { - return true; - } - } - return false; - } - - /** - * Gets the segment of the polyline that is hit by - * the given point. - * @return the index of the segment or -1 if no segment was hit. - */ - public int findSegment(int x, int y) { - for (int i = 0; i < fPoints.size()-1; i++) { - Point p1 = pointAt(i); - Point p2 = pointAt(i+1); - if (Geom.lineContainsPoint(p1.x, p1.y, p2.x, p2.y, x, y)) { - return i; - } - } - return -1; - } - - private void decorate(Graphics g) { - if (getStartDecoration() != null) { - Point p1 = pointAt(0); - Point p2 = pointAt(1); - getStartDecoration().draw(g, p1.x, p1.y, p2.x, p2.y); - } - if (getEndDecoration() != null) { - Point p3 = pointAt(fPoints.size()-2); - Point p4 = pointAt(fPoints.size()-1); - getEndDecoration().draw(g, p4.x, p4.y, p3.x, p3.y); - } - } - - /** - * Gets the attribute with the given name. - * PolyLineFigure maps "ArrowMode"to a - * line decoration. - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return getAttribute(FigureAttributeConstant.getConstant(name)); - } - - /** - * Gets the attribute with the given name. - * PolyLineFigure maps "ArrowMode"to a - * line decoration. - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - if (attributeConstant.equals(FigureAttributeConstant.FRAME_COLOR)) { - return getFrameColor(); - } - else if (attributeConstant.equals(FigureAttributeConstant.ARROW_MODE)) { - int value = 0; - if (getStartDecoration() != null) { - value |= ARROW_TIP_START; - } - if (getEndDecoration() != null) { - value |= ARROW_TIP_END; - } - return new Integer(value); - } - return super.getAttribute(attributeConstant); - } - - /** - * Sets the attribute with the given name. - * PolyLineFigure interprets "ArrowMode"to set - * the line decoration. - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - setAttribute(FigureAttributeConstant.getConstant(name), value); - } - - /** - * Sets the attribute with the given name. - * PolyLineFigure interprets "ArrowMode"to set - * the line decoration. - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - if (attributeConstant.equals(FigureAttributeConstant.FRAME_COLOR)) { - setFrameColor((Color)value); - changed(); - } - else if (attributeConstant.equals(FigureAttributeConstant.ARROW_MODE)) { - Integer intObj = (Integer)value; - if (intObj != null) { - int decoration = intObj.intValue(); - if ((decoration & ARROW_TIP_START) != 0) { - setStartDecoration(new ArrowTip()); - } - else { - setStartDecoration(null); - } - if ((decoration & ARROW_TIP_END) != 0) { - setEndDecoration(new ArrowTip()); - } - else { - setEndDecoration(null); - } - } - changed(); - } - else { - super.setAttribute(attributeConstant, value); - } - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fPoints.size()); - Iterator iter = points(); - while (iter.hasNext()) { - Point p = (Point)iter.next(); - dw.writeInt(p.x); - dw.writeInt(p.y); - } - dw.writeStorable(fStartDecoration); - dw.writeStorable(fEndDecoration); - dw.writeColor(fFrameColor); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - int size = dr.readInt(); - fPoints = CollectionsFactory.current().createList(size); - for (int i=0; i<size; i++) { - int x = dr.readInt(); - int y = dr.readInt(); - fPoints.add(new Point(x,y)); - } - setStartDecoration((LineDecoration)dr.readStorable()); - setEndDecoration((LineDecoration)dr.readStorable()); - fFrameColor = dr.readColor(); - } - - /** - * Creates a locator for the point with the given index. - */ - public static Locator locator(int pointIndex) { - return new PolyLineLocator(pointIndex); - } - - protected Color getFrameColor() { - return fFrameColor; - } - - protected void setFrameColor(Color c) { - fFrameColor = c; - } - - /** - * Hook method to change the rectangle that will be invalidated - */ - protected Rectangle invalidateRectangle(Rectangle r) { - // SF-bug id: 533953: provide this method to customize invalidated rectangle - Rectangle parentR = super.invalidateRectangle(r); - if (getStartDecoration() != null) { - parentR.add(getStartDecoration().displayBox()); - } - if (getEndDecoration() != null) { - parentR.add(getEndDecoration().displayBox()); - } - return parentR; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/PolyLineHandle.java b/JHotDraw/src/CH/ifa/draw/figures/PolyLineHandle.java deleted file mode 100644 index 86e5d2d85..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/PolyLineHandle.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)PolyLineHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.LocatorHandle; -import CH.ifa.draw.standard.SingleFigureEnumerator; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.UndoableAdapter; -import java.awt.*; - -/** - * A handle for a node on the polyline. - * - * @version <$CURRENT_VERSION$> - */ -public class PolyLineHandle extends LocatorHandle { - - private int fIndex; - - /** - * Constructs a poly line handle. - * @param owner the owning polyline figure. - * @param l the locator - * @param index the index of the node associated with this handle. - */ - public PolyLineHandle(PolyLineFigure owner, Locator l, int index) { - super(owner, l); - fIndex = index; - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view, fIndex)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - ((PolyLineHandle.UndoActivity)getUndoActivity()).setOldPoint(new Point(x,y)); - } - - public void invokeStep(int x, int y, int anchorX, int anchorY, DrawingView view) { - int currentIndex = ((PolyLineHandle.UndoActivity)getUndoActivity()).getPointIndex(); - myOwner().setPointAt(new Point(x, y), currentIndex); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - if ((x == anchorX) && (y == anchorY)) { - setUndoActivity(null); - } - } - - private PolyLineFigure myOwner() { - return (PolyLineFigure)owner(); - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView, int newPointIndex) { - return new PolyLineHandle.UndoActivity(newView, newPointIndex); - } - - public static class UndoActivity extends UndoableAdapter { - private Point myOldPoint; - private int myPointIndex; - - public UndoActivity(DrawingView newView, int newPointIndex) { - super(newView); - setUndoable(true); - setRedoable(true); - setPointIndex(newPointIndex); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return movePointToOldLocation(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return movePointToOldLocation(); - } - - protected boolean movePointToOldLocation() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - - PolyLineFigure figure = (PolyLineFigure)fe.nextFigure(); - Point backupPoint = figure.pointAt(getPointIndex()); - figure.setPointAt(getOldPoint(), getPointIndex()); - setOldPoint(backupPoint); - return true; - } - - public void setOldPoint(Point newOldPoint) { - myOldPoint = newOldPoint; - } - - public Point getOldPoint() { - return myOldPoint; - } - - public void setPointIndex(int newPointIndex) { - myPointIndex = newPointIndex; - } - - public int getPointIndex() { - return myPointIndex; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/PolyLineLocator.java b/JHotDraw/src/CH/ifa/draw/figures/PolyLineLocator.java deleted file mode 100644 index b01e27768..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/PolyLineLocator.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * @(#)PolyLineLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; - -/** - * A poly line figure consists of a list of points. - * It has an optional line decoration at the start and end. - * - * @see LineDecoration - * - * @version <$CURRENT_VERSION$> - */ -class PolyLineLocator extends AbstractLocator { - int fIndex; - - public PolyLineLocator(int index) { - fIndex = index; - } - - public Point locate(Figure owner) { - PolyLineFigure plf = (PolyLineFigure)owner; - // guard against changing PolyLineFigures -> temporary hack - if (fIndex < plf.pointCount()) { - return ((PolyLineFigure)owner).pointAt(fIndex); - } - return new Point(0, 0); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/RadiusHandle.java b/JHotDraw/src/CH/ifa/draw/figures/RadiusHandle.java deleted file mode 100644 index 95fc8854b..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/RadiusHandle.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * @(#)RadiusHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Geom; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.UndoableAdapter; -import java.awt.*; - -/** - * A Handle to manipulate the radius of a round corner rectangle. - * - * @version <$CURRENT_VERSION$> - */ -class RadiusHandle extends AbstractHandle { - - private static final int OFFSET = 4; - - public RadiusHandle(RoundRectangleFigure owner) { - super(owner); - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - ((RadiusHandle.UndoActivity)getUndoActivity()). - setOldRadius(((RoundRectangleFigure)owner()).getArc()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - int dx = x-anchorX; - int dy = y-anchorY; - RoundRectangleFigure owner = (RoundRectangleFigure)owner(); - Rectangle r = owner.displayBox(); - Point originalRadius = ((RadiusHandle.UndoActivity)getUndoActivity()).getOldRadius(); - int rx = Geom.range(0, r.width, 2*(originalRadius.x/2 + dx)); - int ry = Geom.range(0, r.height, 2*(originalRadius.y/2 + dy)); - owner.setArc(rx, ry); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - Point currentRadius = ((RoundRectangleFigure)owner()).getArc(); - Point originalRadius = ((RadiusHandle.UndoActivity)getUndoActivity()).getOldRadius(); - // there has been no change so there is nothing to undo - if ((currentRadius.x == originalRadius.x) && (currentRadius.y == originalRadius.y)) { - setUndoActivity(null); - } - } - - public Point locate() { - RoundRectangleFigure owner = (RoundRectangleFigure)owner(); - Point radius = owner.getArc(); - Rectangle r = owner.displayBox(); - return new Point(r.x+radius.x/2+OFFSET, r.y+radius.y/2+OFFSET); - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new RadiusHandle.UndoActivity(newView); - } - - public static class UndoActivity extends UndoableAdapter { - private Point myOldRadius; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return resetRadius(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return resetRadius(); - } - - protected boolean resetRadius() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - RoundRectangleFigure currentFigure = (RoundRectangleFigure)fe.nextFigure(); - Point figureRadius = currentFigure.getArc(); - currentFigure.setArc(getOldRadius().x, getOldRadius().y); - setOldRadius(figureRadius); - return true; - } - - protected void setOldRadius(Point newOldRadius) { - myOldRadius = newOldRadius; - } - - public Point getOldRadius() { - return myOldRadius; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/RectangleFigure.java b/JHotDraw/src/CH/ifa/draw/figures/RectangleFigure.java deleted file mode 100644 index f9cecb1d7..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/RectangleFigure.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * @(#)RectangleFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import java.io.IOException; -import java.util.List; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.HandleEnumeration; - - -/** - * A rectangle figure. - * - * @version <$CURRENT_VERSION$> - */ -public class RectangleFigure extends AttributeFigure { - - private Rectangle fDisplayBox; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 184722075881789163L; - private int rectangleFigureSerializedDataVersion = 1; - - public RectangleFigure() { - this(new Point(0,0), new Point(0,0)); - } - - public RectangleFigure(Point origin, Point corner) { - basicDisplayBox(origin,corner); - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x,y); - } - - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - g.fillRect(r.x, r.y, r.width, r.height); - } - - public void drawFrame(Graphics g) { - Rectangle r = displayBox(); - g.drawRect(r.x, r.y, r.width-1, r.height-1); - } - - //-- store / load ---------------------------------------------- - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/RoundRectangleFigure.java b/JHotDraw/src/CH/ifa/draw/figures/RoundRectangleFigure.java deleted file mode 100644 index ef0047bca..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/RoundRectangleFigure.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * @(#)RoundRectangleFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import java.awt.*; -import java.io.IOException; -import java.util.List; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - - -/** - * A round rectangle figure. - * - * @see RadiusHandle - * - * @version <$CURRENT_VERSION$> - */ -public class RoundRectangleFigure extends AttributeFigure { - - private Rectangle fDisplayBox; - private int fArcWidth; - private int fArcHeight; - private static final int DEFAULT_ARC = 8; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 7907900248924036885L; - private int roundRectangleSerializedDataVersion = 1; - - public RoundRectangleFigure() { - this(new Point(0,0), new Point(0,0)); - fArcWidth = fArcHeight = DEFAULT_ARC; - } - - public RoundRectangleFigure(Point origin, Point corner) { - basicDisplayBox(origin,corner); - fArcWidth = fArcHeight = DEFAULT_ARC; - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - } - - /** - * Sets the arc's witdh and height. - */ - public void setArc(int width, int height) { - willChange(); - fArcWidth = width; - fArcHeight = height; - changed(); - } - - /** - * Gets the arc's width and height. - */ - public Point getArc() { - return new Point(fArcWidth, fArcHeight); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - - handles.add(new RadiusHandle(this)); - - return new HandleEnumerator(handles); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x,y); - } - - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - /* - * JP, 25-May-03: Changed from (width-1, height-1) to (width, height), - * because figures were not filled completely (JDK 1.4.x). Might invalidate - * fix for #661878. If the problem is JDK-dependant, maybe the JDK version - * should be taken into account here? - */ - g.fillRoundRect(r.x, r.y, r.width, r.height, fArcWidth, fArcHeight); - } - - public void drawFrame(Graphics g) { - Rectangle r = displayBox(); - g.drawRoundRect(r.x, r.y, r.width-1, r.height-1, fArcWidth, fArcHeight); - } - - public Insets connectionInsets() { - return new Insets(fArcHeight/2, fArcWidth/2, fArcHeight/2, fArcWidth/2); - } - - public Connector connectorAt(int x, int y) { - return new ShortestDistanceConnector(this); // just for demo purposes - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - dw.writeInt(fArcWidth); - dw.writeInt(fArcHeight); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - fArcWidth = dr.readInt(); - fArcHeight = dr.readInt(); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/ScribbleTool.java b/JHotDraw/src/CH/ifa/draw/figures/ScribbleTool.java deleted file mode 100644 index 6a24dc2e7..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/ScribbleTool.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * @(#)ScribbleTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Undoable; -import java.awt.event.MouseEvent; - -/** - * Tool to scribble a PolyLineFigure - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public class ScribbleTool extends AbstractTool { - - private PolyLineFigure fScribble; - private int fLastX, fLastY; - - /** - * the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - private Figure myAddedFigure; - - public ScribbleTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - public void activate() { - super.activate(); - } - - public void deactivate() { - super.deactivate(); - if (fScribble != null) { - if (fScribble.size().width < 4 || fScribble.size().height < 4) { - getActiveDrawing().remove(fScribble); - // nothing to undo - setUndoActivity(null); - } - fScribble = null; - } - } - - private void point(int x, int y) { - if (fScribble == null) { - fScribble = new PolyLineFigure(x, y); - setAddedFigure(view().add(fScribble)); - } - else if (fLastX != x || fLastY != y) { - fScribble.addPoint(x, y); - } - - fLastX = x; - fLastY = y; - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - if (e.getClickCount() >= 2) { - // use undo activity from paste command... - setUndoActivity(createUndoActivity()); - - // put created figure into a figure enumeration - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(getAddedFigure())); - } - else { - // use original event coordinates to avoid - // supress that the scribble is constrained to - // the grid - point(e.getX(), e.getY()); - } - } - - public void mouseDrag(MouseEvent e, int x, int y) { - if (fScribble != null) { - point(e.getX(), e.getY()); - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - super.mouseUp(e, x, y); - // deactivate tool only when mouseUp was also fired - if (e.getClickCount() >= 2) { - editor().toolDone(); - } - } - - /** - * Gets the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - protected Figure getAddedFigure() { - return myAddedFigure; - } - - private void setAddedFigure(Figure newAddedFigure) { - myAddedFigure = newAddedFigure; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/ShortestDistanceConnector.java b/JHotDraw/src/CH/ifa/draw/figures/ShortestDistanceConnector.java deleted file mode 100644 index bccea66ac..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/ShortestDistanceConnector.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * @(#)ShortestDistanceConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Geom; -import java.awt.*; - -/** - * A ShortestDistance locates connection points by - * finding the shortest distance between the start and - * end of the connection. - * It doesn't connect to the areas defined by Figure.connectionInsets() - * - * @see Figure#connectionInsets - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ -public class ShortestDistanceConnector extends AbstractConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -2273446020593433887L; - - public ShortestDistanceConnector() { // only used for Storable implementation - super(); - } - - public ShortestDistanceConnector(Figure owner) { - super(owner); - } - - public Point findStart(ConnectionFigure connection) { - return findPoint(connection, true); - } - - public Point findEnd(ConnectionFigure connection) { - return findPoint(connection, false); - } - - protected Point findPoint(ConnectionFigure connection, boolean getStart) { - Figure startFigure = connection.getStartConnector().owner(); - Figure endFigure = connection.getEndConnector().owner(); - - Rectangle r1 = startFigure.displayBox(); - Rectangle r2 = endFigure.displayBox(); - - Insets i1 = startFigure.connectionInsets(); - Insets i2 = endFigure.connectionInsets(); - - Point p1, p2; - Point start = null, end = null, s = null, e = null; - long len2 = Long.MAX_VALUE, l2; - int x1, x2, y1, y2; // connection points - int xmin, xmax, ymin, ymax; - - // X-dimension - // constrain width connection insets - int r1x, r1width, r2x, r2width, r1y, r1height, r2y, r2height; - r1x = r1.x + i1.left; - r1width = r1.width - i1.left - i1.right-1; - r2x = r2.x + i2.left; - r2width = r2.width - i2.left - i2.right-1; - - // find x connection point - if (r1x + r1width < r2x) { - x1 = r1x + r1width; - x2 = r2x; - } - else if (r1x > r2x + r2width) { - x1 = r1x; - x2 = r2x + r2width; - } - else { - xmax = Math.max(r1x, r2x); - xmin = Math.min(r1x+r1width, r2x+r2width); - x1 = x2 = (xmax + xmin) /2; - } - - // Y-Dimension - // constrain with connection insets - r1y = r1.y + i1.top; - r1height = r1.height - i1.top - i1.bottom-1; - r2y = r2.y + i2.top; - r2height = r2.height - i2.top - i2.bottom-1; - - // y connection point - if (r1y + r1height < r2y) { - y1 = r1y + r1height; - y2 = r2y; - } - else if (r1y > r2y + r2height) { - y1 = r1y; - y2 = r2y + r2height; - } - else { - ymax = Math.max(r1y, r2y); - ymin = Math.min(r1y+r1height, r2y+r2height); - y1 = y2 = (ymax + ymin) /2; - } - // find shortest connection - for (int i = 0; i < 4; i++) { - switch(i) { - case 0: - // EAST-WEST - p1 = Geom.east(r1); - p2 = Geom.west(r2); - s = new Point(p1.x, y1); - e = new Point(p2.x, y2); - break; - case 1: - // WEST-EAST - p1 = Geom.west(r1); - p2 = Geom.east(r2); - s = new Point(p1.x, y1); - e = new Point(p2.x, y2); - break; - case 2: - // NORTH-SOUTH - p1 = Geom.north(r1); - p2 = Geom.south(r2); - s = new Point(x1, p1.y); - e = new Point(x2, p2.y); - break; - case 3: - // SOUTH-NORTH - p1 = Geom.south(r1); - p2 = Geom.north(r2); - s = new Point(x1, p1.y); - e = new Point(x2, p2.y); - break; - } - l2 = Geom.length2(s.x, s.y, e.x, e.y); - if (l2 < len2) { - start = s; - end = e; - len2 = l2; - } - } - if (getStart) { - return start; - } - return end; - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/figures/TextFigure.java b/JHotDraw/src/CH/ifa/draw/figures/TextFigure.java deleted file mode 100644 index 3da10c69e..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/TextFigure.java +++ /dev/null @@ -1,509 +0,0 @@ -/* - * @(#)TextFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.CollectionsFactory; -import CH.ifa.draw.util.ColorMap; -import CH.ifa.draw.util.StorableInput; -import CH.ifa.draw.util.StorableOutput; - -import java.awt.*; -import java.io.*; -import java.util.List; - -/** - * A text figure. - * - * @see TextTool - * - * @version <$CURRENT_VERSION$> - */ -public class TextFigure - extends AttributeFigure - implements FigureChangeListener, TextHolder { - - private int fOriginX; - private int fOriginY; - - // cache of the TextFigure's size - transient private boolean fSizeIsDirty = true; - transient private int fWidth; - transient private int fHeight; - - private String fText; - private Font fFont; - private boolean fIsReadOnly; - - private Figure fObservedFigure = null; - private OffsetLocator fLocator = null; - - private static String fgCurrentFontName = "Helvetica"; - private static int fgCurrentFontSize = 12; - private static int fgCurrentFontStyle = Font.PLAIN; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 4599820785949456124L; - private int textFigureSerializedDataVersion = 1; - - public TextFigure() { - fOriginX = 0; - fOriginY = 0; - fFont = createCurrentFont(); - setAttribute(FigureAttributeConstant.FILL_COLOR, ColorMap.color("None")); - fText = ""; - fSizeIsDirty = true; - } - - /** - * @see CH.ifa.draw.framework.Figure#moveBy(int, int) - */ - public void moveBy(int x, int y) { - willChange(); - basicMoveBy(x, y); - if (getLocator() != null) { - getLocator().moveBy(x, y); - } - changed(); - } - - protected void basicMoveBy(int x, int y) { - fOriginX += x; - fOriginY += y; - } - - /** - * @see CH.ifa.draw.framework.Figure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - public void basicDisplayBox(Point newOrigin, Point newCorner) { - fOriginX = newOrigin.x; - fOriginY = newOrigin.y; - } - - /** - * @see CH.ifa.draw.framework.Figure#displayBox() - */ - public Rectangle displayBox() { - Dimension extent = textExtent(); - return new Rectangle(fOriginX, fOriginY, extent.width, extent.height); - } - - /** - * @see CH.ifa.draw.standard.TextHolder#textDisplayBox() - */ - public Rectangle textDisplayBox() { - return displayBox(); - } - - /** - * Tests whether this figure is read only. - */ - public boolean readOnly() { - return fIsReadOnly; - } - - /** - * Sets the read only status of the text figure. - */ - public void setReadOnly(boolean isReadOnly) { - fIsReadOnly = isReadOnly; - } - - /** - * Gets the font. - * @see CH.ifa.draw.standard.TextHolder#getFont() - */ - public Font getFont() { - return fFont; - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - * @see CH.ifa.draw.standard.TextHolder#getRepresentingFigure() - */ - public Figure getRepresentingFigure() { - return this; - } - - /** - * Sets the font. - */ - public void setFont(Font newFont) { - willChange(); - fFont = newFont; - markDirty(); - changed(); - } - - /** - * Updates the location whenever the figure changes itself. - * @see CH.ifa.draw.framework.Figure#changed() - */ - public void changed() { - super.changed(); - //updateLocation(); - } - - /** - * A text figure understands the "FontSize", "FontStyle", and "FontName" - * attributes. - * - * @see CH.ifa.draw.framework.Figure#getAttribute(java.lang.String) - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return getAttribute(FigureAttributeConstant.getConstant(name)); - } - - /** - * A text figure understands the "FontSize", "FontStyle", and "FontName" - * attributes. - * @see CH.ifa.draw.framework.Figure#getAttribute(CH.ifa.draw.framework.FigureAttributeConstant) - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - Font font = getFont(); - if (attributeConstant.equals(FigureAttributeConstant.FONT_SIZE)) { - return new Integer(font.getSize()); - } - if (attributeConstant.equals(FigureAttributeConstant.FONT_STYLE)) { - return new Integer(font.getStyle()); - } - if (attributeConstant.equals(FigureAttributeConstant.FONT_NAME)) { - return font.getName(); - } - return super.getAttribute(attributeConstant); - } - - /** - * A text figure understands the "FontSize", "FontStyle", and "FontName" - * attributes. - * - * @see CH.ifa.draw.framework.Figure#setAttribute(java.lang.String, java.lang.Object) - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - setAttribute(FigureAttributeConstant.getConstant(name), value); - } - - /** - * A text figure understands the "FontSize", "FontStyle", and "FontName" - * attributes. - * @see CH.ifa.draw.framework.Figure#setAttribute(CH.ifa.draw.framework.FigureAttributeConstant, java.lang.Object) - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - Font font = getFont(); - if (attributeConstant.equals(FigureAttributeConstant.FONT_SIZE)) { - Integer s = (Integer) value; - setFont(new Font(font.getName(), font.getStyle(), s.intValue())); - } - else if (attributeConstant.equals(FigureAttributeConstant.FONT_STYLE)) { - Integer s = (Integer) value; - int style = font.getStyle(); - if (s.intValue() == Font.PLAIN) { - style = Font.PLAIN; - } - else { - style = style ^ s.intValue(); - } - setFont(new Font(font.getName(), style, font.getSize())); - } - else if (attributeConstant.equals(FigureAttributeConstant.FONT_NAME)) { - String n = (String) value; - setFont(new Font(n, font.getStyle(), font.getSize())); - } - else { - super.setAttribute(attributeConstant, value); - } - } - - /** - * Gets the text shown by the text figure. - * @see CH.ifa.draw.standard.TextHolder#getText() - */ - public String getText() { - return fText; - } - - /** - * Sets the text shown by the text figure. - * @see CH.ifa.draw.standard.TextHolder#setText(java.lang.String) - */ - public void setText(String newText) { - if (newText == null || !newText.equals(fText)) { - willChange(); - fText = newText; - markDirty(); - changed(); - } - } - - /** - * Tests whether the figure accepts typing. - * @see CH.ifa.draw.standard.TextHolder#acceptsTyping() - */ - public boolean acceptsTyping() { - return !fIsReadOnly; - } - - /** - * @see CH.ifa.draw.figures.AttributeFigure#drawBackground(java.awt.Graphics) - */ - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - g.fillRect(r.x, r.y, r.width, r.height); - } - - /** - * @see CH.ifa.draw.figures.AttributeFigure#drawFrame(java.awt.Graphics) - */ - public void drawFrame(Graphics g) { - g.setFont(fFont); - g.setColor((Color) getAttribute(FigureAttributeConstant.TEXT_COLOR)); - FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(fFont); - Rectangle r = displayBox(); - g.drawString(getText(), r.x, r.y + metrics.getAscent()); - } - - protected Dimension textExtent() { - if (!fSizeIsDirty) { - return new Dimension(fWidth, fHeight); - } - FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(fFont); - fWidth = metrics.stringWidth(getText()); - fHeight = metrics.getHeight(); - fSizeIsDirty = false; - return new Dimension(fWidth, fHeight); - } - - protected void markDirty() { - fSizeIsDirty = true; - } - - /** - * Gets the number of columns to be overlaid when the figure is edited. - * @see CH.ifa.draw.standard.TextHolder#overlayColumns() - */ - public int overlayColumns() { - int length = getText().length(); - int columns = 20; - if (length != 0) { - columns = getText().length() + 3; - } - return columns; - } - - /** - * @see CH.ifa.draw.framework.Figure#handles() - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - handles.add(new NullHandle(this, RelativeLocator.northWest())); - handles.add(new NullHandle(this, RelativeLocator.northEast())); - handles.add(new NullHandle(this, RelativeLocator.southEast())); - handles.add(new FontSizeHandle(this, RelativeLocator.southWest())); - return new HandleEnumerator(handles); - } - - /** - * @see CH.ifa.draw.util.Storable#write(CH.ifa.draw.util.StorableOutput) - */ - public void write(StorableOutput dw) { - super.write(dw); - Rectangle r = displayBox(); - dw.writeInt(r.x); - dw.writeInt(r.y); - dw.writeString(getText()); - dw.writeString(fFont.getName()); - dw.writeInt(fFont.getStyle()); - dw.writeInt(fFont.getSize()); - dw.writeBoolean(fIsReadOnly); - dw.writeStorable(getObservedFigure()); - dw.writeStorable(getLocator()); - } - - /** - * @see CH.ifa.draw.util.Storable#read(CH.ifa.draw.util.StorableInput) - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - markDirty(); - basicDisplayBox(new Point(dr.readInt(), dr.readInt()), null); - setText(dr.readString()); - fFont = new Font(dr.readString(), dr.readInt(), dr.readInt()); - fIsReadOnly = dr.readBoolean(); - - setObservedFigure((Figure) dr.readStorable()); - if (getObservedFigure() != null) { - getObservedFigure().addFigureChangeListener(this); - } - setLocator((OffsetLocator) dr.readStorable()); - } - - private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException { - s.defaultReadObject(); - - if (getObservedFigure() != null) { - getObservedFigure().addFigureChangeListener(this); - } - markDirty(); - } - - /** - * @see CH.ifa.draw.standard.TextHolder#connect(CH.ifa.draw.framework.Figure) - */ - public void connect(Figure figure) { - if (getObservedFigure() != null) { - getObservedFigure().removeFigureChangeListener(this); - } - - setObservedFigure(figure); - setLocator(new OffsetLocator(getObservedFigure().connectedTextLocator(this))); - getObservedFigure().addFigureChangeListener(this); - willChange(); - updateLocation(); - changed(); - } - - /** - * @see CH.ifa.draw.framework.FigureChangeListener#figureChanged(CH.ifa.draw.framework.FigureChangeEvent) - */ - public void figureChanged(FigureChangeEvent e) { - willChange(); - updateLocation(); - changed(); - } - - /** - * @see CH.ifa.draw.framework.FigureChangeListener#figureRemoved(CH.ifa.draw.framework.FigureChangeEvent) - */ - public void figureRemoved(FigureChangeEvent e) { - if (listener() != null) { - Rectangle rect = invalidateRectangle(displayBox()); - listener().figureRemoved(new FigureChangeEvent(this, rect, e)); - } - } - - /** - * @see CH.ifa.draw.framework.FigureChangeListener#figureRequestRemove(CH.ifa.draw.framework.FigureChangeEvent) - */ - public void figureRequestRemove(FigureChangeEvent e) { - } - - /** - * @see CH.ifa.draw.framework.FigureChangeListener#figureInvalidated(CH.ifa.draw.framework.FigureChangeEvent) - */ - public void figureInvalidated(FigureChangeEvent e) { - } - - /** - * @see CH.ifa.draw.framework.FigureChangeListener#figureRequestUpdate(CH.ifa.draw.framework.FigureChangeEvent) - */ - public void figureRequestUpdate(FigureChangeEvent e) { - } - - /** - * Updates the location relative to the connected figure. - * The TextFigure is centered around the located point. - */ - protected void updateLocation() { - if (getLocator() != null) { - Point p = getLocator().locate(getObservedFigure()); - - p.x -= size().width / 2 + fOriginX; - p.y -= size().height / 2 + fOriginY; - if (p.x != 0 || p.y != 0) { - //willChange(); - basicMoveBy(p.x, p.y); - //changed(); - } - } - } - - /** - * @see CH.ifa.draw.framework.Figure#release() - */ - public void release() { - super.release(); - disconnect(getObservedFigure()); - } - - /** - * Disconnects a text holder from a connect figure. - * @see CH.ifa.draw.standard.TextHolder#disconnect(CH.ifa.draw.framework.Figure) - */ - public void disconnect(Figure disconnectFigure) { - if (disconnectFigure != null) { - disconnectFigure.removeFigureChangeListener(this); - } - setLocator(null); - setObservedFigure(null); - } - - protected void setObservedFigure(Figure newObservedFigure) { - fObservedFigure = newObservedFigure; - } - - public Figure getObservedFigure() { - return fObservedFigure; - } - - protected void setLocator(OffsetLocator newLocator) { - fLocator = newLocator; - } - - protected OffsetLocator getLocator() { - return fLocator; - } - - /** - * @see CH.ifa.draw.framework.Figure#getTextHolder() - */ - public TextHolder getTextHolder() { - return this; - } - - /** - * Creates the current font to be used for new text figures. - */ - static public Font createCurrentFont() { - return new Font(fgCurrentFontName, fgCurrentFontStyle, fgCurrentFontSize); - } - - /** - * Sets the current font name - */ - static public void setCurrentFontName(String name) { - fgCurrentFontName = name; - } - - /** - * Sets the current font size. - */ - static public void setCurrentFontSize(int size) { - fgCurrentFontSize = size; - } - - /** - * Sets the current font style. - */ - static public void setCurrentFontStyle(int style) { - fgCurrentFontStyle = style; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/figures/TextTool.java b/JHotDraw/src/CH/ifa/draw/figures/TextTool.java deleted file mode 100644 index af3ede003..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/TextTool.java +++ /dev/null @@ -1,303 +0,0 @@ -/* - * @(#)TextTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.FloatingTextField; -import CH.ifa.draw.util.UndoableAdapter; -import CH.ifa.draw.util.Undoable; -import java.awt.*; -import java.awt.event.*; - -/** - * Tool to create new or edit existing text figures. - * The editing behavior is implemented by overlaying the - * Figure providing the text with a FloatingTextField.<p> - * A tool interaction is done once a Figure that is not - * a TextHolder is clicked. - * - * @see TextHolder - * @see FloatingTextField - * - * @version <$CURRENT_VERSION$> - */ -public class TextTool extends CreationTool { - - private FloatingTextField myTextField; - private TextHolder myTypingTarget; - - /** - * The selected figure is different from the TextHolder as the TextHolder - * may be included in a DecoratorFigure. Thus, the DecoratorFigure is selected - * while the TextFigure is edited. - */ - private Figure mySelectedFigure; - - public TextTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - /** - * If the pressed figure is a TextHolder it can be edited otherwise - * a new text figure is created. - */ - public void mouseDown(MouseEvent e, int x, int y) - { - setView((DrawingView)e.getSource()); - - if (getTypingTarget() != null) { - editor().toolDone(); - return; - } - - TextHolder textHolder = null; - Figure pressedFigure = drawing().findFigureInside(x, y); - if (pressedFigure != null) { - textHolder = pressedFigure.getTextHolder(); - setSelectedFigure(pressedFigure); - } - - if ((textHolder != null) && textHolder.acceptsTyping()) { - // do not create a new TextFigure but edit existing one - beginEdit(textHolder); - } - else { - super.mouseDown(e, x, y); - // update view so the created figure is drawn before the floating text - // figure is overlaid. (Note, fDamage should be null in StandardDrawingView - // when the overlay figure is drawn because a JTextField cannot be scrolled) - view().checkDamage(); - beginEdit(getCreatedFigure().getTextHolder()); - } - } - - public void mouseDrag(MouseEvent e, int x, int y) { - } - - public void mouseUp(MouseEvent e, int x, int y) { - if (!isActive()) { - editor().toolDone(); - } - } - - /** - * Terminates the editing of a text figure. - */ - public void deactivate() { - endEdit(); - super.deactivate(); - } - - /** - * Sets the text cursor. - */ - public void activate() { - super.activate(); - // JDK1.1 TEXT_CURSOR has an incorrect hot spot - //view().setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); - } - - /** - * Test whether the text tool is currently activated and is displaying - * a overlay TextFigure for accepting input. - * - * @return true, if the text tool has a accepting target TextFigure for its input, false otherwise - */ - public boolean isActive() { - return (getTypingTarget() != null); - } - - protected void beginEdit(TextHolder figure) { - if (getFloatingTextField() == null) { - setFloatingTextField(createFloatingTextField()); - } - - if (figure != getTypingTarget() && getTypingTarget() != null) { - endEdit(); - } - - getFloatingTextField().createOverlay((Container)view(), figure.getFont()); - getFloatingTextField().setBounds(fieldBounds(figure), figure.getText()); - - setTypingTarget(figure); - } - - protected void endEdit() { - if (getTypingTarget() != null) { - if (getAddedFigure() != null) { - if (!isDeleteTextFigure()) { - // figure has been created and not immediately deleted - setUndoActivity(createPasteUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getAddedFigure()) - ); - getTypingTarget().setText(getFloatingTextField().getText()); - } - } - else if (isDeleteTextFigure()) { - // delete action - setUndoActivity(createDeleteUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getSelectedFigure()) - ); - // perform delete operation of DeleteCommand.UndoActivity - getUndoActivity().redo(); - } - else { - // put affected figure into a figure enumeration - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getTypingTarget().getRepresentingFigure())); - getTypingTarget().setText(getFloatingTextField().getText()); - ((TextTool.UndoActivity)getUndoActivity()).setBackupText(getTypingTarget().getText()); - } - - setTypingTarget(null); - getFloatingTextField().endOverlay(); - } - else { - setUndoActivity(null); - } - setAddedFigure(null); - setCreatedFigure(null); - setSelectedFigure(null); - } - - protected boolean isDeleteTextFigure() { - return getFloatingTextField().getText().length() == 0; - } - - private Rectangle fieldBounds(TextHolder figure) { - Rectangle box = figure.textDisplayBox(); - int nChars = figure.overlayColumns(); - Dimension d = getFloatingTextField().getPreferredSize(nChars); - return new Rectangle(box.x, box.y, d.width, d.height); - } - - protected void setTypingTarget(TextHolder newTypingTarget) { - myTypingTarget = newTypingTarget; - } - - protected TextHolder getTypingTarget() { - return myTypingTarget; - } - - private void setSelectedFigure(Figure newSelectedFigure) { - mySelectedFigure = newSelectedFigure; - } - - protected Figure getSelectedFigure() { - return mySelectedFigure; - } - - private FloatingTextField createFloatingTextField() { - return new FloatingTextField(); - } - - private void setFloatingTextField(FloatingTextField newFloatingTextField) { - myTextField = newFloatingTextField; - } - - protected FloatingTextField getFloatingTextField() { - return myTextField; - } - - protected Undoable createDeleteUndoActivity() { - FigureTransferCommand cmd = new DeleteCommand("Delete", editor()); - return new DeleteCommand.UndoActivity(cmd); - } - - protected Undoable createPasteUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new TextTool.UndoActivity(view(), getTypingTarget().getText()); - } - - public static class UndoActivity extends UndoableAdapter { - private String myOriginalText; - private String myBackupText; - - public UndoActivity(DrawingView newDrawingView, String newOriginalText) { - super(newDrawingView); - setOriginalText(newOriginalText); - setUndoable(true); - setRedoable(true); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - - getDrawingView().clearSelection(); - setText(getOriginalText()); - - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - - getDrawingView().clearSelection(); - setText(getBackupText()); - - return true; - } - - protected boolean isValidText(String toBeChecked) { - return ((toBeChecked != null) && (toBeChecked.length() > 0)); - } - - protected void setText(String newText) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - currentFigure.getTextHolder().setText(newText); - } - } - } - - public void setBackupText(String newBackupText) { - myBackupText = newBackupText; - } - - public String getBackupText() { - return myBackupText; - } - - public void setOriginalText(String newOriginalText) { - myOriginalText = newOriginalText; - } - - public String getOriginalText() { - return myOriginalText; - } - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/figures/UngroupCommand.java b/JHotDraw/src/CH/ifa/draw/figures/UngroupCommand.java deleted file mode 100644 index d204a0d04..000000000 --- a/JHotDraw/src/CH/ifa/draw/figures/UngroupCommand.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * @(#)UngroupCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.figures; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.UndoableAdapter; -import CH.ifa.draw.util.Undoable; - -/** - * Command to ungroup the selected figures. - * - * @see GroupCommand - * - * @version <$CURRENT_VERSION$> - */ -public class UngroupCommand extends AbstractCommand { - - /** - * Constructs a group command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public UngroupCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - // selection of group figures - getUndoActivity().setAffectedFigures(view().selection()); - view().clearSelection(); - - ((UngroupCommand.UndoActivity)getUndoActivity()).ungroupFigures(); - view().checkDamage(); - } - - public boolean isExecutableWithView() { - FigureEnumeration fe = view().selection(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - currentFigure = currentFigure.getDecoratedFigure(); - - if (!(currentFigure instanceof GroupFigure)) { - return false; - } - } - - return view().selectionCount() > 0; - - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new UngroupCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - getDrawingView().clearSelection(); - - FigureEnumeration groupFigures = getAffectedFigures(); - while (groupFigures.hasNextFigure()) { - Figure groupFigure = groupFigures.nextFigure(); - // orphan individual figures from the group - getDrawingView().drawing().orphanAll(groupFigure.figures()); - - Figure figure = getDrawingView().drawing().add(groupFigure); - getDrawingView().addToSelection(figure); - } - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - getDrawingView().drawing().orphanAll(getAffectedFigures()); - getDrawingView().clearSelection(); - ungroupFigures(); - return true; - } - return false; - } - - protected void ungroupFigures() { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure selected = fe.nextFigure(); - Figure group = getDrawingView().drawing().orphan(selected); - - getDrawingView().drawing().addAll(group.figures()); - getDrawingView().addToSelectionAll(group.figures()); - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/framework.jdo b/JHotDraw/src/CH/ifa/draw/framework.jdo deleted file mode 100644 index 78221389f..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework.jdo +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="CH.ifa.draw.framework"> - <class name="Figure"> - </class> - <class name="FigureChangeListener"> - <extension vendor-name="FastObjects" key="implementation" value="java.lang.Object"/> - </class> - </package> -</jdo> diff --git a/JHotDraw/src/CH/ifa/draw/framework/ConnectionFigure.java b/JHotDraw/src/CH/ifa/draw/framework/ConnectionFigure.java deleted file mode 100644 index d85d8c5aa..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/ConnectionFigure.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * @(#)ConnectionFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.awt.Point; - -/** - * Figures to connect Connectors provided by Figures. - * A ConnectionFigure knows its start and end Connector. - * It uses the Connectors to locate its connection points.<p> - * A ConnectionFigure can have multiple segments. It provides - * operations to split and join segments. - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * Strategy is used encapsulate the algorithm to locate the connection point. - * ConnectionFigure is the Strategy context and Connector is the Strategy.<br> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld026.htm>Observer</a></b><br> - * Observer is used to track changes of the connected figures. A connection - * figure registers itself as listeners or observers of the source and - * target connector. - * <hr> - * - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ - -public interface ConnectionFigure extends Figure, FigureChangeListener { - - /** - * Sets the start Connector of the connection. - * @param start the start connector of the connection - */ - public void connectStart(Connector start); - - /** - * Sets the end Connector of the connection. - * @param end the end connector of the connection - */ - public void connectEnd(Connector end); - - /** - * Updates the connection - */ - public void updateConnection(); - - /** - * Disconnects the start figure from the dependent figure - */ - public void disconnectStart(); - - /** - * Disconnects the end figure from the dependent figure - */ - public void disconnectEnd(); - - /** - * Gets the start Connector - */ - public Connector getStartConnector(); - - /** - * Gets the end Connector. - */ - public Connector getEndConnector(); - - /** - * Checks if two figures can be connected. Implement this method - * to constrain the allowed connections between figures. - */ - public boolean canConnect(Figure start, Figure end); - - /** - * Checks if the ConnectionFigure connects the same figures. - */ - public boolean connectsSame(ConnectionFigure other); - - /** - * Sets the start point. - */ - public void startPoint(int x, int y); - - /** - * Sets the end point. - */ - public void endPoint(int x, int y); - - /** - * Gets the start point. - */ - public Point startPoint(); - - /** - * Gets the end point. - */ - public Point endPoint(); - - /** - * Sets the position of the point at the given position - */ - public void setPointAt(Point p, int index); - - /** - * Gets the Point at the given position - */ - public Point pointAt(int index); - - /** - * Gets the number of points or nodes of the connection - */ - public int pointCount(); - - /** - * Splits the hit segment. - * @param x the x position where the figure should be split - * @param y the y position where the figure should be split - * @return the index of the splitting point - */ - public int splitSegment(int x, int y); - - - /** - * Joins the hit segments. - * @param x the position where the figure should be joined. - * @param y the position where the figure should be joined. - * @return whether the segment was joined - */ - public boolean joinSegments(int x, int y); - - /** - * Gets the start figure of the connection. - */ - public Figure startFigure(); - - /** - * Gets the end figure of the connection. - */ - public Figure endFigure(); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/Connector.java b/JHotDraw/src/CH/ifa/draw/framework/Connector.java deleted file mode 100644 index 4c16b18fb..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/Connector.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * @(#)Connector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.awt.*; -import java.io.Serializable; - -import CH.ifa.draw.util.*; - -/** - * Connectors know how to locate a connection point on a figure. - * A Connector knows its owning figure and can determine either - * the start or the endpoint of a given connection figure. A connector - * has a display box that describes the area of a figure it is - * responsible for. A connector can be visible but it doesn't have - * to be.<br> - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld004.htm>Strategy</a></b><br> - * Connector implements the strategy to determine the connections points.<br> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld016.htm>Factory Method</a></b><br> - * Connectors are created by the Figure's factory method connectorAt. - * <hr> - * - * @see Figure#connectorAt - * @see ConnectionFigure - * - * @version <$CURRENT_VERSION$> - */ -public interface Connector extends Serializable, Storable { - - /** - * Finds the start point for the connection. - */ - public abstract Point findStart(ConnectionFigure connection); - - /** - * Finds the end point for the connection. - */ - public abstract Point findEnd(ConnectionFigure connection); - - /** - * Gets the connector's owner. - */ - public abstract Figure owner(); - - /** - * Gets the display box of the connector. - */ - public abstract Rectangle displayBox(); - - /** - * Tests if a point is contained in the connector. - */ - public abstract boolean containsPoint(int x, int y); - - /** - * Draws this connector. Connectors don't have to be visible - * and it is OK leave this method empty. - */ - public abstract void draw(Graphics g); - - /** - * Requests that the connector should show itself or hide itself. The - * ConnectionFigure which desires to connect to this Connector is passed in. - * If a connector should show itself it should do so when draw is called, if - * so desired. - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure courtingConnection); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/Cursor.java b/JHotDraw/src/CH/ifa/draw/framework/Cursor.java deleted file mode 100644 index 38500e16f..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/Cursor.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * @(#)Cursor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -/** - * This interface has the purpose to reduce the dependency of JHotDraw on AWT - * classes and interfaces. - * See {@link CH.ifa.draw.standard.AWTCursor} for an example of implementation - * for this interface. - * - * <p>Created on: 08/05/2003.</p> - * - * @version $Revision$ - * @author <a href="mailto:ricardo_padilha@users.sourceforge.net">Ricardo - * Sangoi Padilha</a> - * @see CH.ifa.draw.standard.AWTCursor - */ -public interface Cursor { - -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/Drawing.java b/JHotDraw/src/CH/ifa/draw/framework/Drawing.java deleted file mode 100644 index 97994fdc4..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/Drawing.java +++ /dev/null @@ -1,317 +0,0 @@ -/* - * @(#)Drawing.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import CH.ifa.draw.util.*; -import java.awt.*; -import java.util.*; -import java.util.List; -import java.io.Serializable; - -/** - * Drawing is a container for figures. - * <p> - * Drawing sends out DrawingChanged events to DrawingChangeListeners - * whenever a part of its area was invalidated. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld026.htm>Observer</a></b><br> - * The Observer pattern is used to decouple the Drawing from its views and - * to enable multiple views.<hr> - * - * @see Figure - * @see DrawingView - * @see FigureChangeListener - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ - -public interface Drawing - extends Storable, FigureChangeListener, Serializable { - - /** - * Releases the drawing and its contained figures. - */ - public void release(); - - /** - * Returns an enumeration to iterate in - * Z-order back to front over the figures. - */ - public FigureEnumeration figures(); - - /** - * Returns an enumeration to iterate in - * Z-order back to front over the figures - * that lie within the absolute bounds. - */ - public FigureEnumeration figures(Rectangle viewRectangle); - - /** - * Returns an enumeration to iterate in - * Z-order front to back over the figures. - */ - public FigureEnumeration figuresReverse(); - - /** - * Finds a top level Figure. Use this call for hit detection that - * should not descend into the figure's children. - */ - public Figure findFigure(int x, int y); - - /** - * Finds a top level Figure that intersects the given rectangle. - */ - public Figure findFigure(Rectangle r); - - /** - * Finds a top level Figure, but supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - * @param x the x coordinate - * @param y the y coordinate - * @param without the figure to be ignored during - * the find. - */ - public Figure findFigureWithout(int x, int y, Figure without); - - /** - * Finds a top level Figure that intersects the given rectangle. - * It supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - */ - public Figure findFigure(Rectangle r, Figure without); - - /** - * Finds a figure but descends into a figure's - * children. Use this method to implement <i>click-through</i> - * hit detection, that is, you want to detect the inner most - * figure containing the given point. - */ - public Figure findFigureInside(int x, int y); - - /** - * Finds a figure but descends into a figure's - * children. It supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - * @param x the x coordinate - * @param y the y coordinate - * @param without the figure to be ignored during - * the find. - */ - public Figure findFigureInsideWithout(int x, int y, Figure without); - - /** - * Checks if the composite figure has the argument as one of - * its children. - * - * @param figure figure to be searched in all descendants - * @return true if the figure is part of this Drawing, else otherwise - */ - public boolean includes(Figure figure); - - /** - * Check whether a given figure is a (direct) child figure of this CompositeFigure. - * - * @param figure figure to be searched in all direct descendents - * @return true if the figure is a direct child of this Drawing, else otherwise - */ - public boolean containsFigure(Figure figure); - - /** - * Adds a listener for this drawing. - */ - public void addDrawingChangeListener(DrawingChangeListener listener); - - /** - * Removes a listener from this drawing. - */ - public void removeDrawingChangeListener(DrawingChangeListener listener); - - /** - * Gets the listeners of a drawing. - * - * @return new iterator of all registered change listener - */ - public Iterator drawingChangeListeners(); - - /** - * Adds a figure and sets its container to refer to this drawing. - * - * @param figure to be added to the drawing - * @return the figure that was inserted (might be different from the figure specified). - */ - public Figure add(Figure figure); - - /** - * Adds a list of figures. - * - * @deprecated use addAll(FigureEnumeration) instead - */ - public void addAll(List newFigures); - - /** - * Adds a FigureEnumeration of figures. - * - * @param fe (unused) enumeration containing all figures to be added - * @see #add - */ - public void addAll(FigureEnumeration fe); - - /** - * Removes the figure from the drawing and releases it. - * - * @param figure that is part of the drawing and should be removed - * @return the figure that has been removed (might be different from the figure specified) - */ - public Figure remove(Figure figure); - - /** - * Removes a figure from the figure list, but - * doesn't release it. Use this method to temporarily - * manipulate a figure outside of the drawing. - * - * @param figure that is part of the drawing and should be added - */ - public Figure orphan(Figure figure); - - /** - * Removes a list of figures from the figure's list - * without releasing the figures. - * - * @see #orphan - * @deprecated use orphanAll(FigureEnumeration) instead - */ - public void orphanAll(List orphanFigures); - - /** - * Removes a FigureEnumeration of figures from the figure's list - * without releasing the figures. - * @see #orphan - */ - public void orphanAll(FigureEnumeration fe); - - /** - * Removes a list of figures . - * - * @see #remove - * @deprecated use removeAll(FigureEnumeration) instead - */ - public void removeAll(List figures); - - /** - * Removes a FigureEnumeration of figures. - * @see #remove - */ - public void removeAll(FigureEnumeration fe); - - /** - * Replaces a figure in the drawing without removing it from the drawing. - * The figure to be replaced must be part of the drawing. - * - * @param figure figure to be replaced - * @param replacement figure that should replace the specified figure - * @return the figure that has been inserted (might be different from the figure specified) - */ - public Figure replace(Figure figure, Figure replacement); - - /** - * Sends a figure to the back of the drawing. - * - * @param figure that is part of the drawing - */ - public void sendToBack(Figure figure); - - /** - * Brings a figure to the front. - * - * @param figure that is part of the drawing - */ - public void bringToFront(Figure figure); - - /** - * Sends a figure to a certain layer within a drawing. Each figure - * lays in a unique layer and the layering order decides which - * figure is drawn on top of another figure. Figures with a higher - * layer number have usually been added later and may overlay - * figures in lower layers. Layers are counted from to (the number - * of figures - 1). - * The figure is removed from its current layer (if it has been already - * part of this drawing) and is transferred to the specified layers after - * all figures between the original layer and the new layer are shifted to - * one layer below to fill the layer sequence. It is not possible to skip a - * layer number and if the figure is sent to a layer beyond the latest layer - * it will be added as the last figure to the drawing and its layer number - * will be set to the be the one beyond the latest layer so far. - * - * @param figure figure to be sent to a certain layer - * @param layerNr target layer of the figure - */ - public void sendToLayer(Figure figure, int layerNr); - - /** - * Gets the layer for a certain figure (first occurrence). The number - * returned is the number of the layer in which the figure is placed. - * - * @param figure figure to be queried for its layering place - * @return number of the layer in which the figure is placed and -1 if the - * figure could not be found. - * @see #sendToLayer - */ - public int getLayer(Figure figure); - - /** - * Gets the figure from a certain layer. - * - * @param layerNr number of the layer which figure should be returned - * @return figure from the layer specified, null, if the layer nr was outside - * the number of possible layer (0...(number of figures - 1)) - * @see #sendToLayer - */ - public Figure getFigureFromLayer(int layerNr); - - /** - * Draws all the figures back to front. - */ - public void draw(Graphics g); - - /** - * Draws only the given figures. - */ - public void draw(Graphics g, FigureEnumeration fe); - - /** - * Acquires the drawing lock. - */ - public void lock(); - - /** - * Releases the drawing lock. - */ - public void unlock(); - - /** - * Used to optimize rendering. Rendering of many objects may - * be slow until this method is called. The view rectangle - * should at least approximately enclose the CompositeFigure. - * If the view rectangle is too small or too large, performance - * may suffer. - */ - public void init(Rectangle viewRectangle); - - public String getTitle(); - public void setTitle(String name); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/DrawingChangeEvent.java b/JHotDraw/src/CH/ifa/draw/framework/DrawingChangeEvent.java deleted file mode 100644 index d9a68d020..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/DrawingChangeEvent.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @(#)DrawingChangeEvent.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.awt.Rectangle; -import java.util.EventObject; - -/** - * The event passed to DrawingChangeListeners. - * - * @version <$CURRENT_VERSION$> - */ -public class DrawingChangeEvent extends EventObject { - - private Rectangle myRectangle; - - /** - * Constructs a drawing change event. - */ - public DrawingChangeEvent(Drawing newSource, Rectangle newRect) { - super(newSource); - myRectangle = newRect; - } - - /** - * Gets the changed drawing - */ - public Drawing getDrawing() { - return (Drawing)getSource(); - } - - /** - * Gets the changed rectangle - */ - public Rectangle getInvalidatedRectangle() { - return myRectangle; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/DrawingChangeListener.java b/JHotDraw/src/CH/ifa/draw/framework/DrawingChangeListener.java deleted file mode 100644 index cb7facea1..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/DrawingChangeListener.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * @(#)DrawingChangeListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -/** - * Listener interested in Drawing changes. - * - * @version <$CURRENT_VERSION$> - */ -public interface DrawingChangeListener { - - /** - * Sent when an area is invalid - */ - public void drawingInvalidated(DrawingChangeEvent e); - - /** - * Sent when the drawing Title has changed - */ - public void drawingTitleChanged(DrawingChangeEvent e); - /** - * Sent when the drawing wants to be refreshed - */ - public void drawingRequestUpdate(DrawingChangeEvent e); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/DrawingEditor.java b/JHotDraw/src/CH/ifa/draw/framework/DrawingEditor.java deleted file mode 100644 index 4e08605da..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/DrawingEditor.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * @(#)DrawingEditor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import CH.ifa.draw.util.UndoManager; - -/** - * DrawingEditor defines the interface for coordinating - * the different objects that participate in a drawing editor. - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld022.htm>Mediator</a></b><br> - * DrawingEditor is the mediator. It decouples the participants - * of a drawing editor. - * - * @see Tool - * @see DrawingView - * @see Drawing - * - * @version <$CURRENT_VERSION$> - */ -public interface DrawingEditor extends FigureSelectionListener { - - /** - * Gets the editor's drawing view. - */ - public DrawingView view(); - - public DrawingView[] views(); - /** - * Gets the editor's drawing. - */ -// public Drawing drawing(); - - /** - * Gets the editor's current tool. - */ - public Tool tool(); - - /** - * Informs the editor that a tool has done its interaction. - * This method can be used to switch back to the default tool. - */ - public void toolDone(); - - /** - * Informs that the current figure selection has changed. - * Override this method to handle selection changes. - */ - public void figureSelectionChanged(DrawingView view); - - public void addViewChangeListener(ViewChangeListener vsl); - public void removeViewChangeListener(ViewChangeListener vsl); - - /** - * Shows a status message in the editor's user interface - */ - public void showStatus(String string); - - public UndoManager getUndoManager(); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/DrawingView.java b/JHotDraw/src/CH/ifa/draw/framework/DrawingView.java deleted file mode 100644 index 107c0cace..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/DrawingView.java +++ /dev/null @@ -1,315 +0,0 @@ -/* - * @(#)DrawingView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.awt.*; -import java.awt.image.ImageObserver; -import java.util.Collection; - -/** - * DrawingView renders a Drawing and listens to its changes. - * It receives user input and delegates it to the current tool. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld026.htm>Observer</a></b><br> - * DrawingView observes drawing for changes via the DrawingListener interface.<br> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld032.htm>State</a></b><br> - * DrawingView plays the role of the StateContext in - * the State pattern. Tool is the State.<br> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * DrawingView is the StrategyContext in the Strategy pattern - * with regard to the UpdateStrategy. <br> - * DrawingView is the StrategyContext for the PointConstrainer. - * - * @see Drawing - * @see Painter - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ -public interface DrawingView extends ImageObserver, DrawingChangeListener { - - /** - * Sets the view's editor. - */ - public void setEditor(DrawingEditor editor); - - /** - * Gets the current tool. - */ - public Tool tool(); - - /** - * Gets the drawing. - */ - public Drawing drawing(); - - /** - * Sets and installs another drawing in the view. - */ - public void setDrawing(Drawing d); - - /** - * Gets the editor. - */ - public DrawingEditor editor(); - - /** - * Adds a figure to the drawing. - * @return the added figure. - */ - public Figure add(Figure figure); - - /** - * Removes a figure from the drawing. - * @return the removed figure - */ - public Figure remove(Figure figure); - - /** - * Adds a collections of figures to the drawing. - */ - public void addAll(Collection figures); - - /** - * Gets the size of the drawing. - */ - public Dimension getSize(); - - /** - * Gets the minimum dimension of the drawing. - */ - public Dimension getMinimumSize(); - - /** - * Gets the preferred dimension of the drawing.. - */ - public Dimension getPreferredSize(); - - /** - * Sets the current display update strategy. - * @see Painter - */ - public void setDisplayUpdate(Painter updateStrategy); - - /** - * Gets the current display update strategy. - * @see Painter - */ - public Painter getDisplayUpdate(); - - /** - * Gets an enumeration over the currently selected figures. - * The selection is a snapshot of the current selection - * which does not get changed anymore - * - * @return an enumeration with the currently selected figures. - */ - public FigureEnumeration selection(); - - /** - * Gets the currently seleced figures in Z order. - * The selection is a snapshot of the current selection - * which does not get changed anymore - * - * @see #selection - * @return an enumeration with the currently selected figures. - */ - public FigureEnumeration selectionZOrdered(); - - /** - * Gets the number of selected figures. - */ - public int selectionCount(); - - /** - * Test whether a given figure is selected. - */ - public boolean isFigureSelected(Figure checkFigure); - - /** - * Adds a figure to the current selection. - */ - public void addToSelection(Figure figure); - - /** - * Adds a collections of figures to the current selection. - */ - public void addToSelectionAll(Collection figures); - - /** - * Adds a FigureEnumeration to the current selection. - */ - public void addToSelectionAll(FigureEnumeration fe); - - /** - * Removes a figure from the selection. - */ - public void removeFromSelection(Figure figure); - - /** - * If a figure isn't selected it is added to the selection. - * Otherwise it is removed from the selection. - */ - public void toggleSelection(Figure figure); - - /** - * Clears the current selection. - */ - public void clearSelection(); - - /** - * Gets the current selection as a FigureSelection. A FigureSelection - * can be cut, copied, pasted. - */ - public FigureSelection getFigureSelection(); - - /** - * Finds a handle at the given coordinates. - * @return the hit handle, null if no handle is found. - */ - public Handle findHandle(int x, int y); - - /** - * Gets the position of the last click inside the view. - */ - public Point lastClick(); - - /** - * Sets the current point constrainer. - */ - public void setConstrainer(PointConstrainer p); - - /** - * Gets the current grid setting. - */ - public PointConstrainer getConstrainer(); - - /** - * Checks whether the drawing has some accumulated damage - */ - public void checkDamage(); - - /** - * Repair the damaged area - */ - public void repairDamage(); - - /** - * Paints the drawing view. The actual drawing is delegated to - * the current update strategy. - * @see Painter - */ - public void paint(Graphics g); - - /** - * Creates an image with the given dimensions - */ - public Image createImage(int width, int height); - - /** - * Gets a graphic to draw into - */ - public Graphics getGraphics(); - - /** - * Gets the background color of the DrawingView - */ - public Color getBackground(); - - /** - * Sets the background color of the DrawingView - */ - public void setBackground(Color c); - - /** - * Draws the contents of the drawing view. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void drawAll(Graphics g); - - /** - * Draws the given figures. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void draw(Graphics g, FigureEnumeration fe); - - /** - * Draws the currently active handles. - */ - public void drawHandles(Graphics g); - - /** - * Draws the drawing. - */ - public void drawDrawing(Graphics g); - - /** - * Draws the background. If a background pattern is set it - * is used to fill the background. Otherwise the background - * is filled in the background color. - */ - public void drawBackground(Graphics g); - - /** - * Sets the cursor of the DrawingView - */ - public void setCursor(Cursor c); - - /** - * Freezes the view by acquiring the drawing lock. - * @see Drawing#lock - */ - public void freezeView(); - - /** - * Unfreezes the view by releasing the drawing lock. - * @see Drawing#unlock - */ - public void unfreezeView(); - - /** - * Add a listener for selection changes in this DrawingView. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void addFigureSelectionListener(FigureSelectionListener fsl); - - /** - * Remove a listener for selection changes in this DrawingView. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void removeFigureSelectionListener(FigureSelectionListener fsl); - - /** - * Returns a FigureEnumeration of connection figures - */ - public FigureEnumeration getConnectionFigures(Figure inFigure); - - /** - * Inserts figures in a drawing at given offset. Optional check for connection figures - * - * @return enumeration which has been added to the drawing. The figures in the enumeration - * can have changed during adding them (e.g. they could have been decorated). - */ - public FigureEnumeration insertFigures(FigureEnumeration inFigures, int dx, int dy, boolean bCheck); - - /** - * Check whether the DrawingView is interactive, i.e. whether it accepts user input - * and whether it can display a drawing. - */ - public boolean isInteractive(); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/Figure.java b/JHotDraw/src/CH/ifa/draw/framework/Figure.java deleted file mode 100644 index a01a9adee..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/Figure.java +++ /dev/null @@ -1,340 +0,0 @@ -/* - * @(#)Figure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.standard.TextHolder; - -import java.awt.*; -import java.io.Serializable; - -/** - * The interface of a graphical figure. A figure knows - * its display box and can draw itself. A figure can be - * composed of several figures. To interact and manipulate - * with a figure it can provide Handles and Connectors.<p> - * A figure has a set of handles to manipulate its shape or attributes. - * A figure has one or more connectors that define how - * to locate a connection point.<p> - * Figures can have an open ended set of attributes. - * An attribute is identified by a string.<p> - * Default implementations for the Figure interface are provided - * by AbstractFigure.<p> - * - * Figures can have <a name="dependent_figure">dependent figure</a>s. The existence od dependent - * figures depend on another figure. This is the case for figures - * such as ConnectedTextFigures and LineDecoration. Thus, they are - * "externally" dependent on a figure in contrast to (internally) - * contained figures. This means, "normal" figures (figures that - * are not containers) can still have dependent figures. Dependent - * figures are especially important if the figure which the depend - * on is deleted because they should be removed as well (cascading delete). - * - * @see Handle - * @see Connector - * @see CH.ifa.draw.standard.AbstractFigure - * - * @version <$CURRENT_VERSION$> - */ -public interface Figure - extends Storable, Cloneable, Serializable { - - /** - * Constant that allows to identify a popup menu assigned - * as an attribute. - */ - public static String POPUP_MENU = "POPUP_MENU"; - - /** - * Moves the Figure to a new location. - * @param dx the x delta - * @param dy the y delta - */ - public void moveBy(int dx, int dy); - - /** - * Changes the display box of a figure. This method is - * always implemented in figure subclasses. It only changes - * the displaybox and does not announce any changes. It - * is usually not called by the client. Clients typically call - * displayBox to change the display box. - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void basicDisplayBox(Point origin, Point corner); - - /** - * Changes the display box of a figure. Clients usually - * invoke this method. It changes the display box - * and announces the corresponding changes. - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void displayBox(Point origin, Point corner); - - /** - * Gets the display box of a figure - * @see #basicDisplayBox - */ - public Rectangle displayBox(); - - /** - * Draws the figure. - * @param g the Graphics to draw into - */ - public void draw(Graphics g); - - /** - * Returns the handles used to manipulate - * the figure. Handles is a Factory Method for - * creating handle objects. - * - * @return an type-safe iterator of handles - * @see Handle - */ - public HandleEnumeration handles(); - - /** - * Gets the size of the figure - */ - public Dimension size(); - - /** - * Gets the figure's center - */ - public Point center(); - - /** - * Checks if the Figure should be considered as empty. - */ - public boolean isEmpty(); - - /** - * Returns an Enumeration of the figures contained in this figure - */ - public FigureEnumeration figures(); - - /** - * Returns the figure that contains the given point. - */ - public Figure findFigureInside(int x, int y); - - /** - * Checks if a point is inside the figure. - */ - public boolean containsPoint(int x, int y); - - /** - * Returns a Clone of this figure - */ - public Object clone(); - - /** - * Changes the display box of a figure. This is a - * convenience method. Implementors should only - * have to override basicDisplayBox - * @see #displayBox - */ - public void displayBox(Rectangle r); - - /** - * Checks whether the given figure is contained in this figure. - */ - public boolean includes(Figure figure); - - /** - * Decomposes a figure into its parts. A figure is considered - * as a part of itself. - */ - public FigureEnumeration decompose(); - - /** - * Sets the Figure's container and registers the container - * as a figure change listener. A figure's container can be - * any kind of FigureChangeListener. A figure is not restricted - * to have a single container. - */ - public void addToContainer(FigureChangeListener c); - - /** - * Removes a figure from the given container and unregisters - * it as a change listener. - */ - public void removeFromContainer(FigureChangeListener c); - - /** - * Add a <a href="#dependent_figure">dependent figure</a>. - */ - public void addDependendFigure(Figure newDependendFigure); - - /** - * Remove a <a href="#dependent_figure">dependent figure</a>. - */ - public void removeDependendFigure(Figure oldDependendFigure); - - /** - * Get an enumeration of all <a href="#dependent_figure">dependent figures</a>. - */ - public FigureEnumeration getDependendFigures(); - - /** - * Gets the Figure's listeners. - */ - public FigureChangeListener listener(); - - /** - * Adds a listener for this figure. - */ - public void addFigureChangeListener(FigureChangeListener l); - - /** - * Removes a listener for this figure. - */ - public void removeFigureChangeListener(FigureChangeListener l); - - /** - * Releases a figure's resources. Release is called when - * a figure is removed from a drawing. Informs the listeners that - * the figure is removed by calling figureRemoved. - */ - public void release(); - - /** - * Invalidates the figure. This method informs its listeners - * that its current display box is invalid and should be - * refreshed. - */ - public void invalidate(); - - /** - * Informes that a figure is about to change such that its - * display box is affected. - * Here is an example of how it is used together with changed() - * <pre> - * public void move(int x, int y) { - * willChange(); - * // change the figure's location - * changed(); - * } - * </pre> - * @see #invalidate - * @see #changed - */ - public void willChange(); - - /** - * Informes that a figure has changed its display box. - * This method also triggers an update call for its - * registered observers. - * @see #invalidate - * @see #willChange - * - */ - public void changed(); - - /** - * Checks if this figure can be connected - */ - public boolean canConnect(); - - /** - * Gets a connector for this figure at the given location. - * A figure can have different connectors at different locations. - */ - public Connector connectorAt(int x, int y); - - /** - * Sets whether the connectors should be visible. - * Connectors can be optionally visible. Implement - * this method and react on isVisible to turn the - * connectors on or off. - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure connection); - - /** - * Returns the connection inset. This is only a hint that - * connectors can use to determine the connection location. - * The inset defines the area where the display box of a - * figure should not be connected. - * - */ - public Insets connectionInsets(); - - /** - * Returns the locator used to located connected text. - */ - public Locator connectedTextLocator(Figure text); - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name); - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - */ - public Object getAttribute(FigureAttributeConstant attributeConstant); - - /** - * Sets the named attribute to the new value - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value); - - /** - * Sets the named attribute to the new value - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value); - - /** - * Gets the z value (back-to-front ordering) of this figure. - * Z values are not guaranteed to not skip numbers. - */ - public int getZValue(); - - /** - * Sets the z value (back-to-front ordering) of this figure. - * Z values are not guaranteed to not skip numbers. - */ - public void setZValue(int z); - - public void visit(FigureVisitor visitor); - - /** - * Some figures have the ability to hold text. This method returns - * the adjunctant TextHolder. - * @return - */ - public TextHolder getTextHolder(); - - /** - * Get the underlying figure in case the figure has been decorated. - * If the figure has not been decorated the figure itself is returned. - * The DecoratorFigure does not release the the decorated figure but - * just returns it (in contrast to {@link CH.ifa.draw.standard.DecoratorFigure.peelDecoration}). - * - * @return underlying, "real" without DecoratorFigure - * @see CH.ifa.draw.standard.DecoratorFigure - */ - public Figure getDecoratedFigure(); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/FigureAttributeConstant.java b/JHotDraw/src/CH/ifa/draw/framework/FigureAttributeConstant.java deleted file mode 100644 index e9187866b..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/FigureAttributeConstant.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * @(#)FigureAttributeConstant.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.io.Serializable; - -/** - * A FigureAttribute is a constant for accessing a special figure attribute. It - * does not contain a value but just defines a unique attribute ID. Therefore, - * they provide a type-safe way of defining attribute constants. - * (SourceForge feature request ID: <>) - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class FigureAttributeConstant implements Serializable, Cloneable { - - public static final String FRAME_COLOR_STR = "FrameColor"; - public static final FigureAttributeConstant FRAME_COLOR = new FigureAttributeConstant(FRAME_COLOR_STR, 1); - - public static final String FILL_COLOR_STR = "FillColor"; - public static final FigureAttributeConstant FILL_COLOR = new FigureAttributeConstant(FILL_COLOR_STR, 2); - - public static final String TEXT_COLOR_STR = "TextColor"; - public static final FigureAttributeConstant TEXT_COLOR = new FigureAttributeConstant(TEXT_COLOR_STR, 3); - - public static final String ARROW_MODE_STR = "ArrowMode"; - public static final FigureAttributeConstant ARROW_MODE = new FigureAttributeConstant(ARROW_MODE_STR, 4); - - public static final String FONT_NAME_STR = "FontName"; - public static final FigureAttributeConstant FONT_NAME = new FigureAttributeConstant(FONT_NAME_STR, 5); - - public static final String FONT_SIZE_STR = "FontSize"; - public static final FigureAttributeConstant FONT_SIZE = new FigureAttributeConstant(FONT_SIZE_STR, 6); - - public static final String FONT_STYLE_STR = "FontStyle"; - public static final FigureAttributeConstant FONT_STYLE = new FigureAttributeConstant(FONT_STYLE_STR, 7); - - public static final String URL_STR = "URL"; - public static final FigureAttributeConstant URL = new FigureAttributeConstant(URL_STR, 8); - - public static final String LOCATION_STR = "Location"; - public static final FigureAttributeConstant LOCATION = new FigureAttributeConstant(LOCATION_STR, 9); - - public static final String XALIGNMENT_STR = "XAlignment"; - public static final FigureAttributeConstant XALIGNMENT = new FigureAttributeConstant(XALIGNMENT_STR, 10); - - public static final String YALIGNMENT_STR = "YAlignment"; - public static final FigureAttributeConstant YALIGNMENT = new FigureAttributeConstant(YALIGNMENT_STR, 11); - - public static final String TOP_MARGIN_STR = "TopMargin"; - public static final FigureAttributeConstant TOP_MARGIN = new FigureAttributeConstant(TOP_MARGIN_STR, 12); - - public static final String RIGHT_MARGIN_STR = "RightMargin"; - public static final FigureAttributeConstant RIGHT_MARGIN = new FigureAttributeConstant(RIGHT_MARGIN_STR, 13); - - public static final String BOTTOM_MARGIN_STR = "BottomMargin"; - public static final FigureAttributeConstant BOTTOM_MARGIN = new FigureAttributeConstant(BOTTOM_MARGIN_STR, 14); - - public static final String LEFT_MARGIN_STR = "LeftMargin"; - public static final FigureAttributeConstant LEFT_MARGIN = new FigureAttributeConstant(LEFT_MARGIN_STR, 15); - - public static final String POPUP_MENU_STR = "PopupMenu"; - public static final FigureAttributeConstant POPUP_MENU = new FigureAttributeConstant(POPUP_MENU_STR, 16); - - private static FigureAttributeConstant[] attributeConstants; - - private int myID; - private String myName; - - private FigureAttributeConstant(String newName, int newID) { - setName(newName); - setID(newID); - addConstant(this); - } - - public FigureAttributeConstant(String newName) { - this(newName, attributeConstants.length+1); - } - - private void setName(String newName) { - myName = newName; - } - - public String getName() { - return myName; - } - - private void setID(int newID) { - myID = newID; - } - - public int getID() { - return myID; - } - - public boolean equals(Object compareObject) { - if (compareObject == null) { - return false; - } - if (!(compareObject instanceof FigureAttributeConstant)) { - return false; - } - FigureAttributeConstant compareAttribute = (FigureAttributeConstant)compareObject; - - if (compareAttribute.getID() != getID()) { - return false; - } - - if ((compareAttribute.getName() == null) && (getName() == null)) { - return true; - } - if ((compareAttribute.getName() != null) && (getName() != null)) { - return getName().equals(compareAttribute.getName()); - } - - return false; - } - - public int hashCode() { - return getID(); - } - - /** - * Constants are put into the place according to their ID, thus, it is - * recommended to have subsequent attribute IDs. - */ - private static void addConstant(FigureAttributeConstant newConstant) { - int idPos = newConstant.getID() - 1; - // attribute IDs must be unique, thus no two attributes - // with the same ID can be added - if ((idPos < attributeConstants.length) && (attributeConstants[idPos] != null)) { - throw new JHotDrawRuntimeException("No unique FigureAttribute ID: " + newConstant.getID()); - } - // increase capacity if necessary - if (idPos >= attributeConstants.length) { - FigureAttributeConstant[] tempStrs = new FigureAttributeConstant[idPos + 1]; - System.arraycopy(attributeConstants, 0, tempStrs, 0, attributeConstants.length); - attributeConstants = tempStrs; - } - attributeConstants[idPos] = newConstant; - } - - /** - * @return an existing constant for a given name or create a new one - */ - public static FigureAttributeConstant getConstant(String constantName) { - for (int i = 0; i < attributeConstants.length; i++) { - FigureAttributeConstant currentAttr = getConstant(i); - if ((currentAttr != null) && (currentAttr.getName() != null) && (currentAttr.getName().equals(constantName))) { - return currentAttr; - } - } - return new FigureAttributeConstant(constantName); - } - - public static FigureAttributeConstant getConstant(int constantId) { - return attributeConstants[constantId]; - } - - { - // use static initializer to create List before any constant is created - // initialize List only for the first constant (during debugging it - // appeared that the static initializer is invoked for any constant) - if (attributeConstants == null) { - attributeConstants = new FigureAttributeConstant[64]; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/FigureChangeEvent.java b/JHotDraw/src/CH/ifa/draw/framework/FigureChangeEvent.java deleted file mode 100644 index 63afb950d..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/FigureChangeEvent.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * @(#)FigureChangeEvent.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.awt.Rectangle; -import java.util.EventObject; - -/** - * FigureChange event passed to FigureChangeListeners. - * - * @version <$CURRENT_VERSION$> - */ -public class FigureChangeEvent extends EventObject { - - private Rectangle myRectangle; - private FigureChangeEvent myNestedEvent; - - private static final Rectangle EMPTY_RECTANGLE = new Rectangle(0, 0, 0, 0); - - /** - * Constructs an event for the given source Figure. The rectangle is the - * area to be invalvidated. - */ - public FigureChangeEvent(Figure newSource, Rectangle newRect) { - super(newSource); - myRectangle = newRect; - } - - public FigureChangeEvent(Figure newSource) { - super(newSource); - myRectangle = EMPTY_RECTANGLE; - } - - public FigureChangeEvent(Figure newSource, Rectangle newRect, FigureChangeEvent nestedEvent) { - this(newSource, newRect); - myNestedEvent = nestedEvent; - } - - /** - * Gets the changed figure - */ - public Figure getFigure() { - return (Figure)getSource(); - } - - /** - * Gets the changed rectangle - */ - public Rectangle getInvalidatedRectangle() { - return myRectangle; - } - - public FigureChangeEvent getNestedEvent() { - return myNestedEvent; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/FigureChangeListener.java b/JHotDraw/src/CH/ifa/draw/framework/FigureChangeListener.java deleted file mode 100644 index a1466bf0f..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/FigureChangeListener.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * @(#)FigureChangeListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.util.EventListener; - -/** - * Listener interested in Figure changes. - * - * @version <$CURRENT_VERSION$> - */ -public interface FigureChangeListener extends EventListener { - - /** - * Sent when an area is invalid - */ - public void figureInvalidated(FigureChangeEvent e); - - /** - * Sent when a figure changed - */ - public void figureChanged(FigureChangeEvent e); - - /** - * Sent when a figure was removed - */ - public void figureRemoved(FigureChangeEvent e); - - /** - * Sent when requesting to remove a figure. - */ - public void figureRequestRemove(FigureChangeEvent e); - - /** - * Sent when an update should happen. - * - */ - public void figureRequestUpdate(FigureChangeEvent e); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/FigureEnumeration.java b/JHotDraw/src/CH/ifa/draw/framework/FigureEnumeration.java deleted file mode 100644 index dc38d53a3..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/FigureEnumeration.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)FigureEnumeration.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -/** - * Interface for Enumerations that access Figures. - * It provides a method nextFigure, that hides the down casting - * from client code. - * - * @version <$CURRENT_VERSION$> - */ -public interface FigureEnumeration { - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Figure nextFigure(); - public boolean hasNextFigure(); - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset(); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/FigureSelection.java b/JHotDraw/src/CH/ifa/draw/framework/FigureSelection.java deleted file mode 100644 index dd95e3d29..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/FigureSelection.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)FigureSelection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -/** - * FigureSelection enables to transfer the selected figures - * to a clipboard.<p> - * Will soon be converted to the JDK 1.1 Transferable interface. - * - * @see CH.ifa.draw.util.Clipboard - * - * @version <$CURRENT_VERSION$> - */ - -public interface FigureSelection { - - /** - * Gets the type of the selection. - */ - public String getType(); - - /** - * Gets the data of the selection. The result is returned - * as a FigureEnumeration of Figures. - * - * @return a copy of the figure selection. - */ - public Object getData(String type); -} - diff --git a/JHotDraw/src/CH/ifa/draw/framework/FigureSelectionListener.java b/JHotDraw/src/CH/ifa/draw/framework/FigureSelectionListener.java deleted file mode 100644 index f4dbf7ab3..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/FigureSelectionListener.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * @(#)FigureSelectionListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -/** - * Listener interested in DrawingView selection changes. - * - * @version <$CURRENT_VERSION$> - */ -public interface FigureSelectionListener { - /** - * Sent when the figure selection has changed. - * @param view DrawingView - */ - public void figureSelectionChanged(DrawingView view); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/FigureVisitor.java b/JHotDraw/src/CH/ifa/draw/framework/FigureVisitor.java deleted file mode 100644 index 9b799d457..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/FigureVisitor.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * @(#)FigureVisitor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface FigureVisitor { - public void visitFigure(Figure hostFigure); - public void visitHandle(Handle hostHandle); - public void visitFigureChangeListener(FigureChangeListener hostFigureChangeListener); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/Handle.java b/JHotDraw/src/CH/ifa/draw/framework/Handle.java deleted file mode 100644 index 66be2c103..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/Handle.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Handle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; - -import CH.ifa.draw.util.Undoable; - -/** - * Handles are used to change a figure by direct manipulation. - * Handles know their owning figure and they provide methods to - * locate the handle on the figure and to track changes. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld004.htm>Adapter</a></b><br> - * Handles adapt the operations to manipulate a figure to a common interface. - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ -public interface Handle { - - public static final int HANDLESIZE = 8; - - /** - * Locates the handle on the figure. The handle is drawn - * centered around the returned point. - */ - public Point locate(); - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - */ - public void invokeStart(int x, int y, DrawingView view); - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @deprecated As of version 4.1, use invokeStart(x, y, drawingView) - */ - public void invokeStart(int x, int y, Drawing drawing); - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view); - - /** - * Tracks a step of the interaction. - * @param dx x delta of this step - * @param dy y delta of this step - * @deprecated As of version 4.1, - * use invokeStep(x, y, anchorX, anchorY, drawingView) - */ - public void invokeStep (int dx, int dy, Drawing drawing); - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view); - - /** - * Tracks the end of the interaction. - * @deprecated As of version 4.1, - * use invokeEnd(x, y, anchorX, anchorY, drawingView). - */ - public void invokeEnd(int dx, int dy, Drawing drawing); - - /** - * Gets the handle's owner. - */ - public Figure owner(); - - /** - * Gets the display box of the handle. - */ - public Rectangle displayBox(); - - /** - * Tests if a point is contained in the handle. - */ - public boolean containsPoint(int x, int y); - - /** - * Draws this handle. - */ - public void draw(Graphics g); - - /** - * Returns an Undoable to be used by the Undo/Redo infrastructure. - * @return Undoable - */ - public Undoable getUndoActivity(); - - /** - * Sets an Undoable to be used by the Undo/Redo infrastructure. - * @param newUndoableActivity - */ - public void setUndoActivity(Undoable newUndoableActivity); - - /** - * Returns the preferred Cursor for this Handle. - * @return Cursor - */ - public Cursor getCursor(); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/HandleEnumeration.java b/JHotDraw/src/CH/ifa/draw/framework/HandleEnumeration.java deleted file mode 100644 index 0fa17a821..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/HandleEnumeration.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)HandleEnumeration.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.util.List; - -/** - * Interface for Enumerations that access Handles. - * It provides a method nextHandle, that hides the down casting - * from client code. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface HandleEnumeration { - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Handle nextHandle(); - public boolean hasNextHandle(); - - /** - * Returns a list with all elements currently available in the enumeration. - * That means, elements retrieved already by calling nextHandle() are not - * contained. This method does not change the position of the enumeration. - * Warning: this method is not necessarily synchronized so this enumeration should not - * be modified at the same time! - * - * @return list with all elements currently available in the enumeration. - */ - public List toList(); - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset(); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/JHotDrawException.java b/JHotDraw/src/CH/ifa/draw/framework/JHotDrawException.java deleted file mode 100644 index d86e21d5c..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/JHotDrawException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)JHotDrawException.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -/** - * A JHotDRaw Exception. - * - * @version <$CURRENT_VERSION$> - */ -public class JHotDrawException extends Exception { - - private Exception myNestedException; - - public JHotDrawException(String msg) { - super(msg); - } - - public JHotDrawException(Exception nestedException) { - this(nestedException.getLocalizedMessage()); - setNestedException(nestedException); - nestedException.fillInStackTrace(); - } - - protected void setNestedException(Exception newNestedException) { - myNestedException = newNestedException; - } - - public Exception getNestedException() { - return myNestedException; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/JHotDrawRuntimeException.java b/JHotDraw/src/CH/ifa/draw/framework/JHotDrawRuntimeException.java deleted file mode 100644 index 3821eca33..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/JHotDrawRuntimeException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)JHotDrawRuntimeException.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -/** - * A JHotDraw RuntimeException. - * - * @version <$CURRENT_VERSION$> - */ -public class JHotDrawRuntimeException extends RuntimeException { - - private Exception myNestedException; - - public JHotDrawRuntimeException(String msg) { - super(msg); - } - - public JHotDrawRuntimeException(Exception nestedException) { - this(nestedException.getLocalizedMessage()); - setNestedException(nestedException); - nestedException.fillInStackTrace(); - } - - protected void setNestedException(Exception newNestedException) { - myNestedException = newNestedException; - } - - public Exception getNestedException() { - return myNestedException; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/Locator.java b/JHotDraw/src/CH/ifa/draw/framework/Locator.java deleted file mode 100644 index 6e3aa0944..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/Locator.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)Locator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import CH.ifa.draw.util.Storable; -import java.awt.*; -import java.io.Serializable; - -/** - * Locators can be used to locate a position on a figure.<p> - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * Locator encapsulates the strategy to locate a handle on a figure. - * - * @version <$CURRENT_VERSION$> - */ -public interface Locator extends Storable, Serializable, Cloneable { - - /** - * Locates a position on the passed figure. - * @return a point on the figure. - */ - public Point locate(Figure owner); -} - diff --git a/JHotDraw/src/CH/ifa/draw/framework/Painter.java b/JHotDraw/src/CH/ifa/draw/framework/Painter.java deleted file mode 100644 index 417a20df8..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/Painter.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)Painter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.awt.*; -import java.io.Serializable; - -/** - * Painter defines the interface for drawing a layer - * into a DrawingView.<p> - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * Painter encapsulates an algorithm to render something in - * the DrawingView. The DrawingView plays the role of the StrategyContext. - * <hr> - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public interface Painter extends Serializable { - - /** - * Draws into the given DrawingView. - */ - public void draw(Graphics g, DrawingView view); - -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/PointConstrainer.java b/JHotDraw/src/CH/ifa/draw/framework/PointConstrainer.java deleted file mode 100644 index e33ec9e2c..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/PointConstrainer.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @(#)PointConstrainer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.awt.*; - -/** - * Interface to constrain a Point. This can be used to implement - * different kinds of grids. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * DrawingView is the StrategyContext.<br> - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public interface PointConstrainer { - /** - * Constrains the given point. - * @return constrained point. - */ - public Point constrainPoint(Point p); - - /** - * Gets the x offset to move an object. - */ - public int getStepX(); - - /** - * Gets the y offset to move an object. - */ - public int getStepY(); - -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/Tool.java b/JHotDraw/src/CH/ifa/draw/framework/Tool.java deleted file mode 100644 index cfd5ba19e..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/Tool.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * @(#)Tool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import CH.ifa.draw.util.Undoable; -import java.awt.event.MouseEvent; -import java.awt.event.KeyEvent; - -/** - * A tool defines a mode of the drawing view. All input events - * targeted to the drawing view are forwarded to its current tool.<p> - * Tools inform their editor when they are done with an interaction - * by calling the editor's toolDone() method. - * The Tools are created once and reused. They - * are initialized/deinitialized with activate()/deactivate(). - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld032.htm>State</a></b><br> - * Tool plays the role of the State. In encapsulates all state - * specific behavior. DrawingView plays the role of the StateContext. - * - * A tool can be in the following states: <br> - * disabled<->enabled[unusable<->usable[active<->inactive]] - * <->always_usable[active<->inactive]<->disabled - * <br> where each square bracket indicates a state nesting level - * and arrows possible state transitions. - * Unusable tools are always inactive as well and disabled tools - * are always unusable as well. - * State changes are propagated to registered ToolListeners. - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public interface Tool { - - /** - * An active tool is the currently selected tool in the - * DrawingView. A tool can be activated/deactivated - * by calling the activate()/deactivate() method. - * - * @return true if the tool is the selected tool in the DrawingView, false otherwise - * @see #isEnabled - * @see #isUsable - */ - public boolean isActive(); - - /** - * Activates the tool for the given view. This method is called - * whenever the user switches to this tool. Use this method to - * reinitialize a tool. - * Note, a valid view must be present in order for the tool to accept activation - */ - public void activate(); - - /** - * Deactivates the tool. This method is called whenever the user - * switches to another tool. Use this method to do some clean-up - * when the tool is switched. Subclassers should always call - * super.deactivate. - */ - public void deactivate(); - - /** - * Handles mouse down events in the drawing view. - */ - public void mouseDown(MouseEvent e, int x, int y); - - /** - * Handles mouse drag events in the drawing view. - */ - public void mouseDrag(MouseEvent e, int x, int y); - - /** - * Handles mouse up in the drawing view. - */ - public void mouseUp(MouseEvent e, int x, int y); - - /** - * Handles mouse moves (if the mouse button is up). - */ - public void mouseMove(MouseEvent evt, int x, int y); - - /** - * Handles key down events in the drawing view. - */ - public void keyDown(KeyEvent evt, int key); - - /** - * A tool must be enabled in order to use it and to activate/deactivate it. - * Typically, the program enables or disables a tool. - * - * @see #isUsable - * @see #isActive - */ - public boolean isEnabled(); - public void setEnabled(boolean enableUsableCheck); - - /** - * A usable tool is a enabled and either active or inactive. - * Typically, the tool should be able to determine itself whether it is - * usable or not. - * - * @see #isEnabled - * @see #isUsable - */ - public boolean isUsable(); - public void setUsable(boolean newIsUsable); - - public DrawingEditor editor(); - - public Undoable getUndoActivity(); - - public void setUndoActivity(Undoable newUndoableActivity); - - public void addToolListener(ToolListener newToolListener); - public void removeToolListener(ToolListener oldToolListener); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/ToolListener.java b/JHotDraw/src/CH/ifa/draw/framework/ToolListener.java deleted file mode 100644 index bf08b79d5..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/ToolListener.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * @(#)ToolListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.framework; - -import java.util.EventObject; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface ToolListener { - public void toolEnabled(EventObject toolEvent); - public void toolDisabled(EventObject toolEvent); - public void toolUsable(EventObject toolEvent); - public void toolUnusable(EventObject toolEvent); - public void toolActivated(EventObject toolEvent); - public void toolDeactivated(EventObject toolEvent); -} diff --git a/JHotDraw/src/CH/ifa/draw/framework/ViewChangeListener.java b/JHotDraw/src/CH/ifa/draw/framework/ViewChangeListener.java deleted file mode 100644 index 8c375a986..000000000 --- a/JHotDraw/src/CH/ifa/draw/framework/ViewChangeListener.java +++ /dev/null @@ -1,36 +0,0 @@ -package CH.ifa.draw.framework; - -import java.util.EventListener; - -/** - * Title: - * Description: - * Copyright: Copyright (c) 2001 - * Company: - * @author SourceForge(dnoyeb) aka C.L.Gilbert - * @version 1.0 - * @since 10/14/01 - */ -public interface ViewChangeListener extends EventListener { - - /** - * Sent when the active view has changed. - * @param newView view - */ - public void viewSelectionChanged(DrawingView oldView, DrawingView newView); - - /** - * Sent when a new view is created. This should only be fired after the view - * has a peer. I believe that means the view has a component chain all the way - * to a heavyweight container. - * @param view view - */ - public void viewCreated(DrawingView view); - - /** - * Send when an existing view is about to be destroyed. After processing this - * event, the view is not guaranteed to contain any appropriate data. You - * must not use it. - */ - public void viewDestroying(DrawingView view); -} diff --git a/JHotDraw/src/CH/ifa/draw/images/ATEXT1.gif b/JHotDraw/src/CH/ifa/draw/images/ATEXT1.gif deleted file mode 100644 index b14778e95e10b55060a08916082862f666f1cba8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQt_d|bM;<_eTR3moM@?#5n_@ypLo|&?%9_Rl@rs_Z>?SX;^>OmAEs~S@jNiI z%e_*uSZCgA&Ceg|>|(xZu*}-`V1va^joIfjN<N;ty2xls+_Pz0re&<Lx+J!oZKGeU iZa|Slah{c;Us!lmg{etZZXJK}w4{QzStf!E4Aubb*Hkb7 diff --git a/JHotDraw/src/CH/ifa/draw/images/ATEXT2.gif b/JHotDraw/src/CH/ifa/draw/images/ATEXT2.gif deleted file mode 100644 index 61025ef8ccd944517bf878bf5327b9258155b4dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ}v(bM;;arIKA=E*)u{Yf&X!si4G_GexU;*_?H{f9DnF=N(uOAkoxnWHK+$ zSorC*Qvw}dn_i_|xw!fHZQlLylUu!oj-Lp4BH12tHRVclCHwkyu|7htOZ2rKON7Z) Xn-%4|=UN%IXQXyWOfVE=V6X-N_zX=F diff --git a/JHotDraw/src/CH/ifa/draw/images/ATEXT3.gif b/JHotDraw/src/CH/ifa/draw/images/ATEXT3.gif deleted file mode 100644 index c44b27069cc020bad96a8ce4660ff5cbeab512ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu3j}bM;<_MW1)ndtB|kx20FnsZS&`EPl_l13#C(F_~RtU#>rK{dXomn}uim zgI+J4aY~|p$`O}dvxldeWc6ZATPl3?W;chwf6h8}RgK#9Dy?qe>~Fbm%ULcK=O=_z d%Czv;n%B3u`&G7ORW(j14G5d&F37-O4FHD@QNjQK diff --git a/JHotDraw/src/CH/ifa/draw/images/BORDDEC1.gif b/JHotDraw/src/CH/ifa/draw/images/BORDDEC1.gif deleted file mode 100644 index ef8d3911724b94100918c4f80cb79f716c3a3c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJud$bM;<_eZ^+~AG8;67*)ot=yR`J^&yKXLuQj+?)%DJr`MnBcbRpy%|iKj zx;I<<_Q*`HwNcgmYsyYP)mnHlq5Mz5tCkasB(m)O-SXb{>rBr<>+7%goHKj&KSWZZ LS%O`Vfx#L8?I%qp diff --git a/JHotDraw/src/CH/ifa/draw/images/BORDDEC2.gif b/JHotDraw/src/CH/ifa/draw/images/BORDDEC2.gif deleted file mode 100644 index 6c4228539e266d9da591147bc78ab4c4e82b0b2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh691vWbM;;arIKH-6C{d+HZ;y(A@`(YUBQb<?o#DzJ@3EX^Y=i)hA)r4mS`xi zHujb(cD>EJs^w=(MB-+xTSbod+ADn2oHH-oxOp<VddfSgIh{53FE6eU*#A4tph1FN Ikb%J(04`Zd`Tzg` diff --git a/JHotDraw/src/CH/ifa/draw/images/BORDDEC3.gif b/JHotDraw/src/CH/ifa/draw/images/BORDDEC3.gif deleted file mode 100644 index 206a1d1898bc2274178a3203077e1dee04282ff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK-K>bM;<_MW1)Pe^8!t*QG1bs!HwED%FBR?`~eQ(B5BDQQW_vKx50>BCW@3 zo(I+mTv!pZDq6{P*~&6$)7Zj$%@sa+ljRfpZ|-@x#QMzCXtwpApJeR1;dgld_ww9I Yj<W33rp&gk=6HQci3t+yf(#7S0D=Tk0{{R3 diff --git a/JHotDraw/src/CH/ifa/draw/images/CONN1.gif b/JHotDraw/src/CH/ifa/draw/images/CONN1.gif deleted file mode 100644 index f0f6e4d34b8aa9c4e1007066159e167a5fc68286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJKFybM;<_eTSF6SLjf<EY>#FgX!7JRZmZ+zLPk;>FlGQx4cB=y<=arx6P*i zV}sAUlEo`Zykzax-B=U$y4Y@a+>Ld{g=Xm)cYbc+SsT0M>F>~YXU;w_NRN0MY%I|z K!7j+aU=08fj7_Tm diff --git a/JHotDraw/src/CH/ifa/draw/images/CONN2.gif b/JHotDraw/src/CH/ifa/draw/images/CONN2.gif deleted file mode 100644 index 470fc08f7147fa0435a78b9a7ac266a8accb3916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh6853NbM;;arIM=kaT0#BGwLpJOi5q8DgD``IoX$^*S+7p<=Qqe-zgLC);TH* z&Rnvm$$ef)mxNRDnb$(gzDDdl6)85gizzv2-Go1q^6}5t`QOz|dN<vfg~1vCF;GQg diff --git a/JHotDraw/src/CH/ifa/draw/images/CONN3.gif b/JHotDraw/src/CH/ifa/draw/images/CONN3.gif deleted file mode 100644 index 0fbe78372d9e711df3ad1bac6b1b20dac3b49a40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh691vWbM;<_MW1)D#J=dfyJg~Ii=}B@`{KCm7f3TNx4r+9@AR$&&f|}+lpToF zRrcb_^^@mrUlFzb#v0F6M+!@$MW1?pUX^j@!)p#R?cE(FQ8M*m9$A~T|MR9AG)S-u IGB8*J0JL^SvH$=8 diff --git a/JHotDraw/src/CH/ifa/draw/images/DIAMOND1.gif b/JHotDraw/src/CH/ifa/draw/images/DIAMOND1.gif deleted file mode 100644 index 44440dc3b928a05b8f00f0bb3b6e387bae69ecd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu?96bM;<_eTOY8m^ISwHY!{Wt9pED?#kN}jsBcXTCrWf>hys=Ur`pm)cFEy zOH$s><Bt+%kDXQHGJWbx>&pEPK74T0n|(e#$Iv3ScH7<=*5ajGCzq&(_qD(CD6h0B ev{$Vy)y{3}D9g$=jYyi5C@C>bf?be-!5RQhqfdkY diff --git a/JHotDraw/src/CH/ifa/draw/images/DIAMOND2.gif b/JHotDraw/src/CH/ifa/draw/images/DIAMOND2.gif deleted file mode 100644 index 0c6f48d4c7209ee40e812dd620b754323f7bf823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlKG**bM;;arIKCm4;b6rWM`VK+4&}-DtOhotTP95-yM44yMODwG!GpyRa+^K z%+)VFmZ{~roZY+RT<nGADO|k?%G<1^CoeuJzhzEe)b=}}Te*(3Jv%??=e++j9P=}b SQnL%v?L8#A#MlKH7_0%tXiYKz diff --git a/JHotDraw/src/CH/ifa/draw/images/DIAMOND3.gif b/JHotDraw/src/CH/ifa/draw/images/DIAMOND3.gif deleted file mode 100644 index d54e8e69b3b7ff0c70f18a8443a16eee89c40513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQt+X{bM;<_MW1)DpBJ!;O!qoaR<=N6n%wMTU!oSTGTHT;!{2iD1hzfAxknW_ z+UCrS+ADtXXXmeFj!Gvx9?RKlwp94&&2GGJGVAo3wG+c1?mjhn-Lnf-bDFn*no+D1 amaC%aRbAee6W17*ry(&>j9rj{!5RSHkx&)@ diff --git a/JHotDraw/src/CH/ifa/draw/images/ELLIPSE1.gif b/JHotDraw/src/CH/ifa/draw/images/ELLIPSE1.gif deleted file mode 100644 index 5c51d07a69d156218046418b238df2278e9887ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQuCp~bM;<_eago_KTxldZ1Ry_K2K~>k=n0A(|;dx;A;8vW6GK<ITlAaJ5Mwh zZvEWKur2ktC+n$<z3C=1-aPVou%RNSX2$s!C9`h3dSzPPJF+arfAb=rzf#LjeYcdU mtxyPSY-*`ADD%=N3efJ!HJ>!OyEtWLvZTaZ33fpS25SJ~$XA5` diff --git a/JHotDraw/src/CH/ifa/draw/images/ELLIPSE2.gif b/JHotDraw/src/CH/ifa/draw/images/ELLIPSE2.gif deleted file mode 100644 index 9046010b39eca172d44fd7daea792f92ee183382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQud+2bM;;arIKHc2R?K>`N1%!WtnWmzI3bHxZL}9&$Ow<q*=|mu<W)(zsHiU zGUmvLom1PNzn(j7w-%2^Zrp;?3oT~p%$|G3P;W(Cxvk&p1hZQ2Ez5YywBDcpZdq3p flUd%RRFzX8+^kXBn%kc+QAkT-x){441A{dH{xDG( diff --git a/JHotDraw/src/CH/ifa/draw/images/ELLIPSE3.gif b/JHotDraw/src/CH/ifa/draw/images/ELLIPSE3.gif deleted file mode 100644 index 18254b0ce00a8d0418c1b805e09dd901c144f51d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQvadBbM;<_MV~Ds_%+&6uK7k^R}|J<w2Ea(jO_hwKFoRcd^WLs?rRpdop@w; z?9tzZV>2(hv(8(x%73fKQqlcR1`@3rv(LXU37HdfdzR?>^kY~4d3EUAEq-tBlU)|A p&`@1pSKeC5uieyHSv<kKK%}U?&2#4TNwac|Bo>IV3o<ZR0|2XbQvUz| diff --git a/JHotDraw/src/CH/ifa/draw/images/ERASER1.gif b/JHotDraw/src/CH/ifa/draw/images/ERASER1.gif deleted file mode 100644 index af7b09da732c121e08b1f3c37d8396029c89c4c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJlX#bM;<_eTRQX@@w!pw<}zJwsuV?Q<ipd`m1>sPMb_^{_nlf|6PdB_TW?v z5v8dyW>I|V-g2FjSC-B8w%zw&LqyD;q}sHUom*ubFU~6~R_`r(!u|YI)dRcl*_ovU UO*O5qF`cnO620Q=f(#7S0Nn{o1ONa4 diff --git a/JHotDraw/src/CH/ifa/draw/images/ERASER2.gif b/JHotDraw/src/CH/ifa/draw/images/ERASER2.gif deleted file mode 100644 index 7432c0cd56ad3ee70669a35d8496feab7a1e17fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJud$bM;;arIKC$6)bY^r_D+<FUtJA_Ti@!UlR5+ynOfi<$rb0zOC5@gSOm! zvrKAQgU_6GGo%7zZ5Mni+0!-W-g}cfGR>1r{l7QIxm|DncF0UXnEzH4hupL3zu}S+ L%@XW_3=Gx)qf|`W diff --git a/JHotDraw/src/CH/ifa/draw/images/ERASER3.gif b/JHotDraw/src/CH/ifa/draw/images/ERASER3.gif deleted file mode 100644 index da9b2b7589ed49fa13fdb7591c29210073886828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJTLzbM;<_MW1)PKP}wneBF2U&$X+%HWj?y`%0tBS?_ZHoAp~}d|>h5Z9RCa zcgbu~`;HYRQBA7-yPxO3o>R3yL8M&g*s)WOi$A6(*Ik%rwl1@&S@6sETgCSeUDmBn SE3IzOk(B6^U>9Uyum%9sj!~Wf diff --git a/JHotDraw/src/CH/ifa/draw/images/HTMLAREA1.gif b/JHotDraw/src/CH/ifa/draw/images/HTMLAREA1.gif deleted file mode 100644 index 6d9cbc532221767f9b00de02c6f1a421cf165f07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBQvRXAbM;<_eP?(7Kk-E-C3Bvd5R>w=X{%P$$~R0fTph^&{(gH*_F<)K4Tom7 zYHWHKc35utjY77CyO&K%^$p4lR+;uXt1C6W;Qboq>DT?Y>^dbk?d->IHgodtYM1(J hHMg|XYIJCLcJ_oTwN9AWEIesyt7LsWyC4IDH2|A#RBr$P diff --git a/JHotDraw/src/CH/ifa/draw/images/HTMLAREA2.gif b/JHotDraw/src/CH/ifa/draw/images/HTMLAREA2.gif deleted file mode 100644 index 9063e2d7997bea69f0e7dad6b936a6498b0b7502..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBQv9L8bM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)nrW-Ie0fuIe*RWrANNX;{=+f} z+f#n^cqaBnF4SvOn{w_)b<)&ho<Fqyd2RQfAL+d<cJZ4n;`3x~FF3ek&-Qh@PnQH& d+c&D!i?p(<s75*)^+!&aB-!51F37-O4FL3wQDguB diff --git a/JHotDraw/src/CH/ifa/draw/images/HTMLAREA3.gif b/JHotDraw/src/CH/ifa/draw/images/HTMLAREA3.gif deleted file mode 100644 index 72dc3096ad38e82696712e5270e4375443bf9b15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB((s|dbM;<_MQ3;aKhYw?pE>Qt%C5}SyZSwnz9eqCwD|oWJ_U_P9WzCyo{fQ= z<ub2k?TP<jULCf^{Z-Jc;;PyMGtHuxC~Otd+j9M}(A1Quu$g@8Z$8kx<KcbpN<~hd qQ(<j}Ph)Okeo~QWi3PjD<SPAX2BkA*sXI-d=bhQt$1cdgU=09EYE{Po diff --git a/JHotDraw/src/CH/ifa/draw/images/LINE1.gif b/JHotDraw/src/CH/ifa/draw/images/LINE1.gif deleted file mode 100644 index a9fbbccb6be1885a78e4c1d52ea310b73032e99e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh67`|MbM;<_eTS>xDRd}Y7MpkHc(3ZKE|r8`Stm~A*PZ{lv)MGZhh1b_)xpE- z+jsTOyRf3<`--Ub5pO2kyi=4L$6qe#)zq)?S<C13qGHES<$veBUsjRHcKEoA5`#4W D4N*%l diff --git a/JHotDraw/src/CH/ifa/draw/images/LINE2.gif b/JHotDraw/src/CH/ifa/draw/images/LINE2.gif deleted file mode 100644 index e991acf489dd5f1296d17070922d3903db2600fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh68xdTbM;;arIM=iaT;C+%;qIn%uHWBEoSzj4cU{U*S)vde#~6T+hp?99M|*u vD{2^Lx<usfigsFj`1SJ@chl^BUTbvL_QfV`xv-{e)56SLHs|9qN(|Nj7&b!E diff --git a/JHotDraw/src/CH/ifa/draw/images/LINE3.gif b/JHotDraw/src/CH/ifa/draw/images/LINE3.gif deleted file mode 100644 index 5436bf18983f1419d3d293ea7be69e63a7ea418e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh68WLQbM;<_MV~F$V_$UM-7@hp$Fj7peR16O+B&-}s?P6ZnPYp;@2K|QCi&YN zZ%7-ts<o7Ot&Q?MFC%7oyDck5-|)|Cv7`D1oNIlj@ASNCy?fr_>vlc&iaHn=tO2d< BMDG9q diff --git a/JHotDraw/src/CH/ifa/draw/images/OCONN1.gif b/JHotDraw/src/CH/ifa/draw/images/OCONN1.gif deleted file mode 100644 index 14283bbdc772bac4caaeea1efdbdcdafb4b5fa2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK7#)bM;<_eTP&3E3_+I7HbPJpO*f6ZNtm5nO?^>bDy@{ae4B+hwj3B`FkRL zTTFiCEnZRLb=P*?jWuDnOKwHDDjGV!6SO>iC$h=2w(!uGU7_pF#(rA&Jz~|bl_|MR KqU?eU4Aua{6-=)H diff --git a/JHotDraw/src/CH/ifa/draw/images/OCONN2.gif b/JHotDraw/src/CH/ifa/draw/images/OCONN2.gif deleted file mode 100644 index 4c8b94a457b036e4d7cdb0f6db780634fc2702b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh6853NbM;;arIKB9;xy`RXOzt}pPJsywB}Wtw)y<8%ii1g-`XDNJ7pJdvyc>z z#o`qS9>MF}-^wmNFY(RYCC)hE@h0g#`wSN7Y+iX~+aXQk=)F@HzMtmI!e9*m#Oy=A diff --git a/JHotDraw/src/CH/ifa/draw/images/OCONN3.gif b/JHotDraw/src/CH/ifa/draw/images/OCONN3.gif deleted file mode 100644 index 3b9e94e4c1f754a248aa1db6e4ee0b0f10ee8a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh691vWbM;<_MW2_Pk3G?QcT4As8Edr)CKYJSG6=hxx8`)vx&Ld!GnX$u+o7o( z)GDm!cu@61%ZjM=H`Z{Txa(DZ@6was9K{SVlXlMGTRSmh>*`v!y_F)CO?ta0hnqE; J3o<ZR0|0^!O56Yd diff --git a/JHotDraw/src/CH/ifa/draw/images/POLYGON1.gif b/JHotDraw/src/CH/ifa/draw/images/POLYGON1.gif deleted file mode 100644 index 19a954ae68ce4362ee4baefc4ffe6395b434c22c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQud+2bM;<_eTOY;nKja6ntY;{uZv4xlyhdE!>y~AWhb%co;H#%(2%JrS{j@i z%FWAgj(vSa_rsV|^8;OtEB8Ox@ZM2x_W9>;%-mv=6R&Y)tO|2<z4*L3vpnrxm1lvu eja+ecl!J$DX<kQPOk~pJ#CnP8;_QM94Aua?L{2yW diff --git a/JHotDraw/src/CH/ifa/draw/images/POLYGON2.gif b/JHotDraw/src/CH/ifa/draw/images/POLYGON2.gif deleted file mode 100644 index b7fa7a90265da375f38d14818857eba50678fb29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJTLzbM;;arIKC$uNkKZZK%zND!aUL--44%4=AL4J$tGkKJUPSf)kl%YqXLt z9TRz3cU*$&Lx|GkWv@?ryy04VYlik4MrF<2g*~^nOgxkNe8taa7v&~zvX<3V|5%eE S)Y#P0Y9Y}n&MwHnU=096^-o&> diff --git a/JHotDraw/src/CH/ifa/draw/images/POLYGON3.gif b/JHotDraw/src/CH/ifa/draw/images/POLYGON3.gif deleted file mode 100644 index 85b9f2a5b0b7fe9eaf19970060e299763553b1d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQuLw0bM;<_MW1&pKQGW1X`UPVYGsxt;|s0LpDex4Phnb=efhxc_hLB*I}V+E z?!nx{W^>8tn$WXlCzQfg+bZsRu%V*nQQGO7#%rQEEiE&`LR`w<U)#JhxZa&%s%}|9 bMVeZ^WlLs#XRCH$SEathWHEL@1_o;Y+pka; diff --git a/JHotDraw/src/CH/ifa/draw/images/RECT1.gif b/JHotDraw/src/CH/ifa/draw/images/RECT1.gif deleted file mode 100644 index 2b5701d12e2f0a0eb3cb1b396c5dd777528b18af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQv9L8bM;<_eago_KTzkp*{E>&TCYyTJWciUCcMmA0`DGoKiZn`cA1b=r%deX zr`>BScB_5ZSyDLR*yHy{-d62D(q7@CH@*Jo8-ck;64vGLPEkD@`m#VhPi~d^``XIj c>IVKgp*-=X%q(M<gbDGIol`{E1sNEu0V&l{A^-pY diff --git a/JHotDraw/src/CH/ifa/draw/images/RECT2.gif b/JHotDraw/src/CH/ifa/draw/images/RECT2.gif deleted file mode 100644 index 20468af429a22ff746851f75c49d8241ff34d266..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK!E=bM;;ar4lO%evPFd)G^GuGOH+k2&lHOA}E4vF$-8>MP<E$gqzdhc- zBBr)%x7@pzS)NlvG|o?ss%k%8u;V4`q|;lC)6UM#Dh+>LE%N=0XX#1VDeQ0LYqQ03 Py)v9MnmQ!~85pbq%PUIL diff --git a/JHotDraw/src/CH/ifa/draw/images/RECT3.gif b/JHotDraw/src/CH/ifa/draw/images/RECT3.gif deleted file mode 100644 index d94e65cf42c31f8e2ff4448fce603db77788788c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQv9L8bM;<_MW3HY$8+@gU-P}Kxo(Ljqo#WKmz>2$2j1z${Wn{n?;&!iNP@>` znX;wx-o>we_83i`o>~~~thn#NhKe4hS>366=CO-5mB^SKc-t~PVav~T^Nt^XsZ>_f cpxjiKTisa8k=|>Zla(eJF-3%3kb%J(04^0y#{d8T diff --git a/JHotDraw/src/CH/ifa/draw/images/RRECT1.gif b/JHotDraw/src/CH/ifa/draw/images/RRECT1.gif deleted file mode 100644 index cf2c152cdc40f5a1bb7d7342a84611d86c36d020..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu3j}bM;<_eago_KTzkp*{E>&7-RD5scNT+N^)<f?`r!K@oe*K0rg<seh1~% z;!UdMde_%;r2euvuN+kNs%rm(C&@l~v(JXSHQ0S9AnRu8mQLT(YuE4cYZmwYUS7;! d@7NgD;wF?QT#%V%?wL3#L9%;Vz90jGH2_seQFj0U diff --git a/JHotDraw/src/CH/ifa/draw/images/RRECT2.gif b/JHotDraw/src/CH/ifa/draw/images/RRECT2.gif deleted file mode 100644 index 99f9d8048f9739836626e1fdc79cc47c317aaa8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlKr8<bM;;arIKAW%o=Tp*L-KQPe`_&q4E4|i7w;Ilkb#!PH$WAYP+UX|M6%) zjh>Yi0r!iZ7I`+xuQ;(Jr7HPE!Ht)^lTL5_%;`LHE@SAuP|^Ie{-xJ!XV<@Z7*&<+ Uot+co6_KH3-qtHA$iQF?030+;Z2$lO diff --git a/JHotDraw/src/CH/ifa/draw/images/RRECT3.gif b/JHotDraw/src/CH/ifa/draw/images/RRECT3.gif deleted file mode 100644 index bf5eef360c1390e7719dc9d097974fec2f0224bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQv9L8bM;<_MW3HY$8+@gU-P}Kxo(Ljqo#WKmz>2$2j1z${Wn{n?;&z1PlC&6 znX;wx-o>we_8jv&d2-W<wF?CvY^d;YV?6I#ynXe&cMj`>de|0hDw$LESNG6q!ICn+ cx~ityl48r60^{85^uCNql95xr1Q{5t0gLERrT_o{ diff --git a/JHotDraw/src/CH/ifa/draw/images/SCRIBBL1.gif b/JHotDraw/src/CH/ifa/draw/images/SCRIBBL1.gif deleted file mode 100644 index 48a6d954e4f68001665ca9606774e7010fcde40a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK!E=bM;<_eTP&3#~xEWv88pv^hs&2)~Oa0E&8?T)9U_@dk*VPS=aXYYKBO_ z$6_0;>NBTx-Bv}dzws#f^xLYv7v^VcmdKvmB5OFOZtl%(Ka6ioJ74_t*WDRKpI#)% SyGFJ|NJ?}_unRIUSOWmsUQ-tU diff --git a/JHotDraw/src/CH/ifa/draw/images/SCRIBBL2.gif b/JHotDraw/src/CH/ifa/draw/images/SCRIBBL2.gif deleted file mode 100644 index fea78ceee88f17051bbd0c81491a683d98839a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh68E9ObM;;arIM=iaX%_At2Hh5U|RNSm8$q6`O;0Fvi5#__TOOv%Xh7HQ7Xz> zWnN-4jc2S*S@W&whQbyr)uP=eu9Q40{nTf<QRJ@4;ZsSstaUQaUoN$t`A;_Sp9H%g H1A{dHgKkMb diff --git a/JHotDraw/src/CH/ifa/draw/images/SCRIBBL3.gif b/JHotDraw/src/CH/ifa/draw/images/SCRIBBL3.gif deleted file mode 100644 index ac467864796f2e16ddaa31120ee541662ac03ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ%j%bM;<_MW1(ki9NyiXv@?EYSRwPT(>@bS)|9YyFBkV_Wj=}_V#+x&LWqV z!WqFrtt+nbK6@Ogs@qa_`fZi(bpr_wncM5O1`3+I-FW@^_Q<zA_P2Kb+#6E=@}qoZ UL6%rpRZ38VM7J2bAOnLn08gAzhX4Qo diff --git a/JHotDraw/src/CH/ifa/draw/images/SEL1.gif b/JHotDraw/src/CH/ifa/draw/images/SEL1.gif deleted file mode 100644 index 0d0bb054559fb9355ca17b4212a3aa6451bb342d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK-K>bM;<_eTS_p9!xHkZSs*`nU!2w_j=1JHL2!!?`t34?A~_2f4Wkw%i-{g z!dx%;j@;1L-o+KUdwS;Sw^f~IH(0FciCvf~YAR`BRU20Rxiimr?vyoiCtF{7ELZN| YU|d&a>txi<AKx1%F<~NuAOnLn0Jtkoz5oCK diff --git a/JHotDraw/src/CH/ifa/draw/images/SEL2.gif b/JHotDraw/src/CH/ifa/draw/images/SEL2.gif deleted file mode 100644 index 025ac9c3c10aa410e37cd2be2d4733088b6134ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlKr8<bM;;arIKCK&rhzszh&axDP1d0E-c`llbf;m>7QeA4a;}+7I>(5l^BS= z_fY<sqpZG3?bp*;Ht`}mqL0NKEx7UYtl!+!qFn96-xl02ewp^P?0&$hulr`T-0-Op Vs>sRm_K$9BZ<Xln6J%hp1^`3XQilKl diff --git a/JHotDraw/src/CH/ifa/draw/images/SEL3.gif b/JHotDraw/src/CH/ifa/draw/images/SEL3.gif deleted file mode 100644 index fcbe6603d7f53d9a49ba0e451de047e2f7d03d53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu?96bM;<_MW1)D`*SG7{_LG+S@wW=nNZdy6`SL??{<ZpJ!N*og?*1?>(Tzx z;&Yy~EPTQBGh}C!WRmF%p}?I9S2-N@W}nY^UN|@C_MPmC=p%DZdhcHP@!ZMFZ-dK} fs`49iwH5RmN_|@@+6rUadvY2ircW1SV6X-Nve{HT diff --git a/JHotDraw/src/CH/ifa/draw/images/TEMPLATE.gif b/JHotDraw/src/CH/ifa/draw/images/TEMPLATE.gif deleted file mode 100644 index 4b09907701246543b02aa42d8c2aa26ebd2a5c72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh;`^b&bM;<_eTR4dmuvEo&ZtwWTo=PNWzEY&hF1Hw)?BXK{oPD-gR!(w{-PyC pC+FDCyRahUm$6(|*qT7=Cro>73;be~kEfkAF>cOG<`ZPF1^}o8K6d~B diff --git a/JHotDraw/src/CH/ifa/draw/images/TEMPLAT_.gif b/JHotDraw/src/CH/ifa/draw/images/TEMPLAT_.gif deleted file mode 100644 index 223cd29ecaf5a6e2720660fe7d5cde747df69b9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh;`5=wbM;<_MW1)Pf1vIcozbP<xh{SAwl^G84Bwn9{rBuc-f_EmJ>OnG>^dNs pbTY?kzRD6^t(?H6E3&^XKH9YFHv0|hb<>un$FUtgCZoh)4FEt=L<#@^ diff --git a/JHotDraw/src/CH/ifa/draw/images/TEXT1.gif b/JHotDraw/src/CH/ifa/draw/images/TEXT1.gif deleted file mode 100644 index 5ebb27c4c703e4e4b53220d98652727cee9208b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQud+2bM;<_eTR3moM@?#5n_@ypLo|&?%9-0mrftk*tu;{`}r*jZ&*a`bvSmN zZNHM5V7u(h=FhI}!N~&Yud4PxxS#B!H~XybTf^$rlj^oi-aYkMug2>+SKFq)@|LJo g%~bT3Z7Ps2))I}V&#L23oSY!pI9-fgkb%J(077h1?f?J) diff --git a/JHotDraw/src/CH/ifa/draw/images/TEXT2.gif b/JHotDraw/src/CH/ifa/draw/images/TEXT2.gif deleted file mode 100644 index 7c1fbdee0ede5090c8b4365c8e14f0bad6e43a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ%j%bM;;arIKCWMZT9_HuHPjI7K00SwU1+`m#;;W!}Gi_Wyu_`}X3a9Y*4M z&lhdA(@s9$+2rc#eQ%@Y8>Wf3o@nco^)0&naVHaVb=YC8;Jc06b1s{@>18@CHLdW- T@f4{oNl~e-?r9TbV6X-NV2Dkk diff --git a/JHotDraw/src/CH/ifa/draw/images/TEXT3.gif b/JHotDraw/src/CH/ifa/draw/images/TEXT3.gif deleted file mode 100644 index 5f316eb149e76d2badcfff6069f3ea64a3f76271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK-K>bM;<_MW1)ndtB|kx20FnsZS)c?t_%~fuBp?sO&GY|7<*ewU|wdk)493 ztMj2LZahyt-*hC2WpCA3qPXwDhKiby!kx?Vd}r_l<*fd;PVN7d;yFfTzOncI`)PQU Y3bPxhTBgP3)O6?h22E@gWMHrc0DUG-K>z>% diff --git a/JHotDraw/src/CH/ifa/draw/images/TEXTAREA1.gif b/JHotDraw/src/CH/ifa/draw/images/TEXTAREA1.gif deleted file mode 100644 index 1b210e93658f8b842965f810ef2e905f835280a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB67r$JbM;<_eP?(7Kk-E-C3Bvd5R>w&d8>Y$OF46C^WCI~m5<lYZ<+4M*|_0q xU&KeviN~H#cy8sC9h4@lz1wQ{z2>i0ZPO;EFYr5>xBI^K4w-ouv-kxWtN~D0M@|3$ diff --git a/JHotDraw/src/CH/ifa/draw/images/TEXTAREA2.gif b/JHotDraw/src/CH/ifa/draw/images/TEXTAREA2.gif deleted file mode 100644 index 5ae72ea0ed2120f1f5a08849cf156adb1e888969..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB;`^b&bM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)MQbmW^*;a1xm@DR+2fPnHcggW pb;C+Y`><;9Qy#7Q%NpM}S%o%76-4ArYASy&ESd30iC>Vx8UU#BK2-n! diff --git a/JHotDraw/src/CH/ifa/draw/images/TEXTAREA3.gif b/JHotDraw/src/CH/ifa/draw/images/TEXTAREA3.gif deleted file mode 100644 index 23f4ce93a5fa0be469cd32b9a4825b6bdc40b33b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB68fRRbM;<_MQ3;aKhYw?pE>Qt%C5}SyZV2e+rXkwT6b#Kxk(ad-nnTntJ|2s ycFb68qSxtyE7kV`0;4v+YI4&IUjAO|n$S+;l$~2+XJ5&9bF+3!?bLP-25SImd`GPS diff --git a/JHotDraw/src/CH/ifa/draw/images/TOBACK1.gif b/JHotDraw/src/CH/ifa/draw/images/TOBACK1.gif deleted file mode 100644 index 567e489b72e480d175b2157361e77f34ab9aaf35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQud+2bM;<_eTNT5$8)5~v@2W=TX!R6QQXa-*M-YAam@Mi_tDk`AH;;Eyj`ZU z9pRZc!C-0o&euP40+X+LdCBc}SzU3*+xFaxEm3p-O6{Gy?9WeauP3{t{=Cb%y3{v1 gwcbc9IX2g^$)>|0&#}5++cRZqv+)cQK?VkE0EH1${{R30 diff --git a/JHotDraw/src/CH/ifa/draw/images/TOBACK2.gif b/JHotDraw/src/CH/ifa/draw/images/TOBACK2.gif deleted file mode 100644 index 6917725772fb5159a45302490e4007968e91e5f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlKY{-bM;;arIKAW+!}2&)fs26Tom0sC3w}jFPh~CPVCY@cg?}S$6aSxo0?DR zSK+>Ss)@qOwGS;bemYf{hp+d6*rsUd$(th_GS(*FQ+ZQy<$GB7mJ+?by~Vj-)kVW9 V9cq(W(lhcqEgGZx*##LGtN|`bOXL6m diff --git a/JHotDraw/src/CH/ifa/draw/images/TOBACK3.gif b/JHotDraw/src/CH/ifa/draw/images/TOBACK3.gif deleted file mode 100644 index 0734a255fa3c12e374155bb0c5effe6db129004b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQt_d|bM;<_MV~Dq_%+%b(!CCp&C`6eFVcKv%-&l+a_S#m-nUMot4#Y@kj3J_ z^hdoeOO-FaJj^juj$0t?u-4?*C*Q4a&pN;1io~6e_O*x1nyyy=nq<67R^<G--KF*p ifuZ$Ajp;3w2~ufYd9DRT*<RgKDl`gaNeVJBSOWmZtyEe7 diff --git a/JHotDraw/src/CH/ifa/draw/images/TOFRONT1.gif b/JHotDraw/src/CH/ifa/draw/images/TOFRONT1.gif deleted file mode 100644 index e598010f002f95e097b07407e0dc4ca5290067b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu(35bM;<_eTNT5$8)5~v@2W=TX!R6QQXa-*M-YAtziD%ef_`#T``?$ZCbn; zl1j3Pp8S(fI{)lA@G8^WNoxP$wG}>M%jI5dsoL9C*L&|=$df&8&rk0<t9$)vX0^Rg ig?wmijgWC$nQK&9Prg&fL~W1M=_!(3vn2%?7_0%%2vd&$ diff --git a/JHotDraw/src/CH/ifa/draw/images/TOFRONT2.gif b/JHotDraw/src/CH/ifa/draw/images/TOFRONT2.gif deleted file mode 100644 index aaa1758c47e6d990f9f4766d43c9a29d76230c75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ}v(bM;;arIKAW+!}2&)fs26Tom0sC3w}jFPh~CR%|wi{y%R<wuj6u3rC*R zr`)fcRGz(MzMESWtj5;PRMmR)L%@r_6Hjk3UUy1QbveVg6K7jbFPv&s^q1x17d0=D X@CH+z<kpO!>Mlq1rU{aQ3=Gx)<a$m% diff --git a/JHotDraw/src/CH/ifa/draw/images/TOFRONT3.gif b/JHotDraw/src/CH/ifa/draw/images/TOFRONT3.gif deleted file mode 100644 index 7420d65229120749ee2d9e1486bdb6c65fb26c1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQuU$1bM;<_MV~Dq_%+%b(!CCp&C`6eFVcKv%-&l+a_STHw;77Obvv`P;OL@r zN2LGedG}uqU+F48qf5KOwJP%Xlk2ytW}bhM>vd*c<7UTaw_dG2Zd)8#TXOuFYPGFH j5r<BrLUToHd}^9%muEpsPI6uM6c@>Y*&^(M3=Gx)s%TZQ diff --git a/JHotDraw/src/CH/ifa/draw/images/TRIANGLE1.gif b/JHotDraw/src/CH/ifa/draw/images/TRIANGLE1.gif deleted file mode 100644 index d3e40b57d567538f6daf9e555ea1dcb581595cd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu?96bM;<_eTR3;`9CY<Fv^wr(D3F}mwRPjiR|oGE4C^4JkppQFin`R(d@v1 z=Zb9BUe_l*`{Gim9e*`LdD^}Q8*cp6n0-FOWK#6)YctN8`m+8%`)tiFX)WHsr}DM7 fh2=sKHU`lW-DR#h%6`d{k|evQiLnbZFjxZsl^9UM diff --git a/JHotDraw/src/CH/ifa/draw/images/TRIANGLE2.gif b/JHotDraw/src/CH/ifa/draw/images/TRIANGLE2.gif deleted file mode 100644 index b6a48fdbe47c51d90395eef9902b26465af45c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ%j%bM;;arIKCW4@{_4*f8;-@rpG+eAPA2Pda(><*P+zZ>P^*P~h?8K%V`r zz>`uRlh%iQ?wsOLdYMn>r?uGr!>Z+Ka>2Xz8NGXGGr2T3K~$yp`hr{8VYitR|7-cB UO0?8eq(zywbc?VHGB8*J0ORmZ@&Et; diff --git a/JHotDraw/src/CH/ifa/draw/images/TRIANGLE3.gif b/JHotDraw/src/CH/ifa/draw/images/TRIANGLE3.gif deleted file mode 100644 index 6fbdab7df54ee05e19389064b599f127fa7a21b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu3j}bM;<_MW1)PKQOs;iFvMyflc=5O$#{}#K+#dl;i#0>e_PIycvrH`&|{) z-FWyyH!NExQna&fK_*}EM9HZ^Efqd`vjx?cSn;xLp3l7OEpJVt{g)}B^JYC<Wvf(N dR}p4gQ_|38SJ9H?RGDio88cOkU66sn8UR={OnCqR diff --git a/JHotDraw/src/CH/ifa/draw/images/URL1.gif b/JHotDraw/src/CH/ifa/draw/images/URL1.gif deleted file mode 100644 index 18fecf8b5402640df3d39a92367d0d6f0c22d2f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ4RaStOExQG&D5)XJBCX&+s2i{RgxD|NpN8 z(gD)zz%uzmgXikK4tA9l-(qhlp4ifQrdi;G+lm~ISuz>j$9d-bn7D5C)HPdPOIBOm z`#57ws>WRYbvt<kIh0nta8G!$E^^VNk5(~>OFpz5$=iMZWP6R@`s+viPO4<()Xl32 z%5tqYYjQTJs*$U1_OjrasF~K`Y8&GiF||KNB_)kxc68cgeeF!;3XPc=3;PN-<oio( L5oZ@<V6X-Ncz|8< diff --git a/JHotDraw/src/CH/ifa/draw/images/URL2.gif b/JHotDraw/src/CH/ifa/draw/images/URL2.gif deleted file mode 100644 index b328f34f69ecd307f0bcd83c4f944fa77108a87f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ4RaStOExQG&D5)XJBCX&+s2i{RgxD|NpN8 z(gD)zz|#An!E^Oq2c?pf^H;9-%5Rvc{8@pecms>&+>BgrwerO-Hs^MUJS=>%mSfAM zw39hjmJSoujkmhmUe$S(6}+)yO+4RISE2Sb4|0x&+1>Zc+g-M_N$t{G32vdluO?-Y z^+weeLFFwLp0PZA=}A2*sR?#@rm50Ah8`0gW%YE^-93xgwe&MQ<_Alx6K5A>V6X-N DBkohz diff --git a/JHotDraw/src/CH/ifa/draw/images/URL3.gif b/JHotDraw/src/CH/ifa/draw/images/URL3.gif deleted file mode 100644 index cae0fdfbfda19073ee60e002c714f17fd0a8da03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ4RaStOExQG&D5)XJBCX&+s2i{RgxD|NpN8 z(gD)zz%u(ogXikK4vRh?n4EB}Rz;mL`lkWElY-vDsll&Wh09l`XRYc{@OE<k%jX>a zy7j@;zC9~mT5`Qy<@Y#!)83#>b`L%^3;1qTJJ#rMV_U%4VhJz(L+^g<kqevrtG-r2 z*<3PBt5HcVzA2z1F1D>fqn>?gcJ8FYKpii3y_vJUjSQ!%G^)(em(SHpTrR^igJF$N T`{dFc%hV<Ih_MSYFjxZsJRDuP diff --git a/JHotDraw/src/CH/ifa/draw/images/ZOOM1.gif b/JHotDraw/src/CH/ifa/draw/images/ZOOM1.gif deleted file mode 100644 index 19846a6b4d508c26a6eab125e89211221bcf8337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmZ?wbhEHblwgoxc+3C-`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|F8Iu z&o?n8RiQkyBtya7(>H)Y2V@4wGzJ!n4<|fV@3nY+cK3gAg{}oGHX2+F>9f|wy|yb* l-)&mH|Ngp7#zNUHI-zcETt=BfM$^yB6nm|WG8bg91^^%4H`f3F diff --git a/JHotDraw/src/CH/ifa/draw/images/ZOOM2.gif b/JHotDraw/src/CH/ifa/draw/images/ZOOM2.gif deleted file mode 100644 index 6f98416d189b60f397f6dadb8cdf7ee998840895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmZ?wbhEHblwgoxc+3C-`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBV*cTT=jy!{ug~uOufWlhT*2T!i)qoTO>(c+&9^x`_wP01v-@{QWM(Xy&^1~4 TQ%IE7#Is9FypFmsFjxZs#+5ei diff --git a/JHotDraw/src/CH/ifa/draw/images/ZOOM3.gif b/JHotDraw/src/CH/ifa/draw/images/ZOOM3.gif deleted file mode 100644 index c512db3d8d2c620a556c77fbb02cf5e5ed420c0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmZ?wbh9u|lwgox_|5<V`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|L?}Y zz>r$Zz_8!p`+iOi1_nk31_qXQVGRHO|Nmd3<<|r<kZHmnkYNmm-i9%BybWUzvH!lG znSp`fx8wKy6Q=yx|LQD+KJqb)VgK7OkQRmvD6KR<f?>(qFos9M-}lEeGB6w!`o5nb zGmIhOPx8TKdO!Cgi!Uf-VBlb2V9*KtzMt8dfdOP5$gny3nIMWmVSWU|57q!T#}H#9 zhPPqPRxu3w#W#Q7&%odSmIt}%4{HE}6$1lE9fQY*FoxSApX*`rAUO`v&-FYP{?>!o zh6<m-^s##o8e|9yBLhS3z0dU)AHo>se1Z4{WL}#%NEU*b7`P8JFt9OLGB7YO#yT+Y zeGOx1c^Ag;xbpXYmL(e+8JHNrVjww?8heHfjXT~!%mcAOYL3J>FxbR8FdTRn#$a^u zJ6IpcK7p@c3@2h77)lrz7(i-4`atG^_#k<Z3(mX?V*rW0co)Vn_d3Xb3=9nK!x-+c zq&9-g1%)k$|8K!}l<)z$1!Q)?r!WSPIv2F?0m;F_2gC-24~SO3_ql%h2XI(4Sp5IK zAH?<v2w?z)H^@DpG~<z9;!>1Y9#dSD9OLW}lR4*o7=r}^149J^1H%Mg2Zo7@A@RiF z=KvN5>Ei*%n*&%L#0O!JA3);BW=AZA=>7ly|8oTf28OkZzwh@E;{c~oP|WifBs4M@ zBs3~)O=(p8$pSKlK?g*F@&p6NBnEi~36Bj64mLBeC`Fvuu<&p@2b+?`hlWK*yCn3p zrp(y5*sY(5(TC;dMwR2;Y@SI|IzBaePv`Uwv(fyp^z00U$a7nM3N@TzHWB``Ml)Fb z!a}BcHrKAti!aVHubs5SQ*dF(a;5rnG8sWjyt-L7_FdtclI^xC{_wgpzrN-KZ%MJX Z>)m}(`|g~a_jx>-TlEjJGcqz*0|2%6KxF^` diff --git a/JHotDraw/src/CH/ifa/draw/images/pspbrwse.jbf b/JHotDraw/src/CH/ifa/draw/images/pspbrwse.jbf deleted file mode 100644 index 412902ade2fab1b81d220a2717e8c91f2685093e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21230 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 F1OVlMK6?NF diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw.jdo b/JHotDraw/src/CH/ifa/draw/samples/javadraw.jdo deleted file mode 100644 index aa4500a1f..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw.jdo +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="CH.ifa.draw.samples.javadraw"> - <class name="BouncingDrawing"> - </class> - <class name="AnimationDecorator"> - </class> - </package> -</jdo> diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/AnimationDecorator.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/AnimationDecorator.java deleted file mode 100644 index daf0041fc..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/AnimationDecorator.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * @(#)AnimationDecorator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import java.awt.*; -import java.io.IOException; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class AnimationDecorator extends DecoratorFigure implements Animatable { - - private int fXVelocity; - private int fYVelocity; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 7894632974364110685L; - private int animationDecoratorSerializedDataVersion = 1; - - public AnimationDecorator() { } - - public AnimationDecorator(Figure figure) { - super(figure); - fXVelocity = 4; - fYVelocity = 4; - } - - public void velocity(int xVelocity, int yVelocity) { - fXVelocity = xVelocity; - fYVelocity = yVelocity; - } - - public Point velocity() { - return new Point(fXVelocity, fYVelocity); - } - - public void animationStep() { - int xSpeed = fXVelocity; - int ySpeed = fYVelocity; - Rectangle box = displayBox(); - - if ((box.x + box.width > 300) && (xSpeed > 0)) - xSpeed = -xSpeed; - - if ((box.y + box.height > 300) && (ySpeed > 0)) - ySpeed = -ySpeed; - - if ((box.x < 0) && (xSpeed < 0)) - xSpeed = -xSpeed; - - if ((box.y < 0) && (ySpeed < 0)) - ySpeed = -ySpeed; - - velocity(xSpeed, ySpeed); - moveBy(xSpeed, ySpeed); - } - - // guard concurrent access to display box - - public synchronized void basicMoveBy(int x, int y) { - super.basicMoveBy(x, y); - } - - public synchronized void basicDisplayBox(Point origin, Point corner) { - super.basicDisplayBox(origin, corner); - } - - public synchronized Rectangle displayBox() { - return super.displayBox(); - } - - //-- store / load ---------------------------------------------- - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fXVelocity); - dw.writeInt(fYVelocity); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fXVelocity = dr.readInt(); - fYVelocity = dr.readInt(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/Animator.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/Animator.java deleted file mode 100644 index e9acdfb8e..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/Animator.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * @(#)Animator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Animatable; - -/** - * @version <$CURRENT_VERSION$> - */ -public class Animator extends Thread { - - private DrawingView fView; - private Animatable fAnimatable; - - private volatile boolean fIsRunning; - private static final int DELAY = 1000 / 16; - - public Animator(Animatable animatable, DrawingView view) { - super("Animator"); - fView = view; - fAnimatable = animatable; - } - - public void start() { - super.start(); - fIsRunning = true; - } - - public void end() { - fIsRunning = false; - } - - public void run() { - while (fIsRunning) { - long tm = System.currentTimeMillis(); - fView.freezeView(); - fAnimatable.animationStep(); - fView.checkDamage(); - fView.unfreezeView(); - - // Delay for a while - try { - tm += DELAY; - Thread.sleep(Math.max(0, tm - System.currentTimeMillis())); - } - catch (InterruptedException e) { - break; - } - } - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/BouncingDrawing.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/BouncingDrawing.java deleted file mode 100644 index bfb98f112..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/BouncingDrawing.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * @(#)BouncingDrawing.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.Animatable; - -/** - * @version <$CURRENT_VERSION$> - */ -public class BouncingDrawing extends StandardDrawing implements Animatable { - /* - * Serialization support. - */ - private static final long serialVersionUID = -8566272817418441758L; - private int bouncingDrawingSerializedDataVersion = 1; - - public synchronized Figure add(Figure figure) { - if (!(figure instanceof AnimationDecorator) && - !(figure instanceof ConnectionFigure)) { - figure = new AnimationDecorator(figure); - } - return super.add(figure); - } - - public synchronized Figure remove(Figure figure) { - Figure f = super.remove(figure); - if (f instanceof AnimationDecorator) { - return ((AnimationDecorator) f).peelDecoration(); - } - return f; - } - - /** - * @param figure figure to be replaced - * @param replacement figure that should replace the specified figure - * @return the figure that has been inserted (might be different from the figure specified) - */ - public synchronized Figure replace(Figure figure, Figure replacement) { - if (!(replacement instanceof AnimationDecorator) && - !(replacement instanceof ConnectionFigure)) { - replacement = new AnimationDecorator(replacement); - } - return super.replace(figure, replacement); - } - - public void animationStep() { - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - - if(!(f instanceof ConnectionFigure)) { - ((AnimationDecorator) f).animationStep(); - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/FollowURLTool.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/FollowURLTool.java deleted file mode 100644 index c582b3d69..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/FollowURLTool.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * @(#)FollowURLTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import javax.swing.JApplet; -import java.awt.event.*; -import java.net.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.AbstractTool; - -/** - * @version <$CURRENT_VERSION$> - */ -class FollowURLTool extends AbstractTool { - private JApplet fApplet; - - FollowURLTool(DrawingEditor newDrawingEditor, JApplet applet) { - super(newDrawingEditor); - fApplet = applet; - } - - /** - * Handles mouse move events in the drawing view. - */ - public void mouseMove(MouseEvent e, int x, int y) { - String urlstring = null; - Figure figure = drawing().findFigureInside(x,y); - if (figure != null) { - urlstring = (String) figure.getAttribute(FigureAttributeConstant.URL); - } - if (urlstring != null) { - fApplet.showStatus(urlstring); - } - else { - fApplet.showStatus(""); - } - } - - /** - * Handles mouse up in the drawing view - * assuming mouseUp came from active drawing. - */ - public void mouseUp(MouseEvent e, int x, int y) { - Figure figure = getActiveDrawing().findFigureInside(x, y); - if (figure == null) { - return; - } - String urlstring = (String) figure.getAttribute(FigureAttributeConstant.URL); - if (urlstring == null) { - return; - } - - try { - URL url = new URL(fApplet.getDocumentBase(), urlstring); - fApplet.getAppletContext().showDocument(url); - } - catch (MalformedURLException exception) { - fApplet.showStatus(exception.toString()); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawApp.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawApp.java deleted file mode 100644 index 6ed086d2e..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawApp.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * @(#)JavaDrawApp.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.util.*; -import CH.ifa.draw.application.*; -import CH.ifa.draw.contrib.*; -import CH.ifa.draw.contrib.html.HTMLTextAreaFigure; -import CH.ifa.draw.contrib.html.HTMLTextAreaTool; -import CH.ifa.draw.contrib.zoom.ZoomDrawingView; -import CH.ifa.draw.contrib.zoom.ZoomTool; - -import javax.swing.*; -import java.awt.*; -import java.io.*; -import java.net.URL; - -/** - * @version <$CURRENT_VERSION$> - */ -public class JavaDrawApp extends MDI_DrawApplication { - - private Animator fAnimator; - private static String fgSampleImagesPath = "/CH/ifa/draw/samples/javadraw/sampleimages"; - private static String fgSampleImagesResourcePath = fgSampleImagesPath + "/"; - - JavaDrawApp() { - super("JHotDraw"); - } - - /** - * Expose constructor for benefit of subclasses. - * - * @param title The window title for this application's frame. - */ - public JavaDrawApp(String title) { - super(title); - } - - /** - * Factory method which create a new instance of this - * application. - * - * @return newly created application - */ - protected DrawApplication createApplication() { - return new JavaDrawApp(); - } - - protected DrawingView createDrawingView(Drawing newDrawing) { - Dimension d = getDrawingViewSize(); - DrawingView newDrawingView = new ZoomDrawingView(this, d.width, d.height); - newDrawingView.setDrawing(newDrawing); - // notify listeners about created view when the view is added to the desktop - //fireViewCreatedEvent(newDrawingView); - return newDrawingView; - } - - //-- application life cycle -------------------------------------------- - - public void destroy() { - super.destroy(); - endAnimation(); - } - - //-- DrawApplication overrides ----------------------------------------- - - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new ZoomTool(this); - palette.add(createToolButton(IMAGES + "ZOOM", "Zoom Tool", tool)); - - tool = new UndoableTool(new TextTool(this, new TextFigure())); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - tool = new UndoableTool(new ConnectedTextTool(this, new TextFigure())); - palette.add(createToolButton(IMAGES + "ATEXT", "Connected Text Tool", tool)); - - tool = new URLTool(this); - palette.add(createToolButton(IMAGES + "URL", "URL Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new RectangleFigure())); - palette.add(createToolButton(IMAGES + "RECT", "Rectangle Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new RoundRectangleFigure())); - palette.add(createToolButton(IMAGES + "RRECT", "Round Rectangle Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new EllipseFigure())); - palette.add(createToolButton(IMAGES + "ELLIPSE", "Ellipse Tool", tool)); - - tool = new UndoableTool(new PolygonTool(this)); - palette.add(createToolButton(IMAGES + "POLYGON", "Polygon Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new TriangleFigure())); - palette.add(createToolButton(IMAGES + "TRIANGLE", "Triangle Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new DiamondFigure())); - palette.add(createToolButton(IMAGES + "DIAMOND", "Diamond Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new LineFigure())); - palette.add(createToolButton(IMAGES + "LINE", "Line Tool", tool)); - - tool = new UndoableTool(new ConnectionTool(this, new LineConnection())); - palette.add(createToolButton(IMAGES + "CONN", "Connection Tool", tool)); - - tool = new UndoableTool(new ConnectionTool(this, new ElbowConnection())); - palette.add(createToolButton(IMAGES + "OCONN", "Elbow Connection Tool", tool)); - - tool = new UndoableTool(new ScribbleTool(this)); - palette.add(createToolButton(IMAGES + "SCRIBBL", "Scribble Tool", tool)); - - tool = new UndoableTool(new BorderTool(this)); - palette.add(createToolButton(IMAGES + "BORDDEC", "Border Tool", tool)); - - Component button = new JButton("Hello World"); - tool = new CreationTool(this, new ComponentFigure(button)); - palette.add(createToolButton(IMAGES + "RECT", "Component Tool", tool)); - - tool = new TextAreaTool(this, new TextAreaFigure()); - palette.add(createToolButton(IMAGES + "TEXTAREA", "TextArea Tool", tool)); - - GraphicalCompositeFigure fig = new GraphicalCompositeFigure(); - fig.setLayouter(new SimpleLayouter(fig)); - tool = new CreationTool(this, fig); - palette.add(createToolButton(IMAGES + "RECT", "Container Figure Tool", tool)); - - tool = new CompositeFigureCreationTool(this, new RectangleFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Nested Figure Tool", tool)); - - tool = new HTMLTextAreaTool(this, new HTMLTextAreaFigure()); - palette.add(createToolButton(IMAGES + "TEXTAREA", "HTML TextArea Tool", tool)); - - LineConnection lineConnection = new LineConnection(); - lineConnection.setStartDecoration(null); - tool = new UndoableTool(new SplitConnectionTool(this, lineConnection)); - palette.add(createToolButton(IMAGES + "OCONN", "Split Connection Tool", tool)); - } - - protected Tool createSelectionTool() { - return new MySelectionTool(this); - } - - protected void createMenus(JMenuBar mb) { - super.createMenus(mb); - addMenuIfPossible(mb, createAnimationMenu()); - addMenuIfPossible(mb, createImagesMenu()); - addMenuIfPossible(mb, createWindowMenu()); - } - - protected JMenu createAnimationMenu() { - CommandMenu menu = new CommandMenu("Animation"); - Command cmd = new AbstractCommand("Start Animation", this) { - public void execute() { - startAnimation(); - } - }; - menu.add(cmd); - - cmd = new AbstractCommand("Stop Animation", this) { - public void execute() { - endAnimation(); - } - }; - menu.add(cmd); - return menu; - } - - protected JMenu createWindowMenu() { - CommandMenu menu = new CommandMenu("Window"); - Command cmd = new AbstractCommand("New View", this) { - public void execute() { - newView(); - } - }; - menu.add(cmd); - - cmd = new AbstractCommand("New Window", this, false) { - public void execute() { - newWindow(createDrawing()); - } - }; - menu.add(cmd); - - menu.addSeparator(); - menu.add(new WindowMenu("Window List", (MDIDesktopPane)getDesktop(), this)); - return menu; - } - - protected JMenu createImagesMenu() { - CommandMenu menu = new CommandMenu("Images"); - URL url = getClass().getResource(fgSampleImagesPath); - if (url == null) { - throw new JHotDrawRuntimeException("Could not locate images: " + fgSampleImagesPath); - } - File imagesDirectory = new File(url.getFile()); - - try { - String[] list = imagesDirectory.list(); - for (int i = 0; i < list.length; i++) { - String name = list[i]; - String path = fgSampleImagesResourcePath+name; - menu.add(new UndoableCommand( - new InsertImageCommand(name, path, this))); - } - } - catch (Exception e) { - // do nothing - } - return menu; - } - - protected Drawing createDrawing() { - Drawing dwg = new BouncingDrawing(); - dwg.setTitle(getDefaultDrawingTitle()); - return dwg; - //return new StandardDrawing(); - } - - //---- animation support -------------------------------------------- - - public void startAnimation() { - if (view().drawing() instanceof Animatable && fAnimator == null) { - fAnimator = new Animator((Animatable)view().drawing(), view()); - fAnimator.start(); - } - } - - public void endAnimation() { - if (fAnimator != null) { - fAnimator.end(); - fAnimator = null; - } - } - - protected JMenu createDebugMenu() { - CommandMenu menu = (CommandMenu)super.createDebugMenu(); - - Command cmd = new AbstractCommand("Clipping Update", this) { - public void execute() { - this.view().setDisplayUpdate(new ClippingUpdateStrategy()); - } - }; - menu.add(cmd); - - return menu; - } - - //-- main ----------------------------------------------------------- - - public static void main(String[] args) { - JavaDrawApp window = new JavaDrawApp(); - window.open(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawApplet.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawApplet.java deleted file mode 100644 index 602655c6c..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawApplet.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * @(#)JavaDrawApplet.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.util.*; -import CH.ifa.draw.applet.*; -import CH.ifa.draw.contrib.*; - -import javax.swing.*; -import java.awt.event.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class JavaDrawApplet extends DrawApplet { - - transient private JButton fAnimationButton; - transient private Animator fAnimator; - - //-- applet life cycle -------------------------------------------- - - public void destroy() { - super.destroy(); - endAnimation(); - } - - //-- DrawApplet overrides ----------------------------------------- - - protected void createTools(JPanel palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - tool = new ConnectedTextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES + "ATEXT", "Connected Text Tool", tool)); - - tool = new URLTool(this); - palette.add(createToolButton(IMAGES + "URL", "URL Tool", tool)); - - tool = new CreationTool(this, new RectangleFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Rectangle Tool", tool)); - - tool = new CreationTool(this, new RoundRectangleFigure()); - palette.add(createToolButton(IMAGES + "RRECT", "Round Rectangle Tool", tool)); - - tool = new CreationTool(this, new EllipseFigure()); - palette.add(createToolButton(IMAGES + "ELLIPSE", "Ellipse Tool", tool)); - - tool = new PolygonTool(this); - palette.add(createToolButton(IMAGES + "POLYGON", "Polygon Tool", tool)); - - tool = new CreationTool(this, new TriangleFigure()); - palette.add(createToolButton(IMAGES + "TRIANGLE", "Triangle Tool", tool)); - - tool = new CreationTool(this, new DiamondFigure()); - palette.add(createToolButton(IMAGES + "DIAMOND", "Diamond Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES + "LINE", "Line Tool", tool)); - - tool = new ConnectionTool(this, new LineConnection()); - palette.add(createToolButton(IMAGES + "CONN", "Connection Tool", tool)); - - tool = new ConnectionTool(this, new ElbowConnection()); - palette.add(createToolButton(IMAGES + "OCONN", "Elbow Connection Tool", tool)); - - tool = new ScribbleTool(this); - palette.add(createToolButton(IMAGES + "SCRIBBL", "Scribble Tool", tool)); - - tool = new PolygonTool(this); - palette.add(createToolButton(IMAGES + "POLYGON", "Polygon Tool", tool)); - - tool = new BorderTool(this); - palette.add(createToolButton(IMAGES + "BORDDEC", "Border Tool", tool)); - } - - protected void createButtons(JPanel panel) { - super.createButtons(panel); - fAnimationButton = new JButton("Start Animation"); - fAnimationButton.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent event) { - toggleAnimation(); - } - } - ); - panel.add(fAnimationButton); - } - - protected Drawing createDrawing() { - return new BouncingDrawing(); - } - - //-- animation support ---------------------------------------------- - - public void startAnimation() { - if ((drawing() instanceof Animatable) && (fAnimator == null)) { - fAnimator = new Animator((Animatable)drawing(), view()); - fAnimator.start(); - fAnimationButton.setText("End Animation"); - } - } - - public void endAnimation() { - if (fAnimator != null) { - fAnimator.end(); - fAnimator = null; - fAnimationButton.setText("Start Animation"); - } - } - - public void toggleAnimation() { - if (fAnimator != null) - endAnimation(); - else - startAnimation(); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawAppletHelp.html b/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawAppletHelp.html deleted file mode 100644 index 5c0d1c80e..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawAppletHelp.html +++ /dev/null @@ -1,69 +0,0 @@ -<html> - -<head> - <title>JavaDraw Help</title> -</head> - -<body> -<H1>JavaDraw Help</H1> -<HR> -JavaDraw provides <a href=#tools>tools</a>, <a href=#handles>handles</a>, -and <a href=#commands>commands</a> to manipulate a drawing. -<P> -<H3><a name=tools>Tools</a></H3> -The tools on the left create or manipulate figures. -<Table Border=0> -<TR><TD><img src="../../images/SEL1.gif"><TD>selects, moves or resizes a figure; the shift-key -toggles the selection. Dragging the selection tool in the background -selects the figures within the dragged rectangle. -<TR><TD><img src="../../images/TEXT1.gif"><TD>creates a new or edits an existing text figure</TR> -<TR><TD><img src="../../images/ATEXT1.gif"><TD>creates a new text figure and attaches it to the clicked figure. Once -a text figure is attached it remains connected to the figure.</TR> -<TR><TD><img src="../../images/URL1.gif"><TD>edits a figure's URL attribute; the URL thus associated -with a figure is followed when the figure is clicked in -the <a href="../../../../../JavaDrawViewer.html">viewer applet</a></TR> -<TR><TD><img src="../../images/RECT1.gif"><TD>creates a rectangle figure</TR> -<TR><TD><img src="../../images/RRECT1.gif"><TD>creates a round rectangle figure</TR> -<TR><TD><img src="../../images/ELLIPSE1.gif"><TD>creates an ellipse figure</TR> -<TR><TD><img src="../../images/LINE1.gif"><TD>creates a line figure</TR> -<TR><TD><img src="../../images/CONN1.gif"><TD>creates or adjusts connections between figures. A connection -is split into segments by dragging a point on the connection. To join two segments click the end point of a segment</TR> -<TR><TD><img src="../../images/OCONN1.gif"><TD>creates an elbow connection and offers the same features as the ordinary connection tool</TR> -<TR><TD><img src="../../images/SCRIBBL1.gif"><TD>creates a scribble figure; dragging the mouse creates -a smooth line while successive clicks yields a polyline figure</TR> -<TR><TD><img src="../../images/BORDDEC1.gif"><TD>decorates the clicked figure with a border</TR> -</Table> - - -<H3><a name=handles>Handles</a></H3> -When selected figures provide different handles to manipulate them. -<ul> -<li> -the filled red handles enable to manipulate the shape of a figure -<li> -the blue circle handle is a connection handle. It allows to create connections -between figures. -<li> -the framed red handles are null handles. They only show the selection status -of a figure but don't support any manipulation. -<li> -the green handles are shown on connections. They enable to -reconnect them with another figure. -<li> -the yellow handle enables to change the font size of a text figure or the -size of the radius of a rounded rectangle. -</ul> -<H3><a name=commands>Commands</a></H3> -Commands are invoked from the button bar at the bottom (applet) or -from the menu bar at the top (application). -<P> -The standard commands that are provided include, cut, copy, paste, -duplicate, delete, group, ungroup, bring to front, and send to back. -<P> -<H3>Attributes</H3> -Attributes, such as fill color, text color or arrow tip, can be changed -through the attributes menu (stand-alone) or the pop up menues (applet). - -<hr> -Comments or questions to <a href="mailto:erich_gamma@acm.org">Erich Gamma</a> -</html> diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawViewer.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawViewer.java deleted file mode 100644 index c3a3eb078..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/JavaDrawViewer.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * @(#)JavaDrawViewer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.*; - -import javax.swing.JApplet; -import java.awt.*; -import java.io.*; -import java.net.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class JavaDrawViewer extends JApplet implements DrawingEditor { - - private Drawing fDrawing; - private Tool fTool; - private StandardDrawingView fView; - private transient UndoManager myUndoManager; - - public void init() { - setUndoManager(new UndoManager()); - getContentPane().setLayout(new BorderLayout()); - fView = new StandardDrawingView(this, 400, 370); - getContentPane().add("Center", fView); - setTool(new FollowURLTool(this, this)); - - String filename = getParameter("Drawing"); - if (filename != null) { - loadDrawing(filename); - fView.setDrawing(fDrawing); - } - else { - showStatus("Unable to load drawing"); - } - } - - public void addViewChangeListener(ViewChangeListener vsl) { - } - - public void removeViewChangeListener(ViewChangeListener vsl) { - } - - private void loadDrawing(String filename) { - try { - URL url = new URL(getCodeBase(), filename); - InputStream stream = url.openStream(); - StorableInput reader = new StorableInput(stream); - fDrawing = (Drawing)reader.readStorable(); - } - catch (IOException e) { - fDrawing = createDrawing(); - System.err.println("Error when Loading: " + e); - showStatus("Error when Loading: " + e); - } - } - - protected Drawing createDrawing() { - return new StandardDrawing(); - } - - /** - * Gets the editor's drawing view. - */ - public DrawingView view() { - return fView; - } - - public DrawingView[] views() { - return new DrawingView[] { view() }; - } - - /** - * Gets the editor's drawing. - */ - public Drawing drawing() { - return fDrawing; - } - - /** - * Gets the current the tool (there is only one): - */ - public Tool tool() { - return fTool; - } - - /** - * Sets the current the tool - */ - public void setTool(Tool newTool) { - fTool = newTool; - } - - /** - * Sets the editor's default tool. Do nothing since we only have one tool. - */ - public void toolDone() {} - - /** - * Ignore selection changes, we don't show any selection - */ - public void figureSelectionChanged(DrawingView view) {} - - protected void setUndoManager(UndoManager newUndoManager) { - myUndoManager = newUndoManager; - } - - public UndoManager getUndoManager() { - return myUndoManager; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/MySelectionTool.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/MySelectionTool.java deleted file mode 100644 index ed21e927d..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/MySelectionTool.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @(#)MySelectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import java.awt.event.MouseEvent; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; - -/** - * A SelectionTool that interprets double clicks to inspect the clicked figure - * - * @version <$CURRENT_VERSION$> - */ -public class MySelectionTool extends SelectionTool { - - public MySelectionTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - /** - * Handles mouse down events and starts the corresponding tracker. - */ - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - if (e.getClickCount() == 2) { - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - inspectFigure(figure); - return; - } - } - super.mouseDown(e, x, y); - } - - protected void inspectFigure(Figure f) { - System.out.println("inspect figure"+f); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/PatternPainter.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/PatternPainter.java deleted file mode 100644 index 869db577f..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/PatternPainter.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)PatternPainter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import java.awt.*; -import CH.ifa.draw.framework.*; - -/** - * PatternDrawer a background that can be added to a drawing. - * - * @see DrawingView - * @see Painter - * - * @version <$CURRENT_VERSION$> - */ -public class PatternPainter - implements Painter { - - private Image fImage; - - public PatternPainter(Image image) { - fImage = image; - } - - public void draw(Graphics g, DrawingView view) { - drawPattern(g, fImage, view); - } - - /** - * Draws a pattern background pattern by replicating an image. - */ - private void drawPattern(Graphics g, Image image, DrawingView view) { - int iwidth = image.getWidth(view); - int iheight = image.getHeight(view); - Dimension d = view.getSize(); - int x = 0; - int y = 0; - - while (y < d.height) { - while (x < d.width) { - g.drawImage(image, x, y, view); - x += iwidth; - } - y += iheight; - x = 0; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/URLTool.java b/JHotDraw/src/CH/ifa/draw/samples/javadraw/URLTool.java deleted file mode 100644 index 32b078cef..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/javadraw/URLTool.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * @(#)URLTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.javadraw; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.util.FloatingTextField; -import java.awt.*; -import java.awt.event.*; - -/** - * A tool to attach URLs to figures. - * The URLs are stored in the figure's "URL" attribute. - * The URL text is entered with a FloatingTextField. - * - * @see CH.ifa.draw.util.FloatingTextField - * - * @version <$CURRENT_VERSION$> - */ -public class URLTool extends AbstractTool { - - private FloatingTextField fTextField; - private Figure fURLTarget; - - public URLTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - public void mouseDown(MouseEvent e, int x, int y) - { - super.mouseDown(e,x,y); - Figure pressedFigure = drawing().findFigureInside(x, y); - if (pressedFigure != null) { - beginEdit(pressedFigure); - return; - } - endEdit(); - editor().toolDone(); - } - - public void mouseUp(MouseEvent e, int x, int y) { - } - - public void deactivate(DrawingView view) { - super.deactivate(); - endEdit(); - } - - private void beginEdit(Figure figure) { - if (fTextField == null) { - fTextField = new FloatingTextField(); - fTextField.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent event) { - endEdit(); - } - } - ); - } - - if ((figure != fURLTarget) && (fURLTarget != null)) { - endEdit(); - } - if (figure != fURLTarget) { - fTextField.createOverlay((Container)view()); - fTextField.setBounds(fieldBounds(figure), getURL(figure)); - fURLTarget = figure; - } - } - - private void endEdit() { - if (fURLTarget != null) { - setURL(fURLTarget, fTextField.getText()); - fURLTarget = null; - fTextField.endOverlay(); - } - } - - private Rectangle fieldBounds(Figure figure) { - Rectangle box = figure.displayBox(); - int nChars = Math.max(20, getURL(figure).length()); - Dimension d = fTextField.getPreferredSize(nChars); - box.x = Math.max(0, box.x + (box.width - d.width)/2); - box.y = Math.max(0, box.y + (box.height - d.height)/2); - return new Rectangle(box.x, box.y, d.width, d.height); - } - - private String getURL(Figure figure) { - String url = (String) figure.getAttribute(FigureAttributeConstant.URL); - if (url == null) { - url = ""; - } - return url; - } - - private void setURL(Figure figure, String url) { - figure.setAttribute(FigureAttributeConstant.URL, url); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/DUKE.gif b/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/DUKE.gif deleted file mode 100644 index 4f31ce593f3d96d76ebbb515cd98d83fbca46bda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2012 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 diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/Juggler0.gif b/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/Juggler0.gif deleted file mode 100644 index 577f7a9f03200f81d1ed3931620cb0045dca83d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3090 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 BE@%J% diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/backgrnd.gif b/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/backgrnd.gif deleted file mode 100644 index 602f909c9784eeaeca9896a78116ea9555007e2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2443 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 Q3+vUg`y?D;VPUWa03CMQ`~Uy| diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/beans.gif b/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/beans.gif deleted file mode 100644 index 4a0370f09c9a0738190af806989f58e66f882b4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7012 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 diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/bg1.gif b/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/bg1.gif deleted file mode 100644 index d54150cd9ed3fb7b1737d16b24dd39950b914af9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2164 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 diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/javacentral.gif b/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/javacentral.gif deleted file mode 100644 index bbba907bb45e0a98aef00d8fe8444345a2d72e24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37239 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	xA^$3Hj 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 diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/joe.surf.yellow.small.gif b/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/joe.surf.yellow.small.gif deleted file mode 100644 index 7f255f52f968dda6d4bbdeccd75dacee6a2873e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5009 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 XGsk0&*4Qv=G@iM@v)WEjfWaC7_FX~{ diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/rain.gif b/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/rain.gif deleted file mode 100644 index 2fdf8fb88e2908cbd5591dc60e942971c15ebb61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7664 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 H1A{dHTx~5P diff --git a/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/view.gif b/JHotDraw/src/CH/ifa/draw/samples/javadraw/sampleimages/view.gif deleted file mode 100644 index 5d562671099522cc034b6c3b0adf523e7e135d6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121144 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%0DX)JNABa2|56y0}{+V;|?dCt0UWt_dq- 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 diff --git a/JHotDraw/src/CH/ifa/draw/samples/minimap/MiniMapApplication.java b/JHotDraw/src/CH/ifa/draw/samples/minimap/MiniMapApplication.java deleted file mode 100644 index 407e18c88..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/minimap/MiniMapApplication.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * @(#)MiniMapApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.samples.minimap; - -import CH.ifa.draw.contrib.Desktop; -import CH.ifa.draw.contrib.SplitPaneDrawApplication; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MiniMapApplication extends SplitPaneDrawApplication { - - protected Desktop createDesktop() { - return new MiniMapDesktop(); - } - - public static void main(String[] args) { - MiniMapApplication window = new MiniMapApplication(); - window.open(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/minimap/MiniMapDesktop.java b/JHotDraw/src/CH/ifa/draw/samples/minimap/MiniMapDesktop.java deleted file mode 100644 index 0e6d2a2f7..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/minimap/MiniMapDesktop.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * @(#)MiniMapDesktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.samples.minimap; - -import CH.ifa.draw.contrib.SplitPaneDesktop; -import CH.ifa.draw.contrib.MiniMapView; -import CH.ifa.draw.framework.DrawingView; -import CH.ifa.draw.util.Iconkit; -import CH.ifa.draw.figures.ImageFigure; - -import javax.swing.*; -import java.awt.*; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MiniMapDesktop extends SplitPaneDesktop { - - private String imageName = "/CH/ifa/draw/samples/javadraw/sampleimages/view.gif"; - - protected Component createRightComponent(DrawingView view) { - Image image = Iconkit.instance().registerAndLoadImage( - (Component)view, imageName); - view.add(new ImageFigure(image, imageName, new Point(0,0))); - view.checkDamage(); -// ((CH.ifa.draw.standard.StandardDrawingView)view).checkMinimumSize(); - return super.createRightComponent(view); - } - - protected Component createLeftComponent(DrawingView view) { - JPanel blankPanel = new JPanel(); -// blankPanel.setPreferredSize(new Dimension(200, 200)); - - MiniMapView mmv = new MiniMapView(view, (JScrollPane)getRightComponent()); -// mmv.setPreferredSize(new Dimension(200, 200)); - - JSplitPane leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, blankPanel, mmv); - leftSplitPane.setOneTouchExpandable(true); - leftSplitPane.setDividerLocation(200); -// leftSplitPane.setPreferredSize(new Dimension(200, 400)); -// leftSplitPane.resetToPreferredSizes(); - - return leftSplitPane; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/net.jdo b/JHotDraw/src/CH/ifa/draw/samples/net.jdo deleted file mode 100644 index 0872b17d8..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/net.jdo +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="CH.ifa.draw.samples.net"> - <class name="NodeFigure"> - </class> - </package> -</jdo> diff --git a/JHotDraw/src/CH/ifa/draw/samples/net/NetApp.java b/JHotDraw/src/CH/ifa/draw/samples/net/NetApp.java deleted file mode 100644 index 466f18dae..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/net/NetApp.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * @(#)NetApp.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.net; - -import javax.swing.JToolBar; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.application.DrawApplication; - -/** - * @version <$CURRENT_VERSION$> - */ -public class NetApp extends DrawApplication { - - public NetApp() { - super("Net"); - } - - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new NodeFigure()); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - tool = new CreationTool(this, new NodeFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Create Org Unit", tool)); - - tool = new ConnectionTool(this, new LineConnection()); - palette.add(createToolButton(IMAGES + "CONN", "Connection Tool", tool)); - } - - //-- main ----------------------------------------------------------- - - public static void main(String[] args) { - DrawApplication window = new NetApp(); - window.open(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/net/NodeFigure.java b/JHotDraw/src/CH/ifa/draw/samples/net/NodeFigure.java deleted file mode 100644 index e78c111dc..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/net/NodeFigure.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)NodeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.net; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.util.*; - -import java.util.*; -import java.util.List; -import java.awt.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class NodeFigure extends TextFigure { - private static final int BORDER = 6; - private List fConnectors; - private boolean fConnectorsVisible; - - public NodeFigure() { - initialize(); - fConnectors = null; - } - - public Rectangle displayBox() { - Rectangle box = super.displayBox(); - int d = BORDER; - box.grow(d, d); - return box; - } - - public boolean containsPoint(int x, int y) { - // add slop for connectors - if (fConnectorsVisible) { - Rectangle r = displayBox(); - int d = LocatorConnector.SIZE/2; - r.grow(d, d); - return r.contains(x, y); - } - return super.containsPoint(x, y); - } - - private void drawBorder(Graphics g) { - Rectangle r = displayBox(); - g.setColor(getFrameColor()); - g.drawRect(r.x, r.y, r.width-1, r.height-1); - } - - public void draw(Graphics g) { - super.draw(g); - drawBorder(g); - drawConnectors(g); - } - - public HandleEnumeration handles() { - ConnectionFigure prototype = new LineConnection(); - List handles = CollectionsFactory.current().createList(); - handles.add(new ConnectionHandle(this, RelativeLocator.east(), prototype)); - handles.add(new ConnectionHandle(this, RelativeLocator.west(), prototype)); - handles.add(new ConnectionHandle(this, RelativeLocator.south(), prototype)); - handles.add(new ConnectionHandle(this, RelativeLocator.north(), prototype)); - - handles.add(new NullHandle(this, RelativeLocator.southEast())); - handles.add(new NullHandle(this, RelativeLocator.southWest())); - handles.add(new NullHandle(this, RelativeLocator.northEast())); - handles.add(new NullHandle(this, RelativeLocator.northWest())); - return new HandleEnumerator(handles); - } - - private void drawConnectors(Graphics g) { - if (fConnectorsVisible) { - Iterator iter = connectors(); - while (iter.hasNext()) { - ((Connector)iter.next()).draw(g); - } - } - } - - /** - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure courtingConnection) { - fConnectorsVisible = isVisible; - invalidate(); - } - - /** - */ - public Connector connectorAt(int x, int y) { - return findConnector(x, y); - } - - /** - */ - private Iterator connectors() { - if (fConnectors == null) { - createConnectors(); - } - return fConnectors.iterator(); - } - - private void createConnectors() { - fConnectors = CollectionsFactory.current().createList(4); - fConnectors.add(new LocatorConnector(this, RelativeLocator.north()) ); - fConnectors.add(new LocatorConnector(this, RelativeLocator.south()) ); - fConnectors.add(new LocatorConnector(this, RelativeLocator.west()) ); - fConnectors.add(new LocatorConnector(this, RelativeLocator.east()) ); - } - - private Connector findConnector(int x, int y) { - // return closest connector - long min = Long.MAX_VALUE; - Connector closest = null; - Iterator iter = connectors(); - while (iter.hasNext()) { - Connector c = (Connector)iter.next(); - Point p2 = Geom.center(c.displayBox()); - long d = Geom.length2(x, y, p2.x, p2.y); - if (d < min) { - min = d; - closest = c; - } - } - return closest; - } - - private void initialize() { - setText("node"); - Font fb = new Font("Helvetica", Font.BOLD, 12); - setFont(fb); - createConnectors(); - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure() { - return this; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/nothing/NothingApp.java b/JHotDraw/src/CH/ifa/draw/samples/nothing/NothingApp.java deleted file mode 100644 index 518c59960..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/nothing/NothingApp.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * @(#)NothingApp.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.nothing; - -import javax.swing.JToolBar; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.contrib.*; -import CH.ifa.draw.application.*; - -/** - * A very basic example for demonstraing JHotDraw's capabilities. It contains only - * a few additional tools apart from the selection tool already provided by its superclass. - * It uses only a single document interface (SDI) and not a multiple document interface (MDI) - * because the applicateion frame is derived DrawApplication rather than MDI_DrawApplication. - * To enable MDI for this application, NothingApp must inherit from MDI_DrawApplication - * and be recompiled. - * - * @version <$CURRENT_VERSION$> - */ -public class NothingApp extends DrawApplication { - - public NothingApp() { - super("Nothing"); - } - - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES+"TEXT", "Text Tool", tool)); - - tool = new CreationTool(this, new RectangleFigure()); - palette.add(createToolButton(IMAGES+"RECT", "Rectangle Tool", tool)); - - tool = new CreationTool(this, new RoundRectangleFigure()); - palette.add(createToolButton(IMAGES+"RRECT", "Round Rectangle Tool", tool)); - - tool = new CreationTool(this, new EllipseFigure()); - palette.add(createToolButton(IMAGES+"ELLIPSE", "Ellipse Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES+"LINE", "Line Tool", tool)); - - tool = new PolygonTool(this); - palette.add(createToolButton(IMAGES+"POLYGON", "Polygon Tool", tool)); - - tool = new ConnectionTool(this, new LineConnection()); - palette.add(createToolButton(IMAGES+"CONN", "Connection Tool", tool)); - - tool = new ConnectionTool(this, new ElbowConnection()); - palette.add(createToolButton(IMAGES+"OCONN", "Elbow Connection Tool", tool)); - } - - //-- main ----------------------------------------------------------- - - public static void main(String[] args) { - DrawApplication window = new NothingApp(); - window.open(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/nothing/NothingApplet.java b/JHotDraw/src/CH/ifa/draw/samples/nothing/NothingApplet.java deleted file mode 100644 index 17e5dad44..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/nothing/NothingApplet.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * @(#)NothingApplet.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.nothing; - -import javax.swing.JPanel; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.applet.*; -import CH.ifa.draw.contrib.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class NothingApplet extends DrawApplet { - - //-- DrawApplet overrides ----------------------------------------- - - protected void createTools(JPanel palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - tool = new CreationTool(this, new RectangleFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Rectangle Tool", tool)); - - tool = new CreationTool(this, new RoundRectangleFigure()); - palette.add(createToolButton(IMAGES + "RRECT", "Round Rectangle Tool", tool)); - - tool = new CreationTool(this, new EllipseFigure()); - palette.add(createToolButton(IMAGES + "ELLIPSE", "Ellipse Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES + "LINE", "Line Tool", tool)); - - tool = new PolygonTool(this); - palette.add(createToolButton(IMAGES + "POLYGON", "Polygon Tool", tool)); - - tool = new ConnectionTool(this, new LineConnection()); - palette.add(createToolButton(IMAGES + "CONN", "Connection Tool", tool)); - - tool = new ConnectionTool(this, new ElbowConnection()); - palette.add(createToolButton(IMAGES + "OCONN", "Elbow Connection Tool", tool)); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/pert/PertApplet.java b/JHotDraw/src/CH/ifa/draw/samples/pert/PertApplet.java deleted file mode 100644 index cb928c2da..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/pert/PertApplet.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * @(#)PertApplet.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.pert; - -import javax.swing.JPanel; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.applet.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class PertApplet extends DrawApplet { - - private final static String PERTIMAGES = "/CH/ifa/draw/samples/pert/images/"; - - protected void createTools(JPanel palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES+"TEXT", "Text Tool", tool)); - - tool = new PertFigureCreationTool(this); - palette.add(createToolButton(PERTIMAGES+"PERT", "Task Tool", tool)); - - tool = new ConnectionTool(this, new PertDependency()); - palette.add(createToolButton(IMAGES+"CONN", "Dependency Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES+"LINE", "Line Tool", tool)); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/pert/PertAppletHelp.html b/JHotDraw/src/CH/ifa/draw/samples/pert/PertAppletHelp.html deleted file mode 100644 index 3288502a5..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/pert/PertAppletHelp.html +++ /dev/null @@ -1,67 +0,0 @@ -<html> - -<head> - <title>Pert Help</title> -</head> - -<body> -<H1>PERT Help</H1> -<HR> -PERT provides tools, handles, and commands to manipulate a PERT diagram. -<P> -A task is shown as a box with a line for the task's name, a line for -the task's duration, and a line for the task's earliest end time. -Only the task's name and its duration are editable. The end time -is calculated automatically by PERT. -<P> -Circular dependencies are shown in red. -<P> -<H3>Tools</H3> -The tool palette on the left offers several tools that either create -new figures or manipulate existing ones. -<Table Border=0> -<TR><TD><img src="../../images/SEL1.gif"><TD>selects, moves or resizes a figure; the shift-key -toggles the selection. Dragging the selection tool in the background -selects the figures within the dragged rectangle. -<TR><TD><img src="../../images/PERT1.gif"><TD>creates a new task</TR> -<TR><TD><img src="../../images/TEXT1.gif"><TD>creates a new or edits an existing text figure</TR> -<TR><TD><img src="../../images/CONN1.gif"><TD>creates or adjusts connections -between figures. A connection -is split into segments by dragging a point on the connection. To join two -segments click the -end point of a segment</TR> -<TR><TD><img src="../../images/LINE1.gif"><TD>creates a line figure</TR> -</Table> - - -<H3>Handles</H3> -When selected figures offer different handles to manipulate them. -<ul> -<li> -the blue circle handle is a connection handle. It allows to create connections -between figures. -<li> -the framed red handles are null handles. They only show the selection status -of a figure but don't support any manipulation. -<li> -the green handles are shown on connections. They enable to -reconnect them with another figure. -<li> -the yellow handle enables to change the font size of a text figure or the -size of the radius of a rounded rectangle. -</ul> - -<H3>Commands</H3> -Commands are invoked from the button bar at the bottom (applet) or -from the menu bar at the top (application). -<P> -The standard commands that are provided include, cut, copy, paste, -duplicate, delete, group, ungroup, bring to front, and send to back. -<P> -<H3>Attributes</H3> -Attributes, such as fill color, text color or arrow tip, can be changed -through the attributes menu (stand-alone) or the pop up menues (applet). - -<p> - -</html> diff --git a/JHotDraw/src/CH/ifa/draw/samples/pert/PertApplication.java b/JHotDraw/src/CH/ifa/draw/samples/pert/PertApplication.java deleted file mode 100644 index 7eb3d524f..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/pert/PertApplication.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)PertApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.pert; - -import javax.swing.JToolBar; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.application.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class PertApplication extends DrawApplication { - - static private final String PERTIMAGES = "/CH/ifa/draw/samples/pert/images/"; - - public PertApplication() { - super("PERT Editor"); - } - - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - // the generic but slower version - //tool = new CreationTool(new PertFigure()); - //palette.add(createToolButton(PERTIMAGES + "PERT", "Task Tool", tool)); - - tool = new PertFigureCreationTool(this); - palette.add(createToolButton(PERTIMAGES + "PERT", "Task Tool", tool)); - - tool = new ConnectionTool(this, new PertDependency()); - palette.add(createToolButton(IMAGES + "CONN", "Dependency Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES + "Line", "Line Tool", tool)); - } - - //-- main ----------------------------------------------------------- - - public static void main(String[] args) { - PertApplication pert = new PertApplication(); - pert.open(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/pert/PertDependency.java b/JHotDraw/src/CH/ifa/draw/samples/pert/PertDependency.java deleted file mode 100644 index a1bc417e6..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/pert/PertDependency.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * @(#)PertDependency.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.pert; - -import java.awt.*; -import java.util.List; - -// JUnitDoclet begin import -import CH.ifa.draw.framework.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.standard.*; -// JUnitDoclet end import - -/** - * @version <$CURRENT_VERSION$> - */ -public class PertDependency extends LineConnection { - /* - * Serialization support. - */ - private static final long serialVersionUID = -7959500008698525009L; - private int pertDependencySerializedDataVersion = 1; - - public PertDependency() { - setEndDecoration(new ArrowTip()); - setStartDecoration(null); - } - - public void handleConnect(Figure start, Figure end) { - PertFigure source = (PertFigure)start; - PertFigure target = (PertFigure)end; - if (source.hasCycle(target)) { - setAttribute(FigureAttributeConstant.FRAME_COLOR, Color.red); - } - else { - target.addPreTask(source); - source.addPostTask(target); - source.notifyPostTasks(); - } - } - - public void handleDisconnect(Figure start, Figure end) { - PertFigure source = (PertFigure)start; - PertFigure target = (PertFigure)end; - if (target != null) { - target.removePreTask(source); - target.updateDurations(); - } - if (source != null) { - source.removePostTask(target); - } - } - - public boolean canConnect(Figure start, Figure end) { - return ((start instanceof PertFigure) && (end instanceof PertFigure)); - } - - public HandleEnumeration handles() { - List handles = super.handles().toList(); - // don't allow to reconnect the starting figure - handles.set(0, new NullHandle(this, PolyLineFigure.locator(0))); - return new HandleEnumerator(handles); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/pert/PertFigure.java b/JHotDraw/src/CH/ifa/draw/samples/pert/PertFigure.java deleted file mode 100644 index 3b006fe96..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/pert/PertFigure.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * @(#)PertFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.pert; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import CH.ifa.draw.figures.*; -import CH.ifa.draw.util.*; - -import java.awt.*; -import java.io.*; -import java.util.Iterator; -import java.util.List; - -/** - * @version <$CURRENT_VERSION$> - */ -public class PertFigure extends CompositeFigure { - private static final int BORDER = 3; - private Rectangle fDisplayBox; - private List fPreTasks; - private List fPostTasks; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -7877776240236946511L; - private int pertFigureSerializedDataVersion = 1; - - public PertFigure() { - initialize(); - } - - public int start() { - int start = 0; - Iterator iter = fPreTasks.iterator(); - while (iter.hasNext()) { - PertFigure f = (PertFigure)iter.next(); - start = Math.max(start, f.end()); - } - return start; - } - - public int end() { - return asInt(2); - } - - public int duration() { - return asInt(1); - } - - public void setEnd(int value) { - setInt(2, value); - } - - public void addPreTask(PertFigure figure) { - if (!fPreTasks.contains(figure)) { - fPreTasks.add(figure); - } - } - - public void addPostTask(PertFigure figure) { - if (!fPostTasks.contains(figure)) { - fPostTasks.add(figure); - } - } - - public void removePreTask(PertFigure figure) { - fPreTasks.remove(figure); - } - - public void removePostTask(PertFigure figure) { - fPostTasks.remove(figure); - } - - private int asInt(int figureIndex) { - NumberTextFigure t = (NumberTextFigure)figureAt(figureIndex); - return t.getValue(); - } - - private String taskName() { - TextFigure t = (TextFigure)figureAt(0); - return t.getText(); - } - - private void setInt(int figureIndex, int value) { - NumberTextFigure t = (NumberTextFigure)figureAt(figureIndex); - t.setValue(value); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x, y); - super.basicMoveBy(x, y); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - layout(); - } - - private void drawBorder(Graphics g) { - super.draw(g); - - Rectangle r = displayBox(); - - Figure f = figureAt(0); - Rectangle rf = f.displayBox(); - g.setColor(Color.gray); - g.drawLine(r.x, r.y+rf.height+2, r.x+r.width, r.y + rf.height+2); - g.setColor(Color.white); - g.drawLine(r.x, r.y+rf.height+3, r.x+r.width, r.y + rf.height+3); - - g.setColor(Color.white); - g.drawLine(r.x, r.y, r.x, r.y + r.height); - g.drawLine(r.x, r.y, r.x + r.width, r.y); - g.setColor(Color.gray); - g.drawLine(r.x + r.width, r.y, r.x + r.width, r.y + r.height); - g.drawLine(r.x , r.y + r.height, r.x + r.width, r.y + r.height); - } - - public void draw(Graphics g) { - drawBorder(g); - super.draw(g); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - handles.add(new NullHandle(this, RelativeLocator.northWest())); - handles.add(new NullHandle(this, RelativeLocator.northEast())); - handles.add(new NullHandle(this, RelativeLocator.southWest())); - handles.add(new NullHandle(this, RelativeLocator.southEast())); - handles.add(new ConnectionHandle(this, RelativeLocator.east(), - new PertDependency()) - ); - return new HandleEnumerator(handles); - } - - private void initialize() { - fPostTasks = CollectionsFactory.current().createList(); - fPreTasks = CollectionsFactory.current().createList(); - fDisplayBox = new Rectangle(0, 0, 0, 0); - - Font f = new Font("Helvetica", Font.PLAIN, 12); - Font fb = new Font("Helvetica", Font.BOLD, 12); - - TextFigure name = new TextFigure(); - name.setFont(fb); - name.setText("Task"); - //name.setAttribute(FigureAttributeConstant.TEXT_COLOR.getName(), Color.white); - add(name); - - NumberTextFigure duration = new NumberTextFigure(); - duration.setValue(0); - duration.setFont(fb); - add(duration); - - NumberTextFigure end = new NumberTextFigure(); - end.setValue(0); - end.setFont(f); - end.setReadOnly(true); - add(end); - } - - private void layout() { - Point partOrigin = new Point(fDisplayBox.x, fDisplayBox.y); - partOrigin.translate(BORDER, BORDER); - Dimension extent = new Dimension(0, 0); - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - - Dimension partExtent = f.size(); - Point corner = new Point( - partOrigin.x+partExtent.width, - partOrigin.y+partExtent.height); - f.basicDisplayBox(partOrigin, corner); - - extent.width = Math.max(extent.width, partExtent.width); - extent.height += partExtent.height; - partOrigin.y += partExtent.height; - } - fDisplayBox.width = extent.width + 2*BORDER; - fDisplayBox.height = extent.height + 2*BORDER; - } - - private boolean needsLayout() { - Dimension extent = new Dimension(0, 0); - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - extent.width = Math.max(extent.width, f.size().width); - } - int newExtent = extent.width + 2*BORDER; - return newExtent != fDisplayBox.width; - } - - public void update(FigureChangeEvent e) { - if (e.getFigure() == figureAt(1)) { - // duration has changed - updateDurations(); - } - if (needsLayout()) { - layout(); - changed(); - } - } - - public void figureChanged(FigureChangeEvent e) { - update(e); - } - - - public void figureRemoved(FigureChangeEvent e) { - update(e); - } - - public void notifyPostTasks() { - Iterator iter = fPostTasks.iterator(); - while (iter.hasNext()) { - ((PertFigure)iter.next()).updateDurations(); - } - } - - public void updateDurations() { - int newEnd = start()+duration(); - if (newEnd != end()) { - setEnd(newEnd); - notifyPostTasks(); - } - } - - public boolean hasCycle(Figure start) { - if (start == this) { - return true; - } - Iterator iter = fPreTasks.iterator(); - while (iter.hasNext()) { - if (((PertFigure)iter.next()).hasCycle(start)) { - return true; - } - } - return false; - } - - //-- store / load ---------------------------------------------- - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - - writeTasks(dw, fPreTasks); - writeTasks(dw, fPostTasks); - } - - public void writeTasks(StorableOutput dw, List l) { - dw.writeInt(l.size()); - Iterator iter = l.iterator(); - while (iter.hasNext()) { - dw.writeStorable((Storable)iter.next()); - } - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - layout(); - fPreTasks = readTasks(dr); - fPostTasks = readTasks(dr); - } - - public Insets connectionInsets() { - Rectangle r = fDisplayBox; - int cx = r.width/2; - int cy = r.height/2; - return new Insets(cy, cx, cy, cx); - } - - public List readTasks(StorableInput dr) throws IOException { - int size = dr.readInt(); - List l = CollectionsFactory.current().createList(size); - for (int i=0; i<size; i++) { - l.add(dr.readStorable()); - } - return l; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/pert/PertFigureCreationTool.java b/JHotDraw/src/CH/ifa/draw/samples/pert/PertFigureCreationTool.java deleted file mode 100644 index 027351ff5..000000000 --- a/JHotDraw/src/CH/ifa/draw/samples/pert/PertFigureCreationTool.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * @(#)PertFigureCreationTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.samples.pert; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; - -/** - * A more efficient version of the generic Pert creation - * tool that is not based on cloning. - * - * @version <$CURRENT_VERSION$> - */ -public class PertFigureCreationTool extends CreationTool { - - public PertFigureCreationTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - /** - * Creates a new PertFigure. - */ - protected Figure createFigure() { - return new PertFigure(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/samples/pert/images/PERT1.gif b/JHotDraw/src/CH/ifa/draw/samples/pert/images/PERT1.gif deleted file mode 100644 index f69744556b8a98b0f903febf45498dd09fcde923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlK-K>bM;<_eP?(7Kk-E-C3Bvd5R>w&d8>Y$OF1(sB5u8|!Jh*P2E`k`vPmdj z>=3r9_m<Nuzj;!{KmE(A(`?(#buKO1(zZKp#m^aG;!Be>mi~FR?XC~!)lJLJeyY=G ZXw<aPYVYXm((dl<maLvADagQJ4FJ?UQ3?P6 diff --git a/JHotDraw/src/CH/ifa/draw/samples/pert/images/PERT2.gif b/JHotDraw/src/CH/ifa/draw/samples/pert/images/PERT2.gif deleted file mode 100644 index eb9f10ef03f573d2d7c08a805dee7264cabd6ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlK!E=bM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)MQbmW_0GOA^<6__frm_*&x-pD z!8T0Y0SiB~{Qg>VVwDQlT(#{ni^8R2qGnyox76{SeADf_ua9H;^AAh!RIPneY#h>H Qq}1GEQyb1M$iQF?0Mukk*8l(j diff --git a/JHotDraw/src/CH/ifa/draw/samples/pert/images/PERT3.gif b/JHotDraw/src/CH/ifa/draw/samples/pert/images/PERT3.gif deleted file mode 100644 index aac7c5e3ad403e29fb246df6eb318f71ef45be0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBQuv|4bM;<_MQ3;aKhYw?pE>Qt%C5}SyZV2e+rXkwT6aqI*=!x51P2|dZUzy5 zqXRO=duM<0P*rO+U+{j>QO?y@vUP4V+wZ=-?CDAs<Fg)L#Pf3dPkEfOeARpLbws&Y av}lo)rFXlrW0ygv$pp!k$&!K$4AubpX-<Lw diff --git a/JHotDraw/src/CH/ifa/draw/standard.jdo b/JHotDraw/src/CH/ifa/draw/standard.jdo deleted file mode 100644 index 62c33480a..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard.jdo +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="CH.ifa.draw.standard"> - <class name="AbstractFigure"> - <field name="fListener" persistence-modifier="persistent"> - </field> - </class> - <class name="CompositeFigure"> -<!-- - <field name="fFigures"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> ---> - </class> - <class name="ChopBoxConnector"> - </class> - <class name="DecoratorFigure"> - </class> - <class name="LocatorConnector"> - </class> - <class name="PeripheralLocator"> - </class> - <class name="OffsetLocator"> - </class> - <class name="RelativeLocator"> - </class> - <class name="StandardDrawing"> - </class> - </package> -</jdo> diff --git a/JHotDraw/src/CH/ifa/draw/standard/AWTCursor.java b/JHotDraw/src/CH/ifa/draw/standard/AWTCursor.java deleted file mode 100644 index a01ee1129..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/AWTCursor.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @(#)AWTCursor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.standard; - -import java.awt.Cursor; - -/** - * Default implementation of the {@link CH.ifa.draw.framework.Cursor} interface - * for AWT/Swing. - * - * <p>Created on: 08/05/2003.</p> - * - * @version $Revision$ - * @author <a href="mailto:ricardo_padilha@users.sourceforge.net">Ricardo - * Sangoi Padilha</a> - * @see CH.ifa.draw.framework.Cursor - */ -public class AWTCursor extends Cursor implements CH.ifa.draw.framework.Cursor { - - /** - * Constructor for <code>AWTCursor</code>. - * @param type - * @see Cursor#Cursor(int) - */ - public AWTCursor(int type) { - super(type); - } - - /** - * Constructor for <code>AWTCursor</code>. - * @param name - * @see Cursor#Cursor(java.lang.String) - */ - public AWTCursor(String newName) { - super(newName); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/AbstractCommand.java b/JHotDraw/src/CH/ifa/draw/standard/AbstractCommand.java deleted file mode 100644 index 45152da20..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/AbstractCommand.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * @(#)AbstractCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Command; -import CH.ifa.draw.util.CommandListener; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.CollectionsFactory; - -import java.util.*; - -/** - * @author Helge Horch - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractCommand implements Command, FigureSelectionListener { - - private String myName; - private Undoable myUndoableActivity; - private boolean myIsViewRequired; - private AbstractCommand.EventDispatcher myEventDispatcher; - - /** - * the DrawingEditor this command applies to - */ - private DrawingEditor myDrawingEditor; - - /** - * Constructs a command with the given name that applies to the given view. - * @param newName java.lang.String - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public AbstractCommand(String newName, DrawingEditor newDrawingEditor) { - this(newName, newDrawingEditor, true); - } - - public AbstractCommand(String newName, DrawingEditor newDrawingEditor, boolean newIsViewRequired) { - setName(newName); - setDrawingEditor(newDrawingEditor); - getDrawingEditor().addViewChangeListener(createViewChangeListener()); - myIsViewRequired = newIsViewRequired; - setEventDispatcher(createEventDispatcher()); - } - - protected void viewSelectionChanged(DrawingView oldView, DrawingView newView) { - if (oldView != null) { - oldView.removeFigureSelectionListener(this); - } - if (newView != null) { - newView.addFigureSelectionListener(this); - } - if (isViewRequired()) { - boolean isOldViewInteractive = (oldView != null) && oldView.isInteractive(); - boolean isNewViewInteractive = (newView != null) && newView.isInteractive(); - // old view was not interactive aware while new view is now interactive aware - if (!isOldViewInteractive && isNewViewInteractive) { - getEventDispatcher().fireCommandExecutableEvent(); - } - // old view was interactive aware while new view is not - else if (isOldViewInteractive && !isNewViewInteractive) { - getEventDispatcher().fireCommandNotExecutableEvent(); - } - } - } - - /** - * Sent when a new view is created - */ - protected void viewCreated(DrawingView view) { - } - - /** - * Send when an existing view is about to be destroyed. - */ - protected void viewDestroying(DrawingView view) { - } - - /** - * @param view a DrawingView - */ - public void figureSelectionChanged(DrawingView view) { - } - - /** - * @return DrawingEditor associated with this command - */ - public DrawingEditor getDrawingEditor() { - return myDrawingEditor; - } - - private void setDrawingEditor(DrawingEditor newDrawingEditor) { - myDrawingEditor = newDrawingEditor; - } - - /** - * Convenience method - * - * @return DrawingView currently active in the editor - */ - public DrawingView view() { - return getDrawingEditor().view(); - } - - /** - * Gets the command name. - */ - public String name() { - return myName; - } - - public void setName(String newName) { - myName = newName; - } - - /** - * Releases resources associated with this command - */ - public void dispose() { - if (view() != null) { - view().removeFigureSelectionListener(this); - } - } - - /** - * Executes the command. - */ - public void execute() { - if (view() == null) { - throw new JHotDrawRuntimeException("execute should NOT be getting called when view() == null"); - } - } - - /** - * Tests if the command can be executed. The view must be valid when this is - * called. Per default, a command is executable if at - * least one figure is selected in the current activated - * view. - */ - public boolean isExecutable() { - // test whether there is a view required and whether an existing view - // accepts user input - if (isViewRequired()) { - if ((view() == null) || !view().isInteractive()) { - return false; - } - } - return isExecutableWithView(); - } - - protected boolean isViewRequired() { - return myIsViewRequired; - } - - protected boolean isExecutableWithView() { - return true; - } - - public Undoable getUndoActivity() { - return myUndoableActivity; - } - - public void setUndoActivity(Undoable newUndoableActivity) { - myUndoableActivity = newUndoableActivity; - } - - public void addCommandListener(CommandListener newCommandListener) { - getEventDispatcher().addCommandListener(newCommandListener); - } - - public void removeCommandListener(CommandListener oldCommandListener) { - getEventDispatcher().removeCommandListener(oldCommandListener); - } - - private void setEventDispatcher(AbstractCommand.EventDispatcher newEventDispatcher) { - myEventDispatcher = newEventDispatcher; - } - - protected AbstractCommand.EventDispatcher getEventDispatcher() { - return myEventDispatcher; - } - - protected AbstractCommand.EventDispatcher createEventDispatcher() { - return new AbstractCommand.EventDispatcher(this); - } - - protected ViewChangeListener createViewChangeListener() { - return new ViewChangeListener() { - public void viewSelectionChanged(DrawingView oldView, DrawingView newView){ - AbstractCommand.this.viewSelectionChanged(oldView, newView); - } - public void viewCreated(DrawingView view){ - AbstractCommand.this.viewCreated(view); - } - public void viewDestroying(DrawingView view){ - AbstractCommand.this.viewDestroying(view); - } - }; - } - - public static class EventDispatcher { - private List myRegisteredListeners; - private Command myObservedCommand; - - public EventDispatcher(Command newObservedCommand) { - myRegisteredListeners = CollectionsFactory.current().createList(); - myObservedCommand = newObservedCommand; - } - - public void fireCommandExecutedEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((CommandListener)iter.next()).commandExecuted(new EventObject(myObservedCommand)); - } - } - - public void fireCommandExecutableEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((CommandListener)iter.next()).commandExecutable(new EventObject(myObservedCommand)); - } - } - - public void fireCommandNotExecutableEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((CommandListener)iter.next()).commandNotExecutable(new EventObject(myObservedCommand)); - } - } - - public void addCommandListener(CommandListener newCommandListener) { - if (!myRegisteredListeners.contains(newCommandListener)) { - myRegisteredListeners.add(newCommandListener); - } - } - - public void removeCommandListener(CommandListener oldCommandListener) { - if (myRegisteredListeners.contains(oldCommandListener)) { - myRegisteredListeners.remove(oldCommandListener); - } - } - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/standard/AbstractConnector.java b/JHotDraw/src/CH/ifa/draw/standard/AbstractConnector.java deleted file mode 100644 index b0c84d898..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/AbstractConnector.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)AbstractConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import java.io.IOException; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; - -/** - * AbstractConnector provides default implementation for - * the Connector interface. - * - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractConnector implements Connector { - /** - * the owner of the connector - */ - private Figure fOwner; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -5170007865562687545L; - private int abstractConnectorSerializedDataVersion = 1; - - /** - * Constructs a connector that has no owner. It is only - * used internally to resurrect a connectors from a - * StorableOutput. It should never be called directly. - */ - public AbstractConnector() { - fOwner = null; - } - - /** - * Constructs a connector with the given owner figure. - */ - public AbstractConnector(Figure owner) { - fOwner = owner; - } - - /** - * Gets the connector's owner. - * Which is the figure this is attached too and NOT the connection it may be - * attached too. - * - */ - public Figure owner() { - return fOwner; - } - - public Point findStart(ConnectionFigure connection) { - return findPoint(connection); - } - - public Point findEnd(ConnectionFigure connection) { - return findPoint(connection); - } - - /** - * Gets the connection point. Override when the connector - * does not need to distinguish between the start and end - * point of a connection. - */ - protected Point findPoint(ConnectionFigure connection) { - return Geom.center(displayBox()); - } - - /** - * Gets the display box of the connector. - */ - public Rectangle displayBox() { - return owner().displayBox(); - } - - /** - * Tests if a point is contained in the connector. - */ - public boolean containsPoint(int x, int y) { - return owner().containsPoint(x, y); - } - - /** - * Draws this connector. By default connectors are invisible. - */ - public void draw(Graphics g) { - // invisible by default - } - - /** - * Stores the connector and its owner to a StorableOutput. - */ - public void write(StorableOutput dw) { - dw.writeStorable(owner()); - } - - /** - * Reads the connector and its owner from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - fOwner = (Figure)dr.readStorable(); - } - - /** - * Requests that the connector should show itself or hide itself. The - * ConnectionFigure which desires to connect to this Connector is passed in. - * It a connector should show itself it should do so when draw is called, if - * so desired. - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure courtingConnection) { - //invisible by default - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/AbstractFigure.java b/JHotDraw/src/CH/ifa/draw/standard/AbstractFigure.java deleted file mode 100644 index ceb9eb2b9..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/AbstractFigure.java +++ /dev/null @@ -1,482 +0,0 @@ -/* - * @(#)AbstractFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.*; - -import java.awt.*; -import java.util.List; -import java.io.*; - -/** - * AbstractFigure provides default implementations for - * the Figure interface. - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld036.htm>Template Method</a></b><br> - * Template Methods implement default and invariant behavior for - * figure subclasses. - * <hr> - * - * @see Figure - * @see Handle - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractFigure implements Figure { - - /** - * The listeners for a figure's changes. - * It is only one listener but this one can be a (chained) MultiCastFigureChangeListener - * @see #invalidate - * @see #changed - * @see #willChange - */ - private transient FigureChangeListener fListener; - - /** - * The dependend figures which have been added to this container. - */ - private List myDependendFigures; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -10857585979273442L; - private int abstractFigureSerializedDataVersion = 1; - private int _nZ; - - protected AbstractFigure() { - myDependendFigures = CollectionsFactory.current().createList(); - } - - /** - * Moves the figure by the given offset. - */ - public void moveBy(int dx, int dy) { - willChange(); - basicMoveBy(dx, dy); - changed(); - } - - /** - * Moves the figure. This is the - * method that subclassers override. Clients usually - * call displayBox. - * @see #moveBy - */ - protected abstract void basicMoveBy(int dx, int dy); - - /** - * Changes the display box of a figure. Clients usually - * call this method. It changes the display box - * and announces the corresponding change. - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void displayBox(Point origin, Point corner) { - willChange(); - basicDisplayBox(origin, corner); - changed(); - } - - /** - * Sets the display box of a figure. This is the - * method that subclassers override. Clients usually - * call displayBox. - * @see #displayBox - */ - public abstract void basicDisplayBox(Point origin, Point corner); - - /** - * Gets the display box of a figure. - */ - public abstract Rectangle displayBox(); - - /** - * Returns the handles of a Figure that can be used - * to manipulate some of its attributes. - * @return a type-safe iterator of handles - * @see Handle - */ - public abstract HandleEnumeration handles(); - - /** - * Returns an Enumeration of the figures contained in this figure. - * @see CompositeFigure - */ - public FigureEnumeration figures() { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Gets the size of the figure. A convenience method. - */ - public Dimension size() { - return new Dimension(displayBox().width, displayBox().height); - } - - /** - * Checks if the figure is empty. The default implementation returns - * true if the width or height of its display box is < 3 - * @see Figure#isEmpty - */ - public boolean isEmpty() { - return (size().width < 3) || (size().height < 3); - } - - /** - * Returns the figure that contains the given point. - * In contrast to containsPoint it returns its - * innermost figure that contains the point. - * - * @see #containsPoint - */ - public Figure findFigureInside(int x, int y) { - if (containsPoint(x, y)) { - return this; - } - return null; - } - - /** - * Checks if a point is inside the figure. - */ - public boolean containsPoint(int x, int y) { - return displayBox().contains(x, y); - } - - /** - * Changes the display box of a figure. This is a - * convenience method. Implementors should only - * have to override basicDisplayBox - * @see #displayBox - */ - public void displayBox(Rectangle r) { - displayBox(new Point(r.x, r.y), new Point(r.x+r.width, r.y+r.height)); - } - - /** - * Checks whether the given figure is contained in this figure. - */ - public boolean includes(Figure figure) { - return figure == this; - } - - /** - * Decomposes a figure into its parts. It returns a FigureEnumeration - * that contains itself. - * @return an Enumeration with itself as the only element. - */ - public FigureEnumeration decompose() { - List figures = CollectionsFactory.current().createList(1); - figures.add(this); - return new FigureEnumerator(figures); - } - - /** - * Sets the Figure's container and registers the container - * as a figure change listener. A figure's container can be - * any kind of FigureChangeListener. A figure is not restricted - * to have a single container. - */ - public void addToContainer(FigureChangeListener c) { - addFigureChangeListener(c); - invalidate(); - } - - /** - * Removes a figure from the given container and unregisters - * it as a change listener. - */ - public void removeFromContainer(FigureChangeListener c) { - invalidate(); - removeFigureChangeListener(c); - } - - /** - * Adds a listener for this figure. - */ - public synchronized void addFigureChangeListener(FigureChangeListener l) { - fListener = FigureChangeEventMulticaster.add(listener(), l); - } - - /** - * Removes a listener for this figure. - */ - public synchronized void removeFigureChangeListener(FigureChangeListener l) { - fListener = FigureChangeEventMulticaster.remove(listener(), l); - } - - /** - * Gets the figure's listners. - */ - public synchronized FigureChangeListener listener() { - return fListener; - } - - /** - * A figure is released from the drawing. You never call this - * method directly. Release notifies its listeners. - * @see Figure#release - */ - public void release() { - if (listener() != null) { - listener().figureRemoved(new FigureChangeEvent(this)); - } - } - - /** - * Invalidates the figure. This method informs the listeners - * that the figure's current display box is invalid and should be - * refreshed. - */ - public void invalidate() { - if (listener() != null) { - Rectangle r = invalidateRectangle(displayBox()); - listener().figureInvalidated(new FigureChangeEvent(this, r)); - } - } - - /** - * Hook method to change the rectangle that will be invalidated - */ - protected Rectangle invalidateRectangle(Rectangle r) { - r.grow(Handle.HANDLESIZE, Handle.HANDLESIZE); - return r; - } - - /** - * Informes that a figure is about to change something that - * affects the contents of its display box. - * - * @see Figure#willChange - */ - public void willChange() { - // call invalidate before the change occurs to invalidate the old display area - invalidate(); - } - - /** - * Informs that a figure changed the area of its display box. - * - * @see FigureChangeEvent - * @see Figure#changed - */ - public void changed() { - invalidate(); - if (listener() != null) { - listener().figureChanged(new FigureChangeEvent(this)); - } - } - - /** - * Gets the center of a figure. A convenice - * method that is rarely overridden. - */ - public Point center() { - return Geom.center(displayBox()); - } - - /** - * Checks if this figure can be connected. By default - * AbstractFigures can be connected. - */ - public boolean canConnect() { - return true; - } - - /** - * Returns the connection inset. The connection inset - * defines the area where the display box of a - * figure can't be connected. By default the entire - * display box can be connected. - * - */ - public Insets connectionInsets() { - return new Insets(0, 0, 0, 0); - } - - /** - * Returns the Figures connector for the specified location. - * By default a ChopBoxConnector is returned. - * @see ChopBoxConnector - */ - public Connector connectorAt(int x, int y) { - return new ChopBoxConnector(this); - } - - /** - * Sets whether the connectors should be visible. - * By default they are not visible - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure connector) { - } - - /** - * Returns the locator used to located connected text. - */ - public Locator connectedTextLocator(Figure text) { - return RelativeLocator.center(); - } - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * By default figures don't have any attributes so getAttribute - * returns null. - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return null; - } - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * By default figures don't have any attributes getAttribute - * returns null. - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - return null; - } - - /** - * Sets the named attribute to the new value. By default - * figures don't have any attributes and the request is ignored. - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - } - - /** - * Sets the named attribute to the new value. By default - * figures don't have any attributes and the request is ignored. - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - } - - /** - * Clones a figure. Creates a clone by using the storable - * mechanism to flatten the Figure to stream followed by - * resurrecting it from the same stream. - * - * @see Figure#clone - */ - public Object clone() { - Object clone = null; - ByteArrayOutputStream output = new ByteArrayOutputStream(200); - try { - ObjectOutput writer = new ObjectOutputStream(output); - writer.writeObject(this); - writer.close(); - } - catch (IOException e) { - System.err.println("Class not found: " + e); - } - - InputStream input = new ByteArrayInputStream(output.toByteArray()); - try { - ObjectInput reader = new ObjectInputStream(input); - clone = reader.readObject(); - } - catch (IOException e) { - System.err.println(e.toString()); - } - catch (ClassNotFoundException e) { - System.err.println("Class not found: " + e); - } - return clone; - } - - /** - * Stores the Figure to a StorableOutput. - */ - public void write(StorableOutput dw) { - } - - /** - * Reads the Figure from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - } - - /** - * Gets the z value (back-to-front ordering) of this figure. - */ - public int getZValue() { - return _nZ; - } - - /** - * Sets the z value (back-to-front ordering) of this figure. - */ - public void setZValue(int z) { - _nZ = z; - } - - public void visit(FigureVisitor visitor) { - // remember original listener as listeners might be changed by a visitor - // (e.g. by calling addToContainer() or removeFromContainer()) - //FigureChangeListener originalListener = listener(); - FigureEnumeration fe = getDependendFigures(); - - visitor.visitFigure(this); - - FigureEnumeration visitFigures = figures(); - while (visitFigures.hasNextFigure()) { - visitFigures.nextFigure().visit(visitor); - } - - HandleEnumeration visitHandles = handles(); - while (visitHandles.hasNextHandle()) { - visitor.visitHandle(visitHandles.nextHandle()); - } -/* - originalListener = listener(); - if (originalListener != null) { - visitor.visitFigureChangeListener(originalListener); - } -*/ - - while (fe.hasNextFigure()) { - fe.nextFigure().visit(visitor); - // or visitor.visitDependendFigure(fe.nextFigure()); - } - } - - public synchronized FigureEnumeration getDependendFigures() { - return new FigureEnumerator(myDependendFigures); - } - - public synchronized void addDependendFigure(Figure newDependendFigure) { - myDependendFigures.add(newDependendFigure); - } - - public synchronized void removeDependendFigure(Figure oldDependendFigure) { - myDependendFigures.remove(oldDependendFigure); - } - - public TextHolder getTextHolder() { - return null; - } - - public Figure getDecoratedFigure() { - return this; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/AbstractHandle.java b/JHotDraw/src/CH/ifa/draw/standard/AbstractHandle.java deleted file mode 100644 index c901ea18f..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/AbstractHandle.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * @(#)AbstractHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Undoable; - -/** - * AbstractHandle provides defaulf implementation for the Handle interface. - * - * @see CH.ifa.draw.framework.Figure - * @see CH.ifa.draw.framework.Handle - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractHandle implements Handle { - - /** - * The standard size of a handle. - */ - public static final int HANDLESIZE = 8; - - private Figure fOwner; - private Undoable myUndoableActivity; - - /** - * Constructor for <code>AbstractHandle</code>. - * Initializes the owner of the figure. - * @param owner - */ - public AbstractHandle(Figure owner) { - fOwner = owner; - } - - /** - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - * @see CH.ifa.draw.framework.Handle#invokeStart(int, int, CH.ifa.draw.framework.DrawingView) - */ - public void invokeStart(int x, int y, DrawingView view) { - invokeStart(x, y, view.drawing()); - } - - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @see CH.ifa.draw.framework.Handle#invokeStart(int, int, CH.ifa.draw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeStart(x, y, drawingView) - */ - public void invokeStart(int x, int y, Drawing drawing) { } - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - * @see CH.ifa.draw.framework.Handle#invokeStep(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - public void invokeStep(int x, int y, int anchorX, int anchorY, DrawingView view) { - invokeStep(x-anchorX, y-anchorY, view.drawing()); - } - - /** - * Tracks a step of the interaction. - * @param dx x delta of this step - * @param dy y delta of this step - * @see CH.ifa.draw.framework.Handle#invokeStep(int, int, CH.ifa.draw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeStep(x, y, anchorX, anchorY, drawingView) - */ - public void invokeStep(int dx, int dy, Drawing drawing) { } - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - * @see CH.ifa.draw.framework.Handle#invokeEnd(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - invokeEnd(x-anchorX, y-anchorY, view.drawing()); - } - - /** - * Tracks the end of the interaction. - * @see CH.ifa.draw.framework.Handle#invokeEnd(int, int, CH.ifa.draw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeEnd(x, y, anchorX, anchorY, drawingView). - */ - public void invokeEnd(int dx, int dy, Drawing drawing) { } - - /** - * Gets the handle's owner. - * @see CH.ifa.draw.framework.Handle#owner() - */ - public Figure owner() { - return fOwner; - } - - /** - * Gets the display box of the handle. - * @see CH.ifa.draw.framework.Handle#displayBox() - */ - public Rectangle displayBox() { - Point p = locate(); - return new Rectangle( - p.x - HANDLESIZE / 2, - p.y - HANDLESIZE / 2, - HANDLESIZE, - HANDLESIZE); - } - - /** - * Tests if a point is contained in the handle. - * @see CH.ifa.draw.framework.Handle#containsPoint(int, int) - */ - public boolean containsPoint(int x, int y) { - return displayBox().contains(x, y); - } - - /** - * Draws this handle. - * @see CH.ifa.draw.framework.Handle#draw(java.awt.Graphics) - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.white); - g.fillRect(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - } - - /** - * @see CH.ifa.draw.framework.Handle#getUndoActivity() - */ - public Undoable getUndoActivity() { - return myUndoableActivity; - } - - /** - * @see CH.ifa.draw.framework.Handle#setUndoActivity(CH.ifa.draw.util.Undoable) - */ - public void setUndoActivity(Undoable newUndoableActivity) { - myUndoableActivity = newUndoableActivity; - } - - /** - * @see CH.ifa.draw.framework.Handle#getCursor() - */ - public Cursor getCursor() { - return new AWTCursor(AWTCursor.DEFAULT_CURSOR); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/AbstractLocator.java b/JHotDraw/src/CH/ifa/draw/standard/AbstractLocator.java deleted file mode 100644 index b9861b097..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/AbstractLocator.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)AbstractLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.*; - -import java.io.IOException; - - -/** - * AbstractLocator provides default implementations for - * the Locator interface. - * - * @see Locator - * @see Handle - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractLocator implements Locator, Storable, Cloneable { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -7742023180844048409L; - - protected AbstractLocator() { - } - - public Object clone() { - try { - return super.clone(); - } - catch (CloneNotSupportedException e) { - throw new InternalError(); - } - } - - /** - * Stores the arrow tip to a StorableOutput. - */ - public void write(StorableOutput dw) { - } - - /** - * Reads the arrow tip from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - } -} - - diff --git a/JHotDraw/src/CH/ifa/draw/standard/AbstractTool.java b/JHotDraw/src/CH/ifa/draw/standard/AbstractTool.java deleted file mode 100644 index 362ba8484..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/AbstractTool.java +++ /dev/null @@ -1,395 +0,0 @@ -/* - * @(#)AbstractTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.util.EventObject; -import java.util.Iterator; -import java.util.List; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.CollectionsFactory; -import CH.ifa.draw.util.Undoable; - -/** - * Default implementation support for Tools. - * - * @see DrawingView - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ - -public abstract class AbstractTool implements Tool { - - private DrawingEditor myDrawingEditor; - - /** - * The position of the initial mouse down. - * The anchor point is usually the first mouse click performed with this tool. - */ - private int myAnchorX; - private int myAnchorY; - - /** - * A tool can have a drawing view on which it operates - * independingly of the currently active drawing view. - * For example, if a tool can be used - */ - private DrawingView myDrawingView; - - private Undoable myUndoActivity; - private AbstractTool.EventDispatcher myEventDispatcher; - - private boolean myIsUsable; - - /** - * Flag to indicate whether to perform usable checks or not - */ - private boolean myIsEnabled; - - /** - * Constructs a tool for the given view. - */ - public AbstractTool(DrawingEditor newDrawingEditor) { - setEditor(newDrawingEditor); - setEventDispatcher(createEventDispatcher()); - setEnabled(true); - checkUsable(); - editor().addViewChangeListener(createViewChangeListener()); - } - - /** - * Activates the tool for use on the given view. This method is called - * whenever the user switches to this tool. Use this method to - * reinitialize a tool. - * Since tools will be disabled unless it is useable, there will always - * be an active view when this is called. based on isUsable() - * Tool should never be activated if the view is null. - * Ideally, the dditor should take care of that. - */ - public void activate() { - if (getActiveView() != null) { - getActiveView().clearSelection(); - getActiveView().checkDamage(); - getEventDispatcher().fireToolActivatedEvent(); - } - } - - /** - * Deactivates the tool. This method is called whenever the user - * switches to another tool. Use this method to do some clean-up - * when the tool is switched. Subclassers should always call - * super.deactivate. - * An inactive tool should never be deactivated - */ - public void deactivate() { - if (isActive()) { - if (getActiveView() != null) { - getActiveView().setCursor(new AWTCursor(java.awt.Cursor.DEFAULT_CURSOR)); - } - getEventDispatcher().fireToolDeactivatedEvent(); - } - } - - /** - * Fired when the selected view changes. - * Subclasses should always call super. ViewSelectionChanged() this allows - * the tools state to be updated and referenced to the new view. - */ - protected void viewSelectionChanged(DrawingView oldView, DrawingView newView) { - if (isActive()) { - deactivate(); - activate(); - } - - checkUsable(); - } - - /** - * Sent when a new view is created - */ - protected void viewCreated(DrawingView view) { - } - - /** - * Send when an existing view is about to be destroyed. - */ - protected void viewDestroying(DrawingView view) { - } - - /** - * Handles mouse down events in the drawing view. - */ - public void mouseDown(MouseEvent e, int x, int y) { - setAnchorX(x); - setAnchorY(y); - setView((DrawingView)e.getSource()); - } - - /** - * Handles mouse drag events in the drawing view. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - } - - /** - * Handles mouse up in the drawing view. - */ - public void mouseUp(MouseEvent e, int x, int y) { -// setView(null);//This must be fixed!!! the view should not be held onto after mouse up?? -//unlike super.mousedown which is usually called immediately after a sub classes mouse down -//method starts, super.mouseup should probably be called last before the method ends? -//it must if its going to set the view to null. getting messy. - } - - /** - * Handles mouse moves (if the mouse button is up). - */ - public void mouseMove(MouseEvent evt, int x, int y) { - } - - /** - * Handles key down events in the drawing view. - */ - public void keyDown(KeyEvent evt, int key) { - } - - /** - * Gets the tool's drawing. - */ - public Drawing drawing() { - return view().drawing(); - } - - public Drawing getActiveDrawing() { - return getActiveView().drawing(); - } - - /** - * Gets the tool's editor. - */ - public DrawingEditor editor() { - return myDrawingEditor; - } - - protected void setEditor(DrawingEditor newDrawingEditor) { - myDrawingEditor = newDrawingEditor; - } - - /** - * Gets the tool's view (convienence method). - */ - public DrawingView view() { - return myDrawingView; - } - - protected void setView(DrawingView newDrawingView) { - myDrawingView = newDrawingView; - } - - public DrawingView getActiveView() { - return editor().view(); - } - - /** - * Tests if the tool can be used or "executed." - */ - public boolean isUsable() { - return isEnabled() && myIsUsable; - } - - public void setUsable(boolean newIsUsable) { - // perform notification only if the usable state of the tool has changed - if (isUsable() != newIsUsable) { - myIsUsable = newIsUsable; - if (isUsable()) { - getEventDispatcher().fireToolUsableEvent(); - } - else { - getEventDispatcher().fireToolUnusableEvent(); - } - } - } - - public void setEnabled(boolean newIsEnabled) { - // perform notification only if the usable state of the tool has changed - if (isEnabled() != newIsEnabled) { - myIsEnabled = newIsEnabled; - if (isEnabled()) { - getEventDispatcher().fireToolEnabledEvent(); - } - else { - getEventDispatcher().fireToolDisabledEvent(); - setUsable(false); - deactivate(); - } - } - } - - public boolean isEnabled() { - return myIsEnabled; - } - - /** - * The anchor point is usually the first mouse click performed with this tool. - * @see #mouseDown - */ - protected void setAnchorX(int newAnchorX) { - myAnchorX = newAnchorX; - } - - /** - * The anchor point is usually the first mouse click performed with this tool. - * - * @return the anchor X coordinate for the interaction - * @see #mouseDown - */ - protected int getAnchorX() { - return myAnchorX; - } - - /** - * The anchor point is usually the first mouse click performed with this tool. - * @see #mouseDown - */ - protected void setAnchorY(int newAnchorY) { - myAnchorY = newAnchorY; - } - - /** - * The anchor point is usually the first mouse click performed with this tool. - * - * @return the anchor Y coordinate for the interaction - * @see #mouseDown - */ - protected int getAnchorY() { - return myAnchorY; - } - - public Undoable getUndoActivity() { - return myUndoActivity; - } - - public void setUndoActivity(Undoable newUndoActivity) { - myUndoActivity = newUndoActivity; - } - - public boolean isActive() { - return (editor().tool() == this) && isUsable(); - } - - public void addToolListener(ToolListener newToolListener) { - getEventDispatcher().addToolListener(newToolListener); - } - - public void removeToolListener(ToolListener oldToolListener) { - getEventDispatcher().removeToolListener(oldToolListener); - } - - private void setEventDispatcher(AbstractTool.EventDispatcher newEventDispatcher) { - myEventDispatcher = newEventDispatcher; - } - - protected AbstractTool.EventDispatcher getEventDispatcher() { - return myEventDispatcher; - } - - protected AbstractTool.EventDispatcher createEventDispatcher() { - return new AbstractTool.EventDispatcher(this); - } - - protected ViewChangeListener createViewChangeListener() { - return new ViewChangeListener() { - public void viewSelectionChanged(DrawingView oldView, DrawingView newView){ - AbstractTool.this.viewSelectionChanged(oldView, newView); - } - public void viewCreated(DrawingView view){ - AbstractTool.this.viewCreated(view); - } - public void viewDestroying(DrawingView view){ - AbstractTool.this.viewDestroying(view); - } - }; - } - - protected void checkUsable() { - if (isEnabled()) { - setUsable((getActiveView() != null) && getActiveView().isInteractive()); - } - } - - public static class EventDispatcher { - private List myRegisteredListeners; - private Tool myObservedTool; - - public EventDispatcher(Tool newObservedTool) { - myRegisteredListeners = CollectionsFactory.current().createList(); - myObservedTool = newObservedTool; - } - - public void fireToolUsableEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolUsable(new EventObject(myObservedTool)); - } - } - - public void fireToolUnusableEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolUnusable(new EventObject(myObservedTool)); - } - } - - public void fireToolActivatedEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolActivated(new EventObject(myObservedTool)); - } - } - - public void fireToolDeactivatedEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolDeactivated(new EventObject(myObservedTool)); - } - } - - public void fireToolEnabledEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolEnabled(new EventObject(myObservedTool)); - } - } - - public void fireToolDisabledEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolDisabled(new EventObject(myObservedTool)); - } - } - - public void addToolListener(ToolListener newToolListener) { - if (!myRegisteredListeners.contains(newToolListener)) { - myRegisteredListeners.add(newToolListener); - } - } - - public void removeToolListener(ToolListener oldToolListener) { - if (myRegisteredListeners.contains(oldToolListener)) { - myRegisteredListeners.remove(oldToolListener); - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ActionTool.java b/JHotDraw/src/CH/ifa/draw/standard/ActionTool.java deleted file mode 100644 index 320ae5a3c..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ActionTool.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)ActionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; - -import java.awt.event.MouseEvent; - -/** - * A tool that performs an action when it is active and - * the mouse is clicked. - * - * @version <$CURRENT_VERSION$> - */ -public abstract class ActionTool extends AbstractTool { - - public ActionTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - /** - * Add the touched figure to the selection an invoke action - * @see #action - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - Figure target = drawing().findFigure(x, y); - if (target != null) { - view().addToSelection(target); - action(target); - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - editor().toolDone(); - } - - /** - * Performs an action with the touched figure. - */ - public abstract void action(Figure figure); -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/AlignCommand.java b/JHotDraw/src/CH/ifa/draw/standard/AlignCommand.java deleted file mode 100644 index 80f39276d..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/AlignCommand.java +++ /dev/null @@ -1,224 +0,0 @@ -/* - * @(#)AlignCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.UndoableAdapter; -import CH.ifa.draw.util.Undoable; -import java.util.*; -import java.awt.*; - -/** - * Align a selection of figures relative to each other. - * - * @version <$CURRENT_VERSION$> - */ -public class AlignCommand extends AbstractCommand { - - public static abstract class Alignment { - /** - * align left sides - */ - public final static Alignment LEFTS = new Alignment("Lefts") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy(anchor.x-rr.x, 0); - } - }; - - /** - * align centers (horizontally) - */ - public final static Alignment CENTERS = new Alignment("Centers") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy((anchor.x+anchor.width/2) - (rr.x+rr.width/2), 0); - } - }; - - /** - * align right sides - */ - public final static Alignment RIGHTS = new Alignment("Rights") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy((anchor.x+anchor.width) - (rr.x+rr.width), 0); - } - }; - - /** - * align tops - */ - public final static Alignment TOPS = new Alignment("Tops") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy(0, anchor.y-rr.y); - } - }; - - /** - * align middles (vertically) - */ - public final static Alignment MIDDLES = new Alignment("Middles") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy(0, (anchor.y+anchor.height/2) - (rr.y+rr.height/2)); - } - }; - - /** - * align bottoms - */ - public final static Alignment BOTTOMS = new Alignment("Bottoms") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy(0, (anchor.y+anchor.height) - (rr.y+rr.height)); - } - }; - - private String myDescription; - - private Alignment(String newDescription) { - setDescription(newDescription); - } - - public String toString() { - return getDescription(); - } - - public String getDescription() { - return myDescription; - } - - private void setDescription(String newDescription) { - myDescription = newDescription; - } - - public abstract void moveBy(Figure f, Rectangle anchor); - } - - private Alignment myAlignment; - - /** - * Constructs an alignment command. - * @param newAlignment the alignment operation (LEFTS, CENTERS, RIGHTS, etc.) - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public AlignCommand(Alignment newAlignment, DrawingEditor newDrawingEditor) { - super(newAlignment.getDescription(), newDrawingEditor); - setAlignment(newAlignment); - } - - protected boolean isExecutableWithView() { - return view().selectionCount() > 1; - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - // get selected figures in the order the figures have been selected - getUndoActivity().setAffectedFigures(view().selection()); - ((AlignCommand.UndoActivity)getUndoActivity()).alignAffectedFigures(getAlignment()); - view().checkDamage(); - } - - protected void setAlignment(Alignment newAlignment) { - myAlignment = newAlignment; - } - - public Alignment getAlignment() { - return myAlignment; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new AlignCommand.UndoActivity(view(), getAlignment()); - } - - public static class UndoActivity extends UndoableAdapter { - private Hashtable myOriginalPoints; - private Alignment myAppliedAlignment; - - public UndoActivity(DrawingView newView, Alignment newAlignment) { - super(newView); - myOriginalPoints = new Hashtable(); - setAppliedAlignment(newAlignment); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - Point originalPoint = getOriginalPoint(f); - Point currentPoint = f.displayBox().getLocation(); - // substract current lcoation to get to 0,0 and then move to original location - f.moveBy(-currentPoint.x + originalPoint.x, - -currentPoint.y + originalPoint.y); - } - - return true; - } - - public boolean redo() { - if (!isRedoable()) { - return false; - } - alignAffectedFigures(getAppliedAlignment()); - return true; - } - - protected void setAppliedAlignment(Alignment newAlignment) { - myAppliedAlignment = newAlignment; - } - - public Alignment getAppliedAlignment() { - return myAppliedAlignment; - } - - protected void addOriginalPoint(Figure f) { - myOriginalPoints.put(f, f.displayBox().getLocation()); - } - - public Point getOriginalPoint(Figure f) { - return (Point)myOriginalPoints.get(f); - } - - public void alignAffectedFigures(Alignment applyAlignment) { - FigureEnumeration fe = getAffectedFigures(); - Figure anchorFigure = fe.nextFigure(); - Rectangle r = anchorFigure.displayBox(); - - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - applyAlignment.moveBy(f, r); - } - } - - public void setAffectedFigures(FigureEnumeration fe) { - // first make copy of FigureEnumeration in superclass - super.setAffectedFigures(fe); - // then get new FigureEnumeration of copy to save aligment - FigureEnumeration copyFe = getAffectedFigures(); - while (copyFe.hasNextFigure()) { - addOriginalPoint(copyFe.nextFigure()); - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/BoxHandleKit.java b/JHotDraw/src/CH/ifa/draw/standard/BoxHandleKit.java deleted file mode 100644 index d87f69ec5..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/BoxHandleKit.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * @(#)BoxHandleKit.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.UndoableAdapter; -import java.awt.*; -import java.util.List; - -/** - * A set of utility methods to create Handles for the common - * locations on a figure's display box. - * - * @see Handle - * - * @version <$CURRENT_VERSION$> - */ - - // TBD: use anonymous inner classes (had some problems with JDK 1.1) - -public class BoxHandleKit { - - /** - * Fills the given collection with handles at each corner of a - * figure. - */ - static public void addCornerHandles(Figure f, List handles) { - handles.add(southEast(f)); - handles.add(southWest(f)); - handles.add(northEast(f)); - handles.add(northWest(f)); - } - - /** - * Fills the given collection with handles at each corner - * and the north, south, east, and west of the figure. - */ - static public void addHandles(Figure f, List handles) { - addCornerHandles(f, handles); - handles.add(south(f)); - handles.add(north(f)); - handles.add(east(f)); - handles.add(west(f)); - } - - static public Handle south(Figure owner) { - return new SouthHandle(owner); - } - - static public Handle southEast(Figure owner) { - return new SouthEastHandle(owner); - } - - static public Handle southWest(Figure owner) { - return new SouthWestHandle(owner); - } - - static public Handle north(Figure owner) { - return new NorthHandle(owner); - } - - static public Handle northEast(Figure owner) { - return new NorthEastHandle(owner); - } - - static public Handle northWest(Figure owner) { - return new NorthWestHandle(owner); - } - - static public Handle east(Figure owner) { - return new EastHandle(owner); - } - - static public Handle west(Figure owner) { - return new WestHandle(owner); - } -} - -class ResizeHandle extends LocatorHandle { - ResizeHandle(Figure owner, Locator loc) { - super(owner, loc); - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - ((ResizeHandle.UndoActivity)getUndoActivity()).setOldDisplayBox(owner().displayBox()); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle oldDisplayBox = ((ResizeHandle.UndoActivity)getUndoActivity()).getOldDisplayBox(); - if (owner().displayBox().equals(oldDisplayBox)) { - // display box hasn't change so there is nothing to undo - setUndoActivity(null); - } - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView view) { - return new ResizeHandle.UndoActivity(view); - } - - public static class UndoActivity extends UndoableAdapter { - private Rectangle myOldDisplayBox; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return resetDisplayBox(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return resetDisplayBox(); - } - - private boolean resetDisplayBox() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - Figure currentFigure = fe.nextFigure(); - - Rectangle figureDisplayBox = currentFigure.displayBox(); - currentFigure.displayBox(getOldDisplayBox()); - setOldDisplayBox(figureDisplayBox); - return true; - } - - protected void setOldDisplayBox(Rectangle newOldDisplayBox) { - myOldDisplayBox = newOldDisplayBox; - } - - public Rectangle getOldDisplayBox() { - return myOldDisplayBox; - } - } -} - -class NorthEastHandle extends ResizeHandle { - NorthEastHandle(Figure owner) { - super(owner, RelativeLocator.northEast()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, Math.min(r.y + r.height, y)), - new Point(Math.max(r.x, x), r.y + r.height) - ); - } -} - -class EastHandle extends ResizeHandle { - EastHandle(Figure owner) { - super(owner, RelativeLocator.east()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, r.y), new Point(Math.max(r.x, x), r.y + r.height) - ); - } -} - -class NorthHandle extends ResizeHandle { - NorthHandle(Figure owner) { - super(owner, RelativeLocator.north()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, Math.min(r.y + r.height, y)), - new Point(r.x + r.width, r.y + r.height) - ); - } -} - -class NorthWestHandle extends ResizeHandle { - NorthWestHandle(Figure owner) { - super(owner, RelativeLocator.northWest()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(Math.min(r.x + r.width, x), Math.min(r.y + r.height, y)), - new Point(r.x + r.width, r.y + r.height) - ); - } -} - -class SouthEastHandle extends ResizeHandle { - SouthEastHandle(Figure owner) { - super(owner, RelativeLocator.southEast()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, r.y), - new Point(Math.max(r.x, x), Math.max(r.y, y)) - ); - } -} - -class SouthHandle extends ResizeHandle { - SouthHandle(Figure owner) { - super(owner, RelativeLocator.south()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, r.y), - new Point(r.x + r.width, Math.max(r.y, y)) - ); - } -} - -class SouthWestHandle extends ResizeHandle { - SouthWestHandle(Figure owner) { - super(owner, RelativeLocator.southWest()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(Math.min(r.x + r.width, x), r.y), - new Point(r.x + r.width, Math.max(r.y, y)) - ); - } -} - -class WestHandle extends ResizeHandle { - WestHandle(Figure owner) { - super(owner, RelativeLocator.west()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(Math.min(r.x + r.width, x), r.y), - new Point(r.x + r.width, r.y + r.height) - ); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/BringToFrontCommand.java b/JHotDraw/src/CH/ifa/draw/standard/BringToFrontCommand.java deleted file mode 100644 index 2b228c4c0..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/BringToFrontCommand.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * @(#)BringToFrontCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Undoable; - -/** - * BringToFrontCommand brings the selected figures in the front of - * the other figures. - * - * @see SendToBackCommand - * @version <$CURRENT_VERSION$> - */ -public class BringToFrontCommand extends AbstractCommand { - - /** - * Constructs a bring to front command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public BringToFrontCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); - FigureEnumeration fe = getUndoActivity().getAffectedFigures(); - while (fe.hasNextFigure()) { - view().drawing().bringToFront(fe.nextFigure()); - } - view().checkDamage(); - } - - public boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - protected Undoable createUndoActivity() { - return new BringToFrontCommand.UndoActivity(view()); - } - - public static class UndoActivity extends SendToBackCommand.UndoActivity { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - } - - protected void sendToCommand(Figure f) { - getDrawingView().drawing().bringToFront(f); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/BufferedUpdateStrategy.java b/JHotDraw/src/CH/ifa/draw/standard/BufferedUpdateStrategy.java deleted file mode 100644 index d5e91a173..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/BufferedUpdateStrategy.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * @(#)BufferedUpdateStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import CH.ifa.draw.framework.*; - -/** - * The BufferedUpdateStrategy implements an update - * strategy that first draws a view into a buffer - * followed by copying the buffer to the DrawingView. - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public class BufferedUpdateStrategy implements Painter { - - /** - * The offscreen image - */ - transient private Image fOffscreen; - private int fImagewidth = -1; - private int fImageheight = -1; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 6489532222954612824L; - private int bufferedUpdateSerializedDataVersion = 1; - - /** - * Draws the view contents. - */ - public void draw(Graphics g, DrawingView view) { - // create the buffer if necessary - Dimension d = view.getSize(); - if ((fOffscreen == null) || (d.width != fImagewidth) - || (d.height != fImageheight)) { - fOffscreen = view.createImage(d.width, d.height); - fImagewidth = d.width; - fImageheight = d.height; - } - - // let the view draw on offscreen buffer - Graphics g2 = fOffscreen.getGraphics(); - view.drawAll(g2); - - g.drawImage(fOffscreen, 0, 0, view); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ChangeAttributeCommand.java b/JHotDraw/src/CH/ifa/draw/standard/ChangeAttributeCommand.java deleted file mode 100644 index 050f4b8fa..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ChangeAttributeCommand.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)ChangeAttributeCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.UndoableAdapter; -import CH.ifa.draw.util.Undoable; -import java.util.Hashtable; - -/** - * Command to change a named figure attribute. - * - * @version <$CURRENT_VERSION$> - */ -public class ChangeAttributeCommand extends AbstractCommand { - - private FigureAttributeConstant fAttribute; - private Object fValue; - - /** - * Constructs a change attribute command. - * @param name the command name - * @param attribute the attribute to be changed - * @param value the new attribute value - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public ChangeAttributeCommand(String name, FigureAttributeConstant attribute, - Object value, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - fAttribute = attribute; - fValue = value; - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); - FigureEnumeration fe = getUndoActivity().getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().setAttribute(fAttribute, fValue); - } - view().checkDamage(); - } - - public boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new ChangeAttributeCommand.UndoActivity(view(), fAttribute, fValue); - } - - public static class UndoActivity extends UndoableAdapter { - private FigureAttributeConstant myUndoAttribute; - private Hashtable myOriginalValues; - private Object myUndoValue; - - public UndoActivity(DrawingView newDrawingView, FigureAttributeConstant newUndoAttribute, Object newUndoValue) { - super(newDrawingView); - myOriginalValues = new Hashtable(); - setAttribute(newUndoAttribute); - setBackupValue(newUndoValue); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - if (getOriginalValue(f) != null) { - f.setAttribute(getAttribute(), getOriginalValue(f)); - } - } - - return true; - } - - public boolean redo() { - if (!isRedoable()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - if (getBackupValue() != null) { - f.setAttribute(getAttribute(), getBackupValue()); - } - } - - return true; - } - - protected void addOriginalValue(Figure affectedFigure, Object newOriginalValue) { - myOriginalValues.put(affectedFigure, newOriginalValue); - } - - protected Object getOriginalValue(Figure lookupAffectedFigure) { - return myOriginalValues.get(lookupAffectedFigure); - } - - protected void setAttribute(FigureAttributeConstant newUndoAttribute) { - myUndoAttribute = newUndoAttribute; - } - - public FigureAttributeConstant getAttribute() { - return myUndoAttribute; - } - - protected void setBackupValue(Object newUndoValue) { - myUndoValue = newUndoValue; - } - - public Object getBackupValue() { - return myUndoValue; - } - - public void release() { - super.release(); - myOriginalValues = null; - } - - public void setAffectedFigures(FigureEnumeration fe) { - // first make copy of FigureEnumeration in superclass - super.setAffectedFigures(fe); - // then get new FigureEnumeration of copy to save attributes - FigureEnumeration copyFe = getAffectedFigures(); - while (copyFe.hasNextFigure()) { - Figure f = copyFe.nextFigure(); - Object attributeValue = f.getAttribute(getAttribute()); - if (attributeValue != null) { - addOriginalValue(f, attributeValue); - } - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionEndHandle.java b/JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionEndHandle.java deleted file mode 100644 index 191fe8507..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionEndHandle.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * @(#)ChangeConnectionEndHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Undoable; -import java.awt.Point; - -/** - * A handle to reconnect the end point of - * a connection to another figure. - * - * @version <$CURRENT_VERSION$> - */ -public class ChangeConnectionEndHandle extends ChangeConnectionHandle { - - /** - * Constructs the connection handle. - */ - public ChangeConnectionEndHandle(ConnectionFigure owner) { - super(owner); - } - - /** - * Gets the end figure of a connection. - */ - protected Connector target() { - return getConnection().getEndConnector(); - } - - /** - * Disconnects the end figure. - */ - protected void disconnect() { - getConnection().disconnectEnd(); - } - - /** - * Sets the end of the connection. - */ - protected void connect(Connector c) { - getConnection().connectEnd(c); - } - - /** - * Sets the end point of the connection. - */ - protected void setPoint(int x, int y) { - getConnection().endPoint(x, y); - } - - /** - * Returns the end point of the connection. - */ - public Point locate() { - return getConnection().endPoint(); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new ChangeConnectionEndHandle.UndoActivity(newView); - } - - public static class UndoActivity extends ChangeConnectionHandle.UndoActivity { - public UndoActivity(DrawingView newView) { - super(newView); - } - - protected Connector replaceConnector(ConnectionFigure connection) { - Connector tempEndConnector = connection.getEndConnector(); - connection.connectEnd(getOldConnector()); - return tempEndConnector; - } - } - - protected boolean canConnectTo(Figure figure) { - return getConnection().canConnect(source().owner(), figure); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionHandle.java b/JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionHandle.java deleted file mode 100644 index c3586fd6c..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionHandle.java +++ /dev/null @@ -1,276 +0,0 @@ -/* - * @(#)ChangeConnectionHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Geom; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.UndoableAdapter; -import java.awt.*; - -/** - * ChangeConnectionHandle factors the common code for handles - * that can be used to reconnect connections. - * - * @see ChangeConnectionEndHandle - * @see ChangeConnectionStartHandle - * - * @version <$CURRENT_VERSION$> - */ -public abstract class ChangeConnectionHandle extends AbstractHandle { - - private Connector fOriginalTarget; - private Figure myTarget; - private ConnectionFigure myConnection; - private Point fStart; - - /** - * Initializes the change connection handle. - */ - protected ChangeConnectionHandle(ConnectionFigure owner) { - super(owner); - setConnection(owner); - setTargetFigure(null); - } - - /** - * Returns the target connector of the change. - */ - protected abstract Connector target(); - - /** - * Disconnects the connection. - */ - protected abstract void disconnect(); - - /** - * Connect the connection with the given figure. - */ - protected abstract void connect(Connector c); - - /** - * Sets the location of the target point. - */ - protected abstract void setPoint(int x, int y); - - /** - * Gets the side of the connection that is unaffected by - * the change. - */ - protected Connector source() { - if (target() == getConnection().getStartConnector()) { - return getConnection().getEndConnector(); - } - return getConnection().getStartConnector(); - } - - /** - * Disconnects the connection. - */ - public void invokeStart(int x, int y, DrawingView view) { - fOriginalTarget = target(); - fStart = new Point(x, y); - - setUndoActivity(createUndoActivity(view)); - ((ChangeConnectionHandle.UndoActivity)getUndoActivity()).setOldConnector(target()); - - disconnect(); - } - - /** - * Finds a new target of the connection. - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Point p = new Point(x, y); - Figure f = findConnectableFigure(x, y, view.drawing()); - // track the figure containing the mouse - if (f != getTargetFigure()) { - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - } - setTargetFigure(f); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(true, getConnection()); - } - } - - Connector target = findConnectionTarget(p.x, p.y, view.drawing()); - if (target != null) { - p = Geom.center(target.displayBox()); - } - setPoint(p.x, p.y); - } - - /** - * Connects the figure to the new target. If there is no - * new target the connection reverts to its original one. - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - Connector target = findConnectionTarget(x, y, view.drawing()); - if (target == null) { - target = fOriginalTarget; - } - - setPoint(x, y); - connect(target); - getConnection().updateConnection(); - - Connector oldConnector = ((ChangeConnectionHandle.UndoActivity) - getUndoActivity()).getOldConnector(); - // there has been no change so there is nothing to undo - if ((oldConnector == null) - || (target() == null) - || (oldConnector.owner() == target().owner())) { - setUndoActivity(null); - } - else { - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(getConnection())); - } - - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - setTargetFigure(null); - } - } - - private Connector findConnectionTarget(int x, int y, Drawing drawing) { - Figure target = findConnectableFigure(x, y, drawing); - - if ((target != null) - && target.canConnect() - && target != fOriginalTarget - && !target.includes(owner()) - /* - * JP, 25-May-03: Fix for ignored direction when checking - * connectability. Old version didn't take direction of - * connection into account, which could result in incorrect - * drawing if syntax rules were a concern. - * - * See also new canConnectTo() method below. - * - * Was: - * - * && getConnection().canConnect(source().owner(), target)) { - */ - && canConnectTo(target)) { - return findConnector(x, y, target); - } - return null; - } - - /** - * Called to check whether this end of the connection can connect to the - * given target figure. Needs to be overriden by the start and end changers - * to take the connection's direction into account during the check. JHD 5.4 - * beta and before did not do this. - */ - protected abstract boolean canConnectTo(Figure figure); - - protected Connector findConnector(int x, int y, Figure f) { - return f.connectorAt(x, y); - } - - /** - * Draws this handle. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.green); - g.fillRect(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - } - - private Figure findConnectableFigure(int x, int y, Drawing drawing) { - FigureEnumeration fe = drawing.figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (!figure.includes(getConnection()) && figure.canConnect()) { - if (figure.containsPoint(x, y)) { - return figure; - } - } - } - return null; - } - - protected void setConnection(ConnectionFigure newConnection) { - myConnection = newConnection; - } - - protected ConnectionFigure getConnection() { - return myConnection; - } - - protected void setTargetFigure(Figure newTarget) { - myTarget = newTarget; - } - - protected Figure getTargetFigure() { - return myTarget; - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected abstract Undoable createUndoActivity(DrawingView newView); - - public static abstract class UndoActivity extends UndoableAdapter { - private Connector myOldConnector; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - swapConnectors(); - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - swapConnectors(); - return true; - } - - private void swapConnectors() { - FigureEnumeration fe = getAffectedFigures(); - if (fe.hasNextFigure()) { - ConnectionFigure connection = (ConnectionFigure)fe.nextFigure(); - setOldConnector(replaceConnector(connection)); - connection.updateConnection(); - } - } - - protected abstract Connector replaceConnector(ConnectionFigure connection); - - public void setOldConnector(Connector newOldConnector) { - myOldConnector = newOldConnector; - } - - public Connector getOldConnector() { - return myOldConnector; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionStartHandle.java b/JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionStartHandle.java deleted file mode 100644 index 8b15e185e..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ChangeConnectionStartHandle.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * @(#)ChangeConnectionStartHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Undoable; -import java.awt.Point; - -/** - * Handle to reconnect the - * start of a connection to another figure. - * - * @version <$CURRENT_VERSION$> - */ -public class ChangeConnectionStartHandle extends ChangeConnectionHandle { - - /** - * Constructs the connection handle for the given start figure. - */ - public ChangeConnectionStartHandle(ConnectionFigure owner) { - super(owner); - } - - /** - * Gets the start figure of a connection. - */ - protected Connector target() { - return getConnection().getStartConnector(); - } - - /** - * Disconnects the start figure. - */ - protected void disconnect() { - getConnection().disconnectStart(); - } - - /** - * Sets the start of the connection. - */ - protected void connect(Connector c) { - getConnection().connectStart(c); - } - - /** - * Sets the start point of the connection. - */ - protected void setPoint(int x, int y) { - getConnection().startPoint(x, y); - } - - /** - * Returns the start point of the connection. - */ - public Point locate() { - return getConnection().startPoint(); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new ChangeConnectionStartHandle.UndoActivity(newView); - } - - public static class UndoActivity extends ChangeConnectionHandle.UndoActivity { - public UndoActivity(DrawingView newView) { - super(newView); - } - - protected Connector replaceConnector(ConnectionFigure connection) { - Connector tempStartConnector = connection.getStartConnector(); - connection.connectStart(getOldConnector()); - return tempStartConnector; - } - } - - protected boolean canConnectTo(Figure figure) { - return getConnection().canConnect(figure, source().owner()); -} -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ChopBoxConnector.java b/JHotDraw/src/CH/ifa/draw/standard/ChopBoxConnector.java deleted file mode 100644 index 2a2312fe2..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ChopBoxConnector.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * @(#)ChopBoxConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Geom; - -/** - * A ChopBoxConnector locates connection points by - * choping the connection between the centers of the - * two figures at the display box. - * - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ -public class ChopBoxConnector extends AbstractConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -1461450322712345462L; - - public ChopBoxConnector() { // only used for Storable implementation - } - - public ChopBoxConnector(Figure owner) { - super(owner); - } - - public Point findStart(ConnectionFigure connection) { - Figure startFigure = connection.getStartConnector().owner(); - Rectangle r2 = connection.getEndConnector().displayBox(); - Point r2c = null; - - if (connection.pointCount() == 2) { - r2c = new Point(r2.x + r2.width/2, r2.y + r2.height/2); - } - else { - r2c = connection.pointAt(1); - } - - return chop(startFigure, r2c); - } - - public Point findEnd(ConnectionFigure connection) { - Figure endFigure = connection.getEndConnector().owner(); - Rectangle r1 = connection.getStartConnector().displayBox(); - Point r1c = null; - - if (connection.pointCount() == 2) { - r1c = new Point(r1.x + r1.width/2, r1.y + r1.height/2); - } - else { - r1c = connection.pointAt(connection.pointCount()-2); - } - - return chop(endFigure, r1c); - } - - protected Point chop(Figure target, Point from) { - Rectangle r = target.displayBox(); - return Geom.angleToPoint(r, (Geom.pointToAngle(r, from))); - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/standard/CompositeFigure.java b/JHotDraw/src/CH/ifa/draw/standard/CompositeFigure.java deleted file mode 100644 index f6fca82c8..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/CompositeFigure.java +++ /dev/null @@ -1,734 +0,0 @@ -/* - * @(#)CompositeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.*; -import java.awt.*; -import java.util.*; -import java.util.List; -import java.io.*; - -/** - * A Figure that is composed of several figures. A CompositeFigure - * doesn't define any layout behavior. It is up to subclassers to - * arrange the contained figures. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld012.htm>Composite</a></b><br> - * CompositeFigure enables to treat a composition of figures like - * a single figure.<br> - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ - -public abstract class CompositeFigure - extends AbstractFigure - implements FigureChangeListener { - - /** - * The figures that this figure is composed of - * @see #add - * @see #remove - */ - protected List fFigures; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 7408153435700021866L; - private int compositeFigureSerializedDataVersion = 1; - private transient QuadTree _theQuadTree; - protected int _nLowestZ; - protected int _nHighestZ; - - protected CompositeFigure() { - fFigures = CollectionsFactory.current().createList(); - _nLowestZ = 0; - _nHighestZ = 0; - } - - /** - * Adds a figure to the list of figures. Initializes the - * the figure's container. - * - * @param figure to be added to the drawing - * @return the figure that was inserted (might be different from the figure specified). - */ - public Figure add(Figure figure) { - if (!containsFigure(figure)) { - figure.setZValue(++_nHighestZ); - fFigures.add(figure); - figure.addToContainer(this); - _addToQuadTree(figure); - } - return figure; - } - - /** - * Adds a list of figures. - * - * @see #add - * @deprecated use addAll(FigureEnumeration) instead - */ - public void addAll(List newFigures) { - addAll(new FigureEnumerator(newFigures)); - } - - /** - * Adds a FigureEnumeration of figures. - * - * @see #add - * @param fe (unused) enumeration containing all figures to be added - */ - public void addAll(FigureEnumeration fe) { - while (fe.hasNextFigure()) { - add(fe.nextFigure()); - } - } - - /** - * Removes a figure from the composite. - * - * @param figure that is part of the drawing and should be removed - * @return the figure that has been removed (might be different from the figure specified) - * @see #removeAll - */ - public Figure remove(Figure figure) { - Figure orphanedFigure = orphan(figure); - if (orphanedFigure != null) { - orphanedFigure.release(); - } - return orphanedFigure; - } - - /** - * Removes a list of figures. - * - * @see #remove - * @deprecated use removeAll(FigureEnumeration) instead - */ - public void removeAll(List figures) { - removeAll(new FigureEnumerator(figures)); - } - - /** - * Removes a FigureEnumeration of figures. - * @see #remove - */ - public void removeAll(FigureEnumeration fe) { - while (fe.hasNextFigure()) { - remove(fe.nextFigure()); - } - } - - /** - * Removes all children. - * @see #remove - */ - public void removeAll() { - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - figure.removeFromContainer(this); - } - fFigures.clear(); - - _clearQuadTree(); - _nLowestZ = 0; - _nHighestZ = 0; - } - - /** - * Removes a figure from the figure list, but - * doesn't release it. Use this method to temporarily - * manipulate a figure outside of the drawing. - * - * @param figure that is part of the drawing and should be added - */ - public synchronized Figure orphan(Figure figure) { - figure.removeFromContainer(this); - fFigures.remove(figure); - _removeFromQuadTree(figure); - return figure; - } - - /** - * Removes a list of figures from the figure's list - * without releasing the figures. - * - * @see #orphan - * @deprecated use orphanAll(FigureEnumeration) instead - */ - public void orphanAll(List newFigures) { - orphanAll(new FigureEnumerator(newFigures)); - } - - public void orphanAll(FigureEnumeration fe) { - while (fe.hasNextFigure()) { - orphan(fe.nextFigure()); - } - } - - /** - * Replaces a figure in the drawing without - * removing it from the drawing. - * - * @param figure figure to be replaced - * @param replacement figure that should replace the specified figure - * @return the figure that has been inserted (might be different from the figure specified) - */ - public synchronized Figure replace(Figure figure, Figure replacement) { - int index = fFigures.indexOf(figure); - if (index != -1) { - replacement.setZValue(figure.getZValue()); - replacement.addToContainer(this); // will invalidate figure - figure.removeFromContainer(this); - fFigures.set(index, replacement); - figure.changed(); - replacement.changed(); - } - return replacement; - } - - /** - * Sends a figure to the back of the drawing. - * - * @param figure that is part of the drawing - */ - public synchronized void sendToBack(Figure figure) { - if (containsFigure(figure)) { - fFigures.remove(figure); - fFigures.add(0, figure); - _nLowestZ--; - figure.setZValue(_nLowestZ); - figure.changed(); - } - } - - /** - * Brings a figure to the front. - * - * @param figure that is part of the drawing - */ - public synchronized void bringToFront(Figure figure) { - if (containsFigure(figure)) { - fFigures.remove(figure); - fFigures.add(figure); - _nHighestZ++; - figure.setZValue(_nHighestZ); - figure.changed(); - } - } - - /** - * Sends a figure to a certain layer within a drawing. Each figure - * lays in a unique layer and the layering order decides which - * figure is drawn on top of another figure. Figures with a higher - * layer number have usually been added later and may overlay - * figures in lower layers. Layers are counted from to (the number - * of figures - 1). - * The figure is removed from its current layer (if it has been already - * part of this drawing) and is transferred to the specified layers after - * all figures between the original layer and the new layer are shifted to - * one layer below to fill the layer sequence. It is not possible to skip a - * layer number and if the figure is sent to a layer beyond the latest layer - * it will be added as the last figure to the drawing and its layer number - * will be set to the be the one beyond the latest layer so far. - * - * @param figure figure to be sent to a certain layer - * @param layerNr target layer of the figure - */ - public void sendToLayer(Figure figure, int layerNr) { - if (containsFigure(figure)) { - if (layerNr >= fFigures.size()) { - layerNr = fFigures.size() - 1; - } - Figure layerFigure = getFigureFromLayer(layerNr); - int layerFigureZValue = layerFigure.getZValue(); - int figureLayer = getLayer(figure); - // move figure forward - if (figureLayer < layerNr) { - assignFiguresToPredecessorZValue(figureLayer + 1, layerNr); - } - else if (figureLayer > layerNr) { - assignFiguresToSuccessorZValue(layerNr, figureLayer - 1); - } - - fFigures.remove(figure); - fFigures.add(layerNr, figure); - figure.setZValue(layerFigureZValue); - figure.changed(); - } - } - - private void assignFiguresToPredecessorZValue(int lowerBound, int upperBound) { - // cannot shift figures to a lower layer if the lower bound is - // already the first layer. - if (upperBound >= fFigures.size()) { - upperBound = fFigures.size() - 1; - } - - for (int i = upperBound; i >= lowerBound; i--) { - Figure currentFigure = (Figure)fFigures.get(i); - Figure predecessorFigure = (Figure)fFigures.get(i - 1); - currentFigure.setZValue(predecessorFigure.getZValue()); - } - } - - private void assignFiguresToSuccessorZValue(int lowerBound, int upperBound) { - if (upperBound >= fFigures.size()) { - upperBound = fFigures.size() - 1; - } - - for (int i = upperBound; i >= lowerBound; i--) { - Figure currentFigure = (Figure)fFigures.get(i); - Figure successorFigure = (Figure)fFigures.get(i + 1); - currentFigure.setZValue(successorFigure.getZValue()); - } - } - - /** - * Gets the layer for a certain figure (first occurrence). The number - * returned is the number of the layer in which the figure is placed. - * - * @param figure figure to be queried for its layering place - * @return number of the layer in which the figure is placed and -1 if the - * figure could not be found. - * @see #sendToLayer - */ - public int getLayer(Figure figure) { - if (!containsFigure(figure)) { - return -1; - } - else { - return fFigures.indexOf(figure); - } - } - - /** - * Gets the figure from a certain layer. - * - * @param layerNr number of the layer which figure should be returned - * @return figure from the layer specified, null, if the layer nr was outside - * the number of possible layer (0...(number of figures - 1)) - * @see #sendToLayer - */ - public Figure getFigureFromLayer(int layerNr) { - if ((layerNr >= 0) && (layerNr < fFigures.size())) { - return (Figure)fFigures.get(layerNr); - } - else { - return null; - } - } - - /** - * Draws all the contained figures - * @see Figure#draw - */ - public void draw(Graphics g) { - draw(g, figures()); - } - - /** - * Draws only the given figures - * @see Figure#draw - */ - public void draw(Graphics g, FigureEnumeration fe) { - while (fe.hasNextFigure()) { - fe.nextFigure().draw(g); - } - } - - /** - * Gets a figure at the given index. - */ - public Figure figureAt(int i) { - return (Figure)fFigures.get(i); - } - - /** - * Returns an Enumeration for accessing the contained figures. - * The enumeration is a snapshot of the current contained figures - * and is not a "live" enumeration and does not take subsequent - * changes of the CompositeFigure into account. - * The figures are returned in the drawing order. - */ - public FigureEnumeration figures() { - return new FigureEnumerator(CollectionsFactory.current().createList(fFigures)); - } - - /** - * Returns an enumeration to iterate in - * Z-order back to front over the figures - * that lie within the given bounds. - */ - public FigureEnumeration figures(Rectangle viewRectangle) { - if (_theQuadTree != null) { - - FigureEnumeration fe = - _theQuadTree.getAllWithin(new Bounds(viewRectangle).asRectangle2D()); - - List l2 = CollectionsFactory.current().createList(); - - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - //int z = fFigures.indexOf(f); - l2.add(new OrderedFigureElement(f, f.getZValue())); - } - - Collections.sort(l2); - - List l3 = CollectionsFactory.current().createList(); - - for (Iterator iter = l2.iterator(); iter.hasNext(); ) { - OrderedFigureElement ofe = (OrderedFigureElement)iter.next(); - l3.add(ofe.getFigure()); - } - - return new FigureEnumerator(l3); - } - - return figures(); - } - - /** - * Gets number of child figures. - */ - public int figureCount() { - return fFigures.size(); - } - - /** - * Check whether a given figure is a child figure of this CompositeFigure. - */ - public boolean containsFigure(Figure checkFigure) { - return fFigures.contains(checkFigure); - } - - /** - * Returns an Enumeration for accessing the contained figures - * in the reverse drawing order. - */ - public final FigureEnumeration figuresReverse() { - return new ReverseFigureEnumerator(CollectionsFactory.current().createList(fFigures)); - } - - /** - * Finds a top level Figure. Use this call for hit detection that - * should not descend into the figure's children. - */ - public Figure findFigure(int x, int y) { - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (figure.containsPoint(x, y)) { - return figure; - } - } - return null; - } - - /** - * Finds a top level Figure that intersects the given rectangle. - */ - public Figure findFigure(Rectangle r) { - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - Rectangle fr = figure.displayBox(); - if (r.intersects(fr)) { - return figure; - } - } - return null; - } - - /** - * Finds a top level Figure, but supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - * @param x the x coordinate - * @param y the y coordinate - * @param without the figure to be ignored during - * the find. - */ - public Figure findFigureWithout(int x, int y, Figure without) { - if (without == null) { - return findFigure(x, y); - } - - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (figure.containsPoint(x, y) && !figure.includes(without)) { - return figure; - } - } - return null; - } - - /** - * Finds a top level Figure that intersects the given rectangle. - * It supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - */ - public Figure findFigure(Rectangle r, Figure without) { - if (without == null) { - return findFigure(r); - } - - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - Rectangle fr = figure.displayBox(); - if (r.intersects(fr) && !figure.includes(without)) { - return figure; - } - } - return null; - } - - /** - * Finds a figure but descends into a figure's - * children. Use this method to implement <i>click-through</i> - * hit detection, that is, you want to detect the inner most - * figure containing the given point. - */ - public Figure findFigureInside(int x, int y) { - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure().findFigureInside(x, y); - if (figure != null) { - return figure; - } - } - - // bug-fix: 661878 - if (containsPoint(x, y)) { - return this; - } - else { - return null; - } - } - - /** - * Finds a figure but descends into a figure's - * children. It supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - */ - public Figure findFigureInsideWithout(int x, int y, Figure without) { - if (without == null) { - return findFigureInside(x, y); - } - - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (figure != without) { - Figure found = figure.findFigureInside(x, y); - if ((found != null) && !figure.includes(without)) { - return found; - } - } - } - - if (containsPoint(x, y)) { - return this; - } - else { - return null; - } - } - - /** - * Checks if the composite figure has the argument as one of - * its children. - * @return true if the figure is part of this CompositeFigure, else otherwise - */ - public boolean includes(Figure figure) { - if (super.includes(figure)) { - return true; - } - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - if (f.includes(figure)) { - return true; - } - } - return false; - } - - /** - * Moves all the given figures by x and y. Doesn't announce - * any changes. Subclassers override - * basicMoveBy. Clients usually call moveBy. - * @see #moveBy - */ - protected void basicMoveBy(int x, int y) { - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - fe.nextFigure().moveBy(x,y); - } - } - - /** - * Releases the figure and all its children. - */ - public void release() { - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - figure.release(); - } - // bug-fix: 661879 (CompositeFigure.release releasing itself before containees) - super.release(); - } - - /** - * Propagates the figureInvalidated event to my listener. - * @see FigureChangeListener - */ - public void figureInvalidated(FigureChangeEvent e) { - if (listener() != null) { - listener().figureInvalidated(e); - } - } - - /** - * Propagates the removeFromDrawing request up to the container. - * @see FigureChangeListener - */ - public void figureRequestRemove(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestRemove(new FigureChangeEvent(this)); - } - } - - /** - * Propagates the requestUpdate request up to the container. - * @see FigureChangeListener - */ - public void figureRequestUpdate(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestUpdate(e); - } - } - - public void figureChanged(FigureChangeEvent e) { - _removeFromQuadTree(e.getFigure()); - _addToQuadTree(e.getFigure()); - } - - public void figureRemoved(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRemoved(e); - } - } - - /** - * Writes the contained figures to the StorableOutput. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(figureCount()); - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - dw.writeStorable(fe.nextFigure()); - } - } - - /** - * Reads the contained figures from StorableInput. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - int size = dr.readInt(); - fFigures = CollectionsFactory.current().createList(size); - for (int i=0; i<size; i++) { - add((Figure)dr.readStorable()); - } - init(displayBox()); - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - figure.addToContainer(this); - } - - init(new Rectangle(0, 0)); - } - - /** - * Used to optimize rendering. Rendering of many objects may - * be slow until this method is called. The view rectangle - * should at least approximately enclose the CompositeFigure. - * If the view rectangle is too small or too large, performance - * may suffer. - * - * Don't forget to call this after loading or creating a - * new CompositeFigure. If you forget, drawing performance may - * suffer. - */ - public void init(Rectangle viewRectangle) { - _theQuadTree = new QuadTree(new Bounds(viewRectangle).asRectangle2D()); - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - _addToQuadTree(fe.nextFigure()); - } - } - - private void _addToQuadTree(Figure f) { - if (_theQuadTree != null) { - // Bugfix: Make sure the rectangle is not zero width or height. - // Otherwise, the quadTree search in this.figures(Rectangle) - // will be incorrect. [John Yu, 2002/05/23] - Rectangle r = f.displayBox(); - if (r.height == 0) { - r.grow(0, 1); - } - if (r.width == 0) { - r.grow(1, 0); - } - - _theQuadTree.add(f, new Bounds(r).asRectangle2D()); - } - } - - private void _removeFromQuadTree(Figure f) { - if (_theQuadTree != null) { - _theQuadTree.remove(f); - } - } - - private void _clearQuadTree() { - if (_theQuadTree != null) { - _theQuadTree.clear(); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ConnectionHandle.java b/JHotDraw/src/CH/ifa/draw/standard/ConnectionHandle.java deleted file mode 100644 index 3cad43609..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ConnectionHandle.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * @(#)ConnectionHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.util.Vector; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Geom; -import CH.ifa.draw.util.Undoable; - -/** - * A handle to connect figures. - * The connection object to be created is specified by a prototype. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld029.htm>Prototype</a></b><br> - * ConnectionHandle creates the connection by cloning a prototype. - * <hr> - * - * @see ConnectionFigure - * @see Object#clone - * - * @version <$CURRENT_VERSION$> - */ -public class ConnectionHandle extends LocatorHandle { - - /** - * the currently created connection - */ - private ConnectionFigure myConnection; - - /** - * the prototype of the connection to be created - */ - private ConnectionFigure fPrototype; - - /** - * the current target - */ - private Figure myTargetFigure; - - /** - * Constructs a handle with the given owner, locator, and connection prototype - */ - public ConnectionHandle(Figure owner, Locator l, ConnectionFigure prototype) { - super(owner, l); - fPrototype = prototype; - } - - /** - * Creates the connection - */ - public void invokeStart(int x, int y, DrawingView view) { - setConnection(createConnection()); - - setUndoActivity(createUndoActivity(view)); - Vector v = new Vector(); - v.add(getConnection()); - getUndoActivity().setAffectedFigures(new FigureEnumerator(v)); - - Point p = locate(); - getConnection().startPoint(p.x, p.y); - getConnection().endPoint(p.x, p.y); - view.drawing().add(getConnection()); - } - - /** - * Tracks the connection. - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Point p = new Point(x,y); - Figure f = findConnectableFigure(x, y, view.drawing()); - // track the figure containing the mouse - if (f != getTargetFigure()) { - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - } - setTargetFigure(f); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(true, getConnection()); - } - } - - Connector target = findConnectionTarget(p.x, p.y, view.drawing()); - if (target != null) { - p = Geom.center(target.displayBox()); - } - getConnection().endPoint(p.x, p.y); - } - - /** - * Connects the figures if the mouse is released over another - * figure. - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - Connector target = findConnectionTarget(x, y, view.drawing()); - if (target != null) { - getConnection().connectStart(startConnector()); - getConnection().connectEnd(target); - getConnection().updateConnection(); - } - else { - view.drawing().remove(getConnection()); - setUndoActivity(null); - } - setConnection(null); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - setTargetFigure(null); - } - } - - private Connector startConnector() { - Point p = locate(); - return owner().connectorAt(p.x, p.y); - } - - /** - * Creates the ConnectionFigure. By default the figure prototype is - * cloned. - */ - protected ConnectionFigure createConnection() { - return (ConnectionFigure)fPrototype.clone(); - } - - /** - * Factory method for undo activity. - */ - protected Undoable createUndoActivity(DrawingView view) { - return new PasteCommand.UndoActivity(view); - } - - /** - * Finds a connection end figure. - */ - protected Connector findConnectionTarget(int x, int y, Drawing drawing) { - Figure target = findConnectableFigure(x, y, drawing); - if ((target != null) && target.canConnect() - && !target.includes(owner()) - && getConnection().canConnect(owner(), target)) { - return findConnector(x, y, target); - } - return null; - } - - private Figure findConnectableFigure(int x, int y, Drawing drawing) { - FigureEnumeration fe = drawing.figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (!figure.includes(getConnection()) && figure.canConnect() - && figure.containsPoint(x, y)) { - return figure; - } - } - return null; - } - - protected Connector findConnector(int x, int y, Figure f) { - return f.connectorAt(x, y); - } - - - /** - * Draws the connection handle, by default the outline of a - * blue circle. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - g.setColor(Color.blue); - g.drawOval(r.x, r.y, r.width, r.height); - } - - protected void setConnection(ConnectionFigure newConnection) { - myConnection = newConnection; - } - - protected ConnectionFigure getConnection() { - return myConnection; - } - - protected Figure getTargetFigure() { - return myTargetFigure; - } - - protected void setTargetFigure(Figure newTargetFigure) { - myTargetFigure = newTargetFigure; - } - - /** - * @see CH.ifa.draw.framework.Handle#getCursor() - */ - public Cursor getCursor() { - return new AWTCursor(java.awt.Cursor.HAND_CURSOR); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ConnectionTool.java b/JHotDraw/src/CH/ifa/draw/standard/ConnectionTool.java deleted file mode 100644 index 78fb73d04..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ConnectionTool.java +++ /dev/null @@ -1,448 +0,0 @@ -/* - * @(#)ConnectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.Geom; -import CH.ifa.draw.util.UndoableAdapter; -import CH.ifa.draw.util.Undoable; -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * A tool that can be used to connect figures, to split - * connections, and to join two segments of a connection. - * ConnectionTools turns the visibility of the Connectors - * on when it enters a figure. - * The connection object to be created is specified by a prototype. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld029.htm>Prototype</a></b><br> - * ConnectionTools creates the connection by cloning a prototype. - * <hr> - * - * @see ConnectionFigure - * @see Object#clone - * - * @version <$CURRENT_VERSION$> - */ -public class ConnectionTool extends AbstractTool { - - /** - * the anchor point of the interaction - */ - private Connector myStartConnector; - private Connector myEndConnector; - private Connector myTargetConnector; - - private Figure myTarget; - - /** - * the currently created figure - */ - private ConnectionFigure myConnection; - - /** - * the currently manipulated connection point - */ - private int fSplitPoint; - - /** - * the currently edited connection - */ - private ConnectionFigure fEditedConnection; - - /** - * the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - private Figure myAddedFigure; - - /** - * the prototypical figure that is used to create new - * connections. - */ - private ConnectionFigure fPrototype; - - - public ConnectionTool(DrawingEditor newDrawingEditor, ConnectionFigure newPrototype) { - super(newDrawingEditor); - fPrototype = newPrototype; - } - - /** - * Handles mouse move events in the drawing view. - */ - public void mouseMove(MouseEvent e, int x, int y) { - trackConnectors(e, x, y); - } - - /** - * Manipulates connections in a context dependent way. If the - * mouse down hits a figure start a new connection. If the mousedown - * hits a connection split a segment or join two segments. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - int ex = e.getX(); - int ey = e.getY(); - - /* - * JP, 25-May-03: Swapped checking for underlying figure and - * existing connection. If figure is checked first (old version), - * it is not possible to insert new points into a connection that - * crosses or otherwise goes through an existing figure. New - * version checks for connection first. - */ - ConnectionFigure connection = findConnection(ex, ey, drawing()); - if (connection != null) { - if (!connection.joinSegments(ex, ey)) { - fSplitPoint = connection.splitSegment(ex, ey); - fEditedConnection = connection; - } - else { - fEditedConnection = null; - } - } - else { - setTargetFigure(findConnectionStart(ex, ey, drawing())); - if (getTargetFigure() != null) { - setStartConnector(findConnector(ex, ey, getTargetFigure())); - if (getStartConnector() != null) { - setConnection(createConnection()); - getConnection().startPoint(ex, ey); - getConnection().endPoint(ex, ey); - setAddedFigure(view().add(getConnection())); - } - } - } - } - - /** - * Adjust the created connection or split segment. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - Point p = new Point(e.getX(), e.getY()); - if (getConnection() != null) { - trackConnectors(e, x, y); - if (getTargetConnector() != null) { - p = Geom.center(getTargetConnector().displayBox()); - } - getConnection().endPoint(p.x, p.y); - } - else if (fEditedConnection != null) { - Point pp = new Point(x, y); - fEditedConnection.setPointAt(pp, fSplitPoint); - } - } - - /** - * Connects the figures if the mouse is released over another - * figure. - */ - public void mouseUp(MouseEvent e, int x, int y) { - Figure c = null; - if (getStartConnector() != null) { - c = findTarget(e.getX(), e.getY(), drawing()); - } - - if (c != null) { - setEndConnector(findConnector(e.getX(), e.getY(), c)); - if (getEndConnector() != null) { - getConnection().connectStart(getStartConnector()); - getConnection().connectEnd(getEndConnector()); - getConnection().updateConnection(); - - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getAddedFigure())); - } - } - else if (getConnection() != null) { - view().remove(getConnection()); - } - - setConnection(null); - setStartConnector(null); - setEndConnector(null); - setAddedFigure(null); - editor().toolDone(); - } - - public void deactivate() { - super.deactivate(); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - } - } - - /** - * Creates the ConnectionFigure. By default the figure prototype is - * cloned. - */ - protected ConnectionFigure createConnection() { - return (ConnectionFigure)fPrototype.clone(); - } - - /** - * Finds a connectable figure target. - */ - protected Figure findSource(int x, int y, Drawing drawing) { - return findConnectableFigure(x, y, drawing); - } - - /** - * Finds a connectable figure target at the current mouse location that can - * 1. Connect to things - * 2. Is not already connected to the current Connection (no self connection) - * 3. The current Connection can make a connection between it and the start - * figure. - */ - protected Figure findTarget(int x, int y, Drawing drawing) { - Figure target = findConnectableFigure(x, y, drawing); - Figure start = getStartConnector().owner(); - - if (target != null - && getConnection() != null - && target.canConnect() - && !target.includes(start) - && getConnection().canConnect(start, target)) { - return target; - } - return null; - } - - /** - * Finds an existing connection figure. - */ - protected ConnectionFigure findConnection(int x, int y, Drawing drawing) { - FigureEnumeration fe = drawing.figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - figure = figure.findFigureInside(x, y); - if (figure != null && (figure instanceof ConnectionFigure)) { - return (ConnectionFigure)figure; - } - } - return null; - } - - protected void setConnection(ConnectionFigure newConnection) { - myConnection = newConnection; - } - - /** - * Gets the connection which is created by this tool - */ - protected ConnectionFigure getConnection() { - return myConnection; - } - - /** - * Attempts to set the Connector to be connected to based on the current - * location of the mouse. - */ - protected void trackConnectors(MouseEvent e, int x, int y) { - Figure c = null; - - // If tool is not actively looking for a target for our current - // Connection, see if there are any connectable figures at at the - // current location(findSource). - if (getStartConnector() == null) { - c = findSource(x, y, getActiveDrawing()); - } - else { - c = findTarget(x, y, getActiveDrawing()); - } - - // track the figure containing the mouse - /** - * If the current target is not the stored target then turn off the - * stored targets connectors visibility and turn on the current targets - * connectors visibility. Then set the stored target to the current target. - * If the targets match then don't do anything. - * Note: the target may have more than one connector. - */ - if (c != getTargetFigure()) { - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - } - setTargetFigure(c); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(true, getConnection()); - } - } - - // Since you have a legitimate target, grab its connector and set it as - // the new target connector. - Connector cc = null; - if (c != null) { - cc = findConnector(e.getX(), e.getY(), c); - } - if (cc != getTargetConnector()) { - setTargetConnector(cc); - } - - // Clean up the view. - getActiveView().checkDamage(); - } - - protected Connector findConnector(int x, int y, Figure f) { - return f.connectorAt(x, y); - } - - /** - * Finds a connection start figure. - */ - protected Figure findConnectionStart(int x, int y, Drawing drawing) { - Figure target = findConnectableFigure(x, y, drawing); - if ((target != null) && target.canConnect()) { - return target; - } - return null; - } - - /** - * Returns the topmost? figure that can connect and is at the current mouse - * location. - */ - protected Figure findConnectableFigure(int x, int y, Drawing drawing) { - FigureEnumeration fe = drawing.figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (!figure.includes(getConnection()) && figure.canConnect() - && figure.containsPoint(x, y)) { - return figure; - } - } - return null; - } - - protected void setStartConnector(Connector newStartConnector) { - myStartConnector = newStartConnector; - } - - protected Connector getStartConnector() { - return myStartConnector; - } - - protected void setEndConnector(Connector newEndConnector) { - myEndConnector = newEndConnector; - } - - protected Connector getEndConnector() { - return myEndConnector; - } - - protected void setTargetConnector(Connector newTargetConnector) { - myTargetConnector = newTargetConnector; - } - - protected Connector getTargetConnector() { - return myTargetConnector; - } - - protected void setTargetFigure(Figure newTarget) { - myTarget = newTarget; - } - - protected Figure getTargetFigure() { - return myTarget; - } - - /** - * Gets the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - protected Figure getAddedFigure() { - return myAddedFigure; - } - - protected void setAddedFigure(Figure newAddedFigure) { - myAddedFigure = newAddedFigure; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new ConnectionTool.UndoActivity(view(), getConnection()); - } - - public static class UndoActivity extends UndoableAdapter { - - private ConnectionFigure myConnection; - private Connector myStartConnector; - private Connector myEndConnector; - - public UndoActivity(DrawingView newDrawingView, ConnectionFigure newConnection) { - super(newDrawingView); - setConnection(newConnection); - myStartConnector = getConnection().getStartConnector(); - myEndConnector = getConnection().getEndConnector(); - setUndoable(true); - setRedoable(true); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - - getConnection().disconnectStart(); - getConnection().disconnectEnd(); - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().drawing().orphan(fe.nextFigure()); - } - - getDrawingView().clearSelection(); - - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - - getConnection().connectStart(myStartConnector); - getConnection().connectEnd(myEndConnector); - getConnection().updateConnection(); - - getDrawingView().insertFigures(getAffectedFigures(), 0, 0, false); - - return true; - } - - protected void setConnection(ConnectionFigure newConnection) { - myConnection = newConnection; - } - - /** - * Gets the currently created figure - */ - protected ConnectionFigure getConnection() { - return myConnection; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/CopyCommand.java b/JHotDraw/src/CH/ifa/draw/standard/CopyCommand.java deleted file mode 100644 index 0abff3cb3..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/CopyCommand.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * @(#)CopyCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.DrawingEditor; - -/** - * Copy the selection to the clipboard. - * - * @see Clipboard - * - * @version <$CURRENT_VERSION$> - */ -public class CopyCommand extends FigureTransferCommand { - - /** - * Constructs a copy command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public CopyCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - copyFigures(view().selection(), view().selectionCount()); - } - - protected boolean isExecutableWithView() { - return view().selectionCount() > 0; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/CreationTool.java b/JHotDraw/src/CH/ifa/draw/standard/CreationTool.java deleted file mode 100644 index ab81d26e3..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/CreationTool.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - * @(#)CreationTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.Point; -import java.awt.event.MouseEvent; -import java.util.List; - -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.framework.JHotDrawRuntimeException; -import CH.ifa.draw.util.CollectionsFactory; -import CH.ifa.draw.util.Undoable; - -/** - * A tool to create new figures. The figure to be - * created is specified by a prototype. - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld029.htm>Prototype</a></b><br> - * CreationTool creates new figures by cloning a prototype. - * <hr> - * - * @see Figure - * @see Object#clone - * - * @version <$CURRENT_VERSION$> - */ -public class CreationTool extends AbstractTool { - - /** - * the list of currently added figures - * by: ricardo_padilha. - * description: This has been added to provide support for creation tools that - * insert more than one figure to the drawing, for example, by - * maintaining SHIFT down and clicking. However, this class still - * maintains its normal behavior of creating only one figure. - */ - private List fAddedFigures; - - /** - * the currently created figure - */ - private Figure fCreatedFigure; - - /** - * the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - private Figure myAddedFigure; - - /** - * the prototypical figure that is used to create new figuresthe prototypical figure that is used to create new figures. - */ - private Figure myPrototypeFigure; - - - /** - * Initializes a CreationTool with the given prototype. - */ - public CreationTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor); - setPrototypeFigure(prototype); - } - - /** - * Constructs a CreationTool without a prototype. - * This is for subclassers overriding createFigure. - */ - protected CreationTool(DrawingEditor newDrawingEditor) { - this(newDrawingEditor, null); - } - - /** - * Sets the cross hair cursor. - */ - public void activate() { - super.activate(); - if (isUsable()) { - getActiveView().setCursor(new AWTCursor(java.awt.Cursor.CROSSHAIR_CURSOR)); - } - setAddedFigures(CollectionsFactory.current().createList()); - } - - /** - * @see CH.ifa.draw.framework.Tool#deactivate() - */ - public void deactivate() { - setCreatedFigure(null); - setAddedFigure(null); - setAddedFigures(null); - super.deactivate(); - } - - /** - * Creates a new figure by cloning the prototype. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - setCreatedFigure(createFigure()); - setAddedFigure(getActiveView().add(getCreatedFigure())); - getAddedFigure().displayBox(new Point(getAnchorX(), getAnchorY()), new Point(getAnchorX(), getAnchorY())); - } - - /** - * Creates a new figure by cloning the prototype. - */ - protected Figure createFigure() { - if (getPrototypeFigure() == null) { - throw new JHotDrawRuntimeException("No protoype defined"); - } - return (Figure)getPrototypeFigure().clone(); - } - - /** - * Adjusts the extent of the created figure - */ - public void mouseDrag(MouseEvent e, int x, int y) { - if (getAddedFigure() != null) { - getAddedFigure().displayBox(new Point(getAnchorX(), getAnchorY()), new Point(x, y)); - } - } - - /** - * Checks if the created figure is empty. If it is, the figure - * is removed from the drawing. - * @see Figure#isEmpty - */ - public void mouseUp(MouseEvent e, int x, int y) { - if (getAddedFigure() != null && !getCreatedFigure().isEmpty()) { - getAddedFigures().add(getAddedFigure()); - } - else { - getActiveView().remove(getAddedFigure()); - } - - if (getAddedFigures().isEmpty()) { - setUndoActivity(null); - } - else { - // use undo activity from paste command... - setUndoActivity(createUndoActivity()); - // put created figure into a figure enumeration - getUndoActivity().setAffectedFigures(new FigureEnumerator(getAddedFigures())); - } - editor().toolDone(); - } - - /** - * As the name suggests this CreationTool uses the Prototype design pattern. - * Thus, the prototype figure which is used to create new figures of the same - * type by cloning the original prototype figure. - * @param newPrototypeFigure figure to be cloned to create new figures - */ - protected void setPrototypeFigure(Figure newPrototypeFigure) { - myPrototypeFigure = newPrototypeFigure; - } - - /** - * As the name suggests this CreationTool uses the Prototype design pattern. - * Thus, the prototype figure which is used to create new figures of the same - * type by cloning the original prototype figure. - * @return figure to be cloned to create new figures - */ - protected Figure getPrototypeFigure() { - return myPrototypeFigure; - } - - /** - * Gets the list of currently added figure - */ - protected List getAddedFigures() { - return fAddedFigures; - } - - /** - * Sets the addedFigures attribute of the CreationTool object - */ - protected void setAddedFigures(List newAddedFigures) { - fAddedFigures = newAddedFigures; - } - - /** - * Gets the currently created figure - */ - protected Figure getCreatedFigure() { - return fCreatedFigure; - } - - /** - * Sets the createdFigure attribute of the CreationTool object - */ - protected void setCreatedFigure(Figure newCreatedFigure) { - fCreatedFigure = newCreatedFigure; - } - - /** - * Gets the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - protected Figure getAddedFigure() { - return myAddedFigure; - } - - /** - * Sets the addedFigure attribute of the CreationTool object - */ - protected void setAddedFigure(Figure newAddedFigure) { - myAddedFigure = newAddedFigure; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(getActiveView()); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/standard/CutCommand.java b/JHotDraw/src/CH/ifa/draw/standard/CutCommand.java deleted file mode 100644 index 14ae15f8a..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/CutCommand.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * @(#)CutCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.util.List; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.CollectionsFactory; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.UndoableAdapter; - -/** - * Delete the selection and move the selected figures to - * the clipboard. - * - * @see CH.ifa.draw.util.Clipboard - * - * @version <$CURRENT_VERSION$> - */ -public class CutCommand extends FigureTransferCommand { - - /** - * Constructs a cut command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public CutCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - /** - * @see CH.ifa.draw.util.Command#execute() - */ - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - /* ricardo_padilha: bugfix for correct delete/undelete behavior - * When enumerating the affected figures we must not forget the dependent - * figures, since they are deleted as well! - */ - FigureEnumeration fe = view().selection(); - List affected = CollectionsFactory.current().createList(); - Figure f; - FigureEnumeration dfe; - while (fe.hasNextFigure()) { - f = fe.nextFigure(); - affected.add(0, f); - dfe = f.getDependendFigures(); - if (dfe != null) { - while (dfe.hasNextFigure()) { - affected.add(0, dfe.nextFigure()); - } - } - } - fe = new FigureEnumerator(affected); - getUndoActivity().setAffectedFigures(fe); - UndoActivity ua = (UndoActivity) getUndoActivity(); - ua.setSelectedFigures(view().selection()); - copyFigures(ua.getSelectedFigures(), ua.getSelectedFiguresCount()); - /* ricardo_padilha: end of bugfix */ - deleteFigures(getUndoActivity().getAffectedFigures()); - view().checkDamage(); - } - - /** - * @see CH.ifa.draw.standard.AbstractCommand#isExecutableWithView() - */ - public boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - /** - * Factory method for undo activity - * @return Undoable - */ - protected Undoable createUndoActivity() { - return new CutCommand.UndoActivity(this); - } - - public static class UndoActivity extends UndoableAdapter { - - private FigureTransferCommand myCommand; - private List mySelectedFigures; - - /** - * Constructor for <code>UndoActivity</code>. - * @param newCommand - */ - public UndoActivity(FigureTransferCommand newCommand) { - super(newCommand.view()); - myCommand = newCommand; - setUndoable(true); - setRedoable(true); - } - - /** - * @see CH.ifa.draw.util.Undoable#undo() - */ - public boolean undo() { - if (super.undo() && getAffectedFigures().hasNextFigure()) { - getDrawingView().clearSelection(); - myCommand.insertFigures(getAffectedFiguresReversed(), 0, 0); - return true; - } - return false; - } - - /** - * @see CH.ifa.draw.util.Undoable#redo() - */ - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - myCommand.copyFigures(getSelectedFigures(), getSelectedFiguresCount()); - myCommand.deleteFigures(getAffectedFigures()); - return true; - } - - return false; - } - - /** - * Preserve the selection of figures the moment the command was executed. - * @param newSelectedFigures - */ - public void setSelectedFigures(FigureEnumeration newSelectedFigures) { - // the enumeration is not reusable therefore a copy is made - // to be able to undo-redo the command several time - rememberSelectedFigures(newSelectedFigures); - } - - /** - * Preserve a copy of the enumeration in a private list. - * @param toBeRemembered - */ - protected void rememberSelectedFigures(FigureEnumeration toBeRemembered) { - mySelectedFigures = CollectionsFactory.current().createList(); - while (toBeRemembered.hasNextFigure()) { - mySelectedFigures.add(toBeRemembered.nextFigure()); - } - } - - /** - * Returns the selection of figures to perform the command on. - * @return - */ - public FigureEnumeration getSelectedFigures() { - return new FigureEnumerator( - CollectionsFactory.current().createList(mySelectedFigures)); - } - - /** - * Returns the size of the selection. - * @return - */ - public int getSelectedFiguresCount() { - return mySelectedFigures.size(); - } - - /** - * @see CH.ifa.draw.util.UndoableAdapter#release() - */ - public void release() { - super.release(); - FigureEnumeration fe = getSelectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().release(); - } - setSelectedFigures(FigureEnumerator.getEmptyEnumeration()); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/DecoratorFigure.java b/JHotDraw/src/CH/ifa/draw/standard/DecoratorFigure.java deleted file mode 100644 index 51f76e71d..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/DecoratorFigure.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * @(#)DecoratorFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.*; - -import java.awt.*; -import java.io.*; - -/** - * DecoratorFigure can be used to decorate other figures with - * decorations like borders. Decorator forwards all the - * methods to their contained figure. Subclasses can selectively - * override these methods to extend and filter their behavior. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld014.htm>Decorator</a></b><br> - * DecoratorFigure is a decorator. - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ - -public abstract class DecoratorFigure - extends AbstractFigure - implements FigureChangeListener { - - /** - * The decorated figure. - */ - private Figure myDecoratedFigure; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 8993011151564573288L; - private int decoratorFigureSerializedDataVersion = 1; - - public DecoratorFigure() { - initialize(); - } - - /** - * Constructs a DecoratorFigure and decorates the passed in figure. - */ - public DecoratorFigure(Figure figure) { - initialize(); - decorate(figure); - } - - /** - * Performs additional initialization code before the figure is decorated. - * Subclasses may override this method. - */ - protected void initialize() { - } - - /** - * Forwards the connection insets to its contained figure.. - */ - public Insets connectionInsets() { - return getDecoratedFigure().connectionInsets(); - } - - /** - * Forwards the canConnect to its contained figure.. - */ - public boolean canConnect() { - return getDecoratedFigure().canConnect(); - } - - /** - * Forwards containsPoint to its contained figure. - */ - public boolean containsPoint(int x, int y) { - return getDecoratedFigure().containsPoint(x, y); - } - - /** - * Decorates the given figure. - */ - public void decorate(Figure figure) { - setDecoratedFigure(figure); - getDecoratedFigure().addToContainer(this); - //addDependendFigure(getDecoratedFigure()); - } - - /** - * Removes the decoration from the contained figure. - */ - public Figure peelDecoration() { - getDecoratedFigure().removeFromContainer(this); //??? set the container to the listener()? - removeDependendFigure(getDecoratedFigure()); - return getDecoratedFigure(); - } - - public void setDecoratedFigure(Figure newDecoratedFigure) { - myDecoratedFigure = newDecoratedFigure; - } - - public Figure getDecoratedFigure() { - return myDecoratedFigure; - } - - /** - * Forwards displayBox to its contained figure. - */ - public Rectangle displayBox() { - return getDecoratedFigure().displayBox(); - } - - /** - * Forwards basicDisplayBox to its contained figure. - */ - public void basicDisplayBox(Point origin, Point corner) { - getDecoratedFigure().basicDisplayBox(origin, corner); - } - - /** - * Forwards draw to its contained figure. - */ - public void draw(Graphics g) { - getDecoratedFigure().draw(g); - } - - /** - * Forwards findFigureInside to its contained figure. - */ - public Figure findFigureInside(int x, int y) { - Figure foundFigure = getDecoratedFigure().findFigureInside(x, y); - // if the found figure is the same as the one the DecoratorFigure decorates - // then do not peel of the decoration - if ((foundFigure != null) && (foundFigure == getDecoratedFigure())) { - return this; - } - else { - return foundFigure; - } - } - - /** - * Forwards handles to its contained figure. - */ - public HandleEnumeration handles() { - return getDecoratedFigure().handles(); - } - - /** - * Forwards includes to its contained figure. - */ - public boolean includes(Figure figure) { - return (super.includes(figure) || getDecoratedFigure().includes(figure)); - } - - /** - * Forwards moveBy to its contained figure. - */ - public void moveBy(int x, int y) { - getDecoratedFigure().moveBy(x, y); - } - - /** - * Forwards basicMoveBy to its contained figure. - */ - protected void basicMoveBy(int x, int y) { - // this will never be called - } - - /** - * Releases itself and the contained figure. - */ - public void release() { - super.release(); - getDecoratedFigure().removeFromContainer(this); - getDecoratedFigure().release(); - } - - /** - * Propagates invalidate up the container chain. - * @see FigureChangeListener - */ - public void figureInvalidated(FigureChangeEvent e) { - if (listener() != null) { - listener().figureInvalidated(e); - } - } - - public void figureChanged(FigureChangeEvent e) { - } - - public void figureRemoved(FigureChangeEvent e) { - } - - /** - * Propagates figureRequestUpdate up the container chain. - * @see FigureChangeListener - */ - public void figureRequestUpdate(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestUpdate(e); - } - } - - /** - * Propagates the removeFromDrawing request up to the container. - * @see FigureChangeListener - */ - public void figureRequestRemove(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestRemove(new FigureChangeEvent(this)); - } - } - - /** - * Forwards figures to its contained figure. - */ - public FigureEnumeration figures() { - return getDecoratedFigure().figures(); - } - - /** - * Forwards decompose to its contained figure. - */ - public FigureEnumeration decompose() { - return getDecoratedFigure().decompose(); - } - - /** - * Forwards setAttribute to its contained figure. - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - getDecoratedFigure().setAttribute(name, value); - } - - /** - * Forwards setAttribute to its contained figure. - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - getDecoratedFigure().setAttribute(attributeConstant, value); - } - - /** - * Forwards getAttribute to its contained figure. - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return getDecoratedFigure().getAttribute(name); - } - - /** - * Forwards getAttribute to its contained figure. - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - return getDecoratedFigure().getAttribute(attributeConstant); - } - - /** - * Returns the locator used to located connected text. - */ - public Locator connectedTextLocator(Figure text) { - return getDecoratedFigure().connectedTextLocator(text); - } - - /** - * Returns the Connector for the given location. - */ - public Connector connectorAt(int x, int y) { - return getDecoratedFigure().connectorAt(x, y); - } - - /** - * Forwards the connector visibility request to its component. - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure courtingConnection) { - getDecoratedFigure().connectorVisibility(isVisible, null); - } - - /** - * Writes itself and the contained figure to the StorableOutput. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getDecoratedFigure()); - } - - /** - * Reads itself and the contained figure from the StorableInput. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - decorate((Figure)dr.readStorable()); - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - getDecoratedFigure().addToContainer(this); - } -/* - public void visit(FigureVisitor visitor) { - super.visit(visitor); -// getDecoratedFigure().visit(visitor); - } -*/ - public TextHolder getTextHolder() { - return getDecoratedFigure().getTextHolder(); - } - - public synchronized FigureEnumeration getDependendFigures() { - return getDecoratedFigure().getDependendFigures(); - } - - public synchronized void addDependendFigure(Figure newDependendFigure) { - getDecoratedFigure().addDependendFigure(newDependendFigure); - } - - public synchronized void removeDependendFigure(Figure oldDependendFigure) { - getDecoratedFigure().removeDependendFigure(oldDependendFigure); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java b/JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java deleted file mode 100644 index 37a4c8f9d..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/DeleteCommand.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)DeleteCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.util.List; - -import CH.ifa.draw.framework.DrawingEditor; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.util.CollectionsFactory; -import CH.ifa.draw.util.Undoable; -import CH.ifa.draw.util.UndoableAdapter; - -/** - * Command to delete the selection. - * - * @version <$CURRENT_VERSION$> - */ -public class DeleteCommand extends FigureTransferCommand { - - /** - * Constructs a delete command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public DeleteCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - /** - * @see CH.ifa.draw.util.Command#execute() - */ - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - /* ricardo_padilha: bugfix for correct delete/undelete behavior - * When enumerating the affected figures we must not forget the dependent - * figures, since they are deleted as well! - */ - FigureEnumeration fe = view().selection(); - List affected = CollectionsFactory.current().createList(); - Figure f; - FigureEnumeration dfe; - while (fe.hasNextFigure()) { - f = fe.nextFigure(); - affected.add(0, f); - dfe = f.getDependendFigures(); - if (dfe != null) { - while (dfe.hasNextFigure()) { - affected.add(0, dfe.nextFigure()); - } - } - } - fe = new FigureEnumerator(affected); - getUndoActivity().setAffectedFigures(fe); - /* ricardo_padilha: end of bugfix */ - deleteFigures(getUndoActivity().getAffectedFigures()); - view().checkDamage(); - } - - /** - * @see CH.ifa.draw.standard.AbstractCommand#isExecutableWithView() - */ - protected boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - /** - * Factory method for undo activity - * @return Undoable - */ - protected Undoable createUndoActivity() { - return new DeleteCommand.UndoActivity(this); - } - - public static class UndoActivity extends UndoableAdapter { - - private FigureTransferCommand myCommand; - - /** - * Constructor for <code>UndoActivity</code>. - * @param newCommand parent command - */ - public UndoActivity(FigureTransferCommand newCommand) { - super(newCommand.view()); - myCommand = newCommand; - setUndoable(true); - setRedoable(true); - } - - /** - * @see CH.ifa.draw.util.Undoable#undo() - */ - public boolean undo() { - if (super.undo() && getAffectedFigures().hasNextFigure()) { - getDrawingView().clearSelection(); - setAffectedFigures( - myCommand.insertFigures(getAffectedFiguresReversed(), 0, 0)); - return true; - } - return false; - } - - /** - * @see CH.ifa.draw.util.Undoable#redo() - */ - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - myCommand.deleteFigures(getAffectedFigures()); - getDrawingView().clearSelection(); - return true; - } - return false; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/DeleteFromDrawingVisitor.java b/JHotDraw/src/CH/ifa/draw/standard/DeleteFromDrawingVisitor.java deleted file mode 100644 index abb71928a..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/DeleteFromDrawingVisitor.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * @(#)DeleteFromDrawingVisitor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.CollectionsFactory; - -import java.util.Set; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DeleteFromDrawingVisitor implements FigureVisitor { - private Set myDeletedFigures; - private Drawing myDrawing; - - public DeleteFromDrawingVisitor(Drawing newDrawing) { - myDeletedFigures = CollectionsFactory.current().createSet(); - setDrawing(newDrawing); - } - - private void setDrawing(Drawing newDrawing) { - myDrawing = newDrawing; - } - - protected Drawing getDrawing() { - return myDrawing; - } - - public void visitFigure(Figure hostFigure) { - if (!myDeletedFigures.contains(hostFigure) && getDrawing().containsFigure(hostFigure)) { - Figure orphanedFigure = getDrawing().orphan(hostFigure); - myDeletedFigures.add(orphanedFigure); - } - } - - public void visitHandle(Handle hostHandle) { - } - - public void visitFigureChangeListener(FigureChangeListener hostFigureChangeListener) { -// System.out.println("visitFigureChangeListener: " + hostFigureChangeListener); -// hostFigureChangeListener.visit(this); - } - - public FigureEnumeration getDeletedFigures() { - return new FigureEnumerator(myDeletedFigures); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/DragTracker.java b/JHotDraw/src/CH/ifa/draw/standard/DragTracker.java deleted file mode 100644 index 82265fef8..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/DragTracker.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * @(#)DragTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.UndoableAdapter; -import CH.ifa.draw.util.Undoable; -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * DragTracker implements the dragging of the clicked - * figure. - * - * @see SelectionTool - * - * @version <$CURRENT_VERSION$> - */ -public class DragTracker extends AbstractTool { - - private Figure fAnchorFigure; - private int fLastX, fLastY; // previous mouse position - private boolean fMoved = false; - - public DragTracker(DrawingEditor newDrawingEditor, Figure anchor) { - super(newDrawingEditor); - setAnchorFigure(anchor); - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - setLastMouseX(x); - setLastMouseY(y); - - if (e.isShiftDown()) { - getActiveView().toggleSelection(getAnchorFigure()); - setAnchorFigure(null); - } - else if (!getActiveView().isFigureSelected(getAnchorFigure())) { - getActiveView().clearSelection(); - getActiveView().addToSelection(getAnchorFigure()); - } - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(getActiveView().selection()); -// getUndoActivity().setAffectedFigures(view().selectionElements()); - } - - public void mouseDrag(MouseEvent e, int x, int y) { - super.mouseDrag(e, x, y); - setHasMoved((Math.abs(x - getAnchorX()) > 4) || (Math.abs(y - getAnchorY()) > 4)); - - if (hasMoved()) { - FigureEnumeration figures = getUndoActivity().getAffectedFigures(); - while (figures.hasNextFigure()) { - figures.nextFigure().moveBy(x - getLastMouseX(), y - getLastMouseY()); - } - } - setLastMouseX(x); - setLastMouseY(y); - } - - protected void setAnchorFigure(Figure newAnchorFigure) { - fAnchorFigure = newAnchorFigure; - } - - public Figure getAnchorFigure() { - return fAnchorFigure; - } - - protected void setLastMouseX(int newLastMouseX) { - fLastX = newLastMouseX; - } - - protected int getLastMouseX() { - return fLastX; - } - - protected void setLastMouseY(int newLastMouseY) { - fLastY = newLastMouseY; - } - - protected int getLastMouseY() { - return fLastY; - } - - /** - * Check whether the selected figure has been moved since - * the tool has been activated. - * - * @return true if the selected figure has been moved - */ - public boolean hasMoved() { - return fMoved; - } - - protected void setHasMoved(boolean newMoved) { - fMoved = newMoved; - } - - public void activate() { - // suppress clearSelection() and tool-activation-notification - // in superclass - } - - public void deactivate() { - if (hasMoved()) { - ((DragTracker.UndoActivity)getUndoActivity()).setBackupPoint(new Point(getLastMouseX(), getLastMouseY())); - } - else { - setUndoActivity(null); - } - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new DragTracker.UndoActivity(getActiveView(), new Point(getLastMouseX(), getLastMouseY())); - } - - public static class UndoActivity extends UndoableAdapter { - private Point myOriginalPoint; - private Point myBackupPoint; - - public UndoActivity(DrawingView newDrawingView, Point newOriginalPoint) { - super(newDrawingView); - setOriginalPoint(newOriginalPoint); - setUndoable(true); - setRedoable(true); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - moveAffectedFigures(getBackupPoint(), getOriginalPoint()); - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - moveAffectedFigures(getOriginalPoint(), getBackupPoint()); - return true; - } - - public void setBackupPoint(Point newBackupPoint) { - myBackupPoint = newBackupPoint; - } - - public Point getBackupPoint() { - return myBackupPoint; - } - - public void setOriginalPoint(Point newOriginalPoint) { - myOriginalPoint = newOriginalPoint; - } - - public Point getOriginalPoint() { - return myOriginalPoint; - } - - public void moveAffectedFigures(Point startPoint, Point endPoint) { - FigureEnumeration figures = getAffectedFigures(); - while (figures.hasNextFigure()) { - figures.nextFigure().moveBy(endPoint.x - startPoint.x, - endPoint.y - startPoint.y); - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/DuplicateCommand.java b/JHotDraw/src/CH/ifa/draw/standard/DuplicateCommand.java deleted file mode 100644 index a5ade44ed..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/DuplicateCommand.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * @(#)DuplicateCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; - -/** - * Duplicate the selection and select the duplicates. - * - * @version <$CURRENT_VERSION$> - */ -public class DuplicateCommand extends FigureTransferCommand { - - /** - * Constructs a duplicate command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public DuplicateCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - FigureSelection selection = view().getFigureSelection(); - - // create duplicate figure(s) - FigureEnumeration figures = (FigureEnumeration)selection.getData(StandardFigureSelection.TYPE); - getUndoActivity().setAffectedFigures(figures); - - view().clearSelection(); - getUndoActivity().setAffectedFigures( - insertFigures(getUndoActivity().getAffectedFigures(), 10, 10)); - view().checkDamage(); - } - - protected boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/FastBufferedUpdateStrategy.java b/JHotDraw/src/CH/ifa/draw/standard/FastBufferedUpdateStrategy.java deleted file mode 100644 index 69e6bf71c..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/FastBufferedUpdateStrategy.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * @(#)FastBufferedUpdateStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; -import java.awt.image.BufferedImage; -import CH.ifa.draw.framework.Drawing; -import CH.ifa.draw.framework.DrawingView; -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.framework.Painter; - -/** - * @author WMG (INIT Copyright (C) 2000 All rights reserved) - * @version <$CURRENT_VERSION$> - */ -public class FastBufferedUpdateStrategy implements Painter { - - //_________________________________________________________VARIABLES - - private BufferedImage _doubleBufferedImage; - private BufferedImage _scratchPadBufferedImage; - private int _nImageWidth = 0; - private int _nImageHeight = 0; - private boolean _bRedrawAll = true; - - //______________________________________________________CONSTRUCTORS - - public FastBufferedUpdateStrategy() { - } - - //____________________________________________________PUBLIC METHODS - - public void draw(Graphics g, DrawingView view) { - _checkCaches(view); - if (_bRedrawAll == true) { - Graphics imageGraphics = _doubleBufferedImage.getGraphics(); - view.drawAll(imageGraphics); - } - else { - Rectangle viewClipRectangle = g.getClipBounds(); - int nX1 = viewClipRectangle.x; - int nY1 = viewClipRectangle.y; - int nX2 = viewClipRectangle.x + viewClipRectangle.width; - int nY2 = viewClipRectangle.y + viewClipRectangle.height; - - if (nX1 < 0) { - nX1 = 0; - } - if (nY1 < 0) { - nY1 = 0; - } - if (nX2 < 0) { - nX2 = 0; - } - if (nY2 < 0) { - nY2 = 0; - } - - Rectangle viewClipRectangle2 = new Rectangle(nX1, nY1, nX2-nX1, nY2-nY1); - - Drawing theDrawing = view.drawing(); - FigureEnumeration fe = theDrawing.figures(viewClipRectangle2); - - Graphics imageGraphics = _scratchPadBufferedImage.getGraphics(); - imageGraphics.setColor(view.getBackground()); - imageGraphics.fillRect(nX1, nY1, nX2-nX1, nY2-nY1); - view.draw(imageGraphics, fe); - - Graphics dbGraphics = _doubleBufferedImage.getGraphics(); - dbGraphics.drawImage(_scratchPadBufferedImage, nX1, nY1, - nX2, nY2, nX1, nY1, nX2, nY2, view); - - } - - g.drawImage(_doubleBufferedImage, 0, 0, view); - _bRedrawAll = false; - } - - - //___________________________________________________PRIVATE METHODS - - - private void _checkCaches(DrawingView view) { - Dimension d = view.getSize(); - - if ((_doubleBufferedImage == null) - || (_nImageWidth != d.width) - || (_nImageHeight != d.height)) { - _doubleBufferedImage = new BufferedImage(d.width, - d.height, BufferedImage.TYPE_INT_RGB); - _bRedrawAll = true; - } - - if ((_scratchPadBufferedImage == null) - || (_nImageWidth != d.width) - || (_nImageHeight != d.height)) { - _scratchPadBufferedImage = new BufferedImage(d.width, - d.height, BufferedImage.TYPE_INT_RGB); - Graphics imageGraphics = _scratchPadBufferedImage.getGraphics(); - view.drawBackground(imageGraphics); - _bRedrawAll = true; - } - - _nImageWidth = d.width; - _nImageHeight = d.height; - } - - //_______________________________________________________________END - -} //end of class FastBufferedUpdateStrategy diff --git a/JHotDraw/src/CH/ifa/draw/standard/FigureAndEnumerator.java b/JHotDraw/src/CH/ifa/draw/standard/FigureAndEnumerator.java deleted file mode 100644 index 39851c903..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/FigureAndEnumerator.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)FigureAndEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.framework.Figure; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class FigureAndEnumerator implements FigureEnumeration { - private FigureEnumeration myFE1; - private FigureEnumeration myFE2; - - public FigureAndEnumerator(FigureEnumeration newFE1, FigureEnumeration newFE2) { - myFE1 = newFE1; - myFE2 = newFE2; - } - - public Figure nextFigure() { - if (myFE1.hasNextFigure()) { - return myFE1.nextFigure(); - } - else if (myFE2.hasNextFigure()) { - return myFE2.nextFigure(); - } - else { - // todo: throw exception - return null; - } - } - - public boolean hasNextFigure() { - return myFE1.hasNextFigure() || myFE2.hasNextFigure(); - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - myFE1.reset(); - myFE2.reset(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/FigureChangeAdapter.java b/JHotDraw/src/CH/ifa/draw/standard/FigureChangeAdapter.java deleted file mode 100644 index 0608c87df..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/FigureChangeAdapter.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * @(#)FigureChangeAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; - -/** - * Empty implementation of FigureChangeListener. - * - * @version <$CURRENT_VERSION$> - */ -public class FigureChangeAdapter implements FigureChangeListener { - - /** - * Sent when an area is invalid - */ - public void figureInvalidated(FigureChangeEvent e) {} - - /** - * Sent when a figure changed - */ - public void figureChanged(FigureChangeEvent e) {} - - /** - * Sent when a figure was removed - */ - public void figureRemoved(FigureChangeEvent e) {} - - /** - * Sent when requesting to remove a figure. - */ - public void figureRequestRemove(FigureChangeEvent e) {} - - /** - * Sent when an update should happen. - * - */ - public void figureRequestUpdate(FigureChangeEvent e) {} - -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/FigureChangeEventMulticaster.java b/JHotDraw/src/CH/ifa/draw/standard/FigureChangeEventMulticaster.java deleted file mode 100644 index a45175423..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/FigureChangeEventMulticaster.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * @(#)FigureChangeEventMulticaster.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import java.awt.*; -import java.util.*; - -/** - * Manages a list of FigureChangeListeners to be notified of - * specific FigureChangeEvents. - * - * @version <$CURRENT_VERSION$> - */ -public class FigureChangeEventMulticaster extends - AWTEventMulticaster implements FigureChangeListener { - - public FigureChangeEventMulticaster(EventListener newListenerA, EventListener newListenerB) { - super(newListenerA, newListenerB); - } - - public void figureInvalidated(FigureChangeEvent e) { - ((FigureChangeListener)a).figureInvalidated(e); - ((FigureChangeListener)b).figureInvalidated(e); - } - - public void figureRequestRemove(FigureChangeEvent e) { - ((FigureChangeListener)a).figureRequestRemove(e); - ((FigureChangeListener)b).figureRequestRemove(e); - } - - public void figureRequestUpdate(FigureChangeEvent e) { - ((FigureChangeListener)a).figureRequestUpdate(e); - ((FigureChangeListener)b).figureRequestUpdate(e); - } - - public void figureChanged(FigureChangeEvent e) { - ((FigureChangeListener)a).figureChanged(e); - ((FigureChangeListener)b).figureChanged(e); - } - - public void figureRemoved(FigureChangeEvent e) { - ((FigureChangeListener)a).figureRemoved(e); - ((FigureChangeListener)b).figureRemoved(e); - } - - public static FigureChangeListener add(FigureChangeListener a, FigureChangeListener b) { - return (FigureChangeListener)addInternal(a, b); - } - - - public static FigureChangeListener remove(FigureChangeListener l, FigureChangeListener oldl) { - return (FigureChangeListener) removeInternal(l, oldl); - } - - protected EventListener remove(EventListener oldl) - { - if (oldl == a) { - return b; - } - if (oldl == b) { - return a; - } - EventListener a2 = removeInternal(a, oldl); - EventListener b2 = removeInternal(b, oldl); - if (a2 == a && b2 == b) { - return this; - } - else { - return addInternal((FigureChangeListener)a2, (FigureChangeListener)b2); - } - } - - protected static EventListener addInternal(FigureChangeListener a, FigureChangeListener b) { - if (a == null) { - return b; - } - if (b == null) { - return a; - } - return new FigureChangeEventMulticaster(a, b); - } - - protected static EventListener removeInternal(EventListener l, EventListener oldl) { - if (l == oldl || l == null) { - return null; - } - else if (l instanceof FigureChangeEventMulticaster) { - return ((FigureChangeEventMulticaster)l).remove(oldl); - } - else { - return l; // it's not here - } - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/FigureEnumerator.java b/JHotDraw/src/CH/ifa/draw/standard/FigureEnumerator.java deleted file mode 100644 index dcd13f962..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/FigureEnumerator.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * @(#)FigureEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.CollectionsFactory; - -import java.util.Iterator; -import java.util.Collection; - - -/** - * An Enumeration for a Collection of Figures. - * - * @version <$CURRENT_VERSION$> - */ -public final class FigureEnumerator implements FigureEnumeration { - private Iterator myIterator; - private Collection myInitialCollection; - - private static FigureEnumerator singletonEmptyEnumerator = - new FigureEnumerator(CollectionsFactory.current().createList()); - - public FigureEnumerator(Collection c) { - myInitialCollection = c; - reset(); - } - - /** - * Returns true if the enumeration contains more elements; false - * if its empty. - */ - public boolean hasNextFigure() { - return myIterator.hasNext(); - } - - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Figure nextFigure() { - return (Figure)myIterator.next(); - } - - public static FigureEnumeration getEmptyEnumeration() { - return singletonEmptyEnumerator; - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - myIterator = myInitialCollection.iterator(); - } - -/* public static FigureEnumeration getClonedFigures(FigureEnumeration toDuplicate) { - List v = CollectionsFactory.current().createList(); - while (toDuplicate.hasMoreElements()) { - try { - v.addElement(toDuplicate.nextFigure().clone()); - } - catch (CloneNotSupportedException e) { - e.printStackTrace(); - } - } - return new FigureEnumerator(v); - } -*/ -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/FigureTransferCommand.java b/JHotDraw/src/CH/ifa/draw/standard/FigureTransferCommand.java deleted file mode 100644 index 48a8277e2..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/FigureTransferCommand.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * @(#)FigureTransferCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.*; - -/** - * Common base clase for commands that transfer figures - * between a drawing and the clipboard. - * - * @version <$CURRENT_VERSION$> - */ -public abstract class FigureTransferCommand extends AbstractCommand { - - /** - * Constructs a drawing command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - protected FigureTransferCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - /** - * Deletes the selection from the drawing. - */ - protected void deleteFigures(FigureEnumeration fe) { - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor(view().drawing()); - while (fe.hasNextFigure()) { - fe.nextFigure().visit(deleteVisitor); - } - - view().clearSelection(); - } - - /** - * Copies the FigureEnumeration to the clipboard. - */ - protected void copyFigures(FigureEnumeration fe, int figureCount) { - Clipboard.getClipboard().setContents(new StandardFigureSelection(fe, figureCount)); - } - - /** - * Inserts an enumeration of figures and translates them by the - * given offset. - * @todo mrfloppy to investigate making this protected. Looks like it would - * be no problem to me. It was package scope. I thought it safer to - * make it less restrictive just incase their was a reason for the - * package scope I didn't know about. dnoyeb. - * Bug - [ 673096 ] FigureTransferCommand has a wrong method - */ - public FigureEnumeration insertFigures(FigureEnumeration fe, int dx, int dy) { - return view().insertFigures(fe, dx, dy, false); - } -} - - diff --git a/JHotDraw/src/CH/ifa/draw/standard/GridConstrainer.java b/JHotDraw/src/CH/ifa/draw/standard/GridConstrainer.java deleted file mode 100644 index f3b7b80d5..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/GridConstrainer.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * @(#)GridConstrainer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.PointConstrainer; -import java.awt.*; -import java.io.Serializable; - -/** - * Constrains a point such that it falls on a grid. - * - * @see CH.ifa.draw.framework.DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public class GridConstrainer implements PointConstrainer, Serializable { - - private int fGridX; - private int fGridY; - - public GridConstrainer(int x, int y) { - fGridX = Math.max(1, x); - fGridY = Math.max(1, y); - } - - /** - * Constrains the given point. - * @return constrained point. - */ - public Point constrainPoint(Point p) { - p.x = ((p.x+fGridX/2) / fGridX) * fGridX; - p.y = ((p.y+fGridY/2) / fGridY) * fGridY; - return p; - } - - /** - * Gets the x offset to move an object. - */ - public int getStepX() { - return fGridX; - } - - /** - * Gets the y offset to move an object. - */ - public int getStepY() { - return fGridY; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/HandleAndEnumerator.java b/JHotDraw/src/CH/ifa/draw/standard/HandleAndEnumerator.java deleted file mode 100644 index d5ed93f16..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/HandleAndEnumerator.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * @(#)HandleAndEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.HandleEnumeration; -import CH.ifa.draw.framework.Handle; - -import java.util.List; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class HandleAndEnumerator implements HandleEnumeration { - private HandleEnumeration myHE1; - private HandleEnumeration myHE2; - - public HandleAndEnumerator(HandleEnumeration newHE1, HandleEnumeration newHE2) { - myHE1 = newHE1; - myHE2 = newHE2; - } - - public Handle nextHandle() { - if (myHE1.hasNextHandle()) { - return myHE1.nextHandle(); - } - else if (myHE2.hasNextHandle()) { - return myHE2.nextHandle(); - } - else { - // todo: throw exception - return null; - } - } - - public boolean hasNextHandle() { - return myHE1.hasNextHandle() || myHE2.hasNextHandle(); - } - - public List toList() { - List joinedList = myHE1.toList(); - joinedList.addAll(myHE2.toList()); - return joinedList; - } - - public void reset() { - myHE1.reset(); - myHE2.reset(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/HandleEnumerator.java b/JHotDraw/src/CH/ifa/draw/standard/HandleEnumerator.java deleted file mode 100644 index 9b0f77c9c..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/HandleEnumerator.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * @(#)HandleEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.util.CollectionsFactory; -import CH.ifa.draw.framework.HandleEnumeration; -import CH.ifa.draw.framework.Handle; - -import java.util.Iterator; -import java.util.Collection; -import java.util.List; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class HandleEnumerator implements HandleEnumeration { - private Iterator myIterator; - private Collection myInitialCollection; - - private static HandleEnumerator singletonEmptyEnumerator = - new HandleEnumerator(CollectionsFactory.current().createList()); - - public HandleEnumerator(Collection c) { - myInitialCollection = c; - reset(); - } - - /** - * Returns true if the enumeration contains more elements; false - * if its empty. - */ - public boolean hasNextHandle() { - return myIterator.hasNext(); - } - - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Handle nextHandle() { - return (Handle)myIterator.next(); - } - - /** - * Returns a list with all elements currently available in the enumeration. - * That means, elements retrieved already by calling nextHandle() are not - * contained. This method does not change the position of the enumeration. - * Warning: this method is not necessarily synchronized so this enumeration should not - * be modified at the same time! - * - * @return list with all elements currently available in the enumeration. - */ - public List toList() { - List handles = CollectionsFactory.current().createList(); - while (hasNextHandle()) { - handles.add(nextHandle()); - } - // copy/reset iterator to original content - myIterator = handles.iterator(); - return handles; - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - myIterator = myInitialCollection.iterator(); - } - - public static HandleEnumeration getEmptyEnumeration() { - return singletonEmptyEnumerator; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/HandleTracker.java b/JHotDraw/src/CH/ifa/draw/standard/HandleTracker.java deleted file mode 100644 index 1cc7487ce..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/HandleTracker.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * @(#)HandleTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.event.MouseEvent; -import CH.ifa.draw.framework.*; - -/** - * HandleTracker implements interactions with the handles of a Figure. - * - * @see SelectionTool - * - * @version <$CURRENT_VERSION$> - */ -public class HandleTracker extends AbstractTool { - - private Handle fAnchorHandle; - - public HandleTracker(DrawingEditor newDrawingEditor, Handle anchorHandle) { - super(newDrawingEditor); - fAnchorHandle = anchorHandle; - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - fAnchorHandle.invokeStart(x, y, view()); - } - - public void mouseDrag(MouseEvent e, int x, int y) { - super.mouseDrag(e, x, y); - fAnchorHandle.invokeStep(x, y, getAnchorX(), getAnchorY(), view()); - } - - public void mouseUp(MouseEvent e, int x, int y) { - super.mouseUp(e, x, y); - fAnchorHandle.invokeEnd(x, y, getAnchorX(), getAnchorY(), view()); - } - - public void activate() { - // suppress clearSelection() and tool-activation-notification - // in superclass by providing an empty implementation - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/InsertIntoDrawingVisitor.java b/JHotDraw/src/CH/ifa/draw/standard/InsertIntoDrawingVisitor.java deleted file mode 100644 index 10b11d75a..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/InsertIntoDrawingVisitor.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)InsertIntoDrawingVisitor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.CollectionsFactory; - -import java.util.Set; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class InsertIntoDrawingVisitor implements FigureVisitor { - private Set myInsertedFigures; - private Drawing myDrawing; - - public InsertIntoDrawingVisitor(Drawing newDrawing) { - myInsertedFigures = CollectionsFactory.current().createSet(); - setDrawing(newDrawing); - } - - private void setDrawing(Drawing newDrawing) { - myDrawing = newDrawing; - } - - protected Drawing getDrawing() { - return myDrawing; - } - - public void visitFigure(Figure hostFigure) { - if (!myInsertedFigures.contains(hostFigure) && !getDrawing().includes(hostFigure)) { - Figure addedFigure = getDrawing().add(hostFigure); - myInsertedFigures.add(addedFigure); - } - } - - public void visitHandle(Handle hostHandle) { - } - - public void visitFigureChangeListener(FigureChangeListener hostFigureChangeListener) { -// hostFigureChangeListener.visit(this); - } - - public FigureEnumeration getInsertedFigures() { - return new FigureEnumerator(myInsertedFigures); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/LocatorConnector.java b/JHotDraw/src/CH/ifa/draw/standard/LocatorConnector.java deleted file mode 100644 index a2b7ebf17..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/LocatorConnector.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * @(#)LocatorConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import java.io.IOException; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; - -/** - * A LocatorConnector locates connection points with - * the help of a Locator. It supports the definition - * of connection points to semantic locations. - * - * @see Locator - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ -public class LocatorConnector extends AbstractConnector { - - /** - * The standard size of the connector. The display box - * is centered around the located point. - */ - public static final int SIZE = 8; - - private Locator myLocator; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 5062833203337604181L; - private int locatorConnectorSerializedDataVersion = 1; - - public LocatorConnector() { // only used for Storable - setLocator(null); - } - - public LocatorConnector(Figure owner, Locator l) { - super(owner); - setLocator(l); - } - - /** - * Tests if a point is contained in the connector. - */ - public boolean containsPoint(int x, int y) { - return displayBox().contains(x, y); - } - - /** - * Gets the display box of the connector. - */ - public Rectangle displayBox() { - Point p = getLocator().locate(owner()); - return new Rectangle( - p.x - SIZE / 2, - p.y - SIZE / 2, - SIZE, - SIZE); - } - - /** - * Draws this connector. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.blue); - g.fillOval(r.x, r.y, r.width, r.height); - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - /** - * Stores the arrow tip to a StorableOutput. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getLocator()); - } - - /** - * Reads the arrow tip from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - setLocator((Locator)dr.readStorable()); - } - - protected void setLocator(Locator newLocator) { - myLocator = newLocator; - } - - public Locator getLocator() { - return myLocator; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/LocatorHandle.java b/JHotDraw/src/CH/ifa/draw/standard/LocatorHandle.java deleted file mode 100644 index 2d94d9c14..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/LocatorHandle.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * @(#)LocatorHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.Point; - -import CH.ifa.draw.framework.Cursor; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.framework.Locator; - -/** - * A LocatorHandle implements a Handle by delegating the location requests to - * a Locator object. - * - * @see LocatorHandle - * - * @version <$CURRENT_VERSION$> - */ -public class LocatorHandle extends AbstractHandle { - - private Locator fLocator; - - /** - * Initializes the LocatorHandle with the given Locator. - */ - public LocatorHandle(Figure owner, Locator l) { - super(owner); - fLocator = l; - } - /** - * This should be cloned or it gives the receiver the opportunity to alter - * our internal behavior. - */ - public Locator getLocator() { - return fLocator; - } - - /** - * Locates the handle on the figure by forwarding the request - * to its figure. - */ - public Point locate() { - return fLocator.locate(owner()); - } - - /** - * @see CH.ifa.draw.framework.Handle#getCursor() - */ - public Cursor getCursor() { - Cursor c = super.getCursor(); - if (getLocator() instanceof RelativeLocator) { - RelativeLocator rl = (RelativeLocator) getLocator(); - if (rl.equals( RelativeLocator.north())) { - c = new AWTCursor(java.awt.Cursor.N_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.northEast())) { - c = new AWTCursor(java.awt.Cursor.NE_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.east())) { - c = new AWTCursor(java.awt.Cursor.E_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.southEast())) { - c = new AWTCursor(java.awt.Cursor.SE_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.south())) { - c = new AWTCursor(java.awt.Cursor.S_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.southWest())) { - c = new AWTCursor(java.awt.Cursor.SW_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.west())) { - c = new AWTCursor(java.awt.Cursor.W_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.northWest())) { - c = new AWTCursor(java.awt.Cursor.NW_RESIZE_CURSOR); - } - } - return c; - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/NullDrawingView.java b/JHotDraw/src/CH/ifa/draw/standard/NullDrawingView.java deleted file mode 100644 index eab32cfbc..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/NullDrawingView.java +++ /dev/null @@ -1,430 +0,0 @@ -/* - * @(#)NullDrawingView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import java.util.Collection; -import java.util.Hashtable; - -import javax.swing.JPanel; - -import CH.ifa.draw.framework.*; - -/** - * This DrawingView provides a very basic implementation. It does not perform any - * functionality apart from keeping track of its state represented by some important - * fields. It is a Null-value object and is used instead of a null reference to - * avoid null pointer exception. This concept is known as the Null-value object - * bug pattern. - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class NullDrawingView extends JPanel implements DrawingView { - - private DrawingEditor myDrawingEditor; - private Drawing myDrawing; - private Painter myUpdateStrategy; - private Color myBackgroundColor; - - private static Hashtable drawingViewManager = new Hashtable(); - - protected NullDrawingView(DrawingEditor editor) { - setEditor(editor); - setDrawing(new StandardDrawing()); - } - - /** - * Sets the view's editor. - */ - public void setEditor(DrawingEditor editor) { - myDrawingEditor = editor; - } - - /** - * Gets the current tool. - */ - public Tool tool() { - return editor().tool(); - } - - /** - * Gets the drawing. - */ - public Drawing drawing() { - return myDrawing; - } - - /** - * Sets and installs another drawing in the view. - */ - public void setDrawing(Drawing d) { - myDrawing = d; - } - - /** - * Gets the editor. - */ - public DrawingEditor editor() { - return myDrawingEditor; - } - - /** - * Adds a figure to the drawing. - * @return the added figure. - */ - public Figure add(Figure figure) { - return figure; - } - - /** - * Removes a figure from the drawing. - * @return the removed figure - */ - public Figure remove(Figure figure) { - return figure; - } - - /** - * Adds a collection of figures to the drawing. - */ - public void addAll(Collection figures) { - // ignore: do nothing - } - - /** - * Gets the size of the drawing. - */ - public Dimension getSize() { - return new Dimension(); - } - - /** - * Gets the minimum dimension of the drawing. - */ - public Dimension getMinimumSize() { - return new Dimension(); - } - - /** - * Gets the preferred dimension of the drawing.. - */ - public Dimension getPreferredSize() { - return new Dimension(); - } - - /** - * Sets the current display update strategy. - * @see Painter - */ - public void setDisplayUpdate(Painter newUpdateStrategy) { - myUpdateStrategy = newUpdateStrategy; - } - - /** - * Gets the current display update strategy. - * @see Painter - */ - public Painter getDisplayUpdate() { - return myUpdateStrategy; - } - - /** - * Gets an enumeration over the currently selected figures. - * The selection is a snapshot of the current selection - * which does not get changed anymore - * - * @return an enumeration with the currently selected figures. - */ - public FigureEnumeration selection() { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Gets the currently seleced figures in Z order. - * @see #selection - * @return a FigureEnumeration with the selected figures. This enumeration - * represents a snapshot of the current selection. - */ - public FigureEnumeration selectionZOrdered() { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Gets the number of selected figures. - */ - public int selectionCount() { - return 0; - } - - /** - * Test whether a given figure is selected. - */ - public boolean isFigureSelected(Figure checkFigure) { - return false; - } - - /** - * Adds a figure to the current selection. - */ - public void addToSelection(Figure figure) { - // ignore: do nothing - } - - /** - * Adds a Collection of figures to the current selection. - */ - public void addToSelectionAll(Collection figures) { - // ignore: do nothing - } - - /** - * Adds a FigureEnumeration to the current selection. - */ - public void addToSelectionAll(FigureEnumeration fe) { - // ignore: do nothing - } - - /** - * Removes a figure from the selection. - */ - public void removeFromSelection(Figure figure) { - // ignore: do nothing - } - - /** - * If a figure isn't selected it is added to the selection. - * Otherwise it is removed from the selection. - */ - public void toggleSelection(Figure figure) { - // ignore: do nothing - } - - /** - * Clears the current selection. - */ - public void clearSelection() { - // ignore: do nothing - } - - /** - * Gets the current selection as a FigureSelection. A FigureSelection - * can be cut, copied, pasted. - */ - public FigureSelection getFigureSelection() { - return new StandardFigureSelection(selection(), 0); - } - - /** - * Finds a handle at the given coordinates. - * @return the hit handle, null if no handle is found. - */ - public Handle findHandle(int x, int y) { - return null; - } - - /** - * Gets the position of the last click inside the view. - */ - public Point lastClick() { - return new Point(); - } - - /** - * Sets the current point constrainer. - */ - public void setConstrainer(PointConstrainer p) { - // ignore: do nothing - } - - /** - * Gets the current grid setting. - */ - public PointConstrainer getConstrainer() { - return null; - } - - /** - * Checks whether the drawing has some accumulated damage - */ - public void checkDamage() { - // ignore: do nothing - } - - /** - * Repair the damaged area - */ - public void repairDamage() { - // ignore: do nothing - } - - /** - * Paints the drawing view. The actual drawing is delegated to - * the current update strategy. - * @see Painter - */ - public void paint(Graphics g) { - // ignore: do nothing - } - - /** - * Creates an image with the given dimensions - */ - public Image createImage(int width, int height) { - return null; - } - - /** - * Gets a graphic to draw into - */ - public Graphics getGraphics() { - return null; - } - - /** - * Gets the background color of the DrawingView - */ - public Color getBackground() { - return myBackgroundColor; - } - - /** - * Sets the background color of the DrawingView - */ - public void setBackground(Color c) { - myBackgroundColor = c; - } - - /** - * Draws the contents of the drawing view. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void drawAll(Graphics g) { - // ignore: do nothing - } - - /** - * Draws the given figures. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void draw(Graphics g, FigureEnumeration fe) { - // ignore: do nothing - } - - /** - * Draws the currently active handles. - */ - public void drawHandles(Graphics g) { - // ignore: do nothing - } - - /** - * Draws the drawing. - */ - public void drawDrawing(Graphics g) { - // ignore: do nothing - } - - /** - * Draws the background. If a background pattern is set it - * is used to fill the background. Otherwise the background - * is filled in the background color. - */ - public void drawBackground(Graphics g) { - // ignore: do nothing - } - - /** - * Sets the cursor of the DrawingView - */ - public void setCursor(CH.ifa.draw.framework.Cursor c) { - // ignore: do nothing - } - - /** - * Freezes the view by acquiring the drawing lock. - * @see Drawing#lock - */ - public void freezeView() { - // ignore: do nothing - } - - /** - * Unfreezes the view by releasing the drawing lock. - * @see Drawing#unlock - */ - public void unfreezeView() { - // ignore: do nothing - } - - /** - * Add a listener for selection changes in this DrawingView. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void addFigureSelectionListener(FigureSelectionListener fsl) { - // ignore: do nothing - } - - /** - * Remove a listener for selection changes in this DrawingView. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void removeFigureSelectionListener(FigureSelectionListener fsl) { - // ignore: do nothing - } - - /** - * Returns a FigureEnumeration of connection figures - */ - public FigureEnumeration getConnectionFigures(Figure inFigure) { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Inserts figures in a drawing at given offset. Optional check for connection figures - * - * @return enumeration which has been added to the drawing. The figures in the enumeration - * can have changed during adding them (e.g. they could have been decorated). - */ - public FigureEnumeration insertFigures(FigureEnumeration inFigures, int dx, int dy, boolean bCheck) { - return FigureEnumerator.getEmptyEnumeration(); - } - - public void drawingInvalidated(DrawingChangeEvent e) { - // ignore: do nothing - } - - public void drawingRequestUpdate(DrawingChangeEvent e) { - // ignore: do nothing - } - - public void drawingTitleChanged(DrawingChangeEvent e) { - // ignore: do nothing - } - - public boolean isInteractive() { - return false; - } - - public synchronized static DrawingView getManagedDrawingView(DrawingEditor editor) { - if (drawingViewManager.containsKey(editor)) { - return (DrawingView)drawingViewManager.get(editor); - } - else { - DrawingView newDrawingView = new NullDrawingView(editor); - drawingViewManager.put(editor, newDrawingView); - return newDrawingView; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/NullHandle.java b/JHotDraw/src/CH/ifa/draw/standard/NullHandle.java deleted file mode 100644 index 9258e26d1..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/NullHandle.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * @(#)NullHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import CH.ifa.draw.framework.*; - -/** - * A handle that doesn't change the owned figure. Its only purpose is - * to show feedback that a figure is selected. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b>NullObject</b><br> - * NullObject enables to treat handles that don't do - * anything in the same way as other handles. - * - * @version <$CURRENT_VERSION$> - */ -public class NullHandle extends LocatorHandle { - - /** - * The handle's locator. - */ - protected Locator fLocator; - - public NullHandle(Figure owner, Locator locator) { - super(owner, locator); - } - - /** - * Draws the NullHandle. NullHandles are drawn as a - * red framed rectangle. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/NullPainter.java b/JHotDraw/src/CH/ifa/draw/standard/NullPainter.java deleted file mode 100644 index 5b739c1e8..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/NullPainter.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)NullPainter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: \x{FFFD} by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.standard; - -import java.awt.Graphics; - -import CH.ifa.draw.framework.DrawingView; -import CH.ifa.draw.framework.Painter; - -/** - * Default implementation support for a Painter. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b>NullObject</b><br> - * NullObject enables to treat handles that don't do - * anything in the same way as other handles. - * - * @see Painter - * - * @version <$CURRENT_VERSION$> - */ - -public class NullPainter implements Painter { - /* (non-Javadoc) - * @see CH.ifa.draw.framework.Painter#draw(java.awt.Graphics, CH.ifa.draw.framework.DrawingView) - */ - public void draw(Graphics g, DrawingView view) { - // Do nothing in a reasonable way. - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/NullTool.java b/JHotDraw/src/CH/ifa/draw/standard/NullTool.java deleted file mode 100644 index 3afc961fb..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/NullTool.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * @(#)NullTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; - -/** - * Default implementation support for Tools. - * - * @see DrawingView - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ - -public class NullTool extends AbstractTool { - public NullTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - public void activate() { - // suppress clearSelection() and tool-activation notification in superclass - } - - public void deactivate() { - // suppress clearSelection() and tool-activation notification in superclass - } - - protected void checkUsable() { - //suppress setUsable(false); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/OffsetLocator.java b/JHotDraw/src/CH/ifa/draw/standard/OffsetLocator.java deleted file mode 100644 index 5298e9af9..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/OffsetLocator.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * @(#)OffsetLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import java.io.IOException; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; - -/** - * A locator to offset another Locator. - * @see Locator - * - * @version <$CURRENT_VERSION$> - */ -public class OffsetLocator extends AbstractLocator { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 2679950024611847621L; - private int offsetLocatorSerializedDataVersion = 1; - - private Locator fBase; - private int fOffsetX; - private int fOffsetY; - - public OffsetLocator() { - fBase = null; - fOffsetX = 0; - fOffsetY = 0; - } - - public OffsetLocator(Locator base) { - this(); - fBase = base; - } - - public OffsetLocator(Locator base, int offsetX, int offsetY) { - this(base); - fOffsetX = offsetX; - fOffsetY = offsetY; - } - - public Point locate(Figure owner) { - Point p = fBase.locate(owner); - p.x += fOffsetX; - p.y += fOffsetY; - return p; - } - - public void moveBy(int dx, int dy) { - fOffsetX += dx; - fOffsetY += dy; - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fOffsetX); - dw.writeInt(fOffsetY); - dw.writeStorable(fBase); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fOffsetX = dr.readInt(); - fOffsetY = dr.readInt(); - fBase = (Locator)dr.readStorable(); - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/standard/OrderedFigureElement.java b/JHotDraw/src/CH/ifa/draw/standard/OrderedFigureElement.java deleted file mode 100644 index 3183af556..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/OrderedFigureElement.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * @(#)OrderFigureElement.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.Figure; - -/** - * @author WMG (INIT Copyright (C) 2000 All rights reserved) - * @version <$CURRENT_VERSION$> - */ -class OrderedFigureElement implements Comparable { - - //_________________________________________________________VARIABLES - - private Figure _theFigure; - private int _nZ; - - //______________________________________________________CONSTRUCTORS - - public OrderedFigureElement(Figure aFigure, int nZ) { - _theFigure = aFigure; - _nZ = nZ; - } - - //____________________________________________________PUBLIC METHODS - - public Figure getFigure() { - return _theFigure; - } - - public int getZValue() { - return _nZ; - } - - public int compareTo(Object o) { - OrderedFigureElement ofe = (OrderedFigureElement) o; - if (_nZ == ofe.getZValue()) { - return 0; - } - - if (_nZ > ofe.getZValue()) { - return 1; - } - - return -1; - } - - //_______________________________________________________________END - -} //end of class OrderedFigureElement diff --git a/JHotDraw/src/CH/ifa/draw/standard/PasteCommand.java b/JHotDraw/src/CH/ifa/draw/standard/PasteCommand.java deleted file mode 100644 index fb3d278a6..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/PasteCommand.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * @(#)PasteCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; -import java.awt.*; - -/** - * Command to insert the clipboard into the drawing. - * - * @see Clipboard - * - * @version <$CURRENT_VERSION$> - */ -public class PasteCommand extends FigureTransferCommand { - - /** - * Constructs a paste command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public PasteCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - Point lastClick = view().lastClick(); - FigureSelection selection = (FigureSelection)Clipboard.getClipboard().getContents(); - if (selection != null) { - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures( - (FigureEnumerator)selection.getData(StandardFigureSelection.TYPE)); - - if (!getUndoActivity().getAffectedFigures().hasNextFigure()) { - setUndoActivity(null); - return; - } - - Rectangle r = getBounds(getUndoActivity().getAffectedFigures()); - view().clearSelection(); - - // get an enumeration of inserted figures - FigureEnumeration fe = insertFigures(getUndoActivity().getAffectedFigures(), lastClick.x-r.x, lastClick.y-r.y); - getUndoActivity().setAffectedFigures(fe); - - view().checkDamage(); - } - } - - public boolean isExecutableWithView() { - return Clipboard.getClipboard().getContents() != null; - } - - private Rectangle getBounds(FigureEnumeration fe) { - Rectangle r = fe.nextFigure().displayBox(); - while (fe.hasNextFigure()) { - r.add(fe.nextFigure().displayBox()); - } - return r; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor(getDrawingView().drawing()); - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().visit(deleteVisitor); - } - - getDrawingView().clearSelection(); - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - getDrawingView().clearSelection(); - setAffectedFigures(getDrawingView().insertFigures( - getAffectedFigures(), 0, 0, false)); - - return true; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/PeripheralLocator.java b/JHotDraw/src/CH/ifa/draw/standard/PeripheralLocator.java deleted file mode 100644 index 6cc5e86cf..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/PeripheralLocator.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * @(#)PeripheralLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.Point; -import CH.ifa.draw.framework.Figure; -import java.awt.*; -import java.lang.Math; - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class PeripheralLocator extends AbstractLocator { - private static int CORNERSPACE = 1; - private Figure fOwner; - private int fPPS; - private int fIndex; - - private PeripheralLocator() { - // do nothing: for JDO-compliance only - } - - public PeripheralLocator(int pointsPerSide, int index) { - fPPS = pointsPerSide; - fIndex = index; - if (index >= pointsPerSide *4) { - throw new IllegalArgumentException("Index must be within the range of points starting with index = 0."); - } - } - - public Point locate(Figure parm1) { - Rectangle r = parm1.displayBox(); - /* calculate total length for spacing */ - //int circumference = r.width*2 + r.height*2; - /* subtrace corners spacing */ - //int insets = 2 * 4 * CORNERSPACE; - - //int spacing = circumference/(fPPS*4 +4); - float hSpacing = (float)r.width / (fPPS +1); - float vSpacing = (float)r.height / (fPPS +1); - - int x = 0; - int y = 0; - if (fIndex < fPPS) { - //north - x = Math.round((fIndex + 1.0f ) * hSpacing); - y = 0; - } - else if (fIndex < (fPPS*2)) { - //east - x = Math.round((fPPS + 1 ) * hSpacing) ;//r.width; - y = Math.round((fIndex +1 - fPPS) * vSpacing); //should be negative? - } - else if (fIndex < (fPPS*3)) { - //south - x = Math.round(((fPPS + 1 ) - (fIndex +1 - fPPS*2))* hSpacing); - y = Math.round((fPPS + 1 )* vSpacing) /*r.height*/; - } - else { - //west - x = 0; - y = Math.round(((fPPS +1) - (fIndex +1 - fPPS*3))*vSpacing); - } - x = x+r.x; - y = y+r.y; - return new Point((int)x, (int)y); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/standard/QuadTree.java b/JHotDraw/src/CH/ifa/draw/standard/QuadTree.java deleted file mode 100644 index 035b0d56d..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/QuadTree.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * @(#)QuadTree.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.util.CollectionsFactory; - -import java.awt.geom.Rectangle2D; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.io.Serializable; - -/** - * @author WMG (INIT Copyright (C) 2000 All rights reserved) - * @version <$CURRENT_VERSION$> - */ -class QuadTree implements Serializable { - - //_________________________________________________________VARIABLES - - private Rectangle2D _absoluteBoundingRectangle2D = new Rectangle2D.Double(); - private int _nMaxTreeDepth; - private Hashtable _theHashtable = new Hashtable(); - private Hashtable _outsideHashtable = new Hashtable(); - private QuadTree _nwQuadTree; - private QuadTree _neQuadTree; - private QuadTree _swQuadTree; - private QuadTree _seQuadTree; - - //______________________________________________________CONSTRUCTORS - - public QuadTree(Rectangle2D absoluteBoundingRectangle2D) { - this(2, absoluteBoundingRectangle2D); - } - - public QuadTree(int nMaxTreeDepth, Rectangle2D - absoluteBoundingRectangle2D) { - _init(nMaxTreeDepth, absoluteBoundingRectangle2D); - } - - //____________________________________________________PUBLIC METHODS - - public void add(Object anObject, Rectangle2D absoluteBoundingRectangle2D) { - if (_nMaxTreeDepth == 1) { - if (absoluteBoundingRectangle2D.intersects(_absoluteBoundingRectangle2D)) { - _theHashtable.put(anObject, absoluteBoundingRectangle2D); - } - else { - _outsideHashtable.put(anObject, absoluteBoundingRectangle2D); - } - return; - } - - boolean bNW = absoluteBoundingRectangle2D.intersects( - _nwQuadTree.getAbsoluteBoundingRectangle2D()); - - boolean bNE = absoluteBoundingRectangle2D.intersects( - _neQuadTree.getAbsoluteBoundingRectangle2D()); - - boolean bSW = absoluteBoundingRectangle2D.intersects( - _swQuadTree.getAbsoluteBoundingRectangle2D()); - - boolean bSE = absoluteBoundingRectangle2D.intersects( - _seQuadTree.getAbsoluteBoundingRectangle2D()); - - int nCount = 0; - - if (bNW == true) { - nCount++; - } - if (bNE == true) { - nCount++; - } - if (bSW == true) { - nCount++; - } - if (bSE == true) { - nCount++; - } - - if (nCount > 1) { - _theHashtable.put(anObject, absoluteBoundingRectangle2D); - return; - } - if (nCount == 0) { - _outsideHashtable.put(anObject, absoluteBoundingRectangle2D); - return; - } - - if (bNW == true) { - _nwQuadTree.add(anObject, absoluteBoundingRectangle2D); - } - if (bNE == true) { - _neQuadTree.add(anObject, absoluteBoundingRectangle2D); - } - if (bSW == true) { - _swQuadTree.add(anObject, absoluteBoundingRectangle2D); - } - if (bSE == true) { - _seQuadTree.add(anObject, absoluteBoundingRectangle2D); - } - } - - public Object remove(Object anObject) { - Object returnObject = _theHashtable.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - if (_nMaxTreeDepth > 1) { - returnObject = _nwQuadTree.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - returnObject = _neQuadTree.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - returnObject = _swQuadTree.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - returnObject = _seQuadTree.remove(anObject); - if (returnObject != null) { - return returnObject; - } - } - - returnObject = _outsideHashtable.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - return null; - } - - - public void clear() { - _theHashtable.clear(); - _outsideHashtable.clear(); - if (_nMaxTreeDepth > 1) { - _nwQuadTree.clear(); - _neQuadTree.clear(); - _swQuadTree.clear(); - _seQuadTree.clear(); - } - } - - public int getMaxTreeDepth() { - return _nMaxTreeDepth; - } -/* - public FigureEnumeration getAll() { - List l = CollectionsFactory.current().createList(); - l.add(_theHashtable.keySet()); - l.add(_outsideHashtable.keySet()); - - if (_nMaxTreeDepth > 1) { - l.add(_nwQuadTree.getAll().toList()); - l.add(_neQuadTree.getAll().toList()); - l.add(_swQuadTree.getAll().toList()); - l.add(_seQuadTree.getAll().toList()); - } - - return new FigureEnumerator(l); - } -*/ - public FigureEnumeration getAllWithin(Rectangle2D r) { - List l = CollectionsFactory.current().createList(); - for (Iterator ii = _outsideHashtable.keySet().iterator(); ii.hasNext(); ) { - Object anObject = ii.next(); - Rectangle2D itsAbsoluteBoundingRectangle2D = (Rectangle2D) - _outsideHashtable.get(anObject); - - if (itsAbsoluteBoundingRectangle2D.intersects(r)) { - l.add(anObject); - } - } - - if (_absoluteBoundingRectangle2D.intersects(r)) { - for(Iterator i = _theHashtable.keySet().iterator(); i.hasNext(); ) { - Object anObject = i.next(); - Rectangle2D itsAbsoluteBoundingRectangle2D = (Rectangle2D) - _theHashtable.get(anObject); - - if (itsAbsoluteBoundingRectangle2D.intersects(r)) { - l.add(anObject); - } - } - - if (_nMaxTreeDepth > 1) { - l.add(_nwQuadTree.getAllWithin(r)); - l.add(_neQuadTree.getAllWithin(r)); - l.add(_swQuadTree.getAllWithin(r)); - l.add(_seQuadTree.getAllWithin(r)); - } - } - - return new FigureEnumerator(l); - } - - public Rectangle2D getAbsoluteBoundingRectangle2D() { - return _absoluteBoundingRectangle2D; - } - - //___________________________________________________PRIVATE METHODS - - private void _init(int nMaxTreeDepth, Rectangle2D absoluteBoundingRectangle2D) { - _absoluteBoundingRectangle2D.setRect(absoluteBoundingRectangle2D); - _nMaxTreeDepth = nMaxTreeDepth; - - if (_nMaxTreeDepth > 1) { - _nwQuadTree = new QuadTree(_nMaxTreeDepth-1, - _makeNorthwest(absoluteBoundingRectangle2D)); - _neQuadTree = new QuadTree(_nMaxTreeDepth-1, - _makeNortheast(absoluteBoundingRectangle2D)); - _swQuadTree = new QuadTree(_nMaxTreeDepth-1, - _makeSouthwest(absoluteBoundingRectangle2D)); - _seQuadTree = new QuadTree(_nMaxTreeDepth-1, - _makeSoutheast(absoluteBoundingRectangle2D)); - } - } - - private Rectangle2D _makeNorthwest(Rectangle2D r) { - return new Rectangle2D.Double(r.getX(), r.getY(), r.getWidth() / 2.0, r.getHeight() / 2.0); - } - - private Rectangle2D _makeNortheast(Rectangle2D r) { - return new Rectangle2D.Double(r.getX() + r.getWidth() / 2.0, - r.getY(), r.getWidth() / 2.0, r.getHeight() / 2.0); - } - - private Rectangle2D _makeSouthwest(Rectangle2D r) { - return new Rectangle2D.Double(r.getX(), r.getY() + r.getHeight() / 2.0, - r.getWidth() / 2.0, r.getHeight() / 2.0); - } - - private Rectangle2D _makeSoutheast(Rectangle2D r) { - return new Rectangle2D.Double(r.getX() + r.getWidth() / 2.0, - r.getY() + r.getHeight() / 2.0, r.getWidth() / 2.0, - r.getHeight() / 2.0); - } - -//_______________________________________________________________END - -} //end of class QuadTree diff --git a/JHotDraw/src/CH/ifa/draw/standard/RelativeLocator.java b/JHotDraw/src/CH/ifa/draw/standard/RelativeLocator.java deleted file mode 100644 index 29ccc9f59..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/RelativeLocator.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * @(#)RelativeLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import java.io.IOException; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; - -/** - * A locator that specfies a point that is relative to the bounds - * of a figure. - * - * @see Locator - * - * @version <$CURRENT_VERSION$> - */ -public class RelativeLocator extends AbstractLocator { - /* - * Serialization support. - */ - private static final long serialVersionUID = 2619148876087898602L; - private int relativeLocatorSerializedDataVersion = 1; - - double fRelativeX; - double fRelativeY; - - public RelativeLocator() { - fRelativeX = 0.0; - fRelativeY = 0.0; - } - - public boolean equals(Object o) { - if (RelativeLocator.class.isInstance(o)) { - RelativeLocator rl = (RelativeLocator) o; - if ((rl.fRelativeX) == fRelativeX && (rl.fRelativeY == fRelativeY)) { - return true; - } - } - return false; - } - - public RelativeLocator(double relativeX, double relativeY) { - fRelativeX = relativeX; - fRelativeY = relativeY; - } - - public Point locate(Figure owner) { - Rectangle r = owner.displayBox(); - return new Point( - r.x + (int)(r.width * fRelativeX), - r.y + (int)(r.height * fRelativeY) - ); - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeDouble(fRelativeX); - dw.writeDouble(fRelativeY); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fRelativeX = dr.readDouble(); - fRelativeY = dr.readDouble(); - } - - static public Locator east() { - return new RelativeLocator(1.0, 0.5); - } - - /** - * North. - */ - static public Locator north() { - return new RelativeLocator(0.5, 0.0); - } - - /** - * West. - */ - static public Locator west() { - return new RelativeLocator(0.0, 0.5); - } - - /** - * North east. - */ - static public Locator northEast() { - return new RelativeLocator(1.0, 0.0); - } - - /** - * North west. - */ - static public Locator northWest() { - return new RelativeLocator(0.0, 0.0); - } - - /** - * South. - */ - static public Locator south() { - return new RelativeLocator(0.5, 1.0); - } - - /** - * South east. - */ - static public Locator southEast() { - return new RelativeLocator(1.0, 1.0); - } - - /** - * South west. - */ - static public Locator southWest() { - return new RelativeLocator(0.0, 1.0); - } - - /** - * Center. - */ - static public Locator center() { - return new RelativeLocator(0.5, 0.5); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ReverseFigureEnumerator.java b/JHotDraw/src/CH/ifa/draw/standard/ReverseFigureEnumerator.java deleted file mode 100644 index 4ee5f317a..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ReverseFigureEnumerator.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * @(#)ReverseFigureEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.util.ReverseListEnumerator; -import CH.ifa.draw.framework.*; - -import java.util.Iterator; -import java.util.List; - -/** - * An Enumeration that enumerates a Collection of figures back (size-1) to front (0). - * - * @version <$CURRENT_VERSION$> - */ -public final class ReverseFigureEnumerator implements FigureEnumeration { - private Iterator myIterator; - private List myInitialList; - - public ReverseFigureEnumerator(List l) { - myInitialList = l; - reset(); - } - - /** - * Returns true if the enumeration contains more elements; false - * if its empty. - */ - public boolean hasNextFigure() { - return myIterator.hasNext(); - } - - /** - * Returns the next element casted as a figure of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Figure nextFigure() { - return (Figure)myIterator.next(); - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - myIterator = new ReverseListEnumerator(myInitialList); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/SelectAllCommand.java b/JHotDraw/src/CH/ifa/draw/standard/SelectAllCommand.java deleted file mode 100644 index 2763202db..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/SelectAllCommand.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * @(#)SelectAllCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.UndoableAdapter; -import CH.ifa.draw.util.Undoable; - -/** - * Command to select all figures in a view. - * - * @version <$CURRENT_VERSION$> - */ -public class SelectAllCommand extends AbstractCommand { - - /** - * Constructs a select all command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public SelectAllCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); - view().addToSelectionAll(view().drawing().figures()); - view().checkDamage(); - } - - /** - * Used in enabling the properties menu item. - * SelectAll menu item will be enabled only when there ia atleast one figure - * in the selected drawing view. - */ - public boolean isExecutableWithView() { - FigureEnumeration fe = view().drawing().figures(); - if (fe.hasNextFigure() && (fe.nextFigure() != null)) { - return true; - } - - return false; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new SelectAllCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - getDrawingView().clearSelection(); - getDrawingView().addToSelectionAll(getAffectedFigures()); - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - getDrawingView().addToSelectionAll(getDrawingView().drawing().figures()); - return true; - } - - return false; - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/SelectAreaTracker.java b/JHotDraw/src/CH/ifa/draw/standard/SelectAreaTracker.java deleted file mode 100644 index 8b06eca50..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/SelectAreaTracker.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * @(#)SelectAreaTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import java.awt.event.MouseEvent; -import CH.ifa.draw.framework.*; - -/** - * SelectAreaTracker implements a rubberband selection of an area. - * - * @version <$CURRENT_VERSION$> - */ -public class SelectAreaTracker extends AbstractTool { - /** Selected rectangle in physical coordinates space */ - private Rectangle fSelectGroup; - private Color fRubberBandColor; - - public SelectAreaTracker(DrawingEditor newDrawingEditor) { - this(newDrawingEditor, Color.black); - } - - public SelectAreaTracker(DrawingEditor newDrawingEditor, Color rubberBandColor) { - super(newDrawingEditor); - fRubberBandColor = rubberBandColor; - } - - public void mouseDown(MouseEvent e, int x, int y) { - // use event coordinates to supress any kind of - // transformations like constraining points to a grid - super.mouseDown(e, e.getX(), e.getY()); - rubberBand(getAnchorX(), getAnchorY(), getAnchorX(), getAnchorY()); - } - - public void mouseDrag(MouseEvent e, int x, int y) { - super.mouseDrag(e, x, y); - eraseRubberBand(); - rubberBand(getAnchorX(), getAnchorY(), x, y); - } - - public void mouseUp(MouseEvent e, int x, int y) { - eraseRubberBand(); - selectGroup(e.isShiftDown()); - super.mouseUp(e, x, y); - } - - private void rubberBand(int x1, int y1, int x2, int y2) { - fSelectGroup = new Rectangle(new Point(x1, y1)); - fSelectGroup.add(new Point(x2, y2)); - drawXORRect(fSelectGroup); - } - - private void eraseRubberBand() { - drawXORRect(fSelectGroup); - } - - private void drawXORRect(Rectangle r) { - Graphics g = view().getGraphics(); - if ( g != null ) { - try { - if (g instanceof Graphics2D) { - // Do dotted-line in Java2 - Stroke dashedStroke = new BasicStroke(1.0f, - BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, - 10.0f, new float[] {5f, 5f, 5f, 5f}, 5.0f); - ((Graphics2D) g).setStroke(dashedStroke); - } - - g.setXORMode(view().getBackground()); - g.setColor(fRubberBandColor); - g.drawRect(r.x, r.y, r.width, r.height); - } - finally { - g.dispose(); // SF bugtracker id: #490663 - } - } - } - - private void selectGroup(boolean toggle) { - FigureEnumeration fe = drawing().figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - Rectangle r2 = figure.displayBox(); - if (fSelectGroup.contains(r2.x, r2.y) && fSelectGroup.contains(r2.x+r2.width, r2.y+r2.height)) { - if (toggle) { - view().toggleSelection(figure); - } - else { - view().addToSelection(figure); - } - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/SelectionTool.java b/JHotDraw/src/CH/ifa/draw/standard/SelectionTool.java deleted file mode 100644 index cb8e7aacc..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/SelectionTool.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)SelectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.UndoableTool; -import CH.ifa.draw.util.UndoableHandle; -import CH.ifa.draw.contrib.dnd.DragNDropTool; -import java.awt.event.MouseEvent; - -/** - * Tool to select and manipulate figures. - * A selection tool is in one of three states, e.g., background - * selection, figure selection, handle manipulation. The different - * states are handled by different child tools. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld032.htm>State</a></b><br> - * SelectionTool is the StateContext and child is the State. - * The SelectionTool delegates state specific - * behavior to its current child tool. - * <hr> - * - * @version <$CURRENT_VERSION$> - */ - -public class SelectionTool extends AbstractTool { - - private Tool myDelegationTool = null; - - public SelectionTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - /** - * Handles mouse down events and starts the corresponding tracker. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - // on MS-Windows NT: AWT generates additional mouse down events - // when the left button is down && right button is clicked. - // To avoid dead locks we ignore such events - if (getDelegateTool() != null) { - return; - } - - view().freezeView(); - - Handle handle = view().findHandle(e.getX(), e.getY()); - if (handle != null) { - setDelegateTool(createHandleTracker(view(), handle)); - } - else { - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - setDelegateTool(createDragTracker(figure)); - } - else { - if (!e.isShiftDown()) { - view().clearSelection(); - } - setDelegateTool(createAreaTracker()); - } - } - getDelegateTool().activate(); - getDelegateTool().mouseDown(e, x, y); - } - - /** - * Handles mouse moves (if the mouse button is up). - * Switches the cursors depending on whats under them. - */ - public void mouseMove(MouseEvent evt, int x, int y) { - if (evt.getSource() == getActiveView() ) { - DragNDropTool.setCursor(evt.getX(), evt.getY(), getActiveView()); - } - } - - /** - * Handles mouse drag events. The events are forwarded to the - * current tracker. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - if (getDelegateTool() != null) { // JDK1.1 doesn't guarantee mouseDown, mouseDrag, mouseUp - getDelegateTool().mouseDrag(e, x, y); - } - } - - /** - * Handles mouse up events. The events are forwarded to the - * current tracker. - */ - public void mouseUp(MouseEvent e, int x, int y) { - if (getDelegateTool() != null) { // JDK1.1 doesn't guarantee mouseDown, mouseDrag, mouseUp - getDelegateTool().mouseUp(e, x, y); - getDelegateTool().deactivate(); - setDelegateTool(null); - } - if (view() != null) { - view().unfreezeView(); - editor().figureSelectionChanged(view()); - } - } - - /** - * Factory method to create a Handle tracker. It is used to track a handle. - */ - protected Tool createHandleTracker(DrawingView view, Handle handle) { - return new HandleTracker(editor(), new UndoableHandle(handle)); - } - - /** - * Factory method to create a Drag tracker. It is used to drag a figure. - */ - protected Tool createDragTracker(Figure f) { - return new UndoableTool(new DragTracker(editor(), f)); - } - - /** - * Factory method to create an area tracker. It is used to select an - * area. - */ - protected Tool createAreaTracker() { - return new SelectAreaTracker(editor()); - } - - protected Tool getDelegateTool() { - return myDelegationTool; - } - - protected final void setDelegateTool(Tool newDelegateTool) { - myDelegationTool = newDelegateTool; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/SendToBackCommand.java b/JHotDraw/src/CH/ifa/draw/standard/SendToBackCommand.java deleted file mode 100644 index 0fc2b8c9c..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/SendToBackCommand.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * @(#)SendToBackCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.UndoableAdapter; -import CH.ifa.draw.util.Undoable; -import java.util.*; - -/** - * A command to send the selection to the back of the drawing. - * - * @version <$CURRENT_VERSION$> - */ -public class SendToBackCommand extends AbstractCommand { - - /** - * Constructs a send to back command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public SendToBackCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selectionZOrdered()); - FigureEnumeration fe = getUndoActivity().getAffectedFigures(); - while (fe.hasNextFigure()) { - view().drawing().sendToBack(fe.nextFigure()); - } - view().checkDamage(); - } - - protected boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - protected Undoable createUndoActivity() { - return new SendToBackCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - private Hashtable myOriginalLayers; - - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - myOriginalLayers = new Hashtable(); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - int currentFigureLayer = getOriginalLayer(currentFigure); - getDrawingView().drawing().sendToLayer(currentFigure, currentFigureLayer); - } - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - sendToCommand(fe.nextFigure()); - } - - return true; - } - - protected void sendToCommand(Figure f) { - getDrawingView().drawing().sendToBack(f); - } - - protected void addOriginalLayer(Figure affectedFigure, int newOriginalLayer) { - myOriginalLayers.put(affectedFigure, new Integer(newOriginalLayer)); - } - - protected int getOriginalLayer(Figure lookupAffectedFigure) { - return ((Integer)myOriginalLayers.get(lookupAffectedFigure)).intValue(); - } - - public void setAffectedFigures(FigureEnumeration fe) { - // first make copy of FigureEnumeration in superclass - super.setAffectedFigures(fe); - // then get new FigureEnumeration of copy to save attributes - FigureEnumeration copyFe = getAffectedFigures(); - while (copyFe.hasNextFigure()) { - Figure f = copyFe.nextFigure(); - int originalLayer = getDrawingView().drawing().getLayer(f); - addOriginalLayer(f, originalLayer); - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/SimpleUpdateStrategy.java b/JHotDraw/src/CH/ifa/draw/standard/SimpleUpdateStrategy.java deleted file mode 100644 index 3a5304ac7..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/SimpleUpdateStrategy.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)SimpleUpdateStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import CH.ifa.draw.framework.*; - -/** - * The SimpleUpdateStrategy implements an update - * strategy that directly redraws a DrawingView. - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public class SimpleUpdateStrategy implements Painter { - - /* - * Serialization support. In JavaDraw only the Drawing is serialized. - * However, for beans support SimpleUpdateStrategy supports - * serialization - */ - private static final long serialVersionUID = -7539925820692134566L; - - /** - * Draws the view contents. - */ - public void draw(Graphics g, DrawingView view) { - view.drawAll(g); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/SingleFigureEnumerator.java b/JHotDraw/src/CH/ifa/draw/standard/SingleFigureEnumerator.java deleted file mode 100644 index 9bffd0d74..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/SingleFigureEnumerator.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)SingleFigureEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; - -/** - * An Enumeration that contains only a single Figures. An instance of this - * enumeration can be used only once to retrieve the figure as the figure - * is forgotten after the first retrieval. - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public final class SingleFigureEnumerator implements FigureEnumeration { - private Figure mySingleFigure; - private Figure myInitialFigure; - - public SingleFigureEnumerator(Figure newSingleFigure) { - myInitialFigure = newSingleFigure; - reset(); - } - - /** - * Returns true if the enumeration contains more elements; false - * if its empty. - */ - public boolean hasNextFigure() { - return mySingleFigure != null; - } - - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Figure nextFigure() { - Figure returnFigure = mySingleFigure; - mySingleFigure = null; - return returnFigure; - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - mySingleFigure = myInitialFigure; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/StandardDrawing.java b/JHotDraw/src/CH/ifa/draw/standard/StandardDrawing.java deleted file mode 100644 index 8730e2630..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/StandardDrawing.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * @(#)StandardDrawing.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.CollectionsFactory; - -import java.awt.*; -import java.util.*; -import java.util.List; -import java.io.*; - -/** - * The standard implementation of the Drawing interface. - * - * @see Drawing - * - * @version <$CURRENT_VERSION$> - */ - -public class StandardDrawing extends CompositeFigure implements Drawing { - - - /** - * the registered listeners - */ - private transient List fListeners; - - /** - * boolean that serves as a condition variable - * to lock the access to the drawing. - * The lock is recursive and we keep track of the current - * lock holder. - */ - private transient Thread fDrawingLockHolder = null; - private String myTitle; - - /* - * Serialization support - */ - private static final long serialVersionUID = -2602151437447962046L; - private int drawingSerializedDataVersion = 1; - - /** - * Constructs the Drawing. - */ - public StandardDrawing() { - super(); - fListeners = CollectionsFactory.current().createList(2); - init(new Rectangle(-500, -500, 2000, 2000)); - } - - /** - * Adds a listener for this drawing. - */ - public void addDrawingChangeListener(DrawingChangeListener listener) { - if (fListeners == null) { - fListeners = CollectionsFactory.current().createList(2); - } - fListeners.add(listener); - } - - /** - * Removes a listener from this drawing. - */ - public void removeDrawingChangeListener(DrawingChangeListener listener) { - fListeners.remove(listener); - } - - /** - * Gets an enumeration with all listener for this drawing. - */ - public Iterator drawingChangeListeners() { - return fListeners.iterator(); - } - - /** - * Removes a figure from the figure list, but - * doesn't release it. Use this method to temporarily - * manipulate a figure outside of the drawing. - * - * @param figure that is part of the drawing and should be added - */ - public synchronized Figure orphan(Figure figure) { - Figure orphanedFigure = super.orphan(figure); - // ensure that we remove the top level figure in a drawing - if (orphanedFigure.listener() != null) { - Rectangle rect = invalidateRectangle(displayBox()); - orphanedFigure.listener().figureRequestRemove(new FigureChangeEvent(orphanedFigure, rect)); - } - return orphanedFigure; - } - - public synchronized Figure add(Figure figure) { - Figure addedFigure = super.add(figure); - if (addedFigure.listener() != null) { - Rectangle rect = invalidateRectangle(displayBox()); - addedFigure.listener().figureRequestUpdate(new FigureChangeEvent(figure, rect)); - return addedFigure; - } - return addedFigure; - } - - /** - * Invalidates a rectangle and merges it with the - * existing damaged area. - * @see FigureChangeListener - */ - public void figureInvalidated(FigureChangeEvent e) { - if (fListeners != null) { - for (int i = 0; i < fListeners.size(); i++) { - DrawingChangeListener l = (DrawingChangeListener)fListeners.get(i); - l.drawingInvalidated(new DrawingChangeEvent(this, e.getInvalidatedRectangle())); - } - } - } - - /** - * Forces an update of the drawing change listeners. - */ - public void fireDrawingTitleChanged() { - if (fListeners != null) { - for (int i = 0; i < fListeners.size(); i++) { - DrawingChangeListener l = (DrawingChangeListener)fListeners.get(i); - l.drawingTitleChanged(new DrawingChangeEvent(this, null)); - } - } - } - - /** - * Forces an update of the drawing change listeners. - */ - public void figureRequestUpdate(FigureChangeEvent e) { - if (fListeners != null) { - for (int i = 0; i < fListeners.size(); i++) { - DrawingChangeListener l = (DrawingChangeListener)fListeners.get(i); - l.drawingRequestUpdate(new DrawingChangeEvent(this, null)); - } - } - } - - /** - * Return's the figure's handles. This is only used when a drawing - * is nested inside another drawing. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - handles.add(new NullHandle(this, RelativeLocator.northWest())); - handles.add(new NullHandle(this, RelativeLocator.northEast())); - handles.add(new NullHandle(this, RelativeLocator.southWest())); - handles.add(new NullHandle(this, RelativeLocator.southEast())); - return new HandleEnumerator(handles); - } - - /** - * Gets the display box. This is the union of all figures. - */ - public Rectangle displayBox() { - if (fFigures.size() > 0) { - FigureEnumeration fe = figures(); - - Rectangle r = fe.nextFigure().displayBox(); - - while (fe.hasNextFigure()) { - r.add(fe.nextFigure().displayBox()); - } - return r; - } - return new Rectangle(0, 0, 0, 0); - } - - public void basicDisplayBox(Point p1, Point p2) { - } - - /** - * Acquires the drawing lock. - */ - public synchronized void lock() { - // recursive lock - Thread current = Thread.currentThread(); - if (fDrawingLockHolder == current) { - return; - } - while (fDrawingLockHolder != null) { - try { - wait(); - } - catch (InterruptedException ex) { } - } - fDrawingLockHolder = current; - } - - /** - * Releases the drawing lock. - */ - public synchronized void unlock() { - if (fDrawingLockHolder != null) { - fDrawingLockHolder = null; - notify(); - } - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - fListeners = CollectionsFactory.current().createList(2); - } - - public String getTitle() { - return myTitle; - } - - public void setTitle(String newTitle) { - myTitle = newTitle; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/StandardDrawingView.java b/JHotDraw/src/CH/ifa/draw/standard/StandardDrawingView.java deleted file mode 100644 index ceb8da31c..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/StandardDrawingView.java +++ /dev/null @@ -1,1183 +0,0 @@ -/* - * @(#)StandardDrawingView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import java.awt.dnd.DragGestureListener; -import java.awt.dnd.DragSourceListener; -import java.awt.event.*; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - -import javax.swing.JOptionPane; -import javax.swing.JPanel; - -import CH.ifa.draw.contrib.AutoscrollHelper; -import CH.ifa.draw.contrib.dnd.DNDHelper; -import CH.ifa.draw.contrib.dnd.DNDInterface; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.framework.Cursor; -import CH.ifa.draw.util.CollectionsFactory; -import CH.ifa.draw.util.Command; -import CH.ifa.draw.util.Geom; -import CH.ifa.draw.util.UndoableCommand; - -/** - * The standard implementation of DrawingView. - * - * @see DrawingView - * @see Painter - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ -public class StandardDrawingView - extends JPanel - implements DrawingView, DNDInterface, java.awt.dnd.Autoscroll { - - /** - * The DrawingEditor of the view. - * @see #tool - */ - transient private DrawingEditor fEditor; - - /** - * the registered listeners for selection changes - */ - private transient List fSelectionListeners; - - /** - * The shown drawing. - */ - private Drawing fDrawing; - - /** - * the accumulated damaged area - */ - private transient Rectangle fDamage; - - /** - * The list of currently selected figures. - */ - transient private List fSelection; - - /** - * The shown selection handles. - */ - transient private List fSelectionHandles; - - /** - * The preferred size of the view - */ - - /** - * The position of the last mouse click - * inside the view. - */ - private Point fLastClick; - - /** - * A List of optional backgrounds. The list contains - * view painters that are drawn before the contents, - * that is in the background. - */ - private List fBackgrounds; - - /** - * A List of optional foregrounds. The list contains - * view painters that are drawn after the contents, - * that is in the foreground. - */ - private List fForegrounds; - - /** - * The update strategy used to repair the view. - */ - private Painter fUpdateStrategy; - - /** - * The grid used to constrain points for snap to - * grid functionality. - */ - private PointConstrainer fConstrainer; - - /** - * Scrolling increment - */ - public static final int MINIMUM_WIDTH = 400; - public static final int MINIMUM_HEIGHT = 300; - public static final int SCROLL_INCR = 100; - public static final int SCROLL_OFFSET = 10; - - private static int counter; - private int myCounter = counter; - - private DNDHelper dndh; - - /** - * Listener for mouse clicks. - */ - private MouseListener mouseListener; - - /** - * Listener for mouse movements. - */ - private MouseMotionListener motionListener; - - /** - * Listener for the keyboard. - */ - private KeyListener keyListener; - - /** - * Reflects whether the drawing view is in read-only mode (from a user's - * perspective). - */ - private boolean myIsReadOnly; - - /* - * Serialization support. In JavaDraw only the Drawing is serialized. - * However, for beans support StandardDrawingView supports - * serialization - */ - private static final long serialVersionUID = -3878153366174603336L; - private int drawingViewSerializedDataVersion = 1; - - /** - * Constructs the view. - */ - public StandardDrawingView(DrawingEditor editor) { - this(editor, MINIMUM_WIDTH, MINIMUM_HEIGHT); - } - - public StandardDrawingView(DrawingEditor editor, int width, int height) { - setAutoscrolls(true); - counter++; - fEditor = editor; - // ricardo_padilha: changed from setSize(int, int) because it is not - // JScrollPane-friendly. - setPreferredSize(new Dimension(width, height)); - fSelectionListeners = CollectionsFactory.current().createList(); - addFigureSelectionListener(editor()); - setLastClick(new Point(0, 0)); - fConstrainer = null; - fSelection = CollectionsFactory.current().createList(); - // JFC/Swing uses double buffering automatically as default - setDisplayUpdate(createDisplayUpdate()); - // TODO: Test FastBufferedUpdateStrategy with JFC/Swing double buffering - //setDisplayUpdate(new FastBufferedUpdateStrategy()); - setBackground(Color.lightGray); - - addMouseListener(createMouseListener()); - addMouseMotionListener(createMouseMotionListener()); - addKeyListener(createKeyListener()); - } - - protected MouseListener createMouseListener() { - mouseListener = new DrawingViewMouseListener(); - return mouseListener; - } - - protected MouseMotionListener createMouseMotionListener() { - motionListener = new DrawingViewMouseMotionListener(); - return motionListener; - } - - protected KeyListener createKeyListener() { - keyListener = new DrawingViewKeyListener(); - return keyListener; - } - - /** - * Factory method which can be overriden by subclasses - */ - protected Painter createDisplayUpdate() { - return new SimpleUpdateStrategy(); - //return new ClippingUpdateStrategy(); - } - - /** - * Sets the view's editor. - */ - public void setEditor(DrawingEditor editor) { - fEditor = editor; - } - - /** - * Gets the current tool. - */ - public Tool tool() { - return editor().tool(); - } - - /** - * Gets the drawing. - */ - public Drawing drawing() { - return fDrawing; - } - - /** - * Sets and installs another drawing in the view. - */ - public void setDrawing(Drawing d) { - if (drawing() != null) { - clearSelection(); - drawing().removeDrawingChangeListener(this); - } - - fDrawing = d; - if (drawing() != null) { - drawing().addDrawingChangeListener(this); - } - - checkMinimumSize(); - repaint(); - } - - /** - * Gets the editor. - */ - public DrawingEditor editor() { - return fEditor; - } - - /** - * Adds a figure to the drawing. - * @return the added figure. - */ - public Figure add(Figure figure) { - return drawing().add(figure); - } - - /** - * Removes a figure from the drawing. - * @return the removed figure - */ - public Figure remove(Figure figure) { - return drawing().remove(figure); - } - - /** - * Adds a Collection of figures to the drawing. - */ - public void addAll(Collection figures) { - FigureEnumeration fe = new FigureEnumerator(figures); - while (fe.hasNextFigure()) { - add(fe.nextFigure()); - } - } - - /** - * Check existance of figure in the drawing - */ - public boolean figureExists(Figure inf, FigureEnumeration fe) { - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - - if (figure.includes(inf)) { - return true; - } - } - - return false; - } - - /** - * Inserts a FigureEnumeration of figures and translates them by the - * given offset. This function is used to insert figures from clipboards (cut/copy) - * - * @return enumeration which has been added to the drawing. The figures in the enumeration - * can have changed during adding them (e.g. they could have been decorated). - */ - public FigureEnumeration insertFigures(FigureEnumeration fe, int dx, int dy, boolean bCheck) { - if (fe == null) { - return FigureEnumerator.getEmptyEnumeration(); - } - - List vCF = CollectionsFactory.current().createList(10); - InsertIntoDrawingVisitor visitor = new InsertIntoDrawingVisitor(drawing()); - - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (figure instanceof ConnectionFigure) { - vCF.add(figure); - } - else if (figure != null) { - figure.moveBy(dx, dy); - figure.visit(visitor); - } - } - - FigureEnumeration ecf = new FigureEnumerator(vCF); - - while (ecf.hasNextFigure()) { - ConnectionFigure cf = (ConnectionFigure) ecf.nextFigure(); - Figure sf = cf.startFigure(); - Figure ef = cf.endFigure(); - - if (figureExists(sf, drawing().figures()) - && figureExists(ef, drawing().figures()) - && (!bCheck || cf.canConnect(sf, ef))) { - - if (bCheck) { - Point sp = sf.center(); - Point ep = ef.center(); - Connector fStartConnector = cf.startFigure().connectorAt(ep.x, ep.y); - Connector fEndConnector = cf.endFigure().connectorAt(sp.x, sp.y); - - if (fEndConnector != null && fStartConnector != null) { - cf.connectStart(fStartConnector); - cf.connectEnd(fEndConnector); - cf.updateConnection(); - } - } - - cf.visit(visitor); - } - } - - addToSelectionAll(visitor.getInsertedFigures()); - return visitor.getInsertedFigures(); - } - - /** - * Returns a FigureEnumeration of connectionfigures attached to this figure - */ - public FigureEnumeration getConnectionFigures(Figure inFigure) { - // If no figure or figure is non connectable, just return null - if (inFigure == null || !inFigure.canConnect()) { - return null; - } - - // if (inFigure instanceof ConnectionFigure) - // return null; - - List result = CollectionsFactory.current().createList(5); - FigureEnumeration figures = drawing().figures(); - - // Find all connection figures - while (figures.hasNextFigure()) { - Figure f= figures.nextFigure(); - - if ((f instanceof ConnectionFigure) && !(isFigureSelected(f))) { - ConnectionFigure cf = (ConnectionFigure) f; - - if (cf.startFigure().includes(inFigure) || cf.endFigure().includes(inFigure)) { - result.add(f); - } - } - } - - return new FigureEnumerator(result); - } - - /** - * Sets the current display update strategy. - * @see Painter - */ - public void setDisplayUpdate(Painter updateStrategy) { - fUpdateStrategy = updateStrategy; - } - - /** - * Sets the current display update strategy. - * @see Painter - */ - public Painter getDisplayUpdate() { - return fUpdateStrategy; - } - - /** - * Gets an enumeration over the currently selected figures. - * The selection is a snapshot of the current selection - * which does not get changed anymore - * - * @return an enumeration with the currently selected figures. - */ - public FigureEnumeration selection() { - return selectionZOrdered(); - } - - /** - * Gets the currently selected figures in Z order. - * @see #selection - * @return a FigureEnumeration with the selected figures. The enumeration - * represents a snapshot of the current selection. - */ - public FigureEnumeration selectionZOrdered() { - List result = CollectionsFactory.current().createList(selectionCount()); - - result.addAll(fSelection); - return new ReverseFigureEnumerator(result); - } - - /** - * Gets the number of selected figures. - */ - public int selectionCount() { - return fSelection.size(); - } - - /** - * Test whether a given figure is selected. - */ - public boolean isFigureSelected(Figure checkFigure) { - return fSelection.contains(checkFigure); - } - - /** - * Adds a figure to the current selection. The figure is only selected if - * it is also contained in the Drawing associated with this DrawingView. - */ - public void addToSelection(Figure figure) { - if(addToSelectionImpl(figure) == true){ - fireSelectionChanged(); - } - } - protected boolean addToSelectionImpl(Figure figure){ - boolean changed = false; - if (!isFigureSelected(figure) && drawing().includes(figure)) { - fSelection.add(figure); - fSelectionHandles = null; - figure.invalidate(); - changed = true; - } - return changed; - } - /** - * Adds a Collection of figures to the current selection. - */ - public void addToSelectionAll(Collection figures) { - addToSelectionAll(new FigureEnumerator(figures)); - } - - /** - * Adds a FigureEnumeration to the current selection. - */ - public void addToSelectionAll(FigureEnumeration fe) { - boolean changed = false; - while (fe.hasNextFigure()) { - changed |= addToSelectionImpl(fe.nextFigure()); - } - if(changed == true){ - fireSelectionChanged(); - } - } - - /** - * Removes a figure from the selection. - */ - public void removeFromSelection(Figure figure) { - if (isFigureSelected(figure)) { - fSelection.remove(figure); - fSelectionHandles = null; - figure.invalidate(); - fireSelectionChanged(); - } - } - - /** - * If a figure isn't selected it is added to the selection. - * Otherwise it is removed from the selection. - */ - public void toggleSelection(Figure figure) { - if (isFigureSelected(figure)) { - removeFromSelection(figure); - } - else { - addToSelection(figure); - } - fireSelectionChanged(); - } - - /** - * Clears the current selection. - */ - public void clearSelection() { - // there is nothing selected - bug fix ID 628818 - if (selectionCount() == 0) { - // avoid unnecessary selection changed event when nothing has to be cleared - return; - } - - FigureEnumeration fe = selection(); - while (fe.hasNextFigure()) { - fe.nextFigure().invalidate(); - } - fSelection = CollectionsFactory.current().createList(); - fSelectionHandles = null; - fireSelectionChanged(); - } - - /** - * Gets an enumeration of the currently active handles. - */ - protected HandleEnumeration selectionHandles() { - if (fSelectionHandles == null) { - fSelectionHandles = CollectionsFactory.current().createList(); - FigureEnumeration fe = selection(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - HandleEnumeration kk = figure.handles(); - while (kk.hasNextHandle()) { - fSelectionHandles.add(kk.nextHandle()); - } - } - } - return new HandleEnumerator(fSelectionHandles); - } - - /** - * Gets the current selection as a FigureSelection. A FigureSelection - * can be cut, copied, pasted. - */ - public FigureSelection getFigureSelection() { - return new StandardFigureSelection(selectionZOrdered(), selectionCount()); - } - - /** - * Finds a handle at the given coordinates. - * @return the hit handle, null if no handle is found. - */ - public Handle findHandle(int x, int y) { - Handle handle; - - HandleEnumeration he = selectionHandles(); - while (he.hasNextHandle()) { - handle = he.nextHandle(); - if (handle.containsPoint(x, y)) { - return handle; - } - } - return null; - } - - /** - * Informs that the current selection changed. - * By default this event is forwarded to the - * drawing editor. - */ - protected void fireSelectionChanged() { - if (fSelectionListeners != null) { - for (int i = 0; i < fSelectionListeners.size(); i++) { - FigureSelectionListener l = (FigureSelectionListener)fSelectionListeners.get(i); - l.figureSelectionChanged(this); - } - } - } - - protected Rectangle getDamage() { - return fDamage; // clone? - } - - protected void setDamage(Rectangle r) { - fDamage = r; - } - - /** - * Gets the position of the last click inside the view. - */ - public Point lastClick() { - return fLastClick; - } - - protected void setLastClick(Point newLastClick) { - fLastClick = newLastClick; - } - - /** - * Sets the grid spacing that is used to constrain points. - */ - public void setConstrainer(PointConstrainer c) { - fConstrainer = c; - } - - /** - * Gets the current constrainer. - */ - public PointConstrainer getConstrainer() { - return fConstrainer; - } - - /** - * Constrains a point to the current grid. - */ - protected Point constrainPoint(Point p) { - // constrain to view size - Dimension size = getSize(); - //p.x = Math.min(size.width, Math.max(1, p.x)); - //p.y = Math.min(size.height, Math.max(1, p.y)); - p.x = Geom.range(1, size.width, p.x); - p.y = Geom.range(1, size.height, p.y); - - if (fConstrainer != null ) { - return fConstrainer.constrainPoint(p); - } - return p; - } - - private void moveSelection(int dx, int dy) { - FigureEnumeration figures = selection(); - while (figures.hasNextFigure()) { - figures.nextFigure().moveBy(dx, dy); - } - checkDamage(); - } - - /** - * Refreshes the drawing if there is some accumulated damage - */ - public synchronized void checkDamage() { - Iterator each = drawing().drawingChangeListeners(); - while (each.hasNext()) { - Object l = each.next(); - if (l instanceof DrawingView) { - ((DrawingView)l).repairDamage(); - } - } - } - - public void repairDamage() { - if (getDamage() != null) { - repaint(getDamage().x, getDamage().y, getDamage().width, getDamage().height); - setDamage(null); - } - } - - public void drawingInvalidated(DrawingChangeEvent e) { - Rectangle r = e.getInvalidatedRectangle(); - if (getDamage() == null) { - setDamage(r); - } - else { - // don't manipulate rectangle returned by getDamage() directly - // because it could be a cloned rectangle. - Rectangle damagedR = getDamage(); - damagedR.add(r); - setDamage(damagedR); - } - } - - public void drawingRequestUpdate(DrawingChangeEvent e) { - repairDamage(); - } - - public void drawingTitleChanged(DrawingChangeEvent e){ - } - - /** - * Paints the drawing view. The actual drawing is delegated to - * the current update strategy. - * @see Painter - */ - protected void paintComponent(Graphics g) { - if(getDisplayUpdate() != null) { - getDisplayUpdate().draw(g, this); - } - } - - /** - * Draws the contents of the drawing view. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void drawAll(Graphics g) { - boolean isPrinting = g instanceof PrintGraphics; - drawBackground(g); - if ((fBackgrounds != null) && !isPrinting) { - drawPainters(g, fBackgrounds); - } - drawDrawing(g); - if ((fForegrounds != null) && !isPrinting) { - drawPainters(g, fForegrounds); - } - if (!isPrinting) { - drawHandles(g); - } - } - - /** - * Draws the given figures. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - * No background is drawn. - */ - public void draw(Graphics g, FigureEnumeration fe) { - boolean isPrinting = g instanceof PrintGraphics; - //drawBackground(g); - if ((fBackgrounds != null) && !isPrinting) { - drawPainters(g, fBackgrounds); - } - drawing().draw(g, fe); - if ((fForegrounds != null) && !isPrinting) { - drawPainters(g, fForegrounds); - } - if (!isPrinting) { - drawHandles(g); - } - } - - /** - * Draws the currently active handles. - */ - public void drawHandles(Graphics g) { - HandleEnumeration he = selectionHandles(); - while (he.hasNextHandle()) { - (he.nextHandle()).draw(g); - } - } - - /** - * Draws the drawing. - */ - public void drawDrawing(Graphics g) { - drawing().draw(g); - } - - /** - * Draws the background. If a background pattern is set it - * is used to fill the background. Otherwise the background - * is filled in the background color. - */ - public void drawBackground(Graphics g) { - g.setColor(getBackground()); - g.fillRect(0, 0, getBounds().width, getBounds().height); - } - - protected void drawPainters(Graphics g, List v) { - for (int i = 0; i < v.size(); i++) { - ((Painter)v.get(i)).draw(g, this); - } - } - - /** - * Adds a background. - */ - public void addBackground(Painter painter) { - if (fBackgrounds == null) { - fBackgrounds = CollectionsFactory.current().createList(3); - } - fBackgrounds.add(painter); - repaint(); - } - - /** - * Removes a background. - */ - public void removeBackground(Painter painter) { - if (fBackgrounds != null) { - fBackgrounds.remove(painter); - } - repaint(); - } - - protected List getBackgrounds() { - return fBackgrounds; - } - - /** - * Removes a foreground. - */ - public void removeForeground(Painter painter) { - if (fForegrounds != null) { - fForegrounds.remove(painter); - } - repaint(); - } - - /** - * Adds a foreground. - */ - public void addForeground(Painter painter) { - if (fForegrounds == null) { - fForegrounds = CollectionsFactory.current().createList(3); - } - fForegrounds.add(painter); - repaint(); - } - - protected List getForegrounds() { - return fForegrounds; - } - - /** - * Freezes the view by acquiring the drawing lock. - * @see Drawing#lock - */ - public void freezeView() { - drawing().lock(); - } - - /** - * Unfreezes the view by releasing the drawing lock. - * @see Drawing#unlock - */ - public void unfreezeView() { - drawing().unlock(); - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - fSelection = CollectionsFactory.current().createList(); // could use lazy initialization instead - // could use lazy initialization instead - if (drawing() != null) { - drawing().addDrawingChangeListener(this); - } - fSelectionListeners= CollectionsFactory.current().createList(); - } - - protected void checkMinimumSize() { - Dimension d = getDrawingSize(); - Dimension v = getPreferredSize(); - - if (v.height < d.height || v.width < d.width) { - v.height = d.height + SCROLL_OFFSET; - v.width = d.width + SCROLL_OFFSET; - setPreferredSize(v); - } - } - - /** - * Return the size of the area occupied by the contained figures inside - * the drawing. This method is called by checkMinimumSize(). - */ - protected Dimension getDrawingSize() { - Dimension d = new Dimension(0, 0); - // ricardo_padilha: this test had to be introduced because a drawing view - // can be assigned a null drawing (see setDrawing() ). - if (drawing() != null) { - FigureEnumeration fe = drawing().figures(); - while (fe.hasNextFigure()) { - Rectangle r = fe.nextFigure().displayBox(); - d.width = Math.max(d.width, r.x+r.width); - d.height = Math.max(d.height, r.y+r.height); - } - } - return d; - } - - /** - * @see java.awt.Component#isFocusTraversable() - * @deprecated see super class - */ - public boolean isFocusTraversable() { - return true; - } - - public boolean isInteractive() { - return true; - } - - public void keyTyped(KeyEvent e) {} - public void keyReleased(KeyEvent e) {} - - /** - * Add a listener for selection changes. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void addFigureSelectionListener(FigureSelectionListener fsl) { - fSelectionListeners.add(fsl); - } - - /** - * Remove a listener for selection changes. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void removeFigureSelectionListener(FigureSelectionListener fsl) { - fSelectionListeners.remove(fsl); - } - - public int getDefaultDNDActions() { - return java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE; - } - - /***** Autoscroll support *****/ - private ASH ash = new ASH(10); - - public void autoscroll(java.awt.Point p) { - ash.autoscroll(p); - } - public Insets getAutoscrollInsets() { - return ash.getAutoscrollInsets(); - } - class ASH extends AutoscrollHelper { - public ASH(int margin) { - super(margin); - } - public Dimension getSize() { - return StandardDrawingView.this.getSize(); - } - public Rectangle getVisibleRect() { - return StandardDrawingView.this.getVisibleRect(); - } - public void scrollRectToVisible(Rectangle aRect) { - StandardDrawingView.this.scrollRectToVisible(aRect); - } - } - - public String toString() { - return "DrawingView Nr: " + myCounter; - } - - /** - * Default action when any uncaught exception bubbled from - * the mouse event handlers of the tools. Subclass may override it - * to provide other action. - */ - protected void handleMouseEventException(Throwable t) { - JOptionPane.showMessageDialog( - this, - t.getClass().getName() + " - " + t.getMessage(), - "Error", - JOptionPane.ERROR_MESSAGE); - t.printStackTrace(); - } - - public class DrawingViewMouseListener extends MouseAdapter { - /** - * Handles mouse down events. The event is delegated to the - * currently active tool. - */ - public void mousePressed(MouseEvent e) { - try { - requestFocus(); // JDK1.1 - Point p = constrainPoint(new Point(e.getX(), e.getY())); - setLastClick(new Point(e.getX(), e.getY())); - tool().mouseDown(e, p.x, p.y); - checkDamage(); - } - catch (Throwable t) { - handleMouseEventException(t); - } - } - - /** - * Handles mouse up events. The event is delegated to the - * currently active tool. - */ - public void mouseReleased(MouseEvent e) { - try { - Point p = constrainPoint(new Point(e.getX(), e.getY())); - tool().mouseUp(e, p.x, p.y); - checkDamage(); - } - catch (Throwable t) { - handleMouseEventException(t); - } - } - } - - public class DrawingViewMouseMotionListener implements MouseMotionListener { - /** - * Handles mouse drag events. The event is delegated to the - * currently active tool. - */ - public void mouseDragged(MouseEvent e) { - try { - Point p = constrainPoint(new Point(e.getX(), e.getY())); - tool().mouseDrag(e, p.x, p.y); - checkDamage(); - } - catch (Throwable t) { - handleMouseEventException(t); - } - } - - /** - * Handles mouse move events. The event is delegated to the - * currently active tool. - */ - public void mouseMoved(MouseEvent e) { - try { - tool().mouseMove(e, e.getX(), e.getY()); - } - catch (Throwable t) { - handleMouseEventException(t); - } - } - } - - public class DrawingViewKeyListener implements KeyListener { - private Command deleteCmd; - - public DrawingViewKeyListener() { - deleteCmd = createDeleteCommand(); - } - - /** - * Handles key down events. Cursor keys are handled - * by the view the other key events are delegated to the - * currently active tool. - */ - public void keyPressed(KeyEvent e) { - int code = e.getKeyCode(); - // Only act on nonModified keys... - int modifiers = e.getModifiers(); - if (modifiers == 0 && - ((code == KeyEvent.VK_BACK_SPACE) || - (code == KeyEvent.VK_DELETE))) { - if (deleteCmd.isExecutable()) { - deleteCmd.execute(); - //deleteCmd.viewSelectionChanged(this); - } - } - else if (modifiers == 0 && - ((code == KeyEvent.VK_DOWN) - || (code == KeyEvent.VK_UP) - || (code == KeyEvent.VK_RIGHT) - || (code == KeyEvent.VK_LEFT))) { - handleCursorKey(code); - } - else { - tool().keyDown(e, code); - } - checkDamage(); - } - - /** - * Handles cursor keys by moving all the selected figures - * one grid point in the cursor direction. - */ - protected void handleCursorKey(int key) { - int dx = 0, dy = 0; - int stepX = 1, stepY = 1; - // should consider Null Object. - if (fConstrainer != null) { - stepX = fConstrainer.getStepX(); - stepY = fConstrainer.getStepY(); - } - - switch (key) { - case KeyEvent.VK_DOWN: - dy = stepY; - break; - case KeyEvent.VK_UP: - dy = -stepY; - break; - case KeyEvent.VK_RIGHT: - dx = stepX; - break; - case KeyEvent.VK_LEFT: - dx = -stepX; - break; - } - moveSelection(dx, dy); - } - - public void keyTyped(KeyEvent event) { - // do nothing - } - - public void keyReleased(KeyEvent event) { - // do nothing - } - - protected Command createDeleteCommand() { - return new UndoableCommand(new DeleteCommand("Delete", editor())); - } - } - - protected DNDHelper createDNDHelper() { - return new DNDHelper(true, true) { - protected DrawingView view() { - return StandardDrawingView.this; - } - protected DrawingEditor editor() { - return StandardDrawingView.this.editor(); - } - }; - } - - protected DNDHelper getDNDHelper() { - if (dndh == null) { - dndh = createDNDHelper(); - } - return dndh; - } - - public DragSourceListener getDragSourceListener(){ - return getDNDHelper().getDragSourceListener(); - } - - public void DNDInitialize(DragGestureListener dgl){ - getDNDHelper().initialize(dgl); - } - - public void DNDDeinitialize() { - getDNDHelper().deinitialize(); - } - - /** - * Asks whether the drawing view is in read-only mode. If so, the user can't - * modify it using mouse or keyboard actions. Yet, it can still be modified - * from inside the program. - */ - public boolean isReadOnly() { - return myIsReadOnly; - } - - /** - * Determines whether the drawing view is in read-only mode. If so, the user can't - * modify it using mouse or keyboard actions. Yet, it can still be modified - * from inside the program. - */ - public void setReadOnly(boolean newIsReadOnly) { - if (newIsReadOnly != isReadOnly()) { - if (newIsReadOnly) { - removeMouseListener(mouseListener); - removeMouseMotionListener(motionListener); - removeKeyListener(keyListener); - } - else { - addMouseListener(mouseListener); - addMouseMotionListener(motionListener); - addKeyListener(keyListener); - } - - myIsReadOnly = newIsReadOnly; - } - } - - /** - * @see DrawingView#setCursor(Cursor) - * @see java.awt.Component#setCursor(java.awt.Cursor) - */ - public void setCursor(Cursor cursor) { - if (cursor instanceof java.awt.Cursor) { - super.setCursor((java.awt.Cursor) cursor); - } - } - - /** - * Gets the minimum dimension of the drawing.<br /> - * Fixed version (JHotDraw version has a bug). - * @see StandardDrawingView#getMinimumSize() - * @see java.awt.Component#getMinimumSize() - */ - public Dimension getMinimumSize() { - Rectangle r = new Rectangle(); - FigureEnumeration k = drawing().figures(); - while (k.hasNextFigure()) { - r.add(k.nextFigure().displayBox()); - } - return new Dimension(r.width, r.height); - } - - -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/StandardFigureSelection.java b/JHotDraw/src/CH/ifa/draw/standard/StandardFigureSelection.java deleted file mode 100644 index 53c9f5e55..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/StandardFigureSelection.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * @(#)FigureSelection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.util.*; - -import java.util.*; -import java.io.*; - -/** - * FigureSelection enables to transfer the selected figures - * to a clipboard.<p> - * Will soon be converted to the JDK 1.1 Transferable interface. - * - * @see Clipboard - * - * @version <$CURRENT_VERSION$> - */ - -public class StandardFigureSelection implements FigureSelection, Serializable { - - private byte[] fData; // flattend figures, ready to be resurrected - - /** - * The type identifier of the selection. - */ - public final static String TYPE = "CH.ifa.draw.Figures"; - - /** - * Constructes the Figure selection for the FigureEnumeration. - */ - public StandardFigureSelection(FigureEnumeration fe, int figureCount) { - // a FigureSelection is represented as a flattened ByteStream - // of figures. - ByteArrayOutputStream output = new ByteArrayOutputStream(200); - StorableOutput writer = new StorableOutput(output); - writer.writeInt(figureCount); - while (fe.hasNextFigure()) { - writer.writeStorable(fe.nextFigure()); - } - writer.close(); - fData = output.toByteArray(); - } - - /** - * Gets the type of the selection. - */ - public String getType() { - return TYPE; - } - - /** - * Gets the data of the selection. The result is returned - * as a FigureEnumeration of Figures. - * - * @return a copy of the figure selection. - */ - public Object getData(String type) { - if (type.equals(TYPE)) { - InputStream input = new ByteArrayInputStream(fData); - List result = CollectionsFactory.current().createList(10); - StorableInput reader = new StorableInput(input); - int numRead = 0; - try { - int count = reader.readInt(); - while (numRead < count) { - Figure newFigure = (Figure) reader.readStorable(); - result.add(newFigure); - numRead++; - } - } - catch (IOException e) { - System.err.println(e.toString()); - } - return new FigureEnumerator(result); - } - return null; - } - - public static FigureEnumeration duplicateFigures(FigureEnumeration toBeCloned, int figureCount) { - StandardFigureSelection duplicater = new StandardFigureSelection(toBeCloned, figureCount); - return (FigureEnumeration)duplicater.getData(duplicater.getType()); - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/standard/TextHolder.java b/JHotDraw/src/CH/ifa/draw/standard/TextHolder.java deleted file mode 100644 index b307c069d..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/TextHolder.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * @(#)TextHolder.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.*; -import CH.ifa.draw.framework.*; - -/** - * The interface of a figure that has some editable text contents. - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ - -public interface TextHolder { - - public Rectangle textDisplayBox(); - - /** - * Gets the text shown by the text figure. - */ - public String getText(); - - /** - * Sets the text shown by the text figure. - */ - public void setText(String newText); - - /** - * Tests whether the figure accepts typing. - */ - public boolean acceptsTyping(); - - /** - * Gets the number of columns to be overlaid when the figure is edited. - */ - public int overlayColumns(); - - /** - * Connects a text holder to another figure. - */ - public void connect(Figure connectedFigure); - - /** - * Disconnects a text holder from a connect figure. - */ - public void disconnect(Figure disconnectFigure); - - /** - * Gets the font. - */ - public Font getFont(); - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure(); -} diff --git a/JHotDraw/src/CH/ifa/draw/standard/ToggleGridCommand.java b/JHotDraw/src/CH/ifa/draw/standard/ToggleGridCommand.java deleted file mode 100644 index 72ee3f038..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ToggleGridCommand.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * @(#)ToggleGridCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import java.awt.Point; -import CH.ifa.draw.framework.*; - -/** - * A command to toggle the snap to grid behavior. - * - * @version <$CURRENT_VERSION$> - */ -public class ToggleGridCommand extends AbstractCommand { - - private Point fGrid; - - /** - * Constructs a toggle grid command. - * @param name the command name - * @param newDrawingEditor editor - * @param grid the grid size. A grid size of 1,1 turns grid snapping off. - */ - public ToggleGridCommand(String name, DrawingEditor newDrawingEditor, Point grid) { - super(name, newDrawingEditor); - fGrid = new Point(grid.x, grid.y); - } - - public void execute() { - super.execute(); - PointConstrainer grid = view().getConstrainer(); - if (grid != null) { - view().setConstrainer(null); - } - else { - view().setConstrainer(new GridConstrainer(fGrid.x, fGrid.y)); - } - } -} - - diff --git a/JHotDraw/src/CH/ifa/draw/standard/ToolButton.java b/JHotDraw/src/CH/ifa/draw/standard/ToolButton.java deleted file mode 100644 index 3c22f4586..000000000 --- a/JHotDraw/src/CH/ifa/draw/standard/ToolButton.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * @(#)ToolButton.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.standard; - -import CH.ifa.draw.util.*; -import CH.ifa.draw.framework.*; -import javax.swing.*; -import java.awt.*; -import java.util.EventObject; - -/** - * A PaletteButton that is associated with a tool. - * - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ -public class ToolButton extends PaletteButton implements ToolListener { - - private Tool myTool; - private PaletteIcon myIcon; - - public ToolButton(PaletteListener listener, String iconName, String name, Tool tool) { - super(listener); - tool.addToolListener(this); - setEnabled(tool.isUsable()); - - // use a Mediatracker to ensure that all the images are initially loaded - Iconkit kit = Iconkit.instance(); - if (kit == null) { - throw new JHotDrawRuntimeException("Iconkit instance isn't set"); - } - - Image im[] = new Image[3]; - im[0] = kit.loadImageResource(iconName+"1.gif"); - im[1] = kit.loadImageResource(iconName+"2.gif"); - im[2] = kit.loadImageResource(iconName+"3.gif"); - - MediaTracker tracker = new MediaTracker(this); - for (int i = 0; i < 3; i++) { - tracker.addImage(im[i], i); - } - try { - tracker.waitForAll(); - } - catch (Exception e) { - // ignore exception - } - - setPaletteIcon(new PaletteIcon(new Dimension(24,24), im[0], im[1], im[2])); - setTool(tool); - setName(name); - - // avoid null pointer exception if image could not be loaded - if (im[0] != null) { - setIcon(new ImageIcon(im[0])); - } - if (im[1] != null) { - setPressedIcon(new ImageIcon(im[1])); - } - if (im[2] != null) { - setSelectedIcon(new ImageIcon(im[2])); - } - setToolTipText(name); - } - - public Tool tool() { - return myTool; - } - - public String name() { - return getName(); - } - - public Object attributeValue() { - return tool(); - } - - public Dimension getMinimumSize() { - return new Dimension(getPaletteIcon().getWidth(), getPaletteIcon().getHeight()); - } - - public Dimension getPreferredSize() { - return new Dimension(getPaletteIcon().getWidth(), getPaletteIcon().getHeight()); - } - - public Dimension getMaximumSize() { - return new Dimension(getPaletteIcon().getWidth(), getPaletteIcon().getHeight()); - } - -// Not necessary anymore in JFC due to the support of Icons in JButton -/* - public void paintBackground(Graphics g) { } - - public void paintNormal(Graphics g) { - if (fIcon.normal() != null) - g.drawImage(fIcon.normal(), 0, 0, this); - } - - public void paintPressed(Graphics g) { - if (fIcon.pressed() != null) - g.drawImage(fIcon.pressed(), 0, 0, this); - } -*/ - public void paintSelected(Graphics g) { - if (getPaletteIcon().selected() != null) { - g.drawImage(getPaletteIcon().selected(), 0, 0, this); - } - } - - public void paint(Graphics g) { - // selecting does not work as expected with JFC1.1 - // see JavaBug: 4228035, 4233965 - if (isSelected()) { - paintSelected(g); - } - else { - super.paint(g); - } - } - - public void toolUsable(EventObject toolEvent) { - setEnabled(true); - } - - public void toolUnusable(EventObject toolEvent) { - setEnabled(false); - setSelected(false); - } - - public void toolActivated(EventObject toolEvent) { - } - - public void toolDeactivated(EventObject toolEvent) { - } - - public void toolEnabled(EventObject toolEvent) { - setEnabled(true); - } - - public void toolDisabled(EventObject toolEvent) { - setEnabled(false); - } - - protected PaletteIcon getPaletteIcon() { - return myIcon; - } - - private void setPaletteIcon(PaletteIcon newIcon) { - myIcon = newIcon; - } - - private void setTool(Tool newTool) { - myTool = newTool; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/AllTests.java deleted file mode 100644 index 499dcf8b9..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/AllTests.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test"); - //$JUnit-BEGIN$ - - suite.addTest(CH.ifa.draw.test.contrib.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.figures.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.framework.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.samples.javadraw.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.samples.minimap.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.samples.net.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.samples.nothing.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.samples.pert.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.standard.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.util.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.util.collections.jdk11.AllTests.suite()); - suite.addTest(CH.ifa.draw.test.util.collections.jdk12.AllTests.suite()); - - - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/JHDTestCase.java b/JHotDraw/src/CH/ifa/draw/test/JHDTestCase.java deleted file mode 100644 index b138469cc..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/JHDTestCase.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test; - -import junit.framework.TestCase; -import CH.ifa.draw.application.DrawApplication; -import CH.ifa.draw.samples.javadraw.JavaDrawApp; - -public class JHDTestCase extends TestCase { - public JavaDrawApp myDrawingEditor; - - public JHDTestCase(String name) { - super(name); - } - - protected void setUp() throws Exception { - myDrawingEditor = new JavaDrawApp("TestApplication"); - } - - protected void tearDown() throws Exception { - myDrawingEditor.setVisible(false); - myDrawingEditor = null; - } - - public DrawApplication getDrawingEditor() { - return myDrawingEditor; - } - - /** - * Some tests might want start from scratch with a new DrawingEditor - * (to avoid side-effects from previous test) - */ - public JavaDrawApp createNewDrawingEditor() { - return new JavaDrawApp("TestApplication"); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/contrib/AllTests.java deleted file mode 100644 index 39647f86a..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/AllTests.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * @(#)AllTests.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.contrib"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(CTXCommandMenuTest.class)); - suite.addTest(new TestSuite(CTXWindowMenuTest.class)); - suite.addTest(new TestSuite(ChopDiamondConnectorTest.class)); - suite.addTest(new TestSuite(ChopPolygonConnectorTest.class)); - suite.addTest(new TestSuite(ClippingUpdateStrategyTest.class)); - suite.addTest(new TestSuite(CommandCheckBoxMenuItemTest.class)); - suite.addTest(new TestSuite(CommandMenuItemTest.class)); - suite.addTest(new TestSuite(ComponentFigureTest.class)); - suite.addTest(new TestSuite(CompositeFigureCreationToolTest.class)); - suite.addTest(new TestSuite(CustomSelectionToolTest.class)); - suite.addTest(new TestSuite(CustomToolBarTest.class)); - suite.addTest(new TestSuite(DesktopEventServiceTest.class)); - suite.addTest(new TestSuite(DiamondFigureTest.class)); - suite.addTest(new TestSuite(FloatingTextAreaTest.class)); - suite.addTest(new TestSuite(GraphicalCompositeFigureTest.class)); - suite.addTest(new TestSuite(HelperTest.class)); - suite.addTest(new TestSuite(JPanelDesktopTest.class)); - suite.addTest(new TestSuite(JScrollPaneDesktopTest.class)); - suite.addTest(new TestSuite(MDIDesktopPaneTest.class)); - suite.addTest(new TestSuite(MDI_DrawApplicationTest.class)); - suite.addTest(new TestSuite(MiniMapViewTest.class)); - suite.addTest(new TestSuite(NestedCreationToolTest.class)); - suite.addTest(new TestSuite(PolygonFigureTest.class)); - suite.addTest(new TestSuite(PolygonHandleTest.class)); - suite.addTest(new TestSuite(PolygonToolTest.class)); - suite.addTest(new TestSuite(SVGDrawAppTest.class)); - suite.addTest(new TestSuite(SVGStorageFormatTest.class)); - suite.addTest(new TestSuite(SimpleLayouterTest.class)); - suite.addTest(new TestSuite(SplitConnectionToolTest.class)); - suite.addTest(new TestSuite(StandardLayouterTest.class)); - suite.addTest(new TestSuite(TextAreaFigureTest.class)); - suite.addTest(new TestSuite(TextAreaToolTest.class)); - suite.addTest(new TestSuite(TriangleFigureTest.class)); - suite.addTest(new TestSuite(WindowMenuTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/CTXCommandMenuTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/CTXCommandMenuTest.java deleted file mode 100644 index 037be8faa..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/CTXCommandMenuTest.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.CTXCommandMenu; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CTXCommandMenuTest is generated by - * JUnitDoclet to hold the tests for CTXCommandMenu. - * @see CH.ifa.draw.contrib.CTXCommandMenu - */ -// JUnitDoclet end javadoc_class -public class CTXCommandMenuTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CTXCommandMenu ctxcommandmenu; - // JUnitDoclet end class - - /** - * Constructor CTXCommandMenuTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CTXCommandMenuTest(String name) { - // JUnitDoclet begin method CTXCommandMenuTest - super(name); - // JUnitDoclet end method CTXCommandMenuTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.CTXCommandMenu createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.CTXCommandMenu("TestCTXCommandMenu"); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - ctxcommandmenu = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - ctxcommandmenu = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.contrib.CTXCommandMenu#add(CH.ifa.draw.util.Command) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method addCheckItem() - /** - * Method testAddCheckItem is testing addCheckItem - * @see CH.ifa.draw.contrib.CTXCommandMenu#addCheckItem(CH.ifa.draw.util.Command) - */ - // JUnitDoclet end javadoc_method addCheckItem() - public void testAddCheckItem() throws Exception { - // JUnitDoclet begin method addCheckItem - // JUnitDoclet end method addCheckItem - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.contrib.CTXCommandMenu#remove(CH.ifa.draw.util.Command) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method enable() - /** - * Method testEnable is testing enable - * @see CH.ifa.draw.contrib.CTXCommandMenu#enable(java.lang.String, boolean) - */ - // JUnitDoclet end javadoc_method enable() - public void testEnable() throws Exception { - // JUnitDoclet begin method enable - // JUnitDoclet end method enable - } - - // JUnitDoclet begin javadoc_method checkEnabled() - /** - * Method testCheckEnabled is testing checkEnabled - * @see CH.ifa.draw.contrib.CTXCommandMenu#checkEnabled() - */ - // JUnitDoclet end javadoc_method checkEnabled() - public void testCheckEnabled() throws Exception { - // JUnitDoclet begin method checkEnabled - // JUnitDoclet end method checkEnabled - } - - // JUnitDoclet begin javadoc_method actionPerformed() - /** - * Method testActionPerformed is testing actionPerformed - * @see CH.ifa.draw.contrib.CTXCommandMenu#actionPerformed(java.awt.event.ActionEvent) - */ - // JUnitDoclet end javadoc_method actionPerformed() - public void testActionPerformed() throws Exception { - // JUnitDoclet begin method actionPerformed - // JUnitDoclet end method actionPerformed - } - - // JUnitDoclet begin javadoc_method commandExecuted() - /** - * Method testCommandExecuted is testing commandExecuted - * @see CH.ifa.draw.contrib.CTXCommandMenu#commandExecuted(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecuted() - public void testCommandExecuted() throws Exception { - // JUnitDoclet begin method commandExecuted - // JUnitDoclet end method commandExecuted - } - - // JUnitDoclet begin javadoc_method commandExecutable() - /** - * Method testCommandExecutable is testing commandExecutable - * @see CH.ifa.draw.contrib.CTXCommandMenu#commandExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecutable() - public void testCommandExecutable() throws Exception { - // JUnitDoclet begin method commandExecutable - // JUnitDoclet end method commandExecutable - } - - // JUnitDoclet begin javadoc_method commandNotExecutable() - /** - * Method testCommandNotExecutable is testing commandNotExecutable - * @see CH.ifa.draw.contrib.CTXCommandMenu#commandNotExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandNotExecutable() - public void testCommandNotExecutable() throws Exception { - // JUnitDoclet begin method commandNotExecutable - // JUnitDoclet end method commandNotExecutable - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/CTXWindowMenuTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/CTXWindowMenuTest.java deleted file mode 100644 index 48a1cab61..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/CTXWindowMenuTest.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.application.DrawApplication; -import CH.ifa.draw.contrib.CTXWindowMenu; -import CH.ifa.draw.contrib.MDIDesktopPane; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CTXWindowMenuTest is generated by - * JUnitDoclet to hold the tests for CTXWindowMenu. - * @see CH.ifa.draw.contrib.CTXWindowMenu - */ -// JUnitDoclet end javadoc_class -public class CTXWindowMenuTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CTXWindowMenu ctxwindowmenu; - // JUnitDoclet end class - - /** - * Constructor CTXWindowMenuTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CTXWindowMenuTest(String name) { - // JUnitDoclet begin method CTXWindowMenuTest - super(name); - // JUnitDoclet end method CTXWindowMenuTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.CTXWindowMenu createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - MDIDesktopPane desktop = (MDIDesktopPane) (((DrawApplication)getDrawingEditor()).getDesktop()); - return new CH.ifa.draw.contrib.CTXWindowMenu("TestCTXWindowMenu", desktop, getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - ctxwindowmenu = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - ctxwindowmenu = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/ChopDiamondConnectorTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/ChopDiamondConnectorTest.java deleted file mode 100644 index 7eca31974..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/ChopDiamondConnectorTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.ChopDiamondConnector; -import junit.framework.TestCase; - -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChopDiamondConnectorTest is generated by - * JUnitDoclet to hold the tests for ChopDiamondConnector. - * @see CH.ifa.draw.contrib.ChopDiamondConnector - */ -// JUnitDoclet end javadoc_class -public class ChopDiamondConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChopDiamondConnector chopdiamondconnector; - // JUnitDoclet end class - - /** - * Constructor ChopDiamondConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChopDiamondConnectorTest(String name) { - // JUnitDoclet begin method ChopDiamondConnectorTest - super(name); - // JUnitDoclet end method ChopDiamondConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.ChopDiamondConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.ChopDiamondConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - chopdiamondconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - chopdiamondconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/ChopPolygonConnectorTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/ChopPolygonConnectorTest.java deleted file mode 100644 index 8d62df16f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/ChopPolygonConnectorTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.ChopPolygonConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChopPolygonConnectorTest is generated by - * JUnitDoclet to hold the tests for ChopPolygonConnector. - * @see CH.ifa.draw.contrib.ChopPolygonConnector - */ -// JUnitDoclet end javadoc_class -public class ChopPolygonConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChopPolygonConnector choppolygonconnector; - // JUnitDoclet end class - - /** - * Constructor ChopPolygonConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChopPolygonConnectorTest(String name) { - // JUnitDoclet begin method ChopPolygonConnectorTest - super(name); - // JUnitDoclet end method ChopPolygonConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.ChopPolygonConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.ChopPolygonConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - choppolygonconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - choppolygonconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/ClippingUpdateStrategyTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/ClippingUpdateStrategyTest.java deleted file mode 100644 index 27d06c5e2..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/ClippingUpdateStrategyTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.ClippingUpdateStrategy; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ClippingUpdateStrategyTest is generated by - * JUnitDoclet to hold the tests for ClippingUpdateStrategy. - * @see CH.ifa.draw.contrib.ClippingUpdateStrategy - */ -// JUnitDoclet end javadoc_class -public class ClippingUpdateStrategyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ClippingUpdateStrategy clippingupdatestrategy; - // JUnitDoclet end class - - /** - * Constructor ClippingUpdateStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ClippingUpdateStrategyTest(String name) { - // JUnitDoclet begin method ClippingUpdateStrategyTest - super(name); - // JUnitDoclet end method ClippingUpdateStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.ClippingUpdateStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.ClippingUpdateStrategy(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - clippingupdatestrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - clippingupdatestrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.contrib.ClippingUpdateStrategy#draw(java.awt.Graphics, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/CommandCheckBoxMenuItemTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/CommandCheckBoxMenuItemTest.java deleted file mode 100644 index 216ac4fed..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/CommandCheckBoxMenuItemTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.CommandCheckBoxMenuItem; -import CH.ifa.draw.standard.DeleteCommand; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.Command; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandCheckBoxMenuItemTest is generated by - * JUnitDoclet to hold the tests for CommandCheckBoxMenuItem. - * @see CH.ifa.draw.contrib.CommandCheckBoxMenuItem - */ -// JUnitDoclet end javadoc_class -public class CommandCheckBoxMenuItemTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandCheckBoxMenuItem commandcheckboxmenuitem; - // JUnitDoclet end class - - /** - * Constructor CommandCheckBoxMenuItemTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandCheckBoxMenuItemTest(String name) { - // JUnitDoclet begin method CommandCheckBoxMenuItemTest - super(name); - // JUnitDoclet end method CommandCheckBoxMenuItemTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.CommandCheckBoxMenuItem createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Command cmd = new DeleteCommand("TestDelete", getDrawingEditor()); - return new CH.ifa.draw.contrib.CommandCheckBoxMenuItem(cmd); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandcheckboxmenuitem = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandcheckboxmenuitem = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setCommand() - /** - * Method testSetGetCommand is testing setCommand - * and getCommand together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.CommandCheckBoxMenuItem#setCommand(CH.ifa.draw.util.Command) - * @see CH.ifa.draw.contrib.CommandCheckBoxMenuItem#getCommand() - */ - // JUnitDoclet end javadoc_method setCommand() - public void testSetGetCommand() throws Exception { - // JUnitDoclet begin method setCommand getCommand - CH.ifa.draw.util.Command[] tests = { new DeleteCommand("TestDelete", getDrawingEditor()), null }; - - for (int i = 0; i < tests.length; i++) { - commandcheckboxmenuitem.setCommand(tests[i]); - assertEquals(tests[i], commandcheckboxmenuitem.getCommand()); - } - // JUnitDoclet end method setCommand getCommand - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/CommandMenuItemTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/CommandMenuItemTest.java deleted file mode 100644 index a16e691f1..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/CommandMenuItemTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.CommandMenuItem; -import CH.ifa.draw.standard.DeleteCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandMenuItemTest is generated by - * JUnitDoclet to hold the tests for CommandMenuItem. - * @see CH.ifa.draw.contrib.CommandMenuItem - */ -// JUnitDoclet end javadoc_class -public class CommandMenuItemTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandMenuItem commandmenuitem; - // JUnitDoclet end class - - /** - * Constructor CommandMenuItemTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandMenuItemTest(String name) { - // JUnitDoclet begin method CommandMenuItemTest - super(name); - // JUnitDoclet end method CommandMenuItemTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.CommandMenuItem createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.CommandMenuItem(new DeleteCommand("TestDelete", getDrawingEditor())); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandmenuitem = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandmenuitem = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setCommand() - /** - * Method testSetGetCommand is testing setCommand - * and getCommand together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.CommandMenuItem#setCommand(CH.ifa.draw.util.Command) - * @see CH.ifa.draw.contrib.CommandMenuItem#getCommand() - */ - // JUnitDoclet end javadoc_method setCommand() - public void testSetGetCommand() throws Exception { - // JUnitDoclet begin method setCommand getCommand - CH.ifa.draw.util.Command[] tests = { new CH.ifa.draw.standard.DeleteCommand("TestDelete", getDrawingEditor()), null }; - - for (int i = 0; i < tests.length; i++) { - commandmenuitem.setCommand(tests[i]); - assertEquals(tests[i], commandmenuitem.getCommand()); - } - // JUnitDoclet end method setCommand getCommand - } - - // JUnitDoclet begin javadoc_method actionPerformed() - /** - * Method testActionPerformed is testing actionPerformed - * @see CH.ifa.draw.contrib.CommandMenuItem#actionPerformed(java.awt.event.ActionEvent) - */ - // JUnitDoclet end javadoc_method actionPerformed() - public void testActionPerformed() throws Exception { - // JUnitDoclet begin method actionPerformed - // JUnitDoclet end method actionPerformed - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/ComponentFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/ComponentFigureTest.java deleted file mode 100644 index c1bd415a1..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/ComponentFigureTest.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import javax.swing.JButton; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.ComponentFigure; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ComponentFigureTest is generated by - * JUnitDoclet to hold the tests for ComponentFigure. - * @see CH.ifa.draw.contrib.ComponentFigure - */ -// JUnitDoclet end javadoc_class -public class ComponentFigureTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ComponentFigure componentfigure; - // JUnitDoclet end class - - /** - * Constructor ComponentFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ComponentFigureTest(String name) { - // JUnitDoclet begin method ComponentFigureTest - super(name); - // JUnitDoclet end method ComponentFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.ComponentFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.ComponentFigure(new JButton("TestComponent")); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - componentfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - componentfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.contrib.ComponentFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.contrib.ComponentFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.contrib.ComponentFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method getComponent() - /** - * Method testGetComponent is testing getComponent - * @see CH.ifa.draw.contrib.ComponentFigure#getComponent() - */ - // JUnitDoclet end javadoc_method getComponent() - public void testGetComponent() throws Exception { - // JUnitDoclet begin method getComponent - // JUnitDoclet end method getComponent - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.contrib.ComponentFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/CompositeFigureCreationToolTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/CompositeFigureCreationToolTest.java deleted file mode 100644 index dd59526ab..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/CompositeFigureCreationToolTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.CompositeFigureCreationTool; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CompositeFigureCreationToolTest is generated by - * JUnitDoclet to hold the tests for CompositeFigureCreationTool. - * @see CH.ifa.draw.contrib.CompositeFigureCreationTool - */ -// JUnitDoclet end javadoc_class -public class CompositeFigureCreationToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CompositeFigureCreationTool compositefigurecreationtool; - // JUnitDoclet end class - - /** - * Constructor CompositeFigureCreationToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CompositeFigureCreationToolTest(String name) { - // JUnitDoclet begin method CompositeFigureCreationToolTest - super(name); - // JUnitDoclet end method CompositeFigureCreationToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.CompositeFigureCreationTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.CompositeFigureCreationTool(getDrawingEditor(), new RectangleFigure()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - compositefigurecreationtool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - compositefigurecreationtool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.contrib.CompositeFigureCreationTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see CH.ifa.draw.contrib.CompositeFigureCreationTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.contrib.CompositeFigureCreationTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method getContainerFigure() - /** - * Method testGetContainerFigure is testing getContainerFigure - * @see CH.ifa.draw.contrib.CompositeFigureCreationTool#getContainerFigure() - */ - // JUnitDoclet end javadoc_method getContainerFigure() - public void testGetContainerFigure() throws Exception { - // JUnitDoclet begin method getContainerFigure - // JUnitDoclet end method getContainerFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/CustomSelectionToolTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/CustomSelectionToolTest.java deleted file mode 100644 index ea39b2ea1..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/CustomSelectionToolTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.CustomSelectionTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CustomSelectionToolTest is generated by - * JUnitDoclet to hold the tests for CustomSelectionTool. - * @see CH.ifa.draw.contrib.CustomSelectionTool - */ -// JUnitDoclet end javadoc_class -public class CustomSelectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CustomSelectionTool customselectiontool; - // JUnitDoclet end class - - /** - * Constructor CustomSelectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CustomSelectionToolTest(String name) { - // JUnitDoclet begin method CustomSelectionToolTest - super(name); - // JUnitDoclet end method CustomSelectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.CustomSelectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.CustomSelectionTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - customselectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - customselectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.contrib.CustomSelectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.contrib.CustomSelectionTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.contrib.CustomSelectionTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/CustomToolBarTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/CustomToolBarTest.java deleted file mode 100644 index cfc303015..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/CustomToolBarTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.CustomToolBar; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CustomToolBarTest is generated by - * JUnitDoclet to hold the tests for CustomToolBar. - * @see CH.ifa.draw.contrib.CustomToolBar - */ -// JUnitDoclet end javadoc_class -public class CustomToolBarTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CustomToolBar customtoolbar; - // JUnitDoclet end class - - /** - * Constructor CustomToolBarTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CustomToolBarTest(String name) { - // JUnitDoclet begin method CustomToolBarTest - super(name); - // JUnitDoclet end method CustomToolBarTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.CustomToolBar createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.CustomToolBar(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - customtoolbar = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - customtoolbar = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method switchToolBar() - /** - * Method testSwitchToolBar is testing switchToolBar - * @see CH.ifa.draw.contrib.CustomToolBar#switchToolBar() - */ - // JUnitDoclet end javadoc_method switchToolBar() - public void testSwitchToolBar() throws Exception { - // JUnitDoclet begin method switchToolBar - // JUnitDoclet end method switchToolBar - } - - // JUnitDoclet begin javadoc_method switchToEditTools() - /** - * Method testSwitchToEditTools is testing switchToEditTools - * @see CH.ifa.draw.contrib.CustomToolBar#switchToEditTools() - */ - // JUnitDoclet end javadoc_method switchToEditTools() - public void testSwitchToEditTools() throws Exception { - // JUnitDoclet begin method switchToEditTools - // JUnitDoclet end method switchToEditTools - } - - // JUnitDoclet begin javadoc_method switchToStandardTools() - /** - * Method testSwitchToStandardTools is testing switchToStandardTools - * @see CH.ifa.draw.contrib.CustomToolBar#switchToStandardTools() - */ - // JUnitDoclet end javadoc_method switchToStandardTools() - public void testSwitchToStandardTools() throws Exception { - // JUnitDoclet begin method switchToStandardTools - // JUnitDoclet end method switchToStandardTools - } - - // JUnitDoclet begin javadoc_method activateTools() - /** - * Method testActivateTools is testing activateTools - * @see CH.ifa.draw.contrib.CustomToolBar#activateTools() - */ - // JUnitDoclet end javadoc_method activateTools() - public void testActivateTools() throws Exception { - // JUnitDoclet begin method activateTools - // JUnitDoclet end method activateTools - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.contrib.CustomToolBar#add(java.awt.Component) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/DesktopEventServiceTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/DesktopEventServiceTest.java deleted file mode 100644 index 033f0437e..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/DesktopEventServiceTest.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import java.awt.Container; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.Desktop; -import CH.ifa.draw.contrib.DesktopEventService; -import CH.ifa.draw.contrib.JPanelDesktop; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase DesktopEventServiceTest is generated by - * JUnitDoclet to hold the tests for DesktopEventService. - * @see CH.ifa.draw.contrib.DesktopEventService - */ -// JUnitDoclet end javadoc_class -public class DesktopEventServiceTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DesktopEventService desktopeventservice; - // JUnitDoclet end class - - /** - * Constructor DesktopEventServiceTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DesktopEventServiceTest(String name) { - // JUnitDoclet begin method DesktopEventServiceTest - super(name); - // JUnitDoclet end method DesktopEventServiceTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.DesktopEventService createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Desktop desktop = new JPanelDesktop(getDrawingEditor()); - return new CH.ifa.draw.contrib.DesktopEventService(desktop, ((Container)desktop)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - desktopeventservice = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - desktopeventservice = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addComponent() - /** - * Method testAddComponent is testing addComponent - * @see CH.ifa.draw.contrib.DesktopEventService#addComponent(java.awt.Component) - */ - // JUnitDoclet end javadoc_method addComponent() - public void testAddComponent() throws Exception { - // JUnitDoclet begin method addComponent - // JUnitDoclet end method addComponent - } - - // JUnitDoclet begin javadoc_method removeComponent() - /** - * Method testRemoveComponent is testing removeComponent - * @see CH.ifa.draw.contrib.DesktopEventService#removeComponent(CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method removeComponent() - public void testRemoveComponent() throws Exception { - // JUnitDoclet begin method removeComponent - // JUnitDoclet end method removeComponent - } - - // JUnitDoclet begin javadoc_method removeAllComponents() - /** - * Method testRemoveAllComponents is testing removeAllComponents - * @see CH.ifa.draw.contrib.DesktopEventService#removeAllComponents() - */ - // JUnitDoclet end javadoc_method removeAllComponents() - public void testRemoveAllComponents() throws Exception { - // JUnitDoclet begin method removeAllComponents - // JUnitDoclet end method removeAllComponents - } - - // JUnitDoclet begin javadoc_method addDesktopListener() - /** - * Method testAddDesktopListener is testing addDesktopListener - * @see CH.ifa.draw.contrib.DesktopEventService#addDesktopListener(CH.ifa.draw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method addDesktopListener() - public void testAddDesktopListener() throws Exception { - // JUnitDoclet begin method addDesktopListener - // JUnitDoclet end method addDesktopListener - } - - // JUnitDoclet begin javadoc_method removeDesktopListener() - /** - * Method testRemoveDesktopListener is testing removeDesktopListener - * @see CH.ifa.draw.contrib.DesktopEventService#removeDesktopListener(CH.ifa.draw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method removeDesktopListener() - public void testRemoveDesktopListener() throws Exception { - // JUnitDoclet begin method removeDesktopListener - // JUnitDoclet end method removeDesktopListener - } - - // JUnitDoclet begin javadoc_method getDrawingViews() - /** - * Method testGetDrawingViews is testing getDrawingViews - * @see CH.ifa.draw.contrib.DesktopEventService#getDrawingViews(java.awt.Component[]) - */ - // JUnitDoclet end javadoc_method getDrawingViews() - public void testGetDrawingViews() throws Exception { - // JUnitDoclet begin method getDrawingViews - // JUnitDoclet end method getDrawingViews - } - - // JUnitDoclet begin javadoc_method getActiveDrawingView() - /** - * Method testGetActiveDrawingView is testing getActiveDrawingView - * @see CH.ifa.draw.contrib.DesktopEventService#getActiveDrawingView() - */ - // JUnitDoclet end javadoc_method getActiveDrawingView() - public void testGetActiveDrawingView() throws Exception { - // JUnitDoclet begin method getActiveDrawingView - // JUnitDoclet end method getActiveDrawingView - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/DiamondFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/DiamondFigureTest.java deleted file mode 100644 index b02ca7552..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/DiamondFigureTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.DiamondFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DiamondFigureTest is generated by - * JUnitDoclet to hold the tests for DiamondFigure. - * @see CH.ifa.draw.contrib.DiamondFigure - */ -// JUnitDoclet end javadoc_class -public class DiamondFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DiamondFigure diamondfigure; - // JUnitDoclet end class - - /** - * Constructor DiamondFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DiamondFigureTest(String name) { - // JUnitDoclet begin method DiamondFigureTest - super(name); - // JUnitDoclet end method DiamondFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.DiamondFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.DiamondFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - diamondfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - diamondfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.contrib.DiamondFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see CH.ifa.draw.contrib.DiamondFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see CH.ifa.draw.contrib.DiamondFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method chop() - /** - * Method testChop is testing chop - * @see CH.ifa.draw.contrib.DiamondFigure#chop(java.awt.Point) - */ - // JUnitDoclet end javadoc_method chop() - public void testChop() throws Exception { - // JUnitDoclet begin method chop - // JUnitDoclet end method chop - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see CH.ifa.draw.contrib.DiamondFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/FloatingTextAreaTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/FloatingTextAreaTest.java deleted file mode 100644 index 785dde0af..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/FloatingTextAreaTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.FloatingTextArea; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FloatingTextAreaTest is generated by - * JUnitDoclet to hold the tests for FloatingTextArea. - * @see CH.ifa.draw.contrib.FloatingTextArea - */ -// JUnitDoclet end javadoc_class -public class FloatingTextAreaTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FloatingTextArea floatingtextarea; - // JUnitDoclet end class - - /** - * Constructor FloatingTextAreaTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FloatingTextAreaTest(String name) { - // JUnitDoclet begin method FloatingTextAreaTest - super(name); - // JUnitDoclet end method FloatingTextAreaTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.FloatingTextArea createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.FloatingTextArea(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - floatingtextarea = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - floatingtextarea = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createOverlay() - /** - * Method testCreateOverlay is testing createOverlay - * @see CH.ifa.draw.contrib.FloatingTextArea#createOverlay(java.awt.Container) - */ - // JUnitDoclet end javadoc_method createOverlay() - public void testCreateOverlay() throws Exception { - // JUnitDoclet begin method createOverlay - // JUnitDoclet end method createOverlay - } - - // JUnitDoclet begin javadoc_method setBounds() - /** - * Method testSetBounds is testing setBounds - * @see CH.ifa.draw.contrib.FloatingTextArea#setBounds(java.awt.Rectangle, java.lang.String) - */ - // JUnitDoclet end javadoc_method setBounds() - public void testSetBounds() throws Exception { - // JUnitDoclet begin method setBounds - // JUnitDoclet end method setBounds - } - - // JUnitDoclet begin javadoc_method getText() - /** - * Method testGetText is testing getText - * @see CH.ifa.draw.contrib.FloatingTextArea#getText() - */ - // JUnitDoclet end javadoc_method getText() - public void testGetText() throws Exception { - // JUnitDoclet begin method getText - // JUnitDoclet end method getText - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see CH.ifa.draw.contrib.FloatingTextArea#getPreferredSize(int) - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method endOverlay() - /** - * Method testEndOverlay is testing endOverlay - * @see CH.ifa.draw.contrib.FloatingTextArea#endOverlay() - */ - // JUnitDoclet end javadoc_method endOverlay() - public void testEndOverlay() throws Exception { - // JUnitDoclet begin method endOverlay - // JUnitDoclet end method endOverlay - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/GraphicalCompositeFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/GraphicalCompositeFigureTest.java deleted file mode 100644 index 6afc1ef65..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/GraphicalCompositeFigureTest.java +++ /dev/null @@ -1,275 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import java.awt.Point; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import CH.ifa.draw.contrib.GraphicalCompositeFigure; -import CH.ifa.draw.contrib.SimpleLayouter; -import CH.ifa.draw.figures.RectangleFigure; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase GraphicalCompositeFigureTest is generated by - * JUnitDoclet to hold the tests for GraphicalCompositeFigure. - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure - */ -// JUnitDoclet end javadoc_class -public class GraphicalCompositeFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GraphicalCompositeFigure graphicalcompositefigure; - // JUnitDoclet end class - - /** - * Constructor GraphicalCompositeFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GraphicalCompositeFigureTest(String name) { - // JUnitDoclet begin method GraphicalCompositeFigureTest - super(name); - // JUnitDoclet end method GraphicalCompositeFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.GraphicalCompositeFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.GraphicalCompositeFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - graphicalcompositefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - graphicalcompositefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method clone() - /** - * Method testClone is testing clone - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#clone() - */ - // JUnitDoclet end javadoc_method clone() - public void testClone() throws Exception { - // JUnitDoclet begin method clone - // JUnitDoclet end method clone - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method update() - /** - * Method testUpdate is testing update - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#update() - */ - // JUnitDoclet end javadoc_method update() - public void testUpdate() throws Exception { - // JUnitDoclet begin method update - // JUnitDoclet end method update - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method setPresentationFigure() - /** - * Method testSetGetPresentationFigure is testing setPresentationFigure - * and getPresentationFigure together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#setPresentationFigure(CH.ifa.draw.framework.Figure) - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#getPresentationFigure() - */ - // JUnitDoclet end javadoc_method setPresentationFigure() - public void testSetGetPresentationFigure() throws Exception { - // JUnitDoclet begin method setPresentationFigure getPresentationFigure - CH.ifa.draw.framework.Figure[] tests = { new RectangleFigure(new Point(10, 10), new Point(100, 100)), null }; - - for (int i = 0; i < tests.length; i++) { - graphicalcompositefigure.setPresentationFigure(tests[i]); - assertEquals(tests[i], graphicalcompositefigure.getPresentationFigure()); - } - // JUnitDoclet end method setPresentationFigure getPresentationFigure - } - - // JUnitDoclet begin javadoc_method layout() - /** - * Method testLayout is testing layout - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#layout() - */ - // JUnitDoclet end javadoc_method layout() - public void testLayout() throws Exception { - // JUnitDoclet begin method layout - // JUnitDoclet end method layout - } - - // JUnitDoclet begin javadoc_method setLayouter() - /** - * Method testSetGetLayouter is testing setLayouter - * and getLayouter together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#setLayouter(CH.ifa.draw.contrib.Layouter) - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#getLayouter() - */ - // JUnitDoclet end javadoc_method setLayouter() - public void testSetGetLayouter() throws Exception { - // JUnitDoclet begin method setLayouter getLayouter - CH.ifa.draw.contrib.Layouter[] tests = { new SimpleLayouter(graphicalcompositefigure), null }; - - for (int i = 0; i < tests.length; i++) { - graphicalcompositefigure.setLayouter(tests[i]); - assertEquals(tests[i], graphicalcompositefigure.getLayouter()); - } - // JUnitDoclet end method setLayouter getLayouter - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#figureRequestRemove(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.contrib.GraphicalCompositeFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/HelperTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/HelperTest.java deleted file mode 100644 index 1517c28ea..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/HelperTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.Helper; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase HelperTest is generated by - * JUnitDoclet to hold the tests for Helper. - * @see CH.ifa.draw.contrib.Helper - */ -// JUnitDoclet end javadoc_class -public class HelperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Helper helper; - // JUnitDoclet end class - - /** - * Constructor HelperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public HelperTest(String name) { - // JUnitDoclet begin method HelperTest - super(name); - // JUnitDoclet end method HelperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.Helper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.Helper(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - helper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - helper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getDrawingView() - /** - * Method testGetDrawingView is testing getDrawingView - * @see CH.ifa.draw.contrib.Helper#getDrawingView(java.awt.Container) - */ - // JUnitDoclet end javadoc_method getDrawingView() - public void testGetDrawingView() throws Exception { - // JUnitDoclet begin method getDrawingView - // JUnitDoclet end method getDrawingView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/JPanelDesktopTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/JPanelDesktopTest.java deleted file mode 100644 index 78949a968..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/JPanelDesktopTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.JPanelDesktop; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JPanelDesktopTest is generated by - * JUnitDoclet to hold the tests for JPanelDesktop. - * @see CH.ifa.draw.contrib.JPanelDesktop - */ -// JUnitDoclet end javadoc_class -public class JPanelDesktopTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JPanelDesktop jpaneldesktop; - // JUnitDoclet end class - - /** - * Constructor JPanelDesktopTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JPanelDesktopTest(String name) { - // JUnitDoclet begin method JPanelDesktopTest - super(name); - // JUnitDoclet end method JPanelDesktopTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.JPanelDesktop createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.JPanelDesktop(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - jpaneldesktop = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - jpaneldesktop = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getActiveDrawingView() - /** - * Method testGetActiveDrawingView is testing getActiveDrawingView - * @see CH.ifa.draw.contrib.JPanelDesktop#getActiveDrawingView() - */ - // JUnitDoclet end javadoc_method getActiveDrawingView() - public void testGetActiveDrawingView() throws Exception { - // JUnitDoclet begin method getActiveDrawingView - // JUnitDoclet end method getActiveDrawingView - } - - // JUnitDoclet begin javadoc_method addToDesktop() - /** - * Method testAddToDesktop is testing addToDesktop - * @see CH.ifa.draw.contrib.JPanelDesktop#addToDesktop(CH.ifa.draw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method addToDesktop() - public void testAddToDesktop() throws Exception { - // JUnitDoclet begin method addToDesktop - // JUnitDoclet end method addToDesktop - } - - // JUnitDoclet begin javadoc_method removeFromDesktop() - /** - * Method testRemoveFromDesktop is testing removeFromDesktop - * @see CH.ifa.draw.contrib.JPanelDesktop#removeFromDesktop(CH.ifa.draw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method removeFromDesktop() - public void testRemoveFromDesktop() throws Exception { - // JUnitDoclet begin method removeFromDesktop - // JUnitDoclet end method removeFromDesktop - } - - // JUnitDoclet begin javadoc_method removeAllFromDesktop() - /** - * Method testRemoveAllFromDesktop is testing removeAllFromDesktop - * @see CH.ifa.draw.contrib.JPanelDesktop#removeAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method removeAllFromDesktop() - public void testRemoveAllFromDesktop() throws Exception { - // JUnitDoclet begin method removeAllFromDesktop - // JUnitDoclet end method removeAllFromDesktop - } - - // JUnitDoclet begin javadoc_method getAllFromDesktop() - /** - * Method testGetAllFromDesktop is testing getAllFromDesktop - * @see CH.ifa.draw.contrib.JPanelDesktop#getAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method getAllFromDesktop() - public void testGetAllFromDesktop() throws Exception { - // JUnitDoclet begin method getAllFromDesktop - // JUnitDoclet end method getAllFromDesktop - } - - // JUnitDoclet begin javadoc_method addDesktopListener() - /** - * Method testAddDesktopListener is testing addDesktopListener - * @see CH.ifa.draw.contrib.JPanelDesktop#addDesktopListener(CH.ifa.draw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method addDesktopListener() - public void testAddDesktopListener() throws Exception { - // JUnitDoclet begin method addDesktopListener - // JUnitDoclet end method addDesktopListener - } - - // JUnitDoclet begin javadoc_method removeDesktopListener() - /** - * Method testRemoveDesktopListener is testing removeDesktopListener - * @see CH.ifa.draw.contrib.JPanelDesktop#removeDesktopListener(CH.ifa.draw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method removeDesktopListener() - public void testRemoveDesktopListener() throws Exception { - // JUnitDoclet begin method removeDesktopListener - // JUnitDoclet end method removeDesktopListener - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/JScrollPaneDesktopTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/JScrollPaneDesktopTest.java deleted file mode 100644 index c33930173..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/JScrollPaneDesktopTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.JScrollPaneDesktop; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JScrollPaneDesktopTest is generated by - * JUnitDoclet to hold the tests for JScrollPaneDesktop. - * @see CH.ifa.draw.contrib.JScrollPaneDesktop - */ -// JUnitDoclet end javadoc_class -public class JScrollPaneDesktopTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JScrollPaneDesktop jscrollpanedesktop; - // JUnitDoclet end class - - /** - * Constructor JScrollPaneDesktopTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JScrollPaneDesktopTest(String name) { - // JUnitDoclet begin method JScrollPaneDesktopTest - super(name); - // JUnitDoclet end method JScrollPaneDesktopTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.JScrollPaneDesktop createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.JScrollPaneDesktop(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - jscrollpanedesktop = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - jscrollpanedesktop = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getActiveDrawingView() - /** - * Method testGetActiveDrawingView is testing getActiveDrawingView - * @see CH.ifa.draw.contrib.JScrollPaneDesktop#getActiveDrawingView() - */ - // JUnitDoclet end javadoc_method getActiveDrawingView() - public void testGetActiveDrawingView() throws Exception { - // JUnitDoclet begin method getActiveDrawingView - // JUnitDoclet end method getActiveDrawingView - } - - // JUnitDoclet begin javadoc_method addToDesktop() - /** - * Method testAddToDesktop is testing addToDesktop - * @see CH.ifa.draw.contrib.JScrollPaneDesktop#addToDesktop(CH.ifa.draw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method addToDesktop() - public void testAddToDesktop() throws Exception { - // JUnitDoclet begin method addToDesktop - // JUnitDoclet end method addToDesktop - } - - // JUnitDoclet begin javadoc_method removeFromDesktop() - /** - * Method testRemoveFromDesktop is testing removeFromDesktop - * @see CH.ifa.draw.contrib.JScrollPaneDesktop#removeFromDesktop(CH.ifa.draw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method removeFromDesktop() - public void testRemoveFromDesktop() throws Exception { - // JUnitDoclet begin method removeFromDesktop - // JUnitDoclet end method removeFromDesktop - } - - // JUnitDoclet begin javadoc_method removeAllFromDesktop() - /** - * Method testRemoveAllFromDesktop is testing removeAllFromDesktop - * @see CH.ifa.draw.contrib.JScrollPaneDesktop#removeAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method removeAllFromDesktop() - public void testRemoveAllFromDesktop() throws Exception { - // JUnitDoclet begin method removeAllFromDesktop - // JUnitDoclet end method removeAllFromDesktop - } - - // JUnitDoclet begin javadoc_method getAllFromDesktop() - /** - * Method testGetAllFromDesktop is testing getAllFromDesktop - * @see CH.ifa.draw.contrib.JScrollPaneDesktop#getAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method getAllFromDesktop() - public void testGetAllFromDesktop() throws Exception { - // JUnitDoclet begin method getAllFromDesktop - // JUnitDoclet end method getAllFromDesktop - } - - // JUnitDoclet begin javadoc_method addDesktopListener() - /** - * Method testAddDesktopListener is testing addDesktopListener - * @see CH.ifa.draw.contrib.JScrollPaneDesktop#addDesktopListener(CH.ifa.draw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method addDesktopListener() - public void testAddDesktopListener() throws Exception { - // JUnitDoclet begin method addDesktopListener - // JUnitDoclet end method addDesktopListener - } - - // JUnitDoclet begin javadoc_method removeDesktopListener() - /** - * Method testRemoveDesktopListener is testing removeDesktopListener - * @see CH.ifa.draw.contrib.JScrollPaneDesktop#removeDesktopListener(CH.ifa.draw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method removeDesktopListener() - public void testRemoveDesktopListener() throws Exception { - // JUnitDoclet begin method removeDesktopListener - // JUnitDoclet end method removeDesktopListener - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/MDIDesktopPaneTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/MDIDesktopPaneTest.java deleted file mode 100644 index 3ddc140de..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/MDIDesktopPaneTest.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.MDIDesktopPane; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MDIDesktopPaneTest is generated by - * JUnitDoclet to hold the tests for MDIDesktopPane. - * @see CH.ifa.draw.contrib.MDIDesktopPane - */ -// JUnitDoclet end javadoc_class -public class MDIDesktopPaneTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MDIDesktopPane mdidesktoppane; - // JUnitDoclet end class - - /** - * Constructor MDIDesktopPaneTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MDIDesktopPaneTest(String name) { - // JUnitDoclet begin method MDIDesktopPaneTest - super(name); - // JUnitDoclet end method MDIDesktopPaneTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.MDIDesktopPane createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.MDIDesktopPane(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - mdidesktoppane = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - mdidesktoppane = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getActiveDrawingView() - /** - * Method testGetActiveDrawingView is testing getActiveDrawingView - * @see CH.ifa.draw.contrib.MDIDesktopPane#getActiveDrawingView() - */ - // JUnitDoclet end javadoc_method getActiveDrawingView() - public void testGetActiveDrawingView() throws Exception { - // JUnitDoclet begin method getActiveDrawingView - // JUnitDoclet end method getActiveDrawingView - } - - // JUnitDoclet begin javadoc_method addToDesktop() - /** - * Method testAddToDesktop is testing addToDesktop - * @see CH.ifa.draw.contrib.MDIDesktopPane#addToDesktop(CH.ifa.draw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method addToDesktop() - public void testAddToDesktop() throws Exception { - // JUnitDoclet begin method addToDesktop - // JUnitDoclet end method addToDesktop - } - - // JUnitDoclet begin javadoc_method removeFromDesktop() - /** - * Method testRemoveFromDesktop is testing removeFromDesktop - * @see CH.ifa.draw.contrib.MDIDesktopPane#removeFromDesktop(CH.ifa.draw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method removeFromDesktop() - public void testRemoveFromDesktop() throws Exception { - // JUnitDoclet begin method removeFromDesktop - // JUnitDoclet end method removeFromDesktop - } - - // JUnitDoclet begin javadoc_method removeAllFromDesktop() - /** - * Method testRemoveAllFromDesktop is testing removeAllFromDesktop - * @see CH.ifa.draw.contrib.MDIDesktopPane#removeAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method removeAllFromDesktop() - public void testRemoveAllFromDesktop() throws Exception { - // JUnitDoclet begin method removeAllFromDesktop - // JUnitDoclet end method removeAllFromDesktop - } - - // JUnitDoclet begin javadoc_method getAllFromDesktop() - /** - * Method testGetAllFromDesktop is testing getAllFromDesktop - * @see CH.ifa.draw.contrib.MDIDesktopPane#getAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method getAllFromDesktop() - public void testGetAllFromDesktop() throws Exception { - // JUnitDoclet begin method getAllFromDesktop - // JUnitDoclet end method getAllFromDesktop - } - - // JUnitDoclet begin javadoc_method addDesktopListener() - /** - * Method testAddDesktopListener is testing addDesktopListener - * @see CH.ifa.draw.contrib.MDIDesktopPane#addDesktopListener(CH.ifa.draw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method addDesktopListener() - public void testAddDesktopListener() throws Exception { - // JUnitDoclet begin method addDesktopListener - // JUnitDoclet end method addDesktopListener - } - - // JUnitDoclet begin javadoc_method removeDesktopListener() - /** - * Method testRemoveDesktopListener is testing removeDesktopListener - * @see CH.ifa.draw.contrib.MDIDesktopPane#removeDesktopListener(CH.ifa.draw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method removeDesktopListener() - public void testRemoveDesktopListener() throws Exception { - // JUnitDoclet begin method removeDesktopListener - // JUnitDoclet end method removeDesktopListener - } - - // JUnitDoclet begin javadoc_method cascadeFrames() - /** - * Method testCascadeFrames is testing cascadeFrames - * @see CH.ifa.draw.contrib.MDIDesktopPane#cascadeFrames() - */ - // JUnitDoclet end javadoc_method cascadeFrames() - public void testCascadeFrames() throws Exception { - // JUnitDoclet begin method cascadeFrames - // JUnitDoclet end method cascadeFrames - } - - // JUnitDoclet begin javadoc_method tileFrames() - /** - * Method testTileFrames is testing tileFrames - * @see CH.ifa.draw.contrib.MDIDesktopPane#tileFrames() - */ - // JUnitDoclet end javadoc_method tileFrames() - public void testTileFrames() throws Exception { - // JUnitDoclet begin method tileFrames - // JUnitDoclet end method tileFrames - } - - // JUnitDoclet begin javadoc_method tileFramesHorizontally() - /** - * Method testTileFramesHorizontally is testing tileFramesHorizontally - * @see CH.ifa.draw.contrib.MDIDesktopPane#tileFramesHorizontally() - */ - // JUnitDoclet end javadoc_method tileFramesHorizontally() - public void testTileFramesHorizontally() throws Exception { - // JUnitDoclet begin method tileFramesHorizontally - // JUnitDoclet end method tileFramesHorizontally - } - - // JUnitDoclet begin javadoc_method tileFramesVertically() - /** - * Method testTileFramesVertically is testing tileFramesVertically - * @see CH.ifa.draw.contrib.MDIDesktopPane#tileFramesVertically() - */ - // JUnitDoclet end javadoc_method tileFramesVertically() - public void testTileFramesVertically() throws Exception { - // JUnitDoclet begin method tileFramesVertically - // JUnitDoclet end method tileFramesVertically - } - - // JUnitDoclet begin javadoc_method arrangeFramesVertically() - /** - * Method testArrangeFramesVertically is testing arrangeFramesVertically - * @see CH.ifa.draw.contrib.MDIDesktopPane#arrangeFramesVertically() - */ - // JUnitDoclet end javadoc_method arrangeFramesVertically() - public void testArrangeFramesVertically() throws Exception { - // JUnitDoclet begin method arrangeFramesVertically - // JUnitDoclet end method arrangeFramesVertically - } - - // JUnitDoclet begin javadoc_method arrangeFramesHorizontally() - /** - * Method testArrangeFramesHorizontally is testing arrangeFramesHorizontally - * @see CH.ifa.draw.contrib.MDIDesktopPane#arrangeFramesHorizontally() - */ - // JUnitDoclet end javadoc_method arrangeFramesHorizontally() - public void testArrangeFramesHorizontally() throws Exception { - // JUnitDoclet begin method arrangeFramesHorizontally - // JUnitDoclet end method arrangeFramesHorizontally - } - - // JUnitDoclet begin javadoc_method setAllSize() - /** - * Method testSetAllSize is testing setAllSize - * @see CH.ifa.draw.contrib.MDIDesktopPane#setAllSize(java.awt.Dimension) - */ - // JUnitDoclet end javadoc_method setAllSize() - public void testSetAllSize() throws Exception { - // JUnitDoclet begin method setAllSize - // JUnitDoclet end method setAllSize - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/MDI_DrawApplicationTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/MDI_DrawApplicationTest.java deleted file mode 100644 index 7d799e5f4..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/MDI_DrawApplicationTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.MDI_DrawApplication; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MDI_DrawApplicationTest is generated by - * JUnitDoclet to hold the tests for MDI_DrawApplication. - * @see CH.ifa.draw.contrib.MDI_DrawApplication - */ -// JUnitDoclet end javadoc_class -public class MDI_DrawApplicationTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MDI_DrawApplication mdi_drawapplication; - // JUnitDoclet end class - - /** - * Constructor MDI_DrawApplicationTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MDI_DrawApplicationTest(String name) { - // JUnitDoclet begin method MDI_DrawApplicationTest - super(name); - // JUnitDoclet end method MDI_DrawApplicationTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.MDI_DrawApplication createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.MDI_DrawApplication(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - mdi_drawapplication = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - mdi_drawapplication = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method promptNew() - /** - * Method testPromptNew is testing promptNew - * @see CH.ifa.draw.contrib.MDI_DrawApplication#promptNew() - */ - // JUnitDoclet end javadoc_method promptNew() - public void testPromptNew() throws Exception { - // JUnitDoclet begin method promptNew - // JUnitDoclet end method promptNew - } - - // JUnitDoclet begin javadoc_method newWindow() - /** - * Method testNewWindow is testing newWindow - * @see CH.ifa.draw.contrib.MDI_DrawApplication#newWindow(CH.ifa.draw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method newWindow() - public void testNewWindow() throws Exception { - // JUnitDoclet begin method newWindow - // JUnitDoclet end method newWindow - } - - // JUnitDoclet begin javadoc_method newView() - /** - * Method testNewView is testing newView - * @see CH.ifa.draw.contrib.MDI_DrawApplication#newView() - */ - // JUnitDoclet end javadoc_method newView() - public void testNewView() throws Exception { - // JUnitDoclet begin method newView - // JUnitDoclet end method newView - } - - // JUnitDoclet begin javadoc_method views() - /** - * Method testViews is testing views - * @see CH.ifa.draw.contrib.MDI_DrawApplication#views() - */ - // JUnitDoclet end javadoc_method views() - public void testViews() throws Exception { - // JUnitDoclet begin method views - // JUnitDoclet end method views - } - - // JUnitDoclet begin javadoc_method getDefaultDrawingTitle() - /** - * Method testGetDefaultDrawingTitle is testing getDefaultDrawingTitle - * @see CH.ifa.draw.contrib.MDI_DrawApplication#getDefaultDrawingTitle() - */ - // JUnitDoclet end javadoc_method getDefaultDrawingTitle() - public void testGetDefaultDrawingTitle() throws Exception { - // JUnitDoclet begin method getDefaultDrawingTitle - // JUnitDoclet end method getDefaultDrawingTitle - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/MiniMapViewTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/MiniMapViewTest.java deleted file mode 100644 index 2b780445b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/MiniMapViewTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; -import java.awt.Component; - -import javax.swing.JScrollPane; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.MiniMapView; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MiniMapViewTest is generated by - * JUnitDoclet to hold the tests for MiniMapView. - * @see CH.ifa.draw.contrib.MiniMapView - */ -// JUnitDoclet end javadoc_class -public class MiniMapViewTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MiniMapView minimapview; - // JUnitDoclet end class - - /** - * Constructor MiniMapViewTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MiniMapViewTest(String name) { - // JUnitDoclet begin method MiniMapViewTest - super(name); - // JUnitDoclet end method MiniMapViewTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.MiniMapView createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - JScrollPane sp = new JScrollPane((Component)getDrawingEditor().view()); - sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - sp.setAlignmentX(Component.LEFT_ALIGNMENT); - return new CH.ifa.draw.contrib.MiniMapView(getDrawingEditor().view(), sp); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - minimapview = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - minimapview = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getMappedDrawingView() - /** - * Method testGetMappedDrawingView is testing getMappedDrawingView - * @see CH.ifa.draw.contrib.MiniMapView#getMappedDrawingView() - */ - // JUnitDoclet end javadoc_method getMappedDrawingView() - public void testGetMappedDrawingView() throws Exception { - // JUnitDoclet begin method getMappedDrawingView - // JUnitDoclet end method getMappedDrawingView - } - - // JUnitDoclet begin javadoc_method getSubject() - /** - * Method testGetSubject is testing getSubject - * @see CH.ifa.draw.contrib.MiniMapView#getSubject() - */ - // JUnitDoclet end javadoc_method getSubject() - public void testGetSubject() throws Exception { - // JUnitDoclet begin method getSubject - // JUnitDoclet end method getSubject - } - - // JUnitDoclet begin javadoc_method getViewBowColor() - /** - * Method testGetViewBowColor is testing getViewBowColor - * @see CH.ifa.draw.contrib.MiniMapView#getViewBowColor() - */ - // JUnitDoclet end javadoc_method getViewBowColor() - public void testGetViewBowColor() throws Exception { - // JUnitDoclet begin method getViewBowColor - // JUnitDoclet end method getViewBowColor - } - - // JUnitDoclet begin javadoc_method setViewBoxColor() - /** - * Method testSetViewBoxColor is testing setViewBoxColor - * @see CH.ifa.draw.contrib.MiniMapView#setViewBoxColor(java.awt.Color) - */ - // JUnitDoclet end javadoc_method setViewBoxColor() - public void testSetViewBoxColor() throws Exception { - // JUnitDoclet begin method setViewBoxColor - // JUnitDoclet end method setViewBoxColor - } - - // JUnitDoclet begin javadoc_method paint() - /** - * Method testPaint is testing paint - * @see CH.ifa.draw.contrib.MiniMapView#paint(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method paint() - public void testPaint() throws Exception { - // JUnitDoclet begin method paint - // JUnitDoclet end method paint - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/NestedCreationToolTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/NestedCreationToolTest.java deleted file mode 100644 index 7c64c0d66..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/NestedCreationToolTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.NestedCreationTool; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NestedCreationToolTest is generated by - * JUnitDoclet to hold the tests for NestedCreationTool. - * @see CH.ifa.draw.contrib.NestedCreationTool - */ -// JUnitDoclet end javadoc_class -public class NestedCreationToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NestedCreationTool nestedcreationtool; - // JUnitDoclet end class - - /** - * Constructor NestedCreationToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NestedCreationToolTest(String name) { - // JUnitDoclet begin method NestedCreationToolTest - super(name); - // JUnitDoclet end method NestedCreationToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.NestedCreationTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.NestedCreationTool(getDrawingEditor(), new RectangleFigure(new Point(20, 20), new Point(90, 90))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nestedcreationtool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nestedcreationtool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.contrib.NestedCreationTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see CH.ifa.draw.contrib.NestedCreationTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.contrib.NestedCreationTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method getContainerFigure() - /** - * Method testGetContainerFigure is testing getContainerFigure - * @see CH.ifa.draw.contrib.NestedCreationTool#getContainerFigure() - */ - // JUnitDoclet end javadoc_method getContainerFigure() - public void testGetContainerFigure() throws Exception { - // JUnitDoclet begin method getContainerFigure - // JUnitDoclet end method getContainerFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/PolygonFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/PolygonFigureTest.java deleted file mode 100644 index a4cf0d434..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/PolygonFigureTest.java +++ /dev/null @@ -1,419 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.PolygonFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolygonFigureTest is generated by - * JUnitDoclet to hold the tests for PolygonFigure. - * @see CH.ifa.draw.contrib.PolygonFigure - */ -// JUnitDoclet end javadoc_class -public class PolygonFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolygonFigure polygonfigure; - // JUnitDoclet end class - - /** - * Constructor PolygonFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolygonFigureTest(String name) { - // JUnitDoclet begin method PolygonFigureTest - super(name); - // JUnitDoclet end method PolygonFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.PolygonFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.PolygonFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polygonfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polygonfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.contrib.PolygonFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see CH.ifa.draw.contrib.PolygonFigure#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.contrib.PolygonFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.contrib.PolygonFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method getPolygon() - /** - * Method testGetPolygon is testing getPolygon - * @see CH.ifa.draw.contrib.PolygonFigure#getPolygon() - */ - // JUnitDoclet end javadoc_method getPolygon() - public void testGetPolygon() throws Exception { - // JUnitDoclet begin method getPolygon - // JUnitDoclet end method getPolygon - } - - // JUnitDoclet begin javadoc_method getInternalPolygon() - /** - * Method testGetInternalPolygon is testing getInternalPolygon - * @see CH.ifa.draw.contrib.PolygonFigure#getInternalPolygon() - */ - // JUnitDoclet end javadoc_method getInternalPolygon() - public void testGetInternalPolygon() throws Exception { - // JUnitDoclet begin method getInternalPolygon - // JUnitDoclet end method getInternalPolygon - } - - // JUnitDoclet begin javadoc_method center() - /** - * Method testCenter is testing center - * @see CH.ifa.draw.contrib.PolygonFigure#center() - */ - // JUnitDoclet end javadoc_method center() - public void testCenter() throws Exception { - // JUnitDoclet begin method center - // JUnitDoclet end method center - } - - // JUnitDoclet begin javadoc_method points() - /** - * Method testPoints is testing points - * @see CH.ifa.draw.contrib.PolygonFigure#points() - */ - // JUnitDoclet end javadoc_method points() - public void testPoints() throws Exception { - // JUnitDoclet begin method points - // JUnitDoclet end method points - } - - // JUnitDoclet begin javadoc_method pointCount() - /** - * Method testPointCount is testing pointCount - * @see CH.ifa.draw.contrib.PolygonFigure#pointCount() - */ - // JUnitDoclet end javadoc_method pointCount() - public void testPointCount() throws Exception { - // JUnitDoclet begin method pointCount - // JUnitDoclet end method pointCount - } - - // JUnitDoclet begin javadoc_method basicMoveBy() - /** - * Method testBasicMoveBy is testing basicMoveBy - * @see CH.ifa.draw.contrib.PolygonFigure#basicMoveBy(int, int) - */ - // JUnitDoclet end javadoc_method basicMoveBy() - public void testBasicMoveBy() throws Exception { - // JUnitDoclet begin method basicMoveBy - // JUnitDoclet end method basicMoveBy - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see CH.ifa.draw.contrib.PolygonFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see CH.ifa.draw.contrib.PolygonFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see CH.ifa.draw.contrib.PolygonFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see CH.ifa.draw.contrib.PolygonFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method addPoint() - /** - * Method testAddPoint is testing addPoint - * @see CH.ifa.draw.contrib.PolygonFigure#addPoint(int, int) - */ - // JUnitDoclet end javadoc_method addPoint() - public void testAddPoint() throws Exception { - // JUnitDoclet begin method addPoint - // JUnitDoclet end method addPoint - } - - // JUnitDoclet begin javadoc_method setPointAt() - /** - * Method testSetPointAt is testing setPointAt - * @see CH.ifa.draw.contrib.PolygonFigure#setPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method setPointAt() - public void testSetPointAt() throws Exception { - // JUnitDoclet begin method setPointAt - // JUnitDoclet end method setPointAt - } - - // JUnitDoclet begin javadoc_method insertPointAt() - /** - * Method testInsertPointAt is testing insertPointAt - * @see CH.ifa.draw.contrib.PolygonFigure#insertPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method insertPointAt() - public void testInsertPointAt() throws Exception { - // JUnitDoclet begin method insertPointAt - // JUnitDoclet end method insertPointAt - } - - // JUnitDoclet begin javadoc_method removePointAt() - /** - * Method testRemovePointAt is testing removePointAt - * @see CH.ifa.draw.contrib.PolygonFigure#removePointAt(int) - */ - // JUnitDoclet end javadoc_method removePointAt() - public void testRemovePointAt() throws Exception { - // JUnitDoclet begin method removePointAt - // JUnitDoclet end method removePointAt - } - - // JUnitDoclet begin javadoc_method scaleRotate() - /** - * Method testScaleRotate is testing scaleRotate - * @see CH.ifa.draw.contrib.PolygonFigure#scaleRotate(java.awt.Point, java.awt.Polygon, java.awt.Point) - */ - // JUnitDoclet end javadoc_method scaleRotate() - public void testScaleRotate() throws Exception { - // JUnitDoclet begin method scaleRotate - // JUnitDoclet end method scaleRotate - } - - // JUnitDoclet begin javadoc_method smoothPoints() - /** - * Method testSmoothPoints is testing smoothPoints - * @see CH.ifa.draw.contrib.PolygonFigure#smoothPoints() - */ - // JUnitDoclet end javadoc_method smoothPoints() - public void testSmoothPoints() throws Exception { - // JUnitDoclet begin method smoothPoints - // JUnitDoclet end method smoothPoints - } - - // JUnitDoclet begin javadoc_method splitSegment() - /** - * Method testSplitSegment is testing splitSegment - * @see CH.ifa.draw.contrib.PolygonFigure#splitSegment(int, int) - */ - // JUnitDoclet end javadoc_method splitSegment() - public void testSplitSegment() throws Exception { - // JUnitDoclet begin method splitSegment - // JUnitDoclet end method splitSegment - } - - // JUnitDoclet begin javadoc_method pointAt() - /** - * Method testPointAt is testing pointAt - * @see CH.ifa.draw.contrib.PolygonFigure#pointAt(int) - */ - // JUnitDoclet end javadoc_method pointAt() - public void testPointAt() throws Exception { - // JUnitDoclet begin method pointAt - // JUnitDoclet end method pointAt - } - - // JUnitDoclet begin javadoc_method outermostPoint() - /** - * Method testOutermostPoint is testing outermostPoint - * @see CH.ifa.draw.contrib.PolygonFigure#outermostPoint() - */ - // JUnitDoclet end javadoc_method outermostPoint() - public void testOutermostPoint() throws Exception { - // JUnitDoclet begin method outermostPoint - // JUnitDoclet end method outermostPoint - } - - // JUnitDoclet begin javadoc_method findSegment() - /** - * Method testFindSegment is testing findSegment - * @see CH.ifa.draw.contrib.PolygonFigure#findSegment(int, int) - */ - // JUnitDoclet end javadoc_method findSegment() - public void testFindSegment() throws Exception { - // JUnitDoclet begin method findSegment - // JUnitDoclet end method findSegment - } - - // JUnitDoclet begin javadoc_method chop() - /** - * Method testChop is testing chop - * @see CH.ifa.draw.contrib.PolygonFigure#chop(java.awt.Point) - */ - // JUnitDoclet end javadoc_method chop() - public void testChop() throws Exception { - // JUnitDoclet begin method chop - // JUnitDoclet end method chop - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.contrib.PolygonFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.contrib.PolygonFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method locator() - /** - * Method testLocator is testing locator - * @see CH.ifa.draw.contrib.PolygonFigure#locator(int) - */ - // JUnitDoclet end javadoc_method locator() - public void testLocator() throws Exception { - // JUnitDoclet begin method locator - // JUnitDoclet end method locator - } - - // JUnitDoclet begin javadoc_method bounds() - /** - * Method testBounds is testing bounds - * @see CH.ifa.draw.contrib.PolygonFigure#bounds(java.awt.Polygon) - */ - // JUnitDoclet end javadoc_method bounds() - public void testBounds() throws Exception { - // JUnitDoclet begin method bounds - // JUnitDoclet end method bounds - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/PolygonHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/PolygonHandleTest.java deleted file mode 100644 index 0bc94bdb6..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/PolygonHandleTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.PolygonFigure; -import CH.ifa.draw.contrib.PolygonHandle; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolygonHandleTest is generated by - * JUnitDoclet to hold the tests for PolygonHandle. - * @see CH.ifa.draw.contrib.PolygonHandle - */ -// JUnitDoclet end javadoc_class -public class PolygonHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolygonHandle polygonhandle; - // JUnitDoclet end class - - /** - * Constructor PolygonHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolygonHandleTest(String name) { - // JUnitDoclet begin method PolygonHandleTest - super(name); - // JUnitDoclet end method PolygonHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.PolygonHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - PolygonFigure figure = new PolygonFigure(20, 20); - figure.addPoint(30, 30); - figure.addPoint(40, 40); - return new CH.ifa.draw.contrib.PolygonHandle(figure, PolygonFigure.locator(2), 2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polygonhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polygonhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see CH.ifa.draw.contrib.PolygonHandle#invokeStart(int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see CH.ifa.draw.contrib.PolygonHandle#invokeStep(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see CH.ifa.draw.contrib.PolygonHandle#invokeEnd(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see CH.ifa.draw.contrib.PolygonHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/PolygonToolTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/PolygonToolTest.java deleted file mode 100644 index 40c3c486d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/PolygonToolTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.PolygonTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolygonToolTest is generated by - * JUnitDoclet to hold the tests for PolygonTool. - * @see CH.ifa.draw.contrib.PolygonTool - */ -// JUnitDoclet end javadoc_class -public class PolygonToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolygonTool polygontool; - // JUnitDoclet end class - - /** - * Constructor PolygonToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolygonToolTest(String name) { - // JUnitDoclet begin method PolygonToolTest - super(name); - // JUnitDoclet end method PolygonToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.PolygonTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.PolygonTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polygontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polygontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.contrib.PolygonTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.contrib.PolygonTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.contrib.PolygonTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see CH.ifa.draw.contrib.PolygonTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.contrib.PolygonTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.contrib.PolygonTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/SVGDrawAppTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/SVGDrawAppTest.java deleted file mode 100644 index 62caff8a2..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/SVGDrawAppTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.SVGDrawApp; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SVGDrawAppTest is generated by - * JUnitDoclet to hold the tests for SVGDrawApp. - * @see CH.ifa.draw.contrib.SVGDrawApp - */ -// JUnitDoclet end javadoc_class -public class SVGDrawAppTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SVGDrawApp svgdrawapp; - // JUnitDoclet end class - - /** - * Constructor SVGDrawAppTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SVGDrawAppTest(String name) { - // JUnitDoclet begin method SVGDrawAppTest - super(name); - // JUnitDoclet end method SVGDrawAppTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.SVGDrawApp createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.SVGDrawApp(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - svgdrawapp = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - svgdrawapp = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see CH.ifa.draw.contrib.SVGDrawApp#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method createStorageFormatManager() - /** - * Method testCreateStorageFormatManager is testing createStorageFormatManager - * @see CH.ifa.draw.contrib.SVGDrawApp#createStorageFormatManager() - */ - // JUnitDoclet end javadoc_method createStorageFormatManager() - public void testCreateStorageFormatManager() throws Exception { - // JUnitDoclet begin method createStorageFormatManager - // JUnitDoclet end method createStorageFormatManager - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/SVGStorageFormatTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/SVGStorageFormatTest.java deleted file mode 100644 index a6f0cf164..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/SVGStorageFormatTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.SVGStorageFormat; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SVGStorageFormatTest is generated by - * JUnitDoclet to hold the tests for SVGStorageFormat. - * @see CH.ifa.draw.contrib.SVGStorageFormat - */ -// JUnitDoclet end javadoc_class -public class SVGStorageFormatTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SVGStorageFormat svgstorageformat; - // JUnitDoclet end class - - /** - * Constructor SVGStorageFormatTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SVGStorageFormatTest(String name) { - // JUnitDoclet begin method SVGStorageFormatTest - super(name); - // JUnitDoclet end method SVGStorageFormatTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.SVGStorageFormat createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.SVGStorageFormat(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - svgstorageformat = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - svgstorageformat = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createFileDescription() - /** - * Method testCreateFileDescription is testing createFileDescription - * @see CH.ifa.draw.contrib.SVGStorageFormat#createFileDescription() - */ - // JUnitDoclet end javadoc_method createFileDescription() - public void testCreateFileDescription() throws Exception { - // JUnitDoclet begin method createFileDescription - // JUnitDoclet end method createFileDescription - } - - // JUnitDoclet begin javadoc_method store() - /** - * Method testStore is testing store - * @see CH.ifa.draw.contrib.SVGStorageFormat#store(java.lang.String, CH.ifa.draw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method store() - public void testStore() throws Exception { - // JUnitDoclet begin method store - // JUnitDoclet end method store - } - - // JUnitDoclet begin javadoc_method restore() - /** - * Method testRestore is testing restore - * @see CH.ifa.draw.contrib.SVGStorageFormat#restore(java.lang.String) - */ - // JUnitDoclet end javadoc_method restore() - public void testRestore() throws Exception { - // JUnitDoclet begin method restore - // JUnitDoclet end method restore - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/SimpleLayouterTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/SimpleLayouterTest.java deleted file mode 100644 index 3ae9d3794..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/SimpleLayouterTest.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import java.awt.Point; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import CH.ifa.draw.contrib.GraphicalCompositeFigure; -import CH.ifa.draw.contrib.Layoutable; -import CH.ifa.draw.contrib.SimpleLayouter; -import CH.ifa.draw.figures.RectangleFigure; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SimpleLayouterTest is generated by - * JUnitDoclet to hold the tests for SimpleLayouter. - * @see CH.ifa.draw.contrib.SimpleLayouter - */ -// JUnitDoclet end javadoc_class -public class SimpleLayouterTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SimpleLayouter simplelayouter; - // JUnitDoclet end class - - /** - * Constructor SimpleLayouterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SimpleLayouterTest(String name) { - // JUnitDoclet begin method SimpleLayouterTest - super(name); - // JUnitDoclet end method SimpleLayouterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.SimpleLayouter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Layoutable fig = new GraphicalCompositeFigure(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - return new CH.ifa.draw.contrib.SimpleLayouter(fig); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - simplelayouter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - simplelayouter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setLayoutable() - /** - * Method testSetGetLayoutable is testing setLayoutable - * and getLayoutable together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.SimpleLayouter#setLayoutable(CH.ifa.draw.contrib.Layoutable) - * @see CH.ifa.draw.contrib.SimpleLayouter#getLayoutable() - */ - // JUnitDoclet end javadoc_method setLayoutable() - public void testSetGetLayoutable() throws Exception { - // JUnitDoclet begin method setLayoutable getLayoutable - CH.ifa.draw.contrib.Layoutable[] tests = { new GraphicalCompositeFigure(), null }; - - for (int i = 0; i < tests.length; i++) { - simplelayouter.setLayoutable(tests[i]); - assertEquals(tests[i], simplelayouter.getLayoutable()); - } - // JUnitDoclet end method setLayoutable getLayoutable - } - - // JUnitDoclet begin javadoc_method setInsets() - /** - * Method testSetGetInsets is testing setInsets - * and getInsets together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.SimpleLayouter#setInsets(java.awt.Insets) - * @see CH.ifa.draw.contrib.SimpleLayouter#getInsets() - */ - // JUnitDoclet end javadoc_method setInsets() - public void testSetGetInsets() throws Exception { - // JUnitDoclet begin method setInsets getInsets - java.awt.Insets[] tests = { new java.awt.Insets(5, 5, 5, 5), null }; - - for (int i = 0; i < tests.length; i++) { - simplelayouter.setInsets(tests[i]); - assertEquals(tests[i], simplelayouter.getInsets()); - } - // JUnitDoclet end method setInsets getInsets - } - - // JUnitDoclet begin javadoc_method create() - /** - * Method testCreate is testing create - * @see CH.ifa.draw.contrib.SimpleLayouter#create(CH.ifa.draw.contrib.Layoutable) - */ - // JUnitDoclet end javadoc_method create() - public void testCreate() throws Exception { - // JUnitDoclet begin method create - // JUnitDoclet end method create - } - - // JUnitDoclet begin javadoc_method calculateLayout() - /** - * Method testCalculateLayout is testing calculateLayout - * @see CH.ifa.draw.contrib.SimpleLayouter#calculateLayout(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method calculateLayout() - public void testCalculateLayout() throws Exception { - // JUnitDoclet begin method calculateLayout - // JUnitDoclet end method calculateLayout - } - - // JUnitDoclet begin javadoc_method layout() - /** - * Method testLayout is testing layout - * @see CH.ifa.draw.contrib.SimpleLayouter#layout(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method layout() - public void testLayout() throws Exception { - // JUnitDoclet begin method layout - // JUnitDoclet end method layout - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.contrib.SimpleLayouter#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.contrib.SimpleLayouter#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/SplitConnectionToolTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/SplitConnectionToolTest.java deleted file mode 100644 index 3a8422194..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/SplitConnectionToolTest.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.SplitConnectionTool; -import CH.ifa.draw.figures.LineConnection; -import CH.ifa.draw.framework.ConnectionFigure; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SplitConnectionToolTest is generated by - * JUnitDoclet to hold the tests for SplitConnectionTool. - * @see CH.ifa.draw.contrib.SplitConnectionTool - */ -// JUnitDoclet end javadoc_class -public class SplitConnectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SplitConnectionTool splitconnectiontool; - // JUnitDoclet end class - - /** - * Constructor SplitConnectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SplitConnectionToolTest(String name) { - // JUnitDoclet begin method SplitConnectionToolTest - super(name); - // JUnitDoclet end method SplitConnectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.SplitConnectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - ConnectionFigure lineConnection = new LineConnection(); - return new CH.ifa.draw.contrib.SplitConnectionTool(getDrawingEditor(), lineConnection); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - splitconnectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - splitconnectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.contrib.SplitConnectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.contrib.SplitConnectionTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see CH.ifa.draw.contrib.SplitConnectionTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.contrib.SplitConnectionTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.contrib.SplitConnectionTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/StandardLayouterTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/StandardLayouterTest.java deleted file mode 100644 index 2a8b5c326..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/StandardLayouterTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.StandardLayouter; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardLayouterTest is generated by - * JUnitDoclet to hold the tests for StandardLayouter. - * @see CH.ifa.draw.contrib.StandardLayouter - */ -// JUnitDoclet end javadoc_class -public class StandardLayouterTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardLayouter standardlayouter; - // JUnitDoclet end class - - /** - * Constructor StandardLayouterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardLayouterTest(String name) { - // JUnitDoclet begin method StandardLayouterTest - super(name); - // JUnitDoclet end method StandardLayouterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.StandardLayouter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.StandardLayouter(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standardlayouter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standardlayouter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method create() - /** - * Method testCreate is testing create - * @see CH.ifa.draw.contrib.StandardLayouter#create(CH.ifa.draw.contrib.Layoutable) - */ - // JUnitDoclet end javadoc_method create() - public void testCreate() throws Exception { - // JUnitDoclet begin method create - // JUnitDoclet end method create - } - - // JUnitDoclet begin javadoc_method calculateLayout() - /** - * Method testCalculateLayout is testing calculateLayout - * @see CH.ifa.draw.contrib.StandardLayouter#calculateLayout(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method calculateLayout() - public void testCalculateLayout() throws Exception { - // JUnitDoclet begin method calculateLayout - // JUnitDoclet end method calculateLayout - } - - // JUnitDoclet begin javadoc_method layout() - /** - * Method testLayout is testing layout - * @see CH.ifa.draw.contrib.StandardLayouter#layout(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method layout() - public void testLayout() throws Exception { - // JUnitDoclet begin method layout - // JUnitDoclet end method layout - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/TextAreaFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/TextAreaFigureTest.java deleted file mode 100644 index 554123b2b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/TextAreaFigureTest.java +++ /dev/null @@ -1,508 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import java.awt.Font; - -import CH.ifa.draw.contrib.TextAreaFigure; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase TextAreaFigureTest is generated by - * JUnitDoclet to hold the tests for TextAreaFigure. - * @see CH.ifa.draw.contrib.TextAreaFigure - */ -// JUnitDoclet end javadoc_class -public class TextAreaFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TextAreaFigure textareafigure; - // JUnitDoclet end class - - /** - * Constructor TextAreaFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TextAreaFigureTest(String name) { - // JUnitDoclet begin method TextAreaFigureTest - super(name); - // JUnitDoclet end method TextAreaFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.TextAreaFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.TextAreaFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - textareafigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - textareafigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setText() - /** - * Method testSetGetText is testing setText - * and getText together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.TextAreaFigure#setText(java.lang.String) - * @see CH.ifa.draw.contrib.TextAreaFigure#getText() - */ - // JUnitDoclet end javadoc_method setText() - public void testSetGetText() throws Exception { - // JUnitDoclet begin method setText getText - java.lang.String[] tests = { "", " ", "a", "A", "?", "?", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setText(tests[i]); - assertEquals(tests[i], textareafigure.getText()); - } - // JUnitDoclet end method setText getText - } - - // JUnitDoclet begin javadoc_method textDisplayBox() - /** - * Method testTextDisplayBox is testing textDisplayBox - * @see CH.ifa.draw.contrib.TextAreaFigure#textDisplayBox() - */ - // JUnitDoclet end javadoc_method textDisplayBox() - public void testTextDisplayBox() throws Exception { - // JUnitDoclet begin method textDisplayBox - // JUnitDoclet end method textDisplayBox - } - - // JUnitDoclet begin javadoc_method createFont() - /** - * Method testCreateFont is testing createFont - * @see CH.ifa.draw.contrib.TextAreaFigure#createFont() - */ - // JUnitDoclet end javadoc_method createFont() - public void testCreateFont() throws Exception { - // JUnitDoclet begin method createFont - // JUnitDoclet end method createFont - } - - // JUnitDoclet begin javadoc_method setReadOnly() - /** - * Method testSetIsReadOnly is testing setReadOnly - * and isReadOnly together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.TextAreaFigure#setReadOnly(boolean) - * @see CH.ifa.draw.contrib.TextAreaFigure#isReadOnly() - */ - // JUnitDoclet end javadoc_method setReadOnly() - public void testSetIsReadOnly() throws Exception { - // JUnitDoclet begin method setReadOnly isReadOnly - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setReadOnly(tests[i]); - assertEquals(tests[i], textareafigure.isReadOnly()); - } - // JUnitDoclet end method setReadOnly isReadOnly - } - - // JUnitDoclet begin javadoc_method acceptsTyping() - /** - * Method testAcceptsTyping is testing acceptsTyping - * @see CH.ifa.draw.contrib.TextAreaFigure#acceptsTyping() - */ - // JUnitDoclet end javadoc_method acceptsTyping() - public void testAcceptsTyping() throws Exception { - // JUnitDoclet begin method acceptsTyping - // JUnitDoclet end method acceptsTyping - } - - // JUnitDoclet begin javadoc_method isTextDirty() - /** - * Method testIsTextDirty is testing isTextDirty - * @see CH.ifa.draw.contrib.TextAreaFigure#isTextDirty() - */ - // JUnitDoclet end javadoc_method isTextDirty() - public void testIsTextDirty() throws Exception { - // JUnitDoclet begin method isTextDirty - // JUnitDoclet end method isTextDirty - } - - // JUnitDoclet begin javadoc_method setSizeDirty() - /** - * Method testSetIsSizeDirty is testing setSizeDirty - * and isSizeDirty together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.TextAreaFigure#setSizeDirty(boolean) - * @see CH.ifa.draw.contrib.TextAreaFigure#isSizeDirty() - */ - // JUnitDoclet end javadoc_method setSizeDirty() - public void testSetIsSizeDirty() throws Exception { - // JUnitDoclet begin method setSizeDirty isSizeDirty - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setSizeDirty(tests[i]); - assertEquals(tests[i], textareafigure.isSizeDirty()); - } - // JUnitDoclet end method setSizeDirty isSizeDirty - } - - // JUnitDoclet begin javadoc_method setFont() - /** - * Method testSetGetFont is testing setFont - * and getFont together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.TextAreaFigure#setFont(java.awt.Font) - * @see CH.ifa.draw.contrib.TextAreaFigure#getFont() - */ - // JUnitDoclet end javadoc_method setFont() - public void testSetGetFont() throws Exception { - // JUnitDoclet begin method setFont getFont - Font[] tests = { new Font("Helvetica", Font.PLAIN, 12)}; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setFont(tests[i]); - assertEquals(tests[i], textareafigure.getFont()); - } - // JUnitDoclet end method setFont getFont - } - - // JUnitDoclet begin method setNullFont() - /** - * Test a null argument to setFont. Expect an IllegalArgumentException - * - * @see CH.ifa.draw.contrib.TextAreaFigure#setFont(java.awt.Font) - */ - public void testSetNullFont() throws Exception { - Font original = textareafigure.getFont(); - - try { - textareafigure.setFont(null); - fail("IllegalArgumentException expected"); - } - catch (IllegalArgumentException ok) { - assertEquals("setFont(null) altered property value", original, textareafigure.getFont()); - } - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method overlayColumns() - /** - * Method testOverlayColumns is testing overlayColumns - * @see CH.ifa.draw.contrib.TextAreaFigure#overlayColumns() - */ - // JUnitDoclet end javadoc_method overlayColumns() - public void testOverlayColumns() throws Exception { - // JUnitDoclet begin method overlayColumns - // JUnitDoclet end method overlayColumns - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.contrib.TextAreaFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.contrib.TextAreaFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.contrib.TextAreaFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method moveBy() - /** - * Method testMoveBy is testing moveBy - * @see CH.ifa.draw.contrib.TextAreaFigure#moveBy(int, int) - */ - // JUnitDoclet end javadoc_method moveBy() - public void testMoveBy() throws Exception { - // JUnitDoclet begin method moveBy - // JUnitDoclet end method moveBy - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see CH.ifa.draw.contrib.TextAreaFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.contrib.TextAreaFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see CH.ifa.draw.contrib.TextAreaFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see CH.ifa.draw.contrib.TextAreaFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see CH.ifa.draw.contrib.TextAreaFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.contrib.TextAreaFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.contrib.TextAreaFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method connect() - /** - * Method testConnect is testing connect - * @see CH.ifa.draw.contrib.TextAreaFigure#connect(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method connect() - public void testConnect() throws Exception { - // JUnitDoclet begin method connect - // JUnitDoclet end method connect - } - - // JUnitDoclet begin javadoc_method disconnect() - /** - * Method testDisconnect is testing disconnect - * @see CH.ifa.draw.contrib.TextAreaFigure#disconnect(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method disconnect() - public void testDisconnect() throws Exception { - // JUnitDoclet begin method disconnect - // JUnitDoclet end method disconnect - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see CH.ifa.draw.contrib.TextAreaFigure#figureInvalidated(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see CH.ifa.draw.contrib.TextAreaFigure#figureChanged(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see CH.ifa.draw.contrib.TextAreaFigure#figureRemoved(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see CH.ifa.draw.contrib.TextAreaFigure#figureRequestRemove(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see CH.ifa.draw.contrib.TextAreaFigure#figureRequestUpdate(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method getTextColor() - /** - * Method testGetTextColor is testing getTextColor - * @see CH.ifa.draw.contrib.TextAreaFigure#getTextColor() - */ - // JUnitDoclet end javadoc_method getTextColor() - public void testGetTextColor() throws Exception { - // JUnitDoclet begin method getTextColor - // JUnitDoclet end method getTextColor - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see CH.ifa.draw.contrib.TextAreaFigure#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method setFontDirty() - /** - * Method testSetIsFontDirty is testing setFontDirty - * and isFontDirty together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.contrib.TextAreaFigure#setFontDirty(boolean) - * @see CH.ifa.draw.contrib.TextAreaFigure#isFontDirty() - */ - // JUnitDoclet end javadoc_method setFontDirty() - public void testSetIsFontDirty() throws Exception { - // JUnitDoclet begin method setFontDirty isFontDirty - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setFontDirty(tests[i]); - assertEquals(tests[i], textareafigure.isFontDirty()); - } - // JUnitDoclet end method setFontDirty isFontDirty - } - - // JUnitDoclet begin javadoc_method getRepresentingFigure() - /** - * Method testGetRepresentingFigure is testing getRepresentingFigure - * @see CH.ifa.draw.contrib.TextAreaFigure#getRepresentingFigure() - */ - // JUnitDoclet end javadoc_method getRepresentingFigure() - public void testGetRepresentingFigure() throws Exception { - // JUnitDoclet begin method getRepresentingFigure - // JUnitDoclet end method getRepresentingFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/TextAreaToolTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/TextAreaToolTest.java deleted file mode 100644 index 49972766f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/TextAreaToolTest.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.TextAreaTool; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase TextAreaToolTest is generated by - * JUnitDoclet to hold the tests for TextAreaTool. - * @see CH.ifa.draw.contrib.TextAreaTool - */ -// JUnitDoclet end javadoc_class -public class TextAreaToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TextAreaTool textareatool; - // JUnitDoclet end class - - /** - * Constructor TextAreaToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TextAreaToolTest(String name) { - // JUnitDoclet begin method TextAreaToolTest - super(name); - // JUnitDoclet end method TextAreaToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.TextAreaTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.TextAreaTool(getDrawingEditor(), new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - textareatool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - textareatool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.contrib.TextAreaTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.contrib.TextAreaTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.contrib.TextAreaTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.contrib.TextAreaTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.contrib.TextAreaTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method isActivated() - /** - * Method testIsActivated is testing isActivated - * @see CH.ifa.draw.contrib.TextAreaTool#isActivated() - */ - // JUnitDoclet end javadoc_method isActivated() - public void testIsActivated() throws Exception { - // JUnitDoclet begin method isActivated - // JUnitDoclet end method isActivated - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/TriangleFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/TriangleFigureTest.java deleted file mode 100644 index 0849cbe16..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/TriangleFigureTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -import CH.ifa.draw.contrib.TriangleFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase TriangleFigureTest is generated by - * JUnitDoclet to hold the tests for TriangleFigure. - * @see CH.ifa.draw.contrib.TriangleFigure - */ -// JUnitDoclet end javadoc_class -public class TriangleFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TriangleFigure trianglefigure; - // JUnitDoclet end class - - /** - * Constructor TriangleFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TriangleFigureTest(String name) { - // JUnitDoclet begin method TriangleFigureTest - super(name); - // JUnitDoclet end method TriangleFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.TriangleFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.contrib.TriangleFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - trianglefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - trianglefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.contrib.TriangleFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method rotate() - /** - * Method testRotate is testing rotate - * @see CH.ifa.draw.contrib.TriangleFigure#rotate(double) - */ - // JUnitDoclet end javadoc_method rotate() - public void testRotate() throws Exception { - // JUnitDoclet begin method rotate - // JUnitDoclet end method rotate - } - - // JUnitDoclet begin javadoc_method getPolygon() - /** - * Method testGetPolygon is testing getPolygon - * @see CH.ifa.draw.contrib.TriangleFigure#getPolygon() - */ - // JUnitDoclet end javadoc_method getPolygon() - public void testGetPolygon() throws Exception { - // JUnitDoclet begin method getPolygon - // JUnitDoclet end method getPolygon - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.contrib.TriangleFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see CH.ifa.draw.contrib.TriangleFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see CH.ifa.draw.contrib.TriangleFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method center() - /** - * Method testCenter is testing center - * @see CH.ifa.draw.contrib.TriangleFigure#center() - */ - // JUnitDoclet end javadoc_method center() - public void testCenter() throws Exception { - // JUnitDoclet begin method center - // JUnitDoclet end method center - } - - // JUnitDoclet begin javadoc_method chop() - /** - * Method testChop is testing chop - * @see CH.ifa.draw.contrib.TriangleFigure#chop(java.awt.Point) - */ - // JUnitDoclet end javadoc_method chop() - public void testChop() throws Exception { - // JUnitDoclet begin method chop - // JUnitDoclet end method chop - } - - // JUnitDoclet begin javadoc_method clone() - /** - * Method testClone is testing clone - * @see CH.ifa.draw.contrib.TriangleFigure#clone() - */ - // JUnitDoclet end javadoc_method clone() - public void testClone() throws Exception { - // JUnitDoclet begin method clone - // JUnitDoclet end method clone - } - - // JUnitDoclet begin javadoc_method getRotationAngle() - /** - * Method testGetRotationAngle is testing getRotationAngle - * @see CH.ifa.draw.contrib.TriangleFigure#getRotationAngle() - */ - // JUnitDoclet end javadoc_method getRotationAngle() - public void testGetRotationAngle() throws Exception { - // JUnitDoclet begin method getRotationAngle - // JUnitDoclet end method getRotationAngle - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.contrib.TriangleFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.contrib.TriangleFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/contrib/WindowMenuTest.java b/JHotDraw/src/CH/ifa/draw/test/contrib/WindowMenuTest.java deleted file mode 100644 index f2b18d473..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/contrib/WindowMenuTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.contrib; - -// JUnitDoclet begin import -import CH.ifa.draw.application.DrawApplication; -import CH.ifa.draw.contrib.MDIDesktopPane; -import CH.ifa.draw.contrib.WindowMenu; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase WindowMenuTest is generated by - * JUnitDoclet to hold the tests for WindowMenu. - * @see CH.ifa.draw.contrib.WindowMenu - */ -// JUnitDoclet end javadoc_class -public class WindowMenuTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private WindowMenu windowmenu; - // JUnitDoclet end class - - /** - * Constructor WindowMenuTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public WindowMenuTest(String name) { - // JUnitDoclet begin method WindowMenuTest - super(name); - // JUnitDoclet end method WindowMenuTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.contrib.WindowMenu createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - MDIDesktopPane desktop = (MDIDesktopPane) ((DrawApplication)getDrawingEditor()).getDesktop(); - return new CH.ifa.draw.contrib.WindowMenu("TestWindowMenu", desktop, getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - windowmenu = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - windowmenu = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/figures/AllTests.java deleted file mode 100644 index c29c385ad..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/AllTests.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.figures"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(ArrowTipTest.class)); - suite.addTest(new TestSuite(BorderDecoratorTest.class)); - suite.addTest(new TestSuite(BorderToolTest.class)); - suite.addTest(new TestSuite(ChopEllipseConnectorTest.class)); - suite.addTest(new TestSuite(ConnectedTextToolTest.class)); - suite.addTest(new TestSuite(ElbowConnectionTest.class)); - suite.addTest(new TestSuite(ElbowHandleTest.class)); - suite.addTest(new TestSuite(EllipseFigureTest.class)); - suite.addTest(new TestSuite(FigureAttributesTest.class)); - suite.addTest(new TestSuite(FontSizeHandleTest.class)); - suite.addTest(new TestSuite(GroupCommandTest.class)); - suite.addTest(new TestSuite(GroupFigureTest.class)); - suite.addTest(new TestSuite(ImageFigureTest.class)); - suite.addTest(new TestSuite(InsertImageCommandTest.class)); - suite.addTest(new TestSuite(LineConnectionTest.class)); - suite.addTest(new TestSuite(LineFigureTest.class)); - suite.addTest(new TestSuite(NullConnectorTest.class)); - suite.addTest(new TestSuite(NullFigureTest.class)); - suite.addTest(new TestSuite(NumberTextFigureTest.class)); - suite.addTest(new TestSuite(PolyLineConnectorTest.class)); - suite.addTest(new TestSuite(PolyLineFigureTest.class)); - suite.addTest(new TestSuite(PolyLineHandleTest.class)); - suite.addTest(new TestSuite(RectangleFigureTest.class)); - suite.addTest(new TestSuite(RoundRectangleFigureTest.class)); - suite.addTest(new TestSuite(ScribbleToolTest.class)); - suite.addTest(new TestSuite(ShortestDistanceConnectorTest.class)); - suite.addTest(new TestSuite(TextFigureTest.class)); - suite.addTest(new TestSuite(TextToolTest.class)); - suite.addTest(new TestSuite(UngroupCommandTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/ArrowTipTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/ArrowTipTest.java deleted file mode 100644 index 7d4097e6a..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/ArrowTipTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.ArrowTip; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase ArrowTipTest is generated by - * JUnitDoclet to hold the tests for ArrowTip. - * @see CH.ifa.draw.figures.ArrowTip - */ -// JUnitDoclet end javadoc_class -public class ArrowTipTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ArrowTip arrowtip; - // JUnitDoclet end class - - /** - * Constructor ArrowTipTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ArrowTipTest(String name) { - // JUnitDoclet begin method ArrowTipTest - super(name); - // JUnitDoclet end method ArrowTipTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.ArrowTip createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.ArrowTip(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - arrowtip = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - arrowtip = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method outline() - /** - * Method testOutline is testing outline - * @see CH.ifa.draw.figures.ArrowTip#outline(int, int, int, int) - */ - // JUnitDoclet end javadoc_method outline() - public void testOutline() throws Exception { - // JUnitDoclet begin method outline - // JUnitDoclet end method outline - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.figures.ArrowTip#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.figures.ArrowTip#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/BorderDecoratorTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/BorderDecoratorTest.java deleted file mode 100644 index fc4155659..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/BorderDecoratorTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import java.awt.Point; - -import CH.ifa.draw.figures.BorderDecorator; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BorderDecoratorTest is generated by - * JUnitDoclet to hold the tests for BorderDecorator. - * @see CH.ifa.draw.figures.BorderDecorator - */ -// JUnitDoclet end javadoc_class -public class BorderDecoratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BorderDecorator borderdecorator; - // JUnitDoclet end class - - /** - * Constructor BorderDecoratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BorderDecoratorTest(String name) { - // JUnitDoclet begin method BorderDecoratorTest - super(name); - // JUnitDoclet end method BorderDecoratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.BorderDecorator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.BorderDecorator(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - borderdecorator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - borderdecorator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setBorderOffset() - /** - * Method testSetGetBorderOffset is testing setBorderOffset - * and getBorderOffset together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.figures.BorderDecorator#setBorderOffset(java.awt.Point) - * @see CH.ifa.draw.figures.BorderDecorator#getBorderOffset() - */ - // JUnitDoclet end javadoc_method setBorderOffset() - public void testSetGetBorderOffset() throws Exception { - // JUnitDoclet begin method setBorderOffset getBorderOffset - Point[] tests = { new java.awt.Point()}; - - for (int i = 0; i < tests.length; i++) { - borderdecorator.setBorderOffset(tests[i]); - assertEquals(tests[i], borderdecorator.getBorderOffset()); - } - // JUnitDoclet end method setBorderOffset getBorderOffset - } - - // JUnitDoclet begin method setNullBorderOffset() - /** - * Test a null argument to setBorderOffset. Expect an Point(0, 0) to come back - * - * @see CH.ifa.draw.figures.BorderDecorator#setBorderOffset(java.awt.Point) - */ - public void setNullBorderOffset() throws Exception { - Point original = borderdecorator.getBorderOffset(); - - borderdecorator.setBorderOffset(null); - assertEquals(new Point(0, 0), borderdecorator.getBorderOffset()); - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.figures.BorderDecorator#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.figures.BorderDecorator#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see CH.ifa.draw.figures.BorderDecorator#figureInvalidated(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see CH.ifa.draw.figures.BorderDecorator#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/BorderToolTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/BorderToolTest.java deleted file mode 100644 index 65c4935ee..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/BorderToolTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.BorderTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BorderToolTest is generated by - * JUnitDoclet to hold the tests for BorderTool. - * @see CH.ifa.draw.figures.BorderTool - */ -// JUnitDoclet end javadoc_class -public class BorderToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BorderTool bordertool; - // JUnitDoclet end class - - /** - * Constructor BorderToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BorderToolTest(String name) { - // JUnitDoclet begin method BorderToolTest - super(name); - // JUnitDoclet end method BorderToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.BorderTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.BorderTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bordertool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bordertool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.figures.BorderTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method action() - /** - * Method testAction is testing action - * @see CH.ifa.draw.figures.BorderTool#action(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method action() - public void testAction() throws Exception { - // JUnitDoclet begin method action - // JUnitDoclet end method action - } - - // JUnitDoclet begin javadoc_method reverseAction() - /** - * Method testReverseAction is testing reverseAction - * @see CH.ifa.draw.figures.BorderTool#reverseAction(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method reverseAction() - public void testReverseAction() throws Exception { - // JUnitDoclet begin method reverseAction - // JUnitDoclet end method reverseAction - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/ChopEllipseConnectorTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/ChopEllipseConnectorTest.java deleted file mode 100644 index fe3190f35..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/ChopEllipseConnectorTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.ChopEllipseConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChopEllipseConnectorTest is generated by - * JUnitDoclet to hold the tests for ChopEllipseConnector. - * @see CH.ifa.draw.figures.ChopEllipseConnector - */ -// JUnitDoclet end javadoc_class -public class ChopEllipseConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChopEllipseConnector chopellipseconnector; - // JUnitDoclet end class - - /** - * Constructor ChopEllipseConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChopEllipseConnectorTest(String name) { - // JUnitDoclet begin method ChopEllipseConnectorTest - super(name); - // JUnitDoclet end method ChopEllipseConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.ChopEllipseConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.ChopEllipseConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - chopellipseconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - chopellipseconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/ConnectedTextToolTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/ConnectedTextToolTest.java deleted file mode 100644 index 0f327d70d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/ConnectedTextToolTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.ConnectedTextTool; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ConnectedTextToolTest is generated by - * JUnitDoclet to hold the tests for ConnectedTextTool. - * @see CH.ifa.draw.figures.ConnectedTextTool - */ -// JUnitDoclet end javadoc_class -public class ConnectedTextToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ConnectedTextTool connectedtexttool; - // JUnitDoclet end class - - /** - * Constructor ConnectedTextToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ConnectedTextToolTest(String name) { - // JUnitDoclet begin method ConnectedTextToolTest - super(name); - // JUnitDoclet end method ConnectedTextToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.ConnectedTextTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.ConnectedTextTool(getDrawingEditor(), new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - connectedtexttool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - connectedtexttool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.figures.ConnectedTextTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method getConnectedFigure() - /** - * Method testGetConnectedFigure is testing getConnectedFigure - * @see CH.ifa.draw.figures.ConnectedTextTool#getConnectedFigure() - */ - // JUnitDoclet end javadoc_method getConnectedFigure() - public void testGetConnectedFigure() throws Exception { - // JUnitDoclet begin method getConnectedFigure - // JUnitDoclet end method getConnectedFigure - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.figures.ConnectedTextTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/ElbowConnectionTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/ElbowConnectionTest.java deleted file mode 100644 index 0199f0334..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/ElbowConnectionTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.ElbowConnection; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ElbowConnectionTest is generated by - * JUnitDoclet to hold the tests for ElbowConnection. - * @see CH.ifa.draw.figures.ElbowConnection - */ -// JUnitDoclet end javadoc_class -public class ElbowConnectionTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ElbowConnection elbowconnection; - // JUnitDoclet end class - - /** - * Constructor ElbowConnectionTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ElbowConnectionTest(String name) { - // JUnitDoclet begin method ElbowConnectionTest - super(name); - // JUnitDoclet end method ElbowConnectionTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.ElbowConnection createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.ElbowConnection(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - elbowconnection = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - elbowconnection = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method updateConnection() - /** - * Method testUpdateConnection is testing updateConnection - * @see CH.ifa.draw.figures.ElbowConnection#updateConnection() - */ - // JUnitDoclet end javadoc_method updateConnection() - public void testUpdateConnection() throws Exception { - // JUnitDoclet begin method updateConnection - // JUnitDoclet end method updateConnection - } - - // JUnitDoclet begin javadoc_method layoutConnection() - /** - * Method testLayoutConnection is testing layoutConnection - * @see CH.ifa.draw.figures.ElbowConnection#layoutConnection() - */ - // JUnitDoclet end javadoc_method layoutConnection() - public void testLayoutConnection() throws Exception { - // JUnitDoclet begin method layoutConnection - // JUnitDoclet end method layoutConnection - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.ElbowConnection#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method connectedTextLocator() - /** - * Method testConnectedTextLocator is testing connectedTextLocator - * @see CH.ifa.draw.figures.ElbowConnection#connectedTextLocator(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method connectedTextLocator() - public void testConnectedTextLocator() throws Exception { - // JUnitDoclet begin method connectedTextLocator - // JUnitDoclet end method connectedTextLocator - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/ElbowHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/ElbowHandleTest.java deleted file mode 100644 index 546e99751..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/ElbowHandleTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.ElbowHandle; -import CH.ifa.draw.figures.LineConnection; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ElbowHandleTest is generated by - * JUnitDoclet to hold the tests for ElbowHandle. - * @see CH.ifa.draw.figures.ElbowHandle - */ -// JUnitDoclet end javadoc_class -public class ElbowHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ElbowHandle elbowhandle; - // JUnitDoclet end class - - /** - * Constructor ElbowHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ElbowHandleTest(String name) { - // JUnitDoclet begin method ElbowHandleTest - super(name); - // JUnitDoclet end method ElbowHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.ElbowHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - LineConnection lineConn = new LineConnection(); - //lineConn.connectStart(); - //lineConn.connectEnd(); - return new CH.ifa.draw.figures.ElbowHandle(lineConn, 1); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - elbowhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - elbowhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see CH.ifa.draw.figures.ElbowHandle#invokeStart(int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see CH.ifa.draw.figures.ElbowHandle#invokeStep(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see CH.ifa.draw.figures.ElbowHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.figures.ElbowHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/EllipseFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/EllipseFigureTest.java deleted file mode 100644 index 3b29b28d4..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/EllipseFigureTest.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.EllipseFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase EllipseFigureTest is generated by - * JUnitDoclet to hold the tests for EllipseFigure. - * @see CH.ifa.draw.figures.EllipseFigure - */ -// JUnitDoclet end javadoc_class -public class EllipseFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private EllipseFigure ellipsefigure; - // JUnitDoclet end class - - /** - * Constructor EllipseFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public EllipseFigureTest(String name) { - // JUnitDoclet begin method EllipseFigureTest - super(name); - // JUnitDoclet end method EllipseFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.EllipseFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.EllipseFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - ellipsefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - ellipsefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.EllipseFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.figures.EllipseFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.figures.EllipseFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see CH.ifa.draw.figures.EllipseFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see CH.ifa.draw.figures.EllipseFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see CH.ifa.draw.figures.EllipseFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see CH.ifa.draw.figures.EllipseFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.figures.EllipseFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.figures.EllipseFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/FigureAttributesTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/FigureAttributesTest.java deleted file mode 100644 index d785ce465..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/FigureAttributesTest.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.FigureAttributes; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureAttributesTest is generated by - * JUnitDoclet to hold the tests for FigureAttributes. - * @see CH.ifa.draw.figures.FigureAttributes - */ -// JUnitDoclet end javadoc_class -public class FigureAttributesTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureAttributes figureattributes; - // JUnitDoclet end class - - /** - * Constructor FigureAttributesTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureAttributesTest(String name) { - // JUnitDoclet begin method FigureAttributesTest - super(name); - // JUnitDoclet end method FigureAttributesTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.FigureAttributes createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.FigureAttributes(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figureattributes = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figureattributes = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method get() - /** - * Method testGet is testing get - * @see CH.ifa.draw.figures.FigureAttributes#get(CH.ifa.draw.framework.FigureAttributeConstant) - */ - // JUnitDoclet end javadoc_method get() - public void testGet() throws Exception { - // JUnitDoclet begin method get - // JUnitDoclet end method get - } - - // JUnitDoclet begin javadoc_method set() - /** - * Method testSet is testing set - * @see CH.ifa.draw.figures.FigureAttributes#set(CH.ifa.draw.framework.FigureAttributeConstant, java.lang.Object) - */ - // JUnitDoclet end javadoc_method set() - public void testSet() throws Exception { - // JUnitDoclet begin method set - // JUnitDoclet end method set - } - - // JUnitDoclet begin javadoc_method hasDefined() - /** - * Method testHasDefined is testing hasDefined - * @see CH.ifa.draw.figures.FigureAttributes#hasDefined(CH.ifa.draw.framework.FigureAttributeConstant) - */ - // JUnitDoclet end javadoc_method hasDefined() - public void testHasDefined() throws Exception { - // JUnitDoclet begin method hasDefined - // JUnitDoclet end method hasDefined - } - - // JUnitDoclet begin javadoc_method clone() - /** - * Method testClone is testing clone - * @see CH.ifa.draw.figures.FigureAttributes#clone() - */ - // JUnitDoclet end javadoc_method clone() - public void testClone() throws Exception { - // JUnitDoclet begin method clone - // JUnitDoclet end method clone - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.figures.FigureAttributes#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.figures.FigureAttributes#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method writeColor() - /** - * Method testWriteColor is testing writeColor - * @see CH.ifa.draw.figures.FigureAttributes#writeColor(CH.ifa.draw.util.StorableOutput, java.lang.String, java.awt.Color) - */ - // JUnitDoclet end javadoc_method writeColor() - public void testWriteColor() throws Exception { - // JUnitDoclet begin method writeColor - // JUnitDoclet end method writeColor - } - - // JUnitDoclet begin javadoc_method readColor() - /** - * Method testReadColor is testing readColor - * @see CH.ifa.draw.figures.FigureAttributes#readColor(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method readColor() - public void testReadColor() throws Exception { - // JUnitDoclet begin method readColor - // JUnitDoclet end method readColor - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/FiguresSuite.java b/JHotDraw/src/CH/ifa/draw/test/figures/FiguresSuite.java deleted file mode 100644 index 0af77d546..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/FiguresSuite.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * @(#)FiguresSuite.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite FiguresSuite -*/ -// JUnitDoclet end javadoc_class -public class FiguresSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.figures"); - - suite.addTestSuite(CH.ifa.draw.test.figures.NullConnectorTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.NullFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.UngroupCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.ShortestDistanceConnectorTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.ScribbleToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.RectangleFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.RoundRectangleFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.PolyLineHandleTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.PolyLineConnectorTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.NumberTextFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.LineFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.InsertImageCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.ImageFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.GroupFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.GroupCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.FontSizeHandleTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.EllipseFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.ElbowHandleTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.ElbowConnectionTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.TextToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.ConnectedTextToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.ChopEllipseConnectorTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.BorderToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.BorderDecoratorTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.ArrowTipTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.FigureAttributesTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.TextFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.PolyLineFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.figures.LineConnectionTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/FontSizeHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/FontSizeHandleTest.java deleted file mode 100644 index 2419836ac..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/FontSizeHandleTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.FontSizeHandle; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.RelativeLocator; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FontSizeHandleTest is generated by - * JUnitDoclet to hold the tests for FontSizeHandle. - * @see CH.ifa.draw.figures.FontSizeHandle - */ -// JUnitDoclet end javadoc_class -public class FontSizeHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FontSizeHandle fontsizehandle; - // JUnitDoclet end class - - /** - * Constructor FontSizeHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FontSizeHandleTest(String name) { - // JUnitDoclet begin method FontSizeHandleTest - super(name); - // JUnitDoclet end method FontSizeHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.FontSizeHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.FontSizeHandle(new RectangleFigure(new Point(10, 10), new Point(100, 100)), new RelativeLocator()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - fontsizehandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - fontsizehandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see CH.ifa.draw.figures.FontSizeHandle#invokeStart(int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see CH.ifa.draw.figures.FontSizeHandle#invokeStep(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see CH.ifa.draw.figures.FontSizeHandle#invokeEnd(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.figures.FontSizeHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/GroupCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/GroupCommandTest.java deleted file mode 100644 index 8557994c7..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/GroupCommandTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.GroupCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase GroupCommandTest is generated by - * JUnitDoclet to hold the tests for GroupCommand. - * @see CH.ifa.draw.figures.GroupCommand - */ -// JUnitDoclet end javadoc_class -public class GroupCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GroupCommand groupcommand; - // JUnitDoclet end class - - /** - * Constructor GroupCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GroupCommandTest(String name) { - // JUnitDoclet begin method GroupCommandTest - super(name); - // JUnitDoclet end method GroupCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.GroupCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.GroupCommand("TestGroup", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - groupcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - groupcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.figures.GroupCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see CH.ifa.draw.figures.GroupCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/GroupFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/GroupFigureTest.java deleted file mode 100644 index 3ba920d35..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/GroupFigureTest.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.GroupFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase GroupFigureTest is generated by - * JUnitDoclet to hold the tests for GroupFigure. - * @see CH.ifa.draw.figures.GroupFigure - */ -// JUnitDoclet end javadoc_class -public class GroupFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GroupFigure groupfigure; - // JUnitDoclet end class - - /** - * Constructor GroupFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GroupFigureTest(String name) { - // JUnitDoclet begin method GroupFigureTest - super(name); - // JUnitDoclet end method GroupFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.GroupFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.GroupFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - groupfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - groupfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method canConnect() - /** - * Method testCanConnect is testing canConnect - * @see CH.ifa.draw.figures.GroupFigure#canConnect() - */ - // JUnitDoclet end javadoc_method canConnect() - public void testCanConnect() throws Exception { - // JUnitDoclet begin method canConnect - // JUnitDoclet end method canConnect - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.figures.GroupFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.figures.GroupFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method decompose() - /** - * Method testDecompose is testing decompose - * @see CH.ifa.draw.figures.GroupFigure#decompose() - */ - // JUnitDoclet end javadoc_method decompose() - public void testDecompose() throws Exception { - // JUnitDoclet begin method decompose - // JUnitDoclet end method decompose - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.GroupFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see CH.ifa.draw.figures.GroupFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/ImageFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/ImageFigureTest.java deleted file mode 100644 index 3ed6a9954..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/ImageFigureTest.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.ImageFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ImageFigureTest is generated by - * JUnitDoclet to hold the tests for ImageFigure. - * @see CH.ifa.draw.figures.ImageFigure - */ -// JUnitDoclet end javadoc_class -public class ImageFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ImageFigure imagefigure; - // JUnitDoclet end class - - /** - * Constructor ImageFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ImageFigureTest(String name) { - // JUnitDoclet begin method ImageFigureTest - super(name); - // JUnitDoclet end method ImageFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.ImageFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.ImageFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - imagefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - imagefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.figures.ImageFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.ImageFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.figures.ImageFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.figures.ImageFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method imageUpdate() - /** - * Method testImageUpdate is testing imageUpdate - * @see CH.ifa.draw.figures.ImageFigure#imageUpdate(java.awt.Image, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method imageUpdate() - public void testImageUpdate() throws Exception { - // JUnitDoclet begin method imageUpdate - // JUnitDoclet end method imageUpdate - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see CH.ifa.draw.figures.ImageFigure#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.figures.ImageFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.figures.ImageFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/InsertImageCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/InsertImageCommandTest.java deleted file mode 100644 index 629fc0ffd..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/InsertImageCommandTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.InsertImageCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase InsertImageCommandTest is generated by - * JUnitDoclet to hold the tests for InsertImageCommand. - * @see CH.ifa.draw.figures.InsertImageCommand - */ -// JUnitDoclet end javadoc_class -public class InsertImageCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private InsertImageCommand insertimagecommand; - private static String fgSampleImagesPath = "/CH/ifa/draw/samples/javadraw/sampleimages/DUKE.gif"; - // JUnitDoclet end class - - /** - * Constructor InsertImageCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public InsertImageCommandTest(String name) { - // JUnitDoclet begin method InsertImageCommandTest - super(name); - // JUnitDoclet end method InsertImageCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.InsertImageCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.InsertImageCommand("TestImage", fgSampleImagesPath, getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - insertimagecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - insertimagecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.figures.InsertImageCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/LineConnectionTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/LineConnectionTest.java deleted file mode 100644 index 89e888bc2..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/LineConnectionTest.java +++ /dev/null @@ -1,397 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.LineConnection; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase LineConnectionTest is generated by - * JUnitDoclet to hold the tests for LineConnection. - * @see CH.ifa.draw.figures.LineConnection - */ -// JUnitDoclet end javadoc_class -public class LineConnectionTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private LineConnection lineconnection; - // JUnitDoclet end class - - /** - * Constructor LineConnectionTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public LineConnectionTest(String name) { - // JUnitDoclet begin method LineConnectionTest - super(name); - // JUnitDoclet end method LineConnectionTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.LineConnection createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.LineConnection(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - lineconnection = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - lineconnection = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method canConnect() - /** - * Method testCanConnect is testing canConnect - * @see CH.ifa.draw.figures.LineConnection#canConnect() - */ - // JUnitDoclet end javadoc_method canConnect() - public void testCanConnect() throws Exception { - // JUnitDoclet begin method canConnect - // JUnitDoclet end method canConnect - } - - // JUnitDoclet begin javadoc_method connectStart() - /** - * Method testConnectStart is testing connectStart - * @see CH.ifa.draw.figures.LineConnection#connectStart(CH.ifa.draw.framework.Connector) - */ - // JUnitDoclet end javadoc_method connectStart() - public void testConnectStart() throws Exception { - // JUnitDoclet begin method connectStart - // JUnitDoclet end method connectStart - } - - // JUnitDoclet begin javadoc_method connectEnd() - /** - * Method testConnectEnd is testing connectEnd - * @see CH.ifa.draw.figures.LineConnection#connectEnd(CH.ifa.draw.framework.Connector) - */ - // JUnitDoclet end javadoc_method connectEnd() - public void testConnectEnd() throws Exception { - // JUnitDoclet begin method connectEnd - // JUnitDoclet end method connectEnd - } - - // JUnitDoclet begin javadoc_method disconnectStart() - /** - * Method testDisconnectStart is testing disconnectStart - * @see CH.ifa.draw.figures.LineConnection#disconnectStart() - */ - // JUnitDoclet end javadoc_method disconnectStart() - public void testDisconnectStart() throws Exception { - // JUnitDoclet begin method disconnectStart - // JUnitDoclet end method disconnectStart - } - - // JUnitDoclet begin javadoc_method disconnectEnd() - /** - * Method testDisconnectEnd is testing disconnectEnd - * @see CH.ifa.draw.figures.LineConnection#disconnectEnd() - */ - // JUnitDoclet end javadoc_method disconnectEnd() - public void testDisconnectEnd() throws Exception { - // JUnitDoclet begin method disconnectEnd - // JUnitDoclet end method disconnectEnd - } - - // JUnitDoclet begin javadoc_method connectsSame() - /** - * Method testConnectsSame is testing connectsSame - * @see CH.ifa.draw.figures.LineConnection#connectsSame(CH.ifa.draw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method connectsSame() - public void testConnectsSame() throws Exception { - // JUnitDoclet begin method connectsSame - // JUnitDoclet end method connectsSame - } - - // JUnitDoclet begin javadoc_method startFigure() - /** - * Method testStartFigure is testing startFigure - * @see CH.ifa.draw.figures.LineConnection#startFigure() - */ - // JUnitDoclet end javadoc_method startFigure() - public void testStartFigure() throws Exception { - // JUnitDoclet begin method startFigure - // JUnitDoclet end method startFigure - } - - // JUnitDoclet begin javadoc_method endFigure() - /** - * Method testEndFigure is testing endFigure - * @see CH.ifa.draw.figures.LineConnection#endFigure() - */ - // JUnitDoclet end javadoc_method endFigure() - public void testEndFigure() throws Exception { - // JUnitDoclet begin method endFigure - // JUnitDoclet end method endFigure - } - - // JUnitDoclet begin javadoc_method getStartConnector() - /** - * Method testGetStartConnector is testing getStartConnector - * @see CH.ifa.draw.figures.LineConnection#getStartConnector() - */ - // JUnitDoclet end javadoc_method getStartConnector() - public void testGetStartConnector() throws Exception { - // JUnitDoclet begin method getStartConnector - // JUnitDoclet end method getStartConnector - } - - // JUnitDoclet begin javadoc_method getEndConnector() - /** - * Method testGetEndConnector is testing getEndConnector - * @see CH.ifa.draw.figures.LineConnection#getEndConnector() - */ - // JUnitDoclet end javadoc_method getEndConnector() - public void testGetEndConnector() throws Exception { - // JUnitDoclet begin method getEndConnector - // JUnitDoclet end method getEndConnector - } - - // JUnitDoclet begin javadoc_method startPoint() - /** - * Method testStartPoint is testing startPoint - * @see CH.ifa.draw.figures.LineConnection#startPoint(int, int) - */ - // JUnitDoclet end javadoc_method startPoint() - public void testStartPoint() throws Exception { - // JUnitDoclet begin method startPoint - // JUnitDoclet end method startPoint - } - - // JUnitDoclet begin javadoc_method endPoint() - /** - * Method testEndPoint is testing endPoint - * @see CH.ifa.draw.figures.LineConnection#endPoint(int, int) - */ - // JUnitDoclet end javadoc_method endPoint() - public void testEndPoint() throws Exception { - // JUnitDoclet begin method endPoint - // JUnitDoclet end method endPoint - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.LineConnection#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method setPointAt() - /** - * Method testSetPointAt is testing setPointAt - * @see CH.ifa.draw.figures.LineConnection#setPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method setPointAt() - public void testSetPointAt() throws Exception { - // JUnitDoclet begin method setPointAt - // JUnitDoclet end method setPointAt - } - - // JUnitDoclet begin javadoc_method insertPointAt() - /** - * Method testInsertPointAt is testing insertPointAt - * @see CH.ifa.draw.figures.LineConnection#insertPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method insertPointAt() - public void testInsertPointAt() throws Exception { - // JUnitDoclet begin method insertPointAt - // JUnitDoclet end method insertPointAt - } - - // JUnitDoclet begin javadoc_method removePointAt() - /** - * Method testRemovePointAt is testing removePointAt - * @see CH.ifa.draw.figures.LineConnection#removePointAt(int) - */ - // JUnitDoclet end javadoc_method removePointAt() - public void testRemovePointAt() throws Exception { - // JUnitDoclet begin method removePointAt - // JUnitDoclet end method removePointAt - } - - // JUnitDoclet begin javadoc_method updateConnection() - /** - * Method testUpdateConnection is testing updateConnection - * @see CH.ifa.draw.figures.LineConnection#updateConnection() - */ - // JUnitDoclet end javadoc_method updateConnection() - public void testUpdateConnection() throws Exception { - // JUnitDoclet begin method updateConnection - // JUnitDoclet end method updateConnection - } - - // JUnitDoclet begin javadoc_method layoutConnection() - /** - * Method testLayoutConnection is testing layoutConnection - * @see CH.ifa.draw.figures.LineConnection#layoutConnection() - */ - // JUnitDoclet end javadoc_method layoutConnection() - public void testLayoutConnection() throws Exception { - // JUnitDoclet begin method layoutConnection - // JUnitDoclet end method layoutConnection - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see CH.ifa.draw.figures.LineConnection#figureChanged(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see CH.ifa.draw.figures.LineConnection#figureRemoved(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see CH.ifa.draw.figures.LineConnection#figureRequestRemove(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see CH.ifa.draw.figures.LineConnection#figureInvalidated(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see CH.ifa.draw.figures.LineConnection#figureRequestUpdate(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see CH.ifa.draw.figures.LineConnection#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.figures.LineConnection#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.figures.LineConnection#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method visit() - /** - * Method testVisit is testing visit - * @see CH.ifa.draw.figures.LineConnection#visit(CH.ifa.draw.framework.FigureVisitor) - */ - // JUnitDoclet end javadoc_method visit() - public void testVisit() throws Exception { - // JUnitDoclet begin method visit - // JUnitDoclet end method visit - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/LineFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/LineFigureTest.java deleted file mode 100644 index d3197e846..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/LineFigureTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.LineFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase LineFigureTest is generated by - * JUnitDoclet to hold the tests for LineFigure. - * @see CH.ifa.draw.figures.LineFigure - */ -// JUnitDoclet end javadoc_class -public class LineFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private LineFigure linefigure; - // JUnitDoclet end class - - /** - * Constructor LineFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public LineFigureTest(String name) { - // JUnitDoclet begin method LineFigureTest - super(name); - // JUnitDoclet end method LineFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.LineFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.LineFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - linefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - linefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method startPoint() - /** - * Method testStartPoint is testing startPoint - * @see CH.ifa.draw.figures.LineFigure#startPoint() - */ - // JUnitDoclet end javadoc_method startPoint() - public void testStartPoint() throws Exception { - // JUnitDoclet begin method startPoint - // JUnitDoclet end method startPoint - } - - // JUnitDoclet begin javadoc_method endPoint() - /** - * Method testEndPoint is testing endPoint - * @see CH.ifa.draw.figures.LineFigure#endPoint() - */ - // JUnitDoclet end javadoc_method endPoint() - public void testEndPoint() throws Exception { - // JUnitDoclet begin method endPoint - // JUnitDoclet end method endPoint - } - - // JUnitDoclet begin javadoc_method setPoints() - /** - * Method testSetPoints is testing setPoints - * @see CH.ifa.draw.figures.LineFigure#setPoints(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method setPoints() - public void testSetPoints() throws Exception { - // JUnitDoclet begin method setPoints - // JUnitDoclet end method setPoints - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.figures.LineFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/NullConnectorTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/NullConnectorTest.java deleted file mode 100644 index 59fe77d02..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/NullConnectorTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import java.awt.Point; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import CH.ifa.draw.figures.NullConnector; -import CH.ifa.draw.figures.RectangleFigure; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullConnectorTest is generated by - * JUnitDoclet to hold the tests for NullConnector. - * @see CH.ifa.draw.figures.NullConnector - */ -// JUnitDoclet end javadoc_class -public class NullConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullConnector nullconnector; - // JUnitDoclet end class - - /** - * Constructor NullConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullConnectorTest(String name) { - // JUnitDoclet begin method NullConnectorTest - super(name); - // JUnitDoclet end method NullConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.NullConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.NullConnector(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nullconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nullconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/NullFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/NullFigureTest.java deleted file mode 100644 index 5a0a03ba2..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/NullFigureTest.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.NullFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullFigureTest is generated by - * JUnitDoclet to hold the tests for NullFigure. - * @see CH.ifa.draw.figures.NullFigure - */ -// JUnitDoclet end javadoc_class -public class NullFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullFigure nullfigure; - // JUnitDoclet end class - - /** - * Constructor NullFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullFigureTest(String name) { - // JUnitDoclet begin method NullFigureTest - super(name); - // JUnitDoclet end method NullFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.NullFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.NullFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nullfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nullfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.figures.NullFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.figures.NullFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.figures.NullFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.NullFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see CH.ifa.draw.figures.NullFigure#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method figures() - /** - * Method testFigures is testing figures - * @see CH.ifa.draw.figures.NullFigure#figures() - */ - // JUnitDoclet end javadoc_method figures() - public void testFigures() throws Exception { - // JUnitDoclet begin method figures - // JUnitDoclet end method figures - } - - // JUnitDoclet begin javadoc_method findFigureInside() - /** - * Method testFindFigureInside is testing findFigureInside - * @see CH.ifa.draw.figures.NullFigure#findFigureInside(int, int) - */ - // JUnitDoclet end javadoc_method findFigureInside() - public void testFindFigureInside() throws Exception { - // JUnitDoclet begin method findFigureInside - // JUnitDoclet end method findFigureInside - } - - // JUnitDoclet begin javadoc_method clone() - /** - * Method testClone is testing clone - * @see CH.ifa.draw.figures.NullFigure#clone() - */ - // JUnitDoclet end javadoc_method clone() - public void testClone() throws Exception { - // JUnitDoclet begin method clone - // JUnitDoclet end method clone - } - - // JUnitDoclet begin javadoc_method includes() - /** - * Method testIncludes is testing includes - * @see CH.ifa.draw.figures.NullFigure#includes(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method includes() - public void testIncludes() throws Exception { - // JUnitDoclet begin method includes - // JUnitDoclet end method includes - } - - // JUnitDoclet begin javadoc_method decompose() - /** - * Method testDecompose is testing decompose - * @see CH.ifa.draw.figures.NullFigure#decompose() - */ - // JUnitDoclet end javadoc_method decompose() - public void testDecompose() throws Exception { - // JUnitDoclet begin method decompose - // JUnitDoclet end method decompose - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see CH.ifa.draw.figures.NullFigure#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method invalidate() - /** - * Method testInvalidate is testing invalidate - * @see CH.ifa.draw.figures.NullFigure#invalidate() - */ - // JUnitDoclet end javadoc_method invalidate() - public void testInvalidate() throws Exception { - // JUnitDoclet begin method invalidate - // JUnitDoclet end method invalidate - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see CH.ifa.draw.figures.NullFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see CH.ifa.draw.figures.NullFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/NumberTextFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/NumberTextFigureTest.java deleted file mode 100644 index cb7f0f2fa..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/NumberTextFigureTest.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.NumberTextFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NumberTextFigureTest is generated by - * JUnitDoclet to hold the tests for NumberTextFigure. - * @see CH.ifa.draw.figures.NumberTextFigure - */ -// JUnitDoclet end javadoc_class -public class NumberTextFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NumberTextFigure numbertextfigure; - // JUnitDoclet end class - - /** - * Constructor NumberTextFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NumberTextFigureTest(String name) { - // JUnitDoclet begin method NumberTextFigureTest - super(name); - // JUnitDoclet end method NumberTextFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.NumberTextFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.NumberTextFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - numbertextfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - numbertextfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method overlayColumns() - /** - * Method testOverlayColumns is testing overlayColumns - * @see CH.ifa.draw.figures.NumberTextFigure#overlayColumns() - */ - // JUnitDoclet end javadoc_method overlayColumns() - public void testOverlayColumns() throws Exception { - // JUnitDoclet begin method overlayColumns - // JUnitDoclet end method overlayColumns - } - - // JUnitDoclet begin javadoc_method setValue() - /** - * Method testSetGetValue is testing setValue - * and getValue together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.figures.NumberTextFigure#setValue(int) - * @see CH.ifa.draw.figures.NumberTextFigure#getValue() - */ - // JUnitDoclet end javadoc_method setValue() - public void testSetGetValue() throws Exception { - // JUnitDoclet begin method setValue getValue - int[] tests = { Integer.MIN_VALUE, -1, 0, 1, Integer.MAX_VALUE }; - - for (int i = 0; i < tests.length; i++) { - numbertextfigure.setValue(tests[i]); - assertEquals(tests[i], numbertextfigure.getValue()); - } - // JUnitDoclet end method setValue getValue - } - - // JUnitDoclet begin javadoc_method getRepresentingFigure() - /** - * Method testGetRepresentingFigure is testing getRepresentingFigure - * @see CH.ifa.draw.figures.NumberTextFigure#getRepresentingFigure() - */ - // JUnitDoclet end javadoc_method getRepresentingFigure() - public void testGetRepresentingFigure() throws Exception { - // JUnitDoclet begin method getRepresentingFigure - // JUnitDoclet end method getRepresentingFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/PolyLineConnectorTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/PolyLineConnectorTest.java deleted file mode 100644 index b8f32cba6..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/PolyLineConnectorTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.PolyLineConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolyLineConnectorTest is generated by - * JUnitDoclet to hold the tests for PolyLineConnector. - * @see CH.ifa.draw.figures.PolyLineConnector - */ -// JUnitDoclet end javadoc_class -public class PolyLineConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolyLineConnector polylineconnector; - // JUnitDoclet end class - - /** - * Constructor PolyLineConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolyLineConnectorTest(String name) { - // JUnitDoclet begin method PolyLineConnectorTest - super(name); - // JUnitDoclet end method PolyLineConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.PolyLineConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.PolyLineConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polylineconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polylineconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/PolyLineFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/PolyLineFigureTest.java deleted file mode 100644 index afa791ab9..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/PolyLineFigureTest.java +++ /dev/null @@ -1,383 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import CH.ifa.draw.figures.ArrowTip; -import CH.ifa.draw.figures.PolyLineFigure; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolyLineFigureTest is generated by - * JUnitDoclet to hold the tests for PolyLineFigure. - * @see CH.ifa.draw.figures.PolyLineFigure - */ -// JUnitDoclet end javadoc_class -public class PolyLineFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolyLineFigure polylinefigure; - // JUnitDoclet end class - - /** - * Constructor PolyLineFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolyLineFigureTest(String name) { - // JUnitDoclet begin method PolyLineFigureTest - super(name); - // JUnitDoclet end method PolyLineFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.PolyLineFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.PolyLineFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polylinefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polylinefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.figures.PolyLineFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see CH.ifa.draw.figures.PolyLineFigure#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.PolyLineFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.figures.PolyLineFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method addPoint() - /** - * Method testAddPoint is testing addPoint - * @see CH.ifa.draw.figures.PolyLineFigure#addPoint(int, int) - */ - // JUnitDoclet end javadoc_method addPoint() - public void testAddPoint() throws Exception { - // JUnitDoclet begin method addPoint - // JUnitDoclet end method addPoint - } - - // JUnitDoclet begin javadoc_method points() - /** - * Method testPoints is testing points - * @see CH.ifa.draw.figures.PolyLineFigure#points() - */ - // JUnitDoclet end javadoc_method points() - public void testPoints() throws Exception { - // JUnitDoclet begin method points - // JUnitDoclet end method points - } - - // JUnitDoclet begin javadoc_method pointCount() - /** - * Method testPointCount is testing pointCount - * @see CH.ifa.draw.figures.PolyLineFigure#pointCount() - */ - // JUnitDoclet end javadoc_method pointCount() - public void testPointCount() throws Exception { - // JUnitDoclet begin method pointCount - // JUnitDoclet end method pointCount - } - - // JUnitDoclet begin javadoc_method setPointAt() - /** - * Method testSetPointAt is testing setPointAt - * @see CH.ifa.draw.figures.PolyLineFigure#setPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method setPointAt() - public void testSetPointAt() throws Exception { - // JUnitDoclet begin method setPointAt - // JUnitDoclet end method setPointAt - } - - // JUnitDoclet begin javadoc_method insertPointAt() - /** - * Method testInsertPointAt is testing insertPointAt - * @see CH.ifa.draw.figures.PolyLineFigure#insertPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method insertPointAt() - public void testInsertPointAt() throws Exception { - // JUnitDoclet begin method insertPointAt - // JUnitDoclet end method insertPointAt - } - - // JUnitDoclet begin javadoc_method removePointAt() - /** - * Method testRemovePointAt is testing removePointAt - * @see CH.ifa.draw.figures.PolyLineFigure#removePointAt(int) - */ - // JUnitDoclet end javadoc_method removePointAt() - public void testRemovePointAt() throws Exception { - // JUnitDoclet begin method removePointAt - // JUnitDoclet end method removePointAt - } - - // JUnitDoclet begin javadoc_method splitSegment() - /** - * Method testSplitSegment is testing splitSegment - * @see CH.ifa.draw.figures.PolyLineFigure#splitSegment(int, int) - */ - // JUnitDoclet end javadoc_method splitSegment() - public void testSplitSegment() throws Exception { - // JUnitDoclet begin method splitSegment - // JUnitDoclet end method splitSegment - } - - // JUnitDoclet begin javadoc_method pointAt() - /** - * Method testPointAt is testing pointAt - * @see CH.ifa.draw.figures.PolyLineFigure#pointAt(int) - */ - // JUnitDoclet end javadoc_method pointAt() - public void testPointAt() throws Exception { - // JUnitDoclet begin method pointAt - // JUnitDoclet end method pointAt - } - - // JUnitDoclet begin javadoc_method joinSegments() - /** - * Method testJoinSegments is testing joinSegments - * @see CH.ifa.draw.figures.PolyLineFigure#joinSegments(int, int) - */ - // JUnitDoclet end javadoc_method joinSegments() - public void testJoinSegments() throws Exception { - // JUnitDoclet begin method joinSegments - // JUnitDoclet end method joinSegments - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see CH.ifa.draw.figures.PolyLineFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method setStartDecoration() - /** - * Method testSetGetStartDecoration is testing setStartDecoration - * and getStartDecoration together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.figures.PolyLineFigure#setStartDecoration(CH.ifa.draw.figures.LineDecoration) - * @see CH.ifa.draw.figures.PolyLineFigure#getStartDecoration() - */ - // JUnitDoclet end javadoc_method setStartDecoration() - public void testSetGetStartDecoration() throws Exception { - // JUnitDoclet begin method setStartDecoration getStartDecoration - CH.ifa.draw.figures.LineDecoration[] tests = { new ArrowTip(), null }; - - for (int i = 0; i < tests.length; i++) { - polylinefigure.setStartDecoration(tests[i]); - assertEquals(tests[i], polylinefigure.getStartDecoration()); - } - // JUnitDoclet end method setStartDecoration getStartDecoration - } - - // JUnitDoclet begin javadoc_method setEndDecoration() - /** - * Method testSetGetEndDecoration is testing setEndDecoration - * and getEndDecoration together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.figures.PolyLineFigure#setEndDecoration(CH.ifa.draw.figures.LineDecoration) - * @see CH.ifa.draw.figures.PolyLineFigure#getEndDecoration() - */ - // JUnitDoclet end javadoc_method setEndDecoration() - public void testSetGetEndDecoration() throws Exception { - // JUnitDoclet begin method setEndDecoration getEndDecoration - CH.ifa.draw.figures.LineDecoration[] tests = { new ArrowTip(), null }; - - for (int i = 0; i < tests.length; i++) { - polylinefigure.setEndDecoration(tests[i]); - assertEquals(tests[i], polylinefigure.getEndDecoration()); - } - // JUnitDoclet end method setEndDecoration getEndDecoration - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.figures.PolyLineFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see CH.ifa.draw.figures.PolyLineFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method findSegment() - /** - * Method testFindSegment is testing findSegment - * @see CH.ifa.draw.figures.PolyLineFigure#findSegment(int, int) - */ - // JUnitDoclet end javadoc_method findSegment() - public void testFindSegment() throws Exception { - // JUnitDoclet begin method findSegment - // JUnitDoclet end method findSegment - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see CH.ifa.draw.figures.PolyLineFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see CH.ifa.draw.figures.PolyLineFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.figures.PolyLineFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.figures.PolyLineFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method locator() - /** - * Method testLocator is testing locator - * @see CH.ifa.draw.figures.PolyLineFigure#locator(int) - */ - // JUnitDoclet end javadoc_method locator() - public void testLocator() throws Exception { - // JUnitDoclet begin method locator - // JUnitDoclet end method locator - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/PolyLineHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/PolyLineHandleTest.java deleted file mode 100644 index 07654beaa..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/PolyLineHandleTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.PolyLineFigure; -import CH.ifa.draw.figures.PolyLineHandle; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolyLineHandleTest is generated by - * JUnitDoclet to hold the tests for PolyLineHandle. - * @see CH.ifa.draw.figures.PolyLineHandle - */ -// JUnitDoclet end javadoc_class -public class PolyLineHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolyLineHandle polylinehandle; - // JUnitDoclet end class - - /** - * Constructor PolyLineHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolyLineHandleTest(String name) { - // JUnitDoclet begin method PolyLineHandleTest - super(name); - // JUnitDoclet end method PolyLineHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.PolyLineHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - PolyLineFigure figure = new PolyLineFigure(20, 20); - figure.addPoint(30, 30); - figure.addPoint(40, 40); - return new CH.ifa.draw.figures.PolyLineHandle(figure, PolyLineFigure.locator(2), 2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polylinehandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polylinehandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see CH.ifa.draw.figures.PolyLineHandle#invokeStart(int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see CH.ifa.draw.figures.PolyLineHandle#invokeStep(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see CH.ifa.draw.figures.PolyLineHandle#invokeEnd(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/RectangleFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/RectangleFigureTest.java deleted file mode 100644 index 539f7940d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/RectangleFigureTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.RectangleFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase RectangleFigureTest is generated by - * JUnitDoclet to hold the tests for RectangleFigure. - * @see CH.ifa.draw.figures.RectangleFigure - */ -// JUnitDoclet end javadoc_class -public class RectangleFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private RectangleFigure rectanglefigure; - // JUnitDoclet end class - - /** - * Constructor RectangleFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public RectangleFigureTest(String name) { - // JUnitDoclet begin method RectangleFigureTest - super(name); - // JUnitDoclet end method RectangleFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.RectangleFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.RectangleFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - rectanglefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - rectanglefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.figures.RectangleFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.RectangleFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.figures.RectangleFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see CH.ifa.draw.figures.RectangleFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see CH.ifa.draw.figures.RectangleFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.figures.RectangleFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.figures.RectangleFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/RoundRectangleFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/RoundRectangleFigureTest.java deleted file mode 100644 index 0aca998f5..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/RoundRectangleFigureTest.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.RoundRectangleFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase RoundRectangleFigureTest is generated by - * JUnitDoclet to hold the tests for RoundRectangleFigure. - * @see CH.ifa.draw.figures.RoundRectangleFigure - */ -// JUnitDoclet end javadoc_class -public class RoundRectangleFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private RoundRectangleFigure roundrectanglefigure; - // JUnitDoclet end class - - /** - * Constructor RoundRectangleFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public RoundRectangleFigureTest(String name) { - // JUnitDoclet begin method RoundRectangleFigureTest - super(name); - // JUnitDoclet end method RoundRectangleFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.RoundRectangleFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.RoundRectangleFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - roundrectanglefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - roundrectanglefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.figures.RoundRectangleFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method setArc() - /** - * Method testSetArc is testing setArc - * @see CH.ifa.draw.figures.RoundRectangleFigure#setArc(int, int) - */ - // JUnitDoclet end javadoc_method setArc() - public void testSetArc() throws Exception { - // JUnitDoclet begin method setArc - // JUnitDoclet end method setArc - } - - // JUnitDoclet begin javadoc_method getArc() - /** - * Method testGetArc is testing getArc - * @see CH.ifa.draw.figures.RoundRectangleFigure#getArc() - */ - // JUnitDoclet end javadoc_method getArc() - public void testGetArc() throws Exception { - // JUnitDoclet begin method getArc - // JUnitDoclet end method getArc - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.RoundRectangleFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.figures.RoundRectangleFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see CH.ifa.draw.figures.RoundRectangleFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see CH.ifa.draw.figures.RoundRectangleFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see CH.ifa.draw.figures.RoundRectangleFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see CH.ifa.draw.figures.RoundRectangleFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.figures.RoundRectangleFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.figures.RoundRectangleFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/ScribbleToolTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/ScribbleToolTest.java deleted file mode 100644 index 9fb958f3f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/ScribbleToolTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.ScribbleTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ScribbleToolTest is generated by - * JUnitDoclet to hold the tests for ScribbleTool. - * @see CH.ifa.draw.figures.ScribbleTool - */ -// JUnitDoclet end javadoc_class -public class ScribbleToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ScribbleTool scribbletool; - // JUnitDoclet end class - - /** - * Constructor ScribbleToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ScribbleToolTest(String name) { - // JUnitDoclet begin method ScribbleToolTest - super(name); - // JUnitDoclet end method ScribbleToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.ScribbleTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.ScribbleTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - scribbletool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - scribbletool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.figures.ScribbleTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.figures.ScribbleTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.figures.ScribbleTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.figures.ScribbleTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.figures.ScribbleTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/ShortestDistanceConnectorTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/ShortestDistanceConnectorTest.java deleted file mode 100644 index 423d51882..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/ShortestDistanceConnectorTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import CH.ifa.draw.figures.ShortestDistanceConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ShortestDistanceConnectorTest is generated by - * JUnitDoclet to hold the tests for ShortestDistanceConnector. - * @see CH.ifa.draw.figures.ShortestDistanceConnector - */ -// JUnitDoclet end javadoc_class -public class ShortestDistanceConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ShortestDistanceConnector shortestdistanceconnector; - // JUnitDoclet end class - - /** - * Constructor ShortestDistanceConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ShortestDistanceConnectorTest(String name) { - // JUnitDoclet begin method ShortestDistanceConnectorTest - super(name); - // JUnitDoclet end method ShortestDistanceConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.ShortestDistanceConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.ShortestDistanceConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - shortestdistanceconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - shortestdistanceconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method findStart() - /** - * Method testFindStart is testing findStart - * @see CH.ifa.draw.figures.ShortestDistanceConnector#findStart(CH.ifa.draw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method findStart() - public void testFindStart() throws Exception { - // JUnitDoclet begin method findStart - // JUnitDoclet end method findStart - } - - // JUnitDoclet begin javadoc_method findEnd() - /** - * Method testFindEnd is testing findEnd - * @see CH.ifa.draw.figures.ShortestDistanceConnector#findEnd(CH.ifa.draw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method findEnd() - public void testFindEnd() throws Exception { - // JUnitDoclet begin method findEnd - // JUnitDoclet end method findEnd - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/TextFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/TextFigureTest.java deleted file mode 100644 index c9e36517d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/TextFigureTest.java +++ /dev/null @@ -1,473 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import java.awt.Font; - -import CH.ifa.draw.figures.TextFigure; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase TextFigureTest is generated by - * JUnitDoclet to hold the tests for TextFigure. - * @see CH.ifa.draw.figures.TextFigure - */ -// JUnitDoclet end javadoc_class -public class TextFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TextFigure textfigure; - // JUnitDoclet end class - - /** - * Constructor TextFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TextFigureTest(String name) { - // JUnitDoclet begin method TextFigureTest - super(name); - // JUnitDoclet end method TextFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.TextFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.TextFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - textfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - textfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method moveBy() - /** - * Method testMoveBy is testing moveBy - * @see CH.ifa.draw.figures.TextFigure#moveBy(int, int) - */ - // JUnitDoclet end javadoc_method moveBy() - public void testMoveBy() throws Exception { - // JUnitDoclet begin method moveBy - // JUnitDoclet end method moveBy - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.figures.TextFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.figures.TextFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method textDisplayBox() - /** - * Method testTextDisplayBox is testing textDisplayBox - * @see CH.ifa.draw.figures.TextFigure#textDisplayBox() - */ - // JUnitDoclet end javadoc_method textDisplayBox() - public void testTextDisplayBox() throws Exception { - // JUnitDoclet begin method textDisplayBox - // JUnitDoclet end method textDisplayBox - } - - // JUnitDoclet begin javadoc_method readOnly() - /** - * Method testReadOnly is testing readOnly - * @see CH.ifa.draw.figures.TextFigure#readOnly() - */ - // JUnitDoclet end javadoc_method readOnly() - public void testReadOnly() throws Exception { - // JUnitDoclet begin method readOnly - // JUnitDoclet end method readOnly - } - - // JUnitDoclet begin javadoc_method setReadOnly() - /** - * Method testSetReadOnly is testing setReadOnly - * @see CH.ifa.draw.figures.TextFigure#setReadOnly(boolean) - */ - // JUnitDoclet end javadoc_method setReadOnly() - public void testSetReadOnly() throws Exception { - // JUnitDoclet begin method setReadOnly - // JUnitDoclet end method setReadOnly - } - - // JUnitDoclet begin javadoc_method getRepresentingFigure() - /** - * Method testGetRepresentingFigure is testing getRepresentingFigure - * @see CH.ifa.draw.figures.TextFigure#getRepresentingFigure() - */ - // JUnitDoclet end javadoc_method getRepresentingFigure() - public void testGetRepresentingFigure() throws Exception { - // JUnitDoclet begin method getRepresentingFigure - // JUnitDoclet end method getRepresentingFigure - } - - // JUnitDoclet begin javadoc_method setFont() - /** - * Method testSetGetFont is testing setFont - * and getFont together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.figures.TextFigure#setFont(java.awt.Font) - * @see CH.ifa.draw.figures.TextFigure#getFont() - */ - // JUnitDoclet end javadoc_method setFont() - public void testSetGetFont() throws Exception { - // JUnitDoclet begin method setFont getFont - java.awt.Font[] tests = { new Font("Helvetica", Font.PLAIN, 12), null }; - - for (int i = 0; i < tests.length; i++) { - textfigure.setFont(tests[i]); - assertEquals(tests[i], textfigure.getFont()); - } - // JUnitDoclet end method setFont getFont - } - - // JUnitDoclet begin javadoc_method changed() - /** - * Method testChanged is testing changed - * @see CH.ifa.draw.figures.TextFigure#changed() - */ - // JUnitDoclet end javadoc_method changed() - public void testChanged() throws Exception { - // JUnitDoclet begin method changed - // JUnitDoclet end method changed - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see CH.ifa.draw.figures.TextFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see CH.ifa.draw.figures.TextFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method setText() - /** - * Method testSetGetText is testing setText - * and getText together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.figures.TextFigure#setText(java.lang.String) - * @see CH.ifa.draw.figures.TextFigure#getText() - */ - // JUnitDoclet end javadoc_method setText() - public void testSetGetText() throws Exception { - // JUnitDoclet begin method setText getText - java.lang.String[] tests = { "", " ", "a", "A", "�", "�", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - textfigure.setText(tests[i]); - assertEquals(tests[i], textfigure.getText()); - } - // JUnitDoclet end method setText getText - } - - // JUnitDoclet begin javadoc_method acceptsTyping() - /** - * Method testAcceptsTyping is testing acceptsTyping - * @see CH.ifa.draw.figures.TextFigure#acceptsTyping() - */ - // JUnitDoclet end javadoc_method acceptsTyping() - public void testAcceptsTyping() throws Exception { - // JUnitDoclet begin method acceptsTyping - // JUnitDoclet end method acceptsTyping - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see CH.ifa.draw.figures.TextFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see CH.ifa.draw.figures.TextFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method overlayColumns() - /** - * Method testOverlayColumns is testing overlayColumns - * @see CH.ifa.draw.figures.TextFigure#overlayColumns() - */ - // JUnitDoclet end javadoc_method overlayColumns() - public void testOverlayColumns() throws Exception { - // JUnitDoclet begin method overlayColumns - // JUnitDoclet end method overlayColumns - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.figures.TextFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.figures.TextFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.figures.TextFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method connect() - /** - * Method testConnect is testing connect - * @see CH.ifa.draw.figures.TextFigure#connect(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method connect() - public void testConnect() throws Exception { - // JUnitDoclet begin method connect - // JUnitDoclet end method connect - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see CH.ifa.draw.figures.TextFigure#figureChanged(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see CH.ifa.draw.figures.TextFigure#figureRemoved(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see CH.ifa.draw.figures.TextFigure#figureRequestRemove(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see CH.ifa.draw.figures.TextFigure#figureInvalidated(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see CH.ifa.draw.figures.TextFigure#figureRequestUpdate(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see CH.ifa.draw.figures.TextFigure#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method disconnect() - /** - * Method testDisconnect is testing disconnect - * @see CH.ifa.draw.figures.TextFigure#disconnect(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method disconnect() - public void testDisconnect() throws Exception { - // JUnitDoclet begin method disconnect - // JUnitDoclet end method disconnect - } - - // JUnitDoclet begin javadoc_method getTextHolder() - /** - * Method testGetTextHolder is testing getTextHolder - * @see CH.ifa.draw.figures.TextFigure#getTextHolder() - */ - // JUnitDoclet end javadoc_method getTextHolder() - public void testGetTextHolder() throws Exception { - // JUnitDoclet begin method getTextHolder - // JUnitDoclet end method getTextHolder - } - - // JUnitDoclet begin javadoc_method createCurrentFont() - /** - * Method testCreateCurrentFont is testing createCurrentFont - * @see CH.ifa.draw.figures.TextFigure#createCurrentFont() - */ - // JUnitDoclet end javadoc_method createCurrentFont() - public void testCreateCurrentFont() throws Exception { - // JUnitDoclet begin method createCurrentFont - // JUnitDoclet end method createCurrentFont - } - - // JUnitDoclet begin javadoc_method setCurrentFontName() - /** - * Method testSetCurrentFontName is testing setCurrentFontName - * @see CH.ifa.draw.figures.TextFigure#setCurrentFontName(java.lang.String) - */ - // JUnitDoclet end javadoc_method setCurrentFontName() - public void testSetCurrentFontName() throws Exception { - // JUnitDoclet begin method setCurrentFontName - // JUnitDoclet end method setCurrentFontName - } - - // JUnitDoclet begin javadoc_method setCurrentFontSize() - /** - * Method testSetCurrentFontSize is testing setCurrentFontSize - * @see CH.ifa.draw.figures.TextFigure#setCurrentFontSize(int) - */ - // JUnitDoclet end javadoc_method setCurrentFontSize() - public void testSetCurrentFontSize() throws Exception { - // JUnitDoclet begin method setCurrentFontSize - // JUnitDoclet end method setCurrentFontSize - } - - // JUnitDoclet begin javadoc_method setCurrentFontStyle() - /** - * Method testSetCurrentFontStyle is testing setCurrentFontStyle - * @see CH.ifa.draw.figures.TextFigure#setCurrentFontStyle(int) - */ - // JUnitDoclet end javadoc_method setCurrentFontStyle() - public void testSetCurrentFontStyle() throws Exception { - // JUnitDoclet begin method setCurrentFontStyle - // JUnitDoclet end method setCurrentFontStyle - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/TextToolTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/TextToolTest.java deleted file mode 100644 index 5759f8d82..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/TextToolTest.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.figures.TextTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase TextToolTest is generated by - * JUnitDoclet to hold the tests for TextTool. - * @see CH.ifa.draw.figures.TextTool - */ -// JUnitDoclet end javadoc_class -public class TextToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TextTool texttool; - // JUnitDoclet end class - - /** - * Constructor TextToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TextToolTest(String name) { - // JUnitDoclet begin method TextToolTest - super(name); - // JUnitDoclet end method TextToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.TextTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.TextTool(getDrawingEditor(), new RectangleFigure(new Point(10,10), new Point(100,100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - texttool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - texttool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.figures.TextTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.figures.TextTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.figures.TextTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.figures.TextTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.figures.TextTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method isActive() - /** - * Method testIsActive is testing isActive - * @see CH.ifa.draw.figures.TextTool#isActive() - */ - // JUnitDoclet end javadoc_method isActive() - public void testIsActive() throws Exception { - // JUnitDoclet begin method isActive - // JUnitDoclet end method isActive - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/figures/UngroupCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/figures/UngroupCommandTest.java deleted file mode 100644 index 5b3e76a69..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/figures/UngroupCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.figures; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.UngroupCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UngroupCommandTest is generated by - * JUnitDoclet to hold the tests for UngroupCommand. - * @see CH.ifa.draw.figures.UngroupCommand - */ -// JUnitDoclet end javadoc_class -public class UngroupCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UngroupCommand ungroupcommand; - // JUnitDoclet end class - - /** - * Constructor UngroupCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UngroupCommandTest(String name) { - // JUnitDoclet begin method UngroupCommandTest - super(name); - // JUnitDoclet end method UngroupCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.figures.UngroupCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.figures.UngroupCommand("UngroupTest", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - ungroupcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - ungroupcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.figures.UngroupCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see CH.ifa.draw.figures.UngroupCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/framework/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/framework/AllTests.java deleted file mode 100644 index cb7c9e7e7..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/framework/AllTests.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.framework; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.framework"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(DrawingChangeEventTest.class)); - suite.addTest(new TestSuite(FigureAttributeConstantTest.class)); - suite.addTest(new TestSuite(FigureChangeEventTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/framework/DrawingChangeEventTest.java b/JHotDraw/src/CH/ifa/draw/test/framework/DrawingChangeEventTest.java deleted file mode 100644 index 3744458c2..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/framework/DrawingChangeEventTest.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.framework; - -import java.awt.Rectangle; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import CH.ifa.draw.framework.DrawingChangeEvent; -import CH.ifa.draw.standard.StandardDrawing; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DrawingChangeEventTest is generated by - * JUnitDoclet to hold the tests for DrawingChangeEvent. - * @see CH.ifa.draw.framework.DrawingChangeEvent - */ -// JUnitDoclet end javadoc_class -public class DrawingChangeEventTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DrawingChangeEvent drawingchangeevent; - // JUnitDoclet end class - - /** - * Constructor DrawingChangeEventTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DrawingChangeEventTest(String name) { - // JUnitDoclet begin method DrawingChangeEventTest - super(name); - // JUnitDoclet end method DrawingChangeEventTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.framework.DrawingChangeEvent createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.framework.DrawingChangeEvent(new StandardDrawing(), new Rectangle(10, 10, 100, 100)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - drawingchangeevent = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - drawingchangeevent = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getDrawing() - /** - * Method testGetDrawing is testing getDrawing - * @see CH.ifa.draw.framework.DrawingChangeEvent#getDrawing() - */ - // JUnitDoclet end javadoc_method getDrawing() - public void testGetDrawing() throws Exception { - // JUnitDoclet begin method getDrawing - // JUnitDoclet end method getDrawing - } - - // JUnitDoclet begin javadoc_method getInvalidatedRectangle() - /** - * Method testGetInvalidatedRectangle is testing getInvalidatedRectangle - * @see CH.ifa.draw.framework.DrawingChangeEvent#getInvalidatedRectangle() - */ - // JUnitDoclet end javadoc_method getInvalidatedRectangle() - public void testGetInvalidatedRectangle() throws Exception { - // JUnitDoclet begin method getInvalidatedRectangle - // JUnitDoclet end method getInvalidatedRectangle - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/framework/FigureAttributeConstantTest.java b/JHotDraw/src/CH/ifa/draw/test/framework/FigureAttributeConstantTest.java deleted file mode 100644 index c33b3f04a..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/framework/FigureAttributeConstantTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.framework; - -import CH.ifa.draw.framework.FigureAttributeConstant; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureAttributeConstantTest is generated by - * JUnitDoclet to hold the tests for FigureAttributeConstant. - * @see CH.ifa.draw.framework.FigureAttributeConstant - */ -// JUnitDoclet end javadoc_class -public class FigureAttributeConstantTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureAttributeConstant figureattributeconstant; - // JUnitDoclet end class - - /** - * Constructor FigureAttributeConstantTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureAttributeConstantTest(String name) { - // JUnitDoclet begin method FigureAttributeConstantTest - super(name); - // JUnitDoclet end method FigureAttributeConstantTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.framework.FigureAttributeConstant createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.framework.FigureAttributeConstant("test_property"); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figureattributeconstant = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figureattributeconstant = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getName() - /** - * Method testGetName is testing getName - * @see CH.ifa.draw.framework.FigureAttributeConstant#getName() - */ - // JUnitDoclet end javadoc_method getName() - public void testGetName() throws Exception { - // JUnitDoclet begin method getName - // JUnitDoclet end method getName - } - - // JUnitDoclet begin javadoc_method getID() - /** - * Method testGetID is testing getID - * @see CH.ifa.draw.framework.FigureAttributeConstant#getID() - */ - // JUnitDoclet end javadoc_method getID() - public void testGetID() throws Exception { - // JUnitDoclet begin method getID - // JUnitDoclet end method getID - } - - // JUnitDoclet begin javadoc_method equals() - /** - * Method testEquals is testing equals - * @see CH.ifa.draw.framework.FigureAttributeConstant#equals(java.lang.Object) - */ - // JUnitDoclet end javadoc_method equals() - public void testEquals() throws Exception { - // JUnitDoclet begin method equals - // JUnitDoclet end method equals - } - - // JUnitDoclet begin javadoc_method hashCode() - /** - * Method testHashCode is testing hashCode - * @see CH.ifa.draw.framework.FigureAttributeConstant#hashCode() - */ - // JUnitDoclet end javadoc_method hashCode() - public void testHashCode() throws Exception { - // JUnitDoclet begin method hashCode - // JUnitDoclet end method hashCode - } - - // JUnitDoclet begin javadoc_method getConstant() - /** - * Method testGetConstant is testing getConstant - * @see CH.ifa.draw.framework.FigureAttributeConstant#getConstant(java.lang.String) - */ - // JUnitDoclet end javadoc_method getConstant() - public void testGetConstant() throws Exception { - // JUnitDoclet begin method getConstant - // JUnitDoclet end method getConstant - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/framework/FigureChangeEventTest.java b/JHotDraw/src/CH/ifa/draw/test/framework/FigureChangeEventTest.java deleted file mode 100644 index 559f6eef3..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/framework/FigureChangeEventTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.framework; - -import java.awt.Point; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.framework.FigureChangeEvent; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureChangeEventTest is generated by - * JUnitDoclet to hold the tests for FigureChangeEvent. - * @see CH.ifa.draw.framework.FigureChangeEvent - */ -// JUnitDoclet end javadoc_class -public class FigureChangeEventTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureChangeEvent figurechangeevent; - // JUnitDoclet end class - - /** - * Constructor FigureChangeEventTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureChangeEventTest(String name) { - // JUnitDoclet begin method FigureChangeEventTest - super(name); - // JUnitDoclet end method FigureChangeEventTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.framework.FigureChangeEvent createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.framework.FigureChangeEvent(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figurechangeevent = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figurechangeevent = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getFigure() - /** - * Method testGetFigure is testing getFigure - * @see CH.ifa.draw.framework.FigureChangeEvent#getFigure() - */ - // JUnitDoclet end javadoc_method getFigure() - public void testGetFigure() throws Exception { - // JUnitDoclet begin method getFigure - // JUnitDoclet end method getFigure - } - - // JUnitDoclet begin javadoc_method getInvalidatedRectangle() - /** - * Method testGetInvalidatedRectangle is testing getInvalidatedRectangle - * @see CH.ifa.draw.framework.FigureChangeEvent#getInvalidatedRectangle() - */ - // JUnitDoclet end javadoc_method getInvalidatedRectangle() - public void testGetInvalidatedRectangle() throws Exception { - // JUnitDoclet begin method getInvalidatedRectangle - // JUnitDoclet end method getInvalidatedRectangle - } - - // JUnitDoclet begin javadoc_method getNestedEvent() - /** - * Method testGetNestedEvent is testing getNestedEvent - * @see CH.ifa.draw.framework.FigureChangeEvent#getNestedEvent() - */ - // JUnitDoclet end javadoc_method getNestedEvent() - public void testGetNestedEvent() throws Exception { - // JUnitDoclet begin method getNestedEvent - // JUnitDoclet end method getNestedEvent - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/framework/FrameworkSuite.java b/JHotDraw/src/CH/ifa/draw/test/framework/FrameworkSuite.java deleted file mode 100644 index ebb358a6d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/framework/FrameworkSuite.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * @(#)FrameworkSuite - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.framework; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite FrameworkSuite -*/ -// JUnitDoclet end javadoc_class -public class FrameworkSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.framework"); - - suite.addTestSuite(CH.ifa.draw.test.framework.FigureAttributeConstantTest.class); - suite.addTestSuite(CH.ifa.draw.test.framework.FigureChangeEventTest.class); - suite.addTestSuite(CH.ifa.draw.test.framework.DrawingChangeEventTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AllTests.java deleted file mode 100644 index ae4124888..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AllTests.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.samples.javadraw"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(AnimationDecoratorTest.class)); - suite.addTest(new TestSuite(AnimatorTest.class)); - suite.addTest(new TestSuite(BouncingDrawingTest.class)); - suite.addTest(new TestSuite(JavaDrawAppTest.class)); - suite.addTest(new TestSuite(JavaDrawAppletTest.class)); - suite.addTest(new TestSuite(JavaDrawViewerTest.class)); - suite.addTest(new TestSuite(MySelectionToolTest.class)); - suite.addTest(new TestSuite(PatternPainterTest.class)); - suite.addTest(new TestSuite(URLToolTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AnimationDecoratorTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AnimationDecoratorTest.java deleted file mode 100644 index 2f20865a4..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AnimationDecoratorTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -import CH.ifa.draw.samples.javadraw.AnimationDecorator; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase AnimationDecoratorTest is generated by - * JUnitDoclet to hold the tests for AnimationDecorator. - * @see CH.ifa.draw.samples.javadraw.AnimationDecorator - */ -// JUnitDoclet end javadoc_class -public class AnimationDecoratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private AnimationDecorator animationdecorator; - // JUnitDoclet end class - - /** - * Constructor AnimationDecoratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public AnimationDecoratorTest(String name) { - // JUnitDoclet begin method AnimationDecoratorTest - super(name); - // JUnitDoclet end method AnimationDecoratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.javadraw.AnimationDecorator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.javadraw.AnimationDecorator(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - animationdecorator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - animationdecorator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method velocity() - /** - * Method testVelocity is testing velocity - * @see CH.ifa.draw.samples.javadraw.AnimationDecorator#velocity(int, int) - */ - // JUnitDoclet end javadoc_method velocity() - public void testVelocity() throws Exception { - // JUnitDoclet begin method velocity - // JUnitDoclet end method velocity - } - - // JUnitDoclet begin javadoc_method animationStep() - /** - * Method testAnimationStep is testing animationStep - * @see CH.ifa.draw.samples.javadraw.AnimationDecorator#animationStep() - */ - // JUnitDoclet end javadoc_method animationStep() - public void testAnimationStep() throws Exception { - // JUnitDoclet begin method animationStep - // JUnitDoclet end method animationStep - } - - // JUnitDoclet begin javadoc_method basicMoveBy() - /** - * Method testBasicMoveBy is testing basicMoveBy - * @see CH.ifa.draw.samples.javadraw.AnimationDecorator#basicMoveBy(int, int) - */ - // JUnitDoclet end javadoc_method basicMoveBy() - public void testBasicMoveBy() throws Exception { - // JUnitDoclet begin method basicMoveBy - // JUnitDoclet end method basicMoveBy - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.samples.javadraw.AnimationDecorator#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.samples.javadraw.AnimationDecorator#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.samples.javadraw.AnimationDecorator#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.samples.javadraw.AnimationDecorator#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AnimatorTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AnimatorTest.java deleted file mode 100644 index 35451d0ae..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/AnimatorTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.framework.Drawing; -import CH.ifa.draw.samples.javadraw.Animator; -import CH.ifa.draw.samples.javadraw.BouncingDrawing; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.Animatable; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase AnimatorTest is generated by - * JUnitDoclet to hold the tests for Animator. - * @see CH.ifa.draw.samples.javadraw.Animator - */ -// JUnitDoclet end javadoc_class -public class AnimatorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Animator animator; - // JUnitDoclet end class - - /** - * Constructor AnimatorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public AnimatorTest(String name) { - // JUnitDoclet begin method AnimatorTest - super(name); - // JUnitDoclet end method AnimatorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.javadraw.Animator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Drawing drawing = new BouncingDrawing(); - Animatable animatable = (Animatable)drawing.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - return new CH.ifa.draw.samples.javadraw.Animator(animatable, getDrawingEditor().view()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - animator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - animator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method start() - /** - * Method testStart is testing start - * @see CH.ifa.draw.samples.javadraw.Animator#start() - */ - // JUnitDoclet end javadoc_method start() - public void testStart() throws Exception { - // JUnitDoclet begin method start - // JUnitDoclet end method start - } - - // JUnitDoclet begin javadoc_method end() - /** - * Method testEnd is testing end - * @see CH.ifa.draw.samples.javadraw.Animator#end() - */ - // JUnitDoclet end javadoc_method end() - public void testEnd() throws Exception { - // JUnitDoclet begin method end - // JUnitDoclet end method end - } - - // JUnitDoclet begin javadoc_method run() - /** - * Method testRun is testing run - * @see CH.ifa.draw.samples.javadraw.Animator#run() - */ - // JUnitDoclet end javadoc_method run() - public void testRun() throws Exception { - // JUnitDoclet begin method run - // JUnitDoclet end method run - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/BouncingDrawingTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/BouncingDrawingTest.java deleted file mode 100644 index 5b381e74d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/BouncingDrawingTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -import CH.ifa.draw.samples.javadraw.BouncingDrawing; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BouncingDrawingTest is generated by - * JUnitDoclet to hold the tests for BouncingDrawing. - * @see CH.ifa.draw.samples.javadraw.BouncingDrawing - */ -// JUnitDoclet end javadoc_class -public class BouncingDrawingTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BouncingDrawing bouncingdrawing; - // JUnitDoclet end class - - /** - * Constructor BouncingDrawingTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BouncingDrawingTest(String name) { - // JUnitDoclet begin method BouncingDrawingTest - super(name); - // JUnitDoclet end method BouncingDrawingTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.javadraw.BouncingDrawing createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.javadraw.BouncingDrawing(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bouncingdrawing = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bouncingdrawing = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.samples.javadraw.BouncingDrawing#add(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.samples.javadraw.BouncingDrawing#remove(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method replace() - /** - * Method testReplace is testing replace - * @see CH.ifa.draw.samples.javadraw.BouncingDrawing#replace(CH.ifa.draw.framework.Figure, CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method replace() - public void testReplace() throws Exception { - // JUnitDoclet begin method replace - // JUnitDoclet end method replace - } - - // JUnitDoclet begin javadoc_method animationStep() - /** - * Method testAnimationStep is testing animationStep - * @see CH.ifa.draw.samples.javadraw.BouncingDrawing#animationStep() - */ - // JUnitDoclet end javadoc_method animationStep() - public void testAnimationStep() throws Exception { - // JUnitDoclet begin method animationStep - // JUnitDoclet end method animationStep - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawAppTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawAppTest.java deleted file mode 100644 index a7f5cced7..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawAppTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -// JUnitDoclet begin import -import CH.ifa.draw.application.DrawApplication; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JavaDrawAppTest is generated by - * JUnitDoclet to hold the tests for JavaDrawApp. - * @see CH.ifa.draw.samples.javadraw.JavaDrawApp - */ -// JUnitDoclet end javadoc_class -public class JavaDrawAppTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DrawApplication myDrawApplication; - // JUnitDoclet end class - - /** - * Constructor JavaDrawAppTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JavaDrawAppTest(String name) { - // JUnitDoclet begin method JavaDrawAppTest - super(name); - // JUnitDoclet end method JavaDrawAppTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public DrawApplication createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return getDrawingEditor(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - myDrawApplication = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - myDrawApplication = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method destroy() - /** - * Method testDestroy is testing destroy - * @see CH.ifa.draw.samples.javadraw.JavaDrawApp#destroy() - */ - // JUnitDoclet end javadoc_method destroy() - public void testDestroy() throws Exception { - // JUnitDoclet begin method destroy - // JUnitDoclet end method destroy - } - - // JUnitDoclet begin javadoc_method startAnimation() - /** - * Method testStartAnimation is testing startAnimation - * @see CH.ifa.draw.samples.javadraw.JavaDrawApp#startAnimation() - */ - // JUnitDoclet end javadoc_method startAnimation() - public void testStartAnimation() throws Exception { - // JUnitDoclet begin method startAnimation - // JUnitDoclet end method startAnimation - } - - // JUnitDoclet begin javadoc_method endAnimation() - /** - * Method testEndAnimation is testing endAnimation - * @see CH.ifa.draw.samples.javadraw.JavaDrawApp#endAnimation() - */ - // JUnitDoclet end javadoc_method endAnimation() - public void testEndAnimation() throws Exception { - // JUnitDoclet begin method endAnimation - // JUnitDoclet end method endAnimation - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see CH.ifa.draw.samples.javadraw.JavaDrawApp#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawAppletTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawAppletTest.java deleted file mode 100644 index 96c3ee080..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawAppletTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -import CH.ifa.draw.samples.javadraw.JavaDrawApplet; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JavaDrawAppletTest is generated by - * JUnitDoclet to hold the tests for JavaDrawApplet. - * @see CH.ifa.draw.samples.javadraw.JavaDrawApplet - */ -// JUnitDoclet end javadoc_class -public class JavaDrawAppletTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JavaDrawApplet javadrawapplet; - // JUnitDoclet end class - - /** - * Constructor JavaDrawAppletTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JavaDrawAppletTest(String name) { - // JUnitDoclet begin method JavaDrawAppletTest - super(name); - // JUnitDoclet end method JavaDrawAppletTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.javadraw.JavaDrawApplet createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.javadraw.JavaDrawApplet(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - javadrawapplet = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - javadrawapplet = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method destroy() - /** - * Method testDestroy is testing destroy - * @see CH.ifa.draw.samples.javadraw.JavaDrawApplet#destroy() - */ - // JUnitDoclet end javadoc_method destroy() - public void testDestroy() throws Exception { - // JUnitDoclet begin method destroy - // JUnitDoclet end method destroy - } - - // JUnitDoclet begin javadoc_method startAnimation() - /** - * Method testStartAnimation is testing startAnimation - * @see CH.ifa.draw.samples.javadraw.JavaDrawApplet#startAnimation() - */ - // JUnitDoclet end javadoc_method startAnimation() - public void testStartAnimation() throws Exception { - // JUnitDoclet begin method startAnimation - // JUnitDoclet end method startAnimation - } - - // JUnitDoclet begin javadoc_method endAnimation() - /** - * Method testEndAnimation is testing endAnimation - * @see CH.ifa.draw.samples.javadraw.JavaDrawApplet#endAnimation() - */ - // JUnitDoclet end javadoc_method endAnimation() - public void testEndAnimation() throws Exception { - // JUnitDoclet begin method endAnimation - // JUnitDoclet end method endAnimation - } - - // JUnitDoclet begin javadoc_method toggleAnimation() - /** - * Method testToggleAnimation is testing toggleAnimation - * @see CH.ifa.draw.samples.javadraw.JavaDrawApplet#toggleAnimation() - */ - // JUnitDoclet end javadoc_method toggleAnimation() - public void testToggleAnimation() throws Exception { - // JUnitDoclet begin method toggleAnimation - // JUnitDoclet end method toggleAnimation - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawViewerTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawViewerTest.java deleted file mode 100644 index 16a9486fa..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavaDrawViewerTest.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -import CH.ifa.draw.samples.javadraw.JavaDrawViewer; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JavaDrawViewerTest is generated by - * JUnitDoclet to hold the tests for JavaDrawViewer. - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer - */ -// JUnitDoclet end javadoc_class -public class JavaDrawViewerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JavaDrawViewer javadrawviewer; - // JUnitDoclet end class - - /** - * Constructor JavaDrawViewerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JavaDrawViewerTest(String name) { - // JUnitDoclet begin method JavaDrawViewerTest - super(name); - // JUnitDoclet end method JavaDrawViewerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.javadraw.JavaDrawViewer createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.javadraw.JavaDrawViewer(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - javadrawviewer = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - javadrawviewer = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method init() - /** - * Method testInit is testing init - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#init() - */ - // JUnitDoclet end javadoc_method init() - public void testInit() throws Exception { - // JUnitDoclet begin method init - // JUnitDoclet end method init - } - - // JUnitDoclet begin javadoc_method addViewChangeListener() - /** - * Method testAddViewChangeListener is testing addViewChangeListener - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#addViewChangeListener(CH.ifa.draw.framework.ViewChangeListener) - */ - // JUnitDoclet end javadoc_method addViewChangeListener() - public void testAddViewChangeListener() throws Exception { - // JUnitDoclet begin method addViewChangeListener - // JUnitDoclet end method addViewChangeListener - } - - // JUnitDoclet begin javadoc_method removeViewChangeListener() - /** - * Method testRemoveViewChangeListener is testing removeViewChangeListener - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#removeViewChangeListener(CH.ifa.draw.framework.ViewChangeListener) - */ - // JUnitDoclet end javadoc_method removeViewChangeListener() - public void testRemoveViewChangeListener() throws Exception { - // JUnitDoclet begin method removeViewChangeListener - // JUnitDoclet end method removeViewChangeListener - } - - // JUnitDoclet begin javadoc_method view() - /** - * Method testView is testing view - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#view() - */ - // JUnitDoclet end javadoc_method view() - public void testView() throws Exception { - // JUnitDoclet begin method view - // JUnitDoclet end method view - } - - // JUnitDoclet begin javadoc_method views() - /** - * Method testViews is testing views - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#views() - */ - // JUnitDoclet end javadoc_method views() - public void testViews() throws Exception { - // JUnitDoclet begin method views - // JUnitDoclet end method views - } - - // JUnitDoclet begin javadoc_method drawing() - /** - * Method testDrawing is testing drawing - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#drawing() - */ - // JUnitDoclet end javadoc_method drawing() - public void testDrawing() throws Exception { - // JUnitDoclet begin method drawing - // JUnitDoclet end method drawing - } - - // JUnitDoclet begin javadoc_method tool() - /** - * Method testTool is testing tool - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#tool() - */ - // JUnitDoclet end javadoc_method tool() - public void testTool() throws Exception { - // JUnitDoclet begin method tool - // JUnitDoclet end method tool - } - - // JUnitDoclet begin javadoc_method setTool() - /** - * Method testSetTool is testing setTool - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#setTool(CH.ifa.draw.framework.Tool) - */ - // JUnitDoclet end javadoc_method setTool() - public void testSetTool() throws Exception { - // JUnitDoclet begin method setTool - // JUnitDoclet end method setTool - } - - // JUnitDoclet begin javadoc_method toolDone() - /** - * Method testToolDone is testing toolDone - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#toolDone() - */ - // JUnitDoclet end javadoc_method toolDone() - public void testToolDone() throws Exception { - // JUnitDoclet begin method toolDone - // JUnitDoclet end method toolDone - } - - // JUnitDoclet begin javadoc_method figureSelectionChanged() - /** - * Method testFigureSelectionChanged is testing figureSelectionChanged - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#figureSelectionChanged(CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method figureSelectionChanged() - public void testFigureSelectionChanged() throws Exception { - // JUnitDoclet begin method figureSelectionChanged - // JUnitDoclet end method figureSelectionChanged - } - - // JUnitDoclet begin javadoc_method getUndoManager() - /** - * Method testGetUndoManager is testing getUndoManager - * @see CH.ifa.draw.samples.javadraw.JavaDrawViewer#getUndoManager() - */ - // JUnitDoclet end javadoc_method getUndoManager() - public void testGetUndoManager() throws Exception { - // JUnitDoclet begin method getUndoManager - // JUnitDoclet end method getUndoManager - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavadrawSuite.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavadrawSuite.java deleted file mode 100644 index ec659fb19..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/JavadrawSuite.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite JavadrawSuite -*/ -// JUnitDoclet end javadoc_class -public class JavadrawSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.samples.javadraw"); - - suite.addTestSuite(CH.ifa.draw.test.samples.javadraw.URLToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.javadraw.PatternPainterTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.javadraw.MySelectionToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.javadraw.JavaDrawViewerTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.javadraw.JavaDrawAppletTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.javadraw.JavaDrawAppTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.javadraw.BouncingDrawingTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.javadraw.AnimatorTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.javadraw.AnimationDecoratorTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/MySelectionToolTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/MySelectionToolTest.java deleted file mode 100644 index 40c38320d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/MySelectionToolTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -// JUnitDoclet begin import -import CH.ifa.draw.samples.javadraw.MySelectionTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MySelectionToolTest is generated by - * JUnitDoclet to hold the tests for MySelectionTool. - * @see CH.ifa.draw.samples.javadraw.MySelectionTool - */ -// JUnitDoclet end javadoc_class -public class MySelectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MySelectionTool myselectiontool; - // JUnitDoclet end class - - /** - * Constructor MySelectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MySelectionToolTest(String name) { - // JUnitDoclet begin method MySelectionToolTest - super(name); - // JUnitDoclet end method MySelectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.javadraw.MySelectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.javadraw.MySelectionTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - myselectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - myselectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.samples.javadraw.MySelectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/PatternPainterTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/PatternPainterTest.java deleted file mode 100644 index 28627d609..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/PatternPainterTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -import java.awt.Image; - -// JUnitDoclet begin import -import CH.ifa.draw.application.DrawApplication; -import CH.ifa.draw.samples.javadraw.PatternPainter; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.Iconkit; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PatternPainterTest is generated by - * JUnitDoclet to hold the tests for PatternPainter. - * @see CH.ifa.draw.samples.javadraw.PatternPainter - */ -// JUnitDoclet end javadoc_class -public class PatternPainterTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PatternPainter patternpainter; - // JUnitDoclet end class - - /** - * Constructor PatternPainterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PatternPainterTest(String name) { - // JUnitDoclet begin method PatternPainterTest - super(name); - // JUnitDoclet end method PatternPainterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.javadraw.PatternPainter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Image img = Iconkit.instance().loadImage(DrawApplication.IMAGES + "SEL1.gif", true); - return new CH.ifa.draw.samples.javadraw.PatternPainter(img); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - patternpainter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - patternpainter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.samples.javadraw.PatternPainter#draw(java.awt.Graphics, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/URLToolTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/URLToolTest.java deleted file mode 100644 index 78e612ed2..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/javadraw/URLToolTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.javadraw; - -// JUnitDoclet begin import -import CH.ifa.draw.samples.javadraw.URLTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase URLToolTest is generated by - * JUnitDoclet to hold the tests for URLTool. - * @see CH.ifa.draw.samples.javadraw.URLTool - */ -// JUnitDoclet end javadoc_class -public class URLToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private URLTool urltool; - // JUnitDoclet end class - - /** - * Constructor URLToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public URLToolTest(String name) { - // JUnitDoclet begin method URLToolTest - super(name); - // JUnitDoclet end method URLToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.javadraw.URLTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.javadraw.URLTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - urltool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - urltool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.samples.javadraw.URLTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.samples.javadraw.URLTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.samples.javadraw.URLTool#deactivate(CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/minimap/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/samples/minimap/AllTests.java deleted file mode 100644 index 4ab07796c..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/minimap/AllTests.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.minimap; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.samples.minimap"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(MiniMapApplicationTest.class)); - suite.addTest(new TestSuite(MiniMapDesktopTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/minimap/MiniMapApplicationTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/minimap/MiniMapApplicationTest.java deleted file mode 100644 index 6105d916b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/minimap/MiniMapApplicationTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.minimap; - -import CH.ifa.draw.samples.minimap.MiniMapApplication; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MiniMapApplicationTest is generated by - * JUnitDoclet to hold the tests for MiniMapApplication. - * @see CH.ifa.draw.samples.minimap.MiniMapApplication - */ -// JUnitDoclet end javadoc_class -public class MiniMapApplicationTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MiniMapApplication minimapapplication; - // JUnitDoclet end class - - /** - * Constructor MiniMapApplicationTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MiniMapApplicationTest(String name) { - // JUnitDoclet begin method MiniMapApplicationTest - super(name); - // JUnitDoclet end method MiniMapApplicationTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.minimap.MiniMapApplication createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.minimap.MiniMapApplication(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - minimapapplication = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - minimapapplication = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see CH.ifa.draw.samples.minimap.MiniMapApplication#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/minimap/MiniMapDesktopTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/minimap/MiniMapDesktopTest.java deleted file mode 100644 index ddb2f8f9f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/minimap/MiniMapDesktopTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.minimap; - -import CH.ifa.draw.samples.minimap.MiniMapDesktop; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MiniMapDesktopTest is generated by - * JUnitDoclet to hold the tests for MiniMapDesktop. - * @see CH.ifa.draw.samples.minimap.MiniMapDesktop - */ -// JUnitDoclet end javadoc_class -public class MiniMapDesktopTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MiniMapDesktop minimapdesktop; - // JUnitDoclet end class - - /** - * Constructor MiniMapDesktopTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MiniMapDesktopTest(String name) { - // JUnitDoclet begin method MiniMapDesktopTest - super(name); - // JUnitDoclet end method MiniMapDesktopTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.minimap.MiniMapDesktop createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.minimap.MiniMapDesktop(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - minimapdesktop = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - minimapdesktop = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/minimap/MinimapSuite.java b/JHotDraw/src/CH/ifa/draw/test/samples/minimap/MinimapSuite.java deleted file mode 100644 index a5dc5191b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/minimap/MinimapSuite.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.minimap; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite MinimapSuite -*/ -// JUnitDoclet end javadoc_class -public class MinimapSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.samples.minimap"); - - suite.addTestSuite(CH.ifa.draw.test.samples.minimap.MiniMapDesktopTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.minimap.MiniMapApplicationTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/net/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/samples/net/AllTests.java deleted file mode 100644 index 8a7c325df..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/net/AllTests.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.net; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.samples.net"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(NetAppTest.class)); - suite.addTest(new TestSuite(NodeFigureTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/net/NetAppTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/net/NetAppTest.java deleted file mode 100644 index 48bc22b4c..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/net/NetAppTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.net; - -import CH.ifa.draw.samples.net.NetApp; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NetAppTest is generated by - * JUnitDoclet to hold the tests for NetApp. - * @see CH.ifa.draw.samples.net.NetApp - */ -// JUnitDoclet end javadoc_class -public class NetAppTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NetApp netapp; - // JUnitDoclet end class - - /** - * Constructor NetAppTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NetAppTest(String name) { - // JUnitDoclet begin method NetAppTest - super(name); - // JUnitDoclet end method NetAppTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.net.NetApp createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.net.NetApp(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - netapp = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - netapp = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see CH.ifa.draw.samples.net.NetApp#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/net/NetSuite.java b/JHotDraw/src/CH/ifa/draw/test/samples/net/NetSuite.java deleted file mode 100644 index 5a2ce5fd5..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/net/NetSuite.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)NetSuite - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.net; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite NetSuite -*/ -// JUnitDoclet end javadoc_class -public class NetSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.samples.net"); - - suite.addTestSuite(CH.ifa.draw.test.samples.net.NodeFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.net.NetAppTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/net/NodeFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/net/NodeFigureTest.java deleted file mode 100644 index 459cbc14b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/net/NodeFigureTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.net; - -import CH.ifa.draw.samples.net.NodeFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NodeFigureTest is generated by - * JUnitDoclet to hold the tests for NodeFigure. - * @see CH.ifa.draw.samples.net.NodeFigure - */ -// JUnitDoclet end javadoc_class -public class NodeFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NodeFigure nodefigure; - // JUnitDoclet end class - - /** - * Constructor NodeFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NodeFigureTest(String name) { - // JUnitDoclet begin method NodeFigureTest - super(name); - // JUnitDoclet end method NodeFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.net.NodeFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.net.NodeFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nodefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nodefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.samples.net.NodeFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see CH.ifa.draw.samples.net.NodeFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.samples.net.NodeFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.samples.net.NodeFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method connectorVisibility() - /** - * Method testConnectorVisibility is testing connectorVisibility - * @see CH.ifa.draw.samples.net.NodeFigure#connectorVisibility(boolean, CH.ifa.draw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method connectorVisibility() - public void testConnectorVisibility() throws Exception { - // JUnitDoclet begin method connectorVisibility - // JUnitDoclet end method connectorVisibility - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see CH.ifa.draw.samples.net.NodeFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method getRepresentingFigure() - /** - * Method testGetRepresentingFigure is testing getRepresentingFigure - * @see CH.ifa.draw.samples.net.NodeFigure#getRepresentingFigure() - */ - // JUnitDoclet end javadoc_method getRepresentingFigure() - public void testGetRepresentingFigure() throws Exception { - // JUnitDoclet begin method getRepresentingFigure - // JUnitDoclet end method getRepresentingFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/nothing/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/samples/nothing/AllTests.java deleted file mode 100644 index f4d2195c2..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/nothing/AllTests.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.nothing; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.samples.nothing"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(NothingAppTest.class)); - suite.addTest(new TestSuite(NothingAppletTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingAppTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingAppTest.java deleted file mode 100644 index 0b28456f6..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingAppTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.nothing; - -import CH.ifa.draw.samples.nothing.NothingApp; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NothingAppTest is generated by - * JUnitDoclet to hold the tests for NothingApp. - * @see CH.ifa.draw.samples.nothing.NothingApp - */ -// JUnitDoclet end javadoc_class -public class NothingAppTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NothingApp nothingapp; - // JUnitDoclet end class - - /** - * Constructor NothingAppTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NothingAppTest(String name) { - // JUnitDoclet begin method NothingAppTest - super(name); - // JUnitDoclet end method NothingAppTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.nothing.NothingApp createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.nothing.NothingApp(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nothingapp = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nothingapp = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see CH.ifa.draw.samples.nothing.NothingApp#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingAppletTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingAppletTest.java deleted file mode 100644 index 3c3ba3829..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingAppletTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.nothing; - -import CH.ifa.draw.samples.nothing.NothingApplet; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NothingAppletTest is generated by - * JUnitDoclet to hold the tests for NothingApplet. - * @see CH.ifa.draw.samples.nothing.NothingApplet - */ -// JUnitDoclet end javadoc_class -public class NothingAppletTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NothingApplet nothingapplet; - // JUnitDoclet end class - - /** - * Constructor NothingAppletTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NothingAppletTest(String name) { - // JUnitDoclet begin method NothingAppletTest - super(name); - // JUnitDoclet end method NothingAppletTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.nothing.NothingApplet createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.nothing.NothingApplet(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nothingapplet = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nothingapplet = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingSuite.java b/JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingSuite.java deleted file mode 100644 index 72688f524..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/nothing/NothingSuite.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.nothing; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite NothingSuite -*/ -// JUnitDoclet end javadoc_class -public class NothingSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.samples.nothing"); - - suite.addTestSuite(CH.ifa.draw.test.samples.nothing.NothingAppletTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.nothing.NothingAppTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/pert/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/samples/pert/AllTests.java deleted file mode 100644 index e03d0e0d8..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/pert/AllTests.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.pert; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.samples.pert"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(PertAppletTest.class)); - suite.addTest(new TestSuite(PertApplicationTest.class)); - suite.addTest(new TestSuite(PertDependencyTest.class)); - suite.addTest(new TestSuite(PertFigureCreationToolTest.class)); - suite.addTest(new TestSuite(PertFigureTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertAppletTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertAppletTest.java deleted file mode 100644 index 163dfd968..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertAppletTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.pert; - -import CH.ifa.draw.samples.pert.PertApplet; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertAppletTest is generated by - * JUnitDoclet to hold the tests for PertApplet. - * @see CH.ifa.draw.samples.pert.PertApplet - */ -// JUnitDoclet end javadoc_class -public class PertAppletTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertApplet pertapplet; - // JUnitDoclet end class - - /** - * Constructor PertAppletTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertAppletTest(String name) { - // JUnitDoclet begin method PertAppletTest - super(name); - // JUnitDoclet end method PertAppletTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.pert.PertApplet createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.pert.PertApplet(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertapplet = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertapplet = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertApplicationTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertApplicationTest.java deleted file mode 100644 index 34d41e6b0..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertApplicationTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.pert; - -import CH.ifa.draw.samples.pert.PertApplication; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertApplicationTest is generated by - * JUnitDoclet to hold the tests for PertApplication. - * @see CH.ifa.draw.samples.pert.PertApplication - */ -// JUnitDoclet end javadoc_class -public class PertApplicationTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertApplication pertapplication; - // JUnitDoclet end class - - /** - * Constructor PertApplicationTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertApplicationTest(String name) { - // JUnitDoclet begin method PertApplicationTest - super(name); - // JUnitDoclet end method PertApplicationTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.pert.PertApplication createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.pert.PertApplication(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertapplication = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertapplication = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see CH.ifa.draw.samples.pert.PertApplication#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertDependencyTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertDependencyTest.java deleted file mode 100644 index da2af1117..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertDependencyTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.pert; - -import CH.ifa.draw.samples.pert.PertDependency; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertDependencyTest is generated by - * JUnitDoclet to hold the tests for PertDependency. - * @see CH.ifa.draw.samples.pert.PertDependency - */ -// JUnitDoclet end javadoc_class -public class PertDependencyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertDependency pertdependency; - // JUnitDoclet end class - - /** - * Constructor PertDependencyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertDependencyTest(String name) { - // JUnitDoclet begin method PertDependencyTest - super(name); - // JUnitDoclet end method PertDependencyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.pert.PertDependency createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.pert.PertDependency(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertdependency = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertdependency = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method handleConnect() - /** - * Method testHandleConnect is testing handleConnect - * @see CH.ifa.draw.samples.pert.PertDependency#handleConnect(CH.ifa.draw.framework.Figure, CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method handleConnect() - public void testHandleConnect() throws Exception { - // JUnitDoclet begin method handleConnect - // JUnitDoclet end method handleConnect - } - - // JUnitDoclet begin javadoc_method handleDisconnect() - /** - * Method testHandleDisconnect is testing handleDisconnect - * @see CH.ifa.draw.samples.pert.PertDependency#handleDisconnect(CH.ifa.draw.framework.Figure, CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method handleDisconnect() - public void testHandleDisconnect() throws Exception { - // JUnitDoclet begin method handleDisconnect - // JUnitDoclet end method handleDisconnect - } - - // JUnitDoclet begin javadoc_method canConnect() - /** - * Method testCanConnect is testing canConnect - * @see CH.ifa.draw.samples.pert.PertDependency#canConnect(CH.ifa.draw.framework.Figure, CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method canConnect() - public void testCanConnect() throws Exception { - // JUnitDoclet begin method canConnect - // JUnitDoclet end method canConnect - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.samples.pert.PertDependency#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertFigureCreationToolTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertFigureCreationToolTest.java deleted file mode 100644 index 483babf2b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertFigureCreationToolTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.pert; - -// JUnitDoclet begin import -import CH.ifa.draw.samples.pert.PertFigureCreationTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertFigureCreationToolTest is generated by - * JUnitDoclet to hold the tests for PertFigureCreationTool. - * @see CH.ifa.draw.samples.pert.PertFigureCreationTool - */ -// JUnitDoclet end javadoc_class -public class PertFigureCreationToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertFigureCreationTool pertfigurecreationtool; - // JUnitDoclet end class - - /** - * Constructor PertFigureCreationToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertFigureCreationToolTest(String name) { - // JUnitDoclet begin method PertFigureCreationToolTest - super(name); - // JUnitDoclet end method PertFigureCreationToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.pert.PertFigureCreationTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.pert.PertFigureCreationTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertfigurecreationtool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertfigurecreationtool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertFigureTest.java b/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertFigureTest.java deleted file mode 100644 index f07040f04..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertFigureTest.java +++ /dev/null @@ -1,357 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.pert; - -import CH.ifa.draw.samples.pert.PertFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertFigureTest is generated by - * JUnitDoclet to hold the tests for PertFigure. - * @see CH.ifa.draw.samples.pert.PertFigure - */ -// JUnitDoclet end javadoc_class -public class PertFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertFigure pertfigure; - // JUnitDoclet end class - - /** - * Constructor PertFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertFigureTest(String name) { - // JUnitDoclet begin method PertFigureTest - super(name); - // JUnitDoclet end method PertFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.samples.pert.PertFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.samples.pert.PertFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method start() - /** - * Method testStart is testing start - * @see CH.ifa.draw.samples.pert.PertFigure#start() - */ - // JUnitDoclet end javadoc_method start() - public void testStart() throws Exception { - // JUnitDoclet begin method start - // JUnitDoclet end method start - } - - // JUnitDoclet begin javadoc_method end() - /** - * Method testEnd is testing end - * @see CH.ifa.draw.samples.pert.PertFigure#end() - */ - // JUnitDoclet end javadoc_method end() - public void testEnd() throws Exception { - // JUnitDoclet begin method end - // JUnitDoclet end method end - } - - // JUnitDoclet begin javadoc_method duration() - /** - * Method testDuration is testing duration - * @see CH.ifa.draw.samples.pert.PertFigure#duration() - */ - // JUnitDoclet end javadoc_method duration() - public void testDuration() throws Exception { - // JUnitDoclet begin method duration - // JUnitDoclet end method duration - } - - // JUnitDoclet begin javadoc_method setEnd() - /** - * Method testSetEnd is testing setEnd - * @see CH.ifa.draw.samples.pert.PertFigure#setEnd(int) - */ - // JUnitDoclet end javadoc_method setEnd() - public void testSetEnd() throws Exception { - // JUnitDoclet begin method setEnd - // JUnitDoclet end method setEnd - } - - // JUnitDoclet begin javadoc_method addPreTask() - /** - * Method testAddPreTask is testing addPreTask - * @see CH.ifa.draw.samples.pert.PertFigure#addPreTask(CH.ifa.draw.samples.pert.PertFigure) - */ - // JUnitDoclet end javadoc_method addPreTask() - public void testAddPreTask() throws Exception { - // JUnitDoclet begin method addPreTask - // JUnitDoclet end method addPreTask - } - - // JUnitDoclet begin javadoc_method addPostTask() - /** - * Method testAddPostTask is testing addPostTask - * @see CH.ifa.draw.samples.pert.PertFigure#addPostTask(CH.ifa.draw.samples.pert.PertFigure) - */ - // JUnitDoclet end javadoc_method addPostTask() - public void testAddPostTask() throws Exception { - // JUnitDoclet begin method addPostTask - // JUnitDoclet end method addPostTask - } - - // JUnitDoclet begin javadoc_method removePreTask() - /** - * Method testRemovePreTask is testing removePreTask - * @see CH.ifa.draw.samples.pert.PertFigure#removePreTask(CH.ifa.draw.samples.pert.PertFigure) - */ - // JUnitDoclet end javadoc_method removePreTask() - public void testRemovePreTask() throws Exception { - // JUnitDoclet begin method removePreTask - // JUnitDoclet end method removePreTask - } - - // JUnitDoclet begin javadoc_method removePostTask() - /** - * Method testRemovePostTask is testing removePostTask - * @see CH.ifa.draw.samples.pert.PertFigure#removePostTask(CH.ifa.draw.samples.pert.PertFigure) - */ - // JUnitDoclet end javadoc_method removePostTask() - public void testRemovePostTask() throws Exception { - // JUnitDoclet begin method removePostTask - // JUnitDoclet end method removePostTask - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.samples.pert.PertFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.samples.pert.PertFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.samples.pert.PertFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.samples.pert.PertFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method update() - /** - * Method testUpdate is testing update - * @see CH.ifa.draw.samples.pert.PertFigure#update(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method update() - public void testUpdate() throws Exception { - // JUnitDoclet begin method update - // JUnitDoclet end method update - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see CH.ifa.draw.samples.pert.PertFigure#figureChanged(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see CH.ifa.draw.samples.pert.PertFigure#figureRemoved(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method notifyPostTasks() - /** - * Method testNotifyPostTasks is testing notifyPostTasks - * @see CH.ifa.draw.samples.pert.PertFigure#notifyPostTasks() - */ - // JUnitDoclet end javadoc_method notifyPostTasks() - public void testNotifyPostTasks() throws Exception { - // JUnitDoclet begin method notifyPostTasks - // JUnitDoclet end method notifyPostTasks - } - - // JUnitDoclet begin javadoc_method updateDurations() - /** - * Method testUpdateDurations is testing updateDurations - * @see CH.ifa.draw.samples.pert.PertFigure#updateDurations() - */ - // JUnitDoclet end javadoc_method updateDurations() - public void testUpdateDurations() throws Exception { - // JUnitDoclet begin method updateDurations - // JUnitDoclet end method updateDurations - } - - // JUnitDoclet begin javadoc_method hasCycle() - /** - * Method testHasCycle is testing hasCycle - * @see CH.ifa.draw.samples.pert.PertFigure#hasCycle(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method hasCycle() - public void testHasCycle() throws Exception { - // JUnitDoclet begin method hasCycle - // JUnitDoclet end method hasCycle - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.samples.pert.PertFigure#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method writeTasks() - /** - * Method testWriteTasks is testing writeTasks - * @see CH.ifa.draw.samples.pert.PertFigure#writeTasks(CH.ifa.draw.util.StorableOutput, java.util.List) - */ - // JUnitDoclet end javadoc_method writeTasks() - public void testWriteTasks() throws Exception { - // JUnitDoclet begin method writeTasks - // JUnitDoclet end method writeTasks - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.samples.pert.PertFigure#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see CH.ifa.draw.samples.pert.PertFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method readTasks() - /** - * Method testReadTasks is testing readTasks - * @see CH.ifa.draw.samples.pert.PertFigure#readTasks(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method readTasks() - public void testReadTasks() throws Exception { - // JUnitDoclet begin method readTasks - // JUnitDoclet end method readTasks - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertSuite.java b/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertSuite.java deleted file mode 100644 index 8f753120a..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/samples/pert/PertSuite.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.samples.pert; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite PertSuite -*/ -// JUnitDoclet end javadoc_class -public class PertSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.samples.pert"); - - suite.addTestSuite(CH.ifa.draw.test.samples.pert.PertFigureCreationToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.pert.PertFigureTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.pert.PertDependencyTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.pert.PertApplicationTest.class); - suite.addTestSuite(CH.ifa.draw.test.samples.pert.PertAppletTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/AlignCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/AlignCommandTest.java deleted file mode 100644 index 8e732be77..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/AlignCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.AlignCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase AlignCommandTest is generated by - * JUnitDoclet to hold the tests for AlignCommand. - * @see CH.ifa.draw.standard.AlignCommand - */ -// JUnitDoclet end javadoc_class -public class AlignCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private AlignCommand aligncommand; - // JUnitDoclet end class - - /** - * Constructor AlignCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public AlignCommandTest(String name) { - // JUnitDoclet begin method AlignCommandTest - super(name); - // JUnitDoclet end method AlignCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.AlignCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.AlignCommand(AlignCommand.Alignment.TOPS, getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - aligncommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - aligncommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.AlignCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method getAlignment() - /** - * Method testGetAlignment is testing getAlignment - * @see CH.ifa.draw.standard.AlignCommand#getAlignment() - */ - // JUnitDoclet end javadoc_method getAlignment() - public void testGetAlignment() throws Exception { - // JUnitDoclet begin method getAlignment - // JUnitDoclet end method getAlignment - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/standard/AllTests.java deleted file mode 100644 index 7c27662f4..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/AllTests.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.standard"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(AlignCommandTest.class)); - suite.addTest(new TestSuite(BoxHandleKitTest.class)); - suite.addTest(new TestSuite(BringToFrontCommandTest.class)); - suite.addTest(new TestSuite(BufferedUpdateStrategyTest.class)); - suite.addTest(new TestSuite(ChangeAttributeCommandTest.class)); - suite.addTest(new TestSuite(ChangeConnectionEndHandleTest.class)); - suite.addTest(new TestSuite(ChangeConnectionStartHandleTest.class)); - suite.addTest(new TestSuite(ChopBoxConnectorTest.class)); - suite.addTest(new TestSuite(ConnectionHandleTest.class)); - suite.addTest(new TestSuite(ConnectionToolTest.class)); - suite.addTest(new TestSuite(CopyCommandTest.class)); - suite.addTest(new TestSuite(CreationToolTest.class)); - suite.addTest(new TestSuite(CutCommandTest.class)); - suite.addTest(new TestSuite(DeleteCommandTest.class)); - suite.addTest(new TestSuite(DeleteFromDrawingVisitorTest.class)); - suite.addTest(new TestSuite(DragTrackerTest.class)); - suite.addTest(new TestSuite(DuplicateCommandTest.class)); - suite.addTest(new TestSuite(FastBufferedUpdateStrategyTest.class)); - suite.addTest(new TestSuite(FigureAndEnumeratorTest.class)); - suite.addTest(new TestSuite(FigureChangeAdapterTest.class)); - suite.addTest(new TestSuite(FigureChangeEventMulticasterTest.class)); - suite.addTest(new TestSuite(FigureEnumeratorTest.class)); - suite.addTest(new TestSuite(GridConstrainerTest.class)); - suite.addTest(new TestSuite(HandleAndEnumeratorTest.class)); - suite.addTest(new TestSuite(HandleEnumeratorTest.class)); - suite.addTest(new TestSuite(HandleTrackerTest.class)); - suite.addTest(new TestSuite(InsertIntoDrawingVisitorTest.class)); - suite.addTest(new TestSuite(LocatorConnectorTest.class)); - suite.addTest(new TestSuite(LocatorHandleTest.class)); - suite.addTest(new TestSuite(NullDrawingViewTest.class)); - suite.addTest(new TestSuite(NullHandleTest.class)); - suite.addTest(new TestSuite(NullToolTest.class)); - suite.addTest(new TestSuite(OffsetLocatorTest.class)); - suite.addTest(new TestSuite(PasteCommandTest.class)); - suite.addTest(new TestSuite(PeripheralLocatorTest.class)); - suite.addTest(new TestSuite(RelativeLocatorTest.class)); - suite.addTest(new TestSuite(ReverseFigureEnumeratorTest.class)); - suite.addTest(new TestSuite(SelectAllCommandTest.class)); - suite.addTest(new TestSuite(SelectAreaTrackerTest.class)); - suite.addTest(new TestSuite(SelectionToolTest.class)); - suite.addTest(new TestSuite(SendToBackCommandTest.class)); - suite.addTest(new TestSuite(SimpleUpdateStrategyTest.class)); - suite.addTest(new TestSuite(SingleFigureEnumeratorTest.class)); - suite.addTest(new TestSuite(StandardDrawingTest.class)); - suite.addTest(new TestSuite(StandardDrawingViewTest.class)); - suite.addTest(new TestSuite(StandardFigureSelectionTest.class)); - suite.addTest(new TestSuite(ToggleGridCommandTest.class)); - suite.addTest(new TestSuite(ToolButtonTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/BoxHandleKitTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/BoxHandleKitTest.java deleted file mode 100644 index 0e66976ba..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/BoxHandleKitTest.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.BoxHandleKit; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BoxHandleKitTest is generated by - * JUnitDoclet to hold the tests for BoxHandleKit. - * @see CH.ifa.draw.standard.BoxHandleKit - */ -// JUnitDoclet end javadoc_class -public class BoxHandleKitTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BoxHandleKit boxhandlekit; - // JUnitDoclet end class - - /** - * Constructor BoxHandleKitTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BoxHandleKitTest(String name) { - // JUnitDoclet begin method BoxHandleKitTest - super(name); - // JUnitDoclet end method BoxHandleKitTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.BoxHandleKit createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.BoxHandleKit(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - boxhandlekit = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - boxhandlekit = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addCornerHandles() - /** - * Method testAddCornerHandles is testing addCornerHandles - * @see CH.ifa.draw.standard.BoxHandleKit#addCornerHandles(CH.ifa.draw.framework.Figure, java.util.List) - */ - // JUnitDoclet end javadoc_method addCornerHandles() - public void testAddCornerHandles() throws Exception { - // JUnitDoclet begin method addCornerHandles - // JUnitDoclet end method addCornerHandles - } - - // JUnitDoclet begin javadoc_method addHandles() - /** - * Method testAddHandles is testing addHandles - * @see CH.ifa.draw.standard.BoxHandleKit#addHandles(CH.ifa.draw.framework.Figure, java.util.List) - */ - // JUnitDoclet end javadoc_method addHandles() - public void testAddHandles() throws Exception { - // JUnitDoclet begin method addHandles - // JUnitDoclet end method addHandles - } - - // JUnitDoclet begin javadoc_method south() - /** - * Method testSouth is testing south - * @see CH.ifa.draw.standard.BoxHandleKit#south(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method south() - public void testSouth() throws Exception { - // JUnitDoclet begin method south - // JUnitDoclet end method south - } - - // JUnitDoclet begin javadoc_method southEast() - /** - * Method testSouthEast is testing southEast - * @see CH.ifa.draw.standard.BoxHandleKit#southEast(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method southEast() - public void testSouthEast() throws Exception { - // JUnitDoclet begin method southEast - // JUnitDoclet end method southEast - } - - // JUnitDoclet begin javadoc_method southWest() - /** - * Method testSouthWest is testing southWest - * @see CH.ifa.draw.standard.BoxHandleKit#southWest(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method southWest() - public void testSouthWest() throws Exception { - // JUnitDoclet begin method southWest - // JUnitDoclet end method southWest - } - - // JUnitDoclet begin javadoc_method north() - /** - * Method testNorth is testing north - * @see CH.ifa.draw.standard.BoxHandleKit#north(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method north() - public void testNorth() throws Exception { - // JUnitDoclet begin method north - // JUnitDoclet end method north - } - - // JUnitDoclet begin javadoc_method northEast() - /** - * Method testNorthEast is testing northEast - * @see CH.ifa.draw.standard.BoxHandleKit#northEast(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method northEast() - public void testNorthEast() throws Exception { - // JUnitDoclet begin method northEast - // JUnitDoclet end method northEast - } - - // JUnitDoclet begin javadoc_method northWest() - /** - * Method testNorthWest is testing northWest - * @see CH.ifa.draw.standard.BoxHandleKit#northWest(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method northWest() - public void testNorthWest() throws Exception { - // JUnitDoclet begin method northWest - // JUnitDoclet end method northWest - } - - // JUnitDoclet begin javadoc_method east() - /** - * Method testEast is testing east - * @see CH.ifa.draw.standard.BoxHandleKit#east(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method east() - public void testEast() throws Exception { - // JUnitDoclet begin method east - // JUnitDoclet end method east - } - - // JUnitDoclet begin javadoc_method west() - /** - * Method testWest is testing west - * @see CH.ifa.draw.standard.BoxHandleKit#west(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method west() - public void testWest() throws Exception { - // JUnitDoclet begin method west - // JUnitDoclet end method west - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/BringToFrontCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/BringToFrontCommandTest.java deleted file mode 100644 index 1e1b06f1b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/BringToFrontCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.BringToFrontCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BringToFrontCommandTest is generated by - * JUnitDoclet to hold the tests for BringToFrontCommand. - * @see CH.ifa.draw.standard.BringToFrontCommand - */ -// JUnitDoclet end javadoc_class -public class BringToFrontCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BringToFrontCommand bringtofrontcommand; - // JUnitDoclet end class - - /** - * Constructor BringToFrontCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BringToFrontCommandTest(String name) { - // JUnitDoclet begin method BringToFrontCommandTest - super(name); - // JUnitDoclet end method BringToFrontCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.BringToFrontCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.BringToFrontCommand("TestBringToFront", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bringtofrontcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bringtofrontcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.BringToFrontCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see CH.ifa.draw.standard.BringToFrontCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/BufferedUpdateStrategyTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/BufferedUpdateStrategyTest.java deleted file mode 100644 index a5c90ed89..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/BufferedUpdateStrategyTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.BufferedUpdateStrategy; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BufferedUpdateStrategyTest is generated by - * JUnitDoclet to hold the tests for BufferedUpdateStrategy. - * @see CH.ifa.draw.standard.BufferedUpdateStrategy - */ -// JUnitDoclet end javadoc_class -public class BufferedUpdateStrategyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BufferedUpdateStrategy bufferedupdatestrategy; - // JUnitDoclet end class - - /** - * Constructor BufferedUpdateStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BufferedUpdateStrategyTest(String name) { - // JUnitDoclet begin method BufferedUpdateStrategyTest - super(name); - // JUnitDoclet end method BufferedUpdateStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.BufferedUpdateStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.BufferedUpdateStrategy(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bufferedupdatestrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bufferedupdatestrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.standard.BufferedUpdateStrategy#draw(java.awt.Graphics, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/ChangeAttributeCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/ChangeAttributeCommandTest.java deleted file mode 100644 index 494a5b121..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/ChangeAttributeCommandTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Font; - -// JUnitDoclet begin import -import CH.ifa.draw.framework.FigureAttributeConstant; -import CH.ifa.draw.standard.ChangeAttributeCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChangeAttributeCommandTest is generated by - * JUnitDoclet to hold the tests for ChangeAttributeCommand. - * @see CH.ifa.draw.standard.ChangeAttributeCommand - */ -// JUnitDoclet end javadoc_class -public class ChangeAttributeCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChangeAttributeCommand changeattributecommand; - // JUnitDoclet end class - - /** - * Constructor ChangeAttributeCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChangeAttributeCommandTest(String name) { - // JUnitDoclet begin method ChangeAttributeCommandTest - super(name); - // JUnitDoclet end method ChangeAttributeCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.ChangeAttributeCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - FigureAttributeConstant fontStyle = FigureAttributeConstant.FONT_STYLE; - return new ChangeAttributeCommand("Bold", fontStyle, new Integer(Font.BOLD), getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - changeattributecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - changeattributecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.ChangeAttributeCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see CH.ifa.draw.standard.ChangeAttributeCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/ChangeConnectionEndHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/ChangeConnectionEndHandleTest.java deleted file mode 100644 index 4731bffb8..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/ChangeConnectionEndHandleTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import junit.framework.TestCase; -import CH.ifa.draw.figures.LineConnection; -import CH.ifa.draw.standard.ChangeConnectionEndHandle; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChangeConnectionEndHandleTest is generated by - * JUnitDoclet to hold the tests for ChangeConnectionEndHandle. - * @see CH.ifa.draw.standard.ChangeConnectionEndHandle - */ -// JUnitDoclet end javadoc_class -public class ChangeConnectionEndHandleTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChangeConnectionEndHandle changeconnectionendhandle; - // JUnitDoclet end class - - /** - * Constructor ChangeConnectionEndHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChangeConnectionEndHandleTest(String name) { - // JUnitDoclet begin method ChangeConnectionEndHandleTest - super(name); - // JUnitDoclet end method ChangeConnectionEndHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.ChangeConnectionEndHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.ChangeConnectionEndHandle(new LineConnection()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - changeconnectionendhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - changeconnectionendhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see CH.ifa.draw.standard.ChangeConnectionEndHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/ChangeConnectionStartHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/ChangeConnectionStartHandleTest.java deleted file mode 100644 index f7a4642f3..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/ChangeConnectionStartHandleTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import junit.framework.TestCase; -import CH.ifa.draw.figures.LineConnection; -import CH.ifa.draw.standard.ChangeConnectionStartHandle; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChangeConnectionStartHandleTest is generated by - * JUnitDoclet to hold the tests for ChangeConnectionStartHandle. - * @see CH.ifa.draw.standard.ChangeConnectionStartHandle - */ -// JUnitDoclet end javadoc_class -public class ChangeConnectionStartHandleTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChangeConnectionStartHandle changeconnectionstarthandle; - // JUnitDoclet end class - - /** - * Constructor ChangeConnectionStartHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChangeConnectionStartHandleTest(String name) { - // JUnitDoclet begin method ChangeConnectionStartHandleTest - super(name); - // JUnitDoclet end method ChangeConnectionStartHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.ChangeConnectionStartHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.ChangeConnectionStartHandle(new LineConnection()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - changeconnectionstarthandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - changeconnectionstarthandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see CH.ifa.draw.standard.ChangeConnectionStartHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/ChopBoxConnectorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/ChopBoxConnectorTest.java deleted file mode 100644 index 72bcef235..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/ChopBoxConnectorTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.ChopBoxConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChopBoxConnectorTest is generated by - * JUnitDoclet to hold the tests for ChopBoxConnector. - * @see CH.ifa.draw.standard.ChopBoxConnector - */ -// JUnitDoclet end javadoc_class -public class ChopBoxConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChopBoxConnector chopboxconnector; - // JUnitDoclet end class - - /** - * Constructor ChopBoxConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChopBoxConnectorTest(String name) { - // JUnitDoclet begin method ChopBoxConnectorTest - super(name); - // JUnitDoclet end method ChopBoxConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.ChopBoxConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.ChopBoxConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - chopboxconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - chopboxconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method findStart() - /** - * Method testFindStart is testing findStart - * @see CH.ifa.draw.standard.ChopBoxConnector#findStart(CH.ifa.draw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method findStart() - public void testFindStart() throws Exception { - // JUnitDoclet begin method findStart - // JUnitDoclet end method findStart - } - - // JUnitDoclet begin javadoc_method findEnd() - /** - * Method testFindEnd is testing findEnd - * @see CH.ifa.draw.standard.ChopBoxConnector#findEnd(CH.ifa.draw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method findEnd() - public void testFindEnd() throws Exception { - // JUnitDoclet begin method findEnd - // JUnitDoclet end method findEnd - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/ConnectionHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/ConnectionHandleTest.java deleted file mode 100644 index d4bf74916..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/ConnectionHandleTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.LineConnection; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.ConnectionHandle; -import CH.ifa.draw.standard.RelativeLocator; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ConnectionHandleTest is generated by - * JUnitDoclet to hold the tests for ConnectionHandle. - * @see CH.ifa.draw.standard.ConnectionHandle - */ -// JUnitDoclet end javadoc_class -public class ConnectionHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ConnectionHandle connectionhandle; - // JUnitDoclet end class - - /** - * Constructor ConnectionHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ConnectionHandleTest(String name) { - // JUnitDoclet begin method ConnectionHandleTest - super(name); - // JUnitDoclet end method ConnectionHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.ConnectionHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.ConnectionHandle(new RectangleFigure(new Point(10, 10), new Point(100, 100)), RelativeLocator.east(), new LineConnection()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - connectionhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - connectionhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see CH.ifa.draw.standard.ConnectionHandle#invokeStart(int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see CH.ifa.draw.standard.ConnectionHandle#invokeStep(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see CH.ifa.draw.standard.ConnectionHandle#invokeEnd(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.standard.ConnectionHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/ConnectionToolTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/ConnectionToolTest.java deleted file mode 100644 index 6a2081228..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/ConnectionToolTest.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.LineConnection; -import CH.ifa.draw.standard.ConnectionTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ConnectionToolTest is generated by - * JUnitDoclet to hold the tests for ConnectionTool. - * @see CH.ifa.draw.standard.ConnectionTool - */ -// JUnitDoclet end javadoc_class -public class ConnectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ConnectionTool connectiontool; - // JUnitDoclet end class - - /** - * Constructor ConnectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ConnectionToolTest(String name) { - // JUnitDoclet begin method ConnectionToolTest - super(name); - // JUnitDoclet end method ConnectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.ConnectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - LineConnection lineConn = new LineConnection(); - // todo: lineConn.connectStart(); - // todo: lineConn.connectEnd(); - return new CH.ifa.draw.standard.ConnectionTool(getDrawingEditor(), lineConn); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - connectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - connectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see CH.ifa.draw.standard.ConnectionTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.standard.ConnectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.standard.ConnectionTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.standard.ConnectionTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.standard.ConnectionTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/CopyCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/CopyCommandTest.java deleted file mode 100644 index 9760f35a6..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/CopyCommandTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.CopyCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CopyCommandTest is generated by - * JUnitDoclet to hold the tests for CopyCommand. - * @see CH.ifa.draw.standard.CopyCommand - */ -// JUnitDoclet end javadoc_class -public class CopyCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CopyCommand copycommand; - // JUnitDoclet end class - - /** - * Constructor CopyCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CopyCommandTest(String name) { - // JUnitDoclet begin method CopyCommandTest - super(name); - // JUnitDoclet end method CopyCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.CopyCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.CopyCommand("TestCopy", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - copycommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - copycommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.CopyCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/CreationToolTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/CreationToolTest.java deleted file mode 100644 index 214bbf108..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/CreationToolTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.CreationTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CreationToolTest is generated by - * JUnitDoclet to hold the tests for CreationTool. - * @see CH.ifa.draw.standard.CreationTool - */ -// JUnitDoclet end javadoc_class -public class CreationToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CreationTool creationtool; - // JUnitDoclet end class - - /** - * Constructor CreationToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CreationToolTest(String name) { - // JUnitDoclet begin method CreationToolTest - super(name); - // JUnitDoclet end method CreationToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.CreationTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.CreationTool(getDrawingEditor(), new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - creationtool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - creationtool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.standard.CreationTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.standard.CreationTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.standard.CreationTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.standard.CreationTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/CutCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/CutCommandTest.java deleted file mode 100644 index 77354fcab..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/CutCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.CutCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CutCommandTest is generated by - * JUnitDoclet to hold the tests for CutCommand. - * @see CH.ifa.draw.standard.CutCommand - */ -// JUnitDoclet end javadoc_class -public class CutCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CutCommand cutcommand; - // JUnitDoclet end class - - /** - * Constructor CutCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CutCommandTest(String name) { - // JUnitDoclet begin method CutCommandTest - super(name); - // JUnitDoclet end method CutCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.CutCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.CutCommand("TestCut", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - cutcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - cutcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.CutCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see CH.ifa.draw.standard.CutCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/DeleteCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/DeleteCommandTest.java deleted file mode 100644 index 1ae9d186c..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/DeleteCommandTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.DeleteCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DeleteCommandTest is generated by - * JUnitDoclet to hold the tests for DeleteCommand. - * @see CH.ifa.draw.standard.DeleteCommand - */ -// JUnitDoclet end javadoc_class -public class DeleteCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DeleteCommand deletecommand; - // JUnitDoclet end class - - /** - * Constructor DeleteCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DeleteCommandTest(String name) { - // JUnitDoclet begin method DeleteCommandTest - super(name); - // JUnitDoclet end method DeleteCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.DeleteCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.DeleteCommand("TestDelete", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - deletecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - deletecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.DeleteCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/DeleteFromDrawingVisitorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/DeleteFromDrawingVisitorTest.java deleted file mode 100644 index 731dab901..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/DeleteFromDrawingVisitorTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.DeleteFromDrawingVisitor; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DeleteFromDrawingVisitorTest is generated by - * JUnitDoclet to hold the tests for DeleteFromDrawingVisitor. - * @see CH.ifa.draw.standard.DeleteFromDrawingVisitor - */ -// JUnitDoclet end javadoc_class -public class DeleteFromDrawingVisitorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DeleteFromDrawingVisitor deletefromdrawingvisitor; - // JUnitDoclet end class - - /** - * Constructor DeleteFromDrawingVisitorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DeleteFromDrawingVisitorTest(String name) { - // JUnitDoclet begin method DeleteFromDrawingVisitorTest - super(name); - // JUnitDoclet end method DeleteFromDrawingVisitorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.DeleteFromDrawingVisitor createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.DeleteFromDrawingVisitor(getDrawingEditor().view().drawing()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - deletefromdrawingvisitor = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - deletefromdrawingvisitor = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method visitFigure() - /** - * Method testVisitFigure is testing visitFigure - * @see CH.ifa.draw.standard.DeleteFromDrawingVisitor#visitFigure(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method visitFigure() - public void testVisitFigure() throws Exception { - // JUnitDoclet begin method visitFigure - // JUnitDoclet end method visitFigure - } - - // JUnitDoclet begin javadoc_method visitHandle() - /** - * Method testVisitHandle is testing visitHandle - * @see CH.ifa.draw.standard.DeleteFromDrawingVisitor#visitHandle(CH.ifa.draw.framework.Handle) - */ - // JUnitDoclet end javadoc_method visitHandle() - public void testVisitHandle() throws Exception { - // JUnitDoclet begin method visitHandle - // JUnitDoclet end method visitHandle - } - - // JUnitDoclet begin javadoc_method visitFigureChangeListener() - /** - * Method testVisitFigureChangeListener is testing visitFigureChangeListener - * @see CH.ifa.draw.standard.DeleteFromDrawingVisitor#visitFigureChangeListener(CH.ifa.draw.framework.FigureChangeListener) - */ - // JUnitDoclet end javadoc_method visitFigureChangeListener() - public void testVisitFigureChangeListener() throws Exception { - // JUnitDoclet begin method visitFigureChangeListener - // JUnitDoclet end method visitFigureChangeListener - } - - // JUnitDoclet begin javadoc_method getDeletedFigures() - /** - * Method testGetDeletedFigures is testing getDeletedFigures - * @see CH.ifa.draw.standard.DeleteFromDrawingVisitor#getDeletedFigures() - */ - // JUnitDoclet end javadoc_method getDeletedFigures() - public void testGetDeletedFigures() throws Exception { - // JUnitDoclet begin method getDeletedFigures - // JUnitDoclet end method getDeletedFigures - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/DragTrackerTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/DragTrackerTest.java deleted file mode 100644 index 1043b1371..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/DragTrackerTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.DragTracker; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DragTrackerTest is generated by - * JUnitDoclet to hold the tests for DragTracker. - * @see CH.ifa.draw.standard.DragTracker - */ -// JUnitDoclet end javadoc_class -public class DragTrackerTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DragTracker dragtracker; - // JUnitDoclet end class - - /** - * Constructor DragTrackerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DragTrackerTest(String name) { - // JUnitDoclet begin method DragTrackerTest - super(name); - // JUnitDoclet end method DragTrackerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.DragTracker createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.DragTracker(getDrawingEditor(), new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - dragtracker = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - dragtracker = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.standard.DragTracker#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.standard.DragTracker#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.standard.DragTracker#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.standard.DragTracker#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/DuplicateCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/DuplicateCommandTest.java deleted file mode 100644 index a72fd561c..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/DuplicateCommandTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.DuplicateCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DuplicateCommandTest is generated by - * JUnitDoclet to hold the tests for DuplicateCommand. - * @see CH.ifa.draw.standard.DuplicateCommand - */ -// JUnitDoclet end javadoc_class -public class DuplicateCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DuplicateCommand duplicatecommand; - // JUnitDoclet end class - - /** - * Constructor DuplicateCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DuplicateCommandTest(String name) { - // JUnitDoclet begin method DuplicateCommandTest - super(name); - // JUnitDoclet end method DuplicateCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.DuplicateCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.DuplicateCommand("TestDuplicate", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - duplicatecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - duplicatecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.DuplicateCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/FastBufferedUpdateStrategyTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/FastBufferedUpdateStrategyTest.java deleted file mode 100644 index 425e6ec5a..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/FastBufferedUpdateStrategyTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.FastBufferedUpdateStrategy; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FastBufferedUpdateStrategyTest is generated by - * JUnitDoclet to hold the tests for FastBufferedUpdateStrategy. - * @see CH.ifa.draw.standard.FastBufferedUpdateStrategy - */ -// JUnitDoclet end javadoc_class -public class FastBufferedUpdateStrategyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FastBufferedUpdateStrategy fastbufferedupdatestrategy; - // JUnitDoclet end class - - /** - * Constructor FastBufferedUpdateStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FastBufferedUpdateStrategyTest(String name) { - // JUnitDoclet begin method FastBufferedUpdateStrategyTest - super(name); - // JUnitDoclet end method FastBufferedUpdateStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.FastBufferedUpdateStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.FastBufferedUpdateStrategy(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - fastbufferedupdatestrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - fastbufferedupdatestrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.standard.FastBufferedUpdateStrategy#draw(java.awt.Graphics, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/FigureAndEnumeratorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/FigureAndEnumeratorTest.java deleted file mode 100644 index 21cdb5c0f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/FigureAndEnumeratorTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; -import java.util.List; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.PolyLineFigure; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.FigureAndEnumerator; -import CH.ifa.draw.standard.FigureEnumerator; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureAndEnumeratorTest is generated by - * JUnitDoclet to hold the tests for FigureAndEnumerator. - * @see CH.ifa.draw.standard.FigureAndEnumerator - */ -// JUnitDoclet end javadoc_class -public class FigureAndEnumeratorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureAndEnumerator figureandenumerator; - // JUnitDoclet end class - - /** - * Constructor FigureAndEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureAndEnumeratorTest(String name) { - // JUnitDoclet begin method FigureAndEnumeratorTest - super(name); - // JUnitDoclet end method FigureAndEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.FigureAndEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l1 = CollectionsFactory.current().createList(); - l1.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - l1.add(new PolyLineFigure(20, 20)); - FigureEnumerator enum1 = new FigureEnumerator(l1); - - List l2 = CollectionsFactory.current().createList(); - l2.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - l2.add(new PolyLineFigure(20, 20)); - FigureEnumerator enum2 = new FigureEnumerator(l2); - return new CH.ifa.draw.standard.FigureAndEnumerator(enum1, enum2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figureandenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figureandenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method nextFigure() - /** - * Method testNextFigure is testing nextFigure - * @see CH.ifa.draw.standard.FigureAndEnumerator#nextFigure() - */ - // JUnitDoclet end javadoc_method nextFigure() - public void testNextFigure() throws Exception { - // JUnitDoclet begin method nextFigure - // JUnitDoclet end method nextFigure - } - - // JUnitDoclet begin javadoc_method hasNextFigure() - /** - * Method testHasNextFigure is testing hasNextFigure - * @see CH.ifa.draw.standard.FigureAndEnumerator#hasNextFigure() - */ - // JUnitDoclet end javadoc_method hasNextFigure() - public void testHasNextFigure() throws Exception { - // JUnitDoclet begin method hasNextFigure - // JUnitDoclet end method hasNextFigure - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see CH.ifa.draw.standard.FigureAndEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/FigureChangeAdapterTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/FigureChangeAdapterTest.java deleted file mode 100644 index 5520b8684..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/FigureChangeAdapterTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.FigureChangeAdapter; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureChangeAdapterTest is generated by - * JUnitDoclet to hold the tests for FigureChangeAdapter. - * @see CH.ifa.draw.standard.FigureChangeAdapter - */ -// JUnitDoclet end javadoc_class -public class FigureChangeAdapterTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureChangeAdapter figurechangeadapter; - // JUnitDoclet end class - - /** - * Constructor FigureChangeAdapterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureChangeAdapterTest(String name) { - // JUnitDoclet begin method FigureChangeAdapterTest - super(name); - // JUnitDoclet end method FigureChangeAdapterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.FigureChangeAdapter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.FigureChangeAdapter(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figurechangeadapter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figurechangeadapter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see CH.ifa.draw.standard.FigureChangeAdapter#figureInvalidated(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see CH.ifa.draw.standard.FigureChangeAdapter#figureChanged(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see CH.ifa.draw.standard.FigureChangeAdapter#figureRemoved(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see CH.ifa.draw.standard.FigureChangeAdapter#figureRequestRemove(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see CH.ifa.draw.standard.FigureChangeAdapter#figureRequestUpdate(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/FigureChangeEventMulticasterTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/FigureChangeEventMulticasterTest.java deleted file mode 100644 index 065cc88f7..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/FigureChangeEventMulticasterTest.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.util.EventListener; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.TextFigure; -import CH.ifa.draw.framework.Drawing; -import CH.ifa.draw.standard.FigureChangeEventMulticaster; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureChangeEventMulticasterTest is generated by - * JUnitDoclet to hold the tests for FigureChangeEventMulticaster. - * @see CH.ifa.draw.standard.FigureChangeEventMulticaster - */ -// JUnitDoclet end javadoc_class -public class FigureChangeEventMulticasterTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureChangeEventMulticaster figurechangeeventmulticaster; - // JUnitDoclet end class - - /** - * Constructor FigureChangeEventMulticasterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureChangeEventMulticasterTest(String name) { - // JUnitDoclet begin method FigureChangeEventMulticasterTest - super(name); - // JUnitDoclet end method FigureChangeEventMulticasterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.FigureChangeEventMulticaster createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - EventListener l1 = new TextFigure(); - Drawing l2 = getDrawingEditor().view().drawing(); - return new CH.ifa.draw.standard.FigureChangeEventMulticaster(l1, l2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - figurechangeeventmulticaster = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figurechangeeventmulticaster = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see CH.ifa.draw.standard.FigureChangeEventMulticaster#figureInvalidated(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see CH.ifa.draw.standard.FigureChangeEventMulticaster#figureRequestRemove(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see CH.ifa.draw.standard.FigureChangeEventMulticaster#figureRequestUpdate(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see CH.ifa.draw.standard.FigureChangeEventMulticaster#figureChanged(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see CH.ifa.draw.standard.FigureChangeEventMulticaster#figureRemoved(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.standard.FigureChangeEventMulticaster#add(CH.ifa.draw.framework.FigureChangeListener, CH.ifa.draw.framework.FigureChangeListener) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.standard.FigureChangeEventMulticaster#remove(CH.ifa.draw.framework.FigureChangeListener, CH.ifa.draw.framework.FigureChangeListener) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/FigureEnumeratorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/FigureEnumeratorTest.java deleted file mode 100644 index 0e84222cf..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/FigureEnumeratorTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.PolyLineFigure; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.FigureEnumerator; -import CH.ifa.draw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureEnumeratorTest is generated by - * JUnitDoclet to hold the tests for FigureEnumerator. - * @see CH.ifa.draw.standard.FigureEnumerator - */ -// JUnitDoclet end javadoc_class -public class FigureEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureEnumerator figureenumerator; - // JUnitDoclet end class - - /** - * Constructor FigureEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureEnumeratorTest(String name) { - // JUnitDoclet begin method FigureEnumeratorTest - super(name); - // JUnitDoclet end method FigureEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.FigureEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l = CollectionsFactory.current().createList(); - l.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - l.add(new PolyLineFigure(20, 20)); - return new CH.ifa.draw.standard.FigureEnumerator(l); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figureenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figureenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNextFigure() - /** - * Method testHasNextFigure is testing hasNextFigure - * @see CH.ifa.draw.standard.FigureEnumerator#hasNextFigure() - */ - // JUnitDoclet end javadoc_method hasNextFigure() - public void testHasNextFigure() throws Exception { - // JUnitDoclet begin method hasNextFigure - // JUnitDoclet end method hasNextFigure - } - - // JUnitDoclet begin javadoc_method nextFigure() - /** - * Method testNextFigure is testing nextFigure - * @see CH.ifa.draw.standard.FigureEnumerator#nextFigure() - */ - // JUnitDoclet end javadoc_method nextFigure() - public void testNextFigure() throws Exception { - // JUnitDoclet begin method nextFigure - // JUnitDoclet end method nextFigure - } - - // JUnitDoclet begin javadoc_method getEmptyEnumeration() - /** - * Method testGetEmptyEnumeration is testing getEmptyEnumeration - * @see CH.ifa.draw.standard.FigureEnumerator#getEmptyEnumeration() - */ - // JUnitDoclet end javadoc_method getEmptyEnumeration() - public void testGetEmptyEnumeration() throws Exception { - // JUnitDoclet begin method getEmptyEnumeration - // JUnitDoclet end method getEmptyEnumeration - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see CH.ifa.draw.standard.FigureEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/GridConstrainerTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/GridConstrainerTest.java deleted file mode 100644 index 0305c113e..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/GridConstrainerTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.GridConstrainer; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase GridConstrainerTest is generated by - * JUnitDoclet to hold the tests for GridConstrainer. - * @see CH.ifa.draw.standard.GridConstrainer - */ -// JUnitDoclet end javadoc_class -public class GridConstrainerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GridConstrainer gridconstrainer; - // JUnitDoclet end class - - /** - * Constructor GridConstrainerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GridConstrainerTest(String name) { - // JUnitDoclet begin method GridConstrainerTest - super(name); - // JUnitDoclet end method GridConstrainerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.GridConstrainer createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.GridConstrainer(5, 5); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - gridconstrainer = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - gridconstrainer = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method constrainPoint() - /** - * Method testConstrainPoint is testing constrainPoint - * @see CH.ifa.draw.standard.GridConstrainer#constrainPoint(java.awt.Point) - */ - // JUnitDoclet end javadoc_method constrainPoint() - public void testConstrainPoint() throws Exception { - // JUnitDoclet begin method constrainPoint - // JUnitDoclet end method constrainPoint - } - - // JUnitDoclet begin javadoc_method getStepX() - /** - * Method testGetStepX is testing getStepX - * @see CH.ifa.draw.standard.GridConstrainer#getStepX() - */ - // JUnitDoclet end javadoc_method getStepX() - public void testGetStepX() throws Exception { - // JUnitDoclet begin method getStepX - // JUnitDoclet end method getStepX - } - - // JUnitDoclet begin javadoc_method getStepY() - /** - * Method testGetStepY is testing getStepY - * @see CH.ifa.draw.standard.GridConstrainer#getStepY() - */ - // JUnitDoclet end javadoc_method getStepY() - public void testGetStepY() throws Exception { - // JUnitDoclet begin method getStepY - // JUnitDoclet end method getStepY - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/HandleAndEnumeratorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/HandleAndEnumeratorTest.java deleted file mode 100644 index b8df844b4..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/HandleAndEnumeratorTest.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.HandleAndEnumerator; -import CH.ifa.draw.standard.HandleEnumerator; -import CH.ifa.draw.standard.NullHandle; -import CH.ifa.draw.standard.RelativeLocator; -import CH.ifa.draw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase HandleAndEnumeratorTest is generated by - * JUnitDoclet to hold the tests for HandleAndEnumerator. - * @see CH.ifa.draw.standard.HandleAndEnumerator - */ -// JUnitDoclet end javadoc_class -public class HandleAndEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private HandleAndEnumerator handleandenumerator; - // JUnitDoclet end class - - /** - * Constructor HandleAndEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public HandleAndEnumeratorTest(String name) { - // JUnitDoclet begin method HandleAndEnumeratorTest - super(name); - // JUnitDoclet end method HandleAndEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.HandleAndEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - RectangleFigure figure1 = new RectangleFigure(new Point(15, 15), new Point(20, 20)); - List l1 = CollectionsFactory.current().createList(); - l1.add(new NullHandle(figure1, RelativeLocator.north())); - l1.add(new NullHandle(figure1, RelativeLocator.north())); - HandleEnumerator handleEnum1 = new HandleEnumerator(l1); - - RectangleFigure figure2 = new RectangleFigure(new Point(55, 55), new Point(70, 70)); - List l2 = CollectionsFactory.current().createList(); - l2.add(new NullHandle(figure2, RelativeLocator.north())); - l2.add(new NullHandle(figure2, RelativeLocator.north())); - HandleEnumerator handleEnum2 = new HandleEnumerator(l2); - return new CH.ifa.draw.standard.HandleAndEnumerator(handleEnum1, handleEnum2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - handleandenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - handleandenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method nextHandle() - /** - * Method testNextHandle is testing nextHandle - * @see CH.ifa.draw.standard.HandleAndEnumerator#nextHandle() - */ - // JUnitDoclet end javadoc_method nextHandle() - public void testNextHandle() throws Exception { - // JUnitDoclet begin method nextHandle - // JUnitDoclet end method nextHandle - } - - // JUnitDoclet begin javadoc_method hasNextHandle() - /** - * Method testHasNextHandle is testing hasNextHandle - * @see CH.ifa.draw.standard.HandleAndEnumerator#hasNextHandle() - */ - // JUnitDoclet end javadoc_method hasNextHandle() - public void testHasNextHandle() throws Exception { - // JUnitDoclet begin method hasNextHandle - // JUnitDoclet end method hasNextHandle - } - - // JUnitDoclet begin javadoc_method toList() - /** - * Method testToList is testing toList - * @see CH.ifa.draw.standard.HandleAndEnumerator#toList() - */ - // JUnitDoclet end javadoc_method toList() - public void testToList() throws Exception { - // JUnitDoclet begin method toList - // JUnitDoclet end method toList - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see CH.ifa.draw.standard.HandleAndEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/HandleEnumeratorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/HandleEnumeratorTest.java deleted file mode 100644 index 632429247..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/HandleEnumeratorTest.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; -import java.util.List; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.HandleEnumerator; -import CH.ifa.draw.standard.NullHandle; -import CH.ifa.draw.standard.RelativeLocator; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase HandleEnumeratorTest is generated by - * JUnitDoclet to hold the tests for HandleEnumerator. - * @see CH.ifa.draw.standard.HandleEnumerator - */ -// JUnitDoclet end javadoc_class -public class HandleEnumeratorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private HandleEnumerator handleenumerator; - // JUnitDoclet end class - - /** - * Constructor HandleEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public HandleEnumeratorTest(String name) { - // JUnitDoclet begin method HandleEnumeratorTest - super(name); - // JUnitDoclet end method HandleEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.HandleEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - RectangleFigure figure = new RectangleFigure(new Point(15, 15), new Point(20, 20)); - List l = CollectionsFactory.current().createList(); - l.add(new NullHandle(figure, RelativeLocator.north())); - l.add(new NullHandle(figure, RelativeLocator.north())); - return new CH.ifa.draw.standard.HandleEnumerator(l); - //return (HandleEnumerator)figure.handles(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - handleenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - handleenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNextHandle() - /** - * Method testHasNextHandle is testing hasNextHandle - * @see CH.ifa.draw.standard.HandleEnumerator#hasNextHandle() - */ - // JUnitDoclet end javadoc_method hasNextHandle() - public void testHasNextHandle() throws Exception { - // JUnitDoclet begin method hasNextHandle - // JUnitDoclet end method hasNextHandle - } - - // JUnitDoclet begin javadoc_method nextHandle() - /** - * Method testNextHandle is testing nextHandle - * @see CH.ifa.draw.standard.HandleEnumerator#nextHandle() - */ - // JUnitDoclet end javadoc_method nextHandle() - public void testNextHandle() throws Exception { - // JUnitDoclet begin method nextHandle - // JUnitDoclet end method nextHandle - } - - // JUnitDoclet begin javadoc_method toList() - /** - * Method testToList is testing toList - * @see CH.ifa.draw.standard.HandleEnumerator#toList() - */ - // JUnitDoclet end javadoc_method toList() - public void testToList() throws Exception { - // JUnitDoclet begin method toList - // JUnitDoclet end method toList - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see CH.ifa.draw.standard.HandleEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method getEmptyEnumeration() - /** - * Method testGetEmptyEnumeration is testing getEmptyEnumeration - * @see CH.ifa.draw.standard.HandleEnumerator#getEmptyEnumeration() - */ - // JUnitDoclet end javadoc_method getEmptyEnumeration() - public void testGetEmptyEnumeration() throws Exception { - // JUnitDoclet begin method getEmptyEnumeration - // JUnitDoclet end method getEmptyEnumeration - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/HandleTrackerTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/HandleTrackerTest.java deleted file mode 100644 index b523d8652..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/HandleTrackerTest.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.framework.Handle; -import CH.ifa.draw.standard.HandleTracker; -import CH.ifa.draw.standard.NullHandle; -import CH.ifa.draw.standard.RelativeLocator; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase HandleTrackerTest is generated by - * JUnitDoclet to hold the tests for HandleTracker. - * @see CH.ifa.draw.standard.HandleTracker - */ -// JUnitDoclet end javadoc_class -public class HandleTrackerTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private HandleTracker handletracker; - // JUnitDoclet end class - - /** - * Constructor HandleTrackerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public HandleTrackerTest(String name) { - // JUnitDoclet begin method HandleTrackerTest - super(name); - // JUnitDoclet end method HandleTrackerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.HandleTracker createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Handle handle = new NullHandle(new RectangleFigure(new Point(10, 10), new Point(40, 40)), RelativeLocator.north()); - return new CH.ifa.draw.standard.HandleTracker(getDrawingEditor(), handle); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - handletracker = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - handletracker = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.standard.HandleTracker#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.standard.HandleTracker#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.standard.HandleTracker#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.standard.HandleTracker#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/InsertIntoDrawingVisitorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/InsertIntoDrawingVisitorTest.java deleted file mode 100644 index c5a24a94c..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/InsertIntoDrawingVisitorTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.InsertIntoDrawingVisitor; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase InsertIntoDrawingVisitorTest is generated by - * JUnitDoclet to hold the tests for InsertIntoDrawingVisitor. - * @see CH.ifa.draw.standard.InsertIntoDrawingVisitor - */ -// JUnitDoclet end javadoc_class -public class InsertIntoDrawingVisitorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private InsertIntoDrawingVisitor insertintodrawingvisitor; - // JUnitDoclet end class - - /** - * Constructor InsertIntoDrawingVisitorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public InsertIntoDrawingVisitorTest(String name) { - // JUnitDoclet begin method InsertIntoDrawingVisitorTest - super(name); - // JUnitDoclet end method InsertIntoDrawingVisitorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.InsertIntoDrawingVisitor createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.InsertIntoDrawingVisitor(getDrawingEditor().view().drawing()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - insertintodrawingvisitor = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - insertintodrawingvisitor = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method visitFigure() - /** - * Method testVisitFigure is testing visitFigure - * @see CH.ifa.draw.standard.InsertIntoDrawingVisitor#visitFigure(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method visitFigure() - public void testVisitFigure() throws Exception { - // JUnitDoclet begin method visitFigure - // JUnitDoclet end method visitFigure - } - - // JUnitDoclet begin javadoc_method visitHandle() - /** - * Method testVisitHandle is testing visitHandle - * @see CH.ifa.draw.standard.InsertIntoDrawingVisitor#visitHandle(CH.ifa.draw.framework.Handle) - */ - // JUnitDoclet end javadoc_method visitHandle() - public void testVisitHandle() throws Exception { - // JUnitDoclet begin method visitHandle - // JUnitDoclet end method visitHandle - } - - // JUnitDoclet begin javadoc_method visitFigureChangeListener() - /** - * Method testVisitFigureChangeListener is testing visitFigureChangeListener - * @see CH.ifa.draw.standard.InsertIntoDrawingVisitor#visitFigureChangeListener(CH.ifa.draw.framework.FigureChangeListener) - */ - // JUnitDoclet end javadoc_method visitFigureChangeListener() - public void testVisitFigureChangeListener() throws Exception { - // JUnitDoclet begin method visitFigureChangeListener - // JUnitDoclet end method visitFigureChangeListener - } - - // JUnitDoclet begin javadoc_method getInsertedFigures() - /** - * Method testGetInsertedFigures is testing getInsertedFigures - * @see CH.ifa.draw.standard.InsertIntoDrawingVisitor#getInsertedFigures() - */ - // JUnitDoclet end javadoc_method getInsertedFigures() - public void testGetInsertedFigures() throws Exception { - // JUnitDoclet begin method getInsertedFigures - // JUnitDoclet end method getInsertedFigures - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/LocatorConnectorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/LocatorConnectorTest.java deleted file mode 100644 index 348b5bc2a..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/LocatorConnectorTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.LocatorConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase LocatorConnectorTest is generated by - * JUnitDoclet to hold the tests for LocatorConnector. - * @see CH.ifa.draw.standard.LocatorConnector - */ -// JUnitDoclet end javadoc_class -public class LocatorConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private LocatorConnector locatorconnector; - // JUnitDoclet end class - - /** - * Constructor LocatorConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public LocatorConnectorTest(String name) { - // JUnitDoclet begin method LocatorConnectorTest - super(name); - // JUnitDoclet end method LocatorConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.LocatorConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.LocatorConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - locatorconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - locatorconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see CH.ifa.draw.standard.LocatorConnector#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.standard.LocatorConnector#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.standard.LocatorConnector#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.standard.LocatorConnector#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.standard.LocatorConnector#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method getLocator() - /** - * Method testGetLocator is testing getLocator - * @see CH.ifa.draw.standard.LocatorConnector#getLocator() - */ - // JUnitDoclet end javadoc_method getLocator() - public void testGetLocator() throws Exception { - // JUnitDoclet begin method getLocator - // JUnitDoclet end method getLocator - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/LocatorHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/LocatorHandleTest.java deleted file mode 100644 index 128aa9eb4..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/LocatorHandleTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.LocatorHandle; -import CH.ifa.draw.standard.RelativeLocator; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase LocatorHandleTest is generated by - * JUnitDoclet to hold the tests for LocatorHandle. - * @see CH.ifa.draw.standard.LocatorHandle - */ -// JUnitDoclet end javadoc_class -public class LocatorHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private LocatorHandle locatorhandle; - // JUnitDoclet end class - - /** - * Constructor LocatorHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public LocatorHandleTest(String name) { - // JUnitDoclet begin method LocatorHandleTest - super(name); - // JUnitDoclet end method LocatorHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.LocatorHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.LocatorHandle(new RectangleFigure(new Point(), new Point()), new RelativeLocator(1.0, 2.0)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - locatorhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - locatorhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getLocator() - /** - * Method testGetLocator is testing getLocator - * @see CH.ifa.draw.standard.LocatorHandle#getLocator() - */ - // JUnitDoclet end javadoc_method getLocator() - public void testGetLocator() throws Exception { - // JUnitDoclet begin method getLocator - // JUnitDoclet end method getLocator - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see CH.ifa.draw.standard.LocatorHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/NullDrawingViewTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/NullDrawingViewTest.java deleted file mode 100644 index ce208c43b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/NullDrawingViewTest.java +++ /dev/null @@ -1,650 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.NullDrawingView; -import CH.ifa.draw.standard.SimpleUpdateStrategy; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullDrawingViewTest is generated by - * JUnitDoclet to hold the tests for NullDrawingView. - * @see CH.ifa.draw.standard.NullDrawingView - */ -// JUnitDoclet end javadoc_class -public class NullDrawingViewTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullDrawingView nulldrawingview; - // JUnitDoclet end class - - /** - * Constructor NullDrawingViewTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullDrawingViewTest(String name) { - // JUnitDoclet begin method NullDrawingViewTest - super(name); - // JUnitDoclet end method NullDrawingViewTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.NullDrawingView createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return (NullDrawingView)NullDrawingView.getManagedDrawingView(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nulldrawingview = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nulldrawingview = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setEditor() - /** - * Method testSetEditor is testing setEditor - * @see CH.ifa.draw.standard.NullDrawingView#setEditor(CH.ifa.draw.framework.DrawingEditor) - */ - // JUnitDoclet end javadoc_method setEditor() - public void testSetEditor() throws Exception { - // JUnitDoclet begin method setEditor - // JUnitDoclet end method setEditor - } - - // JUnitDoclet begin javadoc_method tool() - /** - * Method testTool is testing tool - * @see CH.ifa.draw.standard.NullDrawingView#tool() - */ - // JUnitDoclet end javadoc_method tool() - public void testTool() throws Exception { - // JUnitDoclet begin method tool - // JUnitDoclet end method tool - } - - // JUnitDoclet begin javadoc_method drawing() - /** - * Method testDrawing is testing drawing - * @see CH.ifa.draw.standard.NullDrawingView#drawing() - */ - // JUnitDoclet end javadoc_method drawing() - public void testDrawing() throws Exception { - // JUnitDoclet begin method drawing - // JUnitDoclet end method drawing - } - - // JUnitDoclet begin javadoc_method setDrawing() - /** - * Method testSetDrawing is testing setDrawing - * @see CH.ifa.draw.standard.NullDrawingView#setDrawing(CH.ifa.draw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method setDrawing() - public void testSetDrawing() throws Exception { - // JUnitDoclet begin method setDrawing - // JUnitDoclet end method setDrawing - } - - // JUnitDoclet begin javadoc_method editor() - /** - * Method testEditor is testing editor - * @see CH.ifa.draw.standard.NullDrawingView#editor() - */ - // JUnitDoclet end javadoc_method editor() - public void testEditor() throws Exception { - // JUnitDoclet begin method editor - // JUnitDoclet end method editor - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.standard.NullDrawingView#add(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.standard.NullDrawingView#remove(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method addAll() - /** - * Method testAddAll is testing addAll - * @see CH.ifa.draw.standard.NullDrawingView#addAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addAll() - public void testAddAll() throws Exception { - // JUnitDoclet begin method addAll - // JUnitDoclet end method addAll - } - - // JUnitDoclet begin javadoc_method getSize() - /** - * Method testGetSize is testing getSize - * @see CH.ifa.draw.standard.NullDrawingView#getSize() - */ - // JUnitDoclet end javadoc_method getSize() - public void testGetSize() throws Exception { - // JUnitDoclet begin method getSize - // JUnitDoclet end method getSize - } - - // JUnitDoclet begin javadoc_method getMinimumSize() - /** - * Method testGetMinimumSize is testing getMinimumSize - * @see CH.ifa.draw.standard.NullDrawingView#getMinimumSize() - */ - // JUnitDoclet end javadoc_method getMinimumSize() - public void testGetMinimumSize() throws Exception { - // JUnitDoclet begin method getMinimumSize - // JUnitDoclet end method getMinimumSize - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see CH.ifa.draw.standard.NullDrawingView#getPreferredSize() - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method setDisplayUpdate() - /** - * Method testSetGetDisplayUpdate is testing setDisplayUpdate - * and getDisplayUpdate together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.standard.NullDrawingView#setDisplayUpdate(CH.ifa.draw.framework.Painter) - * @see CH.ifa.draw.standard.NullDrawingView#getDisplayUpdate() - */ - // JUnitDoclet end javadoc_method setDisplayUpdate() - public void testSetGetDisplayUpdate() throws Exception { - // JUnitDoclet begin method setDisplayUpdate getDisplayUpdate - CH.ifa.draw.framework.Painter[] tests = { new SimpleUpdateStrategy(), null }; - - for (int i = 0; i < tests.length; i++) { - nulldrawingview.setDisplayUpdate(tests[i]); - assertEquals(tests[i], nulldrawingview.getDisplayUpdate()); - } - // JUnitDoclet end method setDisplayUpdate getDisplayUpdate - } - - // JUnitDoclet begin javadoc_method selection() - /** - * Method testSelection is testing selection - * @see CH.ifa.draw.standard.NullDrawingView#selection() - */ - // JUnitDoclet end javadoc_method selection() - public void testSelection() throws Exception { - // JUnitDoclet begin method selection - // JUnitDoclet end method selection - } - - // JUnitDoclet begin javadoc_method selectionZOrdered() - /** - * Method testSelectionZOrdered is testing selectionZOrdered - * @see CH.ifa.draw.standard.NullDrawingView#selectionZOrdered() - */ - // JUnitDoclet end javadoc_method selectionZOrdered() - public void testSelectionZOrdered() throws Exception { - // JUnitDoclet begin method selectionZOrdered - // JUnitDoclet end method selectionZOrdered - } - - // JUnitDoclet begin javadoc_method selectionCount() - /** - * Method testSelectionCount is testing selectionCount - * @see CH.ifa.draw.standard.NullDrawingView#selectionCount() - */ - // JUnitDoclet end javadoc_method selectionCount() - public void testSelectionCount() throws Exception { - // JUnitDoclet begin method selectionCount - // JUnitDoclet end method selectionCount - } - - // JUnitDoclet begin javadoc_method isFigureSelected() - /** - * Method testIsFigureSelected is testing isFigureSelected - * @see CH.ifa.draw.standard.NullDrawingView#isFigureSelected(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method isFigureSelected() - public void testIsFigureSelected() throws Exception { - // JUnitDoclet begin method isFigureSelected - // JUnitDoclet end method isFigureSelected - } - - // JUnitDoclet begin javadoc_method addToSelection() - /** - * Method testAddToSelection is testing addToSelection - * @see CH.ifa.draw.standard.NullDrawingView#addToSelection(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method addToSelection() - public void testAddToSelection() throws Exception { - // JUnitDoclet begin method addToSelection - // JUnitDoclet end method addToSelection - } - - // JUnitDoclet begin javadoc_method addToSelectionAll() - /** - * Method testAddToSelectionAll is testing addToSelectionAll - * @see CH.ifa.draw.standard.NullDrawingView#addToSelectionAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addToSelectionAll() - public void testAddToSelectionAll() throws Exception { - // JUnitDoclet begin method addToSelectionAll - // JUnitDoclet end method addToSelectionAll - } - - // JUnitDoclet begin javadoc_method removeFromSelection() - /** - * Method testRemoveFromSelection is testing removeFromSelection - * @see CH.ifa.draw.standard.NullDrawingView#removeFromSelection(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method removeFromSelection() - public void testRemoveFromSelection() throws Exception { - // JUnitDoclet begin method removeFromSelection - // JUnitDoclet end method removeFromSelection - } - - // JUnitDoclet begin javadoc_method toggleSelection() - /** - * Method testToggleSelection is testing toggleSelection - * @see CH.ifa.draw.standard.NullDrawingView#toggleSelection(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method toggleSelection() - public void testToggleSelection() throws Exception { - // JUnitDoclet begin method toggleSelection - // JUnitDoclet end method toggleSelection - } - - // JUnitDoclet begin javadoc_method clearSelection() - /** - * Method testClearSelection is testing clearSelection - * @see CH.ifa.draw.standard.NullDrawingView#clearSelection() - */ - // JUnitDoclet end javadoc_method clearSelection() - public void testClearSelection() throws Exception { - // JUnitDoclet begin method clearSelection - // JUnitDoclet end method clearSelection - } - - // JUnitDoclet begin javadoc_method getFigureSelection() - /** - * Method testGetFigureSelection is testing getFigureSelection - * @see CH.ifa.draw.standard.NullDrawingView#getFigureSelection() - */ - // JUnitDoclet end javadoc_method getFigureSelection() - public void testGetFigureSelection() throws Exception { - // JUnitDoclet begin method getFigureSelection - // JUnitDoclet end method getFigureSelection - } - - // JUnitDoclet begin javadoc_method findHandle() - /** - * Method testFindHandle is testing findHandle - * @see CH.ifa.draw.standard.NullDrawingView#findHandle(int, int) - */ - // JUnitDoclet end javadoc_method findHandle() - public void testFindHandle() throws Exception { - // JUnitDoclet begin method findHandle - // JUnitDoclet end method findHandle - } - - // JUnitDoclet begin javadoc_method lastClick() - /** - * Method testLastClick is testing lastClick - * @see CH.ifa.draw.standard.NullDrawingView#lastClick() - */ - // JUnitDoclet end javadoc_method lastClick() - public void testLastClick() throws Exception { - // JUnitDoclet begin method lastClick - // JUnitDoclet end method lastClick - } - - // JUnitDoclet begin javadoc_method setConstrainer() - /** - * NullDrawingView.setConstrainer is a no-op. - * - * @see CH.ifa.draw.standard.NullDrawingView#setConstrainer(CH.ifa.draw.framework.PointConstrainer) - * @see CH.ifa.draw.standard.NullDrawingView#getConstrainer() - */ - // JUnitDoclet end javadoc_method setConstrainer() - public void testSetGetConstrainer() throws Exception { - // JUnitDoclet begin method setConstrainer getConstrainer - // Do nothing: NullDrawingView.setConstrainer is a no-op. - // JUnitDoclet end method setConstrainer getConstrainer - } - - // JUnitDoclet begin javadoc_method checkDamage() - /** - * Method testCheckDamage is testing checkDamage - * @see CH.ifa.draw.standard.NullDrawingView#checkDamage() - */ - // JUnitDoclet end javadoc_method checkDamage() - public void testCheckDamage() throws Exception { - // JUnitDoclet begin method checkDamage - // JUnitDoclet end method checkDamage - } - - // JUnitDoclet begin javadoc_method repairDamage() - /** - * Method testRepairDamage is testing repairDamage - * @see CH.ifa.draw.standard.NullDrawingView#repairDamage() - */ - // JUnitDoclet end javadoc_method repairDamage() - public void testRepairDamage() throws Exception { - // JUnitDoclet begin method repairDamage - // JUnitDoclet end method repairDamage - } - - // JUnitDoclet begin javadoc_method paint() - /** - * Method testPaint is testing paint - * @see CH.ifa.draw.standard.NullDrawingView#paint(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method paint() - public void testPaint() throws Exception { - // JUnitDoclet begin method paint - // JUnitDoclet end method paint - } - - // JUnitDoclet begin javadoc_method createImage() - /** - * Method testCreateImage is testing createImage - * @see CH.ifa.draw.standard.NullDrawingView#createImage(int, int) - */ - // JUnitDoclet end javadoc_method createImage() - public void testCreateImage() throws Exception { - // JUnitDoclet begin method createImage - // JUnitDoclet end method createImage - } - - // JUnitDoclet begin javadoc_method getGraphics() - /** - * Method testGetGraphics is testing getGraphics - * @see CH.ifa.draw.standard.NullDrawingView#getGraphics() - */ - // JUnitDoclet end javadoc_method getGraphics() - public void testGetGraphics() throws Exception { - // JUnitDoclet begin method getGraphics - // JUnitDoclet end method getGraphics - } - - // JUnitDoclet begin javadoc_method setBackground() - /** - * Method testSetGetBackground is testing setBackground - * and getBackground together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.standard.NullDrawingView#setBackground(java.awt.Color) - * @see CH.ifa.draw.standard.NullDrawingView#getBackground() - */ - // JUnitDoclet end javadoc_method setBackground() - public void testSetGetBackground() throws Exception { - // JUnitDoclet begin method setBackground getBackground - java.awt.Color[] tests = { java.awt.Color.BLACK, null }; - - for (int i = 0; i < tests.length; i++) { - nulldrawingview.setBackground(tests[i]); - assertEquals(tests[i], nulldrawingview.getBackground()); - } - // JUnitDoclet end method setBackground getBackground - } - - // JUnitDoclet begin javadoc_method drawAll() - /** - * Method testDrawAll is testing drawAll - * @see CH.ifa.draw.standard.NullDrawingView#drawAll(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawAll() - public void testDrawAll() throws Exception { - // JUnitDoclet begin method drawAll - // JUnitDoclet end method drawAll - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.standard.NullDrawingView#draw(java.awt.Graphics, CH.ifa.draw.framework.FigureEnumeration) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method drawHandles() - /** - * Method testDrawHandles is testing drawHandles - * @see CH.ifa.draw.standard.NullDrawingView#drawHandles(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawHandles() - public void testDrawHandles() throws Exception { - // JUnitDoclet begin method drawHandles - // JUnitDoclet end method drawHandles - } - - // JUnitDoclet begin javadoc_method drawDrawing() - /** - * Method testDrawDrawing is testing drawDrawing - * @see CH.ifa.draw.standard.NullDrawingView#drawDrawing(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawDrawing() - public void testDrawDrawing() throws Exception { - // JUnitDoclet begin method drawDrawing - // JUnitDoclet end method drawDrawing - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see CH.ifa.draw.standard.NullDrawingView#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method setCursor() - /** - * Method testSetCursor is testing setCursor - * @see CH.ifa.draw.standard.NullDrawingView#setCursor(java.awt.Cursor) - */ - // JUnitDoclet end javadoc_method setCursor() - public void testSetCursor() throws Exception { - // JUnitDoclet begin method setCursor - // JUnitDoclet end method setCursor - } - - // JUnitDoclet begin javadoc_method freezeView() - /** - * Method testFreezeView is testing freezeView - * @see CH.ifa.draw.standard.NullDrawingView#freezeView() - */ - // JUnitDoclet end javadoc_method freezeView() - public void testFreezeView() throws Exception { - // JUnitDoclet begin method freezeView - // JUnitDoclet end method freezeView - } - - // JUnitDoclet begin javadoc_method unfreezeView() - /** - * Method testUnfreezeView is testing unfreezeView - * @see CH.ifa.draw.standard.NullDrawingView#unfreezeView() - */ - // JUnitDoclet end javadoc_method unfreezeView() - public void testUnfreezeView() throws Exception { - // JUnitDoclet begin method unfreezeView - // JUnitDoclet end method unfreezeView - } - - // JUnitDoclet begin javadoc_method addFigureSelectionListener() - /** - * Method testAddFigureSelectionListener is testing addFigureSelectionListener - * @see CH.ifa.draw.standard.NullDrawingView#addFigureSelectionListener(CH.ifa.draw.framework.FigureSelectionListener) - */ - // JUnitDoclet end javadoc_method addFigureSelectionListener() - public void testAddFigureSelectionListener() throws Exception { - // JUnitDoclet begin method addFigureSelectionListener - // JUnitDoclet end method addFigureSelectionListener - } - - // JUnitDoclet begin javadoc_method removeFigureSelectionListener() - /** - * Method testRemoveFigureSelectionListener is testing removeFigureSelectionListener - * @see CH.ifa.draw.standard.NullDrawingView#removeFigureSelectionListener(CH.ifa.draw.framework.FigureSelectionListener) - */ - // JUnitDoclet end javadoc_method removeFigureSelectionListener() - public void testRemoveFigureSelectionListener() throws Exception { - // JUnitDoclet begin method removeFigureSelectionListener - // JUnitDoclet end method removeFigureSelectionListener - } - - // JUnitDoclet begin javadoc_method getConnectionFigures() - /** - * Method testGetConnectionFigures is testing getConnectionFigures - * @see CH.ifa.draw.standard.NullDrawingView#getConnectionFigures(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method getConnectionFigures() - public void testGetConnectionFigures() throws Exception { - // JUnitDoclet begin method getConnectionFigures - // JUnitDoclet end method getConnectionFigures - } - - // JUnitDoclet begin javadoc_method insertFigures() - /** - * Method testInsertFigures is testing insertFigures - * @see CH.ifa.draw.standard.NullDrawingView#insertFigures(CH.ifa.draw.framework.FigureEnumeration, int, int, boolean) - */ - // JUnitDoclet end javadoc_method insertFigures() - public void testInsertFigures() throws Exception { - // JUnitDoclet begin method insertFigures - // JUnitDoclet end method insertFigures - } - - // JUnitDoclet begin javadoc_method drawingInvalidated() - /** - * Method testDrawingInvalidated is testing drawingInvalidated - * @see CH.ifa.draw.standard.NullDrawingView#drawingInvalidated(CH.ifa.draw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingInvalidated() - public void testDrawingInvalidated() throws Exception { - // JUnitDoclet begin method drawingInvalidated - // JUnitDoclet end method drawingInvalidated - } - - // JUnitDoclet begin javadoc_method drawingRequestUpdate() - /** - * Method testDrawingRequestUpdate is testing drawingRequestUpdate - * @see CH.ifa.draw.standard.NullDrawingView#drawingRequestUpdate(CH.ifa.draw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingRequestUpdate() - public void testDrawingRequestUpdate() throws Exception { - // JUnitDoclet begin method drawingRequestUpdate - // JUnitDoclet end method drawingRequestUpdate - } - - // JUnitDoclet begin javadoc_method drawingTitleChanged() - /** - * Method testDrawingTitleChanged is testing drawingTitleChanged - * @see CH.ifa.draw.standard.NullDrawingView#drawingTitleChanged(CH.ifa.draw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingTitleChanged() - public void testDrawingTitleChanged() throws Exception { - // JUnitDoclet begin method drawingTitleChanged - // JUnitDoclet end method drawingTitleChanged - } - - // JUnitDoclet begin javadoc_method isInteractive() - /** - * Method testIsInteractive is testing isInteractive - * @see CH.ifa.draw.standard.NullDrawingView#isInteractive() - */ - // JUnitDoclet end javadoc_method isInteractive() - public void testIsInteractive() throws Exception { - // JUnitDoclet begin method isInteractive - // JUnitDoclet end method isInteractive - } - - // JUnitDoclet begin javadoc_method getManagedDrawingView() - /** - * Method testGetManagedDrawingView is testing getManagedDrawingView - * @see CH.ifa.draw.standard.NullDrawingView#getManagedDrawingView(CH.ifa.draw.framework.DrawingEditor) - */ - // JUnitDoclet end javadoc_method getManagedDrawingView() - public void testGetManagedDrawingView() throws Exception { - // JUnitDoclet begin method getManagedDrawingView - // JUnitDoclet end method getManagedDrawingView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/NullHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/NullHandleTest.java deleted file mode 100644 index 99d104fd7..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/NullHandleTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.NullHandle; -import CH.ifa.draw.standard.RelativeLocator; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullHandleTest is generated by - * JUnitDoclet to hold the tests for NullHandle. - * @see CH.ifa.draw.standard.NullHandle - */ -// JUnitDoclet end javadoc_class -public class NullHandleTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullHandle nullhandle; - // JUnitDoclet end class - - /** - * Constructor NullHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullHandleTest(String name) { - // JUnitDoclet begin method NullHandleTest - super(name); - // JUnitDoclet end method NullHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.NullHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.NullHandle(new RectangleFigure(new Point(5, 5), new Point(100, 100)), new RelativeLocator()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nullhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nullhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.standard.NullHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/NullToolTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/NullToolTest.java deleted file mode 100644 index 04cbfd9b3..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/NullToolTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.NullTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullToolTest is generated by - * JUnitDoclet to hold the tests for NullTool. - * @see CH.ifa.draw.standard.NullTool - */ -// JUnitDoclet end javadoc_class -public class NullToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullTool nulltool; - // JUnitDoclet end class - - /** - * Constructor NullToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullToolTest(String name) { - // JUnitDoclet begin method NullToolTest - super(name); - // JUnitDoclet end method NullToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.NullTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.NullTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nulltool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nulltool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.standard.NullTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.standard.NullTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/OffsetLocatorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/OffsetLocatorTest.java deleted file mode 100644 index a3a4eca2d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/OffsetLocatorTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.OffsetLocator; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase OffsetLocatorTest is generated by - * JUnitDoclet to hold the tests for OffsetLocator. - * @see CH.ifa.draw.standard.OffsetLocator - */ -// JUnitDoclet end javadoc_class -public class OffsetLocatorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private OffsetLocator offsetlocator; - // JUnitDoclet end class - - /** - * Constructor OffsetLocatorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public OffsetLocatorTest(String name) { - // JUnitDoclet begin method OffsetLocatorTest - super(name); - // JUnitDoclet end method OffsetLocatorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.OffsetLocator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.OffsetLocator(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - offsetlocator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - offsetlocator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see CH.ifa.draw.standard.OffsetLocator#locate(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method moveBy() - /** - * Method testMoveBy is testing moveBy - * @see CH.ifa.draw.standard.OffsetLocator#moveBy(int, int) - */ - // JUnitDoclet end javadoc_method moveBy() - public void testMoveBy() throws Exception { - // JUnitDoclet begin method moveBy - // JUnitDoclet end method moveBy - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.standard.OffsetLocator#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.standard.OffsetLocator#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/PasteCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/PasteCommandTest.java deleted file mode 100644 index 96f12690a..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/PasteCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.PasteCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PasteCommandTest is generated by - * JUnitDoclet to hold the tests for PasteCommand. - * @see CH.ifa.draw.standard.PasteCommand - */ -// JUnitDoclet end javadoc_class -public class PasteCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PasteCommand pastecommand; - // JUnitDoclet end class - - /** - * Constructor PasteCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PasteCommandTest(String name) { - // JUnitDoclet begin method PasteCommandTest - super(name); - // JUnitDoclet end method PasteCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.PasteCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.PasteCommand("TestPaste", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pastecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pastecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.PasteCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see CH.ifa.draw.standard.PasteCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/PeripheralLocatorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/PeripheralLocatorTest.java deleted file mode 100644 index 0fe9ec0e1..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/PeripheralLocatorTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.PeripheralLocator; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PeripheralLocatorTest is generated by - * JUnitDoclet to hold the tests for PeripheralLocator. - * @see CH.ifa.draw.standard.PeripheralLocator - */ -// JUnitDoclet end javadoc_class -public class PeripheralLocatorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PeripheralLocator peripherallocator; - // JUnitDoclet end class - - /** - * Constructor PeripheralLocatorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PeripheralLocatorTest(String name) { - // JUnitDoclet begin method PeripheralLocatorTest - super(name); - // JUnitDoclet end method PeripheralLocatorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.PeripheralLocator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.PeripheralLocator(5, 10); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - peripherallocator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - peripherallocator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see CH.ifa.draw.standard.PeripheralLocator#locate(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/RelativeLocatorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/RelativeLocatorTest.java deleted file mode 100644 index 3b823d8fd..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/RelativeLocatorTest.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.RelativeLocator; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase RelativeLocatorTest is generated by - * JUnitDoclet to hold the tests for RelativeLocator. - * @see CH.ifa.draw.standard.RelativeLocator - */ -// JUnitDoclet end javadoc_class -public class RelativeLocatorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private RelativeLocator relativelocator; - // JUnitDoclet end class - - /** - * Constructor RelativeLocatorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public RelativeLocatorTest(String name) { - // JUnitDoclet begin method RelativeLocatorTest - super(name); - // JUnitDoclet end method RelativeLocatorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.RelativeLocator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.RelativeLocator(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - relativelocator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - relativelocator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method equals() - /** - * Method testEquals is testing equals - * @see CH.ifa.draw.standard.RelativeLocator#equals(java.lang.Object) - */ - // JUnitDoclet end javadoc_method equals() - public void testEquals() throws Exception { - // JUnitDoclet begin method equals - // JUnitDoclet end method equals - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see CH.ifa.draw.standard.RelativeLocator#locate(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see CH.ifa.draw.standard.RelativeLocator#write(CH.ifa.draw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see CH.ifa.draw.standard.RelativeLocator#read(CH.ifa.draw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method east() - /** - * Method testEast is testing east - * @see CH.ifa.draw.standard.RelativeLocator#east() - */ - // JUnitDoclet end javadoc_method east() - public void testEast() throws Exception { - // JUnitDoclet begin method east - // JUnitDoclet end method east - } - - // JUnitDoclet begin javadoc_method north() - /** - * Method testNorth is testing north - * @see CH.ifa.draw.standard.RelativeLocator#north() - */ - // JUnitDoclet end javadoc_method north() - public void testNorth() throws Exception { - // JUnitDoclet begin method north - // JUnitDoclet end method north - } - - // JUnitDoclet begin javadoc_method west() - /** - * Method testWest is testing west - * @see CH.ifa.draw.standard.RelativeLocator#west() - */ - // JUnitDoclet end javadoc_method west() - public void testWest() throws Exception { - // JUnitDoclet begin method west - // JUnitDoclet end method west - } - - // JUnitDoclet begin javadoc_method northEast() - /** - * Method testNorthEast is testing northEast - * @see CH.ifa.draw.standard.RelativeLocator#northEast() - */ - // JUnitDoclet end javadoc_method northEast() - public void testNorthEast() throws Exception { - // JUnitDoclet begin method northEast - // JUnitDoclet end method northEast - } - - // JUnitDoclet begin javadoc_method northWest() - /** - * Method testNorthWest is testing northWest - * @see CH.ifa.draw.standard.RelativeLocator#northWest() - */ - // JUnitDoclet end javadoc_method northWest() - public void testNorthWest() throws Exception { - // JUnitDoclet begin method northWest - // JUnitDoclet end method northWest - } - - // JUnitDoclet begin javadoc_method south() - /** - * Method testSouth is testing south - * @see CH.ifa.draw.standard.RelativeLocator#south() - */ - // JUnitDoclet end javadoc_method south() - public void testSouth() throws Exception { - // JUnitDoclet begin method south - // JUnitDoclet end method south - } - - // JUnitDoclet begin javadoc_method southEast() - /** - * Method testSouthEast is testing southEast - * @see CH.ifa.draw.standard.RelativeLocator#southEast() - */ - // JUnitDoclet end javadoc_method southEast() - public void testSouthEast() throws Exception { - // JUnitDoclet begin method southEast - // JUnitDoclet end method southEast - } - - // JUnitDoclet begin javadoc_method southWest() - /** - * Method testSouthWest is testing southWest - * @see CH.ifa.draw.standard.RelativeLocator#southWest() - */ - // JUnitDoclet end javadoc_method southWest() - public void testSouthWest() throws Exception { - // JUnitDoclet begin method southWest - // JUnitDoclet end method southWest - } - - // JUnitDoclet begin javadoc_method center() - /** - * Method testCenter is testing center - * @see CH.ifa.draw.standard.RelativeLocator#center() - */ - // JUnitDoclet end javadoc_method center() - public void testCenter() throws Exception { - // JUnitDoclet begin method center - // JUnitDoclet end method center - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/ReverseFigureEnumeratorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/ReverseFigureEnumeratorTest.java deleted file mode 100644 index 35dbdc58d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/ReverseFigureEnumeratorTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.PolyLineFigure; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.ReverseFigureEnumerator; -import CH.ifa.draw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ReverseFigureEnumeratorTest is generated by - * JUnitDoclet to hold the tests for ReverseFigureEnumerator. - * @see CH.ifa.draw.standard.ReverseFigureEnumerator - */ -// JUnitDoclet end javadoc_class -public class ReverseFigureEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ReverseFigureEnumerator reversefigureenumerator; - // JUnitDoclet end class - - /** - * Constructor ReverseFigureEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ReverseFigureEnumeratorTest(String name) { - // JUnitDoclet begin method ReverseFigureEnumeratorTest - super(name); - // JUnitDoclet end method ReverseFigureEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.ReverseFigureEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l = CollectionsFactory.current().createList(); - l.add(new RectangleFigure(new Point(10, 10), new Point(50, 50))); - l.add(new PolyLineFigure()); - return new CH.ifa.draw.standard.ReverseFigureEnumerator(l); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - reversefigureenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - reversefigureenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNextFigure() - /** - * Method testHasNextFigure is testing hasNextFigure - * @see CH.ifa.draw.standard.ReverseFigureEnumerator#hasNextFigure() - */ - // JUnitDoclet end javadoc_method hasNextFigure() - public void testHasNextFigure() throws Exception { - // JUnitDoclet begin method hasNextFigure - // JUnitDoclet end method hasNextFigure - } - - // JUnitDoclet begin javadoc_method nextFigure() - /** - * Method testNextFigure is testing nextFigure - * @see CH.ifa.draw.standard.ReverseFigureEnumerator#nextFigure() - */ - // JUnitDoclet end javadoc_method nextFigure() - public void testNextFigure() throws Exception { - // JUnitDoclet begin method nextFigure - // JUnitDoclet end method nextFigure - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see CH.ifa.draw.standard.ReverseFigureEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/SelectAllCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/SelectAllCommandTest.java deleted file mode 100644 index b601eb566..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/SelectAllCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.SelectAllCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SelectAllCommandTest is generated by - * JUnitDoclet to hold the tests for SelectAllCommand. - * @see CH.ifa.draw.standard.SelectAllCommand - */ -// JUnitDoclet end javadoc_class -public class SelectAllCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SelectAllCommand selectallcommand; - // JUnitDoclet end class - - /** - * Constructor SelectAllCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SelectAllCommandTest(String name) { - // JUnitDoclet begin method SelectAllCommandTest - super(name); - // JUnitDoclet end method SelectAllCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.SelectAllCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.SelectAllCommand("TestSelectAll", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - selectallcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - selectallcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.SelectAllCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see CH.ifa.draw.standard.SelectAllCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/SelectAreaTrackerTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/SelectAreaTrackerTest.java deleted file mode 100644 index 412bef654..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/SelectAreaTrackerTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.SelectAreaTracker; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SelectAreaTrackerTest is generated by - * JUnitDoclet to hold the tests for SelectAreaTracker. - * @see CH.ifa.draw.standard.SelectAreaTracker - */ -// JUnitDoclet end javadoc_class -public class SelectAreaTrackerTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SelectAreaTracker selectareatracker; - // JUnitDoclet end class - - /** - * Constructor SelectAreaTrackerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SelectAreaTrackerTest(String name) { - // JUnitDoclet begin method SelectAreaTrackerTest - super(name); - // JUnitDoclet end method SelectAreaTrackerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.SelectAreaTracker createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.SelectAreaTracker(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - selectareatracker = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - selectareatracker = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.standard.SelectAreaTracker#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.standard.SelectAreaTracker#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.standard.SelectAreaTracker#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/SelectionToolTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/SelectionToolTest.java deleted file mode 100644 index cbd639694..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/SelectionToolTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.SelectionTool; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SelectionToolTest is generated by - * JUnitDoclet to hold the tests for SelectionTool. - * @see CH.ifa.draw.standard.SelectionTool - */ -// JUnitDoclet end javadoc_class -public class SelectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SelectionTool selectiontool; - // JUnitDoclet end class - - /** - * Constructor SelectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SelectionToolTest(String name) { - // JUnitDoclet begin method SelectionToolTest - super(name); - // JUnitDoclet end method SelectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.SelectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.SelectionTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - selectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - selectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.standard.SelectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see CH.ifa.draw.standard.SelectionTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.standard.SelectionTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.standard.SelectionTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/SendToBackCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/SendToBackCommandTest.java deleted file mode 100644 index b871b15fb..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/SendToBackCommandTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.SendToBackCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SendToBackCommandTest is generated by - * JUnitDoclet to hold the tests for SendToBackCommand. - * @see CH.ifa.draw.standard.SendToBackCommand - */ -// JUnitDoclet end javadoc_class -public class SendToBackCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SendToBackCommand sendtobackcommand; - // JUnitDoclet end class - - /** - * Constructor SendToBackCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SendToBackCommandTest(String name) { - // JUnitDoclet begin method SendToBackCommandTest - super(name); - // JUnitDoclet end method SendToBackCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.SendToBackCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.SendToBackCommand("TestSendToBack", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - sendtobackcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - sendtobackcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.SendToBackCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/SimpleUpdateStrategyTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/SimpleUpdateStrategyTest.java deleted file mode 100644 index f1a3a6e5e..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/SimpleUpdateStrategyTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.SimpleUpdateStrategy; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SimpleUpdateStrategyTest is generated by - * JUnitDoclet to hold the tests for SimpleUpdateStrategy. - * @see CH.ifa.draw.standard.SimpleUpdateStrategy - */ -// JUnitDoclet end javadoc_class -public class SimpleUpdateStrategyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SimpleUpdateStrategy simpleupdatestrategy; - // JUnitDoclet end class - - /** - * Constructor SimpleUpdateStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SimpleUpdateStrategyTest(String name) { - // JUnitDoclet begin method SimpleUpdateStrategyTest - super(name); - // JUnitDoclet end method SimpleUpdateStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.SimpleUpdateStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.SimpleUpdateStrategy(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - simpleupdatestrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - simpleupdatestrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.standard.SimpleUpdateStrategy#draw(java.awt.Graphics, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/SingleFigureEnumeratorTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/SingleFigureEnumeratorTest.java deleted file mode 100644 index c6ce4ef83..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/SingleFigureEnumeratorTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.SingleFigureEnumerator; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SingleFigureEnumeratorTest is generated by - * JUnitDoclet to hold the tests for SingleFigureEnumerator. - * @see CH.ifa.draw.standard.SingleFigureEnumerator - */ -// JUnitDoclet end javadoc_class -public class SingleFigureEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SingleFigureEnumerator singlefigureenumerator; - // JUnitDoclet end class - - /** - * Constructor SingleFigureEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SingleFigureEnumeratorTest(String name) { - // JUnitDoclet begin method SingleFigureEnumeratorTest - super(name); - // JUnitDoclet end method SingleFigureEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.SingleFigureEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.SingleFigureEnumerator(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - singlefigureenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - singlefigureenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNextFigure() - /** - * Method testHasNextFigure is testing hasNextFigure - * @see CH.ifa.draw.standard.SingleFigureEnumerator#hasNextFigure() - */ - // JUnitDoclet end javadoc_method hasNextFigure() - public void testHasNextFigure() throws Exception { - // JUnitDoclet begin method hasNextFigure - // JUnitDoclet end method hasNextFigure - } - - // JUnitDoclet begin javadoc_method nextFigure() - /** - * Method testNextFigure is testing nextFigure - * @see CH.ifa.draw.standard.SingleFigureEnumerator#nextFigure() - */ - // JUnitDoclet end javadoc_method nextFigure() - public void testNextFigure() throws Exception { - // JUnitDoclet begin method nextFigure - // JUnitDoclet end method nextFigure - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see CH.ifa.draw.standard.SingleFigureEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/StandardDrawingTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/StandardDrawingTest.java deleted file mode 100644 index 26b9e1407..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/StandardDrawingTest.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import CH.ifa.draw.standard.StandardDrawing; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardDrawingTest is generated by - * JUnitDoclet to hold the tests for StandardDrawing. - * @see CH.ifa.draw.standard.StandardDrawing - */ -// JUnitDoclet end javadoc_class -public class StandardDrawingTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardDrawing standarddrawing; - // JUnitDoclet end class - - /** - * Constructor StandardDrawingTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardDrawingTest(String name) { - // JUnitDoclet begin method StandardDrawingTest - super(name); - // JUnitDoclet end method StandardDrawingTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.StandardDrawing createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.StandardDrawing(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standarddrawing = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standarddrawing = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addDrawingChangeListener() - /** - * Method testAddDrawingChangeListener is testing addDrawingChangeListener - * @see CH.ifa.draw.standard.StandardDrawing#addDrawingChangeListener(CH.ifa.draw.framework.DrawingChangeListener) - */ - // JUnitDoclet end javadoc_method addDrawingChangeListener() - public void testAddDrawingChangeListener() throws Exception { - // JUnitDoclet begin method addDrawingChangeListener - // JUnitDoclet end method addDrawingChangeListener - } - - // JUnitDoclet begin javadoc_method removeDrawingChangeListener() - /** - * Method testRemoveDrawingChangeListener is testing removeDrawingChangeListener - * @see CH.ifa.draw.standard.StandardDrawing#removeDrawingChangeListener(CH.ifa.draw.framework.DrawingChangeListener) - */ - // JUnitDoclet end javadoc_method removeDrawingChangeListener() - public void testRemoveDrawingChangeListener() throws Exception { - // JUnitDoclet begin method removeDrawingChangeListener - // JUnitDoclet end method removeDrawingChangeListener - } - - // JUnitDoclet begin javadoc_method drawingChangeListeners() - /** - * Method testDrawingChangeListeners is testing drawingChangeListeners - * @see CH.ifa.draw.standard.StandardDrawing#drawingChangeListeners() - */ - // JUnitDoclet end javadoc_method drawingChangeListeners() - public void testDrawingChangeListeners() throws Exception { - // JUnitDoclet begin method drawingChangeListeners - // JUnitDoclet end method drawingChangeListeners - } - - // JUnitDoclet begin javadoc_method orphan() - /** - * Method testOrphan is testing orphan - * @see CH.ifa.draw.standard.StandardDrawing#orphan(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method orphan() - public void testOrphan() throws Exception { - // JUnitDoclet begin method orphan - // JUnitDoclet end method orphan - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.standard.StandardDrawing#add(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see CH.ifa.draw.standard.StandardDrawing#figureInvalidated(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method fireDrawingTitleChanged() - /** - * Method testFireDrawingTitleChanged is testing fireDrawingTitleChanged - * @see CH.ifa.draw.standard.StandardDrawing#fireDrawingTitleChanged() - */ - // JUnitDoclet end javadoc_method fireDrawingTitleChanged() - public void testFireDrawingTitleChanged() throws Exception { - // JUnitDoclet begin method fireDrawingTitleChanged - // JUnitDoclet end method fireDrawingTitleChanged - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see CH.ifa.draw.standard.StandardDrawing#figureRequestUpdate(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see CH.ifa.draw.standard.StandardDrawing#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.standard.StandardDrawing#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see CH.ifa.draw.standard.StandardDrawing#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method lock() - /** - * Method testLock is testing lock - * @see CH.ifa.draw.standard.StandardDrawing#lock() - */ - // JUnitDoclet end javadoc_method lock() - public void testLock() throws Exception { - // JUnitDoclet begin method lock - // JUnitDoclet end method lock - } - - // JUnitDoclet begin javadoc_method unlock() - /** - * Method testUnlock is testing unlock - * @see CH.ifa.draw.standard.StandardDrawing#unlock() - */ - // JUnitDoclet end javadoc_method unlock() - public void testUnlock() throws Exception { - // JUnitDoclet begin method unlock - // JUnitDoclet end method unlock - } - - // JUnitDoclet begin javadoc_method setTitle() - /** - * Method testSetGetTitle is testing setTitle - * and getTitle together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.standard.StandardDrawing#setTitle(java.lang.String) - * @see CH.ifa.draw.standard.StandardDrawing#getTitle() - */ - // JUnitDoclet end javadoc_method setTitle() - public void testSetGetTitle() throws Exception { - // JUnitDoclet begin method setTitle getTitle - java.lang.String[] tests = { "", " ", "a", "A", "�", "�", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - standarddrawing.setTitle(tests[i]); - assertEquals(tests[i], standarddrawing.getTitle()); - } - // JUnitDoclet end method setTitle getTitle - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/StandardDrawingViewTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/StandardDrawingViewTest.java deleted file mode 100644 index fdb54df0f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/StandardDrawingViewTest.java +++ /dev/null @@ -1,728 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.*; -import CH.ifa.draw.standard.GridConstrainer; -import CH.ifa.draw.standard.SimpleUpdateStrategy; -import CH.ifa.draw.standard.StandardDrawingView; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardDrawingViewTest is generated by - * JUnitDoclet to hold the tests for StandardDrawingView. - * @see CH.ifa.draw.standard.StandardDrawingView - */ -// JUnitDoclet end javadoc_class -public class StandardDrawingViewTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardDrawingView standarddrawingview; - // JUnitDoclet end class - - /** - * Constructor StandardDrawingViewTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardDrawingViewTest(String name) { - // JUnitDoclet begin method StandardDrawingViewTest - super(name); - // JUnitDoclet end method StandardDrawingViewTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.StandardDrawingView createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return (StandardDrawingView)getDrawingEditor().view(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - getDrawingEditor().newWindow(new StandardDrawing()); - standarddrawingview = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standarddrawingview = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setEditor() - /** - * Method testSetEditor is testing setEditor - * @see CH.ifa.draw.standard.StandardDrawingView#setEditor(CH.ifa.draw.framework.DrawingEditor) - */ - // JUnitDoclet end javadoc_method setEditor() - public void testSetEditor() throws Exception { - // JUnitDoclet begin method setEditor - // JUnitDoclet end method setEditor - } - - // JUnitDoclet begin javadoc_method tool() - /** - * Method testTool is testing tool - * @see CH.ifa.draw.standard.StandardDrawingView#tool() - */ - // JUnitDoclet end javadoc_method tool() - public void testTool() throws Exception { - // JUnitDoclet begin method tool - // JUnitDoclet end method tool - } - - // JUnitDoclet begin javadoc_method drawing() - /** - * Method testDrawing is testing drawing - * @see CH.ifa.draw.standard.StandardDrawingView#drawing() - */ - // JUnitDoclet end javadoc_method drawing() - public void testDrawing() throws Exception { - // JUnitDoclet begin method drawing - // JUnitDoclet end method drawing - } - - // JUnitDoclet begin javadoc_method setDrawing() - /** - * Method testSetDrawing is testing setDrawing - * @see CH.ifa.draw.standard.StandardDrawingView#setDrawing(CH.ifa.draw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method setDrawing() - public void testSetDrawing() throws Exception { - // JUnitDoclet begin method setDrawing - // JUnitDoclet end method setDrawing - } - - // JUnitDoclet begin javadoc_method editor() - /** - * Method testEditor is testing editor - * @see CH.ifa.draw.standard.StandardDrawingView#editor() - */ - // JUnitDoclet end javadoc_method editor() - public void testEditor() throws Exception { - // JUnitDoclet begin method editor - // JUnitDoclet end method editor - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.standard.StandardDrawingView#add(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.standard.StandardDrawingView#remove(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method addAll() - /** - * Method testAddAll is testing addAll - * @see CH.ifa.draw.standard.StandardDrawingView#addAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addAll() - public void testAddAll() throws Exception { - // JUnitDoclet begin method addAll - // JUnitDoclet end method addAll - } - - // JUnitDoclet begin javadoc_method figureExists() - /** - * Method testFigureExists is testing figureExists - * @see CH.ifa.draw.standard.StandardDrawingView#figureExists(CH.ifa.draw.framework.Figure, CH.ifa.draw.framework.FigureEnumeration) - */ - // JUnitDoclet end javadoc_method figureExists() - public void testFigureExists() throws Exception { - // JUnitDoclet begin method figureExists - // JUnitDoclet end method figureExists - } - - // JUnitDoclet begin javadoc_method insertFigures() - /** - * Method testInsertFigures is testing insertFigures - * @see CH.ifa.draw.standard.StandardDrawingView#insertFigures(CH.ifa.draw.framework.FigureEnumeration, int, int, boolean) - */ - // JUnitDoclet end javadoc_method insertFigures() - public void testInsertFigures() throws Exception { - // JUnitDoclet begin method insertFigures - // JUnitDoclet end method insertFigures - } - - // JUnitDoclet begin javadoc_method getConnectionFigures() - /** - * Method testGetConnectionFigures is testing getConnectionFigures - * @see CH.ifa.draw.standard.StandardDrawingView#getConnectionFigures(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method getConnectionFigures() - public void testGetConnectionFigures() throws Exception { - // JUnitDoclet begin method getConnectionFigures - // JUnitDoclet end method getConnectionFigures - } - - // JUnitDoclet begin javadoc_method getMinimumSize() - /** - * Method testGetMinimumSize is testing getMinimumSize - * @see CH.ifa.draw.standard.StandardDrawingView#getMinimumSize() - */ - // JUnitDoclet end javadoc_method getMinimumSize() - public void testGetMinimumSize() throws Exception { - // JUnitDoclet begin method getMinimumSize - // JUnitDoclet end method getMinimumSize - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see CH.ifa.draw.standard.StandardDrawingView#getPreferredSize() - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method setDisplayUpdate() - /** - * Method testSetGetDisplayUpdate is testing setDisplayUpdate - * and getDisplayUpdate together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.standard.StandardDrawingView#setDisplayUpdate(CH.ifa.draw.framework.Painter) - * @see CH.ifa.draw.standard.StandardDrawingView#getDisplayUpdate() - */ - // JUnitDoclet end javadoc_method setDisplayUpdate() - public void testSetGetDisplayUpdate() throws Exception { - // JUnitDoclet begin method setDisplayUpdate getDisplayUpdate - CH.ifa.draw.framework.Painter[] tests = { new SimpleUpdateStrategy(), null }; - - for (int i = 0; i < tests.length; i++) { - standarddrawingview.setDisplayUpdate(tests[i]); - assertEquals(tests[i], standarddrawingview.getDisplayUpdate()); - } - // JUnitDoclet end method setDisplayUpdate getDisplayUpdate - } - - // JUnitDoclet begin javadoc_method selection() - /** - * Method testSelection is testing selection - * @see CH.ifa.draw.standard.StandardDrawingView#selection() - */ - // JUnitDoclet end javadoc_method selection() - public void testSelection() throws Exception { - // JUnitDoclet begin method selection - // JUnitDoclet end method selection - } - - // JUnitDoclet begin javadoc_method selectionZOrdered() - /** - * Method testSelectionZOrdered is testing selectionZOrdered - * @see CH.ifa.draw.standard.StandardDrawingView#selectionZOrdered() - */ - // JUnitDoclet end javadoc_method selectionZOrdered() - public void testSelectionZOrdered() throws Exception { - // JUnitDoclet begin method selectionZOrdered - // JUnitDoclet end method selectionZOrdered - } - - // JUnitDoclet begin javadoc_method selectionCount() - /** - * Method testSelectionCount is testing selectionCount - * @see CH.ifa.draw.standard.StandardDrawingView#selectionCount() - */ - // JUnitDoclet end javadoc_method selectionCount() - public void testSelectionCount() throws Exception { - // JUnitDoclet begin method selectionCount - // JUnitDoclet end method selectionCount - } - - // JUnitDoclet begin javadoc_method isFigureSelected() - /** - * Method testIsFigureSelected is testing isFigureSelected - * @see CH.ifa.draw.standard.StandardDrawingView#isFigureSelected(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method isFigureSelected() - public void testIsFigureSelected() throws Exception { - // JUnitDoclet begin method isFigureSelected - // JUnitDoclet end method isFigureSelected - } - - // JUnitDoclet begin javadoc_method addToSelection() - /** - * Method testAddToSelection is testing addToSelection - * @see CH.ifa.draw.standard.StandardDrawingView#addToSelection(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method addToSelection() - public void testAddToSelection() throws Exception { - // JUnitDoclet begin method addToSelection - // JUnitDoclet end method addToSelection - } - - // JUnitDoclet begin javadoc_method addToSelectionAll() - /** - * Method testAddToSelectionAll is testing addToSelectionAll - * @see CH.ifa.draw.standard.StandardDrawingView#addToSelectionAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addToSelectionAll() - public void testAddToSelectionAll() throws Exception { - // JUnitDoclet begin method addToSelectionAll - // JUnitDoclet end method addToSelectionAll - } - - // JUnitDoclet begin javadoc_method removeFromSelection() - /** - * Method testRemoveFromSelection is testing removeFromSelection - * @see CH.ifa.draw.standard.StandardDrawingView#removeFromSelection(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method removeFromSelection() - public void testRemoveFromSelection() throws Exception { - // JUnitDoclet begin method removeFromSelection - // JUnitDoclet end method removeFromSelection - } - - // JUnitDoclet begin javadoc_method toggleSelection() - /** - * Method testToggleSelection is testing toggleSelection - * @see CH.ifa.draw.standard.StandardDrawingView#toggleSelection(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method toggleSelection() - public void testToggleSelection() throws Exception { - // JUnitDoclet begin method toggleSelection - // JUnitDoclet end method toggleSelection - } - - // JUnitDoclet begin javadoc_method clearSelection() - /** - * Method testClearSelection is testing clearSelection - * @see CH.ifa.draw.standard.StandardDrawingView#clearSelection() - */ - // JUnitDoclet end javadoc_method clearSelection() - public void testClearSelection() throws Exception { - // JUnitDoclet begin method clearSelection - // JUnitDoclet end method clearSelection - } - - // JUnitDoclet begin javadoc_method getFigureSelection() - /** - * Method testGetFigureSelection is testing getFigureSelection - * @see CH.ifa.draw.standard.StandardDrawingView#getFigureSelection() - */ - // JUnitDoclet end javadoc_method getFigureSelection() - public void testGetFigureSelection() throws Exception { - // JUnitDoclet begin method getFigureSelection - // JUnitDoclet end method getFigureSelection - } - - // JUnitDoclet begin javadoc_method findHandle() - /** - * Method testFindHandle is testing findHandle - * @see CH.ifa.draw.standard.StandardDrawingView#findHandle(int, int) - */ - // JUnitDoclet end javadoc_method findHandle() - public void testFindHandle() throws Exception { - // JUnitDoclet begin method findHandle - // JUnitDoclet end method findHandle - } - - // JUnitDoclet begin javadoc_method lastClick() - /** - * Method testLastClick is testing lastClick - * @see CH.ifa.draw.standard.StandardDrawingView#lastClick() - */ - // JUnitDoclet end javadoc_method lastClick() - public void testLastClick() throws Exception { - // JUnitDoclet begin method lastClick - // JUnitDoclet end method lastClick - } - - // JUnitDoclet begin javadoc_method setConstrainer() - /** - * Method testSetGetConstrainer is testing setConstrainer - * and getConstrainer together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.standard.StandardDrawingView#setConstrainer(CH.ifa.draw.framework.PointConstrainer) - * @see CH.ifa.draw.standard.StandardDrawingView#getConstrainer() - */ - // JUnitDoclet end javadoc_method setConstrainer() - public void testSetGetConstrainer() throws Exception { - // JUnitDoclet begin method setConstrainer getConstrainer - CH.ifa.draw.framework.PointConstrainer[] tests = { new GridConstrainer(5, 5), null }; - - for (int i = 0; i < tests.length; i++) { - standarddrawingview.setConstrainer(tests[i]); - assertEquals(tests[i], standarddrawingview.getConstrainer()); - } - // JUnitDoclet end method setConstrainer getConstrainer - } - - // JUnitDoclet begin javadoc_method checkDamage() - /** - * Method testCheckDamage is testing checkDamage - * @see CH.ifa.draw.standard.StandardDrawingView#checkDamage() - */ - // JUnitDoclet end javadoc_method checkDamage() - public void testCheckDamage() throws Exception { - // JUnitDoclet begin method checkDamage - // JUnitDoclet end method checkDamage - } - - // JUnitDoclet begin javadoc_method repairDamage() - /** - * Method testRepairDamage is testing repairDamage - * @see CH.ifa.draw.standard.StandardDrawingView#repairDamage() - */ - // JUnitDoclet end javadoc_method repairDamage() - public void testRepairDamage() throws Exception { - // JUnitDoclet begin method repairDamage - // JUnitDoclet end method repairDamage - } - - // JUnitDoclet begin javadoc_method drawingInvalidated() - /** - * Method testDrawingInvalidated is testing drawingInvalidated - * @see CH.ifa.draw.standard.StandardDrawingView#drawingInvalidated(CH.ifa.draw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingInvalidated() - public void testDrawingInvalidated() throws Exception { - // JUnitDoclet begin method drawingInvalidated - // JUnitDoclet end method drawingInvalidated - } - - // JUnitDoclet begin javadoc_method drawingRequestUpdate() - /** - * Method testDrawingRequestUpdate is testing drawingRequestUpdate - * @see CH.ifa.draw.standard.StandardDrawingView#drawingRequestUpdate(CH.ifa.draw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingRequestUpdate() - public void testDrawingRequestUpdate() throws Exception { - // JUnitDoclet begin method drawingRequestUpdate - // JUnitDoclet end method drawingRequestUpdate - } - - // JUnitDoclet begin javadoc_method drawingTitleChanged() - /** - * Method testDrawingTitleChanged is testing drawingTitleChanged - * @see CH.ifa.draw.standard.StandardDrawingView#drawingTitleChanged(CH.ifa.draw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingTitleChanged() - public void testDrawingTitleChanged() throws Exception { - // JUnitDoclet begin method drawingTitleChanged - // JUnitDoclet end method drawingTitleChanged - } - - // JUnitDoclet begin javadoc_method drawAll() - /** - * Method testDrawAll is testing drawAll - * @see CH.ifa.draw.standard.StandardDrawingView#drawAll(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawAll() - public void testDrawAll() throws Exception { - // JUnitDoclet begin method drawAll - // JUnitDoclet end method drawAll - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.standard.StandardDrawingView#draw(java.awt.Graphics, CH.ifa.draw.framework.FigureEnumeration) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method drawHandles() - /** - * Method testDrawHandles is testing drawHandles - * @see CH.ifa.draw.standard.StandardDrawingView#drawHandles(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawHandles() - public void testDrawHandles() throws Exception { - // JUnitDoclet begin method drawHandles - // JUnitDoclet end method drawHandles - } - - // JUnitDoclet begin javadoc_method drawDrawing() - /** - * Method testDrawDrawing is testing drawDrawing - * @see CH.ifa.draw.standard.StandardDrawingView#drawDrawing(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawDrawing() - public void testDrawDrawing() throws Exception { - // JUnitDoclet begin method drawDrawing - // JUnitDoclet end method drawDrawing - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see CH.ifa.draw.standard.StandardDrawingView#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method addBackground() - /** - * Method testAddBackground is testing addBackground - * @see CH.ifa.draw.standard.StandardDrawingView#addBackground(CH.ifa.draw.framework.Painter) - */ - // JUnitDoclet end javadoc_method addBackground() - public void testAddBackground() throws Exception { - // JUnitDoclet begin method addBackground - // JUnitDoclet end method addBackground - } - - // JUnitDoclet begin javadoc_method removeBackground() - /** - * Method testRemoveBackground is testing removeBackground - * @see CH.ifa.draw.standard.StandardDrawingView#removeBackground(CH.ifa.draw.framework.Painter) - */ - // JUnitDoclet end javadoc_method removeBackground() - public void testRemoveBackground() throws Exception { - // JUnitDoclet begin method removeBackground - // JUnitDoclet end method removeBackground - } - - // JUnitDoclet begin javadoc_method removeForeground() - /** - * Method testRemoveForeground is testing removeForeground - * @see CH.ifa.draw.standard.StandardDrawingView#removeForeground(CH.ifa.draw.framework.Painter) - */ - // JUnitDoclet end javadoc_method removeForeground() - public void testRemoveForeground() throws Exception { - // JUnitDoclet begin method removeForeground - // JUnitDoclet end method removeForeground - } - - // JUnitDoclet begin javadoc_method addForeground() - /** - * Method testAddForeground is testing addForeground - * @see CH.ifa.draw.standard.StandardDrawingView#addForeground(CH.ifa.draw.framework.Painter) - */ - // JUnitDoclet end javadoc_method addForeground() - public void testAddForeground() throws Exception { - // JUnitDoclet begin method addForeground - // JUnitDoclet end method addForeground - } - - // JUnitDoclet begin javadoc_method freezeView() - /** - * Method testFreezeView is testing freezeView - * @see CH.ifa.draw.standard.StandardDrawingView#freezeView() - */ - // JUnitDoclet end javadoc_method freezeView() - public void testFreezeView() throws Exception { - // JUnitDoclet begin method freezeView - // JUnitDoclet end method freezeView - } - - // JUnitDoclet begin javadoc_method unfreezeView() - /** - * Method testUnfreezeView is testing unfreezeView - * @see CH.ifa.draw.standard.StandardDrawingView#unfreezeView() - */ - // JUnitDoclet end javadoc_method unfreezeView() - public void testUnfreezeView() throws Exception { - // JUnitDoclet begin method unfreezeView - // JUnitDoclet end method unfreezeView - } - - // JUnitDoclet begin javadoc_method isFocusTraversable() - /** - * Method testIsFocusTraversable is testing isFocusTraversable - * @see CH.ifa.draw.standard.StandardDrawingView#isFocusTraversable() - */ - // JUnitDoclet end javadoc_method isFocusTraversable() - public void testIsFocusTraversable() throws Exception { - // JUnitDoclet begin method isFocusTraversable - // JUnitDoclet end method isFocusTraversable - } - - // JUnitDoclet begin javadoc_method isInteractive() - /** - * Method testIsInteractive is testing isInteractive - * @see CH.ifa.draw.standard.StandardDrawingView#isInteractive() - */ - // JUnitDoclet end javadoc_method isInteractive() - public void testIsInteractive() throws Exception { - // JUnitDoclet begin method isInteractive - // JUnitDoclet end method isInteractive - } - - // JUnitDoclet begin javadoc_method keyTyped() - /** - * Method testKeyTyped is testing keyTyped - * @see CH.ifa.draw.standard.StandardDrawingView#keyTyped(java.awt.event.KeyEvent) - */ - // JUnitDoclet end javadoc_method keyTyped() - public void testKeyTyped() throws Exception { - // JUnitDoclet begin method keyTyped - // JUnitDoclet end method keyTyped - } - - // JUnitDoclet begin javadoc_method keyReleased() - /** - * Method testKeyReleased is testing keyReleased - * @see CH.ifa.draw.standard.StandardDrawingView#keyReleased(java.awt.event.KeyEvent) - */ - // JUnitDoclet end javadoc_method keyReleased() - public void testKeyReleased() throws Exception { - // JUnitDoclet begin method keyReleased - // JUnitDoclet end method keyReleased - } - - // JUnitDoclet begin javadoc_method addFigureSelectionListener() - /** - * Method testAddFigureSelectionListener is testing addFigureSelectionListener - * @see CH.ifa.draw.standard.StandardDrawingView#addFigureSelectionListener(CH.ifa.draw.framework.FigureSelectionListener) - */ - // JUnitDoclet end javadoc_method addFigureSelectionListener() - public void testAddFigureSelectionListener() throws Exception { - // JUnitDoclet begin method addFigureSelectionListener - // JUnitDoclet end method addFigureSelectionListener - } - - // JUnitDoclet begin javadoc_method removeFigureSelectionListener() - /** - * Method testRemoveFigureSelectionListener is testing removeFigureSelectionListener - * @see CH.ifa.draw.standard.StandardDrawingView#removeFigureSelectionListener(CH.ifa.draw.framework.FigureSelectionListener) - */ - // JUnitDoclet end javadoc_method removeFigureSelectionListener() - public void testRemoveFigureSelectionListener() throws Exception { - // JUnitDoclet begin method removeFigureSelectionListener - // JUnitDoclet end method removeFigureSelectionListener - } - - // JUnitDoclet begin javadoc_method getDefaultDNDActions() - /** - * Method testGetDefaultDNDActions is testing getDefaultDNDActions - * @see CH.ifa.draw.standard.StandardDrawingView#getDefaultDNDActions() - */ - // JUnitDoclet end javadoc_method getDefaultDNDActions() - public void testGetDefaultDNDActions() throws Exception { - // JUnitDoclet begin method getDefaultDNDActions - // JUnitDoclet end method getDefaultDNDActions - } - - // JUnitDoclet begin javadoc_method autoscroll() - /** - * Method testAutoscroll is testing autoscroll - * @see CH.ifa.draw.standard.StandardDrawingView#autoscroll(java.awt.Point) - */ - // JUnitDoclet end javadoc_method autoscroll() - public void testAutoscroll() throws Exception { - // JUnitDoclet begin method autoscroll - // JUnitDoclet end method autoscroll - } - - // JUnitDoclet begin javadoc_method getAutoscrollInsets() - /** - * Method testGetAutoscrollInsets is testing getAutoscrollInsets - * @see CH.ifa.draw.standard.StandardDrawingView#getAutoscrollInsets() - */ - // JUnitDoclet end javadoc_method getAutoscrollInsets() - public void testGetAutoscrollInsets() throws Exception { - // JUnitDoclet begin method getAutoscrollInsets - // JUnitDoclet end method getAutoscrollInsets - } - - // JUnitDoclet begin javadoc_method toString() - /** - * Method testToString is testing toString - * @see CH.ifa.draw.standard.StandardDrawingView#toString() - */ - // JUnitDoclet end javadoc_method toString() - public void testToString() throws Exception { - // JUnitDoclet begin method toString - // JUnitDoclet end method toString - } - - // JUnitDoclet begin javadoc_method setDragSourceActive() - /** - * Method testSetDragSourceActive is testing setDragSourceActive - * @see CH.ifa.draw.standard.StandardDrawingView#setDragSourceActive(boolean) - */ - // JUnitDoclet end javadoc_method setDragSourceActive() - public void testSetDragSourceActive() throws Exception { - // JUnitDoclet begin method setDragSourceActive - // JUnitDoclet end method setDragSourceActive - } - - // JUnitDoclet begin javadoc_method setDropTargetActive() - /** - * Method testSetDropTargetActive is testing setDropTargetActive - * @see CH.ifa.draw.standard.StandardDrawingView#setDropTargetActive(boolean) - */ - // JUnitDoclet end javadoc_method setDropTargetActive() - public void testSetDropTargetActive() throws Exception { - // JUnitDoclet begin method setDropTargetActive - // JUnitDoclet end method setDropTargetActive - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/StandardFigureSelectionTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/StandardFigureSelectionTest.java deleted file mode 100644 index 7153b9a37..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/StandardFigureSelectionTest.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.PolyLineFigure; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.standard.FigureEnumerator; -import CH.ifa.draw.standard.StandardFigureSelection; -import CH.ifa.draw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardFigureSelectionTest is generated by - * JUnitDoclet to hold the tests for StandardFigureSelection. - * @see CH.ifa.draw.standard.StandardFigureSelection - */ -// JUnitDoclet end javadoc_class -public class StandardFigureSelectionTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardFigureSelection standardfigureselection; - // JUnitDoclet end class - - /** - * Constructor StandardFigureSelectionTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardFigureSelectionTest(String name) { - // JUnitDoclet begin method StandardFigureSelectionTest - super(name); - // JUnitDoclet end method StandardFigureSelectionTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.StandardFigureSelection createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l = CollectionsFactory.current().createList(); - l.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - l.add(new PolyLineFigure(20, 20)); - FigureEnumeration fenum = new FigureEnumerator(l); - return new CH.ifa.draw.standard.StandardFigureSelection(fenum, l.size()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standardfigureselection = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standardfigureselection = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getType() - /** - * Method testGetType is testing getType - * @see CH.ifa.draw.standard.StandardFigureSelection#getType() - */ - // JUnitDoclet end javadoc_method getType() - public void testGetType() throws Exception { - // JUnitDoclet begin method getType - // JUnitDoclet end method getType - } - - // JUnitDoclet begin javadoc_method getData() - /** - * Method testGetData is testing getData - * @see CH.ifa.draw.standard.StandardFigureSelection#getData(java.lang.String) - */ - // JUnitDoclet end javadoc_method getData() - public void testGetData() throws Exception { - // JUnitDoclet begin method getData - // JUnitDoclet end method getData - } - - // JUnitDoclet begin javadoc_method duplicateFigures() - /** - * Method testDuplicateFigures is testing duplicateFigures - * @see CH.ifa.draw.standard.StandardFigureSelection#duplicateFigures(CH.ifa.draw.framework.FigureEnumeration, int) - */ - // JUnitDoclet end javadoc_method duplicateFigures() - public void testDuplicateFigures() throws Exception { - // JUnitDoclet begin method duplicateFigures - // JUnitDoclet end method duplicateFigures - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/StandardSuite.java b/JHotDraw/src/CH/ifa/draw/test/standard/StandardSuite.java deleted file mode 100644 index de9642151..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/StandardSuite.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite StandardSuite -*/ -// JUnitDoclet end javadoc_class -public class StandardSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.standard"); - - suite.addTestSuite(CH.ifa.draw.test.standard.PeripheralLocatorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.SingleFigureEnumeratorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.NullDrawingViewTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.NullToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.HandleAndEnumeratorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.InsertIntoDrawingVisitorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.DeleteFromDrawingVisitorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.SelectAllCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.FigureAndEnumeratorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.HandleEnumeratorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.StandardFigureSelectionTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.FastBufferedUpdateStrategyTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.ToolButtonTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.ToggleGridCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.StandardDrawingViewTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.StandardDrawingTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.SimpleUpdateStrategyTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.SelectionToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.SelectAreaTrackerTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.ReverseFigureEnumeratorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.RelativeLocatorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.PasteCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.OffsetLocatorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.NullHandleTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.LocatorConnectorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.HandleTrackerTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.GridConstrainerTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.FigureEnumeratorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.FigureChangeEventMulticasterTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.DuplicateCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.DragTrackerTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.DeleteCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.CutCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.CreationToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.CopyCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.ConnectionToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.ConnectionHandleTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.ChopBoxConnectorTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.ChangeConnectionStartHandleTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.ChangeConnectionEndHandleTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.ChangeAttributeCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.BufferedUpdateStrategyTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.SendToBackCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.BringToFrontCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.LocatorHandleTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.BoxHandleKitTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.AlignCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.standard.FigureChangeAdapterTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/ToggleGridCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/ToggleGridCommandTest.java deleted file mode 100644 index f688fcfa3..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/ToggleGridCommandTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.ToggleGridCommand; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ToggleGridCommandTest is generated by - * JUnitDoclet to hold the tests for ToggleGridCommand. - * @see CH.ifa.draw.standard.ToggleGridCommand - */ -// JUnitDoclet end javadoc_class -public class ToggleGridCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ToggleGridCommand togglegridcommand; - // JUnitDoclet end class - - /** - * Constructor ToggleGridCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ToggleGridCommandTest(String name) { - // JUnitDoclet begin method ToggleGridCommandTest - super(name); - // JUnitDoclet end method ToggleGridCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.ToggleGridCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.standard.ToggleGridCommand("TestToggle", getDrawingEditor(), new Point(5, 5)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - togglegridcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - togglegridcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.standard.ToggleGridCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/standard/ToolButtonTest.java b/JHotDraw/src/CH/ifa/draw/test/standard/ToolButtonTest.java deleted file mode 100644 index 7eacaf69e..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/standard/ToolButtonTest.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.standard; - -// JUnitDoclet begin import -import CH.ifa.draw.application.DrawApplication; -import CH.ifa.draw.framework.Tool; -import CH.ifa.draw.standard.SelectionTool; -import CH.ifa.draw.standard.ToolButton; -import CH.ifa.draw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ToolButtonTest is generated by - * JUnitDoclet to hold the tests for ToolButton. - * @see CH.ifa.draw.standard.ToolButton - */ -// JUnitDoclet end javadoc_class -public class ToolButtonTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ToolButton toolbutton; - // JUnitDoclet end class - - /** - * Constructor ToolButtonTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ToolButtonTest(String name) { - // JUnitDoclet begin method ToolButtonTest - super(name); - // JUnitDoclet end method ToolButtonTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.standard.ToolButton createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Tool tool = new SelectionTool(getDrawingEditor()); - return new CH.ifa.draw.standard.ToolButton(getDrawingEditor(), DrawApplication.IMAGES + "SEL", "Selection Tool", tool); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - toolbutton = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - toolbutton = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method tool() - /** - * Method testTool is testing tool - * @see CH.ifa.draw.standard.ToolButton#tool() - */ - // JUnitDoclet end javadoc_method tool() - public void testTool() throws Exception { - // JUnitDoclet begin method tool - // JUnitDoclet end method tool - } - - // JUnitDoclet begin javadoc_method name() - /** - * Method testName is testing name - * @see CH.ifa.draw.standard.ToolButton#name() - */ - // JUnitDoclet end javadoc_method name() - public void testName() throws Exception { - // JUnitDoclet begin method name - // JUnitDoclet end method name - } - - // JUnitDoclet begin javadoc_method attributeValue() - /** - * Method testAttributeValue is testing attributeValue - * @see CH.ifa.draw.standard.ToolButton#attributeValue() - */ - // JUnitDoclet end javadoc_method attributeValue() - public void testAttributeValue() throws Exception { - // JUnitDoclet begin method attributeValue - // JUnitDoclet end method attributeValue - } - - // JUnitDoclet begin javadoc_method getMinimumSize() - /** - * Method testGetMinimumSize is testing getMinimumSize - * @see CH.ifa.draw.standard.ToolButton#getMinimumSize() - */ - // JUnitDoclet end javadoc_method getMinimumSize() - public void testGetMinimumSize() throws Exception { - // JUnitDoclet begin method getMinimumSize - // JUnitDoclet end method getMinimumSize - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see CH.ifa.draw.standard.ToolButton#getPreferredSize() - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method getMaximumSize() - /** - * Method testGetMaximumSize is testing getMaximumSize - * @see CH.ifa.draw.standard.ToolButton#getMaximumSize() - */ - // JUnitDoclet end javadoc_method getMaximumSize() - public void testGetMaximumSize() throws Exception { - // JUnitDoclet begin method getMaximumSize - // JUnitDoclet end method getMaximumSize - } - - // JUnitDoclet begin javadoc_method paintSelected() - /** - * Method testPaintSelected is testing paintSelected - * @see CH.ifa.draw.standard.ToolButton#paintSelected(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method paintSelected() - public void testPaintSelected() throws Exception { - // JUnitDoclet begin method paintSelected - // JUnitDoclet end method paintSelected - } - - // JUnitDoclet begin javadoc_method paint() - /** - * Method testPaint is testing paint - * @see CH.ifa.draw.standard.ToolButton#paint(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method paint() - public void testPaint() throws Exception { - // JUnitDoclet begin method paint - // JUnitDoclet end method paint - } - - // JUnitDoclet begin javadoc_method toolUsable() - /** - * Method testToolUsable is testing toolUsable - * @see CH.ifa.draw.standard.ToolButton#toolUsable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolUsable() - public void testToolUsable() throws Exception { - // JUnitDoclet begin method toolUsable - // JUnitDoclet end method toolUsable - } - - // JUnitDoclet begin javadoc_method toolUnusable() - /** - * Method testToolUnusable is testing toolUnusable - * @see CH.ifa.draw.standard.ToolButton#toolUnusable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolUnusable() - public void testToolUnusable() throws Exception { - // JUnitDoclet begin method toolUnusable - // JUnitDoclet end method toolUnusable - } - - // JUnitDoclet begin javadoc_method toolActivated() - /** - * Method testToolActivated is testing toolActivated - * @see CH.ifa.draw.standard.ToolButton#toolActivated(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolActivated() - public void testToolActivated() throws Exception { - // JUnitDoclet begin method toolActivated - // JUnitDoclet end method toolActivated - } - - // JUnitDoclet begin javadoc_method toolDeactivated() - /** - * Method testToolDeactivated is testing toolDeactivated - * @see CH.ifa.draw.standard.ToolButton#toolDeactivated(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolDeactivated() - public void testToolDeactivated() throws Exception { - // JUnitDoclet begin method toolDeactivated - // JUnitDoclet end method toolDeactivated - } - - // JUnitDoclet begin javadoc_method toolEnabled() - /** - * Method testToolEnabled is testing toolEnabled - * @see CH.ifa.draw.standard.ToolButton#toolEnabled(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolEnabled() - public void testToolEnabled() throws Exception { - // JUnitDoclet begin method toolEnabled - // JUnitDoclet end method toolEnabled - } - - // JUnitDoclet begin javadoc_method toolDisabled() - /** - * Method testToolDisabled is testing toolDisabled - * @see CH.ifa.draw.standard.ToolButton#toolDisabled(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolDisabled() - public void testToolDisabled() throws Exception { - // JUnitDoclet begin method toolDisabled - // JUnitDoclet end method toolDisabled - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/util/AllTests.java deleted file mode 100644 index 5658b7ff1..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/AllTests.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.util"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(BoundsTest.class)); - suite.addTest(new TestSuite(ClipboardTest.class)); - suite.addTest(new TestSuite(ColorMapTest.class)); - suite.addTest(new TestSuite(CommandButtonTest.class)); - suite.addTest(new TestSuite(CommandChoiceTest.class)); - suite.addTest(new TestSuite(CommandMenuTest.class)); - suite.addTest(new TestSuite(FillerTest.class)); - suite.addTest(new TestSuite(FloatingTextFieldTest.class)); - suite.addTest(new TestSuite(GeomTest.class)); - suite.addTest(new TestSuite(GraphLayoutTest.class)); - suite.addTest(new TestSuite(IconkitTest.class)); - suite.addTest(new TestSuite(PaletteIconTest.class)); - suite.addTest(new TestSuite(PaletteLayoutTest.class)); - suite.addTest(new TestSuite(RedoCommandTest.class)); - suite.addTest(new TestSuite(ReverseListEnumeratorTest.class)); - suite.addTest(new TestSuite(SerializationStorageFormatTest.class)); - suite.addTest(new TestSuite(StandardStorageFormatTest.class)); - suite.addTest(new TestSuite(StandardVersionControlStrategyTest.class)); - suite.addTest(new TestSuite(StorableInputTest.class)); - suite.addTest(new TestSuite(StorableOutputTest.class)); - suite.addTest(new TestSuite(StorageFormatManagerTest.class)); - suite.addTest(new TestSuite(UndoCommandTest.class)); - suite.addTest(new TestSuite(UndoManagerTest.class)); - suite.addTest(new TestSuite(UndoRedoActivityTest.class)); - suite.addTest(new TestSuite(UndoableAdapterTest.class)); - suite.addTest(new TestSuite(UndoableCommandTest.class)); - suite.addTest(new TestSuite(UndoableHandleTest.class)); - suite.addTest(new TestSuite(UndoableToolTest.class)); - suite.addTest(new TestSuite(VersionManagementTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/BoundsTest.java b/JHotDraw/src/CH/ifa/draw/test/util/BoundsTest.java deleted file mode 100644 index af4aa819f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/BoundsTest.java +++ /dev/null @@ -1,484 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import java.awt.Dimension; -import java.awt.geom.Point2D; - -import CH.ifa.draw.util.Bounds; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BoundsTest is generated by - * JUnitDoclet to hold the tests for Bounds. - * @see CH.ifa.draw.util.Bounds - */ -// JUnitDoclet end javadoc_class -public class BoundsTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Bounds bounds; - // JUnitDoclet end class - - /** - * Constructor BoundsTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BoundsTest(String name) { - // JUnitDoclet begin method BoundsTest - super(name); - // JUnitDoclet end method BoundsTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.Bounds createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.Bounds(new Dimension(100, 100)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bounds = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bounds = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getLesserX() - /** - * Method testGetLesserX is testing getLesserX - * @see CH.ifa.draw.util.Bounds#getLesserX() - */ - // JUnitDoclet end javadoc_method getLesserX() - public void testGetLesserX() throws Exception { - // JUnitDoclet begin method getLesserX - // JUnitDoclet end method getLesserX - } - - // JUnitDoclet begin javadoc_method getGreaterX() - /** - * Method testGetGreaterX is testing getGreaterX - * @see CH.ifa.draw.util.Bounds#getGreaterX() - */ - // JUnitDoclet end javadoc_method getGreaterX() - public void testGetGreaterX() throws Exception { - // JUnitDoclet begin method getGreaterX - // JUnitDoclet end method getGreaterX - } - - // JUnitDoclet begin javadoc_method getLesserY() - /** - * Method testGetLesserY is testing getLesserY - * @see CH.ifa.draw.util.Bounds#getLesserY() - */ - // JUnitDoclet end javadoc_method getLesserY() - public void testGetLesserY() throws Exception { - // JUnitDoclet begin method getLesserY - // JUnitDoclet end method getLesserY - } - - // JUnitDoclet begin javadoc_method getGreaterY() - /** - * Method testGetGreaterY is testing getGreaterY - * @see CH.ifa.draw.util.Bounds#getGreaterY() - */ - // JUnitDoclet end javadoc_method getGreaterY() - public void testGetGreaterY() throws Exception { - // JUnitDoclet begin method getGreaterY - // JUnitDoclet end method getGreaterY - } - - // JUnitDoclet begin javadoc_method getWest() - /** - * Method testGetWest is testing getWest - * @see CH.ifa.draw.util.Bounds#getWest() - */ - // JUnitDoclet end javadoc_method getWest() - public void testGetWest() throws Exception { - // JUnitDoclet begin method getWest - // JUnitDoclet end method getWest - } - - // JUnitDoclet begin javadoc_method getEast() - /** - * Method testGetEast is testing getEast - * @see CH.ifa.draw.util.Bounds#getEast() - */ - // JUnitDoclet end javadoc_method getEast() - public void testGetEast() throws Exception { - // JUnitDoclet begin method getEast - // JUnitDoclet end method getEast - } - - // JUnitDoclet begin javadoc_method getSouth() - /** - * Method testGetSouth is testing getSouth - * @see CH.ifa.draw.util.Bounds#getSouth() - */ - // JUnitDoclet end javadoc_method getSouth() - public void testGetSouth() throws Exception { - // JUnitDoclet begin method getSouth - // JUnitDoclet end method getSouth - } - - // JUnitDoclet begin javadoc_method getNorth() - /** - * Method testGetNorth is testing getNorth - * @see CH.ifa.draw.util.Bounds#getNorth() - */ - // JUnitDoclet end javadoc_method getNorth() - public void testGetNorth() throws Exception { - // JUnitDoclet begin method getNorth - // JUnitDoclet end method getNorth - } - - // JUnitDoclet begin javadoc_method getWidth() - /** - * Method testGetWidth is testing getWidth - * @see CH.ifa.draw.util.Bounds#getWidth() - */ - // JUnitDoclet end javadoc_method getWidth() - public void testGetWidth() throws Exception { - // JUnitDoclet begin method getWidth - // JUnitDoclet end method getWidth - } - - // JUnitDoclet begin javadoc_method getHeight() - /** - * Method testGetHeight is testing getHeight - * @see CH.ifa.draw.util.Bounds#getHeight() - */ - // JUnitDoclet end javadoc_method getHeight() - public void testGetHeight() throws Exception { - // JUnitDoclet begin method getHeight - // JUnitDoclet end method getHeight - } - - // JUnitDoclet begin javadoc_method asRectangle2D() - /** - * Method testAsRectangle2D is testing asRectangle2D - * @see CH.ifa.draw.util.Bounds#asRectangle2D() - */ - // JUnitDoclet end javadoc_method asRectangle2D() - public void testAsRectangle2D() throws Exception { - // JUnitDoclet begin method asRectangle2D - // JUnitDoclet end method asRectangle2D - } - - // JUnitDoclet begin javadoc_method setCenter() - /** - * Method testSetGetCenter is testing setCenter - * and getCenter together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.Bounds#setCenter(java.awt.geom.Point2D) - * @see CH.ifa.draw.util.Bounds#getCenter() - */ - // JUnitDoclet end javadoc_method setCenter() - public void testSetGetCenter() throws Exception { - // JUnitDoclet begin method setCenter getCenter - Point2D[] tests = { new Point2D.Double(2.0, 3.0)}; - - for (int i = 0; i < tests.length; i++) { - bounds.setCenter(tests[i]); - assertEquals(tests[i], bounds.getCenter()); - } - // JUnitDoclet end method setCenter getCenter - } - - // JUnitDoclet begin method setNullCenter() - /** - * Test a null argument to setCenter. Expect an IllegalArgumentException - * - * @see CH.ifa.draw.util.Bounds#setCenter(java.awt.geom.Point2D) - */ - public void testSetNullCenter() throws Exception { - Point2D original = bounds.getCenter(); - - try { - bounds.setCenter(null); - fail("IllegalArgumentException expected"); - } - catch (IllegalArgumentException ok) { - assertEquals("setCenter(null) altered property value", original, bounds.getCenter()); - } - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method zoomBy() - /** - * Method testZoomBy is testing zoomBy - * @see CH.ifa.draw.util.Bounds#zoomBy(double) - */ - // JUnitDoclet end javadoc_method zoomBy() - public void testZoomBy() throws Exception { - // JUnitDoclet begin method zoomBy - // JUnitDoclet end method zoomBy - } - - // JUnitDoclet begin javadoc_method shiftBy() - /** - * Method testShiftBy is testing shiftBy - * @see CH.ifa.draw.util.Bounds#shiftBy(int, int) - */ - // JUnitDoclet end javadoc_method shiftBy() - public void testShiftBy() throws Exception { - // JUnitDoclet begin method shiftBy - // JUnitDoclet end method shiftBy - } - - // JUnitDoclet begin javadoc_method offset() - /** - * Method testOffset is testing offset - * @see CH.ifa.draw.util.Bounds#offset(double, double) - */ - // JUnitDoclet end javadoc_method offset() - public void testOffset() throws Exception { - // JUnitDoclet begin method offset - // JUnitDoclet end method offset - } - - // JUnitDoclet begin javadoc_method expandToRatio() - /** - * Method testExpandToRatio is testing expandToRatio - * @see CH.ifa.draw.util.Bounds#expandToRatio(double) - */ - // JUnitDoclet end javadoc_method expandToRatio() - public void testExpandToRatio() throws Exception { - // JUnitDoclet begin method expandToRatio - // JUnitDoclet end method expandToRatio - } - - // JUnitDoclet begin javadoc_method includeXCoordinate() - /** - * Method testIncludeXCoordinate is testing includeXCoordinate - * @see CH.ifa.draw.util.Bounds#includeXCoordinate(double) - */ - // JUnitDoclet end javadoc_method includeXCoordinate() - public void testIncludeXCoordinate() throws Exception { - // JUnitDoclet begin method includeXCoordinate - // JUnitDoclet end method includeXCoordinate - } - - // JUnitDoclet begin javadoc_method includeYCoordinate() - /** - * Method testIncludeYCoordinate is testing includeYCoordinate - * @see CH.ifa.draw.util.Bounds#includeYCoordinate(double) - */ - // JUnitDoclet end javadoc_method includeYCoordinate() - public void testIncludeYCoordinate() throws Exception { - // JUnitDoclet begin method includeYCoordinate - // JUnitDoclet end method includeYCoordinate - } - - // JUnitDoclet begin javadoc_method includePoint() - /** - * Method testIncludePoint is testing includePoint - * @see CH.ifa.draw.util.Bounds#includePoint(double, double) - */ - // JUnitDoclet end javadoc_method includePoint() - public void testIncludePoint() throws Exception { - // JUnitDoclet begin method includePoint - // JUnitDoclet end method includePoint - } - - // JUnitDoclet begin javadoc_method includeLine() - /** - * Method testIncludeLine is testing includeLine - * @see CH.ifa.draw.util.Bounds#includeLine(double, double, double, double) - */ - // JUnitDoclet end javadoc_method includeLine() - public void testIncludeLine() throws Exception { - // JUnitDoclet begin method includeLine - // JUnitDoclet end method includeLine - } - - // JUnitDoclet begin javadoc_method includeBounds() - /** - * Method testIncludeBounds is testing includeBounds - * @see CH.ifa.draw.util.Bounds#includeBounds(CH.ifa.draw.util.Bounds) - */ - // JUnitDoclet end javadoc_method includeBounds() - public void testIncludeBounds() throws Exception { - // JUnitDoclet begin method includeBounds - // JUnitDoclet end method includeBounds - } - - // JUnitDoclet begin javadoc_method includeRectangle2D() - /** - * Method testIncludeRectangle2D is testing includeRectangle2D - * @see CH.ifa.draw.util.Bounds#includeRectangle2D(java.awt.geom.Rectangle2D) - */ - // JUnitDoclet end javadoc_method includeRectangle2D() - public void testIncludeRectangle2D() throws Exception { - // JUnitDoclet begin method includeRectangle2D - // JUnitDoclet end method includeRectangle2D - } - - // JUnitDoclet begin javadoc_method intersect() - /** - * Method testIntersect is testing intersect - * @see CH.ifa.draw.util.Bounds#intersect(CH.ifa.draw.util.Bounds) - */ - // JUnitDoclet end javadoc_method intersect() - public void testIntersect() throws Exception { - // JUnitDoclet begin method intersect - // JUnitDoclet end method intersect - } - - // JUnitDoclet begin javadoc_method intersectsPoint() - /** - * Method testIntersectsPoint is testing intersectsPoint - * @see CH.ifa.draw.util.Bounds#intersectsPoint(double, double) - */ - // JUnitDoclet end javadoc_method intersectsPoint() - public void testIntersectsPoint() throws Exception { - // JUnitDoclet begin method intersectsPoint - // JUnitDoclet end method intersectsPoint - } - - // JUnitDoclet begin javadoc_method intersectsLine() - /** - * Method testIntersectsLine is testing intersectsLine - * @see CH.ifa.draw.util.Bounds#intersectsLine(double, double, double, double) - */ - // JUnitDoclet end javadoc_method intersectsLine() - public void testIntersectsLine() throws Exception { - // JUnitDoclet begin method intersectsLine - // JUnitDoclet end method intersectsLine - } - - // JUnitDoclet begin javadoc_method intersectsBounds() - /** - * Method testIntersectsBounds is testing intersectsBounds - * @see CH.ifa.draw.util.Bounds#intersectsBounds(CH.ifa.draw.util.Bounds) - */ - // JUnitDoclet end javadoc_method intersectsBounds() - public void testIntersectsBounds() throws Exception { - // JUnitDoclet begin method intersectsBounds - // JUnitDoclet end method intersectsBounds - } - - // JUnitDoclet begin javadoc_method completelyContainsLine() - /** - * Method testCompletelyContainsLine is testing completelyContainsLine - * @see CH.ifa.draw.util.Bounds#completelyContainsLine(double, double, double, double) - */ - // JUnitDoclet end javadoc_method completelyContainsLine() - public void testCompletelyContainsLine() throws Exception { - // JUnitDoclet begin method completelyContainsLine - // JUnitDoclet end method completelyContainsLine - } - - // JUnitDoclet begin javadoc_method isCompletelyInside() - /** - * Method testIsCompletelyInside is testing isCompletelyInside - * @see CH.ifa.draw.util.Bounds#isCompletelyInside(CH.ifa.draw.util.Bounds) - */ - // JUnitDoclet end javadoc_method isCompletelyInside() - public void testIsCompletelyInside() throws Exception { - // JUnitDoclet begin method isCompletelyInside - // JUnitDoclet end method isCompletelyInside - } - - // JUnitDoclet begin javadoc_method cropLine() - /** - * Method testCropLine is testing cropLine - * @see CH.ifa.draw.util.Bounds#cropLine(double, double, double, double) - */ - // JUnitDoclet end javadoc_method cropLine() - public void testCropLine() throws Exception { - // JUnitDoclet begin method cropLine - // JUnitDoclet end method cropLine - } - - // JUnitDoclet begin javadoc_method equals() - /** - * Method testEquals is testing equals - * @see CH.ifa.draw.util.Bounds#equals(java.lang.Object) - */ - // JUnitDoclet end javadoc_method equals() - public void testEquals() throws Exception { - // JUnitDoclet begin method equals - // JUnitDoclet end method equals - } - - // JUnitDoclet begin javadoc_method hashCode() - /** - * Method testHashCode is testing hashCode - * @see CH.ifa.draw.util.Bounds#hashCode() - */ - // JUnitDoclet end javadoc_method hashCode() - public void testHashCode() throws Exception { - // JUnitDoclet begin method hashCode - // JUnitDoclet end method hashCode - } - - // JUnitDoclet begin javadoc_method toString() - /** - * Method testToString is testing toString - * @see CH.ifa.draw.util.Bounds#toString() - */ - // JUnitDoclet end javadoc_method toString() - public void testToString() throws Exception { - // JUnitDoclet begin method toString - // JUnitDoclet end method toString - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/ClipboardTest.java b/JHotDraw/src/CH/ifa/draw/test/util/ClipboardTest.java deleted file mode 100644 index 4cdcc7f0d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/ClipboardTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import CH.ifa.draw.util.Clipboard; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ClipboardTest is generated by - * JUnitDoclet to hold the tests for Clipboard. - * @see CH.ifa.draw.util.Clipboard - */ -// JUnitDoclet end javadoc_class -public class ClipboardTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Clipboard clipboard; - // JUnitDoclet end class - - /** - * Constructor ClipboardTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ClipboardTest(String name) { - // JUnitDoclet begin method ClipboardTest - super(name); - // JUnitDoclet end method ClipboardTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.Clipboard createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return CH.ifa.draw.util.Clipboard.getClipboard(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - clipboard = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - clipboard = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getClipboard() - /** - * Method testGetClipboard is testing getClipboard - * @see CH.ifa.draw.util.Clipboard#getClipboard() - */ - // JUnitDoclet end javadoc_method getClipboard() - public void testGetClipboard() throws Exception { - // JUnitDoclet begin method getClipboard - // JUnitDoclet end method getClipboard - } - - // JUnitDoclet begin javadoc_method setContents() - /** - * Method testSetGetContents is testing setContents - * and getContents together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.Clipboard#setContents(java.lang.Object) - * @see CH.ifa.draw.util.Clipboard#getContents() - */ - // JUnitDoclet end javadoc_method setContents() - public void testSetGetContents() throws Exception { - // JUnitDoclet begin method setContents getContents - java.lang.Object[] tests = { new java.lang.Object(), null }; - - for (int i = 0; i < tests.length; i++) { - clipboard.setContents(tests[i]); - assertEquals(tests[i], clipboard.getContents()); - } - // JUnitDoclet end method setContents getContents - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/ColorMapTest.java b/JHotDraw/src/CH/ifa/draw/test/util/ColorMapTest.java deleted file mode 100644 index 67151b4a2..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/ColorMapTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.util.ColorMap; -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ColorMapTest is generated by - * JUnitDoclet to hold the tests for ColorMap. - * @see CH.ifa.draw.util.ColorMap - */ -// JUnitDoclet end javadoc_class -public class ColorMapTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ColorMap colormap; - // JUnitDoclet end class - - /** - * Constructor ColorMapTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ColorMapTest(String name) { - // JUnitDoclet begin method ColorMapTest - super(name); - // JUnitDoclet end method ColorMapTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.ColorMap createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.ColorMap(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - colormap = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - colormap = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method size() - /** - * Method testSize is testing size - * @see CH.ifa.draw.util.ColorMap#size() - */ - // JUnitDoclet end javadoc_method size() - public void testSize() throws Exception { - // JUnitDoclet begin method size - // JUnitDoclet end method size - } - - // JUnitDoclet begin javadoc_method color() - /** - * Method testColor is testing color - * @see CH.ifa.draw.util.ColorMap#color(int) - */ - // JUnitDoclet end javadoc_method color() - public void testColor() throws Exception { - // JUnitDoclet begin method color - // JUnitDoclet end method color - } - - // JUnitDoclet begin javadoc_method name() - /** - * Method testName is testing name - * @see CH.ifa.draw.util.ColorMap#name(int) - */ - // JUnitDoclet end javadoc_method name() - public void testName() throws Exception { - // JUnitDoclet begin method name - // JUnitDoclet end method name - } - - // JUnitDoclet begin javadoc_method colorIndex() - /** - * Method testColorIndex is testing colorIndex - * @see CH.ifa.draw.util.ColorMap#colorIndex(java.awt.Color) - */ - // JUnitDoclet end javadoc_method colorIndex() - public void testColorIndex() throws Exception { - // JUnitDoclet begin method colorIndex - // JUnitDoclet end method colorIndex - } - - // JUnitDoclet begin javadoc_method isTransparent() - /** - * Method testIsTransparent is testing isTransparent - * @see CH.ifa.draw.util.ColorMap#isTransparent(java.awt.Color) - */ - // JUnitDoclet end javadoc_method isTransparent() - public void testIsTransparent() throws Exception { - // JUnitDoclet begin method isTransparent - // JUnitDoclet end method isTransparent - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/CommandButtonTest.java b/JHotDraw/src/CH/ifa/draw/test/util/CommandButtonTest.java deleted file mode 100644 index f80664526..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/CommandButtonTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.DuplicateCommand; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.CommandButton; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandButtonTest is generated by - * JUnitDoclet to hold the tests for CommandButton. - * @see CH.ifa.draw.util.CommandButton - */ -// JUnitDoclet end javadoc_class -public class CommandButtonTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandButton commandbutton; - // JUnitDoclet end class - - /** - * Constructor CommandButtonTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandButtonTest(String name) { - // JUnitDoclet begin method CommandButtonTest - super(name); - // JUnitDoclet end method CommandButtonTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.CommandButton createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.CommandButton(new DuplicateCommand("Duplicate", getDrawingEditor())); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandbutton = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandbutton = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method actionPerformed() - /** - * Method testActionPerformed is testing actionPerformed - * @see CH.ifa.draw.util.CommandButton#actionPerformed(java.awt.event.ActionEvent) - */ - // JUnitDoclet end javadoc_method actionPerformed() - public void testActionPerformed() throws Exception { - // JUnitDoclet begin method actionPerformed - // JUnitDoclet end method actionPerformed - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/CommandChoiceTest.java b/JHotDraw/src/CH/ifa/draw/test/util/CommandChoiceTest.java deleted file mode 100644 index 3ccddfa6e..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/CommandChoiceTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import CH.ifa.draw.util.CommandChoice; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandChoiceTest is generated by - * JUnitDoclet to hold the tests for CommandChoice. - * @see CH.ifa.draw.util.CommandChoice - */ -// JUnitDoclet end javadoc_class -public class CommandChoiceTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandChoice commandchoice; - // JUnitDoclet end class - - /** - * Constructor CommandChoiceTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandChoiceTest(String name) { - // JUnitDoclet begin method CommandChoiceTest - super(name); - // JUnitDoclet end method CommandChoiceTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.CommandChoice createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.CommandChoice(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandchoice = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandchoice = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addItem() - /** - * Method testAddItem is testing addItem - * @see CH.ifa.draw.util.CommandChoice#addItem(CH.ifa.draw.util.Command) - */ - // JUnitDoclet end javadoc_method addItem() - public void testAddItem() throws Exception { - // JUnitDoclet begin method addItem - // JUnitDoclet end method addItem - } - - // JUnitDoclet begin javadoc_method itemStateChanged() - /** - * Method testItemStateChanged is testing itemStateChanged - * @see CH.ifa.draw.util.CommandChoice#itemStateChanged(java.awt.event.ItemEvent) - */ - // JUnitDoclet end javadoc_method itemStateChanged() - public void testItemStateChanged() throws Exception { - // JUnitDoclet begin method itemStateChanged - // JUnitDoclet end method itemStateChanged - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/CommandMenuTest.java b/JHotDraw/src/CH/ifa/draw/test/util/CommandMenuTest.java deleted file mode 100644 index 81344b393..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/CommandMenuTest.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import CH.ifa.draw.util.CommandMenu; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandMenuTest is generated by - * JUnitDoclet to hold the tests for CommandMenu. - * @see CH.ifa.draw.util.CommandMenu - */ -// JUnitDoclet end javadoc_class -public class CommandMenuTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandMenu commandmenu; - // JUnitDoclet end class - - /** - * Constructor CommandMenuTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandMenuTest(String name) { - // JUnitDoclet begin method CommandMenuTest - super(name); - // JUnitDoclet end method CommandMenuTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.CommandMenu createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.CommandMenu("TestCommandMenu"); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandmenu = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandmenu = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.util.CommandMenu#add(CH.ifa.draw.util.Command) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method addCheckItem() - /** - * Method testAddCheckItem is testing addCheckItem - * @see CH.ifa.draw.util.CommandMenu#addCheckItem(CH.ifa.draw.util.Command) - */ - // JUnitDoclet end javadoc_method addCheckItem() - public void testAddCheckItem() throws Exception { - // JUnitDoclet begin method addCheckItem - // JUnitDoclet end method addCheckItem - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.util.CommandMenu#remove(CH.ifa.draw.util.Command) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method enable() - /** - * Method testEnable is testing enable - * @see CH.ifa.draw.util.CommandMenu#enable(java.lang.String, boolean) - */ - // JUnitDoclet end javadoc_method enable() - public void testEnable() throws Exception { - // JUnitDoclet begin method enable - // JUnitDoclet end method enable - } - - // JUnitDoclet begin javadoc_method checkEnabled() - /** - * Method testCheckEnabled is testing checkEnabled - * @see CH.ifa.draw.util.CommandMenu#checkEnabled() - */ - // JUnitDoclet end javadoc_method checkEnabled() - public void testCheckEnabled() throws Exception { - // JUnitDoclet begin method checkEnabled - // JUnitDoclet end method checkEnabled - } - - // JUnitDoclet begin javadoc_method actionPerformed() - /** - * Method testActionPerformed is testing actionPerformed - * @see CH.ifa.draw.util.CommandMenu#actionPerformed(java.awt.event.ActionEvent) - */ - // JUnitDoclet end javadoc_method actionPerformed() - public void testActionPerformed() throws Exception { - // JUnitDoclet begin method actionPerformed - // JUnitDoclet end method actionPerformed - } - - // JUnitDoclet begin javadoc_method commandExecuted() - /** - * Method testCommandExecuted is testing commandExecuted - * @see CH.ifa.draw.util.CommandMenu#commandExecuted(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecuted() - public void testCommandExecuted() throws Exception { - // JUnitDoclet begin method commandExecuted - // JUnitDoclet end method commandExecuted - } - - // JUnitDoclet begin javadoc_method commandExecutable() - /** - * Method testCommandExecutable is testing commandExecutable - * @see CH.ifa.draw.util.CommandMenu#commandExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecutable() - public void testCommandExecutable() throws Exception { - // JUnitDoclet begin method commandExecutable - // JUnitDoclet end method commandExecutable - } - - // JUnitDoclet begin javadoc_method commandNotExecutable() - /** - * Method testCommandNotExecutable is testing commandNotExecutable - * @see CH.ifa.draw.util.CommandMenu#commandNotExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandNotExecutable() - public void testCommandNotExecutable() throws Exception { - // JUnitDoclet begin method commandNotExecutable - // JUnitDoclet end method commandNotExecutable - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/FillerTest.java b/JHotDraw/src/CH/ifa/draw/test/util/FillerTest.java deleted file mode 100644 index e5f58e17e..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/FillerTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import CH.ifa.draw.util.Filler; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FillerTest is generated by - * JUnitDoclet to hold the tests for Filler. - * @see CH.ifa.draw.util.Filler - */ -// JUnitDoclet end javadoc_class -public class FillerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Filler filler; - // JUnitDoclet end class - - /** - * Constructor FillerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FillerTest(String name) { - // JUnitDoclet begin method FillerTest - super(name); - // JUnitDoclet end method FillerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.Filler createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.Filler(10, 10); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - filler = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - filler = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getMinimumSize() - /** - * Method testGetMinimumSize is testing getMinimumSize - * @see CH.ifa.draw.util.Filler#getMinimumSize() - */ - // JUnitDoclet end javadoc_method getMinimumSize() - public void testGetMinimumSize() throws Exception { - // JUnitDoclet begin method getMinimumSize - // JUnitDoclet end method getMinimumSize - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see CH.ifa.draw.util.Filler#getPreferredSize() - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method getBackground() - /** - * Method testGetBackground is testing getBackground - * @see CH.ifa.draw.util.Filler#getBackground() - */ - // JUnitDoclet end javadoc_method getBackground() - public void testGetBackground() throws Exception { - // JUnitDoclet begin method getBackground - // JUnitDoclet end method getBackground - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/FloatingTextFieldTest.java b/JHotDraw/src/CH/ifa/draw/test/util/FloatingTextFieldTest.java deleted file mode 100644 index 3925b386e..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/FloatingTextFieldTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import CH.ifa.draw.util.FloatingTextField; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FloatingTextFieldTest is generated by - * JUnitDoclet to hold the tests for FloatingTextField. - * @see CH.ifa.draw.util.FloatingTextField - */ -// JUnitDoclet end javadoc_class -public class FloatingTextFieldTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FloatingTextField floatingtextfield; - // JUnitDoclet end class - - /** - * Constructor FloatingTextFieldTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FloatingTextFieldTest(String name) { - // JUnitDoclet begin method FloatingTextFieldTest - super(name); - // JUnitDoclet end method FloatingTextFieldTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.FloatingTextField createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.FloatingTextField(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - floatingtextfield = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - floatingtextfield = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createOverlay() - /** - * Method testCreateOverlay is testing createOverlay - * @see CH.ifa.draw.util.FloatingTextField#createOverlay(java.awt.Container) - */ - // JUnitDoclet end javadoc_method createOverlay() - public void testCreateOverlay() throws Exception { - // JUnitDoclet begin method createOverlay - // JUnitDoclet end method createOverlay - } - - // JUnitDoclet begin javadoc_method addActionListener() - /** - * Method testAddActionListener is testing addActionListener - * @see CH.ifa.draw.util.FloatingTextField#addActionListener(java.awt.event.ActionListener) - */ - // JUnitDoclet end javadoc_method addActionListener() - public void testAddActionListener() throws Exception { - // JUnitDoclet begin method addActionListener - // JUnitDoclet end method addActionListener - } - - // JUnitDoclet begin javadoc_method removeActionListener() - /** - * Method testRemoveActionListener is testing removeActionListener - * @see CH.ifa.draw.util.FloatingTextField#removeActionListener(java.awt.event.ActionListener) - */ - // JUnitDoclet end javadoc_method removeActionListener() - public void testRemoveActionListener() throws Exception { - // JUnitDoclet begin method removeActionListener - // JUnitDoclet end method removeActionListener - } - - // JUnitDoclet begin javadoc_method setBounds() - /** - * Method testSetBounds is testing setBounds - * @see CH.ifa.draw.util.FloatingTextField#setBounds(java.awt.Rectangle, java.lang.String) - */ - // JUnitDoclet end javadoc_method setBounds() - public void testSetBounds() throws Exception { - // JUnitDoclet begin method setBounds - // JUnitDoclet end method setBounds - } - - // JUnitDoclet begin javadoc_method getText() - /** - * Method testGetText is testing getText - * @see CH.ifa.draw.util.FloatingTextField#getText() - */ - // JUnitDoclet end javadoc_method getText() - public void testGetText() throws Exception { - // JUnitDoclet begin method getText - // JUnitDoclet end method getText - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see CH.ifa.draw.util.FloatingTextField#getPreferredSize(int) - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method endOverlay() - /** - * Method testEndOverlay is testing endOverlay - * @see CH.ifa.draw.util.FloatingTextField#endOverlay() - */ - // JUnitDoclet end javadoc_method endOverlay() - public void testEndOverlay() throws Exception { - // JUnitDoclet begin method endOverlay - // JUnitDoclet end method endOverlay - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/GeomTest.java b/JHotDraw/src/CH/ifa/draw/test/util/GeomTest.java deleted file mode 100644 index 529ce70fd..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/GeomTest.java +++ /dev/null @@ -1,343 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import CH.ifa.draw.util.Geom; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase GeomTest is generated by - * JUnitDoclet to hold the tests for Geom. - * @see CH.ifa.draw.util.Geom - */ -// JUnitDoclet end javadoc_class -public class GeomTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Geom geom; - // JUnitDoclet end class - - /** - * Constructor GeomTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GeomTest(String name) { - // JUnitDoclet begin method GeomTest - super(name); - // JUnitDoclet end method GeomTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.Geom createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - // Geom has static methods and cannot be instantiated. - return null; - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - geom = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - geom = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method lineContainsPoint() - /** - * Method testLineContainsPoint is testing lineContainsPoint - * @see CH.ifa.draw.util.Geom#lineContainsPoint(int, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method lineContainsPoint() - public void testLineContainsPoint() throws Exception { - // JUnitDoclet begin method lineContainsPoint - // JUnitDoclet end method lineContainsPoint - } - - // JUnitDoclet begin javadoc_method direction() - /** - * Method testDirection is testing direction - * @see CH.ifa.draw.util.Geom#direction(int, int, int, int) - */ - // JUnitDoclet end javadoc_method direction() - public void testDirection() throws Exception { - // JUnitDoclet begin method direction - // JUnitDoclet end method direction - } - - // JUnitDoclet begin javadoc_method south() - /** - * Method testSouth is testing south - * @see CH.ifa.draw.util.Geom#south(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method south() - public void testSouth() throws Exception { - // JUnitDoclet begin method south - // JUnitDoclet end method south - } - - // JUnitDoclet begin javadoc_method center() - /** - * Method testCenter is testing center - * @see CH.ifa.draw.util.Geom#center(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method center() - public void testCenter() throws Exception { - // JUnitDoclet begin method center - // JUnitDoclet end method center - } - - // JUnitDoclet begin javadoc_method west() - /** - * Method testWest is testing west - * @see CH.ifa.draw.util.Geom#west(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method west() - public void testWest() throws Exception { - // JUnitDoclet begin method west - // JUnitDoclet end method west - } - - // JUnitDoclet begin javadoc_method east() - /** - * Method testEast is testing east - * @see CH.ifa.draw.util.Geom#east(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method east() - public void testEast() throws Exception { - // JUnitDoclet begin method east - // JUnitDoclet end method east - } - - // JUnitDoclet begin javadoc_method north() - /** - * Method testNorth is testing north - * @see CH.ifa.draw.util.Geom#north(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method north() - public void testNorth() throws Exception { - // JUnitDoclet begin method north - // JUnitDoclet end method north - } - - // JUnitDoclet begin javadoc_method corner() - /** - * Method testCorner is testing corner - * @see CH.ifa.draw.util.Geom#corner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method corner() - public void testCorner() throws Exception { - // JUnitDoclet begin method corner - // JUnitDoclet end method corner - } - - // JUnitDoclet begin javadoc_method topLeftCorner() - /** - * Method testTopLeftCorner is testing topLeftCorner - * @see CH.ifa.draw.util.Geom#topLeftCorner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method topLeftCorner() - public void testTopLeftCorner() throws Exception { - // JUnitDoclet begin method topLeftCorner - // JUnitDoclet end method topLeftCorner - } - - // JUnitDoclet begin javadoc_method topRightCorner() - /** - * Method testTopRightCorner is testing topRightCorner - * @see CH.ifa.draw.util.Geom#topRightCorner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method topRightCorner() - public void testTopRightCorner() throws Exception { - // JUnitDoclet begin method topRightCorner - // JUnitDoclet end method topRightCorner - } - - // JUnitDoclet begin javadoc_method bottomLeftCorner() - /** - * Method testBottomLeftCorner is testing bottomLeftCorner - * @see CH.ifa.draw.util.Geom#bottomLeftCorner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method bottomLeftCorner() - public void testBottomLeftCorner() throws Exception { - // JUnitDoclet begin method bottomLeftCorner - // JUnitDoclet end method bottomLeftCorner - } - - // JUnitDoclet begin javadoc_method bottomRightCorner() - /** - * Method testBottomRightCorner is testing bottomRightCorner - * @see CH.ifa.draw.util.Geom#bottomRightCorner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method bottomRightCorner() - public void testBottomRightCorner() throws Exception { - // JUnitDoclet begin method bottomRightCorner - // JUnitDoclet end method bottomRightCorner - } - - // JUnitDoclet begin javadoc_method range() - /** - * Method testRange is testing range - * @see CH.ifa.draw.util.Geom#range(int, int, int) - */ - // JUnitDoclet end javadoc_method range() - public void testRange() throws Exception { - // JUnitDoclet begin method range - // JUnitDoclet end method range - } - - // JUnitDoclet begin javadoc_method length2() - /** - * Method testLength2 is testing length2 - * @see CH.ifa.draw.util.Geom#length2(int, int, int, int) - */ - // JUnitDoclet end javadoc_method length2() - public void testLength2() throws Exception { - // JUnitDoclet begin method length2 - // JUnitDoclet end method length2 - } - - // JUnitDoclet begin javadoc_method length() - /** - * Method testLength is testing length - * @see CH.ifa.draw.util.Geom#length(int, int, int, int) - */ - // JUnitDoclet end javadoc_method length() - public void testLength() throws Exception { - // JUnitDoclet begin method length - // JUnitDoclet end method length - } - - // JUnitDoclet begin javadoc_method pointToAngle() - /** - * Method testPointToAngle is testing pointToAngle - * @see CH.ifa.draw.util.Geom#pointToAngle(java.awt.Rectangle, java.awt.Point) - */ - // JUnitDoclet end javadoc_method pointToAngle() - public void testPointToAngle() throws Exception { - // JUnitDoclet begin method pointToAngle - // JUnitDoclet end method pointToAngle - } - - // JUnitDoclet begin javadoc_method angleToPoint() - /** - * Method testAngleToPoint is testing angleToPoint - * @see CH.ifa.draw.util.Geom#angleToPoint(java.awt.Rectangle, double) - */ - // JUnitDoclet end javadoc_method angleToPoint() - public void testAngleToPoint() throws Exception { - // JUnitDoclet begin method angleToPoint - // JUnitDoclet end method angleToPoint - } - - // JUnitDoclet begin javadoc_method polarToPoint() - /** - * Method testPolarToPoint is testing polarToPoint - * @see CH.ifa.draw.util.Geom#polarToPoint(double, double, double) - */ - // JUnitDoclet end javadoc_method polarToPoint() - public void testPolarToPoint() throws Exception { - // JUnitDoclet begin method polarToPoint - // JUnitDoclet end method polarToPoint - } - - // JUnitDoclet begin javadoc_method ovalAngleToPoint() - /** - * Method testOvalAngleToPoint is testing ovalAngleToPoint - * @see CH.ifa.draw.util.Geom#ovalAngleToPoint(java.awt.Rectangle, double) - */ - // JUnitDoclet end javadoc_method ovalAngleToPoint() - public void testOvalAngleToPoint() throws Exception { - // JUnitDoclet begin method ovalAngleToPoint - // JUnitDoclet end method ovalAngleToPoint - } - - // JUnitDoclet begin javadoc_method intersect() - /** - * Method testIntersect is testing intersect - * @see CH.ifa.draw.util.Geom#intersect(int, int, int, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method intersect() - public void testIntersect() throws Exception { - // JUnitDoclet begin method intersect - // JUnitDoclet end method intersect - } - - // JUnitDoclet begin javadoc_method distanceFromLine() - /** - * Method testDistanceFromLine is testing distanceFromLine - * @see CH.ifa.draw.util.Geom#distanceFromLine(int, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method distanceFromLine() - public void testDistanceFromLine() throws Exception { - // JUnitDoclet begin method distanceFromLine - // JUnitDoclet end method distanceFromLine - } - - // JUnitDoclet begin javadoc_method distanceFromLine2D() - /** - * Method testDistanceFromLine2D is testing distanceFromLine2D - * @see CH.ifa.draw.util.Geom#distanceFromLine2D(int, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method distanceFromLine2D() - public void testDistanceFromLine2D() throws Exception { - // JUnitDoclet begin method distanceFromLine2D - // JUnitDoclet end method distanceFromLine2D - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/GraphLayoutTest.java b/JHotDraw/src/CH/ifa/draw/test/util/GraphLayoutTest.java deleted file mode 100644 index d96ee3d40..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/GraphLayoutTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import CH.ifa.draw.util.GraphLayout; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase GraphLayoutTest is generated by - * JUnitDoclet to hold the tests for GraphLayout. - * @see CH.ifa.draw.util.GraphLayout - */ -// JUnitDoclet end javadoc_class -public class GraphLayoutTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GraphLayout graphlayout; - // JUnitDoclet end class - - /** - * Constructor GraphLayoutTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GraphLayoutTest(String name) { - // JUnitDoclet begin method GraphLayoutTest - super(name); - // JUnitDoclet end method GraphLayoutTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.GraphLayout createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.GraphLayout(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - graphlayout = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - graphlayout = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addNode() - /** - * Method testAddNode is testing addNode - * @see CH.ifa.draw.util.GraphLayout#addNode(CH.ifa.draw.framework.Figure) - */ - // JUnitDoclet end javadoc_method addNode() - public void testAddNode() throws Exception { - // JUnitDoclet begin method addNode - // JUnitDoclet end method addNode - } - - // JUnitDoclet begin javadoc_method addEdge() - /** - * Method testAddEdge is testing addEdge - * @see CH.ifa.draw.util.GraphLayout#addEdge(CH.ifa.draw.framework.ConnectionFigure, int) - */ - // JUnitDoclet end javadoc_method addEdge() - public void testAddEdge() throws Exception { - // JUnitDoclet begin method addEdge - // JUnitDoclet end method addEdge - } - - // JUnitDoclet begin javadoc_method relax() - /** - * Method testRelax is testing relax - * @see CH.ifa.draw.util.GraphLayout#relax() - */ - // JUnitDoclet end javadoc_method relax() - public void testRelax() throws Exception { - // JUnitDoclet begin method relax - // JUnitDoclet end method relax - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see CH.ifa.draw.util.GraphLayout#figureChanged(CH.ifa.draw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.util.GraphLayout#remove() - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/IconkitTest.java b/JHotDraw/src/CH/ifa/draw/test/util/IconkitTest.java deleted file mode 100644 index ad58f53a9..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/IconkitTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.Iconkit; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase IconkitTest is generated by - * JUnitDoclet to hold the tests for Iconkit. - * @see CH.ifa.draw.util.Iconkit - */ -// JUnitDoclet end javadoc_class -public class IconkitTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Iconkit iconkit; - // JUnitDoclet end class - - /** - * Constructor IconkitTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public IconkitTest(String name) { - // JUnitDoclet begin method IconkitTest - super(name); - // JUnitDoclet end method IconkitTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.Iconkit createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.Iconkit(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - iconkit = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - iconkit = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method instance() - /** - * Method testInstance is testing instance - * @see CH.ifa.draw.util.Iconkit#instance() - */ - // JUnitDoclet end javadoc_method instance() - public void testInstance() throws Exception { - // JUnitDoclet begin method instance - // JUnitDoclet end method instance - } - - // JUnitDoclet begin javadoc_method loadRegisteredImages() - /** - * Method testLoadRegisteredImages is testing loadRegisteredImages - * @see CH.ifa.draw.util.Iconkit#loadRegisteredImages(java.awt.Component) - */ - // JUnitDoclet end javadoc_method loadRegisteredImages() - public void testLoadRegisteredImages() throws Exception { - // JUnitDoclet begin method loadRegisteredImages - // JUnitDoclet end method loadRegisteredImages - } - - // JUnitDoclet begin javadoc_method registerImage() - /** - * Method testRegisterImage is testing registerImage - * @see CH.ifa.draw.util.Iconkit#registerImage(java.lang.String) - */ - // JUnitDoclet end javadoc_method registerImage() - public void testRegisterImage() throws Exception { - // JUnitDoclet begin method registerImage - // JUnitDoclet end method registerImage - } - - // JUnitDoclet begin javadoc_method registerAndLoadImage() - /** - * Method testRegisterAndLoadImage is testing registerAndLoadImage - * @see CH.ifa.draw.util.Iconkit#registerAndLoadImage(java.awt.Component, java.lang.String) - */ - // JUnitDoclet end javadoc_method registerAndLoadImage() - public void testRegisterAndLoadImage() throws Exception { - // JUnitDoclet begin method registerAndLoadImage - // JUnitDoclet end method registerAndLoadImage - } - - // JUnitDoclet begin javadoc_method loadImage() - /** - * Method testLoadImage is testing loadImage - * @see CH.ifa.draw.util.Iconkit#loadImage(java.lang.String) - */ - // JUnitDoclet end javadoc_method loadImage() - public void testLoadImage() throws Exception { - // JUnitDoclet begin method loadImage - // JUnitDoclet end method loadImage - } - - // JUnitDoclet begin javadoc_method loadImageResource() - /** - * Method testLoadImageResource is testing loadImageResource - * @see CH.ifa.draw.util.Iconkit#loadImageResource(java.lang.String) - */ - // JUnitDoclet end javadoc_method loadImageResource() - public void testLoadImageResource() throws Exception { - // JUnitDoclet begin method loadImageResource - // JUnitDoclet end method loadImageResource - } - - // JUnitDoclet begin javadoc_method getImage() - /** - * Method testGetImage is testing getImage - * @see CH.ifa.draw.util.Iconkit#getImage(java.lang.String) - */ - // JUnitDoclet end javadoc_method getImage() - public void testGetImage() throws Exception { - // JUnitDoclet begin method getImage - // JUnitDoclet end method getImage - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/JDOStorageFormatTest.java b/JHotDraw/src/CH/ifa/draw/test/util/JDOStorageFormatTest.java deleted file mode 100644 index 692a796b4..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/JDOStorageFormatTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import CH.ifa.draw.util.JDOStorageFormat; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestCase JDOStorageFormatTest is generated by -* JUnitDoclet to hold the tests for JDOStorageFormat. -* @see CH.ifa.draw.util.JDOStorageFormat -*/ -// JUnitDoclet end javadoc_class -public class JDOStorageFormatTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JDOStorageFormat jdostorageformat; - // JUnitDoclet end class - - /** - * Constructor JDOStorageFormatTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JDOStorageFormatTest(String name) { - // JUnitDoclet begin method JDOStorageFormatTest - super(name); - // JUnitDoclet end method JDOStorageFormatTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.JDOStorageFormat createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.JDOStorageFormat(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - jdostorageformat = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - jdostorageformat = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createFileDescription() - /** - * Method testCreateFileDescription is testing createFileDescription - * @see CH.ifa.draw.util.JDOStorageFormat#createFileDescription() - */ - // JUnitDoclet end javadoc_method createFileDescription() - public void testCreateFileDescription() throws Exception { - // JUnitDoclet begin method createFileDescription - // JUnitDoclet end method createFileDescription - } - - // JUnitDoclet begin javadoc_method store() - /** - * Method testStore is testing store - * @see CH.ifa.draw.util.JDOStorageFormat#store(java.lang.String, CH.ifa.draw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method store() - public void testStore() throws Exception { - // JUnitDoclet begin method store - // JUnitDoclet end method store - } - - // JUnitDoclet begin javadoc_method restore() - /** - * Method testRestore is testing restore - * @see CH.ifa.draw.util.JDOStorageFormat#restore(java.lang.String) - */ - // JUnitDoclet end javadoc_method restore() - public void testRestore() throws Exception { - // JUnitDoclet begin method restore - // JUnitDoclet end method restore - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see CH.ifa.draw.util.JDOStorageFormat#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/PaletteIconTest.java b/JHotDraw/src/CH/ifa/draw/test/util/PaletteIconTest.java deleted file mode 100644 index b10546310..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/PaletteIconTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.util.PaletteIcon; -import CH.ifa.draw.util.Iconkit; -import CH.ifa.draw.application.DrawApplication; -import CH.ifa.draw.framework.JHotDrawRuntimeException; -import CH.ifa.draw.test.JHDTestCase; - -import java.awt.*; -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestCase PaletteIconTest is generated by -* JUnitDoclet to hold the tests for PaletteIcon. -* @see CH.ifa.draw.util.PaletteIcon -*/ -// JUnitDoclet end javadoc_class -public class PaletteIconTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PaletteIcon paletteicon; - // JUnitDoclet end class - - /** - * Constructor PaletteIconTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PaletteIconTest(String name) { - // JUnitDoclet begin method PaletteIconTest - super(name); - // JUnitDoclet end method PaletteIconTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.PaletteIcon createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Iconkit kit = Iconkit.instance(); - if (kit == null) { - throw new JHotDrawRuntimeException("Iconkit instance isn't set"); - } - - String iconName = DrawApplication.IMAGES + "SEL"; - Image im[] = new Image[3]; - im[0] = kit.loadImageResource(iconName + "1.gif"); - im[1] = kit.loadImageResource(iconName + "2.gif"); - im[2] = kit.loadImageResource(iconName + "3.gif"); - - MediaTracker tracker = new MediaTracker(getDrawingEditor()); - for (int i = 0; i < 3; i++) { - tracker.addImage(im[i], i); - } - try { - tracker.waitForAll(); - } - catch (Exception e) { - // ignore exception - } - - return new PaletteIcon(new Dimension(24, 24), im[0], im[1], im[2]); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - paletteicon = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - paletteicon = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method normal() - /** - * Method testNormal is testing normal - * @see CH.ifa.draw.util.PaletteIcon#normal() - */ - // JUnitDoclet end javadoc_method normal() - public void testNormal() throws Exception { - // JUnitDoclet begin method normal - // JUnitDoclet end method normal - } - - // JUnitDoclet begin javadoc_method pressed() - /** - * Method testPressed is testing pressed - * @see CH.ifa.draw.util.PaletteIcon#pressed() - */ - // JUnitDoclet end javadoc_method pressed() - public void testPressed() throws Exception { - // JUnitDoclet begin method pressed - // JUnitDoclet end method pressed - } - - // JUnitDoclet begin javadoc_method selected() - /** - * Method testSelected is testing selected - * @see CH.ifa.draw.util.PaletteIcon#selected() - */ - // JUnitDoclet end javadoc_method selected() - public void testSelected() throws Exception { - // JUnitDoclet begin method selected - // JUnitDoclet end method selected - } - - // JUnitDoclet begin javadoc_method getWidth() - /** - * Method testGetWidth is testing getWidth - * @see CH.ifa.draw.util.PaletteIcon#getWidth() - */ - // JUnitDoclet end javadoc_method getWidth() - public void testGetWidth() throws Exception { - // JUnitDoclet begin method getWidth - // JUnitDoclet end method getWidth - } - - // JUnitDoclet begin javadoc_method getHeight() - /** - * Method testGetHeight is testing getHeight - * @see CH.ifa.draw.util.PaletteIcon#getHeight() - */ - // JUnitDoclet end javadoc_method getHeight() - public void testGetHeight() throws Exception { - // JUnitDoclet begin method getHeight - // JUnitDoclet end method getHeight - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/PaletteLayoutTest.java b/JHotDraw/src/CH/ifa/draw/test/util/PaletteLayoutTest.java deleted file mode 100644 index f55d6fe5b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/PaletteLayoutTest.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import java.awt.Point; - -import CH.ifa.draw.util.PaletteLayout; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PaletteLayoutTest is generated by - * JUnitDoclet to hold the tests for PaletteLayout. - * @see CH.ifa.draw.util.PaletteLayout - */ -// JUnitDoclet end javadoc_class -public class PaletteLayoutTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PaletteLayout palettelayout; - // JUnitDoclet end class - - /** - * Constructor PaletteLayoutTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PaletteLayoutTest(String name) { - // JUnitDoclet begin method PaletteLayoutTest - super(name); - // JUnitDoclet end method PaletteLayoutTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.PaletteLayout createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.PaletteLayout(10, new Point(5, 5)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - palettelayout = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - palettelayout = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addLayoutComponent() - /** - * Method testAddLayoutComponent is testing addLayoutComponent - * @see CH.ifa.draw.util.PaletteLayout#addLayoutComponent(java.lang.String, java.awt.Component) - */ - // JUnitDoclet end javadoc_method addLayoutComponent() - public void testAddLayoutComponent() throws Exception { - // JUnitDoclet begin method addLayoutComponent - // JUnitDoclet end method addLayoutComponent - } - - // JUnitDoclet begin javadoc_method removeLayoutComponent() - /** - * Method testRemoveLayoutComponent is testing removeLayoutComponent - * @see CH.ifa.draw.util.PaletteLayout#removeLayoutComponent(java.awt.Component) - */ - // JUnitDoclet end javadoc_method removeLayoutComponent() - public void testRemoveLayoutComponent() throws Exception { - // JUnitDoclet begin method removeLayoutComponent - // JUnitDoclet end method removeLayoutComponent - } - - // JUnitDoclet begin javadoc_method preferredLayoutSize() - /** - * Method testPreferredLayoutSize is testing preferredLayoutSize - * @see CH.ifa.draw.util.PaletteLayout#preferredLayoutSize(java.awt.Container) - */ - // JUnitDoclet end javadoc_method preferredLayoutSize() - public void testPreferredLayoutSize() throws Exception { - // JUnitDoclet begin method preferredLayoutSize - // JUnitDoclet end method preferredLayoutSize - } - - // JUnitDoclet begin javadoc_method minimumLayoutSize() - /** - * Method testMinimumLayoutSize is testing minimumLayoutSize - * @see CH.ifa.draw.util.PaletteLayout#minimumLayoutSize(java.awt.Container) - */ - // JUnitDoclet end javadoc_method minimumLayoutSize() - public void testMinimumLayoutSize() throws Exception { - // JUnitDoclet begin method minimumLayoutSize - // JUnitDoclet end method minimumLayoutSize - } - - // JUnitDoclet begin javadoc_method layoutContainer() - /** - * Method testLayoutContainer is testing layoutContainer - * @see CH.ifa.draw.util.PaletteLayout#layoutContainer(java.awt.Container) - */ - // JUnitDoclet end javadoc_method layoutContainer() - public void testLayoutContainer() throws Exception { - // JUnitDoclet begin method layoutContainer - // JUnitDoclet end method layoutContainer - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/RedoCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/util/RedoCommandTest.java deleted file mode 100644 index 7913327d7..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/RedoCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.RedoCommand; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase RedoCommandTest is generated by - * JUnitDoclet to hold the tests for RedoCommand. - * @see CH.ifa.draw.util.RedoCommand - */ -// JUnitDoclet end javadoc_class -public class RedoCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private RedoCommand redocommand; - // JUnitDoclet end class - - /** - * Constructor RedoCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public RedoCommandTest(String name) { - // JUnitDoclet begin method RedoCommandTest - super(name); - // JUnitDoclet end method RedoCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.RedoCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.RedoCommand("TestRedo", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - redocommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - redocommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.util.RedoCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see CH.ifa.draw.util.RedoCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/ReverseListEnumeratorTest.java b/JHotDraw/src/CH/ifa/draw/test/util/ReverseListEnumeratorTest.java deleted file mode 100644 index 7bb4b929d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/ReverseListEnumeratorTest.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import CH.ifa.draw.util.CollectionsFactory; -import CH.ifa.draw.util.ReverseListEnumerator; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ReverseListEnumeratorTest is generated by - * JUnitDoclet to hold the tests for ReverseListEnumerator. - * @see CH.ifa.draw.util.ReverseListEnumerator - */ -// JUnitDoclet end javadoc_class -public class ReverseListEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ReverseListEnumerator reverselistenumerator; - // JUnitDoclet end class - - /** - * Constructor ReverseListEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ReverseListEnumeratorTest(String name) { - // JUnitDoclet begin method ReverseListEnumeratorTest - super(name); - // JUnitDoclet end method ReverseListEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.ReverseListEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l = CollectionsFactory.current().createList(); - l.add("TestString1"); - l.add("TestString2"); - return new CH.ifa.draw.util.ReverseListEnumerator(l); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - reverselistenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - reverselistenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNext() - /** - * Method testHasNext is testing hasNext - * @see CH.ifa.draw.util.ReverseListEnumerator#hasNext() - */ - // JUnitDoclet end javadoc_method hasNext() - public void testHasNext() throws Exception { - // JUnitDoclet begin method hasNext - // JUnitDoclet end method hasNext - } - - // JUnitDoclet begin javadoc_method next() - /** - * Method testNext is testing next - * @see CH.ifa.draw.util.ReverseListEnumerator#next() - */ - // JUnitDoclet end javadoc_method next() - public void testNext() throws Exception { - // JUnitDoclet begin method next - // JUnitDoclet end method next - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.util.ReverseListEnumerator#remove() - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/SerializationStorageFormatTest.java b/JHotDraw/src/CH/ifa/draw/test/util/SerializationStorageFormatTest.java deleted file mode 100644 index 9cae000db..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/SerializationStorageFormatTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import CH.ifa.draw.util.SerializationStorageFormat; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SerializationStorageFormatTest is generated by - * JUnitDoclet to hold the tests for SerializationStorageFormat. - * @see CH.ifa.draw.util.SerializationStorageFormat - */ -// JUnitDoclet end javadoc_class -public class SerializationStorageFormatTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SerializationStorageFormat serializationstorageformat; - // JUnitDoclet end class - - /** - * Constructor SerializationStorageFormatTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SerializationStorageFormatTest(String name) { - // JUnitDoclet begin method SerializationStorageFormatTest - super(name); - // JUnitDoclet end method SerializationStorageFormatTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.SerializationStorageFormat createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.SerializationStorageFormat(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - serializationstorageformat = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - serializationstorageformat = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createFileDescription() - /** - * Method testCreateFileDescription is testing createFileDescription - * @see CH.ifa.draw.util.SerializationStorageFormat#createFileDescription() - */ - // JUnitDoclet end javadoc_method createFileDescription() - public void testCreateFileDescription() throws Exception { - // JUnitDoclet begin method createFileDescription - // JUnitDoclet end method createFileDescription - } - - // JUnitDoclet begin javadoc_method store() - /** - * Method testStore is testing store - * @see CH.ifa.draw.util.SerializationStorageFormat#store(java.lang.String, CH.ifa.draw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method store() - public void testStore() throws Exception { - // JUnitDoclet begin method store - // JUnitDoclet end method store - } - - // JUnitDoclet begin javadoc_method restore() - /** - * Method testRestore is testing restore - * @see CH.ifa.draw.util.SerializationStorageFormat#restore(java.lang.String) - */ - // JUnitDoclet end javadoc_method restore() - public void testRestore() throws Exception { - // JUnitDoclet begin method restore - // JUnitDoclet end method restore - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/StandardStorageFormatTest.java b/JHotDraw/src/CH/ifa/draw/test/util/StandardStorageFormatTest.java deleted file mode 100644 index 591141cdb..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/StandardStorageFormatTest.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.util.StandardStorageFormat; -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardStorageFormatTest is generated by - * JUnitDoclet to hold the tests for StandardStorageFormat. - * @see CH.ifa.draw.util.StandardStorageFormat - */ -// JUnitDoclet end javadoc_class -public class StandardStorageFormatTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardStorageFormat standardstorageformat; - // JUnitDoclet end class - - /** - * Constructor StandardStorageFormatTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardStorageFormatTest(String name) { - // JUnitDoclet begin method StandardStorageFormatTest - super(name); - // JUnitDoclet end method StandardStorageFormatTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.StandardStorageFormat createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.StandardStorageFormat(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standardstorageformat = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standardstorageformat = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setFileExtension() - /** - * Method testSetGetFileExtension is testing setFileExtension - * and getFileExtension together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.StandardStorageFormat#setFileExtension(java.lang.String) - * @see CH.ifa.draw.util.StandardStorageFormat#getFileExtension() - */ - // JUnitDoclet end javadoc_method setFileExtension() - public void testSetGetFileExtension() throws Exception { - // JUnitDoclet begin method setFileExtension getFileExtension - java.lang.String[] tests = { "", " ", "a", "A", "�", "�", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - standardstorageformat.setFileExtension(tests[i]); - assertEquals(tests[i], standardstorageformat.getFileExtension()); - } - // JUnitDoclet end method setFileExtension getFileExtension - } - - // JUnitDoclet begin javadoc_method createFileDescription() - /** - * Method testCreateFileDescription is testing createFileDescription - * @see CH.ifa.draw.util.StandardStorageFormat#createFileDescription() - */ - // JUnitDoclet end javadoc_method createFileDescription() - public void testCreateFileDescription() throws Exception { - // JUnitDoclet begin method createFileDescription - // JUnitDoclet end method createFileDescription - } - - // JUnitDoclet begin javadoc_method setFileDescription() - /** - * Method testSetGetFileDescription is testing setFileDescription - * and getFileDescription together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.StandardStorageFormat#setFileDescription(java.lang.String) - * @see CH.ifa.draw.util.StandardStorageFormat#getFileDescription() - */ - // JUnitDoclet end javadoc_method setFileDescription() - public void testSetGetFileDescription() throws Exception { - // JUnitDoclet begin method setFileDescription getFileDescription - java.lang.String[] tests = { "", " ", "a", "A", "�", "�", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - standardstorageformat.setFileDescription(tests[i]); - assertEquals(tests[i], standardstorageformat.getFileDescription()); - } - // JUnitDoclet end method setFileDescription getFileDescription - } - - // JUnitDoclet begin javadoc_method setFileFilter() - /** - * Method testSetGetFileFilter is testing setFileFilter - * and getFileFilter together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.StandardStorageFormat#setFileFilter(javax.swing.filechooser.FileFilter) - * @see CH.ifa.draw.util.StandardStorageFormat#getFileFilter() - */ - // JUnitDoclet end javadoc_method setFileFilter() - public void testSetGetFileFilter() throws Exception { - // JUnitDoclet begin method setFileFilter getFileFilter - javax.swing.filechooser.FileFilter[] tests = { null, null }; - - for (int i = 0; i < tests.length; i++) { - standardstorageformat.setFileFilter(tests[i]); - assertEquals(tests[i], standardstorageformat.getFileFilter()); - } - // JUnitDoclet end method setFileFilter getFileFilter - } - - // JUnitDoclet begin javadoc_method store() - /** - * Method testStore is testing store - * @see CH.ifa.draw.util.StandardStorageFormat#store(java.lang.String, CH.ifa.draw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method store() - public void testStore() throws Exception { - // JUnitDoclet begin method store - // JUnitDoclet end method store - } - - // JUnitDoclet begin javadoc_method restore() - /** - * Method testRestore is testing restore - * @see CH.ifa.draw.util.StandardStorageFormat#restore(java.lang.String) - */ - // JUnitDoclet end javadoc_method restore() - public void testRestore() throws Exception { - // JUnitDoclet begin method restore - // JUnitDoclet end method restore - } - - // JUnitDoclet begin javadoc_method equals() - /** - * Method testEquals is testing equals - * @see CH.ifa.draw.util.StandardStorageFormat#equals(java.lang.Object) - */ - // JUnitDoclet end javadoc_method equals() - public void testEquals() throws Exception { - // JUnitDoclet begin method equals - // JUnitDoclet end method equals - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/StandardVersionControlStrategyTest.java b/JHotDraw/src/CH/ifa/draw/test/util/StandardVersionControlStrategyTest.java deleted file mode 100644 index 0352cfc34..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/StandardVersionControlStrategyTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.StandardVersionControlStrategy; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardVersionControlStrategyTest is generated by - * JUnitDoclet to hold the tests for StandardVersionControlStrategy. - * @see CH.ifa.draw.util.StandardVersionControlStrategy - */ -// JUnitDoclet end javadoc_class -public class StandardVersionControlStrategyTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardVersionControlStrategy standardversioncontrolstrategy; - // JUnitDoclet end class - /** - * Constructor StandardVersionControlStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardVersionControlStrategyTest(String name) { - // JUnitDoclet begin method StandardVersionControlStrategyTest - super(name); - // JUnitDoclet end method StandardVersionControlStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.StandardVersionControlStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.StandardVersionControlStrategy(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standardversioncontrolstrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standardversioncontrolstrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method assertCompatibleVersion() - /** - * Method testAssertCompatibleVersion is testing assertCompatibleVersion - * @see CH.ifa.draw.util.StandardVersionControlStrategy#assertCompatibleVersion() - */ - // JUnitDoclet end javadoc_method assertCompatibleVersion() - public void testAssertCompatibleVersion() throws Exception { - // JUnitDoclet begin method assertCompatibleVersion - // JUnitDoclet end method assertCompatibleVersion - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/StorableInputTest.java b/JHotDraw/src/CH/ifa/draw/test/util/StorableInputTest.java deleted file mode 100644 index 772b78e4f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/StorableInputTest.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import java.io.File; -import java.io.FileInputStream; - -import CH.ifa.draw.util.StorableInput; - -// JUnitDoclet begin import -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StorableInputTest is generated by - * JUnitDoclet to hold the tests for StorableInput. - * @see CH.ifa.draw.util.StorableInput - */ -// JUnitDoclet end javadoc_class -public class StorableInputTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StorableInput storableinput; - // JUnitDoclet end class - - /** - * Constructor StorableInputTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StorableInputTest(String name) { - // JUnitDoclet begin method StorableInputTest - super(name); - // JUnitDoclet end method StorableInputTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.StorableInput createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - File tempFile = File.createTempFile("StorableInputTest", "dat"); - FileInputStream stream = new FileInputStream(tempFile); - tempFile.deleteOnExit(); - return new CH.ifa.draw.util.StorableInput(stream); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - storableinput = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - storableinput = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method readStorable() - /** - * Method testReadStorable is testing readStorable - * @see CH.ifa.draw.util.StorableInput#readStorable() - */ - // JUnitDoclet end javadoc_method readStorable() - public void testReadStorable() throws Exception { - // JUnitDoclet begin method readStorable - // JUnitDoclet end method readStorable - } - - // JUnitDoclet begin javadoc_method readString() - /** - * Method testReadString is testing readString - * @see CH.ifa.draw.util.StorableInput#readString() - */ - // JUnitDoclet end javadoc_method readString() - public void testReadString() throws Exception { - // JUnitDoclet begin method readString - // JUnitDoclet end method readString - } - - // JUnitDoclet begin javadoc_method readInt() - /** - * Method testReadInt is testing readInt - * @see CH.ifa.draw.util.StorableInput#readInt() - */ - // JUnitDoclet end javadoc_method readInt() - public void testReadInt() throws Exception { - // JUnitDoclet begin method readInt - // JUnitDoclet end method readInt - } - - // JUnitDoclet begin javadoc_method readLong() - /** - * Method testReadLong is testing readLong - * @see CH.ifa.draw.util.StorableInput#readLong() - */ - // JUnitDoclet end javadoc_method readLong() - public void testReadLong() throws Exception { - // JUnitDoclet begin method readLong - // JUnitDoclet end method readLong - } - - // JUnitDoclet begin javadoc_method readColor() - /** - * Method testReadColor is testing readColor - * @see CH.ifa.draw.util.StorableInput#readColor() - */ - // JUnitDoclet end javadoc_method readColor() - public void testReadColor() throws Exception { - // JUnitDoclet begin method readColor - // JUnitDoclet end method readColor - } - - // JUnitDoclet begin javadoc_method readDouble() - /** - * Method testReadDouble is testing readDouble - * @see CH.ifa.draw.util.StorableInput#readDouble() - */ - // JUnitDoclet end javadoc_method readDouble() - public void testReadDouble() throws Exception { - // JUnitDoclet begin method readDouble - // JUnitDoclet end method readDouble - } - - // JUnitDoclet begin javadoc_method readBoolean() - /** - * Method testReadBoolean is testing readBoolean - * @see CH.ifa.draw.util.StorableInput#readBoolean() - */ - // JUnitDoclet end javadoc_method readBoolean() - public void testReadBoolean() throws Exception { - // JUnitDoclet begin method readBoolean - // JUnitDoclet end method readBoolean - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/StorableOutputTest.java b/JHotDraw/src/CH/ifa/draw/test/util/StorableOutputTest.java deleted file mode 100644 index e80317dcd..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/StorableOutputTest.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import java.io.File; -import java.io.FileOutputStream; - -import CH.ifa.draw.util.StorableOutput; - -// JUnitDoclet begin import -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StorableOutputTest is generated by - * JUnitDoclet to hold the tests for StorableOutput. - * @see CH.ifa.draw.util.StorableOutput - */ -// JUnitDoclet end javadoc_class -public class StorableOutputTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StorableOutput storableoutput; - // JUnitDoclet end class - - /** - * Constructor StorableOutputTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StorableOutputTest(String name) { - // JUnitDoclet begin method StorableOutputTest - super(name); - // JUnitDoclet end method StorableOutputTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.StorableOutput createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - File tempFile = File.createTempFile("StorableOutputTest", "dat"); - FileOutputStream stream = new FileOutputStream(tempFile); - tempFile.deleteOnExit(); - return new CH.ifa.draw.util.StorableOutput(stream); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - storableoutput = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - storableoutput = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method writeStorable() - /** - * Method testWriteStorable is testing writeStorable - * @see CH.ifa.draw.util.StorableOutput#writeStorable(CH.ifa.draw.util.Storable) - */ - // JUnitDoclet end javadoc_method writeStorable() - public void testWriteStorable() throws Exception { - // JUnitDoclet begin method writeStorable - // JUnitDoclet end method writeStorable - } - - // JUnitDoclet begin javadoc_method writeInt() - /** - * Method testWriteInt is testing writeInt - * @see CH.ifa.draw.util.StorableOutput#writeInt(int) - */ - // JUnitDoclet end javadoc_method writeInt() - public void testWriteInt() throws Exception { - // JUnitDoclet begin method writeInt - // JUnitDoclet end method writeInt - } - - // JUnitDoclet begin javadoc_method writeLong() - /** - * Method testWriteLong is testing writeLong - * @see CH.ifa.draw.util.StorableOutput#writeLong(long) - */ - // JUnitDoclet end javadoc_method writeLong() - public void testWriteLong() throws Exception { - // JUnitDoclet begin method writeLong - // JUnitDoclet end method writeLong - } - - // JUnitDoclet begin javadoc_method writeColor() - /** - * Method testWriteColor is testing writeColor - * @see CH.ifa.draw.util.StorableOutput#writeColor(java.awt.Color) - */ - // JUnitDoclet end javadoc_method writeColor() - public void testWriteColor() throws Exception { - // JUnitDoclet begin method writeColor - // JUnitDoclet end method writeColor - } - - // JUnitDoclet begin javadoc_method writeDouble() - /** - * Method testWriteDouble is testing writeDouble - * @see CH.ifa.draw.util.StorableOutput#writeDouble(double) - */ - // JUnitDoclet end javadoc_method writeDouble() - public void testWriteDouble() throws Exception { - // JUnitDoclet begin method writeDouble - // JUnitDoclet end method writeDouble - } - - // JUnitDoclet begin javadoc_method writeBoolean() - /** - * Method testWriteBoolean is testing writeBoolean - * @see CH.ifa.draw.util.StorableOutput#writeBoolean(boolean) - */ - // JUnitDoclet end javadoc_method writeBoolean() - public void testWriteBoolean() throws Exception { - // JUnitDoclet begin method writeBoolean - // JUnitDoclet end method writeBoolean - } - - // JUnitDoclet begin javadoc_method writeString() - /** - * Method testWriteString is testing writeString - * @see CH.ifa.draw.util.StorableOutput#writeString(java.lang.String) - */ - // JUnitDoclet end javadoc_method writeString() - public void testWriteString() throws Exception { - // JUnitDoclet begin method writeString - // JUnitDoclet end method writeString - } - - // JUnitDoclet begin javadoc_method close() - /** - * Method testClose is testing close - * @see CH.ifa.draw.util.StorableOutput#close() - */ - // JUnitDoclet end javadoc_method close() - public void testClose() throws Exception { - // JUnitDoclet begin method close - // JUnitDoclet end method close - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/StorageFormatManagerTest.java b/JHotDraw/src/CH/ifa/draw/test/util/StorageFormatManagerTest.java deleted file mode 100644 index f692f587f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/StorageFormatManagerTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import CH.ifa.draw.util.StandardStorageFormat; -import CH.ifa.draw.util.StorageFormatManager; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StorageFormatManagerTest is generated by - * JUnitDoclet to hold the tests for StorageFormatManager. - * @see CH.ifa.draw.util.StorageFormatManager - */ -// JUnitDoclet end javadoc_class -public class StorageFormatManagerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StorageFormatManager storageformatmanager; - // JUnitDoclet end class - - /** - * Constructor StorageFormatManagerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StorageFormatManagerTest(String name) { - // JUnitDoclet begin method StorageFormatManagerTest - super(name); - // JUnitDoclet end method StorageFormatManagerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.StorageFormatManager createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.StorageFormatManager(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - storageformatmanager = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - storageformatmanager = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addStorageFormat() - /** - * Method testAddStorageFormat is testing addStorageFormat - * @see CH.ifa.draw.util.StorageFormatManager#addStorageFormat(CH.ifa.draw.util.StorageFormat) - */ - // JUnitDoclet end javadoc_method addStorageFormat() - public void testAddStorageFormat() throws Exception { - // JUnitDoclet begin method addStorageFormat - // JUnitDoclet end method addStorageFormat - } - - // JUnitDoclet begin javadoc_method removeStorageFormat() - /** - * Method testRemoveStorageFormat is testing removeStorageFormat - * @see CH.ifa.draw.util.StorageFormatManager#removeStorageFormat(CH.ifa.draw.util.StorageFormat) - */ - // JUnitDoclet end javadoc_method removeStorageFormat() - public void testRemoveStorageFormat() throws Exception { - // JUnitDoclet begin method removeStorageFormat - // JUnitDoclet end method removeStorageFormat - } - - // JUnitDoclet begin javadoc_method containsStorageFormat() - /** - * Method testContainsStorageFormat is testing containsStorageFormat - * @see CH.ifa.draw.util.StorageFormatManager#containsStorageFormat(CH.ifa.draw.util.StorageFormat) - */ - // JUnitDoclet end javadoc_method containsStorageFormat() - public void testContainsStorageFormat() throws Exception { - // JUnitDoclet begin method containsStorageFormat - // JUnitDoclet end method containsStorageFormat - } - - // JUnitDoclet begin javadoc_method setDefaultStorageFormat() - /** - * Method testSetGetDefaultStorageFormat is testing setDefaultStorageFormat - * and getDefaultStorageFormat together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.StorageFormatManager#setDefaultStorageFormat(CH.ifa.draw.util.StorageFormat) - * @see CH.ifa.draw.util.StorageFormatManager#getDefaultStorageFormat() - */ - // JUnitDoclet end javadoc_method setDefaultStorageFormat() - public void testSetGetDefaultStorageFormat() throws Exception { - // JUnitDoclet begin method setDefaultStorageFormat getDefaultStorageFormat - CH.ifa.draw.util.StorageFormat[] tests = { new StandardStorageFormat(), null }; - - for (int i = 0; i < tests.length; i++) { - storageformatmanager.setDefaultStorageFormat(tests[i]); - assertEquals(tests[i], storageformatmanager.getDefaultStorageFormat()); - } - // JUnitDoclet end method setDefaultStorageFormat getDefaultStorageFormat - } - - // JUnitDoclet begin javadoc_method registerFileFilters() - /** - * Method testRegisterFileFilters is testing registerFileFilters - * @see CH.ifa.draw.util.StorageFormatManager#registerFileFilters(javax.swing.JFileChooser) - */ - // JUnitDoclet end javadoc_method registerFileFilters() - public void testRegisterFileFilters() throws Exception { - // JUnitDoclet begin method registerFileFilters - // JUnitDoclet end method registerFileFilters - } - - // JUnitDoclet begin javadoc_method findStorageFormat() - /** - * Method testFindStorageFormat is testing findStorageFormat - * @see CH.ifa.draw.util.StorageFormatManager#findStorageFormat(javax.swing.filechooser.FileFilter) - */ - // JUnitDoclet end javadoc_method findStorageFormat() - public void testFindStorageFormat() throws Exception { - // JUnitDoclet begin method findStorageFormat - // JUnitDoclet end method findStorageFormat - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/UndoCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/util/UndoCommandTest.java deleted file mode 100644 index 70e41ccc5..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/UndoCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.UndoCommand; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoCommandTest is generated by - * JUnitDoclet to hold the tests for UndoCommand. - * @see CH.ifa.draw.util.UndoCommand - */ -// JUnitDoclet end javadoc_class -public class UndoCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoCommand undocommand; - // JUnitDoclet end class - - /** - * Constructor UndoCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoCommandTest(String name) { - // JUnitDoclet begin method UndoCommandTest - super(name); - // JUnitDoclet end method UndoCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.UndoCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.UndoCommand("TestUndo", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undocommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undocommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.util.UndoCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see CH.ifa.draw.util.UndoCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/UndoManagerTest.java b/JHotDraw/src/CH/ifa/draw/test/util/UndoManagerTest.java deleted file mode 100644 index e165cea14..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/UndoManagerTest.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.util.UndoManager; -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoManagerTest is generated by - * JUnitDoclet to hold the tests for UndoManager. - * @see CH.ifa.draw.util.UndoManager - */ -// JUnitDoclet end javadoc_class -public class UndoManagerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoManager undomanager; - // JUnitDoclet end class - - /** - * Constructor UndoManagerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoManagerTest(String name) { - // JUnitDoclet begin method UndoManagerTest - super(name); - // JUnitDoclet end method UndoManagerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.UndoManager createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.UndoManager(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undomanager = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undomanager = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method pushUndo() - /** - * Method testPushUndo is testing pushUndo - * @see CH.ifa.draw.util.UndoManager#pushUndo(CH.ifa.draw.util.Undoable) - */ - // JUnitDoclet end javadoc_method pushUndo() - public void testPushUndo() throws Exception { - // JUnitDoclet begin method pushUndo - // JUnitDoclet end method pushUndo - } - - // JUnitDoclet begin javadoc_method pushRedo() - /** - * Method testPushRedo is testing pushRedo - * @see CH.ifa.draw.util.UndoManager#pushRedo(CH.ifa.draw.util.Undoable) - */ - // JUnitDoclet end javadoc_method pushRedo() - public void testPushRedo() throws Exception { - // JUnitDoclet begin method pushRedo - // JUnitDoclet end method pushRedo - } - - // JUnitDoclet begin javadoc_method isUndoable() - /** - * Method testIsUndoable is testing isUndoable - * @see CH.ifa.draw.util.UndoManager#isUndoable() - */ - // JUnitDoclet end javadoc_method isUndoable() - public void testIsUndoable() throws Exception { - // JUnitDoclet begin method isUndoable - // JUnitDoclet end method isUndoable - } - - // JUnitDoclet begin javadoc_method isRedoable() - /** - * Method testIsRedoable is testing isRedoable - * @see CH.ifa.draw.util.UndoManager#isRedoable() - */ - // JUnitDoclet end javadoc_method isRedoable() - public void testIsRedoable() throws Exception { - // JUnitDoclet begin method isRedoable - // JUnitDoclet end method isRedoable - } - - // JUnitDoclet begin javadoc_method getUndoSize() - /** - * Method testGetUndoSize is testing getUndoSize - * @see CH.ifa.draw.util.UndoManager#getUndoSize() - */ - // JUnitDoclet end javadoc_method getUndoSize() - public void testGetUndoSize() throws Exception { - // JUnitDoclet begin method getUndoSize - // JUnitDoclet end method getUndoSize - } - - // JUnitDoclet begin javadoc_method getRedoSize() - /** - * Method testGetRedoSize is testing getRedoSize - * @see CH.ifa.draw.util.UndoManager#getRedoSize() - */ - // JUnitDoclet end javadoc_method getRedoSize() - public void testGetRedoSize() throws Exception { - // JUnitDoclet begin method getRedoSize - // JUnitDoclet end method getRedoSize - } - - // JUnitDoclet begin javadoc_method popUndo() - /** - * Method testPopUndo is testing popUndo - * @see CH.ifa.draw.util.UndoManager#popUndo() - */ - // JUnitDoclet end javadoc_method popUndo() - public void testPopUndo() throws Exception { - // JUnitDoclet begin method popUndo - // JUnitDoclet end method popUndo - } - - // JUnitDoclet begin javadoc_method popRedo() - /** - * Method testPopRedo is testing popRedo - * @see CH.ifa.draw.util.UndoManager#popRedo() - */ - // JUnitDoclet end javadoc_method popRedo() - public void testPopRedo() throws Exception { - // JUnitDoclet begin method popRedo - // JUnitDoclet end method popRedo - } - - // JUnitDoclet begin javadoc_method clearUndos() - /** - * Method testClearUndos is testing clearUndos - * @see CH.ifa.draw.util.UndoManager#clearUndos() - */ - // JUnitDoclet end javadoc_method clearUndos() - public void testClearUndos() throws Exception { - // JUnitDoclet begin method clearUndos - // JUnitDoclet end method clearUndos - } - - // JUnitDoclet begin javadoc_method clearRedos() - /** - * Method testClearRedos is testing clearRedos - * @see CH.ifa.draw.util.UndoManager#clearRedos() - */ - // JUnitDoclet end javadoc_method clearRedos() - public void testClearRedos() throws Exception { - // JUnitDoclet begin method clearRedos - // JUnitDoclet end method clearRedos - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/UndoRedoActivityTest.java b/JHotDraw/src/CH/ifa/draw/test/util/UndoRedoActivityTest.java deleted file mode 100644 index 9faabc515..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/UndoRedoActivityTest.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import java.awt.Point; -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.standard.PasteCommand; -import CH.ifa.draw.standard.SingleFigureEnumerator; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.UndoRedoActivity; -import CH.ifa.draw.util.Undoable; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoRedoActivityTest is generated by - * JUnitDoclet to hold the tests for UndoRedoActivity. - * @see CH.ifa.draw.util.UndoRedoActivity - */ -// JUnitDoclet end javadoc_class -public class UndoRedoActivityTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoRedoActivity undoredoactivity; - // JUnitDoclet end class - - /** - * Constructor UndoRedoActivityTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoRedoActivityTest(String name) { - // JUnitDoclet begin method UndoRedoActivityTest - super(name); - // JUnitDoclet end method UndoRedoActivityTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.UndoRedoActivity createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Undoable undoActivity = new PasteCommand.UndoActivity(getDrawingEditor().view()); - undoActivity.setAffectedFigures(new SingleFigureEnumerator(new RectangleFigure(new Point(33, 33), new Point(44, 44)))); - return (UndoRedoActivity)UndoRedoActivity.createUndoRedoActivity(undoActivity); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoredoactivity = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoredoactivity = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method undo() - /** - * Method testUndo is testing undo - * @see CH.ifa.draw.util.UndoRedoActivity#undo() - */ - // JUnitDoclet end javadoc_method undo() - public void testUndo() throws Exception { - // JUnitDoclet begin method undo - // JUnitDoclet end method undo - } - - // JUnitDoclet begin javadoc_method redo() - /** - * Method testRedo is testing redo - * @see CH.ifa.draw.util.UndoRedoActivity#redo() - */ - // JUnitDoclet end javadoc_method redo() - public void testRedo() throws Exception { - // JUnitDoclet begin method redo - // JUnitDoclet end method redo - } - - // JUnitDoclet begin javadoc_method setUndoable() - /** - * Method testSetIsUndoable is testing setUndoable - * and isUndoable together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoRedoActivity#setUndoable(boolean) - * @see CH.ifa.draw.util.UndoRedoActivity#isUndoable() - */ - // JUnitDoclet end javadoc_method setUndoable() - public void testSetIsUndoable() throws Exception { - // JUnitDoclet begin method setUndoable isUndoable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoredoactivity.setUndoable(tests[i]); - assertEquals(tests[i], undoredoactivity.isUndoable()); - } - // JUnitDoclet end method setUndoable isUndoable - } - - // JUnitDoclet begin javadoc_method setRedoable() - /** - * Method testSetIsRedoable is testing setRedoable - * and isRedoable together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoRedoActivity#setRedoable(boolean) - * @see CH.ifa.draw.util.UndoRedoActivity#isRedoable() - */ - // JUnitDoclet end javadoc_method setRedoable() - public void testSetIsRedoable() throws Exception { - // JUnitDoclet begin method setRedoable isRedoable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoredoactivity.setRedoable(tests[i]); - assertEquals(tests[i], undoredoactivity.isRedoable()); - } - // JUnitDoclet end method setRedoable isRedoable - } - - // JUnitDoclet begin javadoc_method setAffectedFigures() - /** - * Method testSetGetAffectedFigures is testing setAffectedFigures - * and getAffectedFigures together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoRedoActivity#setAffectedFigures(CH.ifa.draw.framework.FigureEnumeration) - * @see CH.ifa.draw.util.UndoRedoActivity#getAffectedFigures() - */ - // JUnitDoclet end javadoc_method setAffectedFigures() - public void testSetGetAffectedFigures() throws Exception { - // JUnitDoclet begin method setAffectedFigures getAffectedFigures - FigureEnumeration[] tests = { new SingleFigureEnumerator(new RectangleFigure(new Point(44, 44), new Point(55, 55)))}; - - for (int i = 0; i < tests.length; i++) { - undoredoactivity.setAffectedFigures(tests[i]); - FigureEnumeration returned = undoredoactivity.getAffectedFigures(); - tests[i].reset(); - while (returned.hasNextFigure()) { - assertTrue(tests[i].hasNextFigure()); - assertEquals(tests[i].nextFigure(), returned.nextFigure()); - } - assertFalse(tests[i].hasNextFigure()); - } - // JUnitDoclet end method setAffectedFigures getAffectedFigures - } - - // JUnitDoclet begin method testSetNullAffectedFigures() - /** - * Test a null argument to setAffectedFigures. Expect an IllegalArgumentException - * - * @see CH.ifa.draw.util.UndoRedoActivity#setAffectedFigures(CH.ifa.draw.framework.PointConstrainer) - */ - public void testSetNullAffectedFigures() throws Exception { - FigureEnumeration original = undoredoactivity.getAffectedFigures(); - - try { - undoredoactivity.setAffectedFigures(null); - fail("IllegalArgumentException expected"); - } - catch (IllegalArgumentException ok) { - } - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method getAffectedFiguresCount() - /** - * Method testGetAffectedFiguresCount is testing getAffectedFiguresCount - * @see CH.ifa.draw.util.UndoRedoActivity#getAffectedFiguresCount() - */ - // JUnitDoclet end javadoc_method getAffectedFiguresCount() - public void testGetAffectedFiguresCount() throws Exception { - // JUnitDoclet begin method getAffectedFiguresCount - // JUnitDoclet end method getAffectedFiguresCount - } - - // JUnitDoclet begin javadoc_method getDrawingView() - /** - * Method testGetDrawingView is testing getDrawingView - * @see CH.ifa.draw.util.UndoRedoActivity#getDrawingView() - */ - // JUnitDoclet end javadoc_method getDrawingView() - public void testGetDrawingView() throws Exception { - // JUnitDoclet begin method getDrawingView - // JUnitDoclet end method getDrawingView - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see CH.ifa.draw.util.UndoRedoActivity#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method getReversedActivity() - /** - * Method testGetReversedActivity is testing getReversedActivity - * @see CH.ifa.draw.util.UndoRedoActivity#getReversedActivity() - */ - // JUnitDoclet end javadoc_method getReversedActivity() - public void testGetReversedActivity() throws Exception { - // JUnitDoclet begin method getReversedActivity - // JUnitDoclet end method getReversedActivity - } - - // JUnitDoclet begin javadoc_method createUndoRedoActivity() - /** - * Method testCreateUndoRedoActivity is testing createUndoRedoActivity - * @see CH.ifa.draw.util.UndoRedoActivity#createUndoRedoActivity(CH.ifa.draw.util.Undoable) - */ - // JUnitDoclet end javadoc_method createUndoRedoActivity() - public void testCreateUndoRedoActivity() throws Exception { - // JUnitDoclet begin method createUndoRedoActivity - // JUnitDoclet end method createUndoRedoActivity - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/UndoableAdapterTest.java b/JHotDraw/src/CH/ifa/draw/test/util/UndoableAdapterTest.java deleted file mode 100644 index b91fcbb88..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/UndoableAdapterTest.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.UndoableAdapter; -import CH.ifa.draw.standard.SingleFigureEnumerator; -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.framework.FigureEnumeration; - -import java.awt.*; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoableAdapterTest is generated by - * JUnitDoclet to hold the tests for UndoableAdapter. - * @see CH.ifa.draw.util.UndoableAdapter - */ -// JUnitDoclet end javadoc_class -public class UndoableAdapterTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoableAdapter undoableadapter; - // JUnitDoclet end class - - /** - * Constructor UndoableAdapterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoableAdapterTest(String name) { - // JUnitDoclet begin method UndoableAdapterTest - super(name); - // JUnitDoclet end method UndoableAdapterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.UndoableAdapter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.UndoableAdapter(getDrawingEditor().view()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoableadapter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoableadapter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method undo() - /** - * Method testUndo is testing undo - * @see CH.ifa.draw.util.UndoableAdapter#undo() - */ - // JUnitDoclet end javadoc_method undo() - public void testUndo() throws Exception { - // JUnitDoclet begin method undo - // JUnitDoclet end method undo - } - - // JUnitDoclet begin javadoc_method redo() - /** - * Method testRedo is testing redo - * @see CH.ifa.draw.util.UndoableAdapter#redo() - */ - // JUnitDoclet end javadoc_method redo() - public void testRedo() throws Exception { - // JUnitDoclet begin method redo - // JUnitDoclet end method redo - } - - // JUnitDoclet begin javadoc_method setUndoable() - /** - * Method testSetIsUndoable is testing setUndoable - * and isUndoable together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoableAdapter#setUndoable(boolean) - * @see CH.ifa.draw.util.UndoableAdapter#isUndoable() - */ - // JUnitDoclet end javadoc_method setUndoable() - public void testSetIsUndoable() throws Exception { - // JUnitDoclet begin method setUndoable isUndoable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoableadapter.setUndoable(tests[i]); - assertEquals(tests[i], undoableadapter.isUndoable()); - } - // JUnitDoclet end method setUndoable isUndoable - } - - // JUnitDoclet begin javadoc_method setRedoable() - /** - * Method testSetIsRedoable is testing setRedoable - * and isRedoable together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoableAdapter#setRedoable(boolean) - * @see CH.ifa.draw.util.UndoableAdapter#isRedoable() - */ - // JUnitDoclet end javadoc_method setRedoable() - public void testSetIsRedoable() throws Exception { - // JUnitDoclet begin method setRedoable isRedoable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoableadapter.setRedoable(tests[i]); - assertEquals(tests[i], undoableadapter.isRedoable()); - } - // JUnitDoclet end method setRedoable isRedoable - } - - // JUnitDoclet begin javadoc_method setAffectedFigures() - /** - * Method testSetGetAffectedFigures is testing setAffectedFigures - * and getAffectedFigures together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoableAdapter#setAffectedFigures(CH.ifa.draw.framework.FigureEnumeration) - * @see CH.ifa.draw.util.UndoableAdapter#getAffectedFigures() - */ - // JUnitDoclet end javadoc_method setAffectedFigures() - public void testSetGetAffectedFigures() throws Exception { - // JUnitDoclet begin method setAffectedFigures getAffectedFigures - FigureEnumeration[] tests = { new SingleFigureEnumerator(new RectangleFigure(new Point(30, 30), new Point(60, 60)))}; - - for (int i = 0; i < tests.length; i++) { - undoableadapter.setAffectedFigures(tests[i]); - FigureEnumeration returned = undoableadapter.getAffectedFigures(); - tests[i].reset(); - while (returned.hasNextFigure()) { - assertTrue(tests[i].hasNextFigure()); - assertEquals(tests[i].nextFigure(), returned.nextFigure()); - } - assertFalse(tests[i].hasNextFigure()); - } - // JUnitDoclet end method setAffectedFigures getAffectedFigures - } - - // JUnitDoclet begin method testSetNullAffectedFigures() - /** - * Test a null argument to setAffectedFigures. Expect an IllegalArgumentException - * - * @see CH.ifa.draw.util.UndoRedoActivity#setAffectedFigures(CH.ifa.draw.framework.PointConstrainer) - */ - public void testSetNullAffectedFigures() throws Exception { - FigureEnumeration original = undoableadapter.getAffectedFigures(); - - try { - undoableadapter.setAffectedFigures(null); - fail("IllegalArgumentException expected"); - } - catch (IllegalArgumentException ok) { - } - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method getAffectedFiguresCount() - /** - * Method testGetAffectedFiguresCount is testing getAffectedFiguresCount - * @see CH.ifa.draw.util.UndoableAdapter#getAffectedFiguresCount() - */ - // JUnitDoclet end javadoc_method getAffectedFiguresCount() - public void testGetAffectedFiguresCount() throws Exception { - // JUnitDoclet begin method getAffectedFiguresCount - // JUnitDoclet end method getAffectedFiguresCount - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see CH.ifa.draw.util.UndoableAdapter#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method getDrawingView() - /** - * Method testGetDrawingView is testing getDrawingView - * @see CH.ifa.draw.util.UndoableAdapter#getDrawingView() - */ - // JUnitDoclet end javadoc_method getDrawingView() - public void testGetDrawingView() throws Exception { - // JUnitDoclet begin method getDrawingView - // JUnitDoclet end method getDrawingView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/UndoableCommandTest.java b/JHotDraw/src/CH/ifa/draw/test/util/UndoableCommandTest.java deleted file mode 100644 index b0d213ab0..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/UndoableCommandTest.java +++ /dev/null @@ -1,248 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.standard.DeleteCommand; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.UndoableCommand; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoableCommandTest is generated by - * JUnitDoclet to hold the tests for UndoableCommand. - * @see CH.ifa.draw.util.UndoableCommand - */ -// JUnitDoclet end javadoc_class -public class UndoableCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoableCommand undoablecommand; - // JUnitDoclet end class - - /** - * Constructor UndoableCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoableCommandTest(String name) { - // JUnitDoclet begin method UndoableCommandTest - super(name); - // JUnitDoclet end method UndoableCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.UndoableCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.UndoableCommand(new DeleteCommand("Delete", getDrawingEditor())); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoablecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoablecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see CH.ifa.draw.util.UndoableCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutable() - /** - * Method testIsExecutable is testing isExecutable - * @see CH.ifa.draw.util.UndoableCommand#isExecutable() - */ - // JUnitDoclet end javadoc_method isExecutable() - public void testIsExecutable() throws Exception { - // JUnitDoclet begin method isExecutable - // JUnitDoclet end method isExecutable - } - - // JUnitDoclet begin javadoc_method name() - /** - * Method testName is testing name - * @see CH.ifa.draw.util.UndoableCommand#name() - */ - // JUnitDoclet end javadoc_method name() - public void testName() throws Exception { - // JUnitDoclet begin method name - // JUnitDoclet end method name - } - - // JUnitDoclet begin javadoc_method getDrawingEditor() - /** - * Method testGetDrawingEditor is testing getDrawingEditor - * @see CH.ifa.draw.util.UndoableCommand#getDrawingEditor() - */ - // JUnitDoclet end javadoc_method getDrawingEditor() - public void testGetDrawingEditor() throws Exception { - // JUnitDoclet begin method getDrawingEditor - // JUnitDoclet end method getDrawingEditor - } - - // JUnitDoclet begin javadoc_method view() - /** - * Method testView is testing view - * @see CH.ifa.draw.util.UndoableCommand#view() - */ - // JUnitDoclet end javadoc_method view() - public void testView() throws Exception { - // JUnitDoclet begin method view - // JUnitDoclet end method view - } - - // JUnitDoclet begin javadoc_method figureSelectionChanged() - /** - * Method testFigureSelectionChanged is testing figureSelectionChanged - * @see CH.ifa.draw.util.UndoableCommand#figureSelectionChanged(CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method figureSelectionChanged() - public void testFigureSelectionChanged() throws Exception { - // JUnitDoclet begin method figureSelectionChanged - // JUnitDoclet end method figureSelectionChanged - } - - // JUnitDoclet begin javadoc_method setUndoActivity() - /** - * Method testSetGetUndoActivity is testing setUndoActivity - * and getUndoActivity together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoableCommand#setUndoActivity(CH.ifa.draw.util.Undoable) - * @see CH.ifa.draw.util.UndoableCommand#getUndoActivity() - */ - // JUnitDoclet end javadoc_method setUndoActivity() - public void testSetGetUndoActivity() throws Exception { - // JUnitDoclet begin method setUndoActivity getUndoActivity - // Do nothing: UndoCommand.setUndoActivity() is a no-op - // JUnitDoclet end method setUndoActivity getUndoActivity - } - - // JUnitDoclet begin javadoc_method addCommandListener() - /** - * Method testAddCommandListener is testing addCommandListener - * @see CH.ifa.draw.util.UndoableCommand#addCommandListener(CH.ifa.draw.util.CommandListener) - */ - // JUnitDoclet end javadoc_method addCommandListener() - public void testAddCommandListener() throws Exception { - // JUnitDoclet begin method addCommandListener - // JUnitDoclet end method addCommandListener - } - - // JUnitDoclet begin javadoc_method removeCommandListener() - /** - * Method testRemoveCommandListener is testing removeCommandListener - * @see CH.ifa.draw.util.UndoableCommand#removeCommandListener(CH.ifa.draw.util.CommandListener) - */ - // JUnitDoclet end javadoc_method removeCommandListener() - public void testRemoveCommandListener() throws Exception { - // JUnitDoclet begin method removeCommandListener - // JUnitDoclet end method removeCommandListener - } - - // JUnitDoclet begin javadoc_method createEventDispatcher() - /** - * Method testCreateEventDispatcher is testing createEventDispatcher - * @see CH.ifa.draw.util.UndoableCommand#createEventDispatcher() - */ - // JUnitDoclet end javadoc_method createEventDispatcher() - public void testCreateEventDispatcher() throws Exception { - // JUnitDoclet begin method createEventDispatcher - // JUnitDoclet end method createEventDispatcher - } - - // JUnitDoclet begin javadoc_method commandExecuted() - /** - * Method testCommandExecuted is testing commandExecuted - * @see CH.ifa.draw.util.UndoableCommand#commandExecuted(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecuted() - public void testCommandExecuted() throws Exception { - // JUnitDoclet begin method commandExecuted - // JUnitDoclet end method commandExecuted - } - - // JUnitDoclet begin javadoc_method commandExecutable() - /** - * Method testCommandExecutable is testing commandExecutable - * @see CH.ifa.draw.util.UndoableCommand#commandExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecutable() - public void testCommandExecutable() throws Exception { - // JUnitDoclet begin method commandExecutable - // JUnitDoclet end method commandExecutable - } - - // JUnitDoclet begin javadoc_method commandNotExecutable() - /** - * Method testCommandNotExecutable is testing commandNotExecutable - * @see CH.ifa.draw.util.UndoableCommand#commandNotExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandNotExecutable() - public void testCommandNotExecutable() throws Exception { - // JUnitDoclet begin method commandNotExecutable - // JUnitDoclet end method commandNotExecutable - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/UndoableHandleTest.java b/JHotDraw/src/CH/ifa/draw/test/util/UndoableHandleTest.java deleted file mode 100644 index fae47d73f..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/UndoableHandleTest.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import java.awt.Point; - -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.standard.BoxHandleKit; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.UndoableHandle; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoableHandleTest is generated by - * JUnitDoclet to hold the tests for UndoableHandle. - * @see CH.ifa.draw.util.UndoableHandle - */ -// JUnitDoclet end javadoc_class -public class UndoableHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoableHandle undoablehandle; - // JUnitDoclet end class - - /** - * Constructor UndoableHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoableHandleTest(String name) { - // JUnitDoclet begin method UndoableHandleTest - super(name); - // JUnitDoclet end method UndoableHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public UndoableHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new UndoableHandle(BoxHandleKit.south(new RectangleFigure(new Point(44, 44), new Point(88, 88)))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoablehandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoablehandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see CH.ifa.draw.util.UndoableHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see CH.ifa.draw.util.UndoableHandle#invokeStart(int, int, CH.ifa.draw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see CH.ifa.draw.util.UndoableHandle#invokeStep(int, int, CH.ifa.draw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see CH.ifa.draw.util.UndoableHandle#invokeEnd(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method owner() - /** - * Method testOwner is testing owner - * @see CH.ifa.draw.util.UndoableHandle#owner() - */ - // JUnitDoclet end javadoc_method owner() - public void testOwner() throws Exception { - // JUnitDoclet begin method owner - // JUnitDoclet end method owner - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see CH.ifa.draw.util.UndoableHandle#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see CH.ifa.draw.util.UndoableHandle#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see CH.ifa.draw.util.UndoableHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method getDrawingView() - /** - * Method testGetDrawingView is testing getDrawingView - * @see CH.ifa.draw.util.UndoableHandle#getDrawingView() - */ - // JUnitDoclet end javadoc_method getDrawingView() - public void testGetDrawingView() throws Exception { - // JUnitDoclet begin method getDrawingView - // JUnitDoclet end method getDrawingView - } - - // JUnitDoclet begin javadoc_method setUndoActivity() - /** - * Method testSetGetUndoActivity is testing setUndoActivity - * and getUndoActivity together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoableHandle#setUndoActivity(CH.ifa.draw.util.Undoable) - * @see CH.ifa.draw.util.UndoableHandle#getUndoActivity() - */ - // JUnitDoclet end javadoc_method setUndoActivity() - public void testSetGetUndoActivity() throws Exception { - // JUnitDoclet begin method setUndoActivity getUndoActivity - // Do nothing: UndoableHandle.setUndoActivity() is a no-op. - // JUnitDoclet end method setUndoActivity getUndoActivity - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/UndoableToolTest.java b/JHotDraw/src/CH/ifa/draw/test/util/UndoableToolTest.java deleted file mode 100644 index 2f2a79259..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/UndoableToolTest.java +++ /dev/null @@ -1,374 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.contrib.DiamondFigure; -import CH.ifa.draw.standard.CreationTool; -import CH.ifa.draw.test.JHDTestCase; -import CH.ifa.draw.util.UndoableTool; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoableToolTest is generated by - * JUnitDoclet to hold the tests for UndoableTool. - * @see CH.ifa.draw.util.UndoableTool - */ -// JUnitDoclet end javadoc_class -public class UndoableToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoableTool undoabletool; - // JUnitDoclet end class - - /** - * Constructor UndoableToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoableToolTest(String name) { - // JUnitDoclet begin method UndoableToolTest - super(name); - // JUnitDoclet end method UndoableToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.UndoableTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.UndoableTool(new UndoableTool(new CreationTool(getDrawingEditor(), new DiamondFigure()))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoabletool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoabletool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see CH.ifa.draw.util.UndoableTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see CH.ifa.draw.util.UndoableTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see CH.ifa.draw.util.UndoableTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see CH.ifa.draw.util.UndoableTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see CH.ifa.draw.util.UndoableTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see CH.ifa.draw.util.UndoableTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method keyDown() - /** - * Method testKeyDown is testing keyDown - * @see CH.ifa.draw.util.UndoableTool#keyDown(java.awt.event.KeyEvent, int) - */ - // JUnitDoclet end javadoc_method keyDown() - public void testKeyDown() throws Exception { - // JUnitDoclet begin method keyDown - // JUnitDoclet end method keyDown - } - - // JUnitDoclet begin javadoc_method isActive() - /** - * Method testIsActive is testing isActive - * @see CH.ifa.draw.util.UndoableTool#isActive() - */ - // JUnitDoclet end javadoc_method isActive() - public void testIsActive() throws Exception { - // JUnitDoclet begin method isActive - // JUnitDoclet end method isActive - } - - // JUnitDoclet begin javadoc_method setUsable() - /** - * Method testSetIsUsable is testing setUsable - * and isUsable together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoableTool#setUsable(boolean) - * @see CH.ifa.draw.util.UndoableTool#isUsable() - */ - // JUnitDoclet end javadoc_method setUsable() - public void testSetIsUsable() throws Exception { - // JUnitDoclet begin method setUsable isUsable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoabletool.setUsable(tests[i]); - assertEquals(tests[i], undoabletool.isUsable()); - } - // JUnitDoclet end method setUsable isUsable - } - - // JUnitDoclet begin javadoc_method setEnabled() - /** - * Method testSetIsEnabled is testing setEnabled - * and isEnabled together by setting some value - * and verifying it by reading. - * @see CH.ifa.draw.util.UndoableTool#setEnabled(boolean) - * @see CH.ifa.draw.util.UndoableTool#isEnabled() - */ - // JUnitDoclet end javadoc_method setEnabled() - public void testSetIsEnabled() throws Exception { - // JUnitDoclet begin method setEnabled isEnabled - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoabletool.setEnabled(tests[i]); - assertEquals(tests[i], undoabletool.isEnabled()); - } - // JUnitDoclet end method setEnabled isEnabled - } - - // JUnitDoclet begin javadoc_method editor() - /** - * Method testEditor is testing editor - * @see CH.ifa.draw.util.UndoableTool#editor() - */ - // JUnitDoclet end javadoc_method editor() - public void testEditor() throws Exception { - // JUnitDoclet begin method editor - // JUnitDoclet end method editor - } - - // JUnitDoclet begin javadoc_method view() - /** - * Method testView is testing view - * @see CH.ifa.draw.util.UndoableTool#view() - */ - // JUnitDoclet end javadoc_method view() - public void testView() throws Exception { - // JUnitDoclet begin method view - // JUnitDoclet end method view - } - - // JUnitDoclet begin javadoc_method setUndoActivity() - /** - * @see CH.ifa.draw.util.UndoableTool#setUndoActivity(CH.ifa.draw.util.Undoable) - * @see CH.ifa.draw.util.UndoableTool#getUndoActivity() - */ - // JUnitDoclet end javadoc_method setUndoActivity() - public void testSetGetUndoActivity() throws Exception { - // JUnitDoclet begin method setUndoActivity getUndoActivity - // Do nothing: UndoableTool.setUndoActivity is a no-op - // JUnitDoclet end method setUndoActivity getUndoActivity - } - - // JUnitDoclet begin javadoc_method toolUsable() - /** - * Method testToolUsable is testing toolUsable - * @see CH.ifa.draw.util.UndoableTool#toolUsable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolUsable() - public void testToolUsable() throws Exception { - // JUnitDoclet begin method toolUsable - // JUnitDoclet end method toolUsable - } - - // JUnitDoclet begin javadoc_method toolUnusable() - /** - * Method testToolUnusable is testing toolUnusable - * @see CH.ifa.draw.util.UndoableTool#toolUnusable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolUnusable() - public void testToolUnusable() throws Exception { - // JUnitDoclet begin method toolUnusable - // JUnitDoclet end method toolUnusable - } - - // JUnitDoclet begin javadoc_method toolActivated() - /** - * Method testToolActivated is testing toolActivated - * @see CH.ifa.draw.util.UndoableTool#toolActivated(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolActivated() - public void testToolActivated() throws Exception { - // JUnitDoclet begin method toolActivated - // JUnitDoclet end method toolActivated - } - - // JUnitDoclet begin javadoc_method toolDeactivated() - /** - * Method testToolDeactivated is testing toolDeactivated - * @see CH.ifa.draw.util.UndoableTool#toolDeactivated(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolDeactivated() - public void testToolDeactivated() throws Exception { - // JUnitDoclet begin method toolDeactivated - // JUnitDoclet end method toolDeactivated - } - - // JUnitDoclet begin javadoc_method toolEnabled() - /** - * Method testToolEnabled is testing toolEnabled - * @see CH.ifa.draw.util.UndoableTool#toolEnabled(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolEnabled() - public void testToolEnabled() throws Exception { - // JUnitDoclet begin method toolEnabled - // JUnitDoclet end method toolEnabled - } - - // JUnitDoclet begin javadoc_method toolDisabled() - /** - * Method testToolDisabled is testing toolDisabled - * @see CH.ifa.draw.util.UndoableTool#toolDisabled(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolDisabled() - public void testToolDisabled() throws Exception { - // JUnitDoclet begin method toolDisabled - // JUnitDoclet end method toolDisabled - } - - // JUnitDoclet begin javadoc_method addToolListener() - /** - * Method testAddToolListener is testing addToolListener - * @see CH.ifa.draw.util.UndoableTool#addToolListener(CH.ifa.draw.framework.ToolListener) - */ - // JUnitDoclet end javadoc_method addToolListener() - public void testAddToolListener() throws Exception { - // JUnitDoclet begin method addToolListener - // JUnitDoclet end method addToolListener - } - - // JUnitDoclet begin javadoc_method removeToolListener() - /** - * Method testRemoveToolListener is testing removeToolListener - * @see CH.ifa.draw.util.UndoableTool#removeToolListener(CH.ifa.draw.framework.ToolListener) - */ - // JUnitDoclet end javadoc_method removeToolListener() - public void testRemoveToolListener() throws Exception { - // JUnitDoclet begin method removeToolListener - // JUnitDoclet end method removeToolListener - } - - // JUnitDoclet begin javadoc_method createEventDispatcher() - /** - * Method testCreateEventDispatcher is testing createEventDispatcher - * @see CH.ifa.draw.util.UndoableTool#createEventDispatcher() - */ - // JUnitDoclet end javadoc_method createEventDispatcher() - public void testCreateEventDispatcher() throws Exception { - // JUnitDoclet begin method createEventDispatcher - // JUnitDoclet end method createEventDispatcher - } - - // JUnitDoclet begin javadoc_method getActiveView() - /** - * Method testGetActiveView is testing getActiveView - * @see CH.ifa.draw.util.UndoableTool#getActiveView() - */ - // JUnitDoclet end javadoc_method getActiveView() - public void testGetActiveView() throws Exception { - // JUnitDoclet begin method getActiveView - // JUnitDoclet end method getActiveView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/UtilSuite.java b/JHotDraw/src/CH/ifa/draw/test/util/UtilSuite.java deleted file mode 100644 index 99890543b..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/UtilSuite.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite UtilSuite -*/ -// JUnitDoclet end javadoc_class -public class UtilSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.util"); - - suite.addTestSuite(CH.ifa.draw.test.util.ReverseListEnumeratorTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.StandardVersionControlStrategyTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.VersionManagementTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.UndoableHandleTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.UndoRedoActivityTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.UndoableAdapterTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.UndoableToolTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.RedoCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.UndoCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.UndoableCommandTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.GraphLayoutTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.BoundsTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.StorageFormatManagerTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.SerializationStorageFormatTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.StandardStorageFormatTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.PaletteLayoutTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.PaletteIconTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.IconkitTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.GeomTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.FloatingTextFieldTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.FillerTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.CommandMenuTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.CommandChoiceTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.CommandButtonTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.StorableInputTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.StorableOutputTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.UndoManagerTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.ColorMapTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.ClipboardTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/VersionManagementTest.java b/JHotDraw/src/CH/ifa/draw/test/util/VersionManagementTest.java deleted file mode 100644 index 13adbf9e4..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/VersionManagementTest.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util; - -// JUnitDoclet begin import -import CH.ifa.draw.util.VersionManagement; -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase VersionManagementTest is generated by - * JUnitDoclet to hold the tests for VersionManagement. - * @see CH.ifa.draw.util.VersionManagement - */ -// JUnitDoclet end javadoc_class -public class VersionManagementTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private VersionManagement versionmanagement; - // JUnitDoclet end class - - /** - * Constructor VersionManagementTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public VersionManagementTest(String name) { - // JUnitDoclet begin method VersionManagementTest - super(name); - // JUnitDoclet end method VersionManagementTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.VersionManagement createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.VersionManagement(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - versionmanagement = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - versionmanagement = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getJHotDrawVersion() - /** - * Method testGetJHotDrawVersion is testing getJHotDrawVersion - * @see CH.ifa.draw.util.VersionManagement#getJHotDrawVersion() - */ - // JUnitDoclet end javadoc_method getJHotDrawVersion() - public void testGetJHotDrawVersion() throws Exception { - // JUnitDoclet begin method getJHotDrawVersion - // JUnitDoclet end method getJHotDrawVersion - } - - // JUnitDoclet begin javadoc_method getPackageVersion() - /** - * Method testGetPackageVersion is testing getPackageVersion - * @see CH.ifa.draw.util.VersionManagement#getPackageVersion(java.lang.Package) - */ - // JUnitDoclet end javadoc_method getPackageVersion() - public void testGetPackageVersion() throws Exception { - // JUnitDoclet begin method getPackageVersion - // JUnitDoclet end method getPackageVersion - } - - // JUnitDoclet begin javadoc_method isCompatibleVersion() - /** - * Method testIsCompatibleVersion is testing isCompatibleVersion - * @see CH.ifa.draw.util.VersionManagement#isCompatibleVersion(java.lang.String) - */ - // JUnitDoclet end javadoc_method isCompatibleVersion() - public void testIsCompatibleVersion() throws Exception { - // JUnitDoclet begin method isCompatibleVersion - // JUnitDoclet end method isCompatibleVersion - } - - // JUnitDoclet begin javadoc_method readVersionFromFile() - /** - * Method testReadVersionFromFile is testing readVersionFromFile - * @see CH.ifa.draw.util.VersionManagement#readVersionFromFile(java.lang.String, java.lang.String) - */ - // JUnitDoclet end javadoc_method readVersionFromFile() - public void testReadVersionFromFile() throws Exception { - // JUnitDoclet begin method readVersionFromFile - // JUnitDoclet end method readVersionFromFile - } - - // JUnitDoclet begin javadoc_method normalizePackageName() - /** - * Method testNormalizePackageName is testing normalizePackageName - * @see CH.ifa.draw.util.VersionManagement#normalizePackageName(java.lang.String) - */ - // JUnitDoclet end javadoc_method normalizePackageName() - public void testNormalizePackageName() throws Exception { - // JUnitDoclet begin method normalizePackageName - // JUnitDoclet end method normalizePackageName - } - - // JUnitDoclet begin javadoc_method extractVersionInfo() - /** - * Method testExtractVersionInfo is testing extractVersionInfo - * @see CH.ifa.draw.util.VersionManagement#extractVersionInfo(java.lang.String) - */ - // JUnitDoclet end javadoc_method extractVersionInfo() - public void testExtractVersionInfo() throws Exception { - // JUnitDoclet begin method extractVersionInfo - // JUnitDoclet end method extractVersionInfo - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/AllTests.java deleted file mode 100644 index 61039dd7c..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/AllTests.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util.collections.jdk11; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.util.collections.jdk11"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(CollectionsFactoryJDK11Test.class)); - suite.addTest(new TestSuite(IteratorWrapperTest.class)); - suite.addTest(new TestSuite(ListWrapperTest.class)); - suite.addTest(new TestSuite(MapWrapperTest.class)); - suite.addTest(new TestSuite(SetWrapperTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/CollectionsFactoryJDK11Test.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/CollectionsFactoryJDK11Test.java deleted file mode 100644 index da8811290..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/CollectionsFactoryJDK11Test.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util.collections.jdk11; - -import CH.ifa.draw.util.collections.jdk11.CollectionsFactoryJDK11; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CollectionsFactoryJDK11Test is generated by - * JUnitDoclet to hold the tests for CollectionsFactoryJDK11. - * @see CH.ifa.draw.util.collections.jdk11.CollectionsFactoryJDK11 - */ -// JUnitDoclet end javadoc_class -public class CollectionsFactoryJDK11Test -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CollectionsFactoryJDK11 collectionsfactoryjdk11; - // JUnitDoclet end class - - /** - * Constructor CollectionsFactoryJDK11Test is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CollectionsFactoryJDK11Test(String name) { - // JUnitDoclet begin method CollectionsFactoryJDK11Test - super(name); - // JUnitDoclet end method CollectionsFactoryJDK11Test - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.collections.jdk11.CollectionsFactoryJDK11 createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.collections.jdk11.CollectionsFactoryJDK11(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - collectionsfactoryjdk11 = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - collectionsfactoryjdk11 = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createList() - /** - * Method testCreateList is testing createList - * @see CH.ifa.draw.util.collections.jdk11.CollectionsFactoryJDK11#createList() - */ - // JUnitDoclet end javadoc_method createList() - public void testCreateList() throws Exception { - // JUnitDoclet begin method createList - // JUnitDoclet end method createList - } - - // JUnitDoclet begin javadoc_method createMap() - /** - * Method testCreateMap is testing createMap - * @see CH.ifa.draw.util.collections.jdk11.CollectionsFactoryJDK11#createMap() - */ - // JUnitDoclet end javadoc_method createMap() - public void testCreateMap() throws Exception { - // JUnitDoclet begin method createMap - // JUnitDoclet end method createMap - } - - // JUnitDoclet begin javadoc_method createSet() - /** - * Method testCreateSet is testing createSet - * @see CH.ifa.draw.util.collections.jdk11.CollectionsFactoryJDK11#createSet() - */ - // JUnitDoclet end javadoc_method createSet() - public void testCreateSet() throws Exception { - // JUnitDoclet begin method createSet - // JUnitDoclet end method createSet - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/IteratorWrapperTest.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/IteratorWrapperTest.java deleted file mode 100644 index 90492ef31..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/IteratorWrapperTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util.collections.jdk11; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import CH.ifa.draw.figures.RectangleFigure; -import CH.ifa.draw.figures.PolyLineFigure; -import CH.ifa.draw.util.collections.jdk11.IteratorWrapper; - -import java.util.Vector; -import java.awt.*; -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestCase IteratorWrapperTest is generated by -* JUnitDoclet to hold the tests for IteratorWrapper. -* @see CH.ifa.draw.util.collections.jdk11.IteratorWrapper -*/ -// JUnitDoclet end javadoc_class -public class IteratorWrapperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private IteratorWrapper iteratorwrapper; - // JUnitDoclet end class - - /** - * Constructor IteratorWrapperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public IteratorWrapperTest(String name) { - // JUnitDoclet begin method IteratorWrapperTest - super(name); - // JUnitDoclet end method IteratorWrapperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.collections.jdk11.IteratorWrapper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Vector v = new Vector(); - v.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - v.add(new PolyLineFigure(20, 20)); - v.add(new RectangleFigure(new Point(100, 10), new Point(150, 100))); - return new CH.ifa.draw.util.collections.jdk11.IteratorWrapper(v.elements()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - iteratorwrapper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - iteratorwrapper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNext() - /** - * Method testHasNext is testing hasNext - * @see CH.ifa.draw.util.collections.jdk11.IteratorWrapper#hasNext() - */ - // JUnitDoclet end javadoc_method hasNext() - public void testHasNext() throws Exception { - // JUnitDoclet begin method hasNext - // JUnitDoclet end method hasNext - } - - // JUnitDoclet begin javadoc_method next() - /** - * Method testNext is testing next - * @see CH.ifa.draw.util.collections.jdk11.IteratorWrapper#next() - */ - // JUnitDoclet end javadoc_method next() - public void testNext() throws Exception { - // JUnitDoclet begin method next - // JUnitDoclet end method next - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.util.collections.jdk11.IteratorWrapper#remove() - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/Jdk11Suite.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/Jdk11Suite.java deleted file mode 100644 index b08da45e3..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/Jdk11Suite.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util.collections.jdk11; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite Jdk11Suite -*/ -// JUnitDoclet end javadoc_class -public class Jdk11Suite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.util.collections.jdk11"); - - suite.addTestSuite(CH.ifa.draw.test.util.collections.jdk11.SetWrapperTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.collections.jdk11.CollectionsFactoryJDK11Test.class); - suite.addTestSuite(CH.ifa.draw.test.util.collections.jdk11.MapWrapperTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.collections.jdk11.ListWrapperTest.class); - suite.addTestSuite(CH.ifa.draw.test.util.collections.jdk11.IteratorWrapperTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/ListWrapperTest.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/ListWrapperTest.java deleted file mode 100644 index 00ba968de..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/ListWrapperTest.java +++ /dev/null @@ -1,298 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util.collections.jdk11; - -import CH.ifa.draw.util.collections.jdk11.ListWrapper; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ListWrapperTest is generated by - * JUnitDoclet to hold the tests for ListWrapper. - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper - */ -// JUnitDoclet end javadoc_class -public class ListWrapperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ListWrapper listwrapper; - // JUnitDoclet end class - - /** - * Constructor ListWrapperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ListWrapperTest(String name) { - // JUnitDoclet begin method ListWrapperTest - super(name); - // JUnitDoclet end method ListWrapperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.collections.jdk11.ListWrapper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.collections.jdk11.ListWrapper(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - listwrapper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - listwrapper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method size() - /** - * Method testSize is testing size - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#size() - */ - // JUnitDoclet end javadoc_method size() - public void testSize() throws Exception { - // JUnitDoclet begin method size - // JUnitDoclet end method size - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method contains() - /** - * Method testContains is testing contains - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#contains(java.lang.Object) - */ - // JUnitDoclet end javadoc_method contains() - public void testContains() throws Exception { - // JUnitDoclet begin method contains - // JUnitDoclet end method contains - } - - // JUnitDoclet begin javadoc_method iterator() - /** - * Method testIterator is testing iterator - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#iterator() - */ - // JUnitDoclet end javadoc_method iterator() - public void testIterator() throws Exception { - // JUnitDoclet begin method iterator - // JUnitDoclet end method iterator - } - - // JUnitDoclet begin javadoc_method toArray() - /** - * Method testToArray is testing toArray - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#toArray() - */ - // JUnitDoclet end javadoc_method toArray() - public void testToArray() throws Exception { - // JUnitDoclet begin method toArray - // JUnitDoclet end method toArray - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#add(java.lang.Object) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#remove(java.lang.Object) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method containsAll() - /** - * Method testContainsAll is testing containsAll - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#containsAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method containsAll() - public void testContainsAll() throws Exception { - // JUnitDoclet begin method containsAll - // JUnitDoclet end method containsAll - } - - // JUnitDoclet begin javadoc_method addAll() - /** - * Method testAddAll is testing addAll - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#addAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addAll() - public void testAddAll() throws Exception { - // JUnitDoclet begin method addAll - // JUnitDoclet end method addAll - } - - // JUnitDoclet begin javadoc_method removeAll() - /** - * Method testRemoveAll is testing removeAll - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#removeAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method removeAll() - public void testRemoveAll() throws Exception { - // JUnitDoclet begin method removeAll - // JUnitDoclet end method removeAll - } - - // JUnitDoclet begin javadoc_method retainAll() - /** - * Method testRetainAll is testing retainAll - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#retainAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method retainAll() - public void testRetainAll() throws Exception { - // JUnitDoclet begin method retainAll - // JUnitDoclet end method retainAll - } - - // JUnitDoclet begin javadoc_method clear() - /** - * Method testClear is testing clear - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#clear() - */ - // JUnitDoclet end javadoc_method clear() - public void testClear() throws Exception { - // JUnitDoclet begin method clear - // JUnitDoclet end method clear - } - - // JUnitDoclet begin javadoc_method get() - /** - * Method testGet is testing get - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#get(int) - */ - // JUnitDoclet end javadoc_method get() - public void testGet() throws Exception { - // JUnitDoclet begin method get - // JUnitDoclet end method get - } - - // JUnitDoclet begin javadoc_method set() - /** - * Method testSet is testing set - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#set(int, java.lang.Object) - */ - // JUnitDoclet end javadoc_method set() - public void testSet() throws Exception { - // JUnitDoclet begin method set - // JUnitDoclet end method set - } - - // JUnitDoclet begin javadoc_method indexOf() - /** - * Method testIndexOf is testing indexOf - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#indexOf(java.lang.Object) - */ - // JUnitDoclet end javadoc_method indexOf() - public void testIndexOf() throws Exception { - // JUnitDoclet begin method indexOf - // JUnitDoclet end method indexOf - } - - // JUnitDoclet begin javadoc_method lastIndexOf() - /** - * Method testLastIndexOf is testing lastIndexOf - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#lastIndexOf(java.lang.Object) - */ - // JUnitDoclet end javadoc_method lastIndexOf() - public void testLastIndexOf() throws Exception { - // JUnitDoclet begin method lastIndexOf - // JUnitDoclet end method lastIndexOf - } - - // JUnitDoclet begin javadoc_method listIterator() - /** - * Method testListIterator is testing listIterator - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#listIterator() - */ - // JUnitDoclet end javadoc_method listIterator() - public void testListIterator() throws Exception { - // JUnitDoclet begin method listIterator - // JUnitDoclet end method listIterator - } - - // JUnitDoclet begin javadoc_method subList() - /** - * Method testSubList is testing subList - * @see CH.ifa.draw.util.collections.jdk11.ListWrapper#subList(int, int) - */ - // JUnitDoclet end javadoc_method subList() - public void testSubList() throws Exception { - // JUnitDoclet begin method subList - // JUnitDoclet end method subList - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/MapWrapperTest.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/MapWrapperTest.java deleted file mode 100644 index a71f6f31e..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/MapWrapperTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util.collections.jdk11; - -import CH.ifa.draw.util.collections.jdk11.MapWrapper; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MapWrapperTest is generated by - * JUnitDoclet to hold the tests for MapWrapper. - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper - */ -// JUnitDoclet end javadoc_class -public class MapWrapperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MapWrapper mapwrapper; - // JUnitDoclet end class - - /** - * Constructor MapWrapperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MapWrapperTest(String name) { - // JUnitDoclet begin method MapWrapperTest - super(name); - // JUnitDoclet end method MapWrapperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.collections.jdk11.MapWrapper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.collections.jdk11.MapWrapper(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - mapwrapper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - mapwrapper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method size() - /** - * Method testSize is testing size - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#size() - */ - // JUnitDoclet end javadoc_method size() - public void testSize() throws Exception { - // JUnitDoclet begin method size - // JUnitDoclet end method size - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method containsKey() - /** - * Method testContainsKey is testing containsKey - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#containsKey(java.lang.Object) - */ - // JUnitDoclet end javadoc_method containsKey() - public void testContainsKey() throws Exception { - // JUnitDoclet begin method containsKey - // JUnitDoclet end method containsKey - } - - // JUnitDoclet begin javadoc_method containsValue() - /** - * Method testContainsValue is testing containsValue - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#containsValue(java.lang.Object) - */ - // JUnitDoclet end javadoc_method containsValue() - public void testContainsValue() throws Exception { - // JUnitDoclet begin method containsValue - // JUnitDoclet end method containsValue - } - - // JUnitDoclet begin javadoc_method get() - /** - * Method testGet is testing get - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#get(java.lang.Object) - */ - // JUnitDoclet end javadoc_method get() - public void testGet() throws Exception { - // JUnitDoclet begin method get - // JUnitDoclet end method get - } - - // JUnitDoclet begin javadoc_method put() - /** - * Method testPut is testing put - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#put(java.lang.Object, java.lang.Object) - */ - // JUnitDoclet end javadoc_method put() - public void testPut() throws Exception { - // JUnitDoclet begin method put - // JUnitDoclet end method put - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#remove(java.lang.Object) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method putAll() - /** - * Method testPutAll is testing putAll - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#putAll(java.util.Map) - */ - // JUnitDoclet end javadoc_method putAll() - public void testPutAll() throws Exception { - // JUnitDoclet begin method putAll - // JUnitDoclet end method putAll - } - - // JUnitDoclet begin javadoc_method clear() - /** - * Method testClear is testing clear - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#clear() - */ - // JUnitDoclet end javadoc_method clear() - public void testClear() throws Exception { - // JUnitDoclet begin method clear - // JUnitDoclet end method clear - } - - // JUnitDoclet begin javadoc_method keySet() - /** - * Method testKeySet is testing keySet - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#keySet() - */ - // JUnitDoclet end javadoc_method keySet() - public void testKeySet() throws Exception { - // JUnitDoclet begin method keySet - // JUnitDoclet end method keySet - } - - // JUnitDoclet begin javadoc_method values() - /** - * Method testValues is testing values - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#values() - */ - // JUnitDoclet end javadoc_method values() - public void testValues() throws Exception { - // JUnitDoclet begin method values - // JUnitDoclet end method values - } - - // JUnitDoclet begin javadoc_method entrySet() - /** - * Method testEntrySet is testing entrySet - * @see CH.ifa.draw.util.collections.jdk11.MapWrapper#entrySet() - */ - // JUnitDoclet end javadoc_method entrySet() - public void testEntrySet() throws Exception { - // JUnitDoclet begin method entrySet - // JUnitDoclet end method entrySet - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/SetWrapperTest.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/SetWrapperTest.java deleted file mode 100644 index 6dfa75203..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk11/SetWrapperTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util.collections.jdk11; - -import CH.ifa.draw.util.collections.jdk11.SetWrapper; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SetWrapperTest is generated by - * JUnitDoclet to hold the tests for SetWrapper. - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper - */ -// JUnitDoclet end javadoc_class -public class SetWrapperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SetWrapper setwrapper; - // JUnitDoclet end class - - /** - * Constructor SetWrapperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SetWrapperTest(String name) { - // JUnitDoclet begin method SetWrapperTest - super(name); - // JUnitDoclet end method SetWrapperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.collections.jdk11.SetWrapper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.collections.jdk11.SetWrapper(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - setwrapper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - setwrapper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method size() - /** - * Method testSize is testing size - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#size() - */ - // JUnitDoclet end javadoc_method size() - public void testSize() throws Exception { - // JUnitDoclet begin method size - // JUnitDoclet end method size - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method contains() - /** - * Method testContains is testing contains - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#contains(java.lang.Object) - */ - // JUnitDoclet end javadoc_method contains() - public void testContains() throws Exception { - // JUnitDoclet begin method contains - // JUnitDoclet end method contains - } - - // JUnitDoclet begin javadoc_method iterator() - /** - * Method testIterator is testing iterator - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#iterator() - */ - // JUnitDoclet end javadoc_method iterator() - public void testIterator() throws Exception { - // JUnitDoclet begin method iterator - // JUnitDoclet end method iterator - } - - // JUnitDoclet begin javadoc_method toArray() - /** - * Method testToArray is testing toArray - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#toArray() - */ - // JUnitDoclet end javadoc_method toArray() - public void testToArray() throws Exception { - // JUnitDoclet begin method toArray - // JUnitDoclet end method toArray - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#add(java.lang.Object) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#remove(java.lang.Object) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method containsAll() - /** - * Method testContainsAll is testing containsAll - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#containsAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method containsAll() - public void testContainsAll() throws Exception { - // JUnitDoclet begin method containsAll - // JUnitDoclet end method containsAll - } - - // JUnitDoclet begin javadoc_method addAll() - /** - * Method testAddAll is testing addAll - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#addAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addAll() - public void testAddAll() throws Exception { - // JUnitDoclet begin method addAll - // JUnitDoclet end method addAll - } - - // JUnitDoclet begin javadoc_method retainAll() - /** - * Method testRetainAll is testing retainAll - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#retainAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method retainAll() - public void testRetainAll() throws Exception { - // JUnitDoclet begin method retainAll - // JUnitDoclet end method retainAll - } - - // JUnitDoclet begin javadoc_method removeAll() - /** - * Method testRemoveAll is testing removeAll - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#removeAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method removeAll() - public void testRemoveAll() throws Exception { - // JUnitDoclet begin method removeAll - // JUnitDoclet end method removeAll - } - - // JUnitDoclet begin javadoc_method clear() - /** - * Method testClear is testing clear - * @see CH.ifa.draw.util.collections.jdk11.SetWrapper#clear() - */ - // JUnitDoclet end javadoc_method clear() - public void testClear() throws Exception { - // JUnitDoclet begin method clear - // JUnitDoclet end method clear - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/AllTests.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/AllTests.java deleted file mode 100644 index 1220398a4..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/AllTests.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util.collections.jdk12; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision$ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for CH.ifa.draw.test.util.collections.jdk12"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(CollectionsFactoryJDK12Test.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/CollectionsFactoryJDK12Test.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/CollectionsFactoryJDK12Test.java deleted file mode 100644 index 1b723004d..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/CollectionsFactoryJDK12Test.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.test.util.collections.jdk12; - -import CH.ifa.draw.util.collections.jdk12.CollectionsFactoryJDK12; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CollectionsFactoryJDK12Test is generated by - * JUnitDoclet to hold the tests for CollectionsFactoryJDK12. - * @see CH.ifa.draw.util.collections.jdk12.CollectionsFactoryJDK12 - */ -// JUnitDoclet end javadoc_class -public class CollectionsFactoryJDK12Test -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CollectionsFactoryJDK12 collectionsfactoryjdk12; - // JUnitDoclet end class - - /** - * Constructor CollectionsFactoryJDK12Test is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CollectionsFactoryJDK12Test(String name) { - // JUnitDoclet begin method CollectionsFactoryJDK12Test - super(name); - // JUnitDoclet end method CollectionsFactoryJDK12Test - } - - /** - * Factory method for instances of the class to be tested. - */ - public CH.ifa.draw.util.collections.jdk12.CollectionsFactoryJDK12 createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CH.ifa.draw.util.collections.jdk12.CollectionsFactoryJDK12(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - collectionsfactoryjdk12 = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - collectionsfactoryjdk12 = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createList() - /** - * Method testCreateList is testing createList - * @see CH.ifa.draw.util.collections.jdk12.CollectionsFactoryJDK12#createList() - */ - // JUnitDoclet end javadoc_method createList() - public void testCreateList() throws Exception { - // JUnitDoclet begin method createList - // JUnitDoclet end method createList - } - - // JUnitDoclet begin javadoc_method createMap() - /** - * Method testCreateMap is testing createMap - * @see CH.ifa.draw.util.collections.jdk12.CollectionsFactoryJDK12#createMap() - */ - // JUnitDoclet end javadoc_method createMap() - public void testCreateMap() throws Exception { - // JUnitDoclet begin method createMap - // JUnitDoclet end method createMap - } - - // JUnitDoclet begin javadoc_method createSet() - /** - * Method testCreateSet is testing createSet - * @see CH.ifa.draw.util.collections.jdk12.CollectionsFactoryJDK12#createSet() - */ - // JUnitDoclet end javadoc_method createSet() - public void testCreateSet() throws Exception { - // JUnitDoclet begin method createSet - // JUnitDoclet end method createSet - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/Jdk12Suite.java b/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/Jdk12Suite.java deleted file mode 100644 index 376200076..000000000 --- a/JHotDraw/src/CH/ifa/draw/test/util/collections/jdk12/Jdk12Suite.java +++ /dev/null @@ -1,55 +0,0 @@ -package CH.ifa.draw.test.util.collections.jdk12; - - - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - - -// JUnitDoclet begin javadoc_class -/** -* TestSuite Jdk12Suite -*/ -// JUnitDoclet end javadoc_class -public class Jdk12Suite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("CH.ifa.draw.test.util.collections.jdk12"); - - suite.addTestSuite(CH.ifa.draw.test.util.collections.jdk12.CollectionsFactoryJDK12Test.class); - - - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/Animatable.java b/JHotDraw/src/CH/ifa/draw/util/Animatable.java deleted file mode 100644 index 0d4b452ad..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/Animatable.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * @(#)Animatable.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -/** - * Animatable defines a simple animation interface - * - * @version <$CURRENT_VERSION$> - */ -public interface Animatable { - /** - * Perform a step of the animation. - */ - void animationStep(); -} diff --git a/JHotDraw/src/CH/ifa/draw/util/Bounds.java b/JHotDraw/src/CH/ifa/draw/util/Bounds.java deleted file mode 100644 index 0e670bf50..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/Bounds.java +++ /dev/null @@ -1,496 +0,0 @@ -/* - * @(#)Bounds.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.awt.Dimension; -import java.awt.geom.Point2D; -import java.awt.geom.Rectangle2D; -import java.io.Serializable; - -/** - * This class is a rectangle with floating point - * dimensions and location. This class provides - * many convenient geometrical methods related to - * rectangles. Basically, this class is like - * java.awt.geom.Rectangle2D with some extra - * functionality. - * - * @author WMG (28.02.1999) - * @version <$CURRENT_VERSION$> - */ -public class Bounds implements Serializable { - - //_________________________________________________________VARIABLES - - protected double _dX1 = 0; - protected double _dY1 = 0; - protected double _dX2 = 0; - protected double _dY2 = 0; - - //______________________________________________________CONSTRUCTORS - - public Bounds(double x, double y) { - _dX1 = x; - _dX2 = x; - _dY1 = y; - _dY2 = y; - } - - public Bounds(double x1, double y1, double x2, double y2) { - _dX1 = Math.min(x1, x2); - _dX2 = Math.max(x1, x2); - _dY1 = Math.min(y1, y2); - _dY2 = Math.max(y1, y2); - } - - public Bounds(Point2D aPoint2D) { - this(aPoint2D.getX(), aPoint2D.getY()); - } - - public Bounds(Point2D firstPoint2D, Point2D secondPoint2D) { - this(firstPoint2D.getX(), firstPoint2D.getY(), - secondPoint2D.getX(), secondPoint2D.getY()); - } - - public Bounds(Bounds aBounds) { - this(aBounds.getLesserX(), aBounds.getLesserY(), - aBounds.getGreaterX(), aBounds.getGreaterY()); - } - - public Bounds(Rectangle2D aRectangle2D) { - _dX1 = aRectangle2D.getMinX(); - _dX2 = aRectangle2D.getMaxX(); - _dY1 = aRectangle2D.getMinY(); - _dY2 = aRectangle2D.getMaxY(); - } - - public Bounds(Point2D centerPoint2D, double dWidth, double dHeight) { - _dX1 = centerPoint2D.getX() - (dWidth / 2.0); - _dX2 = centerPoint2D.getX() + (dWidth / 2.0); - _dY1 = centerPoint2D.getY() - (dHeight / 2.0); - _dY2 = centerPoint2D.getY() + (dHeight / 2.0); - } - - public Bounds(Dimension aDimension) { - this(0, 0, aDimension.width, aDimension.height); - } - - protected Bounds() { - // empty constructor - } - - //____________________________________________________PUBLIC METHODS - - public double getLesserX() { - return _dX1; - } - - public double getGreaterX() { - return _dX2; - } - - public double getLesserY() { - return _dY1; - } - - public double getGreaterY() { - return _dY2; - } - - public double getWest() { - return _dX1; - } - - public double getEast() { - return _dX2; - } - - public double getSouth() { - return _dY1; - } - - public double getNorth() { - return _dY2; - } - - public double getWidth() { - return _dX2 - _dX1; - } - - public double getHeight() { - return _dY2 - _dY1; - } - - public Rectangle2D asRectangle2D() { - return new Rectangle2D.Double(getLesserX(), getLesserY(), - getWidth(), getHeight()); - } - - public void setCenter(Point2D centerPoint2D) { - if(centerPoint2D == null) { - throw new IllegalArgumentException(); - } - Point2D currentCenterPoint2D = getCenter(); - double dDeltaX = centerPoint2D.getX() - currentCenterPoint2D.getX(); - double dDeltaY = centerPoint2D.getY() - currentCenterPoint2D.getY(); - offset(dDeltaX, dDeltaY); - } - - public Point2D getCenter() { - return new Point2D.Double((_dX1 + _dX2) / 2.0, (_dY1 + _dY2) / 2.0); - } - - public void zoomBy(double dRatio) { - double dWidth = _dX2 - _dX1; - double dHeight = _dY2 - _dY1; - double dNewWidth = (dWidth * dRatio); - double dNewHeight = (dHeight * dRatio); - Point2D centerPoint2D = getCenter(); - _dX1 = centerPoint2D.getX() - (dNewWidth / 2.0); - _dY1 = centerPoint2D.getY() - (dNewHeight / 2.0); - _dX2 = centerPoint2D.getX() + (dNewWidth / 2.0); - _dY2 = centerPoint2D.getY() + (dNewHeight / 2.0); - } - - public void shiftBy(int nXPercentage, int nYPercentage) { - double dWidth = _dX2 - _dX1; - double dHeight = _dY2 - _dY1; - double dDeltaX = (dWidth * nXPercentage) / 100.0; - double dDeltaY = (dHeight * nYPercentage) / 100.0; - offset(dDeltaX, dDeltaY); - } - - public void offset(double dDeltaX, double dDeltaY) { - _dX1 += dDeltaX; - _dX2 += dDeltaX; - _dY1 += dDeltaY; - _dY2 += dDeltaY; - } - - /** - * This will cause the bounds to grow until the given ratio - * is satisfied. The Ration is calculated by - * <code> getWidth() / getHeight() </code> - **/ - public void expandToRatio(double dRatio) { - double dCurrentRatio = getWidth() / getHeight(); - if (dCurrentRatio < dRatio) { - double dNewWidth = dRatio * getHeight(); - double dCenterX = (_dX1 + _dX2) / 2.0; - double dDelta = dNewWidth / 2.0; - _dX1 = dCenterX - dDelta; - _dX2 = dCenterX + dDelta; - } - if (dCurrentRatio > dRatio) { - double dNewHeight = getWidth() / dRatio; - double dCenterY = (_dY1 + _dY2) / 2.0; - double dDelta = dNewHeight / 2.0; - _dY1 = dCenterY - dDelta; - _dY2 = dCenterY + dDelta; - } - } - - public void includeXCoordinate(double x) { - _dX1 = min(_dX1, _dX2, x); - _dX2 = max(_dX1, _dX2, x); - } - - public void includeYCoordinate(double y) { - _dY1 = min(_dY1, _dY2, y); - _dY2 = max(_dY1, _dY2, y); - } - - public void includePoint(double x, double y) { - includeXCoordinate(x); - includeYCoordinate(y); - } - - public void includePoint(Point2D aPoint2D) { - includePoint(aPoint2D.getX(), aPoint2D.getY()); - } - - public void includeLine(double x1, double y1, double x2, double y2) { - includePoint(x1, y1); - includePoint(x2, y2); - } - - public void includeLine(Point2D onePoint2D, Point2D twoPoint2D) { - includeLine(onePoint2D.getX(), onePoint2D.getY(), - twoPoint2D.getX(), twoPoint2D.getY()); - } - - public void includeBounds(Bounds aBounds) { - includeXCoordinate(aBounds.getLesserX()); - includeXCoordinate(aBounds.getGreaterX()); - includeYCoordinate(aBounds.getLesserY()); - includeYCoordinate(aBounds.getGreaterY()); - } - - public void includeRectangle2D(Rectangle2D aRectangle2D) { - includeXCoordinate(aRectangle2D.getMinX()); - includeXCoordinate(aRectangle2D.getMaxX()); - includeYCoordinate(aRectangle2D.getMinY()); - includeYCoordinate(aRectangle2D.getMaxY()); - } - - public void intersect(Bounds aBounds) { - _dX1 = Math.max(_dX1, aBounds.getLesserX()); - _dY1 = Math.max(_dY1, aBounds.getLesserY()); - _dX2 = Math.min(_dX2, aBounds.getGreaterX()); - _dY2 = Math.min(_dY2, aBounds.getGreaterY()); - - if (_dX1 > _dX2) { - _dX1 = _dX2; - } - if (_dY1 > _dY2) { - _dY1 = _dY2; - } - } - - public boolean intersectsPoint(double x, double y) { - return ((_dX1 <= x) && (x <= _dX2) && (_dY1 <= y) && (y <= _dY2)); - } - - public boolean intersectsPoint(Point2D aPoint2D) { - return intersectsPoint(aPoint2D.getX(), aPoint2D.getY()); - } - - - public boolean intersectsLine(double x1, double y1, double x2, double y2) { - if (intersectsPoint(x1, y1)) { - return true; - } - if (intersectsPoint(x2, y2)) { - return true; - } - if ((x1 < _dX1) && (x2 < _dX1)) { - return false; - } - if ((x1 > _dX2) && (x2 > _dX2)) { - return false; - } - if ((y1 < _dY1) && (y2 < _dY1)) { - return false; - } - if ((y1 > _dY2) && (y2 > _dY2)) { - return false; - } - if (((_dX1 <= x1) && (x1 <= _dX2)) && ((_dX1 <= x2) && (x2 <= _dX2))) { - return true; - } - if (((_dY1 <= y1) && (y1 <= _dY2)) && ((_dY1 <= y2) && (y2 <= _dY2))) { - return true; - } - - double dSlope = (y2-y1) / (x2-x1); - double _dYIntersectionAtX1 = dSlope * (_dX1 - x1) + y1; - double _dYIntersectionAtX2 = dSlope * (_dX2 - x1) + y1; - double _dXIntersectionAtY1 = (_dY1 - y1) / dSlope + x1; - double _dXIntersectionAtY2 = (_dY2 - y1) / dSlope + x1; - - return (intersectsPoint(_dX1, _dYIntersectionAtX1)) || - (intersectsPoint(_dX2, _dYIntersectionAtX2)) || - (intersectsPoint(_dXIntersectionAtY1, _dY1)) || - (intersectsPoint(_dXIntersectionAtY2, _dY2)); - } - - public boolean intersectsLine(Point2D onePoint2D, Point2D twoPoint2D) { - return intersectsLine(onePoint2D.getX(), onePoint2D.getY(), - twoPoint2D.getX(), twoPoint2D.getY()); - } - - //use K-map to simplify - public boolean intersectsBounds(Bounds aBounds) { - double dLesserX = aBounds.getLesserX(); - double dGreaterX = aBounds.getGreaterX(); - double dLesserY = aBounds.getLesserY(); - double dGreaterY = aBounds.getGreaterY(); - - if (dLesserX < _dX1) { - if (dLesserY < _dY1) { - return ((dGreaterX >= _dX1) && (dGreaterY >= _dY1)); - } - else { - return ((dGreaterX >= _dX1) && (dLesserY <= _dY2)); - } - } - else { - if (dLesserY < _dY1) { - return ((dLesserX <= _dX2) && (dGreaterY >= _dY1)); - } - else { - return ((dLesserX <= _dX2) && (dLesserY <= _dY2)); - } - } - } - - public boolean completelyContainsLine(double x1, double y1, double x2, double y2) { - return (_dX1 > Math.min(x1, x2)) && - (_dX2 < Math.max(x1, x2)) && - (_dY1 > Math.min(y1, y2)) && - (_dY2 < Math.max(y1, y2)); - } - - public boolean isCompletelyInside(Bounds aBounds) { - return (_dX1 > aBounds.getLesserX()) && - (_dX2 < aBounds.getGreaterX()) && - (_dY1 > aBounds.getLesserY()) && - (_dY2 < aBounds.getGreaterY()); - } - - public Point2D[] cropLine(double x1, double y1, double x2, double y2) { - if (!intersectsLine(x1, y1, x2, y2)) { - return null; - } - - Point2D[] resultLine = new Point2D[2]; - Point2D beginPoint2D = new Point2D.Double(x1, y1); - Point2D endPoint2D = new Point2D.Double(x2, y2); - - if (beginPoint2D.getX() == endPoint2D.getX()) { - if (beginPoint2D.getY() > _dY2) { - beginPoint2D.setLocation(beginPoint2D.getX(), _dY2); - } - if (endPoint2D.getY() > _dY2) { - endPoint2D.setLocation(endPoint2D.getX(), _dY2); - } - if (beginPoint2D.getY() < _dY1) { - beginPoint2D.setLocation(beginPoint2D.getX(), _dY1); - } - if (endPoint2D.getY() < _dY1) { - endPoint2D.setLocation(endPoint2D.getX(), _dY1); - } - } - else if (beginPoint2D.getY() == endPoint2D.getY()) { - if (beginPoint2D.getX() > _dX2) { - beginPoint2D.setLocation(_dX2, beginPoint2D.getY()); - } - if (endPoint2D.getX() > _dX2) { - endPoint2D.setLocation(_dX2, endPoint2D.getY()); - } - if (beginPoint2D.getX() < _dX1) { - beginPoint2D.setLocation(_dX1, beginPoint2D.getY()); - } - if (endPoint2D.getX() < _dX1) { - endPoint2D.setLocation(_dX1, endPoint2D.getY()); - } - } - else { - double dSlope = (beginPoint2D.getY() - endPoint2D.getY()) - / (beginPoint2D.getX() - endPoint2D.getX()); - - if (!intersectsPoint(beginPoint2D)) { - if (beginPoint2D.getY() > _dY2) { - double x = ((_dY2 - beginPoint2D.getY()) / dSlope) + beginPoint2D.getX(); - if ((x >= _dX1) && (x <= _dX2)) { - beginPoint2D.setLocation(x, beginPoint2D.getY()); - beginPoint2D.setLocation(beginPoint2D.getX(), _dY2); - } - } - if (beginPoint2D.getY() < _dY1) { - double x = ((_dY1 - beginPoint2D.getY()) / dSlope) + beginPoint2D.getX(); - if ((x >= _dX1) && (x <= _dX2)) { - beginPoint2D.setLocation(x, beginPoint2D.getY()); - beginPoint2D.setLocation(beginPoint2D.getX(), _dY1); - } - } - if (beginPoint2D.getX() > _dX2) { - double y = dSlope*(_dX2 - beginPoint2D.getX()) + beginPoint2D.getY(); - if ((y >= _dY1) && (y <= _dY2)) { - beginPoint2D.setLocation(_dX2, beginPoint2D.getY()); - beginPoint2D.setLocation(beginPoint2D.getX(), y); - } - } - if (beginPoint2D.getX() < _dX1) { - double y = dSlope*(_dX1 - beginPoint2D.getX()) + beginPoint2D.getY(); - if ((y >= _dY1) && (y <= _dY2)) { - beginPoint2D.setLocation(_dX1, beginPoint2D.getY()); - beginPoint2D.setLocation(beginPoint2D.getX(), y); - } - } - } - if (!intersectsPoint(endPoint2D)) { - if (endPoint2D.getY() > _dY2) { - double x = ((_dY2 - beginPoint2D.getY()) / dSlope) + beginPoint2D.getX(); - if ((x >= _dX1) && (x <= _dX2)) { - endPoint2D.setLocation(x, endPoint2D.getY()); - endPoint2D.setLocation(endPoint2D.getX(), _dY2); - } - } - if (endPoint2D.getY() < _dY1) { - double x = ((_dY1 - beginPoint2D.getY()) / dSlope) + beginPoint2D.getX(); - if ((x >= _dX1) && (x <= _dX2)) { - endPoint2D.setLocation(x, endPoint2D.getY()); - endPoint2D.setLocation(endPoint2D.getX(), _dY1); - } - } - if (endPoint2D.getX() > _dX2) { - double y = dSlope*(_dX2 - beginPoint2D.getX()) + beginPoint2D.getY(); - if ((y >= _dY1) && (y <= _dY2)) { - endPoint2D.setLocation(_dX2, endPoint2D.getY()); - endPoint2D.setLocation(endPoint2D.getX(), y); - } - } - if (endPoint2D.getX() < _dX1) { - double y = dSlope*(_dX1 - beginPoint2D.getX()) + beginPoint2D.getY(); - if ((y >= _dY1) && (y <= _dY2)) { - endPoint2D.setLocation(_dX1, endPoint2D.getY()); - endPoint2D.setLocation(endPoint2D.getX(), y); - } - } - } - } - - resultLine[0] = beginPoint2D; - resultLine[1] = endPoint2D; - - return resultLine; - } - - public boolean equals(Object anObject) { - if ((anObject == null) || (!(anObject instanceof Bounds))) { - return false; - } - Bounds aBounds = (Bounds) anObject; - - if ((_dX1 == aBounds.getLesserX()) && - (_dX2 == aBounds.getGreaterX()) && - (_dY1 == aBounds.getLesserY()) && - (_dY2 == aBounds.getGreaterY())) { - return true; - } - - return false; - } - - public int hashCode() { - double temp = Math.abs(_dX1 + _dX2 +_dY1 + _dY2); - while ((temp != 0) && (temp < 1)) { - temp *= 4; - } - - return (int) temp; - } - - public String toString() { - return Double.toString(_dX1) + " " + Double.toString(_dY1) - + " " + Double.toString(_dX2) + " " + Double.toString(_dY2); - } - - private double min( double x1, double x2, double x3 ) { - return Math.min( Math.min( x1, x2 ), x3 ); - } - - private double max( double x1, double x2, double x3 ) { - return Math.max( Math.max( x1, x2 ), x3 ); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/Clipboard.java b/JHotDraw/src/CH/ifa/draw/util/Clipboard.java deleted file mode 100644 index f48b90596..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/Clipboard.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * @(#)Clipboard.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -/** - * A temporary replacement for a global clipboard. - * It is a singleton that can be used to store and - * get the contents of the clipboard. - * - * @version <$CURRENT_VERSION$> - */ -public class Clipboard { - static Clipboard fgClipboard = new Clipboard(); - - /** - * Gets the clipboard. - */ - static public Clipboard getClipboard() { - return fgClipboard; - } - - private Object fContents; - - private Clipboard() { - } - - /** - * Sets the contents of the clipboard. - */ - public void setContents(Object contents) { - fContents = contents; - } - - /** - * Gets the contents of the clipboard. - */ - public Object getContents() { - return fContents; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/CollectionsFactory.java b/JHotDraw/src/CH/ifa/draw/util/CollectionsFactory.java deleted file mode 100644 index d5b31baf5..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/CollectionsFactory.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * @(#)CollectionsFactory.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.JHotDrawRuntimeException; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public abstract class CollectionsFactory { - private static String JAVA_UTIL_LIST = "java.util.List"; - private static String COLLECTIONS_FACTORY_PACKAGE = "CH.ifa.draw.util.collections.jdk"; - - private static final CollectionsFactory factory = determineCollectionsFactory(); - - public abstract List createList(); - - public abstract List createList(Collection initList); - - public abstract List createList(int initSize); - - public abstract Map createMap(); - - public abstract Map createMap(Map initMap); - - public abstract Set createSet(); - - public abstract Set createSet(Set initSet); - - public static CollectionsFactory current() { - return factory; - } - - protected static CollectionsFactory determineCollectionsFactory() { - String jdkVersion = null; - if (isJDK12()) { - jdkVersion = "12"; - } - else { - jdkVersion = "11"; - } - return createCollectionsFactory(jdkVersion); - } - - protected static boolean isJDK12() { - try { - Class.forName(JAVA_UTIL_LIST); - return true; - } - catch (ClassNotFoundException e) { - // ignore - } - return false; - } - - protected static CollectionsFactory createCollectionsFactory(String jdkVersion) { - try { - Class factoryClass = Class.forName(COLLECTIONS_FACTORY_PACKAGE + jdkVersion + ".CollectionsFactoryJDK" + jdkVersion); - return (CollectionsFactory)factoryClass.newInstance(); - } - catch (ClassNotFoundException e) { - throw new JHotDrawRuntimeException(e); - } - catch (InstantiationException e) { - throw new JHotDrawRuntimeException(e); - } - catch (IllegalAccessException e) { - throw new JHotDrawRuntimeException(e); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/ColorMap.java b/JHotDraw/src/CH/ifa/draw/util/ColorMap.java deleted file mode 100644 index 31a1db302..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/ColorMap.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * @(#)ColorMap.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.awt.Color; - -class ColorEntry { - public String fName; - public Color fColor; - - ColorEntry(String name, Color color) { - fColor = color; - fName = name; - } -} - -/** - * A map that is filled with some standard colors. The colors - * can be looked up by name or index. - * - * @version <$CURRENT_VERSION$> - */ -public class ColorMap { - - static ColorEntry fMap[] = { - new ColorEntry("Black", Color.black), - new ColorEntry("Blue", Color.blue), - new ColorEntry("Green", Color.green), - new ColorEntry("Red", Color.red), - new ColorEntry("Pink", Color.pink), - new ColorEntry("Magenta", Color.magenta), - new ColorEntry("Orange", Color.orange), - new ColorEntry("Yellow", Color.yellow), - new ColorEntry("New Tan", new Color(0xEBC79E)), - new ColorEntry("Aquamarine", new Color(0x70DB93)), - new ColorEntry("Sea Green", new Color(0x238E68)), - new ColorEntry("Dark Gray", Color.darkGray), - new ColorEntry("Light Gray", Color.lightGray), - new ColorEntry("White", Color.white), - // there is no support for alpha values so we use a special value - // to represent a transparent color - new ColorEntry("None", new Color(0xFFC79E)) - }; - - public static int size() { - return fMap.length; - } - - public static Color color(int index) { - if (index < size() && index >= 0) { - return fMap[index].fColor; - } - - throw new ArrayIndexOutOfBoundsException("Color index: " + index); - } - - public static Color color(String name) { - for (int i = 0; i < fMap.length; i++) { - if (fMap[i].fName.equals(name)) { - return fMap[i].fColor; - } - } - - return Color.black; - } - - public static String name(int index) { - if (index < size() && index >= 0) { - return fMap[index].fName; - } - - throw new ArrayIndexOutOfBoundsException("Color index: " + index); - } - - public static int colorIndex(Color color) { - for (int i=0; i<fMap.length; i++) { - if (fMap[i].fColor.equals(color)) { - return i; - } - } - - return 0; - } - - public static boolean isTransparent(Color color) { - return color.equals(color("None")); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/Command.java b/JHotDraw/src/CH/ifa/draw/util/Command.java deleted file mode 100644 index 3b661b731..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/Command.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * @(#)Command.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.DrawingEditor; - -/** - * Commands encapsulate an action to be executed. Commands have - * a name and can be used in conjunction with <i>Command enabled</i> - * ui components. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld010.htm>Command</a></b><br> - * Command is a simple instance of the command pattern without undo - * support. - * <hr> - * - * @see CommandButton - * @see CommandMenu - * @see CommandChoice - * - * @version <$CURRENT_VERSION$> - */ -public interface Command { - - /** - * Executes the command. - */ - public void execute(); - - /** - * Tests if the command can be executed. - */ - public boolean isExecutable(); - - /** - * Gets the command name. - */ - public String name(); - - public DrawingEditor getDrawingEditor(); - - public Undoable getUndoActivity(); - - public void setUndoActivity(Undoable newUndoableActivity); - - public void addCommandListener(CommandListener newCommandListener); - public void removeCommandListener(CommandListener oldCommandListener); -} diff --git a/JHotDraw/src/CH/ifa/draw/util/CommandButton.java b/JHotDraw/src/CH/ifa/draw/util/CommandButton.java deleted file mode 100644 index 36659fa57..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/CommandButton.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#)CommandButton.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import javax.swing.*; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; - -/** - * A Command enabled button. Clicking the button executes the command. - * - * @see Command - * - * @version <$CURRENT_VERSION$> - */ -public class CommandButton - extends JButton implements ActionListener { - - private Command fCommand; - - /** - * Initializes the button with the given command. - * The command's name is used as the label. - */ - public CommandButton(Command command) { - super(command.name()); - fCommand = command; - addActionListener(this); - } - - /** - * Executes the command. If the command's name was changed - * as a result of the command the button's label is updated - * accordingly. - */ - public void actionPerformed(ActionEvent e) { - fCommand.execute(); - if (!getText().equals(fCommand.name()) ) { - setText(fCommand.name()); - } - } -} - - diff --git a/JHotDraw/src/CH/ifa/draw/util/CommandChoice.java b/JHotDraw/src/CH/ifa/draw/util/CommandChoice.java deleted file mode 100644 index 45eb57f1c..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/CommandChoice.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * @(#)CommandChoice.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import javax.swing.*; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.List; - -/** - * A Command enabled choice. Selecting a choice executes the - * corresponding command. - * - * @see Command - * - * @version <$CURRENT_VERSION$> - */ -public class CommandChoice extends JComboBox implements ItemListener { - - private List fCommands; - - public CommandChoice() { - super(); - fCommands = CollectionsFactory.current().createList(10); - addItemListener(this); - } - - /** - * Adds a command to the menu. - */ - public synchronized void addItem(Command command) { - addItem(command.name()); - fCommands.add(command); - } - - /** - * Executes the command. - */ - public void itemStateChanged(ItemEvent e) { - if ((getSelectedIndex() >= 0) && (getSelectedIndex() < fCommands.size())) { - Command command = (Command)fCommands.get(getSelectedIndex()); - if (command.isExecutable()) { - command.execute(); - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/CommandListener.java b/JHotDraw/src/CH/ifa/draw/util/CommandListener.java deleted file mode 100644 index 13205ae43..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/CommandListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * @(#)CommandListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.util.EventObject; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface CommandListener { - public void commandExecuted(EventObject commandEvent); - public void commandExecutable(EventObject commandEvent); - public void commandNotExecutable(EventObject commandEvent); -} diff --git a/JHotDraw/src/CH/ifa/draw/util/CommandMenu.java b/JHotDraw/src/CH/ifa/draw/util/CommandMenu.java deleted file mode 100644 index 2e5bf8c59..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/CommandMenu.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.JHotDrawRuntimeException; -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; -import java.util.*; - -/** - * A Command enabled menu. Selecting a menu item - * executes the corresponding command. - * - * @see Command - * - * @version <$CURRENT_VERSION$> - */ -public class CommandMenu extends JMenu implements ActionListener, CommandListener { - - private HashMap hm; - - public CommandMenu(String name) { - super(name); - hm = new HashMap(); - } - - /** - * Adds a command to the menu. The item's label is - * the command's name. - */ - public synchronized void add(Command command) { - addMenuItem(command, new JMenuItem(command.name())); - } - - /** - * Adds a command with the given short cut to the menu. The item's label is - * the command's name. - */ - public synchronized void add(Command command, MenuShortcut shortcut) { - addMenuItem(command, new JMenuItem(command.name(), shortcut.getKey())); - } - - /** - * Adds a command with the given short cut to the menu. The item's label is - * the command's name. - */ - public synchronized void addCheckItem(Command command) { - addMenuItem(command, new JCheckBoxMenuItem(command.name())); - } - - protected void addMenuItem(Command command, JMenuItem m) { - m.setName(command.name()); - m.addActionListener(this); - add(m); - command.addCommandListener(this); - hm.put(m, command); -// checkEnabled(); - } - - public synchronized void remove(Command command) { - throw new JHotDrawRuntimeException("not implemented"); - } - - public synchronized void remove(MenuItem item) { - throw new JHotDrawRuntimeException("not implemented"); - } - - /** - * Changes the enabling/disabling state of a named menu item. - */ - public synchronized void enable(String name, boolean state) { - for (int i = 0; i < getItemCount(); i++) { - JMenuItem item = getItem(i); - if (name.equals(item.getText())) { - item.setEnabled(state); - return; - } - } - } - - public synchronized void checkEnabled() { - // ignore separators (a separator has a hyphen as its label) - for (int i = 0; i < getMenuComponentCount(); i++) { - Component c = getMenuComponent(i); - Command cmd = (Command) hm.get(c); - if (cmd != null) { - c.setEnabled(cmd.isExecutable()); - } - } - } - - /** - * Executes the command. - */ - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - for (int i = 0; i < getItemCount(); i++) { - JMenuItem item = getItem(i); - // ignore separators (a separator has a hyphen as its label) - if (source == item) { - Command cmd = (Command) hm.get(item); - if (cmd != null) { - cmd.execute(); - } - break; - } - } - } - - public void commandExecuted(EventObject commandEvent) { -// checkEnabled(); - } - - public void commandExecutable(EventObject commandEvent) { -// checkEnabled(); - } - - public void commandNotExecutable(EventObject commandEvent) { -// checkEnabled(); - } -} - - diff --git a/JHotDraw/src/CH/ifa/draw/util/Filler.java b/JHotDraw/src/CH/ifa/draw/util/Filler.java deleted file mode 100644 index 2dbbef5e3..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/Filler.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * @(#)Filler.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import javax.swing.JPanel; -import java.awt.*; - -/** - * A component that can be used to reserve white space in a layout. - * - * @version <$CURRENT_VERSION$> - */ -public class Filler - extends JPanel { - - private int fWidth; - private int fHeight; - private Color fBackground; - - - public Filler(int width, int height) { - this(width, height, null); - } - - public Filler(int width, int height, Color background) { - fWidth = width; - fHeight = height; - fBackground = background; - } - - public Dimension getMinimumSize() { - return new Dimension(fWidth, fHeight); - } - - public Dimension getPreferredSize() { - return getMinimumSize(); - } - - public Color getBackground() { - if (fBackground != null) { - return fBackground; - } - return super.getBackground(); - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/util/FloatingTextField.java b/JHotDraw/src/CH/ifa/draw/util/FloatingTextField.java deleted file mode 100644 index d2c1eb893..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/FloatingTextField.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)FloatingTextField.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; - -/** - * A text field overlay that is used to edit a TextFigure. - * A FloatingTextField requires a two step initialization: - * In a first step the overlay is created and in a - * second step it can be positioned. - * - * @see CH.ifa.draw.figures.TextFigure - * - * @version <$CURRENT_VERSION$> - */ -public class FloatingTextField { - - private JTextField fEditWidget; - private Container fContainer; - - public FloatingTextField() { - fEditWidget = new JTextField(20); - } - - /** - * Creates the overlay for the given Component. - */ - public void createOverlay(Container container) { - createOverlay(container, null); - } - - /** - * Creates the overlay for the given Container using a - * specific font. - */ - public void createOverlay(Container container, Font font) { - container.add(fEditWidget, 0); - if (font != null) { - fEditWidget.setFont(font); - } - fContainer = container; - } - - /** - * Adds an action listener - */ - public void addActionListener(ActionListener listener) { - fEditWidget.addActionListener(listener); - } - - /** - * Remove an action listener - */ - public void removeActionListener(ActionListener listener) { - fEditWidget.removeActionListener(listener); - } - - /** - * Positions the overlay. - */ - public void setBounds(Rectangle r, String text) { - fEditWidget.setText(text); - fEditWidget.setLocation(r.x, r.y); - fEditWidget.setSize(r.width, r.height); - fEditWidget.setVisible(true); - fEditWidget.selectAll(); - fEditWidget.requestFocus(); - } - - /** - * Gets the text contents of the overlay. - */ - public String getText() { - return fEditWidget.getText(); - } - - /** - * Gets the preferred size of the overlay. - */ - public Dimension getPreferredSize(int cols) { - fEditWidget.setColumns(cols); - return fEditWidget.getPreferredSize(); - } - - /** - * Removes the overlay. - */ - public void endOverlay() { - fContainer.requestFocus(); - if (fEditWidget != null) { - fEditWidget.setVisible(false); - fContainer.remove(fEditWidget); - - Rectangle bounds = fEditWidget.getBounds(); - fContainer.repaint(bounds.x, bounds.y, bounds.width, bounds.height); - } - } -} - diff --git a/JHotDraw/src/CH/ifa/draw/util/Geom.java b/JHotDraw/src/CH/ifa/draw/util/Geom.java deleted file mode 100644 index 5c3f50488..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/Geom.java +++ /dev/null @@ -1,394 +0,0 @@ -/* - * @(#)Geom.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.awt.Rectangle; -import java.awt.Point; -import java.awt.geom.Line2D; - -/** - * Some geometric utilities. - * - * @version <$CURRENT_VERSION$> - */ -public class Geom { - - private Geom() {} // never instantiated - - /** - * Tests if a point is on a line. - */ - static public boolean lineContainsPoint(int x1, int y1, - int x2, int y2, - int px, int py) { - - Rectangle r = new Rectangle(new Point(x1, y1)); - r.add(x2, y2); - r.grow(2, 2); - if (! r.contains(px,py)) { - return false; - } - - double a, b, x, y; - - if (x1 == x2) { - return (Math.abs(px - x1) < 3); - } - if (y1 == y2) { - return (Math.abs(py - y1) < 3); - } - - a = (y1 - y2) / (x1 - x2); - b = y1 - a * x1; - x = (py - b) / a; - y = a * px + b; - - return (Math.min(Math.abs(x - px), Math.abs(y - py)) < 4); - } - - static public final int NORTH = 1; - static public final int SOUTH = 2; - static public final int WEST = 3; - static public final int EAST = 4; - - /** - * Returns the direction NORTH, SOUTH, WEST, EAST from - * one point to another one. - */ - static public int direction(int x1, int y1, int x2, int y2) { - int direction = 0; - int vx = x2 - x1; - int vy = y2 - y1; - - if (vy < vx && vx > -vy) { - direction = EAST; - } - else if (vy > vx && vy > -vx) { - direction = NORTH; - } - else if (vx < vy && vx < -vy) { - direction = WEST; - } - else { - direction = SOUTH; - } - return direction; - } - - static public Point south(Rectangle r) { - return new Point(r.x + r.width /2, r.y + r.height); - } - - static public Point center(Rectangle r) { - return new Point(r.x + r.width /2, r.y + r.height/2); - } - - static public Point west(Rectangle r) { - return new Point(r.x, r.y + r.height/ 2); - } - - static public Point east(Rectangle r) { - return new Point(r.x+r.width, r.y + r.height/ 2); - } - - static public Point north(Rectangle r) { - return new Point(r.x+r.width/2, r.y); - } - - /** - * Returns the corner (bottom right) of the rectangle - * - * @param r the rectangle - * @return the corner - */ - public static Point corner(Rectangle r) - { - return new Point((int)r.getMaxX(), (int)r.getMaxY()); - } - - - /** - * Returns the top left corner of the rectangle - * - * @param r the rectangle - * @return the corner - */ - public static Point topLeftCorner(Rectangle r) - { - return r.getLocation(); - } - - - /** - * Returns the top right corner of the rectangle - * - * @param r the rectangle - * @return the corner - */ - public static Point topRightCorner(Rectangle r) - { - return new Point((int)r.getMaxX(), (int)r.getMinY()); - } - - - /** - * Returns the bottom left corner of the rectangle - * - * @param r the rectangle - * @return the corner - */ - public static Point bottomLeftCorner(Rectangle r) - { - return new Point((int)r.getMinX(), (int)r.getMaxY()); - } - - - /** - * Returns the bottom right corner of the rectangle. - * Same as corner, added for naming coherence with the other - * corner extracting methods - * - * @param r the rectangle - * @return the corner - */ - public static Point bottomRightCorner(Rectangle r) - { - return corner(r); - } - - /** - * Constains a value to the given range. - * @return the constrained value - */ - static public int range(int min, int max, int value) { - if (value < min) { - value = min; - } - if (value > max) { - value = max; - } - return value; - } - - /** - * Gets the square distance between two points. - */ - static public long length2(int x1, int y1, int x2, int y2) { - return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); - } - - /** - * Gets the distance between to points - */ - static public long length(int x1, int y1, int x2, int y2) { - return (long)Math.sqrt(length2(x1, y1, x2, y2)); - } - - /** - * Gets the angle of a point relative to a rectangle. - */ - static public double pointToAngle(Rectangle r, Point p) { - int px = p.x - (r.x + r.width/2); - int py = p.y - (r.y + r.height/2); - return Math.atan2(py*r.width, px*r.height); - } - - /** - * Gets the point on a rectangle that corresponds to the given angle. - */ - static public Point angleToPoint(Rectangle r, double angle) { - double si = Math.sin(angle); - double co = Math.cos(angle); - double e = 0.0001; - - int x= 0, y= 0; - if (Math.abs(si) > e) { - x= (int) ((1.0 + co/Math.abs(si))/2.0 * r.width); - x= range(0, r.width, x); - } - else if (co >= 0.0) { - x= r.width; - } - if (Math.abs(co) > e) { - y= (int) ((1.0 + si/Math.abs(co))/2.0 * r.height); - y= range(0, r.height, y); - } - else if (si >= 0.0) { - y= r.height; - } - return new Point(r.x + x, r.y + y); - } - - /** - * Converts a polar to a point - */ - static public Point polarToPoint(double angle, double fx, double fy) { - double si = Math.sin(angle); - double co = Math.cos(angle); - return new Point((int)(fx*co+0.5), (int)(fy*si+0.5)); - } - - /** - * Gets the point on an oval that corresponds to the given angle. - */ - static public Point ovalAngleToPoint(Rectangle r, double angle) { - Point center = Geom.center(r); - Point p = Geom.polarToPoint(angle, r.width/2, r.height/2); - return new Point(center.x + p.x, center.y + p.y); - } - - /** - * Standard line intersection algorithm - * Return the point of intersection if it exists, else null - **/ - // from Doug Lea's PolygonFigure - static public Point intersect(int xa, // line 1 point 1 x - int ya, // line 1 point 1 y - int xb, // line 1 point 2 x - int yb, // line 1 point 2 y - int xc, // line 2 point 1 x - int yc, // line 2 point 1 y - int xd, // line 2 point 2 x - int yd) { // line 2 point 2 y - - // source: http://vision.dai.ed.ac.uk/andrewfg/c-g-a-faq.html - // eq: for lines AB and CD - // (YA-YC)(XD-XC)-(XA-XC)(YD-YC) - // r = ----------------------------- (eqn 1) - // (XB-XA)(YD-YC)-(YB-YA)(XD-XC) - // - // (YA-YC)(XB-XA)-(XA-XC)(YB-YA) - // s = ----------------------------- (eqn 2) - // (XB-XA)(YD-YC)-(YB-YA)(XD-XC) - // XI = XA + r(XB-XA) - // YI = YA + r(YB-YA) - - double denom = ((xb - xa) * (yd - yc) - (yb - ya) * (xd - xc)); - - double rnum = ((ya - yc) * (xd - xc) - (xa - xc) * (yd - yc)); - - if (denom == 0.0) { // parallel - if (rnum == 0.0) { // coincident; pick one end of first line - if ((xa < xb && (xb < xc || xb < xd)) || - (xa > xb && (xb > xc || xb > xd))) { - return new Point(xb, yb); - } - else { - return new Point(xa, ya); - } - } - else { - return null; - } - } - - double r = rnum / denom; - double snum = ((ya - yc) * (xb - xa) - (xa - xc) * (yb - ya)); - double s = snum / denom; - - if (0.0 <= r && r <= 1.0 && 0.0 <= s && s <= 1.0) { - int px = (int)(xa + (xb - xa) * r); - int py = (int)(ya + (yb - ya) * r); - return new Point(px, py); - } - else { - return null; - } - } - - /** - * compute distance of point from line segment, or - * Double.MAX_VALUE if perpendicular projection is outside segment; or - * If pts on line are same, return distance from point - **/ - // from Doug Lea's PolygonFigure - public static double distanceFromLine(int xa, int ya, - int xb, int yb, - int xc, int yc) { - - - // source:http://vision.dai.ed.ac.uk/andrewfg/c-g-a-faq.html#q7 - //Let the point be C (XC,YC) and the line be AB (XA,YA) to (XB,YB). - //The length of the - // line segment AB is L: - // - // ___________________ - // | 2 2 - // L = \| (XB-XA) + (YB-YA) - //and - // - // (YA-YC)(YA-YB)-(XA-XC)(XB-XA) - // r = ----------------------------- - // L**2 - // - // (YA-YC)(XB-XA)-(XA-XC)(YB-YA) - // s = ----------------------------- - // L**2 - // - // Let I be the point of perpendicular projection of C onto AB, the - // - // XI=XA+r(XB-XA) - // YI=YA+r(YB-YA) - // - // Distance from A to I = r*L - // Distance from C to I = s*L - // - // If r < 0 I is on backward extension of AB - // If r>1 I is on ahead extension of AB - // If 0<=r<=1 I is on AB - // - // If s < 0 C is left of AB (you can just check the numerator) - // If s>0 C is right of AB - // If s=0 C is on AB - - int xdiff = xb - xa; - int ydiff = yb - ya; - long l2 = xdiff * xdiff + ydiff * ydiff; - - if (l2 == 0) { - return Geom.length(xa, ya, xc, yc); - } - - double rnum = (ya - yc) * (ya - yb) - (xa - xc) * (xb - xa); - double r = rnum / l2; - - if (r < 0.0 || r > 1.0) { - return Double.MAX_VALUE; - } - - double xi = xa + r * xdiff; - double yi = ya + r * ydiff; - double xd = xc - xi; - double yd = yc - yi; - return Math.sqrt(xd * xd + yd * yd); - - /* - for directional version, instead use - double snum = (ya-yc) * (xb-xa) - (xa-xc) * (yb-ya); - double s = snum / l2; - - double l = Math.sqrt((double)l2); - return = s * l; - */ - } - - /** - * compute distance of point from line segment.<br> - * Uses AWT Line2D utility methods - */ - public static double distanceFromLine2D(int xa, int ya, - int xb, int yb, - int xc, int yc) { - Line2D.Double line = new Line2D.Double(xa, xb, ya, yb); - return line.ptSegDist(xc, yc); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/GraphLayout.java b/JHotDraw/src/CH/ifa/draw/util/GraphLayout.java deleted file mode 100644 index 34d8128d4..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/GraphLayout.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * @(#)GraphLayout.java - * - * The original file Graph.java (1.5 99/11/29) is - * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved. - * Adapted by F. Wienberg, 1999 - * - * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, - * modify and redistribute this software in source and binary code form, - * provided that i) this copyright notice and license appear on all copies of - * the software; and ii) Licensee does not utilize the software in a manner - * which is disparaging to Sun. - * - * This software is provided "AS IS," without a warranty of any kind. ALL - * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY - * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE - * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING - * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS - * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, - * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER - * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF - * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGES. - * - * This software is not designed or intended for use in on-line control of - * aircraft, air traffic, aircraft navigation or aircraft communications; or in - * the design, construction, operation or maintenance of any nuclear - * facility. Licensee represents and warrants that it will not use or - * redistribute the Software for such purposes. - */ - -package CH.ifa.draw.util; - -import java.util.*; -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.*; -import java.awt.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class GraphLayout extends FigureChangeAdapter { - public double LENGTH_FACTOR=1.0; - public double REPULSION_STRENGTH=0.5; - public double REPULSION_LIMIT=200.0; - int REPULSION_TYPE=0; // 0: (1-r)/r 1: 1-r 2: (1-r)^2 - public double SPRING_STRENGTH=0.1; - public double TORQUE_STRENGTH=0.25; - public double FRICTION_FACTOR=0.75; - - private Hashtable nodes = new Hashtable(), - edges = new Hashtable(); - - public GraphLayout() {} - - private GraphNode getGraphNode(Figure node) { - return (GraphNode)nodes.get(node); - } - - private double len(Figure edge) { - return ((Double)edges.get(edge)).doubleValue()*LENGTH_FACTOR; - } - - public void addNode(Figure node) { - nodes.put(node, new GraphNode(node)); - node.addFigureChangeListener(this); - } - - public void addEdge(ConnectionFigure edge, int addlen) { - Dimension d1 = edge.getStartConnector().owner().size(); - Dimension d2 = edge.getEndConnector().owner().size(); - int len = Math.max(d1.width,d1.height)/2 + - Math.max(d2.width,d2.height)/2 + addlen; - edges.put(edge, new Double(len)); - } - - public synchronized void relax() { - if (nodes == null) - return; - Enumeration edgeEnum = edges.keys(); - while (edgeEnum.hasMoreElements()) { - ConnectionFigure e = (ConnectionFigure)edgeEnum.nextElement(); - double targetlen = len(e); - GraphNode from = getGraphNode(e.getStartConnector().owner()); - GraphNode to = getGraphNode(e.getEndConnector().owner()); - double vx = to.x - from.x; - double vy = to.y - from.y; - double len = Math.sqrt(vx * vx + vy * vy); - - if (len>0) { - double f = SPRING_STRENGTH * (targetlen - len) / len; - double dx = f * vx; - double dy = f * vy; - - double phi=Math.atan2(vx,vy); - double dir=-Math.sin(4*phi); - dx += TORQUE_STRENGTH*vy*dir/len; - dy += -TORQUE_STRENGTH*vx*dir/len; - - to.dx += dx; - to.dy += dy; - from.dx += -dx; - from.dy += -dy; - } - } - - Enumeration nodeEnum1 = nodes.elements(); - while (nodeEnum1.hasMoreElements()) { - GraphNode n1 = (GraphNode)nodeEnum1.nextElement(); - double dx = 0; - double dy = 0; - - Enumeration nodeEnum2 = nodes.elements(); - while (nodeEnum2.hasMoreElements()) { - GraphNode n2 = (GraphNode)nodeEnum2.nextElement(); - if (n1 == n2) { - continue; - } - double vx = n1.x - n2.x; - double vy = n1.y - n2.y; - double lensqr = vx * vx + vy * vy; - double len = Math.sqrt(lensqr); - if (len == 0) { - dx += REPULSION_STRENGTH * Math.random(); - dy += REPULSION_STRENGTH * Math.random(); - } - else if (len < REPULSION_LIMIT) { - // Normalize length. - vx=vx/REPULSION_LIMIT; - vy=vy/REPULSION_LIMIT; - len=len/REPULSION_LIMIT; - // Compute force. - double f=0; - - switch (REPULSION_TYPE) { - case 0: - f = 0.5 * (1 - len) / len; - break; - case 1: - f = 1 - len; - break; - case 2: - f = 2 * (1 - len) * (1 - len); - break; - } - - f *= REPULSION_STRENGTH; - dx += f * vx; - dy += f * vy; - } - } - - n1.dx += dx; - n1.dy += dy; - } - - Enumeration nodeEnum = nodes.keys(); - while (nodeEnum.hasMoreElements()) { - Figure node = (Figure)nodeEnum.nextElement(); - GraphNode n = getGraphNode(node); - if (!Boolean.TRUE.equals(node.getAttribute(FigureAttributeConstant.LOCATION))) { - n.x += Math.max(-5, Math.min(5, n.dx)); - n.y += Math.max(-5, Math.min(5, n.dy)); - Point c = node.center(); - node.moveBy((int)Math.round(n.x)-c.x, - (int)Math.round(n.y)-c.y); - - //System.out.println("v= " + n.dx + "," + n.dy); - if (n.x < 0) { - n.x = 0; - } - if (n.y < 0) { - n.y = 0; - } - } - n.dx *= FRICTION_FACTOR; - n.dy *= FRICTION_FACTOR; - } - } - - /** - * Sent when a figure changed - */ - synchronized public void figureChanged(FigureChangeEvent e) { - if (nodes!=null) { - Figure node = e.getFigure(); - if (nodes.containsKey(node)) { - getGraphNode(node).update(); - } - } - } - - public void remove() { - if (nodes!=null) { - Enumeration nodeEnum = nodes.keys(); - while (nodeEnum.hasMoreElements()) { - Figure node = (Figure)nodeEnum.nextElement(); - node.removeFigureChangeListener(this); - } - nodes = null; - edges = null; - } - } -} - -class GraphNode { - double x=0.0, y=0.0; - double dx=0.0; - double dy=0.0; - final Figure node; - - GraphNode(Figure newNode) { - node = newNode; - update(); - } - - void update() { - Point p = node.center(); - if (Math.abs(p.x - Math.round(x))>1 || - Math.abs(p.y - Math.round(y))>1) { - x = p.x; - y = p.y; - //System.out.println(this+" has new coords: "+x+","+y+"\n"); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/Iconkit.java b/JHotDraw/src/CH/ifa/draw/util/Iconkit.java deleted file mode 100644 index 91189ec5f..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/Iconkit.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * @(#)Iconkit.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import javax.swing.*; -import java.awt.*; -import java.awt.image.ImageProducer; -import java.net.URL; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Hashtable; - -/** - * The Iconkit class supports the sharing of images. It maintains - * a map of image names and their corresponding images. - * - * Iconkit also supports to load a collection of images in - * synchronized way. - * The resolution of a path name to an image is delegated to the DrawingEditor. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld031.htm>Singleton</a></b><br> - * The Iconkit is a singleton. - * <hr> - * - * @version <$CURRENT_VERSION$> - */ -public class Iconkit { - private Map fMap; - private List fRegisteredImages; - private Component fComponent; - private final static int ID = 123; - private static Iconkit fgIconkit = null; - private static boolean fgDebug = false; - - /** - * Constructs an Iconkit that uses the given editor to - * resolve image path names. - */ - public Iconkit(Component component) { - fMap = new Hashtable(53); - fRegisteredImages = CollectionsFactory.current().createList(10); - fComponent = component; - fgIconkit = this; - } - - /** - * Gets the single instance - */ - public static Iconkit instance() { - return fgIconkit; - } - - /** - * Loads all registered images. - * @see #registerImage - */ - public void loadRegisteredImages(Component component) { - if (fRegisteredImages.size() == 0) - return; - - MediaTracker tracker = new MediaTracker(component); - - // register images with MediaTracker - Iterator iter = fRegisteredImages.iterator(); - while (iter.hasNext()) { - String fileName = (String)iter.next(); - if (basicGetImage(fileName) == null) { - tracker.addImage(loadImage(fileName), ID); - } - } - fRegisteredImages.clear(); - - // block until all images are loaded - try { - tracker.waitForAll(); - } - catch (Exception e) { - // ignore: do nothing - } - } - - /** - * Registers an image that is then loaded together with - * the other registered images by loadRegisteredImages. - * @see #loadRegisteredImages - */ - public void registerImage(String fileName) { - fRegisteredImages.add(fileName); - } - - /** - * Registers and loads an image. - */ - public Image registerAndLoadImage(Component component, String fileName) { - registerImage(fileName); - loadRegisteredImages(component); - return getImage(fileName); - } - - /** - * Loads an image with the given name. - */ - public Image loadImage(String filename) { - if (fMap.containsKey(filename)) { - return (Image) fMap.get(filename); - } - Image image = loadImageResource(filename); - if (image != null) { - fMap.put(filename, image); - } - return image; - } - - public Image loadImage(String filename, boolean waitForLoad) { - Image image = loadImage(filename); - if (image!=null && waitForLoad) { - ImageIcon icon = new ImageIcon(image); - image = icon.getImage(); //this forces the wait to happen - } - return image; - } - - public Image loadImageResource(String resourcename) { - Toolkit toolkit = Toolkit.getDefaultToolkit(); - try { - URL url = getClass().getResource(resourcename); - if (fgDebug) { - System.out.println(resourcename); - } - return toolkit.createImage((ImageProducer) url.getContent()); - } - catch (Exception ex) { - return null; - } - } - - /** - * Gets the image with the given name. If the image - * can't be found it tries it again after loading - * all the registered images. - */ - public Image getImage(String filename) { - Image image = basicGetImage(filename); - if (image != null) { - return image; - } - // load registered images and try again - loadRegisteredImages(fComponent); - // try again - return basicGetImage(filename); - } - - private Image basicGetImage(String filename) { - if (fMap.containsKey(filename)) { - return (Image) fMap.get(filename); - } - return null; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/JDOStorageFormat.java b/JHotDraw/src/CH/ifa/draw/util/JDOStorageFormat.java deleted file mode 100644 index 6ed15f1e9..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/JDOStorageFormat.java +++ /dev/null @@ -1,326 +0,0 @@ -/* - * @(#)SerializationStorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.StandardDrawing; - -import java.io.*; -import java.util.*; -import java.util.List; -import java.awt.*; - -import javax.jdo.*; -import javax.swing.*; -import javax.swing.event.ListSelectionListener; -import javax.swing.event.ListSelectionEvent; - - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class JDOStorageFormat extends StandardStorageFormat { - - private Map pms; - - /** - * Create a SerialzationStorageFormat for storing and restoring Drawings. - */ - public JDOStorageFormat() { - super(); - pms = CollectionsFactory.current().createMap(); - // close database connection when application exits - Runtime.getRuntime().addShutdownHook(new Thread() { - public void run() { - Iterator iter = pms.values().iterator(); -// while (iter.hasNext()) { -// ((PersistenceManager)iter.next()).close(); -// } - } - }); - } - - /** - * Factory method to create the file extension recognized by the FileFilter for this - * SerializationStorageFormat. The SerializationStorageFormat has the file extension "ser" - * (e.g. my_picasso.ser). - * - * @return new file extension - */ - protected String createFileExtension() { - return "j2"; - } - - /** - * Factory method to create a file description for the file type when displaying the - * associated FileFilter. - * - * @return new file description - */ - public String createFileDescription() { - return "Database (" + getFileExtension() + ")"; - } - - /** - * @see CH.ifa.draw.util.StorageFormat#isRestoreFormat() - */ - public boolean isRestoreFormat() { - return true; - } - - /** - * @see CH.ifa.draw.util.StorageFormat#isStoreFormat() - */ - public boolean isStoreFormat() { - return true; - } - - /** - * Store a Drawing under a given name. The name should be valid with regard to the FileFilter - * that means, it should already contain the appropriate file extension. - * - * @param fileName file name of the Drawing under which it should be stored - * @param storeDrawing drawing to be saved - */ - public String store(String fileName, Drawing storeDrawing) throws IOException { - PersistenceManager pm = getPersistenceManager(fileName); - String drawingName = null; - - Drawing txnDrawing = crossTxnBoundaries(storeDrawing); - endTransaction(pm, false); - - startTransaction(pm); - try { - Extent extent = pm.getExtent(StandardDrawing.class, true); - DrawingListModel listModel = new DrawingListModel(extent.iterator()); - drawingName = showStoreDialog(listModel, storeDrawing); - if (drawingName != null) { - storeDrawing.setTitle(drawingName); - txnDrawing.setTitle(drawingName); - pm.makePersistent(txnDrawing); - } - } - finally { - endTransaction(pm, (drawingName != null)); - } - - // there must be always a transaction running - startTransaction(pm); - return drawingName; - } - - /** - * Restore a Drawing from a file with a given name. The name must be should with regard to the - * FileFilter that means, it should have the appropriate file extension. - * - * @param fileName of the file in which the Drawing has been saved - * @return restored Drawing - */ - public synchronized Drawing restore(String fileName) throws IOException { - PersistenceManager pm = getPersistenceManager(fileName); - - endTransaction(pm, false); - startTransaction(pm); - Drawing restoredDrawing = null; - - try { - Extent extent = pm.getExtent(StandardDrawing.class, true); - DrawingListModel listModel = new DrawingListModel(extent.iterator()); - Drawing txnDrawing = showRestoreDialog(listModel); - if (txnDrawing != null) { -// pm.retrieve(txnDrawing); -// retrieveAll(pm, (StandardDrawing)txnDrawing); -// restoredDrawing = crossTxnBoundaries(txnDrawing); - restoredDrawing = txnDrawing; - } - } - finally { - endTransaction(pm, false); - } - - // there must be always a transaction running - startTransaction(pm); - return restoredDrawing; - } - - private void retrieveAll(PersistenceManager pm, Figure figure) { - pm.retrieve(figure); - FigureEnumeration fe = figure.figures(); - while (fe.hasNextFigure()) { - retrieveAll(pm, fe.nextFigure()); - } - } - - private Drawing crossTxnBoundaries(Drawing originalDrawing) { - return (Drawing)((StandardDrawing)originalDrawing).clone(); -// return originalDrawing; - } - - private synchronized PersistenceManager getPersistenceManager(String fileName) { - PersistenceManager pm = (PersistenceManager)pms.get(fileName); - if (pm == null) { - pm = createPersistenceManagerFactory(fileName).getPersistenceManager(); - pms.put(fileName, pm); - } - return pm; - } - - private PersistenceManagerFactory createPersistenceManagerFactory(String dbFileName) { - Properties pmfProps = new Properties(); - - pmfProps.put( - "javax.jdo.PersistenceManagerFactoryClass", - "com.poet.jdo.PersistenceManagerFactories" ); - pmfProps.put( - "javax.jdo.option.ConnectionURL", - "fastobjects://LOCAL/MyBase.j1" ); - final PersistenceManagerFactory pmf = - JDOHelper.getPersistenceManagerFactory( pmfProps ); - - return pmf; - } - - private static void startTransaction(PersistenceManager pm) { - if (!pm.currentTransaction().isActive()) { - pm.currentTransaction().begin(); - } - } - - private static void endTransaction(PersistenceManager pm, boolean doCommit) { - if (pm.currentTransaction().isActive()) { - if (doCommit) { - pm.currentTransaction().commit(); - } - else { - pm.currentTransaction().rollback(); - } - } - } - - private String showStoreDialog(ListModel listModel, Drawing storeDrawing) { - final String msgString = "Specify a name for the drawing"; - - final JTextField nameTextField = new JTextField(storeDrawing.getTitle()); - final JList dataList = new JList(listModel); - final JScrollPane dbContentScrollPane = new JScrollPane(dataList); - Object[] guiComponents = {msgString, dbContentScrollPane, nameTextField}; - - dataList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - dataList.setValueIsAdjusting(true); - dataList.addListSelectionListener(new ListSelectionListener() { - public void valueChanged(ListSelectionEvent e) { - nameTextField.setText(dataList.getSelectedValue().toString()); - } - }); - - final JOptionPane optionPane = new JOptionPane( - guiComponents, - JOptionPane.PLAIN_MESSAGE, - JOptionPane.OK_CANCEL_OPTION); - - final JDialog dialog = optionPane.createDialog(null, "Restore a drawing from the database"); -// dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); -// dialog.addWindowListener(new WindowAdapter() { -// public void windowClosing(WindowEvent we) { -// System.exit(0); -// } -// }); - dialog.setVisible(true); - if ((optionPane.getValue() != null) && (optionPane.getValue().equals(new Integer(JOptionPane.OK_OPTION)))) { - return nameTextField.getText(); - } - else { - return null; - } - } - - private Drawing showRestoreDialog(DrawingListModel listModel) { - final String msgString = "Select a drawing"; - - final JList dataList = new JList(listModel); - final JScrollPane dbContentScrollPane = new JScrollPane(dataList); - Object[] guiComponents = {msgString, dbContentScrollPane}; - - dataList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - dataList.setValueIsAdjusting(true); - - final JOptionPane optionPane = new JOptionPane( - guiComponents, - JOptionPane.PLAIN_MESSAGE, - JOptionPane.OK_CANCEL_OPTION); - - final JDialog dialog = optionPane.createDialog(null, "Restore a drawing from the database"); - dialog.setVisible(true); - if ((optionPane.getValue() != null) - && (optionPane.getValue().equals(new Integer(JOptionPane.OK_OPTION))) - && (dataList.getSelectedIndex() >= 0) - && (dataList.getSelectedIndex() < dataList.getModel().getSize())) { - return listModel.getDrawingAt(dataList.getSelectedIndex()); - } - else { - return null; - } - } - - static class DrawingListModel extends AbstractListModel { - private List myList; - - DrawingListModel(Iterator iter) { - myList = CollectionsFactory.current().createList(); - while (iter.hasNext()) { - Object o = iter.next(); - System.out.println("extent: " + o + " .. " + ((Drawing)o).getTitle()); - myList.add(o); - } - } - - public Object getElementAt(int index) { - return getDrawingAt(index).getTitle(); - } - - protected Drawing getDrawingAt(int index) { - return ((Drawing)myList.get(index)); - } - - public int getSize() { - return myList.size(); - } - } - - static class DrawingSelector extends JDialog { - DrawingSelector() { - init(); - } - - private void init() { - setTitle("Select Drawing"); - getContentPane().setLayout(new BorderLayout()); - getContentPane().add(new JLabel("Database content"), BorderLayout.NORTH); - setSize(200, 200); - } - } - - public static void main(String[] args) { - DrawingSelector frame = new DrawingSelector(); - try { - Drawing newDrawing = new StandardDrawing(); - newDrawing.setTitle("TestDrawingName" + new Random(System.currentTimeMillis()).nextLong()); - new JDOStorageFormat().store("base.j2", newDrawing); - System.exit(0); - } - catch (IOException e) { - e.printStackTrace(); - } -// frame.setVisible(true); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/PaletteButton.java b/JHotDraw/src/CH/ifa/draw/util/PaletteButton.java deleted file mode 100644 index eb7281772..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/PaletteButton.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * @(#)PaletteButton.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import javax.swing.*; -import java.awt.event.*; - -/** - * A palette button is a three state button. The states are normal - * pressed and selected. It uses to the palette listener interface - * to notify about state changes. - * - * @see PaletteListener - * @see PaletteLayout - * - * @version <$CURRENT_VERSION$> -*/ -public abstract class PaletteButton - extends JButton - implements MouseListener, MouseMotionListener { - - protected static final int NORMAL = 1; - protected static final int PRESSED = 2; - protected static final int SELECTED = 3; - - private int fState; - private int fOldState; - - private PaletteListener fListener; - - /** - * Constructs a PaletteButton. - * @param listener the listener to be notified. - */ - public PaletteButton(PaletteListener listener) { - fListener = listener; - fState = fOldState = NORMAL; - addMouseListener(this); - addMouseMotionListener(this); - } - - public Object value() { - return null; - } - - public String name() { - return ""; - } - - public void reset() { - if (isEnabled()) { - fState = NORMAL; - setSelected(false); - repaint(); - } - } - - public void select() { - if (isEnabled()) { - fState = SELECTED; - setSelected(true); - repaint(); - } - } - - public void mousePressed(MouseEvent e) { - if (isEnabled()) { - fOldState = fState; - fState = PRESSED; - repaint(); - } - } - - public void mouseDragged(MouseEvent e) { - if (isEnabled()) { - if (contains(e.getX(),e.getY())) { - fState = PRESSED; - } - else { - fState = fOldState; - } - repaint(); - } - } - - public void mouseReleased(MouseEvent e) { - if (isEnabled()) { - fState = fOldState; - repaint(); - if (contains(e.getX(),e.getY())) { - fListener.paletteUserSelected(this); - } - } - } - - public void mouseMoved(MouseEvent e) { - fListener.paletteUserOver(this, true); - } - - public void mouseExited(MouseEvent e) { - if (fState == PRESSED) { - // JDK1.1 on MS-Windows sometimes looses mouse released - mouseDragged(e); - } - fListener.paletteUserOver(this, false); - } - - public void mouseClicked(MouseEvent e) {} - public void mouseEntered(MouseEvent e) {} - -// Not necessary anymore in JFC due to the support of Icons in JButton -/* - public abstract void paintBackground(Graphics g); - public abstract void paintNormal(Graphics g); - public abstract void paintPressed(Graphics g); - public abstract void paintSelected(Graphics g); - - public void update(Graphics g) { - paint(g); - } - - public void paint(Graphics g) { - paintBackground(g); - - switch (fState) { - case PRESSED: - paintPressed(g); - break; - case SELECTED: - paintSelected(g); - break; - case NORMAL: - default: - paintNormal(g); - break; - } - } -*/ -} diff --git a/JHotDraw/src/CH/ifa/draw/util/PaletteIcon.java b/JHotDraw/src/CH/ifa/draw/util/PaletteIcon.java deleted file mode 100644 index 90f4e821b..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/PaletteIcon.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * @(#)PaletteIcon.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.awt.*; - -/** - * A three state icon that can be used in Palettes. - * - * @see PaletteButton - * - * @version <$CURRENT_VERSION$> - */ -public class PaletteIcon extends Object { - - Image fNormal; - Image fPressed; - Image fSelected; - Dimension fSize; - - public PaletteIcon(Dimension size, Image normal, Image pressed, Image selected) { - fSize = size; - fNormal = normal; - fPressed = pressed; - fSelected = selected; - } - - public Image normal() { return fNormal; } - public Image pressed() { return fPressed; } - public Image selected() { return fSelected; } - - public int getWidth() { return fSize.width; } - public int getHeight() { return fSize.height; } - -} diff --git a/JHotDraw/src/CH/ifa/draw/util/PaletteLayout.java b/JHotDraw/src/CH/ifa/draw/util/PaletteLayout.java deleted file mode 100644 index 63b1d84cd..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/PaletteLayout.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)PaletteLayout.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.awt.*; - -/** - * A custom layout manager for the palette. - * - * @see PaletteButton - * - * @version <$CURRENT_VERSION$> - */ -public class PaletteLayout implements LayoutManager { - - private int fGap; - private Point fBorder; - private boolean fVerticalLayout; - - /** - * Initializes the palette layout. - * @param gap the gap between palette entries. - */ - public PaletteLayout(int gap) { - this(gap, new Point(0,0), true); - } - - public PaletteLayout(int gap, Point border) { - this(gap, border, true); - } - - public PaletteLayout(int gap, Point border, boolean vertical) { - fGap = gap; - fBorder = border; - fVerticalLayout = vertical; - } - - public void addLayoutComponent(String name, Component comp) { - } - - public void removeLayoutComponent(Component comp) { - } - - public Dimension preferredLayoutSize(Container target) { - return minimumLayoutSize(target); - } - - public Dimension minimumLayoutSize(Container target) { - Dimension dim = new Dimension(0, 0); - int nmembers = target.getComponentCount(); - - for (int i = 0 ; i < nmembers ; i++) { - Component m = target.getComponent(i); - if (m.isVisible()) { - Dimension d = m.getMinimumSize(); - if (fVerticalLayout) { - dim.width = Math.max(dim.width, d.width); - if (i > 0) { - dim.height += fGap; - } - dim.height += d.height; - } - else { - dim.height = Math.max(dim.height, d.height); - if (i > 0) { - dim.width += fGap; - } - dim.width += d.width; - } - } - } - - Insets insets = target.getInsets(); - dim.width += insets.left + insets.right; - dim.width += 2 * fBorder.x; - dim.height += insets.top + insets.bottom; - dim.height += 2 * fBorder.y; - return dim; - } - - public void layoutContainer(Container target) { - Insets insets = target.getInsets(); - int nmembers = target.getComponentCount(); - int x = insets.left + fBorder.x; - int y = insets.top + fBorder.y; - - for (int i = 0 ; i < nmembers ; i++) { - Component m = target.getComponent(i); - if (m.isVisible()) { - Dimension d = m.getMinimumSize(); - m.setBounds(x, y, d.width, d.height); - if (fVerticalLayout) { - y += d.height; - y += fGap; - } - else { - x += d.width; - x += fGap; - } - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/PaletteListener.java b/JHotDraw/src/CH/ifa/draw/util/PaletteListener.java deleted file mode 100644 index 19274cad4..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/PaletteListener.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * @(#)PaletteListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -/** - * Interface for handling palette events. - * - * @see PaletteButton - * - * @version <$CURRENT_VERSION$> - */ -public interface PaletteListener { - /** - * The user selected a palette entry. The selected button is - * passed as an argument. - */ - public void paletteUserSelected(PaletteButton button); - - /** - * The user moved the mouse over the palette entry. - */ - public void paletteUserOver(PaletteButton button, boolean inside); -} diff --git a/JHotDraw/src/CH/ifa/draw/util/RedoCommand.java b/JHotDraw/src/CH/ifa/draw/util/RedoCommand.java deleted file mode 100644 index 6bf082779..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/RedoCommand.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * @(#)RedoCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.standard.*; -import CH.ifa.draw.framework.*; - -/** - * Command to redo the latest undone change in the drawing. - * - * @version <$CURRENT_VERSION$> - */ -public class RedoCommand extends AbstractCommand { - - /** - * Constructs a properties command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public RedoCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - UndoManager um = getDrawingEditor().getUndoManager(); - if ((um == null) || !um.isRedoable()) { - return; - } - - Undoable lastRedoable = um.popRedo(); - // Execute redo - boolean hasBeenUndone = lastRedoable.redo(); - // Add to undo stack - if (hasBeenUndone && lastRedoable.isUndoable()) { - um.pushUndo(lastRedoable); - } - - lastRedoable.getDrawingView().checkDamage(); - - getDrawingEditor().figureSelectionChanged(lastRedoable.getDrawingView()); - } - - /** - * Used in enabling the redo menu item. - * Redo menu item will be enabled only when there is at least one redoable - * activity in the UndoManager. - */ - public boolean isExecutableWithView() { - UndoManager um = getDrawingEditor().getUndoManager(); - if ((um != null) && (um.getRedoSize() > 0)) { - return true; - } - - return false; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/ReverseListEnumerator.java b/JHotDraw/src/CH/ifa/draw/util/ReverseListEnumerator.java deleted file mode 100644 index cf17a13df..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/ReverseListEnumerator.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * @(#)ReverseListEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Iterator; - -/** - * An Enumeration that enumerates a list back (size-1) to front (0). - * - * @version <$CURRENT_VERSION$> - */ -public class ReverseListEnumerator implements Iterator { - - private List myList; - private int count; - - public ReverseListEnumerator(List l) { - myList = l; - count = myList.size() - 1; - } - - public boolean hasNext() { - return count >= 0; - } - - public Object next() { - if (count >= 0) { - return myList.get(count--); - } - throw new NoSuchElementException("ReverseListEnumerator"); - } - - public void remove() { - myList.remove(count); - count--; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/SerializationStorageFormat.java b/JHotDraw/src/CH/ifa/draw/util/SerializationStorageFormat.java deleted file mode 100644 index dbc10edc3..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/SerializationStorageFormat.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * @(#)SerializationStorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.io.*; -import CH.ifa.draw.framework.Drawing; - -/** - * A SerializationStorageFormat is a straight-forward file format to store and restore - * Drawings. It uses Java's serialization mechanism to store Drawings. The SerializationStorageFormat - * has the file extension "ser" (e.g. my_picasso.ser). - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class SerializationStorageFormat extends StandardStorageFormat { - - /** - * Create a SerialzationStorageFormat for storing and restoring Drawings. - */ - public SerializationStorageFormat() { - super(); - } - - /** - * Factory method to create the file extension recognized by the FileFilter for this - * SerializationStorageFormat. The SerializationStorageFormat has the file extension "ser" - * (e.g. my_picasso.ser). - * - * @return new file extension - */ - protected String createFileExtension() { - return "ser"; - } - - /** - * Factory method to create a file description for the file type when displaying the - * associated FileFilter. - * - * @return new file description - */ - public String createFileDescription() { - return "Serialization (" + getFileExtension() + ")"; - } - - /** - * Store a Drawing under a given name. The name should be valid with regard to the FileFilter - * that means, it should already contain the appropriate file extension. - * - * @param fileName file name of the Drawing under which it should be stored - * @param saveDrawing drawing to be saved - */ - public String store(String fileName, Drawing saveDrawing) throws IOException { - FileOutputStream stream = new FileOutputStream(adjustFileName(fileName)); - ObjectOutput output = new ObjectOutputStream(stream); - output.writeObject(saveDrawing); - output.close(); - return adjustFileName(fileName); - } - - /** - * Restore a Drawing from a file with a given name. The name must be should with regard to the - * FileFilter that means, it should have the appropriate file extension. - * - * @param fileName of the file in which the Drawing has been saved - * @return restored Drawing - */ - public Drawing restore(String fileName) throws IOException { - try { - FileInputStream stream = new FileInputStream(fileName); - ObjectInput input = new ObjectInputStream(stream); - return (Drawing)input.readObject(); - } - catch (ClassNotFoundException exception) { - throw new IOException("Could not restore drawing '" + fileName +"': class not found!"); - } - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/util/StandardStorageFormat.java b/JHotDraw/src/CH/ifa/draw/util/StandardStorageFormat.java deleted file mode 100644 index 6ffc64deb..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/StandardStorageFormat.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * @(#)StandardStorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import javax.swing.filechooser.FileFilter; -import java.io.IOException; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.File; -import CH.ifa.draw.framework.Drawing; - -/** - * A StandardStorageFormat is an internal file format to store and restore - * Drawings. It uses its own descriptive syntax ands write classes and attributes - * as plain text in a text file. The StandardStorageFormat has the file extension - * "draw" (e.g. my_picasso.draw). - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class StandardStorageFormat implements StorageFormat { - - /** - * FileFilter for a javax.swing.JFileChooser which recognizes files with the - * extension "draw" - */ - private FileFilter myFileFilter; - - /** - * File extension - */ - private String myFileExtension; - - /** - * Description of the file type when displaying the FileFilter - */ - private String myFileDescription; - - /** - * Create a StandardStorageFormat for storing and restoring Drawings. - */ - public StandardStorageFormat() { - setFileExtension(createFileExtension()); - setFileDescription(createFileDescription()); - setFileFilter(createFileFilter()); - } - - /** - * Factory method to create the file extension recognized by the FileFilter for this - * StandardStorageFormat. The StandardStorageFormat has the file extension "draw" - * (e.g. my_picasso.draw). - * - * @return new file extension - */ - protected String createFileExtension() { - return myFileExtension = "draw"; - } - - /** - * Set the file extension for the storage format - * - * @param newFileExtension extension - */ - public void setFileExtension(String newFileExtension) { - myFileExtension = newFileExtension; - } - - /** - * Return the file extension for the storage format - * - * @return file extension - */ - public String getFileExtension() { - return myFileExtension; - } - - /** - * Factory method to create a file description for the file type when displaying the - * associated FileFilter. - * - * @return new file description - */ - public String createFileDescription() { - return "Internal Format (" + getFileExtension() + ")"; - } - - /** - * Set the file description for the file type of the storage format - * - * @param newFileDescription description of the file type - */ - public void setFileDescription(String newFileDescription) { - myFileDescription = newFileDescription; - } - - /** - * Return the file description for the file type of the storage format - * - * @return description of the file type - */ - public String getFileDescription() { - return myFileDescription; - } - - /** - * Factory method to create a FileFilter that accepts file with the appropriate - * file exention used by a javax.swing.JFileChooser. Subclasses can override this - * method to provide their own file filters. - * - * @return FileFilter for this StorageFormat - */ - protected FileFilter createFileFilter() { - return new FileFilter() { - public boolean accept(File checkFile) { - // still display directories for navigation - if (checkFile.isDirectory()) { - return true; - } - else { - return checkFile.getName().endsWith("." + getFileExtension()); - } - } - - public String getDescription() { - return getFileDescription(); - } - }; - } - - /** - * Set the FileFilter used to identify Drawing files with the correct file - * extension for this StorageFormat. - * - * @param newFileFilter FileFilter for this StorageFormat - */ - public void setFileFilter(FileFilter newFileFilter) { - myFileFilter = newFileFilter; - } - - /** - * Return the FileFilter used to identify Drawing files with the correct file - * extension for this StorageFormat. - * - * @return FileFilter for this StorageFormat - */ - public FileFilter getFileFilter() { - return myFileFilter; - } - - /** - * @see CH.ifa.draw.util.StorageFormat#isRestoreFormat() - */ - public boolean isRestoreFormat() { - return true; - } - - /** - * @see CH.ifa.draw.util.StorageFormat#isStoreFormat() - */ - public boolean isStoreFormat() { - return true; - } - - /** - * Store a Drawing under a given name. If the file name does not have the correct - * file extension, then the file extension is added. - * - * @param fileName file name of the Drawing under which it should be stored - * @param saveDrawing drawing to be saved - * @return file name with correct file extension - */ - public String store(String fileName, Drawing saveDrawing) throws IOException { - FileOutputStream stream = new FileOutputStream(adjustFileName(fileName)); - StorableOutput output = new StorableOutput(stream); - output.writeStorable(saveDrawing); - output.close(); - return adjustFileName(fileName); - } - - /** - * Restore a Drawing from a file with a given name. - * - * @param fileName of the file in which the Drawing has been saved - * @return restored Drawing - */ - public Drawing restore(String fileName) throws IOException { - if (!hasCorrectFileExtension(fileName)) { - return null; - } - else { - FileInputStream stream = new FileInputStream(fileName); - StorableInput input = new StorableInput(stream); - return (Drawing)input.readStorable(); - } - } - - /** - * Test, whether two StorageFormats are the same. They are the same if they both support the - * same file extension. - * - * @return true, if both StorageFormats have the same file extension, false otherwise - */ - public boolean equals(Object compareObject) { - if (compareObject instanceof StandardStorageFormat) { - return getFileExtension().equals(((StandardStorageFormat)compareObject).getFileExtension()); - } - else { - return false; - } - } - - /** - * Adjust a file name to have the correct file extension. - * - * @param testFileName file name to be tested for a correct file extension - * @return testFileName + file extension if necessary - */ - protected String adjustFileName(String testFileName) { - if (!hasCorrectFileExtension(testFileName)) { - return testFileName + "." + getFileExtension(); - } - else { - return testFileName; - } - } - - /** - * Test whether the file name has the correct file extension - * - * @return true, if the file has the correct extension, false otherwise - */ - protected boolean hasCorrectFileExtension(String testFileName) { - return testFileName.endsWith("." + getFileExtension()); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/util/StandardVersionControlStrategy.java b/JHotDraw/src/CH/ifa/draw/util/StandardVersionControlStrategy.java deleted file mode 100644 index 3968b3416..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/StandardVersionControlStrategy.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * @(#)StandardVersionControlStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.*; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class StandardVersionControlStrategy implements VersionControlStrategy { - private VersionRequester myVersionRequester; - - public StandardVersionControlStrategy(VersionRequester newVersionRequester) { - setVersionRequester(newVersionRequester); - } - - /** - * Define a strategy how to select those versions of JHotDraw - * with which they are compatible. - */ - public void assertCompatibleVersion() { - String[] requiredVersions = getVersionRequester().getRequiredVersions(); - // version is compatible if no version was specified - if (requiredVersions.length == 0) { - return; - } - for (int i = 0; i < requiredVersions.length; i++) { - if (isCompatibleVersion(requiredVersions[i])) { - // a compatible version has been found - return; - } - } - // no matching version was found - handleIncompatibleVersions(); - } - - /** - * This method is called in open() if an incompatible version has been - * encountered. Applications can override this method to provide customized - * exception handling for this case. In the default implementation, a - * JHotDrawRuntimeException is thrown. - */ - protected void handleIncompatibleVersions() { - // collect version info - String[] requiredVersions = getVersionRequester().getRequiredVersions(); - StringBuffer expectedVersions = new StringBuffer("["); - for (int i = 0; i < requiredVersions.length - 1; i++) { - expectedVersions.append(requiredVersions[i] + ", "); - } - if (requiredVersions.length > 0) { - expectedVersions.append(requiredVersions[requiredVersions.length - 1]); - } - expectedVersions.append("]"); - - // no compatible version has been found - throw new JHotDrawRuntimeException("Incompatible version of JHotDraw found: " - + VersionManagement.getJHotDrawVersion() - + " (expected: " + expectedVersions + ")"); - } - - /** - * Subclasses can override this method to specify an algorithms that determines - * how version strings are compared and which version strings can be regarded - * as compatible. For example, a subclass may choose that all versions 5.x of - * JHotDraw are compatible with the application, so only the first digit in - * the version number is considered significant. In the default implementation, - * all versions that are equal or greater than the expected version are compatible. - * - * @param compareVersionString application version to compare with JHotDraw's version - */ - protected boolean isCompatibleVersion(String compareVersionString) { - return VersionManagement.isCompatibleVersion(compareVersionString); - } - - private void setVersionRequester(VersionRequester newVersionRequester) { - myVersionRequester = newVersionRequester; - } - - protected VersionRequester getVersionRequester() { - return myVersionRequester; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/Storable.java b/JHotDraw/src/CH/ifa/draw/util/Storable.java deleted file mode 100644 index 3c04ca3df..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/Storable.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)Storable.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.io.*; - -/** - * Interface that is used by StorableInput and StorableOutput - * to flatten and resurrect objects. Objects that implement - * this interface and that are resurrected by StorableInput - * have to provide a default constructor with no arguments. - * - * @see StorableInput - * @see StorableOutput - * - * @version <$CURRENT_VERSION$> - */ -public interface Storable { - /** - * Writes the object to the StorableOutput. - */ - public void write(StorableOutput dw); - - /** - * Reads the object from the StorableInput. - */ - public void read(StorableInput dr) throws IOException; -} diff --git a/JHotDraw/src/CH/ifa/draw/util/StorableInput.java b/JHotDraw/src/CH/ifa/draw/util/StorableInput.java deleted file mode 100644 index f696e10a2..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/StorableInput.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * @(#)StorableInput.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.io.*; -import java.awt.Color; -import java.util.List; - -/** - * An input stream that can be used to resurrect Storable objects. - * StorableInput preserves the object identity of the stored objects. - * - * @see Storable - * @see StorableOutput - * - * @version <$CURRENT_VERSION$>s - */ -public class StorableInput { - - private StreamTokenizer fTokenizer; - private List fMap; - - /** - * Initializes a Storable input with the given input stream. - */ - public StorableInput(InputStream stream) { - Reader r = new BufferedReader(new InputStreamReader(stream)); - fTokenizer = new StreamTokenizer(r); - // include inner class separate in class names - fTokenizer.wordChars('$', '$'); - fMap = CollectionsFactory.current().createList(); - } - - /** - * Reads and resurrects a Storable object from the input stream. - */ - public Storable readStorable() throws IOException { - Storable storable; - String s = readString(); - - if (s.equals("NULL")) { - return null; - } - - if (s.equals("REF")) { - int ref = readInt(); - return retrieve(ref); - } - - storable = (Storable) makeInstance(s); - map(storable); - storable.read(this); - return storable; - } - - /** - * Reads a string from the input stream. - */ - public String readString() throws IOException { - int token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_WORD || token == '"') { - return fTokenizer.sval; - } - - String msg = "String expected in line: " + fTokenizer.lineno(); - throw new IOException(msg); - } - - /** - * Reads an int from the input stream. - */ - public int readInt() throws IOException { - int token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_NUMBER) { - return (int) fTokenizer.nval; - } - - String msg = "Integer expected in line: " + fTokenizer.lineno(); - IOException exception = new IOException(msg); - exception.printStackTrace(); - throw new IOException(msg); - } - - /** - * Reads an int from the input stream. - */ - public long readLong() throws IOException { - long token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_NUMBER) { - return (long)fTokenizer.nval; - } - String msg = "Long expected in line: " + fTokenizer.lineno(); - IOException exception = new IOException(msg); - //exception.printStackTrace(); - throw exception; - } - - /** - * Reads a color from the input stream. - */ - public Color readColor() throws IOException { - return new Color(readInt(), readInt(), readInt()); - } - - /** - * Reads a double from the input stream. - */ - public double readDouble() throws IOException { - double value = 0.0; - int token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_NUMBER) { - // Allow for a bug in StreamTokenizer, which causes the exponent - // to be ignored, then read in as a string as the next token. - // This is a nasty kludge and I think it could fail if a number - // without an exponent is followed by a string beginning with "E" or "e" - value = fTokenizer.nval; - int token2 = fTokenizer.nextToken(); - if (token2 == StreamTokenizer.TT_WORD && - (fTokenizer.sval.charAt(0) == 'E' || fTokenizer.sval.charAt(0) == 'e')) { - value = Double.valueOf(value+fTokenizer.sval).doubleValue(); - } - else { - fTokenizer.pushBack(); - } - return value; - } - else { - throw new IOException("Double expected in line: " + fTokenizer.lineno()); - } - } - - /** - * Reads a boolean from the input stream. - */ - public boolean readBoolean() throws IOException { - int token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_NUMBER) { - return ((int) fTokenizer.nval) == 1; - } - - String msg = "Integer expected in line: " + fTokenizer.lineno(); - throw new IOException(msg); - } - - private Object makeInstance(String className) throws IOException { - try { - Class cl = Class.forName(className); - return cl.newInstance(); - } - catch (NoSuchMethodError e) { - throw new IOException("Class " + className - + " does not seem to have a no-arg constructor"); - } - catch (ClassNotFoundException e) { - throw new IOException("No class: " + className); - } - catch (InstantiationException e) { - throw new IOException("Cannot instantiate: " + className); - } - catch (IllegalAccessException e) { - throw new IOException("Class (" + className + ") not accessible"); - } - } - - private void map(Storable storable) { - if (!fMap.contains(storable)) { - fMap.add(storable); - } - } - - private Storable retrieve(int ref) { - return (Storable)fMap.get(ref); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/StorableOutput.java b/JHotDraw/src/CH/ifa/draw/util/StorableOutput.java deleted file mode 100644 index 2c1e5c3e6..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/StorableOutput.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * @(#)StorableOutput.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.io.*; -import java.awt.Color; -import java.util.List; - -/** - * An output stream that can be used to flatten Storable objects. - * StorableOutput preserves the object identity of the stored objects. - * - * @see Storable - * @see StorableInput - * - * @version <$CURRENT_VERSION$> - */ -public class StorableOutput extends Object { - - private PrintWriter fStream; - private List fMap; - private int fIndent; - - /** - * Initializes the StorableOutput with the given output stream. - */ - public StorableOutput(OutputStream stream) { - fStream = new PrintWriter(stream); - fMap = CollectionsFactory.current().createList(); - fIndent = 0; - } - - /** - * Writes a storable object to the output stream. - */ - public void writeStorable(Storable storable) { - if (storable == null) { - fStream.print("NULL"); - space(); - return; - } - - if (mapped(storable)) { - writeRef(storable); - return; - } - - incrementIndent(); - startNewLine(); - map(storable); - fStream.print(storable.getClass().getName()); - space(); - storable.write(this); - space(); - decrementIndent(); - } - - /** - * Writes an int to the output stream. - */ - public void writeInt(int i) { - fStream.print(i); - space(); - } - - /** - * Writes a long to the output stream. - */ - public void writeLong(long l) { - fStream.print(l); - space(); - } - - public void writeColor(Color c) { - writeInt(c.getRed()); - writeInt(c.getGreen()); - writeInt(c.getBlue()); - } - - /** - * Writes an int to the output stream. - */ - public void writeDouble(double d) { - fStream.print(d); - space(); - } - - /** - * Writes an int to the output stream. - */ - public void writeBoolean(boolean b) { - if (b) { - fStream.print(1); - } - else { - fStream.print(0); - } - space(); - } - - /** - * Writes a string to the output stream. Special characters - * are quoted. - */ - public void writeString(String s) { - fStream.print('"'); - for(int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - switch(c) { - case '\n': fStream.print('\\'); fStream.print('n'); break; - case '"' : fStream.print('\\'); fStream.print('"'); break; - case '\\': fStream.print('\\'); fStream.print('\\'); break; - case '\t': fStream.print('\\'); fStream.print('\t'); break; - default: fStream.print(c); - } - - } - fStream.print('"'); - space(); - } - - /** - * Closes a storable output stream. - */ - public void close() { - fStream.close(); - } - - private boolean mapped(Storable storable) { - return fMap.contains(storable); - } - - private void map(Storable storable) { - if (!fMap.contains(storable)) { - fMap.add(storable); - } - } - - private void writeRef(Storable storable) { - int ref = fMap.indexOf(storable); - - fStream.print("REF"); - space(); - fStream.print(ref); - space(); - } - - private void incrementIndent() { - fIndent += 4; - } - - private void decrementIndent() { - fIndent -= 4; - if (fIndent < 0) fIndent = 0; - } - - private void startNewLine() { - fStream.println(); - for (int i=0; i<fIndent; i++) { - space(); - } - } - - private void space() { - fStream.print(' '); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/StorageFormat.java b/JHotDraw/src/CH/ifa/draw/util/StorageFormat.java deleted file mode 100644 index 1cc1adae3..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/StorageFormat.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * @(#)StorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import javax.swing.filechooser.FileFilter; -import java.io.IOException; -import CH.ifa.draw.framework.Drawing; - -/** - * Interface to define a storage format. A StorageFormat is a strategy that knows how to store - * and restore a Drawing according to a specific encoding. Typically it can be recognized by - * a file extension. To identify a valid file format for a Drawing an appropriate FileFilter - * for a javax.swing.JFileChooser component can be requested. - * - * @see Drawing - * @see StorageFormatManager - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface StorageFormat { - - /** - * Return a FileFilter that can be used to identify files which can be stored and restored - * with this Storage Format. Typically, each storage format has its own recognizable file - * extension. - * - * @return FileFilter to be used with a javax.swing.JFileChooser - */ - public FileFilter getFileFilter(); - - /** - * Every format has to identify itself as able to store and/or restore from - * the format it represents. If the storage format can save to the format, it - * should return true in this method. - * @return boolean <code>true</code> if the format can save - */ - public boolean isStoreFormat(); - - /** - * Every format has to identify itself as able to store and/or restore from - * the format it represents. If the storage format can load from the format, - * it should return true in this method. - * @return boolean <code>true</code> if the format can load - */ - public boolean isRestoreFormat(); - - /** - * Store a Drawing under a given name. - * - * @param fileName file name of the Drawing under which it should be stored - * @param saveDrawing drawing to be saved - * @return file name with correct file extension - */ - public String store(String fileName, Drawing saveDrawing) throws IOException; - - /** - * Restore a Drawing from a file with a given name. - * - * @param fileName of the file in which the Drawing has been saved - * @return restored Drawing - */ - public Drawing restore(String fileName) throws IOException; -} diff --git a/JHotDraw/src/CH/ifa/draw/util/StorageFormatManager.java b/JHotDraw/src/CH/ifa/draw/util/StorageFormatManager.java deleted file mode 100644 index 4ca1441d3..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/StorageFormatManager.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * @(#)StorageFormatManager.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import javax.swing.JFileChooser; -import javax.swing.filechooser.FileFilter; - -import java.io.File; -import java.util.List; -import java.util.Iterator; - -/** - * The StorageFormatManager is a contains StorageFormats. - * It is not a Singleton because it could be necessary to deal with different - * format managers, e.g. one for importing Drawings, one for exporting Drawings. - * If one StorageFormat matches the file extension of the Drawing file, then this - * StorageFormat can be used to store or restore the Drawing. - * - * @see StorageFormat - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class StorageFormatManager { - - /** - * List containing all registered storage formats - */ - private List myStorageFormats; - - /** - * Default storage format that should be selected in a javax.swing.JFileChooser - */ - private StorageFormat myDefaultStorageFormat; - - /** - * Create a new StorageFormatManager. - */ - public StorageFormatManager() { - myStorageFormats = CollectionsFactory.current().createList(); - } - - /** - * Add a StorageFormat that should be supported by this StorageFormatManager. - * - * @param newStorageFormat new StorageFormat to be supported - */ - public void addStorageFormat(StorageFormat newStorageFormat) { - myStorageFormats.add(newStorageFormat); - } - - /** - * Remove a StorageFormat that should no longer be supported by this StorageFormatManager. - * The StorageFormat is excluded in when search for a StorageFormat. - * - * @param oldStorageFormat old StorageFormat no longer to be supported - */ - public void removeStorageFormat(StorageFormat oldStorageFormat) { - myStorageFormats.remove(oldStorageFormat); - } - - /** - * Test, whether a StorageFormat is supported by this StorageFormat - */ - public boolean containsStorageFormat(StorageFormat checkStorageFormat){ - return myStorageFormats.contains(checkStorageFormat); - } - - /** - * Set a StorageFormat as the default storage format which is selected in a - * javax.swing.JFileChooser. The default storage format must be already - * added with addStorageFormat. Setting the default storage format to null - * does not automatically remove the StorageFormat from the list of - * supported StorageFormats. - * - * @param newDefaultStorageFormat StorageFormat that should be selected in a JFileChooser - */ - public void setDefaultStorageFormat(StorageFormat newDefaultStorageFormat) { - myDefaultStorageFormat = newDefaultStorageFormat; - } - - /** - * Return the StorageFormat which is used as selected file format in a javax.swing.JFileChooser - * - * @return default storage format - */ - public StorageFormat getDefaultStorageFormat() { - return myDefaultStorageFormat; - } - - /** - * Register all FileFilters supported by StorageFormats - * - * @param fileChooser javax.swing.JFileChooser to which FileFilters are added - */ - public void registerFileFilters(JFileChooser fileChooser) { - if (fileChooser.getDialogType() == JFileChooser.OPEN_DIALOG) { - // behavior for open dialogs - StorageFormat sf; - for (Iterator e = myStorageFormats.iterator(); e.hasNext();) { - sf = (StorageFormat) e.next(); - if (sf.isRestoreFormat()) { - fileChooser.addChoosableFileFilter(sf.getFileFilter()); - } - } - - // set a current activated file filter if a default storage Format has been defined - sf = getDefaultStorageFormat(); - if (sf != null && sf.isRestoreFormat()) { - fileChooser.setFileFilter(sf.getFileFilter()); - } - } - else if (fileChooser.getDialogType() == JFileChooser.SAVE_DIALOG) { - // behavior for save dialogs - StorageFormat sf; - for (Iterator e = myStorageFormats.iterator(); e.hasNext();) { - sf = (StorageFormat) e.next(); - if (sf.isStoreFormat()) { - fileChooser.addChoosableFileFilter(sf.getFileFilter()); - } - } - - // set a current activated file filter if a default storage Format has been defined - sf = getDefaultStorageFormat(); - if (sf != null && sf.isStoreFormat()) { - fileChooser.setFileFilter(sf.getFileFilter()); - } - } - else { - // old behavior - StorageFormat sf; - for (Iterator e = myStorageFormats.iterator(); e.hasNext();) { - sf = (StorageFormat) e.next(); - fileChooser.addChoosableFileFilter(sf.getFileFilter()); - } - - // set a current activated file filter if a default storage Format has been defined - sf = getDefaultStorageFormat(); - if (sf != null) { - fileChooser.setFileFilter(sf.getFileFilter()); - } - } - } - - /** - * Find a StorageFormat that can be used according to a FileFilter to store a Drawing - * in a file or restore it from a file respectively. - * - * @param findFileFilter FileFilter used to identify a StorageFormat - * @return StorageFormat, if a matching file extension could be found, false otherwise - */ - public StorageFormat findStorageFormat(FileFilter findFileFilter) { - Iterator formatsIterator = myStorageFormats.iterator(); - StorageFormat currentStorageFormat = null; - while (formatsIterator.hasNext()) { - currentStorageFormat = (StorageFormat)formatsIterator.next(); - if (currentStorageFormat.getFileFilter().equals(findFileFilter)) { - return currentStorageFormat; - } - } - - return null; - } - - /** - * Find a StorageFormat that can be used according to a file object to store a - * Drawing in a file or restore it from a file respectively. - * - * @param file a File object to be matched - * @return StorageFormat, if a matching file extension could be found, <code>null</code> - * otherwise - */ - public StorageFormat findStorageFormat(File file) { - Iterator formatsIterator = myStorageFormats.iterator(); - StorageFormat currentStorageFormat; - while (formatsIterator.hasNext()) { - currentStorageFormat = (StorageFormat) formatsIterator.next(); - if (currentStorageFormat.getFileFilter().accept(file)) { - return currentStorageFormat; - } - } - return null; - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/util/UndoCommand.java b/JHotDraw/src/CH/ifa/draw/util/UndoCommand.java deleted file mode 100644 index 315b5f677..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/UndoCommand.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * @(#)UndoCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.standard.*; -import CH.ifa.draw.framework.*; - -/** - * Command to undo the latest change in the drawing. - * Undo activities can be undone only once, therefore they - * are not added to the undo stack again (redo activities - * can be added to the redo stack again, because they can - * be redone several times, every time pushing a corresponding - * undo activity as well). - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoCommand extends AbstractCommand { - - /** - * Constructs a properties command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public UndoCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - UndoManager um = getDrawingEditor().getUndoManager(); - - if ((um == null) || !um.isUndoable()) { - return; - } - - Undoable lastUndoable = um.popUndo(); - // Execute undo - boolean hasBeenUndone = lastUndoable.undo(); - - // Add to redo stack - if (hasBeenUndone && lastUndoable.isRedoable()) { - um.pushRedo(lastUndoable); - } - lastUndoable.getDrawingView().checkDamage(); - - getDrawingEditor().figureSelectionChanged(lastUndoable.getDrawingView()); - } - - /** - * Used in enabling the undo menu item. - * Undo menu item will be enabled only when there is atleast one undoable - * activity registered with UndoManager. - */ - public boolean isExecutableWithView() { - UndoManager um = getDrawingEditor().getUndoManager(); - - if ((um != null) && (um.getUndoSize() > 0)) { - return true; - } - - return false; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/UndoManager.java b/JHotDraw/src/CH/ifa/draw/util/UndoManager.java deleted file mode 100644 index 842f8684a..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/UndoManager.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * @(#)UndoManager.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.DrawingView; - -import java.util.List; -import java.util.Iterator; - -/** - * This class manages all the undoable commands. It keeps track of all - * the modifications done through user interactions. - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoManager { - /** - * Maximum default buffer size for undo and redo stack - */ - public static final int DEFAULT_BUFFER_SIZE = 20; - - /** - * Collection of undo activities - */ - private List redoStack; - - /** - * Collection of undo activities - */ - private List undoStack; - private int maxStackCapacity; - - public UndoManager() { - this(DEFAULT_BUFFER_SIZE); - } - - public UndoManager(int newUndoStackSize) { - maxStackCapacity = newUndoStackSize; - undoStack = CollectionsFactory.current().createList(maxStackCapacity); - redoStack = CollectionsFactory.current().createList(maxStackCapacity); - } - - public void pushUndo(Undoable undoActivity) { - if (undoActivity.isUndoable()) { - removeFirstElementInFullList(undoStack); - undoStack.add(undoActivity); - } - else { - // a not undoable activity clears the stack because - // the last activity does not correspond with the - // last undo activity - undoStack = CollectionsFactory.current().createList(maxStackCapacity); - } - } - - public void pushRedo(Undoable redoActivity) { - if (redoActivity.isRedoable()) { - - removeFirstElementInFullList(redoStack); - - // add redo activity only if it is not already the last - // one in the buffer - if ((getRedoSize() == 0) || (peekRedo() != redoActivity)) { - redoStack.add(redoActivity); - } - } - else { - // a not undoable activity clears the tack because - // the last activity does not correspond with the - // last undo activity - redoStack = CollectionsFactory.current().createList(maxStackCapacity); - } - } - - /** - * If buffersize exceeds, remove the oldest command - */ - private void removeFirstElementInFullList(List l) { - if (l.size() >= maxStackCapacity) { - Undoable removedActivity = (Undoable)l.remove(0); - removedActivity.release(); - } - } - - private Undoable getLastElement(List l) { - if (l.size() > 0) { - return (Undoable)l.get(l.size() - 1); - } - else { - return null; - } - } - public boolean isUndoable() { - if (getUndoSize() > 0) { - return getLastElement(undoStack).isUndoable(); - } - else { - return false; - } - } - - public boolean isRedoable() { - if (getRedoSize() > 0) { - return getLastElement(redoStack).isRedoable(); - } - else { - return false; - } - } - - protected Undoable peekUndo() { - if (getUndoSize() > 0) { - return getLastElement(undoStack); - } - else { - return null; - } - } - - protected Undoable peekRedo() { - if (getRedoSize() > 0) { - return getLastElement(redoStack); - } - else { - return null; - } - } - - /** - * Returns the current size of undo buffer. - */ - public int getUndoSize() { - return undoStack.size(); - } - - /** - * Returns the current size of redo buffer. - */ - public int getRedoSize() { - return redoStack.size(); - } - - /** - * Throw NoSuchElementException if there is none - */ - public Undoable popUndo() { - // Get the last element - throw NoSuchElementException if there is none - Undoable lastUndoable = peekUndo(); - - // Remove it from undo collection - undoStack.remove(getUndoSize() - 1); - - return lastUndoable; - } - - /** - * Throw NoSuchElementException if there is none - */ - public Undoable popRedo() { - // Get the last element - throw NoSuchElementException if there is none - Undoable lastUndoable = peekRedo(); - - // Remove it from undo collection - redoStack.remove(getRedoSize() - 1); - - return lastUndoable; - } - - public void clearUndos() { - clearStack(undoStack); - } - - public void clearRedos() { - clearStack(redoStack); - } - - protected void clearStack(List clearStack) { - clearStack.clear(); - } - - /** - * Removes all undo activities that operate on the given DrawingView. - * @param checkDV DrawingView which is compared undo's DrawingView - */ - public void clearUndos(DrawingView checkDV) { - Iterator iter = undoStack.iterator(); - while (iter.hasNext()) { - Undoable currentUndo = (Undoable)iter.next(); - if (currentUndo.getDrawingView() == checkDV) { - iter.remove(); - } - } - } - - /** - * Removes all redo activities that operate on the given DrawingView. - * @param checkDV DrawingView which is compared redo's DrawingView - */ - public void clearRedos(DrawingView checkDV) { - Iterator iter = redoStack.iterator(); - while (iter.hasNext()) { - Undoable currentRedo = (Undoable)iter.next(); - if (currentRedo.getDrawingView() == checkDV) { - iter.remove(); - } - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/UndoRedoActivity.java b/JHotDraw/src/CH/ifa/draw/util/UndoRedoActivity.java deleted file mode 100644 index a6964468f..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/UndoRedoActivity.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * @(#)DragTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.*; - -/** - * An UndoRedoActivity can be used to turn a UndoActivity into a RedoActivity. - * In this case, the redo() method of an encapsulated activity is called when - * the undo() is executed, and undo() when redo() is executed. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoRedoActivity implements Undoable { - private Undoable myReversedActivity; - - protected UndoRedoActivity(Undoable newReversedActivity) { - setReversedActivity(newReversedActivity); - } - - /** - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (isRedoable()) { - return getReversedActivity().redo(); - } - - return false; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (isUndoable()) { - return getReversedActivity().undo(); - } - - return false; - } - - /** - * Dispatch to isRedoable of the activity to be reversed. - */ - public boolean isUndoable() { - return getReversedActivity().isRedoable(); - } - - /** - * Dispatch to setRedoable of the activity to be reversed. - */ - public void setUndoable(boolean newIsUndoable) { - getReversedActivity().setRedoable(newIsUndoable); - } - - /** - * Dispatch to isUndoable of the activity to be reversed. - */ - public boolean isRedoable() { - return getReversedActivity().isUndoable(); - } - - /** - * Dispatch to setUndoable of the activity to be reversed. - */ - public void setRedoable(boolean newIsRedoable) { - getReversedActivity().setUndoable(newIsRedoable); - } - - public void setAffectedFigures(FigureEnumeration newAffectedFigures) { - getReversedActivity().setAffectedFigures(newAffectedFigures); - } - - public FigureEnumeration getAffectedFigures() { - return getReversedActivity().getAffectedFigures(); - } - - public int getAffectedFiguresCount() { - return getReversedActivity().getAffectedFiguresCount(); - } - - public DrawingView getDrawingView() { - return getReversedActivity().getDrawingView(); - } - - public void release() { - getReversedActivity().release(); - } - - protected void setReversedActivity(Undoable newReversedActivity) { - myReversedActivity = newReversedActivity; - } - - public Undoable getReversedActivity() { - return myReversedActivity; - } - - public static Undoable createUndoRedoActivity(Undoable toBeReversed) { - // instead of reversing the reversed activity just return the original activity - if (toBeReversed instanceof UndoRedoActivity) { - return ((UndoRedoActivity)toBeReversed).getReversedActivity(); - } - else { - return new UndoRedoActivity(toBeReversed); - } - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/Undoable.java b/JHotDraw/src/CH/ifa/draw/util/Undoable.java deleted file mode 100644 index 13c6f1700..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/Undoable.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @(#)Undoable.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.FigureEnumeration; -import CH.ifa.draw.framework.DrawingView; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface Undoable { - /** - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo(); - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo(); - - public boolean isUndoable(); - - public void setUndoable(boolean newIsUndoable); - - public boolean isRedoable(); - - public void setRedoable(boolean newIsRedoable); - - /** - * Releases all resources related to an undoable activity - */ - public void release(); - - public DrawingView getDrawingView(); - - public void setAffectedFigures(FigureEnumeration newAffectedFigures); - - public FigureEnumeration getAffectedFigures(); - - public int getAffectedFiguresCount(); -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/util/UndoableAdapter.java b/JHotDraw/src/CH/ifa/draw/util/UndoableAdapter.java deleted file mode 100644 index 1f283fe03..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/UndoableAdapter.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * @(#)UndoableAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.FigureEnumerator; -import CH.ifa.draw.standard.ReverseFigureEnumerator; -import CH.ifa.draw.standard.StandardFigureSelection; - -import java.util.Collections; -import java.util.List; - -/** - * Most basic implementation for an Undoable activity. Subclasses should override - * methods to provide specialized behaviour when necessary. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoableAdapter implements Undoable { - - private List myAffectedFigures; - private boolean myIsUndoable; - private boolean myIsRedoable; - private DrawingView myDrawingView; - - public UndoableAdapter(DrawingView newDrawingView) { - setDrawingView(newDrawingView); - } - - /** - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - return isUndoable(); - } - - /** - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - return isRedoable(); - } - - public boolean isUndoable() { - return myIsUndoable; - } - - public void setUndoable(boolean newIsUndoable) { - myIsUndoable = newIsUndoable; - } - - public boolean isRedoable() { - return myIsRedoable; - } - - public void setRedoable(boolean newIsRedoable) { - myIsRedoable = newIsRedoable; - } - - public void setAffectedFigures(FigureEnumeration newAffectedFigures) { - // the enumeration is not reusable therefore a copy is made - // to be able to undo-redo the command several time - if(newAffectedFigures == null) { - throw new IllegalArgumentException(); - } - rememberFigures(newAffectedFigures); - } - - public FigureEnumeration getAffectedFigures() { - if(myAffectedFigures == null) { - return new FigureEnumerator(Collections.EMPTY_LIST); - } - else { - return new FigureEnumerator(CollectionsFactory.current().createList(myAffectedFigures)); - } - } - - public FigureEnumeration getAffectedFiguresReversed() { - return new ReverseFigureEnumerator(CollectionsFactory.current().createList(myAffectedFigures)); - } - - public int getAffectedFiguresCount() { - return myAffectedFigures.size(); - } - - protected void rememberFigures(FigureEnumeration toBeRemembered) { - myAffectedFigures = CollectionsFactory.current().createList(); - while (toBeRemembered.hasNextFigure()) { - myAffectedFigures.add(toBeRemembered.nextFigure()); - } - } - - /** - * Releases all resources related to an undoable activity - */ - public void release() { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().release(); - } - setAffectedFigures(FigureEnumerator.getEmptyEnumeration()); - } - - /** - * Create new set of affected figures for redo operation because - * deleting figures in an undo operation makes them unusable - * Especially contained figures have been removed from their - * observing container like CompositeFigure or DecoratorFigure. - * Duplicating these figures re-establishes the dependencies. - */ - protected void duplicateAffectedFigures() { - setAffectedFigures(StandardFigureSelection.duplicateFigures( - getAffectedFigures(), getAffectedFiguresCount())); - } - - public DrawingView getDrawingView() { - return myDrawingView; - } - - protected void setDrawingView(DrawingView newDrawingView) { - myDrawingView = newDrawingView; - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/util/UndoableCommand.java b/JHotDraw/src/CH/ifa/draw/util/UndoableCommand.java deleted file mode 100644 index f579321f3..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/UndoableCommand.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * @(#)UndoableCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.AbstractCommand; -import java.util.EventObject; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoableCommand implements Command, FigureSelectionListener, CommandListener { - - private Command myWrappedCommand; - private boolean hasSelectionChanged; - private AbstractCommand.EventDispatcher myEventDispatcher; - - public UndoableCommand(Command newWrappedCommand) { - setWrappedCommand(newWrappedCommand); - getWrappedCommand().addCommandListener(this); - setEventDispatcher(createEventDispatcher()); - } - - /** - * Executes the command. - */ - public void execute() { - hasSelectionChanged = false; - // listen for selection change events during executing the wrapped command - view().addFigureSelectionListener(this); - - getWrappedCommand().execute(); - - Undoable undoableCommand = getWrappedCommand().getUndoActivity(); - if ((undoableCommand != null) && (undoableCommand.isUndoable())) { - getDrawingEditor().getUndoManager().pushUndo(undoableCommand); - getDrawingEditor().getUndoManager().clearRedos(); - } - - // initiate manual update of undo/redo menu states if it has not - // been done automatically during executing the wrapped command - if (!hasSelectionChanged || (getDrawingEditor().getUndoManager().getUndoSize() == 1)) { - getDrawingEditor().figureSelectionChanged(view()); - } - - // remove because not all commands are listeners that have to be notified - // all the time (bug-id 595461) - view().removeFigureSelectionListener(this); - } - - /** - * Tests if the command can be executed. - */ - public boolean isExecutable() { - return getWrappedCommand().isExecutable(); - } - - protected void setWrappedCommand(Command newWrappedCommand) { - myWrappedCommand = newWrappedCommand; - } - - protected Command getWrappedCommand() { - return myWrappedCommand; - } - - /** - * Gets the command name. - */ - public String name() { - return getWrappedCommand().name(); - } - - public DrawingEditor getDrawingEditor() { - return getWrappedCommand().getDrawingEditor(); - } - - public DrawingView view() { - return getDrawingEditor().view(); - } - - public void figureSelectionChanged(DrawingView view) { - hasSelectionChanged = true; - } - - public Undoable getUndoActivity() { - return new UndoableAdapter(view()); - } - - public void setUndoActivity(Undoable newUndoableActivity) { - // do nothing: always return default UndoableAdapter - } - - public void addCommandListener(CommandListener newCommandListener) { - getEventDispatcher().addCommandListener(newCommandListener); - } - - public void removeCommandListener(CommandListener oldCommandListener) { - getEventDispatcher().removeCommandListener(oldCommandListener); - } - - private void setEventDispatcher(AbstractCommand.EventDispatcher newEventDispatcher) { - myEventDispatcher = newEventDispatcher; - } - - protected AbstractCommand.EventDispatcher getEventDispatcher() { - return myEventDispatcher; - } - - public AbstractCommand.EventDispatcher createEventDispatcher() { - return new AbstractCommand.EventDispatcher(this); - } - - public void commandExecuted(EventObject commandEvent) { - getEventDispatcher().fireCommandExecutedEvent(); - } - - public void commandExecutable(EventObject commandEvent) { - getEventDispatcher().fireCommandExecutableEvent(); - } - - public void commandNotExecutable(EventObject commandEvent) { - getEventDispatcher().fireCommandNotExecutableEvent(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/UndoableHandle.java b/JHotDraw/src/CH/ifa/draw/util/UndoableHandle.java deleted file mode 100644 index 84cf89ab8..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/UndoableHandle.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * @(#)UndoableHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.framework.Drawing; -import CH.ifa.draw.framework.DrawingView; -import CH.ifa.draw.framework.Figure; -import CH.ifa.draw.framework.Handle; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoableHandle implements Handle { - - private Handle myWrappedHandle; - private DrawingView myDrawingView; - - /** - * Constructor for <code>UndoableHandle</code>. - * @param newWrappedHandle - */ - public UndoableHandle(Handle newWrappedHandle) { - setWrappedHandle(newWrappedHandle); - } - - /** - * Constructor for <code>UndoableHandle</code>. - * @param newWrappedHandle - * @param newDrawingView - * @deprecated use the constructor without the DrawingView instead - */ - public UndoableHandle(Handle newWrappedHandle, DrawingView newDrawingView) { - setWrappedHandle(newWrappedHandle); - setDrawingView(newDrawingView); - } - - /** - * Locates the handle on the figure. The handle is drawn - * centered around the returned point. - * @see CH.ifa.draw.framework.Handle#locate() - */ - public Point locate() { - return getWrappedHandle().locate(); - } - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - * @see CH.ifa.draw.framework.Handle#invokeStart(int, int, CH.ifa.draw.framework.DrawingView) - */ - public void invokeStart(int x, int y, DrawingView view) { - getWrappedHandle().invokeStart(x, y, view); - } - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @see CH.ifa.draw.framework.Handle#invokeStart(int, int, CH.ifa.draw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeStart(x, y, drawingView) - */ - public void invokeStart(int x, int y, Drawing drawing) { - getWrappedHandle().invokeStart(x, y, drawing); - } - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - * @see CH.ifa.draw.framework.Handle#invokeStep(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - public void invokeStep(int x, int y, int anchorX, int anchorY, DrawingView view) { - getWrappedHandle().invokeStep(x, y, anchorX, anchorY, view); - } - - /** - * Tracks a step of the interaction. - * @param dx x delta of this step - * @param dy y delta of this step - * @see CH.ifa.draw.framework.Handle#invokeStep(int, int, CH.ifa.draw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeStep(x, y, anchorX, anchorY, drawingView) - */ - public void invokeStep(int dx, int dy, Drawing drawing) { - getWrappedHandle().invokeStep(dx, dy, drawing); - } - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - * @see CH.ifa.draw.framework.Handle#invokeEnd(int, int, int, int, CH.ifa.draw.framework.DrawingView) - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - getWrappedHandle().invokeEnd(x, y, anchorX, anchorY, view); - - Undoable undoableActivity = getWrappedHandle().getUndoActivity(); - if ((undoableActivity != null) && (undoableActivity.isUndoable())) { - view.editor().getUndoManager().pushUndo(undoableActivity); - view.editor().getUndoManager().clearRedos(); - } - } - - /** - * Tracks the end of the interaction. - * @see CH.ifa.draw.framework.Handle#invokeEnd(int, int, CH.ifa.draw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeEnd(x, y, anchorX, anchorY, drawingView). - */ - public void invokeEnd(int dx, int dy, Drawing drawing) { - getWrappedHandle().invokeEnd(dx, dy, drawing); - } - - /** - * Gets the handle's owner. - * @see CH.ifa.draw.framework.Handle#owner() - */ - public Figure owner() { - return getWrappedHandle().owner(); - } - - /** - * Gets the display box of the handle. - * @see CH.ifa.draw.framework.Handle#displayBox() - */ - public Rectangle displayBox() { - return getWrappedHandle().displayBox(); - } - - /** - * Tests if a point is contained in the handle. - * @see CH.ifa.draw.framework.Handle#containsPoint(int, int) - */ - public boolean containsPoint(int x, int y) { - return getWrappedHandle().containsPoint(x, y); - } - - /** - * Draws this handle. - * @see CH.ifa.draw.framework.Handle#draw(java.awt.Graphics) - */ - public void draw(Graphics g) { - getWrappedHandle().draw(g); - } - - protected void setWrappedHandle(Handle newWrappedHandle) { - myWrappedHandle = newWrappedHandle; - } - - protected Handle getWrappedHandle() { - return myWrappedHandle; - } - - /** - * @deprecated attribute not required anymore - */ - public DrawingView getDrawingView() { - return myDrawingView; - } - - /** - * @deprecated attribute not required anymore - */ - protected void setDrawingView(DrawingView newDrawingView) { - myDrawingView = newDrawingView; - } - - /** - * @see CH.ifa.draw.framework.Handle#getUndoActivity() - */ - public Undoable getUndoActivity() { - return new UndoableAdapter(getDrawingView()); - } - - /** - * @see CH.ifa.draw.framework.Handle#setUndoActivity(CH.ifa.draw.util.Undoable) - */ - public void setUndoActivity(Undoable newUndoableActivity) { - // do nothing: always return default UndoableAdapter - } - - /** - * @see CH.ifa.draw.framework.Handle#getCursor() - */ - public Cursor getCursor() { - return getWrappedHandle().getCursor(); - } - -} diff --git a/JHotDraw/src/CH/ifa/draw/util/UndoableTool.java b/JHotDraw/src/CH/ifa/draw/util/UndoableTool.java deleted file mode 100644 index 1075dbce6..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/UndoableTool.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * @(#)UndoableTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import CH.ifa.draw.framework.*; -import CH.ifa.draw.standard.AbstractTool; -import java.awt.event.MouseEvent; -import java.awt.event.KeyEvent; -import java.util.EventObject; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoableTool implements Tool, ToolListener { - - private Tool myWrappedTool; - private AbstractTool.EventDispatcher myEventDispatcher; - - public UndoableTool(Tool newWrappedTool) { - setEventDispatcher(createEventDispatcher()); - setWrappedTool(newWrappedTool); - getWrappedTool().addToolListener(this); - } - - /** - * Activates the tool for the given view. This method is called - * whenever the user switches to this tool. Use this method to - * reinitialize a tool. - */ - public void activate() { - getWrappedTool().activate(); - } - - /** - * Deactivates the tool. This method is called whenever the user - * switches to another tool. Use this method to do some clean-up - * when the tool is switched. Subclassers should always call - * super.deactivate. - */ - public void deactivate() { - getWrappedTool().deactivate(); - Undoable undoActivity = getWrappedTool().getUndoActivity(); - if ((undoActivity != null) && (undoActivity.isUndoable())) { - editor().getUndoManager().pushUndo(undoActivity); - editor().getUndoManager().clearRedos(); - // update menus - editor().figureSelectionChanged(getActiveView()); - } - } - - /** - * Handles mouse down events in the drawing view. - */ - public void mouseDown(MouseEvent e, int x, int y) { - getWrappedTool().mouseDown(e, x, y); - } - - /** - * Handles mouse drag events in the drawing view. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - getWrappedTool().mouseDrag(e, x, y); - } - - /** - * Handles mouse up in the drawing view. After the mouse button - * has been released, the associated tool activity can be undone - * if the associated tool supports the undo operation from the Undoable interface. - * - * @see CH.ifa.draw.util.Undoable - */ - public void mouseUp(MouseEvent e, int x, int y) { - getWrappedTool().mouseUp(e, x, y); - } - - /** - * Handles mouse moves (if the mouse button is up). - */ - public void mouseMove(MouseEvent evt, int x, int y) { - getWrappedTool().mouseMove(evt, x, y); - } - - /** - * Handles key down events in the drawing view. - */ - public void keyDown(KeyEvent evt, int key) { - getWrappedTool().keyDown(evt, key); - } - - public boolean isUsable() { - return getWrappedTool().isUsable(); - } - - public boolean isActive() { - // do not delegate but test whether this undoable tool is active - return editor().tool() == this; - } - - public boolean isEnabled() { - return getWrappedTool().isEnabled(); - } - - public void setUsable(boolean newIsUsable) { - getWrappedTool().setUsable(newIsUsable); - } - - public void setEnabled(boolean newIsEnabled) { - getWrappedTool().setEnabled(newIsEnabled); - } - - protected void setWrappedTool(Tool newWrappedTool) { - myWrappedTool = newWrappedTool; - } - - protected Tool getWrappedTool() { - return myWrappedTool; - } - - public DrawingEditor editor() { - return getWrappedTool().editor(); - } - - public DrawingView view() { - return editor().view(); - } - - public Undoable getUndoActivity() { - return new UndoableAdapter(view()); - } - - public void setUndoActivity(Undoable newUndoableActivity) { - // do nothing: always return default UndoableAdapter - } - - public void toolUsable(EventObject toolEvent) { - getEventDispatcher().fireToolUsableEvent(); - } - - public void toolUnusable(EventObject toolEvent) { - getEventDispatcher().fireToolUnusableEvent(); - } - - public void toolActivated(EventObject toolEvent) { - getEventDispatcher().fireToolActivatedEvent(); - } - - public void toolDeactivated(EventObject toolEvent) { - getEventDispatcher().fireToolDeactivatedEvent(); - } - - public void toolEnabled(EventObject toolEvent) { - getEventDispatcher().fireToolEnabledEvent(); - } - - public void toolDisabled(EventObject toolEvent) { - getEventDispatcher().fireToolDisabledEvent(); - } - - public void addToolListener(ToolListener newToolListener) { - getEventDispatcher().addToolListener(newToolListener); - } - - public void removeToolListener(ToolListener oldToolListener) { - getEventDispatcher().removeToolListener(oldToolListener); - } - - private void setEventDispatcher(AbstractTool.EventDispatcher newEventDispatcher) { - myEventDispatcher = newEventDispatcher; - } - - protected AbstractTool.EventDispatcher getEventDispatcher() { - return myEventDispatcher; - } - - public AbstractTool.EventDispatcher createEventDispatcher() { - return new AbstractTool.EventDispatcher(this); - } - - public DrawingView getActiveView() { - return editor().view(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/VersionControlStrategy.java b/JHotDraw/src/CH/ifa/draw/util/VersionControlStrategy.java deleted file mode 100644 index e59852c1e..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/VersionControlStrategy.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * @(#)VersionControlStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface VersionControlStrategy { - /** - * Define a strategy how to select those versions of JHotDraw - * with which they are compatible. - */ - public void assertCompatibleVersion(); -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/util/VersionManagement.java b/JHotDraw/src/CH/ifa/draw/util/VersionManagement.java deleted file mode 100644 index 65853c46d..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/VersionManagement.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * @(#)VersionManagement.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -import java.io.*; -import java.util.*; -import java.util.jar.*; - -/** - * Collection of utility methods that are useful for dealing with version information - * retrieved from reading jar files or package loaded by the class manager. Some - * methods also help comparing version information. The method getJHotDrawVersion() - * can be used to retrieve the current version of JHotDraw as loaded by the class manager. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class VersionManagement { - public static String JHOTDRAW_COMPONENT = "CH.ifa.draw/"; - public static String JHOTDRAW_JAR = "jhotdraw.jar"; - - public static Package[] packages = { - Package.getPackage("CH.ifa.draw.applet"), - Package.getPackage("CH.ifa.draw.application"), - Package.getPackage("CH.ifa.draw.contrib"), - Package.getPackage("CH.ifa.draw.figures"), - Package.getPackage("CH.ifa.draw.framework"), - Package.getPackage("CH.ifa.draw.standard"), - Package.getPackage("CH.ifa.draw.util") - }; - - /** - * Return the version of the main package of the framework. A version number is - * available if there is a corresponding version entry in the JHotDraw jar file - * for the framework package. - */ - public static String getJHotDrawVersion() { - // look for the framework main package - Package pack = packages[4]; - return pack.getSpecificationVersion(); - } - - /** - * - */ - public static String getPackageVersion(final Package lookupPackage) { - if (lookupPackage == null) { - return null; - } - - String specVersion = lookupPackage.getSpecificationVersion(); - if (specVersion != null) { - return specVersion; - } - else { - // search in parent package - String normalizedPackageName = normalizePackageName(lookupPackage.getName()); - String nextPackageName = getNextPackage(normalizedPackageName); - return getPackageVersion(Package.getPackage(nextPackageName)); - } - } - - /** - * Check whether a given application version is compatible with the version - * of JHotDraw currently loaded in the Java VM. A version number is - * available if there is a corresponding version entry in the JHotDraw jar file - * for the framework package. - */ - public static boolean isCompatibleVersion(String compareVersionString) { -// Package pack = VersionManagement.class.getPackage(); - Package pack = packages[4]; - if (compareVersionString == null) { - return pack.getSpecificationVersion() == null; - } - else { - return pack.isCompatibleWith(compareVersionString); - } - } - - /** - * Read the version information from a file with a given file name. The file - * must be a jar manifest file and all its entries are searched for package names - * and their specification version information. All information is collected - * in a map for later lookup of package names and their versions. - * - * @param versionFileName name of the jar file containing version information - */ - public static String readVersionFromFile(String applicationName, String versionFileName) { - try { - FileInputStream fileInput = new FileInputStream(versionFileName); - Manifest manifest = new Manifest(); - manifest.read(fileInput); - - Map entries = manifest.getEntries(); - // Now write out the pre-entry attributes - Iterator entryIterator = entries.entrySet().iterator(); - while (entryIterator.hasNext()) { - Map.Entry currentEntry = (Map.Entry)entryIterator.next(); - String packageName = currentEntry.getKey().toString(); - packageName = normalizePackageName(packageName); - Attributes attributes = (Attributes)currentEntry.getValue(); - String packageSpecVersion = attributes.getValue(Attributes.Name.SPECIFICATION_VERSION); - packageSpecVersion = extractVersionInfo(packageSpecVersion); - return packageSpecVersion; - } - } - catch (IOException exception) { - exception.printStackTrace(); - } - - // no version found - return null; - } - - /** - * Get the super package of a package specifier. The super package is the package - * specifier without the latest package name, e.g. the next package for "org.jhotdraw.tools" - * would be "org.jhotdraw". - * - * @param searchPackage package specifier - * @return next package if one is available, null otherwise - */ - protected static String getNextPackage(String searchPackage) { - if (searchPackage == null) { - return null; - } - - int foundNextPackage = searchPackage.lastIndexOf('.'); - if (foundNextPackage > 0) { - return searchPackage.substring(0, foundNextPackage); - } - else { - return null; - } - } - - /** - * A package name is normalized by replacing all path delimiters by "." to retrieve - * a valid standardized package specifier used in package declarations in Java source - * files. - * - * @param toBeNormalized package name to be normalized - * @return normalized package name - */ - public static String normalizePackageName(String toBeNormalized) { - // first, replace the standard package delimiter used in jars - String replaced = toBeNormalized.replace('/', '.'); - // then, replace the default path separator in case this one was used as well - replaced = replaced.replace(File.pathSeparatorChar, '.'); - if (replaced.endsWith(".")) { - int lastSeparator = replaced.lastIndexOf('.'); - return replaced.substring(0, lastSeparator); - } - else { - return replaced; - } - } - - /** - * Get the version information specified in a jar manifest file without - * any leading or trailing "\"". - * - * @param versionString a version string with possibly leading or trailing "\"" - * @return stripped version information - */ - public static String extractVersionInfo(String versionString) { - // guarding conditions - if (versionString == null) { - return null; - } - if (versionString.length() == 0) { - return ""; - } - - int startIndex = versionString.indexOf("\""); - if (startIndex < 0) { - startIndex = 0; - } - else { - // start from next character - startIndex++; - } - - int endIndex = versionString.lastIndexOf("\""); - if (endIndex < 0) { - endIndex = versionString.length(); - } - - return versionString.substring(startIndex, endIndex); - } -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/util/VersionRequester.java b/JHotDraw/src/CH/ifa/draw/util/VersionRequester.java deleted file mode 100644 index 9b6a737b0..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/VersionRequester.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * @(#)VersionRequester.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface VersionRequester { - /** - * Subclasses should override this method to specify to which versions of - * JHotDraw they are compatible. A string array is returned so it is possible - * to specify several version numbers of JHotDraw to which the application - * is compatible with. - * - * @return all versions number of JHotDraw the application is compatible with. - */ - public abstract String[] getRequiredVersions(); -} \ No newline at end of file diff --git a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/CollectionsFactoryJDK11.java b/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/CollectionsFactoryJDK11.java deleted file mode 100644 index e6d5d6b6a..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/CollectionsFactoryJDK11.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#)CollectionsFactoryJDK11.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.util.collections.jdk11; - -import CH.ifa.draw.util.CollectionsFactory; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class CollectionsFactoryJDK11 extends CollectionsFactory { - public CollectionsFactoryJDK11() { - // required in order to create instances of this class via reflection - } - - public List createList() { - return new ListWrapper(); - } - - public List createList(Collection initList) { - return new ListWrapper(initList); - } - - public List createList(int initSize) { - return new ListWrapper(initSize); - } - - public Map createMap() { - return new MapWrapper(); - } - - public Map createMap(Map initMap) { - return new MapWrapper(initMap); - } - - public Set createSet() { - return new SetWrapper(); - } - - public Set createSet(Set initSet) { - return new SetWrapper(initSet); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/IteratorWrapper.java b/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/IteratorWrapper.java deleted file mode 100644 index 1ba77d67d..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/IteratorWrapper.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)IteratorWrapper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util.collections.jdk11; - -import java.util.Iterator; -import java.util.Enumeration; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class IteratorWrapper implements Iterator { - private Enumeration myEnumeration; - public IteratorWrapper(Enumeration enumeration) { - myEnumeration = enumeration; - } - - public boolean hasNext() { - return myEnumeration.hasMoreElements(); - } - - public Object next() { - return myEnumeration.nextElement(); - } - - public void remove() { - // do nothing or throw exception - //throw new UnsupportedOperationException(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/ListWrapper.java b/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/ListWrapper.java deleted file mode 100644 index 8c3ca086c..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/ListWrapper.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)ListWrapper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util.collections.jdk11; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class ListWrapper implements List { - private Vector myDelegee; - - public ListWrapper() { - myDelegee = new Vector(); - } - - public ListWrapper(int initialSize) { - myDelegee = new Vector(initialSize); - } - - public ListWrapper(Collection copyCollection) { - myDelegee = new Vector(copyCollection); - } - - public int size() { - return myDelegee.size(); - } - - public boolean isEmpty() { - return myDelegee.isEmpty(); - } - - public boolean contains(Object o) { - return myDelegee.contains(o); - } - - public Iterator iterator() { - return new IteratorWrapper(myDelegee.elements()); - } - - public Object[] toArray() { - return myDelegee.toArray(); - } - - public Object[] toArray(Object a[]) { - return myDelegee.toArray(a); - } - - public boolean add(Object o) { - return myDelegee.add(o); - } - - public boolean remove(Object o) { - return myDelegee.removeElement(o); - } - - public boolean containsAll(Collection c) { - return myDelegee.containsAll(c); - } - - public boolean addAll(Collection c) { - return myDelegee.addAll(c); - } - - public boolean addAll(int index, Collection c) { - return myDelegee.addAll(index, c); - } - - public boolean removeAll(Collection c) { - return myDelegee.removeAll(c); - } - - public boolean retainAll(Collection c) { - return myDelegee.retainAll(c); - } - - public void clear() { - myDelegee.clear(); - } - - public Object get(int index) { - return myDelegee.elementAt(index); - } - - public Object set(int index, Object element) { - return myDelegee.set(index, element) ; - } - - public void add(int index, Object element) { - myDelegee.add(index, element); - } - - public Object remove(int index) { - return myDelegee.remove(index); - } - - public int indexOf(Object o) { - return myDelegee.indexOf(o); - } - - public int lastIndexOf(Object o) { - return myDelegee.lastIndexOf(o); - } - - public ListIterator listIterator() { - return myDelegee.listIterator(); - } - - public ListIterator listIterator(int index) { - return myDelegee.listIterator(index); - } - - public List subList(int fromIndex, int toIndex) { - return null; - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/MapWrapper.java b/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/MapWrapper.java deleted file mode 100644 index 0aa4022c3..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/MapWrapper.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * @(#)MapWrapper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package CH.ifa.draw.util.collections.jdk11; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MapWrapper implements Map { - private Map myDelegee; - - public MapWrapper() { - myDelegee = new Hashtable(); - } - - public MapWrapper(Map copyMap) { - myDelegee = new Hashtable(copyMap); - } - - public int size() { - return myDelegee.size(); - } - - public boolean isEmpty() { - return myDelegee.isEmpty(); - } - - public boolean containsKey(Object key) { - return myDelegee.containsKey(key); - } - - public boolean containsValue(Object value) { - return myDelegee.containsKey(value); - } - - public Object get(Object key) { - return myDelegee.get(key); - } - - public Object put(Object key, Object value) { - return myDelegee.put(key, value); - } - - public Object remove(Object key) { - return myDelegee.remove(key); - } - - public void putAll(Map t) { - myDelegee.putAll(t); - } - - public void clear() { - myDelegee.clear(); - } - - public Set keySet() { - return myDelegee.keySet(); - } - - public Collection values() { - return myDelegee.values(); - } - - public Set entrySet() { - return myDelegee.entrySet(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/SetWrapper.java b/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/SetWrapper.java deleted file mode 100644 index a2bbbb6c6..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/collections/jdk11/SetWrapper.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * @(#)SetWrapper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.util.collections.jdk11; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class SetWrapper implements Set { - private Hashtable myDelegee; - - public SetWrapper() { - myDelegee = new Hashtable(); - } - - public SetWrapper(Set initSet) { - myDelegee = new Hashtable(); - Iterator iter = initSet.iterator(); - while (iter.hasNext()) { - add(iter.next()); - } - } - - public int size() { - return myDelegee.size(); - } - - public boolean isEmpty() { - return myDelegee.isEmpty(); - } - - public boolean contains(Object o) { - return myDelegee.containsKey(o); - } - - public Iterator iterator() { - return new IteratorWrapper(myDelegee.elements()); - } - - public Object[] toArray() { - return new Object[0]; - } - - public Object[] toArray(Object a[]) { - return new Object[0]; - } - - public boolean add(Object o) { - return myDelegee.put(o, o) == null; - } - - public boolean remove(Object o) { - return myDelegee.remove(o) != null; - } - - public boolean containsAll(Collection c) { - return false; - } - - public boolean addAll(Collection c) { - return false; - } - - public boolean retainAll(Collection c) { - return false; - } - - public boolean removeAll(Collection c) { - return false; - } - - public void clear() { - myDelegee.clear(); - } -} diff --git a/JHotDraw/src/CH/ifa/draw/util/collections/jdk12/CollectionsFactoryJDK12.java b/JHotDraw/src/CH/ifa/draw/util/collections/jdk12/CollectionsFactoryJDK12.java deleted file mode 100644 index e29d84ab6..000000000 --- a/JHotDraw/src/CH/ifa/draw/util/collections/jdk12/CollectionsFactoryJDK12.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#)CollectionsFactoryJDK12.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package CH.ifa.draw.util.collections.jdk12; - -import CH.ifa.draw.util.CollectionsFactory; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class CollectionsFactoryJDK12 extends CollectionsFactory { - public CollectionsFactoryJDK12() { - // required in order to create instances of this class via reflection - } - - public List createList() { - return new ArrayList(); - } - - public List createList(Collection initList) { - return new ArrayList(initList); - } - - public List createList(int initSize) { - return new ArrayList(initSize); - } - - public Map createMap() { - return new Hashtable(); - } - - public Map createMap(Map initMap) { - return new Hashtable(initMap); - } - - public Set createSet() { - return new HashSet(); - } - - public Set createSet(Set initSet) { - return new HashSet(initSet); - } -} diff --git a/jhotdraw7/Templates/documentation-page.dwt b/Templates/documentation-page.dwt similarity index 100% rename from jhotdraw7/Templates/documentation-page.dwt rename to Templates/documentation-page.dwt diff --git a/jhotdraw7/Templates/documentation-toc.dwt b/Templates/documentation-toc.dwt similarity index 100% rename from jhotdraw7/Templates/documentation-toc.dwt rename to Templates/documentation-toc.dwt diff --git a/jhotdraw7/Templates/guide-template.dwt b/Templates/guide-template.dwt similarity index 100% rename from jhotdraw7/Templates/guide-template.dwt rename to Templates/guide-template.dwt diff --git a/jhotdraw7/Templates/toc-template.dwt b/Templates/toc-template.dwt similarity index 100% rename from jhotdraw7/Templates/toc-template.dwt rename to Templates/toc-template.dwt diff --git a/jhotdraw7/applet.policy b/applet.policy similarity index 100% rename from jhotdraw7/applet.policy rename to applet.policy diff --git a/jhotdraw7/build-all.xml b/build-all.xml similarity index 100% rename from jhotdraw7/build-all.xml rename to build-all.xml diff --git a/jhotdraw7/build-before-profiler.xml b/build-before-profiler.xml similarity index 100% rename from jhotdraw7/build-before-profiler.xml rename to build-before-profiler.xml diff --git a/jhotdraw7/build-bezierdemo.xml b/build-bezierdemo.xml similarity index 100% rename from jhotdraw7/build-bezierdemo.xml rename to build-bezierdemo.xml diff --git a/jhotdraw7/build-draw.xml b/build-draw.xml similarity index 100% rename from jhotdraw7/build-draw.xml rename to build-draw.xml diff --git a/jhotdraw7/build-jhotdraw.xml b/build-jhotdraw.xml similarity index 100% rename from jhotdraw7/build-jhotdraw.xml rename to build-jhotdraw.xml diff --git a/jhotdraw7/build-net.xml b/build-net.xml similarity index 100% rename from jhotdraw7/build-net.xml rename to build-net.xml diff --git a/jhotdraw7/build-odg.xml b/build-odg.xml similarity index 100% rename from jhotdraw7/build-odg.xml rename to build-odg.xml diff --git a/jhotdraw7/build-pert.xml b/build-pert.xml similarity index 100% rename from jhotdraw7/build-pert.xml rename to build-pert.xml diff --git a/jhotdraw7/build-svg.xml b/build-svg.xml similarity index 100% rename from jhotdraw7/build-svg.xml rename to build-svg.xml diff --git a/jhotdraw7/build-teddy.xml b/build-teddy.xml similarity index 100% rename from jhotdraw7/build-teddy.xml rename to build-teddy.xml diff --git a/jhotdraw7/build.xml b/build.xml similarity index 100% rename from jhotdraw7/build.xml rename to build.xml diff --git a/jhotdraw6/.classpath b/jhotdraw6/.classpath deleted file mode 100644 index dbacca5b1..000000000 --- a/jhotdraw6/.classpath +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src/main/resources"/> - <classpathentry kind="src" path="src/test/resources"/> - <classpathentry kind="src" path="src/main/java"/> - <classpathentry kind="src" path="src/test/java"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/jhotdraw6/.project b/jhotdraw6/.project deleted file mode 100644 index 28c05406d..000000000 --- a/jhotdraw6/.project +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>JHotDraw6-Sourceforge-SVN</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.maven.ide.eclipse.maven2Builder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.maven.ide.eclipse.maven2Nature</nature> - </natures> -</projectDescription> diff --git a/jhotdraw6/JavaDrawApplet.html b/jhotdraw6/JavaDrawApplet.html deleted file mode 100644 index 3cf264368..000000000 --- a/jhotdraw6/JavaDrawApplet.html +++ /dev/null @@ -1,69 +0,0 @@ -<html> - -<head> - <title>JHotDraw Applet</title> -</head> -<body> -<h1>JavaDraw Applet</h1> -<b><a href="org/jhotdraw/samples/javadraw/JavaDrawAppletHelp.html">Description</a></b> -<hr> - -<!--"CONVERTED_APPLET"--> -<!-- HTML CONVERTER --> -<SCRIPT LANGUAGE="JavaScript"><!-- - var _info = navigator.userAgent; - var _ns = false; - var _ns6 = false; - var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 && _info.indexOf("Windows 3.1") < 0); -//--></SCRIPT> - <COMMENT> - <SCRIPT LANGUAGE="JavaScript1.1"><!-- - var _ns = (navigator.appName.indexOf("Netscape") >= 0 && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || (_info.indexOf("Sun") > 0) || (_info.indexOf("Linux") > 0) || (_info.indexOf("AIX") > 0) || (_info.indexOf("OS/2") > 0) || (_info.indexOf("IRIX") > 0))); - var _ns6 = ((_ns == true) && (_info.indexOf("Mozilla/5") >= 0)); -//--></SCRIPT> - </COMMENT> - -<SCRIPT LANGUAGE="JavaScript"><!-- - if (_ie == true) document.writeln('<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH = 560 HEIGHT = 370 codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"><NOEMBED><XMP>'); - else if (_ns == true && _ns6 == false) document.writeln('<EMBED - type="application/x-java-applet;version=1.4" - CODE = "org.jhotdraw.samples.javadraw.JavaDrawApplet.class" - ARCHIVE = "jhotdraw.jar" - WIDTH = 560 - HEIGHT = 370 - DRAWINGS ="Demo Pert" - Demo ="drawings/demo.draw" - Pert ="drawings/pert.draw" - scriptable=false - pluginspage="http://java.sun.com/products/plugin/index.html#download"><NOEMBED><XMP>'); -//--></SCRIPT> -<APPLET CODE = "org.jhotdraw.samples.javadraw.JavaDrawApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 560 HEIGHT = 370></XMP> - <PARAM NAME = CODE VALUE = "org.jhotdraw.samples.javadraw.JavaDrawApplet.class" > - <PARAM NAME = ARCHIVE VALUE = "jhotdraw.jar" > - <PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"> - <PARAM NAME="scriptable" VALUE="false"> - <PARAM NAME = DRAWINGS VALUE ="Demo Pert"> - <PARAM NAME = Demo VALUE ="drawings/demo.draw"> - <PARAM NAME = Pert VALUE ="drawings/pert.draw"> - - -</APPLET> -</NOEMBED> -</EMBED> -</OBJECT> - -<!-- -<APPLET CODE = "org.jhotdraw.samples.javadraw.JavaDrawApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 560 HEIGHT = 370> -<PARAM NAME = DRAWINGS VALUE ="Demo Pert"> -<PARAM NAME = Demo VALUE ="drawings/demo.draw"> -<PARAM NAME = Pert VALUE ="drawings/pert.draw"> - - -</APPLET> ---> -<!--"END_CONVERTED_APPLET"--> - - -</body> -</html> - diff --git a/jhotdraw6/JavaDrawViewer.html b/jhotdraw6/JavaDrawViewer.html deleted file mode 100644 index 741df9d78..000000000 --- a/jhotdraw6/JavaDrawViewer.html +++ /dev/null @@ -1,63 +0,0 @@ -<html> - -<head> - <title>JavaDraw Viewer</title> -</head> -<h1>JavaDraw Viewer</h1> -<hr> - -<body> - -<!--"CONVERTED_APPLET"--> -<!-- HTML CONVERTER --> -<SCRIPT LANGUAGE="JavaScript"><!-- - var _info = navigator.userAgent; - var _ns = false; - var _ns6 = false; - var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 && _info.indexOf("Windows 3.1") < 0); -//--></SCRIPT> - <COMMENT> - <SCRIPT LANGUAGE="JavaScript1.1"><!-- - var _ns = (navigator.appName.indexOf("Netscape") >= 0 && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || (_info.indexOf("Sun") > 0) || (_info.indexOf("Linux") > 0) || (_info.indexOf("AIX") > 0) || (_info.indexOf("OS/2") > 0) || (_info.indexOf("IRIX") > 0))); - var _ns6 = ((_ns == true) && (_info.indexOf("Mozilla/5") >= 0)); -//--></SCRIPT> - </COMMENT> - -<SCRIPT LANGUAGE="JavaScript"><!-- - if (_ie == true) document.writeln('<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH = 460 HEIGHT = 350 codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"><NOEMBED><XMP>'); - else if (_ns == true && _ns6 == false) document.writeln('<EMBED - type="application/x-java-applet;version=1.4" - CODE = "org.jhotdraw.samples.javadraw.JavaDrawViewer.class" - ARCHIVE = "jhotdraw.jar" - WIDTH = 460 - HEIGHT = 350 - Drawing ="drawings/demo.draw" - scriptable=false - pluginspage="http://java.sun.com/products/plugin/index.html#download"><NOEMBED><XMP>'); -//--></SCRIPT> -<APPLET CODE = "org.jhotdraw.samples.javadraw.JavaDrawViewer.class" ARCHIVE = "jhotdraw.jar" WIDTH = 460 HEIGHT = 350></XMP> - <PARAM NAME = CODE VALUE = "org.jhotdraw.samples.javadraw.JavaDrawViewer.class" > - <PARAM NAME = ARCHIVE VALUE = "jhotdraw.jar" > - <PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"> - <PARAM NAME="scriptable" VALUE="false"> - <PARAM NAME = Drawing VALUE ="drawings/demo.draw"> - - -</APPLET> -</NOEMBED> -</EMBED> -</OBJECT> - -<!-- -<APPLET CODE = "org.jhotdraw.samples.javadraw.JavaDrawViewer.class" ARCHIVE = "jhotdraw.jar" WIDTH = 460 HEIGHT = 350> -<PARAM NAME = Drawing VALUE ="drawings/demo.draw"> - - -</APPLET> ---> -<!--"END_CONVERTED_APPLET"--> - - -</body> -</html> - diff --git a/jhotdraw6/NothingApplet.html b/jhotdraw6/NothingApplet.html deleted file mode 100644 index 4b6727191..000000000 --- a/jhotdraw6/NothingApplet.html +++ /dev/null @@ -1,63 +0,0 @@ -<html> - -<head> - <title>Nothing Applet</title> -</head> -<body> - -<!--"CONVERTED_APPLET"--> -<!-- HTML CONVERTER --> -<SCRIPT LANGUAGE="JavaScript"><!-- - var _info = navigator.userAgent; - var _ns = false; - var _ns6 = false; - var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 && _info.indexOf("Windows 3.1") < 0); -//--></SCRIPT> - <COMMENT> - <SCRIPT LANGUAGE="JavaScript1.1"><!-- - var _ns = (navigator.appName.indexOf("Netscape") >= 0 && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || (_info.indexOf("Sun") > 0) || (_info.indexOf("Linux") > 0) || (_info.indexOf("AIX") > 0) || (_info.indexOf("OS/2") > 0) || (_info.indexOf("IRIX") > 0))); - var _ns6 = ((_ns == true) && (_info.indexOf("Mozilla/5") >= 0)); -//--></SCRIPT> - </COMMENT> - -<SCRIPT LANGUAGE="JavaScript"><!-- - if (_ie == true) document.writeln('<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH = 560 HEIGHT = 370 codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"><NOEMBED><XMP>'); - else if (_ns == true && _ns6 == false) document.writeln('<EMBED - type="application/x-java-applet;version=1.4" - CODE = "org.jhotdraw.samples.nothing.NothingApplet.class" - ARCHIVE = "jhotdraw.jar" - WIDTH = 560 - HEIGHT = 370 - DRAWINGS ="Nothing" - Nothing ="drawings/nothing.draw" - scriptable=false - pluginspage="http://java.sun.com/products/plugin/index.html#download"><NOEMBED><XMP>'); -//--></SCRIPT> -<APPLET CODE = "org.jhotdraw.samples.nothing.NothingApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 560 HEIGHT = 370></XMP> - <PARAM NAME = CODE VALUE = "org.jhotdraw.samples.nothing.NothingApplet.class" > - <PARAM NAME = ARCHIVE VALUE = "jhotdraw.jar" > - <PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"> - <PARAM NAME="scriptable" VALUE="false"> - <PARAM NAME = DRAWINGS VALUE ="Nothing"> - <PARAM NAME = Nothing VALUE ="drawings/nothing.draw"> - - -</APPLET> -</NOEMBED> -</EMBED> -</OBJECT> - -<!-- -<APPLET CODE = "org.jhotdraw.samples.nothing.NothingApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 560 HEIGHT = 370> -<PARAM NAME = DRAWINGS VALUE ="Nothing"> -<PARAM NAME = Nothing VALUE ="drawings/nothing.draw"> - - -</APPLET> ---> -<!--"END_CONVERTED_APPLET"--> - - -</body> -</html> - diff --git a/jhotdraw6/PertApplet.html b/jhotdraw6/PertApplet.html deleted file mode 100644 index 142afc961..000000000 --- a/jhotdraw6/PertApplet.html +++ /dev/null @@ -1,66 +0,0 @@ -<html> - -<head> - <title>Draw Applet</title> -</head> -<h1>PERT Applet</h1> -<b><a href="org/jhotdraw/samples/pert/PertAppletHelp.html">Description</a></b> -<hr> -<body> - -<!--"CONVERTED_APPLET"--> -<!-- HTML CONVERTER --> -<SCRIPT LANGUAGE="JavaScript"><!-- - var _info = navigator.userAgent; - var _ns = false; - var _ns6 = false; - var _ie = (_info.indexOf("MSIE") > 0 && _info.indexOf("Win") > 0 && _info.indexOf("Windows 3.1") < 0); -//--></SCRIPT> - <COMMENT> - <SCRIPT LANGUAGE="JavaScript1.1"><!-- - var _ns = (navigator.appName.indexOf("Netscape") >= 0 && ((_info.indexOf("Win") > 0 && _info.indexOf("Win16") < 0 && java.lang.System.getProperty("os.version").indexOf("3.5") < 0) || (_info.indexOf("Sun") > 0) || (_info.indexOf("Linux") > 0) || (_info.indexOf("AIX") > 0) || (_info.indexOf("OS/2") > 0) || (_info.indexOf("IRIX") > 0))); - var _ns6 = ((_ns == true) && (_info.indexOf("Mozilla/5") >= 0)); -//--></SCRIPT> - </COMMENT> - -<SCRIPT LANGUAGE="JavaScript"><!-- - if (_ie == true) document.writeln('<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH = 550 HEIGHT = 340 codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4-windows-i586.cab#Version=1,4,0,0"><NOEMBED><XMP>'); - else if (_ns == true && _ns6 == false) document.writeln('<EMBED - type="application/x-java-applet;version=1.4" - CODE = "org.jhotdraw.samples.pert.PertApplet.class" - ARCHIVE = "jhotdraw.jar" - WIDTH = 550 - HEIGHT = 340 - DRAWINGS ="SAMPLE" - SAMPLE ="drawings/pert.draw" - scriptable=false - pluginspage="http://java.sun.com/products/plugin/index.html#download"><NOEMBED><XMP>'); -//--></SCRIPT> -<APPLET CODE = "org.jhotdraw.samples.pert.PertApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 550 HEIGHT = 340></XMP> - <PARAM NAME = CODE VALUE = "org.jhotdraw.samples.pert.PertApplet.class" > - <PARAM NAME = ARCHIVE VALUE = "jhotdraw.jar" > - <PARAM NAME="type" VALUE="application/x-java-applet;version=1.4"> - <PARAM NAME="scriptable" VALUE="false"> - <PARAM NAME = DRAWINGS VALUE ="SAMPLE"> - <PARAM NAME = SAMPLE VALUE ="drawings/pert.draw"> - - -</APPLET> -</NOEMBED> -</EMBED> -</OBJECT> - -<!-- -<APPLET CODE = "org.jhotdraw.samples.pert.PertApplet.class" ARCHIVE = "jhotdraw.jar" WIDTH = 550 HEIGHT = 340> -<PARAM NAME = DRAWINGS VALUE ="SAMPLE"> -<PARAM NAME = SAMPLE VALUE ="drawings/pert.draw"> - - -</APPLET> ---> -<!--"END_CONVERTED_APPLET"--> - - -</body> -</html> - diff --git a/jhotdraw6/README.html b/jhotdraw6/README.html deleted file mode 100644 index 7f6e1c9b5..000000000 --- a/jhotdraw6/README.html +++ /dev/null @@ -1,88 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - <title>JHotDraw 5.4</title> -</head> -<body> - -<h1>JHotDraw 5.4</h1> - -<hr><p> -<b>Preface: This is a beta release [JHotDraw5.4b1]<p> -This beta release contains the latest CVS snapshot and should be considered as progress -in work. It has not been extensively tested but is aimed to give developers access to a -more recent version of JHotDraw that 5.3.<p> -The release includes numereous new features among them: undo/redo support, enhanced MDI support, -many new figures (TextArea and figures with HTML support), zooming, minimap preview, -bug fixes,...<p> -Moreover, it contains a skeleton test suite which has been generated using JUnitDoclet. -The tests are compilable but not functional. Anyway, the excuse for not writing tests -because there weren't any is now not valid anymore ;-) Anyone contributing tests and filling the -test suite with life is welcome!<p> -Finally, developers who require a more stable release or are not willing to bear with some -bugs and exceptions should not use this beta release. Anyone else gets a preview of -the new functionality and compatibility. Any comments are welcome but (timely) response -cannot be guaranteed. -</b> -<p> - -<hr>This document gives an overview of the JHotDraw distribution, describes - how to install it, and offers links for getting started. Please refer to -the <a href="doc/ReleaseNotes.html"> release notes</a> for more information -about the 5.4 release. -<h3>Contents</h3> -<pre>JHotDraw<br> - drawings sample drawings<br> - documentation documentation for JHotDraw<br> - javadoc javadoc generated documentation<br> - pattlets pattern summary slides. They are referred<br> - to from the javadoc documentation.<br><br> - CH the JHotDraw class files<br> - ifa<br> - draw<br> - images image resources<br> - util common utilities that are independent of<br> - JHotDraw<br> - framework JHotDraw framework<br> - standard standard implementations of the JHotDraw<br> - framework abstractions<br> - figures a set of figures and their support classes<br> - applet standard UI for JHotDraw applets<br> - application standard UI for JHotDraw applications<br> - contrib a package with contributions to JHotDraw<br> - samples<br> - nothing Nothing sample<br> - javadraw JHotDraw sample<br> - pert PERT sample<br> - net A simple node and connections editor<br><br> - sources the java source files mirror the<br> - hierarchy of the class files<br><br></pre> -<h3>Installation</h3> -The distribution includes no development environment specificconfiguration -or makefiles. -<p>To run the applets doesn't require any further installation steps.Refer - to the <a href="doc/samples.html">samples</a> to view the sample applets.</p> - -<p>To run the sample applications you should include the JHotDraw directory -in your CLASSPATH. <b>Note</b> using a relative path to refer to JHotDraw -can result in class loading errors. You run into this problem when the application's -working directory is changed with a file dialog.</p> - -<h3>Getting Started</h3> - To get started check out the <a href="doc/samples.html">samples</a> and the -<a href="doc/documentation.html">documentation</a> delivered with JHotDraw. - -<h3>Legal</h3> - These release is distributed under <a href="lgpl-license.html">LGPL</a>.<br> - <br> - The original version of JHotDraw is copyright 1996, 1997 by IFA Informatik -and <a href="mailto:erich_gamma@acm.org">Erich Gamma</a>. -<p>It is hereby granted that this software can be used, copied, modified, -anddistributed without fee provided that this copyright noticeappears in -all copies.</p> - -<hr><br> - <br> - -</body> -</html> diff --git a/jhotdraw6/build.xml b/jhotdraw6/build.xml deleted file mode 100644 index e0dbbb9a5..000000000 --- a/jhotdraw6/build.xml +++ /dev/null @@ -1,69 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- You may freely edit this file. See commented blocks below for --> -<!-- some examples of how to customize the build. --> -<!-- (If you delete it and reopen the project it will be recreated.) --> -<project name="JHotDraw6" default="default" basedir="."> - <description>Builds, tests, and runs the project JHotDraw6.</description> - <import file="nbproject/build-impl.xml"/> - <!-- - - There exist several targets which are by default empty and which can be - used for execution of your tasks. These targets are usually executed - before and after some main targets. They are: - - -pre-init: called before initialization of project properties - -post-init: called after initialization of project properties - -pre-compile: called before javac compilation - -post-compile: called after javac compilation - -pre-compile-single: called before javac compilation of single file - -post-compile-single: called after javac compilation of single file - -pre-compile-test: called before javac compilation of JUnit tests - -post-compile-test: called after javac compilation of JUnit tests - -pre-compile-test-single: called before javac compilation of single JUnit test - -post-compile-test-single: called after javac compilation of single JUunit test - -pre-jar: called before JAR building - -post-jar: called after JAR building - -post-clean: called after cleaning build products - - (Targets beginning with '-' are not intended to be called on their own.) - - Example of inserting an obfuscator after compilation could look like this: - - <target name="-post-compile"> - <obfuscate> - <fileset dir="${build.classes.dir}"/> - </obfuscate> - </target> - - For list of available properties check the imported - nbproject/build-impl.xml file. - - - Another way to customize the build is by overriding existing main targets. - The targets of interest are: - - -init-macrodef-javac: defines macro for javac compilation - -init-macrodef-junit: defines macro for junit execution - -init-macrodef-debug: defines macro for class debugging - -init-macrodef-java: defines macro for class execution - -do-jar-with-manifest: JAR building (if you are using a manifest) - -do-jar-without-manifest: JAR building (if you are not using a manifest) - run: execution of project - -javadoc-build: Javadoc generation - test-report: JUnit report generation - - An example of overriding the target for project execution could look like this: - - <target name="run" depends="JHotDraw6-impl.jar"> - <exec dir="bin" executable="launcher.exe"> - <arg file="${dist.jar}"/> - </exec> - </target> - - Notice that the overridden target depends on the jar target and not only on - the compile target as the regular run target does. Again, for a list of available - properties which you can use, check the target you are overriding in the - nbproject/build-impl.xml file. - - --> -</project> diff --git a/jhotdraw6/build/build.properties b/jhotdraw6/build/build.properties deleted file mode 100644 index 234fe2cb5..000000000 --- a/jhotdraw6/build/build.properties +++ /dev/null @@ -1 +0,0 @@ -dest.dir=.. \ No newline at end of file diff --git a/jhotdraw6/build/build.xml b/jhotdraw6/build/build.xml deleted file mode 100644 index 3a287a8a0..000000000 --- a/jhotdraw6/build/build.xml +++ /dev/null @@ -1,361 +0,0 @@ -<?xml version="1.0"?> - -<project name="JHotDraw" default="main" basedir="."> - - <!-- Give user a chance to override without editing this file - (and without typing -D each time it compiles it --> - <property file="${user.home}/.ant.properties"/> - <property file="build.properties"/> - <!-- user-dependent properties can include (for copy and paste into mybuild.properties): - junit.class.path= - junitdoclet.class.path= - versiondoclet.class.path= - checkstyle.class.path= - namingstrategy.class.path= - jdo.class.path = - batik.class.path = <batik-dom.jar;batik-svggen.jar;batik-awt-util.jar> - Note: be sure to use forward slashes as path separators even on Windows systems - --> - <property file="mybuild.properties"/> - - <property name="build.dir" value="${dest.dir}/target/ant"/> - <property name="build.classes" value="${build.dir}"/> - <property name="build.jar.name" value="jhotdraw.jar"/> - <property name="build.jar" value="${dest.dir}/target/${build.jar.name}"/> - <property name="deploy.dir" value="${dest.dir}/deploy"/> - <property name="zip.file" value="${deploy.dir}/jhotdraw6.zip"/> - - <property name="main.src.dir" value="${dest.dir}/src/main/java"/> - <property name="main.resources.dir" value="${dest.dir}/src/main/resources"/> - <property name="test.src.dir" value="${dest.dir}/src/test/java"/> - <property name="test.resources.dir" value="${dest.dir}/src/test/resources"/> - - <property name="javadoc.dir" value="${dest.dir}/javadoc"/> - <property name="buildscript.dir" value="${dest.dir}/build"/> - <property name="testsuite.package.name" value="org.jhotdraw.test"/> - <property name="testsuite" value="${testsuite.package.name}.AllTests"/> - - <property name="javac.deprecation" value="off"/> - <property name="javac.includes" value="**/*.java"/> - - <property name="manifest.name" value="jhotdraw.mf"/> - - <!-- Dependencies on optional packages --> - <!--<property name="needs.batik.src" value="org/jhotdraw/contrib/SVG*.java"/> - <property name="needs.jdo.src" value="org/jhotdraw/util/JDOStorageFormat.java"/> - --> - <property name="needs.batik.src" value="**/SVG*.java"/> - <property name="needs.jdo.src" value="**/JDOStorageFormat.java"/> - <property name="needs.junit.src" value="org/jhotdraw/test/**"/> - - <property name="needs.batik.class" value="org.jhotdraw.contrib.SVG*"/> - <property name="needs.jdo.class" value="org.jhotdraw.util.JDOStorageFormat"/> - <property name="needs.junit.class" value="org.jhotdraw.test.*"/> - - <property name="test.packages" value="org.jhotdraw.test.*"/> - - <property environment="env"/> - - <!-- =================================================================== --> - <!-- Set timestamp and check for optional packages --> - <!-- =================================================================== --> - <target name="init"> - <tstamp/> - <mkdir dir="${build.dir}"/> - </target> - - <target name="check_for_optional_packages"> - <available property="batik.available" file="${batik.class.path}"/> - <available property="jdo.available" file="{jdo.class.path}"/> - <available property="versiondoclet.available" file="${versiondoclet.class.path}"/> - <available property="junit.available" file="${junit.class.path}"/> - <available property="junitdoclet.available" file="${junitdoclet.class.path}"/> - <available property="namingstrategy.available" file="${namingstrategy.class.path}"/> - </target> - - <!-- =================================================================== --> - <!-- Builds a complete package with all files from scratch --> - <!-- =================================================================== --> - <target name="all" depends="clean, main, javadoc, junit_test, deploy"> - </target> - - <!-- =================================================================== --> - <!-- Builds a package with all essential files --> - <!-- ================================================================== --> - <target name="main" depends="init, compile, copy_resources, jar"> - </target> - - <!-- =================================================================== --> - <!-- Compiles the source code --> - <!-- =================================================================== --> - <target name="compile" - depends="check_for_optional_packages, delete_dependants" - description="Compiles the source code"> - <javac srcdir="${main.src.dir}" - destdir="${build.classes}" - debug="${javac.debug}" - deprecation="${javac.deprecation}" - optimize="${javac.optimize}" - fork="${javac.fork}"> - <include name="${javac.includes}"/> - <exclude name="${needs.batik.src}" unless="batik.available"/> - <exclude name="${needs.jdo.src}" unless="jdo.available"/> - <exclude name="${needs.junit.src}"/> - <classpath> - <pathelement path="${java.class.path}"/> - <pathelement path="${jdo.class.path}"/> - <pathelement path="${batik.class.path}"/> - </classpath> - </javac> - </target> - - <target name="delete_dependants" unless="javac.nodepend"> - <depend srcdir="${main.src.dir}" destdir="${build.classes}" - cache="depcache" closure="yes"> - <include name="${javac.includes}"/> - <exclude name="${needs.batik.src}" unless="batik.available"/> - <exclude name="${needs.jdo.src}" unless="jdo.available"/> - <exclude name="${needs.junit.src}"/> - </depend> - </target> - - <!-- =================================================================== --> - <!-- Generates JavaDoc --> - <!-- =================================================================== --> - <target name="javadoc" depends="check_for_optional_packages"> - <antcall target="standard_javadoc"/> - <antcall target="versiondoclet_javadoc"/> - </target> - - <target name="standard_javadoc" unless="versiondoclet.available"> - <echo>using standard doclet...</echo> - <mkdir dir="${javadoc.dir}"/> - <javadoc - destdir = "${javadoc.dir}" - classpath = "${dest.dir}" - author = "false" - version = "true"> - <fileset dir="${main.src.dir}" > - <include name="${javac.includes}"/> - <exclude name="${needs.junit.src}"/> - </fileset> - </javadoc> - </target> - - <target name="versiondoclet_javadoc" if="versiondoclet.available"> - <echo>using version doclet...</echo> - <mkdir dir="${javadoc.dir}"/> - <javadoc - destdir = "${javadoc.dir}" - classpath = "${dest.dir}" - author = "false" - version = "true"> - <doclet name="org.jhotdraw.tools.versiondoclet.VersionDoclet"> - <param name="-versionfile" value="${buildscript.dir}/${manifest.name}"/> - <param name="-version" value=""/> - <path> - <pathelement path="${versiondoclet.class.path}"/> - </path> - </doclet> - <fileset dir="${main.src.dir}" > - <include name="${javac.includes}"/> - <exclude name="${needs.junit.src}"/> - </fileset> - </javadoc> - </target> - - <!-- =================================================================== --> - <!-- Generates JUnit tests using JUnitDoclet --> - <!-- =================================================================== --> - <path id="tools_path"> - <pathelement path="${java.home}/lib/tools.jar"/> - </path> - - <path id="junit_test_path"> - <pathelement path = "${dest.dir}"/> - <pathelement path = "${junit.class.path}"/> - <pathelement path = "${junitdoclet.class.path}"/> - <pathelement path = "${namingstrategy.class.path}"/> - <pathelement path = "${jdo.class.path}"/> - <pathelement path = "${batik.class.path}"/> - <pathelement path = "${java.class.path}"/> - </path> - - <target name="junit_doclet" depends="jar"> - <javadoc - classpath = "${dest.dir}" - sourcepath = "${main.src.dir}" - defaultexcludes = "yes"> - <package name="org.jhotdraw.util.*"/> - <excludepackage name="${needs.batik.class}"/> - <excludepackage name="${needs.jdo.class}"/> - <excludepackage name="${test.packages}"/> - <doclet name="com.objectfab.tools.junitdoclet.JUnitDoclet"> - <param name="-d" value="${test.src.dir}"/> - <param name="-properties" value="jhotdraw_junitdoclet.properties"/> - <!-- <param name="-buildall"/> --> - <param name="-testintest"/> - <param name="-naming" value="org.jhotdraw.tools.testnaming.JHDTestNamingStrategy"/> - <path> - <pathelement path = "${junitdoclet.class.path}"/> - <pathelement path = "${namingstrategy.class.path}"/> - <pathelement path = "${jdo.class.path}"/> - <pathelement path = "${batik.class.path}"/> - </path> - </doclet> - </javadoc> - </target> - - <target name="junit_compile" depends="compile, junit_doclet"> - <javac srcdir="${test.src.dir}" - destdir="${dest.dir}" - debug="${javac.debug}" - deprecation="${javac.deprecation}" - optimize="${javac.optimize}"> - <!-- <include name="${needs.junit.src}"/> --> - <include name="${javac.includes}"/> - <exclude name="${needs.batik.src}" unless="batik.available"/> - <exclude name="${needs.jdo.src}" unless="jdo.available"/> - <classpath> - <path refid="junit_test_path"/> - </classpath> - </javac> - </target> - - <target name="junit_test" depends="junit_compile"> - <junit fork="yes" haltonfailure="no"> - <formatter type="plain" usefile="no"/> - <classpath> - <path refid="junit_test_path"/> - </classpath> - <test name="${testsuite}"/> - </junit> - </target> - - <!-- =================================================================== --> - <!-- Style check --> - <!-- =================================================================== --> -<!-- - <taskdef name="checkstyle" classname="com.puppycrawl.tools.checkstyle.CheckStyleTask"/> - <target name="stylecheck"> - <checkstyle allowtabs="yes" - allownoauthor="yes" - maxlinelen="100" - headerfile="headerfile.txt" - headerignoreline="2" - relaxjavadoc="yes" - parampattern="." - constpattern="." - staticpattern="." - memberpattern="."> - <fileset dir="${src.dir}" includes="**/*.java"/> - </checkstyle> - </target> ---> - <!-- =================================================================== --> - <!-- Copies the resources into the build target directory --> - <!-- Resources are non-code that needs to be packed into some jar file --> - <!-- in their package structure, such as .gif, .properties, .html, etc. --> - <!-- =================================================================== --> - <target name="copy_resources"> - <copy toDir="${build.dir}"> - <fileset dir="${main.resources.dir}"> - <include name ="**/*.gif" /> - <include name ="**/*.html" /> - </fileset> - </copy> - </target> - - <!-- =================================================================== --> - <!-- Cleans up generated stuff --> - <!-- =================================================================== --> - <target name="clean" description="Cleans up generated stuff."> - <delete dir="${dest.dir}/org"/> - <delete dir="${javadoc.dir}"/> - <delete file="${build.jar}"/> - <delete dir="${deploy.dir}"/> - </target> - - <!-- =================================================================== --> - <!-- The next section defines the Jar file layout. --> - <!-- =================================================================== --> - <target name="jar" depends="compile, copy_resources"> - <jar jarfile="${build.jar}" - manifest="${buildscript.dir}/${manifest.name}" - > - <fileset dir="${build.classes}"> - <include name="org/jhotdraw/**"/> - <exclude name="org/jhotdraw/test/**"/> - </fileset> - </jar> - </target> - - <!-- =================================================================== --> - <!-- Create a zip file with all deployable content --> - <!-- =================================================================== --> - <target name="deploy"> - <delete dir="${deploy.dir}"/> - <mkdir dir="${deploy.dir}"/> - <zip zipfile="${zip.file}"> - <fileset dir="${dest.dir}"> - <include name="*/**"/> - <exclude name="**/CVS/**"/> - <exclude name="${deploy.dir}/**"/> - <exclude name=".project"/> - <exclude name=".classpath"/> - <exclude name="**/.cvsignore"/> - <exclude name="*/bin/**"/> - <exclude name="**/depcache/**"/> - </fileset> - </zip> - </target> - - <!-- =================================================================== --> - <!-- Run examples (and compile if necessary). --> - <!-- =================================================================== --> - <path id="example_path"> - <pathelement path="${java.class.path}/"/> - <pathelement path="${build.jar}/"/> - </path> - - <target name="javadraw" depends="main"> - <java classname="org.jhotdraw.samples.javadraw.JavaDrawApp" fork="yes"> - <classpath> - <path refid="example_path"/> - </classpath> - </java> - </target> - - <target name="pert" depends="main"> - <java classname="org.jhotdraw.samples.pert.PertApplication" fork="yes"> - <classpath> - <path refid="example_path"/> - </classpath> - </java> - </target> - - <target name="net" depends="main"> - <java classname="org.jhotdraw.samples.net.NetApp" fork="yes"> - <classpath> - <path refid="example_path"/> - </classpath> - </java> - </target> - - <target name="nothing" depends="main"> - <java classname="org.jhotdraw.samples.nothing.NothingApp" fork="yes"> - <classpath> - <path refid="example_path"/> - </classpath> - </java> - </target> - - <target name="svgdraw" depends="main" if="batik.available"> - <java classname="org.jhotdraw.contrib.SVGDrawApp" fork="yes"> - <classpath> - <path refid="example_path"/> - <pathelement path="${env.CLASSPATH}"/> - </classpath> - </java> - </target> -</project> diff --git a/jhotdraw6/build/jhotdraw.mf b/jhotdraw6/build/jhotdraw.mf deleted file mode 100644 index 31120203b..000000000 --- a/jhotdraw6/build/jhotdraw.mf +++ /dev/null @@ -1,65 +0,0 @@ -Manifest-Version: 1.0 -Created-By: Ant 1.5 - -Name: org/jhotdraw/applet/ -Sealed: true -Specification-Title: JHotDraw Default Applet -Specification-Version: 6.0 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: org.jhotdraw.applet -Implementation-Version: 6.0 -Implementation-Vendor: http://www.jhotdraw.org - -Name: org/jhotdraw/application/ -Sealed: true -Specification-Title: JHotDraw Default Application -Specification-Version: 6.0 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: org.jhotdraw.application -Implementation-Version: 6.0 -Implementation-Vendor: http://www.jhotdraw.org - -Name: org/jhotdraw/contrib/ -Sealed: true -Specification-Title: JHotDraw Contributions -Specification-Version: 6.0 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: org.jhotdraw.contrib -Implementation-Version: 6.0 -Implementation-Vendor: http://www.jhotdraw.org - -Name: org/jhotdraw/figures/ -Sealed: true -Specification-Title: JHotDraw Figures -Specification-Version: 6.0 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: org.jhotdraw.figures -Implementation-Version: 6.0 -Implementation-Vendor: http://www.jhotdraw.org - -Name: org/jhotdraw/framework/ -Sealed: true -Specification-Title: JHotDraw Core Framework -Specification-Version: 6.0 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: org.jhotdraw.framework -Implementation-Version: 6.0 -Implementation-Vendor: http://www.jhotdraw.org - -Name: org/jhotdraw/standard/ -Sealed: true -Specification-Title: JHotDraw Standard Implementation -Specification-Version: 6.0 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: org.jhotdraw.standard -Implementation-Version: 6.0 -Implementation-Vendor: http://www.jhotdraw.org - -Name: org/jhotdraw/util/ -Sealed: true -Specification-Title: JHotDraw Utilities -Specification-Version: 6.0 -Specification-Vendor: http://www.jhotdraw.org -Implementation-Title: org.jhotdraw.util -Implementation-Version: 6.0 -Implementation-Vendor: http://www.jhotdraw.org diff --git a/jhotdraw6/compile.bat b/jhotdraw6/compile.bat deleted file mode 100644 index c47938d68..000000000 --- a/jhotdraw6/compile.bat +++ /dev/null @@ -1,15 +0,0 @@ -@echo off - -set JHD_DIR=D:\daten\wolfram\jhotdraw -set JDK=C:\Programme\JDK1.2 - -set OLD_CP=%CLASSPATH% -set CLASSPATH=. -set CLASSPATH=%CLASSPATH%;%JHD_DIR% - -javac -d %JHD_DIR% %JHD_DIR%\src\org\jhotdraw\applet\*.java %JHD_DIR%\src\org\jhotdraw\application\*.java %JHD_DIR%\src\org\jhotdraw\contrib\*.java %JHD_DIR%\src\org\jhotdraw\figures\*.java %JHD_DIR%\src\org\jhotdraw\framework\*.java %JHD_DIR%\src\org\jhotdraw\standard\*.java %JHD_DIR%\src\org\jhotdraw\util\*.java - -set SAMPLES=%JHD_DIR%\src\org\jhotdraw\samples -javac -d %JHD_DIR% %SAMPLES%\javadraw\*.java %SAMPLES%\net\*.java %SAMPLES%\nothing\*.java %SAMPLES%\pert\*.java - -set CLASSPATH=%OLD_CP% diff --git a/jhotdraw6/compile.sh b/jhotdraw6/compile.sh deleted file mode 100644 index be489e760..000000000 --- a/jhotdraw6/compile.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -# Set up JAVA_HOME and ANT_HOME as environment variables, -# or they will use these hard-coded defaults -export JAVA_HOME=${JAVA_HOME:-/usr/j2sdk/} -export ANT_HOME=${ANT_HOME:-/usr/apache-ant/} - -export PATH=$PATH:$ANT_HOME/bin - -ant -buildfile build/BUILD.XML "$@" diff --git a/jhotdraw6/compile_ant.bat b/jhotdraw6/compile_ant.bat deleted file mode 100644 index 223e0dc54..000000000 --- a/jhotdraw6/compile_ant.bat +++ /dev/null @@ -1,5 +0,0 @@ -@echo off - -call setenv.bat - -%ANT_HOME%\bin\ant -buildfile build\build.xml %1 %2 %3 diff --git a/jhotdraw6/doc/Architecture Overview.ppt b/jhotdraw6/doc/Architecture Overview.ppt deleted file mode 100644 index 4921b35ced36496ae5569e5dd9e73295ed239188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70144 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 diff --git a/jhotdraw6/doc/Changes.html b/jhotdraw6/doc/Changes.html deleted file mode 100644 index e0c2099c4..000000000 --- a/jhotdraw6/doc/Changes.html +++ /dev/null @@ -1,203 +0,0 @@ -<html> -<head> -<title>Change Log</title> -</head> -<h1>Change Log</h1> -<hr> -<h2>Version 4.0</h1> -<ul> -<li> -added pattlet slides that are referenced from javadoc. -<li> -restricted visibility of the classes provided by org.jhotdraw.standard. -<li> -generalized the start and end points of PolyLineFigures to a LineDecoration. -<b>Note:</b>this breaks the loading of pre 4.0 drawings. -<li> -LineFigures are now implemented based on PolyLineFigures -<li> -some UI tweaks related to the look of handles. -</ul> -<hr> -<h2>Version 4.0a</h1> -<ul> -<li> -javadoc documentation. -<li> -features -<ul> -<li> -support for cursor keys to move figures -<li> -support for snap to grid: ToggleGridCommand, DrawingView.setGrid(); -<li> -alignment commands to align (top, centers, bottoms, left, middle, rights) -AlignmentCommand -<li> -resizable ImageFigures. The ImageFigures use the IconKit to share images. -Images are currently stored by saving a reference to their -image file. The file names are relative to the user.dir -property. -</ul> -<li> -org.jhotdraw.util.Geom: geometrical utilities. -<li> -class RectLocators: useful locators for rectangle locations.<br> -class RectTrackers: useful trackers to manipulate rectangle locations. -<li> -Major rewrite of Connections. -<ul> -<li> -connectivity support is implemented based on an ObserverFigure -interface. -<li> -ConnectionTool supports the creation and manipulation of -connections (splitting/joining segments). ConnectionTool -takes a prototype of the connection to be created. -<li> -eliminated AnchorFigure. Its only purpose was to add -ConnectionHandles. -<li> -Connection support moved from the standard to the framework package -<li> -ConnectionTrackHandle changed to ChangeConnectionStartHandle and -ChangeConnectionEndHandle. These two handles enable to change -the start/end point of a connection. -<li> -ConnectionHandle takes the prototype of the connection to be -created as parameter. -<li> -ConnectionFigure.canConnect(Figure source, Figure target) -to constrain the connection between figures. -See the PertDependency for an example for how to use this. -<li> -fixed naming inconsistencies in all signatures. -<ul> -<li> -anchor was changed to start -<li> -target was changed to end -</ul> -<li> -eliminated Figure.connectionStartPoint, connectionEndPoint -the new connection infrastructure made them obsolete. -</ul> -<li> -Figure is now an interface and no longer an abstract class. -AbstractFigure provides default implementations for the -Figure interface. If you defined your own figures you have to change the base class -from Figure to AbstractFigure. -<li> -eliminated: org.jhotdraw.applet.AppletIconKit and -org.jhotdraw.application.StandaloneIconKit -The functionality of these subclasses is now part of -the DrawingEditor interface -<li> -IconKit -<ul> -<li> -simplified the addition of new custom icons for tool buttons -<li> -Applet and Applications load their icons -by overriding registerPreLoadedImages (see PertApplet). -<li> -Icons are now identified by their file name without the -.gif suffix. -<li> -Example: -<pre> - kit.registerImages(tracker, kit.icon("TEXT")); -</pre> -<li> -extended to support the deferred loading of images and to share images. -</ul> -<li> -added FigureContainer.forceUpdate() such that a figure -can force a repair of its image immediatly. -<li> -added transient variable modifier were appropriate -<li> -DrawingView: added support for additional background and -foreground layers. A layer implements the Painter interface. -<li> -Replaced ScribbleFigure with a more general PolyLineFigure. A PolyLineFigure -has an optional LineDecoration at its start and end. -<li> -packaging -<ul> -<li> -moved Animatable from standard to util -<li> -moved BouncingDrawing, Animator, AnimationDecorator from standard to -javadraw -<li> -changed Transformer to Tracker and Transformer.transform() to Tracker.track() -</ul> -</ul> -<h2>Version 3.8</h1> -<ul> -<li> -added Drawing.orphan() to fix grouping bugs related to connectivity -<li> -added Drawing.replace(). -<li> -added FigureDeletedEvent, FigureChangedEvent. Deliver more -specific update notifications. -</ul> - -<h2>Version 3.6</h1> -<ul> -<li> -add Figure.decompose(), Figure.isMoveable() (to fix connection and grouping bugs) -<li> -Figure subclasses now have to implement basicDisplayBox instead of - displayBox. DisplayBox is a template method that factors the - common displaybox logic. -<li> -applet package: provides base infrastructure for applets - Common applets now derive from JavaDrawApplet -<li> -application package: provides base infrastructure for applications - Common applications now derive from JavaDrawApplet -</ul> - -<h2>Version 3.4</h1> -<ul> -<li> -make reverse iterator package private -<li> -introduced an Animatable interface - remove animation methods out of basic Drawing -<li> -GroupFigure propagate setAttribute to figures -<li> -make locators, transformers sharable, don't have to override constructors -<li> -CommandMenu return false if not handled by a command -<li> -Merged DrawWindow & Draw -<li> -Figure.handles() is now an abstract method -<li> -nuked the HandleKit stuff -<li> -Name Changes -<ul> -<li>DrawApplet -> Draw -<li>package framework -> fw -<li>DrawingReader/DrawingWriter -> Reader/Writer -<li>DrawWindow -> Draw -<li>cloneFigure -> clone -<li>readWith/writeWith -> read/write -</ul> -<li> -New -<ul> -<li>PertFigure -<li>Selectiontools support selections with a rubberband -<li>DuplicateCommand -<li>FigureAttributes class -</ul> -</ul> -</body> -</html> diff --git a/jhotdraw6/doc/ClassDiagram.html b/jhotdraw6/doc/ClassDiagram.html deleted file mode 100644 index a1e655379..000000000 --- a/jhotdraw6/doc/ClassDiagram.html +++ /dev/null @@ -1,10 +0,0 @@ -<html> -<head> -<title>Class Diagram</title> -</head> -<h1>Class Diagram</h1> -<hr> -<img src=classdiagram.jpg> -</body> -</html> - diff --git a/jhotdraw6/doc/ReleaseNotes.html b/jhotdraw6/doc/ReleaseNotes.html deleted file mode 100644 index e79db7505..000000000 --- a/jhotdraw6/doc/ReleaseNotes.html +++ /dev/null @@ -1,275 +0,0 @@ -<html> -<head> - <title>Release Notes Version 5.1</title> -</head> -<body> -<h1>Release Notes Version 5.2</h1> -<b>Note: </b>This version requires Swing/JFC 1.1 -<p>The purpose of this release is to:</p> -<ul> - - <li>Use Swing/JFC GUI elements instead of AWT (where possible)</li> - - <li>Support for special Swing/FC features:</li> - - <ul> - - <li>Support for Multiple Document Interface (MDI) applications with several -internal frames has been added. org.jhotdraw.contrib.MDI_DrawApplicationis -the base class which must be subclasses to takeadvantage of managing internal -frames. All examples are now derived from this class.</li> - - <li>Support for applications with splitted editor windows by deriving -the drawing application from org.jhotdraw.contrib.SplitPaneDrawApplication<br> - </li> - - <li>Drawing windows have scrollbars</li> - - <li>Popup menus are available for additional functionality and control -over graphical figures when using org.jhotdraw.contrib.CustomSelectionTool</li> - - <li>Toolbars can have different tools depending on the context of the -currently selected figure and tool</li> - - <li>A new composite figure is available which delegates its graphical -representation and figure attributes to another figure. Moreover, it canbe -configured with an external layout algorithm that contains the logic forhow -to lay out the child elements of the composite figure. The new compositefigure -is org.jhotdraw.contrib.GraphicalCompositeFigure and can be configuredby a -class implementing org.jhotdraw.contrib.FigureLayoutStrategy such asorg.jhotdraw.contrib.StandardFigureLayoutStrategy. - </li> - - </ul> - - <li>New org.jhotdraw.util.StorageFormats that allow to add new file formats -for storing and restoring drawings (e.g. using XML)<br> - </li> - <li>Build configuration for <a href="http://jakarta.apache.org/ant/">Ant</a> -, which can be used to compile all standard JHotDraw classes, to packagethem -into a jar file and to generate javadoc information. Some instruction how -to compile and build JHotDraw can be found <a href="buildProcess.html">here</a> -.<br> - </li> - - <li>Some minor bug fixes<br> - </li> -</ul> -<br> -<h1>Release Notes Version 5.1</h1> -Changes for this release: -<ul> - - <li>the delegation based event model is used to track figure changes.The -FigureChangeListener interface supports to observe figure changes.A FigureChangeListener -receives FigureChangeEvents.The old mechanism based on Observer/Observable -and the notion of a containerwas eliminated. A figure now onlyhas listeners. -There is a new support class FigureChangeEventMulticasterto manage the listeners. -Using listeners is more consistent with the AWT/JFCevent handling style.CompositeFigure, -Decorator, ConnectionFigure, and Drawingare now FigureChangeListeners. </li> - - <li>StandardDrawing is a CompositeFigure. It is possible to inserta StandardDrawing -as a figure into a drawing. This change does notimpact the framework package. -The Drawing interface is independentof CompositeFigure.</li> - - <li>Tools no longer receive the DrawingView as an argument, but storeit -in an instance variable. Existing Tools have to be adapted accordingly.</li> - - <li>SelectionTool is more open for customization. The trackers to be used -for thedifferent selection modes can be overridden by the factory methods -createHandleTracker, createDragTracker, createAreaTracker. The MouseTracker -class was merged into AbstractTool and could be eliminated.<br> -The selection tool to be used in an application can be customizedby overridding -createSelectionTool in DrawApplication/DrawApplet.JavaDrawApp illustrates -how to use a customized selection tool thatcan handle double clicks on figures. - </li> - - <li>DrawApplication supports keyboard short cuts for the common operations. - </li> -</ul> -<h1>Release Notes Version 5.0</h1> -<b>Note:</b>This version requires JDK 1.1. -<p>The purpose of this release is to:</p> -<ul> - - <li>use JDK1.1 features: event model, access to resources, serialization, -scrolling, printing, cursors etc.</li> - - <li>improve the packaging structure.</li> - - <li>improve the support for connectivity.</li> - - <li>implement several minor improvements.</li> -</ul> -<h2>JDK1.1 features</h2> -<h3>Event Model</h3> -All event handling related classes use the JDK1.1 event model.This required -to change some method signatures to refer to morespecific events. Returning -a boolean to indicate the consumptionof an event was removed. -<h3>Serialization</h3> -This version supports to use of serialization to make adrawing persistent. -org.jhotdraw.applet.DrawApplet andorg.jhotdraw.application.DrawApplicationsupport -both the oldstorable and the serializable format. Support for thestorable -formatwill be removed in the next version. -<p>Serialization is used in the default implementation of Figure.clone().</p> -<p>StandardDrawingView supports serialization.</p> -<h3>Resource Access</h3> -Thanks to 1.1 the access to resources could be drastically simplified.All -the resources are now accessed relative to classes.The images directory with -standard images is therefore part of thepackage hierarchy. -<p>IconKit could be decoupled from DrawingEditor and was moved fromorg.jhotdraw.standard -to org.jhotdraw.util.Refer to the sample applications for how toload and access -resources like images.</p> -<h3>Various UI Features</h3> -<ul> - - <li>Tools support to use tool specific cursors.</li> - - <li>org.jhotdraw.application shows the DrawingView by default in a ScrollPane. -There is a new method createContents that can be overridden to customizethe -default arrangement. The default size of the view can be customized byoverriding -getDrawingViewSize().</li> - - <li>org.jhotdraw.application supports to print a drawing.</li> -</ul> -<h2>Packaging</h2> -The packaging was changed to separate the framework interfacesfrom default -implementations. -<p>The framework package defines the coreinterfaces and leaves default implementations -to the standard package.All key abstractions of the framework are now defined -as interfaces.Ward Cunningham has suggested this some time ago and it ended -upto be natural and logic evolution.</p> -<p>The implementation of the framework interfaces comes in two flavors.Abstract -classes like AbstractFigure, provide default implementationbut still need -to be subclassed. Standard classeslike StandardDrawing implement aframework -interface and can be used as is.</p> -<p>The framework package was renamed to "framework" the old "fw"was due to -a temprorary bug in the used IDE:</p> -<p>A figures package was forked of the standard package. This packageprovides -a kit of standard figures and their related handle andtool classes.</p> -<p>There is a new package contrib that contains classes contributedby others. -</p> -<h2>Connectivity</h2> -Connectors were introduced to define connections between figures.A figure -can have one or more connectors. A figure creates aconnector for a specific -location connectorAt(int x, int y).A connector knows how to findthe connection -point. A connection figure keeps track of aconnector for its start and end -point. -<p>Figure.chop() is no longer needed and was removed. Its functionalityis -subsumed by Connectors.</p> -<p>A set of standard connectors is provided in the standard and figurepackages. -</p> -<ul> - - <li>BoxChopConnector: finds a connection point by chopping the connection -at the figure's bounding box.</li> - - <li>LocatorConnector: uses a locator to find the connection point.Thisenables -to define connections at specific semantic points ona figure. Referto the -NetApp sample for an example of using them.</li> - - <li>ShortestDistanceConnector: finds the connection points based on the -shortest distancebetween figures.</li> - - <li>EllipseChopConnector: finds a connection point by chopping the connection -at the ellipse defined by the figure's bounding box.</li> -</ul> -Connectors are optionally visible and Figure has a method connectorVisibility -to turn their visibility on and off. This is used by the ConnectionToolto -highlight connection points when the mouse moves over a figure. -<p>TextFigures can be attached to other figures. The ConnectedTextToolsupports -to create a connected TextFigure. Try it out in JavaDraw.The text figureis -connected to the Figure that is clicked when thetool is active. To position -a connected TextFigure figures can overridethe method connectedTextLocator -to return a locator.</p> -<h2>Various Changes</h2> -<ul> - - <li>FigureEnumeration extends Enumeration to enable to iterate overfigures -without having to do a down casted in client code. Itprovides an additional -method nextFigure to get the next Figure.</li> - - <li>AbstractFigure was split. AbstractFigure no longer keeps track ofthe -FigureAttributes dictionary. The dictionary is now maintainedin its derived -class AttributeFigure. This change enables tocreate Figure subclasses without -having to use theFigureAttributes implementation.</li> - - <li>Trackers are gone. Trackerfunctionality is implemented in the Handles -themselves. In contrastto Locators they did not turn out to be reusable for -different handles.The class BoxHandleKit hides the different Handle implementation -classesfrom the API.</li> - - <li>BoxHandleKit provides factory methods to create Handles forcommon locations -on a figure.</li> - - <li>DrawingView is now an interface with a standard implementation, i.e., -StandardDrawingView.</li> - - <li>Figure.clone() is implemented in a generic way in AbstractFigure.The -figure is serialized and the clone is created by resurrectingthe serialized -figure.</li> - - <li>Image handling was simplified and the preLoadRegisteredImagesis nolonger -necessary.</li> - - <li>Commands know whether they are executable ornot. They provide an isExecutable -operation to check their state.</li> - - <li>Name changes: ObserverFigure -> ConnectionFigure, LineConnectionFigure -->LineConnection.</li> - - <li>There is support for transparent fill colors for AttributeFigures.</li> - - <li>AttributeFigre.draw() is a now a template method that callsdrawBackground() -and drawFrame(). Subclasses should overridethese methods instead of draw(). - </li> - - <li>The signature of Handle.invokeStep() and Handle.invokeEnd() was changed -to:<pre> public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) {<br> public void invokeEnd (int x, int y, int anchorX, int anchorY, DrawingView view) {<br></pre> -The passed arguments correspond to the current point and the anchor point -of the interaction.<br> -The old signature are still supported but deprecated.</li> - - <li>Doug Lea implemented a nice PolygonFigure with its corresponding Handles -and Tools. Check it out in JavaDrawApp.</li> - - <li>ElbowHandles support to adjust elbow connections.</li> -</ul> -<h2>Samples</h2> -<ul> - - <li>the samples are now located in subpackages of samples.</li> - - <li>there are two new samples: - <ul> - - <li>Nothing implements a minimal application/appletthat can be used -as the starting point for your own applications.</li> - - <li>NetApp is a simple editor with nodes and connections. Itillustrates -LocatorConnectors.</li> - - </ul> - </li> -</ul> -<h2>Converting</h2> -<ul> - - <li>If you derived classes from Handle, Tool, Locator you have to change -them to inherit from their corresponding Abstract class.</li> - - <li>Change your tool classes to no longer return a boolean fromevent handling -methods.</li> - - <li>Change the event handling method to use a specific event, typically -a MouseEvent.</li> - - <li>Import the figures package if you use figures provided by this version. - </li> - - <li>Tools should call editor().toolDone() instead of editor().setDefaultTool. - </li> - - <li>Add the serival version stuff to your figure classes.</li> -</ul> -</body> -</html> diff --git a/jhotdraw6/doc/buildProcess.html b/jhotdraw6/doc/buildProcess.html deleted file mode 100644 index 2a7c4a076..000000000 --- a/jhotdraw6/doc/buildProcess.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<html> -<head> - - <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> - <title>Building JHotDraw</title> -</head> -<body> -<h1>Instructions for Building JHotDraw</h1> -<hr><br> -<br> -A simple <a href="..\build\build.xml">build configuration file</a> for <a href="http://jakarta.apache.org/ant/"> -Ant</a> has been included, which can be used to compile all standard JHotDraw -classes, to packagethem into a jar file and to generate javadoc information. -The command tostart the build process could look like (when invoked in the -<code><JHOTDRAW_DIR></code>\build directory)<br> -<br> -<code>java -classpath "%CLASSPATH%;<ANT_DIR>\lib\ant.jar;<ANT_DIR>\lib\jaxp.jar;<ANT_DIR>\lib\parser.jar" --Djava.home="<JAVA_DIR>" -Dant.home="<ANT_DIR>" org.apache.tools.ant.Main -all -Ddest.dir="<JHOTDRAW_DIR>" -buildfile build.xml</code><br> -<br> -where <code><JHOTDRAW_DIR></code> is the directory path to the JHotDraw -package,<code><ANT_DIR></code> is the directory path to the Ant installation, -<code><JAVA_DIR></code>is the directory path to the Java installation.. -Apart of calling <code>org.apache.tools.ant.Main</code> with the parameter -<code>all</code> you can specify one of the following building targets:<br> -<ul> - - <li><code>clean</code> - to delete all class files first</li> - - <li><code>main</code> - to compile, copy resources and build the jar file</li> - - <li><code>jar</code> - to build the jar file<br> - </li> - - <li><code>compile</code> - to compile only</li> - - <li><code>javadoc</code> - to generate javadoc</li> - - <li><code>all</code> - to clean, compile and javadoc</li> -</ul> -Furthermore, Ant can be generate debug code when the switch <code>-Djavac.debug=on</code> - is provided.<br> -</body> -</html> diff --git a/jhotdraw6/doc/change_log.txt b/jhotdraw6/doc/change_log.txt deleted file mode 100644 index 2b583ecdc..000000000 --- a/jhotdraw6/doc/change_log.txt +++ /dev/null @@ -1,18 +0,0 @@ -Change log -========== - -JHotDraw 5.2 changes (29.6.2001 by MrFloppy) -- SelectionFigure is now an interface. The default implementation org.jhotdraw.standard.StandardSelectionFigure -- A FigureSelectionListener interface has been introduced in org.jhotdraw.framework. An DrawingEditor - is now a FigureSelectionListener and the signature for all selectionChanged() methods has been - changed to figureSelectionChanged(). -- org.jhotdraw.util.Command is now an interface. A AbstractCommand can be found in org.jhotdraw.standard. -- All commands used to have a fView field. This has been moved to org.jhotdraw.standard.AbstactCommand -- A org.jhotdraw.standard.StandardDrawingView has now a paintComponents() method instead of a paint() - and update() method. This allows the org.jhotdraw.util.FloatingTextField to be a javax.swing.JTextField - instead of a java.awt.TextField. -- org.jhotdraw.figures.AbstractLineDecorator has been missing -- DrawApplet, DrawApplication and derived classes are now programmed towards the DrawingView interface - instead of using StandardDrawingView. That leads to occasional cast when some additional StandardDrawingView - functionality is required in some specialized cases. Applications that were derived from DrawApplication - and used to override the createContents() methods should now return a DrawingView as well \ No newline at end of file diff --git a/jhotdraw6/doc/classdiagram.jpg b/jhotdraw6/doc/classdiagram.jpg deleted file mode 100644 index d73a1e497a0c831c0a48f556bb9c903f6ef5d9ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17784 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®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 E02o%sV*mgE diff --git a/jhotdraw6/doc/documentation.html b/jhotdraw6/doc/documentation.html deleted file mode 100644 index 33b2a9a7f..000000000 --- a/jhotdraw6/doc/documentation.html +++ /dev/null @@ -1,24 +0,0 @@ -<html> -<head> - <title>JHotDraw Documentation</title> -</head> -<body> -<h1>Documentation Overview</h1> -<hr> -<ul> - <li>A description of the JHotDraw <a href="packages.html">package organization</a> -.</li> - <li>The javadoc generated <a href="../javadoc/index.html">package index</a> -.</li> - <li>An overview of the <a href="samples.html">samples</a> delivered with -JHotDraw</li> - <li>A short instruction of how to <a href="buildProcess.html">compile</a> - JHotDrawusing Ant with the build configuration provided<br> - </li> - <li>A <a href="classdiagram.html">class diagram</a> showing the mostimportant -classes and their relationships.</li> - <li>The <a href="changes.html">the change log</a> of version 4.0.</li> - <li>Some <a href="drawBackground.html">background </a>about JHotDraw.</li> -</ul> -</body> -</html> diff --git a/jhotdraw6/doc/drawBackground.html b/jhotdraw6/doc/drawBackground.html deleted file mode 100644 index 18104bd36..000000000 --- a/jhotdraw6/doc/drawBackground.html +++ /dev/null @@ -1,28 +0,0 @@ -<html> - -<head> - <title>JHotDraw Background</title> -</head> - -<body> -<H1>About JHotDraw</H1> -<HR> -The JHotDraw architecture was inspired by two sources: -<UL> -<LI> -<a href="http://st-www.cs.uiuc.edu/users/brant/HotDraw/HotDraw.html">HotDraw</a><br> -HotDraw is a drawing framework for Smalltalk. It was originally developed -by Kent Beck and Ward Cunningham. -<LI> -<a href="ftp://ftp.ifa.ch/pub/ET++/">ET++</a><br> -ET++ is a comprehensive and portable application framework and -class library for C++. ET++ was developed by Andre Weinand and Erich Gamma. -</UL> -<p> -JHotDraw was developed by Thomas Eggenschwiler and Erich Gamma. -It was originally planned to be a trivial case study for an applied -design patterns seminar. But then it was too much fun to just stop there... -<p> -<H2>Acknowledgements</H2> -We have received valuable input from Uwe Steinmueller, Doug Lea, Kent Beck, and Ward Cunningham. -</html> diff --git a/jhotdraw6/doc/packages.html b/jhotdraw6/doc/packages.html deleted file mode 100644 index b43de6933..000000000 --- a/jhotdraw6/doc/packages.html +++ /dev/null @@ -1,60 +0,0 @@ -<html> -<head> -<title>Packages Overview</title> -</head> -<h1>Packages Overview</h1> -<hr> -JHotDraw is organized into the following packages. -<h2><a href=../javadoc/Package-org.jhotdraw.util.html>org.jhotdraw.util</a></h2> -This package provides generally useful utilities that can be used -independent of JHotDraw.<p> - -<h2><a href=../javadoc/Package-org.jhotdraw.framework.html>org.jhotdraw.framework</a></h2> -The framework package includes the classes and interfaces that define the -JHotDraw framework. It doesn't provide any concrete implementation classes. - -<h2><a href=../javadoc/Package-org.jhotdraw.standard.html>org.jhotdraw.standard</a></h2> -The standard package provides standard implementations of the classes -defined in the framework package. -<p> -It provides abstract classes that implement a -framework interface and provide default implementation. The convention is to -prefix such classes with Abstract, e.g., AbstractFigure, AbstractHandle. -<p> -Classes that implement a framework interface and can be used as is -start with Standard, e.g., StandardDrawing, StandardDrawingView. - -<h2><a href=../javadoc/Package-org.jhotdraw.figures.html>org.jhotdraw.figures</a></h2> -A kit of figures together with their associated support classes (tools, -handles). - -<h2><a href=../javadoc/Package-org.jhotdraw.contrib.html>org.jhotdraw.contrib</a></h2> -Classes that where contributed by others. - -<h2><a href=../javadoc/Package-org.jhotdraw.applet.html>org.jhotdraw.applet</a></h2> -The applet package defines a default applet user interface for a JHotDraw -applet. JHotDraw applets can be developed without using this -package and they can have a different user interface. - -<h2><a href=../javadoc/Package-org.jhotdraw.application.html>org.jhotdraw.application</a></h2> -The application package defines a default user interface for standalone -JHotDraw applications. This is only a default -presentation. - -<h2>org.jhotdraw.samples.javadraw</h2> -The package for the javadraw <a href=samples.html#JavaDrawApp>sample</a> applications. -This includes the javadraw applet, application, and a viewer applet. - -<h2>org.jhotdraw.samples.pert</h2> -The package for the pert <a href=samples.html#PertApp>sample</a> applet -and application. - -<h2>org.jhotdraw.samples.nothing</h2> -The package for the nothing <a href=samples.html#Nothing>sample</a> applet -and application. - -<h2>org.jhotdraw.samples.net</h2> -The package for the net <a href=samples.html#Net>sample</a> application. - -</body> -</html> diff --git a/jhotdraw6/doc/pattlets.jar b/jhotdraw6/doc/pattlets.jar deleted file mode 100644 index 93bbdc01834529c6b14dc214771df12fb91c057f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376878 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 D@sCm= diff --git a/jhotdraw6/doc/samples.html b/jhotdraw6/doc/samples.html deleted file mode 100644 index 414d94311..000000000 --- a/jhotdraw6/doc/samples.html +++ /dev/null @@ -1,96 +0,0 @@ -<html> -<head> -<title>Samples</title> -</head> -<a name=top></a> -<h1>JHotDraw Samples</h1> - -As part of the JHotDraw framework we include a number of sample applications -and applets that -demonstrate various aspects of JHotDraw. -<ol> -<li><a href=#JavaDrawApp>JavaDrawApp</a></li> -<li><a href=#JavaDrawApplet>JavaDrawApplet</a></li> -<li><a href=#JavaDrawViewer>JavaDrawViewer</a></li> -<li><a href=#PertApp>PertApp/PertApplet</a></li> -<li><a href=#Nothing>Nothing</a></li> -<li><a href=#Net>Net</a></li> -</ol> -<b>Note:</b>To run the sample applets inside a browser requires a -browser with JDK1.1 support. -<hr> -<ol> -<li><h3><a name=JavaDrawApp>JavaDrawApp</a></h3></li> -<p> -This sample illustrates various standard tools and figures provided with JHotDraw. -For a description of its features refer to the <a href="../org/jhotdraw/samples/javadraw/JavaDrawAppletHelp.html">help document</a>. -<p> -It uses a custom drawing subclass BouncingDrawing to implement a bouncing figures -feature. The animation support is attached to a figure with a AnimationDecorator. -<p> -Support for attaching URLs to figures is implemented by URLTool. -<p> -You can start the application with: -<pre>java org.jhotdraw.samples.javadraw.JavaDrawApp</pre> -The <i>drawings</i> directory includes some sample drawings. They can be -loaded with the open command from the file menu. <b>Note</b> your CLASSPATH -has to include the absolute path to the JHotDraw directory otherwise you will -run into class loading problems. -<p> -<li><h3><a name=JavaDrawApplet>JavaDrawApplet</a></h3></li> -<p> -The <a href="../JavaDrawApplet.html">JavaDrawApplet</a> is the applet version of JavaDrawApp. -Since it is an applet the drawing can't be saved. -A sample drawing can be loaded from the load choices item. -<p> -<li><h3><a name=JavaDrawViewer>JavaDrawViewer</a></h3></li> -<p> -The <a href="../JavaDrawViewer.html">JavaDrawViewer</a> enables to view a JavaDraw drawing. If a figure has -an attached URL you can follow it by selecting it with the mouse. -<p> -The sample illustrates how to create a minimal presentation without a tool palette and -other user interface adornments. -<p> -<li><h3><a name=PertApp>PertApp/PertApplet</a></h3></li> -<p> -PertApp is simple drawing editor to support the PERT project management -technique. With PertApp you can create tasks and define their dependencies. -PertApp takes care of tracking the end time of each task. -<p> -For a description of its features refer to the <a href="../org/jhotdraw/samples/pert/PertAppletHelp.html">help document</a>. -<p> -This sample illustrates how to create more complex figures and how to use -connections. Connections can be created either with a ConnectionTool or -ConnectionHandles. -<p> -You can start the application with: -<pre>java org.jhotdraw.samples.pert.PertApplication</pre> -<li><h3><a name=PertApplet>PertApplet</a></h3></li> -The <i>drawings</i> directory includes some sample drawings. They can be -loaded with the open command from the file menu. <b>Note</b> your CLASSPATH -has to include the absolute path to the JHotDraw directory otherwise you will -run into class loading problems. -<p> -<a href="../PertApplet.html">PertApplet</a> is the applet version of PertApp. -<p> -<li><h3><a name=Nothing>Nothing</a></h3></li> -<p> -This is the <i>hello world</i> sample of JHotDraw. It can be used -as the starting point for developing your own applications. -The samples uses some standard tools to create a simple drawing editor. -It is only about one page of <a href="../org/jhotdraw/samples/nothing/NothingApp.java">code</a>. -<p> -<li><h3><a name=Net>NetApp</a></h3></li> -<p> -A simple network editor. It enables the creation of nodes. When selected -a node display a set of handles that can be used to connect it with other nodes. -Nodes are connected at specific semantic locations. The potential locations -are highlighted once the mouse moves inside a node. -This sample illustrates the use of LocatorConnectors. -<p> -You can start the application with: -<pre>java org.jhotdraw.samples.net.NetApp</pre> -A sample net can be found in the <i>drawings</i> directory. - -</body> -</html> diff --git a/jhotdraw6/drawings/demo.draw b/jhotdraw6/drawings/demo.draw deleted file mode 100644 index 5f84254b0..000000000 --- a/jhotdraw6/drawings/demo.draw +++ /dev/null @@ -1,82 +0,0 @@ - - org.jhotdraw.samples.javadraw.BouncingDrawing 19 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.ImageFigure "attributes" "attributes" 1 "URL" "String" "http://www.javasoft.com" 220 160 100 116 "/org/jhotdraw/samples/javadraw/sampleimages/joe.surf.yellow.small.gif" 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.EllipseFigure "no_attributes" 121 16 75 36 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.RoundRectangleFigure "no_attributes" 122 125 73 37 8 8 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.RoundRectangleFigure "attributes" "attributes" 1 "URL" "String" "" 266 73 77 37 36 20 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.TextFigure "attributes" "attributes" 2 "TextColor" "Color" 255 255 255 "FillColor" "Color" 255 199 158 143 135 "Text" "Helvetica" 1 14 0 REF 6 - org.jhotdraw.standard.OffsetLocator 0 0 - org.jhotdraw.standard.RelativeLocator 0.5 0.5 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.ElbowConnection 4 195 129 230 129 230 99 266 99 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.figures.ShortestDistanceConnector REF 6 - org.jhotdraw.figures.ShortestDistanceConnector REF 8 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.EllipseFigure "attributes" "attributes" 1 "FillColor" "Color" 35 142 104 272 18 64 32 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.LineConnection 2 195 34 273 34 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.figures.ChopEllipseConnector REF 4 - org.jhotdraw.figures.ChopEllipseConnector REF 20 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.BorderDecorator - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 275 159 "Images" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.BorderDecorator - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.TextFigure "attributes" "attributes" 2 "URL" "String" "" "FillColor" "Color" 255 199 158 191 60 "Connections" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.BorderDecorator - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 108 214 "Connected Text" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.BorderDecorator - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 222 287 "URL Attachments" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.BorderDecorator - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 27 111 "Groups" "Helvetica" 1 12 0 NULL NULL 4 4 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.EllipseFigure "attributes" "attributes" 1 "FillColor" "Color" 35 142 104 14 203 70 46 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.LineConnection 2 122 157 72 210 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.figures.ShortestDistanceConnector REF 6 - org.jhotdraw.figures.ChopEllipseConnector REF 48 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 192 192 192 67 176 "Annotation" "Helvetica" 1 12 0 REF 50 - org.jhotdraw.standard.OffsetLocator 0 0 - org.jhotdraw.standard.RelativeLocator 0.5 0.5 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.GroupFigure 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 255 255 255 24 25 47 44 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 0 34 35 47 44 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 255 255 255 44 45 47 44 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 0 54 55 47 44 4 4 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.contrib.PolygonFigure "no_attributes" 6 68 283 105 254 111 309 151 261 163 282 160 290 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.LineConnection 2 71 244 97 259 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.figures.ChopEllipseConnector REF 48 - org.jhotdraw.contrib.ChopPolygonConnector REF 70 4 4 \ No newline at end of file diff --git a/jhotdraw6/drawings/demo.ser b/jhotdraw6/drawings/demo.ser deleted file mode 100644 index d28a2bd38fa28cf0478f5923ad8d3dc948804a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9077 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 diff --git a/jhotdraw6/drawings/net.draw b/jhotdraw6/drawings/net.draw deleted file mode 100644 index 2cf8ccdaa..000000000 --- a/jhotdraw6/drawings/net.draw +++ /dev/null @@ -1,65 +0,0 @@ - - org.jhotdraw.standard.StandardDrawing 13 - org.jhotdraw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 135 46 "one" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 62 102 "two" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 211 102 "three" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 134 153 "four" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.samples.net.NodeFigure "attributes" "attributes" 3 "TextColor" "Color" 255 255 255 "FrameColor" "Color" 255 255 0 "FillColor" "Color" 255 199 158 135 219 "five" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.LineConnection 2 145 67 72 96 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.LocatorConnector REF 1 - org.jhotdraw.standard.RelativeLocator 0.5 1.0 - org.jhotdraw.standard.LocatorConnector REF 2 - org.jhotdraw.standard.RelativeLocator 0.5 0.0 - org.jhotdraw.figures.LineConnection 2 145 67 226 96 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 REF 9 - org.jhotdraw.standard.LocatorConnector REF 3 - org.jhotdraw.standard.RelativeLocator 0.5 0.0 - org.jhotdraw.figures.LineConnection 2 89 109 205 109 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.LocatorConnector REF 2 - org.jhotdraw.standard.RelativeLocator 1.0 0.5 - org.jhotdraw.standard.LocatorConnector REF 3 - org.jhotdraw.standard.RelativeLocator 0.0 0.5 - org.jhotdraw.figures.LineConnection 2 72 123 128 160 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.LocatorConnector REF 2 - org.jhotdraw.standard.RelativeLocator 0.5 1.0 - org.jhotdraw.standard.LocatorConnector REF 4 - org.jhotdraw.standard.RelativeLocator 0.0 0.5 - org.jhotdraw.figures.LineConnection 2 226 123 163 160 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.LocatorConnector REF 3 - org.jhotdraw.standard.RelativeLocator 0.5 1.0 - org.jhotdraw.standard.LocatorConnector REF 4 - org.jhotdraw.standard.RelativeLocator 1.0 0.5 - org.jhotdraw.figures.LineConnection 2 226 123 161 226 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 REF 35 - org.jhotdraw.standard.LocatorConnector REF 5 - org.jhotdraw.standard.RelativeLocator 1.0 0.5 - org.jhotdraw.figures.LineConnection 2 72 123 129 226 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 REF 28 - org.jhotdraw.standard.LocatorConnector REF 5 - org.jhotdraw.standard.RelativeLocator 0.0 0.5 - org.jhotdraw.figures.LineConnection 4 247 109 280 109 280 53 162 53 - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.LocatorConnector REF 3 - org.jhotdraw.standard.RelativeLocator 1.0 0.5 - org.jhotdraw.standard.LocatorConnector REF 1 - org.jhotdraw.standard.RelativeLocator 1.0 0.5 \ No newline at end of file diff --git a/jhotdraw6/drawings/net.ser b/jhotdraw6/drawings/net.ser deleted file mode 100644 index 194207391a083580caf1f933432aa4f04d9a9544..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6346 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 diff --git a/jhotdraw6/drawings/nothing.draw b/jhotdraw6/drawings/nothing.draw deleted file mode 100644 index 76d3aec7b..000000000 --- a/jhotdraw6/drawings/nothing.draw +++ /dev/null @@ -1,10 +0,0 @@ - - org.jhotdraw.samples.javadraw.BouncingDrawing 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 255 255 255 80 77 196 89 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.RectangleFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 255 75 72 196 89 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.TextFigure "attributes" "attributes" 2 "TextColor" "Color" 255 255 255 "FillColor" "Color" 255 199 158 119 92 "Nothing" "Helvetica" 0 36 0 NULL NULL 4 4 - org.jhotdraw.samples.javadraw.AnimationDecorator - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 117 90 "Nothing" "Helvetica" 0 36 0 NULL NULL 4 4 \ No newline at end of file diff --git a/jhotdraw6/drawings/nothing.ser b/jhotdraw6/drawings/nothing.ser deleted file mode 100644 index 783e24486cd07e548b8b5893df8807fdacb4e156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3077 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 NLM9Mr$bcLQ!T=>#rA7b% diff --git a/jhotdraw6/drawings/offsetConnectors.draw b/jhotdraw6/drawings/offsetConnectors.draw deleted file mode 100644 index 4e1033a6a..000000000 --- a/jhotdraw6/drawings/offsetConnectors.draw +++ /dev/null @@ -1,70 +0,0 @@ - - org.jhotdraw.standard.StandardDrawing 13 - org.jhotdraw.samples.offsetConnectors.MyFigure "attributes" "attributes" 1 "FillColor" "Color" 255 0 0 413 50 72 125 - org.jhotdraw.samples.offsetConnectors.MyFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 0 84 182 165 158 - org.jhotdraw.samples.offsetConnectors.MyFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 255 610 165 187 175 - org.jhotdraw.samples.offsetConnectors.MyEllipseFigure "no_attributes" 362 445 218 186 - org.jhotdraw.figures.LineConnection 2 413 77 171 182 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 1 - org.jhotdraw.standard.OffsetLocator 0 27 - org.jhotdraw.standard.RelativeLocator 0.0 0.0 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 87 0 REF 10 - org.jhotdraw.figures.LineConnection 2 485 74 755 165 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 1 - org.jhotdraw.standard.OffsetLocator 72 24 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 145 0 REF 10 - org.jhotdraw.figures.LineConnection 2 249 212 610 212 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 255 0 0 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 165 30 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 0 47 REF 10 - org.jhotdraw.figures.LineConnection 2 249 246 610 246 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 255 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 165 64 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 0 81 REF 10 - org.jhotdraw.figures.LineConnection 2 249 308 610 308 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 165 126 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 0 143 REF 10 - org.jhotdraw.figures.LineConnection 6 443 50 443 19 28 19 28 409 384 409 384 484 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 1 - org.jhotdraw.standard.OffsetLocator 30 0 REF 10 - org.jhotdraw.standard.OffsetConnector REF 4 - org.jhotdraw.standard.OffsetLocator 22 39 REF 10 - org.jhotdraw.figures.LineConnection 6 463 50 463 18 925 18 925 409 553 409 553 478 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 1 - org.jhotdraw.standard.OffsetLocator 50 0 REF 10 - org.jhotdraw.standard.OffsetConnector REF 4 - org.jhotdraw.standard.OffsetLocator 191 33 REF 10 - org.jhotdraw.figures.LineConnection 5 717 340 717 374 834 374 834 240 797 240 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 107 175 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 187 75 REF 10 - org.jhotdraw.figures.LineConnection 5 152 340 152 373 46 373 46 247 84 247 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 68 158 REF 10 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 0 65 REF 10 \ No newline at end of file diff --git a/jhotdraw6/drawings/pert.draw b/jhotdraw6/drawings/pert.draw deleted file mode 100644 index eca1ddc3c..000000000 --- a/jhotdraw6/drawings/pert.draw +++ /dev/null @@ -1,64 +0,0 @@ - - org.jhotdraw.standard.StandardDrawing 14 - org.jhotdraw.samples.pert.PertFigure 3 - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 29 133 "Design" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 29 148 "5" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 29 163 "5" "Helvetica" 0 12 1 NULL NULL 26 130 45 51 0 1 - org.jhotdraw.samples.pert.PertFigure 3 - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 108 133 "Implement" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 108 148 "6" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 108 163 "11" "Helvetica" 0 12 1 NULL NULL 105 130 66 51 1 REF 1 3 - org.jhotdraw.samples.pert.PertFigure 3 - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 215 133 "JavaDoc" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 215 148 "2" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 215 163 "13" "Helvetica" 0 12 1 NULL NULL 212 130 55 51 1 REF 5 1 - org.jhotdraw.samples.pert.PertFigure 3 - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 314 133 "Ship" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 314 148 "0" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 314 163 "19" "Helvetica" 0 12 1 NULL NULL 311 130 31 51 3 - org.jhotdraw.samples.pert.PertFigure 3 - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 206 "S&P" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 221 "4" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 236 "15" "Helvetica" 0 12 1 NULL NULL 224 203 31 51 1 REF 5 1 REF 13 REF 9 - org.jhotdraw.samples.pert.PertFigure 3 - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 46 "Test" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 61 "8" "Helvetica" 1 12 0 NULL NULL - org.jhotdraw.figures.NumberTextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 227 76 "19" "Helvetica" 0 12 1 NULL NULL 224 43 31 51 1 REF 5 1 REF 13 0 REF 17 REF 21 REF 5 REF 21 REF 9 REF 13 REF 17 - org.jhotdraw.samples.pert.PertDependency 2 71 155 105 155 NULL - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.ChopBoxConnector REF 1 - org.jhotdraw.standard.ChopBoxConnector REF 5 - org.jhotdraw.samples.pert.PertDependency 2 171 155 212 155 NULL - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.ChopBoxConnector REF 5 - org.jhotdraw.standard.ChopBoxConnector REF 9 - org.jhotdraw.samples.pert.PertDependency 3 151 130 184 68 224 68 NULL - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.ChopBoxConnector REF 5 - org.jhotdraw.standard.ChopBoxConnector REF 21 - org.jhotdraw.samples.pert.PertDependency 3 154 181 184 228 224 228 NULL - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.ChopBoxConnector REF 5 - org.jhotdraw.standard.ChopBoxConnector REF 17 - org.jhotdraw.samples.pert.PertDependency 3 255 228 285 228 312 181 NULL - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.ChopBoxConnector REF 17 - org.jhotdraw.standard.ChopBoxConnector REF 13 - org.jhotdraw.samples.pert.PertDependency 2 267 155 311 155 NULL - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.ChopBoxConnector REF 9 - org.jhotdraw.standard.ChopBoxConnector REF 13 - org.jhotdraw.samples.pert.PertDependency 3 255 68 284 68 314 130 NULL - org.jhotdraw.figures.ArrowTip 0 0 0 noFillColor noBorderColor - 0 0 0 - org.jhotdraw.standard.ChopBoxConnector REF 21 - org.jhotdraw.standard.ChopBoxConnector REF 13 - org.jhotdraw.figures.GroupFigure 2 - org.jhotdraw.figures.TextFigure "attributes" "attributes" 1 "FillColor" "Color" 255 199 158 26 23 "HotJavaDraw" "Helvetica" 1 18 0 NULL NULL - org.jhotdraw.figures.TextFigure "attributes" "attributes" 2 "FillColor" "Color" 255 199 158 "TextColor" "Color" 255 255 255 24 21 "HotJavaDraw" "Helvetica" 1 18 0 NULL NULL \ No newline at end of file diff --git a/jhotdraw6/drawings/pert.ser b/jhotdraw6/drawings/pert.ser deleted file mode 100644 index abf59bf6ea61892724178b934e390fc0931aed7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10170 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 diff --git a/jhotdraw6/lgpl-license.html b/jhotdraw6/lgpl-license.html deleted file mode 100644 index 7106b97b0..000000000 --- a/jhotdraw6/lgpl-license.html +++ /dev/null @@ -1,533 +0,0 @@ -<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> - -<html> -<head> - <title>The Open Source Initiative: The GNU Lesser General Public License (LGPL)</title> -</head> - -<body bgcolor="#FFFFFF"> - -<div align=center> - -<p> - -<table width=90% cellpadding=10 cellspacing=10 border=0> - -<tr bgcolor="#FFFFFF"> - - <td colspan=2 align="right"><img src="../graphics/ossmall.png" width="250" height="26" border="0" align="right" alt="opensource.org"> - -</td> - -</tr> - -<tr> - - <td width=75% bgcolor="#C6EFF7" valign="top"> - -<font face="Arial, Helvetica, sans serif" size="3"> - -<h1>The GNU Lesser General Public License (LGPL)</h1> - -<h2>Version 2.1, February 1999</h2> - -<blockquote> - - <p><em>(The master copy of this license lives on the <a -href="http://www.gnu.org/copyleft/lesser.html">GNU website</a>.)</em></p> - -</blockquote> - -<tt> - -<p>Copyright (C) 1991, 1999 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed.</p> - -<p>[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.]</p> - -<p>Preamble</p> - -<p>The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users.</p> - -<p>This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below.</p> - -<p>When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things.</p> - -<p>To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it.</p> - -<p>For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights.</p> - -<p>We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library.</p> - -<p>To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others.</p> - -<p>Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license.</p> - -<p>Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs.</p> - -<p>When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library.</p> - -<p>We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances.</p> - -<p>For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License.</p> - -<p>In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system.</p> - -<p>Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library.</p> - -<p>The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run.</p> - -<p>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</p> - -<p>0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you".</p> - -<p>A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables.</p> - -<p>The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".)</p> - -<p>"Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library.</p> - -<p>Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does.</p> - -<p>1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library.</p> - -<p>You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee.</p> - -<p>2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions:</p> - -<blockquote> - - <p>a) The modified work must itself be a software library.<br /> - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change.<br /> - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License.<br /> - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful.</p> - - <p>(For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.)</p> - - <p>These requirements apply to the modified work as a whole. If - identifiable sections of that work are not derived from the Library, - and can be reasonably considered independent and separate works in - themselves, then this License, and its terms, do not apply to those - sections when you distribute them as separate works. But when you - distribute the same sections as part of a whole which is a work based - on the Library, the distribution of the whole must be on the terms of - this License, whose permissions for other licensees extend to the - entire whole, and thus to each and every part regardless of who wrote - it.</p> - - <p>Thus, it is not the intent of this section to claim rights or contest - your rights to work written entirely by you; rather, the intent is to - exercise the right to control the distribution of derivative or - collective works based on the Library.</p> - - <p>In addition, mere aggregation of another work not based on the Library - with the Library (or with a work based on the Library) on a volume of - a storage or distribution medium does not bring the other work under - the scope of this License.</p> - -</blockquote> - -<p>3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices.</p> - -<p>Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy.</p> - -<p>This option is useful when you wish to copy part of the code of -the Library into a program that is not a library.</p> - -<p>4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange.</p> - -<p>If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code.</p> - -<p>5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License.</p> - -<p>However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables.</p> - -<p>When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law.</p> - -<p>If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.)</p> - -<p>Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself.</p> - -<p>6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications.</p> - -<p>You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things:</p> - - <blockquote> - - <p>a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.)</p> - - <p>b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with.</p> - - <p>c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution.</p> - - <p>d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place.</p> - - <p>e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy.</p> - - </blockquote> - -<p>For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable.</p> - -<p>It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute.</p> - -<p>7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things:</p> - -<blockquote> - - <p>a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above.</p> - - <p>b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work.</p> - -</blockquote> - -<p>8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance.</p> - -<p>9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it.</p> - -<p>10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License.</p> - -<p>11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library.</p> - -<p>If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances.</p> - -<p>It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice.</p> - -<p>This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License.</p> - -<p>12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License.</p> - -<p>13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns.</p> - -<p>Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation.</p> - -<p>14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally.</p> - -<p>NO WARRANTY</p> - -<p>15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p> - -<p>16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES.</p> - -<p>END OF TERMS AND CONDITIONS</p> - -</tt> - -</pre> - - </td> - - <td width=25% bgcolor="#BFBFBF" valign="top"> - - <font face="Arial, Helvetica, sans serif" size="2"> - - <p><a href="index.html">Licenses main page</a></p> - - <p /> - - <hr> - - <p><a href="../index.html">opensource.org home page</a></p> - -</tr> - -</table> - -</div> - -</body> - -</html> diff --git a/jhotdraw6/lib/batik-awt-util.jar b/jhotdraw6/lib/batik-awt-util.jar deleted file mode 100755 index b62ac15866e1511e1580c9819b081bcb4814becf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369001 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‏D)&mXuExyY3f4_C>q5Jbo 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≦={fBOMGN&TU~koPK{h+!<;|!=!HExvrg+=nx1wsCe5(Nhf|$r`O=qMNe_20 zOfR`q>i3TK>W58fXD7OxIBBeY{#4qf?QWeF&Ycyy+#InDx4Hgk&Ymh%GI#Y;n*_gw zv$lS}msiMTnHhGi*{Wdn)WgjD>lR)V)H-y1`zxkb78bRu&ppcG++O-&QL>P3$t|hU zUvsBKzl!{^@_*US*yS6aNW7}du|6mEL-YB%&MTibm;@a^yj8HZ{kRJYe}8X9MTA&p zNcPoRf}tytR4hB63a*b@eyw*!*Qy)Y^Iv_Hv1N1pTG<yh=Vnv;#dPcC|Mm$-tg33= zdrH=_ifP^{rAJ%;rYZky**mN42)EdRUuqkbZavDMnHI!;cKzpvg{!W6TrN@duf1mS zz}fn(TBg*amFGRgHg@f~R4BK)+IfpC-_Pi-2xq=%X{+v1KA%S)FJ9AJBmZH0(Xx$4 zIPVCAE-!e@@SHb&L;Tm>QXToshAO9Ks}&euc40f=7}qT0(y%9CLOn;tm1CSPi|h99 z?>P7PhTo(7PQ96j+8Fx|x}|rutKT>*biGd7VBKHg8zQ;0oy1>0%&%s+`%hK)MWUwR zy^o)Zinm<7pS4`_ANVxT+YRgIYjH3z%oWDhFDJFRSzM5ln4FrMnpfhRh;lr@#Jiy8 zX6tgDO%01Q{yjYZw`gH4gRpRfh^K(CM@QVuO@7mkUdjVCH{*UV*iG5E_DD`sXO-d1 zdHTl7eb4_s{#x3ifa$oN%#MN=hXflZ)n9${UBBu(Gt(091&_QZYN=i6_-JXx;9%q| z%UmRR!RWxrhGmSEOix9w2ArGB5X@w{-aOU6=UnKKOntAbk;yI#GTfMsO?0@I9W7KR zd^~&0*F|zWzpDFiJaK*^p)pfnL7cyuVyYpxn#XY;*M5<Bk<{~DZpLCtxqMb@kIve= zO6=d0;#a2slD~YNvs+a<d7sbu`a-_|n}kEhWHPP2lFu>CSr~9#M^3_HLDv2rW5G+a zKZfiU%J_Ttv(Y0i;rODNC9QTxC%tCX<g!XT@v=yPzcg0+SB$~Rrq!i}i@l?!8&`$C z-rBRSVRds{JFj$ws9Em)rde-qZ%F>F_vYrl{TE6XGukl*c(Zdb_Ar+PGcqvrQnitZ z8HtES=GO4cYU!(@b@@8gZ!RAB*tYcJJb?}!YmQ4nNi&yC)Sa~ANXso1mnnM5l{&sQ z*E(hvibZ*uzqog)RWCDg_xhG;CphyOw}~*v&imK$Z<3vDy4z!~X~MU^ysWV(w|>4i zedqT%*7^T`KMlXo@b^c1kIK90hHaO9Hu=aUd~%fJf8=ZgnkD^_A#wIXMcTI3Yek7? z9H$%TC#!SYci8xg&yX<s_MoSQRdTLD<pzz%3|&4tYN~4dh8t&E7{%zc7K%NusF<g! zw}B~2g5P=a2g7+kceMDQ_#t9<w?yLK@x|v2e(Fp<p7Q4C<2%3S^tgYh-1drFXrIPo z?;o3bSoSGBT;22ERL$Sx$F82+A9=(6&i2`-`p}c}{<IIWjc)48XYOk7;NCKKzD~x` zMS165ESp!X8=dfFN9uFoD9_WPUyiJKCdJM9chBq#=XP=?2cCZ2dF9K+&aNvKiZLsk zGj?6pkb0-cXk7NEr!34{XJ^|?i#&^W6;;*`Za<W@Qx%xC<=KgK1##u-YnDEmQ{15Q zrl0q>*M^w5?P9{0mn;iAGy7Mg$;<n1UcBphKOsQptijozTW7Z2FmOC^CQ0|E<z2xS zYc_YLT6I1xnX4?c@$IY&Gw*Xe7u%E=?U-1)snmcc&VILc`s-P%{a+uoyld7~+353T zzuf1Gx%q*!O~1CBH_sG}4N9n~uwA}?&H2;{lXvfDUh}qzJ`+3R+UK^=lxCyroL-_Y zd>pk6eY6itY>Rdbm~g0EbdP+wwnfuouD)cigL`L8`e4f{{;`(RKH!7MJh2_6!pB2r zmK`yOy&E>+SS;7PhrI8ORIA#oeqd>%zv1}hQ!2W`l9#W1o;7pRXYcN+i+f+!`04MQ z7iWK@Uqt56ZxNZaPsx8=6gH)un>D##()D_xcHOE6=|6Th#Vag+Fx{u_=#%R{b%&p@ zrl`aOeNd{?ept@6%y97o)tIn=W1CvEnSO7R(7E?+Rm*hNwskLm@6F84oaSE_d?C=N zB<780aIwtYi5nI@_`c?v{ER(^o`kAt?pgMr|HtGe`^TlM^#`SyPU=?1&G%lyyF4Y! za&D~U(y7b7T5_)Dx_3mH=a1Okhf%e`pFg_=?mvI6>)f7HeWS~_x&C$S=e)D+s%<UL zt*)j2*FCVC6H>sX&Z@SpF5#N?xykJ6Jk!@*xaJtNxi350viy>fuC?>TP2SU1e$4#z zframHK38RAPta-E+u<vf^q;T(6dyjpe=keLDQ~41wrl4(w*+)0x&}Szmrk15HKV-V z@60?!HKFX1wM%0f-<9Y3Esc32!T)<zdd7jTEqV#DuhvRU-WkW1tDc&@ex^fyDesC{ z6<Mn!=>r-po68QdlwA*<SlT|JAgXCs;jUHl*M8yNl{SCftIL1RC2)6{oxakuxzXRI z-ZwL^vG&u1x4%-mR$cm#c75LNIH_eXSYD-c@x^|X@x3eIz1)0z=iZr%eibC$vz}?y zzD#*rVAHy}f;+6YasH_4$#&~FyfDr<nUg1H$F`KLGS{gB;-ULb{(AbiF1b(k)J2PB z(m$CZRVUhCiu*gA*X*jIgq0QZ>$58~L-;3{|M@hNGiA@OvJbn0uGjXzITd+y^RC#P z1(S`L)L)+}%$<1mOYVkgU(`BV{aKgV-pWi7-ne*Mn3ja)bCtW?pYB;oasA1@tbVp_ z_uu%IdoQCuo|yQ0-d3^qDlF*-PhL2E)btK_oYA6&>Gu}0Z>y4iWpXI*SG0#y!km8@ zWglj@)bW>nP(GZ^U%l4pwWg22+$9(79_1|BX1<R{P+l|H-6qV<Ifi$tVAty2RFi!# z{-$!&y$Nag#px4pTTXxR%7r{HO-<rmyALeo(%!p8Yt7x3`v>ebk7ynL9_wb&VBO}^ zx_mFwb%}b;hvHhNza*{Jx&K6xd4+QL!T`kzwuho`&gd=vdi6(#Msj$AhyU)b6LLZc z6W>j|s+D#v;fc{LrhnB1NxsY*mpMi!9N8P)oX!8hZi8Y>HG}(k!}`cS!fQn|JFc(3 zV}A7Sg!}v34_%nZvvOhRn;6IRFrCHPl8a7CPwJJK_-><Go>KDJJ1)ml@~#-R&Yrh1 zEU)VLtwp{Um$j}C3Kc5~zhHh%Ft^W4-{t9wH~qVB+`QP=s?Jwdy;tv*tJ2+v>iUb6 zg&wNec=5fz-{^g@FXOr>kILdDhZ2H9uZC`!u*><*-mbe}>Rv}4oVP|QwED^gqdcE) z@4~BXFQ&}DwY|%&Fq5@<bC$oP`Nz1}9XC&X)(A6}dKTDMUATUG&%~7TE6UeR`pa@R z{@4pww$HzRzb=#IEt3sk-xK>dD_(ND%I~lVCsr|s7p%VJ-jaN#v9rWoNvATpsDPDy z)06dl-G5wN`pP1o=qatexGi;$w&fDOsUPz`o#DzmzpD9_!0El}mMi$!E-npERQ)k` zs<8giYWL}d?gt89N%62VxA|A?|J3yFp8UbZ89%{|C~m|3H@Mgt7-k3{H=?=%x{N?4 zYs0V^NrOCYnK>n?MS9=^uWNfxdmVNVY5Sj?w0N7?!tC!So!obosynXWaJnUK;mLn_ z<w=#E$8WF3fZ9wJCzUvwx)0Y|On?9T*S{YwE!<~>eT2^l%@JA_^~d*j&UXLPa|-6A zeXp)dJi0zEGgCU$<LS*;QPX~!CW@^yUp8^;^JU5|nPu(~Es1(_Z>+uXYOg?Ul=lvw z@c#?yGOt;`Q`zv`_Lzme(7LGQqUAAfU8cS{yLghh{hk?ZTQ#mr%TC|AB09Lbuw`>& z6nl4-#`lBnC)_U1U!Rl{{x{1>L8hgP;fSH)vBV4xVHIb&hZQF#+cnCA+AtGlv)4Xg zU|<NqyQhS-b1WcX=$KQGk%%<rIXCQnxRkrdKR2<kX}L*0NlT7x%M50gx^d-M`%#m# zY@SOOMRY9tGCelofN$aS&AX3%+4<jley*I!wc@H@&n$l~E~-j*<X*%%t$pU*o%hS% z&$YgP=jqqk`~SHyaE6GueC(81r~N}j*eFj!!c~Wfvyjz!hRES5J+rwEd2~!)!f@p9 zg#zuK^9H&+^H1;4%_&#f(Ou1z_Ti{Pkl>j|`+D?6dmc3QtWU8?;kawAd%5~Rf%>$~ zb9beg^q#W1eyT0~->Q$|^U`uEXYEY9vh!KN>Ql0d?>xAby!l~ay4k){3QON=rE^^0 z8NS7QE|=~7zN6>gbt^jQ$=#eCc6IK&WC?Zk^F7bo{8trMJ8OUFN{{%;Hh-S-m!DmS zdHcm{+?R!>pE&kU`HM^D!%N$q1}bg-`1r)Mnc<rs<%S*oeIeAwDeBmqE*?4KJ65mz zLV6xEi^@Mz7L8Aia}~R95M#+zGv()=%*u5fI~ORmyGnX%ebP8pu_%dkwbr~x)@{<Y z?|dz^PX35HYFeZ7m|fKVk$M}am;FsI`<Kh-ud)9=$<+RG%B{Q`eco<*kJCl7f3!Z# zi~s%f>bJbFZpC*sKCI%%H&}8mYOPqjj=`PR^Vdv|J#VNLH{0^Ny~~|RhnA(AZE;=v zGCRsrX!GfUmjNAiDN|iCxVQ4j#wT+K^gb-oxvgg6u{LVopPn-=0VjVQG1S?fW-ZNg zz3R)_>siZ=_A9vTbeNJi)1asH)2`kl5`A+w$UbyietXjTR8J+oa$CkX1;H`qv*z6B z4DP-zo6-1xTBW1kIo%Ym?3Xoq@fv!sU-tAEi8l6Zxw$5FqKb6e>n^Fj`O`j?It4#C z8O;3qk`7lU*Pi#)DWT`rrdT~%_j2dc%DLZ4f^IUO^*vRhb}jpLtmVf$VoC2UmOn1F z`C4%#^2q(t-lL1}w@S!;t7hH3D}2_6L!7a0ug*pHT}+91nb~`ncm4S~--T9tf^*mH zJDa_FvA%WLWNW#(w_Tn~ir5BDpR8?n`MIv$v_6gZH=;}2cnhcOTk}Z0F>t=r;*VN; zW0&N=XE^)miO6l%-<R7BF7CVC5NKpP>*`5a9+onJAMBUPq+S2+?Uh;>xj@8;^}9fl z#gPE@yyQA}j%Jg5-?t8NOA-q-3mHn~9}2aGP0LW7G-=T##zRkBeLXv;SG-p}_x8b` z;D=@M&P!(pYHsZ2u9lE<(30SlQ#i40@xkyNGq_xx4^RJAFq5Y!MD3pZf~9Y3d!{T} z7#m~hvqIt0lFFI?bZWF)A*Y_|&f9u-1v3Lf0|#=+ioSoJw4G+qQlXe|xv&LNE~xdo z&Q5Dy5)`PTq4_seTw;Pqx#jL`pZUM{f4TY0G1+$c^89&|?X{Mdi)~Sul~6h3=G@<R z-{0H$`D|?5{-3Y&e+W27I!efQKb+R&Z=m>iTT`Hm(*%J~gBDLipOZTlD|F1L=;U@V z;ovQA{vmSt(1)2l)rZRLTh4!UILNb4!bPbi^32H}K?gbHPW|vYrrdTQ=I)x^{F3k7 zji$w3?pYRi??Kebg4g@A{<N-^yuB{$zDZWh=ADrbw*_Vuy!G7su&CNBDq+H;uvTN1 z>^o<pqswN_d+)mF`ST<W!K2C9r`K3q{><~(<<pspyb3?lyxc6yxH8_&*B)H{+_EoX z+s=od=D3HLXY;%~QO{=^7`0<b>aHm#a=xf+N_{qUOU3Nak9H-Z{S&7cu2*VR=P5tG zTUqq+j)jkyYgRnU)>+~4Sh_9ycw@hD{EFG@l%4ceok;LJwy8_!lTldcnuQA<Y3@tj zargN>mcYPc-?j1{DNEX~_#tR-=o9ekW7w}k{l67&cS^6Xnt5z;*x^mGMn#hLt0Ru< z^BC8@ogRK`_f^@w7w;Gp?NJgkka%`3dc88+#v>mV)R*slvSV9d+3k6s|2v=1wanT1 zwQXC9iEXU*@uo6~buyh7n?*c2rUksYaMF}bey3qf?~>bmyg_TG>DnqATdqin-O77; zWz;vd!)N7sUti6-`{cMl(M}h=yFrN(ufM!Dn{>S3$&|MoQgicsw#`zTdE-tY>xO2v z{fQ=)mB-KN#FZ~_{TKa;bz)3}kLdNuH+{^e$6uVRDXFT(B$>H6^Rh~$8P9P+QyF{h zr_n9T4opsG`}Sm}_$QHy{@-qn=hrN?dbIBK%&Dw%#intuyrcE@?Uql!XGKr>=(FVd zwcSOpe(Jj2D~wZrUHQzg)3|frYp-ti^~#1eufAKAm2Ogb$jTY({p!l?Z5LA_UT03e zdv^W#d%g>;ZmcxBe*f65SMRj9U4636`?>kWO18@ID^I_4o&Qof+kc7jDeG@ydjpGQ zmabp(!!zN^#$y?K{PL&2w6<~BY-4%!+kt;y6nwUPGE10prYEhmNSt|J?2mtqTQ0i= zuFqfWmLaCm8t|`{MWWB(%GBF4?h77JID0#I_k`&g5;1+UPPPskJQhw(jp9^YvZ16y zVdDx;&2K{Q_a14Djj7Sf;5P`_BRnmsddHUjhm0zJ68|gy$x(k(-+H>!!NQ;>RX+Tr zLVN0`-^^RK6gNyvve?j`?auksWtPeM3-ayxOCRh9H5xp+`)t=UGcfevEgr~eG&pA@ zX67L^8m3M>3u=P3o}Y2c<loY)*jH7XCJ0{a)e~J9AfVKtr~c8%*VlNG-_`VD(8(T; z-bMtda76O7SL@xkjCuC>^IKU)zK!BZ>PPZA8V?+puv^Q^z0}J%`dn<{YU@S^HRrf< zQqyHEeez~s{GHbE_Q&+x8$uQn7I)TN^V)BbdcrT%Yv<*unlFERstFXBz5m2MpMQxg zN_smtezsC?47S{~HSm|`^W>nJWk(k;3V(hvX%+9vS*zGrm4;3FweI8Ei9b(TJluCp zktscQX7@(DRV9fWU;Z|#$}e5FnRC8+!4<Rh+6o&E=`&n-{b72dXu?~iFSnx4T`Y<_ zyz4q|PSstfH(UF2{SJW7Qr>&DUz>@Mfx#N@Koe=Bg^=PH5#ESFrnO<&!P21;b$%Q= zH+7yyRV_T);Z@AI_{7?V5DtOGcYJijR$Wt#oV0Xy&aRsxuh!oC%m0h{&n5m_f&$iy z>oytx(>VS;r_8x+8E@hlpL5lE?<?<}t~_7-ZGL_Ie`a2ZBj1(gxrZE>trXMI)$vf5 zF`ql)O9JO<rCA#uHS(|CQ`v4_xKHt5_4`lvN+(uj*Zh#n&*O*?zu34!TzbdJ+21Qa zH;T(YN;A$Y)Rym@u<@m%kmf|GR^^;d59P<LUAc_gSu>b6F%|K=jb4?e<rbs)BI;tu z*E_syVylhzpL^h&mSQ^nLbqE`qD0h{-jaxOr%(0>-J9b3wJhSM>ETa(l3|;RqBy0! z^p;9|TDGi3TxWwPo4@3=#6@`wx5S=1GZm@x+MYLvVL!HNPEnb6pLAwd&%*S==zZGJ zyDxRk<2^ogiRSZ5vy4pKPx%IC`I#=44Ey`F{SVKR15&Mm7lWsqUbiJl&!$p<_aB3- zYxu%fi*Cz5=D50TUHE;M%jp@rX2e@qu^2fjtQEbrbjp`s*%kL@+3kC}$^OF`o2rcV zV4K5Bs%L%DlyU5t^T=e!<G7;aF#TsitqU#L4E<Geqe>4J>{EKNLh-qA)}{l8?=C2q z+@>_!>rPWhab{aY>nGuFUR8p&>65%CH$I-VG*wmf@nTQT#F*3<o2Qs~MOZA$^oqKc z)>C4*`pKD}cb80huCC!QeZq0sHg5m3CWkZrmM7JOnX*a<aT)BicI8y$@z}w%-$m!! zrk33^CVo(go3x>Mwa~H3%jeq}StOVFRZsP9D_7lf@MF87QX-Es(>ueMD7~y%>r3wJ z)4ls)YS}NPIjuV;%X9y5IkfzT&w=Mc?;dk=#y`^Lyu3s0K{n_82hoi8J!c$eI$W|> zE-LMmol(zRnS`{>2~tIuG*@?Cp1o{#(D_8UsYUr$e`#cGnt0+wWl)AsR#jhce{uHO zL(w<ysQK>7{A+q9=%G&Jm8*LU<>Pm5wQ?>E|Lk;YHb>p}|4T1TmfEH<eY54!{8vX) z+7kb4nd+^d@b`Pq!!`Sr?s85p?tB`SF8XX?d)EoAMd_cb98EKe%T<p~d#*Wuq0~B+ zYl}n;-c8;5)8cT#+AX2)9`P?MTCS1ZnrwJO^|0rrY2tn<*L_2kjr=7)^&M^CnfU5V z^yI|K?JkRK+8c#eU!Fd-|DWEMhpfNYiVM@2J-*$Z)Ny{&k-TXtW?NJW6;Fy8JenWA zqIRkqr&Gb?9yb01PW=ySS+4(Ll=>&L;?4WRf5oMyH}_xIA}3YD@sQzc^#>N`YJq0v z>JMzq`wwmAe<}V!eyVufX5KB6Q&glq7e8&>>l2fyAFr}MM&&%q_m}rKw~G}mx!NeX zmh1Af13k8~%ieMvJIZ<g+HQCGZ8B=7_x=>T?y<$*ji2?J<HWLe3+JA{5O3o$o%`E@ zrvmAxo3}Za?EWA;tNBdWf9bh4HTP_fSnj))*6*7A#>KeN^LDS@?Yr+z^+c}=cH7(c zPb6-=(BALq)idXHX`Pl!pDCwWT{*4k*)_M5QQX_F75-xoKlSZMkdV%N=Q0M}8oiXK z2R^24dvn(E_MGX}!CJh>GgykZT@p3A>99$COMkaF|3zoll9%izW;PrXAD-U7@cLUB z<-LWePlDq1Y|}r#Gr;K>_=t(uYt&!tVPRmH%7d@*O4`~FXlV&LpwScgdMwC5!Bl@+ zZ)Qh<+Q&!dxV0`wnEr3w1kZeNMFo~17M)9HW7~=!@2bw3_9B1t3H}f6ov+O_gCcqI z+rA&I`ClU&@PN@=)lGGsSB!Ap*>@+S<-_)F*=69TD$unmPWWA!l>bi0t?S}BzRx|D zy54co$9F4~d{$L$oVs^IjZ5Bt4!cYJEi?ILy{+P=&VEvt{I@4E=ibs_zE@_N+cusm zPF~#hrmigW_1?3kErod-9$CeiMdvCf{<?ohv9Vy<GKK)2OX(KuLVST~dk&-~ec%Sw z?XT;vc%5KiU@*r!AVAsy9gxrqN-ajN+569C9SRU=J)djxal6(Jfs;<lxLcjRvo2K7 z5Q+7BB(OMB$^81Z^Un^ke^|KWddQ1odYdHd&hb1icvfRM??FOKW4k-QEq`rmnoin8 z`4SbbWc!NKr9OL}XDEwo@+?!i-}d8lz^8*7Crr!Hopm_mg{f!n3vubdKdwH1UU44W zedxlqA5)7pKYdA<WD~7rQD?CA_@j3lpZWjayzbrXH@|jf*}k3^ztpMz^n4%9bi=cU z*1EVoT$wd%^@0xx#~B}7dn3Gpd79pyNxUZB+b-zc-1+idC^LAIbZD)(<s}9Nh9h`G zkDQJZEc6id^xSaHis0jd|E^E_vt;?vV?Ue>{g_%5P8u;W9XTP=l*`8|z2a=@CFS#< zHtQ;RckwOw;^BWudCQjtoGr_8Z%vWQ^U^qBktaN9o9FC%<(GeZTvlG{e(Ou#i!+xe z>-_A<{S&$QcUk(snKx(Ny;=L{C%e3pq0|vC(cOh7`1IpWJ_+@SJNv}crf{~`-s?t{ zbLZN{uYbf_vAD@x(_)R&BZ1F%);&1O7xF+?>t5G(%L4X3jSB12dz$V0v?`W&l|Q`8 z7xLIvtMB37JG&=KzI)X9n9I*1pndmSi_Y&G+o~mA{^hG-kWVRUIk{KMu7$t&y~gC< zA~h|M{+1sCYkXR{<-<R49+OG=<f-=EI-t#e<FU(SHVwvF6a7CQnVa)1QuO(RG@~Vt zY}!I?Is{qg2X17XANpZJmuba}zq=MZ5DfdbqO0`BoTl@uGmeQ@{4!+iH~y{o?}yU& zeNPSu|JWoOe=vMzP4Cv)xhKslzRmX8cl60^pM8g)?DpAr{K;>wx&=w<^Fls2v)T)3 zyytD5T(!s9-{tVi6b-4H$_h-vJ>{HJj(l}#zo+~l=l1fq*J~1WFFo&my>}nq-thj{ z6Bpc5Nl;#PZh_b}&UEFIYdBq<PHts7s`p)w(c61Vd)m74t*(!2?R1y1{w|H*K8@$@ zqs#niwYM6V=$kC~`jSQZ<;BNQ<q_X=O>{E3SR@YITdr=scxA<efUq5RjN27Ej%XY? zb=sii><SfQv%YxCqDj}*85urYa#VDN&z9^YMX7m9TMysf8lZCXpc;oxVd}LyCuZxS zyA1xOJHK<CdB>?b>0>~-*2?w##};?CIGpw|aEmlQx;3I+V@AZiEQZw^Z8ksKrS`OV z!hYGEa~6o+n$elmKGSFQXBXpB&J*{YWtp2%)W6l(c>VVjA7KsdW2L$)pC4gi3jTdf zs8>bvSnxvcJ3PLNxT{t3l0FIT33-%SvGYj(N8!%e9j-|YC;dMfv)WJp!CI%ep=8-l zl?@3c=B$Sj_xf|M@BhA(?Tbgz;e!k09{WuAA!>5!$IIq^wcaDaKeje4SFLNluk~Z@ zk@p{a8mezuDhN7;JmTM>v7tsy?2E)N(LaHY{C{jd68~XM(|)f%yyrc?G&Cgd2z~Uv z!f!$0uLHUl8zW2v7wt&D^PBzO$_Md6|BuzH{Og`@<o|~~P2NEa=RFh)0tH=zM7X;} z!dh6a#jIO*>{&oim(W6uLu#$E;+mc<R>}wN$jP(1*x!~(D>7~pDpXlgz_GF;^2rp9 zsf&EhOj|T3%>T^9MNT1JfvQ@ffx51}Ggfn`KbLDQxyP-#MI^i<s`2RMJ92Ms+H^Ko z94)!*_x|Hsj@GYYX^ZFTy3XA(DR7<83f(p0b1&XYS(j#T`fAV_ac-7ZMaRCryvTU} z*S&iIF82kmD|Oz>sB!3OeI%tR)|oB3F@kG)f%YL~SKC~_hfig9$+N3W^6<QPAbU$o zXaC6{wbL_n)SbB23rCp6E;kC>;I6Wxsq6Ze=Dqu7pNrF-VXK-x;c;uG)6wSBD;!>@ zURiy{(4AHFP4@L9x1XC-9yw~U6n|P)_VQrLl+%yjY)mf6xLl|k;QCd2{fGS5_uMb5 zB>1`oAFR{j*m=q4!c@KQE)T9QPQJM{bMY^i>uk4@3eR2$i&c;^IPO_-?nhves?)#c zFSWP$zPv6J&C8}`6Vh|)c&O$h#of_|7D{LqJiXd-u1@!uY1`dLi+dO}9Y0(4$UH3! zlDxL^4rho@0PD$P3mD@cN_C&x7$6k+b@R;$cPb}8+Mqx8S68rtqgqA!A^&Z;x3?~A zekW=in(W!aH*p6~@DI1efwNBwD*NPCPHw%JuPw0o=%Zi%0!&;l76csG_I%%~<r}ni zpR(qhyiU}%@NGlk4bixwPkAcFJ8eIfPTs8T@R;2)VC6fXO<}v39^X;<J}Z5fY4oCp z88!~bb8W<UvtyoXvO9Ao@0eWh#muV0Bx-)z^@v<!?(1>iT%Rouzh{=b@J_|$E7|vU zW(Ujp91fZGWV3KpXI-`zxB3qY$^D6&zaM>;p>-)aXRfyTo!pfh#LUYCmhx?U&-Yd3 zcdzcfSv#Zit~uBK6<Kj9koWDZgGK_2Ot<Zdik`VOZBn{VnzoerH3t<(uF4EW?yY+h z8kN3p+p#P`vYN%G?&s6uUks`14xB5Te(TWcS0?ivLr(9oC}s*WRZf;(9_f3GV^gZI z+j*Z&b2c-5K0bH)<LPVeRPa3ceeQWj^`+K@SI)-#E>@`OpUK00Z2pGF{9i5|n&@*Z z#VGI0x)XEX?tBz%;MG~8Fu79oZ`z@on=3aTfAjtFzqhAezd!l-;q%zCof*G3`y4bs z9eC-ZyngPRPm4_7*2qk+pTVzRwwR+jfQ@_W7cr(4drxK@)K^-()Lrmm5J#Pn;M-;E zU5~hb&$qC37MQoFSR*Oujo|Zyj~3?+{%TM>rQ{f#qT1!j`(U2WkzoBx8XwPiJAb^g zH1V|4h2TRiGqSU$&fB~}eEGt-hR0h@UhTG<yt+w5G;nna!)AjLUUSJ)D^n%34~p>4 zy8PvV@pADACa1%%&ud9$*_6$(S?=4Cz*j3(7jG_j$oa5qa{;sEjx1rnvrZ!EiZAY_ ze#%kg)86{}mAvCk&WLXI*X@SU3-125SToHrU+QVJ|G}FEJ(f)30S~uV%$a7Q#TzEI zR>-38rKWe7<=)*!2a>oCTCGTZ@apl0tMLw7?>kkP)~&vtDS0fW(ZqG)?(hq5m3nV& zjazQoTUpwy5>y^DWrD}t`-gbKx#k=U{l3xfpUUq)Vau;>xR9B;aP{RG@AWNPThC2O z)HxBcs$x!8Vx}g)p2&?_uFX5Dd2jzo*~ZR3vskX1qswjGQ^7Fjzekx?PZ8X)YtFSt zT1`c>mlZq~lyKU6-;61L`eirnI}ZC*oj?4{ja%OP!0%xGs=W<H`|oCc=S$8MY}7Bg zrCIrBmEy{0-mBu4drgWo*0ar$JmWg`US8UfJ85RuuP)!X<}c5*%a>x)Z}?bfZ>y5Z z*kh&~cBFqAXVKBB{g%G`(#5~l`RpiQZ(Ng;zB*6+PUuDHn-=fl<YRM7&u^XQ{`jKX zQn$n@$?5^lx=Rng;{NbE*Y9?+M&T{L>l*Ga{@cv@^G$Hg%c5JZe+A;6q{oL_Tuoe~ z%cOs2mtNco>9!5`@;_hE*u(FB!Kc|dW8qv+hh^`-gqf_Zna0-~dBx7xZd*~;CB2&t zyHk>_d2?=^N?X5a!_n1iLZ?+Htlo6#P{-vrllLEat>c;e*??(^ZCB2g(8xKbBJWh_ zpIW8U-uv#M$6{ZzTdUWoFT8d`>g|*tp<(lG9`Xrm&g3?{nVs|L#@!XGHWmk;s=F$k zH}{(f&%$0CS*Pm7iPCHDT$4IJQDf`vGiAGP?z@p={o=Z1i)@``)7;oOOy(A<58s^n z(GNML-2bR;;~7o{hWBFl`YojG)pE<p&rd;ab)VVj$K)t*>|_3uCjk!?0<w8qC7s`7 z^onw}G}ZB`y?#`beXjRcj+jjYe`?J2844j{vuEb~`~3Sy&HaUq*(JqWic5+_TFz~5 ztA75sN^cui%fW(O6U7rNdFSj?Tb#P)%>7mNGO}qckETbh*tkzA=53_g-)Z8zxPl~? zKi+*r?Ae1yMfYv36z}}HwZZ1(E61Hv667QAJ9WJc>nU1$H7Z+k?x+6Wdxfe_mRx)o zxwBL0;WPP3rH-%F8ViKtnH{DH8qGP@dckF08h3i;yvIsnKbSxrmYm)TC(bi4Fy!HF za+BC$fd?B>b362YxHRY*7!}D)kqa(N+jS|Zi%ZdAd(u{k4N^>712sG@a{XK3ZFE!T z?wd#Nl76fIcr@F8-s1JOYv*xon-g678hjH>j+r6vMwjo2Y2WX?pZ)XQnZ4!z|GYjK zT#_i&*d!PeSiqQn>Y?t>%Bjg=jxzb`CnrrkJg2F0&*8$}$FZ!Mo)!F-eXOi|P0Qk< z#DXIx<$vC>&f(ziOV!S|xIAkb_@8b#vr*}zxoAej(+KZJ%4@VO+M{KpW#o%%4lS6H zdtG;}<TPP}IWhMP_ZgNvj$6<^&9W`zMZEa3r&c`9{~3H9hJ7s!<l#BK<>(ouMB&fV zl3A}y=q-(J$iAE06msNKo~OZ=A4)s!EqNZYOLoWc8adMm^D-9CcHn+DFZffsnB+Ng z=UW=@*Xl>|Z@Hdt$g^KVW#y{%FF2J2ULVrrJYVF~<|KS{mDI8edoN_>+;&?3@Y6cs zj^83-+MAw<Ep7TUE7-8@wwBt2z(UFOtAB`W_e^e{T%LP<@&aGc#TBkcS6B2Vdml~z zF~{+D_(Pt>3(qgh-<xpzkja}l>F+{Yg>~-gcinABdj7-d==2@V%YXcF+F5k7=tx_- zMcvJ>tF)f}P!)|o_~1rZpo?d#Lu6}b7Z<m+OnK-Hg$2!8hf}W`mnL7=2y5Aw%W^Gt zuHT~*iJg<=?lS9|cWO#5^_IM*S$TFsNMEdIyt0k*{KRd_WflHg&pv(qrpfhW+1BE$ zyxaUXizQle+O+?t2e+-;a%Nq{gLk6ZJT|cl+@soV-+MJLw_>~2F+IV@uD44w>|)RV z{V*+jdpU=vrv1IdJfjsMGQH7hJ1Uk;ixO%Sd#~=*_bPE~%mP=Nhuf!Rt|(k**{*!G zOO?|u^Gm<>F5R{i=Cd0vMqd7@uUC1ldF!q`7j>_RmoAoMTjW0SHoGOT_DT&yZ!U*P z!4<FT<>$3nOCGOr=-sNMv)Re8Z~5)D7uI?9$xhA<5!X&U|Mp%~RQ%q}(-x;qh<n%L zGHJiH*zFYuY#dXf0wvFF4ZZ(x+1WcQj^A65QOhMR{?gu@>6Gsrh7|6WnibraPMoxB zE0ntY#nh!kZ`N-k_Jo-$Yv-KsdAIoW^9cu1x_cXfU8Z#RrhF5eUDIYf)A@+`?iZF0 zkHSB&zc}Y}DJDHAziY-{6XRKrXSzS&S2q88>_n|u(ee{__x3-L4|t`pS6JXLgVF^J z&M89do^h`PR-R>EvEO@VP(*p`4W4@)AMPtR=FQr_w4*v~nNyJd#9v_@C7;wHe{U|- z{m1jF#LRAPuk8U=-G36yJU4G_5xaeSrMy5o|I5(szipR;FO@tqWIH+kf>3|KH}xe? z{#@!8D&xov_P%gRUp_(OG=E`U@Z+dQ;&am3CC(M;T1o%m1(h;^Z<0HIF*7hIapEhS z9Z6bi;+|MqT%4Jh=af^5yq|VzKWNTF;Q0UStfaqLwcSq?sxJoTn?|rWu286&v*hru z(!08|eZStc`NCMEQ7Fv9|22XCaQ=*bdE@!<^3p06$0OS=^DO2`Zd~}N;C)p5<^!&A zcdXW{tX)x;78!U!f71QtCEFFgYHLoL_qNG4wC(9uv&O$FTC?JhrtaIlutGqhyl;a> z<=V%6oBNrX_xxG?S;RXl+u~$*(Qd(X_5b$iZn>8;HU(e)RT<uSNOi5J)F!Wcq2BA7 z50qU0ziv+9zhlR8p8C{>X(?<FS7w~R_h|JEcBSAHTYiH#l|K$E%Y3(a$x#Eolw-vj z)!@er3=AjnmfNnBg(#x<UK+s}5prGhpFYp$wug=hG7oGW1d<CJIP?T%J(N#$_=#>! z=((}wm&CloCk&d6^J8Y|sl~og>Wz)vRMH=tlib56bxY-L((HG?C#`#VujKyiEt%&l z-}9bWv|#T0$9IaS7oV#?Z~Ohu=Za4|-Q`@(q+A-M?|SUK*t*x}o9B)9ZOrU<DmdSr zSUPdKQKe*g{5kHpiS0r%Pc~Z1u3g*E629xBluXj6D7E#;pQ_BcKCp>dy*XxZPvc?U z^HrOcEuX(KBR@gc{Z7Wg*(!T(_7?4FwazbHES8`AsZ7m%rc83toRgg9?+)%gca7Dc ze$690x&85ntasF^udWd1mw)nZ_va6Cd#?8~+?(FbUNGt8@0m3XC)q1cwpW~V<Xo;& zGegk+#FH)3+8-vg7_WKv&}Pn2%QAl}e&sdq80SncP!#V^xYBD@6LRSIjbn?~yf@_R z-@Q>xKHYZygSV5p-yc$+yEg0V=4d9~uFY3d8_TzeMfJ4!d;ZwcqR#SZvRk~ved&um z9yZ&29az+QzjEwgx~u=<)~1r;3CpZmHho>FqMOx!d{Ud3@wTjsQ}iC}u@vf-*v_%$ zLvDxqq25~)#9m#OuJ%0Xuz277j4R(HdnY>Tt}$2p5;1??g{s9>$?hsyFFL0=EGS#u zu-NvV`z)@>yDr)aPCcBiH^avH2G`+WvGm_r%)#mzxq98lgF6KzBkOoIB%S0|#>)C1 z{WZz^<cXO0w{3TC#hn%5e*N*_F+E!sKTh|rOB=;DNyu%l5MH}CYx0xuPv7`z`yKlF z_iTwhaF#i0y=g_P#=`8jd#PM*Nr{aM@?|cHti5JsW!cQL{fb{)rtj-o$9EIoTC&(L z;QyGRQ?kIDf3iGl-WS&O8(w-(Df^!7yk=R$RTrUSGuW=5UARJ4w<IDu^-f>6QCY%r z9$stKXS1~yE!ku!(fcY<_trFy<!oPPY)q^7kbm?zMbi0DdP<F0TTirOR9^BYmDODd z+j|UtrRF&Ix18q;i52_U)Rz%sd}4o@HhZ$+r@#<zwXaKB&Y%9l<Yct(#1n6yeP^DO z)wmuD|7gk?Km8+bO>n};t8(jl7+q3pxbKT;$TpjoO?j<ksC=?*pYr3~6<)`_-+1?Z z=AVX>{4@V_oa`5z^kGZS{0Ga8*dm{w|4__zt}{CC_Ev47%iC49L==VF7@n9_ulRWS zkEuQJk0m+xPy87D$M4wtkL;ZFQ$DKyi98lR<ImKS_h<Z(_2)G4xw6|(uKUQhSDeaD z(bB>8WdTf|_1^z-uyJ(~c_OC#Sbop^`Y67C(+?bqY%|iY4?DC!^@zaqkMcI^5BD1_ z)pmSnwYvD?Zz=Qa+Ssc3Dw|R!>dGt$dcv{gOjy<0X<ll|Q8}e1Qx#0L!`&sO7MyYt z(rZ-Rd^K5CI5Xj8OymyNc{(W*^*3aFV>Dyr={Jx$#k=|Xg=@1-grZJl^t(UqRIs!( z6zQMUdF6_E^l_hlH-!S;m)E^?G?j&N-&|=sle6d1EAtfQ6NZmg2H5Y_nbXd4<@B)? z4o|lfuUs+BKzL4r%g?pOhy44`ew^)jCwHRV;`>!B*IrI6u)jI6M)phci+3BBH_8R) zKa({q-#%66h~;;2Ke@#<o=Hqc_bt#(P&?_ncX#G2madGlBql+P{a<=#S$GP`-8adb z>Us8tuh@!tpHBInQk^+nZ;9*I-02@|&F-(y?#!M3!DQZiLr2G>M#8^L;tlrg_UqmI z!sDH%M40M?%DXpRF6cP@sNFm7{_&ZGm$d$UG`ks{`=u`LRw~<$c_ugHFWV%jUemT- z=Kg-Of8D<PPmf;C+ux}?O@573Q;5Hfto54+t(jgb6&IhKsI#5*Bucs9X7QS(m(Cc6 z@~R&A`{j7)ZAPx2wP7|^zuzXD*}hHm$(y-Lj`AJadN!-dBE+~Z>iz74YbSrNshqQ9 zZP~Ip=hj3v7E}tG&lh{WXiGWw9jm2#W=3o|v+39(m)m~cH$;|36@A~7E%5kJj=$IA z!<yfG_x8oCxq4>7w0m>>Hoqv%jlaA#^Y}BfuD6oGi*;RAw5QK>Q_n5m)iHbRMeTXH z-?u*Gj8WWV8R|C4ag{@FN8te-iIeM{|Gz($-tjmyuwatMq{A=vXsgF}a;h3Ieo1*Z zO*c8rNqfCUX{%+(W%e|4mTecri^Rfre-WL2lvRH#m-x;rt8Vz!Hj2+GUiw8*V}(wY z;6?Gv9;&q^)+@hW(G^k_DBWkW>6M7P)J^`G_gk7?=U2aF+BE6xEO9ZJ-Qtyt3%>Ly zJm0v>WKJpfdB;;88JnjTq^eX2Zc^>ySiHb&`8%B@>~CN0%Um8iGgEf=o0pa;y50Lz zGR-req+JO<nXliWbp6gdzorNK8f+SQb6)T~dDy6&9kKFgS;Z&uH|P4-mQ;Moe_)m_ z!fM-nX~()NhB9_eK8cxqM@61aw<_arpYip{^k)XvO_s}ZPk%X@7#)`L#3=Gx+Va3Z z7G7&YcgB3Uy*i6yZu6~8QuD=^K3x2L!HFkM$KN$SvEX$7rWu`9;L|qujFA_w_07o5 z`D@Ro)ckHT-S;`b|7OGrwrwh#$^rz=EHATd)O)>VKS!m=Q`?e%qH|4*%9EX?rq;1v z)Y?D!h0Xr%jIH;5OZLU9RqfsHP^i(zcy#R!cBkhX55%vq5Pjb8C@3cE{^7h(F7`ih zWvd=ZeweNir=O>gaC)jx_sZ}+UYv|JeLt71HSp82`S>}aLS|lDnybm`o4%<xeV?i? zoW02X{c)M46J{_TmHux0`1`C?XE^&U1BJdDJ0If`Jzx1_*3`f&-y&|^_2KABb)Pu3 zN$`s4>b_-0?!lICs{@N$qY4FgmN<MpqLt+;#e25+>Q3>3#SX=(g)<+mweLSR*EjX( zQ?JgW(^gNlP2ad<$C~#tVzd8DdQ|ji`iwu9<~-W;Z|?IASKjEJ*3^4`&nVRM@v>)? zuWYtX@`*W66ck@7^g46Jp?AGWuKiI{kDYq7$+^Y)%%1%_{s<_V|5Unm##r%PWrXqh zR<{dxVvZiP?V2Wc%Q^HfN8Y}M=c$cvV_o_zVwa!uemw12*4Ci4`x-)-GPlfYC>P1K z)#9CZFl$m~{yI6=2DTqPEB3ctTkY=<dey|rZ$XAgcI8&D;MW<eewoyUycKRgdN;$U zIhUjQ%?Fuf2~Yo<+>NZ0(YshF#C|M4=J=0Z>HS%9`vQ+x{5*H{^W4X)!_JqV%QSTT z=DOPa{hZ7DiswE%==pWk6t@p7>9d(mnVq-K<y-T9&G|bgk4S7e%%VH}R&!GFPtH4r zec4MN3ne^mIK%DNW72kJrlVS~VsW4HWHp82tE<<YJdu&`_ZS=ZOm0sJvrSr`-GZGy zCo#vW>znaaY_zO<l6Yd~l5bh(ZcPc{DiDuzy&d8B)_uZn@SNJRmoEjkaWXJ?isEZ} zlXjE1Z+=lhMt)9ydL{DUNdI}iLk<G%_1P1dqK?+TzaV#}>O%9!TNRTgBqU9_y(MSb z(XHOoT%TUG0WJ70yfuTv+|p;?8GYmUw0-;R?F1jnq#O1n&pBct`XWp8-Q7#my&f2y zeK+U&q-P<1Q*|_Eq_4aOYI>jL&Q#sIO6^o|;?zB+W*YT}yN=F(q;>b+1Y3?THw+hb zM(WA2MrH1sY0If{=ZT*Aw5jV>r62q1v&j6h#@S<gR$kAMdHP!L^t%7`j}QF(c_ngr z_~KpSFV4T1x@4)>=|sceRDm5gzCGR6aDXqIWx?e~`5U+mZg)tRUC6!h`>EVFX*G+C zijKO&i)S4Guc3b@%@+EB;2pZoB(=iP0vD+b9$uax{9N>Z?Y1|Y&$k;M+f;f(!ob_i zxlyelb<#0~AeZDePsYGo1=G%5N{kHhTh6j8-NSvC`z*5(bJ<MiOA3!y_+ApdRq}rC z_j|j2f8V?7IZdaT_oDoJ>Gyl@OaI#UeP8vHi@)U^bgy-?N$yTK!SPsPvZ0#iJ?ZHa zouZuD#LYi!yUD^C$vLe@?McP&V{W(hb)GC#Q%_lQ@Un_ctef_{gWc(;BD&HIE6pZ9 zH>lK`{M@i|Uyt~MR-4^3)74e)C@q%OpY$Q=UJa-6o+-NNvkSDN>vr~pKfLM_clgOx zpE&ho)j0i!X4C4Nh4YR}tM2hUR(0o~!g7^8GmqZ8)Uo|hu94Y;x4sqZ_f9^E6?!*i zqvZQ(ALaH;Klyvc9o2__jqDnBr{)~Z{Psd_+P>*0*;VhTCrh6*D2qGP(j#kedgqLk zqWvvRE&QH8HZ-JU87fb=RZ(zS8tUTEx767!Xmd|VS42DOtL;*nhj)1;bpOA#MUp>5 zQg_w`W@Qy4u?zjtjBnMn6MC`>Z4+LtoROEM>}gxjJ8?@%v4V)zooa^zn{8z;vr0YQ zwbg#E@nVzxckWkzEMS>9w`s>CA(^E7StojPU&d%nyX&z~U(LNQ(>!ZiRE&Q=d)wC) zOP4<KtWECFIh9hlV}^FW{Sl7f>M0v5w{T2VJ^Ofj@;veNch-IV9%S~kLQ*QX_0)Eb zoVqJlOugl|$(jchHg2dtwRhDDnVoN6PH}DI|Kc~j<VKaw8SSoA#otTPE6hc04c8pc zJ%8=@Veu0Vk}v+XOiP@R)@JB)+BIMUKfi`WkGi(Sp(mOZtD4w9PH5@Z_@QB^R&ev^ zzd$a#b2F|#^yK1e6uO*TJyB&n)5DaY{_K;E#`C1F2Vd)Z9B7-ov#!SJ;9;M2M<+Dh z_4$^tzNz@f5(jt92|-omQkvSQtL6uN;ILc!z*r*iL!{dL<WH4q@d=+?dpv$jYSMqK z&9$#<z2*<AeU8T~{2E_wJP>f}jLM~xC4Y|0<B|TOHh0gdCH#GTQks9Qg1uASFF&*3 zuJt~+{i7`B{iz>p8<#%+J2|Z7lI1Dc*lUkmIF|>N7)**XTOFMFYhROmfrx#|CuKGJ zv`zf>f)TdIA0K^WKlOt#tKo#!)z76Wk1F2r`^00r=D5WB=UjD-@s|YWXy1s_O<Vns zYyY$l(yaTBzL$9ZUFhF}2arv3`Xx@@hHrf@$DdKEpZdX^wf?xh$RFYVK_Bw}xG%_# zdULyI@nY3@)j#0}7h9aV^*?xp6qoCjjwsg(m$$A*;u|9+_pb<cvF+o^nV~(S*dr#_ z^Pt8fE};chg-`FSzi}l}=GoV2xoxT&D&PHTR*pP<Wzn>?x)<tCPGfbN9&mVW)0E9U zDG45@Z>YxVl}=mZ5WR8HZ6)>>vzF{E-Qsh9F_TXgQ(XOx&<&?g&zqQhM2(f-+-|qm z<W?)~x!r0kVg*~*X~;9peX6@;lBdDif08m`9Lq|svQ7&%U6^?_;lSH@fx0W@wPw5D zsdT!2#yRzK$K{5c+E)&1f;aYwyzh|xG$Ac8W8NFyWlz6YWO?hl3O@{)_KL^+&eMMZ z8D;jbecr9*JEy1R`LEzcUPteev-b0f#n@L~ek;ivoNM@X&C$wPE3byU<5=-rw~6Vl z@uwosvn5k)Q@%|w4q%eXu*f)KQF89K-`x)N6Z|LRzkKTa7uhuT-TO*^#>HRHg{4<! ziF4ZVi|0M<x&F>Z)a%|0L-SK||4a6#dE_L&6m;>J`uzG?4bHW*p5_Ia%591-<83eJ zdB3yny~1D4&2bswoe%QoK7P7<S9q8?d)lYcb#D4U_<i5AiCUKHT`1FvQ&U!5zE?)J zSJSLj{iCtxW)rI|S0^2gx>kAd+Qq*KkMBvc&N+UqF4t!AmDtU9uO_7aVf_Bovuy4$ z<HhrXb0*~%^IdYhyy1<=?l$4j^bL2;unH`XDEqv&ZdzEBl*axmmoIzVle~E_MQ!0* z)2|<6E*TklIxl~<Y5%F+o9>)X`cM$*cyDE@u-SP##;=RZx&<wQSmQ4qTdfmPv|4Fh zinV+42@lKr3=c0^9WwoPXxF*KiM=^9?tPe+I9K3=&9!V3@7&e9G$Y*N_wIIJon&_@ z`^Q?|3p;MhzC7yt*yhpu!v+`sZi#Z7B-FcapJ@`)qVx0JednK_?4CP+yB+^|+XwR> zu<u{}P+7%s@ulhRvAJ?z`5mp^ddVJe49{BlmQg`4Pmb4B;#W!m>#fWbiJ1vf>WbVV zjxVa0KAF>=aN^0UXSd%u1T*?h<kaAwbZpPQtLYbFTx^ZPdw;s}{u0vq8JKLXb=zoe z`h}n=JLTMCXR@waUt0Tp;ZwcoYZI3oS*N*i_WQD%7bS0g?#`)NW&LKBZ^kh#so&S0 zY)r^_YpKDy#qGuU2n!eM+}+ooK79LKAou-x^;;M3J6yT0FC6+?bW!)O*|l=>)6b~? zezNgJWXZSfKVH>-P2R^A-@G~R>((Dp=ND<;I41Wi>e#uYkGiw>yy;(mHF8ULLi_b< zu2tLrirnIQ(O0qeURhr`lXsIWt4{BPiPKCZ6)!!=_MObD)V02n>2#A_(N^^pt6o`} z1Sw7bTq2~+($virAsHzCbmOVlww}8R=dJ&?ZN5rw^}F?-tAx*Vep<Et-0gV@aV1Q( z2VH9{xFUoDZ(niER^L!2^g2u6O^EgRg?@AN5^7!E&T&w<;mXu^&_<72FHHP=!k(0! zXL4rx9#3GDR>~58pSMT6UwQI$;j-r{>lC)+ZOs;%ov~?2!`X?qZgJ*t>V-~!a`C*% z3O(EI#s{02wz*x&E1h|3?(wN#%;QAg1X|0vb>CX}?LufpO~KE(6RymAP~^5dD&aEM zJf2G_sf@RkUKPFPdVh*DM}7A`8>j8bj*Qkf)a5ISdEb_a>T}g5Pr17->i4$NNf(5> zm^wdmywTy>Gl}1>SNo&U9;V*^;1i*o>N$T`a4<03$9v*}HAxK}|FpE?)Dn~y<XJx^ zLy=a0*%^#3t=nfrPI%1}me;8*Eacmx_nv3Ek%7^Yu%|a8J}}sbYz+PxeQMFqD!<$7 zciz5R)y!a9qI}0~NB4!mjI53NPp6-BStzgWzx3h}?{mwXG;i1VZQ69ie%dGgYff%r z$%b>pocb#hkJ?xqeeP-4p>M9To=f+6g|@mddux=<m$`PYn=B;%#a7#gT>WXt^Y8!L z6ZVzszH!Z!tTz_jbHT(beUjzXze|N%xVXaeSQ!q@l4dA9VCeGXro-jUt=Z?l+1(G3 z{J|RF&CbEABAj!Mfq`Kr-cec$l7cND5oJm;;56u}k2y<K7d{Pr!1G+BMJ)8o5z((# zxLAa~`))GQ%xvzdtdVB7Yv^~f(Cd#2czICj^eoBqXMP`lEiGknEUw3|XRgHVmT7_I zv9`B-IG1~tM?@Yj(!aU3NNe4W<k~`=^L^c&5~-^%$E;nl^wR>3xwnk-KYqx*=s&Ie z#XW&r_Z|m*(mpHmP(iZqsb|xP4AY0dB9|?@a_?tP?z0=e?Y`dsBL6yY>hBtN?$5P> z&;QT#<QHH6d9CV~fBT(cm+TX;TIlw2@n=^nzNdcEVvUsq!v173bj)f|3uEjTeAJMg z!J3n7`+&`iIWO_H_6JT-kcxlQRej6Az@W;6uRmi$R*)jv+H;{7c+F#L<9Xav9pkvR zP3PDy@t9M~mT^S{M7>D@-QJZbWGsC2U3GT!?)+P4^~$#DM)4}G{Wbgfm+k);|Atpp zy-yKxcIYVL`@HRa-Fv<FcYlBSULU?bQLAZ(Ub613AD7>`as2-AdBN;9StF~B@rM{C zV=Fuk9qxHKtx%wU$43ph$uB?e@Oj~!XTvzP+SW*^!^q`v;`$zmUlo4S1A7k(^_`f} zZ^8ddGNC{}kdxC*b&}1SLxGZcOH^j;Nefl#O&01q9nr|R%v$lWr;X~v%wu-S$)@wB zeu!b6H~ryZZlSm-CzqLVuJ@=2J(MjJCq7|P))rI2t1Nq}g;z#+_^z60r+Z~_)USyX z%o19!JPz}CAD$eQ5ib@wU-Z=lrD+Ei?QOrByo$Fgv-6+8`BiQ@>(*wg#rzDrdtvQc zCg#bLmYXQAT6$&P4zXJ+kL&7&+A|ifoOP{?bH}Wl*LMuhzVcZTEchz_!?k-mty~iC zExJ)5&bHBP>JqnPrCgV@rDvJEJtlVkQNP^xyJ%h9tGNuP?-Z?Jc-xWY{94~~8>>xZ z;Qc52c9rTqS+Ytxj9prH!vcr<v6`kgm%IC1`?BCbkB3*V?%Km;6Z4L+9AbT7`0w<i zSwd~D($}wxDQ`X<WpYOOQj*!r`)gDyuXW6MaUrSdkU+#^UjHZiqqFDMW=+amX52e( zlMEZ{?82af(iOo6-Ex99$VrRrX$=;-7xsbgo@hk%a(Aag)m-<Evop=Ry=vJ5=Q&e8 zOl<1^*xBMQI_H=q>->ksthzTeA9AzCZ_?_$q4-dnHT~n(ru+|Uo2;&Q|L{9#S+o8D z`@Elm_MB(Vzn{u~AdhSINwI%x9*9r7-zUp;?r}Khe$5}U&0Km979Dsc)O;kQ-eboS zg&uYmG4W2*W!2T61(V;TvP$xJ?pTx{5w01bS{c;c_U5x(s6mtc%;)-zqTk{QKgDVI zENJ|;<?6lJdy90L1$8rTE<bqr!tK@4QKg4E=C61c?E5O?>aK}Cw^zjrN0i-eSaV0x ze?`gRQ***NrP(Cq!hM5{S<R-_aYR(U%gMabnO^*|iPv`7)F9=Zv$wrFw|$99g}T%B zyssha=Z09W=Qg=t8s#5dWpibf+GfpLKCUN<H*-zfb>cp!-!9|s=N_!PW-t}+O?-ao z*2cW|mOiIdHk8~su=H`(seLy@wtLKJ(lt14y{=~FR1f!G8r?mU_h{VMQXag>ex^Zb zx5YD2wGV%6HvUlm=$(Fj9g|deb+~uCLxEAgm{(!t)xKp{cbwcOk<I!1X6Vw?yvD9( zUD>zo-%Ka8h9<vRR&_q?_*a#qC#?OJmAJmydh^~RRlavA^G>`iYH;!~HJcUGe>>B0 zLFOMOqs)a5^0tY6_%~_h<-J{NB<6m6@i!>r{EMSi+sfu#K4roivj0}~;VG|!W@V=K zAN@BaYsTKrko^v4XY88iYhKAQefq_Hiyo~sp6j{MSY7*@NL0C;?uL4$4|jDpF0Ag# z?C#az`<`oiGH0u5doSNMa~ZzdGap(UjeT%n#`S|QX2m}$?tA4b>{y|!B_-0VDtycR zy7h0rljk!6)x%C7m;1W$`k}e?uSHe6_AKTsS#?AtYRT`4l%@MFtMOc35ppT>qte;M zZFLjZ92L3KUHXO9zV1N%7okP#nY7|>INkr95#qdmZp@W)UwIvW{7K>nu4z0y;}v&Y z+v_G>wI8{U4u}gZOc1)SI>q<wf<J6a9ND*u-j=zNqx7_QsZL^F+dWOb1iP(1!JZ~Z zf(n`6$(;V1QQ+{oqd77qzU|-NB_Vw)Hi|4#Gr8ZVkuS0Lq>Rs0=MXoSbuvfw-jq!{ z>=NMi)~udw>RR!IEJicR+F}akSuBq~(o^hLpC+xi>Q&6Y1h&n8ObmZ>J^Nw1j_28~ zbJknFoGHrq?`o;F@^5>~v#o4-PLc=z<bAr?6egCc=Rf!K<6WHQz2ZW-Y~8O;H64!d z3Dn&FT%|u-!aF14;mQvlk~*qek0^Y%6%F6ub7kksc)!o<Hb)$mEend>xqQxYPJ^ab zdHyq(+ZeRWva)<Jv3+9=m&d7EVPm%qi*7&Fl0M`$Z%0%0tCT}wDH~4REM{4~+t%oO z#m!=uAa4Q7=Lc<Xyq-}t;T%i#hTMypKGKcrtEbg-G``MRmg^gBknlRrvMJ%az%?E= zX2(l<*<}-CEwU~?esnb<Z~nDEcGh#4_tt%}Yg}{p&9&Ct#s?YO91I*%8f9*tt_fSg zdx`(Y^auaIX9|23F*#7q#=ww-axMe<?qSjvG6f`N<{`JVtiR@8w_{6Vi)AY-V+$)| zGjn5G*L38}o=FRiESVGH#>UAzf6b9iE`N`F5~}^a=txt~nI}og;@M|4+}I}nSyb}( zNYjxgJt2RW9GP?`=kJv+p$&)5+&S_k<nN*@d!}4bnqc^g(L;@^;p}P8Gv3#~`=9di z)nkl0dE&qk2BsdJ9*6B48fJhm$%<LP=FrT*z%T=Jgn~CS3--&kNvz9@^3yVNQjwaK zb3?NIg&jp~FSBQFKfU<V7u`q6zYjd@<(f6)>qNB$ZcLr>%Wp4?T@$-Wwq<^6XH)-? zA7_uqr|!9&C%9^gliAIgyNl1wEq*`eX8ivBb?zdMD>4?bhYP<rW@@{8UHoFTyo56c zd}Z$#Wxg#FDo>d0p`5Ict<*WEv5>i3(&zg69|un@D^NZBWRm=p9SaudR61(B*PU+N z)t!6vwZXh{ndc1uOWbu0N_4A2{cV#Xw)dx3zjyKc<Pg?vB+%OR<ouqlNe2(D{O-Np z@QBQQk0fE!m0^F@I&jaoJ$%n9bkP^{<2`fjYK7YJCOwpS_0UIJGq>xNo~*C&UB9y% z+b_Om3)1+xYu)A5(<DB9yVO>p|1aK!`T37f)vY~YDanyypRJ-cOgOZlHSSB~gBcqP zIyIRui=`QyHYmJxEpo=;J*|p7(mT>08m*Jqk^hi!MbFB<Nhg)+MSr}GYkj4gRocx{ zJoj`)QRxAL`<5RI7cOIZxN3sr<$viFMPk3NOYd8{hbvxecB%Xf_P#ZSJU3oCPcVI{ z6(7BB{a0z{DH%M?Wp*kdE?bYpi<xE2<S2Zazcbb8W>xnW&$bJff6X*b@n7+>Qo-!> zyy$3E!z*36T#{k`Ki&ycFReKLqDHnU!?ff;NZa+q?&yy69sLqZ_owkQv~`r(oZXc% z?@(pc_h1vB`-@G~jBnO%@OdY!B;R0_$k42~V!nc)RIkspw~Dt|COmaMz@cj_wf2l$ z(nZ@N^$W7iU3wolbx0{q@k<u!3X;9`N=dJEhDfhfu+3+|iD_KBf*%^W_sAvm1kE{J z=cv^5^p5|Ln|bey&xqfjP-DDq=I;$sDSsFPyxBSKF#Nik!^FUl#D=ehN?M~oC>6QU zKQ}ZsSUOdtF3xV#$+X5GP63yeMJ5jq=VmTs&C+JgUR-k}Krm|mv?sn1Qf7slGgq6( z8QrUR?7B6%`nB%442cxCy_Y2G+qVB>KVDomea4hqX)}EM=6#>@*{1ql`T5Gv&+YC1 zH@WpZEM^tfVl$LHq#48USZUb}pVeFDa6T4_3on!m7umB=sU<QlhBvwI?s9|mk9_qX z&g$A;5bMg6zqzvgEYoaPGjE-pXI`)^E|*kg-v7<#-`Dc@cOo8i@r$fk@#3&A>-&{2 zj<0I^F1m)(MC|R914o?hoqOeW&?DEY_He-&>s@=^zc^;=Zoa*D&6V8DrAu`$|B_iM zA#FKx%1g<{1FDye=ALE}Pd*;hv7XE1?9<CZ3R9+@^V*lPoFl&DXn$nDjF7w=KbyA9 zJ<rmX#2tMs*7>|-SXg{v&gE0*j;xM3Egfz2RN$?PXzs}y(_9-pbn1R<+^#-!wdSOk z`0?kgaa}*FVj{zyZU3sGDWs@={JG|C<5cg%6F(azPbu=dq&usG<=5)Yd($TUn<lhJ zDR1`iwMwc<{zZF|AN>9OW#^u!7d+3}g#Y!4Wq+d;Z(Q8B#gr#8_ONzE=s{gxWr?dR zj>lgXIKH9jwv^q0b}qY19}MjTU#zm(7xcgMa#7csq>LL5UXD@Cea2i%+ITi`nVHVG z5meyr%y(N#=ZUGvjha)((t=wSFFf)>Z*lbr?m6qXhv(gD3q7+lebzIlcieN<PPd+Y za>g~qiB;Kq{(V*sn#5>Y_IJt6-bKmMn#a@qu2?37>Ytgr?q2%V#sfQ(duE!izQ+^L z9&TQ=^ykWhe%EiVVtT6*ep{7E|JtcAcF*5S>^W4ApLyBscJQv&=`)v3=%fp&<eXk~ zxHHs9d$wDncJ|t@9A9ipTf8j~e-k#DR5n|E^7ielY<)g^uggvq(fjyfA;$`}@Guqj z+>P4bwlsI&Uljdx<|Cb8pCwD5&Zs$QdThp{xcQpO>epk=*Gx^ndwlk#4cAv0{1iRZ zz3geB5R-2E?<b0ptB+it-*KVpSA}?;(!u;y1va0G&;6<Yt-7y^@t3<Si^2<UbBV~- z4+4IZdoQkH=l#MM)qXTzpgKcB?k8ujJ%e6*o`wDTxpk3?D}T6~y!(~7i|cQ}bbaAx zA5PfKk}8<t625f)m6zEo=4|Ot3p}~-_6H9?$;MiZ|4-)}{V_30<GDc%-}Aj2UN|u5 zevy{ZRNi6ni+u}o%eBn>S4x$Kyp#7YF3pjb+IxE0`-Kxdyd~FO_7%yQU1qwR`Qow_ z-@h37*(~uYUwk%oOMSP4$%8|abNS^S2`(0ws6D%4@ze{`dz5<iCA9iA%6=<Zx^Gs< zjf-!s7d_!{n=<#-k~bk5LU&f4J?+=J+gbKS<p+tyJXQOD@-^R0Jb(FcgY8@P7t#G} zN?s~E+NYQEU+`a@@%e=u+aBRV;4=n{-!v?dV_{&Jhj+mpY0JZc3sRFya}tYuGSf3k z&`)GP4H~&=^LJ$tbv(Me>GsUl%%qa1hg>cmaY$;q$h+D|?sP(?=kgVh9f>{ZTv>Zu zQZN3oO+WYa_ww`l{r(dgWpA827{;e%xx#41v=@434!E62(C3go=B4*b>6Jo0xA^^{ znu3@+)^gulT=D|r7mMb${xJ#Td&}7CVdwUS{jopCdWk2Tiv>^jB@6uVeW;yTY*+c7 z>wk<*j@R_5LFbvPm6i5%v?#st5xAx?zviqz+tw|L-n?I1OeC``WiK4hSkPiy`9ivP zmcXf#{x_S-pUu)pUMv}MA~yUEC%@XoFBQVd>RUo~L@Rr@J_)Wg{jt=_)jRN2hUqGA z+1+eeFRe7oZ>-|&+*f~wP51q)5C8SQrk(zOIO25LtW<;dH$^^v_*^#qgoI4*??1=g zB&(Obyk_1d)iW>YKthur8$;LRCv2M-mIP1uJgYr(y|KaTtqjF+-2tDh?7PI>K0eaW z>wlyg@og8=>bUC(cVDyRTym=bk1jR*DU>c^WMI(1d&j6JNkbu6BN;I+vNW8%BKW%K zzxBE=Z=M(DkG$bOV+m`}1l67fHOAAP2O<Qn+;GV8F(~<<V|)70rX?><GR}IpH{-IW z;@xWYpb5S{!MmJhzuWu$-pjbmTgCS#w}@|3c=mWs_50n=?H|vpK7X;f|4zBR)<rd~ zP?v<TWa}cWiH2(B29`&j7))07nYZeZpN;R)%O81I&p$c2IpW1lt$EGQwJPM^SK8_C zZ<ro`;)$zI+?gk;TGt*eHLZ}$UwJri-o6-D_PB%D<)O*KppBP%zGbPcPXsR(Eb2M= zI#lL3r`+AMQTHF*;`!a5o}cnb?fSD{-QM|WvH6LyDG#D&?(aQ$`{tGMD-Y&YOz$dx zY|C|T^`oji{s(_sipd9T6qFD7pcq!dKY6lFsn@~1Igi?B&I#+B6F6c0F$=Yjl80-W zeuv~7UeZ*|Ww+=-9b;x+YWtTJ7sanmZfoG+4(XY}^fm2RN1y7~H`fl&EIH-zlx5CI zmzo(rPQ5EJle=PERdR!a@72yD9v3X;aKCCVI(TG-oO#pTJ?otpSj{}~RqCUQmFk5{ zwE_E`x0@a9{gScaddIUbAvT$7_%EOPC8#{xXwu)6F6(Z494$Vaa`ay=(>iIPEhUo= z%-z>IC9OB)%!yacp2|CPC!UeK*;i>Y?YX0c%su(MyUGt<cpcZUxLT-ueY)Ifx6GQg z>%V@|RpR)pbfh%=fpB!Nb6SpP|I(yqRaR?PpP2B|NjtOr`_bYF&$hh0y05Y&GIFYF z-rU{!iPO8)<5Q<Ci4y;ENh~R~ROUhE&xn`Vs`9VT%zVu^ztq4_Xh-X&tC_d<Ok_+` z&0B2wT<i2XFYEU8rS&(&X8yhSa`Wefdb3Qw%(<8?>#rm#-r>{vc+KX`-%FPUTNdqE zT>8xK_h!NF4{Mwk$;(fDaX7D2BT0zeP-kL_Q2HkknF$`siy!Pca{NOf>--5nRP0nY zd@I`Q`G_&BRJ%$vX2K5>JLLy^Q>;8}1pOyf2+W^)qcc`$`-132?I-!v<{y48TI2Yr z`^Tgs(?5!Ku78v*6o1@YWnX8$XU*)B<pwGrW7X~_f2vipPx$1_qxoYZcqiukN9jWL z&!5H{{8XJBZ}`)+PI<$sGXdUz#P(1AVf#;Eqc}6yKaE1`O<Z!5ehB~55zx_2a?{z7 znqzW#ar%#(e@Yhu*F_k<T*I^6=B4QioBv(=4bR<w`O2@q^!bGVrPMd)UTGF<%$0rW z`+vd@_5A<h|8yVd<?7GvI#O@3g5UV%@p{&4Q?hUA*}7fRsBn2y|3zy-JV#^cQ?J|0 zqTYS!=4xE`DL6mOr=s-nG?u$3Jbr4-ZBEl$?Oq)FGQ~=I;pKB_mpp|$m+ROx`u1N^ zYWyHNea^-hCCMcv8}Du5o&G-LAj8&>ycemTMdnv>*YK-4%zEwl_l#+kk*80>M*ScG zkDz5N<$Q8W&Z|6l(B$?0-<<1n7GE%5lkTz8c-E5gqON-{4bH_>=~(6LJ^v(`dF7iW z>V?lIl!~-@O5F*5J&DyTY3t?i6>@432UG$Y?|#0zNc;DZV}*=5v09C(n_oTcsdi5@ zyZOF4^JItUnb>!;UtX5+3!DDRSkd=t*rp!l3Jt->la!RMJmrxtTf0SyN3WoIc@I0+ z<3#84@8%jU`|9d?UE^zH+O3)e5_zwmRF$mWHFJA<aoN`;O5yP#f}S%|B)+R?*F5}i z=wso82XV7`Z|EM%-DaM1=UbC8*VGGfuM<R>c%xf4ADlB+qjz)iuH)~5m(98LY35GD z%No-%V^`>XxUgyyQzPrTr)MK=jpuaC`dhN~#ARm_(HHYWpDw@t&M4Zc%3*f~ceJy= z#?jBSSPQr>7OVTb-uqga)y;h8`t-HZJNyqU5tx2GeQIvf!e^ytrtW|E!Om>OEvtyz z7N&`ANmn9Ni`?I^FT5g~yWH9@d|~RZ&>6obIw|m7{;xboTku!%fvMaQUZQJ`=bf(J z{_a&@N$I<LUbe5C-ia>pczn_5{&&gcrr{Q+LaRLg-@Jcj@z(Tn)rS3EI*aem5ah67 z)C(!FcHi%*y<_p_AAL;A<IX?2q82sBD)<qv%JqI*m;A+%9d*mD3&cO>?<nNhZ_&(E zA1ybv?(D?&!|Qi`D)_Z^l}*gQtCbpc>u0%N)qEYk;laH%4T}Z$Dd_#J3<-a>aGv|w zlZV#T-iW_()#H{{hxQU({>YYv-?nU6IMd?rl^_1efpS})2Zp;;7G(xICr+MRa#h?u zxIFg99T%;LPOtgWe;SP=Lar=ME)YACxuaX)%9ePpL$NIe1|dx=G#pLt1^@8rt>auY z>7S@#*j&eCK_x@=mgO9UA1(>ZQ#x{DjzD*}z)5ds9X+QWrO+F~Er*NBSRF%R8iMDP z%nRPdJk@4xO!XG?2M;DTyC3zqxPC^{hhEl)rE3%l7_Wx0&E2#xWdG+m-NIcHnWnye zx9h4CmqkX%mgZYk(q1+_RywNx0u=g}&ATcdaP;}@&A)VJv6gN5xFnZJs`hJ}OdPxF z%SoFv1UW4Cp1T}TC1ZMKz12av3eC#(dF6)HKGmX|k8fLjX4+Qow9~h<XRggye?4Ya zw#(#MGM#=8W|eIZTN>J%v1-|^;{IprY|CU;JzHs;rns4%KcV^Aw6dBY_x`)Rw=T6X z*j(znK1JUqQRA#}<MGy6dwhd?@)v*f;t$JwS2Cw<t<9GR=l$%AQN5Qo^tR6{G3hsb zQvbo`S{ZvrW$c05Q;t`0oqf!lUYN_ORuH?QQs_E=#cWI6$j26DEn7TuWFDwI)_FMP zdsbY!Y~po64bScU%14T1nML@@XB~2EsqqUo>9~^h_3;kHCts^R@A$}4Hi^@`b(&Ao zWd`?}&C18tTu$?z%f2SLKu+TLw1CqpyH1GZpWe$+J-sJcJNxD_?YMdOWU{`Q-S%vS zY~Wk^JAx^kgMq<B1Yft=lBCv52<k}CRLEqR%;ZZZy1Y+ITZ)Surd7<@!RX|)DrBVs z-(Jg?NkMmZ6#1OqUig6dhek^_YiNPPmxQzLGRn$q<>%+W=P2lD7TB%$&FPJCiR#VY zP8TPnEc9+Wtn$|XNKC=T4Kb7EeNucHHYMod$*--K!|lJipOpXfrBQL6c+Y<IN3X;$ z>a99B=gi_u+-(Y;?mV)~BMW;|wv=?qR4$MA@#A^!883bEsLvDsBgTo{>3-|4%@6cx zRmoc+Gg)w^QeCiy_px~4lT(k+{Qc^d8qf0o^FKQ3YPZev_uQHCLt*xg9tpkcv2{zQ znr&aYIxT7^W2~8^gxMW#hAmQhS~*O7vpH<Hy|P>N+ssOC`-QI($+wgFt<N#WgT^Zq zJS<v-7#SFp@y@8(k{9rZrsLd5&YF;?g8%EERGd70T21HXlf44d1e|UtCo)?;&<*2d zF)fO8Fo^J;el~4$+D+cw(oMNnZ#idWuie^i9#x$XeS1|a?~Jgu+b-O?^?O_UUjOLZ zw{}lGw<r0gjwgqT{j=HcXa7w5cmGVyaqjbb{@i%1;WRrUvTyZ=D$eVtW;DM}iRm~0 zaDvz8p2p*=6_b7L%$~WY^<?jwq6KqKM5o?q+3s1fyJz-CKF;kYK0KZ)lsEO^k=;9r zXZI-FJNv}e=iccjwLW?2MeRM-h2ppO%%1vw<$=9t?)Eerttyl+{=WIt@0ryNC)s!W zc6?@cgw5{E69MUp4NQD@bRR0`yjU#yLqaa;=JA_P)K6V(^cRb*|MbN3ncTDw9v43| zbm=V+oarX_G_=m^P@?4O0vD%g%lnKiPd%B@ay(^DKWEv$OwRceFE*=t&#w?X#{d0Y z`X>hM`fYP|ET3T$+jsuqXPK_YLVhQ1H0YoBp)@a%CqC&@s^s}c+BPq(IO8X8oVxhG z&b~OmJHbBl(r%h-eekX6KDk}B#{JmTAM0A)d;ZwhBF}MRW`xZqRiR#0VW!XKF|xPB zxmu1HHD;*nRNtT~bgo6{VnvGU`>aN;Fxd^IrzibZT6wUd$j9N0$ci2}quZZ+bU#$2 zn}qE#vlLjE`SRrDJM$#dDz|f6=-6Az^pzZJknzqx=cxUuf-{Eo<s2#PZ*Nk(mp(r# zwDHVOro!`WDOyq-y)B2FCmwhgpk^l1@#egQL{hcWMGpm0Pac<`g?B%CJXjQABkZ|$ z9^+FUrNjA_jW=h>__k*LjD7y#)&@b_)WwsPYOlFzsHG(N7MU1Mh`XpAAnNDpB<aPh zeM~5@ao--FIcZ0)M9=m~IdL&7f8jFCKAtay{WWKm<82?F$<R1A(`YZ(npuX|jl=qL z4y9&u#WhcGn7mL<eX2veja+BjBiofPUd;1Q+MHK!VKiysr2vDb=PG{!4)%YT({z_Z zlOwsI{W4dZK(N6XmBuAa@}F<`f7sJ9U+afto!*7IZI07EaI@||vYus2=JiDnuK(zD zi1kyP-sqjw=`(BN->`%4KUA~UAK>QtcjAe^Ph85UbhY|}+(Q3WJy8AQd(e(Y>xcC} z#fS5`{<YR?|KR_(`a%7gA4b}9RQwt`7p$9cIA)?om`kTd=!AnS4qS><n|FcJQz(_| z*oJt)r%qumtpOr|nlfE0g!mZK?;Tp>`gu*3>lsnM#sh1Tq$D|Jq_aHtI<xq2YLQJf z8+&r+iESYo6XkrCecKS!s}!?EF0k8{>2&(*qb4aoR|dCenKT~DoP7PxY?-ACE(9hS zd&Mg`KJ0A2^pZo}|BCU<^&M;*9R%|>ItX!#UeplNUKFV#n4!_}W!A-m2k#tvxKejg z#43*d51TmIXBT)JI^O-+dy(n=2F7=rR6>3EW+>e{V&ux=vRh@Ec2et$0GH)21a=f` zW1QKNuKTiBFyiA&p$N<0x``?ic7|prNm|9G*>6rSx0=k=YMed!W6G+2E`8HUJ?$0F z(%)FD&M~$Y8t2%r7QJDy=BMh+Cm9tTdBXc#S9mTzRI<$SY;yLLb*B!Lt(u}Dzx8Ts z@{_rKE{xNcpSOD6)13YJ-D*!C;XA?8?qt|Zxn(6HmH7N&g^^=!Z~Cd9#V3C~X>NJ< z?GJb5rU_{lwv`9W+uVAh-5&0~b}y8v+i&+JZnJw?uamgiA5GNm;rRZn_e=Dj0F^1b zl=|Oqm*dZA{dCG${j29Yi>=3c7xJ*%?lnK^`2EW!?zlYuSdQ83y`MUk81GqNv%&33 z*zK|+<v(E$I5WGVe);6{SGi4jzJ+z$*(Ei3N_>@)x~c9t2O^R!gt})J?otuz=KEOH zx%|VF3)XGj9lJ&5&ia$_RrONJg!`=BwtM%c`$c%pDt6Y*7H;_3`dVvFki^x@?yj|! z=SwCVWXtF=ZM`-(ueysT!ZYiW$gep{Tc7TH&J#H+=2cir<;LW+3|INNH=V-*RQ=`u z8r)h{VC1;o<#p=TvegHkF1Kw`v(HWY`DxK)llLD~6tvGLlxzJ^J63c`_`gKWv2(jV zzIrRY;JTkqaqoc>I`gNp?ns;aQ`0DRi~6(;t5!@;&PvX)3bx%i>4yLRj9ChAaxW{* ze^XlfWLD{K&05pf*T24hb#v3Y^y|;M%f9B`+Lm{E*V@}E7kwvqwBF;od@xVVaOt9q z6qDjty0hy0=GhrNO^klE@znA9wi)qrxO#bx9(sA&c+Yy-w4Jw`nP&T~?)2RLp68*x z>c+K_{ZA@`d5XJywye{P=PQ}Px5O!V@~VmVxHs!v&kTMe(Q(9h;hx)19vwQgK|n-m zb31pxQT3lM?jej7oqlb-8(S(Bzdrr-x5nw5OrdeW=kyiwI)_5Pywu;o?K<OdywVq2 z`*wTXo@x8^R;*R2WNCI;d}X$`?%w@@kF0q<ZurQ~a8O=;+K$d;XBTd}R?j3VJma!` z-y-#zNRi)v+!f?Depx^7QcP!VUPak6ubkq-H!}~#ymX#6!>&W8aBZrena>&frl8wL zIKDmGsgoExzg}k2dfjfL_-wJKcHxC$o7T>Ex^<~M%FMg=pN>|JWo<`9(bOe8o{An` zfnrnr4<+iC#Ov{uihbbfa~2ErUvw*MQNM6-=N^j-ZqE7>m+zF0_IH@susOab`JS89 z%9}0`u~mi_qxMe8m>cI7ay50)taSowughj_jIvpCYL$(QUDwa5tx>C{@vTnHnt8K4 zC`GEtG$qe*L)dCt#>my2yZ90(hE?<AH7@X8eK96dXAigPqr_)hXD!ZnlEiT>voumC zXmxx4qL<V1rdD@{F28v><`tv!oGY(mXC2h@d&PUlZ1vYAo1aX}GyfiSg>Ccp3s3D5 zx))b1&VI-kEpv7D6}PP~HKwu6HWgaU8(G1z-F!#O<vR6MTU3ufP~M>1u8>)Ja2n^2 z-&@nxE-jT=dvNJ3q1=~-Th2OOSX}8R@jBy~sjhV!gYT!Tdxta1_4e~mJ+rnzZ@;{$ z@QWAaWtZ}&Z_bvv>$u+kbIL}e7c&p6syn;5GIo`>bi3RaUxgd~j_dq_CUj0&c~0f% zjE+TC$2MBMxc(<=Yt;OZxmnJW8iKbM`s7NTeq?i2Jm;#$m-Rcii`5J2_CLG)hvg@e zRPNT*52f~8)0&xmuwIqrThWKJlWuyn?mAI;+;K-|<e8q+`Mnx-$xq_q^s-}5NmX%n zmv*LB?F^sV_sD6llWySYnJecw_}i~E-ClG@`^u@pHJo9Yp=MLA-)xP%#mQ>5RZh=& z-O-)1Z}}}aweFm6`x&p?<a-($k`^EE+9I@hh1b@kwI<;qN3xHG1<riU<uxm1ZL(nT zu}iPEBxSFeWLaIPlYi~>j?9ax$@A7pOfF%6ZTkA^oh>i?lJ~_W`&`S`v^U+86<WGt z>zOOTvra8qHR+nPMtD(3>5|gzw;t@6D>JFcIV9hrg=_0Vw(NG#qq$r%tE^Y;j(lLo zGKX{ey&I=yPda^VMc&@X+@QN`*B6<s?%g7MMQp3)%H5VvLX5p;ya{HsJe1<6`dFr_ zUv*1+=ru!?drg_VTQu(kPWw?*%#&Mv<NRSalb(nP8|Jk~yKeAhnckV;z;e4+cI%we zHM06|!=C9Sy*n0`w)XBOr)bCBPZhou?S7<?6!Sl1i#WUW7QVB^64QHDUQJB<bu1)( z#_Bu5Z%n>t?rm%;<=Gjv_?l7Ixoz%+E3eHw`b+lMv9}kjZdW`m%RIeRulVt{%sB3A zwr3<a<YlLBW4N|eY|TZ_4SUpdwkpb`*|nd^R*ue5NH*Qt#&kB(ROCF<Bcrp^n_pP7 zUNraau(K|*6Q2Kyul=lYl8{T7aYzVz>UE9oo6bBR5|bTjCRj2*a(v99)le~+^<$f- zz~9QiFaB;Xw+C*M(ufQWedF-!ykMTSY%}YHcP_1rXDuw$HY~g^VcO<(Y~#elPnjhm zvzz8dsrTofGuW#$`KWfK;o}=ZZ)P0`OWMY|+qGcnwKAEjOKvSIO)cDc%}x1qpYp1; zHjd#Zjb4?m=5^l?`?^f#U|-nU=-1~Sb;;h5J63k<g4Dys+h=aOl)=X5!kaqn-G(LB zzAyc}cQwz^HJ-~_)W`JZM50gV-OCnSXI^L+EM462a>ZYZHXrx5mD;ne1^@1ucWe2V zD|r>O4oscn)wf&lTj3t99bVC?_Z9pF)-GS3&L5l7-~9jd^VN5{TnoCEJ^BRc^?A$h zs1@R2U|1~8zz~3Q34lFmosZI@q|%(!ykz860KF5=`W<o*X+6&o#rjkDzv%VUM76^7 zJBo^mh7%eLPvvo$Z;gn0BXT9Y7<3l$vD==eLY;*dYvxuzpJQzKUVeT4i3cL4-0fn0 zIx^fLrbn-DJ~8vB2+vCQb>eJH>ff$LoShotzp+Gf&Ivi*WYHaVb4~SMnd=l!Kbckb zmw#@<(N%UAJrt6!-)0iEGoP|7%%$JhtZJv}>}QkC&UI)^pL=u3>AvDiOqTxNllA59 zEpKCPT(mrT;v?=l^)Duci~f0?x%KwRL(#w1M%m`m*G=--J7cE*pMB1ozbOb#tJon? zE$6l_B>3p{C5w~ZJ6<ZziTbE^N>wt@V3CKV-AQ>}we-eKnHQd4OSvvtT+h_||MpfJ z`(-bTz8qd5`{BOHmq-D&Y$hh{KdB5NoBx!pVLD?P(f0a=!5PK;9WysgIM=NqIW0JB zLu$m)Z4doU-7VSIUVFH?<$yY<>nQ)|@tZ(K28LR^T}RUPKZT&i9#RJ~EH_v>RHSa& zo}5iO2@6@3SXrYv8GWKx=Q>BT24!V6a&<JUpZ!E=8}IIta^@}j!hWllxb6See6GWo zb<Nzs{g#jWi)_+w@+z_%Q8Rx2?B4U8&*%M~Q_TP8@A>@w$_<V-As1R-2bMh2HIp<m zzp>}+Gqu@;X2M)*h2F=kxt1BMO<;SkwZ$g7|GUBI8*`XgKlA8lWE}p@QzLM+{YS^y z<27g0jZBWM+kEoWiIXR^Uo=eEsIgcf+0*HQn3BHZDUX1jOP^BCT?}j0Rh)G-$1tsP zcQMN{?Ps5bl(sFl-l<xCzlo*v;-!q}!b4Yb6%}(joARWDtn%(%3){M6+cOpJLot4S zoJo?ci!7$gDcwrFdtvTsp<R#KKm1D5JQ8T^U*|7->~zYdm#wU6+eKQ8gEwtjy2zj? z=~VYp<9p>9CSSK?AJLJl{4En3w(RDX)!qvC+)tTYs9EGRC;7~`FB%sOzdwsf+r{Qo zq`AvBR;(vOC310I|69SeN7spN&G}u(@>p_TOmnPg$6osh2{vc1)C#x;o&R@gA<N@+ z3BFr)n9o=?N7bZ#k-?`!mwKC8d|JQ#+7u?>d75==PM}J8#o}cTJ4(}6te>@$xx1z< z-C66`!qpXmceSc+>}d(s^4nY~xmW8^&aVj*3Zsw8il`ppJ2Sf{Rg|qna#@$?ozOzD z^pps#91AV4h|rB~rJ~;p;*T!>;dAV{*1iY9`%^xP$_1ppDYf6TV}*3mu}eJF7q^`F ze?4Nl!H(%BiBh{ZYU#Ky|2=)@^=rjRM+=3^Z*Jl8%ym^>I63m{#rG<nvua;;))bjP z-)?eTaGIg&C!LGtLhEEsw$E<tI`#19QNg<l=g8LnFSu5=gURjeqRdo{{%c*4SAJ-% zv*(;X&r)prqm`$2Wu<Klxw7V^YHn-B!kCLD88+|sUr~B^^5mP`q)W_uKm5;sJXgNx zOi-Uy?0Z4&isyp-mxX7<lx!6+TWcC_CSabzwW{zvmwoBIgy0k3>P^jFF<mr@K6EDW zNqTcc+0@+&;};0+`o8txs;cGQTi@;Z_i56J>glgL!?gpPCuQuMIBEH*%cmv^uB`m8 z^)%D>y!DjjA0}Pk_Ez!K-Z?8~p-7?PuBDc~KgC1O+8lQ%5?A}qYi)kwgYeV3w4;|_ z`lLO4p%vC0^jfUl#UWSp?w8}cxP{^xcnWqi*H`VCIBTBuyl-w<weKXpyJa<`%+9R0 zXFI`n>5a|b{{hG695Gwsk|12#`9O`S^O!Ho&6Wz?Gj4ug@|8YyzwWf%^Qdx$DnD1R zdEbMFDvRg#Y-5+q<2SBTI@BV3@s;r;i^p>>x-E7|u6<;v6y5QUGxf0YTwAV}GI3u$ zj@txvc$C^#e)u`7;6Qu);n%4<*72~{e|x}f`fvh&{E?+n=ML}t9O4`C?cu_rWl<+B z)4e=%E{bZG?&{GtwUk}5?flLv1N8^R_YTZX^=sH?w|sig)8aP%XDv17INbQHwBHn8 zVlPgaU(A~<_nhBkm+80U|6*4<5AN^S(c1RW{l!B=QJI=1H_pe*8y|?x+UM+XYr%Zx z{f{gk$$PWD{4O?Y{({ygd`F%73;(cR`CRd+`q`xZYatO{C+AGhzqlpZUh}8st!LXW z&g<InIzsCc$HI^=npV$tGFhCB(TMS$vt@=%_YtR!1qIUT<{DpqS2VO&%*+3*4=PA? zH*HvRgN1=%H8-Rh<O1KnguducgV<^?HANqHWlHoAYHEtUV^VQRQDSmQP-+U~u;!x@ zoFySwzur4D|L5eB>7EG<iky9GHVcVMsOShCGMnTxK|vscd;S@Jqe*9ajD;C*XRW@X zcWr5w_!Yf?TUVCm=6E`}T+F+$t7P-msNE~>ZY{en{&MgC{r29U6mQ&mZ29y3z3=Zn zz1#i%ZtABO+Wa!?(k&aWvcA2bfB5fH19`jSho8r8;O+}?kmLzDpd|4mv7>#l4bSNh z4cuA}A}kASPuy_sk$wI!QBH2+LvFnlO?C5XHZtvFiJ$gRThD?~J=TDA->K8_k89<g zJ~R}!;q(7+>w4ww{0|>|uiZL-c)Qkv+aFZ;?-w2{f2jHFw_LKn@i!jh`uQ8vC4Vy} z+dp~eZu2Li?Rmw|O1ZcP4>jfHm0etCpSZd1Rnz=~=d~Y*fAE&9JDOfSQC;8g?RC)) zMwjE-)Kh=(UaouHbpPP{n;KC+n}z?qXkz;zto_@V|F6xTR`Va){Pm9?zR!6nZ1m?a z>+6T}^?r!|nce=pvZAqlc}2yn$o7~ITyvCo8Vy|JPNi(wnZW(UI#8*jOispc%G?(z zTkf>#tx*tNVPNKW?4yyNL%|!buWFAYTTc2;Umd=x^wqqWyKZZ3m#bOt-m1zGWOmu_ zidOTj+1@4BbJdEpoK32&CVL4NItgx!^c7yJbGtbp_`-}Af!14hg>6;8yVi91qbT#w zTZH|;ddxc(Qm&P}Nn=T1^lZ-~+qadJC?ssjSm_(D_59^D7n|#@`x0vAPJ8j@l%hqo z&`DpD`%w<JJ8W;>-aPf=n#S#%cQ%?#^m#H(`9{sZvn4Owj2IHvoj;|n%y;@vcCGJ9 zpY*x2!fx;0vMV-AZ{u#i+q1Q;!rZ)%ZS4_TpRFQR8oqs7V0U!pt$+J7q%NO}j?aEO z?R(j>?Cl1xzFoh&BIC*-oz8d`rz7Dm*<LBd>91eU3s?LRwZri1|2yX|Ifw3jxntI4 zv(APdHR~Xe(7920OFcA$YwBJvd8D-LT1ft~xykvPPKM5kIVR|T(5mHDQmWX_B%9Yd zGkOe?w>V@nP4Zl1Iq}Xa_gWMC<t7hRd{jj3`ez1<95NUEbk@Sq^kisKp4yr<W=R{* z#;h?Y6Z*L_<62sdkamiup{cOw=ez}LR;L#I=Hgs6TPFJYtkWu!=6e5e_14|3r(S+3 zP+hF^=oPtZPrm)!-apN4hRd4OTTI$xHr3vDTWdVgOX<vK*R|_5ojANUHY-Z_`vxt? z-!m3%`oN%C9dBaw%Fk@o%{kKquW$4^yOLwxMf2&;xuTyvx%~NaXrAe|={14-(&93W z!=`)-sk*;x%E2Ck%jQ96r}-!?SC?^?-Cvd7zbo4KNP6Vl^cD`z4{F+1Q)CiPuHa<} zFX7P*tW6I~smM4wV_KhMcmn?$*Bu}BpV-6Y*D|GPs>uP<f~`!yAIfs=;l8)_K=lJQ z*1TqE(H*jROTx{K)?|jS30lBxB|4{NvS>&1GKWc~OB*M-r#dFgo%ME+%VGy{m6Q@~ z3)bbAczaJV*uD%2@)k?wl3cF&;^50Y;ai#RURa#KD;>kFDVeTO!B-`^L#9l-K=#d3 z<(SnEc3K1<i{v_|cDs=8+|<H(Oy-{**Cjm8OVl}hL;b;It`y1F$vVd)^!dX#{S93_ ze;L#J)Q7VxZZz9ndpF&1L4ts@QJd(T{?aR2y)|No-UrUpEMRyS@WI9={vh`UCrR-c z>vX$fSl_kmPKjBOz#@L}vd)FYOS1C4^VcmseB$)#@7uCp&XJq7)v)MZ+$zy5qvvN| zao(JLaovlnFM5wW-+WM9bBDxh(U>N0(H-pXLLV4^h-BqEnAr7Y&qe8=&Xm5J(@*Y* zIoMs;+QZAW?uZ+!9UHr7OzUdVnC8_h)p|^7QuE!}+3z3eeReFaPfvemmhQU8jY(q8 zCEx4v%biYF1@GONqqMHFICj?cjJUlk`PRQPXVpLW)yPcqMvozDbU|~|^hd|SKc15= zOD&e%YU}=f&ykaEYO2l}83pqvdTXfUX4#xuSyFQDYyM)Uz#!w5r+vOZliIb?B=o1w zsg>&Q&z04kaVyPMoo%Z8)_rn~zs>B2+J4r`J2ju4`8Kz4kL|A9=#cIA_8r$q>C+25 zXtVgx>VW#yw~eJjtNSd96qYtkN_xH3t99wqYmWOa`M=k+v(3He`)|?n6}xk4GWieh zw-*Y(I5Br_jQQQ4&C{oCf4Thrj8|MU)8>?~yJ{Qxa(2*$Lp1_zrsr5x{ihm51{N>g z?0WQ<kTK_!HJ1!E&K0@t^?O-YG<{a@OP(v86U1e9Z>?Qh^WfAZ-;7MpldCUPb_E}_ z>yrN!8oDmc=#`zGI0s|5v%BuJ68@cQrMRNX18cHp>KFz+H@LcsW%6CGdA|PojT^H{ z3;i>`a|-KdtL!{iQNOg5XJKWCs?1&W=fPKIqzWopxGjsA9e6pm^V^%$C-t9dm3Avj z-QJSy?ELtbtXt-{c^4PtzFFqAdBXElL9zMkOf9;nEm@H7>l}R9D|WuKZ!v$nfYf4l zopXo0zsSAi2}##WUDH!@>gTtO-+G<}RYz9!_QrPR8C_a`Ji}zyU!7l?;rlK=ue*_c zDtEcj!&71tV=6DDy^OiR`nDl}?Xkn7b<7P4UlpyEh&i`k5qUA8icK~sdC}o54dEO! z1P!zk{0_u1uD`NyzCqTejO(=~t5rH!-Zm;8_{~^y%(h^v!g)sZ8yr<LWDdA5(CLt{ zVKV!*<buKtZl!!NrPZw`l44aPWZ2kk?<Y?9deQT-=Y-ta0Kd(jCe7@QbL~8}onxxD z$5NMq#)U>D+io3Fy>(A(ORUQ+85U=!=o`v&Jv)!bEqa=@@Thmx92Rx)Ej!-kwY%#* z+NXBjR$<3`KAGk&vrLXDj1uBDjHQjrEbNJYrd{wXkldHWC#@lC_-vw|Q)}UcDop{Y z22RH9wG3)(clsDtsHBGGIvZp%s8v4^Hkda>(1_=qk%H{j;|X5TOW!VCY!F&?;cD9K z7dabms@xXv>1I8|{2=k})Q1-YXZXc`Rk(72PcD-oi@DigalwP_oyuoKrW?4*NK8DE z^TqSYvtq74`Qm>zx6WQJDwD#s!Mj^!o$T$U&qZRgitPRNJY|u;7;D86cX)BvhZj4e zPvja;th&<bc-!EN7IW2}uYN_vt;c76-`qF5FRbFzuF7A#YJBcFd`woa@NL+(QnuwL zvw{19V)lf%hL4<2PC0(yZMZ+jt64yzVZj2)gkOG|`%E0He@$c0$~-AQy^Qa|VRIIq z0AHKaOr|Qb6PfbjcwWUM9yWM#Kk%n^>5G#|w+v_8ciVRTV!2%H^ULK21!8XKtE_7; z@AJ|x(N>#TH#u^Gt=i1GwUHCDeU1L+2|hX5^hP9opMSxf5-YxwPj>t)k-6;K7wvaE zFt=!r{`tV1XEKv(R;yOd^W1lKlFdbx`+1)0OisSvuJYUW6T8ky$H{*jy^Bt$)Ss9n zV|Mb(V*d%VSLS`R&V7)vAR{_}?d(F~1pcp|bNLS)ijcq3)~?tjQr-PZ_0;CW1%dNA zHM#}gS$vh574B^>+WKm@hvD+3=!mZdSCmaA>V)1*WAYZ1Yf3eYc6rt8nYevR{Gkaq zQX{iHGHL^FT)4yDyKoP0S%0m>wBQbFo4&{F2juPi3e+=KPq*FF`|r^4{zFIQW?s*A zxuk9w{G2)Q@+JPm?k!7sMb^Z;6AQb~`FM4&Z@5fb;qe6v*JeExFtJ<Hep_M9E@mx@ zytahW{Si^gtA1z1#k#EE4w0{zYW0GB?S+SmymM9_XI-Va=6VpHR7<JaZN(ou5{fT> z{rGkoJCE;0rqhWBgZ!(0v^_6o2s$}m?#k!us%MWU)Xu)i#^V^QBVxyOwkqs&e(1^n zQv|A<wusI@b((LMM0{AW`i?A%s9o<bGpfoYtEv26qpHn4=`+vC%C;wa@;;Z=alI3p zbbi8|?gzq*tJn;^8c$1PF0|Pm6TdK@d8wUJz`bOy+Uc*j8$0Hf{^oya_&)yFOydln zrqf?}UOun5Svg@<bEo%54pHrA4<ZCrnAIoE6?)=!J20cyB1^eQUS~z8#qWf&18+-$ z3vY+Szblhj@F`f%hHHA@<Autzzgtgyap__3`FGPV>h6Bq?r)p+>`C>5xW_Xp_6D+j z)GC|sU*XKkbGJ)4mVLBrO7ZcXn5tM8c07T5@1nJ#xy>7T^Gd3(N^`7CeA3&(b7=OD zs~>egw{ART8T;mi*WH(~)<4hv^p&`NZo6Ff4aqGoGI_Fz_uW!f-JA6AT1Rj>|MQp4 z8&2r<uLy2Wn08xn(-+4Xugr|MMK0z$)VSx5;@%U+VjG{ge(DyAGzj|b_$tcnnyXRX z7qwuwsmD4lzi|4&^kU=1UJHo}TzrT4>~?>=bNZp(k1Z8d+nd&GSG(SACAoNg>ptEu zv0kN{;*yxY?lSxp_2RaG5KED)xqJ32Sr5sR2bV8wFN$jjoPGOb!mg0BvKP-)S%z$i zI=y<;zl;(`xfdSG{a)m|IsN08O#Tnvw^3vCi}N}U1B0nNqz{IDHxkiDAtUvkK+8~4 z;9aP*;hYuGM+N`MS6#aNv8FoLK52VP!HG$|-Weei4*I^Ca^%4gwL+oOjmNsa=5(Hz zq<yl*f&bPn^)HL2m~COTULvY{fsLcgNx@c8cQ1cc{Fi<2ci#^$e<nLgX12<*4_m)2 zzj<?ReR_IYdD?f|fA8D-4mF1TIo<qq$Fc6bH)%z>lWl$0B^TLFo?gZI$>>?!xd-6| z-`U>nn{;yZj6JhXE)idUFgx;>6@S>{uQuP<p4~g~#O>X^BX?#?d`i>5*R=i9joURl zX70XQVa=WQ@SXLJ>eb@!kL;dt`}Bjoa*y(oKjo>tPy7_8w%vGV^GT7(nPD6HpWi!~ zvcKtjWue@?^QS(?-D%}7_}+YH@9dq`Gwz($uIV`0zO%aFWG&ab?@B%FGBcQ2yH_+z z7`zH&W#9Ycbn~7^JjI*2_$oJwwMYJ$AnyKQLzBCROy~ze&T}zJE7MhDE=)exv(5GR z;=_e|bJI<x-?+Lges*^EyK`Grk1bkU747DK^h=Li_Uq-Gvx{H$+|ygAw5;DneUfFe zPT^cV$5+z=Y*#(MCZ}KUW45PC`O@Sog|TxyREuPfy$Iuc{-b(bU!1UM*zG0!&ljz{ zxa3}5pYMdmT<JxR-}1yfw@)?R%^`Gm<`wgo8;_dg{?9j=d*$5h`I&EzcE-L;vD)0Y zXhw{}Eg4y9|5r;lRl42%WN*G|ceUW=6gw`VzQ6Vn+rP*}99cMFf64~+iD&1&S}7TQ z=t%k_hb8mReigf$JypwDu}moJ=j{1mHv>0+zS83N_l3yT4VI#ZC2eP2_72(Ee))0r zHMinG&eea9@7}IE`Gn+iy;)~p&iwXl@(ERq7!KalwcTMmSf!qwP1&rX^SQiyzQA;& z!ZRDwIMe4{DJY6Pd5hcR*W0yG3+6X&m6`Z&i{+)A%Z+Es-E;lk8fB$(Q24Y<xwH{y z^t5fV$JVgAX9`Z%=FVQ@d30AsC1>>C+w<RU-4$GW@`ZtXZ+H9TV{4ZtF`KQr(Q?-3 z*UX&6O;b;rsWEFQNu)U4dHN!7qp)?vhPfxF`m9TO8Omk1>QVBK9bF=2D}S)O{;MJv z`cb0z_>7va-SgA(L<(8^SO4I#TkUkbqv`z0A2$0IJj$9k=g5pM{YTzh`_??t{;{e{ z{e!7!{PUIf6F&K>-B0?It9C!}6J$B=k<dR3{;Pf{&YM#3Z_?pYaeqCITEs1Sa9pdd zY5uAol6C8p+Shc&FYrIAKl4x5$@Me;w4Kbq=$`&zhwQ^8FXu=|UNpYDQbzlq>|QM~ zH39Fs^^f>}Ebg*@cwXof_l$idhvxhg7p*^fU*u2hQTq@6oZ|CVC1;nV70-OJVWO(x zuB;cmTdu4;wkFiO^NE%1()2|k-P3k3*Qj2S{2G<o{Az8>lS`jAY$*ACS^Lzbty7e@ z{A-8|OQ|=v|1oE`@Wz-qOR9Y`k4)M1s4B_C@2HnfRHe#~Gnej&`m1QRonGno@%}gA zDTh>#p4R)Gd@*)c=Ebg~uii9u#rf$?xl<%G?{U1r$}eJ51Z+AZUmIQgSdnD0yY-#t zD(lWSeeZhzTK~FM61(s49;<T^0q4BMC357Jyz&k!U8WvnsCA}vDVykesc)u<F`~?_ zW=_Gu!pX<_Qhn``KL3f`aQ2S%)Ssm@U2+zbr?l`%mS2zl9X`R8Cvs^igZZ-Emy#a~ zTXN-0tz9Z6Gr8a*)BH6Y^PMvFUhOXN_4i-CaQztz`P=L>jna-bEs#Dx;p@c|y@^t9 z`!C;I6dWqnpJrWZd-U*}m0t{vGWG>pea*@HTruhXQpNhumv<(g(XLsbZktmyk!ic) zL@A8|L1XPT4xjCAH9r0Gu=-a1?<co1-xj=m^m}#C!OO;xQl3kKg_zW<3#Xhb{dLxK z)!8+#yZPQPnw7rvktny>>WF!_dzZYK8DHlAF!f4_Q$vf?Wr6A&TFhttW7+zm9pn7s zFW#L{AnCWbephqv`{Z3aR_3;_?|q^CQuNB|CDZ;t`K@?2xu|A)^d+sV$ag$v9&P!} z^{CD}#(DnzFN}Pu0y#5V7jxX$q~V~)v@NP3>eb0ByErdcai<GzJnLj~!1aH_DGuLj zb2b-<1~QAS63qLhUhXrcfNT1)Gfo>PPGs8Dc_%$3R8TYX6we*k7YkTz=Qqe@o!1L| zHLq2DfhPYUX$y|`hCi4ZC4a1l-jezI(Y}?gN2dC}jgAy7z1mr;tuK|Me16je-p><7 zKj%*Qkn|>E!@(zK8NDA0ESk3CmW6$Twt!Ay;d7<S{0l!dEUlH;c<9^g%bCB^14Oql zeyQ5baDC!VuB|H_J}9h84=C<Dcwv2+M_=In=HE$drHVHnya><tc;$5N*fPyEB2S)* zG&Q;@o?oE&=2FZwrnYNFciwp$U*KbD+H7%mTl2grt-S{4SDs3YxK<%?T4qCFC)2Bv zLm%3vu}?ESx1cb2K`EQ>S~kCFKP0mryj0D4X!@FA%FL)}{>PR^Z)_K+ujed|;golL z_+oKv)w;(5=XSKrcq*-#lHT^TL2dR#PD|cv9j&KjQj?BqE}0ReR@QK*sl4>4oz;db zEiViLs;Aww)qWzx#eezzn}wNH(PsL`ow^E)Tk4)iC{0$M7_D*0l6QRp_jNn3jE6jx zEkd8T!cVB*QM?-Q>5hfq|9}-fQzXmYIhU?Z&HE}_;9I3~cuHCuYn#*4MRzvbZIRUD zX#1(M@PxB#?Up@jFMg?+wW$8Wj1cP(qcg>Oix1_V*($bh=QpFYjx#$KP5n73ao*~4 zoa;Xvd9pB|HK4VBrk7@ns#c!+)D?SVSFI43`mz0K!PLo%9Y5`u{P^G*0p4(HC)2(F z-By<;g~F~Y^!i`_<mj+c<Wqj(up@4DJx|x1_BR}+9EvrUE&8Rt`pxlHIB#-p!Le#} zleJyH4cm^mxYl@>e0d(YEVO&pNvTe&MGwt(e7c~Pz4X}LfUUnCC~kT3&~V1JlUAL} zw0}QWQ*U*#y7T+_rZ;W#??x1|Ja=tz|8YZh?Wu<k%EWRX?rI2gZ+~CeUhpsOR??@o z7|rvK^NN=0^xx(QKjpIXrPo}I^v~5R6+d5}+;Aq|nRllAwO4Y<pOYAm1)pkpee=|U zu>7b@gSFf2*531&U=tSkFLuLp_4(Ppc^uax#U$rlyE*Tg<h*H~ElU1hPZo9hDEj|? z>*IZUrrO&@C2JOxu|L1o=FmMeQua)QX<K_#SL9O@7u}<CicDu}9_8G$$oa%lN!8gu zw?()`?%W>Xw)4%J<y(r)J|-4_P82edSGV$&Q*7T;nUlr!^V18Hq^H7h#@|*glY1=i z)AZJ{WfHQ{mTGrCD(;NekWs$cH!<r-htMhYIlrIF&HUokQu=oO?&(ujSH@gBA}y_^ zo4Ukx>y{Z0<Ig<|xBT;T*`=cB%u2%#OTJw63|+Kx$rs1p^A_|!JhU`B?3@<YpHsbS zk7o!ouhli)aiA@2!q#sYEqW~X79V^NSjn}zneWi~2R~I)U6=h^HR;zw5u=q{z6;$f zIx7!~+&$~)ymRqk!9^<EEUkNr*u<r*eEumV*UfomHT&CP)j6`0H>o^%aPj3%^*#le z%vrA0H&)ub>9ts;|E~AM)#+c{=7i38-MeFzb=6_Lp#M(Amt_>o<;q!Gt5a_*u6!2# z>S<$8aIO0WE2o9uHy+s1Zh3iD<eG=Fs{4xBViUh|Tyry-dRj`*uv@(Kw2AuXtv;`O z&n=xQduZvyPYrIGmr~vabnkUOvL(vX_~o>g*?(`R9k)q8E)#ss`MH?8yPP@O?69^} z-+Ax5CbN6R7D}%B!0oKJLuvZ1MHyXhyDlx#eA9lYG%RtmXxRb-xA4!qHdrs%d6M;Z zO#781*ZgK&+hrJ7G38o>f7ntka~p<}EDyjZl*Vp7?8(E;z+jDc34l2Xb03arX_<Mc z@CNtN2=*G`=c51XfB31-J>MsJNajYOn&79b1r`dyTsIi6+>m&~GC??M{?g5*F4ICh z*__>PnY8w`^es`|;^}OaacfztSW3s`Dd)Dl%-i)nu4H+2%f52;)00wj6#o7FvhVA+ z>ifU%{p?&WU&)i2A>eI$gU@^EPdV1@t6n(y994M4CA7!m(?{-~7DqR4Y4Wj*k$5zB z@6#K{H@}rg+Yo=S`_#vvJI5ZRYNb7T+Eco_i@Ace*?Pu9?NFH`imdB{K4$G{JD4qb z=i~!D(a(i51mlkL#J^YkV{TBP+`L=z&f*8YTI-I@uKXybR;Asn$RBv`^aGCO?S>WB z#k>0t{^hxMFw6FUlx*sU1x@9vB3jEoKeFZOTN%;&-RPY2nrF^j_m)5U`=g<$J#@`c z_Rt!R<DqK~bGrR8(6>Ltp<Y?m^>UMzTfr`#=ZviBAuJy|ngT`59|VfZA5E^QQE%Qo z<4H2tIjtW%8f3OUnz^On-oE2EvP~p^8~Mhj*(5Dn^W%V+U6x?M(%^@p&C3oPDqO;7 zY<OeK!u|KVW}7eTsn}&dQ7Yw%V=-$YcLsBsTD`)C8{2E5qE?y;Dk{n?dgI5l^pMH^ zz7s+#8`YFETNbAU&!4z4FW0Eu*i1V6f`q~Bpl#dImaLo_(6evG%~ZFDiCe?&oLVF7 z@k_7!u*t2s3(=>`Id&ZGeDcpsIhkY4_ugcyOJ&Q}^ynV(NIw&D`cvjPR*`Q@M3wV( zKCm{c{%EcEsAoJ!Fv4hUK+vW|_oecDj|i>g`&8w#;Pt0JA&bsi_+MH%sij1^`Q(h5 zlZ$>E_qugXIONe{>{g?YHccyZfpd4;><!L`)jxPP-qKvW=3(%UEluY$DrDx1MpR19 z%D&NiKJ&$~Ua5Hw9*6xVyqE4en&*3D?T<L)sT(^q^#A^PxMAj*h|V2t=O1%R?d#Cj z{IQ8m_^%Y3K<Eciug)aD+d@-Xv~Nwz?Na6OVzD&OI#_YXXX~+^l3PopeueVJAD%3= z?_7fUzJ(8G|CrX6|JYh;-{}X{KlU}rXZ<j&Q!-e6<setxs)y-5e~a1nCw%a3zq#Jz zkJSE)0&F+`MbEkX!J2J<`Umzoi>I8}ym@NsEc>h<!vEGh)UWV5954AfpXcAX2l71s zPUie?t<MInLVj3Z5p}rI$eY8^c|lr{{1(-=Uq7zxn8V2_lsap|jHHV#UuFn=Kc}L6 zdR77FQUiCj-QHaV*@u*`IGM`q>2?15cMhLpT;`&fjII?IT$b)=+8Lgiv~0%G&YN3A zid({ki(R*>J>!fO{A{|B!9Qr{+yfiWdIho^E1v)J%7s$>oifcQUGDVwA6OH5Wa_L4 zk3^yFBT0?f`et)w-v=1Q9}>NBVfwixJq5>>O*(9N$vxrR4P}AFI$5vY+;+YeFfrgW zt9@*P@sy28zSbPd2am4JdNj{Law2C%?Lp6((|*2D68D?wc8urKTd(K$ruB9%tY}d= zt6MYaST?(?h0D(p1LeDc%9&!<L#tPBxL_gO`g88$PkyuJE&X|E>gTz0^-JCsrPddp z>U#6)&3pgNTT?<e{LnBdQ~7O{n>5*W=Ev~z&FgD}9ty{A-}tsO|H}=#y=PU5rt9uM z8`+ZaKs@Zhy!5C`$7|~YQ}=CI#NN!Rc{x$#Wo_^gp+-~j)z{6GowRgc8wPWR9b57y zh+AAVrQqSOX)oiyo))_sG{dmff6rykl8BG7KP6cY`fi>ZrXpNAsk%Fp*F{r<Yb)0k zodV+`h2v2RZkfMK_VkEarf`|XWy0r<ZAEiFA6NVx@$~5om7C8`%$&HaW%W!gpOT$( zXNSJgY3vg!7n`(I++ITbqG4y^uea(~zgfQ8y~r}w_T|Ud>xK07xDwyh=|7k$XJp&& zroXYFzUatFZcg`;natA5lxJT!eOB`IyyUX4Uc!vq4|~_<=3f4O@##Ys8=sQGU!vk` zJvl8ZjEt9UG@5A?&Al>u+2VPd1fNw0-$=gpYgwN7>t#DlX9v3(Wwl;54`d2rIm|g( zj`#TC-OF}Q3g&n>Givp%M{CX=SG^>)HA%4VluB-;XV5Eg5yywyE=ebyT(MC%m5=YJ zQJ7KM$K9S+rx|V7ePom7sYfguZCP6jyC?SDN-xWZ`5X3zY3rI5g_;usYNC?LKN?P* zzvAHyxBMN#>zxi?_es5Nl6X=*++4NCQgP>@nhPd%XZVe`OSaxu3ZIsiT)1;q{lnm0 zsYmi&UwGhlc%54K&t((NF15Ik9DXu2_~BidH!lmjUcT~vyLpFf$BnaM=Ips?`yDHf z%)Wb#@n2C%&<tzm!~afc7^PlJ;f#6Hb<Df^{052J7g-nd)P4EL{BQAjz3Mxe{dpIb zx^^V+uU(ZXVlwTwzf+3gW1Uldw@)ycKb|IY$>z+4i6-@8L6KsgB6l3yQ1<wz<(l1{ zTicJ_{-Yf5=j(EXKfKEye7m0h(3175#Fd68;wG!Do#O>KJihLl;(Amv<dV}m>t1ap zz52QDE<M#*#dJy|t&O92+5tzYw95ufmW<_l->KQ|Wi(%Ss%6cKcRJ7H(jsbS_&uAe zP^x7pZgnb`HNN5AoF?ssH|ln_rM#5=x_E~Cs?$k~f3seMd+*nF-(b+~S~p8?o%H4l z4)J{l!#s{K-S9XUB;T&ncRA%G6O;Giy{|JO!kizh%E;er(zV)oYg{JFb(WM{pI?5; z)KULkBEIq3=X;CSo3?M~nD|{Q^G!j8w|a$&?Vn`5S1Z=rcUoyWZMfIQTcm%`ZKrwn zvZez$Yx6h!oqcq3pTO+4Kc8+HM;JEWS?6u}ZD$30N|B0d(m};G({{h)RI&5h?)uMW zziGSeb?lmn?>6myFLiX4z-^=J3uPWuZgsXdXnNM*WFsnlb)MiOySA&pbKYI=O)B+B zKfc3#gW3Z%QRXQuPgC5y9WF2393j2pg7%l9mnQRsHRO-(nh>`xe9FYm^H)!Aj?j18 zp!i_p_pMgx(bBiWO1HnecvZ*jolWBIoBvAAw|?LW*^yCmBfmRG{dLs)qdHR8<Qtdw zJ=wbTy6p0&Uu9c1cK+QK`6@PiwM|3b)4)>?Hl_WPNP9ggeBRcjr`}Fo%x?95LTmWC zsY>qW=U-O6?lWh7(Pb^GJC<DuE9Qv>#%g6>QSGcV`Ww?bDVycIb=>Ud;RpY$x?}0* ze%{`+OWLW#R^_DYjJJN<JpP<-pCc*hm15p|(JJ~R!^^uDbKDEFH=lm}=@h@y$5S@B z3tTG2ZEQ?-ODx<R`B5vG!({1XH}-`Sr>*<_@SE26gUY76m!vJ7R}pw)Tkq4?-W=!D zZyFae=r6myuggv8nByM?`=)Q;YsDSd7b-SzGBCtb=XyTS;A&o_kxy}uyA!;fw>F%! zA|zb&U;e!_duE#JPibl3VbMss?Wv|HlC@Ttt3@GE!P#ljB$f+5j6P4YF`6lvt~Ozd z-rBX>)~)Tjb;0%3rHp9r8%`Ml8>23)+WKy5-qEe^N;B_vKi^}{Y3w<JVgCEy?{<FQ zSNzWM`MkIHem^<gKewT!DDc6t7#C3!<zou(j?JEsFd^hZ)0FOiUq6*hZ@T*;_(H$5 z?CQtG^Iq+)FQ1$Ib>VX1Zf5tqvNd%_em{C#{!XKCP2EGEvx{BL=M}D*7&c>m)9epv zX<x-y^N-$6xpU@DUf_o^w(XD1=Iv{qxj*>e+a1lU`?>|+hkcOS6MpRX43kqK@23|o zZ_+LhZ{{~RA8TZ{;(_yx!>{evEMSqJ_%V?6>5kdq{028pKal%ZuHXDSM&)VUv!8~N zzeQrY*(*L3vdvHU;K?>W>4QS^UY>V}ip_d8Qu7l(2y|D^aPK$xp)=X$)UEf^4VNrn zW0#Og;muDh=tz~DRv?yA)Fi}v;FOGF@HrFvZGSf;`@XR}aO7^wVk5T{8Q}s|;e`%H zHv=|@Iphd$xE{jV9BLA$J|SMVTP--sWNT>mmsc&TW8*{bsu(n%oSn4w&ed<rSUzoI zXOYqFT`@6AwP5acvuQ8ZTzC|<!h3zj^&q$M)_c=eT_{_w)g!kyc)iDqiyP)$I4pYA zWzkmmFKo6kk()vfgvoMGRw!>{`1LY2-07Bu^Tvw*R=P_$*L=M8?n+svq|9t#w^J!g zRD-J)ZAy`{dAs)Ti`9LuNu3IwJsc)6i!KSX&VB6Zlr~|4+gf$Gi<g6>{`&_R&6p(d z{8WHSZuQCNO`%7VB|<N<Iv@2bIc>4-QL)9sN1u62=7e1A%GKJ}a6Gjp@aXgpEj__n zeveNZ?OXK7vnKTD^$(?z{wsg5%@d0#<n&toLv5ex<J(627C+kkV_p|u$*LcA^Co^| z7Crx{UF+5dH&OdT{i%Okj`|lieYwA{c5m170=ESfhvr?+x>!)UX8GNYSEYsbj-L<t zBeQ=-(}wMfo40a)@HwU*`iE<O*hiar4@370e(>G0Oz>^bi?43;<yKyIx?5#&c#l?H z_x+VWY-hjY=lOTyf&Vns_<)b;e_W5oe>5-pW^w)33_)MRf3BkX58rG3JNV>($_IV6 z|7joO|AZeqt#yuTg_FSv;YnIKHk*VGcpqBG6=}gL<|CRsW%lkbE~iXd3npr|EaKW8 z5IXU^R%TLLmqAHrj9MC3Oz}dwHC^BI%|G|WR0#I1&+=a;6s3{6uBi0Y%B>skWmsq$ z9G@+?hqtQZ6z9!dMVqcmU0UO_o>N4qUrl+@b(Nk1?^t*DApe;cWly+m?OXUQCMwN$ zX>{L|b5q+J8(QD`N>1!rAZE@TW%qJcWSUq-aX8QU%88PDq%tS}Vu@393z_4b{&7~v z5-#sOOlgJBZ#v~Gm}_fqQ%;e;6}hV0MzH_wGUkK3&*_}yD$MTrs^(->xhKO%_p(6r z$u)+0JB-!;DXYzWv-9TTL%#n?-&%8?HJX{3_A$odX4%csf^SDA7<K<W>SD<Hzv9h# zlS#RaXMJ<OhF+b0Yt`$fuT0%)bFF7`O}X&#<(o^BLMK*CPh->m`@vUvx7xy^yL$pY zu^I758i`y!*>z3xy3t+D>B^I~J>@eF?LMyjx1{VdAL}(g^~~yoU&5vLe)=XKz5VQ- z+`5M%N=9eb*iNfne(Hedp<}H&pDr;@+}UF5{<NAo^v;r*g?)U=NmY9*FD*Nlysdkm zwa=R4H(6TvRZDc2_W#ZE%D9-)QrEJ2cMpf_HKF_mOm8AnA|{5+zffJJtf?$#XrUvm zo~!L%JL^D6v|Cc%g-Nk$=e9`wPG38bE9>MtmHRuqez-mN+r4t7y`SqL&&_GdXKtQn zt!vIJDGU51Rxqn=i^g4tFULftrYMzOWMgLJl6n^7&7pfS?e5cO&v{P&+2Zh;W&Wn9 zdCuWQe>rCub#3Ccd)B^g&dXWNpDm|UPKkH$C~#r#&FDUG=glV5cYmf8F1q$vSTHN> zTihkZ;H0Q4TV8J2CE|BZ!{}<>>C&eBSFxG*&u&k-xK_(=X=g>s(>G6pTQkd!iq>BF z#o8pE@sis#J+c4V+<CnZ&y*j%!f9)}KPms*tc}S+&(~N#SrTyan4i%6Ucdb@JHBv+ z%**F*%>0&ctkTg<Z|hxwUUduIy^mL>`F~h?y2>E;NK)08trv>VyY;^N&GJ0ay3FCh zSCeyxb!P2XOrGaoylcYc8;<`?wg~fFT*K%$`S`D(`R^rOEPEyGC}-N4RuZl1aXqw9 zq%Y_tN6M^Ay`~XmQrnnQ4;SR>=}(v^-}p&k&Qh~O@&@x4$nBf8?B{f$?>4W*<04tU z-~E2jwYKhiUDNc|t^fh;Lu&-j+{<4l{HJ5XwWoKv&F@Z{SRVe;;F-taild%qc&E*L zWFGun@WX8{erGv{o%s@<-3;m(yia-Te`I4aoj>^?gGl^Nlcv_Q`<f$6noiHIb$+`1 z<C+h*ZMP-r)SVFNjP~96?6K6*D`7$0H)Z@EOs#aum_E(>mDszSu=MclJW7eviyzpQ z-7aFEoLl6RlDzrE8!_qmE04Q`%`}nQ-5fdfBHwhG!>d0%DDQdH71lpjrf6yWw-a*g z3)f}IiCCZXiF@W`eZQM^v4*17e3v%ur}cJG0nf^LlK7=xtDLI*XfW;9+{GICPZL?2 zQ+d{<ZMahylR4GKFEcZC_1VW;0@J@+y!C$Fm(+T{RN(p#(f;m=y;UODw|QL(+>^#~ z{pVdd^S{-)ru8!%RJTsG*)i{ymZ#9+h_~glcWKIPPkHIGYQyfF-vUeSnKyjh6TN@+ zoyS%^raY_KHcmUDsnhlRD$li<O7YLjr&Z3GcG=eN^4+>hfnp<_XP<VsZJ1~7m6Uo* z@b-~OZ>3y)wR_DB%KJ}0mT+5e)8rw8jok8=a?v;3m)*_ibK7vzJjJc|=RZGpi{}#V z{<SM5=Wg8>tnp>0&6DO8vP#jsQ)e+s>qztOUTw4}&u**hm1zb~Z*aZ4Jn6;6`O~)W z>lufCkNA_N+vu1XdQ)>p=g+3lW)0Pg-SXR#syEL3Ic>?KjS|y4PUJ<qzM8u6y=B9+ zz}-=4?c!`F@3zi9d6U&5`uZ!4HOlSR`BMe0)P#+CH7|B@R9(8YZi!d&^18^z1BFio z#5}L_CnbJ->w4poZPT&dDN~QCx@IgodCmG&-f7{ZE<X<3G!ElE_@4o^0{Mme&NNF- z28J}e$1f0lY9XwFR+@{{JnOE$9VYsJ<)pPP`(EB!cXQdKlGt6m>UobR8cO(ud+fD4 zGfB<&mW3ai>qgP&xjNF(=cM8uZ~Ul{FCi<tKG()dt~rOtJo1=Ef2qL_{~z){EZmEv zto`O}UGV<$#CNvO|DD_UymaaI|DSJ3Pbd`l&$W>GxCzfAi^;-@DjyQn`ZFwA9+oL7 z=UUwC3+!nv;CgIhyYQjOxfL@~4ysJn<kggUygifGxFY1Jdq_>l;k-GipA1FY+9H>j zrX;MIak;>Hlhikb;}yYYHcKe2d?dqcbL>dkr0WkB99Xg<QQq!ckg8}ZZ{iM{6$UfY zKUqxv>?1bghR>%pFNL-2R)U6u+8ArxjtWc39Y~*9(|1*UX3ad`-%VZWp*E_D6(@>x zzHew@KYX|~$Sg~wx8z*UIjMDDBd*xIck4ZVcg0lmO=(+FtRy$5q%A5GGEB=YzH^4> zo1a&}qt+hHg}SjCdNw&b+FJNq+s{jWcDws1<z&%bQ@5L@-pzZXKd6?RiG2Q;b$5W2 zVnOtwAHKJ?$6b_C)4b{DrPfn((JVVk?Vo?tD+hMgeI5FoGLA715@kX^rZ%pB&~zYt zrcKLw&KlYK6AJV*-+edzUOnsg=FfTm=cG<{{$;!Q^pPb?el0t&{X?$keZe1k^TdA0 z>8+}8d+>XQ%EN!NH^e`P{NwPT{l~;EdG0?f=T}z5Jz$NQpm6?-%;XDO^XlDs)P?n* zr0X7+(fy=Wr}e@3PmELf=^d+nv>r&^v*OWoru~Q3n=`CCb9Q4TryS=WHhsfi`K)#A z;;LWPPL|tzZg$xr#gyA7&(8YHz0E3ibFaQ}C98PIpSTC1a(@nfuL^y@HBEzcopYb4 z&hgZ1n+{}02v*Eh{eR*KuUdUlk!bz23zw$^|4ce)C|j<(Gvtr!gY`e8AMd^SM$F$J zuHf0(Nw2LxNLhc-ZQTD@o+<zFd?B`bnJVpbS{omF&10%$ekeancekqY+p5*KHZQAQ z5>RNA%DKJu^`^=@KD*l{Z#{ePSwQdg1$zQKZ@5Y<*S&2Mx5+4YadC0#<)v>pzpF__ zt_;0)**rW;`sTGo$D&2klpYpquS<1z?^$&H4Aaq|g&ui3Qf2!m<p&qr)(XeWQP*gd zGZa@T@#Ev2Z&_t#XJun$XJ{s3U-j+BkBcHZ54CSS`QgQjH<q`UzVBiSeX=#_=vS+v z$vK~W-n%tOS=KBH&|K<!>*Twu4OLufo{J9fmL30Pd1?0310`+3(oK2k7k;JfG{3Xy z{l$G5uC@H{^WrXC=(E0_KI6KH%8Hi9@;dB?rH}6C{Q66CQ+n}ll@^X~DXQo9_S`8+ zpJ5eiYo$K_X^Q2NRDIK?I{j%Aa;)xUas7WD?0^4?ZOOi8J)b7To{@};^!4t@3A8`% z?Pi$1^mMw$u_?kYn>;xm{w~Z~&AiKX&a!Csjn=V7yw_unTE`mA+2kucv*O&QmDk_! zs|!V2CoMX8K+JV--q(`YUGoi2S@u77E!h6Fx?oMpGwp5JqPg9-<5x_JUoPJDN7i}q zlBtEob@4WdQ8#6#9{qQAR-Ln7;lzsNms-5f_FX6|y1In-__D=CrGCod7fdH7%(lup z^>=dqVWr6A$>~gQ?C*Imo*$mAdi}|cU$b%=_Z<7gcc^^AnwV+I(~MOg_8q%cVEZii zdTY>ZZo${rj_ti-wDfwp@b8ywT<T{lgRW2d`$27vktw&_Ti)x3*G^YkvHP&@4dc$2 znfL$4KAd*;(ZyvJCN;NATo+Bez2%`>+1upV*3(-Kp4}Cg#J&FK%W&<M)~M{4H$Ppj z6)L~Te?{@bQinzP(+|7Ydn|U&IBZsR@49%Wj`JeEtu47Fr%i$~w)8ZxyyR-CUGH@F z>Nl=i(-)rf*!L#!Vm@<Qjmk^amJM^~o&O#xIBB&&_(j8_1j*Z~bCw*}6-qkQ=pkx7 zZDX-?5@T#7_wpqX9}+}&Go4?kEl?r6J+GVf>jE2v?%=8b$$%p(PrpcET-vz3>8_@& zM_B2xkl3rtEmhH<Hi=wg4llI!)C|2-$mz7)yppr3h_yOsms9u2HRUI_tkYgLY3kjL zWqaqk%y-?ceo^itOGVy#^($qP=LNpa4d1B0Y;8ik*Y#C9x;^<P|Mhv7R@DD#*R)Ab zFKX{F7rW%V<=I_rj>~66zvwO0S1WNW7Tm?3(jl{C_x$)pCHK`&2Z_G#>=fl$Qg-Tp z+@Zg6xB9jPMuu@b+`EzQ{2sp8AKSLCeb6Yfcd!1kmr`%{ukHG-zISenQn5|D)=ZAv z503A1IpsfWE8)~)H4}^c;`IFQ-7AwGuzE4goG1Q!j|H#$x`z=*ns=w4UEy$c#S|wO z#c%f%q_^)_d9%AV?t?qu55{*ldAx3NEl<<`+i~^HUXPVx3!byaA2yJ@{8?b)-}c{G zoy)YZXI!t7D=B{RWZgT51=`{t9#07p>ARZLySQZS(R{;4v#Xm|+em)|pS#2P?^`Ml zI|IXR0R}u<UrE}nlUHd}9E36=Qe7gFF8bfMtSrsgn$vUETAltNmzQe0J##i>-n`Hv zaBIUPUne0B#lRVF{3fZMez$A)!$5A=?xyp<9CWWn33!Wa;JwgxLBT0|;kECJ7yZ!6 zstsG)|4M#d@}BZE=Gi$Od@|4H?7aWD?*4nbebw*HKR>FUZ^_K<^&#In&vkxND2MUQ z6nB<DHAB|373pSYk5<kInBcO%>Ff=q<kd~NJNz4E-)~9~VR5<QB&)GQ{`Sl_6FxRH z&8;x!zjyeFquTBnd#0D~^FQc&<LqHupL^$v<r8Lt&ReXBIOZPlrY!80;=9@@qCaLd z^*<I~b0sdVX42OmQ+oW3o#fY7MI5tZm9shY#F%IL1Ks&kKd$IGuen3EUsL0Fog}-+ zoyPOVmM4tkA8hU4T-&~5yY1{UUW1=Xr*9lS67bPGs8r{C#gbPS9-mh&n_uGP-L0op zew;6E%BuL?G2dMt)=ppg%Deri<)Q}$eI8fcW7pgN4oIK4#pIV!Ld8pizEeLo^{BIG zbXFXgzQW(+x~{Oo8sUVst3UqEUa>#M!7tZjl1J9WCsMk1)_Z&FcK5g+=qb=xl>PBq z2KU?5@BO(>y!ya7VOopQ!j!2EyJNmytni;HcA05!Rpj((JYT22jGml&Yg$TV#^h^@ zryu?55zzno;HIdkMWwA@(`+Lmx41P#Nb|m8`sCF4bzj@HufC>RwXa_{`!$>8O!3wH zD`wf53c9zJMMQkR+*Xh(_;Ov=#)t~(mxrTSbxz;7AjYrCn;50E^0>BjjqBw#0twtM z$+xFvd-@)@^zy?p_tP)=a@Y2@EiQD<WISvBVnt`ux}-@HVuU6=lVa5Uudey>pW1mH z&X(ZkxrL%@13#*;g}!(ZcCk55@_2~MaZXWx!<R=cYeijHmBgW*%Cp*{H9e(gg+=dr zjspKFB3)lvzAn2EW_xD|>#r{fvoa*pLu#fvo_{o_Cq2}ref`P`x#z5BW;PsV-@a!5 z?&$vCN}iJ9A$tx;??3m%RSmopO#eZ&*1q2ND}Lzl??3+Jw@+Pz{HY4hqx}Ve2Np>e zEb01sV}TOGtG^QV6AL|$`hPSQeSKk}lk@bh`HxvDH!gl0C%XTDzVX|LWv)$IFZ#w# zDeE=-_UyEl-s5ndU)hYs%XxNtUf}6};V9o9@`r7`!IOOB#-0s}lr}{6tNZTUpS*K_ z_(%3Xfk)?mSk+~}x&L3&{#6ydp6dV99>3T6*I2)*LiYbIzUfz8woNToRGJ=pe%(43 zqjjv4j;(tmXS-A9mOQ5#%bhn~+z--h9a?*mRvBHEJ*%m4SeA*4W3j2owbzdpKDc%4 z-Mf}~CQ5hA=UufscB?x1rs>SQ;3Z!}cE0#L^Ul8%jhJWGliU=~D#l*+J{xoWO6cKA z-!!Q(ZpoGY2e=FtztO6ex#qHr!8-A0Pj;*O_8m3B&S!URyQ?O)yyEq?2(HRVjhEMj zYD@ksTHWzp<@k}qeotNWbmiJhy_eM=yS{tQ6a(XGwbB=%-&FW~@1HKT60<k@`gh@p zC`RMsudhg5SL)m_?aKAI$SZYkU5{+qRb$5&d{{7Q$@x9o);!_(*3z4H+v#A+dd<34 zxmPb$KmP0yzo1mJbi0b?hLe-I&b$78%s5vj(jslSU|hCF#NwQ|dq*t2Cdq9(Uij4G zu*lWa-dO3*v)^6UPg}uxyvkI0_KRI*{*%p03w5tabE$+)=DDOPaMe@s^0KX$V~+;6 z{MxnhbHm*07xs5*=N<a8TXWM9)5v3K39&n0J>R)v&hq?+QV!Q|bp@!*G%yNz#n;*! zk#l;(GpVqc@86F-l6F=5`i$+7)zPaG&%G9~W>-5WuG-3NackMt1**=?nq9YA?!LbC zD6e(e3)70Wyz*VkG^B#9_8L3SFWjEk=Jj}|<hQ=`*)vVUlAfiDb)2-<x4gy@68Cyd z&E*9@ZmhF0&UvY<DAxNTMYsO;<<wnur7B{}r_8fWz0m!PzoED9%JswtPvg!e>_29D zSg1SiVbZ3WO2NNU5szz57fp?g`(k!x`Td1y68n?>Omr_13rptJ*s^kd>sFIx{j#r4 zn_TbQE?mprJ1eo-<L%y~dEYfTLWJ5Tx~^|^Q|k3Q=vA+zt|%Hkug%AKHpBksOh=OE zDW;fDc@iBb+g8M}EotJ9<30Ch=lr|n_3-<ooNFsL|B!jpe;~^;%7!Jh>dcF|t$Xj; zw#e*%&U5yLZF)-by<|<@6Q<QknFo0`r|X_QzT&2>@_Y9_cP-r$#>XCAoD%Y@&)ZYB zu|+0pzDnXxm81T-2P5xX2{3AL;^&q5a!*F(6I)d}Tl<4M0g6J!)0W=JUb^z8sL(}A zQKLx9?T6A<Zs1>VS<&hZU-bJnuB!{Jmhg(+WL{AeC7YGmdZ^b~^Th3kWg3;0-zTrK z_WJy3+q)+VbxpTOIxpV8xp2DHg}yh;i=UU>WNn(t-y^3ZXTl@+!}_X;inp3`QRXZA zC1-V~DW0+Jj{Yn6SVU^YO#K7eV)m?+@?Iw<{ybdq*iPre1w-8vPSQ6&FRKl>qdF~d z&(5>8GTiNj(X*>JJYmw~j9VQn)AV|Sq7c7S(b*3(o!<*pF)#XJ)3qsM;nkqL!0<xl zS-qjLrVTqn=QX|G()CnGKU&kbMeuBDnDDXO7lwjbwY`_M45zf~=-9EAi|x6@Ve{5c z`)F!sc-bkx&WNSC%oUw?LY{4%^zf#i_C)817b3jNpY&O#GW-m0)VOf}k(>{EnOAz@ z?r^=2w|w5O^t)Lw|GHVzr?TZ|HKSihh(&sQiQaotdB@_r0xpNS*5A!6Pvdspae4KQ z-q5(KK@*J|oR%B4?3S_gyE@Uh=jiStmRFzGDOT|J>^l@Y>4}Q<4dJ8<zF{F!woz}* znh*V0>+M>uzO^R6_o$n~mEGqTAIMEOaeQOS2a9)dI%Y|S-|s9sw0)`Uhn%YC7k4*= z_q}~!rrP;WHh9vv;IP8d8`+Pp&Sv^MP3wH6SGZ85X+x6GTdSnDi#3a{&6xD8r*(3x zSme=FJAXfrY}`Bd{Hm^dSwFX2%F{fNn<LJhX0k0>(@^U6(xyGfCP!FV<Sm@CbHa5A zp<Ir{WUuJClU$c=vyDHH`IJR0O6v&YoyP*@;)|B$Z!BH5RbVT>eOJu8JI=z)1tN?3 z-1jA}d86%8dp=2fX{Ym(oo)LPP2OhSQRU*BD8Sz{&*-%DKkx;2i{?a0sBtnd*y6q5 z&W(gcNKU0`X{kl2DW18B>8Z|%$r*`BIfyk$bHj4Wg<VDJmgV1Gc6fCz<LxWg-0rCK zGFArOYPzsMAeU=f>$V5p>L<-^Zo1h!yZ6-p50m#ZouByNVzEulGxy3p=DTOJnJtsC zKXZ5H&hwwo%$;d%UitO>{Q6`8NfXnWMGr4atV`@XYcyNb?0T}q0p54D$DXC}eBNQ& zX1S&)A1Wa^DY<y|+2=X?Iv(=9J2v6?bi+lpN2{`PxN@#Z7WFH7=Xkub+xKi|uY}pg zr4Jk1+L@SLgA>Z$I{aO+>6N;E_O+0sC)SyL|IT||<9X#49fM6tx0aPVC&azy_nq`4 z;GCv36Sup==SsHzP@ep&nYW&{9hfrDW=W2Os{c*V?&<a?7vya^5M#cr{KDfSyWU%s z9{xIyYYzXRjUFbuU+!EM8|hc(dskcTLf640#oXAdJX|?J{&szvSWTMpW{R~Muf1G$ zk0-;~)aEd6!S<=kS<bm0ez(A=YW>~+=5<@1T$%rCleu#G-nX;nX+^m;^sU(QP<+Re z9aGn=S{-!tgxJ({yOUD()v+wsH=M57byLRimd|3H0xPMFZMmJYZ@g@hKF>I7o+I=l z?2&bi{zmqrhZi0B9Wf!o#qE)DimKj&MMsYBSh7$h@R%!a+Yvi0A*)G3p)-WoE0hu! z9y@SaDu<K3v{U{;R)$ARqx<uZ+h$klrpMjB89o2_+N8t9p(nF9r~P`mWIhM$<$Hn> zS0?{FS2100a@Fm$o2!5MKU$X<wrY!D@26As8pkuto=5aWFSwq{d1Ud-k{8Q<+xY$P z4P71W<}jmIXxE=3KV0K~%Uf=^qn-KN<(ht5&AsntwwF(dh3t*>Q>%Vve|CC|bLFvV ztKYP_&MjJ(6;;BzS+?eAK~`dbulLT`p`pvYCG;ZueD8Daeg3<DrrAsL3<v%HKJU$c zdN`CNEKBBI(pR<T?$?|%+|A1}O8(b9u9esL`S)$x<%zlaUsgFx3_rJ1RO_6(uu_x1 z{6xX>n9%jJmL6l?W!RWK(MW_tHgvAsCI34zrVas%7de=@{bjLJsGjGxT4JfZ>4Pk< zJuN@DnRmYwV_V4^D80<=6O&Y}+sfWny^l;ALw;Evt7pD-i?c@JMXc&x#b3*;s*FF% zc^QA~U<+O3pxijIY)|^kd0CD@)^2YtwhF6!(n(k{flp%ji_<+1ue_JwzZ>$8>AOnq zM03kyc~SpTI2JyVa8P4v4Q$&|pyd+qlt&==%l_mE=lcaO8|%*DGYpAfK4YU;vCuRA z>D;X)5_R0d?H^7v*0lF^@n`oY&8q2aJf!5fJj&v;cH7a-2?g71wQa*bMp+!c)UCT` z_q>x^49>2zeRXC-_4@3o+9jg@w8S%b`D`Zov9}aiDNKp(5dRaAF8=>Ob>{rudhj-* zw5PYbzcDi~q~pDs!IY$uCbz&hu|O|5C$YGAZN&Xx=~99F%F|g6O`LGZv|LyzDO$S8 zq;*^4?hE$=yQgh)daECG*0j8(Kyjg`#@cOJTerUY@$AO}<GKGT9v);bU3MYNeYt*L z-@YF&x{d9AzOsK1QT|@<A=APy?1`K1|9$uF`|kU9|Gqi&;dTA}zZ`ro+Wc)kF!7i; zi07zpYChqow7cVt+NR^Y)psX+aA4kZgG2w|X_s$;k}99LG~-k^&EMuMXTiYUDN}Sf zTP~wD@m9}{ha1?LKJ3a4H<pmUuBT!ARqb+vy?cku*8_$Yes?&P7Ry<1E`Kr2ykn2& zca>P{<+FPEZ))XPyloR<emALXok{EkiHfxUEk$9STE<H=(t<p*FDB|P&tmnJT@pKo zah*l1L~zh853iGpY$qoyIH_l~Eu(%8WBA3O89bhBMmv2n*_mG-=Knt3L&d7!;J~}H zt6!X%e$7ic^quTOznTW|r|h3vJymz_4hT4B{D71H(emPw5|e`m%>pcSZmRKBB^a~s zby?)HP2eWi?2mPuQWAWh>K=|-wdBdA$lku}Jc-8&ypLs4I(!5!cBUjwYL<CoIitxq zPop59MTq@!!L-J0u8pcwCT&Wu%JI?Wd3GU<?Ob7j+`Xg)*%Kdnw8_Yynsa$m`;;l` zRw|!*5)vkTNF>FwV)mc7hHjZX%;I-H=&`>)sLFRw{Up1}&NBx^H~pM&B2+2-!~^9Y zGa57YP3Y4K_R5Oso)_jNY1>u0eWzZ;$^LgU=gpA{S|*WUCO7?Pj0^v~c?Z@=SRS9W z<E)5$q*O*I>qUWX<0&U)jrsV(zI8NJJ?Trka>;_3_r$x)MlTEZ+@E}M>J}%#T2V=k z8w^33UVA>XFl|hlcJjGI#}%_RswVdxz9uZFUYZ={<0Uxvq36D3hj<eF>#UYPnti=( zdg1Mqou-Kg95nVEx!5H2R{CX->hjtCrEP*2n$>RQPB<_xwyM{+|ND=ZE?y^7jV*JR zgq#S_H+=q~d%I=&8LkR(F54v&4j9fnIWbtrXqMrP&~=5YogQuKHxn)_$XT;u;oN|~ zmkzV4hM&<=m0~@;Qa~){qYoqh=7%onOwrr8)ph->S1guuTh}-1dPMb_t=FTrN4yS8 zE@f!mEA4!%eYaf!)7jJOPRJ%G#TEyMb8@e-W9N&B-LYxn2N?@xCTsR}9S>$Pf8Tzr z<g2s2$2HZuJ#!9TmE6gDZoTeSp2Fa>r3~!13!he+J^9D^N_Nxd>I@6Hl&fZ8yq1$~ zUi;i*?0=)A85da2FD1Bx?eNr@%ZwhUHuT(G<Xv*U`Mq~R=ehhdzMJ1DNnb4G|5K`P zz5DCu4Q^!@FBQp0J!RXNC|BXW{*B_rTfYS+NFO~`DUc*{e&fjq;ULpzU%l+sKl$#Z z8`t^Wi*db5)zSswT$M}9_T0P3l@u4%E|Xm#?GtIBpKFqOqIA}#fVfvisV7RK%XV$- zj@tHYoqEYxj^_0Bkq_^*l_{N9i!_z+y4Tuw!|ay5dx|XA?TTv?j%h6UnzXo*Y4NQE zv&v4`tv`48Sjw99y4TKsm%bGJ!0=kvgSOw=`{wuGO{f!_TT?&#mbUl78D~x(E1gzq z&Gk!X;;bi@uUA;j>pAMmFMt1vPRx#5T#2z<5n<OA9k{|`13qs4V6Ol9cHTir=czFP zor{i~b}X?~;0tKd@ZTjMaAb?!8|Og&+S2$}dM=-W*z^3pamfDKU~!;oqD3p;5<NwS z8<*SlkIy`9q|BlcC$RK@&K$)uF*UhYQ*5~Y2wUq^J0BN$be4Vo<Esmw=$?rFsS*B( zZO$r5ZGDziF^iYW{d%=Bs$avnTh3{N=5>MBsrr*;dXE0ADD{2(<I0ZE%QJdjPRuP` zqI>@4CDBbe>z&nKuF}eusLnlhF!EWjo!{1f2MyMFSxcJVRCzmNVuhu$QwiH-rH)+} z<|(NySl$|Nt0U@#VTj^xubN+L63?Cz<?(b}wdjIgYudx@n=-`S+2;wwUUmGiOTZ`6 zvE&?wqj8T&7VEtp71fTFp`59OG7?gvkDfKp{bA$uBt1-4T%dBL+dt-A0#Tp7c>QY* z`^Q>mDtGt%87nh8*@DV*Z0`RTJ6q;myI6MPyT^lncUivA-&*)^t89KGqo#Cvi<q!B zo6Mh7i<VQK@69H?yWTpj=u$YRCQH@+C#xBjxqi}b_%FXZOYGk&+3SzD9NG2Cp;m22 z5ci8)0e2<rjNgbH+iTUk(Pzz6w#@BPPr6lki%JWR=7g>i^w_RDp-5!)CABZrzn<-{ zPgwk5{lDna{SmoA|C%4T-TkB0Utb*@+W%j)DsAb<_}(S69`9dj^!RV+<Kr0&#;Y?I zriLE3S8NGre4)`_FQRMxZ#w^?)m9vH7TVqZvAy@tRrjBZEauhx`90lc@1**Br}nR` z`eh$=rvBO=e$Z^?`SpwBAF(koI0+$-opuFu8G#Q@f)b>RojRkp&~tmwW`Pe3G`;pC z*hL^_XSjH(nBLu+c`Z(gb_acnX1ZMV>{y%|zqZ@XLEdXlr&4T5p=FH4{hxK`@7r^H zXgMyhSKzMzvy*>!>~#0ZavYO?J}Nz~9`+|ORHZX@F?Xckv2|aRrp^fQ`6SwT&f9s$ zS@Zu_|L5cwud}iLQWJOEdY4Z2+8vKnghe->{qAL#+x+DH8rQ3Fq28<J#kM|nQu5?n zoVKGt>Z{oMITH-_?p~Kr!fgKUwE%~1Ib*{D-;BqM1vedUq+C}o05>{xb|(g&WME*B z#Cs974GE17=lq=fBHzT4qRa~T4DZ~q>~QJpqIa(=XC5&)=2ReP#MV6DNoZR4>`W~o zbvAZ)%_Dk07|VjIC$I^KDVLh4Soq3rSIoP$<)wD+tbH+;%uH(6s;r*+cA4tGDQm7? zoqu8eh5HHL@9aFpv7vC5{_}Ho>Gx~npWm_mzw7V!RE-x0<6m9qR+gGsC(11Kvu{;} zQ?tB#vxLZ7!^C+!O3JsEvpnY3YBS+^oXOi>5c0(~u3z}aqBg;vYY$cYGA(+IA7%Tn z9BZ}IUiAFcM&Wp&50Z)dbXd-D7dtk0a*9SiJePUp@+E^#&BSG`lH$+S7*vWHOMQF1 zh=Emfvs8`<s|M$1QQks}LsM#*^_fnIGHAt!7V|VlUM~Igndj8b;%1)G;Az$|Uw<Uu zop;_m;7p{5*7`Ok!>*F~X%{vfy|h#`|H9|0TBiOdZ}(KsSg3CnQnD;4?c^E1=#`w8 z&&K;ie$G2pbI$i^`dLlwrx9i6iq^zrHE29@IViQUs5bQHf(iCnyVMRp-ndZmbL8e_ zk0sULSJiBO6Xh5Go%xZKU3YuQmxqFFv2t4zZUwLOS(xBEvsL-rl{;%vcl)17Upr~G z{w*uHqnmkjSDy)tT55aM-rO?NlIOxlnP;s#U1ndO`R>X`n|)eUdk<`QdS^k``j<O; z#7k@BGDX8nYGm&Re4NzBx@XO!Rekx7L`Cmk`k1?C)nn@l*W=|MXZ5}3{9OCT;W+<C zW!d%IKavycn#@c7h~%&OF|%*}V{x8#yQ9}$Rq*t`{-Ij8^wF%oc<!gJiT4iWOO&m- z?Y!}O(NW3US3gGo@jHGyBFSToa^IzEB5Q<yR<15MbS7>~(c))0D-(EwUj?}Ri#u+e z)ML-_**)>z!TBYBB-a~C%&!nU>U449PPf-T?8E9)7QL}byY{t8({N%0<K~b>2F{yi zg_)}FndB+Wx3_<x?zEdKQYGD&4quSDeL|US|Mdcs`2oG(g_ge7xjOr$#WU4F2A+?% z@{X>yyz>`p$N3<t^9dKlCV-H)1l(St>L=TJv1nLfdT%i^2|@Jbh8yY#Oz=gy)*o z+BF<Y!VWK)T5({aZ1I^(C3ewvPoH`2E!4=5URJ!%rfALoKbpIrT;Rx^U$E{qd-{sy zJJa55%D%-^ddK#}Z=cZBvZfxj=bse6+cMo=veMr!^Xc+sv9p4%ZS=V=rEzXrhG$5s z>B{pLBu}T9<rMHP_V4;C{`^hM%y+YI$;vErHg$~^)bv?0`Dat<nUl|t_4)f<%H4C# za^IsbovWum{OVu+`Cj%H-)}XWr>3sbv~piQQ_9RcZdta;(~FPhOx}9RH1tuR-{l6^ zK=*}T?QSWrPU!sovqQTp!&fkD^8M-_ol8^SAHC6huiICwwCr=&gV)?=gi`{JKAyS# z_`AB^(_E2zUEW9Lu6}4YbLrn@wSjtvs+%<LN*!5tH7)eG+sv(&TlZyUKUesas~Q<~ zU2A@c&+eE7IdZ$}Gh)tkPnz}Ys)k17WxarfUAJ}87k1ax@m=I+vu%2GaH+n1t@IC> zo9pDw@d+*R>seZuvPPh$@(zHA)1^v0E=?r&Xe96vsMa(u;qhEqREf7toxt-c;M zv8aNRU-fqN^ycdV;^+7uEO$^?6DE+eeu3Vai|q;*%2~f&Us%6m!G^NZkLUJ3?%dzF z_j&JL*FPd5$K_lONL$bSAyM}&FX`v}8&*2UZcfg4|Cb~8WLehq|AG=r-4s(@4@hSS zZ0dY^)cU{Yx;4)OW!7cIxlQ=Dok6`$_V%NbTuz;{Gg2yMEv>bcU$}00Q^76quNSTE zy9eLe-?DAR`oN#>c}@1$UKg#Aw|U$DYh^Zf>=JXq#1#unWjoY4TwWgedy%0w_j^+= z&zdIL_o2_7{P)f2zT{e6-4G?WenITY1&_tb_|#XrKNsUseY!=+_7rc)T+fgVr$0=* zoBQMBJ42?F?^0SfYqxK(m+fKG?$F%((&|&meJ7i>oc>Cy3NLEUe7q>ye_a!^c+W4b z<xNu-7SClbIu;g}Z=!L`>?nt(+v21a(Z!yIvqYP<-MW)pL>7k{E>iNI68ALW$AZ5f z$~bG}GA18*-zY1@Vsk;S@l_)qV@+t|Tp^D}Kh7l%(^-NNKzKXDzf}k1IF}rV<6LsU zj&sR@I?g2yJ`E0`3!<4c1*SW2si;g~^5k6Nz@K|esJiW2awo6b>x#pS%BL1Dye8gb zV7l<Rbm8+&8++}VKN%lc9Cusd=DF>$b33<uyl{19=Lx=h8nepe#C(st{CIF?wOeq? z^5ZY3%+Wh}Q`K^}>T=6X#~;6$I;VEh=J=wdNr#p1%BkyFa-Q_`^6P)H<-@XL);s>F z&8iIkVSHuPDIq44(8ZnR>s@ADcbjDy-}zyy;JN59CEaXg-K2goDT#c}t>->33&{A# zmCwg|@{{&)@hHjsr;SH%n^!X5uR53!(P1F>@YSQY+l4ljd<1W2H2wU_h>@LvftwGx zX@Y)~qYFt@ZEit+UTR)RNKs;5aaw9oP-=>bA*8#%G;pIIlcPYbwz~Rr$*FGM+*~dv zv(lRu?sS{%?K9zq{+){LOuMJwW&OHYr>C=3{(-yXbZ*wxsV1MFrN-UcbF$`tP2Iva zy;*`xZ_H}s+i!3e9tbFJ-LjUut!|a?IakeNtRE*96dihbwD9Ab9dkP8>`<IKabb^o zRalnmDc;_IZxhcnY?5<+{4aE8(;S)V>)9)pyf)UkHT&i=|0Kn0S5{t|Txlt?Saa=J zwyEtQKYK&Yee;u-XmUvxNoH?1+!px#d+wygr6(EMeuQZnoeYWap7!v?`GRuQ!=b<D zA1r({UpQgsnw@9f8nS5d)%zSyezN=VRIPV&%IyzWrN6&X75(yCZLiHWtv>K<dT}ZL z9acsLhQD}QI8GD>J2cQkBZGw<1^%_MOw(EYps|Z9ZiQv6=z9gPCU=ttCMiSz!)Y9= zPrtjC_UPjq`w!DIrZ#0{{(RHF>CIi0)UFJrA4ZprZSVg5YH43r_pePLNaM>w`NOpm z2L(ml3(qX?TP<;flXY>eMQ1RVpLWOU4uyq_#7}a3Q+m4JVzJZlNY>{yGe7V9GNX%o z$BIWndfGb{J<xJKQrLQY>B}2D&Og)tuwMV^y>j;IJvv|ZJhoZCYjfVLh3R*;_*x$P zpf;;~&!%&+d22XoJ6-0#el#^_(x;YKp?MlFBdZQg*D+N0dYPoYlC}T#)YOM}*WGI4 zSN|)0CT78fEvL(Uqr)z3JkIlQO|THp-nPg4<~^EZe5WVRE&hX#<c#N{ntMvtFvlM@ zT_W0(y`ztl)!gLH5zqy;QhW(r3s=twEbu;@dna+mkLL;&tJfuSN1Mqk$>^Dv%+Ne- zbMC`b-MEz<T!&An)y%vebj4`HgTr3}?|hv;r>*wJ`iFAwv`=KuIL34MhS{V=4+Z$L zXB=f_<u^T(7<aI#&3yqw|Ns8_=mz7RArs}yQxrrsxn~xxD(hUdQC}*19fNbx?i|il zM-I<EWD*`e^|L>ZwTJt)jWYSOw2mZ6^lel5XFmIis+Gdt$A#rbO|<%#c-~^;aj$60 zFe}))^uw$#_PO~r>Wy=suU@D6>Xcj5MYE5dkKTT}_1=GBPV*YsHmUVq4=*g=DP6L7 z-_d*PEboQfzH;GWgyG=@F2zTaj$Qwm#NGFAAxm^j#-?j^TUONh&CyDoxvC&vS-x?9 zzh+sVd!)pT8uzW*Ivc$t)Km{An1qXO*0}QP%_ZY1m!zz<RawlhJ(o9b{kusjZ}p5H zZR$HjdS5H#h{aCXq`l0wwnAyv=~AibJiq^cioTG(F(;~Vp;LE%{m0zy%~Ho-OqOo3 zcX`O~9JRZ{u0b)1|I*3D^Eb@?_OwE2BcogHzDB*a3+gQ$T*ezpOSI!JZkF(BJD=~6 zI3u1%eYbQ<`KINL-&CASKSf#mW8K@m#YN27`C;jbm8D;5TfWJ0Y`9>t_V#|q`Q<ad zZTuls)^csbXX{_fC#O^`;Qr~di7_o)QBdjKyO}@OGge-a`X(au{?)0ZEvvSCXG{OX z1nRpTF*I6d#mvAU#DTAXB>IB;)D(T^{M>^4;>;4n^vcpm&YI{_+5i7$Pv7(8>((jT zZdODaZz^2sdATTT+QB8+&%<)B-|WlP<*4<Jo84p5dGhtOv)qMDato9?oEv#BtgPU< zQx%}6A8_RNF>cY1P9OJ`{;PYhnpu@!Jb!QezvJ)!|F5lo{{R2|dB5H}_aAE9kP%d1 zDfIM4XLgE;XwJb2?H*okQH|V^^D4LY=<q+=kvuI~V)v<y(#mHxET6OO=IRHg6>FP{ zKU%4+|1MC;JUM&kZ@0L@xjp7PH~Jq8+7o%~E7vr|gEHm@I|GkJ+f-=ZTb96j?_9CD z;iTE3dzjyce9*gdNaOz5<n2`}N~I@%H`qD%WOeGBaDhXzcPi&MeShr7TK+Ikl6^<< zgp;;D?^288lYcQ7*G$-5U3pQFRle!u@A?_0zdM?Ke+*=mKYV=WZ%)?sj}DeL6%z`3 zPW({mmkHd!=RPw#<e<c{ou&u>@N3RUiJYwSy3Xdz6Tx}4Q;y3OKQ3hNW3>6BDLFsv zLhtz#Ki2e|=k&PwaEaoD8xzm*nZ1;>l`@}I_9E@kEVbk#IhV?3`*teUUdYJu<xjn| zvn8`c_`eimxyf9kPF3}Qa@XU2wbSzq#cxKv&3sf6JIO=!%vL5{#@YEdd{kyz30W4O z?c`j0->V?{vf<%L^KM>VHhb5B)JDyh-&W<`Y+3o<L+WnTIg?G<uf%7HPhjUQ_HH`6 z!REp}yYBrbo*T9qJ)4)OoW->!D&$RA_TwpM*FB34FVBs=uNz=FLE`1bb|cTllfQU! z#fV3o5sOq7HQwa5X64if9ZR>Ivpzg)U#3`P=SCVGE&6&zA-X`Vo|Em;`lbNiw+a_( zix#ALYC0}m#P5HiBIxMzkF1T{eo6JB%^j<6bmcNFbiMXH=WalcqS)UlUHXqQ8FTM7 zgl?4GtF^C1|MZWpuJw<yjrOg3B>iJqSN_A>TKk&cpZYPcEB(WkuJ@1Gwdy+LSN<@Z z7y40H&Hm}T^B-i6cBra)Zp+W|SL=1Oy*Wu%M$Rbc*{_K!CK?LAoZ_&d<G}r?hMTPV ze_6K|FSB3w-ssQHF9MSv=3I$5DfK62L6%ncwn^ESBSp_|eh~j4((B3NtuNAS-HuK9 z=q<Yc(E7^P_g7Rf?hj2&a5(lpWKYNP)IV`Y<v+NK)*qT5>ax-KXne%A_?drtPu`Er zO1(I5_T|ngCwKpKK5G9_U-Ez0N6=m&!_X<5?G9hx><DRfIVR$#rl)3fdz=4`(1(Iu zTBlmIy17KHy6Z*PO>$kT<#(`n(~6*@D;GtHnl1_xiwo5e^bReYbzz0Z*^Yyyhnbnz zlv{rf+32H_&RM$ZL#OB_i&)V*C!Mga&{Y=Bb2Pg*hZJtJa2I8?S>9D87~<N&{QS_$ zNhwGE1lm6JUp}e&MCi(hOCR{t|D@f@KeoB;;eAKvI`1++QC=mTf?qryxt%(Z30jsC z0m_{g@8)PU7BQ{7vPn5T?dyunwM8sD{6hWKpEmIk4Ll&NA>ypvw!7?&%AOGQbJ1J$ z&IIl#?%dm^x_<5{^Rod<mTzYAX8NkS+^M>*##hmAS??u1%}L4u(ldmw`^+zY9=ff@ z?`iK8E#3Tm2b`vM{a767tS`pa_+-r_`}Cc$8-$D(xMUS5t9q{65^%0CuZrW{t}g{z z)3i5U`ckELp+Ko`gTK}8r2<UKvlp+;_`S5z(!blzYI|2s*~VG33-fZ$-R+zqDK7A& zF#L`O&#{vo=N?YkI$7p=@ob&VK^|WU*G#S0ay&&jvQXLW#ckz+Z%SQ3man(0XRCd^ zd-u9~cP^=I$e8g=T=3fLfA>F^dwqN?YE>UG;TE5**zCk9H8VDE)U&%7^Zd5&8LuB% zT@7Z*4)T6c&9-4-VSb)3uiQ*M*O+qa)OLqxTgjkD(sLZDzOm-%{q48+^ja_f_O0sd z@>i0ld9+G<cyGGoR9`>9u#}~I`^~`6Ij^=Z6M2`X!y*~~IHNK$uVdArL(}En&)IIf z%CPL4|Ng6-CFiu5mfkM)v1jjp{BGy3Bj;Wl|L)0|m3uZ~%B8+r^SmT)URyHnw4~+k z8&mz_cm6Q_xn$y#^%v%LUip@^db-iXsLJ$0U2O|@wdXh96}~^4Z<x=ziLWnb%9oXT zoqWHqIR{Pm=@nJFYqx((W%2}>*(bKD7#G$SUz1p*<B>9n)34{~x=GTTs?_FnJkwLp zO!<{@Yk~I6zbrTR&Bzt^=-k(OUSZoZU6nl%FXw)Y_^8X_xgf2oX8SQ=&rMEypU(OA zO*_rLIn93dqH7PGz9xUxVLr3?ht1()o4GZYALgEXwK8TBTT<nM^fO<BX0vX5?$Y;0 za`kU7rM$)Sx}%H5ws}cMD=M+*%~DOfRl50#cdP63?Sgw|S+?ywB|2qkna=9>=kCXQ zdHbI<Q~&OkY^t$snXOa!nSBDj>!+T6Hh<~%;)lCTrYMT2q~BUouUGGT|E_O1leY28 z&gA9cnYY%(otWC45@?yZE3+bFZeHxNuI~rrjAj`=mXmnexol--RBc#7W2ScWuN89= zRkuATVo3dR@v+FC_Is0D?h1TS*wyr6YC}cSFVQc*0}6PQp3HEFl$2{v4z7?1a^W(Q zX)P97cdyOxgkZXX3FGzy${%D}A7zvUZjVt=>hAb0kazJ3=ZdCqcbkLC0ejZf>MgW1 zJ<p=Gg2O9GWUB2Q>(*-;vwnMO%sQmK-MnYft2%BavuB2%!`<gM?-M(_R&%jMslDIE z=&O6Orami^aqV@@<_|o4%X_Qk9zpZNkxB)}H_p{rl_ca{z1m;8`J06I>LS?#UnfUg zvu=AT=<nF?Y~VFTp~UQ3(b_*8uT0D*GIJCiKQ4Qp@z+v6-tsKI1zpx#@2uP_y>)WL z#nlt1@jogtWV3(!EHOcQyJ+Fvb(L0!W-Zxye52MQ$>Wk|yTUgvshIkN_p!z2XBEXe zZ6D2+3T##k3cO@<uc#`i@6j4|o!y*uUAOF9c_aJZs<S&Uwy-X-IA37;>od=5MaO0L zuRd8;JWZJM$nWcy{A*<=ChXZCIm>0m_2*NMU2urAZ`$xo#y$Cn=#`i)i=S!bc;-L& zGcEDfgxak}CVk7!wRz6D?S1I{;`cSb^cK87WEf-8^^ECGM&il~8Z4(@Zf}|qcj;w< zf_Q&Ysmr8UbK5^GQWLd(^vUY`<EXQ#yIu1V)}L_UdvuAdjB9Hxd!bza<?ze-zD6rw z?iW8jqjg_Y_Kl=<Z};=(nFYB#j))6x%iUw?`dUM8Cv)h+8h@$dOK;2cJX^J>z&CG$ z)272&0WMj3XKfp|rY@-1v?s&zTo<pl+OlIOvh{m4<|ys^Y^h~&PH*yt^NJDS+Gbi@ zX<eeae{5m`UVN84?Q<}2OU|q#yY3a7cqrkTJwqUP&Q@2I-V5vcElkyCA52+#HgM0H zgplc1d=l%7S5GuwbzA%WalK>bsw#CBS9$fknwc5mKQFm0(6;iK(BfU6-FQE~OL1q* zoIS}vBScE$i@AY__wy-hH-GiFtDMUp<P(_j!0c4tR-NVN!cQ=F?%tPlJ@Ux&sYz$o zDe0^?zNW*jzF}fXarV2wE#}pG<nG%R{M_-d^e+3&*IC~_TsdvY_*OHkB6Z%Rl`nU4 z=dCYNw+S--8|t*B$LObM`{x37!SjdrivF3;bfDMK`!1i6)A72H_B9!wT22_wm0ft) zY*t{-q+j}Ll@-e}Up=~{V!tM*$i%xnK=zy0)!D1>#A)u^o;_b>PtaTu>xwt68(xRV ztS$;xx4Y!}d!Lch)1AA+i!VjkyvgA4?oCWjzHwD!=dlZu{eu+`{J*DHARZPF{8t{- zioSaA_2zqA3=IDz@U@~HNa*jnWTvH+7N`1Tre~C7=A{S0u6#HfdOKV?Rp5W^lTDrx zMa`mO9=Tg@2}CJ}EMBs8n?Ua33rbsBg|@~{V%^5cnK#X8@1jMatG|Zne_iXp=hi$Y zf7@G^#p7$f@qg(5aJKl!Ox`Kc`d@tge$;+Gd&d0!nHuBG^?!b!_O;l+J-sI5XmQ+; z4gC)*+y3&fOIS(nk_d|1(;zO%S5?T7**3kVLh`OqRYmcPhaAzb*B;Y;@p+-VyJVlC zOu9sZ#FT<V?QA?B)s!EG%Eujky~pxo!Krq&44%VwDHD^UceMz{x!?WmUEla$#+av@ z<&6B~1P=?{fT`y>JEk<OPUz{2Wa=-Ue&*s1vxTY0zx>#cCi!!RUGCAXn%a3i*^8_8 z%>Md~!{hMe$HKO^S{!cw?VC|$xO{e%-n~dmr{#B_t_i!qKD|?z>0VRf*O!akR%!%X zuZ^-^d{gY#mo-a8-MOvgwIp0)jZZ#Qy!FPkt8J_Qfu3b%&p$Kou2k0#TDfrAW2STK zg8alkq<9Ob2hUo{`KEu}itsnQGuoE&ihr?NoAdJ7ylKBrq}p`v>6v>&^)cs>RGUsS zN&knLl5fx4K0D!nu@INhvA`*TPJxG7ddw3}X&j!CaB{{G$;P|0dAD|l<j8-S)1$e~ z_-uh#zE_3!vD+2yhjts?JKWRrUD7V$$Am;Nc}|n{-JQi3EiH`}&3>t5`PuN?$sa89 zxwfneeq(Micki(+aWAfJs<genzSm#mi=0=s<Dqn;bDw4B8`m5xkP}a->6GM*KlwxI z{)r!A;;b?=eY}p9|A;%r|07Ug=gkAb$4;C`iQKN;9JBC;yh1j6+v#a5Q+0n&Q9i|b zv1<NicHi8jGbg6?N4hyGT*wXobh7CF!E=-Ms)Yt!{`KmGmZ;aVxqPc?&UYnMBnJk4 z_mi~D?vYaV?KNB$9u>KFwd*du>{qjvmQOvVej-w<A@rsA4JqH{=2Kp4@qY5~x%@ve zi{+hDWA{bh^6RT6?M`mLt1S4vNOSHw4|UChh413(roNpm$us3%;N4B@7y7uhM;V#$ zPc01(owa3=Re-0Nt<BQg-aXFVlG8ih8Fn>q*PNAY>aw<^)j?&K;%4n6uN>2t<yl8- zQdjL*q&t)6?j!Ygv(#^Gx_IUmd({75t7{YH_xJQnDgCrFaqZK^%ffWTSD3K9*RwiU z7uY%>UNP)smg~GTf2U=B2<WkYFlVhx`Hqyn>{jMwD+5D+p0J6XaPmX&kDj9Nl@ZH6 zZFsYUKXg*c{@D1;u3eh5yp~>C;=Nz&cSm}pp9*(pz0B<wi|=^JJ8*{Dq;{@)<e0tQ zB>U~w+RpvenM*%ruQw@w8+u{FI|ZLhc|vkmE@T~9=X|8>%wnx=*>Zg|Ud?GYUbgGm z!!FYu&mZ=gRy<QYDstb(rt7`Xs`ZCvubJ2UT&w0}*4C)f*k;~OOj(nPeC{;GmkP$G zr8OvOhzaaUsz1s4Eg}DC>#F+?4vR&tKeF!P(d!R(HWr9hMTrOO?q8tyP$fi2?@+r? z-l1R786IA%wlG}1IPZ(V@{eM(CdEB7SsmAEs%+UBy8VgRhYu@T{J-iYWG{+Z+4n?f z(<ARI7D9FIN)J3(WIHD)3ogsP+x0qT-{NT+o`u3oe^|fDd>j(fWxdEke1q=FP3`6% zIu7_RGJEt-wm(c&`s4wbe}SQ@SLWp;wYJ@2bLE_y?EF(lx^IPV)??nB?}-iTW*zq3 z>dCoXefCwiIHl5xo-M0BWo=&U+iP*Fqd@3k>~4Y2tx;i$2MI<^5{yS)uq){m@C5 z1`csy$D{I5M|MvSSpMU%b;eYg;)3=KGd^fHrg|o<Raw9?UG?DBNef;DW~F7jSgiWd zeDI~Ds=yZkw)DO;ZLLCmF>!A~vP6D{EJ`y|nKI$go;@$-9KQc9erbyG@%P_<Tiy}l ze{<!}&M8vXUtW7JT;I8~(DK=_+lJ=<-Y5C3@87xgYx?dfAHkKtv<+E;(^(l9LZR0N zi7;?5a4?{cHT#fM2^1IPBqpckrskFSCKiB3nnN;kQvK7?ic?F9A;X_@1AM&?I|$Uy z&Y9KkwpM<1yGF%_0PbDe<+>_Xa@cw}9O<5(H`{l%)a6SoU)i6q{}6t4a`OTXB{|z4 zi?8@za9+=MW_G24@%y)Rb$j<YAD6o(D^ZXepd+#&V^Lbt)P}S`9nLM?e2sQ|&P}Hr zr?}iybliIHXYbu&(;IT^ms)#G#YJc6>C8}*IQX%`>OqpyFXxlhO5J)p_nh6a<77pN zD%&LgRG||qd42>=@k_cmJ>2M|-;pOFY}V;sclZy7q^-O(J2_9?^T`(3Zj-59*W4aO zeTYzDe)rvN(|pa{Uk`=9{{QJln0+F{g^*R|3prM=aaqdies$HWcUPt?&bn8@m|3yq z_cI&k-`OQ;M%irbl52!ac=u-7FSuIKbSx+B*Q$#%_nv%lZNuy5Qw&b^NSb|7JL_w- zf9CC$oA>^Hci;GCszdYNPfg)Y2j#q{vuJa1*Nb>Zw0&g;Rp^fCPx^uw85myT9l$27 zLPw8FNc_ExtOT8tV{g8B&&-qFMw~la+?hCeTTc3@HR|XmGELcFHkHM0L94^m$}=`b z!D_~ZX_wf#8l;Y{T5xq+)O4{|Lf`c!F)Za?dn@bi_t@y^yTV?t%Qc<%`QGf4DwC%M z{Wq#9epmLb`u+Pm-#<R7m#dKQd62r4?*{LB(Fdhw6?>VB5)QECZ*UghGx0>BQod4= z@kDds%5LU+T<R;zC!M%m^zdy#x9mN}_bNr&6K{9i(L1pF&4;`lhZ&E4kYl{}x<RNy zzH^Vg_`8<fG6h_I!SC}vJz#dR(>T!H@$j&T#FBgNE4~LR$rm3u{!r}E{}zV%Di8fF zCp?r>`fl~WZpVGTrynwv(lhcpP8fL3Q!U!g@LVQ<|GDf3hL{C2**&i}i=1)h6RDc< zOipoH_mNK;yz<J^j-U9zs?;y^vxi~+Qn9`NWNiHQs&~}PJ0ad-^RmJ0$0Fu^Eb-gc zb=tCiNsnE;Jz=lW)tx)S-&;P={t&w9v#Ia_4gpESgHjBaFD8357^)q(&iaF``Ht+v zj$Nt$|Fz8WF%Y=DIM8&T-XawtExxnXx2(+!5_U^IS=;R@?5R3yPgv)dm1>&~9jH3{ zjkns`dgEjc4Z%|JO?f`NyCiP>y51@hB9R!d*;4HNy5Op*4jyZ7FIPFt{_4uVl(|L8 zoAmB1E?Hfgd)sWS>5k~YPYF?%7OgeTnC0gj)5~^sht!(rcAZoEI(GT;F49t*#^v`S z@RwoGr%krDPUgA`3#MFKdiJ`uxyGzxxwF<4Z27GfrPTiGvSrqN<7EG9?ZSHnRTq3) zaWSR+Qa7LOIgjmP=}~J-Q!S+Y)}?)z@_Ld|ZDfm4d8*kSX>-3>r(b1%j9J^wTIikI z81eq#SFfPN4aZEi7OcK4$**o|KGh|tcYB!s=053LYt=M&^LWL+eH-~Fb6?Dp+f)61 zYsZ|Zy7_H#N%_*!+uz!iGm77)vE@d7l>Fx-d~IIYU-?vB^QC#&F}~XG--swO-cKoL zU8b?fW%uh_%7R;?JGUI&{rkja-oK1n%_aL>B|r4-bJ?`WTyD3bOo(>S^~okR*?%4# z{PO6lfLNkDiwlQPVB&s`yDp0agdf~is$t)!eTdQFnp_9R2V22?{PqG5+LiuvsMY&C zQFp21s#utvKI`pTF9Bnn1Hno*y!OiK_2(88F1xhFu;j|iIg{V$yKp#0G{kp(;Q8a# z5a0bl`o~(1{mu8gKj{2%Y_UI7%wrZeZ?l4v{+_57`-8<wM^=7M|Iy7+-@2dkL%HBT z#{VfB5>Cw(e;EH^4@dh0H9@|^zD#=*4t0OX7yQSptmNz<{?N3*rDd^)gz|aY$6s=f zYl{bNZ~J}qM3`!U18-h<Rh4oUd)(fR6GbyT6VfI|UT{uRRl1<3Hp4fiOv<X`iI8CD zlZ`cOsgHdw+>O1xy?(z`e!m)PSVLClb<ZUeJOn3Nx^zj3--www^*}MxY;~i~v*HWo z`HViqRvnWxITNxYH(p6HoXOMo)RRTOkMvrvygT!)XOjl++)wW5)>BeA9%?OU`}km1 z?CaIn&mT%*yI{0I*=SAgSJ&na?&8?1Ge1Zi*wkg+`XO+NZTHbt^4?c^A1YKHGKjx6 zLFyf!s$_`oV~%_C`DD|}^KWcReSgiYr0&+OB#wo~>Utabd<Aa$^!i1bMCqNC7m}^d z+b-Gj_Sa=4{_knAIzrvq<;?lZv{zU4=q0DwT>i09bKRG=LybpFJ*~{nIr#LlU-4nq z-n7cG?cd#C>GSUC#(74~tvBzbty$bMQ%;O0Z*R|U%bm@^J1^Z^xBgpV+=r~MS=Gu( zHgjujcXQYX-@2OP?_VZ4S;<zU>_|z<ks$N8$&6obRZU@D^-pfaoENqezScbu7R&e> zyU;#p&$`Y@hCjUzFMPj8Z%?+>a{a#^9+UNqH2BnSDeYBcz0YG?J27R4xsaKFfc)2I zOQy}AV>_crc;Do&>^|-mUX{0(HcyMYAkd`IdBVK@6YsGlix2q8uIlP}eq&jM#SZPY zDfKF1hvz(7Wc1g+`bLk`(dQM4vL70RdRrE2Ei_V;uq>L&SUt0AcTm^o9^Xr=FSdkN zlvFlNNj=52%Ua_9o{i<X?lGNeN?wzKk_}3I&s|x{zAda%?t*{A(a^o^MsMf+be3wJ zWVmK+hmz#dR|@l{%lU*X(C-Tun|yI`S&Q<-4Ry8a+FXB3-6d^*;ZuU$9-+8a`K;=~ zDa>^;+R4W(zpT6b%W?71>vOM_W$Rv;?U}vaJgVkdW^Vt*N74b=A9pU^TDW%W!d@1Y ziQgWUKa!Doo}|6wJkw`8#!7L8<*QGWh@I*8cy{H2lXLl5frz`R(-Z~ns9satuye0- zLb>-d#eyBGi5x|RhWb^HWIEK_75FPJHP@W4)Hrax<!r{=Nqb-OSlmrl(6?am%MHm` zn0UgTrS;Yhj`p8BqL%bNyO3qK_S{Z}qp@-)>+B24#Gd8tV^EEqx7i?n^KD}mA*mVt zY%-G$*YJ7O@@;qD<jFTj_i%Bl^K6%{8wNTByW0~VItSRXh+c_ZQo4Qz|Cja8r60K2 zIvTJG&ud=$;2V$g(&ur_jPu>u4(BQ~$ljiPcWLV34LdGd^LW>!m0Z`FdEPmc@5hPq z)$eA6Zi;DHI_YW&UySwLrH2FF3g6Lq_U+~b&r37f4i>ZP6nTrSSDDi&r4(1RyNx4j zy=+VC<n`AogY_Q$zEbc}vB1G@+xLaNT|qr%ksJ0cepa~Q%AM}!r{W9uUCuV*b#Bga z<L%wl8r^eu!rBuTLQd%_?%x)@YqC-E0-b`!=)cbv<UBr9m}e<x&3;xr)p~m`pUjCQ z_nQmmoYviRLN?95?~G#}_o<3ar*`j{I{U26^llq|N!j#;OOvl0o%PmqWdPrD=bZ^H zMf{&)9c#2VIZLw57xT#0noy%WVd_eUPrVLdvHKi+Y^((iAMA1Xu-k$E$R%E}4~e^% zr%8mJX1b)EYQ<c+X|9aR<TAY<7w0wK{<Ep$b+(?<Z2j}eC7%k@blYBQPx#c9I5(u> z@z)=>1za`>*3WL*v9NCEh2#&GOKTn#3(Z$Q`rPxgs3+@`?Us`!&q}gu=XRX=IVtPe zq|VhoU-t=Ja-3WFVsWj+t-0GK=p^1x{PO&>)6Oa4CsQrd=V-L8PCmNfr-NY$o8Kw! zu0-wlf;nz?)t|PWNR&Pv=qK}3v#+ao!`jM;*F(CaFRMgu2}|22dPng(?=116-7(e~ zQWKwj+!VEQqW**47^@HtWp}5Vh4Jg2KeaHtKV!v*)4Y48UAN}u`}s6=PoH_l-luy` zo}PYnUXzWUx7fZt-}DMDv&=j^QRlMeL*E!X{@cC_)Z_Z=TemnFDKAfPwX0tn)0vc( zGuv~5m2S*4-Q^GbrsUbNt}ZQ$@!-@s8PIUqVsiygzg@WL39~fgtT<EuccI&6ZuF|$ ze8+_2{Ht}b({+<w?i!_D3AQ*Jol+^_cgC$(@Y0e!$-HOO7)5l}>)Tirxx}54-g51z z_S|!aU9J00<n251qH@RV$NDFxw{cx>nBV7q(bWBk)IN)|QKqJ=r(d_={$*+A_>Svm z_qwm*Z*7v^O<#R+*4uznv+m746xFpgD=SQY{k#+Nf-P!#bflgw+m<S^i$$Atm+11f z_OjvsOA5a(e>|(J)TmoEB~a_((mhqD9dxBNQkheE)|b3{DbA?AQ$BHd&-t&XQ<+P7 z^mkPJYF!?D^iKv?$=XtmUExX5KkF~dWqk3A=R$7kzN;L&c$=T43zWQOKkNTu!R@96 zw<mG#GHS~6R(oOgxk@iP;PwgWip|%uAKB^WUvbzjdU2B{``u$vM(xTwLwDb`yEm(J zcewZJk7eeU?&cXeY@fKHOqDYzT{QpcYL1fH8r8;i$JRAFPVQ@4%oX%w>dDEByCQpL zg=?#S*SdWsVrk9NH_8{T#_ZOMKGsonbxNTBLz8&b?aLg>+p>Bls6Ca<PB7zKkgzkS zA@B1W$LqciwrhuQ9RG7;a`w*jH%B(zJn+dPwe;~+-T6#A=H7~Ywly>DY-MdxWL43s zM+-k+OVwE6<*PT}@1Ti7|0Lmx^x3WD+dB7b-s|$d=h1|>w|f4bDtooG(qvi1mE~RT zwqpI_QO894+1eahk2-sa_9w4=G%=Y~yQ1*b&;O+#KP>5LfBsZMPFSS(66Yxw$*G+| zi+utveZ3Sk&2qB<cc7)1(%z1QlPj)ppG;ajK__wFDo2S!N<qdP+mi)Xt~k0@=jd7= z(TS{eHdd(?hV@%k?Wp8kf6eQ7P+aHsnN@oGZk(Q;<(k5|Xur3<k~gPxX3Bw=N&8f| z*RJ{?GsQc!Bf^_=eN0DqG~2104y@8E5;HWvfANqwEitdND9$l`QPP4*3u8ZiIdOHR zapBx=|9|kDTFCva;qCqaZ+4D3vJ<&x@GvmMDB>H|BxRwpTV_s4YLR13K}I5cNONw; z>!8a40{{4Qmn>lvWnI6Z;$Yl@gS(lOmMXY#9c{XEC6Vv#LO18jp24E?53_#|yimC6 z$Kj9L`Je7k*HsP>Svd3NmpOO;e!K1c?fLrr`wyM@=doXGDR$hl*tzR-P|Soy!LHJJ zW|MY^9C+#$;}|XwE;#9WqNt#YXvyjpfyvi)b;ZR57w&B;b^h1wd3iQhp5~6T7Yq`f z`Ib+3n5U6xZ8=xG;#up3@EzIvE**^yf1V$6H|DYBLTjb@qJ1Y`aT-0;p61b=Q(w_{ zaQ=qPO^OpXa=%u-^OVPV;S=wFv+|4QmHS-({LnSr;_t)SFH-LwtZS;4`sL8hc;~u7 z2fI|;5{u3qZHX!pyE=;39I|{?*!MJU_r}o6N)sXuZOd8i;k7Wq<*<gFmc(TPKIg;A zJ{lfbGmeNH?sZOCr?50JYLjL2X0A(8^Ah|H?rCGy$%;4>+;;na_wNhJGTXWIEga<= z0&14Nu(Ekv71wL|kni@=nr$a8h}{Z%wB^JOoB5kv><{mZZS@ad$Wxh=p~SO3Z}OGk z?uE7?msi<mHD#;)mfRP%!R6}0#n%#N&$Ed-k$i2-kr~Np;z6rdyFN7f;gp!XJgd<A z>%W5Lo#Eg9pLh~Khj;NJ-JQ#p`hRLN|MHdfxL&}*{x_ElUH*Ap?>1LvFS>JPw{X(j zUnb)Ic9OAvOD3)Sa;C(_aF>j~U;puyVxlqKGhVNpI(-VWqxsto*HrB(G4C(0-MDry z=X=%_r@q}(Rae%SDjdD`Gt-%gt#2osy?D1=#9ZC_vXs#`7TeF?ql{Qimaf`jb|%wD z)Fyey_x*S0K8wtH^HlZWjZI6NDpuU)pEdD3w|e5oq`)-citww3F?Y&k1D&JG>m}xO zIVv8Sy7rpzt?U(9$M$wb#&#G5w*8Z03)N1RPitEuW*yOap)>5($4}wxZnr;)oV;8j z<<yYZFneM~iEvM2%3Sr@d0(nG&1<Z6bbewyW!eFClRT%diT@V2AAhoK^`f(j=E)`4 z1i4)ZZ~MmVJNd5MwGe;Fv;X)x%7pJtw90YW|0tt;OHcCbjFryw|C`vR%6v~>9QgjL zsQM!5s~nqELaV+%GE7_WmkpF7mHGDbXfQJ{h_Ex@Ii`k`Ytf)NvKTc_E)9zgmQIzZ zo5mt$c6ugj(Cu53a}_3JT#R^mkj=|mM}*~6pf2}Mj@x;BYSK}wwuN4-x|S7vT>5z2 z*KJmQ8?F^rJ@2VMApfA(_#gZ0-+4?eEL*Pat@!@?-sj5i*Z0@`k>uO**jv(HbHaxE zth};D^TIyxFmcVP2s_3oKF@i1Q?td92OF3q-6g);G%x1b!x1L%Ld(6JwQu3^*2fkH zU&OI0?ooKGa{8-b`TnNh7Y{Bo%(s%{IaLvOFpTG8>WqUN&6j!HBq!W7>@l8^aMF`C zxWe<`>5A6E^chb#^khozYT4xMc4kALhsA@J-RjD9whPan<Nn{1C;9x(qo$|V&qvoO zuX1m(*Gx*BD3VxjzVU_eG6|uF&AN+)=G^_bVM2hNw7-trW!+0vS1y-_#b5Z`a(q%- z>ggAn-YWdt{&3F?`n};EOLF(`-<JZ5++3w^g`P<WJG74J@7<3XN^-)6tF7~nP5%32 zgJ!b|%d-d_rG;A^k}m8}I1|vb$FOyu!lA=eCW&2hp6uabPEVZ^oT#))>DU6^LQzh; zy|ebJg)T|(yy3m^$EJ-x-bB<)WIb)3K4Zz9bn7WfizZAA+t~2gNN+{N5m(Xm4@)KU zSL|pxEo3FP&`xXJ2JJc<&Bwl?`44kNy(`=gZEMQdnHT$Vr{%;qQCnDw_pN@Ub$Z|N z2eoYS3R;hyMdd#}O|Dt=D7Z%L@vN@%A6t7~Yvma{Wy=e)wq3LN_*)&8U`J!a^^=eP zS3LK?=akp0&C_&41qH*xZDhHZtC&=M`jzc*CaOv&i7QL%yH?q>&F{7s+n?Dv{ecqe z!icVlpWE&VpSm1)!gtlTihqqZqO<1kv{smH6MIsr@w}!ZUue~djJV{DcNbkev3T-b z-PysJES`5~2yT0(YGI?hFej|4RdD8Vy$~D4x@9^0Uv(HH&3NQ;iKCzY%-N+aTjeY_ zHtqSB(Ve)MNyKfNS-0zwKMR}}>X_zAF54gPf5UsZ$;2M@71yq^nn*qIy&JnaV7=gG zzb@CTsTULOzno`$m${bN`Ec{Wck_%7?mKu-;i=N<>ni8}G8?CBvIWKNJSV1VIdR*Y ztC2^ddopi&EIjnJfBEFiO-`8+EBEFmOtE;hhclb2Fva}P)Qe%&C3}P3Jqdo9F+GpJ zIqXK`x3;MY!r^7n+pEpA!UE;jt$TKAPD)w)1wGAoH%*N`THERd$3`~)b<2ry`uuC1 zyyvTpQ&vVN)lAJyDppf^doO3_dTF+Ky49Wh(O1szOnkf~#oBsmsm_$%^tGbqJ?iU& zKX3O?oS2o7Vtz9r$mQ~~R284*?ZUo~Q#K~l2~`G#yRDm|wpF!dZpPC2Om$u_;+yy7 zvecIB?#VjDu<}~<1hqY<H9p>Jbv|Tkp`ImM|F0qFx&Nt_#mj0AJS?!97FfprsinE% zlxj-A#-e~Zt2JidH{8G@zA%K7MO)S5^op#%a#u@D?=SqO_ew_M_q8(jNBmybBwv>Q zdU@07{rxE873C=x3gn~eXRrMcQq9(TF8@K6a;>lGj?2%^F8HZ;NA*R?uDOyqJNb8R zp5ots_xQDQM&*%gx2;n1`-0w`71X*T>Ju=d*t+@nVMg)&<pwt-`Bog+c{ls9_Es;e zH?zvxm_ti$Jlra|>h4m>H+)w<Wc#PD-F@vL_m!R5bN4ye{`|$Fp7=gIqJ%{%FS+mT zjpuq-V`j~2Ot)IF@n`M3qP0P*w+Z%YcW6B?;k&vdGfH;jJ-5lx7p104scv7BDXZMF zPI1e%6{dHqJ{+H<r5oz)%{%GZfqC2SR26(S+js5N)?Eb)?wQqn{V!>s5WV(jvv*^f zUDnsjH)mTvpL%W0&ga>Msk@f_d9?NGy}v<kVsBL+*R%KsF3G=dVfz)w%E0i83tvfY zM#5}?TTXs{3ZhjN_PSU&ROEl`ryFl}iE+gmUJ44BVzQ8}(j{ZzrDd1gqE^&iyyCvw z*X-;ev(DMN`l9ha4zX+fIQUW9xF(eSa^D$?x@-0a|GV0xo9ku<M;jPhR==}dfB$Cj zxxK%i+wcF&Cx7eX-j-%A7Cy}z-G{l9JWf;yx{JuTw)gnSBp1avipNbVXcFC}`b8sP zV#tN=>8YEnH5c}q{u0e`^iupCE;8p(LzCm2v?4dP-HK}KjU>~I4n14!bL_@zi{kW| zvlH~rrc9c?e&hb@lJ}&~>^+&{b!ZDqtU|`?)Z-giqu9^A6#ufL?qcWc;$Le7?Xze1 z*(FOJUgxB~QqGur*=5xYwx1lzZ=A5GO1x%db^93WpOZ<~1a9nJcBpx;;$0n!b&V$3 z7K@j;nprEY47r`fb9$rm%%qn^>)#1H5}wFA;acU&(@PQ~6(hHFZR?Uqn_+WaMOkt6 zAqT%hYr1TFIG=~iX<wSeH?5_qOUa9gz582EjQ-1+dj#iSl>J<DXUCH(E?aw@u5IYe zvGLT(t7!hSk9D`%zkrGNSlo5J7d*GoTan=$vY;}Q&-U|9nQHHkUPoPHl2)JATK6EA z^Zkkn@o?2W%OBPHJ!MV_sW~yhKB=hp<Z&OngLR_w4~2Y`v<oksyHkJ0?@2q?&@ z*4lS)yVj#Me`NDk?P#6N^jqHS;pDK5GnVGaKa?#!KSehByv4eyE^8gmI=p?@ZP1(h zVCng5-j&9|a>YL04x0SmzxwowdYP49eHB;0ZRZi26(}!L8B%d)Ra{#1%EId2Id=Iw zXDdGwJ={85DX{iEH;dk^NOgS$55*bgXKwCM7Wn61&|;G;y(?LzyI9r9?XB^m^HX&e zYu(*?ZOfI6fTFs2VU5uf8~<NiG50lp!QI_4{9am5J)f_%`RKU!316MUqtJ-x;zz8r z_IwHNTX!Jg?uYAcQW2Kn{Dnd$GoR+Io^riCC%MlnbDGZN)!wahL?l*nZ}U60I>!In zlRN9De_nUy?4E<Cb5>@u@?CF@G<>r)Qb$tuh3cEz*KRDEyeY@x-A^yBiCg>b9J4Yu zIyH0J(bi=TPtST9w9!X*wNP18W}5oBCq+y~`sb@+_vm=-R%)I8_v*51d;YlP?hV-1 zaZ>H`vZ-JDemQP7aJ<+t`-5L?y~<JL;HgV(BX3PMjP6wz-u+~M;}6lz8;my{RLL<s z9lY}L;$Y{yCxe6Uscy=?Yd7o3D|5YA%hTJK++Uwr_4M8gFRArk%QsagENK6eXnyyk zV8cE+vyUtN=gj{h@l7yyc__D&3ZvBGjnx8~@_)rPWHRoX&v?CO-I`Ue`j@P_@Y$_| z@n5`v#omsDL-M=1H3cs)&H8Vqa&|t)1vd@BD^1?g2g`)mv?o|ES@DC}YmKeW&zeO| z#}_5Ol)GZ$UQ;8;yFcl(ZI0)5_xDM~)vUcqjM3Ik4=*TfD?O1|8PDpQc=P$=2ARc7 zx;o(>jtB+p@>=Ea{c?D4!@TMfm%qun%sb;>eo^_3&y$sZN)DY@j54WbwXRzgwZDNm z^!4kMvzc+d$FwrmEqH2SY^|N~wy6BY{_I=xRT+OKa{evfExoqWVN28U+U^Q9!5mMI z@`4qXg1ek8woFh9-LTyGT9ds4@9B-MHr4E#PTQ30s(8HHU;F=k_M{6cx&^=g#T)XA z|6>I;eA%OQFP>&$U|_*pT$+<oT;><$CYHd<%dO!*>!saA|M!)y*%P;1Eh6*kk<M8r zok=GJ6<t|(nrxkGCU}H>WATZHFQTHnrPr4o&6=tfvot^>fJ@}i!=fWkji#J_I^prI zEic#qvHZh$pj!LnuB4?c3iV}u=J&rpv;KT<kL3Ty@%ejL`Q1MF$uBd|O=gpS{Af)} zq-5Ng!sl~ZJ~PHlP<*(kWlPIXJDx{E{q=LM+8sQqp4#&$Sf_ec^r{}#6qS_7MTQ9z zyJh-)i?#KgkEiNQOOep<FxZ(~7&yhS#lQG;T83wn^5PzCBfbZclHrBDp?bv|kFapZ z)U@rM|MXF@ke&YJS^ESIY>ug)*!_IRk06HlX&?6RNXAe65Gu*JM`1C4Jokgwj5W@O zx|#M$p4PD}vwY04N5C@q=FS~aA;y)u`xaRJ3X0kN>d4jfIXmJ4ilgpaJF_M&`{oZ8 z$1AMP)~i$9&&PzVU*Wre^Yn%{p4zJ=7rVbZwV<KA=?d$g{+G+%+2|RR=g&C1s&&!A zt1IS;&)EB&TW$4T%d<1Lo+@h#`;hS@Z~KD&HD_*w1#X_3&D5@R)sy$?nWO2l(dNZl zcJf~Qawt{z@q}9rlW$Fly5Plh@We##xwn`adqVe=1(k+0sw=(C-j(pW&)ZGca#rm8 z?AwKnzqwvby0+yY)3g7Ib9PyTB(Mi(9C$C;JZ-~EC;vm{qI+8MJ%4O#djBAm_5RV* zOvmr(wlCM&y};^-!$Hm-%^z~>xZmVg=%q?T`I#Pj6SH%{%yW~&jiWAJ)D2G1NKISg zG_mKh&>>#0hjZ#&jc?xh{(9Q1nc`j3Jlke%&xx0Qu_P}z!Bl{&u0dYQqS=$x{!l6F z>6keOw7Kk>`n5o}fjwN#Ro5oXbo_nNchR0?r-Pn0D<5di3EI#UuKFkDpnk=o_(!{1 z;x&JmhMl}09h0tew?yPmo8tbpLRG#8-+!oPT|QCh#^r6RK7M+n<Ui-pycT<nAIkrZ zL}d%brO&n3{=xlk)r0(;HHYeMT&-(bWfqY+SEk^c&eU$#(`8$7W}FWxHF*=Gopo|U z)9f1$9`Ulyt_Xfm(7pdmQDWnUYe^N3rkj^;$ZK247oB?QB>T4FsNevj_Wj&0w+~PA zkh;}V7iye#<;<jMxq+43`J3<QHdcfi9Z}koar5Cbg`1c6+)`Wp&@$>>{ljk?S$9=k z;c2f~-hb{|z`A~xUz!_DizT{Bth<;N=CW&ketPxNjKDL&&px~Ko#Ezrb@gA*TG3N& zi^X~8Y8D#J)e_(KZO@ZO!E=K0C--HqtiPjmd0*fG6JZ<gc8}C@fz5MSW?kleJ7sOU zzMsC{G?V3_GuCmh|G)m{YQx;=dtXg^7qs$K#?6bpKbAz5glp!<7Hm0l@Rw2SiON|Q z9=%Rj5bG8_{jn*l^2*zBG1fOSK7ZY~{qn)JFYRu~8N3U1xu@za{$<VN^}il(S@!&s z$;al~(!w|9ZZy4mQEl5f$I}@Wlf3RW_P7}PzIt|aZCKQS<5^qcn?oP34PSO3<@nOu zIiGy8i>k%VKLms`^lra2V{_={lnDyf6R-1jePiApoqAknv+SDPEkU!t)dVk@6Xso6 zeuj7D3)x41rmPkFT(zvEFND>vq#(odg{(=Gd*!~hIY!>aS-Ce=4l{o|R`Ax;ZDvAD zX}{Tbi<9A(WtXySdJ*33YSqKE(c0$ftbG1Wdv<@d+0x4<vsx?DDr4>X9qr1o9r0dg z&xa>Z(CmMGZb?+sBG!tRo*tQR63p+4{D0;t$$!z_bn%0D{lB(t{LT*wU)@ys9<bM9 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�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 diff --git a/jhotdraw6/lib/batik-dom.jar b/jhotdraw6/lib/batik-dom.jar deleted file mode 100755 index bf144ab070ce2acf381894bb8f301837a8c4c63f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87407 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 diff --git a/jhotdraw6/lib/batik-svggen.jar b/jhotdraw6/lib/batik-svggen.jar deleted file mode 100755 index 819f2da07a4add1334ad37e333ddb38bae66bf9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164659 zcmWIWW@h1H0D%PoT}B`phB+A+7<^qr9CbbY-1I@pL>M?2I2h2Ci6ATUb@cOea}5sB z^L6{|d*-x{x31nrUT<Bkb7#(P4l=l6{NQPko|mtVr|-qmRa=4z&S*1o&3YmEspw-7 zBSU~UJBNO<Xp12O1A_qr1497ZWnE}4V_{%m$S+C<I||}<bQRoC6^R9j$r-6g3MZi% zC5WmpDX}Co8;^1cY|4wv($iD(z`7toG!e}bOFX(9lZs1<5|c|ja}(23JreU$a#D+2 z^OEyZQj7GGa}tY-*M^tJNMD!zKW}2mBa7RPee7}@bCMS^YH<2RabN$Mu##1VdE4q` zrNtinFE{L1yj*y~vRtc6X0o1lmTAA6XEE2zf~j3?iEsAym-njsOWuEszkR=Yl7j-{ zx#z;iX7As7@4ejr_s;zbn0SBmH}TytGBR=#S#xxS)A8h~FOKBq?K#mKw{Oo}=Djo4 z$0<EtTC>mj*y)r#F$c9jc(Im03N?z;eQe6Lt6;kH`lkx(A0K|5y60f;Zqb}WGkU5; zat=z!zbk!gGXMUH2fjP}kIhcq<9aMw^v$Cm`Hw%}{#h`;Y3`2rW0I`z4_N>FpvPLb zCtC5=`-g|CMfdQ(e}0(#$G7It9|Cq~+6&M9Tf@XJx8jidhd@^O!^eNV68`gMa^9TP zM=E^^mUyy?e^7`|-RTotWBT@(tGQfJa+`eZDlY!Vf|8rLZWT=Laku>Fzx$&k->(@x z=TH5Z!&1Iv>DJx)m&B)T*jpSRebMRG3Ry3MVvUl51PAko`Aa2VGG3O-QcI}y@ZKPH zchZBCjLS`w1z&B|z3Xvd@0^W6w#zcTBZN24NZVZIE$#Pe<Cd1Qt{=ptJvPpeeU(&p zsfT-4Ti*5=Y?Bpi!<(`rHg8!dVYqWC$Lj(w@8z?(w=ZicJ-Xff7kj5l?E9X=9Z_|` z-m9)~P0Z#`Wn-Ih^pW7c$pNu#d8zMn+vcWh^Xtj~a`v{90Ee!^g*Wr}>#eA8=Dt`U zWA@nP-qwEYE%Ar8?h7)WI`2oncR<wfq?{Yqe4Bfgs+cOzOOmx+n=8~OdUDd^dzn$4 z7czo%MAY@SF1sOM{N~O=vo%L2>0DWV^ViCNDwT-|ZY#c5R9hR*SbB3==?#+{vo!9$ zjY6{3GX&>f|G4s@QOu#ELNQzZg)}P0+fCImU$#|n+kyDnwAu5LoStrynfCST<Y)0S z6Uy`_UO282^Y-&}ZxOyC<E4!3E0f%M7OBb4TqvrfU%q;_;<||m&tIN@vGT_vhWo)T z%UsoUFN;JTO^og{W6jg6RC%K(yyKsd=i__g-cOVF9(r!S?vYTO#=+ej8*Xp8eWpin zes>|~^)t;Svzb=3@;+(MIlUz$=GcO+=#Q16#~q^BPIC8J>YH%sn@rj%?K#<Pp=Yup zZ~x6IucMqc?nlKx?C6U7;<+QMaBhGgtLUt+pP$!yYDIh$(~9z3rNe#hY@pmiqkSh< z)_NYB9$Ld1uj`<@hLOAA`IV<#0a4CJ&swZn#O}WGh>mzz@s}#2Hs5#JMt7z;@qSx2 zIZaLUyVSC`Z`0$HCwqAYbRTv;di_J`sdmer9Vag_&Fg)cX>`c^gRkWMppUscVm3(z zt4>FCiPwnPU%MQ6<mWE!Nft#*I8qNkQaHsrho#=fc!z@FWr@UTZ|4eMG}}9C`j0C2 zEg@}{hvP)=A1vR=xZizYoYZBbed`~w|5(^1|M6kipNLk*$-7@I>6yRchi2WfN6$T0 zdnjl=7MJ-oU1nBWo=o6J?LSe+@_&33HmY0wsQicR{yL|l@*mtecMEkF?diFj`p5I= z{Ey<I%MCOhuh;t5wtw}7V#PHpJrX?*U0agN-|oEd;>C-{E-rJ+JNx?kySvg-i+QYE zUE|Lrb{%G{VsqB|cQEsB@X`Gr@;Pr$tDUX7CU#1ZR^GwS9qRUaUXxil*C)+L&%PW~ zXM1D*HeKB`?gxAyRU+3eiiq6VqSNhKxh6G;d%_B11<l=C6<7IiP2HzA&9B>N>%N$o zC#PSCDOY&tAUWgGz61MX>Nl3|+~m&rDEgJ{{VgJaT2pr!Ce2fNvv=Pmvn4+1kMysv z+2NwJ%=P1vswZ1~xoTI1vo=<kUGgke-1xbA)$VOGjae^VXls8dJ2hax(^<W94vQor zHkmK{6gcJRA;oO5Z3-$3l`mT4o?k6;KRH=7q3_G`nXV`AzUhA=bL-$2mq}I5%k_mG znymKD@hd3wmOi^VLo2gJX`-mbMBb-6=E<2|UUTI&_butfBB3?2jAKfQ6PBLK_-Qxu z^|Sqtmbr6W3fr)uz-@X(i;Us2VAt{=QGfnK&YZrPW9w_r(s1qWy(vM{UzV;YzWBJf zU8v@?sn^75mL6PtcWF0^9Cca~+2RvW?)vepy|c!RqN8cCGt2sY=B9mfoW0<;vDxc) zu~QCtZ+rRFYicrktxqXqL9%hZU&huh`%g*l1UDb57BCD}cK)1pZ*GU}R|TfYTBa&C z@_*b#Kd5K^XSy|a8Gp3;*^it%&MCZ^xLmQ6&GsE<NZLZ5MW;R*T=86E*UkI*#wE!) zZ>_jXWv<>$f0#3a*IH(Bf$f7C4p&omFh|Ce<}t0-X4)I1F6+7F+@fEBzotmHFV?Q$ z<J+-8cK1fNGj_i=l_|RHSLpR~I&2l?`NvWD?v9f0LTuCDeLEnsj<4dHeFtyS9f>_X zSB-Coe7)k6`1uXbHkan$8@KLGIJ(XF=j`ksz6u^1U#AC%u25f7_=Z#9#5bKiN#WvU zXA;s&*mf@pUh(zKxkc-aO=SIhHMKCeH<@eS&Ce<UEoZ8ktUV^w{VKn3(oZV6<N47X zWyRE4hmAkDHwTF^+D&lzn&{pToWo(AJ?C-;&+e?4gI!#^c;>DsOf8IEu<zJSgVxvQ zxv%RiIrr(x?abpV&ADHR7c!?_bT#peX!^(UEv4{r*Aw<nPx_y==AWIs-}BJj%N4h5 zx71YC?UY%(_q0*e(dtDui!UEJ;re+lFYEKxo!v_|B+LAk)>|<1QF^@Cc@FEH_RQiN z6yMK~Qnzf;`~LioQEPgeY|M<@?}t@CK3)3X){W`H$;JiG7d#J;>($6n;W__sPjqzA z3-ODu4k%g53gs`&Q2zMO>&%sai@t^|rnO2lS1di59pZj+b61*w!=`63&v~>KIdaX{ zv`FV<U$Q><&U2yjyxcEqZpjKI^4>9NHk-7yR;XIVYa7=oHLo3g8An-^rf<CVc}=E` zwN>W{i<pv2)}3BV(Q_xu{bvU?%68anGOpubU|25%X_R4a<bc|aphj6Dq{#(oNkN-N zutrXBn7ea+URi2U39NN9HTZVkWd{M<*|UYO=T5#*uz$yvEq<4-s0!(eC@x&a#qa3h z(sku{?_S?KQr4Ty7tUuDQWTo{K(Mplsb_A7n{IE2eMMUNxpS6wkN^IC{+nMV&^h)f zR|)HDEujm=5yygArL`_yKDw+aJu+wIi6rYNX{}Q$G*)Qc2n-0`aC*XfPJfn|Uk4lC zdlsrmX6f3$m|1gR?LLFuF;>gdEM5to%PF6A*84*(+flKFU;Fqa!lKn{j+|Xs5;NIs z#k7q_3!?)r|A|@owB_Q?Gup?CpJcb$K6dMQ%IEy*z;@R)ab`yfuN?olcgBj0DeHqW zx7okhwMduw_-n%{J;!*S6s=G9+s-*{nw_9g$v@?e8NUBKXYJjUYsPH%!up!MWA_vD z6LStoPWV^LTb^JfqW5I))5Q5bmkPMEd9pw6+8dnc{>pSp!R&`emD-mT9jbbK_`>9K z?u8X;osLg94j+5^^Ht(~`CZ%I{S11~bys><-jZy8XGT}n^QJaOl-uUM{&BCwS+c-e zNWWC3)1j+@t?=Qq-|sp%WC+aW7CArn&Mv+(36_m70*d_Gcs!M*YEJI3+L5ups@Yy+ ztKam*)^%sJK9%$bU7XG=lF3!5a{Td$6Ek*y+2_7`dW%oMowYs(w4Qs&_)d^fcFml1 z>5PQeSMh1*C)#Q~QwyjMTa~O+>-fds&hh5R`An{EhOs}no)*XGxlB8MN_CNE(3!x> z%-_;mBqk+Q^r#1Z69*-}ZQmBD%Q7)A{9(qI_$-KMVF!n~yJhB-q!wW&LBHD$0=C{l zJO^W(Jl~54M-|Lz%3QL~By{PtfGAB-p@|bJ?%a?*p77?xy#Tw_Q)jtp1^td#DIZ#T zt#cL!i)h`4GjA-dHy5XU|33e{{e**7T9s!GUf3|_I7?6FnMWJjrrH!WKj>^*9vpEt znJZh%?6bzfO99tD_#EEV#@oi~-=g%)sB8P8fUe+^8{+zt&OeiVx25&&lS}rSCJXmh zlqJ`vKbP5iYQavWLc33Vhim>$m|w74`|p8etcTQMFJ^Ig?J{7y`q$;{?3$<T`)bZ^ z$c$T^lsR8<x9CnK+r4W#r=5E2o*0#JQ72Ys>F&Vok{xY5e=j6!%-X7``Cwr>|Fq6& zlLbXn3eGT|viH1g|7_ld`(@F(g52MmyUMJu3hq;v@$_U0)Q!D*)Y^W6(z=O38}Bbn zTV<7ZFioT9+^>1+xk0|id36kRdd&spIK#ItTHG<4M}OTU?Pqhhy;qrfE6#k%zl}HS zN?qJf9^Oz?cf;*c->$~&mWd{_4sq;uTySpd%Eb+?yyr{r9A|DjmHPFbiLhj``@if7 zpXPPUkePMX<H6l$iYt#K{0(2Q@$c&C6SqIM$W>6hn|f%1;niM^S>o!euARQVBkE>q zm1^;qY0ow~@awD&VK{NgCCK~L@@W%2w!f@zUo`#59EIJ9Uk|P^_L2EA@ui}7Uf-RQ za$7#>pP85VDxq*!{~!O=cMhKsU(x?i?;Y=FkrPInEMIGHIj<QL@QMGS($td^=Bibs zy_NnlWm0NIhx@7D+@N%M%2<lgh>3wglm%b91odNa6^hQFu4xK#zYo&kv;LZY-Ht7d zEtbu%jLoc!t*nfV&y8*0mn%Z&?;QCO^8Cn?o-0ajY^A)u^ZzU=`Fn(ELPK3pl4shs zy28k+s;qf-lbo{M*mPq~9ncCo&}A$1IjG3t7*~qwG}TwnRh}(<{aZbCsoHb{qm0Lw z-p`vgJ!;C#o*V{gWoBh&VF6=f0|SFi21XkUHZVo<fV<=>?TL!r3=9lcpj~q8rN1qn z42bDbr^Mn^GZU0<?$nUGMVH+~{#~mt5)qUXUUA3ib^uqAkbC2j3rD6*yP>wj_sxVQ zXO@(A?<u=-Ym$4^<0qaoKJn~bV1DkxnJ<jL0%XflFCKZkgL&4+b>H9o{QIru`TY9- zzoZLAK5XvF-m&&Th~VMe%7}oC9Zpi-nGu&Gj@>nRrx_8r@Km+v>Y|@+df!ED0v0}w zX3f^pORkl2wV5*My@*ZF2V2Ki3m;qk5p=wB#$MfH${sf59Vx$iio!BC^A%e<-n{ea z&otNFSL{-*ai5xdf6ar`)kkBp-~W83Ry@;x=kw_{(>E)}ooT=ISM+vPg{=0cAe9SI zJ?}R?>pMT|oZ!JVGw=VJx^GF?>|MIq{lEKe3q}1>ES1jP_CDA=qpGg`fT4a#1mFJt zGdesTzwcxjK73WU`Q?uEg)Uz*pWR|=&T8MrBEWyfnAyE+O>f-hlQq{kM7s`0AK(1S z_TJmVK<34B7r6wjmASd*wCs6akv|GuqFeiKypu1F<fslktZpD;qZTnI#5*H!Qqljg zrJtKjrPer3u=~9_G&V46rEhZstCU$lP{6f-gThVz{Fd+6MThObAOC8-&Pj>y)22^f znm^G&KY`24)W&rx1B>}TaYbJHN9w%MMK|4g73`-K^;_p=H?zI@m!*2-lKdg1(`$s+ z^htKKTe5H1vSIDqTWJx+PaJQ()2LXMC|)h~EwN+!OqQ^Y%K}f9Cu;vxzA12LZc1dD z@2%|5h3qWh_x6`;{dfPgP|a6Hem4VQ13M)H_0KQo#NBY`mcMwfX~&||r@p>bzan-i zndz|1)1;f5s|6*~^(S$E>kZhy%{{>6c%+ry%p*TF^`e*S#t5mLEsDH0g(v5hSo&4Y zRlEzIeRw>9bHBioGbg94^4%eQyvWI&S305n*Tlmg?RK2_P$S>fXgP<Ur8s$U;`E)p zn=cB8Wo_TvkjNK)^v<++F9Dwkv1=>~cj>9^c_3r-SzY1t@($TK3U&^U&Ig1Gh|iyU zxySo#E90b_Az_u>B{H|W^OerN-XWOzDrvgi<C`lVrZUZc-2GxxpGw-%IIC8zB;WO~ z+p?DI+1j&EGBaOy_GMpX!-lk!FX8JKN=5#?`u;-Eu8D@5m}5@8WInUUO>6mn#rMkf znyb27&v7e-1idL<et}=if5OVSk3Kmz&QaJs?}Vz@y+>X=t&C~yPw(;+3yTQtkN#nG zszA-le%c>pE(86r&^Ly69OZ)FgR}a6)0l+~%nS^Y?D)zwYm&0MSAeTKN=EMueHnB) zK;)ku?-FkZ%>~zFSv*e*IS59&EELgD5D9Smb2#R-DvS3l&)}BwPwnS4I?nxIu$%JO zQ>ry+LfNyt^q=ou{yb;<^Xu>5{wx=ory9(<Ab8}kz@isZ7PcuaJUsW2qspDF-fsQ^ zwT@rf1rIf3|JUd_F46OVvrVa@E3w>MDLLergtLj|#5umcxo1*?jHPEzy;Aavms7m# zhurm|J6E=b9yjx;owCqwra3pC`CQX^+Fi!;R<B=fdwzoMHY1as+O}PWhfU@bw)t%p zS|217pFCmGPv0iK<=-|RD&pA{aLl-^!(j6gkM~7$w>aC${C|+qrhQ4RJ39K1*z9?Y z{JBrIE?tx?D%&JpGyOqofX>-n1*gu$%SN<F20YGWYn`I4UcVr+H@t17LfdnmfC6S+ zp6lnNrW_F6bAW~UvWU;3Shq<Ft@B??ZLcVc&Un8gdCzsO>Roz1XStPMo_hQ3%0A_s z$<HO4)T32%XC3l;R<TflYszC;?-zA?OYX^fmpji2ns8`Kk0k46kJB@P4f<In^+k1( zJRR9i^E8XMKDZlq>bQ=%dGVpLNZ-oH?UKLrKg|}3-ZP_E>#pQ4y-$&`vuAGHxivS1 zn>qO9()ti%lfSC#e7vp%q+TgJE%Z!n>Bl)qtCp-h!W5c&;pB7`9{yDd4T(EeCE4z; zk>)z2$sByORZH({&FxJ;W7h_l{GC*0JpXFUGSlf?-(yoGr8bA0?$c0KUl|whf&0Jf zmv`SCHT*xW>Xl6T;#2d?U+HAQ?Ds}zVn12vcfJx4V_h1S?XBA!v_IyF<zdT&6`{-T zSGfkilIHn5eQVFE=C1V%r&i?)JMdbzrEO`L#V|KZVA<!d!OuCiCchHgGTlS$u<xY1 zi!NKdIw3CMA=9Y3$TVKi<4?nux|Un-oUgd1&f*i)>2!V_d$GWzh~=rk*ZB|s<^Ap` z&$x5cR(@-{L3U>D+kb6sN9V0ej#+uILuB%l1BUA^9bc@iCcD_Mp=iQylc<Yso4GGJ zXcsq6x2p>Kl5yePYpL4U+(+C@^J})c70<XPu<K&?1$j_I;@G2;l|0N03@h32WjZU8 zGF^ZlTAmBZ^}ie-Quog6+TJOesY?607vv-dIEVzgBuXc9HnNsX^nbGJ?$lQ=X01E? zbN-(Notrc|?GMPO+Pqz5U@kQ4&i2or?p*#nr?~#_zmLLoKFacqO`QVo+6`OSh18Te z5)RE2QdF61s;Vg4By}i<CGm{qx6eXyZUTp$MEXBO99q<(&f`4u>KQk^-SKx$y%#Sp zdfjTybLyFO-I1$O<|d`rx0N_oA2XP-Qkr+RbXn*1S&MELe*e1bwZt};tsc(#hAh)d zowtWes0r^a*gGkuQ*pw|a1P5!*;89HUzf~pQEgjcaB7K$Oi}NaZaJC%39EN02VI|a zb=3x!qoyAgeBHI{?v}I5d_OeF3+-uH&Qs`nBlg*PyICzS{Z+Vmj5N#r>J{dBd~4H8 z7Ma3xVn>(7;S>MaWD6uuSDZT#BB?Dg{X>&t>~@o>v-i{}T-ko-+WpnN%D%#Fui7RS zKDp+yE|vTA1Jkw(FT?aC+BO)O-plA<%k**n93(hn;a=g3-jb^$k|SR1blLL8cxKV1 zh_FsWafRp0t`;#E32ibeig@4tkoDEE8z*nEnQNIQ3QlN0Xiz>cIxM7ebK3VR<1_P~ zZ;n3oTsKed#nWRo+cx}NFDKFVf75MM)qg8$n(mmi1}=>GzH&#Lo^^=eOvT;zCK~j_ zH>kEP<qj?RFV%0_a+h_QM^4;>pzGz@7x(X|W<0lW@8PhC(RuD)l-JIGd^2gGPWi5h ziEEY%mTUZ8-aA7lv1gt->jLxFQf-3lhefS^3M~A5VrKD_IGtDOx7a<*yrSgSUCv~6 z{KWb!ICsO8N59$XU$HdqHDkMUoI^{<_c%xCk%xOVRTsJ3p3rajgY{hbVdp)bkHzw; zS8VqbTM%mLn4^F8){ZTvwqIqZ*S`3+%lWb1U*_VyNn4E6Z#DX_6FqF(Q@u;k-+aO^ zuK(%&w$8;Z*9?}uILY^)5tK{J<J{luV`5;~%Zi*!&}Va0@#T`7%mVM!N=O@fYT!=4 z!wv$q($<ASXKGudRWuaTZt-(mV9|6^;Bzf<+<xFxnL(L{8KYfmUtb$rr?&`)6qg;B zp_&_$$^?zFduQJ5sWjfaKA*q;LcjqRG0iV26I}AeYG0gBVrXV-<9Q-s6??J3`{BMV zt@o$!<V;oE`hs;{R9eLB==ELG9z2RDbZ=|lqr)62{%=}9UZL$8>zFG?=4t<27jTa; ze~XMe+n%K9w=1>QOh4psQaE(ZcF8XuZHj+ao>*}9tb5U?6`Ft84kze5?>_Kw_U_P~ z?nh*WC3$8WOfWM@N)kzCJLWs%Maqm{YuhKizk2P7rt|spUGl5G$%kaw&*~3beCS5J zpqD{T{Y|%{qNYF3i`Gc4Tl6aKfyn-?*Y_PZ`5Vl|u-Msn^3@aP6}-1KFN#!IAk6pt z{ee%nc!jPVvfa{K^H9vnHT(ek>~F%xRh)~nPW~|!n*Om^eAnZ2KUUL2lDQ|V4leoH z^F*>JaNXAym4lW%f0=e|Gr6bsSQZqENxfd@iWwOgqL`3l5q-MM98WB|q^2d7=9FM| zDIoE>H-fVw`l#SP^J!n6EEkvG<hn$lW3I))X)@aEo*QHo{BqRwwlNp-$@G2DvAwOd zX^EHr#=Fg8T)z4mOGTur0yAD;FjhI}SD<*InPG4Ai`x6&Yvs2Xzqh@)N!Qx!L+H;v zzst(gp5LE&bLLH(zjqGzFJf5jvbZPvV;<-Gi3RI>iuQyrd-*$MM`69<u8(${@25XJ z^4G|&Au+G-!xv`1nhTxGe|{?7dvN&AS3yqsr~i_L`cB>GVNaDgT*#@eVxyAGve<7< z$)hRU{K-DYj(_AZ?>}{<aMtYODmHN*Df0^+PW~~a#sBn*L&AHCj<r_VoID$BQ**2J z{DaMRYWmvemp|g(^H)6fhtR$^N5bb+9P3P<`(u@GeDR~#el>?X^FO71_xv%fCI2+X zL+dj?WApZ@KmPrL(cFH@hs91&zYWdpA8wuh$*}I&+4DaW_D|TzvHwYH{K+4tb%zh% zxB6(!xqte_V^*(@$*24gtbg=yzUrT&o%>I%IC8(DTYYC`SLly&&i@lOUQhX<UjMgy zcD?tH{+`u^`&*tz+^L_-<f7Q3BIdEkLCDPW2J5MHIoWS_<kY(-R~J8j+8aIl`}=!0 zwI1Z{j<a3CmYlW6{Km@Vi$30CYix}c{<vk`v9GpSI*U0iqG!*tF5CL<l~6?1rPa(; z8^XQ6uuE50Eh@|n_v&3<Ewr*ONsnu}N$B-$ORuEFo6Hf5n4_$;^y`r=8{~4Xf7$2K zvSRMVijaJ-Bc5G1)E{`P(%fqAvt!+<hqt7HFTZSilht%?((YZ0e^=d_G%faG-PZ8i ztJ;2VnR1|Oo69Qm6>60dZ^FL5XiWH(kiTAxf1BR~!Rwn0-p3vN9eQ!&svh4}+fu5k zwoDN-%wYBUyg>7fOxNq$S#qj7`h08pyji$bWq;$iu}w|sNa&T-FW2szp|@h)OyyOJ zzKC3V^~$nv)0dz}xwkIv(_WhSHfzqc4qF4`-zh=K?O(47r<r{boU^3AZC2;gHFK|< zZG1dqTYg{W->4Yzj9HOc&*$ad-m+s_&{vnPJHFT1zOn^dGQU1_kYnext=!Vv{CnM# zW~FvF$`q*0*^{&O%k1S}Ht+nVd-=+y;BI%dE1&)!Dm-o?qsiQUOZK$Wqw|ptrWfD4 zvW4bIW!88pMA<HWBOY7TskwKj{Yw7Gx<_aA=lzW~Te<yxPM+WmTl4x^@(E&>Y$UEt zs+y9dd35tT9}}^eLZNzRCf*TI)yz~nXPdKcx4J-`U7kh$kCWnWQa+2l<THLNqT2d- zc43+7+2}1!3#*o2E4EZ!@nV5PWvTDJBQGvJO6+<gwy8J0bJDXc6Tv$ZFHV-6TXykE zopY3>=WLhV*%~V)Pc{c_I_%>y<>0F2$tzAy?wB+CkfHKljYEy)Tp>P+FFju9cKX;D zz3XRs?mwYKg=dl4+T$u-ONBIDJ$85>Tu>0ytjL-fU=nY3@QPG-=H9F|hF51NX7{|; z>2z{EacJp-(2A{1braSw++1{Si|gFPZmXawS<SWQ0-|Egn%`VoY{<%~BD%1nm5Wco z?R!<$yzmb}0e0H6XWYL!-HT^~wotdmB$tg!UM`u_Qi}R!9huR5Yi);7px;)n`Rml3 z4?Z|>z~SzJT~^-~ZCxF{KJC5W2I&gbhk-{dlP0R{>H5%lw98_;)E>tCkPm8iv^G?k z-IsR1v@1DgkJ7Y`&nkucl%{oYdF?BHbbn^&YY`(gGsWystqR#V{}l!N3m3I9>~$47 zE%ChQ*v>iW?-m4Q2MC5HwW@?^Jz@&<6?QJ!)0pA%Uits)%Zv8bro30ZJayx;ef#Vz zJnoe>Jeqy6{nv|A91Y(hd=0M$1iJ3hpV;ZD^@wxtqUhBf=}9RkRW~2i+4cLfvZDM- zw}Z0_t*sCDPWqs&q>v@Lk<0n=_t_=$MQoH`iP)Szn;3Rv0f$zSX}xRVUZratTe<Fa zS*vdJ6BO_I+I2(0j7#VJTp{UC^PcQ^v-h6SlI-4<Q>>;`9~8aQyWRVdlIxYrX9X3H zMNNBpVxyI7qfd;q&m{lsiCntZ`*^!<sOX7Vq`&%VetyM++!E`fs*i$PbB@JEIvA(A zdz}qtYHH%)i;_CCvm@B#2Vb9RcG?=Lt#YQqmwPu|esUx4Nyx6*|7KQv5)420=xt2G zYLVXXb1um&tKTHIZd&8={B6MRlXFwLHoT3p%Kb4-Jzim{!JZmEQPZiH_g+4o`Cq5? z&y=cJa$Ia;bsso#&M~L{3SOSJP5ttsS2IuLzxRnLS-JRQb0_nX?q9E7`Y*Rxzj9U$ z|C$3fo3w1%eD-c#kvL2CQB_V+?foen>1&ww+uXPL`F6>37x(23&T?O$dQbX!U(j{( zYnxMZSPIume$`s8THKuGULNHw`y@SZb>@k;VFe*3-}V-o$5}46HhF$Qux-`O3%&N0 zJ)Vzk&F(Krve;oB9y@t@*0Y#9lBJwiPkO0LTxc15yk_OBPuDzBD@*eCrAwDCdU@`J zRP?4gziDUc^WR=wyY`rK`7KigY1g1v4XxF8x15?cFKKghr9A6I50kk*OMcd??2uB9 zY%}QW$)A?FR42*n*R7guvueJv^Kfg-vdG?jN-vW;JJ8GAEXYJ$PdKR9=d#^;t-o&+ zPJO<*X358S5o*2@-aMSKQ1XAzwb^r?^w`R7ba~{Urg<UO)^D<TshQ3G>7P>m7q2*} zGB<j`H=U=&d0tPoqWotVZ}TcS+{@G=*vO{7=Y^xbs6{P<Sb}Wt%C-ghGrdC=FSnZh z>uAg#sbsCdmD>w%`s|&2S@$D<L%rOuMYCqzntpM`6mIobZ~p~a$eD1k#Px;yMB6dG z)HriryRdod9fu0875r@H4w$l~U)SLB?=DlTW72!)rm+1tGr!}it!i2B4^Ew0D0TPN z31?~D1^Xs=GCfwQIV7z+X}0I2-e0f#9Cxxy-{JOm+QNFr^>~0y)1=25TWy)X7fz9N zylEh|RkqQnXVN$24cF(r+aTNi$>E^klzEMp?U~MBOxDo;P~K%WOX!PjQ?Z=#yu=%~ znB6`5n7ubLJ-u@MlKleS-vzuc=Q`eRxgOCmO+a=2z7~exce?LBpLb{y)0XRUTl>n5 z^EPVaI~$4x&FAV6oU{Gl$-6(Lxm-QIS@0izt7+5ID)&3l!nUv4!*|KzrH3=Vv1ipT zInb3D(h_6$l4aV@nB^O47~2A6f{q1TeH!ex@zIw3-}X4m-B#@XJYo5V3CHVBJhnJe zqwT!O-_9#5w)N`{j;S0AS=U~feIqVAarfOr%h>%MGBGlhbA?PiFB*H6+g1FCn^Rb) z?~T6G$1cilx^UO?#i<qYDj{`^(XT~+aeQ!}$T78I>Z0BJhhOVHT6aaeP`#SF``x?) zm70%BdKXM9oc1fGXLE_n^4kYqniXEFcpG;#`pMKit!FkGg*?(uZ26kuBCMEw(C>|z zz^xy1lNEE+^);96GgP><y2kaY@(SzL1-%Zt!hd(|**52+l+<a<$6HOpHYF$S>g|m$ zx^~S`>f_o7xq|h@@h{@+_w`pF{vmcP{hQZC?g<eyezM(o`E2v~xd)x>mQ_F2(6h>| zT5$G@!|vn9(zg1qSgrcO;uZhmBk~nIU$?I2`MvIIzv7jr8!O)|&X72`Y{KE^7M<PB zll-|vL@u~Zf0NoB_v*VP51;Vq++&F=HY~KSa*A|cr4UlH<db2}JFYnjYv&#i+chcL z{o<5R23x7M#$PUaEc%xvxJhus+4hYy3UcKX-z!h6Uid*HMfzBkTZYw!m-|{wQojFw z!*l)FX2TdKS&O!5f;pcpC34rEcgxuB?|S;v`wdUx9Wx^9HgC19e&D&~UfNHE`b`S6 z@24j_md&r7v|##-rkZbivNnEXz93X0%vls5A3xRfT58T3!!3axx$2Btbrv?ymc0{W z*K=t?Ezi{0cXREGyq{<C&9Re~EENCyR;{wysqAp>u?^F|?U*ET&9td@&BR*e9jA(< zPW@Wp*1$Kb`Hb3+MtA0e{+_c=u8VOr{xZunh->dToj2N=9Gg7v)^(k5zkMv=f-B=i zGp^s6#^n)e=9l}0-%I)1MQ60uOCKvRP2BU$B8r9e6I0hUku&SxF6!9(pQr2Y^|>v# zN@aexKU^^L++z*3O-8}<e}D%^p32Mnp5bO-5SC#8uLs0F`2bomh-;R`1=3+~Eh@?{ zf-bLvbQR_X#d<S2ir6l`_H5hKW#9g$eqG?2!?HK!OHfc_qRJ1ub(gKSzB~0!<?H4* z2N$$gy?1vlpWd;gDJ$Vw!Si|5Y447oe*IYZ(Tzj9`VyB+p5fx=&J`(Z>61C*n!)14 zX^9o_yMkm5j&L8fa(;9no2%`jSo!Qejo<s88^00LnwLL&&*8Px45VXDW*fh_wXNW6 z)ZZUBp3j}OrD^Ws%UM6K3CXJ3ZWrl#DWA3=u`lucbSrW5b(3;GM*1Ay(<rE7sv{9` zWKv`5nv4_D5l5vCKl9(^{%F#D3oWlFDyKR>dB%R!GnajLD{X6`s?O03|0W+uc=9d& zwZqZh;is7Auer<WwPmI2q2=~Zv?jV&J=>`t8ydXt!CRrw+hVVLSQxjjY`p2T@sp>6 z;AJ(xXR`y?)(S`Q+0N3g>D9V6@wkAmpdh1^mY7+S-`q7Oipny#Di~fX#+cX|2z1|h zoN|;SdG`5<`8{P#?~W;7J7S$Z%OIuqp76&03i-}^47RL$z<v3NEHxX;7#SEY;_U^R z67B`MR+OaX6=&w>p+xN3N$35T3<Zwu|CBEpaKQWno7yt|4ab@nWH>clY^iQc)YQ3q zHqTM+u=~Zyo$T@l+Ku?Q4_;;QH_6=Zv;W+g{7H3nd+Qati|2?$_Q{6GgvefD;S#@< zQLQ;)t$7vG&NKs+#!C@17y5tqlGZj@TdtP1a7ooBqn$<8j!!&AR~?*@5+7+h_2Z$> zCr%uX+wI$?l-j&PQo`H&wb{SwxmU6SZ8}O$SgvzOy}MiT%prwq(=s20{D1pZPI8-R zec_brGUm6oi*VX3SNP&nsj~jrVnJ7vJ<+arFZ}%|pOG;2<DXimb(TRbsZRn0ChRVX zG6^caAE&Q7GlKn@nPj{AO0_w5%%}3|53OMO8teKm?XigDKgU0T4EK_b9$0=jus3wW zv-9^9;x<Mxv0L1^aePhWwVsNb6|Pgts#0Z^?uj{d*c{YHzvF!8ur(tC!x_A>LqwLt zoY`C(np-RsE>f4r6v>pG)Uoy0l6_aB?oA54yoGg*slJNi#E6VV8*h~~p5EjombSB{ z=KYuLKW@(CoB6`$_g?!`AMe~<;mFi1J9*~b?{?4c6wj-^_v8K9)%6BFku&OI4y@rX z<}%suQnN$vx^&&0BYW=Ds@roj*7VEQ{0KZ$Xur?N$+1Xe`-fnL?H@NcS=ad_7&fTt zoIc-m#glbImuY2v?7K@syI&u+l{dQdwyEhi*CsAA5u1b=HB&s(-@i=}f4}?_zu5F( z>)AU^oDDwv+`qhaRi0#2+>K?aDw2M>*VnXN(A~H+eD<8gC(|-#J~BI8pt0xZgUEGL zIe0@#R);)&8GCoZ<+Kx9muzo&=5W&Itl5@pHG$e!%eID0eP86gV?o^YZqaq3C5d*| zrK;Nw>gw*_y6u>5-s?qaldBJYcMY=AmfM`|wL7XWS~c(UrRQIQ-hWE6j{D;Db*}Ty zzjO5d=KZ)<yfV~k$+zx3dOlsdyH@{bJ9yj3d(okSZ;$`zn4V6}Gj=$te?s%b>K~%B zKW$k0NKsDnM%YJ*{eic%?wDvf9TnE>S2|L#SKd2%efXKA$IrZ~9^1;Y`iK7MlVz=6 zaUn1vLgIwWx=haE>HD`U$A^XlOiJ0Aazu6UhNev}Jf8cN5}gkTw$1Dk_}a2;Yt-7E z*Z$1;QmHK0pZz=Za+Tl5qH8WkpQW~C=(}m}S!2HX(8*i7gmb%YzvO4Ut6}rl^<cr) z>5b=RU$0uZH0SoowU>=~x%R}Z4?b&f#Odx^(RWREdV=ovmX--LpMUUZVKn>n-C9>J z-qbMJvDbb3;VWk@FD#LNZ5LQ9*k-&i&-T&`n}r)XLz}x@9j#iIJ-BJ({HG<Hx9P+x z`K97(ty6ER=c{kwX+D)Y#a?A``r)O0FI9i5m|snNpE1i)L9}v3zWw|wn&&>BljZka zp0Vt{M6sK8s)5Z1k)pgcr{=8xcE(cgvi>1fo`*_$jVCVt<XRig+%mV_sd|>_m%VN$ zSk{_^KIoNc*xT|a`G?p-<&X0v7S<o=*!bW=Hc!6%0pTy(424p2HFAI4lCW*L&pe6U zZrbYOPbOyMZ0ilyFED&K^RM*d;Caq-<PLH7sP9>CxY72ht;2`=(~o@MyH+5ceBwex zwa;pAjT)C1`W3QHY2pi=eT=>&mvk7*a_KGAXIrqP#pI%-v)FBuHTMF$cpP4?`SK%G z-s`!QNQ_tT|L#fd=c*=ocwH{}biqoFdmg`^`|TNpXLkSWwLEp@;kl_FmdAJ2+!Ecx z3MvFn+gxN{#>~JV!AW7g8(dPE16$S(sdsxrql+)QiTpF0rh7Du!z}!Ak+-Hrnb6id zT!jl97I=CY<j!q#T9}%gpQ5_yNtCq0nGen<<R7$7Khz_6nCHW_ng3R7OJ8~<_;{My ztc&k%7XLk$x^(~l%HMK^J%_y?S*QhV_z=n!|G0!Jy}+!s*kb)->7)B5xG;%NwrKNQ z8W6Hab7?{5go^2tJr=Kcd|Rch(Dis|>AZk;PUh=Z>~bIMYLsT%XKb)|$!4}^JT>_b zmNix~Z!eira_8E|=017JGV5*6&5wp^&OUc(mI&kFc|S$}bwp=hDqI^WcO~zm+eAgf zrxksB&Ip|D)icVtTo-B}(KsP>=R2XD6J~#(z3uA{pQEdOmA-D%esyT_(f^jgeNM9X z9!#CJVcL$8u(b~+=5n9c(m!{G!{21*m)V#1sUH=N3~6MmT>Q{VDdK~q-&3W0z3(}z zeL8G+-#9I~*L}w_t-OxwM?B|T`Z&4MNUY>fPLg1G$)BW0dhcHTxO$}4W`R-8_oPSW zfAStF?&xGX=A*MPX%SaqlB9}lqyF|ahwg~Ewl>UOaWK*2yU2u35zCewV}7n#8F5g{ zSt~{7^RCD1j8&8iLr!^oiLfa14O%(-$?cYItI~y!OtigR#n-(yVRALCDZl&8HfYI| z&V{Bs))<P|g}!{9G;{sVz}sm%!%JN^uV&ajJxoL4aHs#aRi}%Vxa<1N`Q@3*qw;;p ztd(|)9X)S5=@slg@|vYOKX1$S={(M{pPfY`L|>;m9($?#S7XkEyQdcRJv@=INa9=h z%JaFOPO4o#y;Q2or2e*{Ypdeq*p}VJ$zG{#+}6@(>VB%mJiNIozGVHgjIE;YChxqr z;qOG2+Y@5$2u`xQ@nY3WQ@JUJ_HcIZauJnsephj2f9+p}iC&Y!SI;f`7OJ#=<FQ$H z!WR3!?Ax@2|CwPGyFrt_!-^|+nHLE9me0N>GxyRK<6Dn^nkUpd+43wtk>3@2WZ~t1 z8!jAUIK0H{np@98-d?^!vzZl*-Zv|x3)}iVeAKvfW@k9}FJw(-R{oizw0f(-4;l6; zDL$N&nZ365PGL*UG|Kt&Td`}+O8;YNPna05XW0MZa!%HL^Q+_Gr62Jf+4{%1b>G}; zShu%9tXfh^>P!2LQ!ga{>W8@1?{WV1PC6wn`Gss-=dEJn`8RJL+E<fSzeA4Wdh?c` z4j;4ohZb6Q{aWK(dv77%_l12WD;6t?K5h69p5a%XdZ4_LnSo(5-pNK?d`&NZU-zQ? z(gNSayu@_aD$cp#nF-SFqW_Lf+q%i7Oh(;rk-!S(rCU|Cx%~VsS$gJLwB2aDVNuA{ zvejgw=;__BvQm$;MlA?<w|Wk5Kp)eyjD@W(eNwNAmMwMIxlrcmzW2ZP-HToudUBeq z^{<VKD?i_x{a*I-y)(7{_ZIVA<#=pgSE9Ji@n^x6el3+6iPc9RPkeIT(7yIq_QXRi z@@ziKmi{%_dyD;ayN_&6%1n!sJ;9|GeVPAa4lA8cy0v-cZ_7HDLf!wn*YTY{`nlp) zjr_Xr4_Qkq6!ShjboHq+<lfVAGw#*#(;tfF?Q61MpHjL$X<GQ_L)j58j#=#yTmQIz z{rbbwAC6h=;WW>*czAsFM=|?*U9&6S=K9oGC)c;n@2OR<&-?f=R_9M%*k3tb<GMZK z?=OF-yZ3-uD(`Eu`XilM>CN>4hucl=tb54ED=+rpi_8lv4FxvVSG#?clV7*lu35fm zl~lumueP<nzkU4g*0{>WM`6$TEkc5}YmXlbNeS6L`LST>oxT^rWhxg1`@ck0Rq047 zhnh{aW|eyM?8t<rA^Y=QaHeu@(F>a}(??~B;LDr$;}3amiaKPp`Q^R5#tW02nh)>o z{x)UfnpDlh?@|jJ)7&ev+;yBHly(PaHC^jCyW2QZ<!vleyH-Nfu@zILE|~fJdu{gE zD`D=^q{|zpywYP1yL(Ef&Q`A6kuxW2EyuK<OjD<`RjyS`OXIEnzhu*zl$cbOZMtut z9hJ*|t*m}Ctmu&H8^g6q3*KGTh!Wa;Mx*+~rQS1vmuCsQSf6t$^mO~e6$uxvB|l#J zO8U|?$>5nj{a!b%o}d1@+HJ3s|5`2n>r)QBx~}<X;<ei2Up#FmZJoT5BhX6R=eF1x zRlbHdyT9Doon}?V7r>>We&yX`!>QXQFLQMCJrZS<oMtAPZ|Ji-HDs&A&5*9CbuJ0n zKTobX@x#T&GfDoJ>b$N*UUgMJ#pQ`%k4!!ZG2hTHR6oa&Be(f&iHXq6S+j1LZB3Sb z{PxDaTI<J4UQN32A+U3|f%?Z38`nn)ZYFnhKN{A=JQDt~<jC@f%f<`6YoyXu-yPg5 zH2+|&l%4iR%bK`Hb$7hg&61;^S<F@MPn7aHEUvPzL;vEJj7b;kB;zMmu=RP=h{j+3 zP}-UQfzAK$WmUe%TAl14d^__uzRORJcw}7>aJXD`U;BISKMeL)J}7s}KUSBj)B0%q zCuYG#PIoVJp^1)G3T%>}xI5z?g-g}xew6+b_Ne^F-XroA^DqBcd}Mya_4ywcIIOju zzh0>RV7#iE<JZl}Up3b~%onOZZqITnY)-Ar<9e<&wHkB3y_#w0rRnD1@V~X5J7$lM zVzF1q#*FDd692z26kU91L#d=r^X0a+^5Q!(H0Rx&mKyc>Z`-NR&DDBdHg9F#sESUR z9@V&uCED-n`DZs(we6R=t~}?p(Q^3|hu+*vn+`m@YC7?1=%imQn@&EltvX}2HZxB+ zH&t}Y@t)MX>$dF^nwu4PCTQ2%J5!_<)ZLFf_*`_+2A9t{I;#8@zU%6I&X@G71{cmt zoAa$~hSK8Ymrr$AbBkQ~bn5&Z?rjAgB~_1Jt(fO~Gv@5|316GPm3Y0q+FNmIr^^<- z$NPoOoom`K`OG@=mjPS!bT(gEFw<M|)TLZ?L+&{fpKe=dpevwYE543pYJ>jcC>4W{ zo#J|LgjY8nR8OCrylt}Ex>JinzoxFz^n0ljxL(7z{gC4O7@y2&AEkCRuU)%?ce3c^ z=UT5Xi}R8A-gjkdOLbVpE}8h2utI~CVyebZFTAjuv*b$dj0^qW%ckGi$PzpIPfAr_ z(P5S1OPbLyc>L8WdyDv3I@hdD@OQj8VV=YV^^U^Y?Awnfd%Vq$@#SCTD(SQ2+@=*) zHv5*up5QtZdhFiwOP<Rz4X0MGPWG{EOIkDijpUS$STjZ0v$s}F2;*!MTpMz8`srtj zCZ+lZbIM=kIyECCD7Ed3sukx{#q~?o&UiizSuizqtJ~9@1BI^fuYcb4(LQ?N@b{di z$w6+1<QA`4<P~7jdiv8;ZLQN&Z>PR2O|?p1&H1f2_2p$lW8YZih=X7DaV@dCW?Iv? z`c-B8wY{%it(g~f<I8j9LW$^?vbSCRzpF2hj$^sdd{^LxbN&UbFPCcaPwwHD+qd{q zJ%4=g+=+Ti&v}^pN@aI`XJC72?Xo#8q&a@`+=G!F7i?G9H?Nww>{VpNyS(}HuYS;x zuwu>M@K<C@0^h!b-=0_6iayMDx+|;k=Y`W7t-D^cIi+SdADn!lXoBxoU*5_!E0>)v zN^Xq3F!lR{)BENLgj{^V-6nPY*@kb5eG{45cT5zycA<j#W%ilHo)1{ke$;F9mxfxr zc;noW@j=YNaOpaS*!j+%9T-orP2+sNVWYv_DeecFb?0UKC+G&6o7=9*^p@jaf9#-c zZ?Eek<!7Di`UHZ#MOk9kia)t<sAS%x$=l97Xk=R8ey`>BDM3D#!#oovxY{0UXt(*P zAyu?v!+~!vq6?NBv0+aXULU_jV3Buh%SFZMjU^sDg>11?9|`f~D&9XY(Bjq2_okcM zru9d~57vin1<buNj`ot94Ew_xqhsZ&vUb=MKKgL6VufwLStDawZ`Gmni{c-i2#TCg zcDcGSjqNs*Y2_B~DxTKG_Zq&NY;)b(P$nkLBvoly#PpTX|G@0yWktN3?b<Fqtp9#~ z@uKH_yOU?6$@#fo|Nhpp<jIEQhAA;c#;=?gy}VQ)H@(t8-|M_?cuC8pv;N8T6A~vq zI3}Z)eq#1wnKj&tOyB<b%9izv>E6yCsZpED#MgEFVlp-1{jqBH*2_CS@hnnKY<e}@ zHGPX&K=tn3ytdVMa*t_#zNzkhF5&qJ9XV?Ot&c6~Y`brmu2au)%6YwRRa5jWZ?&ic z(hC}F-?2y?;#n|(Q|DDhnqJHe3CPxyv@QJkp&SehA|m+uAv*ZmD<MUxsVL2rsi5Y{ zQPF?LChgs{rA+21Utv?Tv%*GIORk50PEp7GdZOh`{Dg&~UPMWq_Ifh);<}m(+FQOX z`m(P<?ADg0FI~BH!?ZFQ<2=3J|F(PKy6}7L<bB(B--`Gawef3mTKcou-|y{-?zgG@ z-~3^ra}H+`$99d1P=U}LOU0@`WU;R2Ty!gLPuRiNOck{PjC&Lt%-KGu-K#a`&*!{U zpk04g>`2v}bMg79TKSJ3^2ObgJaqdbU!2_2hjY2^iMklyJ8S-a)zRt#ordphANC2{ z>*v?_ksz>k$87yNkAv+qU)*K9BYddrj`R`t4;LBUJ)UjMDDvY&g@C-XVaM-}4h-`A z4}^PaCY-c8!XlscM!oWf2>*P(N5(&N=Fj7JsA4C6;JI@JOFYNJ?jMty^gsWZ%CJxB z!1X4UUsnA06U^?X+}Ivr^7{2{o%`iKUhnq#R&5i(?mqMHcjq6Bbtew@&$!y({DZUZ zR8+;3_W7DWb~eRp{8-u)&v~UkGuSq^S=ea0xB5~=g(}upK|6Em_QYS_I_1p8xE=2& zm@Pc|In7G=zPfOl+4f$?py@kH7De~*cm^*>6kDO6JA-AV?<qmu`G(cISQgdZjL}-x zo81{GDSz$EmxntHCn`yOTv%&sYnfYPGWW%)SIg!+nq8V!w#VP^gb%;B(uI_}^Y$1B z`llU#wA-l2=T#5)(jP*e`KRU_aP5Bn@Sc(q?=^3es%ga<7Xl|<lChW=VK(WUz{bc; zN3;TO%#@d$XgTwZtTHcu-{w`Do~<}DQP1<P>Fvu^x9%tw<le4PI-<YMch<)%(^6{s zZcS4u&i`%4SRZbt=~<;a^UciEqDl9fH#@JX-cWB=CViRn`ICq;r)iftG9Nz<^0yLu zlk?f+;iMZT&r*`CCQhtAJ@@eSw7pB;D){rZnLMAf{!`l73{};$wl{Sm|E$^ejkQK+ z+kvmF4_3dtIrC-S?a$vQFll&vxiZ0WuA;BG;C?ytyc=g;uJKcgcl^D3na@h;E&GBl zPnNvR^_Kfpy51~{^#*%7N_28gRhsCqPSRMOy4lIvr|1m#I|0kH3m$Lzwze|Me#eBq zLoN4g&6CVRE7qo;S(BDp<-YZR>eQ9Gb9lq1_=HRoc$BVSZm)V}qa6G1^6WYK%Oho< z-g<FP?NguCG{GxH0@pKgr`|a0lovda>E*7(yr!^1Q@(&BXUt~TMX24Z(BgX})!2Q0 zja;(#_j!BrmK}exZe@#1dV7Mr-xjIGH*3^xu1Y_9E%D~6=f;v^PYfG5u1{`>_V;pN zT3QsO%)5Qo;#v2qn$M)NUOVr*XI@GB#DI<bze7_D*FCbl5b{T=e|3e}ytR)w|F|8^ z|7b0G{gD;x{_v0Ne*%xr|Bx<Pe=wfaOwZ`>iXYOG&p)bStq=dm|7WsI&J~m6+mAh- zJbChLHT^qBrfkc(w`Zniz)~O0AJe<)AKQO<bJSW-`_+D}NefCgq`s8Xx)2p6Z5#T{ z-e%>4DPBfgmo}--+Yq%n^m+95<z*`j3>{}qxv_eY*AJ10;jUX(1hy>dYFHr}p;ww~ zp={l@^+@8rW$K*kPJ4#3xO#}LS`qBJH)2_mP+OPglTaDQI6>Z35qgJKMJP&%UR=^O z^^wl0t5+l>x+0c#rEQE7%nm8sma*`{=M!S9B2K?qeaUm(x4c&>a+h~F9xeW8BYOTg zcSvDhM(9y1DTAi$kV3uPM+EPz==%D|#&yp6F5V|XNsBXrU3YhAD6Q(6@gm@;nqc_R zw8F*%ZCvv<nX502zWFBObVikyokdN@Bj1ErR&PGv*UQX88~?3~Img9#_)5v-RgS^Y z_cQsN)vohvn}*MhR8lV}$gDjmB&4XiSm9}@`}bm%jrX%WgVM$SoZ8X6WaUjU*$uOJ zm+QWe@=ZUnMEX>>w)3-)u<Y)bV;=Vv)<*gBX06>KSst~f`u1~U_4J}yt?O#^+yj<t zxK5vN#8X_QVfKM=y(#;o_kPn{t-hw``HPGMkA&Inv9>yU9WLJ4Q=s^Ll|#-lh455e z(*?Z~UrF7*_1svyIIX&W+mo-Ay2)RbeaZ1F%WR7|pvr%X*EhT@$0mD;ucfwUs7}J~ zsyo^$2P(S{-n_cc*w}7W<;K@5&aC?*_c15lWCmAx-<65yJd>Bt{$(Z1nJF>Nd=lTQ zmG57fc&Z<+4Bj+XKYq&Gy~#D-=1(-dJ@HUn+Um`FPqS{VmRxaWvdjy~xcGVeZ|)uG zk}XfKj5NQozEFFaRO;K)ZAVS@r{=`F=_gq5PC9Up^`H9`?=4R}R_edc?^L~c&nfW1 zblV-*Z$39G`=_U>b@x(G<(8e1o|0F47`X$omtQ#N<F;UDu2}QB95v^JS6kO`tX^1? z(^&JxvE=9croS1<&$me5nP@y~{^u2!cbQkco$TVW%m0;T@sv2n^YX=$R=b<=EuFkh zO7n*H%H7*<yXLJ9U_L!D?A4}ysrlPORc+#)i;7;8@1B!r^>pdRv%xi{Yo(`HmYovx zDqxykDYDRYs_L4<ay$#Usz3T%VY;*I(u?QMZqHhIk?sGA(5=_5ERM>~N?L3Bb=x(c zy9-SFBYsR3xT4Z`X~wdvi9cSj?9eNcQToKNich9JpRMlKnq}u_Nori2yrP<+k@?}R z#~gN7irP1GebfrG3a%9GJi9>el2P+75606<6MtV2&`tQsbLe|i6Q_()o7v;EstD1u zr5A-c1TXoY5LJyh*1EPV;VVn9Y{cV#LU}y9ns-kMFg3|n_X*z8F*WqY`43FzZav(6 zq@L&bhgF@|R?E44zV_<bs~fQ#CgI{6eyQ!x__STd_Uj7YtLOi-$gE0Sq?NI*^TJWn z<>%LzpX0x{YSy!C*|6{*Wip4g;<i}y{5e~f_E1<iUEcPq#p)&R?B>Ykajw^WBqN`8 zVaqeKHOjf$<sNK)9AVyEoVoK}<UI4{woBQ?1~U7?CtQut7T>YWa{gEOIB)&?3IPX> z-Jbi`?6jWUBs(G1G}R!rPoL*$aAoX2Zacr=T>cXEP0ddh|4n&w>@t5x1pkY4WpRhF zPSFd6(yx-0_GrrJCvBED`_?2p?cL95n*)zb)8aW|C8K@uD0lJ`1M!>L|MuMYsncov za$k)y=i|kdycfB|3q1Gxe!i5^W8byoO#db6<#){Ep2obg)BXE&+Lzib3q>}DF8D7I z=926h@W-y_E#GgYbpkv7UJ(uyyeC-K^>tZ>r^>J92Lbs@W|~SQykfPv>elez)}ll0 zcxSex<EmFWogV*nWjrRiq@1|A&93~LYwpEe9(@07wl};}D!UoC_csgY>CKy!(>Cnh z#Jw|V|Anh5M?Nmx>hnUSb&d4L-IeV&E88=stJpr$+I+Fn=fHm3P0Jdz-xms+TXj@x zs)@{c|0v>(`u}}XeQsGhe5;#vVD65{oUg}kF!--$VowsR-E;Rs%v<e6`@6oLPb?OS zem<*v`$>^+-yD8?Vq()>d}P+&l+~+Qx+>cEe_QKx=dHDDTb5Q|?7K6tGB@(8p|)0x zc(q{Mn~wc=Hl~}d-dj>59QUa3PQa$G-XD$nAMd*K@$^S7{q%*~rwW)qo_eptTlUC* z@bu+7x7AOqxEL5NN|4(o1y4ph=jRodB<7VALx;tuy)3)zCUQJI!`mg&JCa#(@+J|D zE3AitoH9kT*Q_`(P5b1*h22)uj&JMGdD)X<{_x_jh5Q%VU%i~Fqdr;Y;6vx4PrFb5 z*E3fB@qPdP|Bmw){La|Z(8K!0*lqcW-0HbvZ?|RMT`J|4es+7#sVv3rHdA$BN0XSt zFH&s#F7>$HRO42Uaa?a;HCg@I+G*aq*Ij=#V_B2WiF0e+g0HSzE?JhDpH%X7LG0!g zkGJYvUmSb5Q1r^77eNb`Z!5|^zVP=!u1%-R(wEIllU|&>^X=B$9U+eU6P7&52o4RN z(0lPy-J!Nymwd9szs~X7oqN+@MUza=xv8e+p~s7R%!_ly7q{NIymdjva+a-m8X23{ z+}gJG-L$5-<dQ=TIhQXu#5UXQl8`;m{H1E;*4B$h?<|P)y}oSA%54jl{!F@;uw{z% z?5yzh(X&4+UwANSO<%TY&eo;P57s|Ti&_14X36AP^YWtSmT7*FcAKuf*I?DU1@|95 z=@Rr!p7+r`GwZ;~scP#@awV#l*&ABToh@^HTin^}hZ1f@ZZF;#S81SU@_LGy{9@^& z?|dh}TJ>^mxfE|!@LC(5%bVgHo5P|VYkTrUU0<#8+}jpau6z6AgAF#TFBYtLUEzB; zb5&lgv!l%7+42EfU;3y_m!0yQOIqJ``>AVf60s|Gh_&XoTuge`eA_3wFL5j1Pv)L; z;yY(8zbv*j^nz||zIWvDyGHz{^QPPVX#CN<PvBYq(GAChp7mF(J-#Vn_cXtDXSu5@ z1UAmF-z5@v``_X%Rrx#TADl3`<GsoU_4mU29)DKhe#Ei(^@MY*r@OxNyiZY)Jvw=V z{~`-zTfaq~9IfkFlFgn(DQN8#|Gww%jODHU?^!fO_CDUM;cnlzEG8vI-=LdQS@yQd z<v-kx^MrS7Z{56W&;In^-Yk;yUrulnDDsH8^PTJ5FZQ{sS#vk6kS|)fKVeQw&6&kL zS3c){<JHv4e<o#Om#XR6Tz*y8w(Yv#tU~#!nVQQct8}{VyL(UXBCEGs<9xd-9h+AQ z*X~R1dAC}!Mzva)V@>~zgaWxkC(`aYTkV!HtI!nucrGuM+k0-u*94CnPjj>b@A=s% z+{~NQUsv}c{Mp(sk2h*t<Zt3=TW5D^ck;Hyzr|!`as1k_*@*3r^9{o<-kSuwPgv_E z^(<&U@+4U9mC`(wsa4mtoe!LKFxb9FVjqj5J<lYw({4xiOHXz3Ut}?h*YZ&cL-;g@ z>U|ttuYH7WyqMu!U37f&k>y2?G#b)BZJc@j$r%&jk7oaGToK)06Ougbj^FzbzY=9( z9WVBc63^2o8rJVNdh_#Fiot_LdsZFkdHmKh>FwI0Bg^L4>~NP8+~K}jMdwZn=fSdv z)f>{B_v<_qkmqO9Y=8K0o$!X%J&ff7MO^_xpE73jKA0<V^tjIFhu+)EHk2$B{q+5s z-ky|z6HaeccjRrBx_Z6h=K=1udu%p1$}QdSn%^~+`&ae*HM;_4y={}%*>dLd`xn2J z`;uBN3btGbe_`}z|BK)S=NtMKEIz<3q<!GH%0HPOJC3L~_<PlG{n&COy<z`^A37hV z3(aS?)Bni&pj#-OX`jwVr3<2+>zVXDYj`UnlbH4>723To?aXJmKjnwmhwDQ3+4d=a zjD3)=vX8wc{!xBowopC$ABRWn2l`dwSnG5?3O`sbWY7FB?$PrD*+Tmn{y9FHe!$-A zkMIVqk5&b-NxU<>?l4?az1ML6MSXxbJID9HrPAM67#Qrh@s+1qc>4I@@)Tta2x1R) zTp4H^wVoT>yPhL^rpyVszG%@OB{#NUUdZO@rXx>!LjEo}GU-gt-$$Fie7R!t_kltA z_eDpVdd@saQWp2GzuxuaO4Fn>e{8bP8o06PS!|y%w{iBwgIylQO<te9jEaLN@+PN0 zNK6ShxK#R$AOD8Qjpsy9c<FdwIq!MK`}%kPQ(nG$i75sOSN}TrPktI==Emm6rp6|a zkd(;6ro}zsJlB)P46_X!){{8cnVG?pH0&357Vl(WV5nup7a)500tEZQn2QJfm<$CN zF054OPFgg-k^K_?joB+QoR|(C`MrT>>4q({%UtZ5-#>i7{v)t0&)m`CKxdrVT)*_V z%lG%c<-f9kc`Zwx&<@cHvlh;LV&ak;abVHi`H#6&>o)hS+>$?cQbdB8vZdQK?w8?S z6DP{g-zz6sbmCg++Qg{hUlr@DzE!Kuw~TGEUfJ+FtL(ZS_iNM14D|-}^Y<-Cy#M(` zVYp>n>A5E?IeY?Don22ZUoY|MQ+xk3FJQ_4=gOxfdQa(hu90y+^ljy*>86uE-kP=j zN6Uixj%_vzo+Q}t?`dOT3=dcr729%uJ#$M1Z?A-K#x!?pP}=(U>+s|E3=9lX(8Vl} z)8f##4awpO%C!8v5<Ew{sT0!bmY-Jwso|%F|Ew1d75Kj|@5Q#;tV`wu*$7OW5TxYl zuyT>8MhJIk(8Z?fW;e|m%{otVt^MBky;gf(#Z_j}D@!t1MMdBLKJ@zYM}5Kcd+*c) z7w`GjZf<RTe`c-q``!0F?SH?1YkT2BgFTPVVcx45$9nhN32A=0W9It2hfl-e@*Y1e zi+lIrsbAc?M^E$O-WduU+q>sZdIICS=hgfYD~>l?$r%~&^MC%-(fIMksg3TXHfaf5 za?hV~%KC>r)MPHbvFvdsv-=~-xOrDU%G`d=%kzkpZ~uy|?uUBWL@PXxpN`sc-s|;^ zbzi^mmAtNS?Y<r6b9{Bw9KDh~%Z~n@QzvV^<zC2?KXaqzU-kcSee05|>8~rCy_aw5 z>oc#sZFw*L-hwzD$r=5zd%kZk*^`?f@&3h)v*-6TPPetXC(5xzS6wgQ_O^q!Qd+Cm zrubVtN)b9aPp#3g@9NcTeeaYvD<+@f;W(4;omzD$>{i#Yw*}Lms+hHHo?TV-CS`~9 z)RIF&a_@e)3r$@)<@;u)udk<m*7WsGm1dO+3A(kpw=S$9TGJq0HCNM-yYf!e(LJIp zx=%g^YCc=5l3~~{6#AJX>Ws41if4jbCLF&KcqUspL$QD5vKiaE7PQ(dTb6V$t4ZwB zj8k2e>4I0zuePzA=wspCVRrCl_R2GtLVD!luO{#2Pzu^m`px4-xbw=l6W#Q!WkS64 z6c>5^WNqS<Ss%7w%A}Zu4w6r~ma0q^t@*SfTw~$vH4iR(>~-S&xWlP2;FPGB<_S@* zD?#f5yxi6WD9kKs4T>siWx6{>dy3GOSz0FPi_0!el*tt}cyZ3?_HNbf6`As$-d6KU zJGIxdrpZp)A>`42p>lH2IrR(wPI3IQ_+PAX@e6C#`cL|y{3%O5`11Vw?f8c=%uVxM z!0I%)Rdw9DA^Cwjow#PI=^Z+%7M8HIGi*-cBikIaLbY2yYYt@zrziJza#;DyY2K=K z?r5c&)y8v2s^;WBVv5OlRQtyCBcnd^oZEeyeQG-TS^6wXZu`DDd|b`$;PO2a&->`O zbI)B?Gu1`w&ZHMxEeqCmp8wc-K*WB-F|T7mwP!D`n0wa9!y!fD$I=6P1m)S)>rx+O zzY*nFl{Wha+x=HR&K)WJaqkHKouhg#nLhmvFIb-SxLm#Rp!Me}HvNkpsuh6(Qy;i~ z4Q`z7F_&wP%k_{4s!Ge4^k4LM%Fn!K|1e$n_ubX;6+c50_MAU)?c3A8f!1$Tf;?sS z&-@`P&h2CWggxVtRE%~(#K*_E?{7J5DS5ggSs{1#=8&xTGv_?McJF9<zH0s+%VWjH zoI9Btg+-p5PCn|dBDwNuVRE_kM3*ymceh2jd8}R`W?Q6_ue|M~m)qN7VZ&>ld=rH9 z`LygbW%X|+2QLZLntONt39HDTaj#j@Dy*K>{_%bK^kaw8s|3{vh50fi75nE@%INr8 zt+~!E`a4K~eWv?d&edGb-A{Yl7?*C7`Lf`D<@$+#{z!?w^-b-xdVJTd<mSw8@20NK zd6h8bm*4~WY8I|-r<4-{v_G!cuk3n1-dpQ(`p%1`GPyk4`rfFw>qOdY>#I=Pdh_p# zW6NH$%<V{aH7`q9v%>d(tl4GzIR`RAHhj7q%G$4#nJMMzz1bs5%Kg%%nu*iYCT}sB zvt;Q{72RHq%uFv&?`E&4S)nQF4j+yzzN(ZjbXPp3_kw_n$CH4K!hh5wPT8IjI+T$j zy)~H4(D;kmmdxJY1v{!giZL;j`Uf(;e0L*AaoNYG^K#k0b<4)BmB?9t&0^D^J%KHf zPuq823|5PI+5XsL3g_#(3TCruoZ&wo#(kN}8UFjBN>J*dHhI6tlZ+lp+0Sv@=5yoA zVLm-wVY#>M=82od=RIg$UGcoK=jJ=bU;nucuetL~alP`Sa7O<Qp6S&cY9W^bnG&6P zR-ay6CZEQaT(kUrQTz$N4{wer`baH#{B?UZ>pGp!W|RMZ2;H&EXU8F4_K2r<H*`!e z?|QRx;V&6A{$#K8zXE*mrt1AGqXlnR_Ut-mx%F~e!I4)N4Eo;WNE`}0a#}$A^y3$I zXUuC}rpv>Vq$Ql2)W9svTq$#T1GlkKG}EEIt~YYo|K*%`d?R2*S(@DOz3q{fw}Mxg zY0SN888S(D65rbt8O!1&mnSs)or`(dQheoNz}t_PW=?lDwd}n#bH4Jm_ALJi=bB`) zPDE<Vb+w%FWRAw%$wd-pWlQ<<HkMn>6F<GU^Jmze)z1q*g}wMv#i-jK{3EB!QMq5W zc}0|Oe(5d0tmi5l1Lm{@uRM75i}sseOu||zmshu4ykpsN`L1%p5i$NicaCE{Uj=f% zUTItURZpOv8B~4Fklwp$JsSf9pD=Pu1ikvyAXEps=TsJCKq|qx!QTGDfg=Cjo!N4E z8sn+c>|3}rF11^5b)E2DXm_cF!&6w~jzMmF*@kl_Zyg$1wf{A0i>Yl=QahI6<b2`8 zvAOnMHsxtrSv?YJGmD?idtdXt=J_4#`}^vxS~?h)IB_ht??^kcqqF^l%8ziP4uy3^ z#upm015#t2|6?<6zQa>kZ0y3hJ%#7=j<XkHE=_;iGx7TJ(zQu5SlOl}25k8=EA81A zb+>zZK^kWt=ts9@hD-jMcQ#^b)2gXkV*<lB&&st4U!C3Bl(*{iw9M7THu*gqkJ~bD zOy*g<v0gYwH~P|5_ocl>ANR$b4ei;K8}TecO?H0zgrKlE^_i@9=l$}XEYUrARan>g zKQ|d2uQ)d-xN|$#>&X7Mzt~$EbSmnpPrU2;SKBtLc76;kj_SPPVdx&M@czWvpp+*i zw#S}}&T(DeB(_B>!+Cd;T}<GGMq@6wAD{ScrS@pOa1(caf6`V%;_!|pP9Lour_b8@ ze3ZJZzEL)p=b>n>Z?N~Q$bj_C+Esm3>94=!8Su<q<ovxwZpKf`>M~2$%4=CmU-3=w zTi>~1x#sCrPk4hj?>(4y=f|P-g>}>Ty`v5;4l*v%nHv|=bAEBVUY*1Od*?^NOY}SW zC+#_K+{2E+joHHeo6Xu?ntBuS{ogdJDw%S0X7DB{?c{%{{NwP2PCfnItv1T<z27+2 zJU=Mt@}G&j^aqn(Re|(Xp%bTBe(z$lui(6Ezdir!kGgpU5%(9c@0GjvV$I97+Phm$ z%YA9G5<8jw=!l-1rM=OMTed$AFZ{YLX-DzqXYXoyP8{#pqq?CZxcvEx>?U)EhWgK< z^EuvMi@ca}=MvNY8F4SSn*_=Ky#B~Vsj`9LuY`BJz?y^Ve(xR?8WlB6Xm}xg;*y?9 zVZ^Hm+a4}2+7tD~xQYAZ3q~oHg5^8bP4s*EbldS46TV%Xa#JYs%H6u>FKn0Z;yx$t zdeYOf&&%89Txs<LZE1UOdtGl=n#%<y1_m>{d(*WE<r3f2;^M^gRM>bB^vDLio>J|n zxdx)HE;2WGBaVg_{IGiFZKROs<@6`yRH}&g?k%$W{wVHOQgKkZ*su0a<MGb7HyV5& z&)T~8yUqEX&*wb%tpEG(o9x>ehq5IleLQANF;G?J_FeWi+US>|tUJ^8)RISiJMM~Z zuNHcD{DXr_TGEWEFMkH8oalTor^Q`J&iKf5?xjn&pZ@98sTg?YQhCYQOK&%YeTu!T z_grGvr@ps8cfDQzB5bPgi6Wl6M)t3>#q>k9MUQ`#G;%$zn_cB<ZnksVvft0D&(4{* zach$BG$TKWY40jEla@HSX(cS#Gq-5w?UlU8zXfyO`TWJ`yTmU)(W&Atrv&tCH~sZ} zH=E75<lGkD`Bs_Xm$i8&?%C`Ydd&76d;8_;Al~4R+RI$pk1QE`r%TUZG`-8S=$W}p zdGz<}s|IIQomH+X&&tls?Ut_7yPGwk=;7jn+WR~oPx;Wo#ee*O!8N7KU9Q(RS{~-A zn))H+pz#VG<>vw2eg6-wy!HC)Vu?2C39jl4XFvA}JlWN!{cvZK%`;J+g$jA$qA^EQ zS+5%`dSK-ydWS)D<-hd@c%&RRE1F0<Y+kr2a$(N3r}KhKdEce_n}iv3oHl8zza;fw zc7W)f1KxpeR!=C~wqe3D&RN$!1ir7FD&Z#Gr9WeydvW|a(ekW1+vjd)6eenlea+qE zT(A5s?Q*GIhv9?^Pgd_res#<$yDdfg?8(V@kMQ<sTK%#rmt?!Drro0GWpq>NWc-1b zqL+*u<GC)VCvz}+G(BWmduxG0z?^%@P8_%PGkxq<QhMX?Ix*_&#mN^pD;IaXxXvIT zF1NCkU1K80@ox&Ld;->v6B@HR{weTzv{*RQY-dv_77S&W6cRc6hOnj@pF;Zt!(Z+l z)_zYXelh(}!8_-KOygUz{)_v(rkqf;s%uHTr1~gP+i=P2UY}r<6V*NEuC{DyUpN1S zXNmm6^iuiQc!8yJnZL*_%9jti!S)ZFUtY^Tx_X_7fuRX+ej!+^1mtJJx>mY<yFte} zxV}GDHmBumvwMZANPz0J3u0S1xWd;tO+9p1t*nRnmTO<~!Sp~E50M%M`PLa5H(i=z zy*b>vy#D{b`Uelh9`i+6<Q+cFnS8<`b&lb=+L#|ZL<HW42wrV($oJi$yK2g^2!~~A zGuJw0d+pXep%Q7gywl;coq6R?hw#Z7U5{VJ9N^8J<i%q!DPys6;eiP+yuL`(mayjK zOw|0lEVDc6g;9OrY^~Eli^HZYoR^d5)p#%}JZf*&<drv*=IXsXHPh$$j%EJa87c(k zILv)8Axd-kwR>^DtC!|lsK{OX(!sWu^<9&G$AOy*4;C<$vro6~zsTd3({po2QnJUk z@14K?fUE1Tp;hmh85tO&PzDart7|Pn1rg|=M0l@ttrcg5^wo>T+BbJctzYju#bu-K z6o)3|=rBHmBb;o<!+qx5_|f61VIiHF+kIlvg^4V;inb``E)2+<wWXCM<1SNfalmnb zbwM1uwi;WWF1zE-tsB5)tN8!SJFhUIi6{Pt*U!ISZJdAa%$`c)&uR1j-dO(q4!_w4 zF7=ZeSnWg}zBl6du#iXo;Blcp&5iY5AM`o@=^m_C`Ju0D_wc5FWr>5EL&<^$GtRd{ z&psN=UluqeAnCxtUY*3omadjoA+eJi*t=DA3KKL}3HeP*)b^WpLG!W59IeMDB_A_( z^`u6eTg)Zde^AnBSL7{`Ihv1kY^KeAtTIRUp$z*+>$pQ+oX@>pB(Cr}ly!-3uh2D* z7n2L-wR~2MInX1vX@{_iP2iy@xp^uNPu|g=w4u*5`i#-E6BS(7x+_+-EI)ang?HPv zclVasYz{f%CV6Xv=b<#o=nbLAQg0laaalD+FWGwCgo33lvOTY+eB^mEX`^(t%bTZ9 zS4X(a?@51@m3OV6SnRQ#`oo(>^P2w(t=qcxdUB$msia9vdbisnPQkxMYys(~80C03 zeQZnNd9+h#-E@N^XWCPFl3fn1XnF1_G1=hUjTRn8AFmya;`vWL-#W7Rb81AZxW|u5 zwtWf@#Z~tN9O_ot6LH8p<&RKZ<e{^7;<X-%z1x3i+TT?j@smFoaq3V1_`0ICCEV)= zFX#G4J6G@A*>*El`(de2oc=>zp?ew+%~kJcJv0;CuX?!mhQg!mHy_+je43Z^Y4*;W z=XT#exHx*p&Z)C+@A#>w|4Xjltz!TE^zFtq@00Bw$!}PH_uQoS6F&HH)@w{otW$Z^ zuX;!Gp&n<s_YU_XyIuZtb}UwUCtApJ@Y<b=eG9hDU!8lQMp4)1#cRJKO%D$q<p{Rk zZDlokcU9Q;?c3MpynCPbF6Twoi<d8)G;(@c9&_r>iCEe?$?8zg`2}zCv+^=u<i1}h zdTqu2rE6EuPRQBJ*dXob>AS_e<h#MUB$k&w_xk45IU6qBn4Ibzon4<_?woDx)X7@5 zKI?7#tvk222_;ssty;cw_wxN47p`8pfA{i*-A8;*Tix8VsdL+%3s-OL-&48O^Va<x zYZ}ekde=0GCwgT~`}jAOS37$4@7vbDPH04`P20Lv&v`<yaqf}52COC}=G(STe55&J zYl5ngNXCn|FAXdeeY_N{tE#Q4tAANbS9O&Bo0MQNW5x2ztLE(HI(SclbHdf`FB|5w zoqgzHAb905N3j;a{jr^q{$&CF7X;OmPDVJ-$+^5zwQbgxmbQTKn{u7JzqYJ+CV#2+ z^%j?cz54qS3j+9mvt=}{H!Z0v$taAD4%_CJ<b5ZqV}tAG*Jl-LBly(?{H(Zw<0iyj z)Ray>*mCZ3+dN&v+zTm{ZCkG<9J%hfg)?el_Tld03B@~RY};m<ePd10XSMxuzAPuV zzhubNKbFROkYoCjP3?Db%6G6?%H3}KzmU&;iC4yJr(Nr3FKPSo?#Zqn7kB*Qe^I>o zfQr@BrzNTaS5~qnU%PpvFG)N&=Gd+|S6(l<y{z5+W~in~%;xID4}xk9B$kCtzN>t5 zqgU_}-(L=Ql=ROXF>Pn&VAbqloVsLzob9}fD@iS%YTC}r=UJT-JS^2cGpI7`Tjf=I zk<M>!zGp5yInW^ItYK}_I3xI&P^N{%2BEq*)ujwx*?lX-x?l5dbnKepdeh};#k$Iq zJIp+4ma6`nF!7a01=Bp0ubWpZKf23xulaYz>|&?Rqg?m8zkjSSIJoCo#^JzMpPy%h z7)UgKo+LQ=RUNDR0d~<pnszFW&WqGY$O{(kZ|Ywp%&75yeZYt34k7yw9Oo#~{^8wL zcl5G{+5#^26&o0BoE!Hah|hF*dS<=oA6~n@2Yg4i^tv_d{2LWh-mc6krSfHlTmipJ zl5x7$kLa4FYik5Qda~BH?-&2b&t=!@ul<9^PWw?YmtDWU#t)@`fk&o`)JVn)ehg)e zKYZP_#`&Om<tN>m#t0q7+nd){v1?q^GGHse{O|4;=em@K?ad263$_HOX?_s!*Y-5Z zxg&iwIj(j_??<zn)~i~T3-4ObU$f-sU$-n#=3S<fwg!}VL@!rws@qj{XI~ZT|07y| zW|k+W8y>NjNH}7xQm!Gy9rxfWlk}e15?}RvcfC}Y-<U4?hx=dXk?$fk^7acf<m|7O zoN}FUb4BaT6y}2k2iER<d~$(cd*1&IVx`i~MO-yb2lqd0=eTO=Qjl%4^IS&)>;FFa ziKn7`qSYTA=laL|U-Qv^kw51D+z<YLq;7INPyNwyE;)gQ!|wbnm6H!{SjM5ju_z&! zW%mSiuAf|tLQZFo1kF*hV2NxLf2bO$5x~-VCqU!LG7pWg2j4%i8-1LUY~JbAsWe6E z-gb-au|;vl<(^e5cdqq(ZWcIW3CCpC<xKjAwYv;jMQ3&OcONowEqLf$(&AmS#A~mT zkN7E<g)xF!ElFN=hYwcF`SwgUrF{8}%~ca?&g6@zZ)*J5wl(q6Yl*}*r5(M#tRfX$ z^TJwYs&L+GEEi1_GoJJ4*=EjPdqp%3FF*6>Fh|zH$ei`|L5YPQbmsH=2FVs1%yY_} zaZdZRkAWO#pbA@tT7JiV&5Y#c&#n(6TrK$IQxY1L&O8%b7v5s|<jDtv<31;MEH7JQ z9sYgtVgIkcYHGQqYxgair)C~&|L&*h=bC+Kt6co$yi^vI+TB0aE1hkoXL4up^3&TB z?(O-xZ{0ID{fkwSGqz{k<J>c&KlR_9Sq@4HT*tMYmKscdvt7mEdgJbS?sjt5ia#Eo zBI411;4asj=g({_=9heH+o8Dn_8!Mwa-a5!9CR#-YBzT*Z@a(4m?gjE+@aN~!V@Ll zHu0rJz2eK{Z2QueqBLuZ-lUKixthHJXE^0tR|u^Vtq_e1eo&glvOZw(f#MH)nDPzY z=~hHHnpYlT_t*NsXnM#d?-_T>_0~h2Tz`7bM!KAgUEle-Bs*h?KxA}Si*Reyu1X`J zz3==l-7T+k%bJlBI@R=_M}>k#MDks+%Y2TLXJ%cSdHwYoo#33QQfA(~wY!hJ(75Za za_Og(-Mfy1DQndW+b60DADr<1jOg2y`b&SL3kgo<QOehgJSxxardjv%+F4cZtuLaK zBrl(3Rc()3`NZ;{qV6?^+Z)2Soy~o+T0zRREPn1~_SR6Pf}a;ET5kTCASdU;BPnkf zV&&24;q~vysWq+#AAYl1GfCAfM6k@QsfOeD<ZteJZ+H$ZF4}fOGo`7I@wIX1eJ%|R z^Maq34ILy`8vRxmxHMJU?NIN@8*G0QqUX!|zYs~@<}s<ldUIIO7L!v68fTa`UC%Y{ z|HbMsYqD=x&?8eLn?rj}EuL}o%cL(|GVkZ|aPkS=So&LePT`!XcO!KVd+A=@df><u zuk|MaSMqTFVZDA@)qlBMww&3Wb+cEA94af(-;hzWGxMTg{Dh!ISxirsC0g|gbt_q$ zN2*zR&YEq!G4+mO?Cb@F!P-Tp?{=`5B{NU&Wc-(x@X@zQO6Rng%uAbqGv4MrW<lp( za<f?|K9P(&|8n`oA0-Q)uJ&2h8}i#X$N#0M<vUGhr-iB;TD{nMuS7=NygPTZPw~Yh zW5r0Gz3#pq&wfqWx29p{?c2?TK?!wv(Q@&dDwMvrYdSwGy6vJcXO`*x=VuJvm-~8Z zo9;<-@NN@&t1`hzB{qF$?#)H&jjl(I?7Dx3SNBA(^RZb+g?G97YO>~-aW@N`ddaA? z^vnOt$EKN__P?b(@$1PKEq_vKJp1Y<X&#<9t#gCg^0&*roYiIXxo24w;3as@=}X~M zgTrghju#k*FTWP4m_1e4eZArt@hx|FX3X@B@bES`woT;bv{?_`Tn=<zsJZa;i2KyQ zmpkgWv<m-HSbn9+C1vJ5%}|566CV5hyljv>e;=ow;bQH_cYBJH-c1Vb&uzE8ZR$2@ z&b!<yow5tb4(9`OHeD3ax!fgMb!W}z-rKnr8#9}>M`yXN+kSfo%i}JtoC}BQ?(SM7 zviMAoy4tcsKZF;ZJorI&-Rv_GW?a6fC5q<Ab2fFRIGxv(l`YX}bAQP^ZFVUud;6M& zU*pVwckt*se_s8);o;iM)B2~16jSznnkj$u=KU`*kIzq?Ie(^`=<N5)72khZ(s|$F znD+LMC8FK0b8~jD*=ocZG|xUI#QkXC<`dWcysl1~HUIS{i`cK%-2LNHX9t!|dGTCz zYrvjd1DVd3y;AyTPF3{IEVoLYxI)f5U~heq*s3}AY!lVqH0ma_?|z_ez*X(on)zo6 zyTf1GE6Q&cZ)7MJsL5xmQ9t<o;NQ$2j7{=q8tS=>_W!&X@r*xzas7=~@*98sb$j3B z{_y$B()|iQHu6}83;sFH^CPRNekx<U^N01u53)J``Lfl>9_&v)U@q|IHqVc$87`02 zA9!ZfyUz%!Yg%e|ezSOi_=o<FCTYI+Im{mHKOeh~zvXK6!E1TesVqYCJ_T-=u5**G zH8ks<#*^>82X3mZyLX^dZQa=;XAKJ`by{CMBAfp}MlEky=j_x6DZ=3qsS5537vyhl zcsegIpiE}Rnk*5n@+dDmR{z;vT-h&eR9{uwq%IC95f{mCt=XEgeCa2z=(V*jGhS;J z-#WcGyK{kF|M72I#ipDOh~pBP`z_bt_UdVqq}J`(?I7FiX%eCyz2S1p?+Tk#?VOUQ z(zPwsS0gsaE~~t{(r2E%pB>X$wu}u18p|R@vSu|c*~RBJE6Dgp&bG%K^O8^6ou06l zcUSBpM*Z)rF8A-b*K*YP*-@W=hd64oKE~&N{4V`x`@u-dPv$y_T$<KX&IyH0(|qsc ze9tUn%M;yitDb7Ujy`mX&z99YBeE@a!O=&XFIY|1>OLR%hSPQTLMPiak+hzM=9-k_ z>i*TC=I5)7_q>&?xc0@&rAz6P*$)j-p(nGAPX?y1U2t&Y;({34ubbTy&uPfSr!Oyj zs&QuRS!4Ejw`!u-Ml226Xm<6=8#aCZ>>VEqjr*mFlj^FH9J3ZBiHN27&6zN(;3j`$ zQBu~indK*D-TLD5PtjO?X}U&(__Q;N9t8XQy}mJBvgZ83&nawt`?xhXuDmioI`vIe z;Mx}t?_RCEa@5URZT;$d{CWMmjx;<kj6TcDZE;lP!-}tuC+qyZa^+2C&q}FgwpSbd zik{`S1|{vkk|*7I%qo+mFHz%uo`c@YKn<gWXeqrr?7pk7KHGcYlf%?oR$Qm$TDDoS zUppBQ-cZ_gdZYZd9U6jj*XhZ(e%s{~{;<wt7nggYYwX0;8TKrdMN3zEyp?D@x9gEe z37fO3=8EoxL2bKYkE-l$ud9}C2`$~!seST@=!_kgeC9k_xoT12{Ii<7Qo<X(1HF$u z@cDF-E797g>{%|ed*|+XGFMzHOG@`%_It6iM^B@*TXTQo8R6`#x1w8Hl?hU2z zw@SB2>@G`o=l0DVGpxIV?s(rhcPKh>+vW{V7DYdlI6d*Ikln9C*)MLqTyp$Dv9f`( zY3VjYQ?}<Dy1xV`2W)7X&3!TQ#g_YJ4^C;7u1$<PYjQ^^T<~p1Y;57wSLPoYcL_!3 zzU1)vxT9<Cl=xEdw}lOnQx<K$5^BTMY|XdFl1a6+b$4P%zk<hPxvzJ4@}vA`#ELYp zZV7u>lA#n|(^&UbWR`EjpQneoE)^XT4Tw+5UC?*<T$pyCNSlTx&-GJJZzptV-{&}D z_v&yOUtHe8D;`?0D=wDwd<;!@VbwQycFy~(;C+dYy~{P{6dgTlpzInxzfZ?fG_qFj zcb!JT%!#+dx5`%qAL$e+oWJ&(A=A~_s%wg@g3NE1gx5_CF7Zm9kRr7F@V;v|Zl<wY z$u9ZTCd)prpm%lUrk(o@_pLN~^xd`M<gSPR*_1?r{->P^67tkl|9wSl%5|+}lge)0 zS{8M4>T!p8j1!)<{bE~S@$}Q|#6Is&6&1~UD!<lDw_p>OxTLDxcq3c(T$4#6qp(=W ziuvdLRxIHZRSVI&qMxE(lGD1<B|J24VV$9`A=6|ZnKYeKH~ydg(6#k{_8PAA?ydht zuP$SbnNifRFYD`~FP$Ob7d_*1<VxbV&Q$7k-u)zDl76b<&rcSdfjP^P<7Uh<_giV@ zyg&S*srUYy6Y@ne^v>t)FnMoxW7Dl=bxW(a#{SLvE>UxqgT46V>zAsN9So)gsO{5f ze$bo4GCf^j&&=KjuO(UX58f7YRK4l5VBefAyO?}kZ9?z7Y11|gHe~<9`7g(H>ETaX z`)yo4^_KNliI!^Hyt;a2?UxnT1KiD*Rq1}Ol>2J+?z8QyuXiSEnHT6UoVYjkQJuzp zcJp;*oz)L#mwvLlvFn!V`_|l25u+z^qNRLYD|t(bYr2KsNz}}q{eFkclz(qZ<WF8r zF1XBbgH^wG@3kAMZ`mhKT6y=_y1c$)57Odx&i#A$rPhXbRr@SrPD#9ZuroU5Q=LZ9 z#OL>|m_)L+_cm;v+w(EjD>*bxO!<l4;YIovFPcflGrvEudzzuNPVzjDypMZ>TA~l^ zTP<=g-iS#w=3?KJ9owBdm#=AIsoCG7c1`bQPsFh!)_i-Cq9ULD@7-|2ciRom%cqyI ze{#xxzeVF-^LO1Y(`o0|Kgrs+@>SrBCz|mIkEQNZ8=qPJ(Qnnhl`noA471pFr+B|@ z0k_ZBDYvgL%amc;GFh|t)t`T|?C*}woi>O6lDzn3Ud;od*DmDk_^Ysgg2v}1FRDD^ zul+Fj%J=o0;g5%(1O;wiwVq!6t>HSCx3b@v70V57GJn1*|Gx3|)w$IVf=aK;?Qpug zmwlayuTJ2z|AO5=>_PKwzHIyUWePJe#OXlh+psTJQ6@BiSCW{N1G)4Na$XYp2q3=0 zTfpmGAO<*tt{-$sO@q$dP4x9XY#?)N{+hS1vYv-MKYhjb!!~ghi#@)qGx^wB8y_7= zzLpxBe!XuSkNvs4xUY*I9N>S@E_Au;o=6&B<)lBKZ9MBL|5wyDw>ZDajySlhjmaz| zCo3t}`{*_{)oY8oWShQpKDN9l*%-3&8^@Dr_77MjXS?Ux&)A@$S>mGjAjjdt${ERK z$yYwU6#dNh@5!A_6%yNIr<<={CVyj!?@ZH2Th1#z?`t!@{Y*~wSDcITwQ|ecojN@F zKQ?$Sh`kqGBW1ZyeASJs6C0N$`MYyQHXRd+j5oLK5<d06(2V1i_Y96toXpcJ&E9@H zen)5u*Zl~qyYtfpMe3Vf6OK6K@42wi)^3N~&qfZ-|E}BB<sC%-OPX`498>)jYG~Xd zw9xA<>l4j&r&+8vB`rwiwOleO_xK?-&b0!Yzx7<n^qi->y`e-qXVXuH#Y@gC)L(Ff zJ9G2D88TD*AG_>ftYHF0{LKUBRU#P~7$TtSl(5H}1#uA%i#NCYqTIw1LrC;Z4LIp_ z#6h5TuFK;iJ9-|!+i|zVrRm-g)|40t0Tx&NdAEFKccxu(-X*&CxAMF_6@oDiNBBP^ z|6$o$6_Y2Iv!W_A_UiiAS6~0W%$;*4=}>cb9DnVL^9x0pkMT;GKS{cAl%sjM$@wp7 zMHg2XZs3Y_QPVqpImCENJ7;*-eD&o{h7s%``LSJ>Bi0-A_~pueHkLbLbmL)W=(X^} z0UBEc)sqUV<{#8Ny-H!<*UteaB|5=R7oC{U-Ewb2<Xqvswx+QkFE$2>C)*th{BW^t z4*&TbWj}a68+9|?dyweM(jIeMz0s;$X(F4u(bdLh?VTK_(vF!HemQD&+~9M+J5Q^; z=+w9O17|Ou*miKgh|v?{gR84ob}bGGDbF^#JY&hxT@1PRjI1;^^-NKlG)v8B(rwQh zt~aepZ?$kQb>DF54D*`m8~0yK@hUHvx3_xBjnmg(EL*cQ!|V2RG3{Bmt{%Uwd*-ED zafgNfwPvPD=X;(f&P+e&yP11FC{`bTGe|99WMB}beykcnV>R%u9<!s!Kfm(q(zW-0 zX-3(XZ%I7dI$LR>$1D$(T#qAHZ^&k^l)V}Ih;dJcwt1e)D$a+DHeKxpe2$*)bxALJ zHrx2;xtX8me*X0B0}rq943mp}b;8UNJ_ip>XzV$ZC~W1%(<604XxCh+?nPYOHgQ7f zjy?;F7Jh%e^^mOKF2TgS{NR>(XZ>atpLkm<_WO8Q$-7FM4g4+ww+(NvFZ><uGx5T< z7wmO=d`|f0%55x8`|V^HQ@H7og-w^)A1Qsm_X1xg6<8jO*<bJ@^G&yc(FElsHgfqL zA6icC+OqQHrdGcmNr~+Sjaynpd=BMghep0=So*0%@Y#RCsGzwKkJ;y^o)PBKWf8m- zzv*=J{adr5mb^F<uRD>M!?JjL^NH_F@51<9C6a^At&??d%G2CaIXP&ShgbiRyq9a0 zG>`M^Jds{d^H8qSYD>*OzFWdytR~&MWcq9A>@#*w_jOG!gzfbS2oqd)FFt=^SiebZ z+S{qu+PBz*KGW-5^3VI8N#qakRMx-hw0Sj*3=G+LW7wF;e4CqC0Lin^$PLc+7j_h} zb)KHLd(Da8no%O9zmo(7rZRC&&6=#HBH;NW$!N>vw@Ej1w`qSgm$Xk<q&o44{DXd@ zdpBcE9wuJ$EjxE}=l3&rtc$;0e=lz@=q#6S+M~QaQ7%m=Iby<LVbN}>s*OvMBAc~7 zu54R!M3lESVv^_i5S!~4`fHf<Ro0zaIN?AP)9XojD=Jn#5_R75uIl)m^n}!38C=Id zN%Oqw{BUdA>kC(Ay}j{|?Ql<^<s<bwTVji+Tbq8b*c>JLw(MkHms8bzN6lTP2N&el zuj-oSe`{Np@1=0tgSA{CJ)i2uR_vIU`bliPSxe=K+TYDL?KbK>oKbrHqwjoqv(`wP zXKRB3avK#hIroc9l{3Edv|yRg)%Ak+_h&5ZFFDHg{ScGrVx7&xLHX6WlU4_vQ1$-t zZr=NweMb$FmK-jceP`pDf^7>P^KA<eDcy5yPM@aFs~N{s4%dV~)jv_1wkuS(OgrLT z*oH;PPG!brJ3p@N|GMkLiyEiRYnGMdELLeZFS)ieBxCkfk-4RMqLJ=usS}e=l!r1O zKCu68IbXla)Mah@J;C>WX0Ly6>twmG`OL1w32VZupKr-MEx2`W+v|%#h4->Jmmiy8 zyzbuntJ?h5>ic~s=jL^3ZT@n+m-)+StxqhSnwMl4{n%%yxRv+G-C4Rm@{ru2i)SPw z)NVVTFF&Fbvd_uxJCmU^m(|ky{Vne^xi#<1{Uwv~R-xw6m$b$2pK@GR)|tEbyFzu_ zkC&Dqo<c5@CS|z%Qn~1V^X1Z5Nx6hRx1FyQ6qVnctvS3_-%;uC;q1d3yFV<>KI|nB zCLwp2!@xIF$XH0TS4Q|G*Oe7hW<GymZ*lnT!bU!}R7P1IUfy;awVxg*L?6lawADV~ z2bE=N%Jru@nHU(H@J`yAkebpB^pZiXjH!XA^DaAx*cz8TIx^SENm@gN^^midjA`0= zXDz{rI-;RYOq`{rz3P368<nd=CfeR_tkAhp((K~k)WM%{_B%uQoN1yuA5IjXJ7Wt< z@b~NMezI{}?|8YWX|0w_%o?HHDG`@lxo@|{mK7X57|JH-EB@J2;9c6x7=sVZ4GT^B zHpdtnJo*+Q6}3-TedE648}8n$R_k9Pzx<!_%$Aoq<t9Ouc0J2qm3`-Y$)34F;tspM zTh_YACMRXLNNP>Iba?9Ot1l<5cb2Yh{d&vi9J}z$wL)+GF7UFPd$7hqblm|{jz&`s z_Uo*93Bd`nO$+CzP1Jv0WD@vq;gyfY_V!&$Q-3@*xwvmyd+<~K6O}X4j92CxzWEc* zbof~2%!B{tN3Gz0Jo&@5{kskXoSwoXuU;vms<mhT1+Lsz6|4)&A1>2Kx-%u@K~<v} z@2Z*COrva7m%9GA@Vb`m^DCbCyQ(|VbrUOVIB)OzEob{)xnlKq&ZU2wzQ!+fJo0RP z;KwKxqu`&a>AI)tKfgZCK4X2H%&~&Lf4n)DVzkR%Zsqho_F#vAk;y+Pz4>kDA0P7E z;d}jA3-9Wmd|%aMzl*Kg8N9hZXYG?8yrA?k<;txy`xqG*X5cLeNlqWIdM?1%|B!<~ zZ7|nU>A*i?i_H%tEDrDGR1}i-^fCGPD6?^C$U@az)erOcR4Aw&`@#Gt@K~m6lelpC z=Fe&O-kjNYv;X|{a+iRkc|w6}R2L-K9=zAq=F1!1()0bst_h2j?|NH)<T!PgSJ6~` z@8Sldy1?Ttb8gP(scySF@$szJU7U(#SvRNEyJ<|D^*u?Y<n+b$t#=FAww6U##T|Zi zdh#b-$F<h7o*wi1Zx_9Y?t7bgL+yy~OLLv;pE)N6&6K|~Bcn^fkN3!id&2L^7e*PK za+AtTxzyq4oy_ifXyM~oyCk~G{9oxljOO2EZseQ!I`;Ut()caEg4P$$Z+pzwa$Y#( zf2c#mPsvj|W@$fPxqGvT<c;V1dzo^kI!IJ=J@ROoF(*;$N$9;b^B?QDSNCuwFD&}N zwCV|Gey8RXuad44#!XYXvpKwLK1HNSUrCkJd?8iImA~<reG%&#y(d#zW%hw9vaKQP zKVumg7*wbmeJ0TC9hzG#94b<mXMQs8lJ1g5g<E04_dPC8cW7Ls8*<BO>n*7zd%BXg z-<+M2xLdk>yF=|k{U6E_>2p?EUDp4r(8p{1>Id_mSM2{=9{V$#zj=3=!iR(Bo>)Gg zx4rt^&hvNweS9$e{=x)__|$+SD@_i*<VpKjCdK}N@373_-8}CN&lu|%>^UEhXmR)h z<KalX4JU3{vR3?XXk-YP<NugRZ`F<|j&jpYYfgOfVv~QEd~IFY2hM3b8dpp4Y}3hJ zk!4`&!E0)E#ni+kLTcU09qSH>UC24Sa=lckrouB8qkU`6?^x|ukQuVz^7OXw+&N1* zipo9JKU@=As=K=Jb>NEQ-;TD0a<hcIoMF7qGf_5th0iU19{moURjKnPl_dnQp61C8 z%`%M-niRMF`mA2d;!~e{OtVs}^BYsneyW+oc{^dERi0&-f#!wqIs4P@7@V3Gz07Ob zZlln(Uias3&9O8rXneF-*LZn;XsYpsnB(Caou<Avn$fGJb(Hayzv|(dh+V};GtQat z=zIByJioD)^<C0~NWa*G{6d9Wlb(n4tr51mcVM=a%#@HFR<mYYG3=Psx0okY=1O5l z;*^I5hXt(LB;6$X40{Y~P8G1QvvyhEZegBT>{GdVlT=97WfPIh`SU$nmmg*~-T!|7 zT;KKAvMxRT7M2-t>2pl}9)U3J9jhG=t`(hjII8twQ=jyXm5-+NnVxwu<5*AE`I4GG zeU>s_(Xt8yxwbmZ4YSwgI`xRN>}u!gpV*W;Ww$erSxHfVN8gG|xk^l-x70jjgeI%3 z`y~;0!|YMj*G(5qR`Ev0nK8Yty174az4!8%;<*cCBu;PBIe#Ja+^&0Ff--^<|Kd5B zs<%~|hG+86>Im<?`+L5tb=LLCZI$;vuHB`4_GsH{!^GT|SDM=#zD<;l`poQ^67nL7 z<x{TG{Ds}zFMciAXe9V)a>X2@S-w)U4g`Gk{ATNU;>9iXZT^B)=S*$BtI1EE$Gow& z@fUCW&w0z=c=InhsXe=IPW`RED?$9Wz3KUXBIZwhn(fk_{=KvA*CtWMl8fcJ462u` ze*A4I(wKI5qfDpj-c<o|T~9M~_>X_`(CI(+F?pkn*eMmEKWUk^e7`PS+#aP|xyYnK ze$kS=g^NvYG;L~iS^33S$g`T;^V+2SsoN%GWoJcSz7=J4?#z)*#?z`+CUeK0>g1JK za3MrLT6>|H(~YmpySy%TEqYhd5w~vpzYqF+yI1(+B~0MSil1?{T>NIi(V4sVbsJ@F zZH+A#xhS6cZ)K0F*#%#2-T54s->JCR30nRSJ2q*e@mznmb4yOBC#!efy}9P(>NVF4 zCVz`qHO2qq!%e4VNIgycoHb>6*PdDaYwiC$m-~_5RL8mN*yAtOjh;?Y2D?1D<gCs2 zNV0M5`5IDwecNx9Wl7&-cj^7w-@d+jpW`m|>wEi_Y&tnPrbF%8=Dx``jF<Ku7m;68 z{v`TK@$`#IncrRNiaYtQX3tWdZ6o0oaq8);+18);ZErku$p6M~?N8I+C&$0rDfW$j z>j#@ovAB$d?l*a?*Dh+aO`QE@VbAS7zBx(r#nq?3TRi<!Q7y}vMPhMh_KLieyv9B8 z-pQ)^C9l`)mwCBTEbipqUmgFVmSnHlFZVL@(#rMnhbKOa2UTn0E0<etV_{$@<A99F zVDFfdT&<Zw%f*1xUWXk-Y|VRp<pWoL4UFe5&t01K+)dDHgMbDHS6+<o<xHtuV^zuS zzv||CE(H(Se*`}A?Y%Vh0gv(Xc{|q^KY#rBt*qsi4e?E#Z<TJFa$Ad)asF)VI_@O= zV%A9yw?;XkH7k222e`I8Qs@zWyK0}xl$0fpXRel0>f7FYF~{i3ueTOr#!ZE@pUrO# zTydV0{p-8AGq}`4&Q0z3m38M^?M#)q1uFj1<}AkA6(3)m?tJFf*=p;gIAPc1Z^}<z z@%EQ~a1LLx$3{%JT;tJum(A}?ZKO{}Y~0vl^DyFQqq5o|d9UT_B^B>gE-Or!XdE!H zY|D$@C69|b&(+)#c6uGp+4AbV&Aq4VGh{yb&tmvw5G0u+xxq*$CF0D6DT$J1i%-tJ zY8;;$mTV&N_Sr@46_F?RAE<EKrS&=DkktIrke_~!!zDD=POF~fE@<}eLvB*`!E~J; zAHc_#ZYWw49>R#&_Juvx%!zNTdgi61R=DPs6hZHgDh-bI7Y-EoH*MOxpsow76Ro?O z^1KUOk8-<;2yD2)=G1(QU4Gl!mt`C0<nH1=wEttTOYH?0g^NehA8+1&+#-E@sM3a$ zG5cn|JTvF>+<$-mezkU*;bhjusIqv5%PQW#GlX6(YiRqBr#U06Ao`#zYq{tdjUCG$ z>}z7@lGB<obz+}V-;yTFM0rlr^$#{SsUM1+uu&t~(`ieX>E2Dj_fJky@sQ*)h%50j z+wP+9Xv%55&nISX-ud>dx5Ty0x1Y_+ywSHY^V6iwn*(%=uE%a%tuwbmQE|_cDH5fT z_w+Z-O1Hi<^<#)r`_Vm5gL|E;n$orgmh3fj49S^u%k|@&J>koXIBlzxB%(}rrm|ct z;aMCpZKKd(Ewv<xBLO^zoos~*Se%6v6qmiU+?-K-zEGPp%KLKstu0@pr#sAE_ME?r z%g@v!r*QVSWR_c+fg4ZXi&FFVxc0^M_AEvHMK7gid-s~Dm6z{yb-4J&ba|54iMN02 zPanNoH1q1qg0s=r-dtKE=FFDuWIO%B%uBPx-#uSZ>BXHFEAnc=w#$BZjn2%9Tw|~} zq3WCT;k%o4j`eOjY<t+4J2Xw_?ToEF`WyeIzPrk=Qt~%Cb?=6=T_uO_`aUvxU4QfA zOody&^prxK_MAI&Nvu4#dvnmfM^{!()k%`nlWU7yZRl6C^vh<Mxl46-OxV)mXj_~p zmi%QOJHs#WEgVTFvjy+`Dm$`$Er;-bsfUJ6oSSr0+9#_|m^Ar#hNaVr#KVWS$tix4 ze6-t3Xjyw<Z;FiY64z#nNY5?4b&fw4$7?+NwezKiaqZ(fB`apCJ(GGFza_fk4S(pl z&My8Z{y)+i|8K7QzvRG*RVn;}!M8o!LoBtkl;3}ddh=!8r%IOiBld;~6V6On;wk14 z=2?_wQr@xTmS0s&??kykYme_Mr+ci<O84`5aq6dV(S3pXQm2dWlD~9h9^c_J{p#Xx zY!*Hisvo8@xO2!aejmKy82G?_G3f`cSD6?XR<PhJ?~I7gIU%62XlQ8{>KlAHK*Y9x zi>LIX@QqDOkG5xK@-{tk7iH0jTH7QRP$GKkx=`bi$u4f+c6?{waY0mC+)DZA#f$O} zuC+!_|Ht)p-?CFH76;#Yx%d6P@9%a#-&;MY?$5Vx%qmL?<6Xsnh0Jl;-^Dmb=-C#7 z=D?CiJqGEbbA<oxY3lhP9^z6EDB%@osN#0`P|Tz*@3hc^9bFQ?lq5v!bec{l8A>1A zabuq7<Ve<Vk(kg4$pO=LzK-lWdqAV>7XS2RXLh>2yU4Y@_PWsG;P0RNq7Bciik$QO z*qoQq+-=)qRu<gWu-=ycL+P-@;#ZctkI1KL=Bqk0q#lnos%3hSEtRlmp3})stf#mA zQEc<vJM+%zX{WpQJzmFh^fUjN)XN)W9&gK>K4<B~q>0t{c5FRi+$q_1VMg#Ho~&<y z6T@q*_AGxOb$A=scXLYvo)@i7NvDs9I?aq)DYS2i`U@}ReZdQ=w`lY1{_5h8b8(Bd zo5Adh1tQl)pP1fph&t%YD?H;$0rz%OkqOr}$lFTsEoguEWZLcp4;A<fmuxTL;B7B- zxiIUJL9ZllIZN+u592pKC;xkKxM=2Xp2UT=p@((eO`Nny%J0B}##0lrHkHMe@mQN{ z`<$^|Fwf|PuY$>@+jZY;%|EW*`PJ==NqP1D(;f5Jv!1!^d{emS;zxboi3@DbiJy3R z-DTn1DJsv@Wlw)Q`ZS<+(sjM*vzKPx-mGP&FZxV&y20+R|FuK)f+qQkeyVzBZ@pb7 zNb&1Q*URGm8S6xjMDBhuWyMmZX=k&h-Zt@gS+D&qUyxnv#Dp7GFKgY7J8|eb?O^!H z%<CVtraDOcr$BB0BZ;HOHLJP|_AYHuKgqixB%fEeKYK!uX^Y$Bl*6wlNXL1q#XDE_ zpRiigyKq-uSf;_AHjASdD}Kl-ZC=Tn(R$UOyZz|A=lAz}HGh(tw6giDZc#n&ZMoTw zogWrBO<r4Qxo*k5gzCi5v_i`hzrJuiT73Pdk;;qdF8YxND`)IzKf&+eoNb|3u$!~Y z{kid$|2$=7w#`}xcK?oF=e5S#;qRHaYl$zbUfL@#+;*HdaeC73I1{m#f>}DZzN9N^ zo!#r4Q^uUT@viBS&zFvxzIosKb|vfccZ;gtn)H=U*tz-Ep<PW`@hp4K)~;>3e(!AU z{)pOz(f7p#4ueN$mYq4bF`Su!VIj)7zU0pP<d>xuC8noBa_!tnx4l5~KKpa-zRJ3K zwzBMV!S!5^f{N#iE^~Oem|YK^Ueg=<d|J;op4!=WD_5IyaoIKSt1kOmu-u?{Vt>s~ z`APAgzWw{tWwLEUVgge!+p~=ek}n3_o79)eJToG^WQ|bD_nL?9>@1n9iyRlodQKO9 zVk2joav?o%)5VZ;Q}ypmzV~*);-)oeIhl;<dXASj?an!|LjR?v@VYnhR($-2+wMQ! zEgH=xm&*LC#3Fa|iT%qSUiiFYL3oghNzz-n<?cl%n4f)&WqSPM*u&-%)0M6S8cl3o zxHu<?H<;zCVOFhNo%Om6|K^{ua?I^fX{tH2;CPFB^jp1hksXiBr=`7q9>wCl|Dck_ z5r^}xFRGh%r^`yNP<p!mMO?=03s;4YJ2Q6{uB;4N%jMO1$>%HQ6UCeA28L5#n50cf zR9b&1$n!_vFR9F>VjEZYd%T^#MKCRH!oHA~vufL&G>w~nHu>bFyuDR>sp#A4TtUci z@|C{H3K@(H48?eR;lxe@L8B2eqzsz|3Owy~#6ZM0^YxXLUk&%kFMgD_Y?14BI|sI@ zO$r*j3PqRC^egpg+s3!+yK~9YW4#ZUUH&lacm2cib=$r$J)aZ4etGXKEl+;FeOS2U zOu{86zQ1B@1~c5H+b$X8Bpo@T(JX4>H~VXs)ih4#&l0yb^PcaQ++urZ=h1++lSYRt zG9Nc=-yyA4-t8SPyEbICQs4DMZ4nypjU+^$ax2ByuIx$^(vqAlk$i$(DKhw?pnBcj z5Vd19x>NpDt#WczUH|6h3x|tGcJy+J<jly}KC%6%!TLo9p8CeE<u0GE{&1o6_9h39 z?aNXgsnzUPywjD{*}?uOIJqzJm%J-a?frRs&d%>n7gu#ZT>mpw!=>rBwGkh)=AXB_ zx`cc#Zhpp)apk1bHYIVB*9IpR`tF!~K`3$VGt1|4XJ+neF5|vin76<_YP-RgrQTlz zjJh(jKKmpeH7Wo2uc~)T=|zJB7kn49vv$qBsrNTdD>Ei_xkS~)?^BCCEJWvctgJSE zb#r6!7SZ)}C*!xAx2j<P^(#KCo<FsPk%7UC`Y{a~G7F5&z5?o7$oF<`lrLMm`fljz z&~MDW@0#_mHtB^iu`YC7_`}3^+07SaX`YXQ?*CP8df*+;a=U4f{Q>z$&Gt@vJ=fL> z<s3S5cJ7_xcRSPf{r&SrR4wmO8@u>(+be|!k7~x07{niIW9L3wwEM|}P0iXY`odZh zYyWzQvT$+Mm2OZ|o_o~t;knPDb5$E9Ix`fSeFK;1H`mNj31W?o5_MEGYd4CpKBgn6 z_HL<`?ljJ`*IscOiaD-2-4&5<-=Q?~x%SHdy{+>F*X-+4&92xYd@^ui)>P{Vg&mzb zVI|viBPQL<+N@Eo9s2R{!`BxZ9M^7;{WarADEsvqokh<MAI?0qb~5MJhmU<u8b5t( z^^9Zh{{!E@Mx-fCZ2wf%@{ZG?<)*UrA@%z7b!jQaul{f9GMMZsXdhZROG9!!f61|9 zKASz=k1XtZ$|v@tEtY|8e~!o3qsm1lKaW-Vom*~M%`w}*VfS3-faSaSlljw@e-?Zu z9#OsF?C<x1kFVs_v~9g;d*H|~>1L_agSX@D?H1IeRYWSxd1~4%^<MR}io4eDTf0L= zAId!Y_h<LnySjbds<nF;y+8Z@aAcm;`vmjy{^%NWzKf7y)vk%$zYZ}nFr3GmPKce* zFDpTAjs^MVUk2TQd)t(+&CHkisqzJ;+__6KjxL?P$Sa^LL_~AN%A%K<k8@<UAM1N_ zRO$P-_JT);7*#lgoc=KU<N41p!?aO4XrsxzN~!l}s?Yy^d;Ix&g97=rMlvy)kF}<q z-qH4Y*RF>TnDVkB%>Tr!y|E+p@wQ&kww*C9`l-hPtX>IKNgP{vE3x9;*2yLhl63w| zd{Vpcknp^xjta?kK1oNXzHpyp&l&u3waVN#N44hWZ0~o~tC;bDS&)B{cz;cN+Re)b zlWzCQHSe6wqvBloeyaX)EuTkcj%hW^dX!p71|R<*^_z$9;k};8FHQS)>FGV}>)oyQ zZedpP*`rowF%>Iz?cliX%Iw>A&GN;&XRiXpdAM0GdmLeW|E1rPxw*WLar5P?_Ez7m z>yL_j@qF6+f7{#bPtFz0@LaU<k3Rp&UY}FKxu=ZxddO#;wg^yO6|Bj2H*nIbCO7fb zU-rvRxGAFgR>)!cVHI_K;d$y`W^8b+T>X<XXS1p6%N(xeO_{FNXMc%5SJp{BUDNFK znR(5uot8&q-d{;E-Td#@^Y7m;oM&qFl-3gIUU4bff8O#lU-r5F&iyEPSSV|ATI#he zU#^t9O791kBG;LC;`cK$Fzm*gI`oNat-GX_WhO%_{nEgTS)jsWv!~f?lUr+})|zHV z&%Y%i`5`n~BP-Q0Vnc*L{2bq7CAUg8sXSJ)`z^Zf<!L8*uGTQeCGr>ce`LR6UHE!7 zfAP6HhwoIM-&_3g^>0g=JID75$ll>F?4Qk8b7#|rgooQ&UFFMbj_^3<x}=s}VLy4` z7tg*cH}7YtO>Pyuom#4KCUuK;SNW#2jJ?a2zjgQ0-hA>xbnQO<V@<0k?H91p=HGrP z<l5J5T2Bsdjb-~@I5Y6zhnK%Y`g*iV-!2wU6f3XQag8|U)xwb2BFR0mReQ&&4PjxH z;>r`>dD@A%$$qGs^E~MD_N8WbIuaFs3R{M0ioQ4F<62m3C-Ls|6rK3}CRgSEygu__ zO_VqHf8#R-;hq!sUfFtT>zT4|r%su8)~>m5&x#>t%bM6-Th}~pTdX-bKPgJp_xjR` zzD3Eu_^1Ey{=};j`M>L$<Q&c2!QUnYU-EmHCf#yR(DwN1WkMR#5lcQdoZGzPwq&i7 zM~II=MA7{mp9x3oPCCAsd`mIs$j=+uF6#wtwbefMf8fbYFK*H^&HA46`=ERK*GK2~ z*U!7LZO64U9>19(8!98WuG+MUk%7SvZ!#cqxWgs0C^fkxzo-&vxT6=m8Ck-%JYRS5 zqhqf{E<Tiwl@zOSl;t?ou%o5LrL$B1bXoW*@7*QhEcQQ?|H#%|aA~`EME*g4(EQu$ z1X6^if3bXi@AI8^Uu=Bq|NZ*LT<DXa+H2QSx=_4IidAA#@9Cf^sZP_Xxz3n`^qe$W zndJ4THd1ay#fnFPQkN@quKSDFga#yaaGy>~5M|rC>*VU&XZOaoO$lFbzEfe-;n?UL zBbC;z8xKqNgr48-yE-v&^Ug%h^xHY_Zkv^#-SwQy_=VB+)VT{UZ|-~DVc8~FTYCD| zcAw+M@lknaZ^y0(tK7WvQ9$%VQ|Co*uD*Eo@@cbHKF9Im*<3Gbwx4zVc_bu8f5K_K zThY0*C)MZ{dDX<)b!qJhKU5yG=x>$cpZl_>x1KF1cROs5W*T!al=ZyHnZyuhdo~lE zQ${M@e9Sz}_48xytiHZ;eWKj?lUauHX(6Xh&t;7iYkq66F=*bx<um$~bf2p8i%c=q zNsK%!dna|quYQH;GV{Y*pUdm*K4hPAVop`m?Hfv+3-!6SZ7Q1-H$n91tl!};c)HH7 zjXFB@U}P^_c{b1Cs-HD651lXTbp86Np`RgtO<R1$&EQs>g4w@Kavtt|z<%)so7LR; z2Q~ISsb!edadM$x_sN~C7FUkNNM{~u(NxKJa6QA;X?5lyiG_(W&600843qb?{ty(( z_1R{4)$OVAllNA!oCbFmX#49$6l~W~oSfIA?@`AiC7D+?Wva)%tAT#5pWgNrDNTBL zHuH4;%h?J~-@XsHFSFRYEVbzUrXPR*Idi{Em}$8?<h+jZz1w%2)O5ELtlX~tr0dCa z=Xrm+cs7b{n$INs1H6sZg!`~q783)*L>7Ew5C+7RYHq2CC8b4(V$Dy)P{elb%)5<= z4Xv)OiGd;~-U+;A&roRdFxques(0UyD|0muZ}8qd^QDlTgZ&Zp_!>h&pPrA*KP2oO z_s(@a)a_f9=l|Zb+OPWK@8AAADmvCO1n&?{kle0&XJ%W!DEDfyD7$MlcT#8APB_%V z{WD19(T<b^!^39+ULUO3vi$fdgERgS=K8*Cf+|lv*rOcy*K=Lb=EEDVy_4${K3IG< zo^$G}$ICsHP8ZqBpE_RnT(^1q^5ByKHrBpRPCSX4YWL3YOzNeQ_3=-(S(m(fboJX- z>AhulI-SoX-aY<TfPaHvlCZbpGQpM^8wHZ4DPD3tcGN?qebV>Vlk9tJP8zNJ(HPby zeNo<PpFQW93oCN?TTfN2uU8S?bm7l*m3Of_*Y*VVJpI2^rF!WU=GUKgit333Ey)j= zneMf0J%4H920wp0)(giit{JVBdA(~@%AQvhBKh+wns0P>G4H-;zTxdv{^tdY-WKmj z|Dczx+qG}eH)RXwyLW%Kux+e5y{+nf?6pmM`|Im!8)dmoY%iR?l#|rCA@J>`^x(CT zZ=ZXeC}1|%zwKM}DB$bcgWCOSOn<-wxwBj~?yqHJV2Hz8vJpA_4owO^nZ+fLuI<#| zvwon%Nc4=~PDwnX6tX%<MD(pZPt&4^HA-GVms?s^an6!xpLzSG!(7F=jaOv3YdFGR zb?K@F33b{v_&+$L{z36d@$FSRE==)!_j9ME{rx%b@0`DHU(?hQcqjB?yRp`}q==5< zyB&}AG;uriYwXbYqAIGW((17?U_#hL$FPpTLi1%#$9FWH=2DZ`Vr1U*Rcij{Yj+zO zMJ1|khj-ukk~QtT!OtZxuIAj0Fh0X|eR}VK$g6*OZ$DcX_w9}Yf6r5`>(BYqo=Paa zH3~`iV!*0lYV&x9--L7tFR}0*UgvU~+KUCc?|-hzEV@6xe3ebOhi%e?=QiEOE55%{ zi|3X(|5en-=*tw@>si;6SEyNM#+$_K{&ML2R;#d+m%Sa&7QT&nW$?oENTKV&P~PAj z%N|-SGnH|+Kl~#xeMKUJVOz=bN~ylbEer+D&VD9+kC!w_@|w3!KCa8V-EeI}*kRc- zhCQWmyI%a*B6rb#b7Vx^L$%ni|CLs3_%NG=O;htm=l^aSrE||~riOgl$MI%$;o+(m zzxv)5tq%E^<+zzeH~Ephw1Uy@TsfU7r|ter$97xZTB23{c7an{q+!<P#upJD7uUCI zzHdw{H@o*OD}eoY{`tiZqV}9y8@Bhj#Ip43>=%UJ3gt|`s(K?k>(P>xGZ!>}(fnj4 zxNtcK%S+o0XC9np+jVIs+mhH5FTYfukQcn=x+7O>cZbK%T%HNies7ewOu6Y?p6Q*$ zDfr>raq~>Cd&dkcC(hWzpQ>rB;gtNzh56NH+b>hLrHD<AJ{W)Bv1a+p6D^q&{Ft0o zSl5aEVs3n$xsB1cvRB~tNiSZR&SS45BVT0H8cPegwe%QB&i<M9dE$NEYT<l?37vso zE{4CzOq_MYlHmdO?M$Tu{-Ew*g!awZ)0h|-uHr2M%}6Q&gHn_8i&7vdzck>s7qg*& zZQ<>8yVp&RdLN~qpX>T)w^B!h21jdErGNS5x7TJ(xf}6EBc5gTgJ$^$?wylGYcI8& zv^;!9=G+s|tP>yKhS!H(j~*AAW;<m=(#=(=*?QMva||rpj_|BG8gOZEoEq=M$1bYR zS{6p_mgv~{p!1pRLZ#YrsWzk2vrY!cUCo!^O1GNC^Y5p#hP&EDt>TTIpEsI>hh1HH z)${t|EpxruXB?c?oz;*#h1usY_lD$|{QVCDmK%yI3w~35&o%kZryQB%K_BOV3N%@- zds7bGS-wfxd9E7|_s+cw0}S)a*^N{_PnAEu_S^ckcQ}8>{?3<XGoPxIr75HlUAA_U zN|@2EH?OZG^xK_bHE^Bo^Zd;Di;RosGM!4-ynWib;ps8$h~)pQ!NL||+`=OB6VA)H zHnu&}6bo2(oi8e-<>)cvImh=*O#FDh=;Q7leNco6b9IRLGBPkc#(VSvX$4hCVmkCN znAr2)d50W$*dEkZsJ1c%mfNz-W!}(ri^cVk;?~UVCmItaIE1J0$n>$YKL`*_V@*no zp067H?dks#H(6#DIV-t1)+P(C%lF@B%xha*Y2+K!xcy^WpGxtjsDC>yMc9hGs1w^( zlyX=8Df`pKzfG(<_X)}GU7k0`$63C%v47E(N#C|aXwRHz933gUH7sl$*Xt#Vb;6Cp zp71U8@(kbetnRSR?G>%U84}rfsmrIeojw(j#mRAn;or--iw|aP%F5Wdm;Lvf>FnDr zA9I01YL4L3^(Pn@82Ipp6p=FwZUyPNAxJX}LASjQI|$fjFS;mUx-IMV-KxedS_jiz z1#%UG0$gh1FXu|-nkz<j|7G}pOgvue2k4~BM@v@ZJH^hh-Mrg)bM?7%$DiM}HhGhL z{D?)G?~@7UhV4JkM4$M^6=lq4#n#0p#;ar4Bim{ea-3(npRE_u^y7E(IloU^{o$VP zZbyYBw|kZpiSEzk{;uQGvVPH$@TpoaWv{)jn7%vlNnGL04lDJ2`j@tdZ9AIyv(3@I zSE}jY8oOUgVTmfi%%^$W6t0x&FB3kiSuN(XMj~SC2DaM=cD3?O(aAZqZ9{8r+g`<a zp~^wmXC4obRQhAo+0;@lF-Ng!|LbS<E2_lz*Rb()yg0ajYVr&PQN3AbLp0hR#T!j( zTPg6J<y>W1;It5NqX1ntYr#DaPll-S|8t0GGkyM^|Kllhje`s178o(OEtvdia*Np7 zZ7Xt34mmv)&B@>1KXJL;7O!V7YkT%7NC&4_E%l##_P{br@41R8Em3)IDh1lWDZgn? zFH->{14BFBD%y&Hfg!&rT|coPF*zeuKPj;!Gh4s7EImCnPakQ^fqPD6nsa_`L4I*& zNh*i|DX!**`WD|x6Nqd4(POZ~urPS{+RG-oVUJE&^nH%JF0o<pHHR(+=i4DuHy*eV zk>v1ghWGL9G1ixZ>m80yKT~2PJj;*&C!^(8@zPz|Dgib{{Hbl}-*2Xue|`7+RqOWu zf4;Kq*}(8SvBO!BCHTXX2hvSSjV=L78p0tQ+c;OTY&EFizCZE1?Lp%vd5)C-x9%s@ z9r~cG!FYqyVQyo^svVl@PebgK^-r!$3cIH#Vl2eWQ>UC6`&zOqEo92KiLZ_ZwKaa< z;9z9D+H~inTUzO=K{h-`x>}949V}R>kS}(W=V&C`qT7)_Jy%Vd8oX(WUv8?V%#nh1 z4ZfFJ?_74Wo2@@H_L)RQ{gk=WS3ld8^>~vh+p=SKy>7Es?saS165Ou#Y-!NOIeML~ zHeZhxCM?oPeH!C?F4f!B&^M6Z?Qn0{_VkWh>#CYOm6+#99yrMRcg1N3kC$fse4%GO ztp2F7)%0$=^d_-(^WFDvBESBd92c9p`i4gHlKhDcnc|bTO^-RUNqF(<jJ?~E5}bCt zSNPX=&uG3`$%nvy$931Ht}!aGRqTrXeQKl9mXgH1`72iDg}>~MdVXR;&$?AIcC*$S z99Z@>_Kk4ns$*@*X8B2S%e!w~yx1V)7W7!s(6`FGLz^S$YC&Aq?w1mlJu#b}AAZ!M z?9$veA!O-8w+Zo^YhDHG_8wP@D=yf-Gc@#0hRm!mJDw{R6&$-|R1!Oztyxa9lyinX zP-Fkj@lM!A;Q?pf!Ltl2WK0sKGBYl-j8KVC*ui_5F{5Y$yDr<buX(`%R$jIKqGckB zOBKHK&Groymf8{BwD8TAP{#KBC0`Hs-OHBLvixyxcKW5TEz1IK+zfx+wo|x5Wb^;h zh>D<$vX4h)rau=+=68Sh%3X>pCn-6uCA*^h@sBG1!=XExI?P+vNpD*Hp|SbA!u-+? z{1fY+JdjtOU;H8agni+M*C*^tKS-ajFaB_TqPk3t-2NSVm(`!%v}5VAy}6MGH+4@t znr!@5_OxE~w{@xEYwW)3RNvpk?<37B=Ko)C-2=n8m(w4x%ip^H<NARQ7a1!!_WU`* z5Wyt>UbbPrf`fnx$46skj?bH!cO23G!x*De;q>gwbViqR>}o&41rqCji3&ZR`r@a< z8=gmLIVwRDUe!j_x4P?lWjjhAemdu1s<y}$C&g2}tcE|2S+5O`nAgAg{PKjL`nJsv zd(uDLIum>NPW$uXwIM#c13u0>XlOd4CHPIj2Yagx;#&K<=l{C&=W*f#?g&{qd7oMK zry7ob;X0(R^V2*0=Oo?rj;CDvZhhLdT4wXpEvscVKJ8g;lXyDvhQ!Hv6VLq1J2`vZ zrt{P0?>HqFEf$-)Ubp_~F5SB7%=q1>7^Cks%~3u7aO%SPQ!8ga|MI0d(r91vuk-bX zQmw7)9nGxIe6!jNS)DWUjo~B_76yj39Qb;Qc4U-2E~&-IMVSTAj>6i|+riSQBL8zY zopie4bZL_o+mw4IoC~#em$7PbG2YTJXPsD)>N#zL$(v($dBx_w{PDo&Kg0YlzO^5g z@|U_@KG@gy*jfJ1;x*4x%<ot^Pwq25X_<chZTY^>b8Ua0-@pHVrvlqYSC;fb-$NcO zj6K^H%O?x1a~C)yy+$(q<ynq<hg{gzCZ-x4-Sv_qtw6bH_6b*w7jMhFKJ!VZ-AwIU zT4|>9;jz->@|k;%x2dX~_PLk7>5zlGLFCh<O+L$1o~YJnC<JZTraf)t>~+cyzPy>X zZSl&`>l&-Is}62`W61dMbzA0+$4p{Eo2SJFZS4xXaph|1S<}3g=loVKnf<CQb=RuZ zYp0ifb*n5-p1IUee`ey!$-CFtCEmW3cWzC{UDfN?w!Yo?q>I5YTeP%E_vO1SkufFW zW}Bv*SamC;d&UXXVy0Us%!03Z?Mn-CP|pn8JS|n6H@LXefB%!0pWDC6woQI|*pkhj zRoK(&on}$g7M{yzqe3sQ&E{Ovy~S?R`u?k?b?HTEf%|KHp8s~0wqi?kJisyaa?awu zmZ0@hAHRH+JF$>aUhvw-(}{nN8=ZT&r{Q6`;}e$oCw_>`KN-=imKf{C=*qdP=emK) zW24C`(Pk-A3{(<>+ZuHx!zWHG<W7~m{pPclkde={xO8VBO-W{t(_h#GHaY~%-+VRg zWa7!xprd^a*=wiSEwyI7y&~ZERW)aRC9!CkM@yIc8=e)o__;IY-OGJ~Ya{09y}oV5 z-#_UC)2UgJLE_i8zX*EmXR{>4G4-;%4by_3e%ph#f44H}%Z*U;_24eP$+2YOo=Y(v zsh>F_-h0kn5I!v;&|y{Qo$hU+n=I8%8CqU0e4Ewin4vt!d(NGYGUb~WFS>apZ@=#J zsNHq>=4T|fU5*gA_w|bDzppKGo5HSzv$kZgRLtFQ_|>MhGyQh%>#%9xlYT<psH5+r z>c+CWvpYI}`CQPoH5A>l@%Kx9jx9%D)~b7|{bbS;s%@S3?$W&J9raVCIF`sec-Xoq z{AW0LUxCf|3%9L{#`+Ggj-H1<udEkf&z`{6vE}LoJE?b^_D(T^)rYD(I3i9@P(LlJ z(|*Fc@7w*K|31p=9A&xllke`zl3i`V7q{I$vv1wP&*BT>6xK5BU%^w$==x}7$ey-! zJHIH;QGJqei+Qem&twtpcMnS#ROUwR7T@#y`GUU>pG$lyj(H+;ch2JPoigbf?Lr3} zEpp}TYo;E$-Esb1dpdu6^+n0T0KxAcVi-!orp;5=oD=5cwWCdZ-&v0?mpa?*(w7XW zAL?ByH#Q2{_Z4xj>c8X}qaY_BZFcM8zT6pF90L9yu729z7Pm3N`F=ddSv~=q>&6eR z1|Rm$?&X<2`<#IFq=!%c@`Qg|Z|(PS&cg1+kK<Gn&1KrZFWmLFdCO0OdF?0W^W9IL z*~KZiUsC43r1G0<&!5h=zH&Wq;%}+{oL+km+AcERZLc(C-+$kL7oRu(|L`OK;lBQY zuaW{uye$&SC389&{)30_XV)A^4rXCs_<?fEHu|i+De=V@YN<6f1iF7{{uEZOA5MXB zT1z=rKayryXmg2Wt0%AH{uzyWsaxk}F5A51@3Z<3`9F@jn0#!uKOmpF$2i9~Si0HQ z>iN9lw0C!QZr*KQU;Dq2<Jrc!PF(#}7rT$ARZKc0G|l(R6&~%h2-CxxS*{61_$wTr zFhNOtMRI@RTH`Ozm#oOv`=Ym=C60w5xj^cu^2#sk$`>p(isH{a%cpxvAUy8u<69e4 zoY!m={LrPCsdQFsX2Ofrg-<#EcD)bJxZNtd@|52CkIl;G?>@g(|NdJ4=~Vw6?Lisg zvm@V?Ev?LWu5Y-+HQ?^|E2o`Tg`Re}y7G&S^Olcy#6`q3b8bx#xwqkrL(NU`eQ}8z zDgW}1KRRb!cP2J|*K6OmYc-F~t_<WZ3DoWnpPp8p**!<+VxZfpd37Jd3n!k@nR?y* zo}B2T@a9!lyL5X`ZJL$1{{I<^RNedu5i<<cnHRoX=Ar2k|6;=TpI_&!xt4PG`n<FM z+Y%2vIpMj|Yu^L6zO+wi@r&PYeeEf<O>0k#{ah#hLk60&7lmASt8N%~@1Tj9Ow2J+ z_T(M24lHZdJ!7$>t&m+fZHCEVkz<l~jLWJHua?)?@Amw}yhK;Wlbar0nRayZ()F@i zKm886@$ACf-oLNIUanzT`a)%|u4X{_!-OgS{)+I=FlT5!ayhrA<41wCykgzD-udcv z3wz^L>Q?slD`iz>C1<U6eYN6fr+~WioJ}|UwU-snHM*nlZQ4GDz(Yyjq$A4SvDn_+ zDD1N7bG)Fhx-^?zjg8});Er;xPCvz;lFyD82pd04b8hJ|nD)2n#PSR061H{E&A54U zUD=w{^QBuS>;4W4x6aG`_2o=(CY!iZN#X5BvUj%bka%Q!XZsHZ{<Ej<gSvejN|F7b z{X<r)_^N7a;?sI?W^O@FDr$=F4Y`{q9V+mzul)M!9k;J|?)rPsY{sYOI|{|Jk`y$T z_0DE<_UMsubx@t+yT^?C+`6rC;U{@txymtI(LNF?I4OUJr)yJ4s13vV1I!_h6giA{ z&py(z;)r;9+P<GZpPiZcRleT-r>sy{gkKWRQNbk!b6XnCBdfdnrE8}AsIcyooHBXI z-owXt&-pm7>!#qDhiOdj)dLT*Yvrxnp*vyIoV2^|*KS$0?(y#0_38q<!-WH)WH-x7 zd}g{;cC~cxvbQt#i6-zKD*M-}IXmzEM^=`n$MSFWy$xr1^;7kFwshL{JAY0YnfcuR zckIR8{O!8OGX&>8oGmSTI^xZnEn$(fvvq27@0s)7HhorJ^LpF!nbxMuZ-1BGmp(JP zcycyV(be22rpLLb;~$)Bm!AH4tLGyB3Gef6*eYN7uc0`9?iT4sy#oJhB<$0_uX-1D z{q4;h&z~ptS<VFq+}$d>U+Uh30HvJ{8AoIudcN8yDWd!+`{%9y_fuPpoBT|dOuT5& z$0_<*YSoGC9bMukF)iyJ3h8C<XgaO+E+gVVEN}3Rbqfz1SNg>Cvtd=TRj#s9R@80n zTB&n3U$4E<&B>37y<a9PDxbCDp>pG#r<Lo>XB%7Er58J$d;8mR`_$VUMIkk75;^B{ zoSE~HSNdDn_T;-8t7gx;yR=av{fza=6E^uNU$SiU8xKjox@NomZJ}RRahBit@4sf- zG(O0k_us^{ZZ>Dt{ipw~wLRs{k9d`Gp?B`Qe8EPSVBrh>-q&oSrmhg0YRM`Vusf$z z=2UkTr}r<G?U|+@jB2+hGl(3i(Ddm3sKqjAo8p9UCC_RnBhG`?F6q<OyjM{6E81RQ z8~lfN(S*ubciernPBX{o{^^>bC(f_1ROq&j+?qG1oTeN1^UW8%F>~VV%b$MPrEGh$ zyt7tgq1mSX9~+nPg==WHE?Os}Ah@Hm=!u8tyT*DZ{YOhz?B;xB<rb8>>B|@WK!?6{ zfA2G>##(XhXbbn_>{y=O#}sF4>R`)R!Mom_aj^>Pd4H=<dmC$>NO#w8#Xme@TiNxS z;ki?JkNvR|e|!Ed51mx+B|2++NEq9XN$(eGFAaHhTYf?xPwSVPZ$y0GKm2w06vJib z9}ykD7d}r)xVR$HCZT8jTJ4)#V_jc({kr(jKgiOqK{TXedXS~o#9p4MU!r%(eEh(4 zN8*!@i=6$ZSgyB<>o%QHzVdk2o^8_NRda6C-Rah|Ev?BkkJ?c!^mX?M7RU4V*Ry45 zPE}Z^q?{W0tn&rqI_=jB>rHob=>4zx5gs=Ey7ul#Cxk9eX58}hxP`r4RReeR!3)zr zYMP`$?tk6j<&%AunSnuw9bc(I<X{nKZ~<wsXl}^eyvrUU|CVhtUTL^xi^L7ydhRW= zTUeYMKTKx2ZLgpzpun+h)s{oPY6nfWD&JNp+AjWqC8lY@gJtF(4O^B7vF1(uW?I2; zui<IW?6TG^yO(62E<QJB=I7e<bC!?o_wV`3z#18IF)?X}c=U(OeJVj#mn;;v_FUN{ z!~S&E(LxV*eZJQc2L)HkPCaaB`NX2{^^3!teUq)s9#09%-;yO$*%#P%ndj7<yHd{Q z-&i>B(Q4{?Z{plG@#doE*L8PihUal-pW~Zbsl6k7J@@rhm3bMh-(s92o^xhxdOSJ3 zqt|Mk@VvwwlinPwzVy*m^~;}YQ>1^bt@+qjdw!eD`CVzdL-P~Y1PMA8oXhN}dBxUj z^)QsR*{*cI(yWD#cQUdYuADUSkgwRTM4c+p-@C3To$xIcT<7NBz~er-^~!$>Gxa&I z*Q&WLR|#fi=A2`?f%mp$ouNUSVqYP%@C*}!Rz>FL1@jI@srNR@e^5T$cU7i$yOZIw z-({;Gn7wa%dO`eKQ_8*rffJToX45-m(6vKFvR$ID^khVt*eu?U=J`z1CH+cX+C0=X z*?WL<|3`hplwDu?yAEHFm))GWyL7cldHbvu#ha{7$EyoWJzFnDZFkwaaF%>rdA!k= zpjz*(Q3@J8Z~tFga;2+L;Iqo4%ac5;L|dcz^Cx$%3QoN+Y4hWiPVV<!=xJulYBzFE z+^)aK<4VH4%yk!h%c~z>3!0-Z{(tr4MXv*+)SrA8_$d5$m5)J=EC1dSM}|pPuB(Jr z3Ey!1Jl8~e;r#hdMHYKmrlsXym~45W?b8NcQ{S#{dV0Pu?Jrz*d-E*&M0$A3p$)V5 z*&aEnwB-DQj>&&i%<EfzS<S8B|Ht+*^~*Vr+d^MXd-=s4$(IZc&9}`;X4W(bE1tE| z_Grd7Ugh0MO8<KIU#bbN|FchIzx}DBXKp0FQCzTNrQYIvwcKNyykF?+CmrsZI8}bd znGoUg|EktK+2R^=cE&BOUa^Y;M}lSEUHbJ+JEOS9mjZ9Qj=GnFJY>@Un%DfsEM zhO2gF!j10Qxrh1PI@xxV`1I^~m2;zi;kh=uNj*!941Op@9SH|j+FyBUR>(6mFjV1P zR%%IfrCpE#tFJTj^B_ZezJ1<)hYbYU>Mvgqagv{MT=EoC<w0H!{?f*%PTth#OV+)f zbR+Ol*wZW>3x;;58-1aMv;9Axwg2|#PhIWe=IEH?J9-LT4aDx)ta^IqOxVgWxBS;_ z3bTCjm$BGdS8L7Scs4H~;cWD((!Eo<B=7yYeog=1?<1`7H{zz<p0vQYaN#x2t5(-_ z`8u~*pGlegYSX3OlKh)*%bWK3p4l3rb~QS6&sKH5wY=r*^~<vzBaePET`p<-soBh0 zamONU>BViStjo_IP2XDgz&GynDUY=rZqnP5w<LI7h}`yY=Sv|0nS-H1H}4BDPCNdh z>e!3Qc`WmkKH6}<VdrCNm#CbV{HF3D#~(&eI6EHmU}j`wV3<ISF>&{T{9>eHZff9d zFJ(so+qWriE&8P1PcPleE!=Bn=g#ucO-yl9mtDEq+(MJG_L**H*ngPYz3^s{|HEMK zwWf1=tLVYp6|3H@dly{lXKQP3bLb$KSZs>nizJT2dTs`@b{VF>Ur;mSsKs%X<Nke~ zZRfsvxR*6QJaFH<P$R{eZMj#-lHPN!MUrh^-Lo!+MMSRD-Y9!iYlB+ey9{ab?%(O3 zg1Sz0*awB5J(?!4Lgi-ft5q}X(@x~fT$NN%zK-eYhKUzBkL$C^X;ojz2{`ugvufKK z({{7Ik`o3`p2sV`4r+h&b=!-BM@5crX_tIrk!E`)@!nykq7bFjBLP3$URU!@mRV}u zcIUp-(^HayNgwt%e)v}XVQ$IFKL^*GZPi%+cY7O8>=O5#VcsHJ4ZlrY;9?s1YEILC zYuzKss;gCV4Y~a$tBEwQ%~xEz>mp;n-|CVwjdQwpn?<KZzu1v?P;<)!%b&;ZD#qHT zNIJbzeeK*=({;&x;?f(;_IbC?OZ+nYpn0?Mw%;RGP~0~8?s;6p$iUEucYK`KDy+CP z2`O%uhUNNS4iKr+dmR?W)ugb9W1rt?8Ib^inTr<jv>#r{9B(({M(=5jGi90F6XhS| zD;m~aa5<3ii2sAT<oUO3$y!Ugz0cX&KELz1=)I-??)m%o{dM4IjtIHXs>o{9Cfbt_ zqI3O7QS7l9O&rG-zc|7xDa^G<^x?7|Pgbo-PCJ%9Fk2>a=iuE7IeCS<B)_NloZg}T zxUol)?WnFr+Rf85)*WAvp0j*~bn4;_hraH4I5T_K?m(R)@Az%H{@;6QI$!UsZC7zV zZDhWuv_1S!d-IRwS#lx{nm51Qs@mE3XJ##XQU4ty-OIC+Di*PRtWB`m^Wf&WXFX3X zXP-Q?YGdMyWozw?*Qow}yVt34cit(Tk53L1v%TE6_sGgaGs{`yzWLlPN?qddwjjCl z;mT=tcWiA1{;2Hyx<~&~<`bpwVrHkOm@MI4A{pg*PWHw54l#|q*!Ei*Zm$w1yEU_} z%%8kMrFcOwqxQ<zp_|j6+Z^B0#S{DFU3}ch4P8~PvqLVnM@sUCE)kq;xcrfzk=8T8 z;Exi9Z3o-V=^aW9o#VoPI3SrltdMJY^V8LH1D;ebS|pyHViQ`(cs}I`OZ<YFf;W;q zSU4<RuX`?jMA*6dZP%usp;9qyx(+R?zPlV2o?%pzV^H#rx6Ep{{hxn6LRxN8ZIaGY zmZ|UF^QOqk@qFTfh0#Tp@yg52cDigj5P3^!I^V}F89UQ1KJwlvdRsAef0@Xy6Mvru zN=vz?f6e<N?mQv$)J2!+7M0vv&d5jRD0o~yBsi(9c}l+6-^z8<Cj5Ob^omKXaNa(> z*o;G*C6}kK@_fLf;CJGq<->*@Je>&_{Xa!c^7)nE+OfayeUs|CcMD$r<#Xzk_0Z4Y z^zTfK`E<SDkG0bJKen~`Ws3QWXPR8>de-8il`5^fBxv=j57Jz>cJ*#MFR;JZMMz@m zNscD*)vS9|<kaRRP7Zp{Uay?iAu&<IM_Ec$N_m#TEU|Ac_rqmoPuX^1Z|gbTE!;a} zPfXNp@$;Pj?^HRbVU+8><Rh+cE`03k|7X^AdPk6HSxE20AL1tUt7e(<{5gDQQ+nUy zSN3OetDmv_P5oi~`D2&hesK9}=8`3%!py)Bf_I#l$UNwgnwWx=2d9Rn2TO;G*m~bS z)HH$RMqhBjssk2Wo;k-KxS0y1Y&h8G8NXy|#DpzfTM{()TJ9BJZeH(~Hfd(WJkPXG z%%9jlF@Lf*+8O?StxsgS%-I)nKEJ#9{oB6Z_on{)^L)Ggg^t=CDG3bTY?C}BH%v@B z@nQ%2X&%1AT!*!!Bf~7)Z1`itSlgCMbn&RN^(Xcw&V6X(Jagfp4<(N`<t`1eNlp-- zW@2;tkIdoEQgIhPENYu>vS-ahQQq}MKbqREo9tQlke4?<tHS&6ZK-<~Kdfu}ZnEcm zf6anN&Z6=we?&Om-W983nfLEWRNhHFt$<}BGcwKJ&)s%i)=b1@(&@6I(mGx9IZ=_? zm6q1;H8ajeN~*s+pXHan)~7S=ytcu$PkrIDHg`X^WX;-?5j}6NQg&41wBlgDTMrY1 zEgxRE<tys=v?X+1?~E;Trq21U6*>FT>0Qs?3aL(>Gh5nUgQGYr+3%uX)s)*y4zDb+ z_&Fsut|0x+la}Z+ks@5Fo2DN6G~;Px-IAvpoHJ!Z4a8>`cF)`qx*;R_qw4A6u*XZk z`W!oVyz=dibludqJ1SbE*YrH!o0OW7b~I}HqdsZ-+^4~Lc@{IbcrWEt&*uL+Z|N5I zyCP4sdZte<Yy7OW@`sCK__1$p%wE?eUN2RWe)H?-LV@Y+PQr^Oh%5*yD@yp?=4`a* zVTVRh((7r9MdsWJo5k04E=Mm*yH)7xr0Z^9i-R(^1ZaK;oM5&2VMgV`&9n9S?Q7PR zwK#pexG8GQaj|T}v&GN%E}DG)f>`q2MLQz3=XZ9$n9wQwBjl*7@O;IEkBWukA9xGL zD<(d&yOW<}f0(hYnJ517luq`76Gs#do6j&cY&opfXCU+RhGE-dp2IxKJd1gfc^>l! zTP#^noo%F?{nF(9+V0;ME|_mUozUNz|55hv_YeW+`!_6_ZMV!?n4d3a=G3-tVWY*O z%Q<${*WR|(ZSAzU;Ptv=w^H0sW>d|z3jUq*FYwH@UZwWCT5I2v6`||gTc51_w4+kO z?2B*gv5k5gr~8WcKc3sRZ|iLf8PhMivd1g!IK3VJmzLaCnOfE;D*7?&Z~FAG7f-p8 zu5WCbBm4DtN!GS|JzLWj>B;`MpX=Z56kcXFSMTPOW9PE}vR&YJIJqsnGwJdlrKx^e zrbl~MZJrfh*1g2^nz7#fpJJ;6HhjJk^LOLh^7?A)4rz-e3FSGj?C-wJ-gU#dUX?kZ zK>tw2139LS@7{I_KNqBAEtTT;S{AqJqu@#R)IT$xJf769+V3GZ)kdu{=95eB;*3Rh z^Ot-S>D9YvpQHTo=sxX$U*E$n7A)*Kw(p<TEWO2%McpZ(n~trCZ&Tbk_2!-)vy*R) z<R;xwwA8UwveeocTr~Yj-bw2^#`<M1Z@YxnOxS1aAyD)zF{yRO&iCOf?61j%6bNlD z-Muhx`(Kr}mUFmf<o?*~&weX*pRN3lcVhSBIOgm<y!|}Ot-Jeb%`UwA^0uAn?TY;Q z+;_@%?|*-^>Y1YDZo^HN=l?EvaB1znza9_P&941@@xaZ*`*k`O_<nwS+*o#G`+SZq z)-|*1UM~4-9-Fl7|1a6yV(TBYop`5}_rzrN4$Y#?7j)O;3r3~hRo-%}s{aDp>*&_J z)Y{n>azpRP?R0)ocCDOC_EGvfp<T_TJ}(Sj$1PM|^Sh;Q(>?7H_1AR^cSpPz-ZlH{ zU8na7v95of-)j2^p6LH_j#K$53j>1?$~~><qt(O~q8X`)$c5+>?_gm^kyiiNFD4i? zI@D<I`yi-fweJJ#A{$m7HqJ%2(=K_sO`dt>jK{%qt?&K_ue-Bjqu0h$t@a1xp9JkS z|MsAHBUiBL^Vhf4ZC_e$SC8LU`>TiLT%u*~-5t}8mEQ4qtkxFk7IfmFSif6k$?T_m zrzK8XoMt(#a$4lH$?4c>lGARw>|M8{(USQ)j|gi|=u`H-=Ug3;jeL?fPOa6Le`=G% zszqkmiy!WIwJwLV<n*akCAnWutZeyOxl`@J?UFl-R<)%rUvzBh7uoG<6BeIzT^{zo z*le$x_OfeEPurMcw|xnX$g9xZ`hvwv;q&by#<zmEt#rD-Q9V^-x$S<<Oy6s@*J1+e zR$3X~|Hjl9tK9dxWib=?&qdF#>)f1F78|K;R5CB>VAk4YF{@wgTqt^KYTG6?+4!3a zpRf1dxp2Q-OpQ|b(x(;I7L{nn6`$D_D&S+yYihGWXTqEhT3a@LxiV{Qlp?FB#Ej+Y z>sA)Lc`qUKlaXuf<h5sSRIQlx<F)4I`g0$fXPKD()P7?!^{B>s8PU(tMK=y_Hr)9B zujPKz%6(`5>fV$z*}dgn(A&G0IZp)qt=R0U=J#k{<D^bj9?6P?B*9c+ZwaG~;=g@t zTn-+olQAfq@KoS*;xxNy$~x|meH&%cEe~GmXJ%@?{o*Rm+-s_Gfmv_uOqWD&_R{uW z(aiKS_m1QGbFQ)TbaS_D`g`We<L>{p885CbnB#RdYe9ze@BgJuFMhCi*{VKy{-d2I z{^Tj0`F}+EPnDkM*PJS|_r;Zf88;5DWO6yR<!tk;b`$>WZ<%rzZB|wKeBSYl^Xxw} zV~-$r|G?T=tHQt7Pgb$huW6C6+1)6sZ$3eTCr{xgqxH<)b_XuJx!{wz%+%V{_iRtv z^tAG%FT7Tje_psceJS1Z?_a2O<k@-U56(;Onl#0E-a1ARkIH^q7sor175!gse-mdt zckGs13jeWNu@h_cuD$Df^Lb;LdrI`iGObPeM{eCbu}>nq-0j=ah}%7HPH!ypPl-P` zVcYJlb6>peJ+pdawy}NgAMj+*y$|Q6|7T)gD8t*=CN_KJmQ)~TuOMH4;Xo1F{+Wrl ztS&^YQCd6y$3?zY#;ILR5&=D?8NC7>iKcJ&OnaDo%ZJ@5R>G&?W!GNLyc-)7FHX`( z^nN7&LH>vFk>AUXwjOg)pIQB`_WQoi@2tPq{{8rqL8z+GzQtf2%f-Ichhl`ERdIMO zak_9(dC!&)RiR&61zHq+_Or;ydVW5AZ&nwhsCmeplnI}-UE8MZENnaQC-~jYvV~fY zbet<X#rJC7e)RZGN$zr$Y0D*|+;fh9bCaB>u6{c2q=9x?;ymff%bUe}UuCU4BD*-E z%;vE1XYV@|8N2s9n0ohC%j2C}AD(0_zH0Jj)5k+4Yd(F7Sa@LdRrhZ~@_uIxPVk=+ zOXu)iBU*8E^J%}(qq<RI>P8wTbHYMez3)hG4)a}pAU*f=?Bz`<X0EdCnub5CFDtp{ zuAVY`U1&$F*RoAg=Mn-Ad%BpGJeblZ;kWuk#*W@RQD>=l57xCMmSjsDv~4?5c>A$w zfB(*Pk*BSuisqjx-nmofgqv%kx$`f1l}aDw8DetIN1n$T&7CyywElzuo|E+n8Sma% zywjTfd+CgNd!ft+`_m5#sPq;cO_~}kJ-1$3L^JAXO(4f_7a5T+uH|0;WIXu1d9w0i z&Ky228MElQBwOq>x%}=6G72g;YgL|dik?`Kq<%DAQ);1C)w&ngzaJ?1#;JSA<Isth z^Q@+9FWvI$$%@~MUdz7rXRK5<*v<X1^rHUd%EDj57VcpM`xYBVao+EE<a}axRgJyN zl6Zj{&1v5Rs?<`S<Sx;elvI>2tFAOR+s@_MwOSsN0^9A1n`g+}xB4}$qCd`dqx_O% zOL{i->fO>gJ|%5y{2t5A3pdP|bi?Y`yZEISRSs9iWNb5g!p+=K?a>~vWbTd+e0B?b z6ZYr}Rc=+bsSn-uXUEB+iBEDjq|DO!C9m_AciM_?Rlyfd^p<9SnDN+X*KC<2pPqoO zZKjicaDw{MXQrL<KElMnP>Oe1ERm}$y;F<wGV{^{5;Kb+Ls6xHvHHx8BDR<FcIWDL z{R+DhzU9y#1|>m7L7_ztYj;`S^;;WxGqzX$sp}#YInW@<otuw3@4m79es8n!^E)&9 z&u=eJ+1T4F#5F@RQLNbY#tiesgHu8$>)wjkwDC*=>!!H|8-&|pmi*y+x^o`KJJqkV zcz)V04c&A;;I7T<u6Yl%o=kVDe)zWW^(hOxu*N%U<1gE_FLclLa_3*S$2(+2va~7N z?dc~YS53IPX0lu3tJ94=p6l7Yj+n~!Bpf}qs@XI|MkKJvAmxzNGFc0Wv>Tkt^SiAd zmZ{`-y4?M+<N5EP&t)rw=XHcB{9M_y<<h^_06}NVtuh>MKYtDj-?hZ*qw&#`Ki6Nq z!f@8$^Zgc{<cT8pruI!;zx4W>7Qx(5lf5SHy?t94E*wnnDL!R%tfnhv?uA9=EQ>>? zuUsXZ#<99Le8aJ8+(xx2`!5>Jc&+@O<#W%{ZpmXWXFIeeS-!pWSKyh{`4e`_?2UZ> zc}ClR5n1+s!DnWvcu=I~Y!cXB%*eoCiFbg6$XReuqz0EJfe$c-#OmCjSnw&D+wX4L zuw@Ht<04&oel=ESHj{^~{VgUFLb446yej70?K_<?Q*k%9;Xg(Bii6^w3J=*oEbb`} zSNyd=Fx{y5-JSm8biZfsZhzJN6meutyQ9rVgFa62$#TE5^p@F(1l7EHB$=4tD?K+y z;M3WkdIvLa&Qt1X)v8>qwAlBD->Vg==Y1wE-NLE7|2W6`S#N*#^*Sl~rxq+}(HH*f zc;tEFik^ymUnQZJ->3dqnlaVd)$1Ea{_MHQm3pn)lEP=rv%Sf~BzpYzuJvL6XO_M{ zbDq!Vb#5)smCQwJJ7ceOOEf)S6nMnMt7WSDr`+2wT-3ZZPoMc8wqK>gT}()8rdn;L z)5gd0s~e8W@1DML@8=ILPH+7m39eds;J4bfg@JqbDoY!BKF-f7pKH0}PvWJAA5vaA zNIVOkI#Gg~JA8qD<eUH(&BKCIZW^|5Eq}V{i(b7+`$yAKv3*MAA2zJLuH8J}OiElP z`q|XO{f1vJ*VQ%uQQTf&H9v5lqvBTf8|U`#IP=MEbN5D(1LdH&_J|8x&<R>5jW@1s zh#OEwj%&y!ci3r?L6FlVlb4siw#s$p+G4_b%D9l>^Mo5B69Qb9c5n%Zc^t@k<TH2S zOCQsDVH=*iM{G=F6k008Vb|dQP`SZ+Vx{hcj-{5zuNTWdm-~5oJOBKLk8RGi&Tvvb zBGl)nbi|PTxU7z~h2VoFkAoGN=I|A$9f)izEbaFWHrT*-I7D&B$zR`ho?>+l)yST= zJW0W5HLr8Vo$p)p&2^l&X!cCf(qFA_8+l#L|A*Q6UrH~Fw9O|cnV)a<GTXAL^Xc72 zkG%iuA{Sn~zGTujw!=Zie>Lwv?YzR-`|jo1*^z2pNxpnXyk09hr-pv_@UM6sskUwH zl~o)UQdT@a^zUL}=z9&JXXepcPJX#x&J#Xs?zI&{%2zIO3Akq@D>}7gwPdmz^Q8r* z?l6ct&0#82ko#O>-M{qAU6*CqvTx-SR!>xv+&E#*ugv`C@AUcG{U+}G{D0HDg=sAB zZ39}*OntGmHdklb!+(YeJo7#`-?K?SIU(I^p6<*r)o+1?zk_NfEIJ<YQuu!7_k)kV zRaaDh@Lo5?ChSv%%>L&8oCoF9{=8mq;Qr9%v2v69+ghJx`Zm`JIQ93}*K&WCSrp88 zIMM2JghGjM_K`E1Wjoimck;Mzh={xHIm2CM$FuI~_j!arfOm&wsp$CLWMp6nX2v%q zNOlr}?Vg|L>o096(02bOZ%)KC2GuQ@+`92og;t$v^4hy(Rm&nJS63!S`*VKRa(tS5 z_o%i0Kf=ftu(JJM!#|Cdy<XZD3W45r^8Lpjf9&}m^Z!?`K>h}y#XahVSrt}o9Ow7g zd^dWYYImrcL!UEsaed9?m2U-C_^$YJbYJe*%6awA=I&GQk(&AS-J70*<R6-eU-pJv zs#7>~eLLTe2IG}C^}<)$-FZ>wIxqj!z6`T{LSDLackTG`*fU%va%HGoVxz%i&flIA zs-fEsFU@?JoXVNF_u>4)>+TiN`R3cUoRqMCba!5YY~IuIY5bdfG`6juntE-2-(9XO zwG|15hk}|?Lxg)2{S4lzel%*F@!?%#_&eEhuH@j^&Ux24-`F$9?yRrAa_`^ujzuxo z7v8G<tL!6v@Up(v^qE30<NT$&UBB0-GN`ib)7Z{c6U#bTQJt&poe%5ebMuO>%}Rdo zBkQYr#@DZ+P2Mfe)7oSti@q?``G{w7^xv7|cy;Ce6^}gZd@I7{D4luqQFp$-(1pr} zhrwryZkM?F6;x_W#9L|**)#@~8c0p!xxvs~@XK!=GgZm_k)gqOYWd`4Gun!@R<$@y z4C-p~cyQ>Xr`fvMoBDFhmCAo8&e>7G(8<=qV&5Qt*q<RScKahHuMJOY<<9S!dDHyf zd;9%0&26H0E+#Hm@t8^P)s7a`tucPdeBoD$raqo^=(UwaUPkRhZ@$Tkj|8SYaDK?X zPF*r$uFlO(x2u&BJX$|`fBm`bx%D*L4c69&vTiTDy}fDSV~)(PHj+_+bG}a4WcK~` z#EpJ$cCRZr%-eSSnaZ2r>-4P_KJPb6ebIkyd->aixjW~5Ju)r!{n5RC?koqHryEV5 zXQ+}L7jE!kw!U?eK+tQ(<3`Tc1Rn;no94&2@yv=`WPA4S!-NRq*GvE35Lm9V_M(Ht ziN%LDCOuH&l9|>R9bp>adhmc}3Qx+!#0|@I5)|4inYV8|7BF+dZL2%}W|y+gPwTsy z@qSVl&odUuq_Te=FRLC$obxchR9X7!py3kFWp3-mIkJ);<_9kkWOMq$c}6!><2m>4 z-yv-4lwG&)eEieJZ&f}||C#zf+`;{V-X%Od26Gl9PY(FZ#If1%5)a4ZlIMk8Z!V{p zY8ZJ&XxB5X*6E*EVcQnAu4kgn0iT|gML(5;;t%p0tj^uzI_=EOq^HK0&W1~AYdxPG zZ*S)io4!bhC;erlLt|K|n)?Zk^pH2ZH6}ci5lb$gx64zYXlljAUv_*J^=Hl>smYDA zPkC$(s-+&jx_VB4iGe{DZ!?p~4X8eedFjEG#gN8GY2Zaa(7yW1W!rOBzG>p(;O_Xe z;mV7eh9oBr6<>wf4j&xnrQKdAa&6|)x0Al!<-e#NUtuWd+3}G1hu9(YhVoZh`z-jM zpE)_#`uUxit8aIE->B$R<yW5Z#h~@2RE&+GL2|-1hs#IjbXT@rTzAd=Z=7{^>ahb( zZB=Uh=1Vkw&EyHyVdwexFMsE<->Y^^KfG$IyYE%=m0sQ3d5YJbbuLt@SoL#Tz{Y<Y zq+E^8n_pU2v-eNm!N|)SQ$Ac{pZG>}W!TPc);70U|6gk+TixWEe*gE1$1A&C<<Eb( z<IX#;KahD}BfCU0N6EB;i^3NhpU4I-aksJe6k7RXUl^;t%X00X%K}cGJ3go8R6*>d zJ$Egq2=;#d;D2w!UvrV>yGEJI|C@6ku26H`v-*=spwT_c3z30ltr1I}%Q8MVU{slz zKJ$d?Z|7wXRIN?onk(j95v!f;yGLqHGpl~x0jp-)l=Kr*6@K)c@_)}0TK!a8YRM|! z;H>&h5tpy*yK}duIZ`;4MXLXUpxotiGgwm6e4hFKcDea4>zlFGxtD)guYb#|WUd2G z6$oszbehM=z~F<otRZse9W?Gyci#DWGaCxj7Diu>4bNSB^;h85?c0<-uH#VRYIRx| z`u=6!u65UzlsI4f|HO3zm)sx5e;S3G7ODGs+?##o%wu0WyZiSZCdlu$i<wfhX2F|8 zvDMSoMurt`e3#UG&`>EYLANc^R$|E|0ZXrtq&~@2U%&Ov;Fy<jPgLttxq70;<u5jp zrw$(zb$%D(KIx$SZvLkyRHByZnXR;+_UzCqtFLS?t3=9-UNU^XQ549#p*N|)vVyTp z=kr5DnHPm;j(W6QpY*-eGq2LBGkN6?2kpbXFZfmSxkbOrU0TQU)gnnF<y+gA6V`vF zB`5v7)c-i_`Sq}8Eq}uP&2Bp=>n*rdgi}O!cSxp?w&d4!UvDgMlYhoEW1;Ud<7eqF z8ZP=U9_1Ffx`}JSof_8ccY71kxQ-{~b^Q^36SZXW;$^B<tRgSB^@>R*?)%B}+)z6u z;-B%{|9+3TLAiAUn}d`es7;A?^4yTPHl<HyI`V$;2^al@9Yxyy-@IG)a+Alx1qt0u z;kljXm=)C8G;X#m>2%BAGwWU7?Z(t)FZo#B*K)nz^QcW)Xu=T*`2*=6C9fEJKkV~; zHs|Me`{HxvpMSsakN@zIXSSe|P0t4oZQd&zUmZ#ozolrUcugXWYwCN^`Nx&nrWu$7 z6`R~MJ$}o`B`<%=m2D{>>?TFmFWj<8U-H_n-|UZE3Q~VWFElRxqUD<!xi7Hw&b!(K zjxt}hm4{zn4(VHKw2S9sOQPQNZBk})ACy;LG2Qidc1p>n*<U6}6jw+k*&btyGEBSB zA-L0^dq(1EpCY|uO0u4IB4M(hKB=5v`fPsBwmV&kia+<AYPFpw;Jlehx8>Z=gbIaV zsoT3!{n^SJM0qBzzf-Q?*4im@vpRNF%;`6GPx$COy!x`yG5@Wl*R4vvEvJq|S(fD5 zDA@XIDZUN9_cFfu>-K$zcQ@Ieb=+Uysc@psEqujK>-3CC>q_TX{&=+UT<`C<_vdr( zSnsL5;2HN8v5Sjduvr|{xE}MhGW5iTmZvNC#!Y1Me!IS7#S#0%Yi3{K+w|Q0>JNTU z+<y>cSUQ)Hfx!lEZY6R+02cSbsnBg7Qv>gUqW|AA>$kU3Cn|*nM2mb}{+8`opEOUW z;;btsnMul=50AYp+of|Q@(te+>30ttcRae);<V@y^A8TYmi`6vBG;DBGMGHm__=ku z-?{H|*W26GH8!hWv8~wgG*PVh+pbs_!SXky*Ikd^TGh_<EcQ-u;rzrR0ryL9_^(!N zTF=XzZRFFtv26c*t;t4DwsGk7B{EIh9(B?{sK~$VwpYp0&T`i(0avf?x<$PPo2&yC zeSLmd%lTpEn&i#L4C1rjo?zB|<g#bduIYPf#oDxd<Bu?Jy|pIa;KSD?%O&<afA73C z{gKOZJ+T^}$Bo^t^86o998b3SXvlc~xXL<XmhcxxkBfM1i|LJsc^L0L(Q4_MuZ>qG zW|WtQcw9I$!*}!F?a6G*(^j7O+pW3LXX-80;Ob1_<?UYI;$EBdZFyC?ZSumCUK3ti z{eL3#{sAW5E6f?6ELXGdEee}-M#z7YNsv-?^B>7id=r=R?#Yg6V4eE7_=(g(%Q=D- ziwoKQ-IP|GzgI6%;$Z1Dzd$AP_^pv|mD@veKRkI}p58h?$#BJugqiyLPkPNgsQcMp zBZp0V$2H4GYtGa!um8=kJMYrND*=)}z>6<79NPJ2A0q?9M!e~R*wP$YHUyU@!A}sF zc;Ac3QRLYEi&xL)u08WFV%decdPkpyinj?&Owe$ebm8d^zt>CNop`6Q*Wvv|<tx2T zj{Fy#T{m-=hCewlr~mMr_su`&g3hKtQrNSIQT8>P*#yqh%lg(Z@<v;2D}5uNa(>70 z)Lw-+t#ZyS+!xcmYTSOaybbz1@7#*Bt+l>;_espR=HqU%lHZuM_>RcF?8}^`Y-ipD zo@_5OD2{!0v;5HHZA<nFZk~N-Y0<0A=eCHS&}uCF`CvomlSAAkZ)Qa}dbyuFBKOVr zNufi*uAHpcAIVzUiD8WoQX;J#pW2Hlwq5Qta?y4CHrspg-_OcTck;K0Tx{65aMGpF z4ol%rdp|P0t6Fnkk|W-YJ3~O^zstR=d=o>sdHs1*jx1lba92;zB9la2hqy(JB4LTE zHh#DnWPN>#nCIzJ_U8mQKkK;8bxZhC{)N1?f0#P2T`Yd$y?XV^4W<vkMfxKZ5%yq4 z1_pP$(Pm3pkq(YF$T$J)Fg)lufw2FhBc;yrEL<jypL}G5%xz9BS|QZ6LPSJUNYG=& zY^!reOnu*;DpT6#k$Td7!>cx4p-jQ`{14QBFxxTic)aWYn~Tm_+wbS@6xTkV_w&== zzv&t)5?l|Pa7mqe?8Ig@ZOKlJv#O%gRpTb6hnvPY2ezs5YD#FG(pqPnl3TCAbXst2 zoW6)4bGCuc*VyH{i+0(6$Vl%~(w1Ur+Sa$psqF~c)200<d8RItw^+6{`)2f^HxUze z=e9W?7o2zV^WGCZYy9G8d@cN?)%?#rP%HfQ5Ba*!=Ivff-tC$vz1C2q>+JGt7mQ-> z*JM=2)<2(@+ieh2{yS-FVAYueuj{5)U3q7}`DosgUvVoI9hy++vgIASwODMB<}@iQ zzs0K#UD?>Pr%%W4#f*t*V#PdHPfA^xcvw@`^iDuw@NwNc*9`k7f0F0sDOb}pd(raP zE}Q4{WFyIE{mU<B{GH`clPq=i(0#Sz2GSg>f1luvJuZCr+cfzAO*yWOz5z7~C!cbf zs83pR{KAj+sHL58g414D`ZIedDPC35S7hy;Xwp3~O-^~Gpz?Gkfq4sGs9rk4I#0Si z!R;qQr{EOBqQe#3{{p2IC9CI8ka7&Y_RY{a(MW%DR5jP>(}%<D_e~W)8E6(SqmVo0 zzM^r{vNa!SMKYq#e&qMC?F^n|8F$y_NJw@6W*K{>`da3nbC(`HSkQM(=~GJT<VYvA z=;!Mn>-=E>)h=H+e}v00F);kXJJdjAztbl_8D+*3IxKnl?xvF1g-xy-RvbNFmKphh zS+s*wL(R0;)XCsf_iZCx?$qr!WjSgeI||n~=<l2T;ShJ{6qnBRD*qVkoBlKH-Mqz3 z-lssl`utq$=l6DgPuVA1`;Uv&(&yESLjgR?3nOP~Uy8X}$a}r?jzd(H<ja{-ZKX#h zOjTQcWzVLyi7w4c6Q?+8t__z^>Ne(?6~2-shNWnB`im7eQXl^0$>}o-?t9(A&U5|} z>-qIjWq0-Ti&v*`r(fkVTNU~)O7y(wv<=>-dA3D0dXuF$ulpc9xmC3K@HUzARe8I; z@7*fdd8YZn#^A@3XR@+=UAX;-<d>Ugjn;D?FJ|UV7MW&l<Z}6E_$1NQMS(ohOBR>d zIm>2=%*wx_8Sa_>iS1XxWe1sbo-YfoABa>jxnoqosL8vX_s+o`jk`T0ceMZJX@0vb zO{&TN_rAL)c7H83RIkZfe=<pU(u|}N^Aa8~t+dj&ZL5gbp0+!5bwre+q{Jol6&Fsu z%PpU(|L>aeoPHIF-}z4^fBjdrT`5tpPwQySrEA*{++7v1Ou%!4%F_5b6Rp~JG$>Xj z#3sC0_FR0T6?2P9X~z<?g<h-qpJ&|n->sRX)w1}R-Hemp1SYx}PPJWe^P$?J{Mj!I zPG01*dTEed=d`5rocQhu_Z=eoAKLu&<e4<p^uDqecZK@N_JH!UOMd-wSiUJ<pjxx} z_l5a<bq?oxE}5R%v8$JnOPka5`jM3t&zH5VeIz|q^~#gu^X<18Ca%g&d&Zwuf1>BO z`Sz&J==$_Jes!yNQ!i@ozVWJ{V_Cm|TFP2ym#MNZRoqXkI&H1{OLa-qmpmu86<;Kd zw?k^eHPh6+a+nwx9^*~RL>?9Alb@emS^(+N&JB(a777&k9~%*I@GHO8(wWmzSv&G( zO<a0apxJAo#Dd9>nRPd;(Rge0=FyYv<n^`f^J-o$OuMAE{1-!Qo1N2qMeFkBw)U(` zb9X*3umAq%-OcKAGe3Vleo@@Qu<v)A2S<gVOUG<O{#%02(&o(O%u5lxZt1rznakY8 zr+dfA3zH)v{FXl6$$rttX8VMg_{cK`8(5s(&s^~JzPQ$OX;AoF1{t1zVWmbJ1<tNp z_E_?rh(yiWb4xRRO?;b?{Nk~S_}R3@8;>siQDinfHokN6dkLPVt<j;JUZSpx=g<0D z6LvEE%8bD4x^3&!{HJ;?%bLm4$6Gafd8H5gWoggF%T9WQYUZpeiraYV_NJYSGgs+N z=eavccirU4Z5w0Pr@gA2ea>jd^HWtfcOCzrQt;{bXRm`sS-Ur%)J=7tc)D#)*q22g zb)qy@EVGPXCa=<zJtgFfMo`|pAD^3|ww?;{7ZhX*3|_lt?p9-gB{{n~&6UkR<>gx@ zb+8B>3|7%hl-TZa#$!jXwNRR&)<YdD)i1@y2hLjZ82QYz*wXS@Lda14q27v?ga7#) zPTo>ot+7jO`KRct#z}8;!we_>iq+h07INs{{?Hk#vRAz_b9|sE{wr%$P|Ve{o0hFU zdS+SR;seIZb9G#wK9rDS7yAF|qvot8K`F=1XNR0+UpT1uI*8BLEfM~{^@H4_y}En) zckFMSztHvWmhXRgWik}DUUhpVB=5V+xQF|QzEE|m*$&S57Q2Sl_Bgpif?V>4Dj60w zu4CKfyzqNL{U<qxE#>nsmNE1jE4?}F9`l7eX8JAR8SxMPT|a(*uHbb$w~mTG>kOF` zZBn#jh5hXhX)A1go>X^T|Ks-Z2lqW5w@%N9J*E-)&r4oW`AO8nUfq-(pWL_aez~tJ zo3~v5=_>`1pWbZC@7-d86zJ{AUzJxdF)--j-GpXLWV-^K2@t1A%?-YtciBO}cJ>X! z!n>2Uw1|0VE{zddzH;G$eJr6)q7!?RT$Pv@YY!Hht(*OzH)*++Q2$fs2@`%rsZ8>^ zW7p9Cfcpnq!nMYIjZD+Z($a0J%f8LItAGD~y_-<#ook5?_VjU|@ZLP*n24U&<|Pj& zeK~Cvv|~*&Yxt6#s~*m3d(9IZt7z4HZ<+*)AoFI)Wyfb$?Uwzdk>ZgP93-u-8FP1C z=e~4H+v9g1hF$Lb(<l0_QjUMkHV!52qFJ$dS08=ia(>k(|Kp<C;m1z7*KZc<#7FSY zS)e-aerc>+Tj>7N+TWf`=yf#aTiqw!`LEmSqhRwU)u=g+`?tUU6!)ZC;YvV)N41TV zeo{r$jFfJz@<opGe`)?ZEXjLj;fjMM0f$yOMy-*Yajd8D@(BYGbvC03N7t}yHo0R^ z5d3J(V=?E-q>fqglR9S3c)m`!B5d!@)3IJ>|1P_?ZvKQL6LdVjiTzXI7L+c!rx?CN zpL=udyDf5T3*WQuxq3tJuSVO3<lO(!2ln6L+PTtlXAY0Cde{G5=Qpc!diKh0`LWNY zFLujDpZ-G(FTScQi81l^IGW_|bYxz~VaZRHU2#gj`W!E29#2^MXSJYET4u`=fv(Jb z&7T70oqE&fPmpr*&eLc=5wzx+NMyKuK!o4K|MCBSOuG}nztN>}TClys*CjEhj!%7c zYjg6PESVKL%lo|d?`!>Y?oz;t`IS=K7Vcr+wm9w8eDXZAx#S<O(b7L0zm^?|jj>O1 z{}=>Gj?-h>jP;lp7*z3&GZJ}jBcx15o%^)@nt$DnEsZUfO;1nZ=(%$T4xT%3^2C9( z$up-%CLKR<V9i3wV<!$gnlpdWslx{j9XNF&VMhFvb@L-8%$PHA)%+<DlV+}skC`@a z-mK;Gr_B#v6hCRkl*y~!Po6(NHcB977RxguBaRf+X{xWDt2|r!`nP)OQnl$DG>i-w z-!e10DX>WKsN8I@aWt6U*ch5^&HUJH0}~r~smt2a8=g*PU|?9nfNu(i$YUE&{q2?r zKD!c9HBIgJ<vSQ4(t3WWh;pZ|!3686B`FI$C#yAy-q~jt`fBg8+LpDF5e=@LlMKq$ z)bBs}V>55N^{p964-S97s9Z61+LR4a?jPgM9oqSH>x?UM&%Ivm;`{8xeo<vx=&_)# zTbX`Gp0ckyAGwS-e{JC#6-|@l*W~=3KATcwpui(0zSMhqbnx#N!fEyGEsN%?UDxt3 zJz7!iaq6b)rv%;Z@4Wcw`ejvtsETfztiCGVa;d6n@e1(xWABBeWg8e682;l88zS4B zzKInDNOK)ir@Rij93XJqT!dqagJ!wwyX{5Bk75sU2OZD~c=CvK{lYohCYrre(QLZ^ zm9d6zzlE~JV|Mui?L~KTzdJNqG|zqce|!4>=PI+$ZrlI=&mUGsiS}~GjMm+bJJ`QB z8}Rabq^(-Wx=7?~kcqpI|ECEmZl5}y7@lN0sdQ4vb56?4C!8m_PG%`&zj+oC5u6y? zx}59EJC5U~x!IcY?~3#>dHFPEY0sZ~{>{@%ddGIu-!#+Ze=OCLo^yKhXTEh(T&r`= zmHGOg(Dhw<a`E2K8TU5mHYQ3O-pZeL%x9@>rB=tz(DP+IQvwuPx_9oG`eDPW6&|1F zCQW;7`EycA?ZcjlH|Cw~SfdfMY-Z3icR~MYZ}fCe9jbM|eR%216(=e)S+$n?oc{7o zYlBSWhPhMnp7gjxy_nsWp7;8lpO&hQZD;?|>SJkcF9I(Ma_ZFNU;8v?@5$Eh$NCn| z-nK6(BD$>1YNEh8>-4lEPYky0syTM=&~xr{@6<k|h0NkQzhT#u4`Tk|LLEGhS7+EJ z%7w<ilF2Xo%;{dX)9)Go{RG3pJvVE9h3wy&6c@K<?T#<m<;u~=<Nem2`IP<axSb`J z=}{AY?z<%~GbBP|*1dh&!glyWOslw5PQ$uG-n?-Kvw80|tUG9FvHoCm*DcLm4woD+ zd0uk8<a^2alJ_O|Oa4X<Mjl2kLXDrfdgdnbY<O@-%GF|8tKbQVFt7gnea9aLC=|76 ze|YI;>9Fy~!zm(ejK|X-?SC#<zxT$53Zs`?I*Z@NAMTv|l51mchs`4Cm3;==lEmaV zgSX`EOgkkMy*l&u#|^o<KlEF}n+2u>Zf2bD_6+wKzBKjC-8av^N&IH?d&b{0jL#H` zJ0vwX$ek)=a4WFwTCM-%xuip#+)u_+H(oGKskLf2aN-8zl=sf88;j&a(nL4Ul1#Z~ zV49}8xlc0bn(^T?Y-!4yUrJv{=h^@C#?rz+aV)Y^wRn|9Q;wb}&-fK}W5og0_}ziG zg!h&8ZqfgJ%P}+l<JQ$nYp-7C^ZY$)eXRc5*Zaz*Zpr^~i}%vLm)Y%0YfoQaH~Cv` z{O+(@llN^?d#f2AJ@wmMXX_(n3l{FoI0Rmk;&MnaQH_~_VIAImr$jas{1S6hk*5G! zL%jWk10`%P`&n<{`=rBPslmTg_sU0BJBKM@7o?cl)FjIJ-o9l%<zp<{vFn=sgG-`o zb`>t{oWdeJUGI;o-WUCj`{r|%lCG*1pZojH@_SwX%rB?=oBcm1wWSEW?O-$P>twhk zki6r>0>hZ39cKz!AFgW3c4W!^=h>#oxBl}hw)J^hJC-IyIc*5J@^(#Tu9~sX5|LaE z<=iwbw?6YG*SjZjUs@h)ynn%bZfn#wT_YVX<@D$Mho0ta)5+NssgxU)k{us&eS2x| z`U^pQt)G6TbGaRyH`PF3-AUHq=!?BQJ1wXCbr)4G3=p|IF_g3D&>4<Z3I8Iaro3s& zoFaP0BjX%r^}mSLdj%??w_|O>vKk(#ZjZVqC!4*g^^xfEBT<1uR);6LEoJLoR`*2m zkNeJ(CsuXU-3c>T{fMtEv}8fBYsbRwg|ip7FP#36=a)*!+%ppQPo=dkeWdp+<jBN; zLjKQMVg>O>nR`4tW`_A)_O7zh-(q@KFDK*a+ZaEIsB0!UXRlrFa(cWh{Latq|4wb# zvrX^PmprRiwkp&6pS?OWf$iSs?f)|7Ok3dj#J79hgwswr0<H3&7OI5_Ro*Si^Sto; zs<&!lz_)z`kIt{WRyC*W{L%Th4_S&Y=e@lq(!k|@zBL1@+&tyAHa1@EyJOy!?L7W8 zZhGdXbDlHfjx!u>7C9?e-J!nt_k=}{Lo2>LD2*(;`Fzv;)T2+AeSdI2vMR;H!u`BJ z8|TkQW=Wkl#Q!q<T$?<_;8MW1t4}YsZQ8FlKVPHz^(WRI(+SM)Wg^`q1h+pw|7H3^ zb-N!O4<^^niIRG+o_zUoc<73nhtfS2%b##XC0$7`7F{mCf6CGcK9e44zmuz5{eboM z6ImYXePQ3W?)i6iNA-`rO(M5z{%`f&aCU!l;QJ}-oA~^!RF6Atdi=#xG2Zs`^^7%L z*KAq*_~h)tHI!+p)H2Y4<D7UK(L~lzpuB-xLxJwqauoU37JH*C_ML8#cGvY>O}zz= zmNqCQ1Uau+c;v{BN89G=alh5O8QWnq>%spE>Txv(T)Y-tlz*__VBb&WE5^6Q;-(zP zdsbs?{k*35Sxx%>|Ns8*3LV?HVv+RpkeFklqTz+UGhPRlIEt%j`gk3jabQaq$FbI( ziam;FTv#SgN)FrEq{(V7dMD|H#_qVQJfHR)>TY~(xWUGG{pL{J0{!qhuXEaaUR0^h z-}kFA-8yXE9iQ&!r&8y$^K@OmGrwZzo2qGvd9#k1=82p+aL?dR?&(K;fn{?KaGY^! zl|DX2vTd8>?TyWrZRx)<lf-lN&lIJf<lHm&%%@#DbEURrubJU@a_u?s?mOS*Z;Q_J zv`e2Len%)hV0xVR&$NWyed`~XIbV6?__wBQ$2|XQo?6S2C4YXXn=;MGZngDn5#5(3 z*R(PEXzy73P|r>D&gBAmNnYa_S1)wWXxm{>+hN!<e<g#|xyA7t&SzFMv`al>eX6Wu z(4biBwJy{!`GwU!_jMcmQj;$DAH2}<E_a&IZ0l9w71df#p3I!OGJNMv#lQb2cba^% zysvO!en;~nIdkuyrq{U-EnX=o{OhFDYSHORPB$go{0h#s{h2alMZ~lv?`^W0(<*%a zyXz-R`L{GLXfeA{RLdQP#669*yehJss-GkeD6DPI_{z5S3sdw;=M7&Xcy;r$Cj`Be zdcwTLY{S|{FRibfx$%OQ4k5E{JNHbxctqSKZVCUwXXUEX1o+<n|1)XXQ(K;{w>xY^ zFI|eM3_ZLvcIMHiyRM(_7dUUgJ9Co%1&M>Ko0K+YdIc!?cy6v1*mCjVN~tXi%QN!z zZhbG0zELpuwY&fEx)a9=CY}m>{z4_?(J9-x@`rpOClA}re0ZphiGg7$-nKcBvx@%3 zM#zagl)YHkUE(j_ZI15Zc7}yB^(3vi%<fK+5EtNBqOhUR!`eIh=Y}1@@6PqPa%C?0 zey^I}Q{iBm+Q}#EPux>K)h^FZoxf+M;k=90+uy&f+g<(p+n@9M>;LeEUSPbOn9=T? zSivI4dpP-n#lfdhH~9Q7T%P>pi^##tEawGc6f34ZuxxtH8K+P&@qud7bj~=%im4Aw zo35|CC#_gv%%lB4H|U<)Q`xGj=?`q1zH{0s{Fv}Sxv8JiPVvW-2gXh3Irl02nDjuq zY5nR+FC)@9_HiEEuK2^R`NEQdn9JKtE<BRD;``O-S=Di#^b=>Ql2<GZoL$h~GE@3< z)#tX?SqqY9$K>hBm7W*jc4}@*s!BR?)*|ho^>j0R)~OFCT{2njUsQ5MG|oYK-fGc; z#NySgChM*Xy-;^&zfyGeSJJKGGlhx%6-y7E-RyL#%=dgf_b%&%7?aPgJ9jrF-qb6* zH*dq-m@^s@GYti$4Q+~Tp7}j1I@HyBYnu4yo{4)pmi{?+cgN?>Kar=;+=wi^wV^2K zxXseyd6!K6Z>~HTG$$`0BJy_U_r&ZgzTJCHObNSX@sMvu-|LHoN7t^Iv4|<}5Qj!- ziA7oe?1M^&4o-it{kKcxg<8eLs7EUT4`{w9(A~fPxO?u@s%n$ued6NNjf$S;hI;K- zf0W(l^cTL&30*o*=6;>Y_wGbl*WYQ+MRp5|_joF&-7?gfzE%HQiqWB?wa;A3O9Gm+ zX8AN1{10&xd11Ok@rT@P%ZI$DWWrq+&3M8#r76-)_Hs;rmBP7Fl`|)eOFd@nNDQA+ zbhpJRbrbWfGf4~LExQ}%Ic_z2D5`ZmHtu5hwG|gmZ<Y4sSF61llWF#P%T<S4*?}H~ z53H3gMt9lxMo;|dwX%5M71Q`dH-10YOkRKaReG`i`+Y_~LKZ9i6lqBKCLK9*^1rHS zr+!}lYcfUOK~rY4dBd}Hdze0(+(}yz68@sV{EtABeCZF)Hm8En_W2LRW$RiMW#2W- z;Jcm>(QcjC&NuhU8>JhbXJc7*bAA(eqk6-A!~6xaA21wrY;tC4=UjI<U&=+iCU48W z`=vX$t4ek_c3U}dzfgUl{6bwq!NTim|Ha@r4=ham1ynfvCY5z5cur`Ns52Db(6!`t zWt-fGf<M*skAD~U?u$9F`I^F}1}2+bu63r5PJUW`aR0|2XKxgqmS1?ub;9?|r~hjw zekgvzW!NWT=_hPzdFaHvtue;wojFx!$_ff}GylZ+o|n4fa!!7s{*?0;Ixa<bJ|!^! ztIuQKQ+a`_TSJcFgaqGw>z#Lx?wR~G_RQ{?-wocU-aEc${?6Gy89qBcb3W5P(@@w> z{^8H6nZIZJp2<F=|I?1-JAKCT>3>;@n|`YNUOr>;8O{0TPNr_3O}1TTh!TmudLsLF zUemRGwQORsGaFZJ`zE<!UYpdTqn8C9eG_^Xb?xvO@0q2~te#apV|(WIOzm0PGqGo> zXHH8WuGh7^de4w~JMY%NoZ4;Hd52DAM!0@^dwIjGO5V>=&q~j{-sz*QU(Wp5?V7n^ ze%if5|H7W-#;6~X*~|B(oUQ(<#G=hVq+1kSY8o%JtWmta<!-~Q)phQ?=MHW-#OL{2 z?&%BFOLptGWG}5<zo{bP)_2XfOE2w<&wPEU&LQ)<=WoZQvHH2rndTnVE}7<D){D2y zUNSfI*4ay9Ub|gyE%vIOxuw{vdgqqo2SRSFUbnH<u`+4((-(zH_qyGxT)H>xmiW|f zR+-UW)qA((K0Ow-G&Z2`p2FMqDc{^Otxr9gz2vRd+q0LxP5CC4>96tpp4MB>rF(sE z@oT^B*s^>|S;(!Uo9-Sc3oVX5*#bE~&D_Ap#FdqSVJ{!PaRegAv;z|J@{3a;0|&X2 zZ~I*d5NW%f#%H_eaDg3{T>7$%t5s}{Y_2}X9GVz=!*$<iwl17I#p%#e{s-1S7-BLO zC766<tkHNJWxU&A;p8*l&+q@YZtm9a@BaM#{+d7Kftk*#3%tviTz7cyaNps-frFoe zpR=E%pVObiU$tUc6W=nfU<2R%^G+K$TWKHU=6oiRajt3aV^h9+vL=?yVM|YO@$dcR zRdV4#*ON7c=kNBc*eAnwR-tFlf%F9ypBv>{zv-#5rmJ!_=kCjDpC@~~_+ej!Q*o9} zS49N>Az8LfpRe7{sIXf;|GoIpM?W*qe_tfYw)4{Qtjej5Wp+0XxLd`_&6PC>)(XFU zb+fb9i^qnV*48W9{*_!&DxD`kP0mtwx>yGPo(obDuJuMnGbb;6s&Qbe&HdC1!CKe1 zy{WyOb7Nojw$;H_F^#MEY%i>KmR~sEz(GQVN3e}kxh3$B#22F%*84+B*T+3y$nx20 zPfNI!&VlSbYYJuKd#!m+Ilh=xb~*0;lV#1-x6I1F$4>v9Ci^|tZQJDs&o;ef-@T*p z(928S=fvXsqtbWH;&|li`MWH+U;nD)mudHwyy0JeHqUJ5{(}jdN(}eixOnfFh|h!F zH+dPf>OPh<*ws4yZsp^U6|qt&iFna*A#h=`?$ySJ3;UJTFVr5h_h)~#{FLDauV?Hf z0!A%5itZ<bRhoPPIJ6vBOGtKC^{jD?bvw7nPB}ktxnks%>=R<8(yXgatq2JVSh;SI z){0x(uXXUOJ7j7YC9dUsHguo!@r51hmmiyHv2UVO`r{vIS#!D{N3Sfj>+@c@QRMj3 zD-nH<y|UIE**H;Zb)n5nsqDfY{hb~BAFW<G?f=8}_po8fH6E*d^9x>b=!tW4Sgl)f zRxMXA^RuV6>e@M5ye_TsT)p+}tU{L9_~^-p>p_!~k?xx(EMQ__I6#eNctCz}333Z% z278H!yHMNms^HA6OQKSY%+xp)1rm77PI4$Zs4zMuG+xdq-y${RZloCpXS($BIh%R? zETq{Fm{~lZQ+&?y`H9f8=M)OxzuRm5^6URn|Mr#Z-o46v*;)T?m;2{T<&a>BUx%L< z_%zlYG7!~rT_);izd~rH-qEa+X9Z?z8hI~qOWAfpX5vme-^^Ji^VE<2RN9(2ja4y1 zqt!JiTz!+pn$q^FO!*02s{6LgJ*%kWdP966W1{4tqL#k`-`p)29y+u%3zW3DwMaP0 z9CXNV@=!2Qp249l5T+Et;n^b6)H}f~qIH7f38fDwDqF-_u5zs9$mPfu;B&KJc^J@g zSb)#ng6W}0%VGgGC7Iq0Vh<%+k_G#mE#w}uv<M6OIY~4X7#-5&Sgtgut-$J#BuBc^ zoYn%fLzW!RmFBb;*d1c!5Lb$6DKI>w$}wFjrfmaXqV1ul9N`Kvodu$Yu5w5VtaIEU z_Ry;3wP2pZ4#9_NEwcs9l<qVYXdlYu*sh%8bfaej>qEX4Yr%I;H@Y_PKFn*W7I^2n zga2V&3%h`vO9jWn#1?k}IoArFhlMTb0`pudxE^M<qzlY*t>AlD*&;3w=TgD>FtsII zAkMXd_hD&^xxhV_3hsxwE#(6DTr2n=*0%5q*tz`Rc$nPcFJR~TgXdv!i@v}<mmgdY zvs>~7_PPGxdsy8fFHq<5gY#i}OT0jx>kr<C<t_FC|6G1>Kg@5b7udG=QUIe?>#6or z{aOuL9a=41fuak!7HheQI$q@rO%I6;D0RKcE4r|2(W|~yELZhbR4sVbxk`N1y%oO} zyy{*hzv|zLGS{urs~A_5xtj`HRS0Pg<aIO^3DsPcxZ+d*uX|`;7R#!ME3^W7olK>! zN`zD|km}Cz4|yEW>%LWd)!sl~2UEeTDj|~teI2**uUff6E6~?Dv^C3WRaS^`z*!el z?oi%UH&;AcFsnODZq?5fS%JC^TLrEvg_N!kTfB;YrK;jqlO^9+bthd(HeS1}<a3Q} zW`kI)U3u%hMd1-uT7iMnPtRC+#N~pMuA5r+EzJuH*tR4YFON=JV>ETc4)^UfT6rlt z#;H0RHm9w-u!_&**2kK{&63eGjW$Kr&7L_oahudf)-=6qI{N0ppL?D>+P1~8tS8w! zyFIC}`fY~h+Z9iO0=4FsoO$MGt#0!>`^VI^3syc&O0~M37<bS!?bI1x#$3mjG1ik; zT)14d=H`lwE5*-Fb>(;~B`(pL^(JJU(sJ`Cx1%M-$w!LHmaVm#dU}hm&W|How8dVo z+%b1e&(R7qW1rJAEOIzA{%KjCTh9@`{aDWy3kB&Q-UU-lW_PA3&z}7=|JqNl_KlSj zTPD6vi1*AqyW#(f$~?7THeU6kI^}#ehbD3Kw0SCS)mb#{@Q(?%^cQ^#XLq^MXkf>* z`|tq{o}@r_O<ShsL=Tp>t|?we4JH~*e5myF(z?K1y%QdJtmrskA;BMYz201%X>o#s z%h4TcyR@5i1#a@PZJ4PXT&9<2ve7uG^7JFs6;Uiv3a8`5o=dMa^!EQG6ZZ7&9Krl2 zY>9CP+-`<)-qSz0BR8_D?YO7(%o!6;ePnv=c`p6t{XJ9swy%l2QQ(?so4iD4ac6Yv z+?qDov#eJ(TPi1~g>Mqg)IM*mEU<a9=iKA@Y3|aWl;kdNd7LzBX?i95uj>+$vu(4M zSER(}nLcOU`K;%lYW?K7=Q+-Ztvo$z?WMCB6APK#9!~u?MN{^t?X)+)7p<9Sa(B=D zqOzI;5mT@0MxN+dxVf@VxFX!5a8ZdIvzDdr<B+47R?D;ej4jSSG3maX<5z5P_Nht# z<r=@ObHoawPITJxc3WO8e)N{Z+p;i)`MqPrv3uEPUTmD|w(h~kMQ(aKCim|!UH8B1 zYt9*y<TSNu&$n_}f1KTWQ*vg4(&BFMhPj-*bCTxV=v6phaaHkPr#s8!%UphY*bZ!F zljC^ekg(rr)@3cfH_Qp=8_w9CU)g#&%kNEm#^Wt+Yf?`4G#%aNc2hF(d1rR!jg2Ph zQ9|XeQwuMj`0!02Km3$is(kp-o*gHvyQc4n>VI0iiTioAY}RdSk*nLEH}AS0RK7fV zjrg96DV`6+UdrCy)y!J*y?5g`bE$h4ZRUL&FI%{^7y7JU`*N#kc~*8=#_Xc|l3Vur zZM%N*-pa{$7fya#da8Qvr?};R{N{d=wK`gACultBp{B*bfDW%I9GmBGwr{F&vf6EN z<Ah@V6RwGx>%2evaTNboanE0T^l_`P+o37z*xt`vG-GaFvG^v9=@%cn1)X0b;xG2* zaGCW4e^K+g5Y=|q4cG4O%vd(-i9ycf=|w9(Pj`B>*CXlNTY*C6bGpB7spN$k>BqC# zPBt#p&NDOhJoD^lkH#65Dd%o{tm)wm&J3P2|I|sLDCeVxXI2Qimn%L{j`8}Wb|$*@ z$9i8W&e%scBSrN0>~ZM7y}I&4!9$S}?rC!kl6M^yesX=2@R9?yvvp>FpZsQz$?Z$8 zq|Ub;F><>U+2q%0lW(k?xtsBBrTa~5Hr~@lm;3%Zt#o_Ov93hiHsa;m_9*kkSvNPI zD*KkL^)5orWKv;1S1a@G59|EmE=Joee<OF)@7`LDV`s&J+4v*BNhwdAup;}lKq;^6 zwH=+zyC2l`JT<PFbNtqwNGtWa_DHML@4Tx{iU>XzF<bpPlvC|&MNG`Coqs1^T#??( zXRImG{nL3u_O{RO*q3ceRuKs=*J0JZTN@d2SJ7dWZTYnwTaTJrvj+RNZ!?X%9ko6; z_xQG1S1Np8?N$3~eKX+wwd9y-wzHq^Y_~S!sBoWs_flP&c^c2l;3KtPA{6WXwjS2n z@_0>`$@5@N+sXb>Rd&y1H2$bgN$7bgslM&`uGy9ul{2l@YrRgLRyor&udP47dg;U> zzP$L-zUrSm7ZaMx*|zSSdEil+_2eSEU97t%_MF@^)%bGQY!|uvvY*ej&u-U#mS0l6 za`NZ3dHU@;ayRD{MzmWVKRCJ2Zf9#+UZ9=up65Y-IJwW2)Qb4*kgV_BT)QE!z1`q; z-G=bWXUF&WOf~;HW47jh`Ml{hf#-Cm-SL~g=GHOMHW}Nc{||HIy<btTzjo!_!k;X; zU;ft~d@B05IxROiIIQpEy#H^voql&xYLoS!rJJ8Vl71v?7WeqhHI?w=-ZP5xme>4! zujc<MxM;ueo>}W;=lf<CH+jjOeej<Bwtz;gUG5E`T!#Nk@5M9U2z|Ze>$KNPmt}gr z+rr1b^NIJ`!wdDi?>;{qGi|5LyG?hVa!ju|Uutnm(tg3upLVuwr>hHIs_Q9#-n>ay zY6}1TH7k?NviEKJbaqz#WU&HCkv6l;7n@Gh%9TaFF?zIV^67J_+p`&8ZSu2@k}J8p zq*VK{`rU1<=9y1sZ*qKnO7)d`=+^Ao3;wUJ<^ONf?d<zJ{l{*`n3cLk67tXWwLjip zTY7)V)E~!K%`%qW$(&wzaMA;_IRaYmMQ^S7`rw|bYUA3d?`?4lb)(Mj+RCWGIpxRo z{Q6R6X|=X5QOkekJ=~dPFzx91y8Dy&9;jz1@T)P5`uuVIGTv{#pM38v`1(Tm*;m<0 z%k!5{`b4c>kbm%m|L;2sER_$&ZP<RhcGa^#+ufvJpWPL+>#O9;GmBl$d_JXRm)3mk zW!T#ChX-f$Zn!9$dx$T2*N4cH?8}}he-GslP7GRTv}5Yp=kp(&wGpdcdeFW0wbY+0 z>(?nd{CzFev?V*%xua}#wu4l_^$VsRyEnIGC}>|&xTYj^MrxVjnxiIDOr4glnVTVz zovxMq*6DEM?jXx-bE$(~CX-CPMAzKS6v^i7O}pEAY{Rz&wh`5rBCf@4QP0koI)1DD z*ye9b_eT7_cyG<$Os3cCOeU6^&pKk&ptkv)UvLEbCA&4v8CtIsR;9=~U5;oE63y21 zO_z1Mx+c}6xzyrpith5rHOed6N>$FLtzBTbW^snz>x@~)t=gV#e&@J#O>!pV>v>xy zl*;HP$@-VBslJ$WZSTr?rA)esb3MEx)i3T_GkIlWDVJ{Y-S%ml{g(cX(9W#CmRZ7( zEh>A$YA#>WTD7^QY^IyeEs=Pw)3y29go9SIXGJ^@Xe!k+-F!}Ya;e?ggtbejuHinB z6zk!6&2>uBTIJcLhD#$~XNtZSI<-M>sm|+tQ<8HR*t|B%N{sbe9r=B6*tNead%rS7 z9j;Q4JyRthduY|=g=>0CB(i(>(t9rpu3?isdCSFpquPs%YiUuZvo0B~(S8weZEA_k zYS-hN)n2k(6PbG=>$2yXOskotqH_<;S{NL;xkM_v&oBM#Wyv+VC2Fs;th%>OJ(rfd zxH#hag`I2IFITQ<zwmQS`z6*j?H60uv|n~D<-NN_`9;#fi6xy6G<Jm)n8d0@c)w;j zexd5%#*&>6EOt2+*u-jDG_Dhx;}Op7w}`iC@=K|Mnk8!=gzWMwkc!o}n42ds$I+bY z+>+TW=@-v7ZO&Z$KxUU~f!<v$i~c;}IsV(Z^%nRxac6FRpma-V$BcIZF;3-NdP{e+ zOura*(CU_2gnv1=-tuae@C$pJv|rjC3@zFJAgjt@L!+EXj59yyx~1)`*DoqJy?z;Z zkoU`s2X0j{1;Vz9J7&%k$yu_TW&4H8P0=qU59WSZ^PsHCZ$sxi@tkGiEYUAq56XU- z^uVtwvOs*V(haZmT-z>YH|>5|deHVu+k?2O-~#!*sypW26SHx6&mp&@oR$A#byNGx z+Jnkp8XpAy3iu#Vt5Pw?PRzz}KF7Qz{;d8N)0>vREIw%brS(DNub>YywW<~K_KEFr zxX%%{B%f9PVtLc_m(>TgzcfDx{T28@>aR-0+&Zy6j{7<8Es1B%znI^&{bl(<>o4sO zVt)mHko&7zG5?=fjl+KqyCrX%`WG$WwC`i$u<vXVs*_@!|6#MnkJkC_iVA;}xEvo& z59Hw7-^IkWzt3snhuIn}t@qs)M*N5sQ9AT~@deKx&LURa^*v7F5B&pQX#KI|y4$kf zrLkqdo1)eqU9P*W``s71{BRd36Z|LHDtBoAq6@)4%0;R;|93j&Km4ZgCGpc*-d|je zduwK2yZ!S=)-A{_w|T}BY`XXu7*r+k4f7B=;S^Amin1gk2zn7(cKG$H>%RY98kZ2Q z-F;rvagW2&1s)%5?=E{?byMf2#y93a((yGbp;w_T+Q(^XU^zJ@ZBnt3{QUg)8#XlS zvO7zZ8#H>d2hT9O*K>3B)*#g&>0+~IxjF_<zCTjA_M7K<UF<522b%orT`oMa+Q+%6 zT|>z8!n964ll*&K4>ZD*t^}3#39q%f`pdNbful|{_q;7n?m9|z=~#E>yKXHxIl+30 z?!gB#_H9a6H~JV!ck`5~lq{Znsq^XdEIk>Wn-OIjna&?u)om&gyXJ85#zx;ZFZuIU z>Os7Z4X6C(nm+MSIZvJZ!TY7^^((HOtNZyyLg3=vdhO!|K3a3O-ky1Zr?~#4hg6!= z9f2RqpD9fa5%*lOUcyGTV)e9?sJrd9g_2=^_S-KB+vOr?_LX5Oqk+SVgq90Sud;3J zb+w4DV_lt7ZusF!Yp7Y=y6%JGGYq|^E#6|diOFV`Z&u?3!6@OM&*LQaf!F?2EPNA{ zOYpiVBKKAX6y>KECFbfS=Oh*v*9P9zV|Enzw`}*WU1Dp0U7xlqtNRSI0H@QY&K7~Z z7~k#5xm!1%eJ8N@JKMYiQ=^6KJ3H7vn9O6?yqe?C**V6R_kZsDJoodLqW>Jc#Tv6b zlx91Lv-$EQ-Z;YH#@iz)p}xUJ@YI776X)qWH66KU=2&!4cwUUk1+S;EOtnYX7dF*R z_x>#%p+8l*!s@}AZ+n9@)?UA9xOkrb_8BXFo>e{mFmcB-(;s_e3umoX=gU8u!7R*j zIiB})?#by*4O??BT1~ngw9$OA8n@;QF`g3X6OkttCnQ`tB*MiaYG0t4ZTP(5vex8# zioE@?)46xO=k`=xZDw(or^Y<N*EE04m4rh}rLS6*t2lmhzH{$~Oi#iWeSX>V)=FPu z4rX6G@^Mp6)17*=E2kFO?Ol;Kk!8U**`I+k*A=Du@3nn3J#gZR8=*UycQPfdXuTKz zG+RaQ@uohzFWTEy*sNZ+ZnZ_|N!ulP6E2A9Pv~6mb7pi#`tIdYC!e2-pMSsevg}u% zGlmx?{+RCk|70V0>uk_w(QS>43=E*9#sS{UEFugX3>*yThlCNiAuA{`FCAs&L}|cj zzdHsZwthw_YD>;EPYbu&BW@fVSnr^%($Xcu$=SI|XV;<0GZL(}x_g>D3g4A>u+4WV zQ;_)IhPsfeuMJ89Tb5Rz+gjUSd;ag==g;+b+&Ea)U?s++leCgi{<K(_jtk?#Z24IE z)jV4liBz6Eki-`LYRbakxo>87o^e%6o_or>ZRU5c)kV`6-nQN&AbfD@!{biNpS_No zbYhW3fb!3E^@kq3ogHGtBCjWGsW<gvYrkn*n^ux<Q_s6Sad-Zoxp3;q|NS>+TO8qD z^ZN$J#?G|@yex`ox-DW>Gtw)vKlOBP^f;#~-xXB*@Tkh^CC}2`rtc9sJn_lZ^y5Z` zmX%qdw*4<U<azZ|oZ6nt=N@tYU$s>5%bL!m&vlHp6l-4c-xV-(+RNj`$?5KkB&1EQ zS~+Yk&pAKEa@*Uk!(Fiko6OvQtG)eogs-r?fZwd5nEkofyD57$ukSm&POR1aks0ex z^)384e)16#e;TA?7fJ>`iaq#!-NT*cQzt!Cjk8_Z|IXkuudmj6*X3bz?^*DF{lN_y zg#6j&Ufs*cz+lgWuV^N61U?w)#-*vjZ?l9QMQkVEO*y;ES6X`OwIxw&cimLEd+Qgg zF6&CJi4F@K9sfK|E8le2>|NWNZ7=F;dz<zjsps<L>H@8$RsJFHYOb$RXuz!2nVZWk zp5L2kT)yw$j~}c;T00ge35kcEc|2)`-tvhDn`W%j*rD}dR+mT#tE-@dlEz98XYs^H zN7sW&&gUNLW^b3hs&hYg56|nhVJDQ?!cs5XYTnwLaDDmGGX{5_lwBxwYMZ)z>w?#_ z!j5m+zT@T=rTpVO-(#l#PSgINY`ke!Zr-)NRbiTE=d((lN={MSdr6K{`|%a^)U30g z_h!sZ^jn`BT|Mn3>$7D~tq*?Qz3uGb4~^HKt-kswnXOW}z@oY8f9qN6iQ+#NGEG)| z{prQM_}%eWx*xxBI&7(<xno_Tq_$MvgJo@+DW-FrrX^;^*qiz&s~6o%GU(I4Rv>09 zmDl}hd12ea3ZC4<@2X^9HLtv3UC5obcjwvMs9AD1BiH`l*5i1ob-MBYO|x?NEbl8` zkmpL;c3SuOMER<9=jR>^yU_bc<Vr{D|2xwImc5K)>-B!G;Jlv6LrJk_>Hd}tW^S9b z+^h<Fo;dax{WSNkn72qyGxbpUF~tbY|GWBI0$(}5a+FKDWZ_UGpX&S|eMwcolCRrO z1g;RVQ~bK5q(itjTu7Va(Cqp5+5c=+w7=V|^@Dq9&6<dJkDqMbafUJE((=|g>qY<F z6y7JBJv+_(s^i+>BkUde{?2TcuE~7j8Di}xg^Uu}G}Z4NclpBvN{nT~dvpz$7#QsF zPT3Q=XbX}Ukym%e`d<!^s5^IS?P3v$Ln4X6AB&?8zH<2^AuqJ(BoF7rm7IoZ)84Jo zJ~M62)CaQSAFQuv=j}P*;-+*_{z3kSOWO4;zvh)P#bq2YvwiP=|GVw`&vwsi?*9J5 zD%57URH^ZE?u$dLqT+>~I@3jC1n2cMt(jmc8u%hfGH78!#L-ZRq@8Lt*F~R*-bu*# zzINAU8K3I)cN!W+C9Ry!%WU6Mbu;~h{p^pgwk7J#4x1{?o%TRS@?TeO@%0rIc?m4f zoO-2~I(xFRsp>erbUyB}{K$<NkF5@}9G-dR%%Yu1Qhn)XX6D_jwoHw@^IhJ;G)^OJ zzR`)xaWjoqd=J;%Cu1@1wYEg!i!GG_Rz04lQaD4e@3Ve0F;OM>%s+Oct&es*y>Q&% zX4a;(UE2b=UiD>*_XTcQ@K7W#>%}on*2PkJ54W{hdl*X`&+&2Quaey4?ss{@5zmc( zV|iJZv|d}D;B$C~ftta}hx0O0ew+|Zmzl3N$zsOwH;0tApSb#Y_VGt=?81GcI*#ny zU+DAa*Bt$cCu~F-@0R9Go4;dU^6ot`tEx)1=KMP@C}^2`<Y&&(N1yF~b5$-{9QJsf zY>4N^RcW<a0@b3MFQ)|GOTK(eA$Bo~L%5!jhLWz*u{%>tY$qA*HL=*_KY44TMXc_F z(mZw@^<3pe%gv-F6jd=BMee-g?qa9Bt2e?sberIGHM5J}X*zqmU+me}yzSDiBbSsO z+&wRUX~mvSN25ocmEx!N%oAGZX?eflR}%Z%rKK}fpBntQ&EBzm|4oU*47Hj|GDXjp zPEJu-tn{tcc!Hkfxovgd1==_~U8l&O$luCz?xMh<hUX@1GoL6kE!NBzNR8fg#ld}1 ze(3a8pEc`V1};3}**S5Oncjl0<_iON&t17afOSGi-D`#i<zjiQ@u2k2&*|wtpNWCt zF5dJ{<Uv}H^pCu3u{0pon+bG0+N#;N!)8T(OME(8%FuoRhZ0wd!-ZG1cVw@d&YpPJ z@mJtpmdFdv_6y`i@7`RoeAdHrmeZ@>KfLqvM@@Bmv$9M@LEy&?eOZF6IT713BhMb4 z)}70CyrZMBRD!F@!e^;sk<jWJbBwOc4o@}|wz;-PJ!HlE^Gy!RUZ&biJia!%?aod< z)#mb#0w-2>ZuN?NbD>7%?AFlIS-O{WgKnK&Qmd1A-SzHqxl?vxfnPS}&umv>zV3PC zXb6k)N%liW%5CPlP7JA8G4-JvkJ_Z~%_{R|&EqK%GMZvkF1%3bo@`I5!#!>LHtW0b z;WGs{MgPv1WHX<r^hN`8XYk@n7C}aD`b&~7Ecjo<sB=N}yyR!2k_n5a)|{HInVll* zu=Ow3HM^RFhh+MW-jVsKeq*!KMCQX<uAHe=Zx^__&B(VuTzN)H^4dS0=lf6p0GC(0 z-l|;$-5LA{@4*Eml~;%>gI)U$ay2=KxW3m8=3bO>-Tg$3gLbi?W59|nQ_YQhXZ0+a zEPs6w|BJ<oZf>=lzIo@I^WVQ76A=_+Y+_JMoT~cr<0SFQ8jVLL_k_)s&vF;zmDV-7 z9q#s?<Ma~K=G5f%cWgpCEETh=b$2}ew5}y3+V+S+*4myOTaR&_-V~^${d?7B%h!z? z{@tIKy4K74!;bWq!W_Z}3SZx{*>0RJ{G;y&cp>2&2Gi&B85kHgG2m-F5ZP7?&df{C zNexD9&7K={+K<Ul#J2U&iH@%K>`jaGCahSjw$4E9SVmLh3=fsU$OU|&bA*;j)F1d? z@I1_Xmd7LZAA!fpYTlS+iGP1$cW&=n+uF+7DmRJM5t{@L@95?9kupwAyv263r*%p1 zii45dnoTdZeQ3F*$dNu>o2A76nx*5Jr>`8!^k#4gu`=C$A6Bax68_TUte8(vnZ;`1 zDVvTKmz|VRoSXdY>eHinYme3bci2*~Z$r!!+3Sh9Vc7-CPff|N`nU9T(Rs_s^NK`P zZ`%<pHt+VMRAa^U?r-C-Rz!2Y{3&*+@WzYn2I9wUj0$xUCM3Mhx4j>~DbY&z-{d`> z8@`##9XzJb;i@_N?lv_Ry@M~Ft8u%>M=Q+umA5~NdH&~Rfln@+FwYUO{8;m_YEN9= ziN1YqzuYUeOq%WfhMrldkaqLdv90E7CT8?Jk#l_4Y;%x-jakOYi9Kmo2Ft<)HPM$> z9xDwxrMg~T;FPVxp2>^MJ-#^j7oT)@@!Bro>6&M7!P%rEV(HY~3140u|6%w5e0I}G zM}g#KMh1q%cw2}>-us0V$!Ht7p@%r_E=`)|pn2g!i<74OHs>s^ry&kbtzm9cwFD3D zl&*d}V^^6-zVZ*oKf--`6(%-Vd|>_&*m2Y3DVx%?YoF7~pPfCo@8{3gzxgFH5-%UK zypn5Du$M_%Tk7tG7t7pMo8=|??%r;?EBWEN)@q)s2J)vGJD%2UkM=lvfQe1+WJu@T zFV6eL_bgaz=KNEqZ{gPI{7La&TyIRSb6@e~f___}j`9B4>8HXMP4=p<mfCmJ;J?aA zp|3rOM{icEw;l2?`oHzWqCYPxB~C56;Tg13bVt7AnYT8Jn7*C<zVOXzmGfNOe9o%V zvee~eICsr^xTC~zx5YaVt-#}5hkVrwnESj7bSq?huUJ@|E5762y|{~8=Jf|%n+G=z zIQMl&Jg8_%Z9D$|qKEa#M<Lrv_g=QnF<5hc+VKq)*UC5iU%uT_|4PZ*{QN^33??X5 zO&0Z>b8^Mq)9fyx7psGPSX6o=Jt|kse>inn_BjPU)l9Rt2lA(O7@vxLsTOH6Q+AEh zd6f(s?<heh)wRcuOyZg>Jh>%W<-bwo>?hJGvhTHLT$fpF(zI}`<)N6(4{I9>KNR*< zuK&q<jpOP03-?8%)FjqjigN1xH*2-mw3lAbPO5Z0l$y3YJv+qzdZf~^qS~HQm)%|p zzp>g`%&z|RGRq$}P(_zKdsW?QMh1o`yn9*6O;fNF;DTcFFC~c7#c^quh?)m(=k$60 zr{U3xa}}nsNgc+fDk?&~o#xX%1-**!zUA~KuD+wQ(|os~pvkcx%zq63v3#A=_j0P+ ztS@uE?|J^Z@?7Qqzd!zna&0RJKCI*=bt>Y#<Kap%@raxccU^gB?>O=-)h;%$Fx1sm z;XO;T<gIl%U#lkeu(qf!*x5Y&aGkQm&ytN2y;gy5jxLUHV_LcV$$2?-&K%R`3#M-u zzWuWF=Emgw`#s0jY1eKR|FKc>_S{Aj>CGQx8(VMBdw+B{)9b0vimP*G$0gWp`I}cz zaJ?`^<ZUJM&g4*e?j_QW)1@-L$5|9fR5!}6T*37uM)E!D!$#i=Q@o~L{Kx1KDY`oA zrN)7Pz{`ca*;XZUE=)`>6!Ny}UA6Ael|otb5}n6W`f^2B^Zv3=-1dAo^UY^<?h@Nr zUwwYcDbiONz4rbcAw8F>uldG;5qwMU);@8c_xg0+ZuyoFEm_Z<=a<MA6y^4X1_)gj z-tcc@`>Q#p&wjPpUp@ampV@))f*#68KQ9mN3ZIa1%V|;Ow<V%onh#8Frk|*qbi?8D z501nu%RGD+oGH0wV5jicb+*FdH~S6?Mb0$Z9kpI0Fzx>A`S-I`tu)TZ`EN|PV&^zl z;kVqMxxN=T)?C=%Wjg7OzJHX#tTTy1ss(&UXXZ~f&|DI}B59k2>pMTquVPZ$b+7Vw zyK_QzPA{7ie4CYtfuRv4wM`7@0*yE_z<?fcn?{iq*~DIBueg0ombGA>V)Q1}$lKFw zlFTn>zSb%ezW#FB4wr5zF^#K!?bS+(LSmc-3LeofJ-*+oURwR$_LA9M?Yq_Q_kPd2 zyw6_4=>3cLmw(p1=W9RAXz}4$blx7#w4;2hYwu?HZ@;xVDfV)3S<ulCx1+xv?+fSN zD!%ST(cO)+c*AU_PTJr6V%7%ZOmD6$lP`D9QFRSDe@s_%(JtN6=vOaYj8Z)nzaC}1 zJ;~|Sw@+JCSzoEYi8(ci>1)opc^j8F)aL1xo|>ez>Ncl0*A?+M#_nrbt3PSH>i(E> zZW7bisYmW;dUIX*EE>CY$$>AQdjtNZ{K~$Xbaax_D_+@%papSPwysiby>ePQdz#3K z>0DDkPZJ3$FF82L>D7<>lbl{n6{rnZu<sqqJXO|LsrKu2H3Qba_#EoZb;UNeP)9Rh zJ)7UvNlvfobhj*V*sJ*1eAZ+0ls|4J|1!3&Ic#db!Y6cfYWmIM&vlH4HEwr3oZrQ} z_15!}dtaUQhfQKznzVOqThCsFi(>CyKV#niY<=scgoOt`8mxIOI(=``=4VxWdONny zUAno#D=O-fw$ya18=p91ug(iTJcTVPaL*I7$#d7HT;rFqTqWznT6Oj8>6^PX<`#xA zKcBNC`eo0{1BKUA@3=jWSam&X-8YqY&u-jXvF2B5XLU%<4pH?vZQn`)+1G8!S^jeQ zYsaPg;<`S`y48iTTlIX3n{~$NL0$&u?-y$>_k~}1x+35H>)DrG(!QzcvB~E&uXmSv zvS+kJzOCFPz-!~NJ=t&iSGIpzmkeBZx4oWPBH69Od)P)a=6srsQ}9gP&^Zo=0!3eE z`!8Lx*s}lP$H=$svtRG(o__da^P{wVvp;FhIeYue@w1)ccaEhUX6c<@96oo0<ok#J z_Jw~rJ^SzXOEQ=Hisz>M&ft8zDbGZH-rth`@EG+e;cF^CiWk&h*EV_ofpL~qoT`3F z)2b)znJbsQsZewN`{9?&&PO+<9?#g;(I>zE)hlE757VY>4PWzmQS$sV2}{=1il|Qa z_bQpO=w(XSqHYT>ea|hei++UoDRsBc@8r94c<-CbLb*#d3{CYfnsq(f%-QMIlOYwz z?|$-U>dUQnJ1$*1-Lp*K>&!rziwh)Un=`KTq!b?O)ev8MT~%bM(Zx5_mQj<8%f3nm znp7K4^87M$V$Ou-G!<`)Q-Mm7v1Qu@Pd3`7iNtP`JQ>lPrZQRLsm9FSyeNKG<I@*S z-!0KdcHhfpamsbNZHCLmJr<|dxp-G-y6=?i)O);puYhg*VmFn^FCJzXT5In;W^wAI zQ~6t?MK5MP$jD6etLiP@q7(df)`R2aW>sO|i>Aa*e32BVUmdte)=lN`_Zbt<?CV#q zR@G#Gw_IbpNbCj1u4(Cur|uBA9ayciKB6pJHAn32a+L$o=NxZwF4B+tJ;P^3>heR= zF7EsKHGnVk`-bzDtr=IMg=<vKepWGSe)#RyFUJmj=PwUsvhHizTRaz8ym@PXPMzvT z=dDfA_6OhEoqezEtMIhy?B}iOvbA9^LuT%2&N^tpb-UumpKaTxZ<Sl){<vq$q|09y z#ZQ*K8L{MBe#5?Ruh?6y=GL*z-sFAuli{Hio0^aRedYE*%=@9uKG(_~L!Hc1-w#cx z2{eDUSUxCu?S*yg*9F??S(<&%ejS*->_NrC-OsFkoHdt_4bq>!bm7fvk42*DD|YTn zZ)Y_7e)h8Nqwq*w`5jl!_Wc!l#uQtiWp!XzsrX!j?SZb{r7wzV^!Xk#TXsrM)VG|x z`p3f!c9Gd4-F@ae+lqbLs<yuIdA8(;$+=f;^QLgmkBP8-{lxjrb**iz_ZLbh3ICXT zk2QB{e9p$)0`r~h_x$cLexLOFLER_6iUu1F{)z1m1wU!nxZPuYuhxH9_=)X>xKDN! z_CJ|^F#J@gk^a>B!SzY^L+=yQ4^5xQe{lNbeD3>wHPt^1e)4@#`N{Qz<EKWA`=_ZN zLZ2jmn0w;*!__Ct+ul3v)2=c9boXKPg!i2O6PG`<uw+y}scGRmuhDp;aPIj-k)LF2 z{NozLPpUs$+V}Wv-{WH0x2I*_YRf*pzdHF(@RQ3QOrKOA{;qgme4qSJo|^hiZQ&;? zcQ}+iFf9_)n;82;r&3mLvi1h|Zx6M8Mp-Cae=s4YUHVD!hssZEHL^b$KQN!<Z<6=f zCs)VubK!@>C-~dt9qUy7Xnb1y@c0CIZu`DJ6+bwis2}oIvX`vm`nmGMWvhAZ%gb%} z&%daUo99_4_9y34@q_1+=Cj++|HJfy?GyJy@rm&~`&<45{YZT>{qTB){X%u3Kd*ks zKC!+v-o4KD58Ef{hvpOS^XzZ^6ZRwb$@atV74{3)iT}L&q56dRq4%o$`RnX|s{LSo z!hc9!sb1nA$Irzdj-QZkw|D%f@<;R2*$>N4&Tq8${wMRN@{{-j{Ym>->Sz8D{jvJV z`h)T6_00d&enx-Te)4|fe(!&Be`-JRKaihP&+>o9AK@R%pUgjKul}FupX$%>59?3v zZ>;zJC;O-Rll%kwN&i{?&-^3)WBrr;2kX`UGyh9J{`<@NzV9#Z%f7!{Z}si^|FSph zx0k$G|KIp~xTx{>@TF(|hUOZ64^N%>d-W@$@8Mgo-ig0zR$L!?_u0QyRUk?8@8Mey z--!=hzjOa8yW;xLzt8@yDx39twUoj4aMO%++og=INAu2pz1Ho_*RaLUs#Y5o@4dRN z@9VwXHQQeWWySb9Z2S*CnfQzlzxr8r28K3K<o+yrL&2PchJs6GQ7Y1Y_PIf~{e%NW zVwW4|zBIU_qYy3{lF@AuBskT(SKMcofTx6$$v%rMm&-PsnJ{zW3G4WWlU3AIj<Nf& z2=&%Abjm;2?O)fj<NFq7n=3AJQ?A|my{7n^W%m5fU#}n6pJ32u&2?*n*8<VZHlD*0 zheg{8S;H3^#&jn)xo_eU+Hua{WPx(uN{c+MBj&!>H_JpjJYg03*8Md#d23eHl-EpW z=Vk6_JvAwDx^JV{<!^U&@2;7}dcTlWWcu;1U7?>=3UrI<&#Bq<U`OiN8wOmW!O^BQ zuXjGnopyTJ+Nm<Puh-mjs7~1FICE{Ko|Uq|?5#Pc&vWuD6T8;q>%3W}*G$jqbvZZd z<<D|ap~Y%@l@#umca=z`{!2Z0=flf4aWdOkW}R9le?@49*VD`YOWUSxIJS3f>SCP> za?jM4Ee)9^wRqBp7fZtT<h=|rj?%pDzuj+P<J1k8LzLDp65k%WWwG;7NtMtNqY}ds zWy#}Px+Hs6%{aQ@z!CfEz(O(GJ?`_nEZ0pw{NnyqP90hC#bPYwfvVEC9=($4<x)BP z`lP<xea8n~ddr{thr8<^G3`ydw~UFi?@QO?BA>aDI#X>XKax0lrJUztb1t)hbBnc0 zV9RWgg7mq&U)_mK|Kxp#<=`^S_sic{FA8D)G0n2&gvaj=0}mb}=P8QQB&{9hm_AaQ zmaTK$GU|DR+GoZ~=_=nAdKB+|u_Q$DN6V4P8=XyF-xf4HAY9g0cWP&>&9tIRQ}%RM z&bz9b&cEQA(of0b`4iT0U%nVsu;x|b73r%_?`+dy@}1Oe?ato3zVF^X_Il<or&G!% z{42KbKhZWh#l}hIxzyjAdlOb2Xno8XIZ5@AVA%z6iv^FjeA(X?<o(UB=8wR`Uy3}} zua^sOC)t&JiH+TNBVd}-&md<@u~XBfPZeqOCv0hyS$XmYxa*&uH{<1MCI$upyerg+ z9FGi1Ov*_`Io)CH6#pD)SCM1;w@#knBYaE1E3+%})}=}Hsh&UXw>bUT&L|xnYu@y@ zV(-Sgw{}k}&sKGMbU>7oMJSxlBZF_R1HZ_|pq<Q4POCx+-R}fW)KYBxk>+Aqt*Z0( z&$H^!&nk2GzOViNef#!_$110=&O0>g!Mm9}IR|fSmR!T_la<GjVlrQN#<iNb2NRxg zGi{!w&n0uM#xue1b82Jd*>IM=tT+LSWji$sVv4;Vv^-nQ6nVCrN!>JF*kb9=Dz@8V z%eL*RGvAe=xOdB*>_jE`EjDg<7pg1g@lDe@xFPp+V~O>=yHf(c&ywxCm3w~scP9Hy z$~WIsmMygYaz{f#PULS!#fHe8TJD$Lv3*N@xxMM%w%1jO5wE`OIs3G5mFbsVnT{gg zWAg<{neERgm^W{>nC@7|#wwz_rZ;ef4Tn>(&wbtAO7%VWOv-iE^i7Q8Hve~4Zh6H% zeRj^S=k9?`kCr;_p0BX?j`a=i33VqYuT^;|>#yed-u*Y{rTbsn>YBcIJy5Hhx$2I* zibuWox4kSczb>4<q{@~<-lWlXUAfn#85a);CLfvi<#yTH%Bf;o4gMdPZN2sXo76<x zjVCRYZ^_+XldE>Tul3h|8_hDyrRNG_UiouPE3?18eC0Eb?m00#Szl{UHt1E=G44IS zvec(wgHq|WRqJYcukhB|pMF}BcUzO`n$y0JD3#5u>C1ie#EM(lDwoYz{p4iv(K(BE z#^{N7KZ)8ISM0I-P0Y!O(fJm<viDb-%<)cH8l}6}_u8t^<qmP{EWfc;E}ggj#jdk= zokHhV>)rJ)yA!x%|Nmcdyx#lvn@@87w0IlO*PrUSR+Im1x%}$=<oTDqbU$_TnLjzp zch;${yjM@5{>{d{C*yy;iT-3hpV#x=<1gJmZl|-qvG^<BcjoVvLnrR|r%s(3CMNPP z=tuCweTU?^_8<4yzj;#?w{U1{e6o*}p=)9I!@fi3x$HIn2q-7>$vrxl+Zyq3w!~#M z6^UJfk0%Hki_AYd!}L*NSHGxT$Pa~MiNaQgE>v^9KQ_bomtdCtu|0zQK_?{Kdn<Yt z2|k`7*dIJ4S;jo6@sU%Hu$zrzp`F{c4s}hj<T)lu6O-(YX)5~#`)Dq?zR%?C=0oXC zwp+RWfGe%;-5;+zF*7i%VaHc#;oIlxo|>0hl$q?Ao0y*Jk(if~lM200W$&beUWXk7 z+S0e?UWwX}e=#V9U#?h4dFzFs3zvSU7~fo`wtG{gRQv()4}~^A80@B$Y<3CU(xh<i zX?)wv|Nj%7KmGbr^4mj^D#j9Ki?j>+C*3~ZJS1>7V4=$41d|zA%9i&QMhNy_OxwQa zj)!Mgy&P}5H=AuDhi>e%kO`Z37TvvVe){7K5y>sLVlq-+-fMHVkDbdo??scjo?`Pm zuFy%BmlQbitU6fIEBz!Q@?G@9?b*WN`+e%SPkqvJ?y^bn7K0V1LS`Q-w5jnp_bR2% zS4+|P<o_a@x`zhym>>V)U0L^!L3HP@<P{h7tlv-N^e=vDf9dYk&h4iIJ?;9htK_sZ zHruXPeK+ZyK{SKk?F%2J4md7u@0Gi{I2ts7_2$^DQ(}w^3`bE0MbTRdpz($LqICVl zg2d#ERQ;sHlFV%V;<EJg)I5D~Xgh<%i&R{5lTuSsQd1zyVCIJA21|vD)U9LM{pgsB zi14Hv%S`q69KAYYndqe@T3H#U+pb=kweRVnxI|I0O))O@0sFr?TTf01PPh7dNB-)| zoem~kR!fZD?fm}6@_eQJ@ALcX|FzcLIXX{XKB1~X?z_pEAD!3t+`0Z?qP(5Y>xu<0 zj@Q*RMV2mdXFADfb7Z-d+|Q2^^D}3Be$4jFROf}qPr(C=<h>)VeM}L^tXcQC+i^`o z=<#6tYaf>OtuLurn;h$zoAJZ#@OGYk?c0)1yYu{g=+Sm?bHFy1!v&!yuH1UnrhP=K zydrJ~&&Cg4H_y)AbEud#F>U9T@-wgU?DS<mFUbgEj6KD@bAd|bHjSW|qPCeIPMO_* zx-8c0`S+zWievZf51Tx7R?PHu50<7Z`MU4K+&w#|-4(N(nIf^pn<XmtsZn^s4&irG zUOsV|H!-fyU};3jlHKPE4A%zC;@fKJcB`;ucfgaYt5z7jX}>(z;^mi_itE#-O=o2+ zh%6I7)hAM&^3CUE^6PhJgXaZwFyGl^c1o+6XXbY1C3|l8+1)%@8GhV|&F)A`<NFOK z4KB5;_S~Ie_wZ^{h^WyAp8Li<bGMnq-@X-eRDSb{md-TIGhCJvo`!yWP<Q75|Bt}K z{%m!}ih1uih*|PZV{FuA%MW&RzURPbW_mQUf>~|Z3gdt7_att#bY(>!?rT)?;tA&t z3KLoux&FHPYvajWU+!JGGKJ~#0||}Ahc2W?OT|ePIEH?|mg_BM;vwqLyKJGtn;J)> znD;HS=FOdJ`n_x0=ED#2FS#5Pjb<wgOz-$EbSOzvTgN+s=hw%=MeM$9imPL+4Et>T zl`FI56%AR!cTJh!QnM#WkngAP`%8@z`NCEkdgTAPGjo|o>dvJH4W!;3@tpUf>)M@( z#*bWk#aB8U)cd?{ne{imx9iI~N{`s+7cZIPC+j&WdwccdB_hwG(<k~(4D**%`Ehk~ zY~|`7C-r8p>~1_``EK65r{bT^{@r(^_=#=rrKttk<yX^-)J$j1)Owz!`f$Zx>s!74 z+*|j?bvxaizs^{t`c{nk+bvg5p79VjE48g{f2NX|mK~&_yxCUr<-EBMlk;XtEuPtt zU~zY=QS+8b*Hu*QRkwvy?W&SJdBOZQ+uzmp@-uF2{IbV$d*Y&=73Nh8->QQf9*X5{ zkH5c2zfS&Qz!%kDN&6F2q^eu@y-@sR&i|m2HQ$?cM{_}RYLm#6Q%{|LczAHX;N>|Y z^+7l@;luWAPAnI<IW-*lJvDh_1@p1>Z@(M*Y`d@TxLAGyM`ipYr-T)a-JJ0zPrCp2 zdOvpbKT+NA(3!<-@%2afK7A9`PFSD%fnl-k?AomM?S}IYGtYg|*0s7Z;gI+z)?-Z0 z>kD_vbLuYHcwp*{>=v7V<EtOnKe%=AZPkV18r~lEd)?;exipuUe)u<A=U(n{u?0tt zcdlYeG58=4Dt<m?%(x`a!oU#2iLcBjy7;LmNiE7t%z+g@@!`^;0{?UWy~*3A9iXs< zTWO{1ES9XSz%8Cj%~~F5P0`wF`e?r1NmZTLvdedUTl*iVfB5lCn*Ue8dCh~#Hn$!( z^VbRQZz+AJCZI5-`Q72UJ2x8_*Bck7zl;C>=aclI9X+#}!VM)4v+g-Leftk1)rYy9 z?=?CeNyTpxD&k7oanAg`){JAkobNq%XezE>AU)YA%|cg0!0`0WXs%rb;)j1<5Upw8 z|Jh%;Psd}&+Jp(edlM(>m#5UIJWOU)j+j&se#n+_)6T?@h=V1pU(T(U?(gkMy)pI7 zr1!JRRMj2U?8>=%N9EY+wPrJ4FU$RPnQ5J>HLstt=f#Z^C6}LJ`4Te2K6%Qu85@%} zHa(PPQj3oBRiAwS(@o#&rrX4_>$X0dY-wy(w31m)Jp5YZN%a}&O$K{d59_bx+%e_N zm6ubN*a<H<lQ%8ms=4fKWp!1n1L>Q$z0c!(ac$>mhFI@KueP1NBYFCRjoYhe&%Kvd zt~+m?r<xqHGdAt$hqLXH?+ce6dUNK|-kp|id_4CH(`9a_&u)3xdh6}wyBC!`inR0| z?(6E72>mD(f6PGZ!JW8!c{9Z>zx~@I_@TLe$H(PbT?;<6`}=I|O08M<h`UDfp|&W$ z!_$|yH(wC{9<2W0l&9ftx6-pZmEqj&K5TvWx^3?2yIn8X@Z`#xqC;hWSQ<6dn@*`& zd}`?uof0y|(Q%DZ#}cJP-`37jPX5q{8xNeKTboxkd}e=aCv#JIhnCG9af2&%@3XIe zxp|QJrPaUwUj-cd8agk}IG6Y9%vRoRtBq&lY+9E#6ih0=bhB)K!3oFmqaF!SdzLfl z&Rw_d{hR4CcInTIIw$<_r>KJJ^v}D_ZLMPRH@&~bs8KDpXrk>Z$!XWGM4kIQPp~&@ z>dh33!ZQpWr5&?MmDaWh|9x@D#P&6RFko8FsLGJbp<6P)t+|H7R=LNwlUv#R*N z^4Ys#y{E@9zvZ5v7hifZGfrW3@KfdT6uY?=>aN=|tM-XcnHZ$cYW`)NvP1UtzaL6e z7H6C+vhn(Ss9V{tU}Dj6pN)?XT*xkMlry*xE%s<}`woHmc8s#z87v~wleR3&n66OS zl2KnJ?o?I7zVOQtzC$lhTX+0vc{cr6h4=36jE>(@^_PB`JLacp{P@mmn{K#h>xUBN zi;sR7ckG_9Nl-Va-A1(6y?*NEM@Nj0yb9P9RN-~+m_y7prCAcwA79)Nv+nVkX3d%T z`|AH~SIfF|K4AHF!)d)H7eaFu?B3Bm@80IpFGcrDzX*oA|JQr8pZ~uEL-YaJJuU)q z`K>oyO`2EhHrNX|%zUxkDeTTMUfo|J%rBR7TrbqqHdPSI6wZ=e?D=HQw~2d=&!xNe zp1ZQIS)<_F`RDZ}1`$^@jxAhs<nSXkee=iC_l{|l-*o%S_46WMa$drc8FH7Hw%6|V zuu(jaIBV`34-Te#3j3xvNh~}Sr+7;H4`<SU@Op^i9~N89Sr{0$pxn}p-YT-hGk${H zDnhVb^Gb>;A*ECAL|^|y4gziWTQ4z%IsRb@^l)i5U7{vu8rRXTCc&?AZ~CrnPm>Mb zdL26d>B5YP59~h{_iR3LL_=Kfy|wY|o0VzbKfnIV99eQf=g^@tMzyjnZ?bM)-ju&E z?coH)_w9$|RrQ70o*AZ0zLCD-OIyvcyN1&ntL-JY;$saZ5_RVNoA)(T=48V;A5k~Y z*G&(XnD;VIw=dpxO}0R^_fCo!i_@-qE$oX{zcw@#`Bl8qX`#}rv^aO8AakDbw^MiR zP2H8cY%{ykJ3sl>USFA;Hylp7$+1eiuDQ8kW8T7p1v?KNxRzg|9cq)Vp&Odx?<H7% z+{V-8P{2Qb5B=NMJdSIhah_~<f+?XPGo@?BvN(&z$>Cq@rc7;goqBPS=q24#eiI%0 z_B`9uX!%^z$j{dG+RG&db5>1M`u^*3sJiZ?*()9~%*+Q>9-I*(q4tan3}$%SuA0Qf z5+qjUhP^Hqb`|;W`}s!7<~>neI;=|?Ca_B^h%#{9;vbQ-GAf6)#&@#fO|zRv?t12a zY|Ov--@*Rp+W0>U<fQn%%{gU$?&5#Xy_1(@dR>lsYq{6B_<jDnJKvx6@2`t)<X`@A zZr@`G&c_mZ**g{qudmu*5_45>jcnY-&K?b;Rf#_CF0$(qV+!N0ewfu4TM;X(cIEGD zse2bLE;O+7S#>vrCI3-d+w8<Q$8}xr1-;mQ^_{G0b-3*P-~hRUCYQQWL<FVsvQK24 z$lPFh#-OF``O*T}dFci^#|7Ud%&VUF!Q_lqVq#Q^k<#G}r?oz;k$CcQjzrm#-3K-p z2kXR?w@N(b^NeYGk#X^?TBT>=q{}h4Hhbpl%@*}5%BWexdGq*!+q}6va~B)e^r@e| zbWVMJfxi0Bk~jekmrGyXxa>TzVLxZlaXnS`sYkTMIYjqlSZ~{N<U#i_HOW8CM|ocQ z<lL4h&FoiyQf2mWlXT_BjGW(gY@d%l%Gr6uKz40pzW8Kj?w~Kb_2MP;PX|T%d4zv( znxC4xsx;}-r&PzthnrsTiOFg{OO0Q%Oz-^MoJl4({K8yID(rN<F6miKvGRJBXS81` zUi6Hjo~85o{WmYJsi>)PTcWDj7ZUumw{Ye;!#O>9M{=GV$-A`I<mHsrM>h#<H9Pcg z^ZnTiuV-Dh{pT`Qi$6r;73*Pvj(buak!)2T<~aWSrQ_`0{mFR35lOAHUsJEoKgqrQ z`JBeh3Po~zdEBq>+4QM$;?tjX=Fxf_?q))Z7A72Uym&yMZRLhpc@vUDbWY8f)aYGt z^1$x}R=0P5d$Z#0nXWS{-g+|2bxbi_{*amZ^MVcE{`7Z9>}clat!e4!-P2RYJpaME zM*oj98yR_|e#pdU{J3-=T+1Q;u{87d54wjp=GwTXeovVsxoi80k4Ku6f7%@GJZo@x zU9>KPf026?&+=`LKiu-TEw{(;$+?`+K0W=XZ?=@@osi03GVS4oX}YdQ)w_8)eV1pv zxz-S+V_H@dGUG{g_q42=opwQ|3lghkZ+JCMTyC@}W$kK-T_?IOKJ$te7OIHP=9GLN zU>wxz7QHV}`qovyWU-rXc4oGH3-hQyC%XOmX{pOTrwiXleU+T`%EYI}#`)#T9MP4t zU;E_#vj|wf`%thV-!yN@S*}Z_&$_?rn4QbU`A>dsT47gs^}cWXna3H2jV&DKN3J-@ z@YOwe!LFd=!o1BZ4?2FSw3@4=viPgVAI69|x(jvp@!aoa|Ddnva9bgFt7=Q#%B%qM z>euGqFM8*0c~xR8;~%nMebPB|gZ9@mz8y(+nI@>1dhGp2mc5(0_BM#Wx?#IT%bV%r z?~LC&_52q0i)ei0`uoWs<8P?#*2PV8_co@!*>zE}qT%jJ1@FwR{pzBNZZjH3IQ~{H zS#l`thvBYi7ajTE`?h8q8OJz2zoO)JX2bfXTFqL)bl<;<^O7oB{;uqh+{wS$_=EDU zM_JVectS6HwJlq5_~4Xn9@b9sNk1OGxA%Q(*t*U*p^Z<@=&z`Z-^;WcSF|gtPF-1D z5WM<l(Zqj$pIq#&TcNp<FRMgwd8E_j)ia&7&)%+T@DuiD-8}mahwTx;U(+tDJ@j5< z<FZ}e^j%<Ewf)s*apkIpPt}uNDS1`)U!K+QtF^S})4gxti)dbltMTn;VPN=xw@Ix< zs8mE5KUq8BY}TOwf!6c6i$115))v{7A#T*I7u&Uj)p5m)zbcaJZas0!)1S3(R=1sl zyw{c0O$u*M9W7`xKJ&Bf=iS_Tfd&0}EnzKXEqzYq=hXC{>`l?-+Wh?Er0YI=3ZJY! zxMR~Sv-OfsLp>Kec^SS-`P8*}XTYhvkDl?_YmZ(q=}b0Ex*1v)A*sGqdXEa%&Cqv` zW_Zgd6>Xe!fAXeX3nTm=ZrQ=m|JHV*f4y$SiP`_xhQ9c@o6BsL+RGrL<sW|VXZ^~R zx$eu_+V0HC&=jEP!u;WuO?JtQ1aM#}Ti=zx%D}*I1Mk8|d=n+$${iY5PKm{-W+twA z$@wX;k*Bp`xy3@^B6WG2Htbk)Z9!n>)udcq#*(W?G7e;&?dDwTn-jG4#&y=bgsD0u zJ6o1~`+N5v^KbS~ThEmw<fLW&J~{K>3cvGrRRx&>?N6M!SG=?OT=Bf(bGF~#?f?Jx zr}(cznf+NNbHYEmF^HRddAO*}ywH>Hv6Rq^07K2EQ@Tz|nfRPebaR%<Kl$*j!ny}@ z8Pb?%a6iZrc%Nj~(8_R+`@yWP*HYiSKS)a*s)&D-^5o63F8+`ji39FZe2<ew=Vw?n zeJ=VD5;dbJZPke^i?$en%7T>@h3sO16PyEEmp&3}{=X+R`Vo_JeaQ=}W~0D!#cXRc zZv7ORKXd-BGX=U;Pp9q7kxGk|c&WPiKydgezk@6IpZC;Mo}8ieQ8kY{|Kge%JC)2g zE!&VMef6nR<LzUIzP`-ND?Togn!YH9d!JI!rRio{Cp{KTocdPFdFk0s)wvRU+drpF z(Jf4_EB<Bk_x-n~IZ>-RLdB;)bl9T4<;uBI!7mXX|9pNT@}#U!>%yYqZ<%&?w};)F zvAWaCSBIm0wzr<2M)YQ{pC4~MdbG^!u!r=WC9W*1r~JNhAxvI2OjA}p!C+2hkV;>q zX4KACFHioQrOQ#VdBc=IapNG}Y1vC_j_7rJOmlw|wNj-pf3?C+mT31#zI20A1s^;W zUt6?pzH22rMYYKFczQudNGZpa5}m^Vf!8-Sg>KU03iOn6+Z$&eC~v2zY;9_0mbPY! z&Tq4~-r;K9eDNtarkl6U{IVzHjgwY(*v}UpPDh_xy?emT7Jv6tw-U3p=h=`aVGA`R z_;N+kYC=DF_a(2}7T%G#LVLDp;?$l(@tRY2nfjJ%H~$PeZrStlhnHB=dA5?Ob-HKO z=dZMpRjbZ6i(mO+&V!#E_ammg+qY~*th(xDJqee?o4DheN^6?)OKaNSXBwAQF0s86 zCM4;6Zikii+iOciC%61}Jlbzncj&xU-NlU!yRFte)H}TLty2MG+MT#kE2AR<_s^wG z(x0_;Qige|M9$m)+jiVZyLq*8k0A?J%$*OXs+O!~jh(wQXR7t-JD$8tCCeuK@>%`q zUxwA(GRNW&yMyMF&Tp{4buF_$ds33bizu}-dy=n3m$dEXdr<OAb4{Mniptedn&Btw zUd;3lTeZi1_f-4$rcXN+h2C0eSn(_0nq}MP;N>#4+q-Gg+_ju`yAK##Tg-EQlhS6X zzP$QpKZ{h&@7&n-V{YtYsh?-PS`Q_7e7PkP>m4T_u!b@4TiA+;i|$q}G2G32^__L% z>|-CxeuiGoJbL}E!d{-+w|ftLem6Pp_m0g~@0MPywZ5=(+A{x6mfA-r=5wj7XO{B6 zw4ZTO&l3G>EW6)p33$(0*01pM7hes>1fApZiO;Qm87=&$Hl@ArT0?%w#6$M4q(j~* z8oc<;doW@VV=1rj$9jPs?RPi+xX+=|XTBks_n6g|GYgDfd^Q#I`E~do+m|I$VUPd* zZQ1nMEh0A|T<1;sRa>RQUo>2vZ}84s;`&l%?N1N2Z2?sc;u4d*A}Y6>RF>e@w*4ql z>ATe^;lh5qN$!sq-d)%j@PhH1M#tt0_bxm*RuZ56%fdcAI)%%{RdwfvzP~fo_*ABr zwiqWa?G&H9FT&<c_5)Q*nV7>4m-hD^o_XPPV!iOhcFvc%vhF8dO$}JlxHxfXW4Nc; zhp5w%x!x`XBJJCrH0e#6_FFJ2*u(8wq0Zz4-#vEKbA$xn9+oOQTlH?1L{-K8wI3NC z<{tG@x_aucBA4s4L<cdgf9y$Lj-+m^D_?x<Kd1rU+H=)Gl9ho$mm7KX2YrhkzG*q+ z($_1%)g7hm?G4Qg7WNjg^_|9fc)_NhJv*N4RBP(v&U<h!Er8MW;*Nc3mwedNjaSZ; z`}lX!_t4ck0xK`QfA7AxYP))1v!g=jUZ3wfpU-<&{rlPd|NClOnU)_ceRI5%$1iQd z^?(Z#k7&v=OT1Zd)>zh{FzoEPmlplptE4X#1Rhr9onHFp&{Upvs|q8IbF5o=vs8BO zj)f1?tn(gjd-d+ci^D7040#{(yv*)<enOf@{qy(fKdke1-PwHBQqp3c?WJ8oGtxc! zex)8<(7%7Xi?7u_aicA_ozA&-cb}_nyH~UD>IS}<ye>R11?IV`9M#(1c`|3mv(uMK zu1u<IU*V!~%5Z_=;g4rIkBe?>dDnWP@U(OQkF&2yvR`P0Vy3ia&e_}r^6W2s(x+va zWyY-H-0ir1{ms`tD%lg4Z03jyRTGv{<Gte=cz8-<^^Wxq8yhpvNX$6u%-hd%=HbRh z^@=kWKF?ig@%iyNiF3aib3aLK*E$sQ;8JCF+xwj8if4EJJV`l_Eqa{me1ERN&EK!L zUOT^tW#a6*)BSgf&V5eJvn*J0;^_0Unm;X>KUb`JII~gc#p9i?etm3ucpz;1;)hEc z!z*$h^uGG_QJnR4`KILV-FLKiE6tcCJ71>XS;ipd$K0cDTLakcOgcNwe$B2=YZL90 zeuf(N>}d;Y-Qpu^6l@uinK^NxtK+1k=9Y`|Q_fCY^5n)OL$PZL3wiY3NSv9lG)G>z z+otHLzv^b22cc~%b3fHehx*2-XzdTy*?S}4M7v<Q>`!xNE&Go#cQbeW6OnwE`<<&? z$Lr#^yt4aGN-y>v;&N76@1S}5t8>xZXIp1|IK|UETV&z2q@e4r>E^SHTO1c#&wmy= zD|JbHyU~|ix0PNV*=rRXPy0nqvI$cO6n%I@)N^vp#t5A=kNs0tTC9%e@|nuJ<)K3D z*MO&f7go%bl89mbE#b@;=q<EHIM$*^=B!AGd2i1#m-5@~64zYUtexHYOHI|L&uq>f z)omud{?{k!Oq_k?%ggf~{OX%eHkxMSO8BJ)yCw0?WXaH+9p!BOcm5iO<<~y)_xY?} zym?Ds?9$LT@9u4GT6a*i<no55d7)qGeoIu#9ZHpuK4L6$_+#6?=8|`2ODkn-mp1y} z@P6C>MC;qttB=4(yfuc+edo^1z;KieUrxohLBbPhQZB#`Eu)5H2j6lKvDHp6ShBS% zYGwbTT8^e;;qgiG`<8C?NIk|Uue?T4mraf3tNhpOxi1fFIkV;d@5NSoX9pZz)Hn0w zy|eH3KA%%vo?rL>=SN{VA4TP40sg-gPmU*Z3LEX|@aQ=8;z$aE;gQs$S<@DH&6sGQ z?R;>K{O3b@Cn}njCw=pAV>qw6=fxo<p`?gOf=9eL*Q@MFdl6&gbGYuPf#A)5OJp;% z0*y;elcU>Ks^1D<RLyhmYS2966R*`R<F@rqicEZQY3JOPaxxO?Jhc-usu#STv~9;@ zp$BPw4wKqv`FUhbj<Vhs>a4R;o8_qPymFaYMm>{uC5r4+URb_AOXRco9tp9iglj#{ zd0`&WN>#Songrej`dv;9PXBQEhKqEL>fM#Mp04s;S@1T%Wsl;vNlRBpMV=Pjv1|R! zW9d`p-_SKt+COKOU#?ZfYrlQdI%217Sd<`|Ep$yZCt<SUkACf)#bF_BGtJsgO<Y$T zeD+OlUR2c1geO|X+2T%Y|JLuGy=H;xtc5Wvqt3LSog{0wjc0bd?9#-E2@wayCJEis zs%Q^ny`9AI(Dv|$(x;Or1Z`;E(!`&{kvKi^m)1?cBh%8Jb>CUE%f$PTL4D|fPjyGP zZJBddszU6laOQrom7lj>6ZX!z|7A_gmn~_56By>~4NQ2=8SK8Ze0JiRw^8qljO**Z zvN+yPt&*(SnY7YLU|vVTt1G8cyHYyhFD-t%_t`vw(m9u+6xceY43^4XI+H&=CcN$6 zX$9Bzt=ol8TA6(+Yiv~Y3~7|EI=IYJWu}kYcZ0UwU-k?2^ZS&DS{b;+JN}wkdBSV* z#tPXtR|+MUUH8so{F1=3*hF~U-4w}4|NP_O$Jerd*T4B?$84TNrBY8jp;`TJvY7Ab zT>KHlTavasLiW-k^C!Kv?faR7O-pJITI8~B;?=lmmG|}Dx`ozphh>dSzg)Ta`}LJX z&c}>TxSb@AWuCoi<dh=o6wiDx=Z*BQ7jM5`HGH6T7`!JgpsB(AArk|`5xi?qRPgl6 z{7Q3j{0krhRZ~M>2VZs&_%F-Kq!{AB@>G?}iEC}(hu9j2)myx{o0zA4^v>uvk(lH+ z>CpbA@uzyu{J1LlU*q^*v#ShD$!U4t^X~87Uj6gu>)Yin6ArLT{+%&FF*)d%tPiJw zuA}Ib84Siow+yt)3OP9?%NKGM_y@f6o-tie^jC3(%7J9Yc^(y74`;ThIR9?Soc)ix ztwZW|N`|kcs^68^%b#|h{@@vV^D=*lul*O(;&}5N+d}T%eX6IQdQ`L0(7eoW_QKN- z{!I$r>U}R}mSSb+<_VU~*1vCA>Hpf58&RX@yDd*7cHM8Ar*Fbb?%&y1F{`>RcH+Vh z^D~#ooGvU5;d=c^CgoJ(S;O4;B^%bv>oR<xa$a%1-%8K)7pj|I-_a|)zNMEZ(6%kn zRHc5>%n*YHM^^3%y@#z$(<_!H2sZQ7D)ugj<C-=hXo6S*!+Oy@2aOJ&aP9Oup>g8T z+NSad!6-}4pBwxv{+!$ryp(%^T~^+dHMzy+sW0apw`E-&5&R*pp)|*!$8z1mm!f+k zp55Y$y_bI0+JGl7`{%0EwP6xfukv)b;-c@~Tx{a;d{IWL-<FH~r`N@4&URgOFJVWO zZ_(mw=_h#Rs)pP1+)B4AS>2m`KFxo->*4o($L}(~Q%k<h6Lj*6R-gMX*^=qeX(#os zAJ_3d);ZzfvcP37DyH7^CHCbl`uEnRE%2+)=T@o7R{vturau2-lCyK!df~Y1dw-?) zPq=OT%%5vwcirXaEn2CyXP^EKJ#DT%?WFft9gTy%#=)Xo?}aYk=B>MGuB*Ga`l*$^ z=Bk3X^L1VQg+rew-z_cBxbXX7Vf|6fptioV7nUu%ywSJkvDV(1DI5;gy0f^gVwcD2 zC%Wy(ea7)d`-pq!k$?ko%cpOdT2Q~IZCXu|nNXss%Qhj?Eywn=Tskblx#akX3hsyd zlDCK|O}r^}E7Q~cMaHSVNj}bH^HN%$W=`w>@4$Yt^jV*x_@j@@qIhGUgeJPbIHx{~ zEicG}mpND@s^x>g%5qudD2qc==LEc4cs1Jj{(Oe~hh+<dc{k-I`rdPHGJ2@-mql*D zXLC?{(&5AD0zqa5hE%+@6uuKZf-`dqa#E4&DoA$Q8+JEXI#lF;EXPgXO-lr3NolQZ zy*7(KWub=DimMz8UG`}`T>PVT_LE6EDzi&A3tUKVSC6lG`N00c>bZedFM8~(9?L(i zc$aqi_ymQF<8yCTzq9;)=d*S7`<?su*8lr@IzQv+>>szf<Bq8IR9$S^!M@$#+0oiP z>W>?HzSsU>;MBJ}vLi!nkI9@bi9-CY`KQ`N?1av4*>LuULAT|_Gu&S%_Vl|hVU@oW zF=eAla^$hDp5sPgsWnQEgC*ym{1J0VT<Drgji%$|35hSNY$nf|9XH$ijN0XXp~ok; zE^QTYPDpdUeeKGkv?o`$q`q>i>seU4CnrSr?1pJuABm+0e3>-udGM@>+C`HezVo?x zW_6V7X|Wx%F6z_<ug!b@`A$Hv`X7zH-}~}jTw`wY_>mN>bed<~$D%$1>(zH=&6po+ zVmbdR&nLwP5uXi~$G&xV8#y^!%wMdsQ(Ek>%jcUfpSJVwJm`B?YxbA7V)r*5Q`%OZ zYq9#-Db=f;PV!H+Z=AeUX?*3-SJo?8VSj^<N%?tSEcX1ectfRMqtNTuyAF!`o?WqS z`dOi;AJ1~8RM%f&&3m%rWbyxex%+cZ9^Uf#g3(cN&CYk0p1v18PnygX@byLqXLpy? z=G2c`&RTyaJy^NJ>Q(3jozOM0%SD`e54%qjb(xs@!rCr#WzxjwTayl*$>*H^#BW-- z&fXji4rL|9<qgSmA66aQq_uce)at8jS%;aGe(gPY&~c))^X$Dhgg$X`T~N)@xZx7$ z=xOr)K`f_89!Dx`ezJ>`E04Y4VgHt!QvyWAyd!iHZzd&Jb8QQp>`){gKQVE7K~~i{ ztqX~I1-9`Eim!wkR!*IL+a_@Bhc#OrPKPc_&Yr>>)iQ6hCjZgLg{8|^NYCbpi|!Ni z@te=iB$3i#7F)eHq>$@*N3~U-c%j{9#}7xi&OW;>y*%BY{e^A%^2@v1mcA7@X!_Z6 z*0NYOGs_^?t!=KlCcX<CKMLqR%}ttpWmC#s(bVEunQEtQ>b7UCGuvbwW9gbxoY}VV zL!^{_cIL5+f0ucVDFk<Ee~o=_Tf8fG{?DFRMwcyL_&-kgJtbJCT<_3l9&ho*XT9Z5 z&-<)#@t*!E^WXV1K3`htqIagNEN(K-)c<FeO!o^qId!{6%3cSFriYy#i@6=cnGIG+ zE8SGC6HS%aA0TO_aVB+_?%hS(MQeBTT9>4AJuJPW+El@;u$Eo#V9%B5C&gTQZq;4- zm9eJv$<`Oe8*a#d_}ew@>hp}hwo<<(*QE>aFMfTa;qm=EcjepNilWWu0{9!ZPkPfK zyFm8=pGW(IXv5q87eBUasqTBuRr6ueoW70B6>cetdz9xb*wgQDVRQetgxhvc7W}UM zvFI=RhrbQ`UicRr{k2<j*(0Yd|BuC8*eafLn|s&yT}zp_Y)+n#$ewbQab~aVq4N$J z?K_-4H5thMXZSpgd9#~=tjcAPeUl&F-r+R2;l&T<uKzFXoD}y9%vJQ{$UpJ8zKW;f zGUFH7Mcxc<PPvMjPhNhLZQgn0{_~87cUaQ(V;*E}H?L`Uptx?Q!z=B(_a?k<kyE-` z>-1hN)^1@u|DLS!`IZV__7^*ZTsk6lzmK(w$(+f&Ux_Wwn(JA~>&YL%<zV_fExlDN z3=CUQ`qk*um-vQ&gG(xNP?yk^_8IauIS9C>iypn?9FdW@Y{L>0HtrtQwz>l+x%76k zxLsKtS;4@c%2HMTwfq0)d(VGY9hSKE;J3lY#8nB`HXQk6vgW~-o|v^C_nrLk#_Nux z-c2t7(JMmtRLm<DXi1ob1ePWGcz)70TYD|X(C^R$-Rmmr?pbO7nUFA5BjS(kmm9V> zH$RLzSaU#PlT?4^!I>pRTy7WKD_3p)_UjjT^<cuQ*uFUo3=D@Dkb5ZTe#UqHOK_OG zV@^RvqH}(3L4I*&3G@W^so|Uz(nm%A9iO&EIdkp}>B%l8Q<z#$EuXT4ed6T{NBWw* z-)t%Lc(i59nx#{>Y}}(ArfvPjZo!vD?0a8$diRTXWiB{)Y=%>n)63fX-)rxG|M+$9 z-K{yNy=J}mUH0s){rkO@*Z0WUez{-$&e^!?!+Z(8Lm>qgZE8L)g$$~4YKtS7wcV!3 zx=V(CTz%NNm3?}<7JsmfkG933nDFBpq|SFdoLMogDSh*Y;zdjT?%eauhV^{E;Ct?h z{o+QYy!_X-Dg-~rh#&9%D8#BiwIY(|`J<;o*FXQ^>I^@&k#YT`3e)}f6+X_Axb|?X z(E7<0dyhz~<V~qqd}OxDJ)MtYo!h<k_&!qW-0r={`B7SDxmHCuPxOtw%@yS$?+*rc ze)qZ~bbM`v{ObL_kNyg6_pWhxG~<Y@P`Ou4z@r^UVug%_HVc(|pYgn-Y^Yzj{z$vZ zyU9D^AGI85fBb{PZq<WiE<3#ov$m?AE<0M%%cvYLdF?dQ>T>yO%fEzNHTBkH`o(gs z|MktzrsVLocfRFZTM_b2Dm>Kp_zBJqXQqj3m!<By&2s7F-EF}hFH>!!O@bcp%Jy5L z72MjCxYX_Y`&+3IZHsqryPO}ruJFj)*EjS9UTrUKJ8+Zr@ZC5q@vr|_i`mXj%C=bC zroBMbdfJRFx7X~*nf&;6z|Fw)*$%~<n%8jcHp|u8u)i^IOSRYhvfx(VomceS^~KNT zoLv#T(;y*aQ(vT-{E4R1llFzK$=LaJdDx}>5+7A>g<Tcecz(O}-~U(q^Up0S`j(QF zesYG1&UXK!q7}0oZYQnKyQ=MaN<qKI>8J$X$_lP|s~$1htXR~rsL6j-1;_lLkC|?E zhYzP${*d9H|NJ3$MZkjE%r9#>m5*Bnd~~hp46Tnm7#>n18ZR7CF4P_RWJ37I(rpi< ze=Ku&Kl7;j(d{2{MeiRh53S+9AO4Z~Pe6iiv&M=af^};isB6`A&F5V6l}GDkn4;+` zt7V}#0?$6@ZGW}y)s#s&f6uRM(+~K_{U>O_$ulc|h}QWAw0GTqu>DB-&1nZ~_A49c z3S5@Gtm`MWZl-94<kr=G*EqB~{LUrm^7+1EUG>`Z*CvZE(|P8a<wy7RS*d87efoEe zOE5}CY0J%Zmpn7#H*RZxXf?61>$K8a?SOvE6#qhob5T2AJzOoWyzO$K#h3lZ<wgDk z9-aRo-D-vFb=~x!l`mhuy!Y~KoRs;}%b9-ircHawGerNm9*zHKE?R%wp5>8UmE~6s zt2w#fek3Zte)mA3(C&@$6Kh-Fm)xB@W}SPxWoB`A%JX9;&J!0UigoF&Hq5%l<+1yX zxiD96X0FmtPAR1;{Hs)x`qIQBr|vO~*z{Ir^@E-2+0!HRY+}D$i>|q{EXyR;OyPa; z<U1Q47KlA&G<DkRb<jTa5BGnu7Z$F(`ug>a?<RlDlV881Z(ix%UE4L7_0$`!B)%R? zTW=twp39u_Ym=X^Q0lo4M;)Jkn6%?Kclmv<CCRET``Dj~MQW@q2=JNM`YAALsu15Q zOQWUJSFtTE`@6~RZvJ$yC0DlSUYhM;7MEzg``iLs?iF8_MhM;5%3W>r|I!5w%U5!B z0bG9scdl>@kZN<#tLfTf!gHz5a<^5S(Vu^g?CO>qLe8~UI#0SCtt&b2hJYyVUj9hY z@a>ygay|G;=O|5_IA`MbeWh!)_m`}mro1Hn{L>qKY<#k-4l}>DI3u_>#!N@(P2Q0W zOrNAx^Ur@Q;FMm!>)45m*h<z<%NI{f_P+l_q37+%HkoLD@5;mP<*jc<t=OHy@nz1% zxk~~q=gpbBk3Hp}!rb`V3(svVn;FYow(XUq+c~pCE3c=?I+ynzVC>7ipLuNC#Q#%P zdBv{UHYd(R`kMFaOSW!%qNDEUFZ{PC@>Hezs(DM#8Sx*gEZJ_yabfD-&i4v(uGa-- zDGSu3FZ}rOOPRIP7N$FQZklpmwCrEDG1BCIYk)fM!*h>0?sj^p+inhcrZBtk!0|;b zuCF&pByP0Q@r&5Q7t9&_dV|=Zs8<_8Th^{hEN`f13U}hqv2Xu3pJUeTXB(?}T%TRg zGU(ox%=p@36JxgY*)yl)TJyQ56&o}?{TesNVOr@~2kS;t;|%+-$EVn1zAN!~el`p$ z3cD_I&Fmq|HQsXj2I+{rzh8|#dOCbOQVxBoDtn?9bMW)siU_qs&s3Ef&$RK}F7#8f zX>T`wc);eI>}5H_?$1VEP8ZM3Kgh~1<fWvu#r@pFLuo(W-*WwD)9jw=<i0TDq)&$2 z>tj_y3tcM2WDm~^yj!=X>1}Fy$D|u?t1lgy?tg#svba-K+-IM6Cms~bo;!2H373dB zVbAs+{VX$Y``#}xLJ8)VHuuldtm3I!cX?Oa)^~zy+e5yjDY*y6GA%I@)Sb&Ie{|}t zV^TXhcYe#5oqb@j<c(*A7oyL1e3M|Svf-1j&|#L|a{OvTw`9lpWbUb1&+0zyes8fY ztN;48vkxbw6$ogS$h=W+Iq;<{*S+`Mb+)W8=TyHe*tXg&Ug|>ktoE9-MvAT9j^xds zc%s+V^wTDn6>jgJ9bx;j!7ONbcK>?qSsh$&J#S5}^;`5k>!p<Kn%--kZ$B?h>OS$* zPRRer$qAx=4z8LNP<eH`qM-MY=Nsm0^=X(cnBua<?WB}w^nyRP4nl5TIpMY0V>UYj z1D^oCdLQ4g3aH*MN{00FriSE#`gwJFoHx&=Eqp7awWaIP0=1S6j9a)4a;Z*P<d7Y_ z@Ikcs>{MYXv%+HM1J}dqS(5Ebew|%kx~y#_c#x&Z{y_c1iaenup4&6ZpUta2f4cUY z<?}n$|9||xe*b~9jJ-xjqSL|I72X}(LiYrVgE}%<>-I<=G0^j>(D!IG=4w*1>bR+( zm+0r_b*zSC`bLF^T|KU>=^yqr@o!K$vPnSODQ0S+?+?3>g4l-R6Q&h9Yg{(6<2tk8 z<H-o#GdcG%*IiG!Gi9S*vUAQ~ix&S6D_hR1)SOe8TK;C~o@7HFJ<-@`bFa3Uo4@oN z{Jg#N)6Hp%mxqhHcuZ0>m|OnokCL-eQP7vBrxEK8cE5|c`0$#ZzgxKEpW>rBf0s=b z*KA5u*|a6~jl{0Nr@L}Rw||YiF5|Ddxb)7emX+xz&Ehv~(`{D|?Qxo3;N9BT!zC=q z8QJ!EEl1OniY$%LH7Q(QmLIt26kF19KIWjt^tGF~yd84547s9@ay;VE|L^`ztLVgP ziNn)cZfkMfNVAy!c#p}_*H^Pjw^$i!2^<sdY`Niia~jXQ$q!a&EILxK?cA0Gi*56s z<=xw;A8KZ<JDsuVsJKv!Xlj9|sA3t*POUP@8=Jap!OKVEA4?nUaY~-%)^tpwmsiT$ zWRupuqvb;HR_y40FUjV2qQmQ~L0J%U?BXe>XNMa{PdmA?(|X!z*4vHOn&Q><mxgFc z<XNRpS#f1k?#Hb))1FJzOw8y~^k~x#yLYazZA19(6(J%;n+?}qZtPj|LYV#8mb+y= z5|7T8zS7wDcY^7^pFP3H1giNe*jmlv&3ugB2DV2l1iNm&bcCn+rljA@b*Tlbf4-k; z;=IZ8TW9d3np>ZAUhS3J?J8PrlPBpcE^2+2cY3_`GuGMvJhrS2DrKMArRcKpv)?w! zo4&W!B#W>485`&CBFJ`q&qnoM{=V@`W~Wc_nl{;X-;=eR757;uHmkGlI&kxsZ=Oqc zNU(qNg|eCRrlomUJd(WlIMCW_rH^Dm*U69_s#b<S_gg&-&F8tKEx$N?`a<VDI$K^X zFx?xcBD^GXN%;jCi9XqezcKX-U+N|8d6-^*vH61Q=lL6@tag2`Z}H-e|NhT*3E#tb z^`(>D7Fd?g@I9I?=MW`V$MUm0<8V92y30|P4ll${9I^^({uMAoZlU+<Yks!JGUcc7 z7pBEt=DV=jN#LQT{mFZpjn!pA4f_fl`?70IzpOvn{`;@#oYfC&VlT(pnC-igc7;vK z?x3E}`>fw`j@J&a<F#A(mGw|X>3_Rjk8Vx4P~UV(?!w&y{(rCKvQn?Tblv`WM&9~2 z^$HAe*$j7HO|_O!c)Vgw(*jFL8?8KN-lJQuM}PR$^tS#5_txd1$K?}mNq>}5>KFW) z{3LPn%U~7JS$`{}Cv*G*cP}*Oz0DJ4VPNn^SrLjpRf)Gt73S_(Qc{$eR0``^qz0b$ zI_w}~J9){n{*2YRwb#TswrNh{|G@ajiS?lC(uDHM5|>sMMxEL6VEGIF9WUKBh=|_d zs+&?VnJa1T(Y??4zR#(CcJBH0*VZL(5|n#YxYW8bGc=YYB-wFsOX?(@JhG`%l+F2* zbbsQzHD`a{;oR|M?yOy+m+q&Y_?TxdpqJm}uwwVD<r147@0%yo=q!H4MA?aH`6b?} zg)b(HWE=Rr<<z{w=)BLyF(c%a$(I$yu5(vL+~?M};yL=Mo_%UttBx1X=KWIYHaQdf zT6uK1FV8UCn3c%;nkRa0^!<mi@3z@2KRI<r*`a;!t1qp*+RrcQX;$5}>{;FOIp(+L zd9S~8dgAJr_I{F+^4zubQY;?kolz>kv7}Uu@z%CBkxMOGPK3`n88s&}{Y2oLrCGDH z=6>q3Wm;XQ@R{vx5zF5*>-Z9HEL9Zp@8GND_++p0yM0TV{oxh+61)!E9Xw(ywAAq> z<Fbz&&hkfWYQV9l^<ryh8Y2V4U%bnFbn%S6gDMGF?D-}_2jP1sc>5o65NSQXWy;Io z75XmWYHp23&ct<e7B1xO;T95_&TO{SgG-Zn|LNmRD>@6`_8Z;X=4O&N<LI61GmSr= zJ^uW(bcsyz`8Lk`OviUM^X3%g6z1GEcu*W-Q6{k?L~G|H;kKY^jpspULQI6NWEhD= z2g<ArX4@O~-bm!!@$HPFi3=qBvUb*}JPs%c5jvW<`JSBm!U@7R<yjV~hnA=>`)t6I zbn#`}oQt-B`OBD$%%cAWroBDX`1(-O*}&3`ZLw|5p*|9So@VPmEt#Mwv$n`2c-r*- z{qK02?F1|9KS=V`3qMm*`g8q|UF~|#hJ${N8kaTI^={d&s_E)kbTOjARv}hw;<SCo zLo;sPsBXDd(YEfPZ0m2Iv_*d&2PsDGniDQz&Mh*3!P7X%8FSBhXHC~+WMFuQ5(nrV zbRGP0;FMULnH*eFl%Ealoo@{}S#;S!pjOy=+M^Bumxwt63Tr+IiIf#6OqhE#ja#K9 zM&fp}F2|&aPZ`SB)i8*!vIsn?86(5BDyZP$f%XrQ4*g3u99{CDA!OFOnRR=8^nZPM z`qoJ4#qk)Ky&lIVIz>6E_2s_kpZuV~#!S^*;XI$$y9rPDyx(=i^qqQZD0=+qvzDgG zg(XU>6Abudmp>_rIyzxVddQqm!!=1RM^|(ivOeZglSo>wbNf@91Y6IX$J2b{o*wNo z;J&l@-OR16MUgk2UHS54$%fX`w#Q{lbNp>Su}!|rb1`taibRxcy8zE+UmbxfPxx&& z*Q`kK+qEZZW7mD%HBa+>u5_&nRc&wPdF=L1FaE*4g@SRLyMpJvz9XC+&0(<r#!HQl zQK>gde?ETgcw~0(&d!vC>Up<QCzt5#_BpX_cVBAz0^eglm(3_kobFb6)jjh@pDb6$ zyu+1k>(U-(y*Ql5D_#)j%vZ@fy&$r=@vqc6kG%O$)_J`&^~t=^ymw0C?Twxvt@MnR z{C~K~Xr6S*{`-gJR^H#KT=Q~Eo8+C81WDe_J6uC`I#><;uav$j>wHmrT3D|&U`4gu zSI@VOb9aZlt<7%vcsW<nsGf;WJZs+RZaK{WeI1VL-#7oNs(&Y|6%bjW-Df6sQvR>t zHnwKBjyb8_lB=JDN+`Ka+7+v9`Ss8qj!BB%*4Os@Sz`Sz{CfD3u5Int^aA1y)+~;V zTc(~KIE^VjS$nUmrtzd=VSB&zAr-xcN_wuY`**){jz8DjYZB|jTGwPO^JG}PUVaOQ zs^ij)e4nqRns^Ft{cQHj@uWJN8hgXFxmzw@bkd)@?2>oF`dSv{FY5yKsZYuGHNWtQ zabkMJ{7G-BU8FknHo3+pH_J>9NS4#O)p2jyj%&+#k9<0!k-s2L>DD*4k2xV-x0Y($ z_L?)TcjKB#9knj*T7uDscCGm&)OBxSs7l`6{^0uyi_I?2?@)^p_Hv3n)OKLAUb_C5 zIqp;95`M^jxv83SX8H8_i;X9Hxw9?lW!sgu$XWm5+>7R(^H}!YXZ2TFW4`y#qu0-U zm}fIzF0_2Q@MW`$<i)*r*VjbKH!W9vvi<V)#rcs}w(Gs>6fJ$c{z|peSG&Ep!{2jW z`3T+?FB<BdXvxgLP=qpHf}SPu&X<I_JC&xTr52^8fG155)05Hu!hr(+wr$bL*?wa0 z73-qctPw6pyaijCL@y^Wak9z#O#2oPK27iDys-aV`wxWs>bQ9J*v<U0xTm;kp|@uC zTj%t1HR=0opU<9o_kR7pT6gJXADj+`o;kH+`GMw}ek}&-kM}XfryA-%Zfxp1^=M&_ zJJ+A7N0TKBC+=RbfZP91#F5}e+sPYMR-Dk|7Td(>=uqZ*Y!yrWz8Sue*XkaAc)GA< z<CN5N)4u`!`%`bNJJ(y=`$6Y)X7ufox3=wInYw7U&ire>YL|}Py>#wdU|ho?PVMk5 zXOb)n59w~)H_@owB~9`C+UBQ+?#XSAO#AC_ewt@mtmmw!0`b3_CK~@()G~8Jbk(G% zGu9TLUUs<PTjO!%+d_LdwGXS5q)WypRyQ5rP!!$c{ess$=>3;P>qK`XW@##)e;N39 z%lc(=cL;B`-2C$0mhGln**hNixUxInn0rw3k3!&;uO$U8cP!6cO^BFaa{2N>^Y8ro zyiYxREVfYS(!;L0U)Ad*nXXEGzxL60+OsOX>`gmfD_`fC?6=J+>Bcd|P@{E8EQ^KQ zq6FfPn#N2wxYcz^EAN3?Z-95!svWJjuhjh4p4ydoXW_IWv&g*psV=KmN*r(5ac5S~ zlCI|w;fBq-g_?LLU3*@;g0b*S$qL4zzT7KMZ-^iNyy>j>?#jH^nRQ{x?$WJ?`YgR7 zmU(Vnrl{Q?fBh%t;>c^pGgU8_oUHQQ)cWErN5#uj4^!3i%CADVg>-FF%{+N(f=ly- z{}OAbot8XMV^YSXS;cjp&oWoF;^cSE{d-wv{^5IAK5fB-_u~7aoE{h-@fT`c`APMq zss4{g%U|5;tZV!(5$<<kZr4Qp$^S)d<@N|^KfR+B5MR4$Qk&q)N#7<+J@Jbrk+)Cj z8q2io4=S~}dWXDt=e1p9;k%OXYPHs%HoYgRyEPx&cw$&(zN{|M^qX+4`wL<AuD=fQ zM}M2!CCxg-JavQ5Lq;zCAPbL&4+M7|Wz>*a^5Md<kf)J9z=w{Due)adn2CWwh8<t$ zQx$)m=A4rWZBI-MyIC$AD)IlW%3B|`%R=q0>=R=>ZndmD${OULxYYF0GLHqO3m%#5 z^kqAw;-|*D<Ke#d+V4&`?@>yq&N~0`2g~yx?v;P?CS5b*-FoKmo$CERuif8%=jZSF z_WxSM1OF_#kiEZ!nak$Jdv_Lo?FtrlRhdbG;TQVqINL>k7%C)Q@ITY9#i5{B*3VkN z;w;oAD&);|Q&7^q^~__VKGq3`3MJK#RE9VTBscx#RGh*0K*jIpN0oV#K5pr`%xJ?L zd~8QgkHG0J|Coa;MTgebFo>Pw_?xaeCs@GE^Vnt~8P3$UZxfR{54ucJv?w_?$AowD zE2))xA|KWA1Qk6gsnIB$vaou^izhsrQ_?=&kuZ;ay(VzpnWsB)m$<P%W?g;d{AtPK zT033apIDuCa@>>QUv&H_-{EUdk33(q_5J3Y)3ygL2uJnRPPl!?@T9=Y@}HI4^=(c) z=oa5RXW?00A@;)=+`LDkxb?2jHf59DJY~DlXQ^qMw`&;Hw<X!enQt<_(i0KuUs`_b zgxGn>cJ4ni+hZq9`aUtj)+}GcX4RuQn*$qu{x=A`*nL+hMpV?tXwB+K?HOg~Ja+b_ zKIaQnQ)Ah+uPc~?b7?4B?Y*Tk>hiA=MEhpt#Tm>=zfq#STB+Op2dk*~hdB>w<BoDy z1RnC%(tDKJ_MuDL;b`2EkS`DH*tYo|)vlO&FgaCq&$36QdmOK9=raE}&EWI4uJRA- zy1swd*TNrC)6uU|v*wX-&8ZD`?{_Vokr=Z2YV6g!yIa`z+S=M4GFqrrq^LCc!_2Pp zA6cD`%e-V+=zH{Tq-L?YtKDb8-!3y5{tCsf+|jaLwPx|7=$hq^6pyIXtbfG*XGM}Y z52yXayGJ$nBF)~vy>AzwF-uQ0GC5S(tWjEj##1Bx?tr>wAvauS>oXTIYqy<PYr)qy zJ@)vS9ZjG2v%T8aTeNK7*~0C4ZrrWYw|%|k_E1k_X_WBVxTp&*yw7Gy^(j_G|2<id z()j4vrZ>Ca#!cT8l6hFob^EGy+a5)+Hglw`Ocrds)jJ{K#zun&6F(Z;C|A{ScDhZ7 z)GD<0ewoR7Q7C9Hqi0@e_rB$?lpnLlK9X6#!)9jEjmu82z20;PI!#`?Ej>aw>*U3& zUX`mWRSdpN)5@D{&npnt6*A3#3Cp&Ftd<g+PCbf#p2QVty!qy`O|vi8ZVJu4zl%Xa zge$e-*Wwp33nuQ+IPfoN*`*mfvZF4pOfcdzkG<#Mv}8$st7fL{4eQgslJ|Bim9D+5 zpOE_eaB9RiKA$h=izkU&haL00VH!14{nzYSNjoob>-E@1?oMa^YS;OEt<$z;D`zg{ z+$hz#=~C93Am?_r7o7b`+<zClF#g(n>8QrCxq5kmQMQk?mRx05)AO&g_gLOr^6kQ^ z(o+BC(zAyqFYEnY{-dtBLc;gEE$_Y6N3<{h%Kk2Lt1Z%~h<SS2#d+73WS%g*uk+{S z36m)iw{@5@_pW_ybtSXp$gRxFE4QCdn95$SIHTtt%X_6`)=87}?zR+(Mtw5sduf;Z zRpeUFOS{;lTel?Fd|p&{?VZSLou<sY=B>L+jFzjv_F8Nl@&2fU?7M4AC38L`yfIQ) zXjrxM*?#w!CA|NOGZu3+1RvV`dWZY%6}htxrs=mS``liXJNKZOe8%o=|7v${%jEig zt;6L*;05bR7o}fxOt?5VMWaYn=|#BUBK_hevjQb+Z(KK!S~TDPW6lg$3)uzfQnA+s zgf3>>?NQpvmdp1_X|HJ1VT}WA|G|r<!llxb_*fYjl=04F5}4Hk6|gR;#o#*~@}Vb! z)J~4g7YY<;yU(n9+FVy`zt*mh>`1$q+_i=WXUw>?MO>m+WkywbMBj$Dn|3#D-uh45 zH^(D)QTZ&;F3c%W8obqoYQ{6upWXfZ?9b2Nf7zQf9!H93rik9*eH<skxI$26;^%%* z*6)i0Ch$IX<XK&@B0;xHVw2&Mg_;@~8d@5f8pbL-r%Ub^-OMaFEzI-smYw~RT}R(; zi<@qHIWJry>A7#{$BBx;#Z|d~FSjk+K4;y&+|G3yR7+dqW^B`pHxl`D*?C>c7PiB8 zrd?jNcjdMT>s7v**=oiWPj{5{{kSCaWys2m=|yd<O&*i>Un_aDYXXn<<B+p&PIKl& zbUe0_GtBwbwc~Ve--X#Rv)HTtZ@4SAEiV7fn=d<V8}|OI`Z_n=d$aboex8TFygjZT z>0SA^?{TE=)v_hGL{`0xoMs>2uiTqmsH1pzLxp0(^zYV(_jmsYKBd<i_`#x2Jt93q zN<2%xW14>WK{pxyjVBkJ71-l?dDWu)FFxT`w!3C>Gv71$-s)(+*@{`-z1aBItNFPn z`z4wx@9#PzYWMr=krw|eZ>zTa|5@>U=897#uCw(FRn%pdbndyjYs>#R{~Kg%8%1n8 zSamK*e&}V;m?SRJobcp4uT_4~vOu{dGjw?lbnTyL;hLZ?E0gdpePKn<Pp6j>3)g?J zZ;Rexd*~VmS3r!KN*PybenY|98GR!A692JWRJbR;zh^<}9ZAQf3#A-vo0C|MX1lc1 zDMo&I%qi6PU*#Y8gz&}((s?>e3=A)s@zwNd1Zw*H99a6B8u~K)wwu6zT_X<*FQzOH zuXo%V4j##@TB_)KTCj)nS<b>OzR@>1q8%s7M6ykiTNpk`?q%(g@3l2K3;Ab#ij%+p z>(=|f<+t8>6fG8bpt|9``RCa)=f<8rx9<P1=iBcqE|9cuyV$0Fs6xoUGeFzYv;AV1 zk81nI(hCN9O4>^5j{J*-mLICQ#**3Aa#_W9Qv^#TXZndGVa=9X=a~~NG`eQ+By%r2 zVdGnQKCI}iOy+Zs>RBe@^AszlJ+N&0%wo)PUU-kg2c?7FEc(JR3s}TGcYEAYy`<M! zq1wY-5qhZbSJQQsFWxUE8E8CgX|dznD<mW|Nobeq5)~fL7ZWdNCOSCn?zrw6lg6<! zy-UkE^t@(iQ19wszdd)2bauBcw8>pDlT&V@S(j9^MckPuTvq+OskvWuzNhE<8e5uv zxqK(SFlwuA_l}i*lWrS*@!a&hyX@YBu7vF5IbtQrL7OXQEMCdRKl{{6zSg-{c@ED? znqai0&g-mk&KI-Lk`m=}yfyx!?xn%yeTFhUUn0uP);+uG<JY}B)O~)3xZ38(vpxL0 z>O!+t-dvS@^X;^k8JGRMOJ?Zb$m{*sdP=t2-GFEPgvRz=swd>6y47<`=U+DdpB|CD zmv8NajbHaXzLu-BY0tFn+pcb1^gHx!$+~D?t67GBW^qh>v7slir=!C8*zAh##KT{$ zCw?@$H_@=`c#2I+yXzk9$F_UU_uua|4l$ONFUq-l#waH)FH5_xe>Z!2`enhW=ggAw zkGgvLKNvE1PyE!`<A3st<hp|3kYmq(I31h5L+O#WWc*|4wqvvZ+eAHyZhD`xWwG<I z!Y02a7DsW%NegB_U~%Mk>{>8=LH~mJ2@MGo5;$aeu3nE??XCNyqWYqfdTLF-yhPdh zjh@>l@oc>66m^;Pc$jgYbk?W1@)cRW+b`t&3E4dBu~@TXr_1`Uld~T$kDD5M&5Y;l z_A9A8uh;L6-c$W!63^GV&%2)An{Kx>b%k=if#DSv=Dlo%`H`&t#vbBx%abPso6f)P z<G0;)(naaC3f-fdkA|JvR%J0&{o!6arSRK#*u5T!-+q7BccQfV@5@oWHGZ)#EyDE0 znr+fVFSmtx#S6cTFswh!6~EDIs?y1nNg|5zPk!>R5BNIUiv7()dzM^=Re|2&E!kU3 zykl;@Jl&$dyJqH>)b0BIKQ<kot{MOB*QWE+|L&9d@N|KGdyM2V@z&D<5_=tG<RAJt zO8#fplA0}cppNaY;Xel3SHH^();s*ppXDB@wT)%rNAZ?A*Ps4*8LE3j>t2}n$DUhi zczSbeYebu>$I2V>8PP6JR|v%&*mdvOvC0#lBkV7&$(eEdnBb$((-m8fi%viPc$>)f z++7Q<%$Vz2I{o>^pB@>4(Qe6G7qZ@Y_txpqV~dw>oBqCi$N1*FE5~9d(|=Es8MhYS zu<Fh&zG2rbTYSUQ@120xx!8G$$E4R~Zl9mvR`7COkX`?~uj(9fcb`|aUb^%5`lZT$ zyMih-7wy}^eE$A}i>moMmU(3Uy)@;8j@0uDCfzq=W{DRjlrVm@3^{Y@#yXijUDhl; zJ9HMwaBaAIYA)loC3i#<eoxuWyvA{-`hizdtC@4A7g-$mrtzKiM%+`6hO3&ojMvu4 z@NW2f>M!HAU`w%tz^9E2w^!M`FkG+x5qykGd+>4jQ!ES&T3q-_M*^ec=<9AmZU%ww zU7Fi!c-SL?B_&Wq*)OfZ@s8+0i5B+Yr_7-nKjeDcGB8L9nymIq`yXrA%q3H_yyO3B zoW31-Ldk7X`^$HCs?Y7M{Z;b+*Wb6+O%aEtbs63XT(Fu$LGGXi59_k7g4&H5_TF66 zLL(vq1rOeJT=QsN*YAo2L2ni|xeNV@aLV}Taxj?nyo6iV(wIZKZ*F_OU-3Xx_MqgM zDbJtl>`qAkwsUJb_wx&j*2tWXwto5cTuPF}(uhwxH1;eu>pB`I5_|KAp^xCZ+lM|+ zj*I)y-;}sg{BT*gRUpqA%S!h(#%o^GDn8C^3%GRpQ<Qkp<o(la`ljE1c;)B{Ie*z3 zs<*Ag`m&eKS)^m?TRGQAAhPp!)9)+hioYi2x1HF<l9?R+?(DbilM)|Z{Lk~UIAp=w zsBi3vPs27}+m<i>ZSI+wTzgmLd`dc2&ZQzHdgIdTCXYp75AVgAUB1;}awefyu`Y3? zN<!FS3pI(JZtq2jLgA)9iL)Mh{q}suUl}%UdDC;Lb;*98)@$Fm@PUbwRo_%)<4VOg z*0z(IWy`;d9M*2T;rh+*+p3K_%Iwnj-n4!o`O*H#Ozx&#B`+WCpCnxE`tY{oMb255 zZqJ$hC1$$Tq_x>?@~^&_+?BJQ?Ykq7|B7{$_^$$yX0_hCxBj|(Rx6cie^@$u;jTRQ z`|A$*R=qyv;O@IV&0!Ynf{8i-(kEF>_yXqaak-zpCCaTs>A;>qR%1WG8>Xu{rU@>p zj5x=BDu8EmkN14VdY@TK8%?uA8+Hb}l=bR!gf0j(oMDu??!q7KEe!W&sq;SI&05bV zvvA@?iD?VcD&)4G<J3M|z_VTYVWF1RX*ZtDO{Yb9wg!nwX;vwxUi;JeLfs`*_A~n; zQJ(o8K}>yD0)H@r));$!>(QOe#K4e(cg)O$P(uK^#0<Sz+8Z35FXSllug!b<p=q;o zS6<^@d*zT`$<?s6PCh=bpE6!%7wXxkYq0e8A-%?hx9XR6wuA`Fn|^ecJbxg`(c^OM zjLpU8zSkD(8SnpJ^P5q>NP|VtF-tBn=fu;v3DbOkP7j;FnZ&n}VT(XX3iAog8(c~) zAslS)v?~@oSlE=yYRz*`%04AR%j)f}kA=IluFP5Xanr%scf=~$u4c{*^`0~JtlM<s zBi+ZJt;{s>*_}7V<@To6Eu6AZya#XVrL0T1Ij!Q{hMDu&{Hu*p+3wE^R!)29)iSfw zYpTcG?&i)M@yjzKf3|V{$WlrzdUIM&rNdx1f6$*+g;uZd58Kna6<?;^77aVB;BWW& z{yasiD^ve&klB5N_3$r?)fuHnSaKf(Ogx}0+8q(JQD-_!SjdsWUd1xT+T^l6wn~k6 zEh08yA6a&XoGXwE`M+aR?V;?T_=CZs=N(?=o(%F$k}q7G#P#~fi#gX`-!b!gdcE3j z^V1TYgWoHc-`W;+NOA8AS7Uyy<9ocm=EN*A^o!li5^lA*^=D^ZQdD1I;-c;+xuq}X z-2J%Q(8k98?Ma{A8FwcCRdwAQwpiNU+3+)C_LnB54+>opw#NN$tR1EuGu&{Rd3D3d zjTfrsmaTsBeNt~mt%2|RgNswEKh!n;QTfou9iup-f6c0wH|=Vo*0KNR*xEH)Ps?rE z#IM=$4}ZRC%RkFg?f&rg4rApv@~x9Yt{dzzUcu$@dcVN0zMbD|HC%1wCZx|zzSmt| zWur0m?pcpS+49&{osUbMidG0Hv2NAi|J}Jk@2#bn&HovYVXBXv6V-y47#KF9T*rhy z&P%X(&MQkTDuHcmukAgX#pEc^lKtnlO5721j*1J;87HnLv*>fniS5~*ZQVC<X6m-h zv%*g+@=s{z%G|?dBf{!>HQauG{QVb?Ssyd;v&wPXSn`;L-rjn+EN<DGPU&_1PS)2x z_!Wgd>Yh}8_p()SG0)fNuB?wmANSuayXUR4c<qw4#Th0~mmWUSz3z!X(uE00s;>;@ z>YoxW_mP)67t$8C)_gbfmg|0-yv*+8Ry=!=x!Kw?cgJ(<)31!R;@$c9Y=h+;@*fx+ z5HOHmxPb+{ukGaDcrVb3Q7OEWQrd)ab6#0~PFX5^@H^~vv2du!|GUpN&OUqTn!`m_ zSAl~|GH-G<O;F(CZFP#Cpe6cY>)CtDxHHZ2@}<DzG5bGozT$~5Z1Yq%I{ZLA{g3t^ z?<>XS&W$D|UiM$^6~C+e^X~neV)Od{zmJQyT<E@UGULXg2Z_AW8%*5}ZL=^sp>;#A z)jjD(qr2&rhlZlop>Mht%Ug=>4&~9fv3MbKwJA^1{5x;M4OOluu9Td(o4HWt$m1Xz zmCrq^Dx3~awvah4F)ygl#m#=zqZw_>KlYsYw5IEMh|T&#L56zDPeN}PafBN#RP1VU zF_mm@ek}Bylhu_qnCIeKzmtO262B%nuM0O=yJ_nDC(m}M&Jlk0#b@CG?`JO_+E!O| zR!=L~Ten^1hv!6J*))#tyUo%&IHv1Jd^)-C@wJ}RsL({K;IPKoyS0Rc?>zptU<%)q z&DYQKf84Xdt5xazGBGdf2O_NBi)yUiTc)0xmwLlopWAU(VYji-!MCiJFSfHw_Cz1M zypeNu>68ar3J+N;cwXK<u^?H>$<g&V&nhdwN3Lz6lbxm*FN<6oW*%amJK>_)x36DM zYJ~K1+BY>#FWJ)*E@7qq!_?yNv=4J8yKH}bb54WK_eAkd*WxLDUabwel`F$V_bhu{ zI_J_ywtFcFtDip8m0iB{Rqmd}4`OBCKdhCNf8Z=D|B$D-uBlozj^~obkBH;ymp%l` z&VN|kW_JAAN7j8Q0iStYxb|K8Xu9v>M_s>(^KP@+z1i+^X5Ex-zk5Pk_^02Q6r&Yq zsCjU%s!cX{C;sF~v*b(ubj%m|v*xkPxz|5f_ZzK=Zg~D$H0ef#_U^flFCW_cDQTVF zrS58{qUAS27AJP!v2My+#j!kNQj=89NnftEfJW}Nuf5wo|FkoxoAYb>uH1QDT45Pd zqHXtX&sx(Oz2@c|$IW+FGVWUbI<Q>#dvK`vQ{PLoEY0I*K2nu5cH4gAz4#0%yO~+@ z7Cz{BGi~c9^;w_fmS?@wE7I)mF-pl-QOP*)rpEV`nhkHcm$26<_9d%Txn8L-SwFjx zbje(1$<7U@QsXvBhN-a!f8NB>>mOJhl@N6xrfAc2>sHTQ3%vSg)O(4jJpVo6>m@Ps z#EkjRl9nsX{@C?k()8T!M@w1#9wncQnOHP!!;4!dlbKg0Gn>rb7A>j&DVt;Wq@B|Q ztY?>+lx?|We7{ophhV+iW5(rwC;MIe_IvluB`YiTb={GvUdJve_9uhq*)yG!g?}IE ztXwE9e1yH&x48WDB(`Gpvdhda#fjF33cV*SyJoUod{)-B(usTTDCL%GUk|g@7k1CJ zGt`Qod`>!Uu3~zWpUdyFQm<-GZ=3zD;O$*YujNm>GMMgJ#9py(HT|;rXv-h&#*^<A z{@(WpYO3?ua#8B7-}$D$@1hNU@z`Clh<9DCm^uBQaBlj-^5yFnt!=yDT2^?jtT^E` zpHh>>+MVybIhMcf*z!<o(P0(M=?nV4{5g8*rBu?)f_x|MBd;$wpKy6n=eeO@DsWoH z{+>SN%`Z$2ncfL>R@%6wEj8$c(!#c<rFSIV4y!GeNDMn1D`~n#wTy8!&(hlgyOV0u zvkXpTp9!dWzwxr+HBsX$+Ry+0c3&2es3EeVZEBs4a+1sI9lLpx-C9)Nab8&Gbtn38 z*8e#Q>pAB;J5}AA9`X9M-U4NT_w$=4N0@hil{|Yvi2uh*Q~M~{lLAbZ6DPe+b?KLo zT57Je`Ngz5OL{$IZKvEzU%R~Tp1`pxrm~Or0p9E!VFo75OsotH4JdsA5?9PP2M2?< zB0xv&dP8E1r9vg@_~LgTSmv2w#x^@^@mi+Fbx}*(j)ZhYEN)Sl9T2>_kXd?@rVfYq zt%|w!4}H^%roJ{a4tdivd3D^E`6Yk&kA2taXgSh%rr@6K`{%{;zS};38o&QPqk7Vf z&kv>SzC2dGBk*BkgMUrI$66V4)|yw%7w(?n^r$fGXSJ{Sai-t(&ZEBh)rF#->vo^r zA5`<RiGAtLuik>!ckX$7SheQq@+$8;-%R882~K!8D>csQ^>MDePpRkJC5x2yiB1$> z$Q2>FL2bbSgSkOhdt>TUr=MHDE?;EQ%&lMAW}Q?0eDdm48)t>hi{EB>xf-AD$};8I zY~$}GH#z?FoKGdIccy5aeGqBjb2uucpzY9<`%_m<E!kwYb}yHw<&>4Cr%oM~c3m2> zS}W4%T(NoK!ibHJRn91BJy_TBe#5zf!VA{17gz7fH1y$X-gWoZtxM8O?>v9VeV06z z(>^UVWJ*)qmMmUQ`v>lq_?LM{iM8f<{NS9`;w!>BMdihfNdd>UwR{(xl(0ZU@yvdu znwtliIYsYG4|vKpS>N=E>Yp>Eye9uw+A{bxwN7h^wGsK?ai~;-N5`>#(WKbK9j6>K zOV{pLt37*Gs!hPG-A^~=X=Od+GhAErOltY3bvf@YtdvNL6JGgl=Cp4aFHS`6mQ+r? z`>5UAEP9$>$8zU~mt!xks_NXWmtA_u;%mGan||u47il+dZTr2~<*%8}-c!H#h}hlE zY<uxq;Id=qI>(fA%lwYZoc(j#FLb*`uS2P&P#fo=x^o?UbGjD%)VkKecR1&kvc;Jv zH9zEd*M+Troz`j4b}r2(dWm&Wh?j~E>)K0726k&hUh%)&S(<UhcB)+BqR`jNl&*OQ zWsA>Z?mfARr}(+UPkX7~&rEycIVOj{XYz{LyKWAnD~tJ;tlaST)8&}#Crs)0%euYd zhO$G7A8$Y3N@KUl>T@mp`z5P7)-^t~ty)s^r;AbLu&w0ArIX)$;kqET_^ySg+a=jb zwr?zdo<E(wB0H_FigWK0>&}t~2`A3%J8=4h;hfXwA4b))m6vT}=6AmHRfg&9(U#ki z-({R;Pqme;khN&jSF~xh*C<giEHQX=VEqo!*Kcp{C@}vfvUuB*T^sl1?NMirVY~ac zq5HR-T6N0xgC`$HNDKE*?AX-cGk<dKo{I;ka66VuAKdYvr@MVd58K^MH;&CdzT?Wl zEzG}_Cc8#jSX8>I?>e(V=IsOBHrMn!r5u)8yR9m2H?~;6_{SUmE!L+j*3RPRX78R3 z{$G21Z?9oYZk(yy!*<W|P{o70$}GF){g4Kg3idO6dG;|gFs#PgeKI4^;3_RH$<M{Q z@L+C8bns;dk$>AnoNg;{C^c=bIvlsc@k5jDq6^cylU{G}3yhz0A;;Ok*XpI%hxi}* zHKFYXSMvAyTRiSBvdNTejgt7Fc+>WJ{`Z>n^XKE^_b+5NwE4Q2|FGS!UX}tmag~^o zR&To)H-iT49k1HOugBc|%8-|E<?F7O&KwW(T>f+<`8fF;(rvp}qBs5QUeEnC6VE-F zzDcs}-_z1k=TM)km!|G1;PLi1_@a`#S}Vj`BxLh3$z98MPYW3HJYJZ3`=aR9MPk=? zY+A+jcx}+#3#ECQKMx&Z+P-5k*X@M`2e-Q@#Uy-C%k2#+;hJqD(X~)*!7fda#cN*0 z%v?Ry>(0YlleAN{JNJK+(Z8fvGFknQ`@wV4%O3c3g?IM_Dt>9{F_xIJFd^npuB7mc zl#Y1{jXl;ov>(pv`8{LO2M0HqDJ4?;sb?NcY&mX}W~i>*Ii+PwPvwQPK~pp%S99&Y zQ?$6kX2w0CJFBF&ZCw#H>*U;oi|b}aUD(9>b`9^lj)awk9Gu-o(>}C#)gEcQeaOH^ zM$Bk;lxSa+Nd3E6IZZ|Fj+b8CJ0HUJJ~wQi8c(od>uq*+5gu79ah}BsYi%dT#;Q;2 zSWq9rQ(NWjY;eTyioN^gYp?to_AEWeGtrqb+EQ`Lg~D3NCtHuLi}Y*z{{QMV^=cpW zD&{X4ooht&4S8B;Eu1~s)phe}uUk)2^LAc+d#OV6ebBA#{l8Kdzq;iodqv>qs%3^e z+m!#CMrxaWnwgbso45JRZ0Gl@nx<>2m#^5;?3;f$Y~JMxA(JILqLwu@nq_4@@6w(b zcG~m1Tl5Zx$D5|JsU9$By8L2!X@d%X)r;hJ4;K87y!2)An}u7oh5j;q<IFh1^YG5R zxtGtpUGg<FMS5O_tgKv3ySec1M%POvd5g8Jp5?uou;;{)GQqyL3#{MCetWlQI?uku zeAznwFsY9lt(asZel{FPKk?Vr+CudAjfNxOGcMhBw-=pZVqjp$n_mbl(QyXn7mV?> zT>r}fB6aV~!nVc6i3-FA)EwNDCvs4n#ifwv2SbJv)4}|ud#60QW|qtTN5_{VW!8%M zDj(e?{ZDV=k!jiLng8DMyyf}5&n>_I`}zAV`=b-dmc4R!ypjdBUw&~+mb3h_$Ah@8 zGtQECjx%!}e)uGjtN(*Vv$}-mVp)IZ*>etRY*O@^IAQXHbdPgU+eFV8_MF!4OJ6l> z^~>E(cds$M-u&wQ>}4CSe(hbVn#k?XEwlc?jYbQeG&gezA=cvpJh_d|9BsX7k{qkD z*c-F_BwkHgzH|4qxbp>~_nSVHo-gVwXiE%?yLtKBR*k@en!Ee*Ss%UnVYNn4&|N>z zL*j9O;kk?LjBN`w3OzUbmaYxbsx8rpniFnwrBynjPqxkG@r(mYTAs`3f0&fG#x$xg ze8!{?vy!EZh0-kVCG<Vky;peV@!l4u<4j#L-3z4B)_cW$WL_S#JmEwv+r0bVnEfv| zXSjab_aVcd$BX-wK|wGJZ_M9M8ODMVkBV+^O>&fuyBgEB&NxDKgO`>h$Hl^P4uVr= zCN5FS3i-`{yV{9A`jNe`^Y+Sx-z7fjZq3>}H=a-3=@-{+^`FyCZ)>zJJssy2v8O@R z?B}ist!sH-t_P&=&s@K~%p}@YqJ(>b3U^X_qJv$x-Ha=thc#Cpout8Sy(aOJfc5Kz z1$TLw)<@L6cx{uf*lBt=;YGIENA*v;L=X9xevDhKYTzRt&wogrPfRZB*S#f?`bl4y zPOd3p`ey2MLF+>N=kHhltXxynbHnga{HqC#QZ50f%%rwY2~OFkys@-t+x(l#DpR$V zNYpK?H7)Oo+_a=`LfD~=T|P3|KkrMNlyCM|XA|Ck(Y3Gdpo{2S!yLDVKecu}x^ZT1 z;3Mz=@+mK8i%up6h6}9t29OCX4uvH1fW*wa64-8zY=2?UJ<(3nw|O7TI{KaasNFWb zCVl~(Bt;45t1U}Z>SmX<zjeBqyY2F$^Ost#T;V_FKjX*Zp7QOyjhB?}`j(Zwv;BVO zjP3Vx^Y`1=DRt<467+eH#S*+j%#r8%;VpXwkNVyTD!6_74(DUNcdmu<{7M{&w>I1M zJQ7T^xsuH4$*S3QVN+_f(Q$*>cS>S{pPR<5<Jfy->DJ}fXD`#tsa?Heqhij(qL(`= zk57Bl9pfb`>Gr8lQNnGhGe=vJJX_PNKMt>+%~_bgV^7$|Q^$FpKaCdtx+(jr#zP@z zy`4Kx&%UGn>xk}e`;B%_SQ@)LV}d4xO>A8D$Vf;_^g}08>`|S0MoaYlmL>6h=9;&% zqEDPFZdJsAMP1<wbWT^SRal<Hnjf;}k?!F$mPdZN#ajKgvu!rx*b%kLd;0XH;ty{4 zKJ<EMl+w1s`0xzP6mx%@nXhzJo0Bel<l1x0;9{ZKlF+Ls9rk?;W@}R@yts2$Q^?NT zSMuJw7rpT;I(Eb$^V=6*=du-Mugk9;Eb#J(PrR;syzY4J;#Z>DwgwNY_@`}B)$dB} z2>Y`?FZKJmFE0unoA@|izA}j?JE=WU>t?6T4E@(_o7b-oKf3QjD6eEv`f1_pPc18E zhu!^r)Gyj2EKh=`vu;zJTK-zc8Lf8rxVJLKIvVb(*`v<!j90n#@s@672Ymsr^nJ~> zp9OoKefGLO|HZGvFMYTh#hT*#6+88ocuY~=vd>>WN#*jf42JyzS{eH{dWbz0NS4gc zRhDsav_7=un$r{KZybh3?wfO0Fy{Q;7$yDKF(-Sj%nx=@JBEMH+w<W}3=Elg6D)y& zBlOYV*nUH<L!dp@NhVP*1ziNTOt5X3DzKq5g5`~QVvKs5?+u?K3vT`g3y=6}mCia} z|H1Ce>%SF;ILZvV6}l3-49r#71&>E+ms~PER5V#+*X32BdQ;VZzm0c~sL))d9WAyl z$E#_>uWdqkPu!&$4(%#(dl~iIJZPrazSYZ&+tzsLAD=PnPNDA9&%c`^v$C&PYHLjA zWO8Eo%c}T`--%&<@{BJpz(e5TiSOzcGcYh*!@Jd51AiONH76&tpcuM}dueEH@ntuG zx^rbZHv^exFsO=TXo%eIRG!Sh>QlMd*~zovk=X>MT+yd)ViG5n;~zb7u4nhT^)kO8 zJ;UgL&;GJy_Ny+(M(X({1xb8KEZx5Q`<u<>=RNEH{(Z%NB=A6gri`Omugs?$w@Vg1 zfo82DtjB^30<RQ$9j~xgD~LKS>1REAPt&=>r}w`&ZaL?AVWYFEtaxe7%Ey!XPD`y@ zR>&|_gwZc+$Gl?#;?jqvv}N*|vut^`$@p<qP(sBqewoWz5oNx!xTh7(pCMAbBt7i; zGK-}u6ZX8QTDMCj;LN)zwyL(05vTZ1?OXn&OY7+~7NOMoiKo73&Np&uIeu+ZYLsrO z)us9@ziY4a7Hb~YUK-PJch-ipM=$8l_wo<?`mZ4KChr?7M#+adQK<<M$4zQdAE>4A zoZ0kKMxAF)N-_6#(>sPAOy6<wT%D2?V{kTXwdu845|4u(A5EJ0GPt>{W8K262hug# z0-M8m&KTaYy>s0l|ADnl!uM5;?K1=g7;_iB*`QFr;ZR!WVdX~W+0svJW!B5A|KZJj z#{Q<Pgt^VFbwzix%u**y|Gak~utuxkOFiF_1BHJS3Ub=FoYdPGY%Lp}V4AhAw))}5 zEuykFH}OnavaK)YS^e}y)1K>GUArJ^vlPoJ>!7>E;-S6@^Uj8{1U;ECZC!9M)9$&t zS^^q-rf0CY-BXTL@Xgwpck@Y<=#BlJ&Z76@x?D_doYvoPns3R{6qRk!p^ZT*7p%VK zgoQq+^2^-)JU7bsg5RCxn`3$ScTU#XpdWoQ_qf1~+srNr3pB5Wx>|C3dl@bL{N80H z`^lYr3oEnsPgnCic$3R^PWX)~eQVA9%qdr@X6$odSUJztdofGzOQT7Dd(tF79e*+R zOn;8UAF;a4EHA&gh}gUTl#!Q>bkBM4^SnWZfPBS2?q4pmYi(+`wTZ0v-*WTYR_7@a z@gF#ry4^o$u~+_CyuweWD7W)V;*?~MzgcnO%X7}=#N_55C$?YT_*%70-C?4w%*le* zwG;RL%=@?hT;A2mcULW9XkOj*aKi7+@gIXv%w>DU+kcS%(Z+mh{)so|zhAab@%q9I zZ7=m&Pp>abu+y6H^SpIl{)5MnkIFyzr+iv(XmUQryx>K-Ov?KgR(6@?(p?v>RV_N2 zGj9*`tPJ<#aeVa=P5(T?3wT%7Gk^-MoB9);Co?lJu;N{=N}w_6mYGwMTI8Ichddk5 z+UM(c*ny|@{ug~#vkvJE*%Mb;I+O)8PEZO}68fE4uq^Mek4Yi(-Y9XI24_Vcof`)a zZJPh~`^&xcGWQLRFr`Z_lk_v1Bh{lit-qY@>Y5w7?nQoAnl^u~diCD**<N2t{x1#7 z{a0PTz$@kh@6*ppYWcCRSMlE5Dtzzey6^LvLSN{bJ7s#tPTeteMp1LI|E49gn7NM! zOp=H>^UVIq-hyQAcP{_e{X2T^$c5lbjtlR9a}&OKwQBWE9=-n`rnf7+D@{r;xFE$O z(Zk~=!F)^oL`kzhD7aqVKVE;4fq_96@8kf!3#o#`+#$h*Uef1IIPZ7JLEzZ_rL0Rr zSf2D(eP+{5<CimybJ;tgLg8htrnm02X;Vbwy@feD+2s$k8=Yfv6W%@h%$aAu&(_@h z`KRiCL!<GW2#p6DT5P1mT9>Vha^2Exkz{bJ=+FfjmCOV4&)3@drTtNxWGuOwyX})o z&lDe9L0iwZUkO^%n%tH6egrH{lo1Hp!SgsE_F~Vu`kk*0XIwuyW7b?A%gdqPLzq_P z{f{!Yy6aQ?=+`gi+)JC=ZfZQf;l?>_U5>Qt8^aw^qQwvGJ?w<EYMykb3Y?h1zjycA z+<3h|CUaJ+q^|fUb-#bvrSL6V{jML@e7liB!F~F%JT0R|IZc`7UBAC%<#HS-x|Yzl z+v%O?uZ(4zl5e?4OgY`RyY1nZFoXI9%pv6gy+(`Yl;4|Bee<O072}j*?Z@D;gO$eS zYYiD07(iEG2Y55Hh%j(4a4?`xV-Z+w?UoN~9nQ7jtdM@X(fHa%?abP>YbU5KVPxtQ zx_v|CsILf@#k9FQPLv5*n)!Jhj*2?TbkpdPm7kNQE=!dYckaT*f|kX33%4v_QB_k6 zh~ikPyH|5>fBCn)+t$B-^)b%--kJT{u3=A9Z0fK5G2Z<7{LlZN|L<PE@8_Gq0tfDY zSGd0)2v_;BN_^D=RsK7?`qi8=lOKrc?|7)HKZiL!`Az7tedlhNOVnIuUw?4B%8zY4 z_dh!E)=WS6{m04glD`@4>*g;1GeLC!!$$do{i;7Yi{EN9#LeKhPyO~<=uc1Ty$^@Z zKNRPwJ9(`B=$`n^$@Ryd+&BKg&h}s9pnYW`=bz2(^Zp)V{?GLP)Q$X^->oI<^bha< z`GEh!d!s+?JpWJD{Sj~epZ39B^52tY#vhw`>L)&|Px%oq`R`Tp{)4lPWYn8EcrJ8@ zzDRgbV*j6Apgyi-;p|40#cy2st5UyI1|H1f63<Rq^K@pZ(Y5NpqimAWm0wO<^xGWS zyvIV`)Tkx>cLC!(<%dp^_ub|_P%7d+pZcuQXx@1%v0#&mMt=Pxsv(>)r}i*->n3}j z*6h4-WKY_$D2W)CokzmN@{$V-KZk8N;dSiZxd%dZ7tTG9^;wscW18%E?3zKDX7c-# z0?EnKjmub*Wqa19u9>`1pjl6Cw`BD38&$`uB&x-e!;LtMUrgQTf2>Z@{KSsHW4=ai zDKZlZH}^Cf@tv%g+H=?_Z(`x<p7+x}W=Y;xer(3Meqw<8htgQn4J(tQcckC_#mMr; zt>ESk^($9zCqKTlY+dQ>!?Lplo^TXi|JLrz@$TNbfb-Ad9<_GaEH~Y8t-O?nZ!+J) zyN@c(+Pf>>w*5PC;F)ji?XIfsIsdjkoYy;hcgEZ!mmjAcxiiyf6Gv$DNn`)A>O}`K zZb<D5yT5MxvM(Q9vX7imIWC;7AvMo9MMZeA+Q|yfeI8eqT<S~-@h_e1vfj>7OqX?X zn$cA+o>{TiZ{ELs`~LQ|yZ7fOL@!C_wrsTJxH|Xc$2BYaXE#@6T`IT`)GK)TQ{P*z z+;`rSAA5c_YT4#sG1qg;E8(h=D;csE&ps(#`^5c_M1C*Ny6E&CY00}j=^o27-xyri zkzTT-bXhW+<rKq3FMWDs@65R>d}OCWLD2*;_xVQAkpXA&d(wFBnpj;<PJa2(qiFg; ze}QwnQ%+C27@}_M>!-*QRxoRi@S;x9jn_&gYm-bQb**Yw2{^l%&GPgM=t+6-sz}~% z!W@T#w^MqK_neV@nf5XAS8ZXf&dghu39TC|`a06}h4QCepJ02`Tve>Y_vCc9;4)d+ z#?)r6H|@+EU)9A<RoPm5eSOBRuQj1rUDSfbnB()Qw`=D19PjOEQkDocXlrXK^f547 zl_0cOC~ozG(iw|f!|j9_MPv>avR<}0XuK}m;BfKg3@wY!+b1pjJa;%BoV%lY+F4H4 zyDPWkeR?dN(Rl7uOUwJv4{kN{o6H~n7OfEL)A+%-C-Pu)!FDG71A(mb(m%+^xJHy6 z6HSQTu2msj7jTGQ^GD*Jjwbn~OCB8mP}Z{9-M3ij#w{yT)6$DqPIX7T?%KA^?3!D* zo!*^Y&IkJ+t7qgJ-xRvOc*~o@l}+W3V!7%j9bEq5^0#Ao8@tv%xLe`hm^$_RJ2Blw zn>bFXTs63Dl$a9LW2p7?Xl|}ho!dd%3VqcyotbBY=0yvwoGTpC``coB^~X9+`G60O zH690Re{5*!*Z84fx9mZB;Vhdj&mWeo_Wk{n?_MlX+qv4cKR5rT;zMDsy2j5Eht*el zuT_1%uOog@*@E=NY{$P(Y4U%3_KIV2+XIam$(yt!gA45CCVY@&{ag`n(Ah%y;btzm zW6D?VT7(B{FJ8OxOGI|~DGB2WXK#_PDN(IW=N|^L&Oa_L^2aDhFSbmh`lBoB{-*e; zA5>Z6mmUAWs&~vVu6ez{f~;EKgW-kKo8ph>YkZKX3vP7he2^`|TqCwj^oLAM+`;^f zC$@XC>_6<k|8!CR=gaCpUVfkPhv!Y;hu=MSPv78|*xhe%<Mfl)KKIVw;Fqj!*k~?M zJ;7Bj>65$9yW}^=du-3#@Rz7=ag|H`An|5lNZ)efWUIF#<(IAmpVYWIIZW{2RHitk z1Z(H#9#*bvZ*KJ35N2F*e3F%E-MufrDz>R+r%Wo;T6omA&)+8~%Jz!s<(r%vzwB|H zBeFB6kpKMF!t%1`5;GNLz1uScTVG6%?b`6dB${nurCw*>#5FT7E>`ml;=hxZ;-l<r zCfs&YcbfIr?+!=po?TN{TTwdc71!}2Cym$ixqMCulHF*=Wol{lK#ZlzPt`BI<?f7C z>2qh8%r#Ne(KNkpU$j<m?%j%9F-sZQtH!b>hdtS>Gi}vZetiF;Kbq&E$8$}Y!sR_5 zTP(fOTyKVj8dSISg-pILtClH0)8wa7V7y1c$y5j4DI0$*i8c8BMQQ=_>J{yaHoW8E zKD>NF)Zv3=o7XMdUhpVrU4?B&Ye>nqCo=h4=AX0j`e_qWcI)%CsH~do2tgt4CcP*x z9b3yuMqH`i*_}kiAD9-$`QI~I?zCT+bG`SJ*ck#*_b&Zi6*TX;*m5=pxsuCyKIs{c z&(3}tt|2>Dr0?e4JG;IIesW^deYlzFw3eIW(UnVD&gH(omUjB9tH8B6fp*W0oUcpS zCa1Me+T;3XYSbaITW3P5qmN9U`{bOmmW}>};DxLcF3rk0>6a)U{@*@ZuPgFZ#rz$g zf31<bW;yH0xxFd^dg7Yg;TvAmELrnC>i7>UyI*U#OZH9;JSb_hqm3h+#cwzBwr^A3 zPZHuy@tOTuQFNk=V9!6#$$5QGT$~q##HNJIPiXHh+ROG-*~>OPaKWa?=!R!HI(EJi zB314-er#+;C1OWkx`<RC?zte{dr>*g|HqFg8ID%3En&0VyPii@YHjM7Q6T*AkHgOA zqE41q1GhUqpBk!rPfLRTrP|))JR8rq(bcZ2wiukBXI;8QbjSYV+oCNa9p09`b6(o! za(K%8M|XIa*F2x~d1>l4m(F98#V_a-->I=aa`r-zb;^wveM#*!riWAXr`j%Dq!Jlj zls4(moCCe{0&XhWJ(oRXXMMEn=~@rQGyHS*I3GUw#<O?*f#sj|Ge51pb6$GEp?m8* zr)-@Qntnq}J9c8vYxS=o+t$d7tz(N`^QHZ5_R+S>+q*2!p1Wvu$52`Bp><H~$<#yV z{Lbd^&D~q2lP3G6_LszWH)B~p|A~dR*=H_ZT)EQgTf6Y9w<mM_AGXOnc<{<Qts~so zPW4ewhrZ;KdjZqG)*hdGW}Rqx`uw9e(`uKk+_>^lxYX6OGruyH-0+#bX7kBO=iRrO zy*{#ian|hMA1xu#Mkgm}WNh89a&>CdHWjWlkIGdo_}{fvGb|7^sk2w~dAwcN@Lqa< z_1lki)inp?<hLAee^WT$)-I>N|Hk9R-+s)Hc>dXYvc${1o<04yzX&%?`^oEbA-+YQ z@lbF}_`%C8#ZB)O@6}m2e2`ou*3>+Y>56{76~~T01|huiEXR!>)I`-Nx}G@f82yD$ zXlmx3oj(P3{Nih#t+I5Q&56nn7ap8#*5~)Su=5Xth3RviknoGqb-ovt?(Az^a*Zvv zuPjq4YWANXxmUOD&N}`6oOA6}=LI)+nTTg5Ejv{evs?9xw{K;}jq*RH-pilOYII}g ziQHHD)4JpBZLWe&gJ}f}r$0Zi_b^|%OlD50#54ZYw;V03`MKNp4qF};d3I>|n;Y|5 z4}YsU>*xHn$moaJFWpmzcd8%hi%9CTc5K?5vFGZyh_$Nym8UAVKYv(r=;X(J%bYh@ zyilodyx{ub(1O_uv^7K*O<6PLW5kJ>I*%rITYk=%mwcf>Vj9o(f-AG6`43%M?x9h@ zFpYI@i;ljRKIbo!`=<lePF%KZfl=@F%($(QxicHPWduT4E@lZ{on;-dc<0q^HZgnH z&u!cwTJ3Q4j$iMmdk=b^CaQLZEdEutHjPcMkm>Q;7(eNHcJYJ9!dI@=jk&lgT_J+i z`Oqz?(@|?bcbG>kziMf5$@{nI%E;BH4_h~XjoPcsKb<wyFitLKMQ)2W-@#i6i?6K+ zd};mCQ+Ji3@6!f;$LXof5qFnnUYGi`L685nW<9HVR<8P#%bi|X{>5_lM86b^gr5`o z`dl$a%Zq96Q>NO@XBOSc4^3<Kx}C82=+};%ZQ=fplg>U~|4cOgamM<q8A7I86Xq`7 zTPIbu)vEq4kISkDrwul+UlTbgp3pF9!J=K2Y;3XtS@+|U-}c+^yk+d)ythp1%H6Lo z)?a^>_CTwp_W1lS*Y9y#26iT{7SejUZ&RP{LAJGyA&UchrnCQT%{p`WS!QocuUnbQ z64P_5+M?zq)kk*S{OM)Jy)|fU)Z2A-@7CY@{p`H=wOz|DBrSJ+Va>+9cIr9riQjDl zqb-}?KU2CMar^RNd4adFHL7ou)O)7~vrjl|xntI`?@tn=6XU;{?dK^fu8<Pjn4Wdp zamTXtt!3-eSG1Nh@jgk|v2wwWpNk%8XqH{HII_0&cURu(IrneZ@ccO<dz1N|j7#-$ z$5W1LriV?x_%@^b(ti_^xEakm?%yo?{`bMWwp(}ozF2n_m)!q&|B1rG@^u;#HHmr6 zi=VPhKJ;Mgw1cnx%w|}fOgLp^5oV%sc~kX8qmKRT+cV1cpF3!=@)rL~86S=(zhqKa zCaGF885SF8PIzlML+C`G%o~vtdPSZJ=1(5%W!h=T{$BWmuVux42RjE&p%Z7P7&P8_ zWb;U_?8%Hm?t>Lyf1Eh>SD@UM-SjYDX?e<xmG`7>@^@OTS9RYvF+5Yz{EY~UW%*v$ z-7JoFX}Y&`If|}s$?z0-^0BOY8mnX9`wcIwwlC0Vh&6K-5@9WBK0ATcmGN$du}#yW z19@GWpRcr<|MXW@+23s^HhBL{NV#!#qQ|RtrNc(eR@;9iHck2^*tF?aV3Qo<-dD#p zZW#X7xW^xU*(oeP{QZV+48ro^_JvJ5Hc#2%z4tZC$CH;V=LgxxR#hDO58f)IyR2O| zgpYwiLk{0uhCcq`QBXJ41#QpT+>l6r;XsjpdD|s#ZQ8OaLQo=P3wNmq%R!}6Q6{0n zvmHL1T)1}&^IM<GGdKMR{v$f;hJeaNbB{lP$BJ*ST=VIH%^dyoozHit@BIAw`*-;Q z<<9GMUzF4o^^_mBb1%+);TY7>?zF<mM(EMT7DM|#9VaFDA8@Lr_?)WHO7=RmMPBg; zQ$^bp0b`+g-ZQ3ta6078Rz5G^=u66(EXTXD=T}y4UZXd)Vy1Lim*YJXUhCEMk9Z!Q znYL~5O4YL(D<XHVl4kw%yS2Xeb?c(D7p`$^`|f?GP$xTe@0RlqW?$sJJ1_Nz#NIhi z>~+KMnr}PxAkyITk^7MkzRmI7C~Z1>|3xjHuEVjLzfSU+7V@Ua@B0$x?nSb-7jM{0 zUAoF6`1QrIiBChm&E4E-yeoD7={p823lsVhot|9LiduK#D(~5A+e5RL2Rvw-73;fv zb=1-o&(~}``rY*KwbM13`p31KS`sfA@UELNyDRodSH_x2&%@TOGQZ>Hx;iU0@AImq z5w4rVPH9WW7-lV<lrWcnk^J^%34x@54n;+!9Y+PM_CD=O6P1q5I%AM|@rbGp%f=4X zHiyI8Ui;j<-;>d|^X09QXLoA1<s{F3?)p(^TC+#8YDaiPVn^)d=2Wk3FGAA7R^D8m zT)%ze(c&X^MQ1;5c5h$bdHS97wr%dK<wdzK7a#TGs{Xz6?SdCxy+4+pb2HbUx+|wM z*37VEPCQptjOD8E%e=1-sYZF)39OuUK6!>*h5p`uc6VB)PiSKoxRfAm@!-LNW@p|n z4Q2DrU22*%ZQ1|Megjc^25*_g*<U0MJ~4dK@tozYd%@cFyX+tS^r*l3aLoPnhoh5A zJwA3U=d+aic<tgh(MQQUx~u&zZJ%<*)ndMd;{%R=Uzu5qItvW`@!oUZvU}q+j`9hQ zvNh)}@z7n`Epjt(pT$o1g8L_Bl~P*by0Wr&$}7CuvAi=PKz;TV#YKGSE-ws!2{Z8* z9&SDVqF_qi^?0#A;C!<-CHVJkCI*Ihyi+P3`11|;3i!m5e9!=8NoqxjihEIFK}Ke> zbABF(>ynz5SejE(44ogGlI?#vLFD-V)amOsTWnM8s1V=U5cS?%V2V;kl2Re(`}w&` zwa=7ga{t<Ba&g9wL;Mfgjpki`Tc}-K@o?Il&EMwS-~aqm$^QR;{<O;EC9m!=nkQxO zq33L|nRZUt%{>X5kEO*P*Or|v#bx`Dy|Zm)`R_*_Hy#Biz5g&*l=rAb=ON~B=TeF6 zCEGPJwjAo;Yw%6D%b)*o-yUzxpJCVEr%sWUz4+K;p|gL7=^0*U`8x~Vy45|{`%vI= zwc_<q$z?gMnUPPIWyn?pR!D3ye&lz9S6Q$6D*vApU*~gCcT{E7bAo%_-l+9D+F!mF z;XEg^;_#GRTUTV<QV~qQ@qNwGtT{`4^e0;wuQIbzn#+1w^Xl5i$w{(zCx47uw&0-5 z>Xvl&<q!9iJ_?B3_^Ma=^Ws~{-4CR;Uy8l5Ci(OP)o+Kd2F^UVNsaTK#Le)#R{IRD z&G@n@a_gHtzp8a7Uh(_Cp>Nd}f9=&%_SADqHrBOuTFx;x?7Xa|HNz;-^{k8RWwmn& z$ByWnn`OZod_0?1I`PTPMe0$q*YmoL*l&2Oe7=}@_r~3O-?HVYOfo21;rhLJ(+1hj zxa0Y}dgga+3vWE#cy5k}!F@KBhb68uyGtymhTRfvOy8gXZny5L`k(gm`nA8<O=o;@ zqL}%M_W9gp^Q?SrO=nlVGXHv|=+(;XPofz%vYS4agsQHesIT+4;hX56g~_el%>}%| zUs$`mPv19Gd@Np=$@9OhQ@{B`>Z+i|=PGrg*F`G)9&ztjcj&Xw{>Ir{Hu{C!-CBDT zKC0?ye`q?Ae^GullfKs<z8u!LDL-QG1V7w$<o)ADrt7Nz1o}fNJRkLcbZMNf@@|6e zWb+R~(gy#SK;z48=2GR=ObiTKc-M9i7+*$D@Q{?fG~##t?JJ`HwLF#GLoXfC&AjZ8 z{X)5K?v<q%m~yYL?VWtZWa%2syFoW*<Y@PG>#}<5@fsvVv%k4|kZnrofjEcC+}F(( zvXZH9jutoXO<2D_^|4H3SE{?w%l1DDlwZz!|9wtz>G|(*&)@#vTg2G=;&{F4n*)b+ zGmd@#@u_y7jnc)Zfr9-TZ51CCax&VS;kOqk3_A4a(_wyB8^wid|9n`|v0SBOihP~O zf&QEST#opwmQ0KP*Ryi|v(v^(^LQUjY00xWe*QfB2d3NN%oUw)&olpM?TGh^=)U}? zrcFPc+2Z)O)O|ke0ZG=%4{hqM?)iMA{kTKDP~5>aE%A>-1;wL2NYyDP3dg0Nzu)yE zmSO+&4XpJX5BinvP1rD1_;#21&rj1jw!7|8eiX|%_b_W}k<x6b3#P%gS;wvxE}db_ z%UI-e`N|;&KSQ3Wa!a?&lMf177B@rbLPy+*Bky)-i7wv0amPHZXQ5~BxGl(uJGo-F zsP5cgZl-I|b*Gk0niY`jdGyRZG2^}zqg7(wJN|HNpK@<yYmQbR>-+Dm{O8Nnr<G|r zT<ux2?rfk-jV4=m4d;G~+1olqR|PrT5Vxu-un?U8`N<~UVy*2HHo3>v%_%shD0$(t zO)FEAa{E+eFP-HXlArWaw(@*l-P#lv!SH{<>HY$xy>gdkhFQ4GH<-Mt=3d3#S8dvv zk*kx|epgz^p*xw?bn4U0B@&#BYcs3PXzx_qJ0V;nFMOwr+tEkw6c3p#>n&tdwC}&T zvL@(!;e>5kL0)xF&z5G)-k!d7&Ccee_Px_H-#aq;GFL?{EeU1~H4NRYz}Q?jp?jw8 zsfF5$XVvwZitN)c`@i$O(Vu3X>#=*edk-34bz8b4%zA6c-#@FZ7oT0>=q`RIOlHs2 zrsLn=&J~^~T9(8AGShTbtY^@fTXNzT!qqGJT_dt8CVu&S-JrjDb;P0Ih^09Xtun84 z+!9(WcIUPHKCaUXtt)#gGGDvZ3+We@o|0HAw5uxhiihm<K;Cu1Zlcqiy+x}0l%@xU z@K2n=GyS~k!=HM7yv?CWQR~~JET2lPI#`;u;!x3xzBPt3{8zo)GAqs3?Ayc?v$kr_ z8O>*+t*?mK9nqL6v~T00jVvA?>Vm&+(wws)=5m$c%;3{kKZzW%eXhB|cIsx)NjLaT z?GWWZDRGohGX8*gYR|(7JiPIX;`VZICQ3D}iH|5gZP9a^<;b5sxvZ<+s!48dPWyYR zRp)<f*TTG=RRP`;F9>hwP%h=#^mym>xjnlJ%$H_7U$e~l<jM(_3){*J4N|n1ZPb)o zbjfMmsdq<f<>gQAwMwbsJ)Uxh<(F8sfl@;8-pcviyZ5h{d2^3dg~?LCS=X#0o?7j1 z>EYZv!@J$&E|2Qf31MfR{t&*ap3G3lI6btlc-}nD82tp_x0R<ZmkKyDh3)3AlgrzZ z`$KH%S^sAt-<Lmj=|3THEKjn!ka^?o^WpP6-yH5Wvg`i)<h7l4<*z!v`QjhdCF_q> zE8Uy^QT$Knk^3osWRGX^y`Jyp^2hlY`;Q61f0p;mF6?f2YA0YNxHfTrJ!eM5=Ef~M zwn>(Y9zVYGR{dl9IY(_v6xQr`<1H5!oHn;_(=>t7`H5Om`9F8t{cQ99U8>r+x69H| zXrT&k*o+GOwX^z8Wi&NNPCL-BGF(Lc;Yy3SQ#p4n^sovqc(%Oq&OXiSu_l{$-sqSY zR8(S;y(6>aoyi-i8(|mAzDHl%e^zeR|H5|fW2V}ZC$F0J>~Q1pWrpuVf3D6w{Pc@= zHaknrtU9r#-Cgxl3(X^@iLFmvIZ?;EH#ais{IsR4*^yD3r>Xwks<W~oHFM&nt({kA ztl4@=$6LsETeq7>zUD3`|Lm97bD3|7PL$-Bcr4Sz<=mo;m6uIsDP0s2o4ZjWdV<R- zH<=BByVEb)xM>usSalz`!4u^*;YFF@-BYStF6Bz!)ze%!H_!ToS;V1B83mD?(=T-U zRc+kUB6{(1SPS2hg|`H)PH?4&yT-XqH@4~Pv6Wf!VU9zwidFAA<8MD$HpzXM$~Wg5 zPqjtL^Zh!%*rL)e+KTNdVVl19Sc<mnCYeuiDXV3Sa`S#Yo4mH{M3`lYm747dCqBts z?|muLty2`+&osPrENgXki=JwG$9?|HlTO7c*)p57l{QCMi_JZ_D|1bG$NK|;(mT)j zEndy0X<+oK$>*V8e@xY!m<;|ex;k&3TzWjAR`Pqrgs)a9Ta2q}|HZNY6Ro+*ELZqo zi}$Z*LZwBW7Af(^|H`HC>fb!f|KMQd&XVBg79a8-%$ECL$No>Z=C<6vbLW=s|IMlM z?AdGU)~9#he!4tC`R%5!5(&@j-gz#2u&rcK4g2xjS-oFYiWlmCpX2`j>)z8F9<qG= zDpSAU`4P`8Uu5k2dzW+Gy%KzA>Qhe62fHgyxcN^ID-_y(Ch78x$QaY+)#nq7t6#6a zQN-6PvZGKe`dHKTIY*yK##l@3$@72wEqH<ImZ?@1(Mww19?X6bbZGgv3B~5t?m739 zn+{z4^S`<1+?MkV|9`4HFcv9RkFo>T)Qdjl2zawIFvJN{(4|9di9+h>wIO$lr9wsi z>k5dyc*dNxMQpW-nIK0AubG<Z##w5Hp~8z*)h_+m+Q^%;`^}}NLbuuP|Ix1bd@?*Z z+BkFhSKV_z+*dx=;Z}8UU#@I?r}+H!_j7*le*SKLy=@JX{iX{_7X6lzpA}>J4z!m$ zMQ}V8)%o-(uVtF{p6dST-y>ru6`C@!o=)G;6ngLM#`nx&*DK0<1?^M5D#zJP+bDO) zjbnbx2FXLq6>HQU@9NppqboVzyJP0AZTmB4mQQaf=-JzL;kA%k`StuP_E}k3VUcGi z-__FhkkEPgJL<5=?O8V;Xza|0cG|D3!ef3|`jEj@-nDKUy>4!l-ug7`K*Y_9S)z+~ zWW5T#E0p_tLV?NZefic`_gv`Ou5#wxy4!w{SF@rvE?QkZ%OG#1$jYqyoLlE;uZ&*) z$kt+&c#MgTbIimI)84##x|1RJwh+_lGSBH7?(+Vqf9QVdSFqBelOg==hebA&bsgKh zZmIs{z@psJiI&rSY}MyFyY7x!9GP+W_vAaDSkJ#H+nO?U-bL?>jTyVHFH~stE?H@7 zdxig0>fNBvx3lG3Y_}KfP2^m>YW+RUSEh+KrnMC29}o&%J8jK!p|4$c4ZJx|i*?%C zCYt(8<}QeTYj|m{%iR7;=HE(V0zR-!;z}#@JgBldc+Z}rv2OD})%&gvf59hF>wZj} zi|a<<gabR8q;G^89New{aca~0kG)O#8?_Uc{62btdE?77Z9BXl@64a!RIbv}IWub8 zvd%7+%(k{On{=f%UD<DZC2jlS3(xNP?)6yKIj`iq#1x;%Bkig$cKX?_KDO%d4L|n> z5u3h${rvX$u6QPCcK?|#mYB$UFY^?3X7+To-Z<;6-jXWcDa-HYWu%pV4LinrNI8M? zbM2o0TbmY#zh#zv{AH?*|NUFxAElZsj$h}RFsEQ?|MDYKC(oPnNrjj1q``}A6PA_E z+QRy)>$m5sm&zWO>k~c**0j#}&(V0_SU0y}>z6OgESG1pPtY_f;rM45aEv)haR$T5 zO7RygMbAVcwz2D+Ntjr&t+QfT>x`qW{DxjZN|qD$^*_*`7yb4%-}XEC-%8!1-bp_B zwd3is+sD_RC_aB7@`mlnt^NWQKK4yP54_wZQk359{(r)-t;XWZrS#h`?+06Lu9|IZ zb-6jO>PBe4fe*_M@%m$2?RO7**p&CI;Fq2$9CPN5v(CKVyo>FVrfBbccg8U8L-KOv znltTl<yAEOUQM3=ukJ>UYRmT9Yh%jtSx>OZKR()I|1D^rK*!v(;%rI!&+CtNq}v|9 zW)b~3rPnm^1NiP}E#3`UJD3?5p5a|hV?m(5iqbtrTUE0*EIM2|ROFwZ&<rCU5dkfQ z8xEPX1q?*jZVg%`u<q1Zm8Gm#tW??!49*-m)ADF*+=c%SgX3RExrwDk)?V5g^N)G{ zU+GtNiVKBjnRdoLd-$eylYaX9&u{lW|MTyAfB%D{2KzD{7z#Ju5jx!!k=OmSFCy&d zCN<@bQqK1sXLk$Tvu@sPB=vD0OQ@T%nTkrv7LHj{E~;rvzo_?OSx<4(vXm08U8;+v zr4M;b-k`f!{B>`}0YBxEH(mxQGdxbeILt0&WW?5YG)y@sMfHv6j^hP&YF7Jfti^Xq zM@IGd-|ghyWhC0`@7lS0t3-N2F^{j{<qbJkH-v}Sp5DvwO7hm5o~(%3X=&4!RNEwf z<~h8y(s(l0>P*v(M-NM{TKl$T?cR_s>4!H?`RqwCICWu8nCaoNh;O?i^|(_vS!Lgp zEN-_x!<3gMylSax605LLp7)I1nU^o+#AP3tIEgXRT(v~^t-+gOQ<d0>PsCbtEqk2u z+ye7dD&35OHXrhm*_k;lcH--am(w1$J#q28pR{AoyLqvJlh0TM-RTQIU@X9Kt!ssT zlA5Knc4d@Z>)VFi(}i~Brbt=yeps+O*Yb!`uLtXt)k_{8+3C7Nqy3kY=<DPSu8%e^ z{~%Yky@si<@JET|i%>rOLvi)a#wNej4vSuIoAHqC{EBTe7c%GU%kO6kmw1&k*@dUL zk?X0GSK`-svVOfPht)HV=a_CZUivxKubut*_N%t0YgW5y`8WiaiJXsWHJGz5%_ytN z+j~ySL#dLT?>_4Ke)65TF-^)aFZd-(S7J)8FaP=MX|}5#u(pWC9PH+D`!K0#dSU26 z?H$V=gvNw_kn%`n{2elHt4U{*v_$fbDBFPS6r)+DIl0sQ->O$c9q}+&<`=v7{w<@; zRhRN-Y^!hn-MeO8cY$3A|8o|mg}YBYSbr_d<YCt9d0E#3-U$3k3CUz_OE|0g{+;iY zZB6|fe9nHAxD$ExR#d=cu4x}Ow)l(Gbe+F*UPoVn^SfwGpZ*cvx|0{)=}0HHtGj;G z=ulF7sLjg$V^-plwC8=tax3qMc}w56aSW(nUUc7z$-k`U$Nrrc+SNIX*Zk@CH95J~ z#mzhTZy<B*8qbM#+plCiHgnxEajWHB%d61`E~b4spYh?!ynTiL6`ws`8EF?Tv5vLL z-?URA&9D7?iLh@&pq+2Vp;afJ>{w@9VtKw}#xB1LLEZgq*I%p@U2t9Y#nh|4jx7fa zT&(%`^4KOxh*r#UXZ2EE>5!=<s=>RAY3a?71t#;jrYz&T==P~pc>U#HY;U7FjTV(Q z-*2{U`C-_Tyr}6$u#me!q~jai&gBNNj&HO((+#2>W5R{bKRnCz=+~qlx@W=#yj2Z- zH!b?X|3hKk^!+??kIp1`|Mkx};mG&5ZJCW!`0XjqCVy>axPQ)iA&_32aAZ5jK2vu7 zkGW0tYV7(S-!{EJanSvb<w5(|i-SME5UC00`+B6D``=C(mG=@ymA}hW%-FGMM)Kp* zyqa^qbBlxD-|^V^zH6p#;?5b7?2a!5mntf7|81DpuCA3Y9xA5!(`u1$<(GAGkAAYg zKg<3?ysp~a$=$-=^x^AIf4P>PHZNh>&%T|1&zkTP^0mLu&#(NlmT%(Yf6g%)KbI+n zeW{(hE;Qy%fgJOb-;ef`zhSg;Ze8HsSJ3&8V|uGQ|7*>vKiVa4*#3iCRyW&!WZY+A zV7SkNuVrOUR3Yl0l$DxXf>wr34T|+<aul(B?7sSTR957-lU|Oim7*Q}-SnmQaX2<z zc)W)1^(`~)*Bal}b7?JHAlF<MVlvw?A;H3+cxU;$o#p3d{{Hy$PnUt$jZi^nFGs63 zQBlP;#}+CqPU3ydwTa72Bu7Xk_t;GT*5~0idN(`-ro5V$KYNRNv}{^bh{g4^`i#>y zn=h`py6n<v7VhPI<wqnBE;JN3y06j^vd2vM!mWD;iXxqV@NMTbax;y8e@W3a_Ec`M zkY4tM4Xy=7tK0pnWtU&IUl+%>qag3b&lN|j4t=yZc+Vtw@BNQ#dC|}3UC>?jx$!ld z?l#jE5g{8ECrWxYE&l&IHX`<#(55#Nem4CKx_bY(|2vK%<5MPiI~OQ7Z4k_uWcaU$ z|Ity)BfU?aq#t(>m~Jg3!1RR2W9h^R&nJEP_H;_ilCxsR6pogw#0l*3YCqnwN3^TI z<DPQFN{1GC7dNFtmyU7scgWc!K741*8V?%CvNC;oJb{scp_mCd64AH%5?BlmZ5|gJ zxj>r6SFJcJqK{rQ&W`k-6ffgm$mi%Z=LqMgRwpLKjfxX~banD~6k9G`()A^$`^2P) zDb^3|ytub$woco&@Ox&J^XwCzcc)#t)UuoX!Zb0iEddL3?Ux34Sz2#?Z#&n&>+{z5 z{qOlx%J08>a|R4GzVG|HSKf)!q~p7lVk5W6nxe)7t$#Ll%szT2#5$2pPxJ873Z?q0 zpPSoeN9DbWxpJlW@`FWJC-3;ExuYlDFRWlEciJPae-^E?gGFOrHd+2UlgSrz^luic zbgY5@{G6hLjyACejbj2@vv*idUO8{+gDCcO#g3+C#+_oU(V{uUj=cGwlXg$uwl<wb zR?kM-{6ma-|E`KFXBW%K%{{!hxN^%x_q{f^jx0WFbL-IJwKlhwCCumcJN}ky-)YwD z4>qj#-!^UjQ1kD`L7RQ;2mhQo?Z?W@#TI*^?=0Vym<w%xZR`&$cFc3)id*nNZ(8^b z*1HxVZGt^UXAI26rzP?{zM~>z@#sJxd*9TDd3PQk=$5H4)Q<^joBk-(X4jq8@CQ@% z_HeB)dstmK;rY76b@z_1xOZOpX3XjN*FV0nVvk$@fIVgdceure<~#38C(W}zvRHb@ z&kfA^PiD>*`NNU_dj)fTnwb5wL;a7{E7Ii6w{H-vxzsxUkbm)K$$x)zyq^}YX+N+1 zgO$B*;?Ym4YQIzEN;Q9oPJ3+8d^f5s{^)wcW$TMS^WOXF+xAPW|5oLfw?=z-^YstE ze^9>j=J~UXd6Rr{njZ2^d#LzF&V2Hnn)$QkKfL0<$@VTm@&5_WFYikp_J34gv+Atg z9`5>6i}QDW*x>h;!@T_So#`{CSIboBcmJ?szjr?DO9Qif$%FGUKZ@D^HHp`qTyX!{ zGsR;c4f^E*KZNU9H0*!&%$&<^)q{M|KXaS<HGfz*rFv)IzIAr)?6REKukKvDb@$HY zOBe6<J$Se0fc>lQt$!yn#^)=Eb@7-e`egUHJ>sla*?3f5?xMi6S=GC*<=wt`Z_na% z@7KqAWp&r?<+u^Z#GuOY^x%sN%VsPq{i*zqQMc{E+n!@=HUARp69PWJ{i5!)yXND? zMn>I7*)Lz7YEY@VoS9#(V`VhwR!neCv6{x)u*|6LpTZX-ij&NpoDZ(u8-43`@PdmT zPPgYSc>DCD<NpnA_ZLU$9NZ!<>U`n!0Uf1TS>N2<{(ii7!Bu6ES8U(EjV<d{O_sPm zTA0yt!0T5#n?Tx9@!QG&9v%!(*te%OOq*>B%fmBAjBiIL_ny2a!+WX9)h7S6%=)W+ zvvfI(IqTnb3f9~^bZM*DMV@EI?p{}qZk$o{Xzk5kZYy**nVvUGJMvlZito*B5nOq5 zTXUFKYoBxO>)iQROygB|(Ztrqn=_VezW9uPLeBRKON}ffq6I%p{QEm<QKMjx-05no z#xkCZ=f3{)FwoHt7A!MX%>0}a{Bog#Szl7s_8S+L-1dL{t|c!})8?z|hbK<PlXi$s zYCCl3^x=b-HqV#qY7xp7u!+lFX?TH^_1ZGET`P^Z%<VjT*HVa!U009i(AodWc70#v z=Ep?52$Ozd7+L#MJ*F&YhD2cQN8QZ*8dqigkC^-y*y)#F*O0^z{`y^m*&Kz$BR4aj zF~2+`&Ao6%ezwjOgPfH{`C&}eo3~z*x>m9@GGWC`sTD4#{r0)OPXDZ$S8Y0J-tCf4 z%AEl>u1j{Q_ato4w7RphH!Ja_&5h01BQ7OA-?;aJkb8%WP4U{BsqaJ<?J|_|U2-Q< zE`ZVK8-u3C!i{ZNpAJhi?&#>xwUyqTa%0v^!Ns!{KU|@AtVrpeo7$zN6VEX%IU#I( zpkm=lwcocHRNnMClvJFLN@6_t^6i9riN(eepZibVZrPy3JabOgs}~;UTPob<zrQJY zJ!$cpTW>j*N4=SK%1%|Hi{JgR%l0Fu=iHbv`Azd{!-?YOPbyFPCwIZ)T=wsi30r&( z>s9W__wt&`&aK;QE}nMRqkg~G<))o1I$_mqvrB%SO;~51H8CNJ^WhqsGm#AL$+7ni zn?(ITw;@g8-6>}o@5UcR3zj<_JsR@m_55>PMzv1S(#=<;wcpIF$rj$SrC4Pl>umPF zhFxc))+jHu)@QzRO`fa$>xNs4dfS-huzYQ2bK_`xXS}pK?Av_S%S#T`7TCxB{$t|X zYJb>SOQvym=nnRGp%2vyrg!Z>t}ap&)O!EW`;Z@+GGQMz|1@{iA6Xt+!}fp4q2dpF zy3Ri;-t*U0G_K+Q;+|&`GDh!zb04~-6m1n1G@C<8JETVL|C&efAJ)5iOq~C@zeRX& zr){F~oRvSAgv#xhXN#@5wR5?a;fm0;k9$Ki_s6@stiELO(Y4~~iz!jb8#8oVU*`W1 z`uwZBrSj;SxruRMA4UJPbMYT&E_uFOWQJLvi_ntoArBlQY$hmQU-cuQL`7yzmy2+y z_10A<JS@&Es&j4Kf6zN@d7|(Xv%NMMxBRq@ozu_ySkn<6`bT}=vPb(r__E#)`j}he zF8ZY?tW`jD)rQWX&>O9bxY`R=9a23NvT#wf=w+9kTFbh*LeB_%u?!Abl{9U}+Ahl# z3L&z(Yo9Cc4LMS^skop?toY<sf5Y&!f_|;OX7!4aJzCEuzCC#QgVv$Kw2HTqo;>{% zrWSTBXpibDe3lfgu_l#iLi~#tZ!;sdzPfUiSKavB&z^Utp>rHMjxw!Tkdx;1>-~$9 z0e^ia#~fRuwd#n|vJD=B-JyZH(^hCa$W{BkOKIAwM=lRTU3))F%3~MqeCRemKPTtS zl8vJ3hJT-)o~HZxtsIy8BfFL$%LU5f4a)yS0#|og1@;H1HA<JaJ5P*F`Sml}FK%zu zR)4+Kix}qx9r0ZCp)+-rMWjyn5w6fVN`9e7yh7)wg=r>j)skZUxyJl~ujsv|@{p>h z%5zy>PK~z`<5FWgDgEqM*xx3_1}#7F^c5AhcTO%gU1bqG$Mxo+1!7VXJ}WAe?{scR z@%ofzym)numa1Ur9M_Q6N1u|8y0^72Hat98<cqw@zpY&n%NH@v)w1C|zv6>|&7!Wf zi;FtKLbr65g|2zN%z4h*F5VKCi<-M$q)w`RyKC{p2{m8ZG(?u>#kZ-3^to)gdpN2= z^3tVc7ksw|e>ot`GQnxbIeC6okGPAmv$W0$J{OAI7$~@R)eRN1)fWBl)HthVX>IFR zyXuD8u8@oE>$Q@0Yu!^l7kp%QXyLva3%kA-Tt0TTD$lAVUesFB-~fXo8;6m@1jZ&F zhcCa5HfXW!<m}`Yaa<-K=G>(awm2z5P<)k=+M`t-9fG3sT9#{kIO(D2#=6vSN3`f} z*1b^^|Ajq|zOikc-?mMm`#S19x+kY;?y)|pBi*|(*<#tr6jxF4&hF5{&K)75(>qUx z7PjuVv}cdbqPkCY`+Qw?T;8v4b*RxRX6YlILetg>i|!S_^{X-p_~R$tQt7#Ls#*JD z!QRcBEv-lY+@9xgX#eb{D!Cq?t1oAyW$MHoVLY{B3Zq5wfmgP1I|5SwO6f~*>&E}q z^SU0qwe4oB7H^hD_T@_}#U!=1>=CbhyHSL7*~|6p%3aD^#Hy~!7aRI}r=;k)db{5A z>^q~d{CF|9zG>_C^v)x9=Fa>ja(6E0iuCncc3WB<IeslL^_iJ#U@DVWh}rs@%3FJn ztzHo`eOsmJm-eNlo<$SOxjMH=a74_?f0)x|P`yKMs%d7%eEAQpVpsY&UM{zM(|_Fb zSB~|zOQ~B;qmt6@*7vo}k(&ELre0&x&qdE4pSG-9d@T6&%<~Slk^91SuG2cq=$w*p zL7lVJcwXCzFV7eagi0N5@$R*C?!3cPlr?XCl?``Z-*v7tI-Dl$&WA0R8)@(Ix)by4 z*1CT_i&+wCJ$CJSY`i^1U+U<cJF<ECZn{fO+s}E_DF0{6(b>Vw1`!v+?^d!hFTS+v zocs+_hs;!!8O1z%e;r``le6Hn?z?coYCE<4D*6w%{TE{F=K5YzZ!jZvw%t>WBcB#8 zbup>FBG1QqGIYti>inh@mAflKKiy4<oumDhzyFA)w+?Shs;kS@O)-%VH6}kjnR54( z(%ES$tClx41wD4OoHTjUw&FE2_o;+Ul$^aQ)iHb4p5KN=*M60!`mO9spZ$d^+?;dY z^iA%O(`IA_`d&U9wo2&Y-R=#y7F8KemE8Q`hOwJkhFjpHb6Ptl?dsLY@!4|p5A!dl z(8l{}J{(q&GwUm6<Q08R(D2!wzS8{vmuXCzE6o1|uHGK*=6We4a}N8aKePMGy(h}# z-43`>BWQK3!a?}UgAESJq1ScK&wKnw!znX6X|7v&<BiDF*7Pj)?XN$1O`pH%$~5z( z`<KtUv9L@evQ%YJ+QHSAX7jrX^agMFdFNHzl;b^nR1~M~TAH){sYE@OMu5NGdA*KT z7fV<FyA?AdT;t5j`mz@rOZL{JEX&*5n4z=(M%K|LozHT&J-gDqrd*mB?|1U#glKkq zwVRrHU*u#PjT7qvM7lGbF9zz~K0kfZzwKMn#n1H`6*F2^uQ~l^uTkHVC*m$4=~4fA zyw2RTT;!>v@2fHWYtSwi=Y<{f&&NMnn|X2bRNt4*g+Y@(RyuuDGQGR#UqD3Mna}?w z7nQ5+4?F$y>)|<*ES9UsE<9mYxvK9<x%?qhckOBa`+e5y2=uae6bt^8_B}i0^_x#F zxg6%Q!MXQd1?YZxzQ0Ce>ceZtmUd25clvj;Rp8aigqscukLRn;F=AbxF5vf8iR*NK z?R2?<ne9C*j~<oRa+BNrKtrKKIXOx}iu=>?XFEdtOAnq=ux39uODSBWtDMDCci|Da zm5<&oE9UfO*8I9{iwFONr*|xcGiL><1)aFP;@}I8nVpi0(<-BNnx}kpc)F{9o}cbk zo=G!J%wDcP<>mZsm*=vq=iSD0SFh20%J{MPNQHR&cOL${i%gpmCj7h{)7Z=UxID|B z&F$y;*-8I4>L`WobTKl2VQ-x~<JI~Q_tfbdWv4qDC_hgR+8`iQAdpkQv5$T7huVS$ z_BsZ8mKJLU2M6}r{~YgpYX8qjsAnp_c;lG8-^qU*cXWSOKZv_|pZ)vke~c9qs^rf! z%s+UZ^RWJlY__i+wV7}04%}vVaz+24V)9Mr+bmx%XQ?}Wx$5h1lJUT8-VN;!1-W(1 zgio)3a9!;5(r2IY9|U%%?%o%3(tf+->Fy5ZXNhIGcNsSrxBgvV@ItYGW5?ZwdLFs$ z4$n<4{*{|&FzqgzmG$D{S?QHR^Ng-(_rB$uJL&Y3@BAO!vpbB0A7xe?lX5at{Ks-W z%6Wy_k>U?~7!6N9xO`He)N{tN&0T-87cv@2d#QA+-u6ym%5<LtUrf%#8=FLEnMQ=) zFA&g5yBU<=_iybbhG_p4IalV}aT@>1Qa^C_t^ud<Z?y$RoSUUyb=EL{G?=aS{KAtv zDiu<9j;lVbm^H&)`19lfr^C6LkMyM?!UZ#rMa5g^Gl}^)h0Z@4X2r<8J6n3vh8GMv z>#UhBt1aAhes2oXw0nWxDt=cgH-GFeVVgGnAm1N;>G`R>H%|!dt(_d;9Mb7OYvuA- z-q^40551B;FF73G$F%x+qEO8hUGMWc-iJ<J(e*#C<9~?jm7nMNIg?s~S4PjA7df-# z@`~uG^CG9VT)kqtEM02y1(%+==fa=#FsD>a-mt9y`l~m>1!}Y3s?1SUzfqu`@Ro69 z__nlkp=(#4Mw@hheBZ`UHc29qAv%k*wm7OMcI($&64{)My{XPDlP(;Zzw`|2*Kdo3 z%wO*1SwF$laPQ2vSk0}as-78F8UHD6ZMvZA7;oyZT{t@@E?aG3@0LsFm?GZ4o6)e@ z^Z4gU8yZFKde-kgmRMJQShm;f?!EIfTi)66&wRAAJwaK1=E=~5Nr%q;4SI2M@ehCR zXJ!$G-)AwN+Lk|g+x(WeN6Y&pZl!E}7=NtIYnJxJ?VHx^Tf*?>HQSqHljn>6CEQiK z;p1;D{q@NmY46u}qVL|mQ`?@fo44YR-uKF1KLqwjpWHa#-=VC3u3b6D4Xb*23!87v zALRP?{!{qjS!<o&y7jR@hDpp_OS#=sF0KtQ=Zo$2TE-w6+_2s0r-e>-$sMk;{>Oc8 z%a4~yh*fy?A1LWRt6;+S)a2U~xh4nBoWEL?`-E0B6enuW?f$JesggCu|Nql@KY1%I zAIiQtS->R!PxObfwsO~(vALcXF1>yqQDOS~qvs2Ahk$?c`JKwE4;Tde`)StCrIvWX zMR9}5<3k*ki6tTn{rK|R7w+Y|EADeh?~`oe_W&U!o4xXjJSF@NweFgBLH2ZeN4nFD zFF6sjl6Ja$dOW9vrTV;}@R2?*t*)Cr8fmZk_uSK{-0N&GZP({NzgM)1h+P&eo2?NW zk=EezIQl^Gvpmt|lHS*Y9z9rM=QwSD`@gsn4n47y*?&CE4D#z_Io}E8>0J%iFZNih z(ww;dfu`@Fr;iJy%(Ub#eHQIKW#N-w;xTXiq<OREaITM;+ceFX>+Fqvjy7wSHf&;C zXR<@fe8;Y?9a@X+CY_zSsCem_+4iT+R-2sdKm6F>XP{5r969#Sk5lSmEdN;e)QL=% zUw+bGcujLy^Zb_)i64xw8z`H;<-MPMs)%hD?}}2ljF^?x*RyxMdf)Q>ZFA+EGZT{T z-M?E9QD-52;>mj1_O7a3h1WSJIKKO}B`;0tN1oc_l&!Iu(V465nM9u)_wo>wkI0m6 zS5*3N@KgW$=Bqa%qRy-9KAn7PvwzficHg&?)Kx`eZ28m+W3Jr1W6da^rK8JJdss(P z;@ehJP1jH<oiNF`y_@#&@gHpWUa)yv-;~1=+h(!PYTeBHLfm65-z)jELD}1{WHFz7 z<d$;3d~%Mx((Qhw7X{{%XGL=8_4oSkI*@G5bgoJ+>{H;Yr;0X9<tDv3eq-)bZ%glF ziATXRHf{QRT(q}LY}%w`v88R1CNshkr*FzSF>&f%g%7;jFFWe1z219F;EK$gY?;5R z0Z%W=>lb|KSAMhfop9B5|Mz(d{o4O7`St(lkLibhKd^fIL(ay}-mX$<x6MCmmftI* zA7tL$URx!9=8^PPdArFi=dWE1w4dH`zW92E^ULOa4l=<lS<jnmC;C@Ngc-iozsq#G z=SrVVf6(6YllN3=ZZ7_C>-dZ6lJ}DW=dFCI{cmdFhSx8S-K~8W&3`c5yP<sH@9Z<~ zri^v5Ryp&2vH9zsoKaMN`LFKx?Y;cR9J_Y<Hppq0>IVfnexF$x9df#8N3D!a4acwF zvb(<DUm9~Pd3D^RmcP%Yet7V)Emp^D(>u$_1q=FBKg{LyFuP^5E$W^@V&07DMMhVj zq*#2OkzFO~m$BSX{_7;(;^Q?o2X6%C9Z70TOQ~p%691Zhn5RZ|&VM%0h-x64%;cXU z3=D_Okw;X~w>lFzCJiy7>gn%Vk(^pkl9`{Umz<MWTwFTQ-~W(<z|s3b3j(_SGdMmz z8l7os8fO@HML@WRo#%UN-YKnZOL8ytw|06xI;hNUKc$fC=!yra>1EHq-#hcJu4dm} z=Yxu6rYReiDs~6W+q9{TYg=eY=oN{gNBgv8+%0&fUelE?jQ;iQ>DQyl{yfSrt9jer zbbd)G@oF$sXS-AUwoJt1eC`!%o|ne=1$j)9mpb~)(4O-D&@Amm+JbF&R4;D|jGt!o z;z-SEiB;UM`seo9bbVa(GGJox#>L6JuX)_-9^9%qQC*u@Ua9i_O~I30hc@4yn`Zpr z@V+;#$DiA;k?_)%((y|_eD@3U|Hg85rr%%AL^ANK+@YH)c`B1DihGOp#r;b(RxLZK zmf(MY=bUpq(~Pg&8fp$xPjMY>^87lb@&i*U<Hf&1CuZ<6yqPJyB>I|&WOk07^UO&- zhqNyxoB4%E-|z`3O!;`i&{+R5_$sj27(XvRMg|5SlreDh7_%m7BBR*IC8#v7Br`V^ zBibB6(bfu%wiOKuA0MsVGD}Tuo<ZD|f`i=>@3`+y(b}?P?Thn=TvR_knAmK8%HpV& zzy~Aa+28lhym|Nh`tST67H+<dT)Vk0X{4>x($q-ycXM@{s;Jx+n;3a0Nn`uFA2Vh% zzq|G9YOsHg)A3?yo|neQOAi$@ZBbn$`>QY8{FQ9mlh$<3wpH6UI=Z}&p7Z}um+ql# zL6$qqmZ`4YmzNsQ`LozCBy5GNwP@s%#S2zUm^g9c`Xp}Fw&3&IeeE9Y-Dj}drsUn( zgq+)lOmELkyZn6dzRTQxdiip9E=YDQb=-P%O6kTO0{Or9eLu0AxzV}mlL<qc%NC|k z%~hGoU6xj&FZ+e2q~1*k-jJTam%eZv<CzG?Plf@Ck&EVB_Vj<@zJ5ZT;;w9-%+IV1 z%(Y!9r)Map`g{@hFy0hc<y>?~ZDY2y^+xSeI#HHMbt#amVP8Fa@!X%0fgu8Kyb(AP z!y_}Vq}T;*yT;n!_n-sTY*X!{j+rGGl>WKUv}jFoSRe~)pfa0Jnny&F;xYca-)?X% z&Anyb^na?Fo{Q&~+a7-w_k1r^6)~*YB>(QL<=*dezrU+|fBpS?djV%j{ooVHZpUI- zzX!cIoMZ16DB>u*Q034Zj#SC-!5)cjjdl&}6)O_r4l1+ui|U-HnB?TQX0t}J=dobP z^D0kX^*yb~&pl^zeIrkvmD$9pwvR7d&^?^@D)imVvf@Z5vlVxe%9=UdoZ2=k%N>l| zpSnZGYX-ZUv6o7?&+R9xh3wA7h5d;4DU5ddv-NU<5ZmmY{f}I(-<q@6IEFJz<Ib~X zONBSb{NeVNShUP^n|7Jk;T1-DiB`8l4QuNb>MC5?!I>3TuxDA`4!6BWzexEO$A9Oa z?VI-c>f5iS=L@3K?#_?Dopt+;O+tR(t21wXYc7`MEVJ6Jm2bE;_12wm=`-uA(>}zP z@}9RycrtPQFWu$2rdOnb-)>9gygAh*Z^49PGdLbA`E(d`HnlwboSP?6r#<7KM?%WY zo+`b^l~SuK9F1T9{i<ZfHGlDugoH1wY6VuOdfc8Tzu(+8V-m~TuAey_$?IE}m)R6O zx^w&NExFaf|Idj2y?AY<_N!I%bMj<7JI;2kp7j5Cs7TGTLwgrwZTJ1<eeu=3Wz+PH zkDeA;_M-OL%a3t~OI0)`r!qX<XwctYsdQ$tW1pi^dwyUDXDEld=Kd>vic@!;IA3ZQ z^G+$aqkN%=(DD;=7UZjoTf6;P9`;IM;n~s&S5C>Eh*G@QxJXn;_Dg-^j|{IFeBu8b zw7&=5)0vy}fMw;}WS$VOom;+%cIKZr@?qbU(?TBe8XcKFNlGX!nA4cZ^jGnR4A<Rb za|1GZQd$DGsZUW}IMFMj9ef_|_TQSS-AoJ&pIGo!DLVKIC{GvodUHrc(i`OKf7?Nz zR(iIDA={z!V6G|obB-L%eYr4bm0Xm{2A3<$8XeNyIX#L+I-4E;My_=c4qURze96BR zt2Ud7Dm^*y^zEBB)yCHH_5c3;VdY)_;hYPjEAx5Zlz=nIESH-r8YP)Gt8JPQJbn79 zS>_uO4!Hy#T-2n>dYUbaXN}R5#Stb=>rLehd*00X=>2Y6>V=Y%fvG3zI1V|~rCfLu zG}rO}9V<beW%^En#hQD3+d{2FO)FpQ-fhI^v_Goq%_f6B&bEucd2auCG-XqS#L*dz zrrc&;|2aD^aWDPgx@Jl$x2T1f=)Q9XSEc_1@4gsdBfegA&&Cg8(qA@*z1eN^==kzO zwvUV~%JubXf9={GegBi$_DfPxhRzS|9!y_sT&N@2CRft*>U-;(m8MJWR(w6@+Plg2 zs=jX4<X5%wSA`!xX$rVjxmkA-XN8G?oU4*eV!^yC-?kWEm8+WHWBX-J&QiHH&fVut zHabX$GaShHn^BjNdSaQNu-~QJwrx``MrxEFJY{}DrexvYhJUgiA;A@8$8B2tViMNZ zu<kADZRDv_jxNp%+~fGo;q{>vs{ZFpi=@6yz5G&Py}VtWq2}p?rOe$N&ayo9-kTnR zPvG0N^U{T*j0_BBcrUn8#h*NUGV`D(dQA<!9VF~1U^}_xjanolbHzdKduLlyHg$_D zbOgCncK({MYDNF-vscm#-z=NvIqlEXu)v5P57>VMPP0`^UARQ!X8X){#(VFk`}zO> z^Yt(LBaKAuUY&JIGj`59q?Gq!$I8cHY}+?3dF&@uUg+<7=llakxmOiSCLFga$~ymA zW5wPTiIL8oiaQ_voOdT>#gkW#FN$`jTgx7d-uA`r^WVnTT=UImSz8|xU#Qz$VEtjK z#e}OhlNC40Zecw<g-4@l;gr?yZ!yolJ@Lspj&BurKevXie&*h}ShRgRXU$#F>O<2* znTuzb2e4faFibd<6!FI6X7qELu0=&#g2MJkPW5vAxF9RmYkA_)1Hv|`9kMf|=1Erc zg)(PHTzAkk|Ip;uwye>2%_@o02To5kRe3#i)3kFtmnxk}n77<H<Ga<o&-=D&%Xmid zxM;YZFnIk>S>R-$qOD|?I7hn2<Z1ai?F$qSPu(xFj@7ST#qjVSl{tyWI9qj(?ht)1 z#dEdr{jP2AKeh4L-d{V<Rjqu|DW6x?wmjh{`qi9mrmLUNVE-EyK4(c%#EGk)(zOlF z_-Y(9*sK3!+L9Sz@m#JIZ})Tf?{NCua$UXn%z3HbV!lUHrKG<eJ#gjqlG4UKIzJ6> zO>TW;zG3}hj!QD($Di{}GMRp${g7f(dq=wP&6UY2k1KYc*%Y;~g5@vA%H$=&3JQxE z9*Y!sGG1QZAjx{>ALG6ru1DsewymwxvR&d#3=IGArZfWkBS9%GvB<qBF(oq<cA(GH z@SoMfp(3{HJ*_XFTzn<*;sZ9N86}Fjg^gPlU2t;Uy<n<S;oP*i%Z(E{CwqF|Ex7+( zRx~^$CLq8^Q{&OU+JBt?r2nnEXFmCw8RypA{pZf?et)O<UhVgL=9lgN*;Pt0nmjV+ z&CR%eq46x&wu}tdbkoRn+=<%j!V8*ZN<tS)+iF#X=5RlByR&4G|IxFGIqv)2bgZAG zF7IMw-EE?CNLMRw>i63wclxZC9GF{_u|i_Xv=*-5)&N75zmv4uLL;=wR^M2xq?%i8 zx+HP+iHv}P>0IvjHY@Hpu~K4UN1*8MC##N`-07_jxuebcF1T=i%#}J({uLDgR<<gS zD<arFdT{hVGGy)7u4r1g>a17vJGQoE9@F2dB)c8+;OV}x;9*pC(#?q}K}(Wr|IVGO zq$_iH>)bNyw_UY)*<0o--pHHXwD8ha&Vv`?+Zq=bCSU1QjXo2xJUOLp?Gcf~IaRVs zvkTVnaBefo=`49`=El?C;o;-G<Zf=;)PM4P{6@VUkF#<DKBycIu9%gWS?Sl8y|MGL zq|NFFmVM7ZGCAM96KWB6#G5PbSq1BQBOU3oyFNBz(z3F##=FXTpJZlcWlj3WW2&jG z%aa}ycQ9LK{bSxX){{+{)=$;E55$C7)GpDlx_o=H(?P~Q^N(W3Z(E%B$j4_C@+Ny8 zk7nwU$s6siZ@hHUcjrRIhbIo)Ph~h>T@infT}J+qz;X8<Gad`es6F49*5_a7acRp5 z#aJfE!%u$j%s1BPlkn<nIelQWq`O4g_Ja1@$y^GrZ%M9Ftj^HT&e*jmQ}npF#i9q^ zJA2~|GlVYA*brQl-sh$JE;5JfSkZBdzK0u{)?4m7SokPAZxYY_M;wKbD)W!;XcCqY zw(#6+sV+Kk<D8@fZOeU!zkd-}x<4(`_UuRIa|PgQ9nO5@u1oDWH)-cO$=&BK6qvm^ zc5uyW3C`&?D=OSu9&@!Xtdl!>Zh=~Bd^}H;%CC6a-=#j)IYFGI(pzS8|2;V;dudY2 zf}O0!JX2;Zx%1{~>$(q@?pp7dEp$an*VOQeTKBB!3k&1+#_3(#d|314vc2WpZ>PWQ z3G}TBTAVFxxapYH8<)KGAC%%^&iOr5UvVgAqowMT9n1R{mR2pOi`_mgYLRgX*E^NX zD|%*Hb-gNG>^-m9GTdY0*J2?}W$)(+ThFZZtz06;<L{prG+~+f<x3Z>c-3!fE7`8@ z@o`(Sa<bH^6YkzVb=Ja{Cv6hCqO@egW##3J=5OyLc>P%SMEIpfs*2v!zV}Qig-djt zHt`8uIJK=`H7M+m@QtU(FY86`-nn9ht+J)w{G~ZIJcs9bY`py^&iQjC<B8_27h3<i zX}Pao*J|?aYyYCArDat+zf`>6K4JcnZ;9HeRk`6jnyYNjo8*>j+*Uk2C(7#Zn*3X9 zWrIDGB5lo8zQ!y(dGuP}qQwu_Tvd6!LT19NO=^)><X%6!(VS{>>)Ex)r@O-SR41I= z>H4d6a&F)8_^Fz0zn(NkTE9(ryJ=I=y0m4jS9mV#+?wY3E;hnZzBPA(J)^--L&xjc z8A}#7)iti#^{a40vRu=}-}%Xjb&_Y<Uc?2@cXut1JuJ!ci9>Ggq1;b}Z{&aZabNtq ze%Ip_YvwzIvYvBzxol#U%vD?7{hRHjOMUr$8`uT-+nRmi7hLyANEA2{BfWmfYs-&X znb-XjFCMTEd+q%xB1(MSna6i*&Mkg!b7)>Oi>@}~+<2~C32G}=>0EAAU7)1)chL@~ z)w_Q%h}2fbOtjNJ)Mc*fyz2<RC+}*X_?7Wil9#k3e{rtq3qRd?`q0%%ml|Iwx2GG{ zZD`qG)%c6+jfQIW43+FT<}+iSO4WZ)uF~jN%a3bYW!}G7bzQ4ztuE_M<u#QTIAi1* z?60k#@I5$y?U2;l#=2Asi@w#n_8z&^b?xGRt}lD+Wac=`nIiQk>A-$afqyY}Pv{g@ z28KSoYy30`G%fP;vr7y7p*Ll(4bQF!E|>iOclMJxlP3r3u`?};I1|?HDb10+uvtVS zmwD-}(>dBbS8rz)-CDN9^5c`1rr>8wne#8l?#U?@4oG{pY;vy7(q_YgQzf6*$=6(Y z9=QM2<9$D3YyLl9valuK;PD!Z=e76$SMUGpfA7zCZSe<(s{Z&LlY1jxxV|T^r-Jk6 z0)F{J?XEQ~%JN^G4zFlwX<5Q=bxftF_#7vvCg)@!J`WG?8J`rHot?rC9j`H%I60y4 z<ervhqh*C2M-n;Zr*CBY?)ihIzJ5}-%)|nFcRN+*1Iu?FJpbcE<e36-xe0;Ii;emo z7Ax85Kjbz#w4=YcKJdtNi@%PE%Rh#HkmrANT4>*)mHa0~t{qmAo48T3zv|@8^`DMk zzZ3hN*{S-~%j?C*)0p4&{oCC9?pyMwvW0*9&wsjKY_zX0f5-OhyXT8v7%u#K<#heN zJNtq}%XUS*ncs2T)#l)Xm+xM@ew~m|*mg@#dGh8hJzK-QpO>~ReHr3*{Y+wV#)jRS z&GQYf^n5YUuyktgjr%>p@y4`MOV-HpNIUOsvy{8KDJsdSzb`B7m4iunK~2ngm-cUE z<*z00UeP(MqCBncL>Bk^)PizJPopOrc^)Nrv{b2YZH@|=y=~D-&D@y&vS-JSl?3~L zE67o}UG}vmz<<K($C-O|_sqC?cjcC)vkPsf8w5vgx_4~Db1Ut=ZG{T+RljaumF0Tq zgv=G+(}4zSdY65bIo#&T(_`VDS!8RKGIQk_i<J|%sa{&Dvdih=UM{u*^TV&CH3AJf z5?SvbnXEJ~=!33Idd4o+{i1UYcnaPR`ye|fX~pafYjSj?=FXdU&*1K+M(wP7I|`M< z9gfOwZgsU;`(U?5z>(yt>4sBHjjE1GnQisyJGJ-$^Ma(V<X`V<)C?oqcAXATUvGGx zZ|WVZIagh67C)%2n07FI^4qr4Q*T<k*erkW`v+rbjMmBrm47BARxY}<uH!OS+<|VM z)moEZec_EfJ^Q7=`RCqO9`SOWdyvZNdPYbrtU#>z&l^$J=LK;`R&(h+Fl7}l^gP)A zVONK|_76@y<D9rP8+~=HCwe`Z^|<+G&(v9$%4NM?L~5s|NF-hVl3%c|>ENA~iT>)% z!nYi4E7DbN2$`IDuq@%09beY6m9pmwkH1Tdh_)1H*R6Hju35o6UG$HL{o;-$u6swK z|9mWNOP#72_<>t4Pyd(5m&N`^^hN)0?GO7P{b$<3#EBfw@1|w!6AV9|an5LKOK9G9 zy>x>L-Xkho<L0|P@}B$beDunaDI8aRZoMwB;_va&DC5^o+{;oDN+!9@b^B~3#A+G0 zF;wE({YyeoHAPxCC7&!Y+&cS_$(h4fO1G_iIn8Ctii<lYp70MWpLA~O)fXalhpw1< z-=BKT@}B*X3u3$KWMlj}<CB-GoZId%YIJzgoV?Nq70X%MOY%})`%11%nwC~|(@FU6 zw@u$NZ?2i=S?0UslIQM_sXC(nZm9@)tDb(D67gl#i_Ynmo&|T$76#>don7$#h<4P9 zImfkjUytvds3bneKvKzk=}F0wOWRZSDE*Dj+jQ*eJJwy|xig})LZ&X>IO|i^-K6#@ zSB|&+sL_o!Xy3b1=KWID>p>YpTT?bES%02fp+7h6=ko*8w3eG&?i5;@d1I&GwR7!Z zl~->*KN4O3IJlZM;_uIupO#M9{6659&&Nv#58R08V_&1vYg2e${jz*l_}OLWZyqRL z&i692$k61H@g?DB^KDql`byf|t$zMZUAFAm=hW`+nb%m(cNqF^kI|6h5B^>0qkMk$ zaoJn4?+)gEIlHah?rqEpXa0NKZQljMnq^xq+o|p7Tc1)@{h~*&zG~lmgQ*o+FLX`J z&Nl5$sFyR^^|#&YdG^aIM}N-JTllO{qt{nFFu3KliFNEV*|Lh8_8#TBd;edmV0*XB zvLfrnJmFs)!si`c_3t^Tw?2IDDjW9s+=k}uqU_%aUT-yQoIK4!W#VCP*@#CUjM%?z znz2T&|0mNS*6*A=>@LezG2WL6+aWkX?7%%%gO6)?IMzKgy3TZFw}AEo#!K3Bj!gU? zx&F7*-g!c5F#`SyXAXa`PCUU_*{F0gP0Z`eyatQ*P}3Xk6GGbdsCw+{iE?@>^op<I znc}i_WkrAaOaolzu6-kO?M?W7%kEz@gaWQ?b={L4@31lQxj@OmgI90=_$|}&mvL#w zZRU58CLcEKwSF+~u<VlCdKoEvuVZeA7jnfP-haZY^}qUG*@vzFqk{$Czw8zfycPJ~ zuJ7vCLxn58J}SI2&$(j%EsO4D*I&gSoi*e3)mNGhygUBNy?dae<ZLYW?E97Zdp?yt z5xQpInDn>OQtd;#$1k%jUhBg08E40=En+O6Fz3#l7vJTgJ68lAnOi0@XPH@Xfm>SL z%#gpC$4>u=+h6kORCHY@_q)=qzqqE@9(@1#G_$eYv+shp_bV|fDu`X&bpGlp5dkG% zui|8fFWS;tJQ|<bM4p9veB$4>^y!YGSEr0wV^-Mf7fxULzyI{MJ1gF9JY}n9T=(<D z;lrQv_RH?<_}ce;w#<3uzUN0y%+0s_6u;;H-_ZB-m#oU^<6IZEu^}|YN2P4yjC}n? zr5SE1brXO5mlK$C$@@lowb$>5g0m|3+4t$CTj=j^+3odScilFoOQr5t*Uqds+^j8F z{YLYL)Ro-HADO~d+_ua-9{HvwBj~L}_x_IEucWT5ot%ErvLJNHYL!V3m3Xs`uh?bl z{3JG}$7S0T*R%t#PP{p(-EZ}q8*-M8=EOeXC+rLi>-q5wS`oN*8~H|n(8%D+0V4nO zwy-%xq?Ws1*`|3+G*ILyQ)wovt78Fgu1@1EgG`72UHcD&&)w*ndhDWl`k%nQ=gTrZ z7qH!GpI3eU)7-z$&fkA;AJDI;(`nJPnrU6<io+Soe2;fENGmlhJw2mgwvv?B^k}AI zt|n9Uw*QRxIndJK>C>6vx`(s8ApD5!9dXZT56U<hJ@Y;}95DHAp!`6Qy<R0D>_9T3 zzr?N2(lcA;T@EqMTa_7mI+Ca8kb!a6u4T)nnWlPf{Sw-`#VE>e=G^Y;sqT_dp5G#> z^ViP4)w8Pj_lEg<qo=Ns_7F1O)OOO~L3-Nj33c4p<IhJQi#{HC;(Au}<eb|bt7ooC zonfe)9w@`(TzBoG>?@YS2fOB7UTfG^ysxf2vhBG9lcDn3n}HF+x1{?POYe;AUG##Z zRapB~+p0CuRbielD&MV|{^ib5r4_tqx0tM&BC~4gky@6Jch~)vDAq5DJ^M~kCp<9L zL$F>YU;UOP&-)eJ2?hKN=?qQN9L?KyYVj`EBl>mj(iFWVqFhzEk^Z4l587=PJ`G;B zFYPAZF{h<*1q*`q?Ax}ji`&6T;>w#3`&OUgRTAoZXmNOEZCU6cP9B3f_u>z#&N-CX z_P9DU{E#P)mqoLH^YUuB;?+^J{FgRVat88zoG_m&V#0=wbf$UU6^+w{+6<kzqcrC= zTlR$W+!bAyF0}KDsdKpNE8ilCRrNQ{Nnc32oqjdOZDw55#h@cnUwpS2m3&p)H}m3u z&3^r-y1~AYaf|m&$d1-Lty8%qbldbjM|U6plC<LGmkP7j$y+_RV-IUwp6z-2aY|gJ z<+kNh6R(;cT)K7T+qJ7w??^6-xo2~Bt!Tz2)+d#RvJNdgYvB_g+P3)1($$Z%Sp}BX zZq)SM;hU+P<8|0?OXHVJ?w9e)Zi_IfFs^eoJE#=BB6@;(V7x=aImbG?fCh)>Y;}1$ z4oixK?Y&t|+@CN-*){){xG&0X>?dE-XSu8OTI&gMmadH3F4a!UHak4ef3f1Q&Hm1L z(VxG)oy=S%*2R3wZ;Bvq(S%JuWX^>PvY&dyy(7X^XWG%}1v|TT?9`DvChC62_2q{a zDdi$T_U;#V!Xyhr#5@<yd%^s!Vau*b7w_-T{qOXhz2t=bMc+Tu*1zzqbD6SZ?~$hy zCoS3DVfUy^c>90msLHA%Z}lGq7)5<*2H&nJu*l#_7Bd5bD<{6(OJHsVoO{vdR(gYP z=LrRh#Ik3!A7Wr#x%8TMv~H_p!Ii3&O<%(n^Jn;a82mCjFvV}7F$>?-e^b>aEt~aY zMW=k~opgy5flDV2-+Z(6dfe}#XMcYE{c8Q^#N$Ga!X?iQ`gsdeoJvxT+PgMM9n!hv z_~ekw9=R5=BfScFUOPmcSY8^K6-FPD<t$gdGkL?&2kWJ)dAL<~U%p_Mb8XA6+7-6> zlI?9rxp@|D%Zu8xXnPf#^P-Xk@-L&jw@XFMEcaRM$a6FAwdrK}-E(d(%A8p<J5kyA z<UE&6qHPC^cl*se`rm8Dt>pooCOrR+UCuF@Joj2&PsZ-Yvcj8`%QkpOUf!-SX<osk z72kGz^vXA0v*YZy9XBs=Xr}!CDEW+iSCZ_q+^M|hHat74H8a+3+A{{DX$A4eDs@hI zbS86(r>JZ^ARr$Y|LSh-^8N$!Zf1E_C@gMJI(zA<>~2rzlT7D#haVP@eW0xHQa9VQ zcbA6V!-YM$Hc0_T<Vuv@OGkx1PYZr6XDZdUbgH)g9M$&{ccYHy6z_I!?z^@p+SVY; z<i#(^pZBg@HLiG?-2GbqCG%N}>(<-ioNn8$+Whoy8rxCs$sT1wi>CJI&lCAtHCOJC z$k8{|Yc756I^523?xOUUPHx5%muxM~o<?x`+!3F9`iZXaJ9X(`zXKv$`R7l1efYoR zBlQmP*rcuu#!Z_RJ@XR?_*8p_Cvtkh&D5hOjW!vd68~Yh^PzU|;eUx0ty1%O&hs43 z-tnp}-a44k|LS~>`onK_3wx-V3W{v?GkktL+Enn9RbpV;ixYC`D{6UPuPf`D()#U` zgSFGGi<2@QvoBh;VR^^Te`$}vn|#0PN4KRiF)+NqJ8ME<SUe!HBts88?>;r;cCd7) z#DCdMC-qK>6>x`sxFo$*@#Y3bk=8Atr+l>nGO`3eTvD~X+0u4*$D9ej9`)2W)Hl?= z&^F%JVJw@mW^ulq#XsLy<z_3l2}qngSMIm(ea-jV^7ViJXghg4OcePmk+b}8*CV4# zfjo&jWR)x25AT+8ORnI5pDodyC^J)H-NPy#^AC+}{H8uDcC1V^>hkmPe6^)bvh$3W zuYBf=%LU$tk4rrZ)p5Dl?s~E`TF!e?euUiVOONJiM4rjovHFp)=ywUF>t1=DcM?2~ zKexTV@lDrU?V{|%VoTYted~K%aQ)Q1*>j)jeb0UPbMidxAI=jc6(UnFoi1+M@S&sm zVOCAu<$D`-cdM<*xw!7b8HWX%%qDIAbZ?qz?6c@QqLOXKjYlTwb_H+SAUUnyW8S&x zZ6!C$WVN;bOnN<`cSh{W0`vV(rp6pB(5`EFp0+jML0wwfvnhqIcQkD;UGpGVmQy8k z&8vvRySmPo)b!~~{OWQFIi|ZhY&GvSH@2nU9+p_?ZVfu8C9<_kzw{2f>$y)_W+hJ? z%&!MFEMBx?aZ732H>Z^`em}1oJ&ky3edp_^%C_RQj}sb7a)OUDPw{-;)Tg_{%4Z43 zZ1o7`2(=k0FaG!+-}1hC-;^&UAx}Pva@=jZ5IFTXUzSR7<HJ9kk&~vTNLXq1?~B!( zR<zyRtkN$)uY8C8lFPB@7P1&G@eAb-Dzs3%awYYh)up8YH3@x+m0Ybnfv>JgTDvb< zuX$U)^uv_ttIeW!>=vDCH2d>T-HOdu#W(ZJTs(KWrI%%1(7A02#w9t$hKe3Vi?w!` z7=7E{v&FzW_|C^qF9Lb^#5XM}UNlj%?X~`y<%dsB?sQuC<kRkbZ}Y@$>R<n4`S<(Z zA`91x<$ttqsuydkn*0B|!&$X=xvN3r;+?DB2mgtDXL3oPZ~gfbzucr2pG(*_$tLeZ z^ScSrXLwJ^Y3BM@>hZ5I(UMxbBF((?c(k5G>%Sbs7nSRG1wK1Jv-(l6?vBEVVx{&^ z{23>6x13wuBAKz6ze8mbdxAZy3{N4C$^G!o_=VMqGb@_5E$7gkv0pjsopWW2!R^UM z)H$RDo!2^ZCmJ5@Dcjt)qDf`7^0hXrk~a4j3)+p{+&@gZ#eHVW>9<!64qKh@XnD6S z{Y8xFF1`<^oE9nWzajcl)o5Ld+u_|mjIXY~lDH+&<c{z^$5%fDGuT*Tlq8fRlz+4( zoHRN2ZgKU|H=#~1<6J$}=PybZzd!5PPO&Gxmn%Xil^5POiL*ZB;4x!@$K>C$GQZ3_ z<J{rZaZRMd*7^P`#<>5wp~t1SB)_Vd{P6ewc8$sTwr)M^KL6gaA-%-3NO)@X=E$an zX`Jg+f~N1kecUzEJTZoAUC4h$uf<J}JA)Sg{qOpdnStRO-U9;&+?x}SpHrC*TgEdr z<aLm+r^vrqK50%yN^XJ8;UOmChgfd9s@|I*VAj>)7Wn0Q%B7huhkddxDgF|$Yw< z`tQaiEp3skm;Y;5T)jLwWUbSNl4ZY2zP>E}d(QIj`+9jh<pz^^t%V}X**kl9AMu=P zE6{8C$Z_s*Q(FZ`r-6yeVUI*5r$>_$Wf~VM3Lmrc@jU11xy<>8GuJ=OlRhld3nFjr zRqEd?wMlB7(TebFKi`=26Gx`UoHskumKnM;(8%>|>%}`8a^FcDy?WI3UBP*gb>{D_ zn)Zv_JfhWX^nRM9bHEOjgA+RRZOzSn4(D(uA6>hDQ>^;z553!#>n?t?PMW)P-#OWd zsU0(V*~(98=baVgQLma+dU<2-q7PYpwW~u{7U<7DuO3!<#9-B9sdd>q7Cu&cCgHZ) z$s~<;@!dTCZOhe{PVS!R<K}i|f$6S$rgttG_RAc8`0ttIjm*qiN9VZXO8+heTqu+- zFPU>hv+eKy)w&h)UVGkDl`U6|JZ9^(UQsyXRm8zsS^j`49|Ddm2b}5u=yF_Yp3$72 zoa=1oNGz*k+m~*(%Jg;IOUvynq6y8_PHgr$?^kd+|JvSlV!|)p!Zrg@!~CctRjxDs z1>BmGy|rqq?UjE2geW<4*7siz6irmzz5C70yL0wNWi096_U6>XxxOCja`nP|0(Cp` zoOrJ9dmTD^^4*<YOP_scpZC&4d);=wxcWW+<L1uke^-0jAZ4pff0Itp?%7oa|8(YS z7_dD0cf-PNM%LPy#j@{;S9)KuD$fc0+OJ}DBWLQYx}cVlJpmqX{H8rjkWV>LJGtA^ z(P-(k2SU%a_qP<+n|$4LTkC4&M)6Y~HrLICwpyR(5&pYs)Af?%9=UakC&V-O^jTg^ zF6l~YsB`dLw(Y>ZpF%vx3m29DZ=7e)`>lS`d&3WMjVpwB^PG7fymQaUzIZ{5ZF=yU z<_~L(*3<>1H#bU_3Wxc0PK-!lFn-nX%lzf@3x7qTlD90Yvf24;(#r^g37xD{&xn2T zopYy9?v~3F<!@_q6JL1y+&ot2)vztG%{>0T&xRL`B?@;PLo~|^3Z&abeD-{;<vp=| z>Gb0wmDBbe4?bDE-df`2gAb2GOrGSQ{3ts|kLL$?fgK}TlPPGbTMh5ods_I%q=QnE zOA_<abD(qHb3=1M_rBNV%}O)Bz4gM<1!9^DLO);2^9XH8V3pR$2%eJQ{qbvB@!cHH za^u;vm;Dh+|M9@x{xOe;wsGB;=K6#35B3+>n9p{Izr>ZM_I+OMxzokp=2XA?_w#)I z{$!5J8B!MAYue^CN^J6+b8w5}=`$QTPfF)p4m2?6{w_3K@GsAve*P(!D^ou$?Bn*T zzvv)1{mQ4nNhQUeH9e=T*7ZCPKJ!{b^K7W>^(*@pJl@qOEoEn1z~$ZbV_DmI)0%?| zwwm2>Jul9aF5Y}$Yvp9?(!}tcU*6qZQrwy!K23az=S0QAlb>xZk5BNIP1~zbBUmKa z^0`s}=rWyU(<L8$cI?e)OLY+AX}$7D>iz?>_a3)J5ALe<wwUxg&soIlXo-1M`n8SO zOLpE8cztO4k@~v%!56+||37bBlx1EKvGVgWivyRBh}=uF_$$BF@T1y2qmOz<Qh761 zJTTi^;32}Zu^{;HbhT+47d`Cj483FeQFNc#N8Wv*uYRlT3*PnKw_weT6|0Uq`ZBlv zWz;+D5_{^I>+N?XR>pI0N>24woPU0`jL8+>iiqTd*=p|+TUoen1RN?jzWSt9=~_LT z?RutbjOW~mWu02R&?J=W)>SrB^^4+Xr0upA>^m5(dojrL!`0KQJi+ZEk0RwI&dHWp zIo(@ReeUclshgKMZwf3FQ9Qhn@oTz4jADLqdFT4z8y`cgvXYxC-gNQU-e3C6Pp(cw z!cF7E)C-ZFuMDSn37h@037A=)7?&G(JxFz_Y4%+&7ZIN0oU%u3ZY?@6Y2K<_&1qUZ z;z7U9#<2tnC%Hw&y)VoDAN|&H1CQ0s?{S)*N%!Bc*q#1IVp)7vl;kG;L_gg{ZLyE} z9KTEYy^&fR^k7T1u!S8*y2YcGChv={w`(PSZ1t+Ru;BPgq4Gt!Q$5&a%XfVZQvJ1Z zmjC;`;!2a54_)@HZu`e@cI~W+Nsm-6i#oox{$k>J-tg91pKqKI&oq-(tMJ&m{h9tQ z^;||*kZp9g&eU9|n|$^)%lyB85q<IHD1+FpUq$cu&ph2WF=4}&`G&KTr_DQ=r)bHi z{6qAaSlrEH88R*Mfj=(pt#A<tE)VH{kUt}~Y5$3uoG-`cKbVl9`7rO9V4v-w9i?|J zZ7WRTNagyyitG0+zIoS04K^}ctZdjQdqA3N!@T7Jg0>C|{ioD*1+Ugx)3qge`yBNd zI>BNe?}+)?zfr&Ox!T}DzRyzoji>v+u8w+F=OJ19&+e$wB*-xnn?73gOlM|b=)+s} z5?FH(l$w{4T9lcW4qomDY0$5Q9nr&iGDRXoa>WFvwV_cvuU@HI9k5!FCoyG`gV2T* zqU}#4+77Asu~mKibV2^XeuLVzl^L<SruEzXSRC_i?h?($mZjM<*VH_J^S8G8eeumR zAFkiu|F=;t=5W83nqX+5Z2syBVRMl^!pC-3_^VdTPnS2i6Y^nUlO^ltoV!6ECN|x+ z`8(sGaGS(oCg(YcfsF?rPikW6Kh2|dcsY+YkC^i$#iJ9_B2pugPZ*>~7AdY-y`!mD zz>fQ2pTmb~kFEaYHol%5c2e8z?WVc+Ctl3GUH;BhyZz{*lEpWBU7U7Z+WdEtxc<(4 zH4o1F=W?(-TG}M?;;Z)(fg3L-G%gAJy-!~Eo`#F?yx4n%pVsm$zZyMd>YnFQRzBF{ zkaX$RR{pnDi+W19FBRW;wCVA$sh1~TQFS-UoN=gxW44stadD}%k792R+I{d=tXcU` zFNgQ`iEIsrtRHM!wmPUzju3dEKeaafex=IhR84NCs=#UAmcF<A8S4LRZdY)TsfeY* zp65F*eR~y{9`CYN_C|Hz|A51M(+ezq>m9ajv;FqAc+Eej{F93|zcq1+Nej8<xHLzk zYty2IM*>s(eoaf4b8bDDexLC?pX57Zn}qw$^K6rT^lkS2|6BR7@b9>US5rE^aSP6P zyR0`iyypD5-y+Vs1sb;TRZPbJ7pAhXbzicNE66EYm0iuzQ?l?yP<YSTwLKG~OpMaB z1P}2u*=m1U*pRmC%A1e2yMrb!*?mLzH_OVEPW)><A7pKI|DLm5!Z-i@DVy>ioYN0{ za61!aKC5-RSntvsyQVHa{eH>S+gomi9*(e?mym0lHgl(M<L5ndm-^_;GrqiX##ECc zN#l8<J1$I^pRnzcrq%9sPcBV5urx0x`|9%@89GyqGX*#5$R=l>)lJ`f?gFR!b9u{m zxlh;TtEJyLDeHZ&CnNopsGGHMOxhmhtE)_pY<-leJ-6~E@7iSRSM`#YI&)%=WUz0l zENzZC<@2=XOxCTgk2AS^OrGT4TRTPYw8TxB-n67j#krYxLw4sJ>{)+#{nn$8*Q6FH zHSTtwZTz~J{rvxUxjMm~xu3+FPJhvx!%|<R@PpIG!g*Ss@fX&n%f{yw>sD&N_~@vA ziOt?e`SYnW#&dp(+WNolGO*t!&Gk{(=|V=$8g?Dq30IgkZ4Ja1#J~SC|Ioa33%^S? z6(982&=w%7tRCWDFxj$o=Z2-LJ!5@e)*e}Trq_6RsNtIL(Z3vm<TDDGr|fOpJjYUm z^J>Amu77IZS%lw6rtqf*-CVrceZ5oewWT){`$Cnxcn`0!iT_@#QyG`&AMYifd1O-h z7G1ML8y|Y?XyXoT@jUrjCA&v=>Kevv$5wL$@x0XE6xX}LbkC_She=;kVw18JPF8J- zOWr$6<!|b>@2<bHD(1ev#-G%3*1XQ`u5F-e$N2~4F*oPT+$+ZEQZ@hatIN;c*7~lv z^h5OT>W!it|G^h&z7m{gX34_9AdPo?j9??AI5{yV6*e<IHSA`&aH`1vTF+TC)h2Ii zY2wk~>%K8{ikL`HjF)%zR*~F^Q3bQp_Ng$x^qJ!m^=e-?cis+}`3KbFYYr4!tesjc z5dTHyKgaz)<~H~8)qF0Se3@eNWcT;F^8Nd*jqCq^zwO&{vG;wl$3sO<{^J|u+od}# zh1{k73iWY4o9JfKbv(sJFIk~4Sz?Nzh%?9WqxUzo2uk`NxzH0R>3^!i>)4DQVWVTM z*C!jz>w7Heb7IDnLa$?+3+Ei0((}CKa;9W@l12A()jbN2k4ltrtLt}uPEA~TdWN8n zTAK#XMDBj&?l~v)^bbxc=u@n^vc>0nVB5THhPO{H{jzA@$<J4M-pzU*ymV(wU-Zh8 zmz9<8JnDOQ>)e9eoqw8c->;jcXp|v6XW_xEp3RDv&C2}dUk?7YXSPxLR~dg<?exue z9v)lqz)$RV_&fEAV^`P4G=AT{UcBsv&W<~hkCyf%i)mKbAAT`QL%3wEc+3CYpO-FR zXP4M^_vG9rJDH#YIabciTsk*+=9UXOI0~-!Sg@I8dSdmx((acbS#@=F|7-5oJzTMU z`EqxQ1%@fM$(*UI#WT`x%z4`UE$8C49Z%;Km8^E@4Jlyc=88MYba>&{wx=(S?wP6i zmCtvI?)5oOkL#yYTr|z?UU*-7y~oqcGPCGMd7hVboj-fYT{E7tZJBl7z6GK?rWSvm zm6$#4ZPw;pvrl%n?RC=&>kZ}pwRGyIvYiPTm9>4@?7Ozu_0Ey~5}O@)zP!`%)Tf7= zrq1M8F|onQtyW`(*!7i{u76}>JQJ%?#F?*E!JRLB!HadbM?<y=XLFy1rh)8)4}DGL zALX1+n27A@=a(=`&9c^b=*%krQ0Z`3{wvl)30ap)eYBs8yBePMTiDz9Ht>U?UEl{z zJLPq;2UTnIq&~DZ>3^KsvR*Xim^s(Jqvbr+*Jrw2kZ-$Zy^{CLl$drakp&&sa{8>- zd3YF|ILJBo%<S4H(_=SJP-4_|PMX@FIOp+|$+c5OKd!R2Ebc4o4NLCrSg0Dl`5MpN z@~<Kh^@>?nC6n50UoY-a*mITJ^!{|ui6*8g>8CcEXnndF<?r`2U1r_xKNXGKbv2VF zM8vMJKlX3yq;H{xTF*q(+|F9Pe9yqR{_UHB-!~JxoGzW5n!8}NZt0?q<MWelJe|q( zUDYXfMeSOp+@iTJczi|54yewZx#_g4uDe-?_g|l=Rn9%t{7-kp=@gxoI5V5|u(Qir zFW+bz!I?AN3{2Zf<2e^QH>yd#yFFvs_0s-li=9n9c#nlH?+n~8)3%N`^2cePGT)uE z%;fJWq`Z2faJhP&(d%p5c1g*8opYUezC_fO2RA)8uG0<8woRMHVlq3-J7Z(%;T4XL z-X67c-hOmbba2$uGG~6KH;eSAiyYDCQM=dm<-T{!B)dST5;tqB=?CgQnn>&w<qvyT zeknKNMd`oB3;Y3AR{4rsIzE_|>0YpX^17{VY5#;YtNM34`aGT+NjdFkeZl!?$?FNn zcmLyxedlMUmVCOSePSO+)W?@?e%m@+thD-;ZCT=$zv|LiZI3$+pG!8Sa?Y+(4}8K^ zc0q7&Q<&9~+t)n{b!&3J)t+q1`})$&G5_OB3Gd^Rqc3-TC=nI64$-_*oGJKyiLh+e z7ALcnM&5bBn%bsJTQ_#~g<f2;Io6lOicxm;BG2^pTOu!5N^)BNasKZrsykvY-6y58 zS7?sQM6JLx;-(>;E?SPA+L9Aj91G}J#k=xkxS>K+#rpe)c1W%F(s<Y26&87<R{iQC zw$Qj^wTeE1S0w^Aa*6&I=1h7lYPQJi&a#N2<@|GgPrjv8R(UQj;d@EZd7*F1gtL@> z9#Hz`yOPttRFc2#;pdZPh4&mvqI`80#rEnfbWYe1+^e&=yQccZn<%$(iQrhfu8-g~ z_NQA-)hk&U7+!PZoA4koT^XE_SOD!&_J(8!Uv?0&<zC9IxQC^(bC1gcU5U7^C>KEi zc~OBWl7Gd#mg!Dg60G#%2lF4^f82967P_U&{C(A5w8y+tbdm4d_BT79&)d9vZ*_V7 zpFe*@x6U}y*OYk1GbS{kc_$ms!&yi6G+F8I&?|Iy+$(-(iicLlmnPQEXs%g%69OM? zYckW{p}g_P%-uq#eb#xb`BdSb)T_Qv|6{}R8jX(~;l3Z|^s8P|HDg)S?mlyAQdELL zs;Kd-xC@sfoo`=#d&j#sNb>NNZROWICW-`fM4WwI-0JL{pyKm>^$F!ppQk=XJgt%u zk5-$PT1UH{6{@$N9rn-nn9=Gt$HOPOs}`O1xV>xU$;->!4#%X*{#?XuX`HUl<<r|9 zd5!0?#;a|iG247@SLCWETQf~e&F;UpYO`(-M^EqaZ(o&TFZbu>TCW!GNjWq3Q-#^u zw~_3(vhG<J_*k!WIy}Xp{>RQ0J6Z%AAHG_?@R5-lE88lW<}SmY_R~B5X(e^EuYVmL z>&hft;_yE>bLzVjqK(&z8c!9UNeEuB{7gE}s*syzn-4XqhpcHhP?h?QH6)rTHa)bi zcF&h>4##hrh#x&|E1F?HdolBepz}YBy{~ILiQm<(Yan~g-gWPUvrEm(zGq&(;_U8r z(X5MUW3cV#-828+HDxkhzU81%sL9#?sa#XmEh^S}p)-B+qEw@dk6tl>_JUV-r><96 zu3p$77pdUYFMF5Q$@I?8cOGls_FdWi&SUP&zAL5gG=7}BSUzi!c!vP<n&ZOr6&}S0 ze4gWw%PDxMv}duZ$Dyx1(p~`^=0;)O8A^A~>{!|ob||;!{L~Bo82<?0(fw!jK0`F_ zdF~@?t9y%8{|T<`%zsf(@ULZsUw@YRs>_bz!FTId<gwfOe65<Ivg-Ol)@8qJycAcR zKj^ybm#vml$o}R=;X}Th?9J-$mVE$khHLX*yLt-~1H*E>qbme%HV7^$%Fj+kpZVJw z5(~PsqmC=*?Y<u~m}QkjL{nuqcP-NBQqtg1R?(X{qvCR|estm%@7s!hw0&bbX1%xz zx&r6(y8P4=hvx3KSpM8*`E$$o*X!@!uUjB)`DF19o><V9szomj=CCO5IDeE`@7a!u z6GxTxo~7FKDY3;KoGc;sA>^PjYd6<C?TUp7p2tpW1lio*)FUdnK4s4|fnwX^_mXd? z-CXVE@vOX;*?GNWn5%w8UuLM7iiYaqxDS0<K29mu&2&G?+%>m-_QW@cWeV^1T~92I z2{Qhv%uYX^%F;4_*0h(pUK^I5fBvt2-WhAo+S6q-U%gpxu>Qi$lq{>uYtKp?)&2k0 z#P8a#%*~ue=GMQSemIqRnlq6tmVd(DCxOqB4kyoci*3@nm0ywOtA5_;nSAsi1^+{3 zKlb?C*7{&`-TMBi+3U)mZQZ8a=efpf#^$+Qc~^RaroMDNZ2Z0C`+}gvX>k?XcfFGM zx+=0LJ^Y@T&iOm(>-oIbobyyU6TR(dNVWUdRX$(y9d(VjKbi5CVQZenF}uabVy~{f z)f*M5Yjid1O4gim-M+w>-sGO{?3kWn!-K6|tA*P9x?>lA+@db{J+estr&-FL&SY8X zEou+f%@ouAxTBGe-QN0?n$6q8tABP&h}hK?x9#s)$TwYAY|^Vav$h^TRZ}LkN!;h` z{+XhN+_x3iU0!`t>)j?H)fu}K9G|bAEG{S;Ij>M-Vfn21w*}MxbADGpH;3Exy7UqI z`;u?Pw-(%+Z25lC+ujS;m$HXXaGPPGE2Lnn_QiDJ@z!|)QMs=<R;b6QS2nN7{S|X^ ziTRdfkDFp{=}{6Vw@&c+zIB2}dsM)shr%lR7C*1u^j)IXert}fV(zle4b!rnu3f72 z)rhjX;^N}nKD(o??f>phO-Cb_C?(lT`xL%-9@xI?&_jlOcSWZ$SM1VW!&0zJTZS`X zt+ve9#9g{)ICgkFeyR9ZvAXF-`H_3_%Ja^v3GbP>{>A&FWoDKKPV@CR#-$|ie4NCj ze3F}^$9s;S1Y<T|Im>H}!lG++^G#jX9Ih0E?C1L1x$_w-GXp~kN*+T$bkPX^2xf3e zWlm;Zx?@R6QD#zUNh<VWoZ89J;g=l*j{nzODtpUGv!km#L}Y@{d-D%XD;6wT5Nc6X zb93A6lFV6OR8F7GUusiurT7m+okss;kzEg(D^L7MEBn5G^30R(?d|Ipa=WfcGw51r z@`guf#;b#_F{&}AA6exI<O$^o<_W(OcqjBu@SX57PU9B#mi89+mg6mvhlCHwJk)$B z`Oq?P-Uf#X#|qC1*9et8YI_uQT*Y;ke>CeY&zz#Or1hGkXBPL*qox}b-;}P6nazAz zY}X-;d9woNUE;qfD;>Xa!ko{mFEO1BxnnW!Fw43KjTwizmDX%_;G1rkwy^#C)-K(J zuQT_Yf5;q>yy4OAx`2>*(;QEiw}$OI&beiA<Cj%N0rL(ox+I($E_Qm+r2?k<yQ@F_ zHGR5EtZ1U<FWtbvs@eIScN6YDy%KarCr2^5xORV3Ppa;hZF|p6%sKnLWTV=wQ@yN8 z`XTX8{+(JD;x~7{{pGlew<ngxnYJqPKbw)$wc%jtn-|Xx@5+$9HHmZU{agOZ;?{HT zt_)zWYo7Z1RzldX?@Xb3%Q=`1E<DsYA%6AIw>RyN-<=?OvFn|AqiKBQvxwlr$e5#Q ze#(8ht5&Vs+%+xw){{AhE3WMJv@ggx$a!^X>@z*nHwA|am!wY*d*&S@aL@Ae<He_5 zN43o<v|(QNL8f};9yRTnvnT$GY_rwfw!^UfS>JP?ke%n9le_<)^6jrb#Bu(;hEB|* z{jG~QnGIx8Pn#Vqlyj@|-xQvZz47h58?9eOFFOC(|5i78ex<ejwNL&kcJCHtv!BfO z;47(j*J`}VahdI8LjS>@gKG}XIT+Vm%l4V=H?J5EpM;D_#gPXS4lZWvm$b<%xbc9q zS)F&DQN^tXlFjM7^NcN$KGd+67c7j;{KE=bKYruGhq^8%28IWC=it=|r1Z+XlEezg zpk3?KpJlgQMB3k9SQ0ob&Hq-3Z!nkck{L@yJZ_3ambs*OdK7W2mayKm*kxj`YWtM6 zZ%%7}WamHNT=?VU*2fclPk)@a_WeEU^0|`#|DK;;e^GLmbA8W6_2e%vC2EglxRu4; zzJ1j+`S$HiSD6-9{%w%|9CKoE)j7{7$B_N!U(C7G@u<c9Bp?6neJ*l~v!m{9-r#im zYs%eQlWdRbL@ryrbJg+}t8%=*ST4SLT>7c(^~*e+7K>l|Z!<c*&PCKM`+xGb#Y!1d zFHSvv+j5)I#e2e^n>^L^|94g{4V$|stLGed+EQO%(-{BjUC{y8E}q+0v^i$eo=G{L zTh3=J)DJH?`$^~K-ANh=CU?W1Ty0Xm$hcV5ahWJrs{7X`HF1j$`}Em{s_#e>v5hW0 zWp#-|GWOkUQ3Hj`Hw?eZir(C@ZJYMRz_fX?+#y*@mhRY=W6`>0tKj0NiHo<$3Ykj8 zN?m%X6=!<aSKQpVxba}ZHlf;yFU5Sgc4aO)CAPR*vNBN5x=&5|-m<v1*A*M~TxR>y zq~5bGO-IH%^wh2#?u)l)UK96W?zKJ_5);CE_1cto5&MojeEE9Iq!<@zKM7qvj@{4r zCDwj1waB+nin}=N^UJ!4FIM|}ne-;d`-|z~o%?vCS+*u5*G>L7rD{Uy!OPoc&hh7d z`)2xkqxOsyoXe%3DJp62>U<foiFbYUs>KW2-b?l-ty7I$BrkDx*0ih?-ntZ%L~--o zj4HoYp7z_xkY@5U!&N6Rcj@F;=L75~%}8Z_`IqT`pQ?7oll1{pbN^nsoFDtHa@U0E zv64}jO+|&%JocskvgUJL9D4qv+WL3DcXIhR9geAqS^qom+)Yg@{zWaxew+VhpIamI zBlOM0tqW7%s&HI(-TRt9I`@$Z&!WS<f2Z{?-hbfmGrMpp_p@#?D*J?f?J-q3d%Ux4 z^JWVb)7u=oOmytNJxtNlE|0pZcznX&_GAz1zU4mxRX;3t;eYk}z(%j%D<U6Rv<I2; z%o6i2;O>3%bL*C6dl!UdAK$m9eRttX?zyEq{^i=|wR`SbBPeTrC^@F5_^L?+%k#W$ z_d?yX<$G><Gt`T}tbQ?Hq{+au)R<Y%@OjjY422sdXZ1go$*|kp;<;@wckSG$uVLq} z*DQY-ep@mBt8C8|DZxpzj)eRT3piW;N`kkqLiXcv>;3&HmnFoP1?7C)yG1&p@<?*b zoMhj52W)?t&s|k<WBZJr-4Ct)M)a{aeV00v_c-!+F}GjzSFXAnzBc9`);L|sYZcIa z|FI>%MCg?1$MmR&8|&Y{`xPm1F}UK~1*^3eIC>xb)e%fdPVjtC_@U*%<OiCK=Np%^ z&SN~!Wy3yCyn=C$#s{H_$OoSva5JrcP#pNc`@w0Zc*c0qA5s;e4_-eoZOm_&FZM(2 zhh*b?*84&~%zjul&SziGUBmvT>44>jZl?V#b&(Ik50takiPrc(xPD+g_aC+j=Lf$Z zn6uV#|JioneZzgx2)2B#H4UGcRzGMu;QC?O0jVFhjoT0II-t5iaRcWzwrl(KH}ICR zlpRcMEI%O6v4{I#!GZhkO!Ynazr;a>nzK{Hh6WY}hBz*KT}55|g<42zMM-H<DtL(; zq-dKO_Oo8tRph_l<+SZ50}L9<L<3wDb#+&+Wna<}#-w^mmDTIxowVgAFPU`C=4E{U zTZ}(ML`3xc??VX=ANTz|Yk%PXk^cNNXWz>Wsy}PWzSTZIyZip^zkla1KK{^I{U1+) z<~oiCUSBeIXf>SPuxaLm2!YibqMY}uTr*MbTg`l=zPE3y)iu_Qa?&L^R|<0lW*aO> zE@p_{5PC}L%0^!yXRB?ezgo#&KmC=h^4~FrXOGl=?ucyGyq@^egC)U{#h__P&5|W{ z)*Z4EQ~OH<l25!i;bkFyK)1l;N$C#8EsGZ<FOTWIG$Gci%==N8>~_`#56fO2mA%wz z-MoXlJbQ=x;k`Wno|YXe3pXffy`DBV<;a<tol`n^X0NlAI{Ds5%~j24!`A)rDJ{vn zBGXgN9(Tp&<=+l#J2o}a+rVUJ<fDWeQSM9|-OenM_AHB@Sa<x)(l<wTv;@EG?yNbq zv3SXb>4~8gZ~2OsuVl$xwwTpD$K>sq{~ZB3p+y$c6jwd8>-+tY;qaSXN|w`-S&uhY zcpN?~)Bhl_?b}N2hZQ{i*%eL6{PUhvaQPe0nOk%>#zaU{tlPWG)_ci@ck9;aX|_0? zp1DqYPET99#kWV1Y;lg;0-`?g=(g@DVDs2{W5Ufz;!^V-SIGUAxS_|ZU$Cd+uMGPK zA;#U7amVUTxnJCNN94Gp=a1k+e#=g*4_A4-y2AHSyGmt8;<*Z*H-^TVO5vhzZY|1d zb}UKR6ZgD=IX|nS`*H4`#SdfqzJIVg&i-S<W96DP4~6^uKS~~dZn5Secb`z7fyoWA z<I^>=Elw5k#2e08X|nXJkCD*>t1`8hD;G&=S-jj3^3}9*L&IZ>eGh+#-50!i?4xbn zg6Z8){`Je)KTPk7|FF94zD3<}d7f^+iL+j9F)EqUvpL`5y;a(wrNSXIty>>^Z5EsF zrfU4c^I_PRmP5J!MOTL}os!zEl`?l`@{D)6VlmdTiVfeE`7%h<sB|YLE`1Vu#Ej>? z0B7Xe$qH?fCuf~Yd115GZQb+NCvQqJg_Y%)9@T#RX4w|4(4+HQS}u6#%+~1PeEQMk z(<1%J9;tJEQ`8UNd9^`>)zEv6jc4~eiI3-3ska}RTF~;cD>PH_<yU5&y;mDQdaW!s zx@2~6-KoML<IQ|Nw$s#;W34P>3R*)p<#>6$TCsGY#rk!#TerOAS#n0E_p}?=S+i5c zJ9ORd=B08U&U`p``9hJtt-fNf=SqHhl@nlQ?rgkwUEtcc2Un#^o?G2lJa^f<(5}ZO z;)gy~#N4|5sC7rsC6mH)tHcVK!aQe1vM(!~>^~#3lD8$<Q1e5NXH3f4r!$Urb=rnr zzOz|VZvEEChth4CUjm)KZOfgmoASK)=AM9Wlc&vG_3mxUqnPBhHCu9SPo7@)KjmBS z)H>NRtyi2^PY76_)&8vFD(R!iI`xB%z&hSzY7;m9^G=9WoO1d{<}IU*KEK`E-t^pf zGh^l-k86^Xo0mqNuPVLBem15rCvxVd%hRL+x9XVcX?677ytbpRE%=y@ob>Z0&D_h6 zc^a=YVsW(zGqyVZ+;Q%*S+V^Sy-vU1=~;ekib~~Q*H2NCOp{Yyilm3i-Y)sIY}J{T z$cMXRPA@lG{3^7&<kEEQ9j0Po@1|(R+0=RW@SIqk<#u)Iwrl53@154kk!h^ETJ3>) zO8)VhUzg&zetvE|*>6(yO-R&<`7dMr??=iB^R@UsNly>|7OnkzPi-M5@BKsJPLI_e z$7tK=eKRldS^RbVx5F7xF>U)B?ew>ly1Z<^xM$yE@v<p>?2CHmE==f{Zg{pmWAeo# zPPz+Urk=@Ysj**tH$z7;<j|SIjA>12;m+w=FV<wO2z5Nh*<mtQ_N(+ip>viU%tdpH z1*%2=PO#dYZ|}qvwq)abR}qnWo8Bw9iK^W9X{|iI>9k2}_3}-pXZ0t(3t0Uux9?qM z?l&{H?<TSb_hek)m{yQCMS4$YcCOw-n`Y^{`TbK3>MuM{os-Y9xK7`U`$^C-R^BgH zV;p(*FZ@~KwPn()!k87w7cz{t7>SvkFc*t@^0D1nWuvcU9nV{5MXzM{5c4kq>73qd zys;an34T1d*g3YymM!<h1@9diS8^wuwS67($m-ON8|{u&`;TO3Jr25b<)NxHWK#S* z&-wrjHU@@+y!fgh0w;om6eZ>rr{x#rsu=2lm$>!@`uZ~&3e<`UMuvT4{@AUdWyqbe zD#kFb$52gzU&42f=!(-?I?~$~{1N%f9QRd0O|B=seoEmkNByb=zRydSeNMZ#WPW`9 zdyYhDNoKZZi#n7f5AJc?$l5%|RW|NYTIB4b96^F>jCxk?dYoP+VdlMd+u2t2Ri!7j zoh;4oyuY=rr1IyV7i)B5{;#^4CnmY*>Acmif-FOm-dnC){7rJxwSq5iEDyhMT&>2r zr!Ri_zOa{3C9L@z*Pkt)njIN>^v!(%=M&kLJe;rRy9-bDnB8$OMdQy!#rGoO+q-VJ zO8pNF3R_fFd}D&|OD*B-2y?^kmd?yGGj1HP;*?HXa7K?=;!N`Osc)OxKGeQ6KEm88 z`_!c3Li>^Es-nXm`?IfH2;8esa#CQLum9Hx%k+&Fc%OY?$f3R<yyKk8qbL3sbvp%b zHB78#J^eJ^;FC;>p>Fkr<iNJHrJv+Ez8Y5bN384ra8fz(pJ=l9o0Qj?2Nrd*uMt_e z&gQ6Bi1nw2!lsWw|I~|J%T;^W?Dl~#)XmzHk<rG;z>tUcXd?pCi}3h`#O~ZM?_ilw zk$-v1mhWEvQpI55;>i-KT`Mama=Ngqb|@%Fo(-Ph@o07Cti*&Da@A5yA4Nq=)2DKq z-%L#mT*@6E>N_>WHFiblt_^phpI+*<SI~aE^Dgt@WG9AIzvjIw-d}uf@BK=i{eQpz z)or=Z)Gw;?p`}G#^vK193H*MVFOCHN+3bDjGM7q;_lrOQ$N5a6e}(2fEpj-R`9#E~ z{rS(LHt9J}UlbdiE3R}r=(^{?!sZ&upbtuIKX0o_>YtQ&*r<PchtlIz$@MNL{)9@d zKUpzX`n8aosLA5!H+G+Y#<%y(&+|4==`p-w{VT$8`zhzL`7_IXHlI20OXA46rqF`j z5`IU{-|(|rJiR3O(3zfBd5K!V^Ugl^)i$=UF-VA7ws`lp%h}QEET7Nw;xXpf`)$Ta zfwEjD1D@+294_?KT|N8c_Aw*ozPMQ$607C5bzM)N#=AUVQNwbHZ$BB^WUT(~c<W>Q z<&DXuC3dURyLL@I&$G+#;Hk-%WB#1F<`?#uch@e%tMMkweP8SCd&PTumZ@y{Swa8% zk2|bC=#@(y^_t}L@yLcQlPHP4{Db#aeb(yLin@5r*O&9L)~6W{W=-Z{H+QQ^ORKq4 zVzFiJ!y9FbOtu>}IG&9RQQ7OdH^%JroqY?Ego1f;t<#-c1uqNfh?;o`-3xfwP_t`B z;719$aKrA^AqRZ5o*C#roYiG+xc-sup0$r;_h>)d)%AVH(ceEB6d!$(aJ{=UE45IR z`^SX1OJ7u0Fw5LtDl6)_WW|irZE-3yEY=E37u#HL=lQ)_<*RkyTLY8)c8RtxcN1(E zr&>*UD7431LvHe(tdD0|4_NDNZ7xdBI5GQORhZ<h$DOfPt(}ujAKZ}jbiQ$pNN)Fy z?4I>&pL||CdD+3(tAX<+j%<CJzNofbx2RH8);MqBjFmC|8fT}duZVd(`|vdz&)Tbp z4Kgd-T8kdedbvHKPwN=Zp|3k^G<VLjbJ-hWq${=dWmM$tC0xI{z8m)%$8Vmv{FTkk z6^k!VTvBDV!)&W~iTixBl?55oxTnNRJr}w^U;m<Q-|=jo8?(L?*|7TN$-h1SXO8O~ zjn<;Po(ioUpY2Mg$dsO$C#gG2oBjHuTGRIx6}GEiTO11f73$r<FWS0Yb#LbvzvBLD zkH3g6y?@&_X10%RV=eQK8$5m?-;xFX{M~!{hVdkyN)BDeAGg{~KR8A-W{R2%@^MxR zte!Ag^u+upo~l1T8!efrdLlh|`>tt%lAd~wF9n=#7HDX<Z3@!R-rRRWNiQoYtk1R1 z)nsXBuH37-mRo|66J}1}%`OUya?ug<%oNIftLpoM?TG6NZlTLdl+EA&S?n2UsCGn2 z?%U6{Ssu66CrykG2oH?!;*|TAF3PpLV_AujTE?RGDyQm<4+49q^vOL)a!i@ELeu>H zpSj;Iyl{NIqWdcA_0`XXO?Jrb_C3O-@;`R(y!Phj89UD({u|G-=U?B0{(>*_Sq;3- zFaPq#vD%iU_ijS`vc>I9587)d=5TJUs!#}!UAdxV)hkCmv6<2l{>vBhuigAl%=bw` zmhv9^hVrG0-OB}ixYkVUv)glR){B}Y+wM->T^XM)wCbav%aQatmzqtAkM^G1y@)G6 ztaEngrL?JgKE7KK?Pk36`$hQ*LzYkl<?e4@6XiebW|$yV_{Q2~?U!KvwOl7XCj5tN zHhgREA9;g?f#DBImkfPG)r3Ho3|1eaPh8Ya0$)VbcK>2g(N!Je-+Eh>>{smN?NQ)* zb?C(*ja@ROG3L49W$r8MLjzn`@3Q?}@ggTTh4b7|p3mnh&&{lSzNg-1zfy<qn#>Cm zxRiS&`yzX{T#-l;Jd-#t*^$}3D|upaXY$PCR>d_ki9303?@aQTqVMYeA~#X8%GGjN z>J$kl>t(5{V%uKcc~JPTCo$#zI`6g}idW|;?YtHGDWXK;lHG;Sv}pCEQ~qyHpP}%= z!E6uLvfR)mNhiJqr(O=N-=MG9WpOF+h`~97pVeh5chr_XJ>fF(sFw4l`J1CQy}QU0 zy)F60BIPXKmEo;M(YtON^JKo9y7};Bd2_xc(Zy%_Hp%XK`hK_ns_C2DEU&dcdEsvC z{7B1un$UHggLBf8-}IX=Dccp2zWe@{_m7r3s@iKPI@>N#Y~Wawuw_y-!&m0NB5E1) zmc({_VOSgWP;gB^jl%=Jdkex2Op)L0*dx9<pvL(L>%ngKo+;g(7Z2Go`E#%q#_jpK zP-R(d#yx+Vf4qfF$4=GB*n#WCmv^mag6hS!DD@(GJma06D$mSI4-Rt=C`v6UsSGH} zgdIV&HvDI~aHz<?Hno{$zZ|$iI-8;v%vg3bBlJqx>Mb6e+qOoDmCsd6wwiG6$V^Sv z@3r^Cg;>iA!$sO2ap~=Nzq`Jt>b;NDB$KxfE8g&b-@Eg@-u>8nwJ*c#_y1O0wSlEx z^MymqF)hh-Z3|gjE~gh$FD`!|^F`Z2{Q1YchVs=vb9$S?)}(Igt9)*}v%yq9rATmc z_v%8<?zpJt(*>5+0irxg3l%umiiInLb}PQn*))$gH(<iC4NS~xlX*U`o052PL#l<5 zTS`vIg@!;@?io5Mn>sv|-Lf}w&K8YnU7Z@UIKZXw-;QayF~?7=pI*pZf9Hg}`PB&r z&idpf7HLnuEpn&Ndd8iT58fy3<TZLXt+2nRTD8URGVk4&69PmtqqG$-q^g;69_(2v z-Pdx?<9t==;$50){jc1#wyioXb8bdkn#Eh&WmCIWN}3ujIm#C5eqUg-`Ldu{g3=MU z@8+(Ysc4(HT`xa<w&}c$Q?rtqTO=i?eq%Kj%CdD^o~df;eW>Jrg@?bo?pXl~;nONt zraMcRSfBM3;?sS|ucBi-_g#o?<K_)95A5#fFZ{S5;8caf14kQ`$BB*ZA66Vlu82wC z-o#{SqxeB(8&^*9Cy{w#6>R6Z)+DIk^$APb*^*fm^uW?a|1oQ$_{P`=s(W-Ei#CRT zoYixk_1=NmM)!nnG;UAbqr5?QH%rVLF^R)+lJB|pw0}>nQTU)}Cv>B`mP!7xFlW2? z@trvr%5+R0mh@TlWlm9Fc>hdKN|kA{%b_`wny)T9xl=QJ^NQp1qO*<}1y4)69cN~L zG~MW1@tXOke>gqx&Y5b^{WSU23Sn!1Z;MqEy|S6&A7(e^e^`5<{Kp!ZsD;m%?muQ% zn{rbA<KzS9ed-cFY1d8qIQzi+AI;o9mOF?)-&T1^Yg49H>i(sc=bqK=PfxG9aH&PJ z?A(JYC-sGiU1kzDaxAn;gEbN}S2^#Em(P5q>0*9Q<?T^L@vZN_OnJ7(Kvy?)rn1|l zmaeJ0&uqz@n3mI2ojdul=aQ(&tzB|2+&QmqdscBvD9!y8@29zwZ1?vpSa(Bt^NEEy z{qxUtO_AO7$tNf-H?3+*Z`7{Y4e2T}ZebEnUvPFtT$1UVJM~(d>G?2I&h?ikpPOK= z^r&QR=f<GR!OlNF?7mdBZ1UpmE1w)q;F>$p{YcZ6?jtYz6VIqU%{zNR=c?gaJtp_a zg(*)b`jlm#7P+-NtH1M+Nx_$tMomSdsq24yYD%#ajLp2dZKv8#gS~p6XQ&i-NS<CF zG~dd{*L1l{@_~h6z7tP9YW}R}==rl+*YEB|3!{r+uAet+PnnWta5ZVBvr)5h-!*fE zhgZ11@wGkv8nm(7?)}FVp~jMDJ*tB5Fh}cMx@R)cb=n)wSWEMujhZ*}FH~#pc&rr@ zCZ<todhJMcsI%`!Vc{jS)+{u$OTDyw?aC(#lf%|q6g<9ug!AQ|mFHeIy=Z&8;-$&^ z{uy_;6M1@5Cfz$@xh+T}IP;ULOufl-cP~Nysy{R8&(yBG{cqp=;AN_NyK5G<d|2YO zw4qDxZ>Pd>{o;=$OBz>6=Pd18e`ZIS_*o9E85++%KIk+LEpnZD^{w1Iqs8~uXa=ra zazOCvi*HePud!dgRnhimqeySaEU(EuTAgytonGp>%hDvjs>f$&*nfDXmeP>-b3&Ze zZHw*y);S$w;{9U0hFRzw!wdCANA?$XlwAs!T`RQq;EOyD>jU+sf0&;2&v&07(x7{> zcE+@3C+|=((~HjxS;|aybG&n1v0e3*Q(55I>|XArM_qH}-ySs!Dln|oJ}H#%7Of!j zL#9+WG_>Y~x*lKWww^?_$yREcBev^G@Of=coBY$#I?%tUeV4_VqjzjM*f*%i+-W|% zJTdmOkhuGg4$*%<r@Gff%Y6*}FKi|L`JeJKQC1(`Fa3_9YrkGJJo7&HX1^rQvlG+O z7P<F!mx~`Mcl>rFe%a&2k$)n+s-5}VFK$w3-?>HSOyIt6i4)@|9n)!xROx<sac@S! zMvL}5v2T*xF*1`62Zeo><c@VI%1B|hOP<)hOy=2-WqvAdi@P(#E>6q%+*tC)adXex z74uKX@F%7!w%D)WGTl<=Y^2-x<YlPr`^1y1y9;xo6RgWzpYQA_bo>7JXh8wb@zjmF zG9`sI4>E1EwzeKRSex;7#(dXWiv#i17p3@iS|r{r)6gkTie6zUbE|Xm44u>>qshTB zb9RNSo4)zQ{3knlr53HViaG1HL;a6zdFykd?wR{GzcSoXz3<RfJ-^+lx9mU9`?LId zzYwIO?|FO=|0FgBhL<QEee?<sU&AIMHz&L(vm~`h#WOD@HLnE1fpiIbL%jWk13_mh z@JwM`IAuDkX2&hRMzI=hJMJXWR*xnDGrqT5Wo6T5ofG+Ze1~!3V<+L2Zo;v%c6?!9 z`Fu;TOVr}nIp53Am!G%2oNsSe=Vq+7QOJRVll5en5Br6dnPy)e=yVq|&N<HN7oYN4 zsQdJrxQB0aqKkFbu@&%Mzq#w+Bem{mt{|>FZjIJOd$UihakzddxYpfYqU=%N#e&qr zumyKFY`Ro5{Yjq*t4q`Z)#TYrbGv&i4;$UdX0pAwc*l)d4f?6+OC6Rg-~IB?xaOkC za_eIEM`tfe%)J+<AvJCKiX$sbHf)$Zk@flpUH5}ZKUrc|7V^0ze_eBXh0@cDU+kZ2 zynK<?<sa;^TwA2d_TI9*r$VdsOwWbR_-@`2F8EJ9?c~YH=VokE4wX4R<3Q!^8Qw2g zZ6{Cf)V*suPj$}R7{92_t6PsAT@-ghS~5NDU*gH4-rULp(MHC3zq>moZ}(0!OS+kt z;_bF(Qs$?fg`#_31YhiDWGxR_QW)+!<?wfbz>O`x-(+dA86LRCDQ3vZAEHz2C?c%2 z_S}pv&1V*0&HG;8PAkoNe065HEaTR5TT={EU-c==R_(D@_tOsGUNW8kZo!xNu`dn3 z`nXx0t1y}=!f{pZ^M@Dp*L{k8&(2IdF5a8FETgc$DZ|<~^XVNMr7wyt48JDS*aU8> zvANPEx8?;Ohg8LkCjym^LvFfMIaKot{_pDZ&$z{5w!i&-x7hvm|GGca4SIy-lsvxn zWL!M-J7eWj_Z7va_kE)#e9L}+;nOYe{-hp<IdSSrJn@UR{AZqG6t%M;kN@Nc_APr4 zeauq2;1ehLR_08QSp;{x<_>n%KcAkL_fGsBuv*10Oi%NL7t`{BU5v8-rTfp#Y|FVS z6@5#;|80l)Jh|NFPy3Ev={c{+C;QbmQ`t7+NOP;!h9A$R^y1vomFGNr=%)Eh`EK+< zUikxUZ7(nNHWcz(JTrZ>+Dzy1jfK<J_D&G~e{s`lIg82<6BP4{{?z<4+VwhnIbRmL zXK`-(wI_4q-8RT=a42gi;s3k-{Nk_RNu5;bM@sC>3=Bee*JR+Esg8hUG)UfB8_rn~ zd|Yte*1ql2<P_vM3~snsu=MbqHao_6dxpeKMZX;9jlIblt?hp{Og%A4$+qx|pO@aH zExw+YXT(g9Qwq;sAS$5YKFeYD7mv%!GON^bFYWfdysTW<Xmgd(CY^oDYPRk-x8802 z`#tCy%vUeB%h~g(eb_iHspC+d(szNK*VznroaZZkSSS7E5VOp;8wC~mrE*Iip1<*6 z^9RdUb@QCN4%_kZ7go$TtXx(hBKP<MD_{H*1E<yB#1AuCoOtMM_QPn2rOcy(8HWY= z`im{R1dhL1a47sufsEgchbnWFKDDsKFFopi=|ixLU+{CD(tT;|>kn&2eK(nyzT!8F zZ%y;A`zky01;6KV&fDt9Ths0~@9~FNzWa|q*tEYdu4p{WZ?WgZ!*-cEm(TWUpM?4B zRd?5^9rQMf;QL-!G4s~^%MbKBs#_1QmZ|gn8(;XtwEcd;58d|rg+FZD?F)V=w_msT z(|P!{%)c`a^@a90uKE+&wErSo{qzU&SN;Vz)d&90=ltjVcDB$S*SC?KjOjdc&v)gV zaXH6twE2jR(B@kTM^w&Pq#rf2IFKW>+1qE@4VF&d6ou`szqWSVljeUJ6;q-dWg`$K z%&B|uz?EH_<~Clc>)qx0wf*XehW+0C?MlqNJWJj^6P1p#j+XG@a8c%r?R}Abr64Fd zz{fcD?%CD5B_no)nX*S&&OUNL>xLei>uV;SoSFC9zFqTUTf@6t+IixHdo9&rIuVBt z$aH*D7Q64&6>BS!b|LDbTrdBR?Rq@FelK?ZmloS^-XUnZjE&v&zgj4N>}&rVNr?+e zbukkSGxOHf^0wq;-xa%(RK+nh?Sa6L#)APn?AN&-u?z3Ht1cib<<!7^OUwUhUheJI zhcW-^4@7!9$X0IKYEo`qp6OV0j8${m^VQcjlpWkROUZAMs+5n=5z$$<{6Fs4@W^Sy ztz)aEvhG#b`)Pxfq0VjRPVU2xrnsAO?wx;dPuEA!tqTI?#TwQ9Z|jNCcy*pP+f?F; zQ0LCj&`_RbVIoJg-rbVB$Zl#YVxu1K`)NjT?(?>+j1w^%8$L}jXFIH9m|7vfC%%pU z0DI~MMa{$Q4-Oj@AJCiWo5q#)^-_^!UQ2&KdDod`hx9rvQ_XnaEt~j~!$N<Jd4RD) zZ|XcNk;B)l{Ci!6n|A6+UX@lcb52v;z|HORSVsO|qN{;$yH}EXoAd**&a+c)>V$Q@ zygierJ=W@3^XmAkS5r@`gsE-5xupM&Mf%*1_oc6|E4zKnn0|1{*B{qStQ<_;Pl%ZQ z^1R-i@=WRN^Al_4#OiF^X|$W=-K3i~X7c4{);lf{l!`qlrqFZxzKh=tO=I)V9%r<T z<=3uJ>HiTq^~|b^nL8fv&Ahsyl_xEYzbG}RU$xXm!&ml{%&Ie47q@>X{K4|f?eV5u z=fvw`y7LbB#74!%Muwg{@a~e*!3=x3w?S`2b)C7FnV!pxlzj0n`s%Ag86|69Mc%t7 zR<Q8a<=VRX_lFwp-@kPC(W|J<hgt>d?61aMu9+2Yv*Pu}s{Qq^udSULEgm*$;@#DM zB{;7BySkQ9e%*(_<yoGgx{d*B!ox$q1*=RBmzY&6T{Fe!x5P1@=<BDBc8lxYRM_mg zhHvXB{-aM%o}I0^yF2iL`y{)Wv8TjN=Wwo`9?3j+pDRN`gh@H;ty_9iBb5~+UHHpi zy!<4&X6N$XpN?8I_wq-tR2SmvT7B3{`Ra}ncS=*E#aaI+WNhB&_(9F_?Uq{KP~YD7 zr$ROE-x3x$e57OIssFl14OMRh*{osO&Tjc^*`5arwfr8N8_y`*x5(%7_9QFuRcR*W z)%VKW7?-V_%Of_|zuxAYXrZZ@1eaP?RG7MQRfdQ3UQx*@UtO;FCZ1jD9=k|mx6+G% z@RH5m_vJ3f7-c8TNS{7&=Zy5=O^SE68L=;VC7U~UbIXNUl0HY07Kf^BnIRSaRilk# z^T`~`!%imJ>K$7WgudRIxB32@|5YI`{uXm+o5wcur3KjKMF#P=dY*hUo9#Zwnbt(p z1uy5m5@?(1x}&9Wa{%M=c5m0&8eexDsNlE!^wi+fmyCpfUi0IRUzM?}k7!@$v)bzz z3zOFh$B@0O-qCKYJkz;%*e=X=mbeflqg&D!$FsUXe(@ZWCvyVN8897NA@26xS3kkq zO;I}U)>^(4pYkX1E<e5<u3Xi$(ARUWT+h;qk3AC)wf<GPwJ>Pw{K9>fKK?FQ*Oi!m zDf}`}=_y*IeLTKy$IAt?1pLijsULZ})oiiXyB9q*p_|Oh<Lpw88~zYboP6Q!EivBt zO~S&J%w=56Q{EqQ5%?V>DwubsBUNUbmfT&jOB+nIZf5_u6FT=`hAEf%spKg~zq;gi zywQ^g&X^V2dvps2Q`P;8s}+OeUheZ(F<0%GAbd{egW7{C6X~gZZ+9(`^4r4evZzpZ zf!c*5nxd`uq(tsKGH2p^vZ%|EW$qMnm*p4Z76fpZR3A$<)LoZsq@$Pc$hu0ak-MJb zXv4wM1Xk(2feZ<1IR~d5413a@VE1kN(=X}C_0@j=_ue=j-WSo%FPkI!=flEgq3g=# zlF@BzkJfUW`Q7+0r{wSBpjl<f*@w!u{pN`Hu<`B3Wd~mcsw~MnpZGw|y;7>n_;uNX zbhizTE;|ZE9{O%*XnFg(BO!SLTXp+)p1h~F_fl3F&wiz&Y4Nr+D(m$czt_qd<uj%n zTrac#_lMc-_ZjLwf85Qu-|f$;kJ*RT-+f#<Yp&Sxo%Xz&E+^fKNdKlG9I#!)h1=Ix zB=~OYGPTZ?s;$dplCsJct~{A^YRln6bEa+DoBp~u^_VrQzRzLJ?F&2SoMW83sK@H) zv%qBv59<1jM5Ti#f8S9sVI|-96<@8^ZY`Y@T=e6cL*-3_DG%brmS4>j{1x$9N3NZ_ z|InQ&Ox-Ip+owL9Q~Ca8dePB>$U?U>i!CyjGilw+Sz*C?elJJ#$+w2GZJDhu`6oLz z-M%<0DQCU>)@7H=*`6>P#Lk@9HtFxaKx?n|o1vOJ&ZOV?)WOgy)yUPt7$?{;v#jaj zt`)A`K~Hj`kF66<DdM_!rnRc~ifO?t-Z^Q^%WodYG;?~zsyyYJ)WVWAB@%MZK6>9) zsz)r04eiUzW4@f5u#4BHd|sY^;AZxae*W0=#_R6uTP;4``Y`!qTUPACl|C!ZX_>e# zw5r<Yx>Kl??`7CyoA*Ya3exLNoITTWM<=JKXp{2n$$ej|6INbMy7|KPpMtBRTb*vN z?uSbWYZqtwKfIzL$`-MCWuZa%vBgv7s{bmJx^=HJIV>mtqsC_6XC^UE9Jj_U*(N&E zGNN<O@`cB$Sw5sQy`0n3E%2WsCWb{lF>mig9#ye5fz#g@7%!I$t&j{qm%Kq*t!m0o zHSMNl2YT1Eepopx^g`M+!`Z3J&%exa<z-h?$%+ZPU2PDqF*pBMDYu7t;Df#f>&0`_ zdF7V)ZB9*=+H+{{=Zn?u2f|t07YOMeW_NH>tS=KNU3tpt-O*YDL)L#)ukAKWi}1hV z-O;R(`rWy6`<XlTa!(X9?RRY!x%TLP#nO-Jy$ip5y%E%;9=Y3^_v-QmX%cF}<w9AP zHheI+vTgTN*C)-F4X&=e(mBcBWlGKVBF&HN2c}%s=w^*o%GkSrx5<oa*OxgN3pek- z8?ffgj$*aN(z7<nxz<H4bUqNDer%Il&dWzDinx#K>)!2cPdHQ*@k&oPZk74;87DW- z>*2EYS+l0({mt;>i;I4BX5H!k9U!_({(b5EgWLs2*2YY0dzPqS%XRuUpQA&jr}OID z2QL>`8f8W_3WalYMkcEiu}m>5`80L6W7s;SG>J7{zdJ5Xd}=M2xYS{T)@rvY<*CQR z`!!-C_f@;RJozcx?T+%Hrlenjc|RWUmS~5rogUHtT;vO1^W9>hD(fHx`PO@O=M{JC zI;`9D?4b|qK4$w(m-_Dex~0bS-mgm5`@Qx+{)Gp^d1p-YpM`TNo%p7>+l<vQ<+|eU zcOo&pZ>m!6H(zDB$$KKt=U~zM7c0wtO^9zh*t=P4)9fIF?;0$>H_dyketxN=_u*$f z@A(cM=oImJVZpV~?!DrUXGiK5el7m6=Yp2BUrE#ame@9Z87H>%4>yeG?FtUyn}2AL zh2OFl7Y&W(x9vWDdc#JG!;9Ci3@@lZwK83HbARM7AHHz^`7=9OJEnHHv<Me=>~rR^ zFj79+bc<yxw-&dR<Au&9KcOp%FH#&u9hY-hg$68NaG7PU-U}W_Z<e{5FLWHeS#_PO z1SF)&{wRoOUe|hf*q}vx>y>pa>x<-Bgn#~&u;ENsP*PG=%yVMf`@^o6xn3Hy5KU5e zUwJ$a1B10BWEB7x0|+eh>jEtu2Qk4IU!Nr{Kd(f;D784hv?w{XSU<p<nMH(wgMovg zb#*<8Ay#;%PS6bTO)V}?OiwM=D=5k@NG&SKOf6nJCA<8xn?T$C=ixkF(hGW@dOLMI zQn~VkN$<+Sjm*A{+g9I=taO~#vZXIq<L_J9y=Kb;EFN;(*(rNl|9<m%oyz+4^_$P% zvXXszbWzF48^P9Hi`<r9y>)9!QM+66vbcp?WZHIqH4ZhJ`|R==jrX5)Vt$v2Z9SH} z+;a7e2|5Q<fBqMX@6EXstfw70(<-q$?<()XER7v^MGq;>zvQB;aoW~bTdZaEiCt4V zpU>j<*HfPB-*siBkMY?#^2swrU6?LD<(har&U5>ue@^G#9Isunr{t9Q{Egp_#%;Eo zeb$Nfu7UpKv|TxCXZ8PfS8smk={#lnWW7yOR(E;T8J8|y(ks4%EAWz**u{{u8v359 zs;6h1&wd*Da?j~WzN^B_9W{=H?ko9trG8VqJd5hL<Gh=awH7ZhU-Hjj!SB6^^*c0s z(*IsOyt!M@_VwKP-`N)bJ2~OpxtA|;3hu~%J<nED=C${rs_iTOKJ(7h?J1J;#8cnu zPg-}+)9mXu-kJ7-8-50@(2B5rz2(WNNh`f(O#0Jx+UHTg!KX(;zy4k0a-KuARQUPF zoY490zqa+?zV+c{^JSaQ3(pz9o>UNZwTS&o67T+RFQ)Da5;FQ(5S;w6N;WLq^H5~Q z>zUe2Z>#gATR%N^uDa)uxqr%vI~|sVHy?WMH2GK1Y23`6^{P1Lpy$%LtLrVCf9Ktt zaJkOz>(MLv8^5ZapL%_jiN3wD_)>xHgLVJ!)l9l{^^>h7$E`%|1*cAbTV-<ohr)?Z z5AG%2Er0yuO-9MjCoL&<wmWy|pVwr4AN8JDlIPymrybj>N}lz|bFaSo%Wi?;_5UKP zHy_r&b!A<muJox>OXI6l7j5)7y5QdKwou{edf)Ocg)?kQHTs)2-C%W5e&zbTx2J|% z-R%xu8qcmYlk@K9JD2|`yzsbl)N#Y*NsZFd`O9{`UswPAZ`&-9yS$-KLcd>oD_?gf zr{!$e?#)|k)1SY~+j9M`M{T+C$Gg?P&(8XsniAdDZvXY2yzKlrb`>}N|GfA(o-N(K z&Q`upZ=T)nx1YX0*N@xt=kfV$&fQKwypP`6;Ct-d)z>AHo*tdO>C@%aH)}qAdtd(k z|IWO+^yp{#YtENP-`%w>(0WDmirXv71Ih#5FM7AgZ3UO9+tn3pQv-8jl|SHxxA*Ej z2+NiXaCE>26%%;s@WDS*8>~+^NHO7sjJ!YCYMA#i-fzf1VE#b*0}6NcYv#Q2X^fIg zJdAA&&JBtO1QIw5SR_!mOi>?ne~8s^?_<5+lz(vhgJ=})f9@MTPwd~tgG#!9HFMtC zvM?~@bAn1bMkWykNLjZa0JW^+1ebUqLV)3~BZ&5O4RO@<^mEe>@CIpvlx`qx`pKd# zpov1z8I~d-m2eCyFyY#K9sNArT!TaOeBB@>KrHS;vzP_08)We;XlaR02RDk2Jy0Eq z1&PTSsZhs4tU@2`6-3ea6jftVVo7E;UhNVn+C>-{81jqK^`Z7cv=^79r>EvYO@V|M z=r+6^Hk*v=I2ah#3o$TQ!c74&yzrRfm{eR+l$c!NnVXoN>XDe2l9O8GnwOlPl3D~A zD1!tN!kTU07OBfJF);jLW?(?6gBbL=a61-eO>mgIbADb~YEcO;^G_K|F&Z&3Fo?1+ zFj#<G565eGh%(<TGp8iAh=46B?TL!r3=9lc7#J8pNepfYg9|@yTbx0$pMo4z*u!YQ zY0Sa~W(EdHb_NDpgwYHP47viOnC_HVoN8u*H#&|zI$6oX%)qdcje!Al2O`2Y2@z7P z@(OTu$7_*!oco)7ObiTrSs55W%?*S_z2c-;6yS&39#CFN>h(HT%*enH#l*m%im-%% zfnl>09(!^!3%pY+u}8;Kd3oP6+zbrDG7JpnC`MMw;5O1FH7&6;r-axzpU6_Pv5b*{ z;UW_Q1E}Ca*t1H5pe3$FMfpY0+=tx{cbxAWwq|5tIK#xiV2UuCfq|i3i?Hz(C8>GE znfZBmtvGFSk$o961A_!7x({S^2wFinQz%b8P+rN*z_6JO-FPJfg2sckQ^JZT>;aUv zg+D)(gMmRrgn<FHxdRbKzl`x1@9*nglwVrlo0ylFj;ly|=eGKZ6&C};MF|E5(4t+0 z(W`9m8XZ!Unu^!t?}1CDzp*ed*m0wqZ0C;KWN>P6&d)0@Nz5yOZY)JFrr9s<EZ)h$ zz);J`zyMl^ig0tE4*`?$CX#=@4nKa+z`!8I#K543FqDCTVZJXObMYiV?A53&+-y*d z{mKuw+2H;Sy7y;D?_IT?je&trn1KP*V1S#(pz2S+D7Sprnj>UGK}D0^t~8emObiTW ztPBhq2oo6?7&OBO80wx=SpYq$7~Ry@vX8D_XJTMzVr5{^Mlsbtl7Ol3z8rXcIJ&`K zL#y61gGy3Hbm!K`5HL6(AHMJk-Be$;efu(n85rVp&=b~;SOTU7hq<E%F80V*h6e*E z@@EzjFt;QzDF@algEUk?v32vnd6h^;$o;dZ1@bN840HzF=j@W2hFRW#jDP&iAhm#z zfkBiBy`3_tm?-zcjCac~%1tbRuJK0??SIv2^J*9w7_u>J$tWem79;F_QB$rz)yc%b z;Ka(nU<?m?5W}mSI9qZP3n2c$Zo!l*x6bTiWMG)V#K2$zG8c|bsz|iJ0J{xaL)d@D zGBPlzVAv2+L!u2h0!e)3a?5Qj3=Cx)=zb8cBhdyE?0(o#v?e@+5mL6IhLUzOi8h#F zw?Rz$f$LQ!28I<Z=q;g#EkxS@TBuUtnpaYUrMU&l8OzR`+ZfKwz_5@Fy@w#(L9`_y zpgfJ;6Ic2sD`YS-Fcf37v@UfMXMTQJYEfc3^e7<oEcapc{HZOB3=C!%S#D-8NybAm z1dfc|HIe(*Aw~v<^BA@?_mg1@jx>9ni6?$PBLl;3jG$UQkvLn*O7O%)<knT2RxvU# z_%SgsfR6Zt=W2$NlZi6kCABOw8Am*ra32=SVq##Jh>=z=OeN0n%%arflKi4dJZW{7 ztH%Acj0_BMOz8c<`7?;J#4R-uv{4v)N{!IIIeQut1H)Ao^de)`EK*GO$t*6xZi6sa zhlnpD1H)rbf<**B0|UdNxun<-l$xAhl!D!kIf75upI~5M;A2GhMeux5><CFr$I@5@ zl^9KXdYM3VX*&~oiBY?NI2#JmbMd6pnQsgyiLfv*tmQ!OyZSC7%6#{n$~5Qv+=Be# z%#u_P1A9o#t~rn#%)-F%gOh>54kb2DE+gF@*ggmBc5x_0_JitdD^~OlVaIBs?ZR)x z1}~rNv!F#+?C4_)CF_W`A~-X*AP0Wf6n4LS<*8XA&&<G3g;8Uy+C;QPc;esjm<KZ> zBLl+(M)aXE&27Y*UyuO{tW4M?0q8YHlkc9#pvGDwMlznboj7X>@{93!!^|a1M1`4w zA%p`xo8;~!&ivxiBs}JSImfB|l!bvoh#TGfk9&wR-y=0K1&{gnKAfBWpNWB?3?rJ& z4iRU5MrtA+^Uq8><$Z*SfuWQI-ThOK5@&vHNd+GBb2bTV2MtYGVze=Lo*>G6@6@8a z%)In~#7r!MtDu6=BQ9(~C#X2b80G0ZMYIjUrAgo(5%#>6rK00|laYZTn3;jW2BnOu zIzzG*kR}d}Ci!-Wt6xE$naG50)82Dr+JvK-^YGQxa{^2Z46+yzzu^MWHsOhQfo+yf z^B5Tzd@x!G3YUp8-zPCIJ-8A_?YDu=LCOyl=@@mm%vDlM$5)4c5M)?7myv<N2BRT( z?iz7+WTxY3=xjK&^9`tfw-F;}oVr1h@xiG$8aj_uMA(BF85rC_<1Z-5_SG%YY$#2_ z)tLIi`6FD0iGkr4Gy1Uo!aJnf0m&OUn*VF2se9!xF)%#Fm_^aJPn=cx$@q%G_T;b1 zE0`D<bXn0`=3gEXX+G#yXzWGE^q4kdJ<#wx3;J-u&nF}pj=NR6_Vk9QlNlHomN1}q zQ#+oMU;+Muu=hgJvJDIj4F4I>8*2?O$gspM5!~0n9%3$s6cg2$85q{Fqt{GxUJ_-O zZ(>COo&w4=RcaZikH?8IfTQ%5DD(Xib5rq^A9gbz9%^G^U|5P#!rFZx+5$WtFgNfq zab;y-*vp4LIiT{HDD(Y`jqn&B>Arcw0wxBA0~p!i#1Ep34@k_*FUHYP%`={0)5XWY zpel(TxkrB!XLx=wzFv04!Z%U5j0_Bzy`%M9j5w!<!NcO<c7T3BQ7XQ~6SP@$TO%U_ z1E@SgoeQnuA=3Q(^rFOE>`DJ;n|pOHBLjmyM%56_N0jM7iFxUG(`K3Q9$f<_1_pZ; z^s>%NfG8V+lZ!G7aMU~eoSyFUnHU)EVw82)g-9?QcUiaVt=dIU5B?D&dOz;EC<zwe z%e-?KOrOtZU|`t9fL>m=i<4jl?*98pM}g#KMh1q%7;)S#L7WAdpv#_uaaYaBvscx< z2F+zKqjyDfq)4>^Z^gW9PVjA3CI*H^42urPkY^E=HY;ek#u*`g^|R~@3~i$56KQ(# zL|KHRxC5D;o;Ty=Y9<B-0ao<-GhCf`vt3~0XV^1#_wJ9^otPOI*07@|+;lDCEx}oB zg8cF3*sN1xj0_A%F<PxWdbq7{Pt8j$%1kCaBmF63#wB?c28I|;^n$xlAGh&fbHS?u zid0;4lTuSsQn3u2ft+9b!(yvB3j@OzjQ%=<36bVkl%y8rCFWqp0LXmK2$4{GP^W<j zeOP0<1##vh{DNbQ6lBfoa5cXDEDQ`EI2jl;QJUViRzz8Y-Sx`Wcjd1#FfiP}n4u1~ zCtxhj8EQ};y0z!3gCr{hgDy9E;%{&u&Rhb^Za|hahRuEF&dk7Ylnp)c|8phI61)p; zKvo1aHMl=yVqiGJiazYR!jm{F2rad7_;9*FkePuYm5qTx1tnr%`{1_0uQVqIb|(({ z2w3_(ExlDN3=CVj(TCIh0&trM86pIyMVv7UN{9)sV*BPWFfbfqK%aUJ3&mr4No5ZH zr6VW2HhauwXJFtHz-T~(;W0PN-7%*iBM~$l3?3K8p3F7pz0CuyW%K4h4`in}{Dv1L zW10v`7+Np3cBU~hF#N^HI4hIzn+Q9M9J{&Cd1p=6WMp7?$B4dyCOw5XbA1yFFpUPq zoM@<bq9ro}LlGPLI+xd}c#U>SEY3`Z+*g3zWbt*^>>o2RFvzf@r?|RI{3e&CrKJ|7 zLRRx(OV1#8hfAd?@v$;6D08DPM%$l**L3HcOdLVc_&_>OhlzpVB{O<rQz#;6By0#e zAItb5$i3~s$K_A4FfeFwF))BGLqTNfl_mHM&(FbSrsuaF-N{Ul<M2^e5*@E3U?z0J z1bfVV?3}0;#Kgd`5o2;}Qw?$E5(<rzf8)JCWrY+*MoFtDU<2MIs$m8u%uK8d3=Lf9 zD|Q+h2%4LpQwG0M488cYpW(~1kC}mCH5+;Xce@q8!NI}c6>>O|h1>4-BGAG?b~XkE zGenwTU|{&ziQnAP;*$JaCt|Y7DKBRW(0tSdR`iUh*h_>R1WHl<J#Wv4Gchn^vZ5Ct z921Bz9qAlr<S++i8S%t-^@|x87_Kp(N9N8+cugjh`fln^c%ID6z`)9mzWi$IWV{Bu z=Hz4+U>j@zIrsJb<MkIo3yB%ggE?<HUQ>x$7QNEge61lP0|TfBgt}&G?hGPKCln;Q z%i48A_!t;8<j{*#-C6jJ$GRpD6dr3+f`8v;Vql2J7}>e9f}oLv+}ma@RbI`+z@Wv( zz~F(BZ+O<=H5}XpNi4|+EkiF!tte4(FG?)P$V_(5&jWFxON+702Y|e^=u?h>H#-AE zoG|)W*xz*|*^0f~)#BZtwS$>~;Tb!61+;t{e&bR6fZgz$?LRW^voJ8+=Rsc;w`Ug# zh7(x5Z)N)Qcmi|<5bA<%#skFI;-8e2np}d%5>PWMkWFUtPZ0)&!{+D(!?A<JSW;}{ zf<264WBj~8^F5&1B-GMa;yRHAd-}UpB&QaXV4aEvrJ+~PUOe}QE`CJa7I5kYk#+=? z=9OgTrV_Ad`)^IvZYBnXPb}!=QPVBF7J;w&C6obo?Ywm1D5!_aj9%<#-^FXXrwcp_ zVvht{r)9gunHU)UGou$pUH9>t?30;?WgHk3<`-l4gic{)VCdsP&sbj`5;QWg$h{~r zB{LP<+GCL6niKnkpRhA9tmjAXgg<?b-|&3UL=LV7uD~LLD_P7846dB$4Mv3zc#XwV zqkh+qZcAliV0eL%B<_7CY$l;3vH0(Q*PqM`4Byz%BW~e00;ZQ>S%D1-TjVS2QP*|9 z{e|Di{G7^kY^y;)rXt^rjoNOm{D;@npw#4&M9_FB_LTcd5OKFH>Y}?0CMKNI0l{JJ z*lyWIZw;MBx@Qs9(f`;87+#!=bXhLCxybj{p>|Bp^WZfX>CQ%UGm-D<LT#*E=f`g* z*8A^}jR%$g$d@CbZgjI2CSW|)tG|%V2c-{ZC&WD^Xj>G-@SBfx;S#!`$S2RE?ShfQ zYiJ0@g(v7nBOiK>x(lXO5x>!}gL`2I*`u3`d^|8}qKj1~&ScD-0*XQ8<7iRWQ}=2R zXD+_N2xJ5D`G2TMuv80=4dplvxkU~bknzZ;o}qdm%@DWo@RQC|Kr6LTj}%0=0r`vq z)I@mRga{ju!yU4f1KaTikd`xOD@U^<ZbQKnmdJ-4AT|Vpjypi!V~o20@C5OO!Z*wy b4nGL+W@Q68a2dlgh7C3h47qMh3=9ka3AS%4 diff --git a/jhotdraw6/nbproject/build-impl.xml b/jhotdraw6/nbproject/build-impl.xml deleted file mode 100644 index 9abbe458e..000000000 --- a/jhotdraw6/nbproject/build-impl.xml +++ /dev/null @@ -1,547 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -*** GENERATED FROM project.xml - DO NOT EDIT *** -*** EDIT ../build.xml INSTEAD *** - -For the purpose of easier reading the script -is divided into following sections: - - - initialization - - compilation - - jar - - execution - - debugging - - javadoc - - junit compilation - - junit execution - - junit debugging - - applet - - cleanup - ---> -<project name="JHotDraw6-impl" default="default" basedir=".." xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:j2seproject2="http://www.netbeans.org/ns/j2se-project/2" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:jaxws="http://www.netbeans.org/ns/jax-ws/1"> - <target name="default" depends="test,jar,javadoc" description="Build and test whole project."/> - <!-- - ====================== - INITIALIZATION SECTION - ====================== - --> - <target name="-pre-init"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-init-private" depends="-pre-init"> - <property file="nbproject/private/private.properties"/> - </target> - <target name="-init-user" depends="-pre-init,-init-private"> - <property file="${user.properties.file}"/> - <!-- The two properties below are usually overridden --> - <!-- by the active platform. Just a fallback. --> - <property name="default.javac.source" value="1.4"/> - <property name="default.javac.target" value="1.4"/> - </target> - <target name="-init-project" depends="-pre-init,-init-private,-init-user"> - <property file="nbproject/project.properties"/> - </target> - <target name="-do-init" depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property"> - <available file="${manifest.file}" property="manifest.available"/> - <condition property="manifest.available+main.class"> - <and> - <isset property="manifest.available"/> - <isset property="main.class"/> - <not> - <equals arg1="${main.class}" arg2="" trim="true"/> - </not> - </and> - </condition> - <condition property="manifest.available+main.class+mkdist.available"> - <and> - <istrue value="${manifest.available+main.class}"/> - <isset property="libs.CopyLibs.classpath"/> - </and> - </condition> - <condition property="have.tests"> - <or> - <available file="${test.java.dir}"/> - </or> - </condition> - <condition property="have.sources"> - <or> - <available file="${src.dir}"/> - <available file="${src.resources.dir}"/> - </or> - </condition> - <condition property="netbeans.home+have.tests"> - <and> - <isset property="netbeans.home"/> - <isset property="have.tests"/> - </and> - </condition> - <condition property="no.javadoc.preview"> - <isfalse value="${javadoc.preview}"/> - </condition> - <property name="run.jvmargs" value=""/> - <property name="javac.compilerargs" value=""/> - <property name="work.dir" value="${basedir}"/> - <condition property="no.deps"> - <and> - <istrue value="${no.dependencies}"/> - </and> - </condition> - <property name="javac.debug" value="true"/> - <property name="javadoc.preview" value="true"/> - </target> - <target name="-post-init"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-init-check" depends="-pre-init,-init-private,-init-user,-init-project,-do-init"> - <fail unless="src.dir">Must set src.dir</fail> - <fail unless="src.resources.dir">Must set src.resources.dir</fail> - <fail unless="test.java.dir">Must set test.java.dir</fail> - <fail unless="build.dir">Must set build.dir</fail> - <fail unless="dist.dir">Must set dist.dir</fail> - <fail unless="build.classes.dir">Must set build.classes.dir</fail> - <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail> - <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail> - <fail unless="build.test.results.dir">Must set build.test.results.dir</fail> - <fail unless="build.classes.excludes">Must set build.classes.excludes</fail> - <fail unless="dist.jar">Must set dist.jar</fail> - </target> - <target name="-init-macrodef-property"> - <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1"> - <attribute name="name"/> - <attribute name="value"/> - <sequential> - <property name="@{name}" value="${@{value}}"/> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-javac"> - <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3"> - <attribute name="srcdir" default="${src.dir}:${src.resources.dir}"/> - <attribute name="destdir" default="${build.classes.dir}"/> - <attribute name="classpath" default="${javac.classpath}"/> - <attribute name="debug" default="${javac.debug}"/> - <element name="customize" optional="true"/> - <sequential> - <javac srcdir="@{srcdir}" destdir="@{destdir}" debug="@{debug}" deprecation="${javac.deprecation}" source="${javac.source}" target="${javac.target}" includeantruntime="false"> - <classpath> - <path path="@{classpath}"/> - </classpath> - <compilerarg line="${javac.compilerargs}"/> - <customize/> - </javac> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-junit"> - <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3"> - <attribute name="includes" default="**/*Test.java"/> - <sequential> - <junit showoutput="true" fork="true" dir="${basedir}" failureproperty="tests.failed" errorproperty="tests.failed"> - <batchtest todir="${build.test.results.dir}"> - <fileset dir="${test.java.dir}" includes="@{includes}"/> - </batchtest> - <classpath> - <path path="${run.test.classpath}"/> - </classpath> - <syspropertyset> - <propertyref prefix="test-sys-prop."/> - <mapper type="glob" from="test-sys-prop.*" to="*"/> - </syspropertyset> - <formatter type="brief" usefile="false"/> - <formatter type="xml"/> - <jvmarg line="${run.jvmargs}"/> - </junit> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-nbjpda"> - <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1"> - <attribute name="name" default="${main.class}"/> - <attribute name="classpath" default="${debug.classpath}"/> - <attribute name="stopclassname" default=""/> - <sequential> - <nbjpdastart transport="dt_socket" addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}"> - <classpath> - <path path="@{classpath}"/> - </classpath> - </nbjpdastart> - </sequential> - </macrodef> - <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1"> - <attribute name="dir" default="${build.classes.dir}"/> - <sequential> - <nbjpdareload> - <fileset includes="${fix.includes}*.class" dir="@{dir}"/> - </nbjpdareload> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-debug"> - <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3"> - <attribute name="classname" default="${main.class}"/> - <attribute name="classpath" default="${debug.classpath}"/> - <element name="customize" optional="true"/> - <sequential> - <java fork="true" classname="@{classname}" dir="${work.dir}"> - <jvmarg value="-Xdebug"/> - <jvmarg value="-Xnoagent"/> - <jvmarg value="-Djava.compiler=none"/> - <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/> - <jvmarg line="${run.jvmargs}"/> - <classpath> - <path path="@{classpath}"/> - </classpath> - <syspropertyset> - <propertyref prefix="run-sys-prop."/> - <mapper type="glob" from="run-sys-prop.*" to="*"/> - </syspropertyset> - <customize/> - </java> - </sequential> - </macrodef> - </target> - <target name="-init-macrodef-java"> - <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1"> - <attribute name="classname" default="${main.class}"/> - <element name="customize" optional="true"/> - <sequential> - <java fork="true" classname="@{classname}" dir="${work.dir}"> - <jvmarg line="${run.jvmargs}"/> - <classpath> - <path path="${run.classpath}"/> - </classpath> - <syspropertyset> - <propertyref prefix="run-sys-prop."/> - <mapper type="glob" from="run-sys-prop.*" to="*"/> - </syspropertyset> - <customize/> - </java> - </sequential> - </macrodef> - </target> - <target name="-init-presetdef-jar"> - <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1"> - <jar jarfile="${dist.jar}" compress="${jar.compress}"> - <j2seproject1:fileset dir="${build.classes.dir}"/> - </jar> - </presetdef> - </target> - <target name="init" depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar"/> - <!-- - =================== - COMPILATION SECTION - =================== - --> - <target name="deps-jar" depends="init" unless="no.deps"/> - <target name="-pre-pre-compile" depends="init,deps-jar"> - <mkdir dir="${build.classes.dir}"/> - </target> - <target name="-pre-compile"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-compile" depends="init,deps-jar,-pre-pre-compile,-pre-compile" if="have.sources"> - <j2seproject3:javac/> - <copy todir="${build.classes.dir}"> - <fileset dir="${src.dir}" excludes="${build.classes.excludes}"/> - <fileset dir="${src.resources.dir}" excludes="${build.classes.excludes}"/> - </copy> - </target> - <target name="-post-compile"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="compile" depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project."/> - <target name="-pre-compile-single"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-compile-single" depends="init,deps-jar,-pre-pre-compile"> - <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> - <j2seproject3:javac> - <customize> - <patternset includes="${javac.includes}"/> - </customize> - </j2seproject3:javac> - </target> - <target name="-post-compile-single"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="compile-single" depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single"/> - <!-- - ==================== - JAR BUILDING SECTION - ==================== - --> - <target name="-pre-pre-jar" depends="init"> - <dirname property="dist.jar.dir" file="${dist.jar}"/> - <mkdir dir="${dist.jar.dir}"/> - </target> - <target name="-pre-jar"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-jar-without-manifest" depends="init,compile,-pre-pre-jar,-pre-jar" unless="manifest.available"> - <j2seproject1:jar/> - </target> - <target name="-do-jar-with-manifest" depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" unless="manifest.available+main.class"> - <j2seproject1:jar manifest="${manifest.file}"/> - </target> - <target name="-do-jar-with-mainclass" depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" unless="manifest.available+main.class+mkdist.available"> - <j2seproject1:jar manifest="${manifest.file}"> - <j2seproject1:manifest> - <j2seproject1:attribute name="Main-Class" value="${main.class}"/> - </j2seproject1:manifest> - </j2seproject1:jar> - <echo>To run this application from the command line without Ant, try:</echo> - <property name="build.classes.dir.resolved" location="${build.classes.dir}"/> - <property name="dist.jar.resolved" location="${dist.jar}"/> - <pathconvert property="run.classpath.with.dist.jar"> - <path path="${run.classpath}"/> - <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/> - </pathconvert> - <echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo> - </target> - <target name="-do-jar-with-libraries" depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available"> - <property name="build.classes.dir.resolved" location="${build.classes.dir}"/> - <pathconvert property="run.classpath.without.build.classes.dir"> - <path path="${run.classpath}"/> - <map from="${build.classes.dir.resolved}" to=""/> - </pathconvert> - <pathconvert property="jar.classpath" pathsep=" "> - <path path="${run.classpath.without.build.classes.dir}"/> - <chainedmapper> - <flattenmapper/> - <globmapper from="*" to="lib/*"/> - </chainedmapper> - </pathconvert> - <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" name="copylibs" classpath="${libs.CopyLibs.classpath}"/> - <copylibs manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}" jarfile="${dist.jar}" compress="${jar.compress}"> - <fileset dir="${build.classes.dir}"/> - <manifest> - <attribute name="Main-Class" value="${main.class}"/> - <attribute name="Class-Path" value="${jar.classpath}"/> - </manifest> - </copylibs> - <echo>To run this application from the command line without Ant, try:</echo> - <property name="dist.jar.resolved" location="${dist.jar}"/> - <echo>java -jar "${dist.jar.resolved}"</echo> - </target> - <target name="-post-jar"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="jar" depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR."/> - <!-- - ================= - EXECUTION SECTION - ================= - --> - <target name="run" depends="init,compile" description="Run a main class."> - <j2seproject1:java> - <customize> - <arg line="${application.args}"/> - </customize> - </j2seproject1:java> - </target> - <target name="run-single" depends="init,compile-single"> - <fail unless="run.class">Must select one file in the IDE or set run.class</fail> - <j2seproject1:java classname="${run.class}"/> - </target> - <!-- - ================= - DEBUGGING SECTION - ================= - --> - <target name="-debug-start-debugger" if="netbeans.home" depends="init"> - <j2seproject1:nbjpdastart name="${debug.class}"/> - </target> - <target name="-debug-start-debuggee" depends="init,compile"> - <j2seproject3:debug> - <customize> - <arg line="${application.args}"/> - </customize> - </j2seproject3:debug> - </target> - <target name="debug" if="netbeans.home" depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE."/> - <target name="-debug-start-debugger-stepinto" if="netbeans.home" depends="init"> - <j2seproject1:nbjpdastart stopclassname="${main.class}"/> - </target> - <target name="debug-stepinto" if="netbeans.home" depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee"/> - <target name="-debug-start-debuggee-single" if="netbeans.home" depends="init,compile-single"> - <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail> - <j2seproject3:debug classname="${debug.class}"/> - </target> - <target name="debug-single" if="netbeans.home" depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single"/> - <target name="-pre-debug-fix" depends="init"> - <fail unless="fix.includes">Must set fix.includes</fail> - <property name="javac.includes" value="${fix.includes}.java"/> - </target> - <target name="-do-debug-fix" if="netbeans.home" depends="init,-pre-debug-fix,compile-single"> - <j2seproject1:nbjpdareload/> - </target> - <target name="debug-fix" if="netbeans.home" depends="init,-pre-debug-fix,-do-debug-fix"/> - <!-- - =============== - JAVADOC SECTION - =============== - --> - <target name="-javadoc-build" depends="init"> - <mkdir dir="${dist.javadoc.dir}"/> - <javadoc destdir="${dist.javadoc.dir}" source="${javac.source}" notree="${javadoc.notree}" use="${javadoc.use}" nonavbar="${javadoc.nonavbar}" noindex="${javadoc.noindex}" splitindex="${javadoc.splitindex}" author="${javadoc.author}" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}" private="${javadoc.private}" additionalparam="${javadoc.additionalparam}" failonerror="true" useexternalfile="true"> - <classpath> - <path path="${javac.classpath}"/> - </classpath> - <sourcepath> - <pathelement location="${src.dir}"/> - <pathelement location="${src.resources.dir}"/> - </sourcepath> - <packageset dir="${src.dir}" includes="*/**"/> - <packageset dir="${src.resources.dir}" includes="*/**"/> - <fileset dir="${src.dir}" includes="*.java"/> - <fileset dir="${src.resources.dir}" includes="*.java"/> - </javadoc> - </target> - <target name="-javadoc-browse" if="netbeans.home" unless="no.javadoc.preview" depends="init,-javadoc-build"> - <nbbrowse file="${dist.javadoc.dir}/index.html"/> - </target> - <target name="javadoc" depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc."/> - <!-- - ========================= - JUNIT COMPILATION SECTION - ========================= - --> - <target name="-pre-pre-compile-test" if="have.tests" depends="init,compile"> - <mkdir dir="${build.test.classes.dir}"/> - </target> - <target name="-pre-compile-test"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-compile-test" if="have.tests" depends="init,compile,-pre-pre-compile-test,-pre-compile-test"> - <j2seproject3:javac srcdir="${test.java.dir}" destdir="${build.test.classes.dir}" debug="true" classpath="${javac.test.classpath}"/> - <copy todir="${build.test.classes.dir}"> - <fileset dir="${test.java.dir}" excludes="**/*.java"/> - </copy> - </target> - <target name="-post-compile-test"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="compile-test" depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test"/> - <target name="-pre-compile-test-single"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="-do-compile-test-single" if="have.tests" depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single"> - <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail> - <j2seproject3:javac srcdir="${test.java.dir}" destdir="${build.test.classes.dir}" debug="true" classpath="${javac.test.classpath}"> - <customize> - <patternset includes="${javac.includes}"/> - </customize> - </j2seproject3:javac> - <copy todir="${build.test.classes.dir}"> - <fileset dir="${test.java.dir}" excludes="**/*.java"/> - </copy> - </target> - <target name="-post-compile-test-single"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="compile-test-single" depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single"/> - <!-- - ======================= - JUNIT EXECUTION SECTION - ======================= - --> - <target name="-pre-test-run" if="have.tests" depends="init"> - <mkdir dir="${build.test.results.dir}"/> - </target> - <target name="-do-test-run" if="have.tests" depends="init,compile-test,-pre-test-run"> - <j2seproject3:junit/> - </target> - <target name="-post-test-run" if="have.tests" depends="init,compile-test,-pre-test-run,-do-test-run"> - <fail if="tests.failed">Some tests failed; see details above.</fail> - </target> - <target name="test-report" if="have.tests" depends="init"/> - <target name="-test-browse" if="netbeans.home+have.tests" depends="init"/> - <target name="test" depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests."/> - <target name="-pre-test-run-single" if="have.tests" depends="init"> - <mkdir dir="${build.test.results.dir}"/> - </target> - <target name="-do-test-run-single" if="have.tests" depends="init,compile-test-single,-pre-test-run-single"> - <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail> - <j2seproject3:junit includes="${test.includes}"/> - </target> - <target name="-post-test-run-single" if="have.tests" depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single"> - <fail if="tests.failed">Some tests failed; see details above.</fail> - </target> - <target name="test-single" depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test."/> - <!-- - ======================= - JUNIT DEBUGGING SECTION - ======================= - --> - <target name="-debug-start-debuggee-test" if="have.tests" depends="init,compile-test"> - <fail unless="test.class">Must select one file in the IDE or set test.class</fail> - <j2seproject3:debug classname="junit.textui.TestRunner" classpath="${debug.test.classpath}"> - <customize> - <arg line="${test.class}"/> - </customize> - </j2seproject3:debug> - </target> - <target name="-debug-start-debugger-test" if="netbeans.home+have.tests" depends="init,compile-test"> - <j2seproject1:nbjpdastart name="${test.class}" classpath="${debug.test.classpath}"/> - </target> - <target name="debug-test" depends="init,compile-test,-debug-start-debugger-test,-debug-start-debuggee-test"/> - <target name="-do-debug-fix-test" if="netbeans.home" depends="init,-pre-debug-fix,compile-test-single"> - <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/> - </target> - <target name="debug-fix-test" if="netbeans.home" depends="init,-pre-debug-fix,-do-debug-fix-test"/> - <!-- - ========================= - APPLET EXECUTION SECTION - ========================= - --> - <target name="run-applet" depends="init,compile-single"> - <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> - <j2seproject1:java classname="sun.applet.AppletViewer"> - <customize> - <arg value="${applet.url}"/> - </customize> - </j2seproject1:java> - </target> - <!-- - ========================= - APPLET DEBUGGING SECTION - ========================= - --> - <target name="-debug-start-debuggee-applet" if="netbeans.home" depends="init,compile-single"> - <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail> - <j2seproject3:debug classname="sun.applet.AppletViewer"> - <customize> - <arg value="${applet.url}"/> - </customize> - </j2seproject3:debug> - </target> - <target name="debug-applet" if="netbeans.home" depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet"/> - <!-- - =============== - CLEANUP SECTION - =============== - --> - <target name="deps-clean" depends="init" unless="no.deps"/> - <target name="-do-clean" depends="init"> - <delete dir="${build.dir}"/> - <delete dir="${dist.dir}"/> - </target> - <target name="-post-clean"> - <!-- Empty placeholder for easier customization. --> - <!-- You can override this target in the ../build.xml file. --> - </target> - <target name="clean" depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products."/> -</project> diff --git a/jhotdraw6/nbproject/genfiles.properties b/jhotdraw6/nbproject/genfiles.properties deleted file mode 100644 index 56237f378..000000000 --- a/jhotdraw6/nbproject/genfiles.properties +++ /dev/null @@ -1,8 +0,0 @@ -build.xml.data.CRC32=7762c684 -build.xml.script.CRC32=79add0a4 -build.xml.stylesheet.CRC32=240b97a2 -# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. -# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. -nbproject/build-impl.xml.data.CRC32=7762c684 -nbproject/build-impl.xml.script.CRC32=7dad40ab -nbproject/build-impl.xml.stylesheet.CRC32=20b9345e diff --git a/jhotdraw6/nbproject/project.properties b/jhotdraw6/nbproject/project.properties deleted file mode 100644 index 3a0926814..000000000 --- a/jhotdraw6/nbproject/project.properties +++ /dev/null @@ -1,64 +0,0 @@ -application.args= -build.classes.dir=${build.dir}/classes -build.classes.excludes=**/*.java,**/*.form -# This directory is removed when the project is cleaned: -build.dir=build -build.generated.dir=${build.dir}/generated -# Only compile against the classpath explicitly listed here: -build.sysclasspath=ignore -build.test.classes.dir=${build.dir}/test/classes -build.test.results.dir=${build.dir}/test/results -debug.classpath=\ - ${run.classpath} -debug.test.classpath=\ - ${run.test.classpath} -# This directory is removed when the project is cleaned: -dist.dir=dist -dist.jar=${dist.dir}/JHotDraw6.jar -dist.javadoc.dir=${dist.dir}/javadoc -file.reference.batik-awt-util.jar=lib/batik-awt-util.jar -file.reference.batik-dom.jar=lib/batik-dom.jar -file.reference.batik-svggen.jar=lib/batik-svggen.jar -file.reference.main-java=src/main/java -jar.compress=false -javac.classpath=\ - ${file.reference.batik-dom.jar}:\ - ${file.reference.batik-svggen.jar}:\ - ${file.reference.batik-awt-util.jar} -# Space-separated list of extra javac options -javac.compilerargs= -javac.deprecation=false -javac.source=1.5 -javac.target=1.5 -javac.test.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir}:\ - ${libs.junit.classpath} -javadoc.additionalparam= -javadoc.author=false -javadoc.encoding= -javadoc.noindex=false -javadoc.nonavbar=false -javadoc.notree=false -javadoc.private=false -javadoc.splitindex=true -javadoc.use=true -javadoc.version=false -javadoc.windowtitle= -main.class=org.jhotdraw.samples.mini.ConnectingFiguresSample -manifest.file=manifest.mf -meta.inf.dir=${src.dir}/META-INF -platform.active=default_platform -run.classpath=\ - ${javac.classpath}:\ - ${build.classes.dir} -# Space-separated list of JVM arguments used when running the project -# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value -# or test-sys-prop.name=value to set system properties for unit tests): -run.jvmargs= -run.test.classpath=\ - ${javac.test.classpath}:\ - ${build.test.classes.dir} -src.dir=${file.reference.main-java} -src.resources.dir=src/main/resources -test.java.dir=src/test/java diff --git a/jhotdraw6/nbproject/project.xml b/jhotdraw6/nbproject/project.xml deleted file mode 100644 index 1fb229b86..000000000 --- a/jhotdraw6/nbproject/project.xml +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://www.netbeans.org/ns/project/1"> - <type>org.netbeans.modules.java.j2seproject</type> - <configuration> - <data xmlns="http://www.netbeans.org/ns/j2se-project/3"> - <name>JHotDraw6</name> - <minimum-ant-version>1.6.5</minimum-ant-version> - <source-roots> - <root id="src.dir"/> - <root id="src.resources.dir"/> - </source-roots> - <test-roots> - <root id="test.java.dir"/> - </test-roots> - </data> - </configuration> -</project> diff --git a/jhotdraw6/run_javadraw.bat b/jhotdraw6/run_javadraw.bat deleted file mode 100644 index 01e20b6cc..000000000 --- a/jhotdraw6/run_javadraw.bat +++ /dev/null @@ -1,3 +0,0 @@ -@echo off - -call compile_ant javadraw diff --git a/jhotdraw6/setenv.bat b/jhotdraw6/setenv.bat deleted file mode 100644 index ca4a20ba1..000000000 --- a/jhotdraw6/setenv.bat +++ /dev/null @@ -1,2 +0,0 @@ -set JAVA_HOME=C:\progra~1\jdk1.4.0 -set ANT_HOME=C:\ant diff --git a/jhotdraw6/src/main/J2EE/org/jhotdraw/util/JDOStorageFormat.java b/jhotdraw6/src/main/J2EE/org/jhotdraw/util/JDOStorageFormat.java deleted file mode 100644 index 9c1f270c0..000000000 --- a/jhotdraw6/src/main/J2EE/org/jhotdraw/util/JDOStorageFormat.java +++ /dev/null @@ -1,326 +0,0 @@ -/* - * @(#)SerializationStorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.StandardDrawing; - -import java.io.*; -import java.util.*; -import java.util.List; -import java.awt.*; - -import javax.jdo.*; -import javax.swing.*; -import javax.swing.event.ListSelectionListener; -import javax.swing.event.ListSelectionEvent; - - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class JDOStorageFormat extends StandardStorageFormat { - - private Map pms; - - /** - * Create a SerialzationStorageFormat for storing and restoring Drawings. - */ - public JDOStorageFormat() { - super(); - pms = CollectionsFactory.current().createMap(); - // close database connection when application exits - Runtime.getRuntime().addShutdownHook(new Thread() { - public void run() { - Iterator iter = pms.values().iterator(); -// while (iter.hasNext()) { -// ((PersistenceManager)iter.next()).close(); -// } - } - }); - } - - /** - * Factory method to create the file extension recognized by the FileFilter for this - * SerializationStorageFormat. The SerializationStorageFormat has the file extension "ser" - * (e.g. my_picasso.ser). - * - * @return new file extension - */ - protected String createFileExtension() { - return "j2"; - } - - /** - * Factory method to create a file description for the file type when displaying the - * associated FileFilter. - * - * @return new file description - */ - public String createFileDescription() { - return "Database (" + getFileExtension() + ")"; - } - - /** - * @see org.jhotdraw.util.StorageFormat#isRestoreFormat() - */ - public boolean isRestoreFormat() { - return true; - } - - /** - * @see org.jhotdraw.util.StorageFormat#isStoreFormat() - */ - public boolean isStoreFormat() { - return true; - } - - /** - * Store a Drawing under a given name. The name should be valid with regard to the FileFilter - * that means, it should already contain the appropriate file extension. - * - * @param fileName file name of the Drawing under which it should be stored - * @param storeDrawing drawing to be saved - */ - public String store(String fileName, Drawing storeDrawing) throws IOException { - PersistenceManager pm = getPersistenceManager(fileName); - String drawingName = null; - - Drawing txnDrawing = crossTxnBoundaries(storeDrawing); - endTransaction(pm, false); - - startTransaction(pm); - try { - Extent extent = pm.getExtent(StandardDrawing.class, true); - DrawingListModel listModel = new DrawingListModel(extent.iterator()); - drawingName = showStoreDialog(listModel, storeDrawing); - if (drawingName != null) { - storeDrawing.setTitle(drawingName); - txnDrawing.setTitle(drawingName); - pm.makePersistent(txnDrawing); - } - } - finally { - endTransaction(pm, (drawingName != null)); - } - - // there must be always a transaction running - startTransaction(pm); - return drawingName; - } - - /** - * Restore a Drawing from a file with a given name. The name must be should with regard to the - * FileFilter that means, it should have the appropriate file extension. - * - * @param fileName of the file in which the Drawing has been saved - * @return restored Drawing - */ - public synchronized Drawing restore(String fileName) throws IOException { - PersistenceManager pm = getPersistenceManager(fileName); - - endTransaction(pm, false); - startTransaction(pm); - Drawing restoredDrawing = null; - - try { - Extent extent = pm.getExtent(StandardDrawing.class, true); - DrawingListModel listModel = new DrawingListModel(extent.iterator()); - Drawing txnDrawing = showRestoreDialog(listModel); - if (txnDrawing != null) { -// pm.retrieve(txnDrawing); -// retrieveAll(pm, (StandardDrawing)txnDrawing); -// restoredDrawing = crossTxnBoundaries(txnDrawing); - restoredDrawing = txnDrawing; - } - } - finally { - endTransaction(pm, false); - } - - // there must be always a transaction running - startTransaction(pm); - return restoredDrawing; - } - - private void retrieveAll(PersistenceManager pm, Figure figure) { - pm.retrieve(figure); - FigureEnumeration fe = figure.figures(); - while (fe.hasNextFigure()) { - retrieveAll(pm, fe.nextFigure()); - } - } - - private Drawing crossTxnBoundaries(Drawing originalDrawing) { - return (Drawing)((StandardDrawing)originalDrawing).clone(); -// return originalDrawing; - } - - private synchronized PersistenceManager getPersistenceManager(String fileName) { - PersistenceManager pm = (PersistenceManager)pms.get(fileName); - if (pm == null) { - pm = createPersistenceManagerFactory(fileName).getPersistenceManager(); - pms.put(fileName, pm); - } - return pm; - } - - private PersistenceManagerFactory createPersistenceManagerFactory(String dbFileName) { - Properties pmfProps = new Properties(); - - pmfProps.put( - "javax.jdo.PersistenceManagerFactoryClass", - "com.poet.jdo.PersistenceManagerFactories" ); - pmfProps.put( - "javax.jdo.option.ConnectionURL", - "fastobjects://LOCAL/MyBase.j1" ); - final PersistenceManagerFactory pmf = - JDOHelper.getPersistenceManagerFactory( pmfProps ); - - return pmf; - } - - private static void startTransaction(PersistenceManager pm) { - if (!pm.currentTransaction().isActive()) { - pm.currentTransaction().begin(); - } - } - - private static void endTransaction(PersistenceManager pm, boolean doCommit) { - if (pm.currentTransaction().isActive()) { - if (doCommit) { - pm.currentTransaction().commit(); - } - else { - pm.currentTransaction().rollback(); - } - } - } - - private String showStoreDialog(ListModel listModel, Drawing storeDrawing) { - final String msgString = "Specify a name for the drawing"; - - final JTextField nameTextField = new JTextField(storeDrawing.getTitle()); - final JList dataList = new JList(listModel); - final JScrollPane dbContentScrollPane = new JScrollPane(dataList); - Object[] guiComponents = {msgString, dbContentScrollPane, nameTextField}; - - dataList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - dataList.setValueIsAdjusting(true); - dataList.addListSelectionListener(new ListSelectionListener() { - public void valueChanged(ListSelectionEvent e) { - nameTextField.setText(dataList.getSelectedValue().toString()); - } - }); - - final JOptionPane optionPane = new JOptionPane( - guiComponents, - JOptionPane.PLAIN_MESSAGE, - JOptionPane.OK_CANCEL_OPTION); - - final JDialog dialog = optionPane.createDialog(null, "Restore a drawing from the database"); -// dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); -// dialog.addWindowListener(new WindowAdapter() { -// public void windowClosing(WindowEvent we) { -// System.exit(0); -// } -// }); - dialog.setVisible(true); - if ((optionPane.getValue() != null) && (optionPane.getValue().equals(new Integer(JOptionPane.OK_OPTION)))) { - return nameTextField.getText(); - } - else { - return null; - } - } - - private Drawing showRestoreDialog(DrawingListModel listModel) { - final String msgString = "Select a drawing"; - - final JList dataList = new JList(listModel); - final JScrollPane dbContentScrollPane = new JScrollPane(dataList); - Object[] guiComponents = {msgString, dbContentScrollPane}; - - dataList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - dataList.setValueIsAdjusting(true); - - final JOptionPane optionPane = new JOptionPane( - guiComponents, - JOptionPane.PLAIN_MESSAGE, - JOptionPane.OK_CANCEL_OPTION); - - final JDialog dialog = optionPane.createDialog(null, "Restore a drawing from the database"); - dialog.setVisible(true); - if ((optionPane.getValue() != null) - && (optionPane.getValue().equals(new Integer(JOptionPane.OK_OPTION))) - && (dataList.getSelectedIndex() >= 0) - && (dataList.getSelectedIndex() < dataList.getModel().getSize())) { - return listModel.getDrawingAt(dataList.getSelectedIndex()); - } - else { - return null; - } - } - - static class DrawingListModel extends AbstractListModel { - private List myList; - - DrawingListModel(Iterator iter) { - myList = CollectionsFactory.current().createList(); - while (iter.hasNext()) { - Object o = iter.next(); - System.out.println("extent: " + o + " .. " + ((Drawing)o).getTitle()); - myList.add(o); - } - } - - public Object getElementAt(int index) { - return getDrawingAt(index).getTitle(); - } - - protected Drawing getDrawingAt(int index) { - return ((Drawing)myList.get(index)); - } - - public int getSize() { - return myList.size(); - } - } - - static class DrawingSelector extends JDialog { - DrawingSelector() { - init(); - } - - private void init() { - setTitle("Select Drawing"); - getContentPane().setLayout(new BorderLayout()); - getContentPane().add(new JLabel("Database content"), BorderLayout.NORTH); - setSize(200, 200); - } - } - - public static void main(String[] args) { - DrawingSelector frame = new DrawingSelector(); - try { - Drawing newDrawing = new StandardDrawing(); - newDrawing.setTitle("TestDrawingName" + new Random(System.currentTimeMillis()).nextLong()); - new JDOStorageFormat().store("base.j2", newDrawing); - System.exit(0); - } - catch (IOException e) { - e.printStackTrace(); - } -// frame.setVisible(true); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/applet/DrawApplet.java b/jhotdraw6/src/main/java/org/jhotdraw/applet/DrawApplet.java deleted file mode 100644 index e2fedead7..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/applet/DrawApplet.java +++ /dev/null @@ -1,573 +0,0 @@ -/* - * @(#)DrawApplet.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.applet; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; -import java.util.*; -import java.io.*; -import java.net.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.util.*; - -/** - * DrawApplication defines a standard presentation for - * a drawing editor that is run as an applet. The presentation is - * customized in subclasses.<p> - * Supported applet parameters: <br> - * <i>DRAWINGS</i>: a blank separated list of drawing names that is - * shown in the drawings choice. - * - * @version <$CURRENT_VERSION$> - */ -public class DrawApplet - extends JApplet - implements DrawingEditor, PaletteListener, VersionRequester { - - private transient Drawing fDrawing; - private transient Tool fTool; - - private transient DrawingView fView; - private transient ToolButton fDefaultToolButton; - private transient ToolButton fSelectedToolButton; - - private transient boolean fSimpleUpdate; - private transient JButton fUpdateButton; - - private transient JComboBox fFrameColor; - private transient JComboBox fFillColor; - private transient JComboBox fTextColor; - private transient JComboBox fArrowChoice; - private transient JComboBox fFontChoice; - - private transient UndoManager myUndoManager; - - static String fgUntitled = "untitled"; - - private static final String fgDrawPath = "/org/jhotdraw/"; - public static final String IMAGES = fgDrawPath+"images/"; - - /** - * Initializes the applet and creates its contents. - */ - public void init() { - createIconkit(); - getVersionControlStrategy().assertCompatibleVersion(); - setUndoManager(new UndoManager()); - - getContentPane().setLayout(new BorderLayout()); - - fView = createDrawingView(); - - JPanel attributes = createAttributesPanel(); - createAttributeChoices(attributes); - getContentPane().add("North", attributes); - - JPanel toolPanel = createToolPalette(); - createTools(toolPanel); - getContentPane().add("West", toolPanel); - - getContentPane().add("Center", (Component)view()); - JPanel buttonPalette = createButtonPanel(); - createButtons(buttonPalette); - getContentPane().add("South", buttonPalette); - - initDrawing(); - // JFC should have its own internal double buffering... - //setBufferedDisplayUpdate(); - setupAttributes(); - } - - public void addViewChangeListener(ViewChangeListener vsl) { - } - - public void removeViewChangeListener(ViewChangeListener vsl) { - } - - protected Iconkit createIconkit() { - return new Iconkit(this); - } - - /** - * Creates the attributes panel. - */ - protected JPanel createAttributesPanel() { - JPanel panel = new JPanel(); - panel.setLayout(new PaletteLayout(2, new Point(2,2), false)); - return panel; - } - - /** - * Creates the attribute choices. Override to add additional - * choices. - */ - protected void createAttributeChoices(JPanel panel) { - panel.add(new JLabel("Fill")); - fFillColor = createColorChoice(FigureAttributeConstant.FILL_COLOR); - panel.add(fFillColor); - - panel.add(new JLabel("Text")); - fTextColor = createColorChoice(FigureAttributeConstant.TEXT_COLOR); - panel.add(fTextColor); - - panel.add(new JLabel("Pen")); - fFrameColor = createColorChoice(FigureAttributeConstant.FRAME_COLOR); - panel.add(fFrameColor); - - panel.add(new JLabel("Arrow")); - CommandChoice choice = new CommandChoice(); - fArrowChoice = choice; - FigureAttributeConstant arrowMode = FigureAttributeConstant.ARROW_MODE; - choice.addItem(new ChangeAttributeCommand("none", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_NONE), this)); - choice.addItem(new ChangeAttributeCommand("at Start", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_START), this)); - choice.addItem(new ChangeAttributeCommand("at End", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_END), this)); - choice.addItem(new ChangeAttributeCommand("at Both", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_BOTH), this)); - panel.add(fArrowChoice); - - panel.add(new JLabel("Font")); - fFontChoice = createFontChoice(); - panel.add(fFontChoice); - } - - /** - * Creates the color choice for the given attribute. - */ - protected JComboBox createColorChoice(FigureAttributeConstant attribute) { - CommandChoice choice = new CommandChoice(); - for (int i = 0; i < ColorMap.size(); i++) - choice.addItem( - new ChangeAttributeCommand( - ColorMap.name(i), - attribute, - ColorMap.color(i), - this - ) - ); - return choice; - } - - /** - * Creates the font choice. The choice is filled with - * all the fonts supported by the toolkit. - */ - protected JComboBox createFontChoice() { - CommandChoice choice = new CommandChoice(); - String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); - for (int i = 0; i < fonts.length; i++) { - choice.addItem(new ChangeAttributeCommand(fonts[i], FigureAttributeConstant.FONT_NAME, fonts[i], this)); - } - return choice; - } - - /** - * Creates the buttons panel. - */ - protected JPanel createButtonPanel() { - JPanel panel = new JPanel(); - panel.setLayout(new PaletteLayout(2, new Point(2,2), false)); - return panel; - } - - /** - * Creates the buttons shown in the buttons panel. Override to - * add additional buttons. - * @param panel the buttons panel. - */ - protected void createButtons(JPanel panel) { - panel.add(new Filler(24,20)); - - JComboBox drawingChoice = new JComboBox(); - drawingChoice.addItem(fgUntitled); - - String param = getParameter("DRAWINGS"); - if (param == null) { - param = ""; - } - StringTokenizer st = new StringTokenizer(param); - while (st.hasMoreTokens()) { - drawingChoice.addItem(st.nextToken()); - } - // offer choice only if more than one - if (drawingChoice.getItemCount() > 1) { - panel.add(drawingChoice); - } - else { - panel.add(new JLabel(fgUntitled)); - } - - drawingChoice.addItemListener( - new ItemListener() { - public void itemStateChanged(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - loadDrawing((String)e.getItem()); - } - } - } - ); - - panel.add(new Filler(6,20)); - - JButton button; - button = new CommandButton(new DeleteCommand("Delete", this)); - panel.add(button); - - button = new CommandButton(new DuplicateCommand("Duplicate", this)); - panel.add(button); - - button = new CommandButton(new GroupCommand("Group", this)); - panel.add(button); - - button = new CommandButton(new UngroupCommand("Ungroup", this)); - panel.add(button); - - button = new JButton("Help"); - button.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent event) { - showHelp(); - } - } - ); - panel.add(button); - - fUpdateButton = new JButton("Simple Update"); - fUpdateButton.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent event) { - if (fSimpleUpdate) { - setBufferedDisplayUpdate(); - } - else { - setSimpleDisplayUpdate(); - } - } - } - ); - - // panel.add(fUpdateButton); // not shown currently - } - - /** - * Creates the tools palette. - */ - protected JPanel createToolPalette() { - JPanel palette = new JPanel(); - palette.setLayout(new PaletteLayout(2,new Point(2,2))); - return palette; - } - - /** - * Creates the tools. By default only the selection tool is added. - * Override this method to add additional tools. - * Call the inherited method to include the selection tool. - * @param palette the palette where the tools are added. - */ - protected void createTools(JPanel palette) { - Tool tool = createSelectionTool(); - - fDefaultToolButton = createToolButton(IMAGES + "SEL", "Selection Tool", tool); - palette.add(fDefaultToolButton); - } - - /** - * Creates the selection tool used in this editor. Override to use - * a custom selection tool. - */ - protected Tool createSelectionTool() { - return new SelectionTool(this); - } - - /** - * Creates a tool button with the given image, tool, and text - */ - protected ToolButton createToolButton(String iconName, String toolName, Tool tool) { - return new ToolButton(this, iconName, toolName, tool); - } - - /** - * Creates the drawing used in this application. - * You need to override this method to use a Drawing - * subclass in your application. By default a standard - * Drawing is returned. - */ - protected Drawing createDrawing() { - return new StandardDrawing(); - } - - /** - * Creates the drawing view used in this application. - * You need to override this method to use a DrawingView - * subclass in your application. By default a standard - * DrawingView is returned. - */ - protected DrawingView createDrawingView() { - return new StandardDrawingView(this, 410, 370); - } - - /** - * Handles a user selection in the palette. - * @see PaletteListener - */ - public void paletteUserSelected(PaletteButton button) { - ToolButton toolButton = (ToolButton) button; - setTool(toolButton.tool(), toolButton.name()); - setSelected(toolButton); - } - - /** - * Handles when the mouse enters or leaves a palette button. - * @see PaletteListener - */ - public void paletteUserOver(PaletteButton button, boolean inside) { - if (inside) { - showStatus(button.name()); - } - else if (fSelectedToolButton != null) { - showStatus(fSelectedToolButton.name()); - } - } - - /** - * Gets the current drawing. - * @see DrawingEditor - */ - public Drawing drawing() { - return fDrawing; - } - - /** - * Gets the current tool. - * @see DrawingEditor - */ - public Tool tool() { - return fTool; - } - - /** - * Gets the current drawing view. - * @see DrawingEditor - */ - public DrawingView view() { - return fView; - } - - public DrawingView[] views() { - return new DrawingView[] { view() } ; - } - - /** - * Sets the default tool of the editor. - * @see DrawingEditor - */ - public void toolDone() { - setTool(fDefaultToolButton.tool(), fDefaultToolButton.name()); - setSelected(fDefaultToolButton); - } - - /** - * Handles a change of the current selection. Updates all - * menu items that are selection sensitive. - * @see DrawingEditor - */ - public void figureSelectionChanged(DrawingView view) { - setupAttributes(); - } - - public void viewSelectionChanged(DrawingView oldView, DrawingView newView) { - } - - private void initDrawing() { - fDrawing = createDrawing(); - view().setDrawing(fDrawing); - toolDone(); - } - - private void setTool(Tool t, String name) { - if (fTool != null) { - fTool.deactivate(); - } - fTool = t; - if (fTool != null) { - showStatus(name); - fTool.activate(); - } - } - - private void setSelected(ToolButton button) { - if (fSelectedToolButton != null) { - fSelectedToolButton.reset(); - } - fSelectedToolButton = button; - if (fSelectedToolButton != null) { - fSelectedToolButton.select(); - } - } - - protected void loadDrawing(String param) { - if (param == fgUntitled) { - fDrawing.release(); - initDrawing(); - return; - } - - String filename = getParameter(param); - if (filename != null) { - readDrawing(filename); - } - } - - private void readDrawing(String filename) { - toolDone(); - String type = guessType(filename); - if (type.equals("storable")) { - readFromStorableInput(filename); - } - else if (type.equals("serialized")) { - readFromObjectInput(filename); - } - else { - showStatus("Unknown file type"); - } - } - - private void readFromStorableInput(String filename) { - try { - URL url = new URL(getCodeBase(), filename); - InputStream stream = url.openStream(); - StorableInput input = new StorableInput(stream); - fDrawing.release(); - - fDrawing = (Drawing)input.readStorable(); - view().setDrawing(fDrawing); - } - catch (IOException e) { - initDrawing(); - showStatus("Error:" + e); - } - } - - private void readFromObjectInput(String filename) { - try { - URL url = new URL(getCodeBase(), filename); - InputStream stream = url.openStream(); - ObjectInput input = new ObjectInputStream(stream); - fDrawing.release(); - fDrawing = (Drawing)input.readObject(); - view().setDrawing(fDrawing); - } - catch (IOException e) { - initDrawing(); - showStatus("Error: " + e); - } - catch (ClassNotFoundException e) { - initDrawing(); - showStatus("Class not found: " + e); - } - } - - private String guessType(String file) { - if (file.endsWith(".draw")) { - return "storable"; - } - if (file.endsWith(".ser")) { - return "serialized"; - } - return "unknown"; - } - - private void setupAttributes() { - Color frameColor = (Color) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.FRAME_COLOR); - Color fillColor = (Color) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.FILL_COLOR); - //Color textColor = (Color) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.TEXT_COLOR); - Integer arrowMode = (Integer) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.ARROW_MODE); - String fontName = (String) AttributeFigure.getDefaultAttribute(FigureAttributeConstant.FONT_NAME); - - FigureEnumeration fe = view().selection(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - frameColor = (Color) f.getAttribute(FigureAttributeConstant.FRAME_COLOR); - fillColor = (Color) f.getAttribute(FigureAttributeConstant.FILL_COLOR); - //textColor = (Color) f.getAttribute(FigureAttributeConstant.TEXT_COLOR); - arrowMode = (Integer) f.getAttribute(FigureAttributeConstant.ARROW_MODE); - fontName = (String) f.getAttribute(FigureAttributeConstant.FONT_NAME); - } - - fFrameColor.setSelectedIndex(ColorMap.colorIndex(frameColor)); - fFillColor.setSelectedIndex(ColorMap.colorIndex(fillColor)); - //fTextColor.select(ColorMap.colorIndex(textColor)); - if (arrowMode != null) { - fArrowChoice.setSelectedIndex(arrowMode.intValue()); - } - if (fontName != null) { - fFontChoice.setSelectedItem(fontName); - } - } - - protected void setSimpleDisplayUpdate() { - view().setDisplayUpdate(new SimpleUpdateStrategy()); - fUpdateButton.setText("Simple Update"); - fSimpleUpdate = true; - } - - protected void setBufferedDisplayUpdate() { - view().setDisplayUpdate(new BufferedUpdateStrategy()); - fUpdateButton.setText("Buffered Update"); - fSimpleUpdate = false; - } - - /** - * Shows a help page for the applet. The URL of the help - * page is derived as follows: codeBase+appletClassname+Help.html" - */ - protected void showHelp() { - try { - String appletPath = getClass().getName().replace('.', '/'); - URL url = new URL(getCodeBase(), appletPath + "Help.html"); - getAppletContext().showDocument(url, "Help"); - } - catch (IOException e) { - showStatus("Help file not found"); - } - - } - - protected void setUndoManager(UndoManager newUndoManager) { - myUndoManager = newUndoManager; - } - - public UndoManager getUndoManager() { - return myUndoManager; - } - - protected VersionControlStrategy getVersionControlStrategy() { - return new StandardVersionControlStrategy(this); - } - - /** - * Subclasses should override this method to specify to which versions of - * JHotDraw they are compatible. A string array is returned so it is possible - * to specify several version numbers of JHotDraw to which the application - * is compatible with. - * - * @return all versions number of JHotDraw the application is compatible with. - */ - public String[] getRequiredVersions() { - String[] requiredVersions = new String[1]; - // return the version of the package we are in - requiredVersions[0] = VersionManagement.getPackageVersion(DrawApplet.class.getPackage()); - return requiredVersions; - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/application/DrawApplication.java b/jhotdraw6/src/main/java/org/jhotdraw/application/DrawApplication.java deleted file mode 100644 index d3f509169..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/application/DrawApplication.java +++ /dev/null @@ -1,1176 +0,0 @@ -/* - * @(#)DrawApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.application; - -import java.awt.*; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.io.IOException; -import java.util.ListIterator; - -import javax.swing.*; - -import org.jhotdraw.contrib.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -/** - * DrawApplication defines a standard presentation for - * standalone drawing editors. The presentation is - * customized in subclasses. - * The application is started as follows: - * <pre> - * public static void main(String[] args) { - * MayDrawApp window = new MyDrawApp(); - * window.open(); - * } - * </pre> - * - * @version <$CURRENT_VERSION$> - */ -public class DrawApplication - extends JFrame - implements DrawingEditor, PaletteListener, VersionRequester { - - private Tool fTool; - private Iconkit fIconkit; - - private JTextField fStatusLine; - private DrawingView fView; - private ToolButton fDefaultToolButton; - private ToolButton fSelectedToolButton; - - private String fApplicationName; - private StorageFormatManager fStorageFormatManager; - private UndoManager myUndoManager; - protected static String fgUntitled = "untitled"; - /** - * List is not thread safe, but should not need to be. If it does we can - * safely synchronize the few methods that use this by synchronizing on - * the List object itself. - */ - private java.util.List listeners; - private DesktopListener fDesktopListener; - - /** - * This component acts as a desktop for the content. - */ - private Desktop fDesktop; - - // the image resource path - private static final String fgDrawPath = "/org/jhotdraw/"; - public static final String IMAGES = fgDrawPath + "images/"; - protected static int winCount = 0; - - /** - * The index of the file menu in the menu bar. - */ - public static final int FILE_MENU = 0; - /** - * The index of the edit menu in the menu bar. - */ - public static final int EDIT_MENU = 1; - /** - * The index of the alignment menu in the menu bar. - */ - public static final int ALIGNMENT_MENU = 2; - /** - * The index of the attributes menu in the menu bar. - */ - public static final int ATTRIBUTES_MENU = 3; - - /** - * Constructs a drawing window with a default title. - */ - public DrawApplication() { - this("JHotDraw"); - } - - /** - * Constructs a drawing window with the given title. - */ - public DrawApplication(String title) { - super(title); - listeners = CollectionsFactory.current().createList(); - setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); - setApplicationName(title); - } - - /** - * Factory method which can be overriden by subclasses to - * create an instance of their type. - * - * @return newly created application - */ - protected DrawApplication createApplication() { - return new DrawApplication(); - } - - /** - * Open a new view for this application containing a - * view of the drawing of the currently activated window. - */ - public void newView() { - if (view() == null) { - return; - } - DrawApplication window = createApplication(); - window.open(view()); - if (view().drawing().getTitle() != null ) { - window.setDrawingTitle(view().drawing().getTitle() + " (View)"); - } - else { - window.setDrawingTitle(getDefaultDrawingTitle() + " (View)"); - } - } - - /** - * Open a new window for this application containing the passed in drawing, - * or a new drawing if the passed in drawing is null. - */ - public void newWindow(Drawing initialDrawing) { - DrawApplication window = createApplication(); - if (initialDrawing == null) { - window.open(); - } - else { - window.open(window.createDrawingView(initialDrawing)); - } - } - - public final void newWindow() { - newWindow(createDrawing()); - } - - /** - * Opens a new window - */ - public void open() { - open(createInitialDrawingView()); - } - - /** - * Opens a new window with a drawing view. - */ - protected void open(final DrawingView newDrawingView) { - getVersionControlStrategy().assertCompatibleVersion(); - setUndoManager(new UndoManager()); - setIconkit(createIconkit()); - getContentPane().setLayout(new BorderLayout()); - - // status line must be created before a tool is set - setStatusLine(createStatusLine()); - getContentPane().add(getStatusLine(), BorderLayout.SOUTH); - - // create dummy tool until the default tool is activated during toolDone() - setTool(new NullTool(this), ""); - setView(newDrawingView); - - JToolBar tools = createToolPalette(); - createTools(tools); - - JPanel activePanel = new JPanel(); - activePanel.setAlignmentX(LEFT_ALIGNMENT); - activePanel.setAlignmentY(TOP_ALIGNMENT); - activePanel.setLayout(new BorderLayout()); - activePanel.add(tools, BorderLayout.NORTH); - setDesktopListener(createDesktopListener()); - setDesktop(createDesktop()); - activePanel.add((Component)getDesktop(), BorderLayout.CENTER); - getContentPane().add(activePanel, BorderLayout.CENTER); - - JMenuBar mb = new JMenuBar(); - createMenus(mb); - setJMenuBar(mb); - - Dimension d = defaultSize(); - if (d.width > mb.getPreferredSize().width) { - setSize(d.width, d.height); - } - else { - setSize(mb.getPreferredSize().width, d.height); - } - addListeners(); - setStorageFormatManager(createStorageFormatManager()); - - //no work allowed to be done on GUI outside of AWT thread once - //setVislble(true) must be called before drawing added to desktop, else - //DND will fail. on drawing added before with a NPE. note however that - //a nulldrawingView will not fail because it is never really added to the desltop - setVisible(true); - Runnable r = new Runnable() { - public void run() { - if (newDrawingView.isInteractive()) { - getDesktop().addToDesktop(newDrawingView , Desktop.PRIMARY); - } - toolDone(); - } - }; - - if (java.awt.EventQueue.isDispatchThread() == false) { - try { - java.awt.EventQueue.invokeAndWait(r); - } - catch(java.lang.InterruptedException ie) { - System.err.println(ie.getMessage()); - exit(); - } - catch(java.lang.reflect.InvocationTargetException ite) { - System.err.println(ite.getMessage()); - exit(); - } - } - else { - r.run(); - } - - toolDone(); - } - - /** - * Registers the listeners for this window - */ - protected void addListeners() { - addWindowListener( - new WindowAdapter() { - public void windowClosing(WindowEvent event) { - endApp(); - } - - public void windowOpened(WindowEvent event) { - winCount++; - } - - public void windowClosed(WindowEvent event) { - if (--winCount == 0) { - System.exit(0); - } - } - } - ); - } - - /** - * Creates the standard menus. Clients override this - * method to add additional menus. - */ - protected void createMenus(JMenuBar mb) { - addMenuIfPossible(mb, createFileMenu()); - addMenuIfPossible(mb, createEditMenu()); - addMenuIfPossible(mb, createAlignmentMenu()); - addMenuIfPossible(mb, createAttributesMenu()); - addMenuIfPossible(mb, createDebugMenu()); - } - - protected void addMenuIfPossible(JMenuBar mb, JMenu newMenu) { - if (newMenu != null) { - mb.add(newMenu); - } - } - - /** - * Creates the file menu. Clients override this - * method to add additional menu items. - */ - protected JMenu createFileMenu() { - CommandMenu menu = new CommandMenu("File"); - Command cmd = new AbstractCommand("New", this, false) { - public void execute() { - promptNew(); - } - }; - menu.add(cmd, new MenuShortcut('n')); - - cmd = new AbstractCommand("Open...", this, false) { - public void execute() { - promptOpen(); - } - }; - menu.add(cmd, new MenuShortcut('o')); - - cmd = new AbstractCommand("Save As...", this, true) { - public void execute() { - promptSaveAs(); - } - }; - menu.add(cmd, new MenuShortcut('s')); - menu.addSeparator(); - - cmd = new AbstractCommand("Print...", this, true) { - public void execute() { - print(); - } - }; - menu.add(cmd, new MenuShortcut('p')); - menu.addSeparator(); - - cmd = new AbstractCommand("Exit", this, true) { - public void execute() { - endApp(); - } - }; - menu.add(cmd); - return menu; - } - - /** - * Creates the edit menu. Clients override this - * method to add additional menu items. - */ - protected JMenu createEditMenu() { - CommandMenu menu = new CommandMenu("Edit"); - menu.add(new UndoableCommand( - new SelectAllCommand("Select All", this)), new MenuShortcut('a')); - menu.addSeparator(); - menu.add(new UndoableCommand( - new CutCommand("Cut", this)), new MenuShortcut('x')); - menu.add(new CopyCommand("Copy", this), new MenuShortcut('c')); - menu.add(new UndoableCommand( - new PasteCommand("Paste", this)), new MenuShortcut('v')); - menu.addSeparator(); - menu.add(new UndoableCommand( - new DuplicateCommand("Duplicate", this)), new MenuShortcut('d')); - menu.add(new UndoableCommand(new DeleteCommand("Delete", this))); - menu.addSeparator(); - menu.add(new UndoableCommand(new GroupCommand("Group", this))); - menu.add(new UndoableCommand(new UngroupCommand("Ungroup", this))); - menu.addSeparator(); - menu.add(new UndoableCommand(new SendToBackCommand("Send to Back", this))); - menu.add(new UndoableCommand(new BringToFrontCommand("Bring to Front", this))); - menu.addSeparator(); - menu.add(new UndoCommand("Undo Command", this)); - menu.add(new RedoCommand("Redo Command", this)); - return menu; - } - - /** - * Creates the alignment menu. Clients override this - * method to add additional menu items. - */ - protected JMenu createAlignmentMenu() { - CommandMenu menu = new CommandMenu("Align"); - menu.addCheckItem(new ToggleGridCommand("Toggle Snap to Grid", this, new Point(4,4))); - menu.addSeparator(); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.LEFTS, this))); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.CENTERS, this))); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.RIGHTS, this))); - menu.addSeparator(); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.TOPS, this))); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.MIDDLES, this))); - menu.add(new UndoableCommand( - new AlignCommand(AlignCommand.Alignment.BOTTOMS, this))); - return menu; - } - - /** - * Creates the debug menu. Clients override this - * method to add additional menu items. - */ - protected JMenu createDebugMenu() { - CommandMenu menu = new CommandMenu("Debug"); - - Command cmd = new AbstractCommand("Simple Update", this) { - public void execute() { - this.view().setDisplayUpdate(new SimpleUpdateStrategy()); - } - }; - menu.add(cmd); - - cmd = new AbstractCommand("Buffered Update", this) { - public void execute() { - this.view().setDisplayUpdate(new BufferedUpdateStrategy()); - } - }; - menu.add(cmd); - return menu; - } - - /** - * Creates the attributes menu and its submenus. Clients override this - * method to add additional menu items. - */ - protected JMenu createAttributesMenu() { - JMenu menu = new JMenu("Attributes"); - menu.add(createColorMenu("Fill Color", FigureAttributeConstant.FILL_COLOR)); - menu.add(createColorMenu("Pen Color", FigureAttributeConstant.FRAME_COLOR)); - menu.add(createArrowMenu()); - menu.addSeparator(); - menu.add(createFontMenu()); - menu.add(createFontSizeMenu()); - menu.add(createFontStyleMenu()); - menu.add(createColorMenu("Text Color", FigureAttributeConstant.TEXT_COLOR)); - return menu; - } - - /** - * Creates the color menu. - */ - protected JMenu createColorMenu(String title, FigureAttributeConstant attribute) { - CommandMenu menu = new CommandMenu(title); - for (int i=0; i<ColorMap.size(); i++) - menu.add( - new UndoableCommand( - new ChangeAttributeCommand( - ColorMap.name(i), - attribute, - ColorMap.color(i), - this - ) - ) - ); - return menu; - } - - /** - * Creates the arrows menu. - */ - protected JMenu createArrowMenu() { - FigureAttributeConstant arrowMode = FigureAttributeConstant.ARROW_MODE; - CommandMenu menu = new CommandMenu("Arrow"); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("none", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_NONE), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("at Start", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_START), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("at End", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_END), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("at Both", arrowMode, new Integer(PolyLineFigure.ARROW_TIP_BOTH), this))); - return menu; - } - - /** - * Creates the fonts menus. It installs all available fonts - * supported by the toolkit implementation. - */ - protected JMenu createFontMenu() { - CommandMenu menu = new CommandMenu("Font"); - String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); - for (int i = 0; i < fonts.length; i++) { - menu.add(new UndoableCommand( - new ChangeAttributeCommand(fonts[i], FigureAttributeConstant.FONT_NAME, fonts[i], this))); - } - return menu; - } - - /** - * Creates the font style menu with entries (Plain, Italic, Bold). - */ - protected JMenu createFontStyleMenu() { - FigureAttributeConstant fontStyle = FigureAttributeConstant.FONT_STYLE; - CommandMenu menu = new CommandMenu("Font Style"); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("Plain", fontStyle, new Integer(Font.PLAIN), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("Italic", fontStyle, new Integer(Font.ITALIC), this))); - menu.add(new UndoableCommand( - new ChangeAttributeCommand("Bold", fontStyle, new Integer(Font.BOLD), this))); - return menu; - } - - /** - * Creates the font size menu. - */ - protected JMenu createFontSizeMenu() { - CommandMenu menu = new CommandMenu("Font Size"); - int sizes[] = { 9, 10, 12, 14, 18, 24, 36, 48, 72 }; - for (int i = 0; i < sizes.length; i++) { - menu.add( - new UndoableCommand( - new ChangeAttributeCommand( - Integer.toString(sizes[i]), - FigureAttributeConstant.FONT_SIZE, - new Integer(sizes[i]), - this - ) - ) - ); - } - return menu; - } - - /** - * Create a menu which allows the user to select a different look and feel at runtime. - */ - public JMenu createLookAndFeelMenu() { - CommandMenu menu = new CommandMenu("Look'n'Feel"); - - UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels(); - - for (int i = 0; i < lafs.length; i++) { - final String lnfClassName = lafs[i].getClassName(); - Command cmd = new AbstractCommand(lafs[i].getName(), this) { - public void execute() { - newLookAndFeel(lnfClassName); - } - }; - menu.add(cmd); - } - return menu; - } - - /** - * Creates the tool palette. - */ - protected JToolBar createToolPalette() { - JToolBar palette = new JToolBar(); - palette.setBackground(Color.lightGray); - // use standard FlowLayout for JToolBar - // palette.setLayout(new PaletteLayout(2,new Point(2,2))); - return palette; - } - - /** - * Creates the tools. By default only the selection tool is added. - * Override this method to add additional tools. - * Call the inherited method to include the selection tool. - * @param palette the palette where the tools are added. - */ - protected void createTools(JToolBar palette) { - setDefaultTool(createDefaultTool()); - palette.add(fDefaultToolButton); - } - - /** - * Creates the selection tool used in this editor. Override to use - * a custom selection tool. - */ - protected Tool createSelectionTool() { - return new SelectionTool(this); - } - - protected Tool createDefaultTool() { - return createSelectionTool(); - } - - protected void setDefaultTool(Tool newDefaultTool) { - if (newDefaultTool != null) { - fDefaultToolButton = createToolButton(IMAGES+"SEL", "Selection Tool", newDefaultTool); - } - else { - fDefaultToolButton = null; - } - } - - public Tool getDefaultTool() { - if (fDefaultToolButton != null) { - return fDefaultToolButton.tool(); - } - else { - return null; - } - } - - /** - * Creates a tool button with the given image, tool, and text - */ - protected ToolButton createToolButton(String iconName, String toolName, Tool tool) { - return new ToolButton(this, iconName, toolName, tool); - } - - /** - * Creates the drawing view used in this application. - * You need to override this method to use a DrawingView - * subclass in your application. By default a standard - * DrawingView is returned. - */ - protected DrawingView createDrawingView() { - DrawingView createdDrawingView = createDrawingView(createDrawing()); - createdDrawingView.drawing().setTitle(getDefaultDrawingTitle()); - return createdDrawingView; - } - - protected DrawingView createDrawingView(Drawing newDrawing) { - Dimension d = getDrawingViewSize(); - DrawingView newDrawingView = new StandardDrawingView(this, d.width, d.height); - newDrawingView.setDrawing(newDrawing); - // notify listeners about created view when the view is added to the desktop - //fireViewCreatedEvent(newDrawingView); - return newDrawingView; - } - - /** - * Create the DrawingView that is active when the application is started. - * This initial DrawingView might be different from DrawingView created - * by the application, so subclasses can override this method to provide - * a special drawing view for application startup time, e.g. a NullDrawingView - * which does not display an internal frame in a multiple document interface - * (MDI) application. - * - * @return drawing view that is active at application startup time - */ - protected DrawingView createInitialDrawingView() { - return createDrawingView(); - } - - /** - * Override to define the dimensions of the drawing view. - */ - protected Dimension getDrawingViewSize() { - return new Dimension(800, 800); - } - - /** - * Creates the drawing used in this application. - * You need to override this method to use a Drawing - * subclass in your application. By default a standard - * Drawing is returned. - */ - protected Drawing createDrawing() { - return new StandardDrawing(); - } - - protected Desktop createDesktop() { - return new JPanelDesktop(this); -// return new JScrollPaneDesktop(); - } - - protected void setDesktop(Desktop newDesktop) { - newDesktop.addDesktopListener(getDesktopListener()); - fDesktop = newDesktop; - } - - /** - * Get the component, in which the content is embedded. This component - * acts as a desktop for the content. - */ - public Desktop getDesktop() { - return fDesktop; - } - - /** - * Factory method to create a StorageFormatManager for supported storage formats. - * Different applications might want to use different storage formats and can return - * their own format manager by overriding this method. - */ - public StorageFormatManager createStorageFormatManager() { - StorageFormatManager storageFormatManager = new StorageFormatManager(); - storageFormatManager.setDefaultStorageFormat(new StandardStorageFormat()); - storageFormatManager.addStorageFormat(storageFormatManager.getDefaultStorageFormat()); - storageFormatManager.addStorageFormat(new SerializationStorageFormat()); -// storageFormatManager.addStorageFormat(new JDOStorageFormat()); - return storageFormatManager; - } - - /** - * Set the StorageFormatManager. The StorageFormatManager is used when storing and - * restoring Drawing from the file system. - */ - protected final void setStorageFormatManager(StorageFormatManager newStorageFormatManager) { - fStorageFormatManager = newStorageFormatManager; - } - - /** - * Return the StorageFormatManager for this application.The StorageFormatManager is - * used when storing and restoring Drawing from the file system. - */ - public StorageFormatManager getStorageFormatManager() { - return fStorageFormatManager; - } - - /** - * Gets the default size of the window. - */ - protected Dimension defaultSize() { - return new Dimension(600,450); - } - - /** - * Creates the status line. - */ - protected JTextField createStatusLine() { - JTextField field = new JTextField("No Tool", 40); - field.setBackground(Color.white); - field.setEditable(false); - return field; - } - - protected void setStatusLine(JTextField newStatusLine) { - fStatusLine = newStatusLine; - } - - protected JTextField getStatusLine() { - return fStatusLine; - } - - /** - * Handles a user selection in the palette. - * @see PaletteListener - */ - public void paletteUserSelected(PaletteButton paletteButton) { - ToolButton toolButton = (ToolButton)paletteButton; - setTool(toolButton.tool(), toolButton.name()); - setSelected(toolButton); - } - - /** - * Handles when the mouse enters or leaves a palette button. - * @see PaletteListener - */ - public void paletteUserOver(PaletteButton paletteButton, boolean inside) { - ToolButton toolButton = (ToolButton)paletteButton; - if (inside) { - showStatus(toolButton.name()); - } - else if (fSelectedToolButton != null) { - showStatus(fSelectedToolButton.name()); - } - } - - /** - * Gets the current tool. - * @see DrawingEditor - */ - public Tool tool() { - return fTool; - } - - /** - * Retrieve the active view from the window - * Gets the current drawing view. - * @see DrawingEditor - */ - public DrawingView view() { - return fView; - } - - protected void setView(DrawingView newView) { - DrawingView oldView = fView; - fView = newView; - fireViewSelectionChangedEvent(oldView, view()); - } - - public DrawingView[] views() { - return new DrawingView[] { view() }; - } - - /** - * Sets the default tool of the editor. - * @see DrawingEditor - */ - public void toolDone() { - // TODO: toolDone() seemed to be called twice/too often - if (fDefaultToolButton != null) { - setTool(fDefaultToolButton.tool(), fDefaultToolButton.name()); - setSelected(fDefaultToolButton); - } - } - - /** - * Fired by a view when the figure selection changes. Since Commands and - * Tools may depend on the figure selection they are registered to be notified - * about these events. - * Any selection sensitive GUI component should update its - * own state if the selection has changed, e.g. selection sensitive menuitems - * will update their own states. - * @see DrawingEditor - */ - public void figureSelectionChanged(DrawingView view) { - checkCommandMenus(); - } - - protected void checkCommandMenus() { - JMenuBar mb = getJMenuBar(); - - for (int x = 0; x < mb.getMenuCount(); x++) { - JMenu jm = mb.getMenu(x); - if (CommandMenu.class.isInstance(jm)) { - checkCommandMenu((CommandMenu)jm); - } - } - } - - protected void checkCommandMenu(CommandMenu cm) { - cm.checkEnabled(); - for (int y = 0; y < cm.getItemCount();y++) { - JMenuItem jmi = cm.getItem(y); - if (CommandMenu.class.isInstance(jmi)) { - checkCommandMenu((CommandMenu)jmi); - } - } - } - - /** - * Register to hear when the active view is changed. For Single document - * interface, this will happen when a new drawing is created. - */ - public void addViewChangeListener(ViewChangeListener vsl) { - listeners.add(vsl); - } - - /** - * Remove listener - */ - public void removeViewChangeListener(ViewChangeListener vsl) { - listeners.remove(vsl); - } - - /** - * An appropriate event is triggered and all registered observers - * are notified if the drawing view has been changed, e.g. by - * switching between several internal frames. This method is - * usually not needed in SDI environments. - */ - protected void fireViewSelectionChangedEvent(DrawingView oldView, DrawingView newView) { - ListIterator li= listeners.listIterator(listeners.size()); - while (li.hasPrevious()) { - ViewChangeListener vsl = (ViewChangeListener)li.previous(); - vsl.viewSelectionChanged(oldView, newView); - } - } - - protected void fireViewCreatedEvent(DrawingView view) { - ListIterator li= listeners.listIterator(listeners.size()); - while (li.hasPrevious()) { - ViewChangeListener vsl = (ViewChangeListener)li.previous(); - vsl.viewCreated(view); - } - } - - protected void fireViewDestroyingEvent(DrawingView view) { - ListIterator li= listeners.listIterator(listeners.size()); - while (li.hasPrevious()) { - ViewChangeListener vsl = (ViewChangeListener)li.previous(); - vsl.viewDestroying( view ); - } - } - - /** - * Shows a status message. - * @see DrawingEditor - */ - public void showStatus(String string) { - getStatusLine().setText(string); - } - - /** - * Note: it is inconsistent to directly assign a variable but when using it - * use it from a method. (assignment: fTool = t, usage: tool()) dnoyeB-4/8/02 - * Note: should we check that the tool is inactive before we activate it? - * this would be consistent with how we do deactivate. I think we should do - * this now and not wait till a bug pops up. even if their is no bug, its - * consistent and adds understandability to the code. dnoyeB-4/8/02 - */ - public void setTool(Tool t, String name) { - // SF bug-tracker id: #490665 - - // deactivate only those tools that have been activated before - if ((tool() != null) && (tool().isActive())) { - tool().deactivate(); - } - fTool = t; - if (tool() != null) { - showStatus(name); - tool().activate(); - } - } - - private void setSelected(ToolButton button) { - if (fSelectedToolButton != null) { - fSelectedToolButton.reset(); - } - fSelectedToolButton = button; - if (fSelectedToolButton != null) { - fSelectedToolButton.select(); - } - } - - /** - * Exits the application. You should never override this method - */ - public void exit() { - destroy(); - // tell windowing system to free resources - dispose(); - } - - protected boolean closeQuery(){ - return true; - } - - protected void endApp(){ - if(closeQuery() == true) { - exit(); - } - } - /** - * Handles additional clean up operations. Override to destroy - * or release drawing editor resources. - */ - protected void destroy() { - } - - /** - * Resets the drawing to a new empty drawing. - */ - public void promptNew() { - newWindow(createDrawing()); - //toolDone(); - //view().setDrawing(createDrawing()); - } - - /** - * Shows a file dialog and opens a drawing. - */ - public void promptOpen() { - toolDone(); - JFileChooser openDialog = createOpenFileChooser(); - getStorageFormatManager().registerFileFilters(openDialog); - if (openDialog.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { - StorageFormat foundFormat = getStorageFormatManager().findStorageFormat(openDialog.getFileFilter()); - // ricardo_padilha: if there is no format associated, - // try to find one that supports the file - if (foundFormat == null) { - foundFormat = getStorageFormatManager().findStorageFormat(openDialog.getSelectedFile()); - } - if (foundFormat != null) { - loadDrawing(foundFormat, openDialog.getSelectedFile().getAbsolutePath()); - } - else { - showStatus("Not a valid file format: " + openDialog.getFileFilter().getDescription()); - } - } - } - - /** - * Shows a file dialog and saves drawing. - */ - public void promptSaveAs() { - if (view() != null) { - toolDone(); - JFileChooser saveDialog = createSaveFileChooser(); - getStorageFormatManager().registerFileFilters(saveDialog); - - if (saveDialog.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { - StorageFormat foundFormat = getStorageFormatManager().findStorageFormat(saveDialog.getFileFilter()); - // ricardo_padilha: if there is no format associated, - // try to find one that supports the file - if (foundFormat == null) { - foundFormat = getStorageFormatManager().findStorageFormat(saveDialog.getSelectedFile()); - } - if (foundFormat != null) { - saveDrawing(foundFormat, saveDialog.getSelectedFile().getAbsolutePath()); - } - else { - showStatus("Not a valid file format: " + saveDialog.getFileFilter().getDescription()); - } - } - } - } - - /** - * Create a file chooser for the open file dialog. Subclasses may override this - * method in order to customize the open file dialog. - */ - protected JFileChooser createOpenFileChooser() { - JFileChooser openDialog = new JFileChooser(); - openDialog.setDialogType(JFileChooser.OPEN_DIALOG); - openDialog.setDialogTitle("Open File..."); - return openDialog; - } - - /** - * Create a file chooser for the save file dialog. Subclasses may override this - * method in order to customize the save file dialog. - */ - protected JFileChooser createSaveFileChooser() { - JFileChooser saveDialog = new JFileChooser(); - saveDialog.setDialogType(JFileChooser.SAVE_DIALOG); - saveDialog.setDialogTitle("Save File..."); - return saveDialog; - } - - /** - * Prints the drawing. - */ - public void print() { - tool().deactivate(); - PrintJob printJob = getToolkit().getPrintJob(this, "Print Drawing", null); - - if (printJob != null) { - Graphics pg = printJob.getGraphics(); - - if (pg != null) { - ((StandardDrawingView)view()).printAll(pg); - pg.dispose(); // flush page - } - printJob.end(); - } - tool().activate(); - } - - /** - * Save a Drawing in a file - */ - protected void saveDrawing(StorageFormat storeFormat, String file) { - // Need a better alert than this. - if (view() == null) { - return; - } - try { - String name = storeFormat.store(file, view().drawing()); - view().drawing().setTitle(name); - setDrawingTitle(name); - } - catch (IOException e) { - showStatus(e.toString()); - } - } - - /** - * Load a Drawing from a file - */ - protected void loadDrawing(StorageFormat restoreFormat, String file) { - try { - Drawing restoredDrawing = restoreFormat.restore(file); - if (restoredDrawing != null) { - restoredDrawing.setTitle(file); - newWindow(restoredDrawing); - } - else { - showStatus("Unknown file type: could not open file '" + file + "'"); - } - } - catch (IOException e) { - showStatus("Error: " + e); - } - } - - /** - * Switch to a new Look&Feel - */ - private void newLookAndFeel(String landf) { - try { - UIManager.setLookAndFeel(landf); - SwingUtilities.updateComponentTreeUI(this); - } - catch (Exception e) { - System.err.println(e); - } - } - - /** - * Set the title of the currently selected drawing - */ - protected void setDrawingTitle(String drawingTitle) { - if (getDefaultDrawingTitle().equals(drawingTitle)) { - setTitle(getApplicationName()); - } - else { - setTitle(getApplicationName() + " - " + drawingTitle); - } - } - - /** - * Return the title of the currently selected drawing - */ - protected String getDrawingTitle() { - return view().drawing().getTitle(); - } - - /** - * Set the name of the application build from this skeleton application - */ - public void setApplicationName(String applicationName) { - fApplicationName = applicationName; - } - - /** - * Return the name of the application build from this skeleton application - */ - public String getApplicationName() { - return fApplicationName; - } - - protected void setUndoManager(UndoManager newUndoManager) { - myUndoManager = newUndoManager; - } - - public UndoManager getUndoManager() { - return myUndoManager; - } - - protected VersionControlStrategy getVersionControlStrategy() { - return new StandardVersionControlStrategy(this); - } - - /** - * Subclasses should override this method to specify to which versions of - * JHotDraw they are compatible. A string array is returned so it is possible - * to specify several version numbers of JHotDraw to which the application - * is compatible with. - * - * @return all versions number of JHotDraw the application is compatible with. - */ - public String[] getRequiredVersions() { - String[] requiredVersions = new String[1]; - // return the version of the package we are in - requiredVersions[0] = VersionManagement.getPackageVersion(DrawApplication.class.getPackage()); - return requiredVersions; - } - - public String getDefaultDrawingTitle() { - return fgUntitled; - } - - protected DesktopListener getDesktopListener() { - return fDesktopListener; - } - - protected void setDesktopListener(DesktopListener desktopPaneListener) { - fDesktopListener = desktopPaneListener; - } - - protected DesktopListener createDesktopListener() { - return new DesktopListener() { - public void drawingViewAdded(DesktopEvent dpe) { - DrawingView dv = dpe.getDrawingView(); - fireViewCreatedEvent(dv); - } - public void drawingViewRemoved(DesktopEvent dpe) { - DrawingView dv = dpe.getDrawingView(); - // remove undo/redo activities which operate on this DrawingView - getUndoManager().clearUndos(dv); - getUndoManager().clearRedos(dv); - fireViewDestroyingEvent(dv); - checkCommandMenus(); - } - public void drawingViewSelected(DesktopEvent dpe) { - DrawingView dv = dpe.getDrawingView(); - //get the current selection and freeze it. - if (dv != null) { - if (dv.drawing() != null) - dv.unfreezeView(); - } - setView(dv); - } - }; - } - - protected Iconkit createIconkit() { - return new Iconkit(this); - } - - protected void setIconkit(Iconkit newIconkit) { - fIconkit = newIconkit; - } - - protected Iconkit getIconkit() { - return fIconkit; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/AutoscrollHelper.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/AutoscrollHelper.java deleted file mode 100644 index c66712564..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/AutoscrollHelper.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * @(#)AutoscrollHelper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import java.awt.*; - -/** - * A helper class for implementing autoscrolling - * - * @author SourceForge(dnoyeb) aka C.L. Gilbert - * @version <$CURRENT_VERSION$> - */ -public abstract class AutoscrollHelper { - private int autoscrollMargin = 20; - private Insets autoscrollInsets = new Insets(0, 0, 0, 0); - public AutoscrollHelper(int margin) { - autoscrollMargin = margin; - } - public void setAutoscrollMargin(int margin) { - autoscrollMargin = margin; - } - public int getAutoscrollMargin() { - return autoscrollMargin; - } - - /** - * Override this method to call getSize() on your Component - * @see Component#getSize - */ - public abstract Dimension getSize(); - - /** - * Override this method to call getVisibleRect() on your JComponent - * @see javax.swing.JComponent#getVisibleRect - */ - public abstract Rectangle getVisibleRect(); - - /** - * Override this method to call scrollRectToVisible(Rectangle aRect) on - * your component - * @see javax.swing.JComponent#scrollRectToVisible - */ - public abstract void scrollRectToVisible(Rectangle aRect); - /** - * Part of the autoscrolls interface - * - */ - public void autoscroll(Point location) { - //System.out.println("mouse at " + location); - int top = 0, left = 0, bottom = 0, right = 0; - Dimension size = getSize(); - Rectangle rect = getVisibleRect(); - int bottomEdge = rect.y + rect.height; - int rightEdge = rect.x + rect.width; - if (location.y - rect.y <= autoscrollMargin && rect.y > 0) - top = autoscrollMargin; - if (location.x - rect.x <= autoscrollMargin && rect.x > 0) - left = autoscrollMargin; - if (bottomEdge - location.y <= autoscrollMargin && bottomEdge < size.height) - bottom = autoscrollMargin; - if (rightEdge - location.x <= autoscrollMargin && rightEdge < size.width) - right = autoscrollMargin; - rect.x += right - left; - rect.y += bottom - top; - scrollRectToVisible(rect); - } - public Insets getAutoscrollInsets() { - Dimension size = getSize(); - Rectangle rect = getVisibleRect(); - autoscrollInsets.top = rect.y + autoscrollMargin; - autoscrollInsets.left = rect.x + autoscrollMargin; - autoscrollInsets.bottom = size.height - (rect.y + rect.height) + autoscrollMargin; - autoscrollInsets.right = size.width - (rect.x + rect.width) + autoscrollMargin; - return autoscrollInsets; - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CTXCommandMenu.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/CTXCommandMenu.java deleted file mode 100644 index e0543ec30..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CTXCommandMenu.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib; - -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.*; -import javax.swing.*; - -import org.jhotdraw.framework.JHotDrawRuntimeException; -import org.jhotdraw.util.Command; -import org.jhotdraw.util.CommandListener; -import org.jhotdraw.util.CommandMenu; - -/** - * A Command enabled menu. Selecting a menu item - * executes the corresponding command. - * - * @author Eduardo Francos (adapted from initial implementation by Wolfram Kaiser) - * @created 2 mai 2002 - * @see Command - * @version <$CURRENT_VERSION$> - */ -public class CTXCommandMenu extends JMenu implements ActionListener, CommandListener { - - public CTXCommandMenu(String name) { - super(name); - } - - /** - * Adds a command to the menu. The item's label is - * the command's name. - */ - public synchronized void add(Command command) { - addMenuItem(new CommandMenuItem(command)); - } - - /** - * Adds a command with the given short cut to the menu. The item's label is - * the command's name. - */ - public synchronized void add(Command command, MenuShortcut shortcut) { - addMenuItem(new CommandMenuItem(command, shortcut.getKey())); - } - - /** - * Adds a command with the given short cut to the menu. The item's label is - * the command's name. - */ - public synchronized void addCheckItem(Command command) { - addMenuItem(new CommandCheckBoxMenuItem(command)); - } - - /** - * Adds a command menu item - * - * @param item the command menu item - */ - public synchronized void add(CommandMenuItem item) { - addMenuItem(item); - } - - /** - * Adds a command checkbox menu item - * - * @param checkItem the checkbox item - */ - public synchronized void add(CommandCheckBoxMenuItem checkItem) { - addMenuItem(checkItem); - } - - /** - * Adds a normal menu item to the menu - * - * @param m The menu item - */ - protected void addMenuItem(JMenuItem m) { - m.addActionListener(this); - add(m); - ((CommandHolder)m).getCommand().addCommandListener(this); - } - - /** - * Removes a command item from the menu - * - * @param command the command tor emove - */ - public synchronized void remove(Command command) { - throw new JHotDrawRuntimeException("not implemented"); - } - - /** - * Removes an item from the menu - * - * @param item the item to remove - */ - public synchronized void remove(MenuItem item) { - throw new JHotDrawRuntimeException("not implemented"); - } - - /** - * Changes the enabling/disabling state of a named menu item. - * - * @param name Description of the Parameter - * @param state Description of the Parameter - */ - public synchronized void enable(String name, boolean state) { - for (int i = 0; i < getItemCount(); i++) { - JMenuItem item = getItem(i); - if (name.equals(item.getText())) { - item.setEnabled(state); - return; - } - } - } - - /** Description of the Method */ - public synchronized void checkEnabled() { - int j = 0; - for (int i = 0; i < getMenuComponentCount(); i++) { - JMenuItem currentItem = getItem(i); - if (currentItem instanceof CommandMenu) { - ((CommandMenu)currentItem).checkEnabled(); - } - else if (currentItem instanceof CTXCommandMenu) { - ((CTXCommandMenu)currentItem).checkEnabled(); - } - else if (currentItem instanceof CommandHolder) { - currentItem.setEnabled(((CommandHolder)currentItem).getCommand().isExecutable()); - } - else if (currentItem instanceof Command) { - currentItem.setEnabled(((Command)currentItem).isExecutable()); - } - j++; - } - } - - /** - * Executes the command. - * - * @param e Description of the Parameter - */ - public void actionPerformed(ActionEvent e) { - int j = 0; - Object source = e.getSource(); - for (int i = 0; i < getItemCount(); i++) { - // ignore separators - // a separator has a hyphen as its label - if (getMenuComponent(i) instanceof JSeparator) { - continue; - } - JMenuItem item = getItem(i); - if (source == item) { - Command cmd = ((CommandHolder)item).getCommand(); - cmd.execute(); - break; - } - j++; - } - } - - /** - * Description of the Method - * - * @param commandEvent Description of the Parameter - */ - public void commandExecuted(EventObject commandEvent) { -// checkEnabled(); - } - - /** - * Description of the Method - * - * @param commandEvent Description of the Parameter - */ - public void commandExecutable(EventObject commandEvent) { -// checkEnabled(); - } - - /** - * Description of the Method - * - * @param commandEvent Description of the Parameter - */ - public void commandNotExecutable(EventObject commandEvent) { -// checkEnabled(); - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CTXWindowMenu.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/CTXWindowMenu.java deleted file mode 100644 index ff38b8134..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CTXWindowMenu.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib; - -import java.awt.event.*; -import java.beans.*; -import javax.swing.*; -import javax.swing.event.*; - -import org.jhotdraw.contrib.CTXCommandMenu; -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.standard.AbstractCommand; - -/** - * Menu component that handles the functionality expected of a standard - * "Windows" menu for MDI applications. - * - * @author Eduardo Francos (adapted from original implementation by Wolfram Kaiser) - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class CTXWindowMenu extends CTXCommandMenu { - - MDIDesktopPane desktop; //increased visibility to avoid compilation errors - private CommandMenuItem cascadeCommand; - private CommandMenuItem tileHCommand; - private CommandMenuItem tileVCommand; - private CommandMenuItem arrangeHCommand; - private CommandMenuItem arrangeVCommand; - private int staticItems; - - /** - *Constructor for the CTXWindowsMenu object - * - * @param newText the menu's text - * @param desktop the MDI desktop - * @param editor the editor - */ - public CTXWindowMenu(String newText, MDIDesktopPane newDesktop, DrawingEditor newEditor) { - super(newText); - this.desktop = newDesktop; - - cascadeCommand = new CommandMenuItem( - new AbstractCommand("Cascade", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.cascadeFrames(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - tileHCommand = new CommandMenuItem( - new AbstractCommand("Tile Horizontally", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.tileFramesHorizontally(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - tileVCommand = new CommandMenuItem( - new AbstractCommand("Tile Vertically", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.tileFramesVertically(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - arrangeHCommand = new CommandMenuItem( - new AbstractCommand("Arrange Horizontally", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.arrangeFramesHorizontally(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - arrangeVCommand = new CommandMenuItem( - new AbstractCommand("Arrange Vertically", newEditor) { - public void execute() { - CTXWindowMenu.this.desktop.arrangeFramesVertically(); - } - - public boolean isExecutable() { - return super.isExecutable() && (CTXWindowMenu.this.desktop.getAllFrames().length > 0); - } - }); - - addMenuListener( - new MenuListener() { - public void menuCanceled(MenuEvent e) { } - - public void menuDeselected(MenuEvent e) { - removeWindowsList(); - } - - public void menuSelected(MenuEvent e) { - buildChildMenus(); - } - }); - - add(cascadeCommand); - add(tileHCommand); - add(tileVCommand); - add(arrangeHCommand); - add(arrangeVCommand); - staticItems = 5; - } - - /** removes the windows names */ - protected void removeWindowsList() { - // remove all items above static the items - while (this.getItemCount() > staticItems) { - remove(staticItems); - } - } - - /* - * Sets up the children menus depending on the current desktop state - */ - /** Description of the Method */ - void buildChildMenus() { //increased visibility to avoid compilation errors - JInternalFrame[] array = desktop.getAllFrames(); - - // update window organization commands - cascadeCommand.setEnabled(array.length > 0); - tileHCommand.setEnabled(array.length > 0); - tileVCommand.setEnabled(array.length > 0); - arrangeHCommand.setEnabled(array.length > 0); - arrangeVCommand.setEnabled(array.length > 0); - - if (array.length == 0) { - return; - } - - addSeparator(); - - for (int i = 0; i < array.length; i++) { - ChildMenuItem menu = new ChildMenuItem(array[i]); - menu.setState(i == 0); - menu.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent ae) { - JInternalFrame frame = ((ChildMenuItem)ae.getSource()).getFrame(); - frame.moveToFront(); - try { - frame.setSelected(true); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - } - }); - menu.setIcon(array[i].getFrameIcon()); - add(menu); - } - } - - /* - * This JCheckBoxMenuItem descendant is used to track the child frame that corresponds - * to a give menu. - */ - class ChildMenuItem extends JCheckBoxMenuItem { - private JInternalFrame frame; - - /** - *Constructor for the ChildMenuItem object - * - * @param frame Description of the Parameter - */ - public ChildMenuItem(JInternalFrame newFrame) { - super(newFrame.getTitle()); - frame = newFrame; - } - - /** - * Gets the frame attribute of the ChildMenuItem object - * - * @return The frame value - */ - public JInternalFrame getFrame() { - return frame; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/ChopDiamondConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/ChopDiamondConnector.java deleted file mode 100644 index 8af0ef393..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/ChopDiamondConnector.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * @(#)ChopDiamondConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.ChopBoxConnector; -import org.jhotdraw.util.Geom; - -/** - * A ChopDiamondConnector locates connection points by choping the - * connection between the centers of the two figures at the edge of - * a diamond figure. - * - * @see Connector - * - * @author Erich Gamma - * @version <$CURRENT_VERSION$> - */ -public class ChopDiamondConnector extends ChopBoxConnector { - /** - * Serialization support. - * Needs to be fixed. - */ - private static final long serialVersionUID = -1461450322512395462L; - - public ChopDiamondConnector() { - // only used for Storable implementation - } - - public ChopDiamondConnector(Figure owner) { - super(owner); - } - - /** - * Return an appropriate connection point on the edge of a diamond figure - */ - protected Point chop(Figure target, Point from) { - Rectangle r = target.displayBox(); - // Center point - Point c1 = new Point(r.x + r.width/2, r.y + (r.height/2)); - Point p2 = new Point(r.x + r.width/2, r.y + r.height); - Point p4 = new Point(r.x + r.width/2, r.y); - - // If overlapping, just return the opposite corners - if (r.contains(from)) { - if (from.y > r.y && from.y < (r.y +r.height/2)) { - return p2; - } - else { - return p4; - } - } - - // Calculate angle to determine quadrant - double ang = Geom.pointToAngle(r, from); - - // Dermine line points - Point p1 = new Point(r.x + r.width , r.y + (r.height/2)); - Point p3 = new Point(r.x , r.y + (r.height/2)); - Point rp = null; // This will be returned - - // Get the intersection with edges - if (ang > 0 && ang < 1.57) { - rp = Geom.intersect(p1.x, p1.y, p2.x, p2.y, c1.x, c1.y, from.x, from.y); - } - else if (ang > 1.575 && ang < 3.14) { - rp = Geom.intersect(p2.x, p2.y, p3.x, p3.y, c1.x, c1.y, from.x, from.y); - } - else if (ang > -3.14 && ang < -1.575) { - rp = Geom.intersect(p3.x, p3.y, p4.x, p4.y, c1.x, c1.y, from.x, from.y); - } - else if (ang > -1.57 && ang < 0) { - rp = Geom.intersect(p4.x, p4.y, p1.x, p1.y, c1.x, c1.y, from.x, from.y); - } - - // No proper edge found, we should send one of four corners - if (rp == null) { - rp = Geom.angleToPoint(r, ang); - } - - return rp; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/ChopPolygonConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/ChopPolygonConnector.java deleted file mode 100644 index 8740bb16e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/ChopPolygonConnector.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @(#)ChopPolygonConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; - -/** - * A ChopPolygonConnector locates a connection point by - * chopping the connection at the polygon boundary. - * - * @author Erich Gamma - * @version <$CURRENT_VERSION$> - */ -public class ChopPolygonConnector extends ChopBoxConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -156024908227796826L; - - public ChopPolygonConnector() { - } - - public ChopPolygonConnector(Figure owner) { - super(owner); - } - - protected Point chop(Figure target, Point from) { - return ((PolygonFigure)target).chop(from); - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/ClippingUpdateStrategy.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/ClippingUpdateStrategy.java deleted file mode 100644 index 232e7ce5a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/ClippingUpdateStrategy.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.jhotdraw.contrib; - -import java.awt.Graphics; -import java.awt.Rectangle; -import java.util.List; - -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.framework.Painter; -import org.jhotdraw.standard.FigureEnumerator; -import org.jhotdraw.util.CollectionsFactory; - -/** - * The ClippingUpdateStrategy will only draw those Figures in the DrawingView - * which intersect the Graphic's clipping rectangle. - * - * @author Aviv Hurvitz - */ -public class ClippingUpdateStrategy implements Painter { - - public ClippingUpdateStrategy() { - super(); - } - - /** - * @see org.jhotdraw.framework.Painter#draw(Graphics, DrawingView) - */ - public void draw(Graphics g, DrawingView view) { - Rectangle viewClipRectangle = g.getClipBounds(); - - if (viewClipRectangle == null) { - // it seems clip is always set, but nevertheless handle it - view.drawAll(g); - return; - } - - FigureEnumeration fe = view.drawing().figures(); - - // it's better to start big than to do Log(nFigures) reallocations - List figuresList = CollectionsFactory.current().createList(1000); - - // create a List of the figures within the clip rectangle - while (fe.hasNextFigure()) { - Figure fig = fe.nextFigure(); - Rectangle r = fig.displayBox(); - - // grow Rectangles that have 0 width or height, since - // Rectangle.intersects() returns false on them. - // These Rectangles are common, as they are the typical bounding - // boxes of horizontal and vertical lines. - // see my (regression) bug report on Sun's site: - // http://developer.java.sun.com/developer/bugParade/bugs/4643428.html - if (r.width <= 0) { - r.width = 1; - } - if (r.height <= 0) { - r.height = 1; - } - - if (r.intersects(viewClipRectangle)) { - figuresList.add(fig); - } - } - - // draw the figures in the clip rectangle - FigureEnumeration clippedFE = new FigureEnumerator(figuresList); - view.draw(g, clippedFE); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandCheckBoxMenuItem.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandCheckBoxMenuItem.java deleted file mode 100644 index 605872774..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandCheckBoxMenuItem.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib; - -import javax.swing.JCheckBoxMenuItem; -import org.jhotdraw.util.Command; -import javax.swing.Icon; - -/** - * CommandCheckBoxMenuItem implements a command that can be added to a menu - * as a checkbox menu item - * - * @author Eduardo Francos - InContext - * @version <$CURRENT_VERSION$> - */ - -public class CommandCheckBoxMenuItem extends JCheckBoxMenuItem - implements CommandHolder -{ - Command fCommand; - - /** - * Creates an initially unselected check box menu item - * with the specified command - */ - public CommandCheckBoxMenuItem(Command command) { - super(command.name()); - setCommand(command); - } - - /** - * Creates an initially unselected check box menu item with an icon and - * the specified command. - * - * @param icon the icon of the CheckBoxMenuItem. - */ - public CommandCheckBoxMenuItem(Command command, Icon icon) { - super(command.name(), icon); - setCommand(command); - } - - /** - * Creates a check box menu item with the specified command and selection state. - * - * @param command the command to be executed upon menu selection - * @param b the selected state of the check box menu item - */ - public CommandCheckBoxMenuItem(Command command, boolean b) { - super(command.name(), b); - setCommand(command); - } - - /** - * Creates a check box menu item with the specified text, icon, and selection state. - * - * @param command the command to be executed upon menu selection - * @param icon the icon of the check box menu item - * @param b the selected state of the check box menu item - */ - public CommandCheckBoxMenuItem(Command command, Icon icon, boolean b) { - super(command.name(), icon, b); - setCommand(command); - } - - - /** - * Gets the command attribute of the CommandMenuItem object - * - * @return The command value - */ - public Command getCommand() { - return fCommand; - } - - - /** - * Sets the command attribute of the CommandMenuItem object - * - * @param newCommand The new command value - */ - public void setCommand(Command newCommand) { - fCommand = newCommand; - } - -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandHolder.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandHolder.java deleted file mode 100644 index 2960aef68..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandHolder.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib; - -import org.jhotdraw.util.Command; - -/** - * CommandHolder defines the interface for wrapper objects holding a Command, - * like menu items or toolbar tools. - * - * @author Eduardo Francos - InContext - * @created 8 mai 2002 - * @version <$CURRENT_VERSION$> - */ - -public interface CommandHolder { - /** - * Gets the command of the CommandHolder object - * - * @return The command value - */ - public Command getCommand(); - - - /** - * Sets the command of the CommandHolder object - * - * @param newCommand The new command value - */ - public void setCommand(Command newCommand); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandMenuItem.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandMenuItem.java deleted file mode 100644 index 215ffe018..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CommandMenuItem.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib; - -import org.jhotdraw.util.Command; -import javax.swing.JMenuItem; -import javax.swing.Icon; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; - -/** - * CommandMenuItem implements a command that can be added to a menu - * as a menu item - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class CommandMenuItem extends JMenuItem implements CommandHolder, ActionListener { - - private Command fCommand; - - /** - * Creates a menuItem with no set text or icon. - */ - public CommandMenuItem(Command command) { - super(command.name()); - setCommand(command); - addActionListener(this); - } - - /** - * Creates a menuItem with an icon. - * - * @param icon the icon of the MenuItem. - */ - public CommandMenuItem(Command command, Icon icon) { - super(command.name(), icon); - setCommand(command); - addActionListener(this); - } - - /** - * Creates a menuItem with the specified text and - * keyboard mnemonic. - * - * @param command the command to be executed upon menu selection - * @param mnemonic the keyboard mnemonic for the MenuItem - */ - public CommandMenuItem(Command command, int mnemonic) { - super(command.name(), mnemonic); - setCommand(command); - } - - /** - * Gets the command attribute of the CommandMenuItem object - * - * @return The command value - */ - public Command getCommand() { - return fCommand; - } - - /** - * Sets the command attribute of the CommandMenuItem object - * - * @param newCommand The new command value - */ - public void setCommand(Command newCommand) { - fCommand = newCommand; - } - - /** - * Executes the command. - */ - public void actionPerformed(ActionEvent e) { - getCommand().execute(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/ComponentFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/ComponentFigure.java deleted file mode 100644 index af3a7af45..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/ComponentFigure.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * @(#)ComponentFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.figures.AttributeFigure; -import org.jhotdraw.standard.BoxHandleKit; -import org.jhotdraw.standard.HandleEnumerator; -import org.jhotdraw.framework.*; -import org.jhotdraw.util.CollectionsFactory; - -import java.awt.Component; -import java.awt.Rectangle; -import java.awt.Point; -import java.awt.Graphics; -import java.util.List; - -/** - * @author Ming Fang - * @version <$CURRENT_VERSION$> - */ -public class ComponentFigure extends AttributeFigure { - private Rectangle bounds; - - /** Holds value of property component. */ - private Component component; - - private ComponentFigure() { - bounds = new Rectangle(); - } - - /** - * @param newComponent a lightweight component - */ - public ComponentFigure(Component newComponent) { - this(); - setComponent(newComponent); - } - - /** - * Changes the display box of a figure. This method is - * always implemented in figure subclasses. - * It only changes - * the displaybox and does not announce any changes. It - * is usually not called by the client. Clients typically call - * displayBox to change the display box. - * - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void basicDisplayBox(Point origin, Point corner) { - bounds = new Rectangle(origin); - bounds.add(corner); - } - - /** - * Moves the figure. This is the - * method that subclassers override. Clients usually - * call displayBox. - * @see #moveBy - */ - protected void basicMoveBy(int dx, int dy) { - bounds.translate(dx, dy); - } - - /** - * Gets the display box of a figure - * @see #basicDisplayBox - */ - public Rectangle displayBox() { - return new Rectangle(bounds); - } - - /** - * Returns the handles used to manipulate - * the figure. Handles is a Factory Method for - * creating handle objects. - * - * @return a type-safe iterator of handles - * @see Handle - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - /** - * Getter for property component. - * @return Value of property component. - */ - public Component getComponent() { - return this.component; - } - - /** - * Setter for property component. - * - * @param newComponent New value of property component. - */ - protected void setComponent(Component newComponent) { - this.component = newComponent; - } - - /** - * Draws the figure. - * @param g the Graphics to draw into - */ - public void draw(Graphics g) { - // AWT code - getComponent().setBounds(displayBox()); - //must create a new graphics with a different cordinate - Graphics componentG = g.create(bounds.x, bounds.y, bounds.width, bounds.height); - getComponent().paint(componentG); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CompositeFigureCreationTool.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/CompositeFigureCreationTool.java deleted file mode 100644 index 7bbc3827c..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CompositeFigureCreationTool.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * @(#)CompositeFigureCreationTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.standard.CreationTool; -import org.jhotdraw.standard.CompositeFigure; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.framework.DrawingView; - -import java.awt.event.MouseEvent; -import java.awt.*; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class CompositeFigureCreationTool extends CreationTool { - private CompositeFigure myContainerFigure; - - public CompositeFigureCreationTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - figure = figure.getDecoratedFigure(); - if (figure instanceof CompositeFigure) { - setContainerFigure((CompositeFigure)figure); - setCreatedFigure(createFigure()); - setAddedFigure((getContainerFigure().add(getCreatedFigure()))); - getAddedFigure().displayBox(new Point(x, y), new Point(x, y)); - } - else { - toolDone(); - } - } - else { - toolDone(); - } - } - - public void mouseMove(MouseEvent e, int x, int y) { - if ((getContainerFigure() != null) && !getContainerFigure().containsPoint(e.getX(), e.getY())) { - // here you might want to constrain the mouse movements to the size of the - // container figure: not sure whether this works... - toolDone(); - } - else { - super.mouseMove(e, x, y); - } - } - - protected void setContainerFigure(CompositeFigure newContainerFigure) { - myContainerFigure = newContainerFigure; - } - - public CompositeFigure getContainerFigure() { - return myContainerFigure; - } - - protected void toolDone() { - setCreatedFigure(null); - setAddedFigure(null); - setContainerFigure(null); - editor().toolDone(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CustomSelectionTool.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/CustomSelectionTool.java deleted file mode 100644 index d0afab8d9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CustomSelectionTool.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * @(#)CustomSelectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.*; -import org.jhotdraw.contrib.zoom.ZoomDrawingView; -import org.jhotdraw.standard.*; -import javax.swing.JPopupMenu; -import java.awt.*; -import java.awt.event.*; - -/** - * A SelectionTool, which recognizes double clicks and popup menu triggers. - * If a double click or popup trigger is encountered a hook method is called, - * which handles the event. This methods can be overriden in subclasse to - * provide customized behaviour. - * Popup menus must be registered with a Figure using the - * setAttribute() method. The key which associates a popup menu as an - * attribute is FigureAttributeConstant.POPUP_MENU. - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class CustomSelectionTool extends SelectionTool { - - /** - * Create an instance of this SelectionTool for the given view - * - * @param editor DrawingEditor for which the SelectionTool gets the active view - */ - public CustomSelectionTool(DrawingEditor editor) { - super( editor ); - } - - /** - * MouseListener method for mouseDown events. If the popup trigger has been - * activated, then the appropriate hook method is called. - * - * @param e MouseEvent which should be interpreted - * @param x x coordinate of the MouseEvent - * @param y y coordinate of the MouseEvent - */ - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - // isPopupTrigger() at mouseDown() is only notified at UNIX systems - if (e.isPopupTrigger()) { - handlePopupMenu(e, x, y); - } - else { - super.mouseDown(e, x, y); - handleMouseDown(e, x, y); - } - } - - /** - * MouseListener method for mouseDrag events. Usually, mouse drags are - * ignored for popup menus or double clicks. - * - * @param e MouseEvent which should be interpreted - * @param x x coordinate of the MouseEvent - * @param y y coordinate of the MouseEvent - */ - public void mouseDrag(MouseEvent e, int x, int y) { - if (!e.isPopupTrigger()) { - super.mouseDrag(e, x, y); - } - } - - /** - * MouseListener method for mouseUp events. Depending on the kind of event - * the appropriate hook method is called (popupMenuUp for popup trigger, - * doubleMouseClick for a double click, and mouseUp() and mouseClick() for - * normal mouse clicks). - * - * @param e MouseEvent which should be interpreted - * @param x x coordinate of the MouseEvent - * @param y y coordinate of the MouseEvent - */ - public void mouseUp(MouseEvent e, int x, int y) { - if (e.isPopupTrigger()) { - handlePopupMenu(e, x, y); - super.mouseUp(e, x, y); - } - else if (e.getClickCount() == 2) { - super.mouseUp(e, x, y); - handleMouseDoubleClick(e, x, y); - } - else { - super.mouseUp(e, x, y); - handleMouseUp(e, x, y); - handleMouseClick(e, x, y); - } - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse down. - */ - protected void handleMouseDown(MouseEvent e, int x, int y) { - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse up. - */ - protected void handleMouseUp(MouseEvent e, int x, int y) { - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse click. - */ - protected void handleMouseClick(MouseEvent e, int x, int y) { - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse double click. - */ - protected void handleMouseDoubleClick(MouseEvent e, int x, int y) { - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a popup trigger. - */ - protected void handlePopupMenu(MouseEvent e, int x, int y) { - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - Object attribute = figure.getAttribute(FigureAttributeConstant.POPUP_MENU); - if (attribute == null) { - figure = drawing().findFigureInside(e.getX(), e.getY()); - } - if (figure != null) { - showPopupMenu(figure, e.getX(), e.getY(), e.getComponent()); - } - } - } - - /** - * This method displays a popup menu, if there is one - * registered with the Figure (the Figure's attributes are - * queried for FigureAttributeConstant.POPUP_MENU which is - * used to indicate an association of a popup menu with the - * Figure). - * - * @param figure Figure for which a popup menu should be displayed - * @param x x coordinate where the popup menu should be displayed - * @param y y coordinate where the popup menu should be displayed - * @param comp Component which invoked the popup menu - */ - protected void showPopupMenu(Figure figure, int x, int y, Component comp) { - Object attribute = figure.getAttribute(FigureAttributeConstant.POPUP_MENU); - if ((attribute != null) && (attribute instanceof JPopupMenu)) { - JPopupMenu popup = (JPopupMenu)attribute; - if (popup instanceof PopupMenuFigureSelection) { - ((PopupMenuFigureSelection)popup).setSelectedFigure(figure); - } - // Calculate position on physical screen based - // on x,y coordinates - Point newLocation; - try { - newLocation = comp.getLocationOnScreen(); - } catch (IllegalComponentStateException e) { - // For some reason, the component - // apparently isn't showing on the - // screen (huh?). Never mind - don't - // show the popup.. - return; - } - // If this is a ZoomDrawingView, we'll need to - // compensate here too: - if (comp instanceof ZoomDrawingView) { - double scale = ((ZoomDrawingView) comp).getScale(); - x *= scale; - y *= scale; - } - newLocation.translate(x,y); - popup.setLocation(newLocation); - popup.setInvoker(comp); - popup.setVisible(true); - } - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CustomToolBar.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/CustomToolBar.java deleted file mode 100644 index 588d1521a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/CustomToolBar.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * @(#)CustomToolBar.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.util.CollectionsFactory; - -import javax.swing.JToolBar; -import javax.swing.JComponent; -import java.util.List; -import java.util.Iterator; -import java.awt.Component; - -/** - * This ToolBar allows to use several panels with tools. It manages each - * panel and enables to swap between them. There can only one panel with - * tools be activated at a time. Currently, only two panels are supported - * (standard tools and edit tools). - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class CustomToolBar extends JToolBar { - - /** - * List containing all tools for the standard ToolBar - */ - private List standardTools; - - /** - * List containing all tools for the edit ToolBar - */ - private List editTools; - - /** - * List containing all tools, which are currently activated - */ - private List currentTools; - - /** - * Flag which determines whether the tool palette must be updated - */ - private boolean needsUpdate; - - /** - * Create a new ToolBar - */ - public CustomToolBar() { - super(); - standardTools = CollectionsFactory.current().createList(); - editTools = CollectionsFactory.current().createList(); - currentTools = standardTools; - needsUpdate = false; - } - - /** - * Switch between the two available palettes with tools - */ - public void switchToolBar() { - if (currentTools == standardTools) { - switchToEditTools(); - } - else { - switchToStandardTools(); - } - } - - /** - * Select the palette with the edit tools - */ - public void switchToEditTools() { - if (currentTools != editTools) { - currentTools = editTools; - needsUpdate = true; - } - } - - /** - * Select the palette with the standard tools - */ - public void switchToStandardTools() { - if (currentTools != standardTools) { - currentTools = standardTools; - needsUpdate = true; - } - } - - /** - * Activate a palette of the ToolBar by setting all Tools - */ - public void activateTools() { - if (!needsUpdate) { - return; - } - else { - removeAll(); - - JComponent currentTool = null; - Iterator iter = currentTools.iterator(); - while (iter.hasNext()) { - currentTool = (JComponent)iter.next(); - super.add(currentTool); - } - validate(); - needsUpdate = false; - } - } - - /** - * Add a new tool the the current palette of the ToolBar - */ - public Component add(Component newTool) { - if (currentTools == editTools) { - editTools.add(newTool); - } - else { - standardTools.add(newTool); - } - needsUpdate = true; - return super.add(newTool); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/Desktop.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/Desktop.java deleted file mode 100644 index defcfcc88..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/Desktop.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)Desktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.DrawingView; - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface Desktop { - public final static int PRIMARY = 0; - public final static int SECONDARY = 1; - public final static int TERTIARY = 2; - - /** - * For those absent minded components that were not paying attention to the - * listener events. - */ - public DrawingView getActiveDrawingView(); - public void addToDesktop(DrawingView dv, int location); - public void removeFromDesktop(DrawingView dv, int location); - public void removeAllFromDesktop(int location); - public DrawingView[] getAllFromDesktop(int location); - - public void updateTitle(String newDrawingTitle); - - public void addDesktopListener(DesktopListener dpl); - public void removeDesktopListener(DesktopListener dpl); -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopEvent.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopEvent.java deleted file mode 100644 index 14d8306c9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopEvent.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * @(#)DesktopEvent.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.DrawingView; -import java.util.EventObject; - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DesktopEvent extends EventObject { - private DrawingView myDrawingView; - - /** - * Some events require the previous DrawingView (e.g. when a new DrawingView - * is selected). - */ - private DrawingView myPreviousDrawingView; - - public DesktopEvent(Desktop newSource, DrawingView newDrawingView) { - this(newSource, newDrawingView, null); - } - - public DesktopEvent(Desktop newSource, DrawingView newDrawingView, DrawingView newPreviousDV) { - super(newSource); - setDrawingView(newDrawingView); - setPreviousDrawingView(newPreviousDV); - } - - private void setDrawingView(DrawingView newDrawingView) { - myDrawingView = newDrawingView; - } - - public DrawingView getDrawingView() { - return myDrawingView; - } - - private void setPreviousDrawingView(DrawingView newPreviousDrawingView) { - myPreviousDrawingView = newPreviousDrawingView; - } - - public DrawingView getPreviousDrawingView() { - return myPreviousDrawingView; - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopEventService.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopEventService.java deleted file mode 100644 index 4b48c25e2..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopEventService.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * @(#)DesktopEventService.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.standard.NullDrawingView; -import org.jhotdraw.util.CollectionsFactory; - -import java.util.List; -import java.util.ListIterator; -import java.awt.event.ContainerAdapter; -import java.awt.event.ContainerListener; -import java.awt.event.ContainerEvent; -import java.awt.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DesktopEventService { - - /** - * Current usage of this List is not thread safe, nor should it need to be. - * If it ever does we can synchronize on the List itself to provide safety. - */ - private java.util.List listeners; - private DrawingView mySelectedView; - private Container myContainer; - private Desktop myDesktop; - - public DesktopEventService(Desktop newDesktop, Container newContainer) { - listeners = CollectionsFactory.current().createList(); - setDesktop(newDesktop); - setContainer(newContainer); - getContainer().addContainerListener(createComponentListener()); - } - - private void setDesktop(Desktop newDesktop) { - myDesktop = newDesktop; - } - - protected Desktop getDesktop() { - return myDesktop; - } - - private void setContainer(Container newContainer) { - myContainer = newContainer; - } - - protected Container getContainer() { - return myContainer; - } - - public void addComponent(Component newComponent) { - getContainer().add(newComponent); - } - - public void removeComponent(DrawingView dv) { - Component[] comps = getContainer().getComponents(); - for (int x = 0; x < comps.length; x++) { - if (dv == Helper.getDrawingView(comps[x])) { - getContainer().remove(comps[x]); - break; - } - } - } - - public void removeAllComponents() { - getContainer().removeAll(); - } - - public void addDesktopListener(DesktopListener dpl) { - listeners.add(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - listeners.remove(dpl); - } - - protected void fireDrawingViewAddedEvent(final DrawingView dv) { - ListIterator li= listeners.listIterator(listeners.size()); - DesktopEvent dpe = createDesktopEvent(getActiveDrawingView(), dv); - while (li.hasPrevious()) { - DesktopListener dpl = (DesktopListener)li.previous(); - dpl.drawingViewAdded(dpe); - } - } - - protected void fireDrawingViewRemovedEvent(final DrawingView dv) { - ListIterator li= listeners.listIterator(listeners.size()); - DesktopEvent dpe = createDesktopEvent(getActiveDrawingView(), dv); - while (li.hasPrevious()) { - DesktopListener dpl = (DesktopListener)li.previous(); - dpl.drawingViewRemoved(dpe); - } - } - - /** - * This method is only called if the selected drawingView has actually changed - */ - protected void fireDrawingViewSelectedEvent(final DrawingView oldView, final DrawingView newView) { - ListIterator li= listeners.listIterator(listeners.size()); - DesktopEvent dpe = createDesktopEvent(oldView, newView); - while (li.hasPrevious()) { - DesktopListener dpl = (DesktopListener)li.previous(); - dpl.drawingViewSelected(dpe); - } - } - - /** - * @param oldView previous active drawing view (may be null because not all events require this information) - */ - protected DesktopEvent createDesktopEvent(DrawingView oldView, DrawingView newView) { - return new DesktopEvent(getDesktop(), newView, oldView); - } - - public DrawingView[] getDrawingViews(Component[] comps) { - List al = CollectionsFactory.current().createList(); - for (int x = 0; x < comps.length; x++) { - DrawingView dv = Helper.getDrawingView(comps[x]); - if (dv != null) { - al.add(dv); - } - } - DrawingView[] dvs = new DrawingView[al.size()]; - al.toArray(dvs); - return dvs; - } - - public DrawingView getActiveDrawingView() { - return mySelectedView; - } - - protected void setActiveDrawingView(DrawingView newActiveDrawingView) { - mySelectedView = newActiveDrawingView; - } - - protected ContainerListener createComponentListener() { - return new ContainerAdapter() { - /** - * If the dv is null assert - * @todo does adding a component always make it the selected view? - * Yes so far because this is only being used on single view Desktops. - * If it is to work on multipleView desktops, the we need to think further. - */ - public void componentAdded(ContainerEvent e) { - DrawingView dv = Helper.getDrawingView((java.awt.Container)e.getChild()); - DrawingView oldView = getActiveDrawingView(); - if (dv != null) { - fireDrawingViewAddedEvent(dv); - setActiveDrawingView(dv); - fireDrawingViewSelectedEvent(oldView, getActiveDrawingView()); - } - } - - /** - * If dv is null assert - * dv will only be null if something thats not a drawingView was - * added to the desktop. it would be simpler if we forbade that. - */ - public void componentRemoved(ContainerEvent e) { - DrawingView dv = Helper.getDrawingView((java.awt.Container)e.getChild()); - if (dv != null) { - DrawingView oldView = getActiveDrawingView(); - setActiveDrawingView(NullDrawingView.getManagedDrawingView(oldView.editor())); - fireDrawingViewSelectedEvent(oldView, getActiveDrawingView()); - fireDrawingViewRemovedEvent(dv); - } - } - }; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopListener.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopListener.java deleted file mode 100644 index 116a03e9f..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/DesktopListener.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * @(#)DesktopEventService.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -/** - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface DesktopListener { - public void drawingViewAdded(DesktopEvent dpe); - public void drawingViewRemoved(DesktopEvent dpe); - public void drawingViewSelected(DesktopEvent dpe); -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/DiamondFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/DiamondFigure.java deleted file mode 100644 index 80a14a33b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/DiamondFigure.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * @(#)DiamondFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.*; -import org.jhotdraw.figures.*; -import java.awt.*; - -/** - * A diamond with vertices at the midpoints of its enclosing rectangle - * - * @author Doug Lea (dl at gee, Tue Feb 25 17:39:44 1997) - * @version <$CURRENT_VERSION$> - */ -public class DiamondFigure extends RectangleFigure { - - public DiamondFigure() { - super(new Point(0,0), new Point(0,0)); - } - - public DiamondFigure(Point origin, Point corner) { - super(origin,corner); - } - - /** - * @return the polygon describing the diamond - **/ - protected Polygon getPolygon() { - Rectangle r = displayBox(); - Polygon p = new Polygon(); - p.addPoint(r.x, r.y+r.height/2); - p.addPoint(r.x+r.width/2, r.y); - p.addPoint(r.x+r.width, r.y+r.height/2); - p.addPoint(r.x+r.width/2, r.y+r.height); - return p; - } - - public void draw(Graphics g) { - Polygon p = getPolygon(); - g.setColor(getFillColor()); - g.fillPolygon(p); - g.setColor(getFrameColor()); - g.drawPolygon(p); - } - - public Insets connectionInsets() { - Rectangle r = displayBox(); - return new Insets(r.height/2, r.width/2, r.height/2, r.width/2); - } - - public boolean containsPoint(int x, int y) { - return getPolygon().contains(x, y); - } - - public Point chop(Point p) { - return PolygonFigure.chop(getPolygon(), p); - } - - public Connector connectorAt(int x, int y) { - return new ChopDiamondConnector(this); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/FloatingTextArea.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/FloatingTextArea.java deleted file mode 100644 index a95bf5fbe..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/FloatingTextArea.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * @(#)FloatingTextArea.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib; - -import java.awt.Color; - -import java.awt.Container; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.Rectangle; -import javax.swing.BorderFactory; -import javax.swing.JEditorPane; -import javax.swing.JScrollPane; - -/** - * A FloatingTextArea overlays an editor on top of an area in a drawing<br> - * @author Eduardo Francos - InContext - * @version <$CURRENT_VERSION$> - * @todo By default JEditorPane uses a tab size of 8. - * I couldn't find how to change this. - * If anybody knows please tell me. - */ -public class FloatingTextArea { - /** - * A scroll pane to allow for vertical scrolling while editing - */ - protected JScrollPane fEditScrollContainer; - /** - * The actual editor - */ - protected JEditorPane fEditWidget; - /** - * The container within which the editor is created - */ - protected Container fContainer; - - - /** - * Constructor for the FloatingTextArea object - */ - public FloatingTextArea() { - fEditWidget = new JEditorPane(); - fEditScrollContainer = new JScrollPane(fEditWidget, - JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - fEditScrollContainer.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - fEditScrollContainer.setBorder(BorderFactory.createLineBorder(Color.black)); - } - - - /** - * Creates the overlay within the given container. - * @param container the container - */ - public void createOverlay(Container container) { - createOverlay(container, null); - } - - - /** - * Creates the overlay for the given Container using a - * specific font. - * @param container the container - * @param font the font - */ - public void createOverlay(Container container, Font font) { - container.add(fEditScrollContainer, 0); - if (font != null) { - fEditWidget.setFont(font); - } - fContainer = container; - } - - - /** - * Positions and sizes the overlay. - * @param r the bounding rectangle for the overlay - * @param text the text to edit - */ - public void setBounds(Rectangle r, String text) { - fEditWidget.setText(text); - fEditScrollContainer.setBounds(r.x, r.y, r.width, r.height); - fEditScrollContainer.setVisible(true); - fEditWidget.setCaretPosition(0); - fEditWidget.requestFocus(); - } - - - /** - * Gets the text contents of the overlay. - * @return The text value - */ - public String getText() { - return fEditWidget.getText(); - } - - - /** - * Gets the preferred size of the overlay. - * @param cols Description of the Parameter - * @return The preferredSize value - */ - public Dimension getPreferredSize(int cols) { - return new Dimension(fEditWidget.getWidth(), fEditWidget.getHeight()); - } - - - /** - * Removes the overlay. - */ - public void endOverlay() { - fContainer.requestFocus(); - if (fEditScrollContainer != null) { - fEditScrollContainer.setVisible(false); - fContainer.remove(fEditScrollContainer); - - Rectangle bounds = fEditScrollContainer.getBounds(); - fContainer.repaint(bounds.x, bounds.y, bounds.width, bounds.height); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/GraphicalCompositeFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/GraphicalCompositeFigure.java deleted file mode 100644 index 0968e611d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/GraphicalCompositeFigure.java +++ /dev/null @@ -1,355 +0,0 @@ -/* - * @(#)GraphicalCompositeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; -import org.jhotdraw.figures.*; -import java.awt.*; -import java.io.*; -import java.util.List; - -/** - * The GraphicalCompositeFigure fills in the gap between a CompositeFigure - * and other figures which mainly have a presentation purpose. The - * GraphicalCompositeFigure can be configured with any Figure which - * takes over the task for rendering the graphical presentation for - * a CompositeFigure. Therefore, the GraphicalCompositeFigure manages - * contained figures like the CompositeFigure does, but delegates - * its graphical presentation to another (graphical) figure which - * purpose it is to draw the container for all contained figures. - * - * The GraphicalCompositeFigure adds to the {@link CompositeFigure CompositeFigure} - * by containing a presentation figure by default which can not be removed. Normally, - * the {@link CompositeFigure CompositeFigure} can not be seen without containing a figure - * because it has no mechanism to draw itself. It instead relies on its contained - * figures to draw themselves thereby giving the {@link CompositeFigure CompositeFigure} its - * appearance. However, the <b>GraphicalCompositeFigure</b>'s presentation figure - * can draw itself even when the <b>GraphicalCompositeFigure</b> contains no other figures. - * The <b>GraphicalCompositeFigure</b> also uses a {@link Layouter Layouter} or layout - * its contained figures. - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class GraphicalCompositeFigure extends CompositeFigure implements Layoutable { - - /** - * Figure which performs all presentation tasks for this - * CompositeFigure as CompositeFigures usually don't have - * an own presentation but present only the sum of all its - * children. - */ - private Figure myPresentationFigure; - - /** - * A Layouter determines how the CompositeFigure should - * be laid out graphically. - */ - private Layouter myLayouter; - - private static final long serialVersionUID = 1265742491024232713L; - - /** - * Default constructor which uses a RectangleFigure as presentation - * figure. This constructor is needed by the Storable mechanism. - */ - public GraphicalCompositeFigure() { - this(new RectangleFigure()); - } - - /** - * Constructor which creates a GraphicalCompositeFigure with - * a given graphical figure for presenting it. - * - * @param newPresentationFigure figure which renders the container - */ - public GraphicalCompositeFigure(Figure newPresentationFigure) { - super(); - setPresentationFigure(newPresentationFigure); - initialize(); - } - - /** - * This method performs additional initialization operations, - * in this case setting the Layouter. - * It is called from the constructors and the clone() method. - * A StandardLayouter is set. - */ - protected void initialize() { - if (getLayouter() != null) { - // use prototype to create new instance - setLayouter(getLayouter().create(this)); - } - else { - setLayouter(new StandardLayouter(this)); - } - } - - /** - * Clones a figure and initializes it - * - * @see Figure#clone - */ - public Object clone() { - Object cloneObject = super.clone(); - ((GraphicalCompositeFigure)cloneObject).initialize(); - return cloneObject; - } - - /** - * Return the display area. This method is delegated to the encapsulated presentation figure. - */ - public Rectangle displayBox() { - return getPresentationFigure().displayBox(); - } - - /** - * Standard presentation method which is delegated to the encapsulated presentation figure. - */ - public void basicDisplayBox(Point origin, Point corner) { - Rectangle r = getLayouter().layout(origin, corner); - // Fix for bug request IDs 548000 and 548032 - // Previously was - // getPresentationFigure().basicDisplayBox(r.getLocation(), new Point(r.width, r.height)); - // The corner transferred to the presentation figure is wrong as it transfers - // the dimension of the resulting rectangle from the layouter instead of the - // lower right corner - getPresentationFigure().basicDisplayBox(r.getLocation(), - new Point((int)r.getMaxX(), (int)r.getMaxY())); - } - - /** - * Standard presentation method which is delegated to the encapsulated presentation figure. - * The presentation figure is moved as well as all contained figures. - */ - protected void basicMoveBy(int dx, int dy) { - super.basicMoveBy(dx, dy); - getPresentationFigure().moveBy(dx, dy); - } - - /** - * Explicit update: an updated involves a layout for all contained figures. - */ - public void update() { - willChange(); - layout(); - change(); - changed(); - } - - /** - * Draw the figure. This method is delegated to the encapsulated presentation figure. - */ - public void draw(Graphics g) { - getPresentationFigure().draw(g); - super.draw(g); - } - - /** - * Return default handles from the presentation figure. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - //return getPresentationFigure().handles(); - } - - /** - * Delegate capabilities for storing and retrieving attributes to a - * CompositeFigure if the encapsulated presentation figure. If no - * presentation figure is found then the superclass' getAttribute() - * will be invoked (which currently returns always "null"). - * - * @param name name of the attribute whose value should be returned - * @return value of the attribute with the given name - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - if (getPresentationFigure() != null) { - return getPresentationFigure().getAttribute(name); - } - else { - return super.getAttribute(name); - } - } - - /** - * Delegate capabilities for storing and retrieving attributes to a - * CompositeFigure if the encapsulated presentation figure. If no - * presentation figure is found then the superclass' getAttribute() - * will be invoked (which currently returns always "null"). - * - * @param attributeConstant attribute constant whose value should be returned - * @return value of the attribute with the given name - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - if (getPresentationFigure() != null) { - return getPresentationFigure().getAttribute(attributeConstant); - } - else { - return super.getAttribute(attributeConstant); - } - } - - /** - * Delegate capabilities for storing and retrieving attributes to a - * CompositeFigure if the encapsulated presentation figure. If no - * presentation figure is found then the superclass' setAttribute() - * will be invoked (which currently does not set an attribute). - * - * @param name name of the attribute - * @param value value associated with this attribute - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - if (getPresentationFigure() != null) { - getPresentationFigure().setAttribute(name, value); - } - else { - super.setAttribute(name, value); - } - } - - /** - * Delegate capabilities for storing and retrieving attributes to a - * CompositeFigure if the encapsulated presentation figure. If no - * presentation figure is found then the superclass' setAttribute() - * will be invoked (which currently does not set an attribute). - * - * @param attributeConstant attribute constant - * @param value value associated with this attribute - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - if (getPresentationFigure() != null) { - getPresentationFigure().setAttribute(attributeConstant, value); - } - else { - super.setAttribute(attributeConstant, value); - } - } - - /** - * Set a figure which renders this CompositeFigure. The presentation - * tasks for the CompositeFigure are delegated to this presentation - * figure. - * - * @param newPresentationFigure figure takes over the presentation tasks - */ - public void setPresentationFigure(Figure newPresentationFigure) { - myPresentationFigure = newPresentationFigure; - } - - /** - * Get a figure which renders this CompositeFigure. The presentation - * tasks for the CompositeFigure are delegated to this presentation - * figure. - * - * @return figure takes over the presentation tasks - */ - public Figure getPresentationFigure() { - return myPresentationFigure; - } - - /** - * A layout algorithm is used to define how the child components - * should be laid out in relation to each other. The task for - * layouting the child components for presentation is delegated - * to a Layouter which can be plugged in at runtime. - */ - public void layout() { - if (getLayouter() != null) { - Rectangle r = getLayouter().calculateLayout(displayBox().getLocation(), displayBox().getLocation()); - displayBox(r.getLocation(), new Point(r.x + r.width, r.y + r.height)); - } - } - - /** - * Set a Layouter object which encapsulated a layout - * algorithm for this figure. Typically, a Layouter - * accesses the child components of this figure and arranges - * their graphical presentation. It is a good idea to set - * the Layouter in the protected initialize() method - * so it can be recreated if a GraphicalCompositeFigure is - * read and restored from a StorableInput stream. - * - * @param newLayouter encapsulation of a layout algorithm. - */ - public void setLayouter(Layouter newLayouter) { - myLayouter = newLayouter; - } - - /** - * Get a Layouter object which encapsulated a layout - * algorithm for this figure. Typically, a Layouter - * accesses the child components of this figure and arranges - * their graphical presentation. - * - * @return layout strategy used by this figure - */ - public Layouter getLayouter() { - return myLayouter; - } - - /** - * Notify the registered change listener if an exlicit change - * to the component (or one of its child components has occurred). - */ - protected void change() { - if (listener() != null) { - listener().figureRequestUpdate(new FigureChangeEvent(this)); - } - } - - /** - * Propagates the removeFromDrawing request up to the container. - */ - public void figureRequestRemove(FigureChangeEvent e) { - if (listener() != null) { - if (includes(e.getFigure())) { - Rectangle r = invalidateRectangle(displayBox()); - listener().figureRequestRemove(new FigureChangeEvent(this, r, e)); - } - else { - super.figureRequestRemove(e); - } - } - } - - /** - * Reads the contained figures from StorableInput. The - * figure responsible for graphical presentation is read - * together with all child components. The Layouter - * is not stored and therefore not read. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - setPresentationFigure((Figure)dr.readStorable()); - setLayouter((Layouter)dr.readStorable()); - } - - /** - * Writes the contained figures to the StorableOutput. The - * figure responsible for graphical presentation is written - * together with all child components. The Layouter - * is not written. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getPresentationFigure()); - dw.writeStorable(getLayouter()); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/GridPainter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/GridPainter.java deleted file mode 100644 index fc24622f9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/GridPainter.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * @(#)GridPainter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib; - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; - -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.framework.Painter; - -/** -* <p> -* This painter draws a grid as background for the drawing view -* </p> -* -* @author Jorge Manrubia D�ez -* @version 1.0 -*/ -public class GridPainter implements Painter { - private int myHorizontalSeparation; - private int myVerticalSeparation; - private Color myColor; - - /** - * It constructs the painter using the desired horizontal and vertical - * separation - * - * @param horizontalSeparation - * @param verticalSeparation - */ - public GridPainter(int horizontalSeparation, int verticalSeparation) { - super(); - setHorizontalSeparation(horizontalSeparation); - setVerticalSeparation(verticalSeparation); - setColor(Color.black); - } - - /** - * It constructs the painter using the desired separation (both horizontal - * and vertical) - * - * @param newSeparation number of pixel which should separate the grid - */ - public GridPainter(int newSeparation) { - this(newSeparation, newSeparation); - } - - public int getHorizontalSeparation() { - return myHorizontalSeparation; - } - - public void setHorizontalSeparation(int newHorizontalSeparation) { - myHorizontalSeparation = newHorizontalSeparation; - } - - public int getVerticalSeparation() { - return myVerticalSeparation; - } - - public void setVerticalSeparation(int newVerticalSeparation) { - myVerticalSeparation = newVerticalSeparation; - } - - /** - * @see org.jhotdraw.framework.Painter#draw(java.awt.Graphics, org.jhotdraw.framework.DrawingView) - */ - public void draw(Graphics g, DrawingView view) { - g.setColor(getColor()); - Dimension size = view.getSize(); - int width = size.width; - int height = size.height; - for (int x = 0; x < width; x += getHorizontalSeparation()) { - for (int y = 0; y < height; y += getVerticalSeparation()) { - g.drawRect(x, y, 0, 0); //Es lo m�s eficiente para colorea pixeles - } - } - } - - public Color getColor() { - return myColor; - } - - public void setColor(Color newColor) { - myColor = newColor; - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/Helper.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/Helper.java deleted file mode 100644 index 01ad96691..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/Helper.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)Helper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.DrawingView; -import java.awt.*; - -/** - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class Helper { - - static public DrawingView getDrawingView(Container container) { - DrawingView oldDrawingView = null; - Component[] components = container.getComponents(); - for (int i = 0; i < components.length; i++) { - if (components[i] instanceof DrawingView) { - return (DrawingView)components[i]; - } - else if (components[i] instanceof Container) { - oldDrawingView = getDrawingView((Container)components[i]); - if (oldDrawingView != null) { - return oldDrawingView; - } - } - } - return null; - } - - static public DrawingView getDrawingView(Component component) { - if (Container.class.isInstance(component)) { - return getDrawingView((Container)component); - } - else if (DrawingView.class.isInstance(component)) { - return (DrawingView)component; - } - else { - return null; - } - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/JPanelDesktop.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/JPanelDesktop.java deleted file mode 100644 index eb7eb6bc9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/JPanelDesktop.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)JPanelDesktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import javax.swing.*; -import java.awt.*; -import org.jhotdraw.application.*; -import org.jhotdraw.framework.DrawingView; - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class JPanelDesktop extends JPanel implements Desktop { - - private DesktopEventService myDesktopEventService; - private DrawApplication myDrawApplication; - - public JPanelDesktop(DrawApplication newDrawApplication) { - setDrawApplication(newDrawApplication); - setDesktopEventService(createDesktopEventService()); - setAlignmentX(LEFT_ALIGNMENT); - setLayout(new BorderLayout()); - } - - protected Component createContents(DrawingView dv) { - JScrollPane sp = new JScrollPane((Component)dv); - sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - sp.setAlignmentX(LEFT_ALIGNMENT); - String applicationTitle; - if (dv.drawing().getTitle() == null) { - applicationTitle = getDrawApplication().getApplicationName() - + " - " + getDrawApplication().getDefaultDrawingTitle(); - } - else { - applicationTitle = getDrawApplication().getApplicationName() + " - " + dv.drawing().getTitle(); - } - // should be setTitle but a JPanelDesktop has no own title bar - sp.setName(applicationTitle); - return sp; - } - - public DrawingView getActiveDrawingView() { - return getDesktopEventService().getActiveDrawingView(); - } - - public void addToDesktop(DrawingView dv, int location) { - getDesktopEventService().addComponent(createContents(dv)); - getContainer().validate(); - } - - public void removeFromDesktop(DrawingView dv, int location) { - getDesktopEventService().removeComponent(dv); - getContainer().validate(); - } - - public void removeAllFromDesktop(int location) { - getDesktopEventService().removeAllComponents(); - getContainer().validate(); - } - - public DrawingView[] getAllFromDesktop(int location) { - return getDesktopEventService().getDrawingViews(getComponents()); - } - - public void addDesktopListener(DesktopListener dpl) { - getDesktopEventService().addDesktopListener(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - getDesktopEventService().removeDesktopListener(dpl); - } - - private Container getContainer() { - return this; - } - - protected DesktopEventService getDesktopEventService() { - return myDesktopEventService; - } - - private void setDesktopEventService(DesktopEventService newDesktopEventService) { - myDesktopEventService = newDesktopEventService; - } - - protected DesktopEventService createDesktopEventService() { - return new DesktopEventService(this, getContainer()); - } - - private void setDrawApplication(DrawApplication newDrawApplication) { - myDrawApplication = newDrawApplication; - } - - protected DrawApplication getDrawApplication() { - return myDrawApplication; - } - - public void updateTitle(String newDrawingTitle) { - // should be setTitle but a JPanelDesktop has no own title bar - setName(newDrawingTitle); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/JScrollPaneDesktop.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/JScrollPaneDesktop.java deleted file mode 100644 index a3b6b73b7..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/JScrollPaneDesktop.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * @(#)JScrollPaneDesktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import java.awt.Component; -import java.awt.Container; - -// JUnitDoclet begin import -import javax.swing.JScrollPane; - -import org.jhotdraw.framework.DrawingView; -// JUnitDoclet end import - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class JScrollPaneDesktop extends JScrollPane implements Desktop { - - private DesktopEventService myDesktopEventService; - - public JScrollPaneDesktop() { - setDesktopEventService(createDesktopEventService()); - setAlignmentX(LEFT_ALIGNMENT); - setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - } - - protected Component createContents(DrawingView dv) { - return (Component)dv; - } - - public DrawingView getActiveDrawingView() { - return getDesktopEventService().getActiveDrawingView(); - } - - public void addToDesktop(DrawingView dv, int location) { - getContainer().add(createContents(dv)); - } - - public void removeFromDesktop(DrawingView dv, int location) { - getDesktopEventService().removeComponent(dv); - } - - public void removeAllFromDesktop(int location) { - getDesktopEventService().removeAllComponents(); - } - - public DrawingView[] getAllFromDesktop(int location) { - //This is overkill since we know we only have 1 component... - return getDesktopEventService().getDrawingViews(getComponents()); - } - - public void addDesktopListener(DesktopListener dpl) { - getDesktopEventService().addDesktopListener(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - getDesktopEventService().removeDesktopListener(dpl); - } - - private Container getContainer() { - return getViewport(); - } - - protected DesktopEventService getDesktopEventService() { - return myDesktopEventService; - } - - private void setDesktopEventService(DesktopEventService newDesktopEventService) { - myDesktopEventService = newDesktopEventService; - } - - protected DesktopEventService createDesktopEventService() { - return new DesktopEventService(this, getContainer()); - } - - public void updateTitle(String newDrawingTitle) { - // should be setTitle but a JPanelDesktop has no own title bar - setName(newDrawingTitle); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/Layoutable.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/Layoutable.java deleted file mode 100644 index cc62da8d7..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/Layoutable.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @(#)Layouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.Figure; - -/** - * A Layoutable is a target for a Layouter who lays out the Layoutable - * according to its layout algorithm - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface Layoutable extends Figure { - - /** - * Layout the figure - */ - public void layout(); - - /** - * Set the Layouter for this Layoutable - * - * @param newLayouter layouter - */ - public void setLayouter(Layouter newLayouter); - - /** - * Return the Layouter for this Layoutable - * - * @return layouter - */ - public Layouter getLayouter(); -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/Layouter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/Layouter.java deleted file mode 100644 index b2d654d48..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/Layouter.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * @(#)Layouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.util.Storable; -import java.io.Serializable; -import java.awt.*; - -/** - * A Layouter encapsulates a algorithm to layout - * a figure. It is passed on to a figure which delegates the - * layout task to the Layouter's layout method. - * The Layouter might need access to some information - * specific to a certain figure in order to layout it out properly. - * - * Note: Currently, only the GraphicalCompositeFigure uses - * such a Layouter to layout its child components. - * - * @see GraphicalCompositeFigure - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface Layouter extends Serializable, Storable { - - /** - * Calculate the layout for the figure and all its - * subelements. The layout is not actually performed but just - * its dimensions are calculated. - * - * @param origin start point for the layout - * @param corner minimum corner point for the layout - * @return size including space for insets - */ - public Rectangle calculateLayout(Point origin, Point corner); - - /** - * Method which lays out a figure. It is called by the figure - * if a layout task is to be performed. Implementing classes - * specify a certain layout algorithm in this method. - * - * @param origin start point for the layout - * @param corner minimum corner point for the layout - */ - public Rectangle layout(Point origin, Point corner); - - /** - * Set the insets for spacing between the figure and its subfigures - * - * @param newInsets new spacing dimensions - */ - public void setInsets(Insets newInsets); - - /** - * Get the insets for spacing between the figure and its subfigures - * - * @return spacing dimensions - */ - public Insets getInsets(); - - /** - * Create a new instance of this type and sets the layoutable - */ - public Layouter create(Layoutable newLayoutable); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/MDIDesktopPane.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/MDIDesktopPane.java deleted file mode 100644 index 4a1ee051d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/MDIDesktopPane.java +++ /dev/null @@ -1,636 +0,0 @@ -/* - * @(#)MDIDesktopPane.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.standard.NullDrawingView; -import org.jhotdraw.application.DrawApplication; - -import javax.swing.*; -import javax.swing.event.InternalFrameListener; -import javax.swing.event.InternalFrameAdapter; -import javax.swing.event.InternalFrameEvent; -import java.awt.*; -import java.beans.*; - -/** - * An extension of JDesktopPane that supports often used MDI functionality. This - * class also handles setting scroll bars for when windows move too far to the left or - * bottom, providing the MDIDesktopPane is in a ScrollPane. - * Note by dnoyeb: I dont know why the container does not fire frame close events when the frames - * are removed from the container with remove as opposed to simply closed with the - * "x". so if you say removeAll from container you wont be notified. No biggie. - * - * @author Wolfram Kaiser (adapted from an article in JavaWorld) - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MDIDesktopPane extends JDesktopPane implements Desktop { - private static int FRAME_OFFSET=20; - private MDIDesktopManager manager; - private DrawApplication myDrawApplication; - private DesktopEventService myDesktopEventService; - - private DrawingView selectedView; - - public MDIDesktopPane(DrawApplication newDrawApplication) { - setDesktopEventService(createDesktopEventService()); - setDrawApplication(newDrawApplication); - manager=new MDIDesktopManager(this); - setDesktopManager(manager); - setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); - setAlignmentX(JComponent.LEFT_ALIGNMENT); - } - - protected InternalFrameListener internalFrameListener = new InternalFrameAdapter() { - /** - * Invoked when a internal frame has been opened. - * @see javax.swing.JInternalFrame#show - * if dv is null assert - */ - public void internalFrameOpened(InternalFrameEvent e) { - DrawingView dv = Helper.getDrawingView(e.getInternalFrame()); - fireDrawingViewAddedEvent(dv); - } - - /** - * Invoked when an internal frame is in the process of being closed. - * The close operation can be overridden at this point. - * @see javax.swing.JInternalFrame#setDefaultCloseOperation - */ - //public void internalFrameClosing(InternalFrameEvent e) { - //} - - /** - * Invoked when an internal frame has been closed. - * if dv is null assert - * if this is the last view set it to null - * @see javax.swing.JInternalFrame#setClosed - */ - public void internalFrameClosed(InternalFrameEvent e) { - DrawingView dv = Helper.getDrawingView(e.getInternalFrame()); - if (getComponentCount() == 0){ - DrawingView oldView = getActiveDrawingView(); - setActiveDrawingView(NullDrawingView.getManagedDrawingView(oldView.editor())); - fireDrawingViewSelectedEvent(oldView, getActiveDrawingView()); - } - fireDrawingViewRemovedEvent(dv); - } - - /** - * Invoked when an internal frame is iconified. - * @see javax.swing.JInternalFrame#setIcon - */ - //public void internalFrameIconified(InternalFrameEvent e) { - //} - - /** - * Invoked when an internal frame is de-iconified. - * @see javax.swing.JInternalFrame#setIcon - */ - //public void internalFrameDeiconified(InternalFrameEvent e) { - //} - - /** - * Invoked when an internal frame is activated. - * @see javax.swing.JInternalFrame#setSelected - * if this frame has a null drawingView then assert - * because their should be no null frames being selected - * this does not include NullDrawingView which is acceptable - */ - public void internalFrameActivated(InternalFrameEvent e) { - DrawingView dv = Helper.getDrawingView(e.getInternalFrame()); - DrawingView oldView = getActiveDrawingView(); - setActiveDrawingView(dv); - fireDrawingViewSelectedEvent(oldView, getActiveDrawingView()); - } - - //public void internalFrameDeactivated(InternalFrameEvent e) { - //} - }; - - - protected void fireDrawingViewAddedEvent(final DrawingView dv) { - getDesktopEventService().fireDrawingViewAddedEvent(dv); - } - - protected void fireDrawingViewRemovedEvent(final DrawingView dv) { - getDesktopEventService().fireDrawingViewRemovedEvent(dv); - } - - protected void fireDrawingViewSelectedEvent(final DrawingView oldView, final DrawingView newView) { - getDesktopEventService().fireDrawingViewSelectedEvent(oldView, newView); - } - -/* public void setBounds(int x, int y, int w, int h) { - super.setBounds(x,y,w,h); - checkDesktopSize(); - } -*/ - - protected Component createContents(DrawingView dv) { - JScrollPane sp = new JScrollPane((Component) dv); - sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - sp.setAlignmentX(LEFT_ALIGNMENT); - - String applicationTitle; - if (dv.drawing().getTitle() == null) { - applicationTitle = getDrawApplication().getApplicationName() + " - " + getDrawApplication().getDefaultDrawingTitle(); - } - else { - applicationTitle = getDrawApplication().getApplicationName() + " - " + dv.drawing().getTitle(); - } - JInternalFrame internalFrame = new JInternalFrame(applicationTitle, true, true, true, true); - internalFrame.setName(applicationTitle); - internalFrame.getContentPane().add(sp); - internalFrame.setSize(200,200); - return internalFrame; - } - - public DrawingView getActiveDrawingView() { - return selectedView; - } - - protected void setActiveDrawingView(DrawingView newSelectedView) { - selectedView = newSelectedView; - } - - public void updateTitle(String newDrawingTitle) { - getSelectedFrame().setTitle(newDrawingTitle); - } - - /** - * This must match the signature of the superclass it is overriding or the - * method invocation may not resolve to this method unless it is called on - * a reference of specifically MDIDesktopPane type. So this must be - * Component add(Component comp) in order to override its super class and - * Component add(JInternalFrame frame) will not properly override the super- - * class, but instead overload it. - * - * Note be sure to call this method and not add() when you want to add to the - * desktop. This allows complex desktops to be created. For instance, you can - * add split panes and scroll panes and such as normal with the add() method - * but then to get to the actual desktop you would still call this method. - */ - public void addToDesktop(DrawingView dv, int location) { - JInternalFrame frame = (JInternalFrame)createContents(dv); - JInternalFrame[] array = getAllFrames(); - Point p = null; - int w; - int h; - - //should be done before added to desktop - frame.addInternalFrameListener(internalFrameListener); - super.add(frame); - - checkDesktopSize(); - if (array.length > 0) { - p = array[0].getLocation(); - p.x = p.x + FRAME_OFFSET; - p.y = p.y + FRAME_OFFSET; - } - else { - p = new Point(0, 0); - } - frame.setLocation(p.x, p.y); - if (frame.isResizable()) { - w = getWidth() - (getWidth() / 3); - h = getHeight() - (getHeight() / 3); - if (w < frame.getMinimumSize().getWidth()) { - w = (int)frame.getMinimumSize().getWidth(); - } - if (h < frame.getMinimumSize().getHeight()) { - h = (int)frame.getMinimumSize().getHeight(); - } - frame.setSize(w, h); - } - moveToFront(frame); - frame.setVisible(true); - try { - frame.setSelected(true); - } - catch (PropertyVetoException e) { - frame.toBack(); - } - } - - public void removeFromDesktop(DrawingView dv, int location) { - Component[] comps = getComponents(); - for (int x=0; x<comps.length; x++) { - if (dv == Helper.getDrawingView(comps[x])) { - ((JInternalFrame)comps[x]).dispose(); - break; - } - } - checkDesktopSize(); - } - - public void removeAllFromDesktop(int location) { - JInternalFrame[] jifs = getAllFrames(); - for (int x=0; x < jifs.length; x++) { - jifs[x].dispose(); - } - } - - public DrawingView[] getAllFromDesktop(int location){ - Component[] comps = getComponents(); - java.util.ArrayList al = new java.util.ArrayList(); - for (int x=0; x<comps.length; x++) { - DrawingView dv = Helper.getDrawingView(comps[x]); - if (dv != null) { - al.add(dv); - } - } - DrawingView[] dvs = new DrawingView[al.size()]; - al.toArray(dvs); - return dvs; - } -/* - public void setSelectedDrawingView(DrawingView dv) { - Component[] comps = getComponents(); - for (int x=0; x < comps.length; x++) { - DrawingView dv2 = Helper.getDrawingView(comps[x]); - if (dv == dv2) { - JInternalFrame frame = (JInternalFrame)comps[x]; - try { - //moveToFront(frame); - frame.setSelected(true); - } - catch(java.beans.PropertyVetoException pve) { - System.out.println(pve); - } - } - } - } -*/ - protected DesktopEventService getDesktopEventService() { - return myDesktopEventService; - } - - private void setDesktopEventService(DesktopEventService newDesktopEventService) { - myDesktopEventService = newDesktopEventService; - } - - protected DesktopEventService createDesktopEventService() { - return new DesktopEventService(this, this); - } - - public void addDesktopListener(DesktopListener dpl) { - getDesktopEventService().addDesktopListener(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - getDesktopEventService().removeDesktopListener(dpl); - } - - /** - * Cascade all internal frames - */ - public void cascadeFrames() { - int x = 0; - int y = 0; - JInternalFrame[] allFrames = getAllFrames(); - - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - - manager.setNormalSize(); - - int frameHeight = (getBounds().height - 5) - allFrames.length * FRAME_OFFSET; - int frameWidth = (getBounds().width - 5) - allFrames.length * FRAME_OFFSET; - for (int i = allFrames.length - 1; i >= 0; i--) { - try { - allFrames[i].setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[i].setBounds(x, y, frameWidth, frameHeight); - x = x + FRAME_OFFSET; - y = y + FRAME_OFFSET; - } - - checkDesktopSize(); - } - - /** - * Tile all internal frames<br> - * - * @deprecated use tileFramesHorizontally() instead - * - */ - public void tileFrames() { - tileFramesHorizontally(); - } - - public void tileFramesHorizontally() { - Component[] allFrames = getAllFrames(); - - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - - manager.setNormalSize(); - - int frameHeight = getBounds().height/allFrames.length; - int y = 0; - for (int i = 0; i < allFrames.length; i++) { - try { - ((JInternalFrame)allFrames[i]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[i].setBounds(0, y, getBounds().width,frameHeight); - y = y + frameHeight; - } - - checkDesktopSize(); - } - - public void tileFramesVertically() { - Component[] allFrames = getAllFrames(); - - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - manager.setNormalSize(); - - int frameWidth = getBounds().width/allFrames.length; - int x = 0; - for (int i = 0; i < allFrames.length; i++) { - try { - ((JInternalFrame)allFrames[i]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[i].setBounds(x, 0, frameWidth, getBounds().height); - x = x + frameWidth; - } - - checkDesktopSize(); - } - - /** - * Arranges the frames as efficiently as possibly with preference for - * keeping vertical size maximal.<br> - * - */ - public void arrangeFramesVertically() { - Component[] allFrames = getAllFrames(); - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - - manager.setNormalSize(); - - int vertFrames = (int)Math.floor(Math.sqrt(allFrames.length)); - int horFrames = (int)Math.ceil(Math.sqrt(allFrames.length)); - - // first arrange the windows that have equal size - int frameWidth = getBounds().width / horFrames; - int frameHeight = getBounds().height / vertFrames; - int x = 0; - int y = 0; - int frameIdx = 0; - for (int horCnt = 0; horCnt < horFrames-1; horCnt++) { - y = 0; - for (int vertCnt = 0; vertCnt < vertFrames; vertCnt++) { - try { - ((JInternalFrame)allFrames[frameIdx]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[frameIdx].setBounds(x, y, frameWidth, frameHeight); - frameIdx++; - y = y + frameHeight; - } - x = x + frameWidth; - } - - // the rest of the frames are tiled down on the last column with equal - // height - frameHeight = getBounds().height / (allFrames.length - frameIdx); - y = 0; - for (; frameIdx < allFrames.length; frameIdx++) - { - try { - ((JInternalFrame)allFrames[frameIdx]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[frameIdx].setBounds(x, y, frameWidth, frameHeight); - y = y + frameHeight; - } - - checkDesktopSize(); - } - - /** - * Arranges the frames as efficiently as possibly with preference for - * keeping horizontal size maximal.<br> - * - */ - public void arrangeFramesHorizontally() { - Component[] allFrames = getAllFrames(); - // do nothing if no frames to work with - if (allFrames.length == 0) { - return; - } - - manager.setNormalSize(); - - int vertFrames = (int)Math.ceil(Math.sqrt(allFrames.length)); - int horFrames = (int)Math.floor(Math.sqrt(allFrames.length)); - - // first arrange the windows that have equal size - int frameWidth = getBounds().width / horFrames; - int frameHeight = getBounds().height / vertFrames; - int x = 0; - int y = 0; - int frameIdx = 0; - for (int vertCnt = 0; vertCnt < vertFrames-1; vertCnt++) { - x = 0; - for (int horCnt = 0; horCnt < horFrames; horCnt++) { - try { - ((JInternalFrame)allFrames[frameIdx]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[frameIdx].setBounds(x, y, frameWidth, frameHeight); - frameIdx++; - x = x + frameWidth; - } - y = y + frameHeight; - } - - // the rest of the frames are tiled down on the last column with equal - // height - frameWidth = getBounds().width / (allFrames.length - frameIdx); - x = 0; - for (; frameIdx < allFrames.length; frameIdx++) { - try { - ((JInternalFrame)allFrames[frameIdx]).setMaximum(false); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - - allFrames[frameIdx].setBounds(x, y, frameWidth, frameHeight); - x = x + frameWidth; - } - - checkDesktopSize(); - } - - /** - * Sets all component size properties ( maximum, minimum, preferred) - * to the given dimension. - */ - public void setAllSize(Dimension d) { - setMinimumSize(d); - setMaximumSize(d); - setPreferredSize(d); - setBounds(0, 0, d.width, d.height); - } - - /** - * Sets all component size properties ( maximum, minimum, preferred) - * to the given width and height. - */ - public void setAllSize(int width, int height) { - setAllSize(new Dimension(width,height)); - } - - private void checkDesktopSize() { - if ((getParent() != null) && isVisible()) { - manager.resizeDesktop(); - } - } - - private void setDrawApplication(DrawApplication newDrawApplication) { - myDrawApplication = newDrawApplication; - } - - protected DrawApplication getDrawApplication() { - return myDrawApplication; - } -} - -/** - * Private class used to replace the standard DesktopManager for JDesktopPane. - * Used to provide scrollbar functionality. - */ -class MDIDesktopManager extends DefaultDesktopManager { - private MDIDesktopPane desktop; - - public MDIDesktopManager(MDIDesktopPane newDesktop) { - this.desktop = newDesktop; - } - - public void endResizingFrame(JComponent f) { - super.endResizingFrame(f); - resizeDesktop(); - } - - public void endDraggingFrame(JComponent f) { - super.endDraggingFrame(f); - resizeDesktop(); - } - - public void setNormalSize() { - JScrollPane scrollPane = getScrollPane(); - Insets scrollInsets = getScrollPaneInsets(); - - if (scrollPane != null) { - Dimension d = scrollPane.getVisibleRect().getSize(); - if (scrollPane.getBorder() != null) { - d.setSize(d.getWidth() - scrollInsets.left - scrollInsets.right, - d.getHeight() - scrollInsets.top - scrollInsets.bottom); - } - - d.setSize(d.getWidth() - 20, d.getHeight() - 20); - desktop.setAllSize(d); - scrollPane.invalidate(); - scrollPane.validate(); - } - } - - private Insets getScrollPaneInsets() { - JScrollPane scrollPane = getScrollPane(); - if ((scrollPane == null) || (getScrollPane().getBorder() == null)) { - return new Insets(0, 0, 0, 0); - } - else { - return getScrollPane().getBorder().getBorderInsets(scrollPane); - } - } - - public JScrollPane getScrollPane() { - if (desktop.getParent() instanceof JViewport) { - JViewport viewPort = (JViewport)desktop.getParent(); - if (viewPort.getParent() instanceof JScrollPane) - return (JScrollPane)viewPort.getParent(); - } - return null; - } - - protected void resizeDesktop() { - int x = 0; - int y = 0; - JScrollPane scrollPane = getScrollPane(); - Insets scrollInsets = getScrollPaneInsets(); - - if (scrollPane != null) { - JInternalFrame allFrames[] = desktop.getAllFrames(); - for (int i = 0; i < allFrames.length; i++) { - if (allFrames[i].getX() + allFrames[i].getWidth() > x) { - x = allFrames[i].getX() + allFrames[i].getWidth(); - } - if (allFrames[i].getY() + allFrames[i].getHeight() > y) { - y = allFrames[i].getY() + allFrames[i].getHeight(); - } - } - Dimension d=scrollPane.getVisibleRect().getSize(); - if (scrollPane.getBorder() != null) { - d.setSize(d.getWidth() - scrollInsets.left - scrollInsets.right, - d.getHeight() - scrollInsets.top - scrollInsets.bottom); - } - - if (x <= d.getWidth()) { - x = ((int)d.getWidth()) - 20; - } - if (y <= d.getHeight()) { - y = ((int)d.getHeight()) - 20; - } - desktop.setAllSize(x,y); - scrollPane.invalidate(); - scrollPane.validate(); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/MDI_DrawApplication.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/MDI_DrawApplication.java deleted file mode 100644 index fa67d2a56..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/MDI_DrawApplication.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * @(#)MDI_DrawApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.application.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.contrib.dnd.DragNDropTool; - -import javax.swing.*; - -/** - * Many applications have the ability to deal with multiple internal windows. - * MDI_DrawApplications provides the basic facilities to make use of MDI in - * JHotDraw. Its main tasks are to create a content for DrawApplications, which - * is embedded in internal frames, to maintain a list with all internal frames - * and to manage the switching between them. - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MDI_DrawApplication extends DrawApplication { - - /** - * Constructs a drawing window with a default title. - */ - public MDI_DrawApplication() { - this("JHotDraw"); - } - - /** - * Constructs a drawing window with the given title. - */ - public MDI_DrawApplication(String title) { - super(title); - } - - /** - * Factory method which can be overriden by subclasses to - * create an instance of their type. - * - * @return newly created application - */ - protected DrawApplication createApplication() { - return new MDI_DrawApplication(); - } - - /** - * Creates the tools. By default only the selection tool is added. - * Override this method to add additional tools. - * Call the inherited method to include the selection tool. - * @param palette the palette where the tools are added. - */ - protected void createTools(JToolBar palette) { - super.createTools(palette); - Tool tool = new DragNDropTool(this); - ToolButton tb = createToolButton(IMAGES+"SEL", "Drag N Drop Tool", tool); - palette.add( tb ); - } - - /** - * Opens a new internal frame containing a new drawing. - */ - public void promptNew() { - newWindow(createDrawing()); - } - - /** - * Method to create a new internal frame. Applications that want - * to create a new internal drawing view should call this method. - */ - public void newWindow(Drawing newDrawing) { - DrawingView newView = createDrawingView(newDrawing); - getDesktop().addToDesktop(newView, Desktop.PRIMARY); - toolDone(); - } - - /** - * Create the DrawingView that is active when the application is started. - * This initial DrawingView might be different from DrawingView created - * by the application, so subclasses can override this method to provide - * a special drawing view for application startup time, e.g. a NullDrawingView - * which does not display an internal frame in a multiple document interface - * (MDI) application. - * - * @return drawing view that is active at application startup time - */ - protected DrawingView createInitialDrawingView() { - return NullDrawingView.getManagedDrawingView(this); - } - - /** - * Open a new view for this application containing a - * view of the drawing of the currently activated window. - */ - public void newView() { - if (!view().isInteractive()) { - return; - } - - // create new window with view to an existing drawing - newWindow(view().drawing()); - - String copyTitle = getDrawingTitle(); - if (copyTitle != null) { - setDrawingTitle(copyTitle); - } - else { - setDrawingTitle(getDefaultDrawingTitle()); - } - } - - /** - * Factory method to create a specialized desktop (manager) for MDI applications - */ - protected Desktop createDesktop() { - return new MDIDesktopPane(this); - } - - /** - * Returns all the views in the application - */ - public DrawingView[] views() { - return getDesktop().getAllFromDesktop(Desktop.PRIMARY); - } - - public String getDefaultDrawingTitle() { - return super.getDefaultDrawingTitle() + views().length; - } - - /** - * Set the title of the currently selected drawing - */ - protected void setDrawingTitle(String drawingTitle) { - getDesktop().updateTitle(drawingTitle); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/MiniMapView.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/MiniMapView.java deleted file mode 100644 index b7bc0d772..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/MiniMapView.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * @(#)MiniMapView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import java.awt.*; -import java.awt.event.*; -import java.awt.geom.AffineTransform; -import java.awt.geom.NoninvertibleTransformException; - -import javax.swing.JComponent; -import javax.swing.JScrollPane; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; - -import org.jhotdraw.framework.*; - -/** - * Utility component for enhancing component scrolling. It provides a "minature" view of the entire contents of a JScrollPane - * and the means to scroll that JScrollPane by moving a rectangle representing the viewable area of the JScrollPane. If the - * user clicks on an area inside of the MiniMapView, the JScrollPane's view is centered on that area. The user may also drag - * the rectangle representation of the JScrollPane's view around the MiniMap to scroll. - * - * @author S. Ruman (sruman@rogers.com) - * @version <$CURRENT_VERSION$> - */ -public class MiniMapView extends JComponent { -// Instance Variables - private JScrollPane m_subject; - private DrawingView myMappedDrawingView; - private SubjectListener m_subjectListener; - private DrawingChangeListener myDrawingChangeListener; - private Color m_viewBoxColor = Color.red; - private AffineTransform originalTransform; - -// Constructors - public MiniMapView(DrawingView newMappedDrawingView, JScrollPane subject) { - m_subjectListener = new SubjectListener(); - setSubject(subject); - setMappedDrawingView(newMappedDrawingView); - myDrawingChangeListener = new MappedDrawingChangeListener(); - getMappedDrawingView().drawing().addDrawingChangeListener(myDrawingChangeListener); - MouseListener ml = new MouseListener(); - addMouseListener(new MouseListener()); - addMouseMotionListener(ml); - } - - protected void setMappedDrawingView(DrawingView newMappedDrawingView) { - myMappedDrawingView = newMappedDrawingView; - } - - public DrawingView getMappedDrawingView() { - return myMappedDrawingView; - } - -// accessors - protected void setSubject(JScrollPane subject) { - if (m_subject != null) { - m_subject.getViewport().removeChangeListener(m_subjectListener); - } - - m_subject = subject; - if (m_subject != null) { - m_subject.getViewport().addChangeListener(m_subjectListener); - } - - repaint(); - } - - public JScrollPane getSubject() { - return m_subject; - } - - public Color getViewBowColor() { - return m_viewBoxColor; - } - - public void setViewBoxColor(Color c) { - m_viewBoxColor = c; - repaint(); - } - - /** - * @return The component that is actually being "mini-mapped", that is the component inside the scroll pane - */ - protected Component getMappedComponent() { - return (Component)getMappedDrawingView(); - } - -// Overridden - public void paint(Graphics g) { - Graphics2D g2d = (Graphics2D)g; - - /* - * JP, 23-Jan-04: Save original transformation. - */ - originalTransform = g2d.getTransform(); - - // Paint a small map representation of the subjects contents - Component mappedComponent = getMappedComponent(); - AffineTransform at = getViewToMiniMapTransform(mappedComponent); - g2d.transform(at); - - getMappedDrawingView().drawAll(g2d); - - // Draw a rectangle representing the viewable area - drawViewRectangle(g2d, getViewRectangle()); - } - - // side-effect of setting the transform on g2d to identity - protected void drawViewRectangle(Graphics2D g2d, Rectangle viewPortRectangle) { - //AffineTransform at = new AffineTransform(); - //at.setToIdentity(); - //g2d.setTransform(at); - - /* - * JP, 23-Jan-04: Restored original transformation instead of setting - * another one. Solves problems with rectangle being outside minimap - * initially. Seems also to conform to JDK specs which say that you must - * never use setTransform() for anything but restoring the original - * transformation. - */ - g2d.setTransform(originalTransform); - g2d.setColor(m_viewBoxColor); - g2d.draw(viewPortRectangle); - } - - protected AffineTransform getViewToMiniMapTransform(Component mappedComponent) { - double scaleX = ((double)getWidth()) / ((double)mappedComponent.getWidth()); - double scaleY = ((double)getHeight()) / ((double)mappedComponent.getHeight()); - - AffineTransform at = getInverseSubjectTransform(); // for subclass flexibility - at.concatenate(AffineTransform.getScaleInstance(scaleX, scaleY)); - return at; - } - - /** - * Allows subclasses to modify the transformation used in creating the mini-map - */ - protected AffineTransform getInverseSubjectTransform() { - AffineTransform at = new AffineTransform(); - at.setToIdentity(); - return at; - } - - /** - * @return The rectangle (in Mini-Map world-coordinates) representing the area being viewed inside of the scroll pane subject - */ - protected Rectangle getViewRectangle() { - Rectangle visiblePortion = m_subject.getViewportBorderBounds(); - Point upperLeftViewPos = m_subject.getViewport().getViewPosition(); - double [] srcRecCorners = new double[4]; - double [] dstRecCorners = new double[4]; - - srcRecCorners[0] = upperLeftViewPos.x + visiblePortion.getX(); srcRecCorners[1] = upperLeftViewPos.y + visiblePortion.getY(); srcRecCorners[2] = upperLeftViewPos.x + visiblePortion.getX() + visiblePortion.getWidth(); srcRecCorners[3] = upperLeftViewPos.y + visiblePortion.getY() + visiblePortion.getHeight(); - getViewToMiniMapTransform(getMappedComponent()).transform(srcRecCorners, 0, dstRecCorners, 0, srcRecCorners.length/2); // transform the coordinates to MiniMapView coordinates - - return new Rectangle((int)dstRecCorners[0], (int)dstRecCorners[1], (int)(dstRecCorners[2] - dstRecCorners[0]), (int)(dstRecCorners[3] - dstRecCorners[1])); - } - - /** - * Scrolls the subject scroll pane to the coordinates specified. - * @param upperLeftX The new upper left corner X-coordinate (in subject world-coordinates) of the subject scroll pane - * @param upperLeftY The new upper left corner Y-coordinate (in subject world-coordinates) of the subject scroll pane - */ - protected void scrollSubjectTo(int upperLeftX, int upperLeftY) { - AffineTransform at = null; - try { - at = getViewToMiniMapTransform(getMappedComponent()).createInverse(); - } - catch (NoninvertibleTransformException nite) { - nite.printStackTrace(); - return; - } - - double [] srcPoints = new double[2]; - double [] destPoints = new double[2]; - srcPoints[0] = upperLeftX; - srcPoints[1] = upperLeftY; - at.transform(srcPoints, 0, destPoints, 0, 1); - - if (destPoints[0] < 0) { - destPoints[0] = 0; - } - if (destPoints[1] < 0) { - destPoints[1] = 0; - } - - m_subject.getViewport().setViewPosition(new Point((int)destPoints[0], (int)destPoints[1])); - } - - protected int [] getUpperLeftPointsFromCenter(int centerX, int centerY) { - int [] upperLeft = new int[2]; - Rectangle oldRectangle = getViewRectangle(); - upperLeft[0] = centerX - oldRectangle.width/2; - upperLeft[1] = centerY - oldRectangle.height/2; - - /* - * JP, 25-May-03: Avoid positioning of the rectangle outside the - * available area. Resulted in very strange artifacts on the screen. - * - * JP, 23-Jan-04: Some additional adjustments to ensure that rectangle - * is positioned properly. - */ - if (upperLeft[0] + oldRectangle.width >= getX() + getWidth()) { - upperLeft[0] = getX() + getWidth() - oldRectangle.width - 1; - } - - if (upperLeft[1] + oldRectangle.height >= getY() + getHeight()) { - upperLeft[1] = getY() + getHeight() - oldRectangle.height - 1; - } - - return upperLeft; - } - - // Inner Classes - public class MouseListener extends MouseAdapter implements MouseMotionListener { - public void mousePressed(MouseEvent e) { - int [] rectangleUpperLeft = getUpperLeftPointsFromCenter(e.getX(), e.getY()); - scrollSubjectTo(rectangleUpperLeft[0], rectangleUpperLeft[1]); - } - - public void mouseDragged(MouseEvent e) { - int [] rectangleUpperLeft = getUpperLeftPointsFromCenter(e.getX(), e.getY()); - scrollSubjectTo(rectangleUpperLeft[0], rectangleUpperLeft[1]); - } - - public void mouseMoved(MouseEvent e) { - // empty implementation - } - } - - class SubjectListener implements ChangeListener { - public void stateChanged(ChangeEvent e) { - repaint(); - } - } - - class MappedDrawingChangeListener implements DrawingChangeListener { - /** - * Sent when an area is invalid - */ - public void drawingInvalidated(DrawingChangeEvent e) { - repaint(); - } - - /** - * Sent when the drawing wants to be refreshed - */ - public void drawingRequestUpdate(DrawingChangeEvent e) { - repaint(); - } - - /** - * Sent when the drawing Title has changed - */ - public void drawingTitleChanged(DrawingChangeEvent e) { - } - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/NestedCreationTool.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/NestedCreationTool.java deleted file mode 100644 index 69e74ab11..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/NestedCreationTool.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * @(#)CreationTool2.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.standard.CreationTool; -import org.jhotdraw.standard.CompositeFigure; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.DrawingEditor; - -import java.awt.event.MouseEvent; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class NestedCreationTool extends CreationTool { - private CompositeFigure myContainerFigure; - - public NestedCreationTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - public void mouseDown(MouseEvent e, int x, int y) { - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - figure = figure.getDecoratedFigure(); - if (figure instanceof CompositeFigure) { - setContainerFigure((CompositeFigure)figure); - super.mouseDown(e, x, y); - } - else { - toolDone(); - } - } - else { - toolDone(); - } - } - - public void mouseMove(MouseEvent e, int x, int y) { - if ((getContainerFigure() != null) && !getContainerFigure().containsPoint(e.getX(), e.getY())) { - // here you might want to constrain the mouse movements to the size of the - // container figure: not sure whether this works... - toolDone(); - } - else { - super.mouseMove(e, x, y); - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - if ((getContainerFigure() != null) && (getCreatedFigure() != null) - && getContainerFigure().containsPoint(e.getX(), e.getY())) { - getContainerFigure().add(getCreatedFigure()); - } - toolDone(); - } - - protected void setContainerFigure(CompositeFigure newContainerFigure) { - myContainerFigure = newContainerFigure; - } - - public CompositeFigure getContainerFigure() { - return myContainerFigure; - } - - protected void toolDone() { - setCreatedFigure(null); - setAddedFigure(null); - setContainerFigure(null); - editor().toolDone(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonFigure.java deleted file mode 100644 index 505052098..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonFigure.java +++ /dev/null @@ -1,462 +0,0 @@ -/* - * @(#)PolygonFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import java.awt.*; -import java.util.*; -import java.util.List; -import java.io.IOException; - -/** - * A scalable, rotatable polygon with an arbitrary number of points - * Based on PolyLineFigure - * - * @author Doug Lea (dl at gee, Fri Feb 28 07:47:05 1997) - * @version <$CURRENT_VERSION$> - */ -public class PolygonFigure extends AttributeFigure { - - /** - * Distance threshold for smoothing away or locating points - **/ - static final int TOO_CLOSE = 2; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 6254089689239215026L; - private int polygonFigureSerializedDataVersion = 1; - - private Polygon fPoly; - - public PolygonFigure() { - super(); - setInternalPolygon(new Polygon()); - } - - public PolygonFigure(int x, int y) { - this(); - getInternalPolygon().addPoint(x, y); - } - - public PolygonFigure(Polygon p) { - setInternalPolygon(new Polygon(p.xpoints, p.ypoints, p.npoints)); - } - - public Rectangle displayBox() { - return bounds(getInternalPolygon()); - } - - - public boolean isEmpty() { - return ((pointCount() < 3) || - ((size().width < TOO_CLOSE) && (size().height < TOO_CLOSE))); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(pointCount()); - for (int i = 0; i < pointCount(); i++) { - handles.add(new PolygonHandle(this, locator(i), i)); - } - handles.add(new PolygonScaleHandle(this)); - return new HandleEnumerator(handles); - } - - - public void basicDisplayBox(Point origin, Point corner) { - Rectangle r = displayBox(); - int dx = origin.x - r.x; - int dy = origin.y - r.y; - getInternalPolygon().translate(dx, dy); - r = displayBox(); - Point oldCorner = new Point(r.x + r.width, r.y + r.height); - scaleRotate(oldCorner, getInternalPolygon(), corner); - } - - /** - * @return a copy of the internal polygon - **/ - public Polygon getPolygon() { - return new Polygon(fPoly.xpoints, fPoly.ypoints, fPoly.npoints); - } - - protected void setInternalPolygon(Polygon newPolygon) { - fPoly = newPolygon; - } - - public Polygon getInternalPolygon() { - return fPoly; - } - - public Point center() { - return center(getInternalPolygon()); - } - - public Iterator points() { - List pts = CollectionsFactory.current().createList(pointCount()); - for (int i = 0; i < pointCount(); ++i) { - pts.add(new Point(getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i])); - } - return pts.iterator(); - } - - public int pointCount() { - return getInternalPolygon().npoints; - } - - public void basicMoveBy(int dx, int dy) { - getInternalPolygon().translate(dx, dy); - } - - public void drawBackground(Graphics g) { - g.fillPolygon(getInternalPolygon()); - } - - public void drawFrame(Graphics g) { - g.drawPolygon(getInternalPolygon()); - } - - public boolean containsPoint(int x, int y) { - return getInternalPolygon().contains(x, y); - } - - public Connector connectorAt(int x, int y) { - return new ChopPolygonConnector(this); - } - - /** - * Adds a node to the list of points. - */ - public void addPoint(int x, int y) { - getInternalPolygon().addPoint(x, y); - changed(); - } - - - /** - * Changes the position of a node. - */ - public void setPointAt(Point p, int i) { - willChange(); - getInternalPolygon().xpoints[i] = p.x; - getInternalPolygon().ypoints[i] = p.y; - changed(); - } - - /** - * Insert a node at the given point. - */ - public void insertPointAt(Point p, int i) { - willChange(); - int n = pointCount() + 1; - int[] xs = new int[n]; - int[] ys = new int[n]; - for (int j = 0; j < i; ++j) { - xs[j] = getInternalPolygon().xpoints[j]; - ys[j] = getInternalPolygon().ypoints[j]; - } - xs[i] = p.x; - ys[i] = p.y; - for (int j = i; j < pointCount(); ++j) { - xs[j + 1] = getInternalPolygon().xpoints[j]; - ys[j + 1] = getInternalPolygon().ypoints[j]; - } - - setInternalPolygon(new Polygon(xs, ys, n)); - changed(); - } - - public void removePointAt(int i) { - willChange(); - int n = pointCount() - 1; - int[] xs = new int[n]; - int[] ys = new int[n]; - for (int j = 0; j < i; ++j) { - xs[j] = getInternalPolygon().xpoints[j]; - ys[j] = getInternalPolygon().ypoints[j]; - } - for (int j = i; j < n; ++j) { - xs[j] = getInternalPolygon().xpoints[j + 1]; - ys[j] = getInternalPolygon().ypoints[j + 1]; - } - setInternalPolygon(new Polygon(xs, ys, n)); - changed(); - } - - /** - * Scale and rotate relative to anchor - **/ - public void scaleRotate(Point anchor, Polygon originalPolygon, Point p) { - willChange(); - - // use center to determine relative angles and lengths - Point ctr = center(originalPolygon); - double anchorLen = Geom.length(ctr.x, ctr.y, anchor.x, anchor.y); - - if (anchorLen > 0.0) { - double newLen = Geom.length(ctr.x, ctr.y, p.x, p.y); - double ratio = newLen / anchorLen; - - double anchorAngle = Math.atan2(anchor.y - ctr.y, anchor.x - ctr.x); - double newAngle = Math.atan2(p.y - ctr.y, p.x - ctr.x); - double rotation = newAngle - anchorAngle; - - int n = originalPolygon.npoints; - int[] xs = new int[n]; - int[] ys = new int[n]; - - for (int i = 0; i < n; ++i) { - int x = originalPolygon.xpoints[i]; - int y = originalPolygon.ypoints[i]; - double l = Geom.length(ctr.x, ctr.y, x, y) * ratio; - double a = Math.atan2(y - ctr.y, x - ctr.x) + rotation; - xs[i] = (int)(ctr.x + l * Math.cos(a) + 0.5); - ys[i] = (int)(ctr.y + l * Math.sin(a) + 0.5); - } - setInternalPolygon(new Polygon(xs, ys, n)); - } - changed(); - } - - - /** - * Remove points that are nearly colinear with others - **/ - public void smoothPoints() { - willChange(); - boolean removed = false; - int n = pointCount(); - do { - removed = false; - int i = 0; - while (i < n && n >= 3) { - int nxt = (i + 1) % n; - int prv = (i - 1 + n) % n; - - if ((Geom.distanceFromLine(getInternalPolygon().xpoints[prv], - getInternalPolygon().ypoints[prv], - getInternalPolygon().xpoints[nxt], - getInternalPolygon().ypoints[nxt], - getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i]) < TOO_CLOSE)) { - removed = true; - --n; - for (int j = i; j < n; ++j) { - getInternalPolygon().xpoints[j] = getInternalPolygon().xpoints[j + 1]; - getInternalPolygon().ypoints[j] = getInternalPolygon().ypoints[j + 1]; - } - } - else { - ++i; - } - } - } while(removed); - if (n != pointCount()) { - setInternalPolygon(new Polygon(getInternalPolygon().xpoints, - getInternalPolygon().ypoints, n)); - } - changed(); - } - - /** - * Splits the segment at the given point if a segment was hit. - * @return the index of the segment or -1 if no segment was hit. - */ - public int splitSegment(int x, int y) { - int i = findSegment(x, y); - if (i != -1) { - insertPointAt(new Point(x, y), i+1); - return i + 1; - } - else { - return -1; - } - } - - public Point pointAt(int i) { - return new Point(getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i]); - } - - /** - * Return the point on the polygon that is furthest from the center - **/ - public Point outermostPoint() { - Point ctr = center(); - int outer = 0; - long dist = 0; - - for (int i = 0; i < pointCount(); ++i) { - long d = Geom.length2(ctr.x, ctr.y, - getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i]); - if (d > dist) { - dist = d; - outer = i; - } - } - - return new Point(getInternalPolygon().xpoints[outer], getInternalPolygon().ypoints[outer]); - } - - - /** - * Gets the segment that is hit by the given point. - * @return the index of the segment or -1 if no segment was hit. - */ - public int findSegment(int x, int y) { - double dist = TOO_CLOSE; - int best = -1; - - for (int i = 0; i < pointCount(); i++) { - int n = (i + 1) % pointCount(); - double d = Geom.distanceFromLine(getInternalPolygon().xpoints[i], - getInternalPolygon().ypoints[i], - getInternalPolygon().xpoints[n], - getInternalPolygon().ypoints[n], x, y); - if (d < dist) { - dist = d; - best = i; - } - } - return best; - } - - public Point chop(Point p) { - return chop(getInternalPolygon(), p); - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(pointCount()); - for (int i = 0; i < pointCount(); ++i) { - dw.writeInt(getInternalPolygon().xpoints[i]); - dw.writeInt(getInternalPolygon().ypoints[i]); - } - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - int size = dr.readInt(); - int[] xs = new int[size]; - int[] ys = new int[size]; - for (int i = 0; i < size; i++) { - xs[i] = dr.readInt(); - ys[i] = dr.readInt(); - } - setInternalPolygon(new Polygon(xs, ys, size)); - } - - /** - * Creates a locator for the point with the given index. - */ - public static Locator locator(final int pointIndex) { - return new AbstractLocator() { - public Point locate(Figure owner) { - PolygonFigure plf = (PolygonFigure)owner; - // guard against changing PolygonFigures -> temporary hack - if (pointIndex < plf.pointCount()) { - return ((PolygonFigure)owner).pointAt(pointIndex); - } - return new Point(-1, -1); - } - }; - } - - /** - * replacement for builtin Polygon.getBounds that doesn't always update? - */ - public static Rectangle bounds(Polygon p) { - int minx = Integer.MAX_VALUE; - int miny = Integer.MAX_VALUE; - int maxx = Integer.MIN_VALUE; - int maxy = Integer.MIN_VALUE; - int n = p.npoints; - for (int i = 0; i < n; i++) { - int x = p.xpoints[i]; - int y = p.ypoints[i]; - if (x > maxx) { - maxx = x; - } - if (x < minx) { - minx = x; - } - if (y > maxy) { - maxy = y; - } - if (y < miny) { - miny = y; - } - } - - return new Rectangle(minx, miny, maxx - minx, maxy - miny); - } - - public static Point center(Polygon p) { - long sx = 0; - long sy = 0; - int n = p.npoints; - for (int i = 0; i < n; i++) { - sx += p.xpoints[i]; - sy += p.ypoints[i]; - } - - return new Point((int)(sx / n), (int)(sy / n)); - } - - public static Point chop(Polygon poly, Point p) { - Point ctr = center(poly); - int cx = -1; - int cy = -1; - long len = Long.MAX_VALUE; - - // Try for points along edge - - for (int i = 0; i < poly.npoints; ++i) { - int nxt = (i + 1) % poly.npoints; - Point chop = Geom.intersect(poly.xpoints[i], - poly.ypoints[i], - poly.xpoints[nxt], - poly.ypoints[nxt], - p.x, - p.y, - ctr.x, - ctr.y); - if (chop != null) { - long cl = Geom.length2(chop.x, chop.y, p.x, p.y); - if (cl < len) { - len = cl; - cx = chop.x; - cy = chop.y; - } - } - } - // if none found, pick closest vertex - //if (len == Long.MAX_VALUE) { - { // try anyway - for (int i = 0; i < poly.npoints; ++i) { - long l = Geom.length2(poly.xpoints[i], poly.ypoints[i], p.x, p.y); - if (l < len) { - len = l; - cx = poly.xpoints[i]; - cy = poly.ypoints[i]; - } - } - } - return new Point(cx, cy); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonHandle.java deleted file mode 100644 index dc35bbb9a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonHandle.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * @(#)PolygonHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.PolyLineHandle; -import org.jhotdraw.util.Undoable; -import java.awt.Point; - -/** - * A handle for a node on the polygon. - * Based on PolyLineHandle - * - * @author Doug Lea (dl at gee, Fri Feb 28 07:47:13 1997) - * @version <$CURRENT_VERSION$> - */ -public class PolygonHandle extends AbstractHandle { - - private Locator fLocator; - private int fIndex; - - /** - * Constructs a polygon handle. - * @param owner the owning polygon figure. - * @param l the locator - * @param index the index of the node associated with this handle. - */ - public PolygonHandle(PolygonFigure owner, Locator l, int index) { - super(owner); - fLocator = l; - fIndex = index; - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view, fIndex)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - ((PolygonHandle.UndoActivity)getUndoActivity()).setOldPoint(new Point(x, y)); - } - - public void invokeStep(int x, int y, int anchorX, int anchorY, DrawingView view) { - int index = ((PolyLineHandle.UndoActivity)getUndoActivity()).getPointIndex(); - myOwner().setPointAt(new Point(x, y), index); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - myOwner().smoothPoints(); - if ((x == anchorX) && (y == anchorY)) { - setUndoActivity(null); - } - } - - public Point locate() { - return fLocator.locate(owner()); - } - - private PolygonFigure myOwner() { - return (PolygonFigure)owner(); - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView, int newPointIndex) { - return new PolygonHandle.UndoActivity(newView, newPointIndex); - } - - public static class UndoActivity extends PolyLineHandle.UndoActivity { - - public UndoActivity(DrawingView newView, int newPointIndex) { - super(newView, newPointIndex); - } - - protected boolean movePointToOldLocation() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - - PolygonFigure figure = (PolygonFigure)fe.nextFigure(); - Point backupPoint = figure.pointAt(getPointIndex()); - figure.setPointAt(getOldPoint(), getPointIndex()); - figure.smoothPoints(); - setOldPoint(backupPoint); - - return true; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonScaleHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonScaleHandle.java deleted file mode 100644 index 37d49c1ee..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonScaleHandle.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * @(#)PolygonScaleHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Geom; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.UndoableAdapter; -import java.awt.*; - -/** - * A Handle to scale and rotate a PolygonFigure - * Based on RadiusHandle - * - * @author Doug Lea (dl at gee, Sat Mar 1 09:06:09 1997) - * @version <$CURRENT_VERSION$> - */ -class PolygonScaleHandle extends AbstractHandle { - - private Point fCurrent; - - public PolygonScaleHandle(PolygonFigure owner) { - super(owner); - } - - /** - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - */ - public void invokeStart(int x, int y, DrawingView view) { - fCurrent = new Point(x, y); - PolygonScaleHandle.UndoActivity activity = (PolygonScaleHandle.UndoActivity)createUndoActivity(view); - setUndoActivity(activity); - activity.setAffectedFigures(new SingleFigureEnumerator(owner())); - activity.setPolygon(((PolygonFigure)(owner())).getPolygon()); - } - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - fCurrent = new Point(x, y); - Polygon polygon = ((PolygonScaleHandle.UndoActivity)getUndoActivity()).getPolygon(); - ((PolygonFigure)(owner())).scaleRotate(new Point(anchorX, anchorY), polygon, fCurrent); - } - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - ((PolygonFigure)(owner())).smoothPoints(); - if ((fCurrent.x == anchorX) && (fCurrent.y == anchorY)) { - // there is nothing to undo - setUndoActivity(null); - } - fCurrent = null; - } - - public Point locate() { - if (fCurrent == null) { - return getOrigin(); - } - else { - return fCurrent; - } - } - - Point getOrigin() { - // find a nice place to put handle - // Need to pick a place that will not overlap with point handle - // and is internal to polygon - - // Try for one HANDLESIZE step away from outermost toward center - - Point outer = ((PolygonFigure)(owner())).outermostPoint(); - Point ctr = ((PolygonFigure)(owner())).center(); - double len = Geom.length(outer.x, outer.y, ctr.x, ctr.y); - if (len == 0) { // best we can do? - return new Point(outer.x - HANDLESIZE/2, outer.y + HANDLESIZE/2); - } - - double u = HANDLESIZE / len; - if (u > 1.0) { // best we can do? - return new Point((outer.x * 3 + ctr.x)/4, (outer.y * 3 + ctr.y)/4); - } - else { - return new Point((int)(outer.x * (1.0 - u) + ctr.x * u), - (int)(outer.y * (1.0 - u) + ctr.y * u)); - } - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - - /* for debugging ... - Point ctr = ((PolygonFigure)(owner())).center(); - g.setColor(Color.blue); - g.fillOval(ctr.x, ctr.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(ctr.x, ctr.y, r.width, r.height); - - */ - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new PolygonScaleHandle.UndoActivity(newView); - } - - public static class UndoActivity extends UndoableAdapter { - private Polygon myPolygon; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return resetPolygon(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return resetPolygon(); - } - - protected boolean resetPolygon() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - PolygonFigure figure = (PolygonFigure)fe.nextFigure(); - Polygon backupPolygon = figure.getPolygon(); - figure.willChange(); - figure.setInternalPolygon(getPolygon()); - figure.changed(); - setPolygon(backupPolygon); - return true; - } - - protected void setPolygon(Polygon newPolygon) { - myPolygon = newPolygon; - } - - public Polygon getPolygon() { - return myPolygon; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonTool.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonTool.java deleted file mode 100644 index d4cebc6af..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PolygonTool.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * @(#)PolygonTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Undoable; -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * Based on ScribbleTool - * - * @author Doug Lea (dl at gee) - Fri Feb 28 07:47:05 1997 - * @version <$CURRENT_VERSION$> - */ -public class PolygonTool extends AbstractTool { - - private PolygonFigure fPolygon; - private int fLastX, fLastY; - - /** - * the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - private Figure myAddedFigure; - - public PolygonTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - public void activate() { - super.activate(); - fPolygon = null; - } - - public void deactivate() { - if (fPolygon != null) { - fPolygon.smoothPoints(); - if (fPolygon.pointCount() < 3 || - fPolygon.size().width < 4 || fPolygon.size().height < 4) { - getActiveView().drawing().remove(fPolygon); - // nothing to undo - setUndoActivity(null); - } - } - fPolygon = null; - super.deactivate(); - } - - private void addPoint(int x, int y) { - if (fPolygon == null) { - fPolygon = new PolygonFigure(x, y); - setAddedFigure(view().add(fPolygon)); - fPolygon.addPoint(x, y); - } - else if (fLastX != x || fLastY != y) { - fPolygon.addPoint(x, y); - } - - fLastX = x; - fLastY = y; - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - // replace pts by actual event pts - x = e.getX(); - y = e.getY(); - - if (e.getClickCount() >= 2) { - if (fPolygon != null) { - fPolygon.smoothPoints(); - - // use undo activity from paste command... - setUndoActivity(createUndoActivity()); - - // put created figure into a figure enumeration - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(getAddedFigure())); - - editor().toolDone(); - } - fPolygon = null; - - } - else { - // use original event coordinates to avoid - // supress that the scribble is constrained to - // the grid - addPoint(e.getX(), e.getY()); - } - } - - public void mouseMove(MouseEvent e, int x, int y) { - if (e.getSource() == getActiveView()) { - if (fPolygon != null) { - if (fPolygon.pointCount() > 1) { - fPolygon.setPointAt(new Point(x, y), fPolygon.pointCount()-1); - getActiveView().checkDamage(); - } - } - } - } - - public void mouseDrag(MouseEvent e, int x, int y) { - // replace pts by actual event pts - x = e.getX(); - y = e.getY(); - addPoint(x, y); - } - - public void mouseUp(MouseEvent e, int x, int y) { - } - - /** - * Gets the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - protected Figure getAddedFigure() { - return myAddedFigure; - } - - private void setAddedFigure(Figure newAddedFigure) { - myAddedFigure = newAddedFigure; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PopupMenuFigureSelection.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/PopupMenuFigureSelection.java deleted file mode 100644 index 2da696909..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/PopupMenuFigureSelection.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * @(#)PopupMenuFigureSelection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.*; - -/** - * An interface which allows a popup menu to interact with its Figure to - * which it is associated. - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface PopupMenuFigureSelection { - - /** - * Set the figure which was selected when the popup menu was invoked. - * - * @param newSelectedFigure figure which is selected (typically be a SelectionTool) - */ - public void setSelectedFigure(Figure newSelectedFigure); - - /** - * Get the figure which was selected when the popup menu was invoked. - * - * @return figure which is selected (typically be a SelectionTool) - */ - public Figure getSelectedFigure(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SVGDrawApp.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/SVGDrawApp.java deleted file mode 100644 index 35ff66455..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SVGDrawApp.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.jhotdraw.contrib; - -import org.jhotdraw.application.DrawApplication; -import org.jhotdraw.samples.javadraw.JavaDrawApp; -import org.jhotdraw.util.StorageFormatManager; - -/** - * @author mtnygard - * - * To change this generated comment edit the template variable "typecomment": - * Window>Preferences>Java>Templates. - * To enable and disable the creation of type comments go to - * Window>Preferences>Java>Code Generation. - */ -public class SVGDrawApp extends JavaDrawApp { - public static void main(String[] args) { - SVGDrawApp window = new SVGDrawApp(); - window.open(); - } - - public SVGDrawApp() { - super("JHotDraw"); - } - - /** - * Factory method which create a new instance of this - * application. - * - * @return newly created application - */ - protected DrawApplication createApplication() { - return new SVGDrawApp(); - } - - /** - * Factory method to create a StorageFormatManager for supported storage formats. - * Different applications might want to use different storage formats and can return - * their own format manager by overriding this method. - * - * TODO: Read storage formats from a config file. - */ - public StorageFormatManager createStorageFormatManager() { - StorageFormatManager storageFormatManager = new StorageFormatManager(); - SVGStorageFormat format = new SVGStorageFormat(); - storageFormatManager.addStorageFormat(format); - storageFormatManager.setDefaultStorageFormat(format); - return storageFormatManager; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SVGStorageFormat.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/SVGStorageFormat.java deleted file mode 100644 index 7c1f32b9b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SVGStorageFormat.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)SVGStorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; - -import org.apache.batik.dom.GenericDOMImplementation; -import org.apache.batik.svggen.SVGGraphics2D; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Document; - -import org.jhotdraw.framework.Drawing; -import org.jhotdraw.util.StandardStorageFormat; - - -/** - * The SVGStorageFormat can save drawings in SVG 1.0. At this time, it cannot load - * SVG drawings. - * - * TODO: Refactor this and the other storage formats. There is too much duplication. - * - * @version <$CURRENT_VERSION$> - * @author mtnygard - */ -public class SVGStorageFormat extends StandardStorageFormat { - - /** - * Return the file extension recognized by the FileFilter for this - * StandardStorageFormat. - * - * @return the file extension - */ - protected String createFileExtension() { - return "svg"; - } - - /** - * Factory method to create a file description for the file type when displaying the - * associated FileFilter. - * - * @return the file description - */ - public String createFileDescription() { - return "Scalable Vector Graphics (svg)"; - } - - - /** - * @see org.jhotdraw.util.StorageFormat#isRestoreFormat() - */ - public boolean isRestoreFormat() { - return false; - } - - /** - * @see org.jhotdraw.util.StorageFormat#isStoreFormat() - */ - public boolean isStoreFormat() { - return true; - } - - /** - * Store a Drawing as SVG under a given name. - * - * @param fileName file name of the Drawing under which it should be stored - * @param saveDrawing drawing to be saved - * @return file name with correct file extension - * @see org.jhotdraw.util.StorageFormat#store(java.lang.String, org.jhotdraw.framework.Drawing) - */ - public String store(String fileName, Drawing saveDrawing) throws IOException { - // Get a DOMImplementation - DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); - - // Create an instance of org.w3c.dom.Document - Document document = domImpl.createDocument(null, "svg", null); - - // Create an instance of the SVG Generator - SVGGraphics2D svgGenerator = new SVGGraphics2D(document); - - // Ask the test to render into the SVG Graphics2D implementation - saveDrawing.draw(svgGenerator); - - // Finally, stream out SVG to the standard output using UTF-8 - // character to byte encoding - fileName = adjustFileName(fileName); - FileOutputStream fos = new FileOutputStream(fileName); - Writer out = new OutputStreamWriter(fos, "UTF-8"); - - - svgGenerator.stream(out, true); - return fileName; - } - - /** - * @see org.jhotdraw.util.StorageFormat#restore(java.lang.String) - */ - public Drawing restore(String fileName) throws IOException { - throw new IOException("Not implemented"); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SimpleLayouter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/SimpleLayouter.java deleted file mode 100644 index 99d556984..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SimpleLayouter.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * @(#)SimpleLayouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -import java.awt.*; -import java.io.IOException; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class SimpleLayouter implements Layouter { - - /** - * The Layoutable which should be laid out. - */ - private Layoutable myLayoutable; - - /** - * Insets to calculate a border - */ - private Insets myInsets; - - static final long serialVersionUID = 2928651014089117493L; - - private SimpleLayouter() { - // do nothing: for JDO-compliance only - } - - public SimpleLayouter(Layoutable newLayoutable) { - setLayoutable(newLayoutable); - setInsets(new Insets(0, 0, 0, 0)); - } - - /** - * Get the figure upon which the layout strategy operates. - * - * @return associated figure which should be laid out - */ - public Layoutable getLayoutable() { - return myLayoutable; - } - - /** - * Set the figure upon which the layout strategy operates. - * - * @param newLayoutable Layoutable to be laid out - */ - public void setLayoutable(Layoutable newLayoutable) { - myLayoutable = newLayoutable; - } - - /** - * Set the insets for spacing between the figure and its subfigures - * - * @param newInsets new spacing dimensions - */ - public void setInsets(Insets newInsets) { - myInsets = newInsets; - } - - /** - * Get the insets for spacing between the figure and its subfigures - * - * @return spacing dimensions - */ - public Insets getInsets() { - return myInsets; - } - - /** - * Create a new instance of this type and sets the layoutable - */ - public Layouter create(Layoutable newLayoutable) { - SimpleLayouter newLayouter = new SimpleLayouter(newLayoutable); - newLayouter.setInsets((Insets)getInsets().clone()); - return newLayouter; - } - - public Rectangle calculateLayout(Point origin, Point corner) { - Rectangle maxRect = new Rectangle(origin); - maxRect.add(corner); - FigureEnumeration fe = getLayoutable().figures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - maxRect.union(currentFigure.displayBox()); - } - maxRect.width += getInsets().left + getInsets().right; - maxRect.height += getInsets().top + getInsets().bottom; - return maxRect; - } - - public Rectangle layout(Point origin, Point corner) { - return calculateLayout(origin, corner); - } - - /** - * Reads the contained figures from StorableInput. - */ - public void read(StorableInput dr) throws IOException { - setLayoutable((Layoutable)dr.readStorable()); - setInsets(new Insets(dr.readInt(), dr.readInt(), dr.readInt(), dr.readInt())); - } - - /** - * Writes the contained figures to the StorableOutput. - */ - public void write(StorableOutput dw) { - dw.writeStorable(getLayoutable()); - Insets i = getInsets(); - dw.writeInt(i.top); - dw.writeInt(i.left); - dw.writeInt(i.bottom); - dw.writeInt(i.right); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitConnectionTool.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitConnectionTool.java deleted file mode 100644 index 18af983b4..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitConnectionTool.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * @(#)ConnectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.standard.ConnectionTool; -import org.jhotdraw.standard.SingleFigureEnumerator; -import org.jhotdraw.framework.*; -import org.jhotdraw.figures.*; - -import java.awt.event.MouseEvent; -import java.awt.*; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class SplitConnectionTool extends ConnectionTool { - public SplitConnectionTool(DrawingEditor newDrawingEditor, ConnectionFigure newPrototype) { - super(newDrawingEditor, newPrototype); - } - - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - int ex = e.getX(); - int ey = e.getY(); - if (getTargetFigure() == null) { - setTargetFigure(findConnectableFigure(ex, ey, drawing())); - } - else { - if (getAddedFigure() == null) { - setConnection(createConnection()); - setStartConnector(findConnector(ex, ey, getTargetFigure())); - getConnection().connectStart(getStartConnector()); - getConnection().startPoint(ex, ey); - setAddedFigure(view().add(getConnection())); - } - Figure c = findTarget(ex, ey, drawing()); - if (c != null) { - // end connection figure found - setEndConnector(findConnector(ex, ex, c)); - getConnection().connectEnd(getEndConnector()); - getConnection().endPoint(ex, ey); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getAddedFigure())); - getConnection().updateConnection(); - init(); - editor().toolDone(); - } - else { - // split connection where the mouse click took place - if (getEndConnector() == null) { - Figure tempEndFigure = new NullFigure(); - tempEndFigure.basicDisplayBox(new Point(ex, ey), new Point(ex, ey)); - setEndConnector(new NullConnector(tempEndFigure)); - getConnection().connectEnd(getEndConnector()); - getConnection().endPoint(ex, ey); - getConnection().updateConnection(); - } - else { - ((PolyLineFigure)getConnection()).addPoint(ex, ey); - } - } - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - // usually do nothing: tool is still active - if (e.getClickCount() == 2) { - init(); - editor().toolDone(); - } - } - - public void mouseMove(MouseEvent e, int x, int y) { - // avoid tracking connectors - } - - public void mouseDrag(MouseEvent e, int x, int y) { - // avoid tracking connectors - } - - public void deactivate() { - if (getConnection() != null) { - view().remove(getConnection()); - } - super.deactivate(); - init(); - } - - protected void init() { - setConnection(null); - setStartConnector(null); - setEndConnector(null); - setAddedFigure(null); - setTargetFigure(null); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitPaneDesktop.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitPaneDesktop.java deleted file mode 100644 index fd00f14c4..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitPaneDesktop.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * @(#)SplitPaneDesktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import javax.swing.*; -import java.awt.*; -import org.jhotdraw.framework.DrawingView; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeEvent; - -/** - * @todo Gotta fix this !!! the selected view changes based on which split pane is selected! - * - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class SplitPaneDesktop extends JSplitPane implements Desktop { - - private DesktopEventService myDesktopEventService; - - public SplitPaneDesktop() { - setDesktopEventService(createDesktopEventService()); - setAlignmentX(JSplitPane.LEFT_ALIGNMENT); - setOneTouchExpandable(true); - - addPropertyChangeListener(createPropertyChangeListener()); - } - - protected PropertyChangeListener createPropertyChangeListener() { - return new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - if (getRightComponent() != null) { - getRightComponent().repaint(); - } - if (getLeftComponent() != null) { - getLeftComponent().repaint(); - } - } - }; - } - - protected Component createContents(DrawingView dv, int location) { - setRightComponent(createRightComponent(dv)); - setLeftComponent(createLeftComponent(dv)); - switch (location) { - case Desktop.PRIMARY: { - return getLeftComponent(); - } - case Desktop.SECONDARY: { - return getRightComponent(); - } - default: { - return null; - } - } - } - - protected Component createRightComponent(DrawingView dv) { - JScrollPane sp = new JScrollPane((Component)dv); - sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - sp.setAlignmentX(LEFT_ALIGNMENT); - return sp; - } - - protected Component createLeftComponent(DrawingView dv) { - return new JScrollPane(new JList()); - } - - public DrawingView getActiveDrawingView() { - return getDesktopEventService().getActiveDrawingView(); - } - - public void addToDesktop(DrawingView dv, int location) { - createContents(dv, Desktop.PRIMARY); -/* switch (location) { - case Desktop.PRIMARY: { - setLeftComponent(createContents(dv, Desktop.PRIMARY)); - break; - } - case Desktop.SECONDARY: { - setRightComponent(createContents(dv, Desktop.SECONDARY)); - break; - } - } -*/ -// validate(); - setDividerLocation(getInitDividerLocation()); - } - - protected int getInitDividerLocation() { - return 150; - } - - public void removeFromDesktop(DrawingView dv, int location) { - Component[] comps = getContainer().getComponents(); - for (int x = 0; x < comps.length; x++) { - if (dv == Helper.getDrawingView(comps[x])) { - getContainer().remove(comps[x]); - break; - } - } - } - - public void removeAllFromDesktop(int location) { - getContainer().removeAll(); - } - - public DrawingView[] getAllFromDesktop(int location) { - return getDesktopEventService().getDrawingViews(getComponents()); - } - - public void addDesktopListener(DesktopListener dpl) { - getDesktopEventService().addDesktopListener(dpl); - } - - public void removeDesktopListener(DesktopListener dpl) { - getDesktopEventService().removeDesktopListener(dpl); - } - - private Container getContainer() { - return this; - } - - protected DesktopEventService getDesktopEventService() { - return myDesktopEventService; - } - - private void setDesktopEventService(DesktopEventService newDesktopEventService) { - myDesktopEventService = newDesktopEventService; - } - - protected DesktopEventService createDesktopEventService() { - return new DesktopEventService(this, getContainer()); - } - - public void updateTitle(String newDrawingTitle) { - // should be setTitle but a JPanelDesktop has no own title bar - setName(newDrawingTitle); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitPaneDrawApplication.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitPaneDrawApplication.java deleted file mode 100644 index 95413a1e0..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/SplitPaneDrawApplication.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * @(#)SplitPaneDrawApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.application.*; - -/** - * A specialised DrawApplication, which offers basic support for a simple - * splitted pane content. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class SplitPaneDrawApplication extends DrawApplication { - - /** - * Constructs a drawing window with a default title. - */ - public SplitPaneDrawApplication() { - this("JHotDraw"); - } - - /** - * Constructs a drawing window with the given title. - */ - public SplitPaneDrawApplication(String title) { - super(title); - } - - protected Desktop createDesktop() { - return new SplitPaneDesktop(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/StandardLayouter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/StandardLayouter.java deleted file mode 100644 index ac2bb4f3f..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/StandardLayouter.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * @(#)StandardLayouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import java.awt.Point; -import java.awt.Rectangle; - -// JUnitDoclet begin import -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.FigureEnumeration; -// JUnitDoclet end import - -/** - * A StandardLayouter contains standard algorithm for - * layouting a Layoutable. As a standard behaviour - * all child components of a Layoutable are laid out - * underneath each other starting from top to bottom while the - * x position of all child components stays the same and the width - * is forced to the width of the maximum width. At the end - * the presentation figure of the Layoutable is - * set to the maximum x and y size to encompass all contained - * child components graphically as well. - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class StandardLayouter extends SimpleLayouter { - - /** - * Default constructor which is needed for the Storable mechanism. - * Usually, the constructor which takes a Layoutable - * should be used as each StandardLayouter is associated - * with exactly one Layoutable. - */ - public StandardLayouter() { - this(null); - } - - /** - * Constructor which associates a StandardLayouter with - * a certain Layoutable. - * - * @param newLayoutable Layoutable to be laid out - */ - public StandardLayouter(Layoutable newLayoutable) { - super(newLayoutable); - } - - /** - * Create a new instance of this type and sets the layoutable - */ - public Layouter create(Layoutable newLayoutable) { - return new StandardLayouter(newLayoutable); - } - - /** - * Calculate the layout for the figure and all its - * subelements. The layout is not actually performed but just - * its dimensions are calculated. The insets for this figure - * are included in the return value. - * - * @param origin start point for the layout - * @param corner minimum corner point for the layout - */ - public Rectangle calculateLayout(Point origin, Point corner) { - int maxWidth = Math.abs(corner.x - origin.x); - int maxHeight = getInsets().top; - - // layout enclosed Layoutable and find maximum width - FigureEnumeration fe = getLayoutable().figures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - Rectangle r = null; - if (currentFigure instanceof Layoutable) { - Layouter layoutStrategy = ((Layoutable)currentFigure).getLayouter(); - r = layoutStrategy.calculateLayout( - new Point(0, 0), new Point(0, 0)); - } - else { - r = new Rectangle(currentFigure.displayBox().getBounds()); - } - maxWidth = Math.max(maxWidth, - r.width + getInsets().left + - getInsets().right); - maxHeight += r.height; - } - maxHeight += getInsets().bottom; - - return new Rectangle(origin.x, origin.y, maxWidth, maxHeight); - } - - /** - * Method which lays out a figure. It is called by the figure - * if a layout task is to be performed. First, the layout dimension for - * the figure is calculated and then the figure is arranged newly. - * All child component are place beneath another. The figure and all - * its children are forced to the minimium width - * - * @param origin start point for the layout - * @param corner minimum corner point for the layout - */ - public Rectangle layout(Point origin, Point corner) { - // calculate the layout of the figure and its sub-figures first - Rectangle r = calculateLayout(origin, corner); - - int maxHeight = getInsets().top; - FigureEnumeration fe = getLayoutable().figures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - - Point partOrigin = new Point(r.x + getInsets().left, r.y + maxHeight); - Point partCorner = new Point - (r.x + r.width - getInsets().right, - r.y + maxHeight + - currentFigure.displayBox().height); - currentFigure.displayBox(partOrigin, partCorner); - - maxHeight += currentFigure.displayBox().height; - } - - return new Rectangle(r.x, r.y, r.width, maxHeight + getInsets().bottom); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/TextAreaFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/TextAreaFigure.java deleted file mode 100644 index 481874ac0..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/TextAreaFigure.java +++ /dev/null @@ -1,936 +0,0 @@ -/* - * @(#)TextAreaFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib; - -import java.awt.*; -import java.awt.font.FontRenderContext; -import java.awt.font.LineBreakMeasurer; -import java.awt.font.TextAttribute; -import java.awt.font.TextLayout; -import java.awt.geom.Rectangle2D; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.text.AttributedCharacterIterator; -import java.text.AttributedString; -import java.text.CharacterIterator; -import java.util.*; -import java.util.List; - -import org.jhotdraw.figures.AttributeFigure; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.FigureChangeEvent; -import org.jhotdraw.framework.FigureChangeListener; -import org.jhotdraw.framework.HandleEnumeration; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -/** - * A TextAreaFigure contains formatted text.<br> - * It automatically rearranges the text to fit its allocated display area, - * breaking the lines at word boundaries whenever possible.<br> - * The text can contain either LF or CRLF sequences to separate paragraphs, - * as well as tab characters for table like formatting and alignment.<br> - * Currently the tabs are distributed at regular intervals as determined by - * the TabSize property. Tabs align correctly with either fixed - * or variable fonts.<br> - * If, when resizing, the vertical size of the display box is not enough to - * display all the text, TextAreaFigure displays a dashed red line at the - * bottom of the figure to indicate there is hidden text.<br> - * TextAreFigure uses all standard attributes for the area rectangle, - * ie: FillColor, PenColor for the border, FontSize, FontStyle, and FontName, - * as well as four additional attributes LeftMargin, RightMargin, TopMargin, - * and TabSize.<br> - * - * @author Eduardo Francos - InContext - * @created 26 avril 2002 - * @version <$CURRENT_VERSION$> - */ - -public class TextAreaFigure extends AttributeFigure - implements FigureChangeListener, TextHolder { - - /** True if the paragraph's cache needs to be reconstructed */ - protected boolean fTextIsDirty = true; - /** True if the sizing needs to be recalculated */ - protected transient boolean fSizeIsDirty = true; - - /** The current display box for the figure */ - private Rectangle fDisplayBox; - - /** Paragraph cache resulting from splitting the text */ - protected List fParagraphs; - - /** The text */ - protected String fText; - /** The current font */ - protected Font fFont; - /** - * True if the font has changed and font related calculations need to be remade - */ - protected boolean fFontIsDirty = true; - - /** The width of the current font */ - protected float fFontWidth; - /** - * Map of attributes for the AttributedString used for the figure's text. - * Currently it just uses one single attribute with the figure's current font. - */ - protected Hashtable attributesMap = new Hashtable(); - - /** True if the figure is read only */ - protected boolean fIsReadOnly; - - /** A connected figure */ - protected Figure fObservedFigure = null; - /** Description of the Field */ - protected OffsetLocator fLocator = null; - - final static long serialVersionUID = 4993631445423148845L; - - // make sure required default attributes are set - static { - initDefaultAttribute("LeftMargin", new Float(5)); - initDefaultAttribute("RightMargin", new Float(5)); - initDefaultAttribute("TopMargin", new Float(5)); - initDefaultAttribute("TabSize", new Float(8)); - } - - - /** Constructor for the TextAreaFigure object */ - public TextAreaFigure() { - fParagraphs = CollectionsFactory.current().createList(); - fDisplayBox = new Rectangle(0, 0, 30, 15); - fFont = createFont(); - fText = new String(""); - - fSizeIsDirty = true; - fTextIsDirty = true; - fFontIsDirty = true; - } - - - /** - * Gets the text of the figure - * - * @return The text value - */ - public String getText() { - return fText; - } - - - /** - * Sets the text of the figure - * - * @param newText The new text value - */ - public void setText(String newText) { - if (newText == null || !newText.equals(fText)) { - markTextDirty(); - fText = newText; - changed(); - } - } - - /** - * Returns the display box for the text - * - * @return Description of the Return Value - */ - public Rectangle textDisplayBox() { - return displayBox(); - } - - /** - * Creates the font from current attributes. - * - * @return Description of the Return Value - */ - public Font createFont() { - return new Font( - (String)getAttribute("FontName"), - ((Integer)getAttribute("FontStyle")).intValue(), - ((Integer)getAttribute("FontSize")).intValue()); - } - - public boolean isReadOnly() - { - return fIsReadOnly; - } - - public void setReadOnly(boolean newReadOnly) - { - fIsReadOnly = newReadOnly; - } - - /** - * Tests whether the figure accepts typing. - * - * @return Description of the Return Value - */ - public boolean acceptsTyping() { - return !isReadOnly(); - } - - - /** - * Called whenever the something changes that requires text recomputing - */ - protected void markTextDirty() { - setTextDirty(true); - } - - - /** - * Sets the textDirty attribute of the TextAreaFigure object - * - * @param newTextDirty The new textDirty value - */ - protected void setTextDirty(boolean newTextDirty) { - fTextIsDirty = newTextDirty; - } - - - /** - * Gets the textDirty attribute of the TextAreaFigure object - * - * @return The textDirty value - */ - public boolean isTextDirty() { - return fTextIsDirty; - } - - - /** - * Called whenever the something changes that requires size recomputing - */ - protected void markSizeDirty() { - setSizeDirty(true); - } - - - /** - * Called to set the dirty status of the size - * - * @param newSizeIsDirty The new sizeDirty value - */ - public void setSizeDirty(boolean newSizeIsDirty) { - fSizeIsDirty = newSizeIsDirty; - } - - - /** - * Returns the current size dirty status - * - * @return The sizeDirty value - */ - public boolean isSizeDirty() { - return fSizeIsDirty; - } - - /** - * Gets the font. - * - * @return The font value - */ - public Font getFont() { - return fFont; - } - - /** - * Sets the font. - * - * @param newFont The new font value - */ - public void setFont(Font newFont) { - if(newFont == null) { - throw new IllegalArgumentException(); - } - willChange(); - fFont = newFont; - markSizeDirty(); - markFontDirty(); - attributesMap = new Hashtable(1); - attributesMap.put(TextAttribute.FONT, newFont); - changed(); - } - - /** - * Gets the number of columns to be overlaid when the figure is edited.<br> - * This method is mandatory by the TextHolder interface but is not - * used by the TextAreaFigure/TextAreaTool couple because the overlay always - * covers the text area display box - * - * @return the number of overlay columns - */ - public int overlayColumns() { - return 0; - } - - /** - * Sets the display box for the figure - * - * @param origin origin point - * @param corner corner point - * @see Figure - */ - public void basicDisplayBox(Point origin, Point corner) { - Dimension prevSize = fDisplayBox.getSize(); - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - if (!fDisplayBox.getSize().equals(prevSize)){ - markSizeDirty(); - } - } - - /** - * Returns an iterator of standard sizing handles to manipulate the figure - * - * @return Description of the Return Value - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - /** - * Returns the current display box for the figure - * - * @return Description of the Return Value - */ - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - - /** - * Moves the figure the supplied offset - * - * @param x x displacement - * @param y y displacement - */ - public void moveBy(int x, int y) { - willChange(); - basicMoveBy(x, y); - if (fLocator != null) { - fLocator.moveBy(x, y); - } - changed(); - } - - /** - * Moves the figure the supplied offset - * - * @param x x displacement - * @param y y displacement - */ - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x, y); - } - - /** - * Draws the background for the figure. Called by the superclass with the colors - * set from the current attribute values - * - * @param g The graphics to use for the drawing - */ - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - g.fillRect(r.x, r.y, r.width, r.height); - } - - /** - * Draws the figure. Overriden so as to draw the text once everything - * else has been drawn - * - * @param g The graphics to use for the drawing - */ - public void draw(Graphics g) { - super.draw(g); - drawText(g, displayBox()); - } - - /** - * Draws the frame around the text - * - * @param g The graphics to use for the drawing - */ - public void drawFrame(Graphics g) { - Rectangle r = displayBox(); - g.setColor((Color)getAttribute("FrameColor")); - g.drawRect(r.x, r.y, r.width, r.height); - } - - - /** - * Formats and draws the text for the figure - * - * @param g the graphics for the drawing. It can be null when - * called just to compute the size - * @param displayBox the display box within which the text should be formatted and drawn - * @return Description of the Return Value - */ - protected float drawText(Graphics g, Rectangle displayBox) { - Graphics2D g2 = null; - Shape savedClipArea = null; - Color savedFontColor = null; - Rectangle2D clipRect = null; - RenderingHints savedRenderingHints = null; - - if (g != null) { - g2 = (Graphics2D)g; - savedRenderingHints = g2.getRenderingHints(); - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g2.setRenderingHint(RenderingHints.KEY_RENDERING, - RenderingHints.VALUE_RENDER_QUALITY); - //Font savedFont = g2.getFont(); - savedFontColor = g2.getColor(); - savedClipArea = g2.getClip(); - if(savedClipArea != null) { - clipRect = displayBox.createIntersection((Rectangle2D)savedClipArea); - } - else { - clipRect = displayBox; - } - g2.setClip(clipRect); - Color textColor = getTextColor(); - if (!ColorMap.isTransparent(textColor)) { - g2.setColor(textColor); - } - g2.setFont(getFont()); - } - FontRenderContext fontRenderCtx = new FontRenderContext(null, false, false); - - // split the text into paragraphs - prepareText(); - - float leftMargin = displayBox.x + ((Float)getAttribute("LeftMargin")).floatValue(); - float rightMargin = displayBox.x + displayBox.width - ((Float)getAttribute("RightMargin")).floatValue(); - float topMargin = displayBox.y + ((Float)getAttribute("TopMargin")).floatValue(); - - /** - * @todo we prepare stops for 40 tabs which should be enough to handle - * all normal cases, but a better means should/could be implemented - */ - float[] tabStops = new float[40]; - // tabSize is in pixels - float tabSize = ((Float)getAttribute("TabSize")).floatValue() * getFontWidth(); - float tabPos = tabSize; - for (int tabCnt = 0; tabCnt < 40; tabCnt++) { - tabStops[tabCnt] = tabPos + leftMargin; - tabPos += tabSize; - } - - /** Iterate on the paragraphs displaying each one in turn */ - float verticalPos = topMargin; - Iterator paragraphs = fParagraphs.iterator(); - while (paragraphs.hasNext()) { - String paragraphText = (String)paragraphs.next(); - - // prepare tabs. Here we build an array with the character positions - // of the tabs within the paragraph - AttributedString attrText = new AttributedString(paragraphText); - AttributedCharacterIterator paragraphIter = attrText.getIterator(); - int[] tabLocations = new int[paragraphText.length()]; - int tabCount = 0; - for (char c = paragraphIter.first(); c != CharacterIterator.DONE; c = paragraphIter.next()) { - if (c == '\t') { - tabLocations[tabCount++] = paragraphIter.getIndex(); - } - } - tabLocations[tabCount] = paragraphIter.getEndIndex() - 1; - - // tabs done. Replace tab characters with spaces. This to avoid - // a strange behaviour where the layout is a lot slower and - // the font get's changed. If anybody knows why this so please - // tell me. - paragraphText = paragraphText.replace('\t', ' '); - attrText = new AttributedString(paragraphText, attributesMap); - paragraphIter = attrText.getIterator(); - - // Now tabLocations has an entry for every tab's offset in - // the text. For convenience, the last entry in tabLocations - // is the offset of the last character in the text. - - LineBreakMeasurer measurer = new LineBreakMeasurer(paragraphIter, fontRenderCtx); - int currentTab = 0; - - while (measurer.getPosition() < paragraphIter.getEndIndex()) { - // Lay out and draw each line. All segments on a line - // must be computed before any drawing can occur, since - // we must know the largest ascent on the line. - // TextLayouts are computed and stored in a collection; - // their horizontal positions are stored in a parallel - // collection. - - // lineContainsText is true after first segment is drawn - boolean lineContainsText = false; - boolean lineComplete = false; - float maxAscent = 0; - float maxDescent = 0; - float horizontalPos = leftMargin; - List layouts = CollectionsFactory.current().createList(1); - List penPositions = CollectionsFactory.current().createList(1); - - while (!lineComplete) { - float wrappingWidth = rightMargin - horizontalPos; - // ensure wrappingWidth is at least 1 - wrappingWidth = Math.max(1, wrappingWidth); - TextLayout layout = - measurer.nextLayout(wrappingWidth, - tabLocations[currentTab] + 1, - lineContainsText); - - // layout can be null if lineContainsText is true - if (layout != null) { - layouts.add(layout); - penPositions.add(new Float(horizontalPos)); - horizontalPos += layout.getAdvance(); - maxAscent = Math.max(maxAscent, layout.getAscent()); - maxDescent = Math.max(maxDescent, - layout.getDescent() + layout.getLeading()); - } - else { - lineComplete = true; - } - - lineContainsText = true; - - if (measurer.getPosition() == tabLocations[currentTab] + 1) { - currentTab++; - } - - if (measurer.getPosition() == paragraphIter.getEndIndex()) { - lineComplete = true; - } - else if (horizontalPos >= tabStops[tabStops.length - 1]) { - lineComplete = true; - } - - if (!lineComplete) { - // move to next tab stop - int j; - for (j = 0; horizontalPos >= tabStops[j]; j++) { - } - horizontalPos = tabStops[j]; - } - } - - // set the vertical position for the line - verticalPos += maxAscent; - - // now iterate through layouts and draw them - Iterator layoutEnum = layouts.iterator(); - Iterator positionEnum = penPositions.iterator(); - while (layoutEnum.hasNext()) { - TextLayout nextLayout = (TextLayout)layoutEnum.next(); - Float nextPosition = (Float)positionEnum.next(); - if (g2 != null) { - nextLayout.draw(g2, nextPosition.floatValue(), verticalPos); - } - } - - // keep track of the highest (actually lowest) position for the - // next iteration - verticalPos += maxDescent; - } - } - - // if the last displayed line is not visible because the displayBox is - // too small then draw a dashed red line at the bottom - if (g2 != null && verticalPos > clipRect.getMaxY() && clipRect.getMaxY() == displayBox.getMaxY()) { - Stroke savedStroke = g2.getStroke(); - float[] dash = new float[2]; - dash[0] = 2f; - dash[1] = 4f; - g2.setStroke(new BasicStroke( - 1f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, - 1f, dash, 0f)); - g2.setColor(Color.red); - g2.drawLine((int)clipRect.getMinX() + 1, (int)clipRect.getMaxY() - 1, - (int)clipRect.getMaxX() - 1, (int)clipRect.getMaxY() - 1); - g2.setStroke(savedStroke); - } - - // restore saved graphic attributes - if (g2 != null) { - if(savedClipArea != null) { - g2.setClip(savedClipArea); - } - g2.setColor(savedFontColor); - g2.setRenderingHints(savedRenderingHints); - } - - // and return the final text height - return verticalPos; - } - - /** - * Splits the text into paragraphs. A paragraph is delimited by a LF or CRLF. - * If the paragraph is empty it returns a single space so the display logic has - * something to work with - */ - protected void prepareText() { - if (!isTextDirty()) { - return; - } - - fParagraphs = CollectionsFactory.current().createList(); - String paragraphText; - Point pos = new Point(-1, -1); - - while ((paragraphText = getNextParagraph(fText, pos)) != null) { - if (paragraphText.length() == 0) { - paragraphText = " "; - } - fParagraphs.add(paragraphText); - } - setTextDirty(false); - } - - /** - * Gets the next paragraph in the supplied string<br> - * Paragraphs are defined by a LF or CRLF sequence<br> - * Scanning starts from the next characters as given by the pos.y value - * - * @param text the text to break into paragraphs - * @param pos a point where pos.x is the position of the first character of the paragraph in - * the string and pos.y is the last - * @return The text for the paragraph - */ - protected String getNextParagraph(String text, Point pos) { - int start = pos.y + 1; - - if (start >= text.length()) { - return null; - } - pos.x = start; - - int end = text.indexOf('\n', start); - if (end == -1) { - end = text.length(); - } - pos.y = end; - // check for "\r\n" sequence - if (text.charAt(end - 1) == '\r') { - return text.substring(start, end - 1); - } - else { - return text.substring(start, end); - } - } - - /** - * A text area figure uses the "LeftMargin", "RightMargin", "TopMargin", - * "TabSize", "FontSize", "FontStyle", and "FontName" attributes - * - * @param name the attribute's name - * @return the attribute value - * @deprecated use getAttribute(FigureAttributeConstant) - */ - public Object getAttribute(String name) { - return super.getAttribute(name); - } - - - /** - * A text area figure uses the "LeftMargin", "RightMargin", - * "TopMargin", "TabSize", "FontSize", "FontStyle", and "FontName" - * attributes - * - * @param name the new attribute name - * @param value the new attribute value - * @deprecated use setAttribute(FigureAttributeConstant, Object) - */ - public void setAttribute(String name, Object value) { - // we need to create a new font if one of the font attributes - Font font = getFont(); - if (name.equals("FontSize")) { - Integer s = (Integer)value; - setFont(new Font(font.getName(), font.getStyle(), s.intValue())); - // store the attribute - super.setAttribute(name, value); - } - else if (name.equals("FontStyle")) { - Integer s = (Integer)value; - int style = font.getStyle(); - if (s.intValue() == Font.PLAIN) { - style = Font.PLAIN; - } - else { - style = style ^ s.intValue(); - } - setFont(new Font(font.getName(), style, font.getSize())); - // store the attribute - super.setAttribute(name, new Integer(style)); - } - else if (name.equals("FontName")) { - String n = (String)value; - setFont(new Font(n, font.getStyle(), font.getSize())); - // store the attribute - super.setAttribute(name, value); - } - else { - // store the attribute - super.setAttribute(name, value); - } - } - - /** - * Writes the figure to StorableOutput - * - * @param dw the output storable - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - dw.writeString(fText); - dw.writeBoolean(fIsReadOnly); - dw.writeStorable(fObservedFigure); - dw.writeStorable(fLocator); - } - - /** - * Reads the figure from StorableInput - * - * @param dr Description of the Parameter - * @throws IOException the inout storable - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - - markSizeDirty(); - markTextDirty(); - markFontDirty(); - - fDisplayBox.x = dr.readInt(); - fDisplayBox.y = dr.readInt(); - fDisplayBox.width = dr.readInt(); - fDisplayBox.height = dr.readInt(); - fText = dr.readString(); - fIsReadOnly = dr.readBoolean(); - - fObservedFigure = (Figure)dr.readStorable(); - if (fObservedFigure != null) { - fObservedFigure.addFigureChangeListener(this); - } - fLocator = (OffsetLocator)dr.readStorable(); - - setFont(createFont()); - } - - /** - * Reads the figure from an object stream - * - * @param s the input stream - * @throws ClassNotFoundException thrown by called methods - * @throws IOException thrown by called methods - */ - protected void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - if (fObservedFigure != null) { - fObservedFigure.addFigureChangeListener(this); - } - markSizeDirty(); - markTextDirty(); - markFontDirty(); - } - - /** - * Connects the figure to another figure - * - * @param figure the connecting figure - */ - public void connect(Figure figure) { - if (fObservedFigure != null) { - fObservedFigure.removeFigureChangeListener(this); - } - - fObservedFigure = figure; - fLocator = new OffsetLocator(figure.connectedTextLocator(this)); - fObservedFigure.addFigureChangeListener(this); - updateLocation(); - } - - /** - * Disconnects a text holder from a connect figure. - * - * @param disconnectFigure the disconnecting figure - */ - public void disconnect(Figure disconnectFigure) { - if (disconnectFigure != null) { - disconnectFigure.removeFigureChangeListener(this); - } - fLocator = null; - } - - /** - * Description of the Method - * @todo Implement this org.jhotdraw.framework.FigureChangeListener method - * - * @param e Description of the Parameter - */ - public void figureInvalidated(FigureChangeEvent e) { - } - - /** - * A connected figure has changed, update the figure's location - * - * @param e Description of the Parameter - */ - public void figureChanged(FigureChangeEvent e) { - updateLocation(); - } - - /** - * Updates the location relative to the connected figure. - * The TextAreaFigure is centered around the located point. - */ - protected void updateLocation() { - if (fLocator != null) { - Point p = fLocator.locate(fObservedFigure); - - p.x -= size().width / 2 + fDisplayBox.x; - p.y -= size().height / 2 + fDisplayBox.y; - if (p.x != 0 || p.y != 0) { - willChange(); - basicMoveBy(p.x, p.y); - changed(); - } - } - } - - /** - * The figure is about to be removed from another composite figure - * - * @param e Description of the Parameter - */ - public void figureRemoved(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRemoved(new FigureChangeEvent(this)); - } - } - - /** - * A request to remove the figure from another composite figure - * - * @param e Description of the Parameter - */ - public void figureRequestRemove(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestRemove(new FigureChangeEvent(this)); - } - } - - /** - * @param e Description of the Parameter - */ - public void figureRequestUpdate(FigureChangeEvent e) { - // @todo: Implement this org.jhotdraw.framework.FigureChangeListener method - } - - /** - * Gets the font width for the active font. This is by convention the width of - * the 'W' character, the widest one - * - * @return The fontWidth value - */ - protected float getFontWidth() { - updateFontInfo(); - return fFontWidth; - } - - /** Retrieve all Font information needed */ - protected void updateFontInfo() { - if (!isFontDirty()) { - return; - } - fFontWidth = (int) getFont().getMaxCharBounds(new FontRenderContext(null, false, false)).getWidth(); - - setFontDirty(false); - } - - /** - * Gets the text color of a figure. This is a convenience - * method. - * - * @return The textColor value - * @see #getAttribute - */ - public Color getTextColor() { - return (Color)getAttribute("TextColor"); - } - - /** - * Gets the empty attribute of the figure. True if there is no text - * - * @return The empty value - */ - public boolean isEmpty() { - return (fText.length() == 0); - } - - /** - * Called whenever the something changes that requires font recomputing - */ - protected void markFontDirty() { - setFontDirty(true); - } - - /** - * Gets the fontDirty attribute of the TextAreaFigure object - * - * @return The fontDirty value - */ - public boolean isFontDirty() { - return fFontIsDirty; - } - - /** - * Sets the fontDirty attribute of the TextAreaFigure object - * - * @param newFontIsDirty The new fontDirty value - */ - public void setFontDirty(boolean newFontIsDirty) { - fFontIsDirty = newFontIsDirty; - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure() { - return this; - } - - /** - * @see org.jhotdraw.framework.Figure#getTextHolder() - */ - public TextHolder getTextHolder() { - return this; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/TextAreaTool.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/TextAreaTool.java deleted file mode 100644 index 1acf04578..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/TextAreaTool.java +++ /dev/null @@ -1,445 +0,0 @@ -/* - * @(#)TextAreaTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib; - -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.standard.CreationTool; -import org.jhotdraw.standard.SingleFigureEnumerator; -import org.jhotdraw.standard.TextHolder; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.UndoableAdapter; - -import java.awt.Container; -import java.awt.Font; -import java.awt.Rectangle; -import java.awt.event.MouseEvent; - -/** - * A TextAreaTool creates TextAreaFigures.<br> - * To create a new text area, the user drags a rectangle on the drawing on - * a free spot.<br> - * When releasing the mouse the tool calls the area's editor to enter the text.<br> - * If the tool is clicked on an existing area the tool simply calls the - * area's editor.<br> - * When creating a new area, if the user leaves the text empty, the newly created - * area figure is discarded. - * - * @author Eduardo Francos - InContext - * @created 29 april 2002 - * @version 1.0 - */ -public class TextAreaTool extends CreationTool { - /** The field used for editing */ - protected FloatingTextArea fTextField; - - /** The typing target */ - protected TextHolder fTypingTarget; - /** The edited figure */ - protected Figure fEditedFigure; - - /** - * Constructor for the TextAreaTool object - * - * @param newDrawingEditor the managing drawing editor - * @param prototype the prototype for the figure - */ - public TextAreaTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - /** - * If the pressed figure is a TextHolder and it accepts editing it can be edited.<br> - * If there is no pressed figure a new text figure is created. - * - * @param e Description of the Parameter - * @param x Description of the Parameter - * @param y Description of the Parameter - */ - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - Figure pressedFigure = drawing().findFigureInside(x, y); - TextHolder textHolder = null; - if (pressedFigure != null) { - textHolder = pressedFigure.getTextHolder(); - } - - if ((textHolder != null) && (textHolder.acceptsTyping())) { - beginEdit(textHolder, pressedFigure); - return; - } - if (getTypingTarget() != null) { - endEdit(); - - if (getCreatedFigure() != null && getCreatedFigure().isEmpty()) { - drawing().remove(getAddedFigure()); - // nothing to undo - setUndoActivity(null); - } - else { -// // use undo activity from paste command... -// setUndoActivity(createUndoActivity()); -// -// // put created figure into a figure enumeration -// getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(getAddedFigure())); - } - setTypingTarget(null); - setCreatedFigure(null); - setEditedFigure(null); - setAddedFigure(null); - editor().toolDone(); - } - else { - super.mouseDown(e, x, y); - } - } - - /** - * Drags to set the initial text area display box - * - * @param e Description of the Parameter - * @param x Description of the Parameter - * @param y Description of the Parameter - */ - public void mouseDrag(MouseEvent e, int x, int y) { - // if not creating just ignore - if (getCreatedFigure() == null) { - return; - } - super.mouseDrag(e, x, y); - } - - /** - * If creating a figure it ends the creation process and calls the editor - * - * @param e Description of the Parameter - * @param x Description of the Parameter - * @param y Description of the Parameter - */ - public void mouseUp(MouseEvent e, int x, int y) { - // if not creating just ignore - if (getCreatedFigure() == null) { - return; - } - - // update view so the created figure is drawn before the floating text - // figure is overlaid. (Note, fDamage should be null in StandardDrawingView - // when the overlay figure is drawn because a JTextField cannot be scrolled) - view().checkDamage(); - TextHolder textHolder = (TextHolder)getCreatedFigure(); - if (textHolder.acceptsTyping()) { - beginEdit(textHolder, getCreatedFigure()); - } - else { - editor().toolDone(); - } - } - - /** - * Terminates the editing of a text figure. - */ - public void deactivate() { - endEdit(); - super.deactivate(); - } - - /** - * Activates the figure's editor - */ - public void activate() { - super.activate(); - getActiveView().clearSelection(); - } - - /** - * Test whether the text tool is currently activated and is displaying - * a overlay TextFigure for accepting input. - * - * @return true, if the text tool has a accepting target TextFigure for its input, false otherwise - */ - public boolean isActivated() { - return getTypingTarget() != null; - } - - /** - * Begins editing the figure's text - * - * @param figure the typing target - * @param selectedFigure the edited figure - */ - protected void beginEdit(TextHolder figure, Figure selectedFigure) { - if (fTextField == null) { - fTextField = new FloatingTextArea(); - } - - if (figure != getTypingTarget() && getTypingTarget() != null) { - endEdit(); - } - - fTextField.createOverlay((Container)view(), getFont(figure)); - fTextField.setBounds(fieldBounds(figure), figure.getText()); - - setTypingTarget(figure); - setEditedFigure(selectedFigure); - setUndoActivity(createUndoActivity()); - } - - /** - * Gets the font to be used for editing the figure - * - * @param figure the figure - * @return The font - */ - protected Font getFont(TextHolder figure) { - return figure.getFont(); - } - - /** Ends editing of the figure's text */ - protected void endEdit() { - if ((getTypingTarget() != null) && (fTextField != null)) { - if (fTextField.getText().length() > 0) { - getTypingTarget().setText(fTextField.getText()); - // put created figure into a figure enumeration - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getEditedFigure())); - ((TextAreaTool.UndoActivity)getUndoActivity()).setBackupText( - getTypingTarget().getText()); - } - else { - drawing().orphan(getAddedFigure()); - // nothing to undo -// setUndoActivity(null); - } - - fTextField.endOverlay(); - fTextField = null; -// view().checkDamage(); - } - } - - /** - * Returns the bounds fo the figure - * - * @param figure the edited figure - * @return Description of the Return Value - */ - private Rectangle fieldBounds(TextHolder figure) { - return figure.textDisplayBox(); - } - - /** - * Sets the typingTarget attribute of the TextAreaTool - * - * @param newTypingTarget The new typingTarget value - */ - protected void setTypingTarget(TextHolder newTypingTarget) { - fTypingTarget = newTypingTarget; - } - - /** - * Gets the editedFigure attribute of the TextAreaTool - * - * @return The editedFigure value - */ - protected Figure getEditedFigure() { - return fEditedFigure; - } - - /** - * Sets the editedFigure attribute of the TextAreaTool - * - * @param figure The new editedFigure value - */ - protected void setEditedFigure(Figure figure) { - fEditedFigure = figure; - } - - /** - * Gets the typingTarget attribute of the TextAreaTool - * - * @return The typingTarget value - */ - protected TextHolder getTypingTarget() { - return fTypingTarget; - } - - /** - * Factory method for undo activity - * - * @return Description of the Return Value - */ - protected Undoable createUndoActivity() { - return new TextAreaTool.UndoActivity(view(), getTypingTarget().getText()); - } - - /** - * Handles undo/redo for text areas - * - * @author gualo - */ - public static class UndoActivity extends UndoableAdapter { - /** The original text */ - private String myOriginalText; - /** The backup text */ - private String myBackupText; - - /** - * Constructor for the UndoActivity object - * - * @param newDrawingView Description of the Parameter - * @param newOriginalText Description of the Parameter - */ - public UndoActivity(DrawingView newDrawingView, String newOriginalText) { - super(newDrawingView); - setOriginalText(newOriginalText); - setUndoable(true); - setRedoable(true); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - /** - * Undo the activity - * - * @return Description of the Return Value - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - - getDrawingView().clearSelection(); - - if (!isValidText(getOriginalText())) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().drawing().orphan(fe.nextFigure()); - } - } - // add text figure if it has been removed (no backup text) - else if (!isValidText(getBackupText())) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().add(fe.nextFigure()); - } - setText(getOriginalText()); - } - else { - setText(getOriginalText()); - } - - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - /** - * Redo the activity - * - * @return Description of the Return Value - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - - getDrawingView().clearSelection(); - - // the text figure did exist but was remove - if (!isValidText(getBackupText())) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().drawing().orphan(fe.nextFigure()); - } - } - // the text figure didn't exist before - else if (!isValidText(getOriginalText())) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().drawing().add(fe.nextFigure()); - setText(getBackupText()); - } - } - else { - setText(getBackupText()); - } - - return true; - } - - /** - * Validates the text in the undo activity - * - * @param toBeChecked Description of the Parameter - * @return The validText value - */ - protected boolean isValidText(String toBeChecked) { - return ((toBeChecked != null) && (toBeChecked.length() > 0)); - } - - /** - * Sets the text attribute of the UndoActivity - * - * @param newText The new text value - */ - protected void setText(String newText) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - currentFigure.getTextHolder().setText(newText); - } - } - } - - /** - * Sets the backupText attribute of the UndoActivity - * - * @param newBackupText The new backupText value - */ - public void setBackupText(String newBackupText) { - myBackupText = newBackupText; - } - - /** - * Gets the backupText attribute of the UndoActivity - * - * @return The backupText value - */ - public String getBackupText() { - return myBackupText; - } - - /** - * Sets the originalText attribute of the UndoActivity - * - * @param newOriginalText The new originalText value - */ - public void setOriginalText(String newOriginalText) { - myOriginalText = newOriginalText; - } - - /** - * Gets the originalText attribute of the UndoActivity - * - * @return The originalText value - */ - public String getOriginalText() { - return myOriginalText; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/TriangleFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/TriangleFigure.java deleted file mode 100644 index 791dd619a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/TriangleFigure.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * @(#)TriangleFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import org.jhotdraw.util.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.framework.HandleEnumeration; -import org.jhotdraw.standard.HandleEnumerator; - -import java.awt.*; -import java.util.List; -import java.io.IOException; - -/** - * A triangle with same dimensions as its enclosing rectangle, - * and apex at any of 8 places - * - * @author Doug Lea (dl at gee, Tue Feb 25 17:30:58 1997) - * @version <$CURRENT_VERSION$> - */ -public class TriangleFigure extends RectangleFigure { - - static double[] rotations = { - -Math.PI/2, -Math.PI/4, - 0.0, Math.PI/4, - Math.PI/2, Math.PI * 3/4, - Math.PI, -Math.PI * 3/4 - }; - - private int fRotation = 0; - - public TriangleFigure() { - super(new Point(0,0), new Point(0,0)); - } - - public TriangleFigure(Point origin, Point corner) { - super(origin, corner); - } - - public HandleEnumeration handles() { - List h = super.handles().toList(); - h.add(new TriangleRotationHandle(this)); - return new HandleEnumerator(h); - } - - public void rotate(double angle) { - willChange(); - double dist = Double.MAX_VALUE; - int best = 0; - for (int i = 0; i < rotations.length; ++i) { - double d = Math.abs(angle - rotations[i]); - if (d < dist) { - dist = d; - best = i; - } - } - fRotation = best; - changed(); - } - - /** Return the polygon describing the triangle **/ - public Polygon getPolygon() { - Rectangle r = displayBox(); - Polygon p = new Polygon(); - switch (fRotation) { - case 0: - p.addPoint(r.x + r.width/2, r.y); - p.addPoint(r.x + r.width, r.y + r.height); - p.addPoint(r.x, r.y + r.height); - break; - case 1: - p.addPoint(r.x + r.width, r.y); - p.addPoint(r.x + r.width, r.y + r.height); - p.addPoint(r.x, r.y); - break; - case 2: - p.addPoint(r.x + r.width, r.y + r.height/2); - p.addPoint(r.x, r.y + r.height); - p.addPoint(r.x, r.y); - break; - case 3: - p.addPoint(r.x + r.width, r.y + r.height); - p.addPoint(r.x, r.y + r.height); - p.addPoint(r.x + r.width, r.y); - break; - case 4: - p.addPoint(r.x + r.width/2, r.y + r.height); - p.addPoint(r.x, r.y); - p.addPoint(r.x + r.width, r.y); - break; - case 5: - p.addPoint(r.x, r.y + r.height); - p.addPoint(r.x, r.y); - p.addPoint(r.x + r.width, r.y + r.height); - break; - case 6: - p.addPoint(r.x, r.y + r.height/2); - p.addPoint(r.x + r.width, r.y); - p.addPoint(r.x + r.width, r.y + r.height); - break; - case 7: - p.addPoint(r.x, r.y); - p.addPoint(r.x + r.width, r.y); - p.addPoint(r.x, r.y + r.height); - break; - } - return p; - } - - - public void draw(Graphics g) { - Polygon p = getPolygon(); - g.setColor(getFillColor()); - g.fillPolygon(p); - g.setColor(getFrameColor()); - g.drawPolygon(p); - } - - public Insets connectionInsets() { - Rectangle r = displayBox(); - switch(fRotation) { - case 0: - return new Insets(r.height, r.width/2, 0, r.width/2); - case 1: - return new Insets(0, r.width, r.height, 0); - case 2: - return new Insets(r.height/2, 0, r.height/2, r.width); - case 3: - return new Insets(r.height, r.width, 0, 0); - case 4: - return new Insets(0, r.width/2, r.height, r.width/2); - case 5: - return new Insets(r.height, 0, 0, r.width); - case 6: - return new Insets(r.height/2, r.width, r.height/2, 0); - case 7: - return new Insets(0, 0, r.height, r.width); - default: - return null; - } - } - - public boolean containsPoint(int x, int y) { - return getPolygon().contains(x, y); - } - - public Point center() { - return PolygonFigure.center(getPolygon()); - } - - public Point chop(Point p) { - return PolygonFigure.chop(getPolygon(), p); - } - - public Object clone() { - TriangleFigure figure = (TriangleFigure) super.clone(); - figure.fRotation = fRotation; - return figure; - } - - public double getRotationAngle() { - return rotations[fRotation]; - } - - //-- store / load ---------------------------------------------- - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fRotation); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fRotation = dr.readInt(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/TriangleRotationHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/TriangleRotationHandle.java deleted file mode 100644 index e3e2aa5aa..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/TriangleRotationHandle.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * @(#)TriangleRotationHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; -import org.jhotdraw.standard.*; - - -/** - * A Handle to rotate a TriangleFigure - * Based on RadiusHandle - * - * @author Doug Lea (dl at gee, Sun Mar 2 19:15:28 1997) - * @version <$CURRENT_VERSION$> - */ -class TriangleRotationHandle extends AbstractHandle { - - private Point fOrigin; - - public TriangleRotationHandle(TriangleFigure owner) { - super(owner); - } - - /** - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - */ - public void invokeStart(int x, int y, DrawingView view) { - fOrigin = getOrigin(); - TriangleRotationHandle.UndoActivity activity = - (TriangleRotationHandle.UndoActivity)createUndoActivity(view); - setUndoActivity(activity); - activity.setAffectedFigures(new SingleFigureEnumerator(owner())); - double rotation = ((TriangleFigure)(owner())).getRotationAngle(); - activity.setRotationAngle(rotation); - } - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Point fCenter = owner().center(); - double angle = Math.atan2(fOrigin.y + y - anchorY - fCenter.y, - fOrigin.x + x - anchorX - fCenter.x); - ((TriangleFigure)(owner())).rotate(angle); - } - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - fOrigin = null; - } - - public Point locate() { - return getOrigin(); - } - - Point getOrigin() { - // find a nice place to put handle - // almost same code as PolygonScaleHandle - Polygon p = ((TriangleFigure)(owner())).getPolygon(); - Point first = new Point(p.xpoints[0], p.ypoints[0]); - Point ctr = owner().center(); - double len = Geom.length(first.x, first.y, ctr.x, ctr.y); - if (len == 0) { // best we can do? - return new Point(first.x - HANDLESIZE/2, first.y + HANDLESIZE/2); - } - - double u = HANDLESIZE / len; - if (u > 1.0) { // best we can do? - return new Point((first.x * 3 + ctr.x)/4, (first.y * 3 + ctr.y)/4); - } - else { - return new Point((int)(first.x * (1.0 - u) + ctr.x * u), - (int)(first.y * (1.0 - u) + ctr.y * u)); - } - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new TriangleRotationHandle.UndoActivity(newView); - } - - public static class UndoActivity extends UndoableAdapter { - private double myRotationAngle; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return resetRotationAngle(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return resetRotationAngle(); - } - - protected boolean resetRotationAngle() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - TriangleFigure figure = (TriangleFigure)fe.nextFigure(); - double backupAngle = figure.getRotationAngle(); - figure.willChange(); - figure.rotate(getRotationAngle()); - figure.changed(); - setRotationAngle(backupAngle); - return true; - } - - protected void setRotationAngle(double newRotationAngle) { - myRotationAngle = newRotationAngle; - } - - public double getRotationAngle() { - return myRotationAngle; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/WindowMenu.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/WindowMenu.java deleted file mode 100644 index c53418d81..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/WindowMenu.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * @(#)WindowMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyVetoException; - -import javax.swing.JCheckBoxMenuItem; -import javax.swing.JInternalFrame; -import javax.swing.event.MenuEvent; -import javax.swing.event.MenuListener; - -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.standard.AbstractCommand; -import org.jhotdraw.util.Command; -import org.jhotdraw.util.CommandMenu; - -/** - * Menu component that handles the functionality expected of a standard - * "Windows" menu for MDI applications. - * - * @author Wolfram Kaiser (adapted from an article in JavaWorld) - * @version <$CURRENT_VERSION$> - */ -public class WindowMenu extends CommandMenu { - private MDIDesktopPane desktop; - private Command cascadeCommand; - private Command tileCommand; - - public WindowMenu(String newText, MDIDesktopPane newDesktop, DrawingEditor newEditor) { - super(newText); - this.desktop = newDesktop; - cascadeCommand = new AbstractCommand("Cascade", newEditor) { - public void execute() { - WindowMenu.this.desktop.cascadeFrames(); - } - public boolean isExecutable() { - return super.isExecutable() && (WindowMenu.this.desktop.getAllFrames().length > 0); - } - }; - tileCommand = new AbstractCommand("Tile", newEditor) { - public void execute() { - WindowMenu.this.desktop.tileFramesHorizontally(); - } - public boolean isExecutable() { - return super.isExecutable() && (WindowMenu.this.desktop.getAllFrames().length > 0); - } - }; - addMenuListener(new MenuListener() { - public void menuCanceled (MenuEvent e) {} - - public void menuDeselected (MenuEvent e) { - removeAll(); - } - - public void menuSelected (MenuEvent e) { - buildChildMenus(); - } - }); - } - - /* Sets up the children menus depending on the current desktop state */ - private void buildChildMenus() { - ChildMenuItem menu; - JInternalFrame[] array = desktop.getAllFrames(); - - add(new CommandMenuItem(cascadeCommand)); - add(new CommandMenuItem(tileCommand)); - if (array.length > 0) { - addSeparator(); - } -// cascade.setEnabled(array.length > 0); -// tile.setEnabled(array.length > 0); - - for (int i = 0; i < array.length; i++) { - menu = new ChildMenuItem(array[i]); - menu.setState(i == 0); - menu.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - JInternalFrame frame = ((ChildMenuItem)ae.getSource()).getFrame(); - frame.moveToFront(); - try { - frame.setSelected(true); - } - catch (PropertyVetoException e) { - e.printStackTrace(); - } - } - }); - menu.setIcon(array[i].getFrameIcon()); - add(menu); - } - } - - /* This JCheckBoxMenuItem descendant is used to track the child frame that corresponds - to a give menu. */ - class ChildMenuItem extends JCheckBoxMenuItem { - private JInternalFrame frame; - - public ChildMenuItem(JInternalFrame newFrame) { - super(newFrame.getTitle()); - frame=newFrame; - } - - public JInternalFrame getFrame() { - return frame; - } - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDFigures.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDFigures.java deleted file mode 100644 index bd933114e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDFigures.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @(#)DNDFigures.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.dnd; - -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.standard.FigureEnumerator; -import org.jhotdraw.util.CollectionsFactory; - -import java.awt.Point; -import java.util.List; - -/** - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DNDFigures implements java.io.Serializable { - private List figures; - private Point origin; - - public DNDFigures(FigureEnumeration fe, Point newOrigin) { - this.figures = CollectionsFactory.current().createList(); - // copy figure enumeration because enumerations should not be fields - //the drop operation will serialize and deseralize which I believe is a form of copy!? - while (fe.hasNextFigure()) { - figures.add(fe.nextFigure()); - } - origin = newOrigin; - } - - public FigureEnumeration getFigures() { - return new FigureEnumerator(figures); - } - - public Point getOrigin() { - return origin; - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDFiguresTransferable.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDFiguresTransferable.java deleted file mode 100644 index 4438dd3a1..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDFiguresTransferable.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @(#)DNDFiguresTransferable.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.dnd; - -import java.awt.datatransfer.*; -import java.io.*; - -/** - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DNDFiguresTransferable implements Transferable , Serializable { - public static DataFlavor DNDFiguresFlavor = new DataFlavor(DNDFigures.class,"DNDFigures"); - private Object o; - - public DNDFiguresTransferable(Object newObject) { - //if object is not serializable throw exception - o = newObject; - } - public DataFlavor[] getTransferDataFlavors() { - return new DataFlavor [] {DNDFiguresFlavor }; - } - - public boolean isDataFlavorSupported(DataFlavor flavor) { - return flavor.equals(DNDFiguresFlavor); - } - - public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { - if ( isDataFlavorSupported(flavor) == false) { - throw new UnsupportedFlavorException( flavor ); - } - return o; - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDHelper.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDHelper.java deleted file mode 100644 index cccd62314..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDHelper.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * @(#)DNDHelper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.dnd; - -import org.jhotdraw.framework.*; - -import java.awt.Component; -import java.awt.datatransfer.DataFlavor; -import java.awt.datatransfer.UnsupportedFlavorException; -import java.awt.datatransfer.Transferable; -import java.awt.dnd.*; -import java.io.*; -import java.util.List; - -/** - * Changes made in hopes of eventually cleaning up the functionality and - * distributing it sensibly. 1/10/02 - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public abstract class DNDHelper { - public static DataFlavor ASCIIFlavor = new DataFlavor("text/plain; charset=ascii", "ASCII text"); - private DragGestureRecognizer dgr; - private DragGestureListener dragGestureListener; - private DropTarget dropTarget; - private DragSourceListener dragSourceListener; - private DropTargetListener dropTargetListener; - private boolean isDragSource = false; - private boolean isDropTarget = false; - - public DNDHelper(boolean newIsDragSource, boolean newIsDropTarget){ - isDragSource = newIsDragSource; - isDropTarget = newIsDropTarget; - } - /** - * Do not call this from the constructor. its methods are overridable. - */ - public void initialize(DragGestureListener dgl) { - if (isDragSource) { - setDragGestureListener(dgl); - setDragSourceListener(createDragSourceListener()); - setDragGestureRecognizer(createDragGestureRecognizer(getDragGestureListener())); - } - if (isDropTarget) { - setDropTargetListener(createDropTargetListener()); - setDropTarget(createDropTarget()); - } - } - - public void deinitialize(){ - if (getDragSourceListener() != null) { - destroyDragGestreRecognizer(); - setDragSourceListener(null); - } - if (getDropTargetListener() != null) { - setDropTarget(null); - setDropTargetListener(null); - } - } -// public void setDragSourceState(boolean state) { -// if(state == false){ -// getDragGestureRecognizer().setSourceActions(DnDConstants.ACTION_NONE); -// } -// else { -// getDragGestureRecognizer().setSourceActions(getDragSourceActions()); -// } -// } - protected abstract DrawingView view(); - protected abstract DrawingEditor editor(); - - protected static Object processReceivedData(DataFlavor flavor, Transferable transferable) { - Object receivedData = null; - if (transferable == null) { - return null; - } - - try { - if (flavor.equals(DataFlavor.stringFlavor)) { - receivedData = transferable.getTransferData(DataFlavor.stringFlavor); - } - else if (flavor.equals(DataFlavor.javaFileListFlavor)) { - List aList = (List)transferable.getTransferData(DataFlavor.javaFileListFlavor); - File fList [] = new File[aList.size()]; - aList.toArray(fList); - receivedData = fList; - } - else if (flavor.equals(ASCIIFlavor)) { - /* this may be too much work for locally received data */ - InputStream is = (InputStream)transferable.getTransferData(ASCIIFlavor); - int length = is.available(); - byte[] bytes = new byte[length]; - int n = is.read(bytes); - if (n > 0) { - /* seems to be a 0 tacked on the end of Windows strings. I - * havent checked other platforms. This does not happen - * with windows socket io. strange? - */ - //for (int i = 0; i < length; i++) { - // if (bytes[i] == 0) { - // length = i; - // break; - // } - //} - receivedData = new String(bytes, 0, n); - } - } - else if (flavor.equals(DNDFiguresTransferable.DNDFiguresFlavor)) { - receivedData = transferable.getTransferData(DNDFiguresTransferable.DNDFiguresFlavor); - } - } - catch (java.io.IOException ioe) { - System.err.println(ioe); - } - catch (UnsupportedFlavorException ufe) { - System.err.println(ufe); - } - catch (ClassCastException cce) { - System.err.println(cce); - } - - return receivedData; - } - - /** - * This must reflect the capabilities of the dragSsource, not your desired - * actions. If you desire limited drag actions, then I suppose you need to - * make a new drag gesture recognizer? I do know that if you put for instance - * ACTION_COPY but your device supports ACTION_COPY_OR_MOVE, then the receiving - * target may show the rejected icon, but will still be forced improperly to - * accept your MOVE since the system is not properly calling your MOVE a MOVE - * because you claimed incorrectly that you were incapable of MOVE. - */ - protected int getDragSourceActions() { - return DnDConstants.ACTION_COPY_OR_MOVE; - } - - protected int getDropTargetActions(){ - return DnDConstants.ACTION_COPY_OR_MOVE; - } - - protected void setDragGestureListener(DragGestureListener dragGestureListener){ - this.dragGestureListener = dragGestureListener; - } - - protected DragGestureListener getDragGestureListener(){ - return dragGestureListener; - } - - protected void setDragGestureRecognizer(DragGestureRecognizer dragGestureRecognizer){ - dgr = dragGestureRecognizer; - } - - protected DragGestureRecognizer getDragGestureRecognizer(){ - return dgr; - } - - protected void setDropTarget(DropTarget newDropTarget){ - if ((newDropTarget == null) && (dropTarget != null)) { - dropTarget.setComponent(null); - dropTarget.removeDropTargetListener(getDropTargetListener()); - } - dropTarget = newDropTarget; - } - - protected DropTarget createDropTarget() { - DropTarget dt = null; - if (Component.class.isInstance(view())) { - try { - dt = new DropTarget((Component)view(), getDropTargetActions(), getDropTargetListener()); - //System.out.println(view().toString() + " Initialized to DND."); - } - catch (NullPointerException npe) { - System.err.println("View Failed to initialize to DND."); - System.err.println("Container likely did not have peer before the DropTarget was added"); - System.err.println(npe); - npe.printStackTrace(); - } - } - return dt; - } - - /** - * Used to create the gesture recognizer which in effect turns on draggability. - */ - protected DragGestureRecognizer createDragGestureRecognizer(DragGestureListener dgl) { - DragGestureRecognizer aDgr = null; - if (Component.class.isInstance(view())) { - Component c = (Component)view(); - aDgr = java.awt.dnd.DragSource.getDefaultDragSource().createDefaultDragGestureRecognizer( - c, - getDragSourceActions(), - dgl); - //System.out.println("DragGestureRecognizer created: " + view()); - } - return aDgr; - } - - /** - * Used to destroy the gesture listener which ineffect turns off dragability. - */ - protected void destroyDragGestreRecognizer() { - //System.out.println("Destroying DGR " + view()); - if (getDragGestureRecognizer() != null) { - getDragGestureRecognizer().removeDragGestureListener(getDragGestureListener()); - getDragGestureRecognizer().setComponent(null); - setDragGestureRecognizer(null); - } - } - - protected void setDropTargetListener(DropTargetListener dropTargetListener){ - this.dropTargetListener = dropTargetListener; - } - - protected DropTargetListener getDropTargetListener(){ - return dropTargetListener; - } - - protected DropTargetListener createDropTargetListener(){ - return new JHDDropTargetListener(editor(),view()); - } - - public DragSourceListener getDragSourceListener(){ - return dragSourceListener; - } - - protected void setDragSourceListener(DragSourceListener dragSourceListener){ - this.dragSourceListener = dragSourceListener; - } - - protected DragSourceListener createDragSourceListener(){ - return new JHDDragSourceListener(editor(),view()); - } -} - /** - * These transferable objects are used to package your data when you want - * to initiate a transfer. They are not used when you only want to receive - * data. Formating the data is the responsibility of the sender primarily. - * Untested. Used for dragging ASCII text out of JHotDraw - */ -/* public class ASCIIText implements Transferable - { - String s = new String("This is ASCII text"); - byte[] bytes; - - public DataFlavor[] getTransferDataFlavors() { - return new DataFlavor[] { ASCIIFlavor }; - } - - public boolean isDataFlavorSupported(DataFlavor dataFlavor) { - return dataFlavor.equals(ASCIIFlavor); - } - - public Object getTransferData(DataFlavor dataFlavor) - throws UnsupportedFlavorException, IOException { - if (!isDataFlavorSupported(dataFlavor)) - throw new UnsupportedFlavorException(dataFlavor); - - bytes = new byte[s.length() + 1]; - for (int i = 0; i < s.length(); i++) - bytes = s.getBytes(); - bytes[s.length()] = 0; - return new ByteArrayInputStream(bytes); - } - }*/ \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDInterface.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDInterface.java deleted file mode 100644 index 4a806c722..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DNDInterface.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)DNDInterface.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.dnd; - -import java.awt.dnd.DragGestureListener; -import java.awt.dnd.DragSourceListener; - -/** - * Interface for Components which wish to participate in drag and drop. - * - * A Component which wishes to participate in drag and drop should implement - * this interface. Once done the DragBDropTool will be able to transfer data - * to and from the Component. The Component will also be activated to receive - * drops from extra-JVM sources according to the conditions the Component - * specifies. - * - * @author CL.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface DNDInterface { - public void DNDInitialize(DragGestureListener dgl); - public void DNDDeinitialize(); - - /** - * When the DNDTool starts a drag action, it queries the interface for the - * dragSourceListener of the source view. It uses this listener to create - * the dragGestureEvent. - */ - public DragSourceListener getDragSourceListener(); -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DragNDropTool.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DragNDropTool.java deleted file mode 100644 index d77d290bf..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/DragNDropTool.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - * @(#)DragNDropTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.dnd; - -import java.awt.Component; -import java.awt.Point; -import java.awt.dnd.DragGestureListener; -import java.awt.event.MouseEvent; - -import javax.swing.JComponent; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; - -/** - * This is a tool which handles drag and drop between Components in - * JHotDraw and drags from JHotDraw. It also indirectly - * handles management of Drops from extra-JVM sources. - * - * - * Drag and Drop is about information moving, not images or objects. Its about - * moving a JHD rectangle to another application and that application understanding - * both its shape, color, attributes, and everything about it. not how it looks. - * - * There can be only 1 such tool in an application. A view can be registered - * with only a single DropSource as far as I know (maybe not). - * - * @todo For intra JVM transfers we need to pass Point origin as well, and not - * assume it will be valid which currently will cause a null pointer exception. - * or worse, will be valid with some local value. - * The dropSource will prevent simultaneous drops. - * - * For a Container to be initialized to support Drag and Drop, it must first - * have a connection to a heavyweight component. Or more precisely it must have - * a peer. That means new Component() is not capable of being initiated until - * it has attachment to a top level component i.e. JFrame.add(comp); If you add - * a Component to a Container, that Container must be the child of some - * Container which is added in its heirachy to a topmost Component. I will - * refine this description with more appropriate terms as I think of new ways to - * express this. It won't work until setVisible(true) is called. then you can - * initialize DND. - * - * note: if drop target is same as dragsource then we should draw the object. - * - * - * @author C.L.Gilbert <dnoyeb@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DragNDropTool extends AbstractTool { - - private Tool fChild; - private DragGestureListener dragGestureListener; - private boolean dragOn; - - public DragNDropTool(DrawingEditor editor) { - super(editor); - setDragGestureListener(createDragGestureListener()); - dragOn = false; - } - - /** - * Sent when a new view is created - */ - protected void viewCreated(DrawingView view) { - super.viewCreated(view); - if (DNDInterface.class.isInstance(view)) { - DNDInterface dndi = (DNDInterface)view; - dndi.DNDInitialize( getDragGestureListener() ); - } - } - - /** - * Send when an existing view is about to be destroyed. - */ - protected void viewDestroying(DrawingView view) { - if (DNDInterface.class.isInstance(view)) { - DNDInterface dndi = (DNDInterface)view; - dndi.DNDDeinitialize(); - } - super.viewDestroying(view); - } - - /** - * Turn on drag by adding a DragGestureRegognizer to all Views which are - * based on Components. - */ - public void activate() { - super.activate(); -// setDragSourceActive(true); - //System.out.println("DNDTool Activation"); - setDragOn(true); - } - - public void deactivate() { - //System.out.println("DNDTool deactivation."); - setDragOn(false); -// setDragSourceActive(false);//if its not turned off other tools will have problems since drag will start - super.deactivate(); - } - -// private void setDragSourceActive(boolean newState) { -// Iterator it = comps.iterator(); -// while (it.hasNext()) { -// DNDInterface dndi = (DNDInterface)it.next(); -// dndi.setDragSourceState(newState); -// } -// } - - /** - * Sets the type of cursor based on what is under the coordinates in the - * active view. - */ - public static void setCursor(int x, int y, DrawingView view) { - if (view == null) { //shouldnt need this - return; - } - Handle handle = view.findHandle(x, y); - Figure figure = view.drawing().findFigure(x, y); - - if (handle != null) { - view.setCursor(handle.getCursor()); - } - else if (figure != null) { - view.setCursor(new AWTCursor(java.awt.Cursor.MOVE_CURSOR)); - } - else { - view.setCursor(new AWTCursor(java.awt.Cursor.DEFAULT_CURSOR)); - } - } - - /** - * Handles mouse moves (if the mouse button is up). - * Switches the cursors depending on whats under them. - * Don't use x, y use getX and getY so get the real unlimited position - * Part of the Tool interface. - */ - public void mouseMove(MouseEvent evt, int x, int y) { - if (evt.getSource() == getActiveView()) { - setCursor(x, y, getActiveView()); - } - } - - /** - * Handles mouse up events. The events are forwarded to the - * current tracker. - * Part of the Tool interface. - */ - public void mouseUp(MouseEvent e, int x, int y) { - if (fChild != null) { // JDK1.1 doesn't guarantee mouseDown, mouseDrag, mouseUp - fChild.mouseUp(e, x, y); - fChild = null; - } - setDragOn(true); - view().unfreezeView(); - //get undo actions and push into undo stack? - } - - /** - * Handles mouse down events and starts the corresponding tracker. - * Part of the Tool interface. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - // on MS-Windows NT: AWT generates additional mouse down events - // when the left button is down && right button is clicked. - // To avoid dead locks we ignore such events - if (fChild != null) { - return; - } - - view().freezeView(); - - Handle handle = view().findHandle(getAnchorX(), getAnchorY()); - if (handle != null) { - //Turn off DND - setDragOn(false); - fChild = createHandleTracker(handle); - } - else { - Figure figure = drawing().findFigure(getAnchorX(), getAnchorY()); - if (figure != null) { - //fChild = createDragTracker(editor(), figure); - //fChild.activate(); - fChild = null; - if (e.isShiftDown()) { - view().toggleSelection(figure); - } - else if (!view().isFigureSelected(figure)) { - view().clearSelection(); - view().addToSelection(figure); - } - } - else { - //Turn off DND - setDragOn(false); - if (!e.isShiftDown()) { - view().clearSelection(); - } - fChild = createAreaTracker(); - } - } - if (fChild != null) { - fChild.mouseDown(e, x, y); - } - } - - /** - * Handles mouse drag events. The events are forwarded to the - * current tracker. - * Part of the Tool interface. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - if (fChild != null) { // JDK1.1 doesn't guarantee mouseDown, mouseDrag, mouseUp - fChild.mouseDrag(e, x, y); - } - } - - /** - * Factory method to create an area tracker. It is used to select an - * area. - */ - protected Tool createAreaTracker() { - return new SelectAreaTracker(editor()); - } - - /** - * Factory method to create a Drag tracker. It is used to drag a figure. - */ - protected Tool createDragTracker(DrawingEditor editor, Figure f) { - return new DragTracker(editor, f); - } - - /** - * Factory method to create a Handle tracker. It is used to track a handle. - */ - protected Tool createHandleTracker(Handle handle) { - return new HandleTracker(editor(), handle); - } - - private DragGestureListener getDragGestureListener(){ - return dragGestureListener; - } - - private void setDragGestureListener(DragGestureListener dragGestureListener){ - this.dragGestureListener = dragGestureListener; - } - - protected boolean isDragOn(){ - return dragOn; - } - - protected void setDragOn(boolean isNewDragOn){ - this.dragOn = isNewDragOn; - } - - private DragGestureListener createDragGestureListener() { - - return new DragGestureListener() { - - public void dragGestureRecognized(final java.awt.dnd.DragGestureEvent dge) { - Component c = dge.getComponent(); - //System.out.println("Drag Gesture Recognized for " + c); - if (isDragOn() == false) { - return; - } - - if (c instanceof DrawingView) { - boolean found = false; - DrawingView dv = (DrawingView)c; - /* Send the drawing view which inspired the action a mouseUp to clean - up its current tool. This is because mouse up will otherwise never - be sent and the tool will be stuck with only mouse down which means - it will likely stay activated. solve later for now just make - but report. */ - /* this is a list of cloned figures */ - FigureEnumeration selectedElements = dv.selection(); - - if (selectedElements.hasNextFigure() == false) { - return; - } - - Point p = dge.getDragOrigin(); - // System.out.println("origin at " + p); - while (selectedElements.hasNextFigure()) { - Figure f = selectedElements.nextFigure(); - if (f.containsPoint(p.x, p.y)) { - /* Rectangle r = figgy.displayBox(); - sx = r.width; - sy = r.height;*/ - //System.out.println("figure is " + figgy); - found = true; - break; - } - } - if (found == true) { - DNDFigures dndff = new DNDFigures(dv.selection(), p); - DNDFiguresTransferable trans = new DNDFiguresTransferable(dndff); - - /* SAVE FOR FUTURE DRAG IMAGE SUPPORT */ - /* drag image support that I need to test on some supporting platform. - windows is not supporting this on NT so far. Ill test 98 and 2K next - - boolean support = dragSource.isDragImageSupported(); - java.awt.image.BufferedImage bi = new BufferedImage(sx,sy,BufferedImage.TYPE_INT_RGB); - Graphics2D g = bi.createGraphics(); - Iterator itr2 = selectedElements.iterator(); - while ( itr2.hasNext() ) { - Figure fig = (Figure) itr2.next(); - fig = (Figure)fig.clone(); - Rectangle rold = fig.displayBox(); - fig.moveBy(-rold.x,-rold.y); - fig.draw(g); - } - g.setBackground(Color.red); - dge.getDragSource().startDrag( - dge, - DragSource.DefaultMoveDrop, - bi, - new Point(0,0), - trans, - this); - */ - if (c instanceof JComponent) { - ((JComponent)c).setAutoscrolls(false); - } - dge.getDragSource().startDrag( - dge, - null, - trans, - ((DNDInterface)dv).getDragSourceListener()); - } - } - } - }; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/JHDDragSourceListener.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/JHDDragSourceListener.java deleted file mode 100644 index 01e99eaa3..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/JHDDragSourceListener.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * JHDDragSource.java - * - * Created on January 28, 2003, 4:49 PM - */ - -package org.jhotdraw.contrib.dnd; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.DeleteFromDrawingVisitor; -import org.jhotdraw.util.Undoable; -import java.awt.Component; -import java.awt.dnd.*; -import javax.swing.JComponent; - -/** - * - * @author Administrator - */ -public class JHDDragSourceListener implements java.awt.dnd.DragSourceListener { - private Undoable sourceUndoable; - private Boolean autoscrollState; - private DrawingEditor editor; - - /** Creates a new instance of JHDDragSource */ - public JHDDragSourceListener(DrawingEditor newEditor, DrawingView newView) { - this.editor = newEditor; - } -// protected DrawingView view(){ -// return dv; -// } - protected DrawingEditor editor(){ - return editor; - } - /** - * This method is invoked to signify that the Drag and Drop operation is complete. - * This is the last method called in the process. - */ - public void dragDropEnd(java.awt.dnd.DragSourceDropEvent dsde) { - DrawingView view = (DrawingView) dsde.getDragSourceContext().getComponent(); - log("DragSourceDropEvent-dragDropEnd"); - if (dsde.getDropSuccess() == true) { - if (dsde.getDropAction() == DnDConstants.ACTION_MOVE) { - log("DragSourceDropEvent-ACTION_MOVE"); - //get the flavor in order of ease of use here. - setSourceUndoActivity( createSourceUndoActivity( view ) ); - DNDFigures df = (DNDFigures)DNDHelper.processReceivedData(DNDFiguresTransferable.DNDFiguresFlavor, dsde.getDragSourceContext().getTransferable()); - getSourceUndoActivity().setAffectedFigures( df.getFigures() ); - - //all this visitation needs to be hidden in a view method. - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor(view.drawing()); - FigureEnumeration fe = getSourceUndoActivity().getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().visit(deleteVisitor); - } - view.clearSelection(); - view.checkDamage(); - - editor().getUndoManager().pushUndo( getSourceUndoActivity() ); - editor().getUndoManager().clearRedos(); - // update menus - editor().figureSelectionChanged( view ); - } - else if (dsde.getDropAction() == DnDConstants.ACTION_COPY) { - log("DragSourceDropEvent-ACTION_COPY"); - } - } - - if (autoscrollState != null) { - Component c = dsde.getDragSourceContext().getComponent(); - if (JComponent.class.isInstance( c )) { - JComponent jc = (JComponent)c; - jc.setAutoscrolls(autoscrollState.booleanValue()); - autoscrollState= null; - } - } - } - /** - * Called as the hotspot enters a platform dependent drop site. - */ - public void dragEnter(DragSourceDragEvent dsde) { - log("DragSourceDragEvent-dragEnter"); - if (autoscrollState == null) { - Component c = dsde.getDragSourceContext().getComponent(); - if (JComponent.class.isInstance( c )) { - JComponent jc = (JComponent)c; - autoscrollState= new Boolean(jc.getAutoscrolls()); - jc.setAutoscrolls(false);//why turn it off??? - } - } - } - /** - * Called as the hotspot exits a platform dependent drop site. - */ - public void dragExit(java.awt.dnd.DragSourceEvent dse) { - } - /** - * Called as the hotspot moves over a platform dependent drop site. - */ - public void dragOver(DragSourceDragEvent dsde) { - //log("DragSourceDragEvent-dragOver"); - } - /** - * Called when the user has modified the drop gesture. - */ - public void dropActionChanged(DragSourceDragEvent dsde) { - log("DragSourceDragEvent-dropActionChanged"); - } - - - - - - - - - - - - /** - * Factory method for undo activity - */ - protected Undoable createSourceUndoActivity(DrawingView drawingView) { - return new RemoveUndoActivity( drawingView ); - } - protected void setSourceUndoActivity(Undoable undoable){ - sourceUndoable = undoable; - } - protected Undoable getSourceUndoActivity(){ - return sourceUndoable; - } - public static class RemoveUndoActivity extends org.jhotdraw.util.UndoableAdapter { - private boolean undone = false; - public RemoveUndoActivity(DrawingView view) { - super( view ); - log("RemoveUndoActivity created " + view); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (isUndoable()) { - if(getAffectedFigures().hasNextFigure()) { - log("RemoveUndoActivity undo"); - getDrawingView().clearSelection(); - setAffectedFigures( getDrawingView().insertFigures(getAffectedFigures(), 0, 0,false)); - undone = true; - return true; - } - } - return false; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - log("RemoveUndoActivity redo"); - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor( getDrawingView().drawing()); - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().visit(deleteVisitor); //orphans figures - } - getDrawingView().clearSelection(); - setAffectedFigures( deleteVisitor.getDeletedFigures() ); - undone = false; - return true; - } - return false; - } - /** - * Since this is a delete activity, figures can only be released if the - * action has not been undone. - */ - public void release() { - if(undone == false){//we have figures that used to be in the drawing, but were not adding back - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - getDrawingView().drawing().remove(f); - f.release(); - } - } - setAffectedFigures(org.jhotdraw.standard.FigureEnumerator.getEmptyEnumeration()); - } - } - - - - - - - - private static void log(String message){ - //System.out.println("JHDDragSourceListener: " + message); - } - - - - - - - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/JHDDropTargetListener.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/JHDDropTargetListener.java deleted file mode 100644 index 2421edd87..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/dnd/JHDDropTargetListener.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * JHDDropTargetListener.java - * - * Created on January 28, 2003, 4:23 PM - */ - -package org.jhotdraw.contrib.dnd; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.DeleteFromDrawingVisitor; -import java.io.File; -import org.jhotdraw.util.Undoable; -import java.awt.Point; -import java.awt.datatransfer.DataFlavor; -import java.awt.dnd.*; - - -/** - * - * @author Administrator - */ -public class JHDDropTargetListener implements java.awt.dnd.DropTargetListener { - private int fLastX=0, fLastY=0; // previous mouse position - private Undoable targetUndoable; - private DrawingView dv; - private DrawingEditor editor; - /** Creates a new instance of JHDDropTargetListener */ - public JHDDropTargetListener(DrawingEditor drawingEditor, DrawingView drawingView) { - dv = drawingView; - editor = drawingEditor; - } - protected DrawingView view(){ - return dv; - } - protected DrawingEditor editor(){ - return editor; - } - - - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - - /** - * Called when a drag operation has encountered the DropTarget. - */ - public void dragEnter(DropTargetDragEvent dtde) { - log("DropTargetDragEvent-dragEnter"); - supportDropTargetDragEvent(dtde); - if (fLastX == 0) { - fLastX = dtde.getLocation().x; - } - if (fLastY == 0) { - fLastY = dtde.getLocation().y; - } - } - - /** - * The drag operation has departed the DropTarget without dropping. - */ - public void dragExit(java.awt.dnd.DropTargetEvent dte) { - log("DropTargetEvent-dragExit"); - } - - /** - * Called when a drag operation is ongoing on the DropTarget. - */ - public void dragOver(DropTargetDragEvent dtde) { - //log("DropTargetDragEvent-dragOver"); - if (supportDropTargetDragEvent(dtde)==true) { - int x=dtde.getLocation().x; - int y=dtde.getLocation().y; - if ((Math.abs(x - fLastX) > 0) || (Math.abs(y - fLastY) > 0) ) { - //FigureEnumeration fe = view().selectionElements(); - //while (fe.hasNextFigure()) { - // fe.nextFigure().moveBy(x - fLastX, y - fLastY); - // System.out.println("moving Figures " + view()); - //} - //view().drawing().update(); - fLastX = x; - fLastY = y; - } - } - } - - /** - * The drag operation has terminated with a drop on this DropTarget. - * Be nice to somehow incorporate FigureTransferCommand here. - */ - public void drop(java.awt.dnd.DropTargetDropEvent dtde) { - System.out.println("DropTargetDropEvent-drop"); - - if (dtde.isDataFlavorSupported(DNDFiguresTransferable.DNDFiguresFlavor) == true) { - log("DNDFiguresFlavor"); - if ((dtde.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0 ) { - log("copy or move"); - if (dtde.isLocalTransfer() == false) { - System.err.println("Intra-JVM Transfers not implemented for figures yet."); - dtde.rejectDrop(); - return; - } - dtde.acceptDrop(dtde.getDropAction()); - try { /* protection from a malicious dropped object */ - setTargetUndoActivity( createTargetUndoActivity( view() ) ); - DNDFigures ff = (DNDFigures)DNDHelper.processReceivedData(DNDFiguresTransferable.DNDFiguresFlavor, dtde.getTransferable()); - getTargetUndoActivity().setAffectedFigures( ff.getFigures() ); - Point theO = ff.getOrigin(); - view().clearSelection(); - Point newP = dtde.getLocation(); - /** origin is where the figure thinks it is now - * newP is where the mouse is now. - * we move the figure to where the mouse is with this equation - */ - int dx = newP.x - theO.x; /* distance the mouse has moved */ - int dy = newP.y - theO.y; /* distance the mouse has moved */ - log("mouse at " + newP); - FigureEnumeration fe = view().insertFigures( getTargetUndoActivity().getAffectedFigures() , dx, dy, false ); - getTargetUndoActivity().setAffectedFigures( fe ); - - if (dtde.getDropAction() == DnDConstants.ACTION_MOVE) { - view().addToSelectionAll( getTargetUndoActivity().getAffectedFigures() ); - } - - view().checkDamage(); - editor().getUndoManager().pushUndo( getTargetUndoActivity() ); - editor().getUndoManager().clearRedos(); - // update menus - editor().figureSelectionChanged( view() ); - dtde.dropComplete(true); - } - catch (NullPointerException npe) { - npe.printStackTrace(); - dtde.dropComplete(false); - } - } - else { - dtde.rejectDrop(); - } - } - else if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor)) { - log("String flavor dropped."); - dtde.acceptDrop(dtde.getDropAction()); - Object o = DNDHelper.processReceivedData(DataFlavor.stringFlavor, dtde.getTransferable()); - if (o != null) { - log("Received string flavored data."); - dtde.getDropTargetContext().dropComplete(true); - } - else { - dtde.getDropTargetContext().dropComplete(false); - } - } - else if (dtde.isDataFlavorSupported(DNDHelper.ASCIIFlavor) == true) { - log("ASCII Flavor dropped."); - dtde.acceptDrop(DnDConstants.ACTION_COPY); - Object o = DNDHelper.processReceivedData(DNDHelper.ASCIIFlavor, dtde.getTransferable()); - if (o!= null) { - log("Received ASCII Flavored data."); - dtde.getDropTargetContext().dropComplete(true); - //System.out.println(o); - } - else { - dtde.getDropTargetContext().dropComplete(false); - } - } - else if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { - log("Java File List Flavor dropped."); - dtde.acceptDrop(DnDConstants.ACTION_COPY); - File [] fList = (File[]) DNDHelper.processReceivedData(DataFlavor.javaFileListFlavor, dtde.getTransferable()); - if (fList != null) { - log("Got list of files."); - for (int x=0; x< fList.length; x++ ) { - System.out.println(fList[x].getAbsolutePath()); - } - dtde.getDropTargetContext().dropComplete(true); - } - else { - dtde.getDropTargetContext().dropComplete(false); - } - } - fLastX = 0; - fLastY = 0; - } - - /** - * Called if the user has modified the current drop gesture. - */ - public void dropActionChanged(DropTargetDragEvent dtde) { - log("DropTargetDragEvent-dropActionChanged"); - supportDropTargetDragEvent(dtde); - } - - - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - - /** - * Tests wether the Drag event is of a type that we support handling - * Check the DND interface and support the events it says it supports - * if not a dnd interface comp, then dont support! because we dont even - * really know what kind of view it is. - */ - protected boolean supportDropTargetDragEvent(DropTargetDragEvent dtde) { - if (dtde.isDataFlavorSupported(DNDFiguresTransferable.DNDFiguresFlavor) == true) { - if ((dtde.getDropAction() & DnDConstants.ACTION_COPY_OR_MOVE) != 0) { - dtde.acceptDrag(dtde.getDropAction()); - return true; - } - else { - dtde.rejectDrag(); - return false; - } - } - else if (dtde.isDataFlavorSupported(DNDHelper.ASCIIFlavor) == true) { - dtde.acceptDrag(dtde.getDropAction());//accept everything because i am too lazy to fix yet - return true; - } - else if (dtde.isDataFlavorSupported(DataFlavor.stringFlavor) == true) { - dtde.acceptDrag(dtde.getDropAction());//accept everything because i am too lazy to fix yet - return true; - } - else if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor) == true) { - dtde.acceptDrag(dtde.getDropAction());//accept everything because i am too lazy to fix yet - return true; - } - else { - dtde.rejectDrag(); - return false; - } - } -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// - - /** - * Factory method for undo activity - */ - protected Undoable createTargetUndoActivity(DrawingView view) { - return new AddUndoActivity( view ); - } - protected void setTargetUndoActivity(Undoable undoable){ - targetUndoable = undoable; - } - protected Undoable getTargetUndoActivity(){ - return targetUndoable; - } - public static class AddUndoActivity extends org.jhotdraw.util.UndoableAdapter { - private boolean undone=false; - public AddUndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - log("AddUndoActivity created " + newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - //undo of add really shouldnt need visitor !?!dnoyeb!?! - log("AddUndoActivity AddUndoActivity undo"); - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor(getDrawingView().drawing()); - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - org.jhotdraw.framework.Figure f = fe.nextFigure(); - f.visit(deleteVisitor); - } - setAffectedFigures( deleteVisitor.getDeletedFigures() ); - getDrawingView().clearSelection(); - undone = true; - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - log("AddUndoActivity redo"); - getDrawingView().clearSelection(); - setAffectedFigures(getDrawingView().insertFigures( - getAffectedFigures(), 0, 0, false)); - undone = false; - return true; - } - /** - * Since this is an add operation, figures can only be released if it - * has been undone. - */ - public void release() { - if(undone == true){ - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - getDrawingView().drawing().remove(f); - f.release(); - } - } - setAffectedFigures(org.jhotdraw.standard.FigureEnumerator.getEmptyEnumeration()); - } - } - private static void log(String message){ - //System.out.println("JHDDropTargetListener: " + message); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AbstractContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AbstractContentProducer.java deleted file mode 100644 index 6dfb3b170..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AbstractContentProducer.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)AbstractContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.io.IOException; -import java.io.Serializable; - -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * Base class for the ContentProducers hierarchy<br> - * Doesn't do a thing now, but we may need this one later to add - * generic behaviour. - * - * @author Eduardo Francos - InContext - * @created 7 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractContentProducer implements ContentProducer, Serializable { - - final static long serialVersionUID = -2715253447095419531L; - - /** - * Constructor for the AbstractContentProducer object - */ - public AbstractContentProducer() { } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AttributeContentProducerContext.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AttributeContentProducerContext.java deleted file mode 100644 index 15db70f76..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AttributeContentProducerContext.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * @(#)AttributeContentProducerContext.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -/** - * AttributeContentProducerContext defines the interface required of clients - * requesting contents from AttributeFigures oriented ContentProducers.<br> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public interface AttributeContentProducerContext extends FigureContentProducerContext { - - /** - * Gets an attribute from the ContentProducerContext object - * - * @param name the name of the attribute - * @return The attribute value - */ - public Object getAttribute(String name); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AttributeFigureContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AttributeFigureContentProducer.java deleted file mode 100644 index 0e5006991..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/AttributeFigureContentProducer.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * @(#)AttributeFigureContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.io.Serializable; -import org.jhotdraw.util.StorableOutput; -import org.jhotdraw.util.StorableInput; -import java.io.IOException; - -/** - * AttributeFigureContentProducer provides content for AttributeFigures.<br> - * It gives priority to base class supplied values, and if none, then it - * gets the value from the supplied AttributeContentProducerContext. - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class AttributeFigureContentProducer extends FigureDataContentProducer - implements Serializable { - - /**Constructor for the AttributeFigureContentProducer object */ - public AttributeFigureContentProducer() { } - - /** - * Produces the contents for the attribute - * - * @param context the calling client context - * @param ctxAttrName the attribute name - * @param ctxAttrValue the attribute value that led to the call to this - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - // first chance to basic values - Object attrValue = super.getContent(context, ctxAttrName, ctxAttrValue); - if (attrValue != null) { - return attrValue; - } - - // no, return value from attributes - return ((AttributeContentProducerContext)context).getAttribute(ctxAttrName); - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ColorContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ColorContentProducer.java deleted file mode 100644 index 924ad754b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ColorContentProducer.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)ColorContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Color; -import java.io.IOException; -import java.io.Serializable; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * ColorContentProducer produces RGB color encoded hexadecimal strings.<br> - * Ex: - * <code>Color.blue ==> 0x0000FF</code><br> - * <code>Color.red ==> 0xFF00FF</code><br> - * It can either be specific if set for a specific color, or generic, encoding - * any color passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class ColorContentProducer extends FigureDataContentProducer - implements Serializable { - - private Color fColor = null; - - /**Constructor for the ColorContentProducer object */ - public ColorContentProducer() { } - - /** - * Constructor for the ColorContentProducer object - * - * @param color the specific color to use - */ - public ColorContentProducer(Color color) { - setColor(color); - } - - /** - * Produces the contents for the color - * - * @param context the calling client context - * @param ctxAttrName the color attribute name (FrameColor, TextColor, etc) - * @param ctxAttrValue the color - * @return The string RBG value for the color - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - // if we have our own color then use it - // otherwise use the one supplied - Color color = (getColor() != null) ? getColor() : (Color)ctxAttrValue; - String colorCode = Integer.toHexString(color.getRGB()); - return "0x" + colorCode.substring(colorCode.length() - 6); - } - - /** - * Sets the color attribute of the ColorContentProducer object - * - * @param color The new color value - */ - public void setColor(Color color) { - fColor = color; - } - - /** - * Gets the color attribute of the ColorContentProducer object - * - * @return The color value - */ - public Color getColor() { - return fColor; - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeBoolean((getColor() != null)); - if (getColor() != null) { - dw.writeInt(getColor().getRGB()); - } - } - - /** - * Reads the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - boolean hasColor = dr.readBoolean(); - if (hasColor) { - setColor(new Color(dr.readInt())); - } - else{ - setColor(null); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducer.java deleted file mode 100644 index c2f14c7b6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducer.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * @(#)ContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import org.jhotdraw.util.Storable; - -/** - * ContentProducer defines the interface for objects capable of producing - * contents on behalf of a client context.<br> - * Primarely based on the Strategy pattern, the purpose of ContentProducers - * is twofold:<br> - * <li> Detach the logic for producing generic content from interested parties so - * as to maximize reuse, of special interest for complex content</li> - * <li> Standardize contents by allowing for the automatic decentralization of - * contents source and production logic. Used together with the - * ContentProducerRegistry it is possible to globally modify the behaviour - * required for producing a specific type of contents. For example, - * a FieldContentProducer could be declined to get its contents from variables in - * an in-memory object, a setting from a configuration file, or even a field in - * a database record.</li> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - * @todo should entity names be merged with the attribute names defined - * in FigureAttributeConstant? - */ -public interface ContentProducer extends Storable { - - /** Entity name for the figure's current x position in pixels */ - public final static String ENTITY_FIGURE_POSX = "FigurePosX"; - - /** Entity name for the figure's current y position in pixels */ - public final static String ENTITY_FIGURE_POSY = "FigurePosY"; - - /** Entity name for the figure's current width in pixels */ - public final static String ENTITY_FIGURE_WIDTH = "FigureWidth"; - - /** Entity name for the figure's current height in pixels */ - public final static String ENTITY_FIGURE_HEIGHT = "FigureHeight"; - - /** Entity name for the figure's current text color */ - public final static String ENTITY_FRAME_COLOR = "FrameColor"; - - /** Entity name for the figure's current fill color */ - public final static String ENTITY_FILL_COLOR = "FillColor"; - - /** Entity name for the figure's current arrow mode */ - public final static String ENTITY_ARROW_MODE = "ArrowMode"; - - /** Entity name for the figure's current font name */ - public final static String ENTITY_FONT_NAME = "FontName"; - - /** Entity name for the figure's current font size */ - public final static String ENTITY_FONT_SIZE = "FontSize"; - - /** Entity name for the figure's current font style */ - public final static String ENTITY_FONT_STYLE = "FontStyle"; - - /** - * Produces the contents - * - * @param context the calling client context - * @param ctxAttrName the attribute name - * @param ctxAttrValue the attribute value that led to the call to this - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducerContext.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducerContext.java deleted file mode 100644 index 11e0519e5..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducerContext.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * @(#)ContentProducerContext.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -/** - * ContentProducerContext defines the base interface required of clients - * of ContentProducers.<br> - * ContentProducers may need to retrieve information from their calling client - * in order to fulfill the contents request - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public interface ContentProducerContext { -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducerRegistry.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducerRegistry.java deleted file mode 100644 index 5a5d6680b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ContentProducerRegistry.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * @(#)ContentProducerRegistry.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.io.IOException; -import java.io.Serializable; -import java.net.URL; - -import java.util.Hashtable; -import java.util.Iterator; -import java.util.Map; -import org.jhotdraw.util.Storable; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * ContentProducerRegistry acts as a repository for ContentProducers. It allows - * for registries to be organized in a hierarchy, so that a specific producer - * request will travel upwards in the hierarchy until eventually a suitable - * producer is found.<br> - * Producers are registered associated with the class of the object they are suitable - * to produce contents for, but ContentProducerRegistry allows for class hierarchy - * searches. What this means is that for two classes A and B, B being a subclass - * of A, if a producer is registered for class B it will be used, otherwise the - * producer registered for class A will be used instead. ContentProducerRegistry will - * always select the super class closest in the class hierarchy, so if several - * producers are registered for classes in a derivation hierarchy, the producer - * registered for the class closest to the requested class will be selected. - * - * @author Eduardo Francos - InContext - * @created 7 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class ContentProducerRegistry implements Serializable, Storable { - - /** producers registered with this registry */ - private Hashtable fContentProducers = new Hashtable(); - - /** parent registry for hierarchical searches */ - private transient ContentProducerRegistry fParent; - - /** Application global producers */ - private static ContentProducerRegistry fDefaultRegistry = - new ContentProducerRegistry(null); - - // initialize the application wide default content producers - static { - fDefaultRegistry.registerContentProducer(URL.class, new URLContentProducer()); - } - - /**Constructor for the ContentProducerRegistry object */ - public ContentProducerRegistry() { - setParent(fDefaultRegistry); - } - - /** - *Constructor for the ContentProducerRegistry object - * - * @param parent the parent for this producer - */ - public ContentProducerRegistry(ContentProducerRegistry parent) { - setParent(parent); - } - - /** - * Sets the autonomous attribute of the ContentProducerRegistry object. - * Similar to setting the parent to null<br> - * An autonomous registry does not have a parent hierarchy so resolution of - * search requests stop do not propagate. - * - * @see #setParent(ContentProducerRegistry) - */ - public void setAutonomous() { - setParent(null); - } - - /** - * Gets the autonomous status of the ContentProducerRegistry object - * - * @return The autonomous value - */ - public boolean isAutonomous() { - return (getParent() == null); - } - - /** - * Sets the parent attribute of the ContentProducerRegistry object - * - * @param newParent The new parent value - * @see #setAutonomous() - */ - public void setParent(ContentProducerRegistry newParent) { - fParent = newParent; - } - - /** - * Gets the parent attribute of the ContentProducerRegistry object - * - * @return The parent value - */ - public ContentProducerRegistry getParent() { - return fParent; - } - - /** - * Registers an application global producer - * - * @param producer the registered producer - * @param targetClass The class associated with the producer - * @return the previous producer registered for the target class - */ - public static ContentProducer registerDefaultContentProducer(Class targetClass, ContentProducer producer) { - return fDefaultRegistry.registerContentProducer(targetClass, producer); - } - - /** - * Unregisters ie: removes a registered producer for a target class.<br> - * A check is made to ensure the removed producer is the current producer - * for the target class. If not, the request is ignored. - * - * @param producer the producer to unregister - * @param targetClass the target class - */ - public static void unregisterDefaultContentProducer(Class targetClass, ContentProducer producer) { - fDefaultRegistry.unregisterContentProducer(targetClass, producer); - } - - /** - * Gets the ContentProducer attribute of the HTMLTextAreaFigure object - * - * @param targetClass the target class - * @return the previous producer registered for the target class - */ - public static ContentProducer getDefaultContentProducer(Class targetClass) { - return fDefaultRegistry.getContentProducer(targetClass); - } - - /** - * Gets the exact application global Producer for the target class, ie: - * no class hierarchy search - * - * @param targetClass the target class - * @return The producer - */ - public static ContentProducer getExactDefaultContentProducer(Class targetClass) { - return fDefaultRegistry.getExactContentProducer(targetClass); - } - - /** - * Registers a producer - * - * @param producer the producer to register - * @param targetClass the target class - * @return the previous producer registered for the target class - */ - public ContentProducer registerContentProducer(Class targetClass, ContentProducer producer) { - ContentProducer previousProducer = getContentProducer(targetClass); - fContentProducers.put(targetClass, producer); - return previousProducer; - } - - /** - * Unregisters a producer - * - * @param producer the producer to unregister - * @param targetClass the target class - */ - public void unregisterContentProducer(Class targetClass, ContentProducer producer) { - // first check that the producer being removed is the current producer - // for the target class - ContentProducer currentProducer = getContentProducer(targetClass); - if (currentProducer == producer) { - fContentProducers.remove(targetClass); - } - } - - /** - * Finds the most appropriate producer for the target class. Will search - * first for exact producers, ie: no class hierarchy search, then if none found, - * will do a class compatible search - * - * @param targetClass The target class - * @return The producer - */ - public ContentProducer getContentProducer(Class targetClass) { - // first try an exact producer - ContentProducer producer = getExactContentProducer(targetClass); - if (producer != null) { - return producer; - } - - // none defined, try finding one for the nearest super class - // of the target class. Note this shouldn't return null because there is - // a default producer defined for the Object class - return getSuperClassContentProducer(targetClass, null); - } - - /** - * Finds the exact producer for the target class, ie: no class hierarchy search - * - * @param targetClass The target class - * @return The producer - */ - public ContentProducer getExactContentProducer(Class targetClass) { - // first try our own - ContentProducer producer = (ContentProducer)fContentProducers.get(targetClass); - if (producer != null) { - return producer; - } - - // none defined, try our parent's - // unless we are autonomous (ie: we have no parent) - if (!this.isAutonomous()) { - return getParent().getExactContentProducer(targetClass); - } - - // none defined - return null; - } - - /** - * Gets the producers for the closest super class of the target class - * - * @param targetClass The target class - * @return The producer - */ - protected ContentProducer getSuperClassContentProducer(Class targetClass, Class closestClass) { - Map.Entry entry = null; - Class entryClass = null; - ContentProducer closestProducer = null; - - Iterator iter = fContentProducers.entrySet().iterator(); - while (iter.hasNext()) { - entry = (Map.Entry)iter.next(); - entryClass = (Class)entry.getKey(); - if (entryClass.isAssignableFrom(targetClass)) { - if (closestClass != null && closestClass.isAssignableFrom(entryClass)) { - closestClass = entryClass; - closestProducer = (ContentProducer)entry.getValue(); - } - } - } - - // whether we found one or not ask our parent to see if a more - // exact producer is defined - // unless we are autonomous (ie: we have no parent) - if (!this.isAutonomous()) { - ContentProducer parentProducer = - getParent().getSuperClassContentProducer(targetClass, closestClass); - if (parentProducer != null) { - closestProducer = parentProducer; - } - } - - return closestProducer; - } - - /** - * Storable write support - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - dw.writeInt(fContentProducers.size()); - Map.Entry producerEntry; - Iterator iter = fContentProducers.entrySet().iterator(); - while (iter.hasNext()) { - producerEntry = (Map.Entry)iter.next(); - dw.writeString(((Class)producerEntry.getKey()).getName()); - dw.writeStorable((Storable)producerEntry.getKey()); - } - } - - /** - * Storable inoput support - * - * @param dr storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - // read the default content producers, count first - int prodCount = dr.readInt(); - String prodClass; - ContentProducer producer; - for (int cnt = 0; cnt < prodCount; cnt++) { - prodClass = dr.readString(); - producer = (ContentProducer)dr.readStorable(); - try { - registerContentProducer(Class.forName(prodClass), producer); - } - catch (ClassNotFoundException ex) { - // the class does not exist in this application - // cannot do much about it so ignore it, the entities of - // this class will get their toString() value instead - } - } - - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DiamondFigureGeometricAdapter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DiamondFigureGeometricAdapter.java deleted file mode 100644 index f2a04c0d3..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DiamondFigureGeometricAdapter.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#)DiamondFigureGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Point; -import java.awt.Shape; - -import org.jhotdraw.contrib.DiamondFigure; - -/** - * Geometric adapter for the DiamondFigure - * - * @author Eduardo Francos - InContext - * @created 6 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class DiamondFigureGeometricAdapter extends DiamondFigure - implements GeometricFigure { - - /** - * Constructor for the DiamondFigureGeometricAdapter object - */ - public DiamondFigureGeometricAdapter() { - super(); - } - - /** - *Constructor for the DiamondFigureGeometricAdapter object - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - */ - public DiamondFigureGeometricAdapter(Point origin, Point corner) { - super(origin, corner); - } - - /** - * Gets the shape attribute of the DiamondFigure object - * - * @return The shape value - */ - public Shape getShape() { - return getPolygon(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceHolder.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceHolder.java deleted file mode 100644 index c09a6ef6c..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceHolder.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * @(#)DisposableResourceHolder.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -/** - * DisposableResourceHolder defines the interface for objects holding - * disposable resources.<br> - * A disposable resource is any kind of object that can be disposed of - * according to a given disposal strategy.<BR> - * DisposableResourceHolder keeps track of the last time the resource is - * accessed to support ellapsed time ResourceDisposabilityStrategies.<br> - * For example, if you are handling large images that you can regenerate - * at will, the DisposableResourceHolder will hold the image, and if not - * accessed for let's say 60 secs then it discards the image - * (sets its reference to null) so that it can be GCed.<br> - * Within the context of JHotDraw, HTMLTextAreaFigure uses - * DisposableResourceHolders to handle the HTML generated image, but if the - * figure is not displayed (out of the display area or in a background view) then - * the image is disposed of after a while and the HTMLTextAreaFigure will regenerate - * it the next time it is displayed.<br> - * A resource may be locked so that its user can be sure it will not be - * disposed of while in use. After finished using it it should be unlocked so as - * to reintegrate it to the disposal strategy. - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - * @see DisposableResourceManager - * @see StandardDisposableResourceManager - * @see ResourceDisposabilityStrategy - * @see DisposableResourceManagerFactory - * @see StandardDisposableResourceHolder - */ -public interface DisposableResourceHolder { - - /** - * Gets the resource - * - * @return The resource value - * @exception NullPointerException If the resource was disposed of - */ - public Object getResource() throws NullPointerException; - - /** - * Makes a clone the this - * - * @return the clone - */ - public Object clone(); - - /** - * Sets the resource - * - * @param resource The new resource value - */ - public void setResource(Object resource); - - /** - * Sets the disposableDelay - * - * @param millis The new disposableDelay value - */ - public void setDisposableDelay(long millis); - - /** - * Gets the disposableDelay - * - * @return The disposableDelay value - */ - public long getDisposableDelay(); - - /** - * Resets the disposing delay so as to restart the time counter - */ - public void resetDelay(); - - /** - * Gets the lastTimeAccessed attribute of the DisposableResourceHolder object - * - * @return The lastTimeAccessed value - */ - public long getLastTimeAccessed(); - - /** Disposes of the resource immediately. */ - public void dispose(); - - /** - * Returns true if the resource is still available - * - * @return The resourceDirty value - */ - public boolean isAvailable(); - - /** - * Locks the resource so it cannot be automatically disposed of until unlock - * is called.<br> - * Explicit disposing by calling dispose() is still possible though. - */ - public void lock(); - - /** - * Unlocks the resource so it can be automatically disposed of again.<br> - * Explicit disposing by calling dispose() is still possible though. - */ - public void unlock(); - - /** - * True if the resource is locked - * - * @return The locked status - */ - public boolean isLocked(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceManager.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceManager.java deleted file mode 100644 index ed8d2d318..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceManager.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * @(#)DisposableResourceManager.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.util.Iterator; - -/** - * DisposableResourceManager defines the interface for managers of disposable - * resources.<br> - * A DisposableResourceManager implements a strategy for efficient disposal - * of seldom used resources. - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public interface DisposableResourceManager { - - /** - * Registers a resource with the manager so as to be disposed - * - * @param resource the resource - */ - public void registerResource(DisposableResourceHolder resource); - - /** - * Unregisters a resource so it is not automatically GCed.<br> - * - * @param resource the resource - */ - public void unregisterResource(DisposableResourceHolder resource); - - /** - * Returns an iterator on the managed resources - * - * @return The resources iterator - */ - public Iterator getResources(); - - /** - * True if the resource is registered with this manager - * - * @param resource The resource - * @return True if the resource is registered with this manager - */ - public boolean managesResource(DisposableResourceHolder resource); - - /** - * Activates the strategy which starts disposing of resources as fitted - * - * @exception ResourceManagerNotSetException Description of the Exception - */ - public void startDisposing() throws ResourceManagerNotSetException; - - /** - * Deactivates the strategy that stops automatic disposal of resource.<br> - * The millis parameters specifies in milliseconds the time to wait for - * the disposal to stop. After this time the method returns whether the - * disposal was stopped or not, but the desactivation request remains active. - * - * @param millis time to wait for disposal to stop - */ - public void stopDisposing(long millis); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceManagerFactory.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceManagerFactory.java deleted file mode 100644 index ed308566b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/DisposableResourceManagerFactory.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * @(#)DisposableResourceManagerFactory.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -/** - * DisposableResourceManagerFactory creates DisposableResourceHolders on behalf - * of requesting clients. It automatically registers the holders with its singleton - * standard resource manager - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public abstract class DisposableResourceManagerFactory { - - /** The default periodicity for resource disposal */ - public static long DEFAULT_DISPOSAL_PERIODICITY = 60000; - - /** The singleton current resource manager */ - protected static DisposableResourceManager currentManager = null; - - protected static ResourceDisposabilityStrategy currentStrategy = null; - - protected static DisposableResourceHolder holderPrototype = null; - - /** - * Gets the current manager. - * - * @return The currentManager - */ - public static DisposableResourceManager getManager() { - return currentManager; - } - - /** - * Sets the strategy of the DisposableResourceManagerFactory - * class. This is a one shot thing that should be initialized before using it - * so if there is already a strategy this returns without further notice. - * - * @param strategy The new disposalStrategy - */ - public static void setStrategy(ResourceDisposabilityStrategy strategy) { - currentStrategy = strategy; - } - - /** - * Returns a new standard resource holder already registered with the default - * resource manager - * - * @param resource Description of the Parameter - * @return the newly created resource holder - */ - public static DisposableResourceHolder createStandardHolder(Object resource) { - // ensure the manager is set and running - initManager(); - - // now create the holder and register it - DisposableResourceHolder holder = (DisposableResourceHolder)holderPrototype.clone(); - holder.setResource(resource); - getManager().registerResource(holder); - - return holder; - } - - /** Initializes the standard resource disposal manager */ - protected static void initManager() { - if (currentManager == null) { - // ensure we have a holder prototype - if (holderPrototype == null) { - holderPrototype = new StandardDisposableResourceHolder(); - } - // ensure we have a strategy - if (currentStrategy == null) { - currentStrategy = new ETSLADisposalStrategy(DEFAULT_DISPOSAL_PERIODICITY); - } - // ensure we have a manager - if (currentManager == null) { - currentManager = new StandardDisposableResourceManager(currentStrategy); - } - - // start the whole thing - try { - currentManager.startDisposing(); - } - catch (ResourceManagerNotSetException ex) { - // we set it so we shouldn't get here - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ETSLADisposalStrategy.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ETSLADisposalStrategy.java deleted file mode 100644 index 800de77db..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ETSLADisposalStrategy.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * @(#)ETSLADisposalStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.util.Iterator; - -/** - * ETSLADisposalStrategy implements an Ellapsed Time Since Last Access disposal - * strategy.<bt> - * It checks the last time a resource was accessed and if greater than - * the resource's disposalDelay it disposes of the resource so that it can - * be GCed.<br> - * Disposal activity must be explicitely started using the startDisposing method - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version 1.0 - */ -public class ETSLADisposalStrategy implements ResourceDisposabilityStrategy { - - /** The associated resource manager */ - private DisposableResourceManager manager; - - /** The periodicity at wich disposal is checked */ - private long gcPeriodicity = 60000; - - /** the thread that calls this periodically */ - private DisposalThread disposalThread = null; - - /** True if disposal is active and running */ - private boolean disposingActive = false; - - - /** - * Constructor for the ETSLADisposalStrategy object - */ - public ETSLADisposalStrategy() { } - - /** - *Constructor for the ETSLADisposalStrategy object - * - * @param periodicity the periodicity at which to check for disposable resources - */ - public ETSLADisposalStrategy(long periodicity) { - this(null, periodicity); - } - - /** - *Constructor for the ETSLADisposalStrategy object - * - * @param manager the manager - * @param periodicity the periodicity at which to check for disposable resources - */ - public ETSLADisposalStrategy(DisposableResourceManager newManager, long newPeriodicity) { - setManager(newManager); - setPeriodicity(newPeriodicity); - initDisposalThread(); - } - - /** - * Sets the manager holding the resources for this strategy - * - * @param manager The new manager value - */ - public synchronized void setManager(DisposableResourceManager newManager) { - // if new manager is null the stop disposing - if (getManager() == null) { - stopDisposing(Long.MAX_VALUE); - } - manager = newManager; - } - - /** - * Gets the manager holding the resources for this strategy - * - * @return The manager value - */ - public DisposableResourceManager getManager() { - return manager; - } - - /** - * Activates the strategy which starts disposing of resources as fitted - * - * @exception ResourceManagerNotSetException thrown if the manager has not - * been set, so impossible to run - */ - public void startDisposing() throws ResourceManagerNotSetException { - if (getManager() == null) { - throw new ResourceManagerNotSetException(); - } - - // do nothing if already active - if (disposingActive) { - return; - } - - disposingActive = true; - disposalThread.start(); - } - - /** - * Deactivates the strategy that stops automatic disposal of resources.<br> - * The millis parameters specifies in milliseconds the time to wait for - * the disposal to stop. After this time the method returns, but the - * deactivation request remains active. - * - * @param millis time to wait for disposal to stop - */ - public void stopDisposing(long millis) { - // do nothing if not disposing - if (!disposingActive) { - return; - } - // request the thread to stop and wait for it - try { - disposalThread.interruptDisposalPending = true; - disposalThread.join(millis); - } - catch (InterruptedException ex) { - // ignore - } - finally { - disposingActive = false; - } - } - - /** - * Initializes the disposal thread if not alrady done. - */ - protected void initDisposalThread() { - if (disposalThread != null) { - return; - } - - disposalThread = new DisposalThread(this, getPeriodicity()); - } - - /** - * Dispose of all the resources whose dispose delay has expired and - * are not locked - */ - protected synchronized void dispose() { - synchronized (getManager()) { - long currentTime = System.currentTimeMillis(); - Iterator resourceIter = getManager().getResources(); - DisposableResourceHolder resource; - - while (resourceIter.hasNext()) { - resource = (DisposableResourceHolder)resourceIter.next(); - synchronized (resource) { - if (!resource.isLocked() && (resource.getLastTimeAccessed() + resource.getDisposableDelay()) < currentTime) { - resource.dispose(); - } - } - } - } - } - - /** - * Gets the periodicity attribute of the ETSLADisposalStrategy object - * - * @return The periodicity value - */ - public long getPeriodicity() { - return gcPeriodicity; - } - - /** - * Sets the periodicity attribute of the ETSLADisposalStrategy object - * - * @param newPeriodicity The new periodicity value - */ - public void setPeriodicity(long newPeriodicity) { - gcPeriodicity = newPeriodicity; - if (disposalThread != null) { - disposalThread.setPeriodicity(newPeriodicity); - } - } -} - -/** - * Description of the Class - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - */ -class DisposalThread extends Thread { - - private ETSLADisposalStrategy strategy; - - /** The periodicity at wich disposal is checked */ - private long periodicity = 60000; - - /** Description of the Field */ - boolean interruptDisposalPending = false; - - /** - *Constructor for the DisposalThread object - * - * @param strategy the strategy - * @param periodicity the periodicity at which the strategy should be called - */ - DisposalThread(ETSLADisposalStrategy newStrategy, long newPeriodicity) { - strategy = newStrategy; - periodicity = newPeriodicity; - } - - /** - * Main processing method for the DisposalThread object - */ - public void run() { - interruptDisposalPending = false; - while (!interruptDisposalPending) { - try { - sleep(periodicity); - } - catch (Exception ex) { - // just exit - break; - } - strategy.dispose(); - } - interruptDisposalPending = false; - } - - /** - * Gets the periodicity attribute of the ETSLADisposalStrategy object - * - * @return The periodicity value - */ - public long getPeriodicity() { - return periodicity; - } - - /** - * Sets the periodicity attribute of the ETSLADisposalStrategy object - * - * @param newPeriodicity The new periodicity value - */ - public void setPeriodicity(long newPeriodicity) { - periodicity = newPeriodicity; - } - - /** Description of the Method */ - public void interruptDisposal() { - interruptDisposalPending = true; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/EllipseFigureGeometricAdapter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/EllipseFigureGeometricAdapter.java deleted file mode 100644 index 35615e1c6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/EllipseFigureGeometricAdapter.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)EllipseFigureGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.geom.Ellipse2D; - -import org.jhotdraw.figures.EllipseFigure; - -/** - * Geometric adapter for the EllipseFigure - * - * @author Eduardo Francos - InContext - * @created 1 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class EllipseFigureGeometricAdapter extends EllipseFigure - implements GeometricFigure { - - /** - * Constructor for the EllipseFigureExt object - */ - public EllipseFigureGeometricAdapter() { - super(); - } - - /** - *Constructor for the EllipseFigureGeometricAdapter object - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - */ - public EllipseFigureGeometricAdapter(Point origin, Point corner) { - super(origin, corner); - } - - /** - * Gets the shape attribute of the EllipseFigure object - * - * @return The shape value - */ - public Shape getShape() { - Rectangle rect = displayBox(); - Ellipse2D.Float ellipse = new Ellipse2D.Float(rect.x, rect.y, rect.width, rect.height); - return ellipse; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/FigureContentProducerContext.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/FigureContentProducerContext.java deleted file mode 100644 index ab8ce3410..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/FigureContentProducerContext.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)FigureContentProducerContext.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Font; - -import java.awt.Rectangle; - -/** - * FigureContentProducerContext defines the interface required of clients - * requesting contents for Figure oriented ContentProducers.<br> - * - * @author Eduardo Francos - InContext - * @created 7 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public interface FigureContentProducerContext extends ContentProducerContext { - - /** - * Returns the display box of the figure - * - * @return the display box - */ - public Rectangle displayBox(); - - /** - * Gets the font of the figure - * - * @return The font - */ - public Font getFont(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/FigureDataContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/FigureDataContentProducer.java deleted file mode 100644 index 0a6461e4a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/FigureDataContentProducer.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * @(#)FigureDataContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.io.IOException; - -import java.io.Serializable; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * FigureDataContentProducer produces content on behalf of Figures.<br> - * It supports the basic information common to all figures. - * It can only be used as a generic producer, getting information from any - * figure passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class FigureDataContentProducer extends AbstractContentProducer - implements Serializable { - - /** - * Constructor for the FigureContentProducer object - */ - public FigureDataContentProducer() { } - - /** - * Produces the contents for the figure - * - * @param context the calling client context - * @param ctxAttrName the attribute name - * @param ctxAttrValue the figure - * @return The string value for the requested entity name - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FIGURE_WIDTH) == 0) { - return Integer.toString(((FigureContentProducerContext)context).displayBox().width); - } - - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FIGURE_HEIGHT) == 0) { - return Integer.toString(((FigureContentProducerContext)context).displayBox().height); - } - - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FIGURE_POSX) == 0) { - return Integer.toString(((FigureContentProducerContext)context).displayBox().x); - } - - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FIGURE_POSY) == 0) { - return Integer.toString(((FigureContentProducerContext)context).displayBox().y); - } - - return null; - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/GeometricFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/GeometricFigure.java deleted file mode 100644 index dead5a667..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/GeometricFigure.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * @(#)GeometricFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Shape; - -import org.jhotdraw.framework.Figure; - -/** - * GeometricFigure defines required of figures that can be used as shape providers - * for other figures. See HTMLTextArea for an example. - * - * @author Eduardo Francos - InContext - * @created 1 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public interface GeometricFigure extends Figure { - - /** - * Returns a shape with the figures area outline - * - * @return The shape - */ - public Shape getShape(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLColorContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLColorContentProducer.java deleted file mode 100644 index a95b71d49..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLColorContentProducer.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * @(#)HTMLColorContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Color; -import java.io.Serializable; - -/** - * HTMLColorContentProducer produces RGB color HTML encoded strings.<br> - * Ex: - * <code>Color.blue ==> #0000FF</code><br> - * <code>Color.red ==> #FF00FF</code><br> - * It can either be specific if set for a specific color, or generic, encoding - * any color passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLColorContentProducer extends ColorContentProducer implements Serializable { - - /** - * Constructor for the HTMLColorContentProducer object - */ - public HTMLColorContentProducer() { } - - /** - * Produces the contents for the color - * - * @param context the calling client context - * @param ctxAttrName the color attribute name (FrameColor, TextColor, etc) - * @param ctxAttrValue the color - * @return The HTML encoded RBG value for the color - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - // if we have our own color then use it - // otherwise use the one supplied - Color color = (getColor() != null) ? getColor() : (Color)ctxAttrValue; - return getHTMLColorCode(color); - } - - public static String getHTMLColorCode(Color color) { - String colorCode = Integer.toHexString(color.getRGB()); - return "#" + colorCode.substring(colorCode.length() - 6); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLContentProducer.java deleted file mode 100644 index 5e0ac529b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLContentProducer.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * @(#)HTMLContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.io.Serializable; - -/** - * HTMLContentProducer produces HTML suitable values and encoded strings for - * various types of values.<br> - * It can also transform values into their HTML equivalents, like for instance - * a mapping between font sizes in points and the HTML valid font size values.<br> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLContentProducer extends AttributeFigureContentProducer - implements Serializable { - - /** Table of font size equivalents between points and HTML font sizes */ - protected final static int[][] htmlFontSizeEquivalences = - { - // 0 to 9 points ==> size 1 - {1, 0, 9}, - // 10 to 11 points ==> size 2 - {2, 10, 11}, - // 12 to 13 points ==> size 3 - {3, 12, 13}, - // 14 to 17 points ==> size 4 - {4, 14, 17}, - // 18 to 23 points ==> size 5 - {5, 18, 23}, - // 24 to 35 points ==> size 6 - {6, 24, 35}, - // 36 and higher points ==> size 7 - {7, 36, Integer.MAX_VALUE} - }; - - /** - * Constructor for the HTMLContentProducer object - */ - public HTMLContentProducer() { } - - /** - * Gets the HTML content value for the requested attribute - * - * @param context the calling client context - * @param ctxAttrName the attribute name (FontSize, etc...) - * @param ctxAttrValue the attribute value that led to the call to this - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - HTMLContentProducerContext htmlContext = (HTMLContentProducerContext)context; - - if (ctxAttrName.compareTo(ContentProducer.ENTITY_FONT_SIZE) == 0) { - return Integer.toString(getHTMLFontSizeEquivalent(htmlContext.getFont().getSize())); - } - - return super.getContent(context, ctxAttrName, ctxAttrValue); - } - - /** - * Gets the hTMLFontSizeEquivalent attribute of the HTMLTextAreaFigure object - * - * @param pointSize the font size in points - * @return The hTMLFontSizeEquivalent value - */ - public int getHTMLFontSizeEquivalent(int pointSize) { - for (int i = 0; i < htmlFontSizeEquivalences.length; i++) { - if (pointSize >= htmlFontSizeEquivalences[i][1] && - pointSize <= htmlFontSizeEquivalences[i][2]) { - return htmlFontSizeEquivalences[i][0]; - } - } - // not found?!?!?! return the "normal" font size - return 3; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLContentProducerContext.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLContentProducerContext.java deleted file mode 100644 index edbd14cae..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLContentProducerContext.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * @(#)HTMLContentProducerContext.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -/** - * HTMLContentProducerContext defines the interface required of clients - * requesting HTML based contents.<br> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public interface HTMLContentProducerContext extends AttributeContentProducerContext { -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLLayouter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLLayouter.java deleted file mode 100644 index 881d255ee..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLLayouter.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)HTMLLayouter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Insets; -import java.awt.Point; - -import java.awt.Rectangle; -import java.io.IOException; -import org.jhotdraw.contrib.Layoutable; -import org.jhotdraw.contrib.Layouter; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * HTMLLayouter implements the logic for laying out figures based on an - * HTML template. - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLLayouter implements Layouter { - - /**Constructor for the HTMLLayouter object */ - public HTMLLayouter() { } - - /** - * Constructor which associates a HTMLLayouter with - * a certain Layoutable. - * - * @param newLayoutable Layoutable to be laid out - */ - public HTMLLayouter(Layoutable newLayoutable) { - this(); -// setLayoutable(newLayoutable); - } - - /** - * Description of the Method - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - * @return Description of the Return Value - */ - public Rectangle calculateLayout(Point origin, Point corner) { - /** - * @todo: Implement this org.jhotdraw.contrib.Layouter method - */ - throw new UnsupportedOperationException("Method calculateLayout() not yet implemented."); - } - - /** - * Description of the Method - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - * @return Description of the Return Value - */ - public Rectangle layout(Point origin, Point corner) { - /** - * @todo: Implement this org.jhotdraw.contrib.Layouter method - */ - throw new UnsupportedOperationException("Method layout() not yet implemented."); - } - - /** - * Sets the insets attribute of the HTMLLayouter object - * - * @param newInsets The new insets value - */ - public void setInsets(Insets newInsets) { - /** - * @todo: Implement this org.jhotdraw.contrib.Layouter method - */ - throw new UnsupportedOperationException("Method setInsets() not yet implemented."); - } - - /** - * Gets the insets attribute of the HTMLLayouter object - * - * @return The insets value - */ - public Insets getInsets() { - /** - * @todo: Implement this org.jhotdraw.contrib.Layouter method - */ - throw new UnsupportedOperationException("Method getInsets() not yet implemented."); - } - - /** - * Description of the Method - * - * @param dw Description of the Parameter - */ - public void write(StorableOutput dw) { - /** - * @todo: Implement this org.jhotdraw.util.Storable method - */ - throw new UnsupportedOperationException("Method write() not yet implemented."); - } - - /** - * Description of the Method - * - * @param dr Description of the Parameter - * @exception IOException Description of the Exception - */ - public void read(StorableInput dr) throws IOException { - /** - * @todo: Implement this org.jhotdraw.util.Storable method - */ - throw new UnsupportedOperationException("Method read() not yet implemented."); - } - - /** - * Create a new instance of this type and sets the layoutable - * - * @param newLayoutable Description of the Parameter - * @return Description of the Return Value - */ - public Layouter create(Layoutable newLayoutable) { - return new HTMLLayouter(newLayoutable); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLTextAreaFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLTextAreaFigure.java deleted file mode 100644 index b4f908ae4..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLTextAreaFigure.java +++ /dev/null @@ -1,1143 +0,0 @@ -/* - * @(#)HTMLTextAreaFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.geom.AffineTransform; -import java.awt.geom.FlatteningPathIterator; -import java.awt.image.BufferedImage; -import java.io.IOException; - -import javax.swing.*; - -import org.jhotdraw.contrib.TextAreaFigure; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Geom; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * An HTMLTextAreaFigure contains HTML formatted text.<br> - * Formatting is done internally by a JLabel component, so all display features - * and constrains that apply for a JLabel apply also for an HTMLTextAreaFigure, - * including text and images, as in any Web browser, even allowing for contents - * residing on external Web sources. But don't forget that this is <b>NOT</b> a Web - * browser, so HTML contents cannot be standard Web pages with headers, stylesheets, - * javascript and who knows what else, just plain down to earth HTML code. - * <p> - * In order to automatically integrate "external" attributes like FillColor, - * FontName, etc, HTMLTextAreaFigure encapsulates the text the user types in the - * editor within a table with a single cell occupying the whole area.<br> - * Here is what the HTML code passed to the JLabel looks like:<br> - * <code> - * <html><br> - * <table border='0' width='area.width' height='area.height' - * cellpadding='0' cellspacing='0' bgcolor='&FillColor;'><br> - * <tr><br> - * <td width='100%'><br> - * <font face='&FontName;' color='&TextColor;' size='&FontSize;'><br> - * <!-- add italic and bold attributes if required--><br> - * <i><br> - * <b><br> - * ============>> User's contents go here <============<br> - * <!-- close italic and bold attributes if required --><br> - * </b><br> - * </i><br> - * </font><br> - * </td><br> - * </tr><br> - * </table><br> - * </html><br> - * </code><br> - * It is possible to write <i>raw</i> HTML code by calling - * <code>setRawHTML(true)</code>. In that case no tags are issued.<br> - * The user is then responsible for applying the figure attributes and in - * general is responsible for the whole display. - * This setting can be dynamically toggled as needed.<br> - * Note that JLabel resets the font to its own default whenever it encounters - * an HTML structure, like a table or a header tag. I couldn't find a workaround - * for what can/should be called a bug. Normal browsers do not behave like this.<p> - * - * Internal attributes like FillColor or FontName are exposed as special SGML - * entities using the standard SGML entity notation, ex: <code>&FillColor;</code>.<br> - * Any attribute associated to the figure can be used and will be replaced with - * an appropriate value from a ContentsProducer (see below) or its - * toString() value if no specific ContentProducer is defined.<p> - * - * The HTML display and layouting can be time consuming, quite fast in most cases, - * unless the HTML structure is complicated. This can become a serious penalty - * when working with a large number of complicated figures.<br> - * To help in this issue HTMLTextAreaFigure offers two display modes, DirectDraw, - * where the HTML layout logic is executed every time the figure is displayed, and - * BufferedDraw, where HTMLTextAreaFigure creates an in-memory image of the - * resulting layout and uses the image for fast display until a change requires - * to regenerate the image.<br> - * The BufferedDraw mode is as fast as an image display can be, but it consumes - * more memory than the DirectDraw mode, which in turn is slower.<br> - * The setting is specific to each figure instance and it can be dynamically - * toggled at any time, so it is possible to fine tune when and which figures - * use either one of the drawing modes.<p> - * - * Remember the attributes based SGML entities?<br> - * If you set the figure to be read only, so not allowing the user to directly - * edit the HTML contens, then it is possible to use HTMLTextAreaFigures to - * produce very elaborate and complex information layout.<br> - * You create HTML templates for each figure layout you want to use and set them - * as the text of the figure. Within the template text you place field names - * wherever needed as you would for a Web page, then each figure using the template - * associates the field values as attributes of the figure. The attribute exposure - * feature will substitute the entity names with the current attribute's value.<br> - * Please refer to the accompanying sample program to see in detail the multiple - * ways this feature can enhance your drawings.<p> - * - * <b>ContentProducers</b><br> - * As stated above, entities referenced in the HTML template code are replaced by - * their current value in the drawn figure. The values themselves are provided - * by ContentProducers.<br> - * For a detailed description of ContentProducers please refer to their - * own documentation, but to make it simple, a ContentProducer is an object that - * implements the method <code>getContent</code> and is registered to produce - * content for either specific entities, or entity classes.<br> - * An entity class is the class of the attribute containing its value, ie: an - * attribute containing a URL has class URL (<code>attribute.getClass()</code>), - * and an URLContentProducer can be associated to it so that when the layout - * needs the entity's value, the producer's getContent() method is called and the - * returned value (ex: contents from a Web page, FTP file or disk file) is used - * to replace the entity in the displayed figure.<br> - * The ContentProducer can return either a String, in which case it is used - * <b>as is</b>, or another Object. In the later case HTMLTextAreaFigure will - * continue calling registered ContentProviders depending on the class of the - * returned Object until it either gets a final String, or null. If null then - * the entity is considered as unknown and left as is in the displayed text. To - * make it dissapear alltogether the producer should return an empty String.<p> - * HTMLTextAreaFigure registers default ContentProducers: - * AttributeFigureContentProducer for the intrinsic attributes of the figure - * (height, width, font name, etc.), URLContentProducer for URL attributes, - * HTMLColorContentProducer for HTML color encoding and for embedded - * TextAreaFigure and HTMLTextAreaFigure classes. That's right, you can embed - * a TextAreaFigure or HTMLTextAreaFigure contents inside an HTMLTextAreaFigure - * recursively for as many levels as your CPU and memory will allow.<br> - * For instance, the main figure can consists of an HTML table where each - * cell's contents come from a different HTMLTextAreaFigure. - * - * @author Eduardo Francos - InContext - * @created 7 May 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLTextAreaFigure extends TextAreaFigure - implements HTMLContentProducerContext, FigureChangeListener { - - /** Start marker for embedded attribute values */ - public final static char START_ENTITY_CHAR = '&'; - - /** End marker for embedded attribute values */ - public final static char END_ENTITY_CHAR = ';'; - - /** Marker escape character */ - public final static char ESCAPE_CHAR = '\\'; - - /** holder for the image used for the display */ - private transient DisposableResourceHolder fImageHolder; - - /** The label used for in-memory display */ - private transient JLabel fDisplayDelegate; - - /** True if using direct drawing, false if using the memory image */ - private boolean fUseDirectDraw = false; - - /** True if the memory image should be regenerated */ - private boolean fIsImageDirty = true; - - /** Description of the Field */ - private boolean fRawHTML = false; - - /** Supplier for intrinsic data */ - private transient ContentProducer fIntrinsicContentProducer; - - /** Description of the Field */ - private static ContentProducerRegistry fDefaultContentProducers = new ContentProducerRegistry(); - // initialize the default content producers for HTMLTextAreaFigure figures - static { - fDefaultContentProducers.registerContentProducer(TextAreaFigure.class, new TextHolderContentProducer()); - fDefaultContentProducers.registerContentProducer(Color.class, new HTMLColorContentProducer()); - } - - /** Description of the Field */ - private transient ContentProducerRegistry fContentProducers = null; - - /** The figure used to draw the frame of the area */ - private Figure fFrameFigure = null; - - // make sure required default attributes are set - static { - initDefaultAttribute("XAlignment", new Integer(SwingConstants.LEFT)); - initDefaultAttribute("YAlignment", new Integer(SwingConstants.TOP)); - initDefaultAttribute("LeftMargin", new Float(5)); - initDefaultAttribute("RightMargin", new Float(5)); - initDefaultAttribute("TopMargin", new Float(5)); - initDefaultAttribute("BottomMargin", new Float(5)); - initDefaultAttribute("TabSize", new Float(8)); - } - - /** Constructor for the HTMLTextAreaFigure object */ - public HTMLTextAreaFigure() { - initialize(); - } - - /** - * Clones a figure and initializes it - * - * @return Description of the Return Value - * @see Figure#clone - */ - public Object clone() { - Object cloneObject = super.clone(); - ((HTMLTextAreaFigure)cloneObject).initialize(); - return cloneObject; - } - - /** - * Sets the display box for the figure - * - * @param origin origin point - * @param corner corner point - * @see Figure - */ - public void basicDisplayBox(Point origin, Point corner) { - super.basicDisplayBox(origin, corner); - getFrameFigure().displayBox(displayBox()); - } - - /** - * Returns an iterator of standard sizing handles to manipulate the figure - * - * @return Description of the Return Value - */ - public HandleEnumeration handles() { - return getFrameFigure().handles(); -// List handles = CollectionsFactory.current().createList(); -// BoxHandleKit.addHandles(this, handles); -// return new HandleEnumerator(handles); - } - - /** - * True if the figure contains the point. The call is relayed to the frame figure - * - * @param x Description of the Parameter - * @param y Description of the Parameter - * @return Description of the Return Value - */ - public boolean containsPoint(int x, int y) { - return getFrameFigure().containsPoint(x, y); - } - - /** - * Moves the figure by the specified displacement - * - * @param dx Description of the Parameter - * @param dy Description of the Parameter - */ - public void moveBy(int dx, int dy) { - super.moveBy(dx, dy); - getFrameFigure().moveBy(dx, dy); - } - - /** Initializes the figure */ - protected void initialize() { - fImageHolder = DisposableResourceManagerFactory.createStandardHolder(null); - setFrameFigure(new RectangleFigure()); - - // initialize the content producers - setIntrinsicContentProducer(new HTMLContentProducer()); - fContentProducers = new ContentProducerRegistry(fDefaultContentProducers); - - markSizeDirty(); - markImageDirty(); - markTextDirty(); - markFontDirty(); - - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - } - - /** - * Called whenever the something changes that requires size recomputing - */ - protected void markSizeDirty() { - markImageDirty(); - super.markSizeDirty(); - } - - /** - * Called whenever the something changes that requires text recomputing - */ - protected void markTextDirty() { - markImageDirty(); - super.markTextDirty(); - } - - /** - * Called whenever the something changes that requires font recomputing - */ - protected void markFontDirty() { - markImageDirty(); - super.markFontDirty(); - } - - /** - * Draws the figure in the given graphics. Draw is a template - * method calling drawBackground followed by drawText then drawFrame.<br> - * HTMLTextAreaFigure displays in a different order tahn most figures to avoid - * smearing of the border when enclosed in a weird frame figure.<br> - * Also, there is no such thing as a transparent background so we always draw it. - * - * @param g Description of the Parameter - * @todo check possibility of clipping the contents from the background to have a - * transparent figure - */ - public void draw(Graphics g) { - Color fill = getFillColor(); - g.setColor(fill); - drawBackground(g); - - // we draw the text then the rame to avoid smearing - drawText(g, displayBox()); - - Color frame = getFrameColor(); - g.setColor(frame); - drawFrame(g); - } - - /** - * Draws the frame around the text. It gets the shape of the frame from the - * enclosing figure - * - * @param g The graphics to use for the drawing - */ - public void drawFrame(Graphics g) { - ((Graphics2D)g).draw(getClippingShape()); - } - - /** - * Draws the background for the figure. It gets the shape of the frame from the - * enclosing figure - * - * @param g The graphics to use for the drawing - */ - public void drawBackground(Graphics g) { - ((Graphics2D)g).fill(getClippingShape()); - } - - /** - * Formats and draws the text for the figure - * - * @param g the graphics for the drawing. It can be null when - * called just to compute the size - * @param displayBox the display box within which the text should be formatted and drawn - * @return Description of the Return Value - */ - protected float drawText(Graphics g, Rectangle displayBox) { - Graphics2D g2 = null; - Shape savedClip = null; - - if (g != null) { - g2 = (Graphics2D)g; - savedClip = g2.getClip(); - } - - Rectangle drawingBox = makeDrawingBox(displayBox); - - // drawing an empty displayBox is not possible - if (drawingBox.isEmpty()) { - return drawingBox.height; - } - - if (g != null) { - g2.clip(getClippingShape()); - } - - if (usesDirectDraw()) { - drawTextDirect(g2, drawingBox); - } - else { - fImageHolder.lock(); - if (isImageDirty()) { - generateImage(drawingBox); - setSizeDirty(false); - } - - if (g2 != null) { - g2.drawImage(getImage(), drawingBox.x, drawingBox.y, null); - } - fImageHolder.unlock(); - } - if (g != null) { - g2.setClip(savedClip); - } - - // redraw the border to prevent smearing - drawFrame(g); - return displayBox.height; - } - - /** - * Generates the HTML image to be used for fast BufferedDrawing - * - * @param drawingBox Description of the Parameter - */ - protected void generateImage(Rectangle drawingBox) { - // create the image and get its Graphics - createImage(drawingBox.width, drawingBox.height); - Graphics2D g2 = (Graphics2D)getImage().getGraphics(); - - Rectangle finalBox = new Rectangle(drawingBox); - finalBox.setLocation(0, 0); - renderText(g2, finalBox); - g2.dispose(); - } - - /** - * Draws the text directly onto the drawing, without using the cached figure - * - * @param g2 Description of the Parameter - * @param drawingBox Description of the Parameter - */ - protected void drawTextDirect(Graphics2D g2, Rectangle drawingBox) { - Shape savedClipArea = null; - Color savedFontColor = null; - //Font savedFont = null; - //Rectangle2D clipRect = null; - RenderingHints savedRenderingHints = null; - - if (g2 != null) { - savedRenderingHints = g2.getRenderingHints(); - savedClipArea = g2.getClip(); - //savedFont = g2.getFont(); - savedFontColor = g2.getColor(); - g2.clip(drawingBox); - } - - //float finalHeight = renderText(g2, drawingBox); - - // restore saved graphic attributes - if (g2 != null) { - g2.setClip(savedClipArea); - g2.setColor(savedFontColor); - g2.setRenderingHints(savedRenderingHints); - } - } - - /** - * Renders the HTML formatted text onto the supplied Graphics.<br> - * Rendering involves entity substitution and HTML contents preparation suitable - * for display by a JLabel. - * - * @param g2 Description of the Parameter - * @param drawingBox Description of the Parameter - * @return Description of the Return Value - * @todo look for other HTML display providers as JLabel is kind of - * lousy at it - */ - protected float renderText(Graphics2D g2, Rectangle drawingBox) { - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g2.setRenderingHint(RenderingHints.KEY_RENDERING, - RenderingHints.VALUE_RENDER_QUALITY); - - // fill with background color - g2.setBackground(getFillColor()); - g2.setColor(getFillColor()); - g2.clearRect(drawingBox.x, drawingBox.y, drawingBox.width, drawingBox.height); - g2.fillRect(drawingBox.x, drawingBox.y, drawingBox.width, drawingBox.height); - - // get the text. Either in raw format or prepared for HTML display - String text; - if (isRawHTML()) { - text = getText(); - } - else { - text = getHTMLText(getText(), getFont(), - (String)getContentProducer(Color.class).getContent(this, FigureAttributeConstant.TEXT_COLOR_STR, getTextColor()), - (String)getContentProducer(Color.class).getContent(this, FigureAttributeConstant.FILL_COLOR_STR, getFillColor()), - drawingBox - ); - } - - // perform entity keyword substitution - text = substituteEntityKeywords(text); - - // create the JLabel used as delegate for drawing - JLabel displayDelegate = getDisplayDelegate(); - displayDelegate.setText(text); - displayDelegate.setBackground(getFillColor()); - - // ensure the label covers the whole area - displayDelegate.setLocation(0, 0); - displayDelegate.setSize(drawingBox.width, drawingBox.height); - displayDelegate.setHorizontalAlignment(((Integer)getAttribute(FigureAttributeConstant.XALIGNMENT)).intValue()); - displayDelegate.setVerticalAlignment(((Integer)getAttribute(FigureAttributeConstant.YALIGNMENT)).intValue()); - - // finally display it - SwingUtilities.paintComponent( - g2, - displayDelegate, - getContainerPanel(displayDelegate, drawingBox), - drawingBox.x, - drawingBox.y, - drawingBox.width, - drawingBox.height); - - return drawingBox.height; - } - - /** - * Builds the drawing box using the margins - * - * @param displayBox Description of the Parameter - * @return The drawing box - */ - protected Rectangle makeDrawingBox(Rectangle displayBox) { - // get alignment information - float leftMargin = ((Float)getAttribute(FigureAttributeConstant.LEFT_MARGIN)).floatValue(); - float rightMargin = ((Float)getAttribute(FigureAttributeConstant.RIGHT_MARGIN)).floatValue(); - float topMargin = ((Float)getAttribute(FigureAttributeConstant.TOP_MARGIN)).floatValue(); - float bottomMargin = ((Float)getAttribute(FigureAttributeConstant.BOTTOM_MARGIN)).floatValue(); - - // inset the drawing box by 1 on every side so as not to overwrite - // the border - Rectangle drawingBox = new Rectangle(displayBox); - drawingBox.grow(-1, -1); - // adjust for margins - drawingBox.x += leftMargin; - drawingBox.width -= (leftMargin + rightMargin); - drawingBox.y += topMargin; - drawingBox.height -= topMargin + bottomMargin; - - return drawingBox; - } - - /** - * Gets the displayDelegate attribute of the HTMLTextAreaFigure object - * - * @return The displayDelegate value - */ - protected JLabel getDisplayDelegate() { - if (fDisplayDelegate == null) { - fDisplayDelegate = new JLabel(); - fDisplayDelegate.setBorder(null); - } - return fDisplayDelegate; - } - - /** - * Creates the cached image, unless there is already one and it is - * compatible with new request, in which case we reuse it - * - * @param width Description of the Parameter - * @param height Description of the Parameter - */ - protected void createImage(int width, int height) { - // if current image is compatible reuse it - fImageHolder.lock(); - if (!fImageHolder.isAvailable() || - ((BufferedImage)fImageHolder.getResource()).getWidth() != width || - ((BufferedImage)fImageHolder.getResource()).getHeight() != height) { - fImageHolder.setResource(new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)); - } - // we don't unlock the image, it's the responsibility of - // the caller to do so, this in oreder to ensure that calling createImage - // will always return with a valid image - } - - /** - * Builds the container for the drawing delegate - * - * @param drawingDelegate The delegate - * @param displayBox The bounding box - * @return The container - */ - protected JPanel getContainerPanel(Component drawingDelegate, Rectangle displayBox) { - JPanel panel = new JPanel(); - return panel; - } - - /** - * Returns a string that is valid HTML contents for a JLabel.<br> - * Valid HTML contents is text enclosed in <html> </html> tags.<br> - * We enclose the supplied text into a table with a single cell so that we - * can also set the external alignment and font attributes - * - * @param text The text - * @param font The font - * @param textColor The text color HTML code - * @param backColor The background's color HTML code - * @param displayBox Description of the Parameter - * @return The final HTML encoded text - */ - protected String getHTMLText(String text, Font font, String textColor, - String backColor, Rectangle displayBox) { - - StringBuffer htmlText = new StringBuffer(); - // add an <HTML> - htmlText.append("<html>"); - - // add a table with width=100%, background color, and no borders with - // a single cell - htmlText.append( - "<table border='0' width='" + - displayBox.width + - "' height='" + displayBox.height + - "' cellpadding='0' cellspacing='0'" + - "bgcolor='&FillColor;'>"); - htmlText.append("<tr><td width='100%'>"); - // set the font - htmlText.append("<font face='&FontName;' color='&TextColor;' size='&FontSize;'>"); - // add alignment if required - if (((Integer)getAttribute(FigureAttributeConstant.XALIGNMENT)).intValue() == SwingConstants.CENTER) { - htmlText.append("<center>"); - } - // add italic and bold attributes if required - if (font.isItalic()) { - htmlText.append("<i>"); - } - if (font.isBold()) { - htmlText.append("<b>"); - } - - // add the text itself - htmlText.append(text); - - // close italic and bold attributes if required - if (font.isBold()) { - htmlText.append("</b>"); - } - if (font.isItalic()) { - htmlText.append("</i>"); - } - // close alignment if required - if (((Integer)getAttribute(FigureAttributeConstant.XALIGNMENT)).intValue() == SwingConstants.CENTER) { - htmlText.append("</center>"); - } - // close the font tag - htmlText.append("</font>"); - // close the cell, row and table - htmlText.append("</td></tr></table>"); - - // close the html tag - htmlText.append("</html>"); - - return htmlText.toString(); - } - - /** - * Returns a new String with the entity keywords replaced by their - * current attribute value.<br> - * The text is scanned for entity keywords delimited by the START_ENTITY_CHAR - * and END_ENTITY_CHAR characters as in<br> - * <code>>font face='&FontName;' color='&FillColor;'<</code><br> - * A keyword is replaced if and only if an attribute with the given name is - * found, otherwise the text is left as is. - * - * @param template The template text - * @return The resulting string with its attributes replaced - */ - protected String substituteEntityKeywords(String template) { - int endPos; - StringBuffer finalText = new StringBuffer(); - - int startPos = 0; - int chunkEnd = startPos; - try { - while ((startPos = template.indexOf(START_ENTITY_CHAR, startPos)) != -1) { - if (startPos != 0 && template.charAt(startPos - 1) == ESCAPE_CHAR) { - // found an escaped parameter starter - startPos++; - continue; - } - - // get the end of the parameter - endPos = startPos + 1; - while ((endPos = template.indexOf(END_ENTITY_CHAR, endPos)) != -1) { - if (endPos == 0 || template.charAt(endPos - 1) != ESCAPE_CHAR) { - // found a valid non escaped group stopper - break; - } - // invalid entity, error? probably not, anyway we consider - // this as not being an attribute replacement - throw new InvalidAttributeMarker(); - } - - // OK, we now have an attribute - String attrName = template.substring(startPos + 1, endPos); - - // replace it if present, otherwise leave as is - String attrValue = getEntityHTMLRepresentation(attrName); - if (attrValue != null) { - finalText.append(template.substring(chunkEnd, startPos)); - // append the entity's value after performing - // entity keyword substitution on its contents - finalText.append(substituteEntityKeywords(attrValue)); - startPos = endPos + 1; - chunkEnd = startPos; - } - else { - startPos++; - } - } - } - catch (InvalidAttributeMarker ex) { - // invalid marker, ignore - } - - // append whatever is left - finalText.append(template.substring(chunkEnd)); - - // and return it - return finalText.toString(); - } - - /** - * Returns a string representation of the attribute according to its type - * - * @param attrName The name of the attribute - * @return The attribute's HTML representation - */ - protected String getEntityHTMLRepresentation(String attrName) { - // get the attribute's raw value - Object attrValue = getIntrinsicContentProducer().getContent(this, attrName, null); - - // no such attribute? - if (attrValue == null) { - return null; - } - - // found something - // keep requesting value expansion until we get a String - while (attrValue != null && !(attrValue instanceof String)) { - // handle explicit ContentProducers - if (attrValue instanceof ContentProducer) { - attrValue = ((ContentProducer)attrValue).getContent(this, attrName, attrValue); - continue; - } - - // not a specific producer, try a default one - ContentProducer defaultProducer = getContentProducer(attrValue.getClass()); - if (defaultProducer != null) { - attrValue = defaultProducer.getContent(this, attrName, attrValue); - continue; - } - - // no specific producer, - // all classes without an explicit default producer - // get their value from their toString() method - attrValue = attrValue.toString(); - } - - return (String)attrValue; - } - - /** - * Gets the image. - * - * @return The image value - */ - protected BufferedImage getImage() { - if (fImageHolder.isAvailable()) { - return (BufferedImage)fImageHolder.getResource(); - } - return null; - } - - /** - * Sets the image attribute of the HTMLTextAreaFigure object - * - * @param newImage The new image value - */ - protected void setImage(BufferedImage newImage) { - fImageHolder.setResource(newImage); - } - - /** - * Factory method to create a popup menu which allows to set options - * - * @return newly created popup menu - */ - protected JPopupMenu createPopupMenu() { - JPopupMenu popupMenu = new JPopupMenu(); - addPopupMenuItems(popupMenu); - popupMenu.setLightWeightPopupEnabled(true); - return popupMenu; - } - - /** - * Adds items to the popup menu - * - * @param popupMenu The popup menu to add items to - */ - protected void addPopupMenuItems(JPopupMenu popupMenu) { - ButtonGroup drawingPopupGroup; - - JRadioButtonMenuItem rbOption; - - drawingPopupGroup = new ButtonGroup(); - rbOption = new JRadioButtonMenuItem( - new AbstractAction("Direct drawing") { - public void actionPerformed(ActionEvent event) { - setUseDirectDraw(true); - } - }); - - drawingPopupGroup.add(rbOption); - if (usesDirectDraw()) { - drawingPopupGroup.setSelected(rbOption.getModel(), true); - } - popupMenu.add(rbOption); - - rbOption = new JRadioButtonMenuItem( - new AbstractAction("Buffered drawing") { - public void actionPerformed(ActionEvent event) { - setUseDirectDraw(false); - } - }); - drawingPopupGroup.add(rbOption); - if (usesBufferedDraw()) { - drawingPopupGroup.setSelected(rbOption.getModel(), true); - } - popupMenu.add(rbOption); - - popupMenu.addSeparator(); - - drawingPopupGroup = new ButtonGroup(); - rbOption = new JRadioButtonMenuItem( - new AbstractAction("Normal HTML") { - public void actionPerformed(ActionEvent event) { - setRawHTML(false); - } - }); - - drawingPopupGroup.add(rbOption); - drawingPopupGroup.setSelected(rbOption.getModel(), true); - popupMenu.add(rbOption); - - rbOption = - new JRadioButtonMenuItem( - new AbstractAction("Raw HTML") { - public void actionPerformed(ActionEvent event) { - setRawHTML(true); - } - }); - drawingPopupGroup.add(rbOption); - popupMenu.add(rbOption); - - } - - /** - * Gets the usesDirectDraw status of the HTMLTextAreaFigure object - * - * @return True if currently doing direct drawing, ie: not using a cached image - */ - public boolean usesDirectDraw() { - return fUseDirectDraw; - } - - /** - * Sets the useDirectDraw attribute of the HTMLTextAreaFigure object - * - * @param newUseDirectDraw The new useDirectDraw value - */ - public void setUseDirectDraw(boolean newUseDirectDraw) { - fUseDirectDraw = newUseDirectDraw; - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - markSizeDirty(); - } - - /** - * Sets the useBufferedDraw attribute of the HTMLTextAreaFigure object - * - * @param newUseBufferedDraw The new useBufferedDraw value - */ - public void setUseBufferedDraw(boolean newUseBufferedDraw) { - setUseDirectDraw(!newUseBufferedDraw); - } - - /** - * Gets the usesBufferedDraw attribute of the HTMLTextAreaFigure object - * - * @return True if currently using buffered draw, ie: the cached image - */ - public boolean usesBufferedDraw() { - return !usesDirectDraw(); - } - - /** - * Disposes of the image so it will be regenerated next time it is displayed - */ - protected void markImageDirty() { - fImageHolder.dispose(); - } - - /** - * True if the image should be regenerated - * - * @return The imageDirty value - */ - protected boolean isImageDirty() { - return !fImageHolder.isAvailable(); - } - - /** - * Reads the figure from StorableInput - * - * @param dr Description of the Parameter - * @throws IOException the inout storable - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - - setFrameFigure((Figure)dr.readStorable()); - setUseDirectDraw(dr.readBoolean()); - setRawHTML(dr.readBoolean()); -// setIntrinsicContentProducer((ContentProducer)dr.readStorable()); -// fContentProducers.read(dr); - -// // finally add the popup menu -// setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - - } - - /** - * Writes the figure to StorableOutput - * - * @param dw the output storable - */ - public void write(StorableOutput dw) { - super.write(dw); - - dw.writeStorable(getFrameFigure()); - dw.writeBoolean(usesDirectDraw()); - dw.writeBoolean(isRawHTML()); -// dw.writeStorable(getIntrinsicContentProducer()); -// fContentProducers.write(dw); - } - - /** - * A text area figure uses the "LeftMargin", "RightMargin", - * "TopMargin", "BottomMargin", "TabSize", "FontSize", "FontStyle", and "FontName" - * attributes - * - * @param name The new attribute name - * @param value The new attribute value - */ - public void setAttribute(FigureAttributeConstant name, Object value) { - super.setAttribute(name, value); - markImageDirty(); - } - - /** - * Gets the rawHTML attribute of the HTMLTextAreaFigure object.<br> - * In RawHTML mode, the figure does not add any HTML formatting information so it's - * the user's responsibility to handle the whole displayed contents - * - * @return The rawHTML value - */ - public boolean isRawHTML() { - return fRawHTML; - } - - /** - * Sets the rawHTML attribute of the HTMLTextAreaFigure object - * - * @param newRawHTML The new rawHTML value - */ - public void setRawHTML(boolean newRawHTML) { - fRawHTML = newRawHTML; - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - } - - /** - * Gets the IntrinsicContentProducer attribute of the HTMLTextAreaFigure object.<br> - * The intrinsic producer produces contents for the basic figure's attributes - * - * @return The IntrinsicContentProducer value - */ - protected ContentProducer getIntrinsicContentProducer() { - return fIntrinsicContentProducer; - } - - /** - * Sets the IntrinsicContentProducer attribute of the HTMLTextAreaFigure object - * - * @param newIntrinsicContentProducer The new IntrinsicContentProducer value - */ - public void setIntrinsicContentProducer(ContentProducer newIntrinsicContentProducer) { - fIntrinsicContentProducer = newIntrinsicContentProducer; - } - - /** - * Registers a specific content producer for the target class - * - * @param targetClass the target class - * @param producer the producer - * @return the previously registered producer. May be null - */ - public ContentProducer registerContentProducer(Class targetClass, ContentProducer producer) { - return fContentProducers.registerContentProducer(targetClass, producer); - } - - /** - * Unregisters a registered content producer. - * - * @param producer Description of the Parameter - * @param targetClass Description of the Parameter - */ - public void unregisterContentProducer(Class targetClass, ContentProducer producer) { - fContentProducers.unregisterContentProducer(targetClass, producer); - } - - /** - * Retrieves a suitable content producer for the target class - * - * @param targetClass the target class - * @return The ContentProducer - */ - protected ContentProducer getContentProducer(Class targetClass) { - return fContentProducers.getContentProducer(targetClass); - } - - /** - * Makes a polygon with the same shape and dimensions as the current figure - * - * @return Description of the Return Value - */ - public Polygon getPolygon() { - Polygon polygon = new Polygon(); - - // make an AffineTransofmr that does nothing - AffineTransform at = AffineTransform.getScaleInstance(1, 1); - // and get an iterator on the segments - FlatteningPathIterator pIter = new FlatteningPathIterator( - getClippingShape().getPathIterator(at), - 1); - - double[] coords = new double[6]; - //int pointType; - // iterate on the segments adding the points to the polygon - while (!pIter.isDone()) { - //pointType = pIter.currentSegment(coords); - pIter.currentSegment(coords); - polygon.addPoint((int)coords[0], (int)coords[1]); - pIter.next(); - } - - return polygon; - } - - /** - * Gets the frameFigure attribute of the HTMLTextAreaFigure object - * - * @return The frameFigure value - */ - protected Figure getFrameFigure() { - return fFrameFigure; - } - - /** - * Sets the frameFigure attribute of the HTMLTextAreaFigure object - * - * @param newFrameFigure The new frameFigure value - */ - public void setFrameFigure(Figure newFrameFigure) { - if (fFrameFigure != null) { - fFrameFigure.removeFigureChangeListener(this); - } - fFrameFigure = newFrameFigure; - fFrameFigure.addFigureChangeListener(this); - } - - /** - * Gets the clippingShape attribute of the HTMLTextAreaFigure object - * - * @return The clippingShape value - */ - protected Shape getClippingShape() { - Figure frame = getFrameFigure(); - if (frame instanceof GeometricFigure) { - return ((GeometricFigure)frame).getShape(); - } - return frame.displayBox(); - } - - /** - * handles frame figure's invalidated events - * - * @param e Description of the Parameter - */ - public void figureInvalidated(FigureChangeEvent e) { } - - /** - * handles frame figure's changed events.<br> - * It updates the displayBox to match - * the frame figure's - * - * @param e Description of the Parameter - */ - public void figureChanged(FigureChangeEvent e) { - willChange(); - super.basicDisplayBox(e.getFigure().displayBox().getLocation(), Geom.corner(e.getFigure().displayBox())); - changed(); - } - - /** - * handles frame figure's invalidatedremoved events.<br> - * Never happens because the frame figure is not part of the drawing - * - * @param e Description of the Parameter - */ - public void figureRemoved(FigureChangeEvent e) { } - - /** - * handles frame figure's remove requests events.<br> - * Never happens because the frame figure is not part of the drawing - * - * @param e Description of the Parameter - */ - public void figureRequestRemove(FigureChangeEvent e) { } - - /** - * handles frame figure's update requests events.<br> - * Never happens because the frame figure is not part of the drawing - * - * @param e Description of the Parameter - */ - public void figureRequestUpdate(FigureChangeEvent e) { } - - /** - * Thrown when an entity reference is not correctly encoded - * - * @author gualo - * @created 1 mai 2002 - */ - private class InvalidAttributeMarker extends Exception { - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure() { - return this; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLTextAreaTool.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLTextAreaTool.java deleted file mode 100644 index 7031f779a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/HTMLTextAreaTool.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)HTMLTextAreaTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Font; -import org.jhotdraw.contrib.TextAreaTool; - -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.standard.TextHolder; - -/** - * HTMLTextAreaTool creates or edits HTMLTextAreaFigures.<br> - * Only diffreence with TextAreaFigure is that this allows to edit HTML code - * using a more suitable font than the one defined by the figure. - * - * @author Eduardo Francos - InContext - * @created 28 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class HTMLTextAreaTool extends TextAreaTool { - - /** - * Constructor for the TextAreaTool object - * - * @param newDrawingEditor the managing drawing editor - * @param prototype the prototype for the figure - */ - public HTMLTextAreaTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - /** - * Gets the font to be used for editing the figure.<br> - * Use a simple editing font, easier for HTML editing - * - * @param figure the figure - * @return The font - */ - protected Font getFont(TextHolder figure) { - return new Font("Helvetica", Font.PLAIN, 12); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/PolygonFigureGeometricAdapter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/PolygonFigureGeometricAdapter.java deleted file mode 100644 index 363de24a9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/PolygonFigureGeometricAdapter.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * @(#)PolygonFigureGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Polygon; -import java.awt.Shape; - -import org.jhotdraw.contrib.PolygonFigure; - -/** - * Geometric adapter for the PolygonFigure - * - * @author Eduardo Francos - InContext - * @created 3 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class PolygonFigureGeometricAdapter extends PolygonFigure - implements GeometricFigure { - - /** - * Constructor for the PolyLineFigureGeometricAdapter object - */ - public PolygonFigureGeometricAdapter() { - super(); - } - - /** - *Constructor for the PolyLineFigureGeometricAdapter object - * - * @param x Description of the Parameter - * @param y Description of the Parameter - */ - public PolygonFigureGeometricAdapter(int x, int y) { - super(x, y); - } - - /** - *Constructor for the PolyLineFigureGeometricAdapter object - * - * @param p Description of the Parameter - */ - public PolygonFigureGeometricAdapter(Polygon p) { - super(p); - } - - /** - * Gets the shape attribute of the PolygonFigure object - * - * @return The shape value - */ - public Shape getShape() { - return getInternalPolygon(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceContentProducer.java deleted file mode 100644 index 536cf3aa1..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceContentProducer.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * @(#)ResourceContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.io.IOException; - -import java.io.InputStream; -import java.io.Serializable; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * ResourceContentProducer produces contents from resource in the application's - * CLASSPATH.<br> - * It takes a resource name and loads the resource as a String. - * - * It can either be specific if set for a specific resource, or generic, retrieving - * any resource passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 1 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class ResourceContentProducer extends AbstractContentProducer - implements Serializable { - - /** Description of the Field */ - private String fResourceName; - - /** - * Constructor for the ResourceContentProducer object - */ - public ResourceContentProducer() { } - - /** - * Constructor for the ResourceContentProducer object - * - * @param resourceName Description of the Parameter - */ - public ResourceContentProducer(String resourceName) { - setResourceName(resourceName); - } - - /** - * Gets the content attribute of the ResourceContentProducer object - * - * @param context Description of the Parameter - * @param ctxAttrName Description of the Parameter - * @param ctxAttrValue Description of the Parameter - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - try { - // if we have our own resource then use it - // otherwise use the one supplied - String resourceName = (getResourceName() != null) ? getResourceName() : (String)ctxAttrValue; - - InputStream reader = this.getClass().getResourceAsStream(resourceName); - int available = reader.available(); - byte contents[] = new byte[available]; - reader.read(contents, 0, available); - reader.close(); - return new String(contents); - } - catch (Exception ex) { - ex.printStackTrace(); - return ex.toString(); - } - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeString(getResourceName()); - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - setResourceName (dr.readString()); - } - - public String getResourceName() { - return fResourceName; - } - - protected void setResourceName(String newResourceName) { - fResourceName = newResourceName; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceDisposabilityStrategy.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceDisposabilityStrategy.java deleted file mode 100644 index 79beb8365..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceDisposabilityStrategy.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)ResourceDisposabilityStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -/** - * ResourceDisposabilityStrategy defines the interface for resource disposal - * strategies.<br> - * The strategy defines the logic used to determine which and when a resource can - * be efficiently disposed of. A smarter the strategy leads to few resource - * regeneration. - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public interface ResourceDisposabilityStrategy { - - /** - * Sets the manager holding the resources for this strategy - * - * @param manager The new manager value - */ - public void setManager(DisposableResourceManager manager); - - - /** - * Gets the manager holding the resources for this strategy - * - * @return The manager value - */ - public DisposableResourceManager getManager(); - - /** - * Activates the strategy which starts disposing of resources as fitted - * - * @exception ResourceManagerNotSetException Description of the Exception - */ - public void startDisposing() throws ResourceManagerNotSetException; - - /** - * Deactivates the strategy that stops automatic disposal of resource.<br> - * The millis parameters specifies in milliseconds the time to wait for - * the disposal to stop. After this time the method returns, but the - * deactivation request remain active. - * - * @param millis time to wait for disposal to stop - */ - public void stopDisposing(long millis); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceManagerNotSetException.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceManagerNotSetException.java deleted file mode 100644 index 07d94e3bc..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/ResourceManagerNotSetException.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * @(#)ResourceManagerNotSetException .java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -/** - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class ResourceManagerNotSetException extends Exception { - - /** - * Constructor for the ResourceManagerNotSetException object - */ - public ResourceManagerNotSetException() { } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/RoundRectangleGeometricAdapter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/RoundRectangleGeometricAdapter.java deleted file mode 100644 index e67008eca..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/RoundRectangleGeometricAdapter.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * @(#)RoundRectangleGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.geom.RoundRectangle2D; -import org.jhotdraw.figures.RoundRectangleFigure; - -/** - * Geometric adapter for the RoundRectangleFigure - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class RoundRectangleGeometricAdapter extends RoundRectangleFigure - implements GeometricFigure { - - /** - * Constructor for the RoundRectangleGeometricAdapter object - */ - public RoundRectangleGeometricAdapter() { - super(); - } - - /** - *Constructor for the RoundRectangleGeometricAdapter object - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - */ - public RoundRectangleGeometricAdapter(Point origin, Point corner) { - super(origin, corner); - } - - /** - * Gets the shape attribute of the TriangleFigure object - * - * @return The shape value - */ - public Shape getShape() { - Point arc = getArc(); - Rectangle dspBox = displayBox(); - RoundRectangle2D.Float roundRectangle = new RoundRectangle2D.Float( - dspBox.x, dspBox.y, dspBox.width, dspBox.height, - arc.x, arc.y); - - return roundRectangle; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/StandardDisposableResourceHolder.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/StandardDisposableResourceHolder.java deleted file mode 100644 index ca142d70e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/StandardDisposableResourceHolder.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * @(#)StandardDisposableResourceHolder.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.io.Serializable; - -/** - * StandardDisposableResourceHolder is a standard implementation of the - * DisposableResourceHolder interface - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class StandardDisposableResourceHolder implements DisposableResourceHolder, Serializable { - - /** The holded resource object */ - private Object resource = null; - - /** The dispose delay, default to 60 seconds */ - private long disposeDelay = 60000; - - /** - * The last time the resource was accessed as returned by - * <code>System.currentTimeMillis()</code> - */ - private long lastTimeAccessed = 0; - - /** True if the resource is locked */ - private boolean isLocked = false; - - /** - * Constructor for the StandardDisposableResourceHolder object - */ - public StandardDisposableResourceHolder() { } - - /** - * Constructor for the StandardDisposableResourceHolder object - * - * @param resource Description of the Parameter - */ - public StandardDisposableResourceHolder(Object newResource) { - resource = newResource; - resetDelay(); - } - - /** - * Makes a clone of this - * - * @return the clone - */ - public Object clone() { - StandardDisposableResourceHolder clone = new StandardDisposableResourceHolder(); - clone.setDisposableDelay(this.getDisposableDelay()); - return clone; - } - - /** - * Gets the resource attribute of the StandardDisposableResourceHolder object - * - * @return The resource value - * @exception NullPointerException Description of the Exception - */ - public Object getResource() throws NullPointerException { - if (resource != null) { - resetDelay(); - return resource; - } - throw new NullPointerException(); - } - - /** - * Sets the resource attribute of the StandardDisposableResourceHolder object - * - * @param resource The new resource value - */ - public void setResource(Object newResource) { - resource = newResource; - resetDelay(); - } - - /** - * Sets the disposableDelay attribute of the StandardDisposableResourceHolder object - * - * @param millis The new disposableDelay value - */ - public void setDisposableDelay(long millis) { - disposeDelay = millis; - } - - /** - * Gets the disposableDelay attribute of the StandardDisposableResourceHolder object - * - * @return The disposableDelay value - */ - public long getDisposableDelay() { - return disposeDelay; - } - - /** Disposes of the resource */ - public void dispose() { - resource = null; - } - - /** - * Gets the available attribute of the StandardDisposableResourceHolder object - * - * @return The available value - */ - public boolean isAvailable() { - return (resource != null); - } - - /** - * Locks the resource so it cannot be automatically disposed of until unlock - * is called.<br> - * Explicit disposing by calling dispose() is still possible though. - */ - public void lock() { - isLocked = true; - } - - /** - * Unlocks the resource so it can be automatically disposed of again.<br> - * Explicit disposing by calling dispose() is still possible though. - */ - public void unlock() { - resetDelay(); - isLocked = false; - } - - /** - * True if the resource is locked - * - * @return The locked status - */ - public boolean isLocked() { - return isLocked; - } - - /** - * Gets the lastTimeAccessed attribute of the DisposableResourceHolder object - * - * @return The lastTimeAccessed value - */ - public long getLastTimeAccessed() { - return lastTimeAccessed; - } - - /** Resets the disposing delay so as to restart the time counter */ - public void resetDelay() { - lastTimeAccessed = System.currentTimeMillis(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/StandardDisposableResourceManager.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/StandardDisposableResourceManager.java deleted file mode 100644 index 6a944857e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/StandardDisposableResourceManager.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * @(#)StandardDisposableResourceManager.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.util.Iterator; - -import java.util.WeakHashMap; - -/** - * StandardDisposableResourceManager implements disposable resource management - * using a client supplied strategy.<br> - * - * @author Eduardo Francos - InContext - * @created 2 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class StandardDisposableResourceManager implements DisposableResourceManager { - - /** The registered resources */ - private WeakHashMap resources; - - /** The disposing strategy */ - private ResourceDisposabilityStrategy strategy; - - /** - *Constructor for the StandardDisposableResourceManager object - * - * @param strategy Description of the Parameter - */ - public StandardDisposableResourceManager(ResourceDisposabilityStrategy newStrategy) { - resources = new WeakHashMap(); - setStrategy(newStrategy); - getStrategy().setManager(this); - } - - /** - * Registers a resource to be automatically disposed of - * - * @param resource the resource - */ - public synchronized void registerResource(DisposableResourceHolder resource) { - resources.put(resource, resource); - } - - /** - * Unregisters a resource so it is not automatically GCed.<br> - * If does nothing if the resource was not registered with this manager - * - * @param resource the resource - */ - public synchronized void unregisterResource(DisposableResourceHolder resource) { - resources.remove(resource); - } - - /** - * Gets an iterator on the managed resources - * - * @return The iterator - */ - public Iterator getResources() { - return resources.values().iterator(); - } - - /** - * Description of the Method - * - * @param resource the resource - * @return True if the resource is registered with this manager - */ - public synchronized boolean managesResource(DisposableResourceHolder resource) { - return resources.containsValue(resource); - } - - /** - * Gets the strategy attribute of the StandardDisposableResourceManager object - * - * @return The strategy value - */ - public ResourceDisposabilityStrategy getStrategy() { - return strategy; - } - - /** - * Sets the strategy attribute of the StandardDisposableResourceManager object - * - * @param newStrategy The new strategy value - */ - public void setStrategy(ResourceDisposabilityStrategy newStrategy) { - strategy = newStrategy; - } - - /** - * Activates the strategy which starts disposing of resources as fitted - * - * @exception ResourceManagerNotSetException Description of the Exception - */ - public void startDisposing() throws ResourceManagerNotSetException { - getStrategy().startDisposing(); - } - - /** - * Deactivates the strategy that stops automatic disposal of resource.<br> - * The millis parameters specifies in milliseconds the time to wait for - * the disposal to stop. After this time the method returns, but the - * deactivation request remain active. - * - * @param millis time to wait for disposal to stop - */ - public void stopDisposing(long millis) { - getStrategy().stopDisposing(millis); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/TextHolderContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/TextHolderContentProducer.java deleted file mode 100644 index 548396cf7..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/TextHolderContentProducer.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * @(#)TextHolderContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.io.IOException; - -import java.io.Serializable; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; -import org.jhotdraw.standard.TextHolder; - -/** - * TextAreaFigureContentProducer produces text contents from an existing - * TextHolder figure<br> - * It can either be specific if set for a specific figure, or generic, encoding - * any color passed to the getContents method.<br> - * The main usage of this producer is to embed a "master" or "shared" drawing - * figure into other figures so that updating the master figure automatically - * changes all dependent figures as well. Kind of a hot text snippet if you like<br> - * - * @author Eduardo Francos - InContext - * @created 30 avril 2002 - * @version <$CURRENT_VERSION$> - */ -public class TextHolderContentProducer extends AbstractContentProducer - implements Serializable { - - private TextHolder myTextHolder; - - /** - * Constructor for the TextAreaFigureContentProducer object - */ - public TextHolderContentProducer() { } - - /** - *Constructor for the TextAreaFigureContentProducer object - * - * @param figure Description of the Parameter - */ - public TextHolderContentProducer(TextHolder figure) { - setTextHolder(figure); - } - - /** - * Gets the text from the text figure - * - * @param context Description of the Parameter - * @param ctxAttrName Description of the Parameter - * @param ctxAttrValue Description of the Parameter - * @return The content value - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - // if we have our own figure then use it - // otherwise use the one supplied - TextHolder figure = (getTextHolder() != null) ? getTextHolder() : (TextHolder)ctxAttrValue; - // return the areas text - return figure.getText(); - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getTextHolder().getRepresentingFigure()); - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - setTextHolder((TextHolder)dr.readStorable()); - } - - protected TextHolder getTextHolder() { - return myTextHolder; - } - - public void setTextHolder(TextHolder newFigure) { - myTextHolder = newFigure; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/TriangleFigureGeometricAdapter.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/TriangleFigureGeometricAdapter.java deleted file mode 100644 index 703fbf6f2..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/TriangleFigureGeometricAdapter.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * @(#)TriangleFigureGeometricAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.awt.Point; -import java.awt.Shape; -import org.jhotdraw.contrib.TriangleFigure; - -/** - * Geometric adapter for the TriangleFigure - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - */ -public class TriangleFigureGeometricAdapter extends TriangleFigure - implements GeometricFigure { - - /** - * Constructor for the TriangleFigureGeometricAdapter object - */ - public TriangleFigureGeometricAdapter() { - super(); - } - - /** - *Constructor for the TriangleFigureGeometricAdapter object - * - * @param origin Description of the Parameter - * @param corner Description of the Parameter - */ - public TriangleFigureGeometricAdapter(Point origin, Point corner) { - super(origin, corner); - } - - /** - * Gets the shape attribute of the TriangleFigure object - * - * @return The shape value - */ - public Shape getShape() { - return getPolygon(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/URLContentProducer.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/URLContentProducer.java deleted file mode 100644 index e3dd914bb..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/html/URLContentProducer.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * @(#)URLContentProducer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.html; - -import java.io.IOException; - -import java.io.InputStream; -import java.io.Serializable; -import java.net.URL; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * URLContentProducer produces string contents from URLs.<br> - * Anything the <code>URL.openStream()</code> method can get can be retrieved - * by this producer, that includes resources, local files, web documents, - * web queries, FTP files, and you name it.<br> - * It can either be specific if set for a specific URL, or generic, retrieving - * any URL passed to the getContents method. - * - * @author Eduardo Francos - InContext - * @created 4 mai 2002 - * @version <$CURRENT_VERSION$> - * @todo should we cache the contents for specific URLs? this can - * accelerate things a lot for static documents, but for dynamic ones it - * will complicate things. If cached then if must be in a DisposableResourceHolder - */ -public class URLContentProducer extends FigureDataContentProducer - implements Serializable { - - /** the specific URL */ - private URL fURL; - - /** - * Constructor for the URLContentProducer object - */ - public URLContentProducer() { } - - /** - *Constructor for the URLContentProducer object - * - * @param url the specific URL - */ - public URLContentProducer(URL url) { - setURL(url); - } - - /** - * Retrieves the contents of the URL pointed object - * - * @param context the calling client context - * @param ctxAttrName the attribute name that led to this being called - * @param ctxAttrValue the value of the URL attribute - * @return the contents of the URL pointed object as a string - */ - public Object getContent(ContentProducerContext context, String ctxAttrName, Object ctxAttrValue) { - try { - // if we have our own URL then use it - // otherwise use the one supplied - URL url = (getURL() != null) ? new URL(getURL().toExternalForm()) : new URL(((URL)ctxAttrValue).toExternalForm()); - - InputStream reader = url.openStream(); - int available = reader.available(); - byte contents[] = new byte[available]; - reader.read(contents, 0, available); - reader.close(); - return new String(contents); - } - catch (Exception ex) { - ex.printStackTrace(); - return ex.toString(); - } - } - - /** - * Writes the storable - * - * @param dw the storable output - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeBoolean((getURL() != null)); - if (getURL() != null) { - dw.writeString(getURL().toExternalForm()); - } - } - - /** - * Writes the storable - * - * @param dr the storable input - * @exception IOException thrown by called methods - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - boolean hasURL = dr.readBoolean(); - if (hasURL) { - setURL(new URL(dr.readString())); - } - } - - public URL getURL() { - return fURL; - } - - protected void setURL(URL newURL) { - fURL = newURL; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/AreaTracker.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/AreaTracker.java deleted file mode 100644 index 6c9c36bb1..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/AreaTracker.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * @(#)AreaTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.zoom; - -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.standard.AbstractTool; - -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * A rubberband area tracker. It can be extended to do anything with - * the resulting area, e.g. select it or zoom it. This code is - * derived from SelectAreaTracker, which is a bit too specific to - * allow for extension. - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public abstract class AreaTracker extends AbstractTool { - - private Rectangle area; - - protected AreaTracker(DrawingEditor editor) { - super(editor); - } - - public Rectangle getArea() { - return new Rectangle(area.x, area.y, area.width, area.height); - } - - public void mouseDown(MouseEvent e, int x, int y) { - // use event coordinates to supress any kind of - // transformations like constraining points to a grid - super.mouseDown(e, e.getX(), e.getY()); - rubberBand(getAnchorX(), getAnchorY(), getAnchorX(), getAnchorY()); - } - - public void mouseDrag(MouseEvent e, int x, int y) { - super.mouseDrag(e, x, y); - eraseRubberBand(); - rubberBand(getAnchorX(), getAnchorY(), x, y); - } - - public void mouseUp(MouseEvent e, int x, int y) { - super.mouseUp(e, x, y); - eraseRubberBand(); - } - - private void rubberBand(int x1, int y1, int x2, int y2) { - area = new Rectangle(new Point(x1, y1)); - area.add(new Point(x2, y2)); - drawXORRect(area); - } - - private void eraseRubberBand() { - drawXORRect(area); - } - - private void drawXORRect(Rectangle r) { - Graphics g = view().getGraphics(); - g.setXORMode(view().getBackground()); - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/DoubleBufferImage.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/DoubleBufferImage.java deleted file mode 100644 index df17f5e5d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/DoubleBufferImage.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * @(#)DoubleBufferImage.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.zoom; - -import java.awt.*; -import java.awt.image.ImageObserver; -import java.awt.image.ImageProducer; - -/** - * A DoubleBufferImage is an image that scaling components, such as a - * ZoomDrawingView, use for double buffering. Drawing into this image - * is scaled, but when the image is written to the screen, no more - * scaling occurs. This is ensured by the implementation here and - * by the corresponding drawImage methods in ScalingGraphics. - * - * Note: this class is only needed for a JDK1.1 compliant implementation - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class DoubleBufferImage extends java.awt.Image { - - private Image real; - private double scale; - - public DoubleBufferImage(Image newReal, double newScale) { - real = newReal; - scale = newScale; - } - - public Image getRealImage() { - return real; - } - - public void flush() { - real.flush(); - } - - public Graphics getGraphics() { - // Return an appropriate scaling graphics context, - // so that all drawing operations into this image - // are scaled. - ScalingGraphics result = new ScalingGraphics(real.getGraphics()); - result.setScale(scale); - return result; - } - - public int getHeight(ImageObserver observer) { - return real.getHeight(observer); - } - - public Object getProperty(String name, ImageObserver observer) { - return real.getProperty(name, observer); - } - - public Image getScaledInstance(int width, int height, int hints) { - return real.getScaledInstance(width, height, hints); - } - - public ImageProducer getSource() { - return real.getSource(); - } - - public int getWidth(ImageObserver observer) { - return real.getWidth(observer); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/MiniMapZoomableView.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/MiniMapZoomableView.java deleted file mode 100644 index 24f36f981..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/MiniMapZoomableView.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @(#)MiniMapZoomableView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.zoom; - -import org.jhotdraw.contrib.MiniMapView; -import org.jhotdraw.framework.DrawingView; - -import java.awt.geom.AffineTransform; -import java.awt.geom.NoninvertibleTransformException; -import javax.swing.JScrollPane; - -/** - * Specialized sub-class of MiniMapView to handle the zooming ability of the ZoomDrawingView in JHotDraw. This subclass has been enhanced - * to take into consideration that the scrollpane's content may itself be altered by a transform (namely a scaling transform). - * - * @author S. Ruman (sruman@rogers.com) - * @version <$CURRENT_VERSION$> - */ -public class MiniMapZoomableView extends MiniMapView { - public MiniMapZoomableView(DrawingView newMappedDrawingView, JScrollPane subject) { - super(newMappedDrawingView, subject); - } - -// Overridden - public AffineTransform getInverseSubjectTransform() { - double subjectsScale = ((ZoomDrawingView)getMappedComponent()).getScale(); - - AffineTransform at = null; - try { - at = AffineTransform.getScaleInstance(subjectsScale, subjectsScale).createInverse(); // undo the zoom of the zoomable drawing view - } - catch (NoninvertibleTransformException nte) { - // all scale-only transforms should be invertable - } - - return at; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ScalingGraphics.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ScalingGraphics.java deleted file mode 100644 index 0809812c2..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ScalingGraphics.java +++ /dev/null @@ -1,430 +0,0 @@ -/* - * @(#)ScalingGraphics.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.zoom; - -import java.awt.*; -import java.awt.image.ImageObserver; - -/** - * A graphics context that can scale to an arbitrary factor. - * - * Note: this class is only needed for a JDK1.1 compliant implementation - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ScalingGraphics extends java.awt.Graphics { - - /** - * The scale used for all drawing operations. - */ - private double scale = 1.0; - - /** - * The actual graphics context to which drawing is delegated. - */ - private Graphics real; - - /** - * The font with which the user thinks he is drawing. - * On the real graphics context, a scaled font is substituted - * for it (which may or may not be precisely to scale). - */ - private Font userFont; - - /** - * The current clipping rectangle, in user coordinates. - * Cached here to avoid unnecessary scaling back and forth. - */ - private Rectangle userClip; - - - public ScalingGraphics(Graphics realGraphics) { - real = realGraphics; - } - - /** - * Sets the scale to be used for any subsequent drawing operations. - * All coordinates are multiplied by this value in both x- and - * y-direction before drawing. Thus, a value of 1.0 means no - * scaling, smaller values shrink the picture, larger ones enlarge - * it. - */ - public void setScale(double newScale) { - scale = newScale; - } - - /** - * Returns the scale factor currently used for drawing operations. - * @see #setScale - */ - public double getScale() { - return scale; - } - - /** - * Returns the font that should be substituted for the - * given font at the given scale. - */ - private static Font scaledFont(Font f, double scale) { - int size = f.getSize(); - int scaledSize = (int) (size * scale); - //if (scaledSize < 6) scaledSize = 6; - return new Font(f.getFamily(), f.getStyle(), scaledSize); - } - - /** - * Scales a shape to the given scale. - */ - private static Shape scaledShape(Shape s, double scale) { - if (s instanceof Rectangle) { - Rectangle r = (Rectangle) s; - return new Rectangle((int) (r.x * scale), (int) (r.y * scale), - (int) (r.width * scale), (int) (r.height * scale)); - } - else { - throw new RuntimeException("Cannot scale shape: " + s.getClass().getName()); - } - } - - // delegating implementations below this line - - public Graphics create() { - Graphics realCopy = real.create(); - ScalingGraphics result = new ScalingGraphics(realCopy); - result.setScale(getScale()); - return result; - } - - public void translate(int x, int y) { - real.translate((int) (x * scale), (int) (y * scale)); - } - - public Color getColor() { - return real.getColor(); - } - - public void setColor(Color c) { - real.setColor(c); - } - - public void setPaintMode() { - real.setPaintMode(); - } - - public void setXORMode(Color c1) { - real.setXORMode(c1); - } - - public Font getFont() { - // returns the font with which the user thinks he is drawing - if (userFont == null) - userFont = real.getFont(); - return userFont; - } - - public void setFont(Font font) { - userFont = font; - real.setFont(scaledFont(font, scale)); - } - - public FontMetrics getFontMetrics() { - return new ScalingFontMetrics(userFont, real.getFontMetrics()); - } - - public FontMetrics getFontMetrics(Font f) { - // returns a ScalingFontMetrics object that measures distances - // on the real font, and scales them back to user coordinates - return new ScalingFontMetrics(f, - real.getFontMetrics(scaledFont(f, scale))); - } - - public Rectangle getClipBounds() { - return userClip; - } - - public void clipRect(int x, int y, int width, int height) { - if (userClip == null) - userClip = new Rectangle(x, y, width, height); - else - userClip = userClip.intersection(new Rectangle(x, y, width, height)); - real.clipRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void setClip(int x, int y, int width, int height) { - userClip = new Rectangle(x, y, width, height); - real.setClip((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public Shape getClip() { - return userClip; - } - - public void setClip(Shape clip) { - userClip = (Rectangle) clip; - if (clip != null) - // Scale the Shape before applying it. - real.setClip(scaledShape(clip, scale)); - else - real.setClip(null); - } - - public void copyArea(int x, int y, int width, int height, - int dx, int dy) { - real.copyArea((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - (int) (dx * scale), (int) (dy * scale)); - } - - public void drawLine(int x1, int y1, int x2, int y2) { - real.drawLine((int) (x1 * scale), (int) (y1 * scale), - (int) (x2 * scale), (int) (y2 * scale)); - } - - public void fillRect(int x, int y, int width, int height) { - real.fillRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void clearRect(int x, int y, int width, int height) { - real.clearRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void drawRoundRect(int x, int y, int width, int height, - int arcWidth, int arcHeight) { - real.drawRoundRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - (int) (arcWidth * scale), (int) (arcHeight * scale)); - } - - public void fillRoundRect(int x, int y, int width, int height, - int arcWidth, int arcHeight) { - real.fillRoundRect((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - (int) (arcWidth * scale), (int) (arcHeight * scale)); - } - - public void drawOval(int x, int y, int width, int height) { - real.drawOval((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void fillOval(int x, int y, int width, int height) { - real.fillOval((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale)); - } - - public void drawArc(int x, int y, int width, int height, - int startAngle, int arcAngle) { - real.drawArc((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - startAngle, arcAngle); - } - - public void fillArc(int x, int y, int width, int height, - int startAngle, int arcAngle) { - real.fillArc((int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - startAngle, arcAngle); - } - - public void drawPolyline(int xPoints[], int yPoints[], - int nPoints) { - int[] realXPoints = new int[nPoints]; - int[] realYPoints = new int[nPoints]; - for (int i = 0; i < nPoints; i++) { - realXPoints[i] = (int) (xPoints[i] * scale); - realYPoints[i] = (int) (yPoints[i] * scale); - } - real.drawPolyline(realXPoints, realYPoints, nPoints); - } - - public void drawPolygon(int xPoints[], int yPoints[], - int nPoints) { - int[] realXPoints = new int[nPoints]; - int[] realYPoints = new int[nPoints]; - for (int i = 0; i < nPoints; i++) { - realXPoints[i] = (int) (xPoints[i] * scale); - realYPoints[i] = (int) (yPoints[i] * scale); - } - real.drawPolygon(realXPoints, realYPoints, nPoints); - } - - public void fillPolygon(int xPoints[], int yPoints[], - int nPoints) { - int[] realXPoints = new int[nPoints]; - int[] realYPoints = new int[nPoints]; - for (int i = 0; i < nPoints; i++) { - realXPoints[i] = (int) (xPoints[i] * scale); - realYPoints[i] = (int) (yPoints[i] * scale); - } - real.fillPolygon(realXPoints, realYPoints, nPoints); - } - - public void drawString(String str, int x, int y) { - real.drawString(str, (int) (x * scale), (int) (y * scale)); - } - - // drop this method if using jdk 1.1 - public void drawString(java.text.AttributedCharacterIterator iterator, - int x, int y) { - real.drawString(iterator, (int) (x * scale), (int) (y * scale)); - } - - public boolean drawImage(Image img, int x, int y, - ImageObserver observer) { - // DoubleBufferImages must not be scaled. - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - x, y, observer); - else - return real.drawImage(img, (int) (x * scale), (int) (y * scale), - (int) (img.getWidth(observer) * scale), - (int) (img.getHeight(observer) * scale), - observer); - } - - public boolean drawImage(Image img, int x, int y, - int width, int height, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - x, y, width, height, observer); - else - return real.drawImage(img, (int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - observer); - } - - public boolean drawImage(Image img, int x, int y, - Color bgcolor, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - x, y, bgcolor, observer); - else - return real.drawImage(img, (int) (x * scale), (int) (y * scale), - (int) (img.getWidth(observer) * scale), - (int) (img.getHeight(observer) * scale), - bgcolor, observer); - } - - public boolean drawImage(Image img, int x, int y, - int width, int height, - Color bgcolor, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - x, y, width, height, bgcolor, observer); - else - return real.drawImage(img, (int) (x * scale), (int) (y * scale), - (int) (width * scale), (int) (height * scale), - bgcolor, observer); - } - - public boolean drawImage(Image img, - int dx1, int dy1, int dx2, int dy2, - int sx1, int sy1, int sx2, int sy2, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, - observer); - else - return real.drawImage(img, (int) (dx1 * scale), (int) (dy1 * scale), - (int) (dx2 * scale), (int) (dy2 * scale), - (int) (sx1 * scale), (int) (sy1 * scale), - (int) (sx2 * scale), (int) (sy2 * scale), - observer); - } - - public boolean drawImage(Image img, - int dx1, int dy1, int dx2, int dy2, - int sx1, int sy1, int sx2, int sy2, - Color bgcolor, - ImageObserver observer) { - if (img instanceof DoubleBufferImage) - return real.drawImage(((DoubleBufferImage) img).getRealImage(), - dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, - bgcolor, observer); - else - return real.drawImage(img, (int) (dx1 * scale), (int) (dy1 * scale), - (int) (dx2 * scale), (int) (dy2 * scale), - (int) (sx1 * scale), (int) (sy1 * scale), - (int) (sx2 * scale), (int) (sy2 * scale), - bgcolor, observer); - } - - public void dispose() { - real.dispose(); - } - - /** - * A scaling extension of the FontMetrics class. Measurements - * are performed on the actual, scaled font used on the screen, - * and then scaled back into user space. The object pretends - * to be measuring the font specified by the user when obtaining - * this FontMetrics object. - */ - private class ScalingFontMetrics extends FontMetrics { - - /** - * A FontMetrics object on the real, scaled font. All queries - * are forwarded to this object, and the results scaled back - * into user space. - */ - private FontMetrics real; - - /** - * The font which the user thinks he is asking about. - */ - private Font userFont; - - public ScalingFontMetrics(Font newUserFont, FontMetrics newReal) { - super(null); - userFont = newUserFont; - real = newReal; - } - - // Delegating methods below this line. Only those methods which - // the man page suggests as a minimal subset are implemented. - - public Font getFont() { - return userFont; - } - - public int getAscent() { - return (int) (real.getAscent() / ScalingGraphics.this.getScale()); - } - - public int getLeading() { - return (int) (real.getLeading() / ScalingGraphics.this.getScale()); - } - - public int getMaxAdvance() { - return (int) (real.getMaxAdvance() / ScalingGraphics.this.getScale()); - } - - public int charWidth(char ch) { - return (int) (real.charWidth(ch) / ScalingGraphics.this.getScale()); - } - - public int charsWidth(char[] data, int off, int len) { - return (int) (real.charsWidth(data, off, len) / - ScalingGraphics.this.getScale()); - } - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomAreaTracker.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomAreaTracker.java deleted file mode 100644 index 87b72aaed..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomAreaTracker.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)ZoomAreaTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.zoom; - -import org.jhotdraw.framework.DrawingEditor; - -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ZoomAreaTracker extends AreaTracker { - - public ZoomAreaTracker(DrawingEditor editor) { - super(editor); - } - - public void mouseUp(MouseEvent e, int x, int y) { - Rectangle zoomArea = getArea(); - super.mouseUp(e, x, y); - if (zoomArea.width > 4 && zoomArea.height > 4) - ((ZoomDrawingView) view()).zoom(zoomArea.x, zoomArea.y, - zoomArea.width, zoomArea.height); - } - -} - - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomCommand.java deleted file mode 100644 index 639bff148..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomCommand.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * @(#)ZoomCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.contrib.zoom; - -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.framework.JHotDrawRuntimeException; - -import org.jhotdraw.standard.AbstractCommand; - -/** - * A ZoomCommand allows for applying a zoom factor to a ZoomDrawingView.<br> - * Several ZoomCommand objects can be created in a menu or toolbar, set to various - * predefined zoom factors - * - * @author Eduardo Francos - * @created 26 april 2002 - * @version <CURRENT_VERSION> - */ -public class ZoomCommand extends AbstractCommand { - /** The scale factor to apply */ - protected float scale = 1.0f; - - /** - * Constructor for the ZoomCommand object - * - * @param name the command name - * @param scale Description of the Parameter - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public ZoomCommand(String newSame, float newScale, DrawingEditor newDrawingEditor) { - super(newSame, newDrawingEditor, true); - scale = newScale; - } - - - /** Executes the command */ - public void execute() { - super.execute(); - zoomView().zoom(scale); - } - - - /** - * Sets the zoom factor of the view - * - * @return ZoomDrawingView currently active in the editor - */ - public ZoomDrawingView zoomView() { - Object view = super.view(); - if (view instanceof ZoomDrawingView) { - return (ZoomDrawingView)view; - } - throw new JHotDrawRuntimeException("execute should NOT be getting called when view not instanceof ZoomDrawingView"); - } - - - /** - * Gets the scale attribute of the ZoomCommand object - * - * @return The scale value - */ - public float getScale() { - return scale; - } - - - /** - * Sets the scale attribute of the ZoomCommand object - * - * @param newScale The new scale value - */ - public void setScale(float newScale) { - scale = newScale; - } - - - /** - * Returns true if the command is executable with the current view - * - * @return true iff the view is a ZoomDrawingView - */ - protected boolean isExecutableWithView() { - return (view() instanceof ZoomDrawingView); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomDrawingView.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomDrawingView.java deleted file mode 100644 index c8e0335a7..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomDrawingView.java +++ /dev/null @@ -1,477 +0,0 @@ -/* - * @(#)ZoomDrawingView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.zoom; - -import org.jhotdraw.framework.Drawing; -import org.jhotdraw.framework.DrawingChangeEvent; -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.framework.JHotDrawRuntimeException; -import org.jhotdraw.standard.StandardDrawing; -import org.jhotdraw.standard.StandardDrawingView; -import org.jhotdraw.util.Geom; - -import javax.swing.JViewport; -import java.awt.*; -import java.awt.event.*; -import java.awt.geom.AffineTransform; - -/** - * A view that can display drawings at an arbitrary scale. - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ZoomDrawingView extends StandardDrawingView { - - /** - * The current scaling factor - */ - private double scale = 1.0; - - /** - * The zooming speed, meaning the scaling factor change speed when doing - * zoomIn/zoomOut operations.<br> - * Default of 2.0 is increase 100% or decrease 50% the current factor.<br> - * Can be changed dynamically by clients using the setter method - */ - private double zoomSpeed = 2.0; - - public ZoomDrawingView(DrawingEditor editor) { - this(editor, MINIMUM_WIDTH, MINIMUM_HEIGHT); - } - - public ZoomDrawingView(DrawingEditor editor, int width, int height) { - super(editor, width, height); - } - - /** - * @return The current zoom scale of this view. The dimensions of - * figures are multiplied by this number before display. - */ - public final double getScale() { - return scale; - } - - /** - * Sets a new zoom scale for this view. The dimensions of figures - * are multiplied by this number before display. - */ - private void setScale(double newScale) { - // "de"-scale with old scale - Dimension oldSize = getUserSize(); - scale = newScale; - // re-scale with new scale - setUserSize(oldSize.width, oldSize.height); - centralize(drawing()); - forceRedraw(); - } - - private void forceRedraw() { - drawingInvalidated(new DrawingChangeEvent - (drawing(), new Rectangle(getSize()))); - repairDamage(); - } - - /** - * Sets the size of this view in user coordinates. The size of the view - * on the screen will be this size, multiplied by the current scale. - */ - public void setUserSize(int width, int height) { - setSize((int) (width * getScale()), - (int) (height * getScale())); - } - - /** - * Sets the size of this view in user coordinates. The size of the view - * on the screen will be this size, multiplied by the current scale. - */ - public void setUserSize(Dimension d) { - setUserSize(d.width, d.height); - } - - /** - * @return the size of this view, in screen coordinates - */ - public Dimension getSize() { - return super.getSize(); - } - - public Dimension getViewportSize() { - return getParent().getSize(); - } - - protected boolean hasZoomSupport() { - return getParent() instanceof JViewport; - } - - /** - * Sets the coordinates of the left top corner displayed by the view.<br> - */ - public void setOriginPosition(Point newOrigin) { - setViewPosition(newOrigin); - forceRedraw(); - } - - protected void setViewPosition(Point newPosition) { - ((JViewport)getParent()).setViewPosition(newPosition); - } - - /** - * @return The size of this view, in user coordinates. The size - * on the screen is this size, multiplied by the current scale. - */ - public Dimension getUserSize() { - Dimension screenSize = getSize(); - return new Dimension((int) (screenSize.width / getScale()), - (int) (screenSize.height / getScale())); - } - - /** - * Readjusts this view and its containing ScrollPane to display the - * given rectangle, which is given in user coordinates. This method - * only works if this view is contained in a JViewport. It throws - * a RuntimeException otherwise. - */ - public void zoom(int x, int y, int width, int height) { - if (hasZoomSupport()) { - Dimension viewportSize = getViewportSize(); - double xScale = (double) viewportSize.width / (double) width; - double yScale = (double) viewportSize.height / (double) height; - double newScale = Math.min(xScale, yScale); - - // "de"-scale with old scale - Dimension userSize = getUserSize(); - this.scale = newScale; - // re-scale with new scale - setUserSize(userSize); - - revalidate(); - setViewPosition( - new Point((int) (x * getScale()), (int) (y * getScale()))); - forceRedraw(); - } - else { - throw new JHotDrawRuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - /** - * Set this view's scale factor - */ - public void zoom(float newScale) { - if (hasZoomSupport()) { - JViewport viewport = (JViewport) getParent(); - Dimension viewportSize = viewport.getSize(); - Dimension userSize = getUserSize(); - scale = newScale; - Point viewOrg = viewport.getViewPosition(); - viewOrg.x = viewOrg.x + (viewportSize.width / 2); - viewOrg.y = viewOrg.y + (viewportSize.height / 2); - int xScreen = (int) (viewOrg.x * scale); - int yScreen = (int) (viewOrg.y * scale); - int xOrigin = xScreen - viewportSize.width / 2; - int yOrigin = yScreen - viewportSize.height / 2; - if (xOrigin < 0) xOrigin = 0; - if (yOrigin < 0) yOrigin = 0; - setUserSize(userSize); - revalidate(); - viewport.setViewPosition(new Point(xOrigin, yOrigin)); - forceRedraw(); - } - else { - throw new JHotDrawRuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - /** - * Zooms out by a factor of two, keeping point (x,y), which is given - * in user coordinates, in the center. - */ - public void zoomOut(int x, int y) { - if (hasZoomSupport()) { - Dimension viewportSize = getViewportSize(); - // "de"-scale with old scale - Dimension userSize = getUserSize(); - this.scale = getScale() / getZoomSpeed(); - int xScreen = (int) (x * getScale()); - int yScreen = (int) (y * getScale()); - int xOrigin = xScreen - viewportSize.width / 2; - int yOrigin = yScreen - viewportSize.height / 2; - if (xOrigin < 0) xOrigin = 0; - if (yOrigin < 0) yOrigin = 0; - // re-scale with new scale - setUserSize(userSize); - revalidate(); - setViewPosition(new Point(xOrigin, yOrigin)); - forceRedraw(); - } - else { - throw new JHotDrawRuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - /** - * InContext - * Zooms in by a factor of the current scale, keeping point (x,y), which is given - * in user coordinates, in the center. - */ - public void zoomIn(int x, int y) { - if (hasZoomSupport()) { - JViewport viewport = (JViewport) getParent(); - Dimension viewportSize = viewport.getSize(); - Dimension userSize = getUserSize(); - this.scale = getScale() * getZoomSpeed(); - int xScreen = (int) (x * getScale()); - int yScreen = (int) (y * getScale()); - int xOrigin = xScreen - viewportSize.width / 2; - int yOrigin = yScreen - viewportSize.height / 2; - if (xOrigin < 0) xOrigin = 0; - if (yOrigin < 0) yOrigin = 0; - setUserSize(userSize); - revalidate(); - viewport.setViewPosition(new Point(xOrigin, yOrigin)); - forceRedraw(); - } - else { - throw new JHotDrawRuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - /** - * Sets the zoom scale to 1.0 and adjusts the scroll pane - * so that point (x, y) is in the center. - */ - public void deZoom(int x, int y) { - if (hasZoomSupport()) { - Dimension viewportSize = getViewportSize(); - Dimension userSize = getUserSize(); - int xOrigin = x - viewportSize.width / 2; - int yOrigin = y - viewportSize.height / 2; - if (xOrigin < 0) xOrigin = 0; - if (yOrigin < 0) yOrigin = 0; - this.scale = 1.0; - setUserSize(userSize); - revalidate(); - setViewPosition(new Point((int) (xOrigin), - (int) (yOrigin))); - forceRedraw(); - } - else { - throw new JHotDrawRuntimeException - ("zooming only works if this view is contained in a ScrollPane"); - } - } - - public void paint(Graphics g) { - super.paint(transformGraphics(g, getScale())); - } - - public Graphics getGraphics() { - return transformGraphics(super.getGraphics(), getScale()); - } - - private final Graphics transformGraphics(Graphics g, double currentScale) { - if (currentScale != 1.0) { - Graphics2D g2 = (Graphics2D) g; - // Don't use setTransform() here because that would destroy - // any transformation that Swing sets for partial redrawing. - // Simply add our own transformation to any existing one. - g2.transform(AffineTransform.getScaleInstance(currentScale, currentScale)); - } - return g; - } - - /** - * Constrain to user coordinates, not screen coordinates. - */ - protected Point constrainPoint(Point p) { - Dimension size = getSize(); - p.x = Geom.range(1, (int) (size.width / getScale()), p.x); - p.y = Geom.range(1, (int) (size.height / getScale()), p.y); - if (getConstrainer() != null) { - return getConstrainer().constrainPoint(p); - } - return p; - } - - public void drawBackground(Graphics g) { - g.setColor(getBackground()); - g.fillRect(0, 0, - (int) (getBounds().width / getScale()), - (int) (getBounds().height / getScale())); - } - - private void centralize(Drawing d, Dimension bounds) { - Point boundsCenter = new Point(bounds.width / 2, bounds.height / 2); - Rectangle r = ((StandardDrawing) d).displayBox(); - Point drawingCenter = new Point(r.x + r.width / 2, r.y + r.height / 2); - int diffX = boundsCenter.x - drawingCenter.x; - int diffY = boundsCenter.y - drawingCenter.y; - if (diffX != 0 || diffY != 0) { - for (FigureEnumeration fe = d.figures(); fe.hasNextFigure();) { - fe.nextFigure().moveBy(diffX, diffY); - } - } - } - - private void centralize(Drawing d) { - centralize(d, getUserSize()); - } - - public void setDrawing(Drawing d) { - super.setDrawing(d); - - Rectangle r = ((StandardDrawing) d).displayBox(); - //Dimension drawingSize = new Dimension(r.width, r.height); - Dimension viewportSize = new Dimension(r.width, r.height); - if (getParent() != null) { - viewportSize = getViewportSize(); - } -/* - Dimension userSize = new Dimension(viewportSize); - this.scale = 1.0; - - while (drawingSize.width > userSize.width || - drawingSize.height > userSize.height) { - this.scale = getScale() / 2.0; - userSize.width = userSize.width * 2; - userSize.height = userSize.height * 2; - } - centralize(d, userSize); -*/ - super.setPreferredSize(viewportSize); - super.setSize(viewportSize); - revalidate(); - } - - public Dimension getMinimumSize() { - return super.getSize(); - } - - public Dimension getPreferredSize() { - return getMinimumSize(); - } - - /** - * Overridden to scale damage to screen coordinates. - */ - public void repairDamage() { - Rectangle damagedArea = getDamage(); - if (damagedArea != null) { - repaint((int) (damagedArea.x * getScale()), - (int) (damagedArea.y * getScale()), - (int) (damagedArea.width * getScale()), - (int) (damagedArea.height * getScale())); - setDamage(null); - } - } - - /** - * Overridden to accumulate damage in an instance variable of this class. - */ - public void drawingInvalidated(DrawingChangeEvent e) { - Rectangle r = e.getInvalidatedRectangle(); - if (getDamage() == null) { - setDamage(r); - } - else { - Rectangle damagedArea = getDamage(); - damagedArea.add(r); - // the returned rectange may be a clone so we better set it again - setDamage(damagedArea); - } - } - - /** - * @return a new MouseEvent, the coordinates of which are transformed - * to compensate for the current zoom factor - */ - private MouseEvent createScaledEvent(MouseEvent e) { - return new MouseEvent(e.getComponent(), - e.getID(), - e.getWhen(), - e.getModifiers(), - (int) (e.getX() / getScale()), - (int) (e.getY() / getScale()), - e.getClickCount(), - e.isPopupTrigger()); - } - - - protected MouseListener createMouseListener() { - return new StandardDrawingView.DrawingViewMouseListener() { - public void mousePressed(MouseEvent e) { - super.mousePressed(createScaledEvent(e)); - } - public void mouseReleased(MouseEvent e) { - super.mouseReleased(createScaledEvent(e)); - } - }; - } - - protected MouseMotionListener createMouseMotionListener() { - return new StandardDrawingView.DrawingViewMouseMotionListener() { - public void mouseDragged(MouseEvent e) { - super.mouseDragged(createScaledEvent(e)); - } - public void mouseMoved(MouseEvent e) { - super.mouseMoved(createScaledEvent(e)); - } - }; - } - - protected KeyListener createKeyListener() { - return new StandardDrawingView.DrawingViewKeyListener() { - public void keyPressed(KeyEvent e) { - super.keyPressed(e); - if (e.getKeyChar() == ' ') { - forceRedraw(); - } - else if (e.getKeyChar() == 'o') { - setScale(getScale() / getZoomSpeed()); - } - else if (e.getKeyChar() == 'i') { - setScale(getScale() * getZoomSpeed()); - } - else if (e.getKeyChar() == 'c') { - centralize(drawing()); - } - else { - super.keyPressed(e); - } - } - }; - } - - /** - * Returns the current zoom speed - */ - public double getZoomSpeed() - { - return zoomSpeed; - } - - /** - * Set the zoom speed. Will be greater than 1. - */ - public void setZoomSpeed(double newZoomSpeed) - { - // check greater than 1. A smaller value would reverse the zooming - // operation, and a zero value would provoque divide by zero exceptions - zoomSpeed = Math.max(1.1, newZoomSpeed); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomTool.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomTool.java deleted file mode 100644 index d00e86152..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomTool.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * @(#)ZoomTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.zoom; - -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.framework.Tool; -import org.jhotdraw.standard.AbstractTool; - -import java.awt.event.InputEvent; -import java.awt.event.MouseEvent; - -/** - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ZoomTool extends AbstractTool { - - private Tool child; - - public ZoomTool(DrawingEditor editor) { - super(editor); - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - // Added handling for SHIFTed and CTRLed BUTTON3_MASK so that normal - // BUTTON3_MASK does zoomOut, SHIFTed BUTTON3_MASK does zoomIn - // and CTRLed BUTTON3_MASK does deZoom - if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0) { - if (child != null) { - return; - } - view().freezeView(); - child = new ZoomAreaTracker(editor()); - child.mouseDown(e, x, y); - } - else if ((e.getModifiers() & InputEvent.BUTTON2_MASK) != 0) { - ((ZoomDrawingView) view()).deZoom(x, y); - } - else if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0) { - if ((e.getModifiers() & InputEvent.SHIFT_MASK) != 0) { - ((ZoomDrawingView)view()).zoomIn(x, y); - } - else if ((e.getModifiers() & InputEvent.CTRL_MASK) != 0) { - - ((ZoomDrawingView) view()).deZoom(x, y); - } - else { - ((ZoomDrawingView)view()).zoomOut(x, y); - } - } - } - - public void mouseDrag(MouseEvent e, int x, int y) { - if (child != null) { - child.mouseDrag(e, x, y); - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - if (child != null) { - view().unfreezeView(); - child.mouseUp(e, x, y); - } - child = null; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomUpdateStrategy.java b/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomUpdateStrategy.java deleted file mode 100644 index b313b0934..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/contrib/zoom/ZoomUpdateStrategy.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * @(#)ZoomUpdateStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.contrib.zoom; - -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.framework.Painter; - -import java.awt.*; - -/** - * A variant of the BufferedUpdateStrategy that handles clipping - * rectangles correctly in the presence of zooming. - * @see org.jhotdraw.standard.BufferedUpdateStrategy - * - * @author Andre Spiegel <spiegel@gnu.org> - * @version <$CURRENT_VERSION$> - */ -public class ZoomUpdateStrategy implements Painter { - - /** - * The offscreen image - */ - transient private Image fOffscreen; - private int fImagewidth = -1; - private int fImageheight = -1; - - /** - * Draws the view contents. - */ - public void draw(Graphics g, DrawingView view) { - // create the buffer if necessary - Dimension d = view.getSize(); - if ((fOffscreen == null) || (d.width != fImagewidth) - || (d.height != fImageheight)) { - fOffscreen = view.createImage(d.width, d.height); - fImagewidth = d.width; - fImageheight = d.height; - } - - Graphics g2 = fOffscreen.getGraphics(); - Rectangle r = g.getClipBounds(); - - if (g2 instanceof ScalingGraphics) { - ScalingGraphics s2 = (ScalingGraphics) g2; - - // AWT sets clipping rectangles in screen coordinates, not user - // coordinates. Therefore, we scale the clipping rectangle to - // user coordinates here, and then apply it to both buffers, - // which scale it back to screen coordinates. - if (r != null) { - // Make the rectangle slightly larger, to compensate - // for integer rounding errors. - r = new Rectangle((int) ((r.x - 2) / s2.getScale()), - (int) ((r.y - 2) / s2.getScale()), - (int) ((r.width + 4) / s2.getScale()), - (int) ((r.height + 4) / s2.getScale())); - g.setClip(r); - } - } - g2.setClip(r); - - view.drawAll(g2); - g.drawImage(fOffscreen, 0, 0, view); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/AbstractLineDecoration.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/AbstractLineDecoration.java deleted file mode 100644 index b31270a09..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/AbstractLineDecoration.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * @(#)AbstractLineDecoration.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.io.*; -import java.awt.*; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; - -/** - * An standard implementation of a line decoration. - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractLineDecoration implements LineDecoration { - - static final long serialVersionUID = 1577970039258356627L; - - private Color fFillColor; - private Color fBorderColor; - private transient Rectangle myBounds; - - public AbstractLineDecoration() { - } - - /** - * Draws the arrow tip in the direction specified by the given two - * points.. (template method) - */ - public void draw(Graphics g, int x1, int y1, int x2, int y2) { - // TBD: reuse the Polygon object - Polygon p = outline(x1, y1, x2, y2); - myBounds = p.getBounds(); - if (getFillColor() == null) { - g.fillPolygon(p.xpoints, p.ypoints, p.npoints); - } - else { - Color drawColor = g.getColor(); - g.setColor(getFillColor()); - g.fillPolygon(p.xpoints, p.ypoints, p.npoints); - g.setColor(drawColor); - } - - if (getBorderColor() != getFillColor()) { - Color drawColor = g.getColor(); - g.setColor(getBorderColor()); - g.drawPolygon(p.xpoints, p.ypoints, p.npoints); - g.setColor(drawColor); - } - } - - /** - * The LineDecoration has only a displayBox after it has been drawn - * at least once. If it has not yet been drawn then a rectangle of size 0 - * is returned. - * @return the display box of a LineDecoration. - */ - public Rectangle displayBox() { - if (myBounds != null) { - return myBounds; - } - else { - return new Rectangle(0, 0); - } - } - - /** - * Hook method to calculates the outline of an arrow tip. - */ - public abstract Polygon outline(int x1, int y1, int x2, int y2); - - /** - * Stores the arrow tip to a StorableOutput. - */ - public void write(StorableOutput dw) { - if (getFillColor() != null) { - FigureAttributes.writeColor(dw, FigureAttributeConstant.FILL_COLOR.getName(), getFillColor()); - } - else { - dw.writeString("no" + FigureAttributeConstant.FILL_COLOR.getName()); - } - - if (getBorderColor() != null) { - FigureAttributes.writeColor(dw, FigureAttributeConstant.FRAME_COLOR.getName(), getBorderColor()); - } - else { - dw.writeString("no" + FigureAttributeConstant.FRAME_COLOR.getName()); - } - } - - /** - * Reads the arrow tip from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - String fillColorId = dr.readString(); - // read color only if one has been written - if (fillColorId.equals(FigureAttributeConstant.FILL_COLOR.getName())) { - setFillColor(FigureAttributes.readColor(dr)); - } - String borderColorId = dr.readString(); - // read color only if one has been written - if (borderColorId.equals("BorderColor") - || borderColorId.equals(FigureAttributeConstant.FRAME_COLOR.getName())) { - setBorderColor(FigureAttributes.readColor(dr)); - } - } - - /** - * Sets color with which arrow is filled - */ - public void setFillColor(Color fillColor) { - fFillColor = fillColor; - } - - /** - * Returns color with which arrow is filled - */ - public Color getFillColor() { - return fFillColor; - } - - /** - * Sets color of arrow's border - */ - public void setBorderColor(Color borderColor) { - fBorderColor = borderColor; - } - - /** - * Returns color of arrow's border - */ - public Color getBorderColor() { - return fBorderColor; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/ArrowTip.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/ArrowTip.java deleted file mode 100644 index 49c01a0f9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/ArrowTip.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * @(#)ArrowTip.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.io.*; -import java.awt.*; - -import org.jhotdraw.util.*; - -/** - * An arrow tip line decoration. - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public class ArrowTip extends AbstractLineDecoration { - - private double fAngle; // pointiness of arrow - private double fOuterRadius; - private double fInnerRadius; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -3459171428373823638L; - private int arrowTipSerializedDataVersion = 1; - - public ArrowTip() { - this(0.40, 8, 8); // this(0.35, 15, 12); - } - - /** - * Constructs an arrow tip with the given angle and radius. - */ - public ArrowTip(double angle, double outerRadius, double innerRadius) { - setAngle(angle); - setOuterRadius(outerRadius); - setInnerRadius(innerRadius); - } - - /** - * Calculates the outline of an arrow tip. - */ - public Polygon outline(int x1, int y1, int x2, int y2) { - double dir = Math.PI/2 - Math.atan2(x2 - x1, y2 - y1); - return outline(x1, y1, dir); - } - - private Polygon outline(int x, int y, double direction) { - Polygon shape = new Polygon(); - - shape.addPoint(x, y); - addPointRelative(shape, x, y, getOuterRadius(), direction - getAngle()); - addPointRelative(shape, x, y, getInnerRadius(), direction); - addPointRelative(shape, x, y, getOuterRadius(), direction + getAngle()); - shape.addPoint(x,y); // Closing the polygon (TEG 97-04-23) - return shape; - } - - private void addPointRelative(Polygon shape, int x, int y, double radius, double angle) { - shape.addPoint( - x + (int) (radius * Math.cos(angle)), - y + (int) (radius * Math.sin(angle))); - } - - /** - * Stores the arrow tip to a StorableOutput. - */ - public void write(StorableOutput dw) { - dw.writeDouble(getAngle()); - dw.writeDouble(getOuterRadius()); - dw.writeDouble(getInnerRadius()); - super.write(dw); - } - - /** - * Reads the arrow tip from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - setAngle(dr.readDouble()); - setOuterRadius(dr.readDouble()); - setInnerRadius(dr.readDouble()); - super.read(dr); - } - - /** - * Sets point angle of arrow. A smaller angle leads to a pointier arrow. - * The angle is measured between the arrow line and one of the points - * at the side of the arrow. Thus, the total angle at the arrow tip - * is the double of the angle specified. - */ - protected void setAngle(double newAngle) { - fAngle = newAngle; - } - - /** - * Returns point angle of arrow. A smaller angle leads to a pointier arrow. - * The angle is measured between the arrow line and one of the points - * at the side of the arrow. Thus, the total angle at the arrow tip - * is the double of the angle specified. - */ - protected double getAngle() { - return fAngle; - } - - /** - * Sets the inner radius - */ - protected void setInnerRadius(double newInnerRadius) { - fInnerRadius = newInnerRadius; - } - - /** - * Returns the inner radius - */ - protected double getInnerRadius() { - return fInnerRadius; - } - - /** - * Sets the outer radius - */ - protected void setOuterRadius(double newOuterRadius) { - fOuterRadius = newOuterRadius; - } - - /** - * Returns the outer radius - */ - protected double getOuterRadius() { - return fOuterRadius; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/AttributeFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/AttributeFigure.java deleted file mode 100644 index 26f2599cd..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/AttributeFigure.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * @(#)AttributeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.util.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; - -import java.awt.*; -import java.io.*; - -/** - * A figure that can keep track of an open ended set of attributes. - * The attributes are stored in a dictionary implemented by - * FigureAttributes. - * - * @see Figure - * @see Handle - * @see FigureAttributes - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AttributeFigure extends AbstractFigure { - - /** - * The attributes of a figure. Each figure can have - * an open ended set of attributes. Attributes are - * identified by name. - * @see #getAttribute - * @see #setAttribute - */ - private FigureAttributes fAttributes; - - /** - * The default attributes associated with a figure. - * If a figure doesn't have an attribute set, a default - * value from this shared attribute set is returned. - * @see #getAttribute - * @see #setAttribute - */ - private static FigureAttributes fgDefaultAttributes = null; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -10857585979273442L; - private int attributeFigureSerializedDataVersion = 1; - - protected AttributeFigure() { } - - /** - * Draws the figure in the given graphics. Draw is a template - * method calling drawBackground followed by drawFrame. - */ - public void draw(Graphics g) { - Color fill = getFillColor(); - if (!ColorMap.isTransparent(fill)) { - g.setColor(fill); - drawBackground(g); - } - Color frame = getFrameColor(); - if (!ColorMap.isTransparent(frame)) { - g.setColor(frame); - drawFrame(g); - } - } - - /** - * Draws the background of the figure. - * @see #draw - */ - protected void drawBackground(Graphics g) { - } - - /** - * Draws the frame of the figure. - * @see #draw - */ - protected void drawFrame(Graphics g) { - } - - /** - * Gets the fill color of a figure. This is a convenience - * method. - * @see #getAttribute - */ - public Color getFillColor() { - return (Color) getAttribute(FigureAttributeConstant.FILL_COLOR); - } - - /** - * Gets the frame color of a figure. This is a convenience - * method. - * @see #getAttribute - */ - public Color getFrameColor() { - return (Color) getAttribute(FigureAttributeConstant.FRAME_COLOR); - } - - //---- figure attributes ---------------------------------- - - private static void initializeAttributes() { - fgDefaultAttributes = new FigureAttributes(); - fgDefaultAttributes.set(FigureAttributeConstant.FRAME_COLOR, Color.black); - fgDefaultAttributes.set(FigureAttributeConstant.FILL_COLOR, new Color(0x70DB93)); - fgDefaultAttributes.set(FigureAttributeConstant.TEXT_COLOR, Color.black); - fgDefaultAttributes.set(FigureAttributeConstant.ARROW_MODE, new Integer(0)); - fgDefaultAttributes.set(FigureAttributeConstant.FONT_NAME, "Helvetica"); - fgDefaultAttributes.set(FigureAttributeConstant.FONT_SIZE, new Integer(12)); - fgDefaultAttributes.set(FigureAttributeConstant.FONT_STYLE, new Integer(Font.PLAIN)); - } - - /** - * Sets or adds a default value for a named attribute - * @see #getAttribute - */ - public static Object setDefaultAttribute(String name, Object value) { - // save current value to return it - Object currentValue = getDefaultAttribute(name); - - fgDefaultAttributes.set(FigureAttributeConstant.getConstant(name), value); - return currentValue; - } - - /** - * Initializes a default value for a named attribute - * The difference between this method and setDefaultAttribute is that - * if the attribute is already set then it will not be changed.<BR> - * The purpose is to allow more than one source requiring the attribute - * to initialize it, but only the first initialization will be used. - * - * @see #getAttribute - * @see #setDefaultAttribute - */ - public static Object initDefaultAttribute(String name, Object value) { - // get current value - Object currentValue = getDefaultAttribute(name); - - // if it's already there skip the setting - if (currentValue != null) { - return currentValue; - } - - fgDefaultAttributes.set(FigureAttributeConstant.getConstant(name), value); - return null; - } - - /** - * Gets a the default value for a named attribute - * @see #getAttribute - */ - public static Object getDefaultAttribute(String name) { - if (fgDefaultAttributes == null) { - initializeAttributes(); - } - return fgDefaultAttributes.get(FigureAttributeConstant.getConstant(name)); - } - - public static Object getDefaultAttribute(FigureAttributeConstant attributeConstant) { - if (fgDefaultAttributes == null) { - initializeAttributes(); - } - return fgDefaultAttributes.get(attributeConstant); - } - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return getAttribute(FigureAttributeConstant.getConstant(name)); - } - - public Object getAttribute(FigureAttributeConstant attributeConstant) { - if (fAttributes != null) { - if (fAttributes.hasDefined(attributeConstant)) { - return fAttributes.get(attributeConstant); - } - } - return getDefaultAttribute(attributeConstant); - } - - /** - * Sets the named attribute to the new value - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - setAttribute(FigureAttributeConstant.getConstant(name), value); - } - - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - if (fAttributes == null) { - fAttributes = new FigureAttributes(); - } - fAttributes.set(attributeConstant, value); - changed(); - } - - /** - * Stores the Figure to a StorableOutput. - */ - public void write(StorableOutput dw) { - super.write(dw); - if (fAttributes == null) { - dw.writeString("no_attributes"); - } - else { - dw.writeString("attributes"); - fAttributes.write(dw); - } - } - - /** - * Reads the Figure from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - String s = dr.readString(); - if (s.toLowerCase().equals("attributes")) { - fAttributes = new FigureAttributes(); - fAttributes.read(dr); - } - } - - private void writeObject(ObjectOutputStream o) throws IOException { - // Filter out Popup menu: cannot serialize any associated action-Listeners - // Work-around for Java-Bug: 4240860 - Object associatedMenu = getAttribute(FigureAttributeConstant.POPUP_MENU); - if (associatedMenu != null) { - setAttribute(FigureAttributeConstant.POPUP_MENU, null); - } - - o.defaultWriteObject(); - - if (associatedMenu != null) { - setAttribute(FigureAttributeConstant.POPUP_MENU, associatedMenu); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/BorderDecorator.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/BorderDecorator.java deleted file mode 100644 index ced48ba53..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/BorderDecorator.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * @(#)BorderDecorator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; - -/** - * BorderDecorator decorates an arbitrary Figure with - * a border. - * - * @version <$CURRENT_VERSION$> - */ -public class BorderDecorator extends DecoratorFigure { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 1205601808259084917L; - private int borderDecoratorSerializedDataVersion = 1; - - private Point myBorderOffset; - private Color myBorderColor; - private Color myShadowColor; - - public BorderDecorator() { - } - - public BorderDecorator(Figure figure) { - super(figure); - } - - /** - * Performs additional initialization code before the figure is decorated - * Subclasses may override this method. - */ - protected void initialize() { - setBorderOffset(new Point(3,3)); - } - - public void setBorderOffset(Point newBorderOffset) { - myBorderOffset = newBorderOffset; - } - - public Point getBorderOffset() { - if (myBorderOffset == null) { - return new Point(0,0); - } - else { - return myBorderOffset; - } - } - - /** - * Draws a the figure and decorates it with a border. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - super.draw(g); - g.setColor(Color.white); - g.drawLine(r.x, r.y, r.x, r.y + r.height); - g.drawLine(r.x, r.y, r.x + r.width, r.y); - g.setColor(Color.gray); - g.drawLine(r.x + r.width, r.y, r.x + r.width, r.y + r.height); - g.drawLine(r.x , r.y + r.height, r.x + r.width, r.y + r.height); - } - - /** - * Gets the displaybox including the border. - */ - public Rectangle displayBox() { - Rectangle r = getDecoratedFigure().displayBox(); - r.grow(getBorderOffset().x, getBorderOffset().y); - return r; - } - - /** - * Invalidates the figure extended by its border. - */ - public void figureInvalidated(FigureChangeEvent e) { - Rectangle rect = e.getInvalidatedRectangle(); - rect.grow(getBorderOffset().x, getBorderOffset().y); - super.figureInvalidated(new FigureChangeEvent(this, rect, e)); - } - - public Insets connectionInsets() { - Insets i = super.connectionInsets(); - i.top -= getBorderOffset().y; - i.bottom -= getBorderOffset().y; - i.left -= getBorderOffset().x; - i.right -= getBorderOffset().x; - - return i; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/BorderTool.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/BorderTool.java deleted file mode 100644 index 8f101038e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/BorderTool.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * @(#)BorderTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -import java.awt.event.MouseEvent; -import java.awt.event.InputEvent; -import java.util.List; - -/** - * BorderTool decorates the clicked figure with a BorderDecorator. - * - * @see BorderDecorator - * - * @version <$CURRENT_VERSION$> - */ -public class BorderTool extends ActionTool { - - public BorderTool(DrawingEditor editor) { - super(editor); - } - - /** - * Add the touched figure to the selection of an invoke action. - * Overrides ActionTool's mouseDown to allow for peeling the border - * if there is one already. - * This is done by CTRLing the click - * @see #action - */ - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - // if not CTRLed then proceed normally - if ((e.getModifiers() & InputEvent.CTRL_MASK) == 0) { - super.mouseDown(e, x, y); - } - else { - Figure target = drawing().findFigure(x, y); - if ((target != null) && (target != target.getDecoratedFigure())) { - view().addToSelection(target); - reverseAction(target); - } - } - } - - /** - * Decorates the clicked figure with a border. - */ - public void action(Figure figure) { -// Figure replaceFigure = drawing().replace(figure, new BorderDecorator(figure)); - - setUndoActivity(createUndoActivity()); - List l = CollectionsFactory.current().createList(); - l.add(figure); - l.add(new BorderDecorator(figure)); - getUndoActivity().setAffectedFigures(new FigureEnumerator(l)); - ((BorderTool.UndoActivity)getUndoActivity()).replaceAffectedFigures(); - } - - /** - * Peels off the border from the clicked figure. - */ - public void reverseAction(Figure figure) { - setUndoActivity(createUndoActivity()); - List l = CollectionsFactory.current().createList(); - l.add(figure); - l.add(((DecoratorFigure)figure).peelDecoration()); - getUndoActivity().setAffectedFigures(new FigureEnumerator(l)); - ((BorderTool.UndoActivity)getUndoActivity()).replaceAffectedFigures(); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new BorderTool.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - getDrawingView().clearSelection(); - return replaceAffectedFigures(); - } - - public boolean redo() { - if (!isRedoable()) { - return false; - } - getDrawingView().clearSelection(); - return replaceAffectedFigures(); - } - - public boolean replaceAffectedFigures() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - Figure oldFigure = fe.nextFigure(); - - if (!fe.hasNextFigure()) { - return false; - } - Figure replaceFigure = fe.nextFigure(); - - replaceFigure = getDrawingView().drawing().replace(oldFigure, replaceFigure); - List l = CollectionsFactory.current().createList(); - l.add(replaceFigure); - l.add(oldFigure); - setAffectedFigures(new FigureEnumerator(l)); - - return true; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/ChopEllipseConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/ChopEllipseConnector.java deleted file mode 100644 index 73bd6ef85..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/ChopEllipseConnector.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @(#)ChopEllipseConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Geom; - -/** - * A ChopEllipseConnector locates a connection point by - * chopping the connection at the ellipse defined by the - * figure's display box. - * - * @version <$CURRENT_VERSION$> - */ -public class ChopEllipseConnector extends ChopBoxConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -3165091511154766610L; - - public ChopEllipseConnector() { - } - - public ChopEllipseConnector(Figure owner) { - super(owner); - } - - protected Point chop(Figure target, Point from) { - Rectangle r = target.displayBox(); - double angle = Geom.pointToAngle(r, from); - return Geom.ovalAngleToPoint(r, angle); - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/ConnectedTextTool.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/ConnectedTextTool.java deleted file mode 100644 index 3786bcae6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/ConnectedTextTool.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * @(#)ConnectedTextTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Undoable; -import java.awt.event.MouseEvent; - -/** - * Tool to create new or edit existing text figures. - * A new text figure is connected with the clicked figure. - * - * @see org.jhotdraw.standard.TextHolder - * - * @version <$CURRENT_VERSION$> - */ -public class ConnectedTextTool extends TextTool { - - private Figure myConnectedFigure; - - public ConnectedTextTool(DrawingEditor editor, Figure prototype) { - super(editor, prototype); - } - - /** - * If the pressed figure is a TextHolder it can be edited otherwise - * a new text figure is created. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - - if (getTypingTarget() != null) { - TextHolder textHolder = getTypingTarget(); - setConnectedFigure(drawing().findFigureInsideWithout(x, y, textHolder.getRepresentingFigure())); - if ((getConnectedFigure() != null) && (textHolder != null) && (getConnectedFigure().getTextHolder() != textHolder)) { - textHolder.connect(getConnectedFigure().getDecoratedFigure()); - getConnectedFigure().addDependendFigure(getAddedFigure()); - } - } - } - - protected void endEdit() { - super.endEdit(); - if ((getUndoActivity() != null) && (getUndoActivity() instanceof ConnectedTextTool.UndoActivity)) { - ((ConnectedTextTool.UndoActivity)getUndoActivity()).setConnectedFigure(getConnectedFigure()); - } - else if ((getConnectedFigure() != null) && isDeleteTextFigure()) { - getConnectedFigure().removeDependendFigure(getAddedFigure()); - } - } - - protected void setConnectedFigure(Figure pressedFigure) { - myConnectedFigure = pressedFigure; - } - - public Figure getConnectedFigure() { - return myConnectedFigure; - } - - /** - * If the pressed figure is a TextHolder it can be edited otherwise - * a new text figure is created. - */ - public void activate() { - super.activate(); - setConnectedFigure(null); - } - - protected Undoable createDeleteUndoActivity() { - FigureTransferCommand cmd = new DeleteCommand("Delete", editor()); - return new DeleteUndoActivity(cmd, getConnectedFigure()); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new ConnectedTextTool.UndoActivity(view(), getTypingTarget().getText()); - } - - public static class UndoActivity extends TextTool.UndoActivity { - private Figure myConnectedFigure; - - public UndoActivity(DrawingView newDrawingView, String newOriginalText) { - super(newDrawingView, newOriginalText); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - - if (currentFigure.getTextHolder() != null) { - // the text figure didn't exist before - if (!isValidText(getOriginalText())) { - currentFigure.getTextHolder().disconnect(getConnectedFigure()); - } - // the text figure did exist but was remove - else if (!isValidText(getBackupText())) { - currentFigure.getTextHolder().connect(getConnectedFigure()); - } - } - } - - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - // the text figure did exist but was remove - if (!isValidText(getBackupText())) { - currentFigure.getTextHolder().disconnect(getConnectedFigure()); - } - // the text figure didn't exist before - else if (!isValidText(getOriginalText())) { - currentFigure.getTextHolder().connect(getConnectedFigure()); - } - } - } - - return true; - } - - public void setConnectedFigure(Figure newConnectedFigure) { - myConnectedFigure = newConnectedFigure; - } - - public Figure getConnectedFigure() { - return myConnectedFigure; - } - } - - /** - * This class - */ - public static class DeleteUndoActivity extends DeleteCommand.UndoActivity { - private Figure myConnectedFigure; - - public DeleteUndoActivity(FigureTransferCommand cmd, Figure newConnectedFigure) { - super(cmd); - setConnectedFigure(newConnectedFigure); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - currentFigure.getTextHolder().connect(getConnectedFigure().getDecoratedFigure()); - } - } - - return true; - } - - public boolean redo() { - if (!super.redo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - currentFigure.getTextHolder().disconnect(getConnectedFigure().getDecoratedFigure()); - } - } - - return true; - } - - public void setConnectedFigure(Figure newConnectedFigure) { - myConnectedFigure = newConnectedFigure; - } - - public Figure getConnectedFigure() { - return myConnectedFigure; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/ElbowConnection.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/ElbowConnection.java deleted file mode 100644 index 4d14e0eb4..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/ElbowConnection.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * @(#)ElbowConnection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import java.util.List; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -/** - * A LineConnection that constrains a connection to - * orthogonal lines. - * - * @version <$CURRENT_VERSION$> - */ -public class ElbowConnection extends LineConnection { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 2193968743082078559L; - private int elbowConnectionSerializedDataVersion = 1; - - public ElbowConnection() { - super(); - } - - public void updateConnection() { - super.updateConnection(); - updatePoints(); - } - - public void layoutConnection() { - } - - /** - * Gets the handles of the figure. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(fPoints.size()*2); - handles.add(new ChangeConnectionStartHandle(this)); - for (int i = 1; i < fPoints.size()-1; i++) { - handles.add(new NullHandle(this, locator(i))); - } - handles.add(new ChangeConnectionEndHandle(this)); - for (int i = 0; i < fPoints.size()-1; i++) { - handles.add(new ElbowHandle(this, i)); - } - return new HandleEnumerator(handles); - } - - public Locator connectedTextLocator(Figure f) { - return new ElbowTextLocator(); - } - - protected void updatePoints() { - willChange(); - Point start = startPoint(); - Point end = endPoint(); - fPoints.clear(); - fPoints.add(start); - - if (start.x == end.x || start.y == end.y) { - fPoints.add(end); - } - else { - - Rectangle r1 = getStartConnector().owner().displayBox(); - Rectangle r2 = getEndConnector().owner().displayBox(); - - int dir = Geom.direction(r1.x + r1.width/2, r1.y + r1.height/2, - r2.x + r2.width/2, r2.y + r2.height/2); - if (dir == Geom.NORTH || dir == Geom.SOUTH) { - fPoints.add(new Point(start.x, (start.y + end.y)/2)); - fPoints.add(new Point(end.x, (start.y + end.y)/2)); - } - else { - fPoints.add(new Point((start.x + end.x)/2, start.y)); - fPoints.add(new Point((start.x + end.x)/2, end.y)); - } - fPoints.add(end); - } - changed(); - } -} - -class ElbowTextLocator extends AbstractLocator { - public Point locate(Figure owner) { - Point p = owner.center(); - return new Point(p.x, p.y-10); // hack - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/ElbowHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/ElbowHandle.java deleted file mode 100644 index 6d611becb..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/ElbowHandle.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * @(#)ElbowHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Geom; -import java.awt.*; - -/** - * A Handle to move an ElbowConnection left/right or up/down. - * - * @version <$CURRENT_VERSION$> - */ -public class ElbowHandle extends AbstractHandle { - - private int fSegment; - private int fLastX, fLastY; // previous mouse position - - public ElbowHandle(LineConnection owner, int segment) { - super(owner); - fSegment = segment; - } - - public void invokeStart(int x, int y, DrawingView view) { - fLastX = x; - fLastY = y; - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - LineConnection line = ownerConnection(); - Point p1 = line.pointAt(fSegment); - Point p2 = line.pointAt(fSegment+1); - int ddx = x - fLastX; - int ddy = y - fLastY; - - Point np1; - Point np2; - if (isVertical(p1, p2)) { - int cx = constrainX(p1.x + ddx); - np1 = new Point(cx, p1.y); - np2 = new Point(cx, p2.y); - } - else { - int cy = constrainY(p1.y + ddy); - np1 = new Point(p1.x, cy); - np2 = new Point(p2.x, cy); - } - line.setPointAt(np1, fSegment); - line.setPointAt(np2, fSegment+1); - fLastX = x; - fLastY = y; - } - - private boolean isVertical(Point p1, Point p2) { - return p1.x == p2.x; - } - - public Point locate() { - LineConnection line = ownerConnection(); - int segment = Math.min(fSegment, line.pointCount()-2); - Point p1 = line.pointAt(segment); - Point p2 = line.pointAt(segment+1); - return new Point((p1.x + p2.x)/2, (p1.y + p2.y)/2); - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - private int constrainX(int x) { - LineConnection line = ownerConnection(); - Figure startFigure = line.getStartConnector().owner(); - Figure endFigure = line.getEndConnector().owner(); - Rectangle start = startFigure.displayBox(); - Rectangle end = endFigure.displayBox(); - Insets i1 = startFigure.connectionInsets(); - Insets i2 = endFigure.connectionInsets(); - - int r1x, r1width, r2x, r2width; - r1x = start.x + i1.left; - r1width = start.width - i1.left - i1.right-1; - - r2x = end.x + i2.left; - r2width = end.width - i2.left - i2.right-1; - - if (fSegment == 0) { - x = Geom.range(r1x, r1x + r1width, x); - } - if (fSegment == line.pointCount()-2) { - x = Geom.range(r2x, r2x + r2width, x); - } - return x; - } - - private int constrainY(int y) { - LineConnection line = ownerConnection(); - Figure startFigure = line.getStartConnector().owner(); - Figure endFigure = line.getEndConnector().owner(); - Rectangle start = startFigure.displayBox(); - Rectangle end = endFigure.displayBox(); - Insets i1 = startFigure.connectionInsets(); - Insets i2 = endFigure.connectionInsets(); - - int r1y, r1height, r2y, r2height; - r1y = start.y + i1.top; - r1height = start.height - i1.top - i1.bottom-1; - r2y = end.y + i2.top; - r2height = end.height - i2.top - i2.bottom-1; - - if (fSegment == 0) { - y = Geom.range(r1y, r1y + r1height, y); - } - if (fSegment == line.pointCount()-2) { - y = Geom.range(r2y, r2y + r2height, y); - } - return y; - } - - private LineConnection ownerConnection() { - return (LineConnection)owner(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/EllipseFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/EllipseFigure.java deleted file mode 100644 index a3b39f8f6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/EllipseFigure.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * @(#)EllipseFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import java.io.IOException; -import java.util.List; -import org.jhotdraw.util.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; - -/** - * An ellipse figure. - * - * @version <$CURRENT_VERSION$> - */ -public class EllipseFigure extends AttributeFigure { - - private Rectangle fDisplayBox; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -6856203289355118951L; - private int ellipseFigureSerializedDataVersion = 1; - - public EllipseFigure() { - this(new Point(0,0), new Point(0,0)); - } - - public EllipseFigure(Point origin, Point corner) { - basicDisplayBox(origin,corner); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x,y); - } - - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - /* - * JP, 25-May-03: Changed from (width-1, height-1) to (width, height), - * because figures were not filled completely (JDK 1.4.x). Might invalidate - * fix for #661878. If the problem is JDK-dependant, maybe the JDK version - * should be taken into account here? - */ - g.fillOval(r.x, r.y, r.width, r.height); - } - - public void drawFrame(Graphics g) { - Rectangle r = displayBox(); - g.drawOval(r.x, r.y, r.width-1, r.height-1); - } - - public Insets connectionInsets() { - Rectangle r = fDisplayBox; - int cx = r.width/2; - int cy = r.height/2; - return new Insets(cy, cx, cy, cx); - } - - public Connector connectorAt(int x, int y) { - return new ChopEllipseConnector(this); - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/FigureAttributes.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/FigureAttributes.java deleted file mode 100644 index 3ccb96ec5..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/FigureAttributes.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * @(#)FigureAttributes.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.util.*; -import org.jhotdraw.framework.*; - -import java.awt.Color; -import java.io.IOException; -import java.io.Serializable; -import java.util.Map; -import java.util.Iterator; - -/** - * A container for a figure's attributes. The attributes are stored - * as key/value pairs. - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ -public class FigureAttributes - extends Object - implements Cloneable, Serializable { - - private Map fMap; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -6886355144423666716L; - private int figureAttributesSerializedDataVersion = 1; - - /** - * Constructs the FigureAttributes. - */ - public FigureAttributes() { - fMap = CollectionsFactory.current().createMap(); - } - - /** - * Gets the attribute with the given name. - * @return attribute or null if the key is not defined - */ - public Object get(FigureAttributeConstant attributeConstant) { - return fMap.get(attributeConstant); - } - - /** - * Sets the attribute with the given name and - * overwrites its previous value. - */ - public void set(FigureAttributeConstant attributeConstant, Object value) { - if (value != null) { - fMap.put(attributeConstant, value); - } - else { - fMap.remove(attributeConstant); - } - } - - /** - * Tests if an attribute is defined. - */ - public boolean hasDefined(FigureAttributeConstant attributeConstant) { - return fMap.containsKey(attributeConstant); - } - - /** - * Clones the attributes. - */ - public Object clone() { - try { - FigureAttributes a = (FigureAttributes) super.clone(); - a.fMap = CollectionsFactory.current().createMap(fMap); - return a; - } - catch (CloneNotSupportedException e) { - throw new InternalError(); - } - } - - /** - * Reads the attributes from a StorableInput. - * FigureAttributes store the following types directly: - * Color, Boolean, String, Int. Other attribute types - * have to implement the Storable interface or they - * have to be wrapped by an object that implements Storable. - * @see Storable - * @see #write - */ - public void read(StorableInput dr) throws IOException { - String s = dr.readString(); - if (!s.toLowerCase().equals("attributes")) { - throw new IOException("Attributes expected"); - } - - fMap = CollectionsFactory.current().createMap(); - int size = dr.readInt(); - for (int i=0; i<size; i++) { - String key = dr.readString(); - String valtype = dr.readString(); - Object val = null; - if (valtype.equals("Color")) { - val = new Color(dr.readInt(), dr.readInt(), dr.readInt()); - } - else if (valtype.equals("Boolean")) { - val = new Boolean(dr.readString()); - } - else if (valtype.equals("String")) { - val = dr.readString(); - } - else if (valtype.equals("Int")) { - val = new Integer(dr.readInt()); - } - else if (valtype.equals("Storable")) { - val = dr.readStorable(); - } - else if (valtype.equals(FigureAttributeConstant.POPUP_MENU_STR)) { - // read String but don't store it - continue; - } - else if (valtype.equals("UNKNOWN")) { - continue; - } - // try to get defined constant - FigureAttributeConstant attributeConstant = FigureAttributeConstant.getConstant(key); - set(attributeConstant, val); - } - } - - /** - * Writes the attributes to a StorableInput. - * FigureAttributes store the following types directly: - * Color, Boolean, String, Int. Other attribute types - * have to implement the Storable interface or they - * have to be wrapped by an object that implements Storable. - * @see Storable - * @see #write - */ - public void write(StorableOutput dw) { - dw.writeString("attributes"); - - dw.writeInt(fMap.size()); // number of attributes - Iterator iter = fMap.keySet().iterator(); - while (iter.hasNext()) { - FigureAttributeConstant fac = (FigureAttributeConstant)iter.next(); - String attributeName = fac.getName(); - Object attributeValue = fMap.get(fac); - - dw.writeString(attributeName); - - if (attributeValue instanceof String) { - dw.writeString("String"); - dw.writeString((String)attributeValue); - } - else if (attributeValue instanceof Color) { - writeColor(dw, "Color", (Color)attributeValue); - } - else if (attributeValue instanceof Boolean) { - dw.writeString("Boolean"); - if (((Boolean)attributeValue).booleanValue()) { - dw.writeString("TRUE"); - } - else { - dw.writeString("FALSE"); - } - } - else if (attributeValue instanceof Integer) { - dw.writeString("Int"); - dw.writeInt(((Integer)attributeValue).intValue()); - } - else if (attributeValue instanceof Storable) { - dw.writeString("Storable"); - dw.writeStorable((Storable)attributeValue); - } - else if (attributeValue instanceof javax.swing.JPopupMenu) { - dw.writeString(FigureAttributeConstant.POPUP_MENU_STR); - } - else { - System.err.println("Unknown attribute: " + attributeValue); - dw.writeString("UNKNOWN"); - } - } - } - - public static void writeColor(StorableOutput dw, String colorName, Color color) { - if (color != null) { - dw.writeString(colorName); - dw.writeInt(color.getRed()); - dw.writeInt(color.getGreen()); - dw.writeInt(color.getBlue()); - } - } - - public static Color readColor(StorableInput dr) throws IOException { - return new Color(dr.readInt(), dr.readInt(), dr.readInt()); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/FontSizeHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/FontSizeHandle.java deleted file mode 100644 index 9b6524ac2..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/FontSizeHandle.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * @(#)FontSizeHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.UndoableAdapter; -import java.awt.*; - -/** - * A Handle to change the font size by direct manipulation. - * - * @version <$CURRENT_VERSION$> - */ -public class FontSizeHandle extends LocatorHandle { - - public FontSizeHandle(Figure owner, Locator l) { - super(owner, l); - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - TextFigure textOwner = (TextFigure) owner(); - - FontSizeHandle.UndoActivity activity = (FontSizeHandle.UndoActivity)getUndoActivity(); - int newSize = activity.getFont().getSize() + y-anchorY; - textOwner.setFont(new Font(activity.getFont().getName(), activity.getFont().getStyle(), newSize)); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - TextFigure textOwner = (TextFigure) owner(); - FontSizeHandle.UndoActivity activity = (FontSizeHandle.UndoActivity)getUndoActivity(); - // there has been no change so there is nothing to undo - if (textOwner.getFont().getSize() == activity.getOldFontSize()) { - setUndoActivity(null); - } - else { - activity.setFont(textOwner.getFont()); - } - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity(DrawingView newView) { - TextFigure textOwner = (TextFigure)owner(); - return new FontSizeHandle.UndoActivity(newView, textOwner.getFont()); - } - - public static class UndoActivity extends UndoableAdapter { - private Font myFont; - private int myOldFontSize; - - public UndoActivity(DrawingView newView, Font newFont) { - super(newView); - setFont(newFont); - setOldFontSize(getFont().getSize()); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - swapFont(); - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - swapFont(); - return true; - } - - protected void swapFont() { - setOldFontSize(replaceFontSize()); - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - ((TextFigure)fe.nextFigure()).setFont(getFont()); - } - } - - private int replaceFontSize() { - int tempFontSize = getFont().getSize(); - setFont(new Font(getFont().getName(), getFont().getStyle(), getOldFontSize())); - return tempFontSize; - } - protected void setFont(Font newFont) { - myFont = newFont; - } - - public Font getFont() { - return myFont; - } - - protected void setOldFontSize(int newOldFontSize) { - myOldFontSize = newOldFontSize; - } - - public int getOldFontSize() { - return myOldFontSize; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/GroupCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/GroupCommand.java deleted file mode 100644 index fd7413c5e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/GroupCommand.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)GroupCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -import java.util.List; - -/** - * Command to group the selection into a GroupFigure. - * - * @see GroupFigure - * - * @version <$CURRENT_VERSION$> - */ -public class GroupCommand extends AbstractCommand { - - /** - * Constructs a group command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public GroupCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); - ((GroupCommand.UndoActivity)getUndoActivity()).groupFigures(); - view().checkDamage(); - } - - public boolean isExecutableWithView() { - return view().selectionCount() > 1; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new GroupCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - getDrawingView().clearSelection(); - - // orphan group figure(s) - getDrawingView().drawing().orphanAll(getAffectedFigures()); - - // create a new collection with the grouped figures as elements - List affectedFigures = CollectionsFactory.current().createList(); - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - // add contained figures - getDrawingView().drawing().addAll(currentFigure.figures()); - getDrawingView().addToSelectionAll(currentFigure.figures()); - - FigureEnumeration groupedFigures = currentFigure.figures(); - while (groupedFigures.hasNextFigure()) { - affectedFigures.add(groupedFigures.nextFigure()); - } - } - - setAffectedFigures(new FigureEnumerator(affectedFigures)); - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - groupFigures(); - return true; - } - - return false; - } - - public void groupFigures() { - getDrawingView().drawing().orphanAll(getAffectedFigures()); - getDrawingView().clearSelection(); - - // add new group figure instead - GroupFigure group = new GroupFigure(); - group.addAll(getAffectedFigures()); - - Figure figure = getDrawingView().drawing().add(group); - getDrawingView().addToSelection(figure); - - // create a new collection with the new group figure as element - List affectedFigures = CollectionsFactory.current().createList(); - affectedFigures.add(figure); - setAffectedFigures(new FigureEnumerator(affectedFigures)); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/GroupFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/GroupFigure.java deleted file mode 100644 index f1d743c72..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/GroupFigure.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * @(#)GroupFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import java.util.List; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.CollectionsFactory; - -/** - * A Figure that groups a collection of figures. - * - * @version <$CURRENT_VERSION$> - */ -public class GroupFigure extends CompositeFigure { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 8311226373023297933L; - private int groupFigureSerializedDataVersion = 1; - - /** - * GroupFigures cannot be connected - */ - public boolean canConnect() { - return false; - } - - /** - * Gets the display box. The display box is defined as the union - * of the contained figures. - */ - public Rectangle displayBox() { - FigureEnumeration fe = figures(); - Rectangle r = fe.nextFigure().displayBox(); - - while (fe.hasNextFigure()) { - r.add(fe.nextFigure().displayBox()); - } - return r; - } - - public void basicDisplayBox(Point origin, Point corner) { - // do nothing - // we could transform all components proportionally - } - - public FigureEnumeration decompose() { - return new FigureEnumerator(fFigures); - } - - /** - * Gets the handles for the GroupFigure. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - handles.add(new GroupHandle(this, RelativeLocator.northWest())); - handles.add(new GroupHandle(this, RelativeLocator.northEast())); - handles.add(new GroupHandle(this, RelativeLocator.southWest())); - handles.add(new GroupHandle(this, RelativeLocator.southEast())); - return new HandleEnumerator(handles); - } - - /** - * Sets the attribute of all the contained figures. - * @deprecated see setAttribute(FigureAttributeConstant,Object) - */ - public void setAttribute(String name, Object value) { - super.setAttribute(name, value); - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - fe.nextFigure().setAttribute(name, value); - } - } - - /** - * Sets the attribute of the GroupFigure as well as all contained Figures. - */ - public void setAttribute(FigureAttributeConstant fac, Object object){ - super.setAttribute(fac, object); - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - fe.nextFigure().setAttribute(fac, object); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/GroupHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/GroupHandle.java deleted file mode 100644 index fd7976c92..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/GroupHandle.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * @(#)GroupHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.NullHandle; - -/** - * A Handle for a GroupFigure. - * - * @version <$CURRENT_VERSION$> - */ -final class GroupHandle extends NullHandle { - - public GroupHandle(Figure owner, Locator locator) { - super(owner, locator); - } - - /** - * Draws the Group handle. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - r.grow(-1, -1); - g.setColor(Color.white); - g.drawRect(r.x, r.y, r.width, r.height); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/ImageFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/ImageFigure.java deleted file mode 100644 index e6d581ea9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/ImageFigure.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * @(#)ImageFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import java.io.*; -import java.util.List; -import java.awt.image.ImageObserver; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -/** - * A Figure that shows an Image. - * Images shown by an image figure are shared by using the Iconkit. - * - * @see Iconkit - * - * @version <$CURRENT_VERSION$> - */ -public class ImageFigure - extends AttributeFigure implements ImageObserver { - - private String fFileName; - private transient Image fImage; - private Rectangle fDisplayBox; - /* - * Serialization support. - */ - private static final long serialVersionUID = 148012030121282439L; - private int imageFigureSerializedDataVersion = 1; - - public ImageFigure() { - fFileName = null; - fImage = null; - fDisplayBox = null; - } - - public ImageFigure(Image image, String fileName, Point origin) { - fFileName = fileName; - fImage = image; - // fix for bug-id: 593080 (ImageFigure calculates the image rectangle wrongly) - basicDisplayBox(origin, new Point(origin.x + fImage.getWidth(this), origin.y + fImage.getHeight(this))); - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x,y); - } - - public void draw(Graphics g) { - if (fImage == null) { - fImage = Iconkit.instance().loadImage(fFileName,true); - } - if (fImage != null) { - g.drawImage(fImage, fDisplayBox.x, fDisplayBox.y, fDisplayBox.width, fDisplayBox.height, this); - } - else { - drawGhost(g); - } - } - - private void drawGhost(Graphics g) { - g.setColor(Color.gray); - g.fillRect(fDisplayBox.x, fDisplayBox.y, fDisplayBox.width, fDisplayBox.height); - } - - /** - * Handles asynchroneous image updates. - */ - public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) { - if ((flags & (FRAMEBITS|ALLBITS)) != 0) { - invalidate(); - if (listener() != null) { - listener().figureRequestUpdate(new FigureChangeEvent(this)); - } - } - return (flags & (ALLBITS|ABORT)) == 0; - } - - /** - * Releases a figure's resources. Release is called when - * a figure is removed from a drawing. Informs the listeners that - * the figure is removed by calling figureRemoved. - */ - public void release() { - fImage.flush(); - } - - /** - * Writes the ImageFigure to a StorableOutput. Only a reference to the - * image, that is its pathname is saved. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - dw.writeString(fFileName); - } - - /** - * Reads the ImageFigure from a StorableInput. It registers the - * referenced figure to be loaded from the Iconkit. - * @see Iconkit#registerImage - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - fFileName = dr.readString(); - Iconkit.instance().registerImage(fFileName); - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - Iconkit.instance().registerImage(fFileName); - fImage = null; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/InsertImageCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/InsertImageCommand.java deleted file mode 100644 index f6521c366..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/InsertImageCommand.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * @(#)InsertImageCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; -import java.awt.*; -import java.lang.ref.WeakReference; - -/** - * Command to insert a named image. - * - * @version <$CURRENT_VERSION$> - */ -public class InsertImageCommand extends AbstractCommand { - - private String myImageName; - - /** - * Constructs an insert image command. - * @param name the command name - * @param newImageName the pathname of the image - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public InsertImageCommand(String name, String newImageName, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - myImageName = newImageName; - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - ((InsertImageCommand.UndoActivity)getUndoActivity()).insertImage(); - view().checkDamage(); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new InsertImageCommand.UndoActivity(view(), myImageName); - } - - public class UndoActivity extends UndoableAdapter { - - /** - * Use weak reference so if the command is the last one which references - * the ImageFigure then it might be garbage collected. Usually, the ImageFigure - * is referenced from the drawing it is inserted and might be only garbage - * collected after an undo operation (which removes the ImageFigure from - * the drawing). If it has been garbage collected but is requested again - * (e.g. during a redo operation) it is restored if possible. - */ - WeakReference myAffectedImageFigure; - private String myAffectedImageName; - - UndoActivity(DrawingView newDrawingView, String newAffectedImageName) { - super(newDrawingView); - myAffectedImageName = newAffectedImageName; - setUndoable(true); - setRedoable(true); - } - - protected void setImageFigure(ImageFigure newImageFigure) { - myAffectedImageFigure = new WeakReference(newImageFigure); - } - - protected ImageFigure getImageFigure() { - // load image if it has not been loaded so far - if ((myAffectedImageFigure == null) || (myAffectedImageFigure.get() == null)) { - Image image = Iconkit.instance().loadImage(myAffectedImageName, true); - setImageFigure(new ImageFigure( - image, myAffectedImageName, getDrawingView().lastClick())); - } - - return (ImageFigure)myAffectedImageFigure.get(); - } - - public boolean undo() { - if (super.undo()) { - getDrawingView().clearSelection(); - - getDrawingView().drawing().orphan(getImageFigure()); - - return true; - } - - return false; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - insertImage(); - return true; - } - - return false; - } - - protected void insertImage() { - getDrawingView().add(getImageFigure()); - getDrawingView().clearSelection(); - getDrawingView().addToSelection(getImageFigure()); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/LineConnection.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/LineConnection.java deleted file mode 100644 index 2210bb54d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/LineConnection.java +++ /dev/null @@ -1,463 +0,0 @@ -/* - * @(#)LineConnection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import java.util.List; -import java.io.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -/** - * A LineConnection is a standard implementation of the - * ConnectionFigure interface. The interface is implemented with PolyLineFigure. - * - * @see ConnectionFigure - * - * @version <$CURRENT_VERSION$> - */ -public class LineConnection extends PolyLineFigure implements ConnectionFigure { - - protected Connector myStartConnector; - protected Connector myEndConnector; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 6883731614578414801L; - private int lineConnectionSerializedDataVersion = 1; - - /** - * Constructs a LineConnection. A connection figure has - * an arrow decoration at the start and end. - */ - public LineConnection() { - super(4); - setStartDecoration(new ArrowTip()); - setEndDecoration(new ArrowTip()); - } - - /** - * Tests whether a figure can be a connection target. - * ConnectionFigures cannot be connected and return false. - */ - public boolean canConnect() { - return false; - } - - /** - * Ensures that a connection is updated if the connection - * was moved. - */ - protected void basicMoveBy(int dx, int dy) { - // don't move the start and end point since they are connected - for (int i = 1; i < fPoints.size()-1; i++) { - pointAt(i).translate(dx, dy); - } - - updateConnection(); // make sure that we are still connected - } - - /** - * Sets the start figure of the connection. - */ - public void connectStart(Connector newStartConnector) { - newStartConnector = newStartConnector.finalizeConnector(true); - setStartConnector(newStartConnector); - if (newStartConnector != null) { - startFigure().addDependendFigure(this); - startFigure().addFigureChangeListener(this); - } - } - - /** - * Sets the end figure of the connection. - */ - public void connectEnd(Connector newEndConnector) { - newEndConnector = newEndConnector.finalizeConnector(false); - setEndConnector(newEndConnector); - if (newEndConnector != null) { - endFigure().addDependendFigure(this); - endFigure().addFigureChangeListener(this); - handleConnect(startFigure(), endFigure()); - } - } - - /** - * Disconnects the start figure. - */ - public void disconnectStart() { - startFigure().removeFigureChangeListener(this); - startFigure().removeDependendFigure(this); - setStartConnector(null); - } - - /** - * Disconnects the end figure. - */ - public void disconnectEnd() { - handleDisconnect(startFigure(), endFigure()); - endFigure().removeFigureChangeListener(this); - endFigure().removeDependendFigure(this); - setEndConnector(null); - } - - /** - * Tests whether a connection connects the same figures - * as another ConnectionFigure. - */ - public boolean connectsSame(ConnectionFigure other) { - return other.getStartConnector() == getStartConnector() - && other.getEndConnector() == getEndConnector(); - } - - /** - * Handles the disconnection of a connection. - * Override this method to handle this event. - */ - protected void handleDisconnect(Figure start, Figure end) {} - - /** - * Handles the connection of a connection. - * Override this method to handle this event. - */ - protected void handleConnect(Figure start, Figure end) {} - - /** - * Gets the start figure of the connection. - */ - public Figure startFigure() { - if (getStartConnector() != null) { - return getStartConnector().owner(); - } - return null; - } - - /** - * Gets the end figure of the connection. - */ - public Figure endFigure() { - if (getEndConnector() != null) { - return getEndConnector().owner(); - } - return null; - } - - protected void setStartConnector(Connector newStartConnector) { - myStartConnector = newStartConnector; - } - - /** - * Gets the start figure of the connection. - */ - public Connector getStartConnector() { - return myStartConnector; - } - - protected void setEndConnector(Connector newEndConnector) { - myEndConnector = newEndConnector; - } - - /** - * Gets the end figure of the connection. - */ - public Connector getEndConnector() { - return myEndConnector; - } - - /** - * Tests whether two figures can be connected. - */ - public boolean canConnect(Figure start, Figure end) { - return true; - } - - /** - * - * p1.............p2 - * . . - * ...............po...... . - * . . . - * . . . - * . . . - * . .p4.....p3 - * . . - * . . - * . . - * ....................... - * - **/ - private void resetSelfConnections() { - while (fPoints.size() > 5) { - removePointAt(3); - } - while (fPoints.size() < 5) { - insertPointAt(pointAt(1),1); - } - - Rectangle r = myStartConnector.owner().displayBox(); - int westX = Geom.west(r).x; - int eastX = Geom.east(r).x; - int northY = Geom.north(r).y; - int southY = Geom.south(r).y; - - // delta is a heuristic to make the self-connecting edge more visually appealing - int delta = Math.min(24, r.width); - if (r.width > 200) { - delta = Math.min(36, r.width); - } - if (r.width < 100) { - delta = Math.min(12, r.width); - } - - Point p0 = pointAt(0); - OffsetConnector start = (OffsetConnector) myStartConnector; - start.calculateFigureConstrainedOffsets(p0.x, p0.y); - p0.x = start.locateX(); - p0.y = start.locateY(); - - // Calculate the coordinates of p4 from p0 (the start connecting point!) - int p4X = eastX; - double ratio1 = ((double)p0.x - (double)westX) / (double)r.width; - if (p0.x < (westX + r.width/2)) { - p4X = westX; - ratio1 = ((double)eastX - (double)p0.x) / (double)r.width; - } - int p4Y = northY + (int)(ratio1*r.height); - if (p0.y > (northY + r.height/2)) { - p4Y = southY - (int)(ratio1*r.height); - } - OffsetConnector end = (OffsetConnector) myEndConnector; - end.calculateFigureConstrainedOffsets(p4X, p4Y); - Point p4 = new Point(end.locateX(), end.locateY()); - fPoints.set(4, p4); - - // Calculate the coordinates of p2 from p0 and p4 - int p2X = p4X + delta + (int)(ratio1*delta); - if (p0.x < (westX + r.width/2)) { - p2X = p4X - delta - (int)(ratio1*delta); - } - double ratio2 = 1 - ratio1; - int p2Y = northY - delta - (int)(ratio2*delta); - if (p0.y > (northY + r.height/2)) { - p2Y = southY + delta + (int)(ratio2*delta); - } - Point p2 = new Point(p2X, p2Y); - fPoints.set(2, p2); - - // Calculate p1 and p3 from p0, p2, p4 - Point p1 = new Point(p0.x, p2.y); - Point p3 = new Point(p2.x, p4.y); - fPoints.set(1, p1); - fPoints.set(3, p3); - } - - /** - * Sets the start point. - */ - public void startPoint(int x, int y) { - willChange(); - if (fPoints.size() == 0) { - fPoints.add(new Point(x, y)); - } - else { - fPoints.set(0, new Point(x, y)); - } - changed(); - } - - /** - * Sets the end point. - */ - public void endPoint(int x, int y) { - willChange(); - if (fPoints.size() < 2) { - fPoints.add(new Point(x, y)); - } - else { - fPoints.set(fPoints.size()-1, new Point(x, y)); - } - - if ((myEndConnector != null) - && (myStartConnector.owner() == myEndConnector.owner()) - && (myEndConnector instanceof OffsetConnector)) { - resetSelfConnections(); - } - - changed(); - } - - /** - * Gets the start point. - */ - public Point startPoint() { - Point p = pointAt(0); - return new Point(p.x, p.y); - } - - /** - * Gets the end point. - */ - public Point endPoint() { - if (fPoints.size() > 0) { - Point p = pointAt(fPoints.size()-1); - return new Point(p.x, p.y); - } - else { - return null; - } - } - - /** - * Gets the handles of the figure. It returns the normal - * PolyLineHandles but adds ChangeConnectionHandles at the - * start and end. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(fPoints.size()); - handles.add(new ChangeConnectionStartHandle(this)); - for (int i = 1; i < fPoints.size()-1; i++) { - handles.add(new PolyLineHandle(this, locator(i), i)); - } - handles.add(new ChangeConnectionEndHandle(this)); - return new HandleEnumerator(handles); - } - - /** - * Sets the point and updates the connection. - */ - public void setPointAt(Point p, int i) { - super.setPointAt(p, i); - layoutConnection(); - } - - /** - * Inserts the point and updates the connection. - */ - public void insertPointAt(Point p, int i) { - super.insertPointAt(p, i); - layoutConnection(); - } - - /** - * Removes the point and updates the connection. - */ - public void removePointAt(int i) { - super.removePointAt(i); - layoutConnection(); - } - - /** - * Updates the connection. - */ - public void updateConnection() { - if (getStartConnector() != null) { - Point start = getStartConnector().findStart(this); - - if (start != null) { - startPoint(start.x, start.y); - } - } - if (getEndConnector() != null) { - Point end = getEndConnector().findEnd(this); - - if (end != null) { - endPoint(end.x, end.y); - } - } - } - - /** - * Lays out the connection. This is called when the connection - * itself changes. By default the connection is recalculated - */ - public void layoutConnection() { - updateConnection(); - } - - public void figureChanged(FigureChangeEvent e) { - updateConnection(); - } - - public void figureRemoved(FigureChangeEvent e) { - } - - public void figureRequestRemove(FigureChangeEvent e) { - } - - public void figureInvalidated(FigureChangeEvent e) { - } - - public void figureRequestUpdate(FigureChangeEvent e) { - } - - public void release() { - super.release(); - handleDisconnect(startFigure(), endFigure()); - if (getStartConnector() != null) { - startFigure().removeFigureChangeListener(this); - startFigure().removeDependendFigure(this); - } - if (getEndConnector() != null) { - endFigure().removeFigureChangeListener(this); - endFigure().removeDependendFigure(this); - } - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getStartConnector()); - dw.writeStorable(getEndConnector()); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - Connector start = (Connector)dr.readStorable(); - if (start != null) { - connectStart(start); - } - Connector end = (Connector)dr.readStorable(); - if (end != null) { - connectEnd(end); - } - if ((start != null) && (end != null)) { - updateConnection(); - } - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - if (getStartConnector() != null) { - connectStart(getStartConnector()); - } - if (getEndConnector() != null) { - connectEnd(getEndConnector()); - } - } - - public void visit(FigureVisitor visitor) { - visitor.visitFigure(this); - } - - /** - * @see org.jhotdraw.framework.Figure#removeFromContainer(org.jhotdraw.framework.FigureChangeListener) - */ - public void removeFromContainer(FigureChangeListener c) { - super.removeFromContainer(c); - release(); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/LineDecoration.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/LineDecoration.java deleted file mode 100644 index a34d79d3a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/LineDecoration.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * @(#)LineDecoration.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.util.Storable; -import java.awt.*; -import java.io.Serializable; - -/** - * Decorate the start or end point of a line or poly line figure. - * LineDecoration is the base class for the different line decorations. - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public interface LineDecoration - extends Storable, Cloneable, Serializable { - - /** - * Draws the decoration in the direction specified by the two points. - */ - public void draw(Graphics g, int x1, int y1, int x2, int y2); - - /** - * @return the display box of a LineDecoration. - */ - public Rectangle displayBox(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/LineFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/LineFigure.java deleted file mode 100644 index aa8a3828d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/LineFigure.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * @(#)LineFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; - -/** - * A line figure. - * - * @version <$CURRENT_VERSION$> - */ -public class LineFigure extends PolyLineFigure { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 511503575249212371L; - private int lineFigureSerializedDataVersion = 1; - - /** - * Constructs a LineFigure with both start and end set to Point(0,0). - */ - public LineFigure() { - addPoint(0, 0); - addPoint(0, 0); - } - - /** - * Gets a copy of the start point. - */ - public Point startPoint() { - return pointAt(0); - } - - /** - * Gets a copy of the end point. - */ - public Point endPoint() { - return pointAt(1); - } - - /** - * Sets the start point. - */ - public void startPoint(int x, int y) { - setPointAt(new Point(x,y), 0); - } - - /** - * Sets the end point. - */ - public void endPoint(int x, int y) { - setPointAt(new Point(x,y), 1); - } - - /** - * Sets the start and end point. - */ - public void setPoints(Point start, Point end) { - setPointAt(start, 0); - setPointAt(end, 1); - } - - public void basicDisplayBox(Point origin, Point corner) { - setPoints(origin, corner); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/NullConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/NullConnector.java deleted file mode 100644 index 380b11494..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/NullConnector.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * @(#)Connector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.standard.AbstractConnector; -import org.jhotdraw.framework.Figure; - -public class NullConnector extends AbstractConnector { - // AbstractConnector implements already all methods but cannot be instantiated - - private NullConnector() { - // do nothing: for JDO-compliance only - } - - public NullConnector(Figure owner) { - super(owner); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/NullFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/NullFigure.java deleted file mode 100644 index 6de695b65..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/NullFigure.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * @(#)LineConnection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.FigureEnumerator; -import org.jhotdraw.standard.SingleFigureEnumerator; -import org.jhotdraw.standard.AbstractFigure; -import org.jhotdraw.standard.HandleEnumerator; - -import java.awt.*; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class NullFigure extends AbstractFigure { - - private Rectangle myDisplayBox; - - /** - * Moves the figure. This is the - * method that subclassers override. Clients usually - * call displayBox. - * @see #moveBy - */ - protected void basicMoveBy(int dx, int dy) { - myDisplayBox.translate(dx, dy); - } - - /** - * Changes the display box of a figure. This method is - * always implemented in figure subclasses. - * It only changes - * the displaybox and does not announce any changes. It - * is usually not called by the client. Clients typically call - * displayBox to change the display box. - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void basicDisplayBox(Point origin, Point corner) { - myDisplayBox = new Rectangle(origin); - myDisplayBox.add(corner); - } - - /** - * Gets the display box of a figure - * @see #basicDisplayBox - */ - public Rectangle displayBox() { - return new Rectangle(myDisplayBox); - } - - /** - * Draws the figure. - * @param g the Graphics to draw into - */ - public void draw(Graphics g) { - // A NullFigure cannot be drawn: it has no graphical representation - } - - /** - * Returns the handles used to manipulate - * the figure. Handles is a Factory Method for - * creating handle objects. - * - * @return an type-safe iterator of handles - * @see Handle - */ - public HandleEnumeration handles() { - return HandleEnumerator.getEmptyEnumeration(); - } - - /** - * Checks if the Figure should be considered as empty. - */ - public boolean isEmpty() { - return true; - } - - /** - * Returns an Enumeration of the figures contained in this figure - */ - public FigureEnumeration figures() { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Returns the figure that contains the given point. - */ - public Figure findFigureInside(int x, int y) { - // A NullFigure does not contain other figures - return null; - } - - /** - * Returns a Clone of this figure - */ - public Object clone() { - return super.clone(); - } - - /** - * Checks whether the given figure is contained in this figure. - */ - public boolean includes(Figure figure) { - // A NullFigure does not contain another figure - return false; - } - - /** - * Decomposes a figure into its parts. A figure is considered - * as a part of itself. - */ - public FigureEnumeration decompose() { - return new SingleFigureEnumerator(this); - } - - /** - * Releases a figure's resources. Release is called when - * a figure is removed from a drawing. Informs the listeners that - * the figure is removed by calling figureRemoved. - */ - public void release() { - // A NullFigure does not occupy any resources - } - - /** - * Invalidates the figure. This method informs its listeners - * that its current display box is invalid and should be - * refreshed. - */ - public void invalidate() { - // A NullFigure does not have a display box - } - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - // A NullFigure does not have attributes: it cannot do anything with them - return null; - } - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - // A NullFigure does not have attributes: it cannot do anything with them - return null; - } - - /** - * Sets the named attribute to the new value - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - // A NullFigure does not have attributes: it cannot do anything with them - } - - /** - * Sets the named attribute to the new value - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - // A NullFigure does not have attributes: it cannot do anything with them - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/NumberTextFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/NumberTextFigure.java deleted file mode 100644 index 815f15346..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/NumberTextFigure.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * @(#)NumberTextFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.Figure; - -/** - * A TextFigure specialized to edit numbers. - * - * @version <$CURRENT_VERSION$> - */ -public class NumberTextFigure extends TextFigure { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -4056859232918336475L; - private int numberTextFigureSerializedDataVersion = 1; - - /** - * Gets the number of columns to be used by the text overlay. - * @see org.jhotdraw.util.FloatingTextField - */ - public int overlayColumns() { - return Math.max(4, getText().length()); - } - - /** - * Gets the numerical value of the contained text. - * return the value or 0 in the case of an illegal number format. - */ - public int getValue() { - int value = 0; - try { - value = Integer.parseInt(getText()); - } - catch (NumberFormatException e) { - value = 0; - } - return value; - } - - /** - * Sets the numberical value of the contained text. - */ - public void setValue(int value) { - setText(Integer.toString(value)); - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure() { - return this; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineConnector.java deleted file mode 100644 index b8b556f7c..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineConnector.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * @(#)PolyLineConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -/** - * PolyLineConnector finds connection points on a - * PolyLineFigure. - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public class PolyLineConnector extends ChopBoxConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 6018435940519102865L; - - public PolyLineConnector() { - super(); - } - - /** - * Constructs a connector with the given owner figure. - */ - public PolyLineConnector(Figure owner) { - super(owner); - } - - protected Point chop(Figure target, Point from) { - PolyLineFigure p = (PolyLineFigure)owner(); - // *** based on PolygonFigure's heuristic - Point ctr = p.center(); - int cx = -1; - int cy = -1; - long len = Long.MAX_VALUE; - - // Try for points along edge - - for (int i = 0; i < p.pointCount()-1; i++) { - Point p1 = p.pointAt(i); - Point p2 = p.pointAt(i+1); - Point chop = Geom.intersect(p1.x, - p1.y, - p2.x, - p2.y, - from.x, - from.y, - ctr.x, - ctr.y); - if (chop != null) { - long cl = Geom.length2(chop.x, chop.y, from.x, from.y); - if (cl < len) { - len = cl; - cx = chop.x; - cy = chop.y; - } - } - } - // if none found, pick closest vertex - //if (len == Long.MAX_VALUE) { - { // try anyway - for (int i = 0; i < p.pointCount(); i++) { - Point pp = p.pointAt(i); - long l = Geom.length2(pp.x, pp.y, from.x, from.y); - if (l < len) { - len = l; - cx = pp.x; - cy = pp.y; - } - } - } - return new Point(cx, cy); - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineFigure.java deleted file mode 100644 index deb63c895..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineFigure.java +++ /dev/null @@ -1,416 +0,0 @@ -/* - * @(#)PolyLineFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.io.IOException; -import java.util.Iterator; -import java.util.List; - -// JUnitDoclet begin import -import org.jhotdraw.framework.Connector; -import org.jhotdraw.framework.FigureAttributeConstant; -import org.jhotdraw.framework.HandleEnumeration; -import org.jhotdraw.framework.Locator; -import org.jhotdraw.standard.AbstractFigure; -import org.jhotdraw.standard.HandleEnumerator; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.Geom; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; -// JUnitDoclet end import - -/** - * A poly line figure consists of a list of points. - * It has an optional line decoration at the start and end. - * - * @see LineDecoration - * - * @version <$CURRENT_VERSION$> - */ -public class PolyLineFigure extends AbstractFigure { - - public final static int ARROW_TIP_NONE = 0; - public final static int ARROW_TIP_START = 1; - public final static int ARROW_TIP_END = 2; - public final static int ARROW_TIP_BOTH = 3; - - protected List fPoints; - protected LineDecoration fStartDecoration = null; - protected LineDecoration fEndDecoration = null; - protected Color fFrameColor = Color.black; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -7951352179906577773L; - private int polyLineFigureSerializedDataVersion = 1; - - public PolyLineFigure() { - this(4); - } - - public PolyLineFigure(int size) { - fPoints = CollectionsFactory.current().createList(size); - } - - public PolyLineFigure(int x, int y) { - fPoints = CollectionsFactory.current().createList(); - fPoints.add(new Point(x, y)); - } - - public Rectangle displayBox() { - Iterator iter = points(); - if (iter.hasNext()) { - // avoid starting with origin 0,0 because that would lead to a too large rectangle - Rectangle r = new Rectangle((Point)iter.next()); - - while (iter.hasNext()) { - r.add((Point)iter.next()); - } - - return r; - } - else { - return new Rectangle(); - } - } - - public boolean isEmpty() { - return (size().width < 3) && (size().height < 3); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(fPoints.size()); - for (int i = 0; i < fPoints.size(); i++) { - handles.add(new PolyLineHandle(this, locator(i), i)); - } - return new HandleEnumerator(handles); - } - - public void basicDisplayBox(Point origin, Point corner) { - } - - /** - * Adds a node to the list of points. - */ - public void addPoint(int x, int y) { - fPoints.add(new Point(x, y)); - changed(); - } - - public Iterator points() { - return fPoints.iterator(); - } - - public int pointCount() { - return fPoints.size(); - } - - protected void basicMoveBy(int dx, int dy) { - Iterator iter = points(); - while (iter.hasNext()) { - ((Point)iter.next()).translate(dx, dy); - } - } - - /** - * Changes the position of a node. - */ - public void setPointAt(Point p, int i) { - willChange(); - fPoints.set(i, p); - changed(); - } - - /** - * Insert a node at the given point. - */ - public void insertPointAt(Point p, int i) { - fPoints.add(i, p); - changed(); - } - - public void removePointAt(int i) { - willChange(); - fPoints.remove(i); - changed(); - } - - /** - * Splits the segment at the given point if a segment was hit. - * @return the index of the segment or -1 if no segment was hit. - */ - public int splitSegment(int x, int y) { - int i = findSegment(x, y); - if (i != -1) { - insertPointAt(new Point(x, y), i+1); - } - return i+1; - } - - public Point pointAt(int i) { - return (Point)fPoints.get(i); - } - - /** - * Joins to segments into one if the given point hits a node - * of the polyline. - * @return true if the two segments were joined. - */ - public boolean joinSegments(int x, int y) { - for (int i= 1; i < fPoints.size()-1; i++) { - Point p = pointAt(i); - if (Geom.length(x, y, p.x, p.y) < 3) { - removePointAt(i); - return true; - } - } - return false; - } - - public Connector connectorAt(int x, int y) { - return new PolyLineConnector(this); - } - - /** - * Sets the start decoration. - */ - public void setStartDecoration(LineDecoration l) { - fStartDecoration = l; - } - - /** - * Returns the start decoration. - */ - public LineDecoration getStartDecoration() { - return fStartDecoration; - } - - /** - * Sets the end decoration. - */ - public void setEndDecoration(LineDecoration l) { - fEndDecoration = l; - } - - /** - * Returns the end decoration. - */ - public LineDecoration getEndDecoration() { - return fEndDecoration; - } - - public void draw(Graphics g) { - g.setColor(getFrameColor()); - Point p1, p2; - for (int i = 0; i < fPoints.size()-1; i++) { - p1 = pointAt(i); - p2 = pointAt(i+1); - drawLine(g, p1.x, p1.y, p2.x, p2.y); - } - decorate(g); - } - - /** - * Can be overriden in subclasses to draw different types of lines - * (e.g. dotted lines) - */ - protected void drawLine(Graphics g, int x1, int y1, int x2, int y2) { - g.drawLine(x1, y1, x2, y2); - } - - public boolean containsPoint(int x, int y) { - Rectangle bounds = displayBox(); - bounds.grow(4,4); - if (!bounds.contains(x, y)) { - return false; - } - - for (int i = 0; i < fPoints.size()-1; i++) { - Point p1 = pointAt(i); - Point p2 = pointAt(i+1); - if (Geom.lineContainsPoint(p1.x, p1.y, p2.x, p2.y, x, y)) { - return true; - } - } - return false; - } - - /** - * Gets the segment of the polyline that is hit by - * the given point. - * @return the index of the segment or -1 if no segment was hit. - */ - public int findSegment(int x, int y) { - for (int i = 0; i < fPoints.size()-1; i++) { - Point p1 = pointAt(i); - Point p2 = pointAt(i+1); - if (Geom.lineContainsPoint(p1.x, p1.y, p2.x, p2.y, x, y)) { - return i; - } - } - return -1; - } - - private void decorate(Graphics g) { - if (getStartDecoration() != null) { - Point p1 = pointAt(0); - Point p2 = pointAt(1); - getStartDecoration().draw(g, p1.x, p1.y, p2.x, p2.y); - } - if (getEndDecoration() != null) { - Point p3 = pointAt(fPoints.size()-2); - Point p4 = pointAt(fPoints.size()-1); - getEndDecoration().draw(g, p4.x, p4.y, p3.x, p3.y); - } - } - - /** - * Gets the attribute with the given name. - * PolyLineFigure maps "ArrowMode"to a - * line decoration. - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return getAttribute(FigureAttributeConstant.getConstant(name)); - } - - /** - * Gets the attribute with the given name. - * PolyLineFigure maps "ArrowMode"to a - * line decoration. - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - if (attributeConstant.equals(FigureAttributeConstant.FRAME_COLOR)) { - return getFrameColor(); - } - else if (attributeConstant.equals(FigureAttributeConstant.ARROW_MODE)) { - int value = 0; - if (getStartDecoration() != null) { - value |= ARROW_TIP_START; - } - if (getEndDecoration() != null) { - value |= ARROW_TIP_END; - } - return new Integer(value); - } - return super.getAttribute(attributeConstant); - } - - /** - * Sets the attribute with the given name. - * PolyLineFigure interprets "ArrowMode"to set - * the line decoration. - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - setAttribute(FigureAttributeConstant.getConstant(name), value); - } - - /** - * Sets the attribute with the given name. - * PolyLineFigure interprets "ArrowMode"to set - * the line decoration. - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - if (attributeConstant.equals(FigureAttributeConstant.FRAME_COLOR)) { - setFrameColor((Color)value); - changed(); - } - else if (attributeConstant.equals(FigureAttributeConstant.ARROW_MODE)) { - Integer intObj = (Integer)value; - if (intObj != null) { - int decoration = intObj.intValue(); - if ((decoration & ARROW_TIP_START) != 0) { - setStartDecoration(new ArrowTip()); - } - else { - setStartDecoration(null); - } - if ((decoration & ARROW_TIP_END) != 0) { - setEndDecoration(new ArrowTip()); - } - else { - setEndDecoration(null); - } - } - changed(); - } - else { - super.setAttribute(attributeConstant, value); - } - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fPoints.size()); - Iterator iter = points(); - while (iter.hasNext()) { - Point p = (Point)iter.next(); - dw.writeInt(p.x); - dw.writeInt(p.y); - } - dw.writeStorable(fStartDecoration); - dw.writeStorable(fEndDecoration); - dw.writeColor(fFrameColor); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - int size = dr.readInt(); - fPoints = CollectionsFactory.current().createList(size); - for (int i=0; i<size; i++) { - int x = dr.readInt(); - int y = dr.readInt(); - fPoints.add(new Point(x,y)); - } - setStartDecoration((LineDecoration)dr.readStorable()); - setEndDecoration((LineDecoration)dr.readStorable()); - fFrameColor = dr.readColor(); - } - - /** - * Creates a locator for the point with the given index. - */ - public static Locator locator(int pointIndex) { - return new PolyLineLocator(pointIndex); - } - - protected Color getFrameColor() { - return fFrameColor; - } - - protected void setFrameColor(Color c) { - fFrameColor = c; - } - - /** - * Hook method to change the rectangle that will be invalidated - */ - protected Rectangle invalidateRectangle(Rectangle r) { - // SF-bug id: 533953: provide this method to customize invalidated rectangle - Rectangle parentR = super.invalidateRectangle(r); - if (getStartDecoration() != null) { - parentR.add(getStartDecoration().displayBox()); - } - if (getEndDecoration() != null) { - parentR.add(getEndDecoration().displayBox()); - } - return parentR; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineHandle.java deleted file mode 100644 index b8abb8b5d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineHandle.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)PolyLineHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.LocatorHandle; -import org.jhotdraw.standard.SingleFigureEnumerator; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.UndoableAdapter; -import java.awt.*; - -/** - * A handle for a node on the polyline. - * - * @version <$CURRENT_VERSION$> - */ -public class PolyLineHandle extends LocatorHandle { - - private int fIndex; - - /** - * Constructs a poly line handle. - * @param owner the owning polyline figure. - * @param l the locator - * @param index the index of the node associated with this handle. - */ - public PolyLineHandle(PolyLineFigure owner, Locator l, int index) { - super(owner, l); - fIndex = index; - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view, fIndex)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - ((PolyLineHandle.UndoActivity)getUndoActivity()).setOldPoint(new Point(x,y)); - } - - public void invokeStep(int x, int y, int anchorX, int anchorY, DrawingView view) { - int currentIndex = ((PolyLineHandle.UndoActivity)getUndoActivity()).getPointIndex(); - myOwner().setPointAt(new Point(x, y), currentIndex); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - if ((x == anchorX) && (y == anchorY)) { - setUndoActivity(null); - } - } - - private PolyLineFigure myOwner() { - return (PolyLineFigure)owner(); - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView, int newPointIndex) { - return new PolyLineHandle.UndoActivity(newView, newPointIndex); - } - - public static class UndoActivity extends UndoableAdapter { - private Point myOldPoint; - private int myPointIndex; - - public UndoActivity(DrawingView newView, int newPointIndex) { - super(newView); - setUndoable(true); - setRedoable(true); - setPointIndex(newPointIndex); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return movePointToOldLocation(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return movePointToOldLocation(); - } - - protected boolean movePointToOldLocation() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - - PolyLineFigure figure = (PolyLineFigure)fe.nextFigure(); - Point backupPoint = figure.pointAt(getPointIndex()); - figure.setPointAt(getOldPoint(), getPointIndex()); - setOldPoint(backupPoint); - return true; - } - - public void setOldPoint(Point newOldPoint) { - myOldPoint = newOldPoint; - } - - public Point getOldPoint() { - return myOldPoint; - } - - public void setPointIndex(int newPointIndex) { - myPointIndex = newPointIndex; - } - - public int getPointIndex() { - return myPointIndex; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineLocator.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineLocator.java deleted file mode 100644 index 06f5ab1ee..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/PolyLineLocator.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * @(#)PolyLineLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; - -/** - * A poly line figure consists of a list of points. - * It has an optional line decoration at the start and end. - * - * @see LineDecoration - * - * @version <$CURRENT_VERSION$> - */ -class PolyLineLocator extends AbstractLocator { - int fIndex; - - public PolyLineLocator(int index) { - fIndex = index; - } - - public Point locate(Figure owner) { - PolyLineFigure plf = (PolyLineFigure)owner; - // guard against changing PolyLineFigures -> temporary hack - if (fIndex < plf.pointCount()) { - return ((PolyLineFigure)owner).pointAt(fIndex); - } - return new Point(0, 0); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/RadiusHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/RadiusHandle.java deleted file mode 100644 index a7279d072..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/RadiusHandle.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * @(#)RadiusHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Geom; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.UndoableAdapter; -import java.awt.*; - -/** - * A Handle to manipulate the radius of a round corner rectangle. - * - * @version <$CURRENT_VERSION$> - */ -class RadiusHandle extends AbstractHandle { - - private static final int OFFSET = 4; - - public RadiusHandle(RoundRectangleFigure owner) { - super(owner); - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - ((RadiusHandle.UndoActivity)getUndoActivity()). - setOldRadius(((RoundRectangleFigure)owner()).getArc()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - int dx = x-anchorX; - int dy = y-anchorY; - RoundRectangleFigure owner = (RoundRectangleFigure)owner(); - Rectangle r = owner.displayBox(); - Point originalRadius = ((RadiusHandle.UndoActivity)getUndoActivity()).getOldRadius(); - int rx = Geom.range(0, r.width, 2*(originalRadius.x/2 + dx)); - int ry = Geom.range(0, r.height, 2*(originalRadius.y/2 + dy)); - owner.setArc(rx, ry); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - Point currentRadius = ((RoundRectangleFigure)owner()).getArc(); - Point originalRadius = ((RadiusHandle.UndoActivity)getUndoActivity()).getOldRadius(); - // there has been no change so there is nothing to undo - if ((currentRadius.x == originalRadius.x) && (currentRadius.y == originalRadius.y)) { - setUndoActivity(null); - } - } - - public Point locate() { - RoundRectangleFigure owner = (RoundRectangleFigure)owner(); - Point radius = owner.getArc(); - Rectangle r = owner.displayBox(); - return new Point(r.x+radius.x/2+OFFSET, r.y+radius.y/2+OFFSET); - } - - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.yellow); - g.fillOval(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new RadiusHandle.UndoActivity(newView); - } - - public static class UndoActivity extends UndoableAdapter { - private Point myOldRadius; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return resetRadius(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return resetRadius(); - } - - protected boolean resetRadius() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - RoundRectangleFigure currentFigure = (RoundRectangleFigure)fe.nextFigure(); - Point figureRadius = currentFigure.getArc(); - currentFigure.setArc(getOldRadius().x, getOldRadius().y); - setOldRadius(figureRadius); - return true; - } - - protected void setOldRadius(Point newOldRadius) { - myOldRadius = newOldRadius; - } - - public Point getOldRadius() { - return myOldRadius; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/RectangleFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/RectangleFigure.java deleted file mode 100644 index ad68c84a9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/RectangleFigure.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * @(#)RectangleFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import java.io.IOException; -import java.util.List; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; -import org.jhotdraw.framework.HandleEnumeration; - - -/** - * A rectangle figure. - * - * @version <$CURRENT_VERSION$> - */ -public class RectangleFigure extends AttributeFigure { - - private Rectangle fDisplayBox; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 184722075881789163L; - private int rectangleFigureSerializedDataVersion = 1; - - public RectangleFigure() { - this(new Point(0,0), new Point(0,0)); - } - - public RectangleFigure(Point origin, Point corner) { - basicDisplayBox(origin,corner); - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - return new HandleEnumerator(handles); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x,y); - } - - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - g.fillRect(r.x, r.y, r.width, r.height); - } - - public void drawFrame(Graphics g) { - Rectangle r = displayBox(); - g.drawRect(r.x, r.y, r.width-1, r.height-1); - } - - //-- store / load ---------------------------------------------- - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/RoundRectangleFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/RoundRectangleFigure.java deleted file mode 100644 index baebe0606..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/RoundRectangleFigure.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * @(#)RoundRectangleFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import java.awt.*; -import java.io.IOException; -import java.util.List; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - - -/** - * A round rectangle figure. - * - * @see RadiusHandle - * - * @version <$CURRENT_VERSION$> - */ -public class RoundRectangleFigure extends AttributeFigure { - - private Rectangle fDisplayBox; - private int fArcWidth; - private int fArcHeight; - private static final int DEFAULT_ARC = 8; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 7907900248924036885L; - private int roundRectangleSerializedDataVersion = 1; - - public RoundRectangleFigure() { - this(new Point(0,0), new Point(0,0)); - fArcWidth = fArcHeight = DEFAULT_ARC; - } - - public RoundRectangleFigure(Point origin, Point corner) { - basicDisplayBox(origin,corner); - fArcWidth = fArcHeight = DEFAULT_ARC; - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - } - - /** - * Sets the arc's witdh and height. - */ - public void setArc(int width, int height) { - willChange(); - fArcWidth = width; - fArcHeight = height; - changed(); - } - - /** - * Gets the arc's width and height. - */ - public Point getArc() { - return new Point(fArcWidth, fArcHeight); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - BoxHandleKit.addHandles(this, handles); - - handles.add(new RadiusHandle(this)); - - return new HandleEnumerator(handles); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x,y); - } - - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - /* - * JP, 25-May-03: Changed from (width-1, height-1) to (width, height), - * because figures were not filled completely (JDK 1.4.x). Might invalidate - * fix for #661878. If the problem is JDK-dependant, maybe the JDK version - * should be taken into account here? - */ - g.fillRoundRect(r.x, r.y, r.width, r.height, fArcWidth, fArcHeight); - } - - public void drawFrame(Graphics g) { - Rectangle r = displayBox(); - g.drawRoundRect(r.x, r.y, r.width-1, r.height-1, fArcWidth, fArcHeight); - } - - public Insets connectionInsets() { - return new Insets(fArcHeight/2, fArcWidth/2, fArcHeight/2, fArcWidth/2); - } - - public Connector connectorAt(int x, int y) { - return new ShortestDistanceConnector(this); // just for demo purposes - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - dw.writeInt(fArcWidth); - dw.writeInt(fArcHeight); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - fArcWidth = dr.readInt(); - fArcHeight = dr.readInt(); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/ScribbleTool.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/ScribbleTool.java deleted file mode 100644 index 4d31d1d8e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/ScribbleTool.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * @(#)ScribbleTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Undoable; -import java.awt.event.MouseEvent; - -/** - * Tool to scribble a PolyLineFigure - * - * @see PolyLineFigure - * - * @version <$CURRENT_VERSION$> - */ -public class ScribbleTool extends AbstractTool { - - private PolyLineFigure fScribble; - private int fLastX, fLastY; - - /** - * the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - private Figure myAddedFigure; - - public ScribbleTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - public void activate() { - super.activate(); - } - - public void deactivate() { - super.deactivate(); - if (fScribble != null) { - if (fScribble.size().width < 4 || fScribble.size().height < 4) { - getActiveDrawing().remove(fScribble); - // nothing to undo - setUndoActivity(null); - } - fScribble = null; - } - } - - private void point(int x, int y) { - if (fScribble == null) { - fScribble = new PolyLineFigure(x, y); - setAddedFigure(view().add(fScribble)); - } - else if (fLastX != x || fLastY != y) { - fScribble.addPoint(x, y); - } - - fLastX = x; - fLastY = y; - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - if (e.getClickCount() >= 2) { - // use undo activity from paste command... - setUndoActivity(createUndoActivity()); - - // put created figure into a figure enumeration - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(getAddedFigure())); - } - else { - // use original event coordinates to avoid - // supress that the scribble is constrained to - // the grid - point(e.getX(), e.getY()); - } - } - - public void mouseDrag(MouseEvent e, int x, int y) { - if (fScribble != null) { - point(e.getX(), e.getY()); - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - super.mouseUp(e, x, y); - // deactivate tool only when mouseUp was also fired - if (e.getClickCount() >= 2) { - editor().toolDone(); - } - } - - /** - * Gets the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - protected Figure getAddedFigure() { - return myAddedFigure; - } - - private void setAddedFigure(Figure newAddedFigure) { - myAddedFigure = newAddedFigure; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/ShortestDistanceConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/ShortestDistanceConnector.java deleted file mode 100644 index 2011a3f89..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/ShortestDistanceConnector.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * @(#)ShortestDistanceConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Geom; -import java.awt.*; - -/** - * A ShortestDistance locates connection points by - * finding the shortest distance between the start and - * end of the connection. - * It doesn't connect to the areas defined by Figure.connectionInsets() - * - * @see Figure#connectionInsets - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ -public class ShortestDistanceConnector extends AbstractConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -2273446020593433887L; - - public ShortestDistanceConnector() { // only used for Storable implementation - super(); - } - - public ShortestDistanceConnector(Figure owner) { - super(owner); - } - - public Point findStart(ConnectionFigure connection) { - return findPoint(connection, true); - } - - public Point findEnd(ConnectionFigure connection) { - return findPoint(connection, false); - } - - protected Point findPoint(ConnectionFigure connection, boolean getStart) { - Figure startFigure = connection.getStartConnector().owner(); - Figure endFigure = connection.getEndConnector().owner(); - - Rectangle r1 = startFigure.displayBox(); - Rectangle r2 = endFigure.displayBox(); - - Insets i1 = startFigure.connectionInsets(); - Insets i2 = endFigure.connectionInsets(); - - Point p1, p2; - Point start = null, end = null, s = null, e = null; - long len2 = Long.MAX_VALUE, l2; - int x1, x2, y1, y2; // connection points - int xmin, xmax, ymin, ymax; - - // X-dimension - // constrain width connection insets - int r1x, r1width, r2x, r2width, r1y, r1height, r2y, r2height; - r1x = r1.x + i1.left; - r1width = r1.width - i1.left - i1.right-1; - r2x = r2.x + i2.left; - r2width = r2.width - i2.left - i2.right-1; - - // find x connection point - if (r1x + r1width < r2x) { - x1 = r1x + r1width; - x2 = r2x; - } - else if (r1x > r2x + r2width) { - x1 = r1x; - x2 = r2x + r2width; - } - else { - xmax = Math.max(r1x, r2x); - xmin = Math.min(r1x+r1width, r2x+r2width); - x1 = x2 = (xmax + xmin) /2; - } - - // Y-Dimension - // constrain with connection insets - r1y = r1.y + i1.top; - r1height = r1.height - i1.top - i1.bottom-1; - r2y = r2.y + i2.top; - r2height = r2.height - i2.top - i2.bottom-1; - - // y connection point - if (r1y + r1height < r2y) { - y1 = r1y + r1height; - y2 = r2y; - } - else if (r1y > r2y + r2height) { - y1 = r1y; - y2 = r2y + r2height; - } - else { - ymax = Math.max(r1y, r2y); - ymin = Math.min(r1y+r1height, r2y+r2height); - y1 = y2 = (ymax + ymin) /2; - } - // find shortest connection - for (int i = 0; i < 4; i++) { - switch(i) { - case 0: - // EAST-WEST - p1 = Geom.east(r1); - p2 = Geom.west(r2); - s = new Point(p1.x, y1); - e = new Point(p2.x, y2); - break; - case 1: - // WEST-EAST - p1 = Geom.west(r1); - p2 = Geom.east(r2); - s = new Point(p1.x, y1); - e = new Point(p2.x, y2); - break; - case 2: - // NORTH-SOUTH - p1 = Geom.north(r1); - p2 = Geom.south(r2); - s = new Point(x1, p1.y); - e = new Point(x2, p2.y); - break; - case 3: - // SOUTH-NORTH - p1 = Geom.south(r1); - p2 = Geom.north(r2); - s = new Point(x1, p1.y); - e = new Point(x2, p2.y); - break; - } - l2 = Geom.length2(s.x, s.y, e.x, e.y); - if (l2 < len2) { - start = s; - end = e; - len2 = l2; - } - } - if (getStart) { - return start; - } - return end; - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/TextFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/TextFigure.java deleted file mode 100644 index 96a07f8e8..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/TextFigure.java +++ /dev/null @@ -1,509 +0,0 @@ -/* - * @(#)TextFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.ColorMap; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -import java.awt.*; -import java.io.*; -import java.util.List; - -/** - * A text figure. - * - * @see TextTool - * - * @version <$CURRENT_VERSION$> - */ -public class TextFigure - extends AttributeFigure - implements FigureChangeListener, TextHolder { - - private int fOriginX; - private int fOriginY; - - // cache of the TextFigure's size - transient private boolean fSizeIsDirty = true; - transient private int fWidth; - transient private int fHeight; - - private String fText; - private Font fFont; - private boolean fIsReadOnly; - - private Figure fObservedFigure = null; - private OffsetLocator fLocator = null; - - private static String fgCurrentFontName = "Helvetica"; - private static int fgCurrentFontSize = 12; - private static int fgCurrentFontStyle = Font.PLAIN; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 4599820785949456124L; - private int textFigureSerializedDataVersion = 1; - - public TextFigure() { - fOriginX = 0; - fOriginY = 0; - fFont = createCurrentFont(); - setAttribute(FigureAttributeConstant.FILL_COLOR, ColorMap.color("None")); - fText = ""; - fSizeIsDirty = true; - } - - /** - * @see org.jhotdraw.framework.Figure#moveBy(int, int) - */ - public void moveBy(int x, int y) { - willChange(); - basicMoveBy(x, y); - if (getLocator() != null) { - getLocator().moveBy(x, y); - } - changed(); - } - - protected void basicMoveBy(int x, int y) { - fOriginX += x; - fOriginY += y; - } - - /** - * @see org.jhotdraw.framework.Figure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - public void basicDisplayBox(Point newOrigin, Point newCorner) { - fOriginX = newOrigin.x; - fOriginY = newOrigin.y; - } - - /** - * @see org.jhotdraw.framework.Figure#displayBox() - */ - public Rectangle displayBox() { - Dimension extent = textExtent(); - return new Rectangle(fOriginX, fOriginY, extent.width, extent.height); - } - - /** - * @see org.jhotdraw.standard.TextHolder#textDisplayBox() - */ - public Rectangle textDisplayBox() { - return displayBox(); - } - - /** - * Tests whether this figure is read only. - */ - public boolean readOnly() { - return fIsReadOnly; - } - - /** - * Sets the read only status of the text figure. - */ - public void setReadOnly(boolean isReadOnly) { - fIsReadOnly = isReadOnly; - } - - /** - * Gets the font. - * @see org.jhotdraw.standard.TextHolder#getFont() - */ - public Font getFont() { - return fFont; - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - * @see org.jhotdraw.standard.TextHolder#getRepresentingFigure() - */ - public Figure getRepresentingFigure() { - return this; - } - - /** - * Sets the font. - */ - public void setFont(Font newFont) { - willChange(); - fFont = newFont; - markDirty(); - changed(); - } - - /** - * Updates the location whenever the figure changes itself. - * @see org.jhotdraw.framework.Figure#changed() - */ - public void changed() { - super.changed(); - //updateLocation(); - } - - /** - * A text figure understands the "FontSize", "FontStyle", and "FontName" - * attributes. - * - * @see org.jhotdraw.framework.Figure#getAttribute(java.lang.String) - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return getAttribute(FigureAttributeConstant.getConstant(name)); - } - - /** - * A text figure understands the "FontSize", "FontStyle", and "FontName" - * attributes. - * @see org.jhotdraw.framework.Figure#getAttribute(org.jhotdraw.framework.FigureAttributeConstant) - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - Font font = getFont(); - if (attributeConstant.equals(FigureAttributeConstant.FONT_SIZE)) { - return new Integer(font.getSize()); - } - if (attributeConstant.equals(FigureAttributeConstant.FONT_STYLE)) { - return new Integer(font.getStyle()); - } - if (attributeConstant.equals(FigureAttributeConstant.FONT_NAME)) { - return font.getName(); - } - return super.getAttribute(attributeConstant); - } - - /** - * A text figure understands the "FontSize", "FontStyle", and "FontName" - * attributes. - * - * @see org.jhotdraw.framework.Figure#setAttribute(java.lang.String, java.lang.Object) - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - setAttribute(FigureAttributeConstant.getConstant(name), value); - } - - /** - * A text figure understands the "FontSize", "FontStyle", and "FontName" - * attributes. - * @see org.jhotdraw.framework.Figure#setAttribute(org.jhotdraw.framework.FigureAttributeConstant, java.lang.Object) - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - Font font = getFont(); - if (attributeConstant.equals(FigureAttributeConstant.FONT_SIZE)) { - Integer s = (Integer) value; - setFont(new Font(font.getName(), font.getStyle(), s.intValue())); - } - else if (attributeConstant.equals(FigureAttributeConstant.FONT_STYLE)) { - Integer s = (Integer) value; - int style = font.getStyle(); - if (s.intValue() == Font.PLAIN) { - style = Font.PLAIN; - } - else { - style = style ^ s.intValue(); - } - setFont(new Font(font.getName(), style, font.getSize())); - } - else if (attributeConstant.equals(FigureAttributeConstant.FONT_NAME)) { - String n = (String) value; - setFont(new Font(n, font.getStyle(), font.getSize())); - } - else { - super.setAttribute(attributeConstant, value); - } - } - - /** - * Gets the text shown by the text figure. - * @see org.jhotdraw.standard.TextHolder#getText() - */ - public String getText() { - return fText; - } - - /** - * Sets the text shown by the text figure. - * @see org.jhotdraw.standard.TextHolder#setText(java.lang.String) - */ - public void setText(String newText) { - if (newText == null || !newText.equals(fText)) { - willChange(); - fText = newText; - markDirty(); - changed(); - } - } - - /** - * Tests whether the figure accepts typing. - * @see org.jhotdraw.standard.TextHolder#acceptsTyping() - */ - public boolean acceptsTyping() { - return !fIsReadOnly; - } - - /** - * @see org.jhotdraw.figures.AttributeFigure#drawBackground(java.awt.Graphics) - */ - public void drawBackground(Graphics g) { - Rectangle r = displayBox(); - g.fillRect(r.x, r.y, r.width, r.height); - } - - /** - * @see org.jhotdraw.figures.AttributeFigure#drawFrame(java.awt.Graphics) - */ - public void drawFrame(Graphics g) { - g.setFont(fFont); - g.setColor((Color) getAttribute(FigureAttributeConstant.TEXT_COLOR)); - FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(fFont); - Rectangle r = displayBox(); - g.drawString(getText(), r.x, r.y + metrics.getAscent()); - } - - protected Dimension textExtent() { - if (!fSizeIsDirty) { - return new Dimension(fWidth, fHeight); - } - FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(fFont); - fWidth = metrics.stringWidth(getText()); - fHeight = metrics.getHeight(); - fSizeIsDirty = false; - return new Dimension(fWidth, fHeight); - } - - protected void markDirty() { - fSizeIsDirty = true; - } - - /** - * Gets the number of columns to be overlaid when the figure is edited. - * @see org.jhotdraw.standard.TextHolder#overlayColumns() - */ - public int overlayColumns() { - int length = getText().length(); - int columns = 20; - if (length != 0) { - columns = getText().length() + 3; - } - return columns; - } - - /** - * @see org.jhotdraw.framework.Figure#handles() - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - handles.add(new NullHandle(this, RelativeLocator.northWest())); - handles.add(new NullHandle(this, RelativeLocator.northEast())); - handles.add(new NullHandle(this, RelativeLocator.southEast())); - handles.add(new FontSizeHandle(this, RelativeLocator.southWest())); - return new HandleEnumerator(handles); - } - - /** - * @see org.jhotdraw.util.Storable#write(org.jhotdraw.util.StorableOutput) - */ - public void write(StorableOutput dw) { - super.write(dw); - Rectangle r = displayBox(); - dw.writeInt(r.x); - dw.writeInt(r.y); - dw.writeString(getText()); - dw.writeString(fFont.getName()); - dw.writeInt(fFont.getStyle()); - dw.writeInt(fFont.getSize()); - dw.writeBoolean(fIsReadOnly); - dw.writeStorable(getObservedFigure()); - dw.writeStorable(getLocator()); - } - - /** - * @see org.jhotdraw.util.Storable#read(org.jhotdraw.util.StorableInput) - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - markDirty(); - basicDisplayBox(new Point(dr.readInt(), dr.readInt()), null); - setText(dr.readString()); - fFont = new Font(dr.readString(), dr.readInt(), dr.readInt()); - fIsReadOnly = dr.readBoolean(); - - setObservedFigure((Figure) dr.readStorable()); - if (getObservedFigure() != null) { - getObservedFigure().addFigureChangeListener(this); - } - setLocator((OffsetLocator) dr.readStorable()); - } - - private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException { - s.defaultReadObject(); - - if (getObservedFigure() != null) { - getObservedFigure().addFigureChangeListener(this); - } - markDirty(); - } - - /** - * @see org.jhotdraw.standard.TextHolder#connect(org.jhotdraw.framework.Figure) - */ - public void connect(Figure figure) { - if (getObservedFigure() != null) { - getObservedFigure().removeFigureChangeListener(this); - } - - setObservedFigure(figure); - setLocator(new OffsetLocator(getObservedFigure().connectedTextLocator(this))); - getObservedFigure().addFigureChangeListener(this); - willChange(); - updateLocation(); - changed(); - } - - /** - * @see org.jhotdraw.framework.FigureChangeListener#figureChanged(org.jhotdraw.framework.FigureChangeEvent) - */ - public void figureChanged(FigureChangeEvent e) { - willChange(); - updateLocation(); - changed(); - } - - /** - * @see org.jhotdraw.framework.FigureChangeListener#figureRemoved(org.jhotdraw.framework.FigureChangeEvent) - */ - public void figureRemoved(FigureChangeEvent e) { - if (listener() != null) { - Rectangle rect = invalidateRectangle(displayBox()); - listener().figureRemoved(new FigureChangeEvent(this, rect, e)); - } - } - - /** - * @see org.jhotdraw.framework.FigureChangeListener#figureRequestRemove(org.jhotdraw.framework.FigureChangeEvent) - */ - public void figureRequestRemove(FigureChangeEvent e) { - } - - /** - * @see org.jhotdraw.framework.FigureChangeListener#figureInvalidated(org.jhotdraw.framework.FigureChangeEvent) - */ - public void figureInvalidated(FigureChangeEvent e) { - } - - /** - * @see org.jhotdraw.framework.FigureChangeListener#figureRequestUpdate(org.jhotdraw.framework.FigureChangeEvent) - */ - public void figureRequestUpdate(FigureChangeEvent e) { - } - - /** - * Updates the location relative to the connected figure. - * The TextFigure is centered around the located point. - */ - protected void updateLocation() { - if (getLocator() != null) { - Point p = getLocator().locate(getObservedFigure()); - - p.x -= size().width / 2 + fOriginX; - p.y -= size().height / 2 + fOriginY; - if (p.x != 0 || p.y != 0) { - //willChange(); - basicMoveBy(p.x, p.y); - //changed(); - } - } - } - - /** - * @see org.jhotdraw.framework.Figure#release() - */ - public void release() { - super.release(); - disconnect(getObservedFigure()); - } - - /** - * Disconnects a text holder from a connect figure. - * @see org.jhotdraw.standard.TextHolder#disconnect(org.jhotdraw.framework.Figure) - */ - public void disconnect(Figure disconnectFigure) { - if (disconnectFigure != null) { - disconnectFigure.removeFigureChangeListener(this); - } - setLocator(null); - setObservedFigure(null); - } - - protected void setObservedFigure(Figure newObservedFigure) { - fObservedFigure = newObservedFigure; - } - - public Figure getObservedFigure() { - return fObservedFigure; - } - - protected void setLocator(OffsetLocator newLocator) { - fLocator = newLocator; - } - - protected OffsetLocator getLocator() { - return fLocator; - } - - /** - * @see org.jhotdraw.framework.Figure#getTextHolder() - */ - public TextHolder getTextHolder() { - return this; - } - - /** - * Creates the current font to be used for new text figures. - */ - static public Font createCurrentFont() { - return new Font(fgCurrentFontName, fgCurrentFontStyle, fgCurrentFontSize); - } - - /** - * Sets the current font name - */ - static public void setCurrentFontName(String name) { - fgCurrentFontName = name; - } - - /** - * Sets the current font size. - */ - static public void setCurrentFontSize(int size) { - fgCurrentFontSize = size; - } - - /** - * Sets the current font style. - */ - static public void setCurrentFontStyle(int style) { - fgCurrentFontStyle = style; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/TextTool.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/TextTool.java deleted file mode 100644 index dcea3c6b6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/TextTool.java +++ /dev/null @@ -1,303 +0,0 @@ -/* - * @(#)TextTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.FloatingTextField; -import org.jhotdraw.util.UndoableAdapter; -import org.jhotdraw.util.Undoable; -import java.awt.*; -import java.awt.event.*; - -/** - * Tool to create new or edit existing text figures. - * The editing behavior is implemented by overlaying the - * Figure providing the text with a FloatingTextField.<p> - * A tool interaction is done once a Figure that is not - * a TextHolder is clicked. - * - * @see TextHolder - * @see FloatingTextField - * - * @version <$CURRENT_VERSION$> - */ -public class TextTool extends CreationTool { - - private FloatingTextField myTextField; - private TextHolder myTypingTarget; - - /** - * The selected figure is different from the TextHolder as the TextHolder - * may be included in a DecoratorFigure. Thus, the DecoratorFigure is selected - * while the TextFigure is edited. - */ - private Figure mySelectedFigure; - - public TextTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor, prototype); - } - - /** - * If the pressed figure is a TextHolder it can be edited otherwise - * a new text figure is created. - */ - public void mouseDown(MouseEvent e, int x, int y) - { - setView((DrawingView)e.getSource()); - - if (getTypingTarget() != null) { - editor().toolDone(); - return; - } - - TextHolder textHolder = null; - Figure pressedFigure = drawing().findFigureInside(x, y); - if (pressedFigure != null) { - textHolder = pressedFigure.getTextHolder(); - setSelectedFigure(pressedFigure); - } - - if ((textHolder != null) && textHolder.acceptsTyping()) { - // do not create a new TextFigure but edit existing one - beginEdit(textHolder); - } - else { - super.mouseDown(e, x, y); - // update view so the created figure is drawn before the floating text - // figure is overlaid. (Note, fDamage should be null in StandardDrawingView - // when the overlay figure is drawn because a JTextField cannot be scrolled) - view().checkDamage(); - beginEdit(getCreatedFigure().getTextHolder()); - } - } - - public void mouseDrag(MouseEvent e, int x, int y) { - } - - public void mouseUp(MouseEvent e, int x, int y) { - if (!isActive()) { - editor().toolDone(); - } - } - - /** - * Terminates the editing of a text figure. - */ - public void deactivate() { - endEdit(); - super.deactivate(); - } - - /** - * Sets the text cursor. - */ - public void activate() { - super.activate(); - // JDK1.1 TEXT_CURSOR has an incorrect hot spot - //view().setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); - } - - /** - * Test whether the text tool is currently activated and is displaying - * a overlay TextFigure for accepting input. - * - * @return true, if the text tool has a accepting target TextFigure for its input, false otherwise - */ - public boolean isActive() { - return (getTypingTarget() != null); - } - - protected void beginEdit(TextHolder figure) { - if (getFloatingTextField() == null) { - setFloatingTextField(createFloatingTextField()); - } - - if (figure != getTypingTarget() && getTypingTarget() != null) { - endEdit(); - } - - getFloatingTextField().createOverlay((Container)view(), figure.getFont()); - getFloatingTextField().setBounds(fieldBounds(figure), figure.getText()); - - setTypingTarget(figure); - } - - protected void endEdit() { - if (getTypingTarget() != null) { - if (getAddedFigure() != null) { - if (!isDeleteTextFigure()) { - // figure has been created and not immediately deleted - setUndoActivity(createPasteUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getAddedFigure()) - ); - getTypingTarget().setText(getFloatingTextField().getText()); - } - } - else if (isDeleteTextFigure()) { - // delete action - setUndoActivity(createDeleteUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getSelectedFigure()) - ); - // perform delete operation of DeleteCommand.UndoActivity - getUndoActivity().redo(); - } - else { - // put affected figure into a figure enumeration - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getTypingTarget().getRepresentingFigure())); - getTypingTarget().setText(getFloatingTextField().getText()); - ((TextTool.UndoActivity)getUndoActivity()).setBackupText(getTypingTarget().getText()); - } - - setTypingTarget(null); - getFloatingTextField().endOverlay(); - } - else { - setUndoActivity(null); - } - setAddedFigure(null); - setCreatedFigure(null); - setSelectedFigure(null); - } - - protected boolean isDeleteTextFigure() { - return getFloatingTextField().getText().length() == 0; - } - - private Rectangle fieldBounds(TextHolder figure) { - Rectangle box = figure.textDisplayBox(); - int nChars = figure.overlayColumns(); - Dimension d = getFloatingTextField().getPreferredSize(nChars); - return new Rectangle(box.x, box.y, d.width, d.height); - } - - protected void setTypingTarget(TextHolder newTypingTarget) { - myTypingTarget = newTypingTarget; - } - - protected TextHolder getTypingTarget() { - return myTypingTarget; - } - - private void setSelectedFigure(Figure newSelectedFigure) { - mySelectedFigure = newSelectedFigure; - } - - protected Figure getSelectedFigure() { - return mySelectedFigure; - } - - private FloatingTextField createFloatingTextField() { - return new FloatingTextField(); - } - - private void setFloatingTextField(FloatingTextField newFloatingTextField) { - myTextField = newFloatingTextField; - } - - protected FloatingTextField getFloatingTextField() { - return myTextField; - } - - protected Undoable createDeleteUndoActivity() { - FigureTransferCommand cmd = new DeleteCommand("Delete", editor()); - return new DeleteCommand.UndoActivity(cmd); - } - - protected Undoable createPasteUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new TextTool.UndoActivity(view(), getTypingTarget().getText()); - } - - public static class UndoActivity extends UndoableAdapter { - private String myOriginalText; - private String myBackupText; - - public UndoActivity(DrawingView newDrawingView, String newOriginalText) { - super(newDrawingView); - setOriginalText(newOriginalText); - setUndoable(true); - setRedoable(true); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - - getDrawingView().clearSelection(); - setText(getOriginalText()); - - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - - getDrawingView().clearSelection(); - setText(getBackupText()); - - return true; - } - - protected boolean isValidText(String toBeChecked) { - return ((toBeChecked != null) && (toBeChecked.length() > 0)); - } - - protected void setText(String newText) { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - if (currentFigure.getTextHolder() != null) { - currentFigure.getTextHolder().setText(newText); - } - } - } - - public void setBackupText(String newBackupText) { - myBackupText = newBackupText; - } - - public String getBackupText() { - return myBackupText; - } - - public void setOriginalText(String newOriginalText) { - myOriginalText = newOriginalText; - } - - public String getOriginalText() { - return myOriginalText; - } - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/figures/UngroupCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/figures/UngroupCommand.java deleted file mode 100644 index 09f8cc467..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/figures/UngroupCommand.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * @(#)UngroupCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.figures; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.UndoableAdapter; -import org.jhotdraw.util.Undoable; - -/** - * Command to ungroup the selected figures. - * - * @see GroupCommand - * - * @version <$CURRENT_VERSION$> - */ -public class UngroupCommand extends AbstractCommand { - - /** - * Constructs a group command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public UngroupCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - // selection of group figures - getUndoActivity().setAffectedFigures(view().selection()); - view().clearSelection(); - - ((UngroupCommand.UndoActivity)getUndoActivity()).ungroupFigures(); - view().checkDamage(); - } - - public boolean isExecutableWithView() { - FigureEnumeration fe = view().selection(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - currentFigure = currentFigure.getDecoratedFigure(); - - if (!(currentFigure instanceof GroupFigure)) { - return false; - } - } - - return view().selectionCount() > 0; - - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new UngroupCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - getDrawingView().clearSelection(); - - FigureEnumeration groupFigures = getAffectedFigures(); - while (groupFigures.hasNextFigure()) { - Figure groupFigure = groupFigures.nextFigure(); - // orphan individual figures from the group - getDrawingView().drawing().orphanAll(groupFigure.figures()); - - Figure figure = getDrawingView().drawing().add(groupFigure); - getDrawingView().addToSelection(figure); - } - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - getDrawingView().drawing().orphanAll(getAffectedFigures()); - getDrawingView().clearSelection(); - ungroupFigures(); - return true; - } - return false; - } - - protected void ungroupFigures() { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure selected = fe.nextFigure(); - Figure group = getDrawingView().drawing().orphan(selected); - - getDrawingView().drawing().addAll(group.figures()); - getDrawingView().addToSelectionAll(group.figures()); - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/ConnectionFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/ConnectionFigure.java deleted file mode 100644 index 4195d675b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/ConnectionFigure.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * @(#)ConnectionFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.awt.Point; - -/** - * Figures to connect Connectors provided by Figures. - * A ConnectionFigure knows its start and end Connector. - * It uses the Connectors to locate its connection points.<p> - * A ConnectionFigure can have multiple segments. It provides - * operations to split and join segments. - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * Strategy is used encapsulate the algorithm to locate the connection point. - * ConnectionFigure is the Strategy context and Connector is the Strategy.<br> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld026.htm>Observer</a></b><br> - * Observer is used to track changes of the connected figures. A connection - * figure registers itself as listeners or observers of the source and - * target connector. - * <hr> - * - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ - -public interface ConnectionFigure extends Figure, FigureChangeListener { - - /** - * Sets the start Connector of the connection. - * @param start the start connector of the connection - */ - public void connectStart(Connector start); - - /** - * Sets the end Connector of the connection. - * @param end the end connector of the connection - */ - public void connectEnd(Connector end); - - /** - * Updates the connection - */ - public void updateConnection(); - - /** - * Disconnects the start figure from the dependent figure - */ - public void disconnectStart(); - - /** - * Disconnects the end figure from the dependent figure - */ - public void disconnectEnd(); - - /** - * Gets the start Connector - */ - public Connector getStartConnector(); - - /** - * Gets the end Connector. - */ - public Connector getEndConnector(); - - /** - * Checks if two figures can be connected. Implement this method - * to constrain the allowed connections between figures. - */ - public boolean canConnect(Figure start, Figure end); - - /** - * Checks if the ConnectionFigure connects the same figures. - */ - public boolean connectsSame(ConnectionFigure other); - - /** - * Sets the start point. - */ - public void startPoint(int x, int y); - - /** - * Sets the end point. - */ - public void endPoint(int x, int y); - - /** - * Gets the start point. - */ - public Point startPoint(); - - /** - * Gets the end point. - */ - public Point endPoint(); - - /** - * Sets the position of the point at the given position - */ - public void setPointAt(Point p, int index); - - /** - * Gets the Point at the given position - */ - public Point pointAt(int index); - - /** - * Gets the number of points or nodes of the connection - */ - public int pointCount(); - - /** - * Splits the hit segment. - * @param x the x position where the figure should be split - * @param y the y position where the figure should be split - * @return the index of the splitting point - */ - public int splitSegment(int x, int y); - - - /** - * Joins the hit segments. - * @param x the position where the figure should be joined. - * @param y the position where the figure should be joined. - * @return whether the segment was joined - */ - public boolean joinSegments(int x, int y); - - /** - * Gets the start figure of the connection. - */ - public Figure startFigure(); - - /** - * Gets the end figure of the connection. - */ - public Figure endFigure(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/Connector.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/Connector.java deleted file mode 100644 index ae9ffdb4a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/Connector.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * @(#)Connector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.awt.*; -import java.io.Serializable; - -import org.jhotdraw.util.*; - -/** - * Connectors know how to locate a connection point on a figure. - * A Connector knows its owning figure and can determine either - * the start or the endpoint of a given connection figure. A connector - * has a display box that describes the area of a figure it is - * responsible for. A connector can be visible but it doesn't have - * to be.<br> - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld004.htm>Strategy</a></b><br> - * Connector implements the strategy to determine the connections points.<br> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld016.htm>Factory Method</a></b><br> - * Connectors are created by the Figure's factory method connectorAt. - * <hr> - * - * @see Figure#connectorAt - * @see ConnectionFigure - * - * @version <$CURRENT_VERSION$> - */ -public interface Connector extends Serializable, Storable { - - /** - * Finds the start point for the connection. - */ - public abstract Point findStart(ConnectionFigure connection); - - /** - * Finds the end point for the connection. - */ - public abstract Point findEnd(ConnectionFigure connection); - - /** - * Gets the connector's owner. - */ - public abstract Figure owner(); - - /** - * Gets the display box of the connector. - */ - public abstract Rectangle displayBox(); - - /** - * Tests if a point is contained in the connector. - */ - public abstract boolean containsPoint(int x, int y); - - /** - * Draws this connector. Connectors don't have to be visible - * and it is OK leave this method empty. - */ - public abstract void draw(Graphics g); - - /** - * Requests that the connector should show itself or hide itself. The - * ConnectionFigure which desires to connect to this Connector is passed in. - * If a connector should show itself it should do so when draw is called, if - * so desired. - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure courtingConnection); - - /** - * Supports connector dragging. - * - */ - public abstract Point connectorMovedTo(int x, int y); - - - /** - * Returns a 'finalized' connector. Can be used to change Connector. - * - * @param start - true if a startConnector - * @return - final Connector - */ - public Connector finalizeConnector(boolean start); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/Cursor.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/Cursor.java deleted file mode 100644 index 9bf56c7ef..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/Cursor.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * @(#)Cursor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -/** - * This interface has the purpose to reduce the dependency of JHotDraw on AWT - * classes and interfaces. - * See {@link org.jhotdraw.standard.AWTCursor} for an example of implementation - * for this interface. - * - * <p>Created on: 08/05/2003.</p> - * - * @version $Revision$ - * @author <a href="mailto:ricardo_padilha@users.sourceforge.net">Ricardo - * Sangoi Padilha</a> - * @see org.jhotdraw.standard.AWTCursor - */ -public interface Cursor { - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/Drawing.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/Drawing.java deleted file mode 100644 index 420b1cfdd..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/Drawing.java +++ /dev/null @@ -1,317 +0,0 @@ -/* - * @(#)Drawing.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import org.jhotdraw.util.*; -import java.awt.*; -import java.util.*; -import java.util.List; -import java.io.Serializable; - -/** - * Drawing is a container for figures. - * <p> - * Drawing sends out DrawingChanged events to DrawingChangeListeners - * whenever a part of its area was invalidated. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld026.htm>Observer</a></b><br> - * The Observer pattern is used to decouple the Drawing from its views and - * to enable multiple views.<hr> - * - * @see Figure - * @see DrawingView - * @see FigureChangeListener - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ - -public interface Drawing - extends Storable, FigureChangeListener, Serializable { - - /** - * Releases the drawing and its contained figures. - */ - public void release(); - - /** - * Returns an enumeration to iterate in - * Z-order back to front over the figures. - */ - public FigureEnumeration figures(); - - /** - * Returns an enumeration to iterate in - * Z-order back to front over the figures - * that lie within the absolute bounds. - */ - public FigureEnumeration figures(Rectangle viewRectangle); - - /** - * Returns an enumeration to iterate in - * Z-order front to back over the figures. - */ - public FigureEnumeration figuresReverse(); - - /** - * Finds a top level Figure. Use this call for hit detection that - * should not descend into the figure's children. - */ - public Figure findFigure(int x, int y); - - /** - * Finds a top level Figure that intersects the given rectangle. - */ - public Figure findFigure(Rectangle r); - - /** - * Finds a top level Figure, but supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - * @param x the x coordinate - * @param y the y coordinate - * @param without the figure to be ignored during - * the find. - */ - public Figure findFigureWithout(int x, int y, Figure without); - - /** - * Finds a top level Figure that intersects the given rectangle. - * It supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - */ - public Figure findFigure(Rectangle r, Figure without); - - /** - * Finds a figure but descends into a figure's - * children. Use this method to implement <i>click-through</i> - * hit detection, that is, you want to detect the inner most - * figure containing the given point. - */ - public Figure findFigureInside(int x, int y); - - /** - * Finds a figure but descends into a figure's - * children. It supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - * @param x the x coordinate - * @param y the y coordinate - * @param without the figure to be ignored during - * the find. - */ - public Figure findFigureInsideWithout(int x, int y, Figure without); - - /** - * Checks if the composite figure has the argument as one of - * its children. - * - * @param figure figure to be searched in all descendants - * @return true if the figure is part of this Drawing, else otherwise - */ - public boolean includes(Figure figure); - - /** - * Check whether a given figure is a (direct) child figure of this CompositeFigure. - * - * @param figure figure to be searched in all direct descendents - * @return true if the figure is a direct child of this Drawing, else otherwise - */ - public boolean containsFigure(Figure figure); - - /** - * Adds a listener for this drawing. - */ - public void addDrawingChangeListener(DrawingChangeListener listener); - - /** - * Removes a listener from this drawing. - */ - public void removeDrawingChangeListener(DrawingChangeListener listener); - - /** - * Gets the listeners of a drawing. - * - * @return new iterator of all registered change listener - */ - public Iterator drawingChangeListeners(); - - /** - * Adds a figure and sets its container to refer to this drawing. - * - * @param figure to be added to the drawing - * @return the figure that was inserted (might be different from the figure specified). - */ - public Figure add(Figure figure); - - /** - * Adds a list of figures. - * - * @deprecated use addAll(FigureEnumeration) instead - */ - public void addAll(List newFigures); - - /** - * Adds a FigureEnumeration of figures. - * - * @param fe (unused) enumeration containing all figures to be added - * @see #add - */ - public void addAll(FigureEnumeration fe); - - /** - * Removes the figure from the drawing and releases it. - * - * @param figure that is part of the drawing and should be removed - * @return the figure that has been removed (might be different from the figure specified) - */ - public Figure remove(Figure figure); - - /** - * Removes a figure from the figure list, but - * doesn't release it. Use this method to temporarily - * manipulate a figure outside of the drawing. - * - * @param figure that is part of the drawing and should be added - */ - public Figure orphan(Figure figure); - - /** - * Removes a list of figures from the figure's list - * without releasing the figures. - * - * @see #orphan - * @deprecated use orphanAll(FigureEnumeration) instead - */ - public void orphanAll(List orphanFigures); - - /** - * Removes a FigureEnumeration of figures from the figure's list - * without releasing the figures. - * @see #orphan - */ - public void orphanAll(FigureEnumeration fe); - - /** - * Removes a list of figures . - * - * @see #remove - * @deprecated use removeAll(FigureEnumeration) instead - */ - public void removeAll(List figures); - - /** - * Removes a FigureEnumeration of figures. - * @see #remove - */ - public void removeAll(FigureEnumeration fe); - - /** - * Replaces a figure in the drawing without removing it from the drawing. - * The figure to be replaced must be part of the drawing. - * - * @param figure figure to be replaced - * @param replacement figure that should replace the specified figure - * @return the figure that has been inserted (might be different from the figure specified) - */ - public Figure replace(Figure figure, Figure replacement); - - /** - * Sends a figure to the back of the drawing. - * - * @param figure that is part of the drawing - */ - public void sendToBack(Figure figure); - - /** - * Brings a figure to the front. - * - * @param figure that is part of the drawing - */ - public void bringToFront(Figure figure); - - /** - * Sends a figure to a certain layer within a drawing. Each figure - * lays in a unique layer and the layering order decides which - * figure is drawn on top of another figure. Figures with a higher - * layer number have usually been added later and may overlay - * figures in lower layers. Layers are counted from to (the number - * of figures - 1). - * The figure is removed from its current layer (if it has been already - * part of this drawing) and is transferred to the specified layers after - * all figures between the original layer and the new layer are shifted to - * one layer below to fill the layer sequence. It is not possible to skip a - * layer number and if the figure is sent to a layer beyond the latest layer - * it will be added as the last figure to the drawing and its layer number - * will be set to the be the one beyond the latest layer so far. - * - * @param figure figure to be sent to a certain layer - * @param layerNr target layer of the figure - */ - public void sendToLayer(Figure figure, int layerNr); - - /** - * Gets the layer for a certain figure (first occurrence). The number - * returned is the number of the layer in which the figure is placed. - * - * @param figure figure to be queried for its layering place - * @return number of the layer in which the figure is placed and -1 if the - * figure could not be found. - * @see #sendToLayer - */ - public int getLayer(Figure figure); - - /** - * Gets the figure from a certain layer. - * - * @param layerNr number of the layer which figure should be returned - * @return figure from the layer specified, null, if the layer nr was outside - * the number of possible layer (0...(number of figures - 1)) - * @see #sendToLayer - */ - public Figure getFigureFromLayer(int layerNr); - - /** - * Draws all the figures back to front. - */ - public void draw(Graphics g); - - /** - * Draws only the given figures. - */ - public void draw(Graphics g, FigureEnumeration fe); - - /** - * Acquires the drawing lock. - */ - public void lock(); - - /** - * Releases the drawing lock. - */ - public void unlock(); - - /** - * Used to optimize rendering. Rendering of many objects may - * be slow until this method is called. The view rectangle - * should at least approximately enclose the CompositeFigure. - * If the view rectangle is too small or too large, performance - * may suffer. - */ - public void init(Rectangle viewRectangle); - - public String getTitle(); - public void setTitle(String name); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingChangeEvent.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingChangeEvent.java deleted file mode 100644 index 04419b0f6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingChangeEvent.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @(#)DrawingChangeEvent.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.awt.Rectangle; -import java.util.EventObject; - -/** - * The event passed to DrawingChangeListeners. - * - * @version <$CURRENT_VERSION$> - */ -public class DrawingChangeEvent extends EventObject { - - private Rectangle myRectangle; - - /** - * Constructs a drawing change event. - */ - public DrawingChangeEvent(Drawing newSource, Rectangle newRect) { - super(newSource); - myRectangle = newRect; - } - - /** - * Gets the changed drawing - */ - public Drawing getDrawing() { - return (Drawing)getSource(); - } - - /** - * Gets the changed rectangle - */ - public Rectangle getInvalidatedRectangle() { - return myRectangle; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingChangeListener.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingChangeListener.java deleted file mode 100644 index 27999b593..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingChangeListener.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * @(#)DrawingChangeListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -/** - * Listener interested in Drawing changes. - * - * @version <$CURRENT_VERSION$> - */ -public interface DrawingChangeListener { - - /** - * Sent when an area is invalid - */ - public void drawingInvalidated(DrawingChangeEvent e); - - /** - * Sent when the drawing Title has changed - */ - public void drawingTitleChanged(DrawingChangeEvent e); - /** - * Sent when the drawing wants to be refreshed - */ - public void drawingRequestUpdate(DrawingChangeEvent e); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingEditor.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingEditor.java deleted file mode 100644 index 28a981dd5..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingEditor.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * @(#)DrawingEditor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import org.jhotdraw.util.UndoManager; - -/** - * DrawingEditor defines the interface for coordinating - * the different objects that participate in a drawing editor. - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld022.htm>Mediator</a></b><br> - * DrawingEditor is the mediator. It decouples the participants - * of a drawing editor. - * - * @see Tool - * @see DrawingView - * @see Drawing - * - * @version <$CURRENT_VERSION$> - */ -public interface DrawingEditor extends FigureSelectionListener { - - /** - * Gets the editor's drawing view. - */ - public DrawingView view(); - - public DrawingView[] views(); - /** - * Gets the editor's drawing. - */ -// public Drawing drawing(); - - /** - * Gets the editor's current tool. - */ - public Tool tool(); - - /** - * Informs the editor that a tool has done its interaction. - * This method can be used to switch back to the default tool. - */ - public void toolDone(); - - /** - * Informs that the current figure selection has changed. - * Override this method to handle selection changes. - */ - public void figureSelectionChanged(DrawingView view); - - public void addViewChangeListener(ViewChangeListener vsl); - public void removeViewChangeListener(ViewChangeListener vsl); - - /** - * Shows a status message in the editor's user interface - */ - public void showStatus(String string); - - public UndoManager getUndoManager(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingView.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingView.java deleted file mode 100644 index d35c7687a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/DrawingView.java +++ /dev/null @@ -1,315 +0,0 @@ -/* - * @(#)DrawingView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.awt.*; -import java.awt.image.ImageObserver; -import java.util.Collection; - -/** - * DrawingView renders a Drawing and listens to its changes. - * It receives user input and delegates it to the current tool. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld026.htm>Observer</a></b><br> - * DrawingView observes drawing for changes via the DrawingListener interface.<br> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld032.htm>State</a></b><br> - * DrawingView plays the role of the StateContext in - * the State pattern. Tool is the State.<br> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * DrawingView is the StrategyContext in the Strategy pattern - * with regard to the UpdateStrategy. <br> - * DrawingView is the StrategyContext for the PointConstrainer. - * - * @see Drawing - * @see Painter - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ -public interface DrawingView extends ImageObserver, DrawingChangeListener { - - /** - * Sets the view's editor. - */ - public void setEditor(DrawingEditor editor); - - /** - * Gets the current tool. - */ - public Tool tool(); - - /** - * Gets the drawing. - */ - public Drawing drawing(); - - /** - * Sets and installs another drawing in the view. - */ - public void setDrawing(Drawing d); - - /** - * Gets the editor. - */ - public DrawingEditor editor(); - - /** - * Adds a figure to the drawing. - * @return the added figure. - */ - public Figure add(Figure figure); - - /** - * Removes a figure from the drawing. - * @return the removed figure - */ - public Figure remove(Figure figure); - - /** - * Adds a collections of figures to the drawing. - */ - public void addAll(Collection figures); - - /** - * Gets the size of the drawing. - */ - public Dimension getSize(); - - /** - * Gets the minimum dimension of the drawing. - */ - public Dimension getMinimumSize(); - - /** - * Gets the preferred dimension of the drawing.. - */ - public Dimension getPreferredSize(); - - /** - * Sets the current display update strategy. - * @see Painter - */ - public void setDisplayUpdate(Painter updateStrategy); - - /** - * Gets the current display update strategy. - * @see Painter - */ - public Painter getDisplayUpdate(); - - /** - * Gets an enumeration over the currently selected figures. - * The selection is a snapshot of the current selection - * which does not get changed anymore - * - * @return an enumeration with the currently selected figures. - */ - public FigureEnumeration selection(); - - /** - * Gets the currently seleced figures in Z order. - * The selection is a snapshot of the current selection - * which does not get changed anymore - * - * @see #selection - * @return an enumeration with the currently selected figures. - */ - public FigureEnumeration selectionZOrdered(); - - /** - * Gets the number of selected figures. - */ - public int selectionCount(); - - /** - * Test whether a given figure is selected. - */ - public boolean isFigureSelected(Figure checkFigure); - - /** - * Adds a figure to the current selection. - */ - public void addToSelection(Figure figure); - - /** - * Adds a collections of figures to the current selection. - */ - public void addToSelectionAll(Collection figures); - - /** - * Adds a FigureEnumeration to the current selection. - */ - public void addToSelectionAll(FigureEnumeration fe); - - /** - * Removes a figure from the selection. - */ - public void removeFromSelection(Figure figure); - - /** - * If a figure isn't selected it is added to the selection. - * Otherwise it is removed from the selection. - */ - public void toggleSelection(Figure figure); - - /** - * Clears the current selection. - */ - public void clearSelection(); - - /** - * Gets the current selection as a FigureSelection. A FigureSelection - * can be cut, copied, pasted. - */ - public FigureSelection getFigureSelection(); - - /** - * Finds a handle at the given coordinates. - * @return the hit handle, null if no handle is found. - */ - public Handle findHandle(int x, int y); - - /** - * Gets the position of the last click inside the view. - */ - public Point lastClick(); - - /** - * Sets the current point constrainer. - */ - public void setConstrainer(PointConstrainer p); - - /** - * Gets the current grid setting. - */ - public PointConstrainer getConstrainer(); - - /** - * Checks whether the drawing has some accumulated damage - */ - public void checkDamage(); - - /** - * Repair the damaged area - */ - public void repairDamage(); - - /** - * Paints the drawing view. The actual drawing is delegated to - * the current update strategy. - * @see Painter - */ - public void paint(Graphics g); - - /** - * Creates an image with the given dimensions - */ - public Image createImage(int width, int height); - - /** - * Gets a graphic to draw into - */ - public Graphics getGraphics(); - - /** - * Gets the background color of the DrawingView - */ - public Color getBackground(); - - /** - * Sets the background color of the DrawingView - */ - public void setBackground(Color c); - - /** - * Draws the contents of the drawing view. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void drawAll(Graphics g); - - /** - * Draws the given figures. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void draw(Graphics g, FigureEnumeration fe); - - /** - * Draws the currently active handles. - */ - public void drawHandles(Graphics g); - - /** - * Draws the drawing. - */ - public void drawDrawing(Graphics g); - - /** - * Draws the background. If a background pattern is set it - * is used to fill the background. Otherwise the background - * is filled in the background color. - */ - public void drawBackground(Graphics g); - - /** - * Sets the cursor of the DrawingView - */ - public void setCursor(Cursor c); - - /** - * Freezes the view by acquiring the drawing lock. - * @see Drawing#lock - */ - public void freezeView(); - - /** - * Unfreezes the view by releasing the drawing lock. - * @see Drawing#unlock - */ - public void unfreezeView(); - - /** - * Add a listener for selection changes in this DrawingView. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void addFigureSelectionListener(FigureSelectionListener fsl); - - /** - * Remove a listener for selection changes in this DrawingView. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void removeFigureSelectionListener(FigureSelectionListener fsl); - - /** - * Returns a FigureEnumeration of connection figures - */ - public FigureEnumeration getConnectionFigures(Figure inFigure); - - /** - * Inserts figures in a drawing at given offset. Optional check for connection figures - * - * @return enumeration which has been added to the drawing. The figures in the enumeration - * can have changed during adding them (e.g. they could have been decorated). - */ - public FigureEnumeration insertFigures(FigureEnumeration inFigures, int dx, int dy, boolean bCheck); - - /** - * Check whether the DrawingView is interactive, i.e. whether it accepts user input - * and whether it can display a drawing. - */ - public boolean isInteractive(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/Figure.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/Figure.java deleted file mode 100644 index 4f66cfd86..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/Figure.java +++ /dev/null @@ -1,334 +0,0 @@ -/* - * @(#)Figure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import org.jhotdraw.util.*; -import org.jhotdraw.standard.TextHolder; - -import java.awt.*; -import java.io.Serializable; - -/** - * The interface of a graphical figure. A figure knows - * its display box and can draw itself. A figure can be - * composed of several figures. To interact and manipulate - * with a figure it can provide Handles and Connectors.<p> - * A figure has a set of handles to manipulate its shape or attributes. - * A figure has one or more connectors that define how - * to locate a connection point.<p> - * Figures can have an open ended set of attributes. - * An attribute is identified by a string.<p> - * Default implementations for the Figure interface are provided - * by AbstractFigure.<p> - * - * Figures can have <a name="dependent_figure">dependent figure</a>s. The existence od dependent - * figures depend on another figure. This is the case for figures - * such as ConnectedTextFigures and LineDecoration. Thus, they are - * "externally" dependent on a figure in contrast to (internally) - * contained figures. This means, "normal" figures (figures that - * are not containers) can still have dependent figures. Dependent - * figures are especially important if the figure which the depend - * on is deleted because they should be removed as well (cascading delete). - * - * @see Handle - * @see Connector - * @see org.jhotdraw.standard.AbstractFigure - * - * @version <$CURRENT_VERSION$> - */ -public interface Figure - extends Storable, Cloneable, Serializable { - - /** - * Moves the Figure to a new location. - * @param dx the x delta - * @param dy the y delta - */ - public void moveBy(int dx, int dy); - - /** - * Changes the display box of a figure. This method is - * always implemented in figure subclasses. It only changes - * the displaybox and does not announce any changes. It - * is usually not called by the client. Clients typically call - * displayBox to change the display box. - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void basicDisplayBox(Point origin, Point corner); - - /** - * Changes the display box of a figure. Clients usually - * invoke this method. It changes the display box - * and announces the corresponding changes. - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void displayBox(Point origin, Point corner); - - /** - * Gets the display box of a figure - * @see #basicDisplayBox - */ - public Rectangle displayBox(); - - /** - * Draws the figure. - * @param g the Graphics to draw into - */ - public void draw(Graphics g); - - /** - * Returns the handles used to manipulate - * the figure. Handles is a Factory Method for - * creating handle objects. - * - * @return an type-safe iterator of handles - * @see Handle - */ - public HandleEnumeration handles(); - - /** - * Gets the size of the figure - */ - public Dimension size(); - - /** - * Gets the figure's center - */ - public Point center(); - - /** - * Checks if the Figure should be considered as empty. - */ - public boolean isEmpty(); - - /** - * Returns an Enumeration of the figures contained in this figure - */ - public FigureEnumeration figures(); - - /** - * Returns the figure that contains the given point. - */ - public Figure findFigureInside(int x, int y); - - /** - * Checks if a point is inside the figure. - */ - public boolean containsPoint(int x, int y); - - /** - * Returns a Clone of this figure - */ - public Object clone(); - - /** - * Changes the display box of a figure. This is a - * convenience method. Implementors should only - * have to override basicDisplayBox - * @see #displayBox - */ - public void displayBox(Rectangle r); - - /** - * Checks whether the given figure is contained in this figure. - */ - public boolean includes(Figure figure); - - /** - * Decomposes a figure into its parts. A figure is considered - * as a part of itself. - */ - public FigureEnumeration decompose(); - - /** - * Sets the Figure's container and registers the container - * as a figure change listener. A figure's container can be - * any kind of FigureChangeListener. A figure is not restricted - * to have a single container. - */ - public void addToContainer(FigureChangeListener c); - - /** - * Removes a figure from the given container and unregisters - * it as a change listener. - */ - public void removeFromContainer(FigureChangeListener c); - - /** - * Add a <a href="#dependent_figure">dependent figure</a>. - */ - public void addDependendFigure(Figure newDependendFigure); - - /** - * Remove a <a href="#dependent_figure">dependent figure</a>. - */ - public void removeDependendFigure(Figure oldDependendFigure); - - /** - * Get an enumeration of all <a href="#dependent_figure">dependent figures</a>. - */ - public FigureEnumeration getDependendFigures(); - - /** - * Gets the Figure's listeners. - */ - public FigureChangeListener listener(); - - /** - * Adds a listener for this figure. - */ - public void addFigureChangeListener(FigureChangeListener l); - - /** - * Removes a listener for this figure. - */ - public void removeFigureChangeListener(FigureChangeListener l); - - /** - * Releases a figure's resources. Release is called when - * a figure is removed from a drawing. Informs the listeners that - * the figure is removed by calling figureRemoved. - */ - public void release(); - - /** - * Invalidates the figure. This method informs its listeners - * that its current display box is invalid and should be - * refreshed. - */ - public void invalidate(); - - /** - * Informes that a figure is about to change such that its - * display box is affected. - * Here is an example of how it is used together with changed() - * <pre> - * public void move(int x, int y) { - * willChange(); - * // change the figure's location - * changed(); - * } - * </pre> - * @see #invalidate - * @see #changed - */ - public void willChange(); - - /** - * Informes that a figure has changed its display box. - * This method also triggers an update call for its - * registered observers. - * @see #invalidate - * @see #willChange - * - */ - public void changed(); - - /** - * Checks if this figure can be connected - */ - public boolean canConnect(); - - /** - * Gets a connector for this figure at the given location. - * A figure can have different connectors at different locations. - */ - public Connector connectorAt(int x, int y); - - /** - * Sets whether the connectors should be visible. - * Connectors can be optionally visible. Implement - * this method and react on isVisible to turn the - * connectors on or off. - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure connection); - - /** - * Returns the connection inset. This is only a hint that - * connectors can use to determine the connection location. - * The inset defines the area where the display box of a - * figure should not be connected. - * - */ - public Insets connectionInsets(); - - /** - * Returns the locator used to located connected text. - */ - public Locator connectedTextLocator(Figure text); - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name); - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - */ - public Object getAttribute(FigureAttributeConstant attributeConstant); - - /** - * Sets the named attribute to the new value - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value); - - /** - * Sets the named attribute to the new value - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value); - - /** - * Gets the z value (back-to-front ordering) of this figure. - * Z values are not guaranteed to not skip numbers. - */ - public int getZValue(); - - /** - * Sets the z value (back-to-front ordering) of this figure. - * Z values are not guaranteed to not skip numbers. - */ - public void setZValue(int z); - - public void visit(FigureVisitor visitor); - - /** - * Some figures have the ability to hold text. This method returns - * the adjunctant TextHolder. - * @return - */ - public TextHolder getTextHolder(); - - /** - * Get the underlying figure in case the figure has been decorated. - * If the figure has not been decorated the figure itself is returned. - * The DecoratorFigure does not release the the decorated figure but - * just returns it (in contrast to {@link org.jhotdraw.standard.DecoratorFigure.peelDecoration}). - * - * @return underlying, "real" without DecoratorFigure - * @see org.jhotdraw.standard.DecoratorFigure - */ - public Figure getDecoratedFigure(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureAttributeConstant.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureAttributeConstant.java deleted file mode 100644 index 78242c11d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureAttributeConstant.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * @(#)FigureAttributeConstant.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.io.Serializable; - -/** - * A FigureAttribute is a constant for accessing a special figure attribute. It - * does not contain a value but just defines a unique attribute ID. Therefore, - * they provide a type-safe way of defining attribute constants. - * (SourceForge feature request ID: <>) - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class FigureAttributeConstant implements Serializable, Cloneable { - - public static final String FRAME_COLOR_STR = "FrameColor"; - public static final FigureAttributeConstant FRAME_COLOR = new FigureAttributeConstant(FRAME_COLOR_STR, 1); - - public static final String FILL_COLOR_STR = "FillColor"; - public static final FigureAttributeConstant FILL_COLOR = new FigureAttributeConstant(FILL_COLOR_STR, 2); - - public static final String TEXT_COLOR_STR = "TextColor"; - public static final FigureAttributeConstant TEXT_COLOR = new FigureAttributeConstant(TEXT_COLOR_STR, 3); - - public static final String ARROW_MODE_STR = "ArrowMode"; - public static final FigureAttributeConstant ARROW_MODE = new FigureAttributeConstant(ARROW_MODE_STR, 4); - - public static final String FONT_NAME_STR = "FontName"; - public static final FigureAttributeConstant FONT_NAME = new FigureAttributeConstant(FONT_NAME_STR, 5); - - public static final String FONT_SIZE_STR = "FontSize"; - public static final FigureAttributeConstant FONT_SIZE = new FigureAttributeConstant(FONT_SIZE_STR, 6); - - public static final String FONT_STYLE_STR = "FontStyle"; - public static final FigureAttributeConstant FONT_STYLE = new FigureAttributeConstant(FONT_STYLE_STR, 7); - - public static final String URL_STR = "URL"; - public static final FigureAttributeConstant URL = new FigureAttributeConstant(URL_STR, 8); - - public static final String LOCATION_STR = "Location"; - public static final FigureAttributeConstant LOCATION = new FigureAttributeConstant(LOCATION_STR, 9); - - public static final String XALIGNMENT_STR = "XAlignment"; - public static final FigureAttributeConstant XALIGNMENT = new FigureAttributeConstant(XALIGNMENT_STR, 10); - - public static final String YALIGNMENT_STR = "YAlignment"; - public static final FigureAttributeConstant YALIGNMENT = new FigureAttributeConstant(YALIGNMENT_STR, 11); - - public static final String TOP_MARGIN_STR = "TopMargin"; - public static final FigureAttributeConstant TOP_MARGIN = new FigureAttributeConstant(TOP_MARGIN_STR, 12); - - public static final String RIGHT_MARGIN_STR = "RightMargin"; - public static final FigureAttributeConstant RIGHT_MARGIN = new FigureAttributeConstant(RIGHT_MARGIN_STR, 13); - - public static final String BOTTOM_MARGIN_STR = "BottomMargin"; - public static final FigureAttributeConstant BOTTOM_MARGIN = new FigureAttributeConstant(BOTTOM_MARGIN_STR, 14); - - public static final String LEFT_MARGIN_STR = "LeftMargin"; - public static final FigureAttributeConstant LEFT_MARGIN = new FigureAttributeConstant(LEFT_MARGIN_STR, 15); - - public static final String POPUP_MENU_STR = "PopupMenu"; - public static final FigureAttributeConstant POPUP_MENU = new FigureAttributeConstant(POPUP_MENU_STR, 16); - - private static FigureAttributeConstant[] attributeConstants; - - private int myID; - private String myName; - - private FigureAttributeConstant(String newName, int newID) { - setName(newName); - setID(newID); - addConstant(this); - } - - public FigureAttributeConstant(String newName) { - this(newName, attributeConstants.length+1); - } - - private void setName(String newName) { - myName = newName; - } - - public String getName() { - return myName; - } - - private void setID(int newID) { - myID = newID; - } - - public int getID() { - return myID; - } - - public boolean equals(Object compareObject) { - if (compareObject == null) { - return false; - } - if (!(compareObject instanceof FigureAttributeConstant)) { - return false; - } - FigureAttributeConstant compareAttribute = (FigureAttributeConstant)compareObject; - - if (compareAttribute.getID() != getID()) { - return false; - } - - if ((compareAttribute.getName() == null) && (getName() == null)) { - return true; - } - if ((compareAttribute.getName() != null) && (getName() != null)) { - return getName().equals(compareAttribute.getName()); - } - - return false; - } - - public int hashCode() { - return getID(); - } - - /** - * Constants are put into the place according to their ID, thus, it is - * recommended to have subsequent attribute IDs. - */ - private static void addConstant(FigureAttributeConstant newConstant) { - int idPos = newConstant.getID() - 1; - // attribute IDs must be unique, thus no two attributes - // with the same ID can be added - if ((idPos < attributeConstants.length) && (attributeConstants[idPos] != null)) { - throw new JHotDrawRuntimeException("No unique FigureAttribute ID: " + newConstant.getID()); - } - // increase capacity if necessary - if (idPos >= attributeConstants.length) { - FigureAttributeConstant[] tempStrs = new FigureAttributeConstant[idPos + 1]; - System.arraycopy(attributeConstants, 0, tempStrs, 0, attributeConstants.length); - attributeConstants = tempStrs; - } - attributeConstants[idPos] = newConstant; - } - - /** - * @return an existing constant for a given name or create a new one - */ - public static FigureAttributeConstant getConstant(String constantName) { - for (int i = 0; i < attributeConstants.length; i++) { - FigureAttributeConstant currentAttr = getConstant(i); - if ((currentAttr != null) && (currentAttr.getName() != null) && (currentAttr.getName().equals(constantName))) { - return currentAttr; - } - } - return new FigureAttributeConstant(constantName); - } - - public static FigureAttributeConstant getConstant(int constantId) { - return attributeConstants[constantId]; - } - - { - // use static initializer to create List before any constant is created - // initialize List only for the first constant (during debugging it - // appeared that the static initializer is invoked for any constant) - if (attributeConstants == null) { - attributeConstants = new FigureAttributeConstant[64]; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureChangeEvent.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureChangeEvent.java deleted file mode 100644 index 781571885..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureChangeEvent.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * @(#)FigureChangeEvent.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.awt.Rectangle; -import java.util.EventObject; - -/** - * FigureChange event passed to FigureChangeListeners. - * - * @version <$CURRENT_VERSION$> - */ -public class FigureChangeEvent extends EventObject { - - private Rectangle myRectangle; - private FigureChangeEvent myNestedEvent; - - private static final Rectangle EMPTY_RECTANGLE = new Rectangle(0, 0, 0, 0); - - /** - * Constructs an event for the given source Figure. The rectangle is the - * area to be invalvidated. - */ - public FigureChangeEvent(Figure newSource, Rectangle newRect) { - super(newSource); - myRectangle = newRect; - } - - public FigureChangeEvent(Figure newSource) { - super(newSource); - myRectangle = EMPTY_RECTANGLE; - } - - public FigureChangeEvent(Figure newSource, Rectangle newRect, FigureChangeEvent nestedEvent) { - this(newSource, newRect); - myNestedEvent = nestedEvent; - } - - /** - * Gets the changed figure - */ - public Figure getFigure() { - return (Figure)getSource(); - } - - /** - * Gets the changed rectangle - */ - public Rectangle getInvalidatedRectangle() { - return myRectangle; - } - - public FigureChangeEvent getNestedEvent() { - return myNestedEvent; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureChangeListener.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureChangeListener.java deleted file mode 100644 index f6b222802..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureChangeListener.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * @(#)FigureChangeListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.util.EventListener; - -/** - * Listener interested in Figure changes. - * - * @version <$CURRENT_VERSION$> - */ -public interface FigureChangeListener extends EventListener { - - /** - * Sent when an area is invalid - */ - public void figureInvalidated(FigureChangeEvent e); - - /** - * Sent when a figure changed - */ - public void figureChanged(FigureChangeEvent e); - - /** - * Sent when a figure was removed - */ - public void figureRemoved(FigureChangeEvent e); - - /** - * Sent when requesting to remove a figure. - */ - public void figureRequestRemove(FigureChangeEvent e); - - /** - * Sent when an update should happen. - * - */ - public void figureRequestUpdate(FigureChangeEvent e); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureEnumeration.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureEnumeration.java deleted file mode 100644 index a88ec6ada..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureEnumeration.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)FigureEnumeration.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -/** - * Interface for Enumerations that access Figures. - * It provides a method nextFigure, that hides the down casting - * from client code. - * - * @version <$CURRENT_VERSION$> - */ -public interface FigureEnumeration { - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Figure nextFigure(); - public boolean hasNextFigure(); - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureSelection.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureSelection.java deleted file mode 100644 index 74c444771..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureSelection.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)FigureSelection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -/** - * FigureSelection enables to transfer the selected figures - * to a clipboard.<p> - * Will soon be converted to the JDK 1.1 Transferable interface. - * - * @see org.jhotdraw.util.Clipboard - * - * @version <$CURRENT_VERSION$> - */ - -public interface FigureSelection { - - /** - * Gets the type of the selection. - */ - public String getType(); - - /** - * Gets the data of the selection. The result is returned - * as a FigureEnumeration of Figures. - * - * @return a copy of the figure selection. - */ - public Object getData(String type); -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureSelectionListener.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureSelectionListener.java deleted file mode 100644 index bab56b06f..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureSelectionListener.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * @(#)FigureSelectionListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -/** - * Listener interested in DrawingView selection changes. - * - * @version <$CURRENT_VERSION$> - */ -public interface FigureSelectionListener { - /** - * Sent when the figure selection has changed. - * @param view DrawingView - */ - public void figureSelectionChanged(DrawingView view); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureVisitor.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureVisitor.java deleted file mode 100644 index 2b340910a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/FigureVisitor.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * @(#)FigureVisitor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface FigureVisitor { - public void visitFigure(Figure hostFigure); - public void visitHandle(Handle hostHandle); - public void visitFigureChangeListener(FigureChangeListener hostFigureChangeListener); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/Handle.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/Handle.java deleted file mode 100644 index 3f37dfb99..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/Handle.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Handle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; - -import org.jhotdraw.util.Undoable; - -/** - * Handles are used to change a figure by direct manipulation. - * Handles know their owning figure and they provide methods to - * locate the handle on the figure and to track changes. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld004.htm>Adapter</a></b><br> - * Handles adapt the operations to manipulate a figure to a common interface. - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ -public interface Handle { - - public static final int HANDLESIZE = 8; - - /** - * Locates the handle on the figure. The handle is drawn - * centered around the returned point. - */ - public Point locate(); - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - */ - public void invokeStart(int x, int y, DrawingView view); - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @deprecated As of version 4.1, use invokeStart(x, y, drawingView) - */ - public void invokeStart(int x, int y, Drawing drawing); - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view); - - /** - * Tracks a step of the interaction. - * @param dx x delta of this step - * @param dy y delta of this step - * @deprecated As of version 4.1, - * use invokeStep(x, y, anchorX, anchorY, drawingView) - */ - public void invokeStep (int dx, int dy, Drawing drawing); - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view); - - /** - * Tracks the end of the interaction. - * @deprecated As of version 4.1, - * use invokeEnd(x, y, anchorX, anchorY, drawingView). - */ - public void invokeEnd(int dx, int dy, Drawing drawing); - - /** - * Gets the handle's owner. - */ - public Figure owner(); - - /** - * Gets the display box of the handle. - */ - public Rectangle displayBox(); - - /** - * Tests if a point is contained in the handle. - */ - public boolean containsPoint(int x, int y); - - /** - * Draws this handle. - */ - public void draw(Graphics g); - - /** - * Returns an Undoable to be used by the Undo/Redo infrastructure. - * @return Undoable - */ - public Undoable getUndoActivity(); - - /** - * Sets an Undoable to be used by the Undo/Redo infrastructure. - * @param newUndoableActivity - */ - public void setUndoActivity(Undoable newUndoableActivity); - - /** - * Returns the preferred Cursor for this Handle. - * @return Cursor - */ - public Cursor getCursor(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/HandleEnumeration.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/HandleEnumeration.java deleted file mode 100644 index 11153c612..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/HandleEnumeration.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)HandleEnumeration.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.util.List; - -/** - * Interface for Enumerations that access Handles. - * It provides a method nextHandle, that hides the down casting - * from client code. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface HandleEnumeration { - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Handle nextHandle(); - public boolean hasNextHandle(); - - /** - * Returns a list with all elements currently available in the enumeration. - * That means, elements retrieved already by calling nextHandle() are not - * contained. This method does not change the position of the enumeration. - * Warning: this method is not necessarily synchronized so this enumeration should not - * be modified at the same time! - * - * @return list with all elements currently available in the enumeration. - */ - public List toList(); - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/JHotDrawException.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/JHotDrawException.java deleted file mode 100644 index 6812fa334..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/JHotDrawException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)JHotDrawException.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -/** - * A JHotDRaw Exception. - * - * @version <$CURRENT_VERSION$> - */ -public class JHotDrawException extends Exception { - - private Exception myNestedException; - - public JHotDrawException(String msg) { - super(msg); - } - - public JHotDrawException(Exception nestedException) { - this(nestedException.getLocalizedMessage()); - setNestedException(nestedException); - nestedException.fillInStackTrace(); - } - - protected void setNestedException(Exception newNestedException) { - myNestedException = newNestedException; - } - - public Exception getNestedException() { - return myNestedException; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/JHotDrawRuntimeException.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/JHotDrawRuntimeException.java deleted file mode 100644 index 5672012c2..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/JHotDrawRuntimeException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)JHotDrawRuntimeException.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -/** - * A JHotDraw RuntimeException. - * - * @version <$CURRENT_VERSION$> - */ -public class JHotDrawRuntimeException extends RuntimeException { - - private Exception myNestedException; - - public JHotDrawRuntimeException(String msg) { - super(msg); - } - - public JHotDrawRuntimeException(Exception nestedException) { - this(nestedException.getLocalizedMessage()); - setNestedException(nestedException); - nestedException.fillInStackTrace(); - } - - protected void setNestedException(Exception newNestedException) { - myNestedException = newNestedException; - } - - public Exception getNestedException() { - return myNestedException; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/Locator.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/Locator.java deleted file mode 100644 index ebaa0aac5..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/Locator.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)Locator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import org.jhotdraw.util.Storable; -import java.awt.*; -import java.io.Serializable; - -/** - * Locators can be used to locate a position on a figure.<p> - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * Locator encapsulates the strategy to locate a handle on a figure. - * - * @version <$CURRENT_VERSION$> - */ -public interface Locator extends Storable, Serializable, Cloneable { - - /** - * Locates a position on the passed figure. - * @return a point on the figure. - */ - public Point locate(Figure owner); -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/Painter.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/Painter.java deleted file mode 100644 index f4817760d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/Painter.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)Painter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.awt.*; -import java.io.Serializable; - -/** - * Painter defines the interface for drawing a layer - * into a DrawingView.<p> - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * Painter encapsulates an algorithm to render something in - * the DrawingView. The DrawingView plays the role of the StrategyContext. - * <hr> - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public interface Painter extends Serializable { - - /** - * Draws into the given DrawingView. - */ - public void draw(Graphics g, DrawingView view); - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/PointConstrainer.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/PointConstrainer.java deleted file mode 100644 index 2a1c40f56..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/PointConstrainer.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @(#)PointConstrainer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.awt.*; - -/** - * Interface to constrain a Point. This can be used to implement - * different kinds of grids. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld034.htm>Strategy</a></b><br> - * DrawingView is the StrategyContext.<br> - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public interface PointConstrainer { - /** - * Constrains the given point. - * @return constrained point. - */ - public Point constrainPoint(Point p); - - /** - * Gets the x offset to move an object. - */ - public int getStepX(); - - /** - * Gets the y offset to move an object. - */ - public int getStepY(); - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/Tool.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/Tool.java deleted file mode 100644 index fc94f2f3e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/Tool.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * @(#)Tool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import org.jhotdraw.util.Undoable; -import java.awt.event.MouseEvent; -import java.awt.event.KeyEvent; - -/** - * A tool defines a mode of the drawing view. All input events - * targeted to the drawing view are forwarded to its current tool.<p> - * Tools inform their editor when they are done with an interaction - * by calling the editor's toolDone() method. - * The Tools are created once and reused. They - * are initialized/deinitialized with activate()/deactivate(). - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld032.htm>State</a></b><br> - * Tool plays the role of the State. In encapsulates all state - * specific behavior. DrawingView plays the role of the StateContext. - * - * A tool can be in the following states: <br> - * disabled<->enabled[unusable<->usable[active<->inactive]] - * <->always_usable[active<->inactive]<->disabled - * <br> where each square bracket indicates a state nesting level - * and arrows possible state transitions. - * Unusable tools are always inactive as well and disabled tools - * are always unusable as well. - * State changes are propagated to registered ToolListeners. - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public interface Tool { - - /** - * An active tool is the currently selected tool in the - * DrawingView. A tool can be activated/deactivated - * by calling the activate()/deactivate() method. - * - * @return true if the tool is the selected tool in the DrawingView, false otherwise - * @see #isEnabled - * @see #isUsable - */ - public boolean isActive(); - - /** - * Activates the tool for the given view. This method is called - * whenever the user switches to this tool. Use this method to - * reinitialize a tool. - * Note, a valid view must be present in order for the tool to accept activation - */ - public void activate(); - - /** - * Deactivates the tool. This method is called whenever the user - * switches to another tool. Use this method to do some clean-up - * when the tool is switched. Subclassers should always call - * super.deactivate. - */ - public void deactivate(); - - /** - * Handles mouse down events in the drawing view. - */ - public void mouseDown(MouseEvent e, int x, int y); - - /** - * Handles mouse drag events in the drawing view. - */ - public void mouseDrag(MouseEvent e, int x, int y); - - /** - * Handles mouse up in the drawing view. - */ - public void mouseUp(MouseEvent e, int x, int y); - - /** - * Handles mouse moves (if the mouse button is up). - */ - public void mouseMove(MouseEvent evt, int x, int y); - - /** - * Handles key down events in the drawing view. - */ - public void keyDown(KeyEvent evt, int key); - - /** - * A tool must be enabled in order to use it and to activate/deactivate it. - * Typically, the program enables or disables a tool. - * - * @see #isUsable - * @see #isActive - */ - public boolean isEnabled(); - public void setEnabled(boolean enableUsableCheck); - - /** - * A usable tool is a enabled and either active or inactive. - * Typically, the tool should be able to determine itself whether it is - * usable or not. - * - * @see #isEnabled - * @see #isUsable - */ - public boolean isUsable(); - public void setUsable(boolean newIsUsable); - - public DrawingEditor editor(); - - public Undoable getUndoActivity(); - - public void setUndoActivity(Undoable newUndoableActivity); - - public void addToolListener(ToolListener newToolListener); - public void removeToolListener(ToolListener oldToolListener); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/ToolListener.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/ToolListener.java deleted file mode 100644 index 1dc207239..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/ToolListener.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * @(#)ToolListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.framework; - -import java.util.EventObject; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface ToolListener { - public void toolEnabled(EventObject toolEvent); - public void toolDisabled(EventObject toolEvent); - public void toolUsable(EventObject toolEvent); - public void toolUnusable(EventObject toolEvent); - public void toolActivated(EventObject toolEvent); - public void toolDeactivated(EventObject toolEvent); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/framework/ViewChangeListener.java b/jhotdraw6/src/main/java/org/jhotdraw/framework/ViewChangeListener.java deleted file mode 100644 index 04159971a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/framework/ViewChangeListener.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.jhotdraw.framework; - -import java.util.EventListener; - -/** - * Title: - * Description: - * Copyright: Copyright (c) 2001 - * Company: - * @author SourceForge(dnoyeb) aka C.L.Gilbert - * @version 1.0 - * @since 10/14/01 - */ -public interface ViewChangeListener extends EventListener { - - /** - * Sent when the active view has changed. - * @param newView view - */ - public void viewSelectionChanged(DrawingView oldView, DrawingView newView); - - /** - * Sent when a new view is created. This should only be fired after the view - * has a peer. I believe that means the view has a component chain all the way - * to a heavyweight container. - * @param view view - */ - public void viewCreated(DrawingView view); - - /** - * Send when an existing view is about to be destroyed. After processing this - * event, the view is not guaranteed to contain any appropriate data. You - * must not use it. - */ - public void viewDestroying(DrawingView view); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/ATEXT1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/ATEXT1.gif deleted file mode 100644 index b14778e95e10b55060a08916082862f666f1cba8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQt_d|bM;<_eTR3moM@?#5n_@ypLo|&?%9_Rl@rs_Z>?SX;^>OmAEs~S@jNiI z%e_*uSZCgA&Ceg|>|(xZu*}-`V1va^joIfjN<N;ty2xls+_Pz0re&<Lx+J!oZKGeU iZa|Slah{c;Us!lmg{etZZXJK}w4{QzStf!E4Aubb*Hkb7 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/ATEXT2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/ATEXT2.gif deleted file mode 100644 index 61025ef8ccd944517bf878bf5327b9258155b4dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ}v(bM;;arIKA=E*)u{Yf&X!si4G_GexU;*_?H{f9DnF=N(uOAkoxnWHK+$ zSorC*Qvw}dn_i_|xw!fHZQlLylUu!oj-Lp4BH12tHRVclCHwkyu|7htOZ2rKON7Z) Xn-%4|=UN%IXQXyWOfVE=V6X-N_zX=F diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/ATEXT3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/ATEXT3.gif deleted file mode 100644 index c44b27069cc020bad96a8ce4660ff5cbeab512ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu3j}bM;<_MW1)ndtB|kx20FnsZS&`EPl_l13#C(F_~RtU#>rK{dXomn}uim zgI+J4aY~|p$`O}dvxldeWc6ZATPl3?W;chwf6h8}RgK#9Dy?qe>~Fbm%ULcK=O=_z d%Czv;n%B3u`&G7ORW(j14G5d&F37-O4FHD@QNjQK diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/BORDDEC1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/BORDDEC1.gif deleted file mode 100644 index ef8d3911724b94100918c4f80cb79f716c3a3c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJud$bM;<_eZ^+~AG8;67*)ot=yR`J^&yKXLuQj+?)%DJr`MnBcbRpy%|iKj zx;I<<_Q*`HwNcgmYsyYP)mnHlq5Mz5tCkasB(m)O-SXb{>rBr<>+7%goHKj&KSWZZ LS%O`Vfx#L8?I%qp diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/BORDDEC2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/BORDDEC2.gif deleted file mode 100644 index 6c4228539e266d9da591147bc78ab4c4e82b0b2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh691vWbM;;arIKH-6C{d+HZ;y(A@`(YUBQb<?o#DzJ@3EX^Y=i)hA)r4mS`xi zHujb(cD>EJs^w=(MB-+xTSbod+ADn2oHH-oxOp<VddfSgIh{53FE6eU*#A4tph1FN Ikb%J(04`Zd`Tzg` diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/BORDDEC3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/BORDDEC3.gif deleted file mode 100644 index 206a1d1898bc2274178a3203077e1dee04282ff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK-K>bM;<_MW1)Pe^8!t*QG1bs!HwED%FBR?`~eQ(B5BDQQW_vKx50>BCW@3 zo(I+mTv!pZDq6{P*~&6$)7Zj$%@sa+ljRfpZ|-@x#QMzCXtwpApJeR1;dgld_ww9I Yj<W33rp&gk=6HQci3t+yf(#7S0D=Tk0{{R3 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/CONN1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/CONN1.gif deleted file mode 100644 index f0f6e4d34b8aa9c4e1007066159e167a5fc68286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJKFybM;<_eTSF6SLjf<EY>#FgX!7JRZmZ+zLPk;>FlGQx4cB=y<=arx6P*i zV}sAUlEo`Zykzax-B=U$y4Y@a+>Ld{g=Xm)cYbc+SsT0M>F>~YXU;w_NRN0MY%I|z K!7j+aU=08fj7_Tm diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/CONN2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/CONN2.gif deleted file mode 100644 index 470fc08f7147fa0435a78b9a7ac266a8accb3916..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh6853NbM;;arIM=kaT0#BGwLpJOi5q8DgD``IoX$^*S+7p<=Qqe-zgLC);TH* z&Rnvm$$ef)mxNRDnb$(gzDDdl6)85gizzv2-Go1q^6}5t`QOz|dN<vfg~1vCF;GQg diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/CONN3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/CONN3.gif deleted file mode 100644 index 0fbe78372d9e711df3ad1bac6b1b20dac3b49a40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh691vWbM;<_MW1)D#J=dfyJg~Ii=}B@`{KCm7f3TNx4r+9@AR$&&f|}+lpToF zRrcb_^^@mrUlFzb#v0F6M+!@$MW1?pUX^j@!)p#R?cE(FQ8M*m9$A~T|MR9AG)S-u IGB8*J0JL^SvH$=8 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/DIAMOND1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/DIAMOND1.gif deleted file mode 100644 index 44440dc3b928a05b8f00f0bb3b6e387bae69ecd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu?96bM;<_eTOY8m^ISwHY!{Wt9pED?#kN}jsBcXTCrWf>hys=Ur`pm)cFEy zOH$s><Bt+%kDXQHGJWbx>&pEPK74T0n|(e#$Iv3ScH7<=*5ajGCzq&(_qD(CD6h0B ev{$Vy)y{3}D9g$=jYyi5C@C>bf?be-!5RQhqfdkY diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/DIAMOND2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/DIAMOND2.gif deleted file mode 100644 index 0c6f48d4c7209ee40e812dd620b754323f7bf823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlKG**bM;;arIKCm4;b6rWM`VK+4&}-DtOhotTP95-yM44yMODwG!GpyRa+^K z%+)VFmZ{~roZY+RT<nGADO|k?%G<1^CoeuJzhzEe)b=}}Te*(3Jv%??=e++j9P=}b SQnL%v?L8#A#MlKH7_0%tXiYKz diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/DIAMOND3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/DIAMOND3.gif deleted file mode 100644 index d54e8e69b3b7ff0c70f18a8443a16eee89c40513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQt+X{bM;<_MW1)DpBJ!;O!qoaR<=N6n%wMTU!oSTGTHT;!{2iD1hzfAxknW_ z+UCrS+ADtXXXmeFj!Gvx9?RKlwp94&&2GGJGVAo3wG+c1?mjhn-Lnf-bDFn*no+D1 amaC%aRbAee6W17*ry(&>j9rj{!5RSHkx&)@ diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/ELLIPSE1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/ELLIPSE1.gif deleted file mode 100644 index 5c51d07a69d156218046418b238df2278e9887ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 199 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQuCp~bM;<_eago_KTxldZ1Ry_K2K~>k=n0A(|;dx;A;8vW6GK<ITlAaJ5Mwh zZvEWKur2ktC+n$<z3C=1-aPVou%RNSX2$s!C9`h3dSzPPJF+arfAb=rzf#LjeYcdU mtxyPSY-*`ADD%=N3efJ!HJ>!OyEtWLvZTaZ33fpS25SJ~$XA5` diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/ELLIPSE2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/ELLIPSE2.gif deleted file mode 100644 index 9046010b39eca172d44fd7daea792f92ee183382..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQud+2bM;;arIKHc2R?K>`N1%!WtnWmzI3bHxZL}9&$Ow<q*=|mu<W)(zsHiU zGUmvLom1PNzn(j7w-%2^Zrp;?3oT~p%$|G3P;W(Cxvk&p1hZQ2Ez5YywBDcpZdq3p flUd%RRFzX8+^kXBn%kc+QAkT-x){441A{dH{xDG( diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/ELLIPSE3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/ELLIPSE3.gif deleted file mode 100644 index 18254b0ce00a8d0418c1b805e09dd901c144f51d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQvadBbM;<_MV~Ds_%+&6uK7k^R}|J<w2Ea(jO_hwKFoRcd^WLs?rRpdop@w; z?9tzZV>2(hv(8(x%73fKQqlcR1`@3rv(LXU37HdfdzR?>^kY~4d3EUAEq-tBlU)|A p&`@1pSKeC5uieyHSv<kKK%}U?&2#4TNwac|Bo>IV3o<ZR0|2XbQvUz| diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/ERASER1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/ERASER1.gif deleted file mode 100644 index af7b09da732c121e08b1f3c37d8396029c89c4c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJlX#bM;<_eTRQX@@w!pw<}zJwsuV?Q<ipd`m1>sPMb_^{_nlf|6PdB_TW?v z5v8dyW>I|V-g2FjSC-B8w%zw&LqyD;q}sHUom*ubFU~6~R_`r(!u|YI)dRcl*_ovU UO*O5qF`cnO620Q=f(#7S0Nn{o1ONa4 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/ERASER2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/ERASER2.gif deleted file mode 100644 index 7432c0cd56ad3ee70669a35d8496feab7a1e17fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJud$bM;;arIKC$6)bY^r_D+<FUtJA_Ti@!UlR5+ynOfi<$rb0zOC5@gSOm! zvrKAQgU_6GGo%7zZ5Mni+0!-W-g}cfGR>1r{l7QIxm|DncF0UXnEzH4hupL3zu}S+ L%@XW_3=Gx)qf|`W diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/ERASER3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/ERASER3.gif deleted file mode 100644 index da9b2b7589ed49fa13fdb7591c29210073886828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJTLzbM;<_MW1)PKP}wneBF2U&$X+%HWj?y`%0tBS?_ZHoAp~}d|>h5Z9RCa zcgbu~`;HYRQBA7-yPxO3o>R3yL8M&g*s)WOi$A6(*Ik%rwl1@&S@6sETgCSeUDmBn SE3IzOk(B6^U>9Uyum%9sj!~Wf diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/HTMLAREA1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/HTMLAREA1.gif deleted file mode 100644 index 6d9cbc532221767f9b00de02c6f1a421cf165f07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBQvRXAbM;<_eP?(7Kk-E-C3Bvd5R>w=X{%P$$~R0fTph^&{(gH*_F<)K4Tom7 zYHWHKc35utjY77CyO&K%^$p4lR+;uXt1C6W;Qboq>DT?Y>^dbk?d->IHgodtYM1(J hHMg|XYIJCLcJ_oTwN9AWEIesyt7LsWyC4IDH2|A#RBr$P diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/HTMLAREA2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/HTMLAREA2.gif deleted file mode 100644 index 9063e2d7997bea69f0e7dad6b936a6498b0b7502..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBQv9L8bM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)nrW-Ie0fuIe*RWrANNX;{=+f} z+f#n^cqaBnF4SvOn{w_)b<)&ho<Fqyd2RQfAL+d<cJZ4n;`3x~FF3ek&-Qh@PnQH& d+c&D!i?p(<s75*)^+!&aB-!51F37-O4FL3wQDguB diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/HTMLAREA3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/HTMLAREA3.gif deleted file mode 100644 index 72dc3096ad38e82696712e5270e4375443bf9b15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB((s|dbM;<_MQ3;aKhYw?pE>Qt%C5}SyZSwnz9eqCwD|oWJ_U_P9WzCyo{fQ= z<ub2k?TP<jULCf^{Z-Jc;;PyMGtHuxC~Otd+j9M}(A1Quu$g@8Z$8kx<KcbpN<~hd qQ(<j}Ph)Okeo~QWi3PjD<SPAX2BkA*sXI-d=bhQt$1cdgU=09EYE{Po diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/LINE1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/LINE1.gif deleted file mode 100644 index a9fbbccb6be1885a78e4c1d52ea310b73032e99e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh67`|MbM;<_eTS>xDRd}Y7MpkHc(3ZKE|r8`Stm~A*PZ{lv)MGZhh1b_)xpE- z+jsTOyRf3<`--Ub5pO2kyi=4L$6qe#)zq)?S<C13qGHES<$veBUsjRHcKEoA5`#4W D4N*%l diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/LINE2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/LINE2.gif deleted file mode 100644 index e991acf489dd5f1296d17070922d3903db2600fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh68xdTbM;;arIM=iaT;C+%;qIn%uHWBEoSzj4cU{U*S)vde#~6T+hp?99M|*u vD{2^Lx<usfigsFj`1SJ@chl^BUTbvL_QfV`xv-{e)56SLHs|9qN(|Nj7&b!E diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/LINE3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/LINE3.gif deleted file mode 100644 index 5436bf18983f1419d3d293ea7be69e63a7ea418e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh68WLQbM;<_MV~F$V_$UM-7@hp$Fj7peR16O+B&-}s?P6ZnPYp;@2K|QCi&YN zZ%7-ts<o7Ot&Q?MFC%7oyDck5-|)|Cv7`D1oNIlj@ASNCy?fr_>vlc&iaHn=tO2d< BMDG9q diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/OCONN1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/OCONN1.gif deleted file mode 100644 index 14283bbdc772bac4caaeea1efdbdcdafb4b5fa2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK7#)bM;<_eTP&3E3_+I7HbPJpO*f6ZNtm5nO?^>bDy@{ae4B+hwj3B`FkRL zTTFiCEnZRLb=P*?jWuDnOKwHDDjGV!6SO>iC$h=2w(!uGU7_pF#(rA&Jz~|bl_|MR KqU?eU4Aua{6-=)H diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/OCONN2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/OCONN2.gif deleted file mode 100644 index 4c8b94a457b036e4d7cdb0f6db780634fc2702b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh6853NbM;;arIKB9;xy`RXOzt}pPJsywB}Wtw)y<8%ii1g-`XDNJ7pJdvyc>z z#o`qS9>MF}-^wmNFY(RYCC)hE@h0g#`wSN7Y+iX~+aXQk=)F@HzMtmI!e9*m#Oy=A diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/OCONN3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/OCONN3.gif deleted file mode 100644 index 3b9e94e4c1f754a248aa1db6e4ee0b0f10ee8a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh691vWbM;<_MW2_Pk3G?QcT4As8Edr)CKYJSG6=hxx8`)vx&Ld!GnX$u+o7o( z)GDm!cu@61%ZjM=H`Z{Txa(DZ@6was9K{SVlXlMGTRSmh>*`v!y_F)CO?ta0hnqE; J3o<ZR0|0^!O56Yd diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/PERT1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/PERT1.gif deleted file mode 100644 index f69744556b8a98b0f903febf45498dd09fcde923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlK-K>bM;<_eP?(7Kk-E-C3Bvd5R>w&d8>Y$OF1(sB5u8|!Jh*P2E`k`vPmdj z>=3r9_m<Nuzj;!{KmE(A(`?(#buKO1(zZKp#m^aG;!Be>mi~FR?XC~!)lJLJeyY=G ZXw<aPYVYXm((dl<maLvADagQJ4FJ?UQ3?P6 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/PERT2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/PERT2.gif deleted file mode 100644 index eb9f10ef03f573d2d7c08a805dee7264cabd6ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlK!E=bM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)MQbmW_0GOA^<6__frm_*&x-pD z!8T0Y0SiB~{Qg>VVwDQlT(#{ni^8R2qGnyox76{SeADf_ua9H;^AAh!RIPneY#h>H Qq}1GEQyb1M$iQF?0Mukk*8l(j diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/PERT3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/PERT3.gif deleted file mode 100644 index aac7c5e3ad403e29fb246df6eb318f71ef45be0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBQuv|4bM;<_MQ3;aKhYw?pE>Qt%C5}SyZV2e+rXkwT6aqI*=!x51P2|dZUzy5 zqXRO=duM<0P*rO+U+{j>QO?y@vUP4V+wZ=-?CDAs<Fg)L#Pf3dPkEfOeARpLbws&Y av}lo)rFXlrW0ygv$pp!k$&!K$4AubpX-<Lw diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/POLYGON1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/POLYGON1.gif deleted file mode 100644 index 19a954ae68ce4362ee4baefc4ffe6395b434c22c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQud+2bM;<_eTOY;nKja6ntY;{uZv4xlyhdE!>y~AWhb%co;H#%(2%JrS{j@i z%FWAgj(vSa_rsV|^8;OtEB8Ox@ZM2x_W9>;%-mv=6R&Y)tO|2<z4*L3vpnrxm1lvu eja+ecl!J$DX<kQPOk~pJ#CnP8;_QM94Aua?L{2yW diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/POLYGON2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/POLYGON2.gif deleted file mode 100644 index b7fa7a90265da375f38d14818857eba50678fb29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJTLzbM;;arIKC$uNkKZZK%zND!aUL--44%4=AL4J$tGkKJUPSf)kl%YqXLt z9TRz3cU*$&Lx|GkWv@?ryy04VYlik4MrF<2g*~^nOgxkNe8taa7v&~zvX<3V|5%eE S)Y#P0Y9Y}n&MwHnU=096^-o&> diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/POLYGON3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/POLYGON3.gif deleted file mode 100644 index 85b9f2a5b0b7fe9eaf19970060e299763553b1d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQuLw0bM;<_MW1&pKQGW1X`UPVYGsxt;|s0LpDex4Phnb=efhxc_hLB*I}V+E z?!nx{W^>8tn$WXlCzQfg+bZsRu%V*nQQGO7#%rQEEiE&`LR`w<U)#JhxZa&%s%}|9 bMVeZ^WlLs#XRCH$SEathWHEL@1_o;Y+pka; diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/RECT1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/RECT1.gif deleted file mode 100644 index 2b5701d12e2f0a0eb3cb1b396c5dd777528b18af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQv9L8bM;<_eago_KTzkp*{E>&TCYyTJWciUCcMmA0`DGoKiZn`cA1b=r%deX zr`>BScB_5ZSyDLR*yHy{-d62D(q7@CH@*Jo8-ck;64vGLPEkD@`m#VhPi~d^``XIj c>IVKgp*-=X%q(M<gbDGIol`{E1sNEu0V&l{A^-pY diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/RECT2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/RECT2.gif deleted file mode 100644 index 20468af429a22ff746851f75c49d8241ff34d266..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK!E=bM;;ar4lO%evPFd)G^GuGOH+k2&lHOA}E4vF$-8>MP<E$gqzdhc- zBBr)%x7@pzS)NlvG|o?ss%k%8u;V4`q|;lC)6UM#Dh+>LE%N=0XX#1VDeQ0LYqQ03 Py)v9MnmQ!~85pbq%PUIL diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/RECT3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/RECT3.gif deleted file mode 100644 index d94e65cf42c31f8e2ff4448fce603db77788788c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQv9L8bM;<_MW3HY$8+@gU-P}Kxo(Ljqo#WKmz>2$2j1z${Wn{n?;&!iNP@>` znX;wx-o>we_83i`o>~~~thn#NhKe4hS>366=CO-5mB^SKc-t~PVav~T^Nt^XsZ>_f cpxjiKTisa8k=|>Zla(eJF-3%3kb%J(04^0y#{d8T diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/RRECT1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/RRECT1.gif deleted file mode 100644 index cf2c152cdc40f5a1bb7d7342a84611d86c36d020..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu3j}bM;<_eago_KTzkp*{E>&7-RD5scNT+N^)<f?`r!K@oe*K0rg<seh1~% z;!UdMde_%;r2euvuN+kNs%rm(C&@l~v(JXSHQ0S9AnRu8mQLT(YuE4cYZmwYUS7;! d@7NgD;wF?QT#%V%?wL3#L9%;Vz90jGH2_seQFj0U diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/RRECT2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/RRECT2.gif deleted file mode 100644 index 99f9d8048f9739836626e1fdc79cc47c317aaa8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlKr8<bM;;arIKAW%o=Tp*L-KQPe`_&q4E4|i7w;Ilkb#!PH$WAYP+UX|M6%) zjh>Yi0r!iZ7I`+xuQ;(Jr7HPE!Ht)^lTL5_%;`LHE@SAuP|^Ie{-xJ!XV<@Z7*&<+ Uot+co6_KH3-qtHA$iQF?030+;Z2$lO diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/RRECT3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/RRECT3.gif deleted file mode 100644 index bf5eef360c1390e7719dc9d097974fec2f0224bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQv9L8bM;<_MW3HY$8+@gU-P}Kxo(Ljqo#WKmz>2$2j1z${Wn{n?;&z1PlC&6 znX;wx-o>we_8jv&d2-W<wF?CvY^d;YV?6I#ynXe&cMj`>de|0hDw$LESNG6q!ICn+ cx~ityl48r60^{85^uCNql95xr1Q{5t0gLERrT_o{ diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/SCRIBBL1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/SCRIBBL1.gif deleted file mode 100644 index 48a6d954e4f68001665ca9606774e7010fcde40a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK!E=bM;<_eTP&3#~xEWv88pv^hs&2)~Oa0E&8?T)9U_@dk*VPS=aXYYKBO_ z$6_0;>NBTx-Bv}dzws#f^xLYv7v^VcmdKvmB5OFOZtl%(Ka6ioJ74_t*WDRKpI#)% SyGFJ|NJ?}_unRIUSOWmsUQ-tU diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/SCRIBBL2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/SCRIBBL2.gif deleted file mode 100644 index fea78ceee88f17051bbd0c81491a683d98839a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh68E9ObM;;arIM=iaX%_At2Hh5U|RNSm8$q6`O;0Fvi5#__TOOv%Xh7HQ7Xz> zWnN-4jc2S*S@W&whQbyr)uP=eu9Q40{nTf<QRJ@4;ZsSstaUQaUoN$t`A;_Sp9H%g H1A{dHgKkMb diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/SCRIBBL3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/SCRIBBL3.gif deleted file mode 100644 index ac467864796f2e16ddaa31120ee541662ac03ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ%j%bM;<_MW1(ki9NyiXv@?EYSRwPT(>@bS)|9YyFBkV_Wj=}_V#+x&LWqV z!WqFrtt+nbK6@Ogs@qa_`fZi(bpr_wncM5O1`3+I-FW@^_Q<zA_P2Kb+#6E=@}qoZ UL6%rpRZ38VM7J2bAOnLn08gAzhX4Qo diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/SEL1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/SEL1.gif deleted file mode 100644 index 0d0bb054559fb9355ca17b4212a3aa6451bb342d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK-K>bM;<_eTS_p9!xHkZSs*`nU!2w_j=1JHL2!!?`t34?A~_2f4Wkw%i-{g z!dx%;j@;1L-o+KUdwS;Sw^f~IH(0FciCvf~YAR`BRU20Rxiimr?vyoiCtF{7ELZN| YU|d&a>txi<AKx1%F<~NuAOnLn0Jtkoz5oCK diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/SEL2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/SEL2.gif deleted file mode 100644 index 025ac9c3c10aa410e37cd2be2d4733088b6134ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlKr8<bM;;arIKCK&rhzszh&axDP1d0E-c`llbf;m>7QeA4a;}+7I>(5l^BS= z_fY<sqpZG3?bp*;Ht`}mqL0NKEx7UYtl!+!qFn96-xl02ewp^P?0&$hulr`T-0-Op Vs>sRm_K$9BZ<Xln6J%hp1^`3XQilKl diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/SEL3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/SEL3.gif deleted file mode 100644 index fcbe6603d7f53d9a49ba0e451de047e2f7d03d53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu?96bM;<_MW1)D`*SG7{_LG+S@wW=nNZdy6`SL??{<ZpJ!N*og?*1?>(Tzx z;&Yy~EPTQBGh}C!WRmF%p}?I9S2-N@W}nY^UN|@C_MPmC=p%DZdhcHP@!ZMFZ-dK} fs`49iwH5RmN_|@@+6rUadvY2ircW1SV6X-Nve{HT diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/TEMPLATE.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/TEMPLATE.gif deleted file mode 100644 index 4b09907701246543b02aa42d8c2aa26ebd2a5c72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh;`^b&bM;<_eTR4dmuvEo&ZtwWTo=PNWzEY&hF1Hw)?BXK{oPD-gR!(w{-PyC pC+FDCyRahUm$6(|*qT7=Cro>73;be~kEfkAF>cOG<`ZPF1^}o8K6d~B diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/TEMPLAT_.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/TEMPLAT_.gif deleted file mode 100644 index 223cd29ecaf5a6e2720660fe7d5cde747df69b9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+Qh;`5=wbM;<_MW1)Pf1vIcozbP<xh{SAwl^G84Bwn9{rBuc-f_EmJ>OnG>^dNs pbTY?kzRD6^t(?H6E3&^XKH9YFHv0|hb<>un$FUtgCZoh)4FEt=L<#@^ diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/TEXT1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/TEXT1.gif deleted file mode 100644 index 5ebb27c4c703e4e4b53220d98652727cee9208b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQud+2bM;<_eTR3moM@?#5n_@ypLo|&?%9-0mrftk*tu;{`}r*jZ&*a`bvSmN zZNHM5V7u(h=FhI}!N~&Yud4PxxS#B!H~XybTf^$rlj^oi-aYkMug2>+SKFq)@|LJo g%~bT3Z7Ps2))I}V&#L23oSY!pI9-fgkb%J(077h1?f?J) diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/TEXT2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/TEXT2.gif deleted file mode 100644 index 7c1fbdee0ede5090c8b4365c8e14f0bad6e43a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ%j%bM;;arIKCWMZT9_HuHPjI7K00SwU1+`m#;;W!}Gi_Wyu_`}X3a9Y*4M z&lhdA(@s9$+2rc#eQ%@Y8>Wf3o@nco^)0&naVHaVb=YC8;Jc06b1s{@>18@CHLdW- T@f4{oNl~e-?r9TbV6X-NV2Dkk diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/TEXT3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/TEXT3.gif deleted file mode 100644 index 5f316eb149e76d2badcfff6069f3ea64a3f76271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlK-K>bM;<_MW1)ndtB|kx20FnsZS)c?t_%~fuBp?sO&GY|7<*ewU|wdk)493 ztMj2LZahyt-*hC2WpCA3qPXwDhKiby!kx?Vd}r_l<*fd;PVN7d;yFfTzOncI`)PQU Y3bPxhTBgP3)O6?h22E@gWMHrc0DUG-K>z>% diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/TEXTAREA1.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/TEXTAREA1.gif deleted file mode 100644 index 1b210e93658f8b842965f810ef2e905f835280a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB67r$JbM;<_eP?(7Kk-E-C3Bvd5R>w&d8>Y$OF46C^WCI~m5<lYZ<+4M*|_0q xU&KeviN~H#cy8sC9h4@lz1wQ{z2>i0ZPO;EFYr5>xBI^K4w-ouv-kxWtN~D0M@|3$ diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/TEXTAREA2.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/TEXTAREA2.gif deleted file mode 100644 index 5ae72ea0ed2120f1f5a08849cf156adb1e888969..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB;`^b&bM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)MQbmW^*;a1xm@DR+2fPnHcggW pb;C+Y`><;9Qy#7Q%NpM}S%o%76-4ArYASy&ESd30iC>Vx8UU#BK2-n! diff --git a/jhotdraw6/src/main/java/org/jhotdraw/images/TEXTAREA3.gif b/jhotdraw6/src/main/java/org/jhotdraw/images/TEXTAREA3.gif deleted file mode 100644 index 23f4ce93a5fa0be469cd32b9a4825b6bdc40b33b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB68fRRbM;<_MQ3;aKhYw?pE>Qt%C5}SyZV2e+rXkwT6b#Kxk(ad-nnTntJ|2s ycFb68qSxtyE7kV`0;4v+YI4&IUjAO|n$S+;l$~2+XJ5&9bF+3!?bLP-25SImd`GPS diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw.jdo b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw.jdo deleted file mode 100644 index 99d1b71b0..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw.jdo +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="org.jhotdraw.samples.javadraw"> - <class name="BouncingDrawing"> - </class> - <class name="AnimationDecorator"> - </class> - </package> -</jdo> diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/AnimationDecorator.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/AnimationDecorator.java deleted file mode 100644 index 2fe2941ac..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/AnimationDecorator.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * @(#)AnimationDecorator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import java.awt.*; -import java.io.IOException; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class AnimationDecorator extends DecoratorFigure implements Animatable { - - private int fXVelocity; - private int fYVelocity; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 7894632974364110685L; - private int animationDecoratorSerializedDataVersion = 1; - - public AnimationDecorator() { } - - public AnimationDecorator(Figure figure) { - super(figure); - fXVelocity = 4; - fYVelocity = 4; - } - - public void velocity(int xVelocity, int yVelocity) { - fXVelocity = xVelocity; - fYVelocity = yVelocity; - } - - public Point velocity() { - return new Point(fXVelocity, fYVelocity); - } - - public void animationStep() { - int xSpeed = fXVelocity; - int ySpeed = fYVelocity; - Rectangle box = displayBox(); - - if ((box.x + box.width > 300) && (xSpeed > 0)) - xSpeed = -xSpeed; - - if ((box.y + box.height > 300) && (ySpeed > 0)) - ySpeed = -ySpeed; - - if ((box.x < 0) && (xSpeed < 0)) - xSpeed = -xSpeed; - - if ((box.y < 0) && (ySpeed < 0)) - ySpeed = -ySpeed; - - velocity(xSpeed, ySpeed); - moveBy(xSpeed, ySpeed); - } - - // guard concurrent access to display box - - public synchronized void basicMoveBy(int x, int y) { - super.basicMoveBy(x, y); - } - - public synchronized void basicDisplayBox(Point origin, Point corner) { - super.basicDisplayBox(origin, corner); - } - - public synchronized Rectangle displayBox() { - return super.displayBox(); - } - - //-- store / load ---------------------------------------------- - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fXVelocity); - dw.writeInt(fYVelocity); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fXVelocity = dr.readInt(); - fYVelocity = dr.readInt(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/Animator.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/Animator.java deleted file mode 100644 index 7e743e9d0..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/Animator.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * @(#)Animator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Animatable; - -/** - * @version <$CURRENT_VERSION$> - */ -public class Animator extends Thread { - - private DrawingView fView; - private Animatable fAnimatable; - - private volatile boolean fIsRunning; - private static final int DELAY = 1000 / 16; - - public Animator(Animatable animatable, DrawingView view) { - super("Animator"); - fView = view; - fAnimatable = animatable; - } - - public void start() { - super.start(); - fIsRunning = true; - } - - public void end() { - fIsRunning = false; - } - - public void run() { - while (fIsRunning) { - long tm = System.currentTimeMillis(); - fView.freezeView(); - fAnimatable.animationStep(); - fView.checkDamage(); - fView.unfreezeView(); - - // Delay for a while - try { - tm += DELAY; - Thread.sleep(Math.max(0, tm - System.currentTimeMillis())); - } - catch (InterruptedException e) { - break; - } - } - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/BouncingDrawing.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/BouncingDrawing.java deleted file mode 100644 index 60d16ac49..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/BouncingDrawing.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * @(#)BouncingDrawing.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.Animatable; - -/** - * @version <$CURRENT_VERSION$> - */ -public class BouncingDrawing extends StandardDrawing implements Animatable { - /* - * Serialization support. - */ - private static final long serialVersionUID = -8566272817418441758L; - private int bouncingDrawingSerializedDataVersion = 1; - - public synchronized Figure add(Figure figure) { - if (!(figure instanceof AnimationDecorator) && - !(figure instanceof ConnectionFigure)) { - figure = new AnimationDecorator(figure); - } - return super.add(figure); - } - - public synchronized Figure remove(Figure figure) { - Figure f = super.remove(figure); - if (f instanceof AnimationDecorator) { - return ((AnimationDecorator) f).peelDecoration(); - } - return f; - } - - /** - * @param figure figure to be replaced - * @param replacement figure that should replace the specified figure - * @return the figure that has been inserted (might be different from the figure specified) - */ - public synchronized Figure replace(Figure figure, Figure replacement) { - if (!(replacement instanceof AnimationDecorator) && - !(replacement instanceof ConnectionFigure)) { - replacement = new AnimationDecorator(replacement); - } - return super.replace(figure, replacement); - } - - public void animationStep() { - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - - if(!(f instanceof ConnectionFigure)) { - ((AnimationDecorator) f).animationStep(); - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/FollowURLTool.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/FollowURLTool.java deleted file mode 100644 index dae1f340b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/FollowURLTool.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * @(#)FollowURLTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import javax.swing.JApplet; -import java.awt.event.*; -import java.net.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.AbstractTool; - -/** - * @version <$CURRENT_VERSION$> - */ -class FollowURLTool extends AbstractTool { - private JApplet fApplet; - - FollowURLTool(DrawingEditor newDrawingEditor, JApplet applet) { - super(newDrawingEditor); - fApplet = applet; - } - - /** - * Handles mouse move events in the drawing view. - */ - public void mouseMove(MouseEvent e, int x, int y) { - String urlstring = null; - Figure figure = drawing().findFigureInside(x,y); - if (figure != null) { - urlstring = (String) figure.getAttribute(FigureAttributeConstant.URL); - } - if (urlstring != null) { - fApplet.showStatus(urlstring); - } - else { - fApplet.showStatus(""); - } - } - - /** - * Handles mouse up in the drawing view - * assuming mouseUp came from active drawing. - */ - public void mouseUp(MouseEvent e, int x, int y) { - Figure figure = getActiveDrawing().findFigureInside(x, y); - if (figure == null) { - return; - } - String urlstring = (String) figure.getAttribute(FigureAttributeConstant.URL); - if (urlstring == null) { - return; - } - - try { - URL url = new URL(fApplet.getDocumentBase(), urlstring); - fApplet.getAppletContext().showDocument(url); - } - catch (MalformedURLException exception) { - fApplet.showStatus(exception.toString()); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawApp.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawApp.java deleted file mode 100644 index 6c0139add..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawApp.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * @(#)JavaDrawApp.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.util.*; -import org.jhotdraw.application.*; -import org.jhotdraw.contrib.*; -import org.jhotdraw.contrib.html.HTMLTextAreaFigure; -import org.jhotdraw.contrib.html.HTMLTextAreaTool; -import org.jhotdraw.contrib.zoom.ZoomDrawingView; -import org.jhotdraw.contrib.zoom.ZoomTool; - -import javax.swing.*; -import java.awt.*; -import java.io.*; -import java.net.URL; - -/** - * @version <$CURRENT_VERSION$> - */ -public class JavaDrawApp extends MDI_DrawApplication { - - private Animator fAnimator; - private static String fgSampleImagesPath = "/org/jhotdraw/samples/javadraw/sampleimages"; - private static String fgSampleImagesResourcePath = fgSampleImagesPath + "/"; - - JavaDrawApp() { - super("JHotDraw"); - } - - /** - * Expose constructor for benefit of subclasses. - * - * @param title The window title for this application's frame. - */ - public JavaDrawApp(String title) { - super(title); - } - - /** - * Factory method which create a new instance of this - * application. - * - * @return newly created application - */ - protected DrawApplication createApplication() { - return new JavaDrawApp(); - } - - protected DrawingView createDrawingView(Drawing newDrawing) { - Dimension d = getDrawingViewSize(); - DrawingView newDrawingView = new ZoomDrawingView(this, d.width, d.height); - newDrawingView.setDrawing(newDrawing); - // notify listeners about created view when the view is added to the desktop - //fireViewCreatedEvent(newDrawingView); - return newDrawingView; - } - - //-- application life cycle -------------------------------------------- - - public void destroy() { - super.destroy(); - endAnimation(); - } - - //-- DrawApplication overrides ----------------------------------------- - - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new ZoomTool(this); - palette.add(createToolButton(IMAGES + "ZOOM", "Zoom Tool", tool)); - - tool = new UndoableTool(new TextTool(this, new TextFigure())); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - tool = new UndoableTool(new ConnectedTextTool(this, new TextFigure())); - palette.add(createToolButton(IMAGES + "ATEXT", "Connected Text Tool", tool)); - - tool = new URLTool(this); - palette.add(createToolButton(IMAGES + "URL", "URL Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new RectangleFigure())); - palette.add(createToolButton(IMAGES + "RECT", "Rectangle Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new RoundRectangleFigure())); - palette.add(createToolButton(IMAGES + "RRECT", "Round Rectangle Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new EllipseFigure())); - palette.add(createToolButton(IMAGES + "ELLIPSE", "Ellipse Tool", tool)); - - tool = new UndoableTool(new PolygonTool(this)); - palette.add(createToolButton(IMAGES + "POLYGON", "Polygon Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new TriangleFigure())); - palette.add(createToolButton(IMAGES + "TRIANGLE", "Triangle Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new DiamondFigure())); - palette.add(createToolButton(IMAGES + "DIAMOND", "Diamond Tool", tool)); - - tool = new UndoableTool(new CreationTool(this, new LineFigure())); - palette.add(createToolButton(IMAGES + "LINE", "Line Tool", tool)); - - tool = new UndoableTool(new ConnectionTool(this, new LineConnection())); - palette.add(createToolButton(IMAGES + "CONN", "Connection Tool", tool)); - - tool = new UndoableTool(new ConnectionTool(this, new ElbowConnection())); - palette.add(createToolButton(IMAGES + "OCONN", "Elbow Connection Tool", tool)); - - tool = new UndoableTool(new ScribbleTool(this)); - palette.add(createToolButton(IMAGES + "SCRIBBL", "Scribble Tool", tool)); - - tool = new UndoableTool(new BorderTool(this)); - palette.add(createToolButton(IMAGES + "BORDDEC", "Border Tool", tool)); - - Component button = new JButton("Hello World"); - tool = new CreationTool(this, new ComponentFigure(button)); - palette.add(createToolButton(IMAGES + "RECT", "Component Tool", tool)); - - tool = new TextAreaTool(this, new TextAreaFigure()); - palette.add(createToolButton(IMAGES + "TEXTAREA", "TextArea Tool", tool)); - - GraphicalCompositeFigure fig = new GraphicalCompositeFigure(); - fig.setLayouter(new SimpleLayouter(fig)); - tool = new CreationTool(this, fig); - palette.add(createToolButton(IMAGES + "RECT", "Container Figure Tool", tool)); - - tool = new CompositeFigureCreationTool(this, new RectangleFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Nested Figure Tool", tool)); - - tool = new HTMLTextAreaTool(this, new HTMLTextAreaFigure()); - palette.add(createToolButton(IMAGES + "TEXTAREA", "HTML TextArea Tool", tool)); - - LineConnection lineConnection = new LineConnection(); - lineConnection.setStartDecoration(null); - tool = new UndoableTool(new SplitConnectionTool(this, lineConnection)); - palette.add(createToolButton(IMAGES + "OCONN", "Split Connection Tool", tool)); - } - - protected Tool createSelectionTool() { - return new MySelectionTool(this); - } - - protected void createMenus(JMenuBar mb) { - super.createMenus(mb); - addMenuIfPossible(mb, createAnimationMenu()); - addMenuIfPossible(mb, createImagesMenu()); - addMenuIfPossible(mb, createWindowMenu()); - } - - protected JMenu createAnimationMenu() { - CommandMenu menu = new CommandMenu("Animation"); - Command cmd = new AbstractCommand("Start Animation", this) { - public void execute() { - startAnimation(); - } - }; - menu.add(cmd); - - cmd = new AbstractCommand("Stop Animation", this) { - public void execute() { - endAnimation(); - } - }; - menu.add(cmd); - return menu; - } - - protected JMenu createWindowMenu() { - CommandMenu menu = new CommandMenu("Window"); - Command cmd = new AbstractCommand("New View", this) { - public void execute() { - newView(); - } - }; - menu.add(cmd); - - cmd = new AbstractCommand("New Window", this, false) { - public void execute() { - newWindow(createDrawing()); - } - }; - menu.add(cmd); - - menu.addSeparator(); - menu.add(new WindowMenu("Window List", (MDIDesktopPane)getDesktop(), this)); - return menu; - } - - protected JMenu createImagesMenu() { - CommandMenu menu = new CommandMenu("Images"); - URL url = getClass().getResource(fgSampleImagesPath); - if (url == null) { - throw new JHotDrawRuntimeException("Could not locate images: " + fgSampleImagesPath); - } - File imagesDirectory = new File(url.getFile()); - - try { - String[] list = imagesDirectory.list(); - for (int i = 0; i < list.length; i++) { - String name = list[i]; - String path = fgSampleImagesResourcePath+name; - menu.add(new UndoableCommand( - new InsertImageCommand(name, path, this))); - } - } - catch (Exception e) { - // do nothing - } - return menu; - } - - protected Drawing createDrawing() { - Drawing dwg = new BouncingDrawing(); - dwg.setTitle(getDefaultDrawingTitle()); - return dwg; - //return new StandardDrawing(); - } - - //---- animation support -------------------------------------------- - - public void startAnimation() { - if (view().drawing() instanceof Animatable && fAnimator == null) { - fAnimator = new Animator((Animatable)view().drawing(), view()); - fAnimator.start(); - } - } - - public void endAnimation() { - if (fAnimator != null) { - fAnimator.end(); - fAnimator = null; - } - } - - protected JMenu createDebugMenu() { - CommandMenu menu = (CommandMenu)super.createDebugMenu(); - - Command cmd = new AbstractCommand("Clipping Update", this) { - public void execute() { - this.view().setDisplayUpdate(new ClippingUpdateStrategy()); - } - }; - menu.add(cmd); - - return menu; - } - - //-- main ----------------------------------------------------------- - - public static void main(String[] args) { - JavaDrawApp window = new JavaDrawApp(); - window.open(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawApplet.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawApplet.java deleted file mode 100644 index 701a4b236..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawApplet.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * @(#)JavaDrawApplet.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.util.*; -import org.jhotdraw.applet.*; -import org.jhotdraw.contrib.*; - -import javax.swing.*; -import java.awt.event.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class JavaDrawApplet extends DrawApplet { - - transient private JButton fAnimationButton; - transient private Animator fAnimator; - - //-- applet life cycle -------------------------------------------- - - public void destroy() { - super.destroy(); - endAnimation(); - } - - //-- DrawApplet overrides ----------------------------------------- - - protected void createTools(JPanel palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - tool = new ConnectedTextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES + "ATEXT", "Connected Text Tool", tool)); - - tool = new URLTool(this); - palette.add(createToolButton(IMAGES + "URL", "URL Tool", tool)); - - tool = new CreationTool(this, new RectangleFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Rectangle Tool", tool)); - - tool = new CreationTool(this, new RoundRectangleFigure()); - palette.add(createToolButton(IMAGES + "RRECT", "Round Rectangle Tool", tool)); - - tool = new CreationTool(this, new EllipseFigure()); - palette.add(createToolButton(IMAGES + "ELLIPSE", "Ellipse Tool", tool)); - - tool = new PolygonTool(this); - palette.add(createToolButton(IMAGES + "POLYGON", "Polygon Tool", tool)); - - tool = new CreationTool(this, new TriangleFigure()); - palette.add(createToolButton(IMAGES + "TRIANGLE", "Triangle Tool", tool)); - - tool = new CreationTool(this, new DiamondFigure()); - palette.add(createToolButton(IMAGES + "DIAMOND", "Diamond Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES + "LINE", "Line Tool", tool)); - - tool = new ConnectionTool(this, new LineConnection()); - palette.add(createToolButton(IMAGES + "CONN", "Connection Tool", tool)); - - tool = new ConnectionTool(this, new ElbowConnection()); - palette.add(createToolButton(IMAGES + "OCONN", "Elbow Connection Tool", tool)); - - tool = new ScribbleTool(this); - palette.add(createToolButton(IMAGES + "SCRIBBL", "Scribble Tool", tool)); - - tool = new PolygonTool(this); - palette.add(createToolButton(IMAGES + "POLYGON", "Polygon Tool", tool)); - - tool = new BorderTool(this); - palette.add(createToolButton(IMAGES + "BORDDEC", "Border Tool", tool)); - } - - protected void createButtons(JPanel panel) { - super.createButtons(panel); - fAnimationButton = new JButton("Start Animation"); - fAnimationButton.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent event) { - toggleAnimation(); - } - } - ); - panel.add(fAnimationButton); - } - - protected Drawing createDrawing() { - return new BouncingDrawing(); - } - - //-- animation support ---------------------------------------------- - - public void startAnimation() { - if ((drawing() instanceof Animatable) && (fAnimator == null)) { - fAnimator = new Animator((Animatable)drawing(), view()); - fAnimator.start(); - fAnimationButton.setText("End Animation"); - } - } - - public void endAnimation() { - if (fAnimator != null) { - fAnimator.end(); - fAnimator = null; - fAnimationButton.setText("Start Animation"); - } - } - - public void toggleAnimation() { - if (fAnimator != null) - endAnimation(); - else - startAnimation(); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawAppletHelp.html b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawAppletHelp.html deleted file mode 100644 index 5c0d1c80e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawAppletHelp.html +++ /dev/null @@ -1,69 +0,0 @@ -<html> - -<head> - <title>JavaDraw Help</title> -</head> - -<body> -<H1>JavaDraw Help</H1> -<HR> -JavaDraw provides <a href=#tools>tools</a>, <a href=#handles>handles</a>, -and <a href=#commands>commands</a> to manipulate a drawing. -<P> -<H3><a name=tools>Tools</a></H3> -The tools on the left create or manipulate figures. -<Table Border=0> -<TR><TD><img src="../../images/SEL1.gif"><TD>selects, moves or resizes a figure; the shift-key -toggles the selection. Dragging the selection tool in the background -selects the figures within the dragged rectangle. -<TR><TD><img src="../../images/TEXT1.gif"><TD>creates a new or edits an existing text figure</TR> -<TR><TD><img src="../../images/ATEXT1.gif"><TD>creates a new text figure and attaches it to the clicked figure. Once -a text figure is attached it remains connected to the figure.</TR> -<TR><TD><img src="../../images/URL1.gif"><TD>edits a figure's URL attribute; the URL thus associated -with a figure is followed when the figure is clicked in -the <a href="../../../../../JavaDrawViewer.html">viewer applet</a></TR> -<TR><TD><img src="../../images/RECT1.gif"><TD>creates a rectangle figure</TR> -<TR><TD><img src="../../images/RRECT1.gif"><TD>creates a round rectangle figure</TR> -<TR><TD><img src="../../images/ELLIPSE1.gif"><TD>creates an ellipse figure</TR> -<TR><TD><img src="../../images/LINE1.gif"><TD>creates a line figure</TR> -<TR><TD><img src="../../images/CONN1.gif"><TD>creates or adjusts connections between figures. A connection -is split into segments by dragging a point on the connection. To join two segments click the end point of a segment</TR> -<TR><TD><img src="../../images/OCONN1.gif"><TD>creates an elbow connection and offers the same features as the ordinary connection tool</TR> -<TR><TD><img src="../../images/SCRIBBL1.gif"><TD>creates a scribble figure; dragging the mouse creates -a smooth line while successive clicks yields a polyline figure</TR> -<TR><TD><img src="../../images/BORDDEC1.gif"><TD>decorates the clicked figure with a border</TR> -</Table> - - -<H3><a name=handles>Handles</a></H3> -When selected figures provide different handles to manipulate them. -<ul> -<li> -the filled red handles enable to manipulate the shape of a figure -<li> -the blue circle handle is a connection handle. It allows to create connections -between figures. -<li> -the framed red handles are null handles. They only show the selection status -of a figure but don't support any manipulation. -<li> -the green handles are shown on connections. They enable to -reconnect them with another figure. -<li> -the yellow handle enables to change the font size of a text figure or the -size of the radius of a rounded rectangle. -</ul> -<H3><a name=commands>Commands</a></H3> -Commands are invoked from the button bar at the bottom (applet) or -from the menu bar at the top (application). -<P> -The standard commands that are provided include, cut, copy, paste, -duplicate, delete, group, ungroup, bring to front, and send to back. -<P> -<H3>Attributes</H3> -Attributes, such as fill color, text color or arrow tip, can be changed -through the attributes menu (stand-alone) or the pop up menues (applet). - -<hr> -Comments or questions to <a href="mailto:erich_gamma@acm.org">Erich Gamma</a> -</html> diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawViewer.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawViewer.java deleted file mode 100644 index 8254a5b0f..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/JavaDrawViewer.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * @(#)JavaDrawViewer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -import javax.swing.JApplet; -import java.awt.*; -import java.io.*; -import java.net.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class JavaDrawViewer extends JApplet implements DrawingEditor { - - private Drawing fDrawing; - private Tool fTool; - private StandardDrawingView fView; - private transient UndoManager myUndoManager; - - public void init() { - setUndoManager(new UndoManager()); - getContentPane().setLayout(new BorderLayout()); - fView = new StandardDrawingView(this, 400, 370); - getContentPane().add("Center", fView); - setTool(new FollowURLTool(this, this)); - - String filename = getParameter("Drawing"); - if (filename != null) { - loadDrawing(filename); - fView.setDrawing(fDrawing); - } - else { - showStatus("Unable to load drawing"); - } - } - - public void addViewChangeListener(ViewChangeListener vsl) { - } - - public void removeViewChangeListener(ViewChangeListener vsl) { - } - - private void loadDrawing(String filename) { - try { - URL url = new URL(getCodeBase(), filename); - InputStream stream = url.openStream(); - StorableInput reader = new StorableInput(stream); - fDrawing = (Drawing)reader.readStorable(); - } - catch (IOException e) { - fDrawing = createDrawing(); - System.err.println("Error when Loading: " + e); - showStatus("Error when Loading: " + e); - } - } - - protected Drawing createDrawing() { - return new StandardDrawing(); - } - - /** - * Gets the editor's drawing view. - */ - public DrawingView view() { - return fView; - } - - public DrawingView[] views() { - return new DrawingView[] { view() }; - } - - /** - * Gets the editor's drawing. - */ - public Drawing drawing() { - return fDrawing; - } - - /** - * Gets the current the tool (there is only one): - */ - public Tool tool() { - return fTool; - } - - /** - * Sets the current the tool - */ - public void setTool(Tool newTool) { - fTool = newTool; - } - - /** - * Sets the editor's default tool. Do nothing since we only have one tool. - */ - public void toolDone() {} - - /** - * Ignore selection changes, we don't show any selection - */ - public void figureSelectionChanged(DrawingView view) {} - - protected void setUndoManager(UndoManager newUndoManager) { - myUndoManager = newUndoManager; - } - - public UndoManager getUndoManager() { - return myUndoManager; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/MySelectionTool.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/MySelectionTool.java deleted file mode 100644 index f7b107fc8..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/MySelectionTool.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @(#)MySelectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import java.awt.event.MouseEvent; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; - -/** - * A SelectionTool that interprets double clicks to inspect the clicked figure - * - * @version <$CURRENT_VERSION$> - */ -public class MySelectionTool extends SelectionTool { - - public MySelectionTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - /** - * Handles mouse down events and starts the corresponding tracker. - */ - public void mouseDown(MouseEvent e, int x, int y) { - setView((DrawingView)e.getSource()); - if (e.getClickCount() == 2) { - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - inspectFigure(figure); - return; - } - } - super.mouseDown(e, x, y); - } - - protected void inspectFigure(Figure f) { - System.out.println("inspect figure "+f); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/PatternPainter.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/PatternPainter.java deleted file mode 100644 index e29dcf88f..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/PatternPainter.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)PatternPainter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import java.awt.*; -import org.jhotdraw.framework.*; - -/** - * PatternDrawer a background that can be added to a drawing. - * - * @see DrawingView - * @see Painter - * - * @version <$CURRENT_VERSION$> - */ -public class PatternPainter - implements Painter { - - private Image fImage; - - public PatternPainter(Image image) { - fImage = image; - } - - public void draw(Graphics g, DrawingView view) { - drawPattern(g, fImage, view); - } - - /** - * Draws a pattern background pattern by replicating an image. - */ - private void drawPattern(Graphics g, Image image, DrawingView view) { - int iwidth = image.getWidth(view); - int iheight = image.getHeight(view); - Dimension d = view.getSize(); - int x = 0; - int y = 0; - - while (y < d.height) { - while (x < d.width) { - g.drawImage(image, x, y, view); - x += iwidth; - } - y += iheight; - x = 0; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/URLTool.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/URLTool.java deleted file mode 100644 index 04896d88b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/URLTool.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * @(#)URLTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.javadraw; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.FloatingTextField; -import java.awt.*; -import java.awt.event.*; - -/** - * A tool to attach URLs to figures. - * The URLs are stored in the figure's "URL" attribute. - * The URL text is entered with a FloatingTextField. - * - * @see org.jhotdraw.util.FloatingTextField - * - * @version <$CURRENT_VERSION$> - */ -public class URLTool extends AbstractTool { - - private FloatingTextField fTextField; - private Figure fURLTarget; - - public URLTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - public void mouseDown(MouseEvent e, int x, int y) - { - super.mouseDown(e,x,y); - Figure pressedFigure = drawing().findFigureInside(x, y); - if (pressedFigure != null) { - beginEdit(pressedFigure); - return; - } - endEdit(); - editor().toolDone(); - } - - public void mouseUp(MouseEvent e, int x, int y) { - } - - public void deactivate(DrawingView view) { - super.deactivate(); - endEdit(); - } - - private void beginEdit(Figure figure) { - if (fTextField == null) { - fTextField = new FloatingTextField(); - fTextField.addActionListener( - new ActionListener() { - public void actionPerformed(ActionEvent event) { - endEdit(); - } - } - ); - } - - if ((figure != fURLTarget) && (fURLTarget != null)) { - endEdit(); - } - if (figure != fURLTarget) { - fTextField.createOverlay((Container)view()); - fTextField.setBounds(fieldBounds(figure), getURL(figure)); - fURLTarget = figure; - } - } - - private void endEdit() { - if (fURLTarget != null) { - setURL(fURLTarget, fTextField.getText()); - fURLTarget = null; - fTextField.endOverlay(); - } - } - - private Rectangle fieldBounds(Figure figure) { - Rectangle box = figure.displayBox(); - int nChars = Math.max(20, getURL(figure).length()); - Dimension d = fTextField.getPreferredSize(nChars); - box.x = Math.max(0, box.x + (box.width - d.width)/2); - box.y = Math.max(0, box.y + (box.height - d.height)/2); - return new Rectangle(box.x, box.y, d.width, d.height); - } - - private String getURL(Figure figure) { - String url = (String) figure.getAttribute(FigureAttributeConstant.URL); - if (url == null) { - url = ""; - } - return url; - } - - private void setURL(Figure figure, String url) { - figure.setAttribute(FigureAttributeConstant.URL, url); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/DUKE.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/DUKE.gif deleted file mode 100644 index 4f31ce593f3d96d76ebbb515cd98d83fbca46bda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2012 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 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/Juggler0.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/Juggler0.gif deleted file mode 100644 index 577f7a9f03200f81d1ed3931620cb0045dca83d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3090 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 BE@%J% diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/backgrnd.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/backgrnd.gif deleted file mode 100644 index 602f909c9784eeaeca9896a78116ea9555007e2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2443 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 Q3+vUg`y?D;VPUWa03CMQ`~Uy| diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/beans.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/beans.gif deleted file mode 100644 index 4a0370f09c9a0738190af806989f58e66f882b4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7012 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 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/bg1.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/bg1.gif deleted file mode 100644 index d54150cd9ed3fb7b1737d16b24dd39950b914af9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2164 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 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/javacentral.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/javacentral.gif deleted file mode 100644 index bbba907bb45e0a98aef00d8fe8444345a2d72e24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37239 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	xA^$3Hj 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 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/joe.surf.yellow.small.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/joe.surf.yellow.small.gif deleted file mode 100644 index 7f255f52f968dda6d4bbdeccd75dacee6a2873e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5009 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 XGsk0&*4Qv=G@iM@v)WEjfWaC7_FX~{ diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/rain.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/rain.gif deleted file mode 100644 index 2fdf8fb88e2908cbd5591dc60e942971c15ebb61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7664 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 H1A{dHTx~5P diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/view.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/javadraw/sampleimages/view.gif deleted file mode 100644 index 5d562671099522cc034b6c3b0adf523e7e135d6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121144 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%0DX)JNABa2|56y0}{+V;|?dCt0UWt_dq- z1sY3Lo?TY?`g5wub=EVvk(ZNYKJ*^&Ih>JqXxrA)ufmU7oLKiNV729ew|r*W%JNK& z#!0809x&|QY{(|JWe%5de>O+gT;{Yl3-14wU_GJzdeT45Ew)eJ&S0-h7vFbeYfHn+ zj3_&ooV@}&4b10E<Z}OIDSeZp)GFv<Xw4EP)rAYXTs6I#8+)GU^)6V-+IQ>LtRPkQ zvXciz!&0U`__nm?%v&X1POXV94#Hi3N|dUq7fXCD+rDs#VNVD5Nq3P04Tny)_`0$( zdetadF5GrSqu;5kt4B$6a}1xx#3`ZtmPe<FbiI4*{cZ_o!E>cP;kQN2PoFf#wQ2Ks zI50KXin3XhER6lCQ?cIWOhnneh?J+3qrOQe99s2x=Fd6a&9@fDZJ)xfzm)&i`71VC zOupC1{}$LA-JjQ&DO7v*V$Zf2Pr0r4aILU^n{!~=k<8}}0v5UqQ~zy#@x%GWtl!Qt zJ&xDyWtI7urUv`JIpS_B%Tm+yAuk{%J7EF4tmJW<Z3<jH+ZXg)S9mNRqPTBD5z`7M z?sr<dE=o!L{+zH|KO{=!qiF2X5X)a(p?+PWie{c24jZMGNa<L$a&#W#XX~1JX0GeJ zG?!d~jgwqtlq`&IM*Et7ob;fL-`pbd$UTL&ORjcFNoL1>FAtb1EGu|m0^1Z8mT=bp zkAxJaC?54?ikR&1b7R;)ucZeVh2~#roXPRzbm&>v+^MoJb5p0B)(q2DJEEv!z*yLt zI>*I7YFm-e1jXn!C*B(kR_$qBS0mOHGxZ&me>Jge%Td1rrn+B^9K?!CB@;6L#hBZ@ zFV^>Smr}Nn+i<mXp`-M@gZ4da_Qw>X>)Qf)#nL;U$%<aKc~>ZV_EP%njWSD?Wv*r` ze=^a2*2eOFMZ+a&juqjN<=@jJXT)w$Yn5P5?=jDQ*vh!Mtc=w(n{{giw`<%N6QjQA zigHU7wUV_<HdbywT-ab3zRg)ctH9Z0vXb)BD*G!;=fuQTF3*v;CgRkVAkb*~<+#YS zqCCT;0&YTr5ll4^N`mYkh07i@@Fa9<8rEi~m^VMl<2J0xP*Tekayz!%Jn2dZ^TH(7 zMxl~TLieY;6@Ox|4XojNAnasn`T3bfdZXzlag`aHQx-ReDNpy1KNL16$fQtFMf1@= zqb<$aDhE<qM8);PnXY6o8K;ZKu|<e~O5GA9W@Vmcy`AZ$qT#>IjXB#}{;-sPTP(}a z)U=w_{`Da#<sTW!9KIKurN1q)5nG&@w>&DKz3hf@RK#+>3r}pGFEn^C*}i6Zx$_IZ zJ0DB03F=oYv%T}spM6Pr$@8>D*J9SUIjlKW{+p#W%p-tZ)u`{dVcd)Wxyh5_Iwna3 zF!F2)$aJ&%r=C)>(K4q|`_oaewMs!&CC)3_mCrxR(O4QZk6qbI({#6bHP7~Lqpee7 znL7D5cD_hcxvy4p>UyHNS&iI8SEs<Pr7yZFCM5=J70PK+%`g%WyqN!?%<aQ6VLK<` ztSN4M{|u6=mN4*tU~pz)tmYKqbx<)V6??_jGnq+*H!ObI6;Y2yMx7-lj+?Z~Qni;b z_ikC78qv(ipCG=Yi1C_)vG6COB}){Rd@-sB6yL)vky4gsTW;KQQG(@?UqD9W^CR*u z7Fq9#e7`^Ld&%s(II#cJ6yIrL_Ukq_?|RZ4$L{NzE`MXO{;x?H&z++e94xzfsV_p^ zcE-|{i=wvIUHldtE0H}ZpS!(WXp#Zf7K7}vl1b*0989ejpJvHBJKj~C+><^@E|^i; zfl=*d#n+V;&z=@ZFfi^+t}I+S)2FS-{hP?*%N}-WrgOqgyo-WXi@W4Ltn%VC^I~=l zTCC#t$U~P^^B>nSmr$p?_8W<O3tf^Pb=V~d9u-$hJ!H<yIBi0bM#7ew_>&eUrvxj4 z^K*l1?LG-|6ecCP2zN6J2~V8XEhN~e$yE1JgQqQlcbe(G9}JCOi{?D)_DGzpe!X6P zk*H^5#I$CusA-jqRt?LWv;-6w^~8<%b~Gp+Zjfr~UB}{GGOIY@VT6@>^drTrQ%QXj zHZmUA>L<_Pvt(K63^Cn(2W`)%WU9Zg*|SjU;uG0d9xcl!O6i}Fer4o4uT}ny@Wffm z{5~<uo;YIQc3ht~Iaca&On#dr!`6w?JIh~IO#1s#^4rQ5jzv26xBCAMS>3rjpijN+ zuViKW^$NZA`Ee4Hv$*~(NV;WQ?^v{1xOa`QXI5fh+mr=1I~O`Bo2aR}m>Vh2ePo&t zm>2p;#Z|;S@Ylkb#(9xjOb>=H3T8=6d2DvdTqIzTs(V*{*=4nNVT%)7@{J!R>YE8< zs;GT^X7*J~o#DG%{u1F0Gc=R~7@RI@@GhuRP_T3^GHurgQ<<==-BM-pr@%NZ(aA0X z^JW_VOBZM8s53a;tzXWVwQHu@1r0s#rMEJ~xo<Q`T$tHBRl9{zLg7$xs+)~=fTGxp z#)u62y-VjV`sP>FR%*8*{n(S)Mc4FyH>F<+l%DWQr%+r<EIDS5s+4QFH>0!uQ|Fk| zH~ns;_|0iEd>%a8TU*Y}-SO8ymew6D>5(h^y{jD<n{>B&1#~Un-g(@=PP%R9tJvQ1 zxVGI2;vZJ)J+EjeT_dD0S#P?w43h|B#bk*|OM`>sy%#FE2PUj4uUdJ0t+ZDHOPh-O zN|nANQziy8DX#L^)o#{tvcvMJDgU?Xw`EI0cZU3am6&`<FkU2Ne|G0~jXJ@^t{+_a zHIwsQZgo~25olOkz&}BN_kc#Y@Qj8hOL`Y=>b<n&rTEf|9UVD>Dtebv42vxrMI&0S zZqmEGX$}jcqO-rAwDGB1p6rJ_^SV+so@}<;UA(x+xN{?ujskOgp^?Fi?Ymp%UUZcc z+qp&mM9IM^EmLp#O_|8}>0#;qCHAY2&i;3exy9+Y!@temM^;MSRI$4zEc@?aMo#;- z?r9}lGb7868+<$H@1&u~Guhzviq#u-`TcMS_}^l9In`eCkD(|-<u0q(dhIoJzgKf9 zwdr$K>UA=9-`;UT%joA!MT6<q8<pcXI+;kcixs*Sin6CLJoE5rsxoO3^(hklm#QqK zHFYt&vbTuly=g*EqFg06x?V5K-Qk@$cgFEAzoxoA&CgTXu<(YO*Hgjl5DOPp4J)gf zk7ednpVc&uB}JwRbzWjn4BV@rz{s<p&ZV*L>gnm*IRtAZdtSINoorMTc{xS7U1USB z^^U{S^^Z?~>wWqyck$#;o47l)X02?KauUy5)vLDTpLj-@@rfLX9!DLc3ry+(0qPUV zE<g3>vN>{L=k^D}er0CO^B(G3cSxQoWQ^%vafmhgim}}9#XgcTy3J-yU2M`1_Si2; zn|QX!{`aGPg^sxjJkeiS^dAMyuHRlR#&YOC&+0dfv3!{qc3dluI5GdZq;B);imxjj zH8~?RXHI(UX`~-{QA_jaFV5niJprm)ROYP|bN-m^omlTZ$thQLQ^wIL+uD`WdqkIg zZ?BOtvtbo+dZ^N|)0LmSGq5<(K1sB!N3c3(mz`0rMuTAB<;9^l)#S=LWtXX42=8ht z7Ib|o#M{uR!ss^NV>*lWhDkAQ%Qy;D1BJF$bYI>rRJU__*uTfuq<3$uIl1KJ_oDL^ zmU63SrZv{hZPD8Cc&7gHW%}X^R!lnGV0yza`#O`<g2GeF<{b$?>XYU$`^>t`w9bw4 zY6*>3mKvT*nzTz~_0><huYVj2IqiK@$?t=Q{)AKhJT{r^kNaG=H_M(V+1uj1b#3ES z;g*L}WOwCm_uL`#XHB}&9q;d#44<8x_`Pxa>zk4vId@E*YFNGd!f%y;z>FQbnE}#s z=lk!ObZf6dR@cS!74t;}c24Gw(DP;#Sg>P}WPBE*S%mVYf7eAdodj54h=_zQ^xIf< zzD<;M*_4^emItR_e%Pjx=9K5jYj%B_N?79+^{Fb`b|25)d?opC{yuFBbHk8-c1eq6 z!@4HPTx|-{xG-DowEIclQZ>ni>x+^!bPSnT6of8IZ@heZ$*b=Sf)5z<%e$4YU)$0X z7QXqk{`4Dtk2WeV-}Kh|MkrUYhsl1!*&;iP6_pk+GVkcQwL&cJS%ao?+WIF}sb)Gy zl)RTorpZ5$i+|z3b@t|$Key&r$rf^NeX>Po&&h*(PnNw^(mN|C`}twty~F1Z9a(vX zIl3)MFF{%^akovZxg&Gz+}Di(o#zh!Z_E-{qjR=4fSoz}*_Vlv*jw{f%XBPv6x%XM zD&WY3=ktGg`s@AN(dW(hq<8+W${ow}7=PVl_^Em0)U3^{7G6u3Pan8p{58DL<Z}14 z)yGzs|2uY0&CLI@%F%Zk^*cp)+*N&TMVt~<{iGhAOWPg$_*k{g+v{yA%m<IBPdR?7 z+dcQuiMbgM8y;B%>UKLy&6xhe&C@l%yjlJFcLt6FN!63w*e@_d|9zzQPWbBSB}?91 z;}BcmqxIPF-t;or8$t|>c6v8B^Y8VnUG{-HVq4F$G{^nY7oJ2nYOQGUD!G__;M3*} zCK44=-cl2EZYnCWm}V>R?BI)Br5hn9aORMt%*wrnGI}=AYk1qZerCL3Id|a7!P<Z2 zM=Rx)?wWnh(dT7_;q8ZW#ZRvCz5m5tXHL!cgF5eJFTc5C6;sM~)^PJl`BwLr-R{|) z+jq?Gdv(3{;!R&hv3~^@<!aZ&y?FI(?~bf2#+SXX#2vmr+dFxhyOsV{mD!P+A9Xiv zc;g}Q>X`i2YN=QEigZN&+|#(dZAr(D<b&c%)vX@JZhotLfXOpyis_-_E_07xo%fI{ zF(g(=#Qb1QsAfo9?V=JB;h$V5D~tp;c_dd{w$KY(qPvgbr=5_q(W$((bwUTG^G{f| zJ>vAgxYN}$Zyc;Q<?PoMn1A|U{ymQU`|RHd8!Q&7nW{Zcq@hUk(=ngrNsd}a4oS?E zjT66dcx9WzN<n$2a>sv*`=h?w95^B)z;p2Hr(567&z+Iha%R%mAIt)>79}qh9BgK5 zmax$X>A28*fREoYLBgZpp#v|oVbMR2ii?Ncc?G5QVrE=aaq5$i<#MU`^uTkfc;LJ_ zl9y7vcx25k<aBOU_2HGMTePP^fSHZU$@GoMtq{#i3#9whrWP=+3|SJqRPAh*qedHd z;^eNo4vtK%ykcj(ayL9|isTVE6s0@ykPD|^x#|<uL?@O`K_#;%qKZnaar;%>rX=i< zIQmFLS!KC^;!Kv#T`K?VIQCp`>|kHuYR@6Nt004Ysp}iowUQ+rg7Z}m^D$PlbRFMO zcz@sDA7z{(nmN~}#q9j{@%(XD3kF4{mX2qNGDqYBt9LcuQWDFEKWAgf@p_}P0msFf zUrmB99FN2uxMS1A${S?u;TyHDnN3N-qd?(bV`B^359POvoLo8+OoUV#9yD@un0z?M z%suBd6X*A$)mogsE3%k{4(-Zj7WQ}$V8G*ZV*!hRZ-C=bk&q3qkBTLSB)W-*Ml5XQ zUvld}vv5gJmL{)`$4fPCuSX2a6)lrG7q|0hbu5{{*Y(1qH=@c&ozKSNlFBrnUmdD5 zxn^-FskH`aE}N$G%H!lzmY@tzbx)yS6}7D<8mBEJlQyX@4SDp^XR?GB$I>Pvq2ddC zeUCa9&0>0+xniNkua6fOEXeY_xTMVLRM46WPOo%VHa+oLvr^@PSM&BYURs*#H(8y& z!g1ix0j7-_O9Yykf^Re!9cI&Bc=)PIf{($`me8J!$Ns&NQZza#6`iwXKbJ7C35SF7 z+6`<@r}?)WShqH8Oa9zqJ<D@WJJwj;E|P9!ExkI`C-z29G2dN*3$yuloqD%4eCOMB z!uop!MJBA<$)4cMZ~KD5PQg}SnYDxU7Zx}D7AC2L2aLZA=B>A5k}ObYVz6g3F#XTs zbHR~K`H4RhyWx`pdrt3;?n5l94A)w?KWRN|+HD}vn9h^J7HA+G7qXC5GBoGlQIR*Z zHnIvY>Z@wz^LevCgU6|~BhX%b)yoBjr)7jx7j7}JzBt{0$y#aRAr%c(tJF!J%Izok zHlI?I*Yfl>*q=5<r7bS&Q~tsiUnVWGWfa}LTrbsWML_e3c`KLvJFdPpQ_)yama9lX z{rt<-^QUNW1-a_;p3?AdX1dzswchFVTCd3YUZJ<bk4|NZIve!$>Sl!*l7|-<UNGIT z@Uxer@$8RUK1~Pu;=gSa2{3qb{Xoy#X)TvF=sTLuZk@aB)`c1WyPsY<rT@nGrj~Rg z%dNiMy0P~HI2_HZ3bX%PzT|SgZh33j=5>1tmo7KDxHA0EhRqGn)~MUC%N#r`5;o&4 ziw+Bu^?44q26>K@H;kW7E?`l*ApfT!z=6Mmp}~hkfl07~rLb{Aqg9CF&HxWbagP9A zZV@HEk8kv4in`lsG8XL;S(~9771fipL`n4G3l=pa$0sIRh1V~A=_7H1;d<V`plwd7 zE4|C5uDEL{ZL{P}$(z_6Gt;g}u%kk=C`Bmvr5L;0p0g>+oF{{(ZE+DaDt(gAwo!P- zyeTVY+i2zYZJr}j|7iIvg-wCF9}m0`T6*F#tE+15s*t5S4vB1V`J~--OT=l%C($h} zLOKg|xFhZviSoD{&{}qBZlqSg)PS(oFaeL#EeUC>gg7SZ3mF__jyXJQ_lq9G<JnSQ zW-XNvUh_V3?Z>5=KAXj_<*YZj`YY_mnx*p@I~D9VM)K{t7cO(_%`)@Pk9i9#g6F;} zF>X3(*q8Fg)F4mRr{T=O=?58h%(?Z&yYY@o!oO>u4JuCwv#@WN!K^Sr_fk(migL39 z+xNr&9GN-=oK$rda(Zr1V7AQA6F3waQ&1r}FV(|9NoZnMh3A<?b4y%}vI2#?uQUp0 zterUPb`%?n<cVo13aVyLJA9wAnH&E*>)Uy{!^z>((GxFoRob+KCEHn+&obfj_OXq* z$JKs9<I==_Ud3dOZ(BgaY3|NSGJZcpR=7K9sZCjusiJvQcvjP=5^G2A04L5RyN#Zf z%zkxh`KC=LL*@oCiB_DB40$^3&RMVWeaTM~;!7F1Lyl^>c&F)qp0t@oa<$%}qBEP+ znwyRlm>D!&<cXX0()L=;vsqVV;yLDcN(uaUZY=S*Cnw|c*-ulR$G%m1zAvMBJsZaa ziz5g5{&QS&_?NqFxh)Ix`H};{1|^LN)(ROj${3dUKPgH}WEW<1xIOvc?+fhq44)zz zqy!fHzp{LxhE72JHSR+qRvD&7TO`{wwkYt19-S_vaj;Eq)`Hz1dY0@KO419KGF^Vv zBTKX4CEJE30rv8D{snVSu90gE(_J)iVheMp%eJ&7dTB3xCtJrT9Di|jk(SVkV4>BD z>P>>Cd|j)Gq&Y=2YaaEr9O?4kdeZm!v`{C;pyCC;J*U?^3cIYjvulnG*J~ZgRciJ} zwM9Bkg)UgMBAD%(&b&jip?;auIF4)x6A>tG%&7G47xRs%6THYLUfg(8VfBoQ(PEo@ zyd|%TxK*z!Oxy6msp-$ZmNu3b!MxidzRmpeMSJdxKWbLOX7=TGr(Jx#@?2?__RN=W z&L=$b^gVp!H3LiB^0<wW{I=>h&b~HT(|B`g0_*nK^O!9f7$ujSceLz~pCD;s%IErm z`P=6JR@E)`y4eeP9$(tj{cL)=^oP`Q1!kA#f1Hr6njq!X8@5GsrGhKpG0FJ9T~>Ru z8ko|Bf+of5Oi-G7b=hQXk=~!*CT!|;$th2n{eY=_$;3Am*`B*RcfVY*tWn`zSAzG) zg#w%wHWPmwwe;I4b(6(&>#2!>QN33px^G?ESols|v|+<hZO;_06<i*(UAm(T0vi3M zrmmmQWw|<Mxk5;!Dsw1fcNAB)wvqF{GJCNJ-l1M6ij9}EIt$%6z$u_SWB%W#MhgnV zQo1B%Uas{wzL8v&(RX#Gpu^>@)hCy2Ij~&!!VxjXO>@N(5)Rvy@O`&9(z#{H(bje6 zWf)BV7%wlqvho#MgF^JJl7<6v3$i{mJb15oV)q(<T_zS0H^%z(b1Vm&W54h`SirTS zbeq$RwavetFIe*OJiG0WjfvJ84s5UZPjiJBiyk`DcE-$cYsJro6<@=hWo~tEUMc%q zBu3#o$FXhOd@np$oUy9ZaaV|<^2{Yg-PMPkqskRH-BqnFy<J{vG>3iFjrY1UZxlpY zUAgD7=(rVEmU5+uk#E5!0d3b+53^?f=wE+hEAQu%|B4%AX0xrc7xemfqR6W-IJnJ5 zbLXQSD>U{kY|!y<oV(xySBPWRwA)=LK8Z{Y?%q6O=Al`loG0e8DNJ3pKy}p%*^N66 z+^d|Bxtn{>g9%bz0!JqFl&|Ez|6uA_hMvo>rsX;I?wq~*tbkd*q`*%D-Y*a5ZwWs5 zhJ)w($=-*DO!5!S|IE4I_M+YwC;G1>G~@)XyHU}=I)RVfq2c@rr*}VgH!yB}xnPgL z1nYyz3?Ci(-&XDUy<yMiL;b%CG=4qkpP(r4S!;q&mWE(a!wI1Y*NP`}ud+?sy^!x^ z_jT@xt2kWZy#z%#mG14{CSt)TdO~W=PT7SExSj^@<6W_cM?&`ZX|9%k8s<f_JG55W zpE_w^SR~}YXehOMQnP|Z%V`d^lZ)JMZq#^W-mrSM<4I{}Eu)6ZlXP!RG7RGS(!5{! zu%UaVi2Y8EL>(1-P1#G1OICUqtu5?QnSE?^0hgY4cR<scYo1g0M|B6UYPjjB%2l8m zvvcR6Du<m5L_>Em+`rlX`;<nUlEM3*n@zcSp3dw!v13=|AMWeiVwn$*KV{g>s>u7{ zp>=MTE}K9j|D_pEJq|tkpzB#YKcA`p;Vf~EqP}k@<o|FUdLF<~C&bvlkbm!Dy+fDP z|5!@ASzx1cW%suiChr&M9TQ%#Us;1S!ui(?$Jo{U9Z82LZsh-_B>C^hR`!)M#a6BV zw^u;$2KTh<*_)Ymckhl^si>uSzj(u%NQdj1-0G)QT6Wl7`M7_VlF-SQoc?cw6g|zI zjV6EA*51gpYSpI6TMw<`EuOP`=Op7mp`DUi!kd+LFH|{fD7(XR)$?Kwl}eEf2c;Gp z*l|g3a<=l(>ORV~+bBp$R^8jdn`@FU=gu`8JEv{n($3zwdPf7t4I@sT<2fyBLMC>H zepHB<G~v)Eh08jM7joP=D;szxFzo)pz5j)3bqw#Gf_X1i@*KO+lh-&c<KgDEEBu)= ztvNb$bDYlo<nZ{HaiSz@_rnF&TW8PzCOExvV{b_m-{%E<?z8*Y6!vH?>7RCGLEFbI zYz_;WP5dLh|Mhl!JoL1Rf#t_;tu=?fN;KrG^!%{vr1_r()<-0)YxEP9_qJrMw=>y0 zEz?%u<plnll9R0VPB7wGerD-oO)2iVvlc(_nSEGxiNK`1KU1~`an8=#7hqz)c*80` zmt&3D9NU&iPia{E{ju`$D2o{llYen*9o@NO)ufFvZwyr*ZlBK}?f>QC-km!(d0K38 zT%whA=4i^XIZ8&y?(E;OYs%}{n=(Q;5C5^?Hs)e=QN1at8k#tFr-I$VM@A7p1K4!B zH~g3~JGfh-DfmRtgg!1~9>vW&4v0>Z)QneZeEf52;!T~S2YMbc@Fbp`=d8-}rgGZe z=m`x=*6zJAE$fnm%i?~O8oq*mM$2zzs6S%h&-Yr+awsJ8r_+DO89F&0FCQ%XdPQQd zw&&-R(4briwh8OLn)pvU(zj>#x;DiXpR+uB9`^SL>Yo$V7p^*d$(#3l@Y!!hwtp2) zU0c2Wpo7&M%bD|6+8%z<9nZK(agr4KX0GiSmb-6tuGz9*H<$C;&LB@m(RE8^2bcuz zZ8>fD%2j0cqUBjfcSf3Tn5orKz5ipimc-&Yhj%J}J*=r*Xun~Rrsv7oZ(a-aezre( zC;ap4$>}m&3@Q%GcW_N!yvgNa*9766^Dj)9bldCP8Lqr1o31BL4LLZM>xj<=gEiYv z%w;;cbHjwQOeYV_el5$r<nTOWfrB?LA1vUtIn4cU;ot7$i#>mp=4U3(i?{6kw9u(B zXU6{3)2>`lTlIF?p2^c6E)ajb!0+y&b6cwU{tEK%tY%=p#dnC=wCy3^!QF@aKb!2G z9r|%q=${V~Y#b+}T^Br!+S)pk@9z<bZp-!mdRFlMvSG^9h?hPwHB++F=#;qD#J?7| z_MVVhw&mK2hwG25xWMhIB)qZ9P*rs+M{wZ7Bfe`4w6{+2d!y<4aAoJ|m6KN}9dGoW z9I@T}k<jK_QZlWa8n!YgZYni@m025fv6fjxa<i7lD*LvKeJV38ye5gTx)>>3p5s$< z%(GGHW~3;KOt^}(>>5ojmNj0d_V@%_S{m|RTsgz2V2bFf184NS|1AyHQZ$$yJY#DE z*M<fjo`aUXzE|E@&J*_9-x0Q2`pS_R#}7z6NS9n2mwn>qFYe-vA)FSsKm6qR@Y0dx z+c`&O|L>7bYeN_KdWZV0J#n*Z?T;N2dT$PHeyew``t}qS)1E**(QjL(xisuL8vU!l zhSlPP!IlO4Tb=$?G)(woV)19sEYpQ4yc15W(%`6E$fCN9sWBjDuOjcu?mY?z6|$tn zXG#U^oN|6H$61x|pjSpyH@jS$d8Sx*mAogHrI-2RvmHuzy~VY)<~b!tKWTXK`smYI z!=)A%g{+q-PhK3Uv-s&*j`>Va_MADbsJUGzRl6?Q;?&Nd1rl5hzSoU3&HXM#{QdXa zKIEsDK<T9yf4h8^7_GLLyXMT9yMpdIrk0!=w2vkQo9FK2oFaNKNM~n(`vsi|kxh}; z=UiUWFf-c7Hcm>+Ec(`yCC9~8&aJOrcKHR*r#oUl85pCA&&mDadCsBt#^I3s6#4HP z{rb+FtGGG8@)F;%)$2Ypc<!*3zm$*|@Oj2G7loe@4ZBMH-~Two$u;Adhs`sE+h3>f zYiv2m#t`uHh9e{6wfbYrm}5OyG8bMoFrKzjabBj`*%Oj;XBuZ~&r*FQa>w!M+ARhP ze{3@K?c(9MX*biScxv)QvsmH1FBAk{)^4_UoR(}-6nlVk^4^D9^SbVy349rlGUc~* z?AAvzioKcto@MVpzO&OXvctTOqb7B=%I!r*Ltbuw<TcqYQ_Jf>%U@1oJG)1dk6qE_ zTE6T|KlkM|N6uV(dB$+9+vz8pydq`8w#99JuyguZOU^a-BN`c^60@TwT`m*xn!8xQ zsCj0&49}^AUUmnu2P#olgRGYIo@<TiU9;HgLdTU%sR{d;w<Org=bhr)YVCA-nctfQ z;%n#fuC0||*=O>hpf6Ik@xiAP?JL(cc|9!7d;2}6VSl#X%PfUoJkC8ldjz&g$Zng_ zy2&*8>arx>M+^&BB%XH83QCe{5|Corz^)-U+fvX}c#&Jltd)V>IY&<EMT-VX&gEaa z$;al*<a;ibcA3k=It}vvaozN_o7$&jGw)3Ij7+`{nq3jDWv&}rH1bW{mMEQl`C;Gt zi(BnBSKYm~)ph2HhJB4k+qm<EOoe}zaZFg&`9AHKY21<{f8KSUdl8v<@6qB-Yb7F= zSfpOil+}9Va{K4KRr8GWzn&>P;ue&+le=VR_{$qpz8;wU+KBVyeQur!yO&Ls**<l{ zjR}bp#ZnlrtbDA$iu=u*mDB!Ai0U~gc5y=Qp9lPVvu`!HB)np{t+eIY%^iM)2SZ-X znf`LkyqBkTueLquRcj+P#b1Ap!m|apCH6T@W9dJ{Jmcu<b<K(^YNnairXBV-4oi&o z_++W*xShdn$udzZTk%!;D%)lr?l{F=JMrwl+)afwks;T7u4SI-GK*!?*)CdsX|>qP zO-oYLd-G@YsVr}MER*`GGvVmcTV8YhI4#^b{YAQzrY4`87`q{8qf@5c@lN~M5p%xA z<qP!2&il|{@J)(ad3#{VS7)Y7^<-IBp)Q{-1x2;1J$2^3;+^WhZYRs1ZDA*U3|i;r z-<@J$=HMCfRA=_4t4HSkN!1B`6>xHr>V-L?O51L7B)pcCvYnMHkiMJy`V6c0h9OUX zPF>mj=8}iMh|&asgra@S3lm&T_AxVlyLsZ<P4V+(TW&2lu~pbf<w{PGo8J31JUd?> zN}ZS3zeM3>7T>Aap}XcPlzfvAX!!Y7;PBH)>)!23|G+fiAKQ!b%}n|XXSWJ9=?l*| ze9`(^^S!5CkFup#t)F8#@x@N=-4bfT5lX=?173ggaSP)XjTfD*WjV#}+h@D7WqRJc z=Z`*_T*jpxxJ)hUxA*L?&sN69+ih60@^a(X)czea(_-h%%6wA#VcsU8eg4PhXXJlW zTfD;V?sAU&tnh-U?^5f|yyRFOF>BIXmL&{*hrRU5<}Q7}bv9?y;Wu2jUtZw<AGSAa zjiz_@;a^kO_Z*N)KU*quyyVN=(wg$k0Tbq~{>6P~r^G3ZxthBV1;{-K%(=)A*0M)~ z$uKw6w)g6T#N4i^miD)t_fGil%{imi_jXUh`r5uAXT2|qGp1fq`;^h&l=W}M$1~P% z51j~IY*V%_de_qasX6>QF3)eQn^8UQ_6M$oQICtG7WeZrNeVM{u<@yQWH?+nbg)rK zL~Dve(}TkuLM}5j92dE832Pe6l9(8Hv~_~GLBIlsNh++|f*x@f8Wfq?xJArntm%BH z!pf^>9FXxcsF{^d%4o}$1;)+i7I?NE3gMdkGJq$*cF&c}(B<q)!dIq!Sm3y#jn8T2 zE0I%-nn8R?`=c6mnq;;waW|~7J>{5rbA`-{CfncFn%I}7^-p8<DSy$rJ8bK{HQr*c zeV4Sq-nEtMn|j=`_Rgr>H9xd6xF<$m+H3iFX(p#-={*(C&(H4eU9EoE^rg|WGxH?$ zzWjT0HhS3^UZc?WW}Gpm`B#NfoOU!!cv5ih(&Xrd21cfX&p4DV^6$x7S8ysGO`g!; zc%)5)-(^j`#Ud9@!H+k)C)`i4ZDHq=^WeDX;KHonvqiq)tEEB{v%&<02^@bN8JwB~ z*F8VLp%fy~#G#nc@sLBY=fc8vxipSNZ7NLx4?C5UUNE#Vv<WD-=-V+YWERodAkV?% zxPyUNQRcus4tuK$j~V%O9x(J<w;gb3a_4(_zmHF3g99_KLBLYxurN-?X}kq58OkEv z0s^K988pnD&gz&T;K;i3<TK~1TVGya%?(Ov;#BFF5XdDtb%7w8T8wy*@1><7!CnqK zr$~FbE&SIaktdyS%+b$s=hNwniY#5HCphM&MK1S=HM<hw(J2}p)sU$g5!+nr8XlFi zmunVVjIUVe+NjvD$XJKKqX*YlHkL_l+;L4+BFpXQF{yy+NYN>QZfB3`B&$vQBD}WJ z^Yx0{35TY<NL%Y!J=y2zRJRbH4&GF`ol+Lz!bKJ*U1V85E;|ytcTZ%x<6P59cSe>! zZ6<0?jMd-siysxTHx`^V6%cY_-zdpg#`1S&lQaK>4f8mvHkseA=f7jF%)+tldwjEg z*M#_9z6k{h_3TO~?l~!~UX$3S(6ZxmyY#+@qz;ib2B$W=-**-^DywKX^>MJx{L-ta zap3@y@wJR46P5pIFg#^4(egB%#O)EQJeghLB?A+WPJzSJ(72ms4Y}n%mpaC}H9Wm5 z*bsT)F1KgE#(TNfH1AaiOe{F~us+VmiA&`{<{>t<j_~|N2d1{f_;)*n3+2x~e&ir) zo@DBr9F46{roD*jv<r`S4t!>n7?9aEbzQ(#uGOhq7hTiwiP~uw7Fw5TpcS{^ua@qL z`Lbm*6WeURUR_mgD|TaZ;nSyL%Xj}eqVs*CsoA>4OB?y6(%0-fb}4jSX2QJO4VSJ~ zX5M(E!njK(GCPR%*{f%>7cL4sH@l$jvgJFT<yK0JGqPp~Pk!>^wB_kQ-ZGcu15J(_ zECqcoKhXKsV3V1XtnwkD`NhA_4T5G3ELyW~a&Rw^XIT2d&e(dw8NMwI|2h&FWu0!d zHl!&EG(KRIO`3Soz{F(f-#0FfH4`t*IJQWliNPsOTIiz4g3S!98jb;%qBz6?Oyw5# z=43G+6f16F;1WFGWh%rmZB@#$MxG~Lf)>Kl6c%hZy?Bu+(@WUtmDonZttV4+t4^@l zcPtl*QDAKp@~req+UcZwNp)Iv=fZ%)mR=iK)UJ0;Tcom6c;y2vjah*_Y8Qpp9sR;p zy3@Nm>cS(dO%|%<;Xi#gcbTtx{!>+B@9U|bUwoR8_S98(x6;$M1us|Kc$gYfZ0Yl{ zO5DoL^+Dv^i`_p9OeHrsY>Ix#6~D0R^FO<Y-Xm(Zoag@eI8QFOWLGzA<YUk@Uw{8W ze$jr%bF3Q2*5@k)FtOw~_{eNyto}4PDOW1E{9oBz)712UQm&AyYsP|oKQAb~`MH2w z_R)kXx=ZZTj3->pnxf1RX~Lo=BY3H1nUYZMiVP>6iGtBAixyoy?yQn@i-}>$W@f=& zrvz!ChAm}g9EK~i5|&)(-w@FtRXCB+$4IL`j>T>B*4$pUg+k2lwk<WO^7M)O6m*a0 zP{XS)xe8?}9gaLsOdK-j6!{NcW;48Iaq{i6ST>sw79I7;vl4`&95!D0UiN7+k4M9F zvzcK}bJ(rjr@Dr(IeF*nfutF)3tNq{4|ct4_`c@f4VTk8AFZ#guVME}j6FKZbD~#N zmAdHd&TTroyXU@Mvs~m!p_y7_W)E9YlGwQ^YU&eAric18>G|G$Hly`m*si?A(uLdf zV{H>3c*aZ?Dw&p2+;S^^=a2H3-)DvAv6zTFTf@xw;Yw!$gR@8J>g3~&H!oX>FwdF& zCPLjHv`2yeMnlc3#}k+<*CZ>wxl!e0AjqQWk;WEyv+0J#1mUU>7mLF)1&x;^$lfYA z==5h{d&e@xMMu9Z6*d#-J+{J_^~9GPH(8;;(v&N5np16E7YT}&e@QejGxP{q_3HM$ zX{sDCo!+^(g=D1_u9}8wu70_8h9ifU`Vrd}rPl{N7U(GLeEUyjx%rWoy-M#-Nqc`x z3#|B>wnfNviu1`Q)7BWNzFx3YBH&lw^n}WJi;_~sxFh_lT3hF>*_ULS=$2}l-?=pP z<(eszH$1I4*0e0??<1WX7roAw-;C8}|GRsI!sgApC1sZ<o!(nG_oj)J;JHN4#dorg zikZ)jTjv?JNTV+DK;UN?&z&)c{G3bqia)>N+{bZL=BdH)#=kwwi$7S(@GyupzS8yg z5ZV?SWv^o+cBb!v!Y0R`*V>ciWB9jdt8DJvljFoTD^is8$$Y81XPk7O26(m}TO|19 zgOh7?CZD;BBG*lUPF1S_vH8cAu<5LHH&1d9sXVo0i(=;y##w=4k8=+z)&8?M>ghXy zpFKfUGJd6Zlu_30B~_tv;wr0{9D~EBKW;eC+u5J7l*3iV{KR3;btj9TevNr9<$3?a z5~d{=a~E%!<Eg3M$|SnOB>v;B6}&d<D`ubaWMB2kYQ4)-%~M*xlEtGXUoX|t&Y9`8 z{z=lQgA-EAHf~bMZnxZ>@O2e)>NTEOb5E|xmHigBkn_u;RXw`a`9U>jl(%Hh2|DMT z+py!`YhCZG#aVwEHy7_rRJiM!JnJ0q^Bq6EJm+%B%c{vgXF9v``jZXK4#(LAtiS)6 z{rK|kIqkJq`vhgamC7*P|F)yY?qhAgD~E_N^VJuNG*0(BM6n&77L;*N?Cpee`_?8b ztGxX$-AXv=oR`#xqUj|pqIQ$6SBV6#>UB`Cv08O&!W7qKlK;QQI#0M!QL;oy)gwKL znK3wD=ii1;5yy?)k{$1CTei2=G@s?=?E4B%xyK`q6pHV3m}l@|gWq?zr>YnIZUy$K z%w_R!Ip^nbA+41wDW$<jChVeR>z0mbNk5M09t}#ilu9hPmb3TVqLr+hV;00ZUd}C; zq}4eo!sA$IPM79UF3z+EA9%Vm5>98;wgo1fPdy+OctdolZrhF*F3%MDmusB5%^Su0 z?W+Hkwk0Q6^CTX6o;e-f!ngB@?BWYo{RED$_MORa@O0q}mNH5911z`Mj$AHsV0g5* z+d(j3pF+$1mpA?~pY&vYGVw@5=z%|HnRlL)e;8gXGP5?+qxHqfrXK>e3(wRGc=#kn zf1Z2x%o6Epp0jN;Zu36m5xjY?^>5FmkVPB{4z*iu?~;_Szk1?wgD?Nrkp7w*9i{Vm z6BqSo_@1+9xTzv~wLnm7-PuF7qEfs^u53Bmbi(&1XG?$P)O%OXI<fSz^0>^E>EmEI z^>^h|mM5I6HG|eHWqDR`b78^F*sBYED_nb_6YTv!)Mt)g$x82CE>g=^DtPX=qhmXF zxz6cDD=#Ii;7eW5rcrooUT9lv=e18M-0SWr*xB_b?mV@EgWFPW+7cJ3bOG0yuCno- z0%<(nCXH;lJ#$0n@R_rUZ@=@8C9|df{~6))sSB4ow*TGI=KJQ><C)y$b6Sc#l36W} zmxWySoYd|k!Ez))?%7e%2Nv_@9C>)3<qR`V^n{BGEB^E<%#=H2<4}`vrt!!<<`=!K zKg1hkRBL5YuZM{2$>b35RQfPgq$MOtfb*<ppsFCFVE2^??SDEra?W0RaJ#NRuzSYD zz`Y*Paq>cu6Gd1#J{g|$_q@+o!f|^GZ%C$R|IgIWzfa@u@y>V=@q44^pQHC5wzNDB zaA}peG=GNsWW_j7nXarOR~K%WoUaj-_r>jEs8`NU7S@{X-8b5V<xYJM;Yzw0Hs|Ey zpbcW1wsg((?0)+rId%*8_a*+{b_87vJofS*!>wfxX1>02N}X}C#>&Nimdw28IydHn z*p@RaYcr0`b9|U3@x)_?TJ}l*!jiVk8GiX84gXsf=G9zVZkk+pA+%^=+RiVrY16!! z1YOEmF0hJ77e}zKapalxA*$>G%j`3X<y$%@+*PS~v&8??MPDz5<8Q84g>-O6gw&n! zIBRfVt8CI~mWbdkpVzHEO4sgrZS81Q<h(2q(Y;5yL#5-AhlJ45D~%zKdLw+@mhyh# zJ=xxS@lppb6UUsrnkRczI+(tk=;>)V6xe$^qw{d@ec8~f(@#uHoaOl^H|DIzlnRlV zoDbxyd{#b@IWi-FA+7HE6vvy-DlSi+E0eyDZ99kfyD9zuW~2srddzz7aqOK&+Xctq z%#&WMLT(#e_-$5o=d>=E@zlle<E86M7X<jU&H8#tbFSE&ja<&t#B%jic;_Ac9&$Ig z$a`vJ&|<-97P4$Ph3fpPR<d1*Ey#HFpw;`oZFk`Y7E95tk}2LQjp|P$#Miy`pRC#b zxOQQNfxv#735Wl<9rBr1(Ya81)%1f6S0#R>%xXFA&lc3I^n%?qy7|R%r!8kV*2?k3 zo@Ks~8obRX?9gqsdD8U{<Jyi)@MMf{+IXVhBf@84M$9J>p}QUXPM-MO81bd_{^bYv z-hT`c-`K&FagjsBLD=yG<Chh`Oz-IL^Nlc#xgBt)ckM)(x5r(6sJNK?>!=7hV${{( zq0{cAGGVRRgh#&0rM{1q&mP-;MRbRcqJApZ9o+>X2mBec_}5Pex?%c!W~~1bSJ`-* zyJxrc3EVrimF3v;2SIT=`mc%}wVUL><Bscvr(qdc=LFuh+}hcnUU+Ng3jbIiMPCcy zUnyMMd6tM=o4dp|>VNCGRsZfTpLzMX)F}(m<BXna)90$}%{YGefz-kZckxHF<`jq@ zQ{!QLnY+>M%(L9^M>FsLKKW$M6rX0N+h;;T?lv%-Hd)%V;!N$9Gp8a#-lTfQSoJo| zl>YE{!np}2b}SW97Md6~&0}}wqK}bhx5;+;b@F!D%17OjZd#DEN3`?Ch1<O{p8X1Q z&ixZ{n7Zf2)E|1Gk)4x%sZQ6>oH3=-vFGF|j}Vs~J&#<@`LoTI{puF;kUK4DnOBNh z)-;xVGbWooofCZK$o4<S0tIqU3%*VFI>n!suxx_bvW@T6JRdkZwOK8?IY)>!E^xB? z$~W6>mZa_ETfd-t`JNn|qetIZTuP8JShy=TfFX9to0Xn1x#!Lv%~{eCup!K%$y<$A z?%F1{?Fo|#8&j-~#tNqe7aTbM|H|n-H92La$4fbUd>#bv+cDKPlzshP?mKKEK9iy* z+|4Zw;bCnNl{I_gxWltTCI8q?PX)yc4#U*D7kDP~xG<|+4BR&H$+bmq5|eh+Wo)i| zdNyVTzpTW&xhwviugSZ}Ao_l$Mu-sa=g^DYb9j4|<Xa`>#Tt{YFX+9p<k77=kGi*> zohgxX=+TWkOYTd5oP2m4PyHMBiHS$%=`3beY?*dQYF~s}dRqP|#Zz7iUH3~he_3!@ zdv<4)70sIH_CM|BvX$L&4naD)Uim?j->>lE?h{)4vV}3~)>)|~SLVeQ>m9u=IXTtg zZ7OFNgMXV#(y3^Hh1+#pLpeTd&0+hy;#NxS+bo_XyDc6H2F+Z)<NVJ%{AqWttv)EW z@}_^$kz3}{N7uMH?CscmR+oLB&hZ01;ni1XRoKK;99d%TIKlT;aHYuWXT1-@1w&YR zJU>|-2!Hw{{Nr)IO~<Qx&IG^u$KI%r`ueMTgHDS>&jq2z8E<?&ge-Z(SNZUJ-cTy@ z@ZmixIoU)=^layb6JO89ao8}Z%{$S#m*dmPj6R7wlRYMKh<M7BUwpl2^%R>qy+<Vy z)YjZx5E!ATxv}f&92*y|n1-YOmP|`x=L^rb$$Y7#dSP0f%CyQgGo-rGx!ip%f)=%G zeSO1)(JL|`QE1(g)}=olq=@)$Zt!D!ckbJsWl2wu%}br-+~k^k@?3Ttf8v8yt;H*y zr=2g=GhS$Qd;!x3redkw+{f7(o7oqynSGBfS12r>k#+vvW0Mo3%;!$dU8(DJ<9xQn zJj>0itX8u5?hxMZa9rY;OUaH6T=j~FOJdgj3q4>H?o(be-Bxwpdati#e~mXS^$fb4 z=)bSicJ9eJ7A_|ru)A5BbG~hNGwtx58yGdKr-e_+-B)$@*)tzwXSer!VV+^qmG)GH zPcZUO^iEMu^<M&h;l2~joM`_VEpmGT@89Sah0cj4oZV+R-hW%#Q+o3DpGSB1^!9$_ zHQ+LwoN-3p_sCQ`fdd(uR_r`6Cj|@c_}avNQm<ZP?mIKAe_LLq@c+VwU(1$%-?cU8 z;;Af`1n)Zusc(x+yvt$>r!9{#NR(Kz=13c39M{4~*6Rnq&c4de8uQ_HAy@XP^KV2Z zZ+@eebSKMG>FACN$0p5|wa|XMbmClw>J4TKvm&m`#+}akx6F&Jic8^nz^6O9>~ZJc zddx{VwBq6ZAD^Ew-Yze^J|n}u%wodY#_1Jz-r77?c@Wa`e5L2?D`)S1U~h`LUH9R* zvq9&{6qBuK8LrVHd)D4Nqae6<t;VeujZi&R^+~fYSCmBfJ!;g5SDo~<e}~CsgS@Xd zIRX{$d_KDR#vAQPSGM>mHdH_7&_3roO=M-lvB34;d!;y8T!mSfZQeLdxbuAFhXW}V z<qu9vn=#mC>RX+kDry$48qIg{*WKez%b)eAcdUMy7B4*e*Ae@5Maw@K@v}`2=V+a~ zkZ<Ropg%ergxr=d+A}T5#%=a8{=~IzNgj8Xv1#Qtd|Iy6ZK<!~*RYC}`QO78rs67v zZ2R}GS+?o?QqFMmi!J{*T(->Q>;CMW>F2jXuxpK`&*YzT|KIuW%)yl9!&T;m3+J9M zJ8)!e)l!yL_Hse?k9QY&+KA5f{lxD7%J=?)PM>`XC+nHZJ07X$Inm;<`i<pNo{79} z=Xu=Kd&`R-?aDRW^ES>`FmT7)GcAUT)c<+3CRPc>>eYA)*4lI4xREOSHe^~uL#$SV zw>roBBF?EPosHF;3i+I$&PCkU_<nE4nTXyC&MEHGuBkuu+2j+VpO)2b@@xL|pv7Cm zBd5eZoMrT2w?yTMe{U8k^c$U(x$^H>%F735%$|QX5sME!wm?%j@odH7Y5L2bo?D<f zP2k_5iW`DQXHKl%c4mRoB0uw!4`%H3VxIQ$`yXY`FQHQt8;*XC^me&q85?ZT^ewk$ zTb4RkJfpy$GpDUGg&+RpK5~V#O!R-@-w!1xic3A$JE-4#*6Yr)@V~(Sl;S&^t2!T^ zXO0xSUimDy{k}knKa;Yf499T>78XHXrwJJb7aEy4d4#MSek^c2%&sKUQxGw6QHOwp ztB!!;qlRP5{0=!Rj)g~<x|IYrTzT<9rK8KhIpWTaOO7Weh}v#@Vwtr346BiBOTYsL z$3RvEiKYyOqztD;+)f57UNszS?BJ6sv3+qhyQM>5S68WmSQ86-%1N_;-wsTjTZ&Y# z>}7c9#KJB3PvOm1Z$>6oPC-2eu^h*OguM-h0S-M8OsrhJ+~(VS7H&x9?J)KE)^oEs z^`w}E$+ZGUXEq)wv+dgs%rbd>WsPongYN9DS$sPRS0CFOy)F0JZrvHv{ziSvy0N=4 z`+<X^MHcU=;N%AlHrrnDT$=e=ZLJLRr?YY^E{mPN^Q++61=E}veu>S`uAZ8hyy1M^ zuiRT}->zOZXSY3P&EbUI-|x&mx9^zNguGpk%nrZVfBlW~8>WjI&OFUO3`90;;L_cZ zuz}0*@acVAhgVN9IHcFWvtE>uIk0Jq!T|*)PMr(}mwjPJPBTd+Z!y$WC|<MLZC}!n z1G?O=ioDmTCU0?2RG*x~@UKZ>b`FCcr`(N6EuCya4;$NL8alK)55;7hF*4>-Tx`}| zl%d)!G)tp}J*Viz;(jY3#uYt&LJybBad@@je2-4n%Vi7AlsvUM#0nk+wuvQhT=EjH zXjrv)Q4-h6Ib0qbr<)}*8X5z|Kb^X=aYYPA6Nf~G=_0wSN(=RN%AL?&t8`RrjmME+ zLOz@JDRms!m{i-!bK`@}ZXKgj2Eo3YPU|fea5@vUS@+QQfWzyyUa>loyY=k??)=TK zPqFe_-LGN(VD-r$dtG#PVRi4lOZRd=+<kQ8b%Vo)caw9??<X-E?D$l&IoF&?l4nPJ z)n3;#wnax*uZv=`e$8vcIkon^-RXetfB8;*g0tW3<JB<PU|6faz$c2uF<7jbD@Vn0 z(+?%#jm|ur(w0V?T${69=c{HgG|vm&^1zMf!={NZmWIy>@>IxQvs!;y<CegMTb9)< zIL@vVkg-<cZdXRe);b&QQ}U^zjo13GFcqKCJ*wiVD{!T#p{3idNQ0%{>Ba2xGtHbl z)FyrNdAVf2cGW8dffTKkizcKn8DE&9v48XVIVSRnD`)o|GFix~H`hdQvCyI~fgav( zqqWyNyj`VxJ+WLiOl$wYs?$1;XI;%Y@J*}dcw%YIneWo}EM<lXy|Qa>oSEXT({$CZ zt?X9n?z0S5SC+Ku-Tldxqhr_gc{N|c^StU@>)#FkjL-eK)H0j*;mtQ+uUX&w@OW)Z z)6wp=@lP!>*4eSV4lnSVJohh;PU7>|J>O)+4zT=9w-bswUl+zEKPmEp>zYV`A3`A; zpH*g?ir$&GDa>r)$rEcL%ntLkMwHFs`pRP@`b+YoN&usrrl)61Vo(2~Ysvx-CuDjl zU+TZ}X!FXcy!ytEF804FI-)dft*6nds2gFeyLTN(Rf_vGi6!EYtD)|b+;~Pt&b&tg z`UhY7N_w8+;AomObB(5Yxzee7zf2}}X*^I<tYlzvV%RzLO=fX~p_k{pO@dQ37HG~~ zBob0owDP#)E5@kCjyG}aV(T-`>f}|1-emi{ZCA$vJ(pis6RMv4lSm3ZX~@gK(?8+5 zBG&^BlPgt`Tc%x~aU$UKR57Mr?TN*V8HH^zD<?J_S+i7%)A4xi!98K6Tp?1$neLWM zyZthKlIP#&Xt(-$$^Tc3u?%;~f!S}1{i^;b%RM~O#>{%j-^6>eJbP$*0>i8uKPEjk zI_uDF_9&|VAXoCHzf1gEjyKOdZFWsAU30a?8747D=U^i)+b;$OX3gxVF`Kzq($HhB z4^PK0qr=Lqn(ew#v(~H=TP%C`l$%1;Qo-ZLPOkRt?Mf~7o;oe$$kq(qDfxy6U3MMW zwue{6Co}8B^ane(Pv3JyX~ORgrhum7b0gj{=BzsLV3L)9**DH2tBu05&60%vP5#iL z!n?qW`Nj{6pvH!kehWpGsHtjthMv+?_%TKGrPRbtYnE!qWD13!Iu^eD!CNL31;^G8 zlNLn;EeJm<y)^F2rG|-t9{T%#-TYLbIWt-<d-~=j*HgE#&Mu5x<G_0B{*PCt8>YWy zcVO1Jzw4g4H0!Q!QBM`;*S#~J`)tqp*jC4Y{5od6l5^iIHgEJXJH2(&_mbcQ-c!p9 zg{7n>Jxxp1emsAx){PjJ#`P9olKR`tE*nk=ec=2+TOqw&(wpD+S=#Z>k%?cH8lCYm z%MAT2>vnavOW&;*?n<SBQB@{Ei`K5%pkMo_OUB`npPHwl>z{0mnJw23x~%jJpTa%k zz!&#`f2u5sdEAXGY~Qz={p`&*c<JHP_eh|r#YH*RSH!hT$x=Xhs=C6<%Th~~Ryf(U zPB2PjkXF2Ee$McchGK?8P)ZYnXW_ci^;*Ia5w5E0{JA<Ao(1veT~>F_P;fhR>U3OD zsm{I!tOm<jiZ?P$ZakQvX7I-LO{(B6o9Ew78}8mX?XcdmH6Q+FyI%OZ=G(Hz@;RRC zXMf>Ivzd5V@7ICsxYyPZ`Cc~;q@L5>!SMTBq4fg2=2nAxF$MnIH9O~42I<dI?K-#V z$=CU>x1|~Fip@KArdfY-Wg7Fn)e}zN$oBrRfycyXcit+)1*a38)Rs1_RJbrj<&F45 zbA4+r|ENz%%JS#_d4$Oq1=c(6S{!hX!_DhcVD}ogAXZ_`ocPxZn~pYF%a?v~i@qdu zTkTMy{v^(Oja8iC&N(6db3Q8NT;b?by&yF8jLXXY(~I2NoCHrOo>CH<>ERJ%Bsg`+ zJI1iYA0EeEiCkK^H8@Z))~`?L`qn93Cl_;7MmvO>vCX)XQ^L5Ea|4e`l4*nfiKf&9 zx!>B!FE@DU?Rs;<X!DHIyLKAp*}c`VW;W~)eQh?~QNV6`wa<h?e`Zkw`9CX|=akOm z-gV}uU(s)#7f+^aHf9$}&rAF5+otG~c<XEK_FY$HKP^4IgV#v>$A{p1OP1$sSJ~6M zXN~B(x<l=6%eE~z^~+dZJk;Qy<=%G^sc99n&X~PUcQw}Epk#mZ#0T??@1<`p*p!@} zsd@I+bn!{;KV~11f9sQNeQ8@yfrN?-@3D=>tqj+bvUYD>^OVuT*3x%#$YOsk73Ip{ z?=${o9q*rV(ZAYiRo}x|0(0hE>}Rb%wIFEGcH6(X%DROyPv@LkA<tduqZH6EciJSO zbB*&ggELiP+7~r=@AG?7#>&mI!^rH{^49gqT&f!Dd4rPX?$lr4-u{ex<Ah_IN;HhG z=v1BQj;eTf_RgCMt-~)(9-As`n7c!@Ht4P6q31i~QcTY*y%2GD`kqv4m+V(A6HMH= zZB<^>JX?3}le=w0a;<>w#|!O_92s^|$_ZEgDci2$w4SAGv%)#a&pEm*+o)rL`Gr)w z3)~-sv@9R!E%ZBL_-m!HO_~wM`_zaRO%BhTO^%)MYiWsl;kxUCLE5uVbt`U^J=ybP zb-GKw+p&P$qNV!Nmi@o->{gdX`yC~3mc<?W+9t1H(K~m@Q_g4Ek5^^?xc+b8&~woI zQ|F~<=HzR1NHM^ve}a~Z64Rf3DoR{^S^+ugFEV^qomV-NuXaX1(632LZ220qbWJIz zk`GIimpxkRz)*6btJp-HG4Fk-jwh4Yfpu+ap>a#^TuAd)I-roDx?CdLpel7rTua0^ zCWeK}8QY&5mT)-Fc)n3%bwrwriN#@iwa2v%%JzT!%>VUqnx<v4?B6&mgxfx6vBM9a zcMG&xcRQP(aF<nYvwOAD<jhO6Jnfh@nlm0O-onRW|0mPZ$~W=Ga@)Ru_?8RjES!_K zZK#)VYe`r;{gV3bcZ-{}l6QExMV`uzlHiX>dVB4J>qn1eH|+dB)vZlW@{NyjX|sCu zHEYS2xQs6)eBpWw?(^8(yw-1+@*>k`)#NE0OJ;E#T%k6lYsqB4_v;h5mPcuMDXh_Z z)TZ=C<<Fu1H5;DvpV0EZ$8p%MX^mQ;ikFg4Lsrp?6rZl1U!Qb~R-8XNE$hBax|)rW z`W&a?Uunh1K27j)3N%yIzng#3%Wut!7VWaavXoc43sQbOS)^Wk;$KD96ITK5jWM1E zex5EJ>I{k>HW(d_T=y}JFFWN}q4lRXDM>4%eSBvdOfp+@{Pi5>TAugphu<an<z7C} z`u2d|P9|Q5S)Mah&c2%B9QP=2&N^lJ^x}kTtve<tGv7VzxZ-Ji)yuuV-o?vYGTfs# z<G|wci&i&#b<FTE;wU_uwkf-n&+Ajn5~eEO8*GnNeA&)uaqTPdyYVa_%<24%82-hx zPITCLwaq&5WtG~kj7bMRyzcZ^b>Pf0H?A|wIyAmtVe%3=#P57G=U$TFMwK6YPQ7(r zC-OEPdbLT>qTT;R5sMm=x1W*@uinE&N%=DGCaNv>lVkN!@>4tWKF~=)C2CQ~nt!hX z^;#LHbg6t>5wf94MMquTL#Z^1U1y)#`ZufoCG@S!bN`>^s?gDLT1s2LZK=DQvcZ$r zhHBY-#?Jd1o`1M=W@?&>(XQ?arMAkFPGhUnCLXz_XBWTk+tA=AY;SiV`qoPeA&&VU zIxTMS)o*#}c*{9iNR8!dk9pn)^R;^0J{+IH#b&yN*)*kK`=-?|o;{8)J8P{u!Cocf zqt~ZvDoYeAPX=#QcU<J|=&<bCmsDn#6D|?UjB4Ce&S$$WS?$u|%T?Xx9(ANWC3SJl zQ@w%}H=hY;I_tMTD#)CXdwWfq`tR<~6F9o&EOAR)wZ2F-hh^izRW9WkZx}ruC~wOU zy7<ET9~=7=8zrR<CXH<@6M9bdd~@la<rJ{tQgM^dnh2#;UpNAHT=IJ{Nt2C9D@o+| zI}KH<js611)l(KR=yd8FN%|M&dh!I5?}vT^3r(+IO`hj?o*#JQ=JWCs&xdk@WWxhK z?ltZvI{lT8l#Tn=C9W&@V4yMWiO*S|YnOFSn9TBy|IltL#l{vK!2WU#+i~@TC8q<T zb<I~M$4&`m`Xn;XK<)e&=7yYLW}5_=!^(+HXD`R7ZJj3IxAd{8SI6ZQoF6Wwr-iGe z`aE{<deSJM)nuT-@%5<NJ7=btBCg7lMp|69%X=4Ttx7)-a;xc?bJh}f2YpwkC(g4@ zI487hC^)L;q4h8P)8+3yK^;?;bU1kNzx@!oxKyk6QceP24ws<!iX4H*Onz<-8`LiP z-bpEXa3r6PDc0D~Uye`p(-E!Jmt33=trlBeAoq0Dj4n6ErMmME9SM1KOfGYR%K@#1 z?eV&YV%-%OPBE4J$vSysk@kfp2Mg4_T@*a(Qu(S?pD7$TGa>ESp6}^W+(soCX(xJ8 zEQ4cujz;<=R~L0Adz?<4^^_y=S?ZL&m{s4bzB_L#+EBA0&!VSu7ME@c(~6p;$8$G4 z-?guq&A-_6UAmLX)*Vi-<?o)f(Frwb2-{i3nUvyf(;v3$Re2205oPU!P+Mi?&}k~Z zYK|v9oMU-q?CYYCdZMN4-?Hl|9DCDF80M*E7#z0k*KKP!uD66El4bf72Ij@*-g>Ql zw$Gw-nZ<c8i<ce0xD0j0yN(^p-gKtu?+1s)M&(7zz1<R6c1=CxwcYQ_v7U8a#T@G0 zeo0DCdNnpU1%xaTa(DXEbLhbdu6~h*UWo+fn=^{*-b`pKasL>hR^!ueIZ>;FN7Lm& zg1)Ct(9trFqX!f6Lf)+x*qoBZ#QZFZwaaMQGapTTt;+@zRBr}xR$b|-$XH=DH#^%m zVzbTZi&9676gDYuO^=j0W?|7BzsuF>%2FRsXN!pLn1<%y>rY=_;$v$+98{idIVpKw z$prJ13-zD+IDVGTQOn(75t=w>=H`F9PG|k~ak=q**S=tG;U!HzVhZ6N(Ff9%b5Dj| z<*~gVwn*dDwOe5ZRcCEg`M;!vMh3mtvwEMO*>!Wu6TL1q-3*rf4(k`!aM(|M;qJiV zx-QqVsz_@$o4xk818L{^{qr(JF7toZKdogx<<$}vFNc!-U;B@g3VlAN#<8d{PN^)M z>E{k3Wv`GjMpo5j?=@vQwYTYu$}ac+$2+MdNp$X`KmWe=S620FB~`9mqMNW(Poinv z5~-d=;fm{ixQBI~p0LcLXq{1QA47iTvt_(S_UAX~y`I+Ox7%R#EG2`@i}bD~9F7dh zWnSQF^+Y7;&^o_t=9o8IGLATJTcvFK?}|;w;(v4PHrQ-<+*D#VhwDk*kE0vZXS|t` zsi4}Cp6Z;#>fhq?i7WGMVg~Q-PkJq>XI-Qw@$9^o^Vuh{KyA;fZ!UcPZMVJKc3lXy zEek82(LOPCL2>A9hNz55x#|BbGkRJId{;%3FXPSLlvR|M`R7Bs(W?%H@{AAXJq1GU zuGqSMUt00Ov>$I={M8;Uxp}Nd($%Fh=g0{c4UYv6SkiTVTIe?Ol)Ce*UUFy^SLaHl z;}3=OR8}yRf3`R=?NMQi&bnDjC)^GN>uKt2V9_(m%wT(zeT&Jr#64o0d3eFoXI5F# zg={8eev1SyY*Rk9)^}S}TyD<OYa#y2m_n;lfAZKe`Zn$QH@)fetj+Ab^STyi?L5hL zd*#-wJJAO|Ha=&y4(#5cP&!ZLM7`+(=3gOZ2Rttr`NkPMQ8~L!d8dHmzdq~T*&m~H zmCScEUzo}GdU}|yM3_1=Q&_0-;$WAIC+RjS^U_Ptmh!1tpUPkDyTdSSpO%(xkA(f# zJNrJYUh?5}#6*?l%h=kNOkE-uQ$E9`IQG?gxjUZxB^f)~a=P^Oyc}494k+%JdZ><T z%9kTcGX-OnorGM!s3u%LBC>o9$5QR^q+e(9bvz$UZ2FadM!(<M^&!VeWxk)siymqI z+aVggTvue<L7zT@uUt7wK8k%SHu~%gFK{`1qMS!jSl=svw^r0UwDRn~E8iXELUZ&x zjE}BXJlL(Ax^uJk1k<G69LB4%D?hI*{=EH5a?L$;n-k6H@+-DYDmYj1Ghp#e|JQ*t zmq*U5|6saoTO+^99uHlW=iv(Jkz4Z9US22;H9gi6;gRa)k>>rZNlj(m$pD+o9Tpm^ z3N+6fMrh`@_VNUKxt`i}W@1~%|8F<`)Ktup==kRCz?ofmH)+S@*do<m%O=@ME>5|z z^a=lRX{A3Gat^fZZuE~n`a|oxuAZUmA3dhN$EW;Cekms{dgb`w+H00V2KInsTKxx} z<TqR|THtlSI!8ykb)sC~pC?-j1P=V2VLr)IRoBmNGT)XTN{6y#O1v&MB}E_A58?cG zTR`AeFMIXWWf5xxO>C6+c0Ju>=A13A@gn4H^HrW*3QtVsldt==RQzzZ%4$Ae5NZ5j z`OM12TV*&lOy;vv^IhjJTz@Tn+md!>JNuMtdK|6Y_svZ&__bYL!?{IvNi$E^0xy}f z;`=zu-!@;pIsM4B%Zs`{MeS@hYMF9ByFKyiW6Avd!WZ+JeZ$#*IiD!W3eYc<ot4iy zYeUVlEW557Jx1<JOm#E*J7<~RUAH}F(T>igr5Q(*1g<`El<fJ>c<3Orkbuh+fyNJv zhnkdSItqR)P;_ckmTD+?5TI~~jnBzM;NXL#!);3ZHaQYWj2-P9;w~`;hn_YG@QZXX zd}Ltp`NwYP-onwS(9$%;Jb7No%a2MN-P|%UJ}*m-G_tcxMdS)R)M8;5*yJ^#;VPp$ zC!bPH>4(s!RyGN#hy@Iex-8rR56<N}JbZhHTSVncZvx|nXs(*S`=$yke1Chpv_^u$ zobS5#Pxi?NUn^j2ezLt^JUAoAk-3d$ro8pPGvUn{JW@tBd4D3dzT#b&z5UpMUuNt# z*H~uUTl>pAoBKfX>aw@Dzdb*{u5$Ca+TWG0&xjbvAD4|P`S50w^W<yyVt#+-zU9n6 z{jKz_FAo;4^fzD6xR3SpT-WpK_gj@@?vpl|f6riM>Kohk=+yp|OC{NA9;zK=ZGAXx zX7lgJfE%nrGAkmQ{|UxyNR010`c#31Pl)YcqexeWL<irhs|>k?N54*OEjYR(F+sc` zqcKLpqd}=(<C%welIE$eSEKkpbUa~>Jm_&PoOj972G)#5SJkA{Sj~gX{7+6eOwMps zm@th^b;<-c{(>WyJo!u;g4`5Z76|(BD?Si$<I2pO;^gkB+T@wzXL=~0^wE(9W{wVq z%S`5$tt)~Q_S~EjBB-e_iK$WRD+9Bo<^=|3frzIoLt_)aE(tG_vrLT=JTvubl!%GI z^;Nu+G8*H=Z|o9lpFH#F!<debQ(q^m26;HfO?VllliuUVCY`)q(CmKE7D2bj#tpgC z=ht2h-QLJ{wD<YjlKX3y&HR^hi!ppQ`-Pj&XYbt6877;zaiiP4=-X?v^9t5^vddTh zTa_+XzVWNNbmsl3(gu6D?b7vkUVD|kcF+8$)2F9xUsNW4gf-~d+~&`UKcZ^HnO7*3 zP7eKXvqt=~>ch2sN#PQ$4xhdzH=Ep#T9U-OW`|af(!H)lt?JKY!uvdgB$vc1n0ZWV z^;3$>nz(YB)KZ7SSWd=O36oN%O;2m=47(vzBDrmbih@cLOF`EGLD!5=PXag^>QpAq z=4*9nnw|As^AK~pQdGH<rSB`j`Ic)_E_+xTez@SJZFp+(BK|X1t}NEF{Q7J*S4gSo znnlOHE{RU=b)Ci$S^xJ*RIy{gmsbTF_xyYHx{ddk)rPd2UW^IHn06<`$^3GaEd3mG z{AT8Xu<%<+pU<UBf4(~L+nPP!WXlik_~`5ZpmP7)ZR@|jOPelRa=%hN>g%6pxBu=E zE4lD4>%?<uDfXMa(*M35Q;oQtCwS|8eB4LhJ94K(daUn6PDuZyEcr2DxqZvQo=tg6 z6)HtD+<O&oba;gsWqfsYS}%C(=oB&KX__aTZ5B=F*%!2Ut|l+DW3YF##*#ylo-fj! zb_u3;9aH9>>Dp?rD==yfoARy=?>yX;xqIfdNQl1M;JM0a(bOp-+t!9~hD8~5-(dN4 zWS?w`66em22#qA+jtx&3vzu=-vuv8g=5j>IhBMh!>CrzCi@lm!!8<veaxU#KQ+ujj z)O}LM@xbzV2c9rAo#_npnY6M)rXhH)uxNx0`!e<%R^4U4gG4rOTBX3M=4zijv$tUR z7MYU;&Ze`tIc-xUPfBPz?lGR0IIY<5-=DUK%TkGr52o7YNUkZrF2r9{aasS-hqjn! zv*PnVv7V_>eKBpNqJUB4<i>)#X;nux`*z=JJyWeYIq~{!-hZ3Y<v#7<p8f6hIga0- zB{=om9gU<Xa$b&P<jKqqlbgN3LiO<`!IiFt{}%S1)nQn$&wxWuu3EscxI}sR#y73{ zDl3k6u>^`nYRq@D&Uk%^Nkvi7(@QU9QdCgtQQgp&I_`UJMY?bW{nH70=^3A-H0{J9 zRc^~CIlMb3Pjgsc)@Sohv7$-Z<KGIw*)4&JIcpv}UrU)X(LyCq$-v8t%lyPXM!ll4 z9xs`f8dDwILe*<u#e`Xzt_mo9+LfL-yZ>EL<J_&UvI`h_)?b;W{lL+CExXdvw6bTr zlV47?s`%Ptec4j#&5bs@BMbYJmj&B?+M&iQ#Nn6rY4W*iF)tE0f_<5}-R2c>X~evi zlFxtCI`=_MTEg|m=l=d_m8%gAp8kCG*&`;>kzYP8ulZ2f%ix}N`<8%NY6ELd!>1y} z<2!uPgpMpYDpS1h@R#EY#3vmnQV!X4C?~*BJz8VJw?|Gvc_A*fnHRbvjvNyDSG$zS z{#N7#wW=-AmVy~R&WdjLPcK=kXz0FjQPA}@FP13jee?|4GilPSBbPj!1Y4Ky5*D{z zwA5Hgv`@)GWKNM1Q@@W(AYaBQNkgT?MP({Qx{95_TF0l%vg`5{lVntwC}i&V?a7hW zFUek9CwH#yXbmxWCg^_Ph}o76C8c$R-r?7jmdIXmEuDA9TP^yh_JdbfBNo}*+^F+8 z`g6~PlrxbE35k^pO47DD9K7mKx~^P1|7w`&*VD_G?WJY1CoS7>LS{|YrR3Q!JFi)> z2Fq6%b;~s>8r$rw<omKLIlW!hEcL18^e-DOpTBpk+et#jC&Sk47OT>BCgshddp(%% z^2Pq+u--FQ@58F@&C~9_abvuCF+8QiSe)s63ukDcVDGg}JB)M}yKf5U>~mSN<x56p z*cZtuHFL$(>&|*J{L6naqatV8q*mn}e8Ev(&jnU`Woee#gt*-(n{4g*<RI@$j?Tm+ z;bR|<DAjTwd@RR)d`?8mZI79pPr?>y6t^oJnqahXv7D+$#r{r)-V}#TzF&{5O%&8E z_naueJMZKHnYIP1yRV(M3DG^Fv07hr!E?uG$+f9Jml{v-T%J7Tx&w#n>p8og@-+68 z-+1{l()zt(ab?)!qL;R1v)&~6r#f`6eeW53>Xgp&efM&n<xcayAfYhhFVk)x%lNW6 zQ#XcR{3yPF&+6Ady9Yf9#)>oczA##r+BR>+N%OOgt2YPFH(q>ggOl#&VCO3tmPXzJ zt}6G|AGrIvxPRh=o^PfLUIyqHbP27C{~OoKCAZ(r`O%aQ-A7fqT9%$&x2Ugh?-38L zhFng+*)A#*%vbJOt7P)BtmW~vi6zw&a}8cj36f#*n9Q=NPk?dzovKw96IHy9uFRhk z$aB<Olz%~RRO8fe57SkXgWh^<ND_=laurWL%H=lkq2BwF?Gmw!r}c|?-z~S_xBIfp ziIn|kd!|_1&FRYgP|?fytm%>R`k!b2oWC%;-=zKV*~d@*RPEH<y!(*N9J}Pn&vn$( zF1%%zx%PzdB8$(X$F(}g(*&RB|2wCYdND|fhuQJy5rgd|^7pnY2n8@Qw)*j8$gd2M zoGO-i<x{|%L<!zSk_y2A=gea)O~fO&IjSFW@|zs%lPqSTtYj(FoVPs7b8&!86Qlbj z)1v2b2@g#iU$`hgb!q#a6D^!FZHn@7HI?>ot%)L@K}}jw&Z<d4VHcNa*qExPEOGnD zW?orT&3lkxeYl|CLILlm0>O#u7KRpemqXMZ3QQ`}uzu*?Ak3t8O(VNFsc&+==0+jb z0?~L=tr;#_N1o-BKex;_Oj)BWVRE^kdZR?;bnW~?>-C=tCYTj!Z!VmyC@HhtE7+`b z{llmQ7o)!(&phND_3L>NyG6;TB!l;t{u!P#DY^Tk=xIt+keXrSa@#A-bx&LxE`3RR z)GT+zMgOo#&l^FzT~7<2F8AXRG5UN+;RsXNn<=ShF8hbDE3zrsoNSHxt{Cv9Me0PW z<o^;!aUn(lqq0lxF~*0=w3`B|-D_Vxbutc85t^#3bjV5Pi?e`eO9^9TdAM`AxN4}- z1Ow5Q^Uqw8J_k;^qLQFgc_vLYz^O)kscM{(TIM2k`GaPnjltKxO_UB3yvwFu5)>S~ zRJG@`pv1)xt_I7ZV&Ttif{jXo*&RY!2ZfqSL<H0FY(FMhSypo&u#9||Ki^1e-|_hH zW~;zSqHjXAWQ4@)8zmYqirRj*zVOLwSxUjYe;!WSk0oAPlzws7c{HV7@^PVfio*Gg zGKSyN8I4O=uB1O*QY^4Ydi7QP_nV|Y7W*!p>SMD#;?b8P{)+Bnj3qx8>8-lR=ybjK zNsDjWvib>`8FwV23RY%F7pF=wD17@E(Xp&oq+D@L2czirm@`eKV$3S4hcl#8lv)}4 zye3Qf9FE)etlufv_~Q#h6OnMI$<DiuDH$wk7H}2&BI=~|Rn)<v#b=6(e5shDn`--X z)lehVrH69Dwm4h035EzUg-<qPHLScSmYc1TDAed-?V2bwv9e%Mh=!#|&Jj0xPxDSD z&Dsn>)r&&S%uK7)r|5}^{=S)Kc+qnHBg-Y9s)abM{%JpTTG~{z=yAtP6^T$z@wpen zzeh~H<XXGDP=ZNBSN3{}LzCB?pooi?B!o6u|M*<^a!X+kV=>!`h^LQyH}3E?cCUXH zq+fEfM?0%)%|YGAB95;L?RQI*$R4nh+Aw2x;u47mzBcTOTP5x8Z}h(7;&WQbMtno# z>6Dl?OL}|Vq}hWQL)80vj%CF>GkTfgG}&#@*;K=&4+E-?XI<M7plqR|zePb~QS;W7 z&O%A$s$X*c&*)$E$;2?JV*6tSzDSoQbJg7G6^Tlf=PSjuM9mTwuV6MWcy}}?`G`>I zCbLIsg2gRncB~$DPlI2*RO4sNs}<5%bW3>3A>ocE?Ouu^3Y!1gwtsK0`J!gHvEAjS z$AZh%?HaCsOjY6!YwZiS&e*DTYpI0WGVP?7+NLWqQ!6D76h*Tw2|r+*dM?A}lcM3b zPYwT>^*N?^J)LA@a9!5KtNUO^#`P&h95cFiwCFBm^=-N-bzG70!e{CBn~k5?OPsQN z9n+)!F1OtlYA3kFP%PQ|!q=I9Kd*hzE-kv<=BR3)L`Q~5c$T11f9ft}F^?Fn$F=$v zO=gdc^j|bTI@)jj$(X-2?oFz(|4XN9qE1p%13w;hnYdiBde(&C%`JS96VH~3$*8J& zFPWefIyd2=Ky+Z`y_JHj3)KaenMnmslAfj(%dx7XNnn$BqS`_=(S;gW|E9QkZWQV$ zaZ@-rU&+i;q0*voig1mHs1BR3)kTlFpFR4wh?X*Hhk2%C9kt5ZsN(#rqkOvOIm;B! zZT_)_+C{9>7H1kNzs~5~ZPfZORei_e2jX2!K}9kGX{#^VFHn?jahuMV618!Kt=Fr% z+M5lVF3yZMD`q;}cfCd5&TENm0uzhH5~&2H?oOXO%-!27X8m4N-#NS2;Ij^!^ak5i zy;{PKzRMM)6yo%Qr>**FbVfBm#At{3Y56M;H_D`B-*d0sqS)_q+0%Yfm}1dJPvdN@ z6ce9M0r#KA+F4Xozgk|u%hYklgq2NVx#AU{U&n`M#0Lk7r4&|lb>*CWDG=$z^v|+% zWsHf2<U#eUOOw4+x0-Y2Cx2O)RUud?5y~UrG0`}8^)AiEBH;#R;b&s*pV&NhKhHNY zThQ4d>cEy#zPo14V=a9lt8W=oZ?Q_;z3pXv*vO~MP(-AQDb(<7qyO?LHhWZ!=VV56 zEBmc?UBBC<bOP&!>n6oEUAFJVBlwCJKg}v$l{l@>Q*Uu-^jSsQM_FlV3G44|((6AN z`QTOUmx*;xJ{i4w60@eH_yLEp{${_0mGW~|?q&7XKhqr(maZ6_Rw^A5@FXJOh^Vod zv6Jg(m5tA4F&M=deTr>-6Zl(0oL`~YvB}tH$MQVGmakV$Wn6RS`)oEiYMQ7Nv}{ku zskDEd2CBh-tSguC1W%nl$?j;dhGQPr!g<z?!j3mX3Yu3LC~kdh=H4|$n8`75({<sF z63q+|_mgXqj2S()s+;$!hzUN>Y~#>gbJ*(8D`nM^9LGmtr!&1WT=y?-)4o#e^_!)u zvQ*;Zl3K}G)6AF4O`W)?GSvTH@SYomidTv==5xwE`55tqIm*>N?fs@y_wU8$3NK9H z%=l+B^IenVQ!l@^${AaBOK<T$`ut%1JFgNRlZzqGkG7n&`SZhRnM5B`c0iVuc38Mg z!to5l&yLP#_6Qxy;yv0wH|6pQx7o_SMOV#q=6vdOTYFCBE+xmcS-P|5d{sSl_Giw8 z%sF*h0-P%YFZ{cy8gf}BtYg7>PNu@bt11iJ;u){Gq#h9bCRlJuFuO%qJW;U7qHRXk z0l(R5GGXf4mD^OmCFaQ{PX8>Vw18pqr1t5}`ImZxex9t(jqX_VshXXuQ~%MSKc*=j zCg-$lBxd~3KL0B7$|i}NK;_G(O1G?yB}3NAf02{x@Z&T(J~6Fp&qjSY<){sT7ujVm zosp0}sd6+y%{Jp?(Hu7;rp1P0z8ANP+<vxc{U+&*zl(NXjF`z*vS&~0t+GEc_rEk+ zY}PsSso}R_OrM~Cq0io{)s2Q0ir1#6UP*V_?6ycvwmG1@IYnGa-Nc#ot2Tq@1n!&r z+?a!0-!5PIdAZjMC$rOY{wXD>>^N4j%;rJH#EIWmt0*owwNb__q4!i!t46_+5L4Aj zIZr0>P7rz0mSi(?vfWAnOHPsW7GaH(YK6h`mfxBuX(RO6ZMF8d$vq*5)aHmLF>Y^P zF{MvJbum*)-q#y4kCLS}oprt@ZXVHpBuRThSpS|){t_n)g|;6)&RS;3oGQJ=_~s+2 zJwIwI%pw*(mARzom=IGRd(LLjM7eFLx|*BUa#{FA-l?A}dF=nEdY4%<Zl-k4yxP!l zZ1KzMi?=N~ab!{IZT8qrPmXghF^UfN7hSYb;JBY0x8hmtqE&9?E6tYiEEN;nq_oIP z`?+bhr|o|0;wwwfoP6W0yohiAn{Kh0IsYDrdgdINxu5Bui-rnQe6qUr6f+0w%7u?} zGL9%`DzA!@xZeAD;<QC>QBLaSUj=6>3FJjQ^86}XF~dSOQ8;8`b=M+`!W7MOXVf=~ zPqDW=%Uy6I%rH6ZV<^ijv6zi2Zc|*AKVH3LiizeDWq$S@mr{!^tDe99Tw7jx_Nmpi z@h=-5bvQh}(fem(W}2SD(WUy)Z+e6|9Q2<b`S2*>X;<m9hZ+3F3U3mhw`m&kO*V{; zJN9$Y#oC{?+m_zlv2p1(lUWQ&ay_DUza2Ns>og8~bxB*vQNW~0Lge!DlN;Y;G@9+* zbXPUbI;nS;(T=L=lF~{qO@*>vYQLObXYGEY`HOW<-M=bpzrQAd$~S9f%~38DTmOcE zg|TI;UzkusaANaoF2w}q>kKT0r}zD<6uy|N>6t5GCTgk3Sn^4r_4D=l)77(M^CG1~ zvow-kFVk4HeO1k7k)kJ$>=`{WteKbv-aX_~i#B}R)ZJlL7nW`+zAmXigQa|ZQEcXR z3Dr&aBws03J(TxVa}aYEw>J79_$Wj9(5HESe-+83P0NfBzI!a8Px|+#)Lb8hhsEBT zH_G+a`S0Cv`?Z$T!@>r>$qN6>ZR^u6K76!G=xzO{MSBFf4db$QN_;t{!~2<OYoYWJ z<q145V%h&qKBn-~WZ7N+rc==`e;xT{eE74P_UA=rCVHQpg<AXnNs8te?byWd(4nb? zT}Y2ZM&rUEhc+Q4iyadtBsjMTY6ZDyEM(+lXO)e(qruqZ+^8aDGev>P$#F8PX<5w& zha;zFNGo<^2wYz5C1@o5MdYD_OMswai<yCz@e$t{F2#JY3QY%_1$iB87#=3HFbgQH z>x*CrTXSIpmy^Z^tw#)3Sz`~o^;$YHcC1$D$>W_Uexzeht+PzVfdvO2aPTS!@Y#HN zlF-X9+TX%((CNvc3F_TfG!he8c(~oO_Aop=#LA`Q8GRt&)*@D}#hOc|F-SAFajy~Y z+g8xH?cJ^Q#naPlZ-0MtWvlyTv30w@zUG!n%Px2q_5JhB6?5Z{^UdAC_K*AATH*S2 zd#%2_I})9}Vy@Jmsw)x;y3ZT@wJLpcdt!JwzwNf-5AXkGKYwrkX;E?h-e*5%`)<Dx z;JkMGv!ZVOgD<1J*Khu!cSd*bC6B`nO}s^ybr#)ny0g}VM{7pkb`j6+6AO5IPZw+v z<ee3`r8Vx%g$0coKYWba(nK~cyqy%|;UO<8wc<o~KvKr$#u-~Q7I%4E;9(L9t2&^> z$x^l8C`a0>6^**FLdB<b<qxe?(NSJdbcUVfmk?9qsTeMeRV}-`wQUQz4z3aqGkB@R zvf~k#_L46qr*yYJIh3ihp=r_T#<g<2uh$A*JN4?~2ALDys|9!6@?I?<z>%}DpCviR z@bEt_;~c}Ia<h1v4zURpUpuXGc?~0%+G<~;>os>K7|U62DOh+vMmTrN4X?)^BQDu3 zNoY<D?lHS{x9hTkU9->|9{aSN-U55`;+4(zoV#~e!H(Br#(UF$CCcv|UflSaXU%fj z+c$>S%;Ce`-@g{0wPN9pIdA{r!QcG7e?Bn_>_4~2cjMl?*4eqtuR6L{?Bc3)es96u zudHh(TD<$L3wP|6h-0l*+=9o&+*vG-2|A|aD%?rg6X_<G_$KIPoc@bR&r~$6K6x(E zciMEcEubh<jq{etWL3lUGAC3!*%n3l=*f3^vY2hHbMToOv*=P|l=F?C6%*IhEKr@f z?a0a%wyle1Yy7iOecPciw}#1UHR}c|trd%nLK`lwSafUE3U<C7Thw>SJO~L|owVu7 zd;g!eUa#HbA)8|m5*d4jiCrXGXEU4H<_9Y5LDSciOsJC8Y?^5H`mEbUl^dom+<8wX zL^db&C_HJ%&s)2P{a|uI`132Qg<E(`q|H+w-Ks8obWcaEKk>cIyLWrpIKwIuYV`F4 z_T{Rp1?=Dzm^Nd_k6FR?F--?q%OC#y?LDKWM{`MU(-&K@>st-N6do^WPtgh%%uCq3 z@A`!f=Zza9&l$9B{->+qd2Hvjo(aZM(hqx5Oio=)<yy4n_LP@q9=~N>x40~R@YBOv z)-%X0?1hTOSx;l*mlH4EO8KX%ovN1a({(Z}AwtM_rLO`{gY*-X0}XqgKJlsk+~M<S z+IE2xOSCILafLMnP4!W1)ymGi67@t$Y>UUl?sUP%2pv&THjk%TN*XcIt1`sd{w!5j zJRuV=_dtAK%L0bE%u5p8!e?HVJXW&uw$Dq2$&%b6Ze`OQWBZe)uer_g-dt~y3QLFR zrt2*HmIsx4)vTAy;oah9yXN8fy0pz}QVUPp>~K6^zDsoRr6X#le^y=p^PqHp$-&bR zY_H_^pLo8Xan|vqYe6?ECas+Rp+?<F=0@M~H}0~Xh3biKU(atf^DyLW&~}zon$DOg z?DeE$jS0_|r|WGxWF{XxVWFlR#?t%rz`xrH8yd7{tDkFHa$f1-v!;Jb)F<UEQ&AN2 z&Gi30aZ*p4>BIof65c{7rxj`f>=Pas@w^mtYAFirvTDiYUwFwQfvHK!Yk{Bg$6G;3 zOiWYmrKrkCas~D<O*xY3T2#h;YVNij4JR@$E-QICIrdPK<|d0(I@1qz1uAV9UFVY( zT)8nM=&jJogART^+!j4Eq!PBBF>nZLyRs_G^pMp=i8MuC4&PT6F9ckIGK?0>sAro< z%81tnr}LeRJR4!MF3)m>lgi=#qI;IIU2|U~zP>EEWm)jN#=!OsExOlrV{h92icPQC zlKJM~uGV=!UEJ+%NuRID>0JNKgk#eJ-hkxdl?LhmUM{mf_3=Wt+O-3`t9)i(34X9a zMPu>(w`xjTN)t4sot$KOHI+UeS-q(y<+|k6&EZx-dK{h0E(kw+;UO;~Seh$#X|b(t zY1*uHm)p!H%zR*=s?^!(zTM08!#WpV&cx_j9+M``2`N!6i1xhGVKjN&ix7?Ijo$7% zICk1UY+;Oic{1>m%l1_{OM7G9a7CH1PP1KC(o^*1GNX%tsLiU6MY3&K3bx@AAt$*y zR|yL<r-gcK5}On@e<R1bD_R#W$V{IcDz!Ab{Axq;qjkr$vKiQP7WqHz*)(_E#NJMY z9gfegXj{DYzEGqlapu?6_v_DRp3f?`od1cD$4YdQ++U8gweMK}`B>a!ys(eS#Fr(r zpyq{?M7_pp!@NlD#_u}=7*%gym+(As=D^f6X2Fc8dp!OwH&s75^6M&jJ<^M`;1<kp zw~3QA&0H|WO)6hs=)UIKBP_0qMO|;H9Gb9+W$BEAvu50yrmdowVw^C^!`oxk#A!L5 zOEms+P785*{ktwDhqY4r?vfquwyN*cE0etaHSP!-`t^0onQ<>u6LsGm(W)KxlIyX_ znxpIn4mwiXrUV={V%ng?Fu^BBG@Ny@;QBtkHNAqX74407pGbJNd(lK5)#e!QxXep) z`obQ(%c)`X-sNLz&m5WMVtiWZaGNQQN>0J5%{twM-p-1rH>Isrm1{bA{NJooCH}|W zKKAOG8DvwWHb2|0Wc|N6Vl_8XZXD^dEbdcoca#kI)MX-Z;QiH~=Po8qU@|<i@Ybry z+vT3TU7Y)J@nfgy+kfW#a$ObuQaMx8jdQ8V!HFq?E53HH1g3X5xEM$Z?O;)~%?WZ{ zowAi(ho#N`(WT1$W`bSUe(g2j+&X*5FX44hL)7$iJG^d~iOhUb5;W(~WXX%0uI}H< z*~d}Wz?5X9ae{x{!K9v3ca4ruvyPR}Y0b)tZfa^+bj7e(QGoIJwp%-oRcsAiTXn|$ z)Dx}t4o#!kfjk*?<<`~jeI{q*USQ8xY2>=WvzF!f*|w}U#-;H^=?@gIGjZ1{E?9pl z`Cs?m)b|Dl^fU9WRdu^gui6m4@7ybYYkvM5!@twL{+3GCJ>XZE{&c$jiAO~<XR@kU zyZ=1Pb?aO5onO5&mlrIWZTIlwgyx6K8%`Ns)=&`bRFM9?Ox|!sjnpiKK#kdwoX?Cq zM5ClSIINczc8cws8+dxR(nG5?Cp9{L^-K`5X-k;>W7DkOQ=Q8u3eVB#SkJj_%7cXo z-s@+~*uAb$f8Wc_9S%0ePIFd#5T02vSzyKDIbE~aes?k}i=_V6+*Yv4Q&72JvB;%l zr(G4oYfgw*F51BNTRFs0^oW4A=<7M_fAw676uqoD`R2+=5uTH3lJ`kvPl#H@E5|J< zxlu*v)Aq*?M7RI@wBTu#!u45lWl<BJZCLBAw6ybNFR#{G)~X%pipz=v)htizoG?=T zZ7?t8(u`LZCv<JL2zaye`(zi!EQu^9mzmrWA6Lk6dJ5jZq#kv|_&(Dbo8L1Y?4J3) zP`7^9%tu0;w+ePONNTthFL=Gngma1E+Ra;{b}m@FvBOh(R#VZzt(FTfBy_eJaJENv z>L1i-&suTbK!3&#$L?R8XB>`yk`n$Cr8HT9W9p`Zdjwa0-qiW!QJ3LE&RF5Dzpswh zFL9c4qH9M01DkNyQBSSa9Lfh2_vWqMwno8r_9<c0P23&_oz`!VVT@K5{IPhI6pv-2 z`9Teyo7~bBlP8}l;A!uWb^F!xFM6fnR2hA*TZg~?Ty}e+;Kc`mRh!iBuUz`Pc|p9R z`i@;o_#HR#YPz01<ih1-e<o?o2a5^CoC-$8Gaj#y&$*>Kn_0eL;?8dq`(JzS^ti)2 zBisJT0sC+z0j1siGiT16!+6X~+adFp?1Y<Q0ZN-5WKFc*;yqh)9ZQLovSHuSom&(l z-5M7i>xfX?#_4D#+1dO_L)d3)>!qF@$@(9&Cii7cnpv<YSEf_0WpaGCQq32R-;3O( zRk|ila6b_2^!L!@x*o1YJG!o|S-I4SdyB;$-eQ?W4;JaZ>e#h_D|<JW<{X<9I}R=W zCB5^9@Vbt!GmJgPZ)6T8ENYK1beEDXkKSl(`ERbHk>ZRg8x@+}F5GawDRFF~#=IKs zBZ`%iq`1BBWytyN+8iIke`ld5#{y3SZN8vMUMIcm5`T#Ye_7)++w!x-f@4a%CRU3x zG|o@CwVH|3?ktzW|1)+hj?4B1%@8e=h&!@bw9`dt^30l~buO1LxC$RQdS)Gmm*S(W z1592Ep9-y5%D7uHsl!Nc#rne<Em9qFksK=u51x!LozlgjeKD|^W2IT+MbV|Rz8sR; zuG|r7yfs$Z`jgZ8&IMAF4OYtbEQ&7{{`HA-jY3EC>J@tmo#xK+*!1G;dIxTUUru^& zY<NF!+kV5~vC1klQG<0FT?-!VanICx5~6(W^EO5X73S*BHUF4GUfj`gT)TJ57aq%p zQ>E5UQd_t^<)EzS)+JAO$v%7Cb5w?-HF+O@;;wuyqq`S%E?X@>zDU7w$%L?+{uj*N zKM%Wnx76i*Wmi+U_DiLBrWId@ByasmuR~HZB3t(HHEznWl0UI(lkbsJ4{xd!Svov? zvG&j>f$E?I4{lAH?J2N3Nzx<w^wuRD&$GOJA0L?hF)T6W;vVjB)r*s!E6rLN7*ZXr zvGuefH^)k`jZ%eM^d}4K`OS4{>J6W7O@=3Qlr)!K|06Uz?)KLCKRCB?b}1>X+`oFo zd<p3}LEEmGoY1P8vXX&uPa~J#OX2kl8@z5BEZot>mCXI*N!NacImZ|`_*^vjXR6h; zNyETEhSAP-`#HwBd!rXk4A^*QwrFpL^F_waYb(u9C|K02?Okw?hi{Rm?9B<WFK5oZ z*b`r662$8jzV+%$L6`cfiQ*5{|Gzo9dW!1_E2~$HGyc}}g?-ticl&(R%AL_i>?3}i zuYbAkC9^B@%^819*5>Zo$I>;^^>e^?8xyD9o_p@zURJy=g=fV@1xJOM6Gb06WW~hn zby1XAdhurGrP&YM0;^Z#ep#_~BFEeejx)X;RlJv$FN~RYp`-SVlx&W>!Oi2#J&*S} zNUJKHoqa=V{*RahX|9HnIY%nBR=wald6R3+ht72h-6l=l0hLn%es<YTlySW1@$m26 z^%2TlTmH!~8Au;<FfXgNz1-+GNn!4-+mos$3pFbEpV8=<enk7c!l}7C)t4WZv}<vw zJ!EM6*nX<FLdxGzuBG!Bi>~$sD=bMl@<A{<ZPo=wy)7|4YT<jmz8;wodv^bEEwzm$ zsuhvTIi(!9?n>~iO4zz*LPqJe<x7w5-McI0&2kw*pYt#DR69Akg~BsZk3H>Lzkc_M zlBer(cy~9R;`pdE%PeQIu+46br5p)|c{U1b8ZaITnBA$J8KL8tq);M#wYKZmrQ<Q& zGMZk>3ntuX-g5a^phxc+rRTbF4Ay%NEAKVa<=(y{!a}QSr-#S}4ri~Ei&+_X94Fm8 z@T246MUHE~Pt1FJGvJ@_>Z=R3FZ|gv^W@1#RZ$LU2P%^UzRC8AB~5(%Ai**C{61ZE z^WwD$s=Ih(9fFH2WmoTbr@XUy;*6|YydNDUcK&r;zciHnoPvS3#iYkkn`4&oc%2Tg zdCIaeh0kmY6N@*0?`fW&59B2;ir89JN<DkrlsNm(meso%x<6T^KG7525EyzmF!iC; z#8qcv7YAOHot@*hV)lefp~A81rdvBR4z^l6lA0QHDR<Vjzq|J@4sVKxotF@_L-TH^ z@?FhiXCEG2dE}z+-9JjIGQrE0;<${H&Hhd{(A#G5%jU7}6z!(&$E<Mz4>Ut2GR(8` zd@Z`#YMQ9EpQpv2V|^VD17<Hjn&bH|fz5^Q(CGtLE-Ys~R;wg5;b#1*)=buiyw3sz zXMWrKu3CJ<nM@|B2fs5e{JFcV;Ngr&ABDfVYKyPkx)r2)c2Pjm*Hi06t+=KgwOg&b zDlaqn39r=42_D97FO&jTtv2btv_*RDmaQ)Xx5u~%ioCuZI7zb1vF(-OmeY#WDIBX0 zDxP>dX`7>Ut%`N^+}FAbrOsSAXfC;@%H+n@nX~>x&HmFQt<WQFGE-yY;n`PwIxST1 zE#zoC;%T;j<5@MKRo0b@&ls;V`IN)Jy?3L;iL<M_wYSXam0@IB@Hl9qaH;T;c7Y|v zm4<h(tvY{#W2;q9fcI;yOu^|jCw+wO$iKe5c=O5J-hT-{rn*LNxxH}NgX326XHK2+ zck^PonzwOk)`GJB71!>E{mV0+y=m3f+kd~Fe{d@`a-A!?Tqu{4+io8d-h0s-^cE;i z4ix${bK^ImHlvq!6&&;WUK>f~gd__qU)<ZXV-nl?J2I+LB`!&U((9}59^Z8N*`K6? z>;{eVf9$Th`mFk0Cu>6N0)f~`RwouNh*@|*fB$37HecUWHx?gx$yN6(XRgzWxu@Rr zghW25ozlx{;L#{!Fzxc;j~mXWEf&;hcy(7xZT{rFyM;EN+<P<GbVsr&pUb2>)qxwh zQv`4J-Z<f4aNT?U%_vv1zSd|9DZ!b~b_V<`3t-&!a`7|)rjKhryqm%CPtG!6Nr3(5 zwSR7(pMC5J|F@%y<s`$;DLiL7@O|6SC=tm|e#;NE%EevVvi6<&j6{v4nY;dmNlB(U zEO$<9?OL}ZEo4Dr+Ul2S7e#|YraP#e+^r$Vx%^||Db)_Mmu_7QcUL)<PPz43<?aX0 z`|hI4g-$%1&EL;Cqe%0YmVRG_wAQ;>+cftGPAJTH&y~tOHAULPZRPBlT%XQ4?=gSH zmH+vTuVLI4iwx!a9%~F%6=i?AT3odH(yG2ykDC~zU)MCqIj%ml!u&u?uR>%myHCi} zX$O>Es{cwmeb6;9=GX(alIT})PglCU3S;}SHZSzkyB&7>v(~#h%-Q+*rU4_1-wwu@ z)PI4z`A;Vmch7&vdrQppc~-ag0`?rmi3g7!Ix4AUX|?Um`xKu<Q}s&DhG$}p&*qEs zE;ue#cl^uSOA}=uy_SDwvSOi+h|TltmY7o_(rpc2cP^W>DRc7ng<nI8rONklsy$T{ zeqK6V%4wd4%?`miiT{P#bU!Li;k<OMaFxT}L(Wq!tK}X!tu*!Q?<YQU*sF8B5=A=q zo#o@^*1g4j#hQUVf#KkU$s)}%H!nt(FYdgXclb<3kHjGk%P$W4JIhy}<Q3fd<)56< zQ>KZA>=X5`|NMTf!f3wT{;B!1tN%{aKWf!pJbC(U`}f7{M}OFUf5-H+B1&|DS$}c2 z`-3@d-u>x+Xa4*5!20p4nQdFvJO7&#F7~2cvPDSH@BTXJ)Y@0`OQi}mUf2uGGLMlo zOUsKncp)HBv?PeB{KMD$55dlkD+(L<^sNi#6|BhouUaQvS~n|AU%#P2;ZS1-H@}O_ z6o;mkW_A@9jwuX*EiO&$oKZd<1&=$Lm0da#8VXq41eG0fcrFS&Wu7YQZuO#L($fxB zj!dlzhfR+?Cm7}$-SC{C(lJX}et}A5u}dQx-yExi2M<;TbMPtoOnne?D0HpRKC=g0 zVNNY<{Ku-cDmcCkXOCBP*zqBB-7W4M{RdmM8Q;h4u6Y`FU_$u@*1eU_Kh?e#U!QPH zf+cyvhaVpv?CF<|Pg|4t?^Em9>BiA%IZ6h}#}~-wt4)+FN;tPxHhSNlg(htm*GkXc z@n&Xe@}<eu-_>FxD_-0_+|AGDS6&eRsLNa5&L;fl{ZqByC#hbP*_g63e|<K4{N7)8 z)<3*I>BGARdz?6gd<6bvDe1VbdwzIQ!vy>NPCK5<zEW>=ezs6Nu%7*!_`NzNwHpks zUwKzN2<PW2k#oKERGo>F&rQV1Mapf8fFl#9$wgOo*)0?O43DZbc`Lkp^2kxCRfWmR zacjpFcaNDO!u>{yB2B&;H&rhCxpXE>_O;Sg2<C8A{Ho%??sByuILz+pwNQW00}j)} zc0O;2N=$q@FCw}1YivaN#IK==Piy~)9xTs`Q@>kW`f}^F(i^7F=gzst+7_F!?jh&g z>?1SVrn7BHd=Qzl+VR`W<i)O8cNR{(wyklAbU@YZ<ejkzP0Kdds;$i1ezPoNMWb%i ztla9k%cM%Da$cLh>O$}J=kpG}eK~i*;Y{`Lio&JrHxgdT&X~@6Vph6N+`(_^Z^|#M z3%x&wgKNivdak$6<0`}>JQB7&%9<_ECYUK6Uwtd{#yn2pL$e<;OKttG;QH}y_Ifu- zp(*bj>=y30Sj95YK)*-r<BG}dEGwTR^?OOCPV!J}Nl2Mw-Y60>(d=qQijV8gCCZb% z3<E?QT^Fh>Weo6b6%CJwwakx*Y&HGNoVM%hr)bMBr!|+eS{}bCHmCU7(e!!uHZHwU ze(v1M*O!hmU0c3+$-%D3qFzlFne2J9rp;Wu;8)n}{4IN}rPozF{dR+Gc4yV>l$mv> zzU9xHDm!CY=Iu7|m5sgI7_UrU`s+q@jkm37{tm8h>xw6ahUr{6ZhHL9mD|4BadV$m zP7mM6r@^-_>5XBv+}26meR4Z<1CK0gVb?PeZ+oiyqpIm^TtJfxm+cM#w)9+<NiO?t z&$Dje5RGv<$S<{LqKo(nj$}?gr4oV9;z=bo&g|JME^{ba#9aDjCYO4JgC}IpCyx8G kS%UnzK5q#=>TdO+ZldSblDfaHJ8#qlC@2aDFfdpH0AkZI!T<mO diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/mini/ConnectingFiguresSample.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/mini/ConnectingFiguresSample.java deleted file mode 100644 index 620369719..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/mini/ConnectingFiguresSample.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * @(#)ConnectingFiguresSample.java 1.0 November 16, 2006 - * - * Copyright (c) 1996-2006 by the original authors of JHotDraw - * and all its contributors ("JHotDraw.org") - * All rights reserved. - * - * This software is the confidential and proprietary information of - * JHotDraw.org ("Confidential Information"). You shall not disclose - * such Confidential Information and shall use it only in accordance - * with the terms of the license agreement you entered into with - * JHotDraw.org. - */ -package org.jhotdraw.samples.mini; - -import java.awt.*; -import javax.swing.*; -import org.jhotdraw.application.DrawApplication; -import org.jhotdraw.contrib.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.util.*; - -/** - * Example showing how to connect two text areas with an elbow connection. - * This example uses JHotDraw 6. - * - * @author Werner Randelshofer - * @version 1.0 November 16, 2006 Created. - */ -public class ConnectingFiguresSample { - public static void main(String[] args) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - - // Create the two text areas - TextAreaFigure ta = new TextAreaFigure(); - ta.displayBox(new Point(10,10),new Point(100,100)); - - TextAreaFigure tb = new TextAreaFigure(); - tb.displayBox(new Point(210,110),new Point(300,200)); - - // Create an elbow connection - ConnectionFigure cf = new ElbowConnection(); - - // Connect the figures - Point startPoint = Geom.center(ta.displayBox()); - cf.startPoint(startPoint.x, startPoint.y); - cf.connectStart(ta.connectorAt(startPoint.x, startPoint.y)); - Point endPoint = Geom.center(tb.displayBox()); - cf.endPoint(endPoint.x, endPoint.y); - cf.connectEnd(tb.connectorAt(endPoint.x, endPoint.y)); - cf.updateConnection(); - - // Add all figures to a drawing - Drawing drawing = new StandardDrawing(); - drawing.add(ta); - drawing.add(tb); - drawing.add(cf); - - // Show the drawing - JFrame f = new JFrame("My Drawing"); - f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - f.setSize(400,300); - - DrawApplication editor = new DrawApplication("Connecting Figures Sample"); - editor.open(); - DrawingView view = editor.view(); - view.setDrawing(drawing); - } - }); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/mini/package.html b/jhotdraw6/src/main/java/org/jhotdraw/samples/mini/package.html deleted file mode 100644 index 31f38eaaf..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/mini/package.html +++ /dev/null @@ -1,42 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> -<head> -<!-- - - @(#)package.html 1.60 98/01/27 - - Copyright (c) 2002 Werner Randelshofer - Staldenmattweg 2, Immensee, CH-6405, Switzerland. - All rights reserved. - - This software is the confidential and proprietary information of - Werner Randelshofer. ("Confidential Information"). You shall not - disclose such Confidential Information and shall use it only in - accordance with the terms of the license agreement you entered into - with Werner Randelshofer. ---> -</head> -<body bgcolor="white"> - -A collection of very small sample programs, demonstrating a partical feature -of JHotDraw. Ideally, each sample program is just a single java file. - - -<h2>Package Specification</h2> - -##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT ##### -<ul> - <li><a href="">##### REFER TO ANY FRAMEMAKER SPECIFICATION HERE #####</a> -</ul> - -<h2>Related Documentation</h2> - -For overviews, tutorials, examples, guides, and tool documentation, please see: -<ul> - <li><a href="">##### REFER TO NON-SPEC DOCUMENTATION HERE #####</a> -</ul> - -<!-- Put @see and @since tags down here. --> - -</body> -</html> diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/minimap/MiniMapApplication.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/minimap/MiniMapApplication.java deleted file mode 100644 index e99443c23..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/minimap/MiniMapApplication.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * @(#)MiniMapApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.samples.minimap; - -import org.jhotdraw.contrib.Desktop; -import org.jhotdraw.contrib.SplitPaneDrawApplication; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MiniMapApplication extends SplitPaneDrawApplication { - - protected Desktop createDesktop() { - return new MiniMapDesktop(); - } - - public static void main(String[] args) { - MiniMapApplication window = new MiniMapApplication(); - window.open(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/minimap/MiniMapDesktop.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/minimap/MiniMapDesktop.java deleted file mode 100644 index 7ede6e7f3..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/minimap/MiniMapDesktop.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#)MiniMapDesktop.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.samples.minimap; - -import org.jhotdraw.contrib.SplitPaneDesktop; -import org.jhotdraw.contrib.MiniMapView; -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.util.Iconkit; -import org.jhotdraw.figures.ImageFigure; - -import javax.swing.*; -import java.awt.*; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MiniMapDesktop extends SplitPaneDesktop { - - private String imageName = "/org/jhotdraw/samples/javadraw/sampleimages/view.gif"; - - protected Component createRightComponent(DrawingView view) { - Image image = Iconkit.instance().loadImage(imageName, true); - view.add(new ImageFigure(image, imageName, new Point(0,0))); - view.checkDamage(); -// ((org.jhotdraw.standard.StandardDrawingView)view).checkMinimumSize(); - return super.createRightComponent(view); - } - - protected Component createLeftComponent(DrawingView view) { - JPanel blankPanel = new JPanel(); -// blankPanel.setPreferredSize(new Dimension(200, 200)); - - MiniMapView mmv = new MiniMapView(view, (JScrollPane)getRightComponent()); -// mmv.setPreferredSize(new Dimension(200, 200)); - - JSplitPane leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, blankPanel, mmv); - leftSplitPane.setOneTouchExpandable(true); - leftSplitPane.setDividerLocation(200); -// leftSplitPane.setPreferredSize(new Dimension(200, 400)); -// leftSplitPane.resetToPreferredSizes(); - - return leftSplitPane; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/net.jdo b/jhotdraw6/src/main/java/org/jhotdraw/samples/net.jdo deleted file mode 100644 index 420ad7214..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/net.jdo +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="org.jhotdraw.samples.net"> - <class name="NodeFigure"> - </class> - </package> -</jdo> diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/net/NetApp.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/net/NetApp.java deleted file mode 100644 index 670641c03..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/net/NetApp.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * @(#)NetApp.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.net; - -import javax.swing.JToolBar; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.application.DrawApplication; - -/** - * @version <$CURRENT_VERSION$> - */ -public class NetApp extends DrawApplication { - - public NetApp() { - super("Net"); - } - - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new NodeFigure()); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - tool = new CreationTool(this, new NodeFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Create Org Unit", tool)); - - tool = new ConnectionTool(this, new LineConnection()); - palette.add(createToolButton(IMAGES + "CONN", "Connection Tool", tool)); - } - - //-- main ----------------------------------------------------------- - - public static void main(String[] args) { - DrawApplication window = new NetApp(); - window.open(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/net/NodeFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/net/NodeFigure.java deleted file mode 100644 index 26e080159..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/net/NodeFigure.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)NodeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.net; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.util.*; - -import java.util.*; -import java.util.List; -import java.awt.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class NodeFigure extends TextFigure { - private static final int BORDER = 6; - private List fConnectors; - private boolean fConnectorsVisible; - - public NodeFigure() { - initialize(); - fConnectors = null; - } - - public Rectangle displayBox() { - Rectangle box = super.displayBox(); - int d = BORDER; - box.grow(d, d); - return box; - } - - public boolean containsPoint(int x, int y) { - // add slop for connectors - if (fConnectorsVisible) { - Rectangle r = displayBox(); - int d = LocatorConnector.SIZE/2; - r.grow(d, d); - return r.contains(x, y); - } - return super.containsPoint(x, y); - } - - private void drawBorder(Graphics g) { - Rectangle r = displayBox(); - g.setColor(getFrameColor()); - g.drawRect(r.x, r.y, r.width-1, r.height-1); - } - - public void draw(Graphics g) { - super.draw(g); - drawBorder(g); - drawConnectors(g); - } - - public HandleEnumeration handles() { - ConnectionFigure prototype = new LineConnection(); - List handles = CollectionsFactory.current().createList(); - handles.add(new ConnectionHandle(this, RelativeLocator.east(), prototype)); - handles.add(new ConnectionHandle(this, RelativeLocator.west(), prototype)); - handles.add(new ConnectionHandle(this, RelativeLocator.south(), prototype)); - handles.add(new ConnectionHandle(this, RelativeLocator.north(), prototype)); - - handles.add(new NullHandle(this, RelativeLocator.southEast())); - handles.add(new NullHandle(this, RelativeLocator.southWest())); - handles.add(new NullHandle(this, RelativeLocator.northEast())); - handles.add(new NullHandle(this, RelativeLocator.northWest())); - return new HandleEnumerator(handles); - } - - private void drawConnectors(Graphics g) { - if (fConnectorsVisible) { - Iterator iter = connectors(); - while (iter.hasNext()) { - ((Connector)iter.next()).draw(g); - } - } - } - - /** - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure courtingConnection) { - fConnectorsVisible = isVisible; - invalidate(); - } - - /** - */ - public Connector connectorAt(int x, int y) { - return findConnector(x, y); - } - - /** - */ - private Iterator connectors() { - if (fConnectors == null) { - createConnectors(); - } - return fConnectors.iterator(); - } - - private void createConnectors() { - fConnectors = CollectionsFactory.current().createList(4); - fConnectors.add(new LocatorConnector(this, RelativeLocator.north()) ); - fConnectors.add(new LocatorConnector(this, RelativeLocator.south()) ); - fConnectors.add(new LocatorConnector(this, RelativeLocator.west()) ); - fConnectors.add(new LocatorConnector(this, RelativeLocator.east()) ); - } - - private Connector findConnector(int x, int y) { - // return closest connector - long min = Long.MAX_VALUE; - Connector closest = null; - Iterator iter = connectors(); - while (iter.hasNext()) { - Connector c = (Connector)iter.next(); - Point p2 = Geom.center(c.displayBox()); - long d = Geom.length2(x, y, p2.x, p2.y); - if (d < min) { - min = d; - closest = c; - } - } - return closest; - } - - private void initialize() { - setText("node"); - Font fb = new Font("Helvetica", Font.BOLD, 12); - setFont(fb); - createConnectors(); - } - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure() { - return this; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/nothing/NothingApp.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/nothing/NothingApp.java deleted file mode 100644 index 3d37e549a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/nothing/NothingApp.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * @(#)NothingApp.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.nothing; - -import javax.swing.JToolBar; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.contrib.*; -import org.jhotdraw.application.*; - -/** - * A very basic example for demonstraing JHotDraw's capabilities. It contains only - * a few additional tools apart from the selection tool already provided by its superclass. - * It uses only a single document interface (SDI) and not a multiple document interface (MDI) - * because the applicateion frame is derived DrawApplication rather than MDI_DrawApplication. - * To enable MDI for this application, NothingApp must inherit from MDI_DrawApplication - * and be recompiled. - * - * @version <$CURRENT_VERSION$> - */ -public class NothingApp extends DrawApplication { - - public NothingApp() { - super("Nothing"); - } - - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES+"TEXT", "Text Tool", tool)); - - tool = new CreationTool(this, new RectangleFigure()); - palette.add(createToolButton(IMAGES+"RECT", "Rectangle Tool", tool)); - - tool = new CreationTool(this, new RoundRectangleFigure()); - palette.add(createToolButton(IMAGES+"RRECT", "Round Rectangle Tool", tool)); - - tool = new CreationTool(this, new EllipseFigure()); - palette.add(createToolButton(IMAGES+"ELLIPSE", "Ellipse Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES+"LINE", "Line Tool", tool)); - - tool = new PolygonTool(this); - palette.add(createToolButton(IMAGES+"POLYGON", "Polygon Tool", tool)); - - tool = new ConnectionTool(this, new LineConnection()); - palette.add(createToolButton(IMAGES+"CONN", "Connection Tool", tool)); - - tool = new ConnectionTool(this, new ElbowConnection()); - palette.add(createToolButton(IMAGES+"OCONN", "Elbow Connection Tool", tool)); - } - - //-- main ----------------------------------------------------------- - - public static void main(String[] args) { - DrawApplication window = new NothingApp(); - window.open(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/nothing/NothingApplet.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/nothing/NothingApplet.java deleted file mode 100644 index f7db8af1f..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/nothing/NothingApplet.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * @(#)NothingApplet.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.nothing; - -import javax.swing.JPanel; -import org.jhotdraw.framework.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.applet.*; -import org.jhotdraw.contrib.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class NothingApplet extends DrawApplet { - - //-- DrawApplet overrides ----------------------------------------- - - protected void createTools(JPanel palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - tool = new CreationTool(this, new RectangleFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Rectangle Tool", tool)); - - tool = new CreationTool(this, new RoundRectangleFigure()); - palette.add(createToolButton(IMAGES + "RRECT", "Round Rectangle Tool", tool)); - - tool = new CreationTool(this, new EllipseFigure()); - palette.add(createToolButton(IMAGES + "ELLIPSE", "Ellipse Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES + "LINE", "Line Tool", tool)); - - tool = new PolygonTool(this); - palette.add(createToolButton(IMAGES + "POLYGON", "Polygon Tool", tool)); - - tool = new ConnectionTool(this, new LineConnection()); - palette.add(createToolButton(IMAGES + "CONN", "Connection Tool", tool)); - - tool = new ConnectionTool(this, new ElbowConnection()); - palette.add(createToolButton(IMAGES + "OCONN", "Elbow Connection Tool", tool)); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/ConnectorApp.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/ConnectorApp.java deleted file mode 100644 index 817a10144..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/ConnectorApp.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * @(#)NetApp.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.offsetConnectors; - -import javax.swing.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.application.*; - -public class ConnectorApp extends DrawApplication { - - ConnectorApp() { - super("ConnectorApp"); - } - - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new NodeFigure()); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - tool = new CreationTool(this, new NodeFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Create Org Unit", tool)); - - tool = new ConnectionTool(this, new LineConnection()); - palette.add(createToolButton(IMAGES + "CONN", "Connection Tool", tool)); - - tool = new CreationTool(this, new MyEllipseFigure()); - palette.add(createToolButton(IMAGES + "RRECT", "Round Rectangle Tool", - tool)); - - tool = new CreationTool(this, new MyFigure()); - palette.add(createToolButton(IMAGES + "RECT", "Rectangle Tool", tool)); - } - - //-- main ----------------------------------------------------------- - - public static void main(String[] args) { - DrawApplication window = new ConnectorApp(); - window.open(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/MyEllipseFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/MyEllipseFigure.java deleted file mode 100644 index 37f76c531..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/MyEllipseFigure.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * @(#)NodeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.samples.offsetConnectors; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; - -public class MyEllipseFigure extends EllipseFigure { - - private static final int BORDER = 6; - - public MyEllipseFigure() { - } - - private void drawBorder(Graphics g) { - Rectangle r = displayBox(); - g.setColor(getFrameColor()); - g.drawRect(r.x, r.y, r.width - 1, r.height - 1); - } - - public void draw(Graphics g) { - super.draw(g); - drawBorder(g); - //drawConnectors(g); - } - - /** - */ - public Connector connectorAt(int x, int y) { - return OffsetConnector.trackConnector(this, x, y); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/MyFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/MyFigure.java deleted file mode 100644 index 00f3afe38..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/MyFigure.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * @(#)MyFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - - -package org.jhotdraw.samples.offsetConnectors; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; - -public class MyFigure extends RectangleFigure { - - private static final int BORDER = 6; - - public MyFigure() { - } - - private void drawBorder(Graphics g) { - Rectangle r = displayBox(); - g.setColor(getFrameColor()); - g.drawRect(r.x, r.y, r.width - 1, r.height - 1); - } - - public void draw(Graphics g) { - super.draw(g); - drawBorder(g); - } - - /** - */ - public Connector connectorAt(int x, int y) { - return OffsetConnector.trackConnector(this, x, y); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/NodeFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/NodeFigure.java deleted file mode 100644 index d2814d733..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/NodeFigure.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)NodeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.offsetConnectors; - -import java.awt.Font; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.util.Iterator; -import java.util.List; - -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.figures.TextFigure; -import org.jhotdraw.framework.ConnectionFigure; -import org.jhotdraw.framework.Connector; -import org.jhotdraw.framework.HandleEnumeration; -import org.jhotdraw.standard.ConnectionHandle; -import org.jhotdraw.standard.HandleEnumerator; -import org.jhotdraw.standard.LocatorConnector; -import org.jhotdraw.standard.NullHandle; -import org.jhotdraw.standard.RelativeLocator; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.Geom; - -public class NodeFigure extends TextFigure { - - private static final int BORDER = 6; - private List fConnectors; - private boolean fConnectorsVisible; - - public NodeFigure() { - initialize(); - fConnectors = null; - } - - public Rectangle displayBox() { - Rectangle box = super.displayBox(); - int d = BORDER; - box.grow(d, d); - return box; - } - - public boolean containsPoint(int x, int y) { - // add slop for connectors - if (fConnectorsVisible) { - Rectangle r = displayBox(); - int d = LocatorConnector.SIZE / 2; - r.grow(d, d); - return r.contains(x, y); - } - return super.containsPoint(x, y); - } - - private void drawBorder(Graphics g) { - Rectangle r = displayBox(); - g.setColor(getFrameColor()); - g.drawRect(r.x, r.y, r.width - 1, r.height - 1); - } - - public void draw(Graphics g) { - super.draw(g); - drawBorder(g); - drawConnectors(g); - } - - public HandleEnumeration handles() { - ConnectionFigure prototype = new LineConnection(); - List handles = CollectionsFactory.current().createList(); - handles.add(new ConnectionHandle(this, RelativeLocator.east(), - prototype)); - handles.add(new ConnectionHandle(this, RelativeLocator.west(), - prototype)); - handles.add(new ConnectionHandle(this, RelativeLocator.south(), - prototype)); - handles.add(new ConnectionHandle(this, RelativeLocator.north(), - prototype)); - - handles.add(new NullHandle(this, RelativeLocator.southEast())); - handles.add(new NullHandle(this, RelativeLocator.southWest())); - handles.add(new NullHandle(this, RelativeLocator.northEast())); - handles.add(new NullHandle(this, RelativeLocator.northWest())); - return new HandleEnumerator(handles); - } - - private void drawConnectors(Graphics g) { - if (fConnectorsVisible) { - Iterator connectorsIterator = getConnectors().iterator(); - while (connectorsIterator.hasNext()) - ((Connector) connectorsIterator.next()).draw(g); - } - } - - /** - */ - public void connectorVisibility(boolean isVisible) { - fConnectorsVisible = isVisible; - invalidate(); - } - - /** - */ - public Connector connectorAt(int x, int y) { - return findConnector(x, y); - } - - /** - */ - private List getConnectors() { - if (fConnectors == null) { - createConnectors(); - } - return fConnectors; - } - - private void createConnectors() { - fConnectors = CollectionsFactory.current().createList(4); - fConnectors.add(new LocatorConnector(this, RelativeLocator.north())); - fConnectors.add(new LocatorConnector(this, RelativeLocator.south())); - fConnectors.add(new LocatorConnector(this, RelativeLocator.west())); - fConnectors.add(new LocatorConnector(this, RelativeLocator.east())); - } - - private Connector findConnector(int x, int y) { - // return closest connector - long min = Long.MAX_VALUE; - Connector closest = null; - Iterator connectorsIterator = getConnectors().iterator(); - while (connectorsIterator.hasNext()) { - Connector c = (Connector) connectorsIterator.next(); - Point p2 = Geom.center(c.displayBox()); - long d = Geom.length2(x, y, p2.x, p2.y); - if (d < min) { - min = d; - closest = c; - } - } - return closest; - } - - private void initialize() { - setText("node"); - Font fb = new Font("Helvetica", Font.BOLD, 12); - setFont(fb); - createConnectors(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/offsetConnectors.draw b/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/offsetConnectors.draw deleted file mode 100644 index 4e1033a6a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/offsetConnectors/offsetConnectors.draw +++ /dev/null @@ -1,70 +0,0 @@ - - org.jhotdraw.standard.StandardDrawing 13 - org.jhotdraw.samples.offsetConnectors.MyFigure "attributes" "attributes" 1 "FillColor" "Color" 255 0 0 413 50 72 125 - org.jhotdraw.samples.offsetConnectors.MyFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 0 84 182 165 158 - org.jhotdraw.samples.offsetConnectors.MyFigure "attributes" "attributes" 1 "FillColor" "Color" 0 0 255 610 165 187 175 - org.jhotdraw.samples.offsetConnectors.MyEllipseFigure "no_attributes" 362 445 218 186 - org.jhotdraw.figures.LineConnection 2 413 77 171 182 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 1 - org.jhotdraw.standard.OffsetLocator 0 27 - org.jhotdraw.standard.RelativeLocator 0.0 0.0 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 87 0 REF 10 - org.jhotdraw.figures.LineConnection 2 485 74 755 165 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 1 - org.jhotdraw.standard.OffsetLocator 72 24 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 145 0 REF 10 - org.jhotdraw.figures.LineConnection 2 249 212 610 212 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 255 0 0 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 165 30 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 0 47 REF 10 - org.jhotdraw.figures.LineConnection 2 249 246 610 246 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 255 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 165 64 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 0 81 REF 10 - org.jhotdraw.figures.LineConnection 2 249 308 610 308 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 165 126 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 0 143 REF 10 - org.jhotdraw.figures.LineConnection 6 443 50 443 19 28 19 28 409 384 409 384 484 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 1 - org.jhotdraw.standard.OffsetLocator 30 0 REF 10 - org.jhotdraw.standard.OffsetConnector REF 4 - org.jhotdraw.standard.OffsetLocator 22 39 REF 10 - org.jhotdraw.figures.LineConnection 6 463 50 463 18 925 18 925 409 553 409 553 478 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 1 - org.jhotdraw.standard.OffsetLocator 50 0 REF 10 - org.jhotdraw.standard.OffsetConnector REF 4 - org.jhotdraw.standard.OffsetLocator 191 33 REF 10 - org.jhotdraw.figures.LineConnection 5 717 340 717 374 834 374 834 240 797 240 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 107 175 REF 10 - org.jhotdraw.standard.OffsetConnector REF 3 - org.jhotdraw.standard.OffsetLocator 187 75 REF 10 - org.jhotdraw.figures.LineConnection 5 152 340 152 373 46 373 46 247 84 247 - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" - org.jhotdraw.figures.ArrowTip 0.4 8.0 8.0 "noFillColor" "noFrameColor" 0 0 0 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 68 158 REF 10 - org.jhotdraw.standard.OffsetConnector REF 2 - org.jhotdraw.standard.OffsetLocator 0 65 REF 10 \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertApplet.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertApplet.java deleted file mode 100644 index 678267911..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertApplet.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * @(#)PertApplet.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.pert; - -import javax.swing.JPanel; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.applet.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class PertApplet extends DrawApplet { - - private final static String PERTIMAGES = "/org/jhotdraw/samples/pert/images/"; - - protected void createTools(JPanel palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES+"TEXT", "Text Tool", tool)); - - tool = new PertFigureCreationTool(this); - palette.add(createToolButton(PERTIMAGES+"PERT", "Task Tool", tool)); - - tool = new ConnectionTool(this, new PertDependency()); - palette.add(createToolButton(IMAGES+"CONN", "Dependency Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES+"LINE", "Line Tool", tool)); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertAppletHelp.html b/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertAppletHelp.html deleted file mode 100644 index 3288502a5..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertAppletHelp.html +++ /dev/null @@ -1,67 +0,0 @@ -<html> - -<head> - <title>Pert Help</title> -</head> - -<body> -<H1>PERT Help</H1> -<HR> -PERT provides tools, handles, and commands to manipulate a PERT diagram. -<P> -A task is shown as a box with a line for the task's name, a line for -the task's duration, and a line for the task's earliest end time. -Only the task's name and its duration are editable. The end time -is calculated automatically by PERT. -<P> -Circular dependencies are shown in red. -<P> -<H3>Tools</H3> -The tool palette on the left offers several tools that either create -new figures or manipulate existing ones. -<Table Border=0> -<TR><TD><img src="../../images/SEL1.gif"><TD>selects, moves or resizes a figure; the shift-key -toggles the selection. Dragging the selection tool in the background -selects the figures within the dragged rectangle. -<TR><TD><img src="../../images/PERT1.gif"><TD>creates a new task</TR> -<TR><TD><img src="../../images/TEXT1.gif"><TD>creates a new or edits an existing text figure</TR> -<TR><TD><img src="../../images/CONN1.gif"><TD>creates or adjusts connections -between figures. A connection -is split into segments by dragging a point on the connection. To join two -segments click the -end point of a segment</TR> -<TR><TD><img src="../../images/LINE1.gif"><TD>creates a line figure</TR> -</Table> - - -<H3>Handles</H3> -When selected figures offer different handles to manipulate them. -<ul> -<li> -the blue circle handle is a connection handle. It allows to create connections -between figures. -<li> -the framed red handles are null handles. They only show the selection status -of a figure but don't support any manipulation. -<li> -the green handles are shown on connections. They enable to -reconnect them with another figure. -<li> -the yellow handle enables to change the font size of a text figure or the -size of the radius of a rounded rectangle. -</ul> - -<H3>Commands</H3> -Commands are invoked from the button bar at the bottom (applet) or -from the menu bar at the top (application). -<P> -The standard commands that are provided include, cut, copy, paste, -duplicate, delete, group, ungroup, bring to front, and send to back. -<P> -<H3>Attributes</H3> -Attributes, such as fill color, text color or arrow tip, can be changed -through the attributes menu (stand-alone) or the pop up menues (applet). - -<p> - -</html> diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertApplication.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertApplication.java deleted file mode 100644 index d96e54e6e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertApplication.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)PertApplication.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.pert; - -import javax.swing.JToolBar; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.application.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class PertApplication extends DrawApplication { - - static private final String PERTIMAGES = "/org/jhotdraw/samples/pert/images/"; - - public PertApplication() { - super("PERT Editor"); - } - - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new TextTool(this, new TextFigure()); - palette.add(createToolButton(IMAGES + "TEXT", "Text Tool", tool)); - - // the generic but slower version - //tool = new CreationTool(new PertFigure()); - //palette.add(createToolButton(PERTIMAGES + "PERT", "Task Tool", tool)); - - tool = new PertFigureCreationTool(this); - palette.add(createToolButton(PERTIMAGES + "PERT", "Task Tool", tool)); - - tool = new ConnectionTool(this, new PertDependency()); - palette.add(createToolButton(IMAGES + "CONN", "Dependency Tool", tool)); - - tool = new CreationTool(this, new LineFigure()); - palette.add(createToolButton(IMAGES + "LINE", "Line Tool", tool)); - } - - //-- main ----------------------------------------------------------- - - public static void main(String[] args) { - PertApplication pert = new PertApplication(); - pert.open(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertDependency.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertDependency.java deleted file mode 100644 index a0b2df73e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertDependency.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * @(#)PertDependency.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.pert; - -import java.awt.*; -import java.util.List; - -// JUnitDoclet begin import -import org.jhotdraw.framework.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.standard.*; -// JUnitDoclet end import - -/** - * @version <$CURRENT_VERSION$> - */ -public class PertDependency extends LineConnection { - /* - * Serialization support. - */ - private static final long serialVersionUID = -7959500008698525009L; - private int pertDependencySerializedDataVersion = 1; - - public PertDependency() { - setEndDecoration(new ArrowTip()); - setStartDecoration(null); - } - - public void handleConnect(Figure start, Figure end) { - PertFigure source = (PertFigure)start; - PertFigure target = (PertFigure)end; - if (source.hasCycle(target)) { - setAttribute(FigureAttributeConstant.FRAME_COLOR, Color.red); - } - else { - target.addPreTask(source); - source.addPostTask(target); - source.notifyPostTasks(); - } - } - - public void handleDisconnect(Figure start, Figure end) { - PertFigure source = (PertFigure)start; - PertFigure target = (PertFigure)end; - if (target != null) { - target.removePreTask(source); - target.updateDurations(); - } - if (source != null) { - source.removePostTask(target); - } - } - - public boolean canConnect(Figure start, Figure end) { - return ((start instanceof PertFigure) && (end instanceof PertFigure)); - } - - public HandleEnumeration handles() { - List handles = super.handles().toList(); - // don't allow to reconnect the starting figure - handles.set(0, new NullHandle(this, PolyLineFigure.locator(0))); - return new HandleEnumerator(handles); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertFigure.java deleted file mode 100644 index 3993d0f1b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertFigure.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * @(#)PertFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.pert; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.util.*; - -import java.awt.*; -import java.io.*; -import java.util.Iterator; -import java.util.List; - -/** - * @version <$CURRENT_VERSION$> - */ -public class PertFigure extends CompositeFigure { - private static final int BORDER = 3; - private Rectangle fDisplayBox; - private List fPreTasks; - private List fPostTasks; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -7877776240236946511L; - private int pertFigureSerializedDataVersion = 1; - - public PertFigure() { - initialize(); - } - - public int start() { - int start = 0; - Iterator iter = fPreTasks.iterator(); - while (iter.hasNext()) { - PertFigure f = (PertFigure)iter.next(); - start = Math.max(start, f.end()); - } - return start; - } - - public int end() { - return asInt(2); - } - - public int duration() { - return asInt(1); - } - - public void setEnd(int value) { - setInt(2, value); - } - - public void addPreTask(PertFigure figure) { - if (!fPreTasks.contains(figure)) { - fPreTasks.add(figure); - } - } - - public void addPostTask(PertFigure figure) { - if (!fPostTasks.contains(figure)) { - fPostTasks.add(figure); - } - } - - public void removePreTask(PertFigure figure) { - fPreTasks.remove(figure); - } - - public void removePostTask(PertFigure figure) { - fPostTasks.remove(figure); - } - - private int asInt(int figureIndex) { - NumberTextFigure t = (NumberTextFigure)figureAt(figureIndex); - return t.getValue(); - } - - private String taskName() { - TextFigure t = (TextFigure)figureAt(0); - return t.getText(); - } - - private void setInt(int figureIndex, int value) { - NumberTextFigure t = (NumberTextFigure)figureAt(figureIndex); - t.setValue(value); - } - - protected void basicMoveBy(int x, int y) { - fDisplayBox.translate(x, y); - super.basicMoveBy(x, y); - } - - public Rectangle displayBox() { - return new Rectangle( - fDisplayBox.x, - fDisplayBox.y, - fDisplayBox.width, - fDisplayBox.height); - } - - public void basicDisplayBox(Point origin, Point corner) { - fDisplayBox = new Rectangle(origin); - fDisplayBox.add(corner); - layout(); - } - - private void drawBorder(Graphics g) { - super.draw(g); - - Rectangle r = displayBox(); - - Figure f = figureAt(0); - Rectangle rf = f.displayBox(); - g.setColor(Color.gray); - g.drawLine(r.x, r.y+rf.height+2, r.x+r.width, r.y + rf.height+2); - g.setColor(Color.white); - g.drawLine(r.x, r.y+rf.height+3, r.x+r.width, r.y + rf.height+3); - - g.setColor(Color.white); - g.drawLine(r.x, r.y, r.x, r.y + r.height); - g.drawLine(r.x, r.y, r.x + r.width, r.y); - g.setColor(Color.gray); - g.drawLine(r.x + r.width, r.y, r.x + r.width, r.y + r.height); - g.drawLine(r.x , r.y + r.height, r.x + r.width, r.y + r.height); - } - - public void draw(Graphics g) { - drawBorder(g); - super.draw(g); - } - - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - handles.add(new NullHandle(this, RelativeLocator.northWest())); - handles.add(new NullHandle(this, RelativeLocator.northEast())); - handles.add(new NullHandle(this, RelativeLocator.southWest())); - handles.add(new NullHandle(this, RelativeLocator.southEast())); - handles.add(new ConnectionHandle(this, RelativeLocator.east(), - new PertDependency()) - ); - return new HandleEnumerator(handles); - } - - private void initialize() { - fPostTasks = CollectionsFactory.current().createList(); - fPreTasks = CollectionsFactory.current().createList(); - fDisplayBox = new Rectangle(0, 0, 0, 0); - - Font f = new Font("Helvetica", Font.PLAIN, 12); - Font fb = new Font("Helvetica", Font.BOLD, 12); - - TextFigure name = new TextFigure(); - name.setFont(fb); - name.setText("Task"); - //name.setAttribute(FigureAttributeConstant.TEXT_COLOR.getName(), Color.white); - add(name); - - NumberTextFigure duration = new NumberTextFigure(); - duration.setValue(0); - duration.setFont(fb); - add(duration); - - NumberTextFigure end = new NumberTextFigure(); - end.setValue(0); - end.setFont(f); - end.setReadOnly(true); - add(end); - } - - private void layout() { - Point partOrigin = new Point(fDisplayBox.x, fDisplayBox.y); - partOrigin.translate(BORDER, BORDER); - Dimension extent = new Dimension(0, 0); - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - - Dimension partExtent = f.size(); - Point corner = new Point( - partOrigin.x+partExtent.width, - partOrigin.y+partExtent.height); - f.basicDisplayBox(partOrigin, corner); - - extent.width = Math.max(extent.width, partExtent.width); - extent.height += partExtent.height; - partOrigin.y += partExtent.height; - } - fDisplayBox.width = extent.width + 2*BORDER; - fDisplayBox.height = extent.height + 2*BORDER; - } - - private boolean needsLayout() { - Dimension extent = new Dimension(0, 0); - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - extent.width = Math.max(extent.width, f.size().width); - } - int newExtent = extent.width + 2*BORDER; - return newExtent != fDisplayBox.width; - } - - public void update(FigureChangeEvent e) { - if (e.getFigure() == figureAt(1)) { - // duration has changed - updateDurations(); - } - if (needsLayout()) { - layout(); - changed(); - } - } - - public void figureChanged(FigureChangeEvent e) { - update(e); - } - - - public void figureRemoved(FigureChangeEvent e) { - update(e); - } - - public void notifyPostTasks() { - Iterator iter = fPostTasks.iterator(); - while (iter.hasNext()) { - ((PertFigure)iter.next()).updateDurations(); - } - } - - public void updateDurations() { - int newEnd = start()+duration(); - if (newEnd != end()) { - setEnd(newEnd); - notifyPostTasks(); - } - } - - public boolean hasCycle(Figure start) { - if (start == this) { - return true; - } - Iterator iter = fPreTasks.iterator(); - while (iter.hasNext()) { - if (((PertFigure)iter.next()).hasCycle(start)) { - return true; - } - } - return false; - } - - //-- store / load ---------------------------------------------- - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fDisplayBox.x); - dw.writeInt(fDisplayBox.y); - dw.writeInt(fDisplayBox.width); - dw.writeInt(fDisplayBox.height); - - writeTasks(dw, fPreTasks); - writeTasks(dw, fPostTasks); - } - - public void writeTasks(StorableOutput dw, List l) { - dw.writeInt(l.size()); - Iterator iter = l.iterator(); - while (iter.hasNext()) { - dw.writeStorable((Storable)iter.next()); - } - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fDisplayBox = new Rectangle( - dr.readInt(), - dr.readInt(), - dr.readInt(), - dr.readInt()); - layout(); - fPreTasks = readTasks(dr); - fPostTasks = readTasks(dr); - } - - public Insets connectionInsets() { - Rectangle r = fDisplayBox; - int cx = r.width/2; - int cy = r.height/2; - return new Insets(cy, cx, cy, cx); - } - - public List readTasks(StorableInput dr) throws IOException { - int size = dr.readInt(); - List l = CollectionsFactory.current().createList(size); - for (int i=0; i<size; i++) { - l.add(dr.readStorable()); - } - return l; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertFigureCreationTool.java b/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertFigureCreationTool.java deleted file mode 100644 index a51e15662..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/PertFigureCreationTool.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * @(#)PertFigureCreationTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.samples.pert; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; - -/** - * A more efficient version of the generic Pert creation - * tool that is not based on cloning. - * - * @version <$CURRENT_VERSION$> - */ -public class PertFigureCreationTool extends CreationTool { - - public PertFigureCreationTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - /** - * Creates a new PertFigure. - */ - protected Figure createFigure() { - return new PertFigure(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/images/PERT1.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/images/PERT1.gif deleted file mode 100644 index f69744556b8a98b0f903febf45498dd09fcde923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlK-K>bM;<_eP?(7Kk-E-C3Bvd5R>w&d8>Y$OF1(sB5u8|!Jh*P2E`k`vPmdj z>=3r9_m<Nuzj;!{KmE(A(`?(#buKO1(zZKp#m^aG;!Be>mi~FR?XC~!)lJLJeyY=G ZXw<aPYVYXm((dl<maLvADagQJ4FJ?UQ3?P6 diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/images/PERT2.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/images/PERT2.gif deleted file mode 100644 index eb9f10ef03f573d2d7c08a805dee7264cabd6ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlK!E=bM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)MQbmW_0GOA^<6__frm_*&x-pD z!8T0Y0SiB~{Qg>VVwDQlT(#{ni^8R2qGnyox76{SeADf_ua9H;^AAh!RIPneY#h>H Qq}1GEQyb1M$iQF?0Mukk*8l(j diff --git a/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/images/PERT3.gif b/jhotdraw6/src/main/java/org/jhotdraw/samples/pert/images/PERT3.gif deleted file mode 100644 index aac7c5e3ad403e29fb246df6eb318f71ef45be0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBQuv|4bM;<_MQ3;aKhYw?pE>Qt%C5}SyZV2e+rXkwT6aqI*=!x51P2|dZUzy5 zqXRO=duM<0P*rO+U+{j>QO?y@vUP4V+wZ=-?CDAs<Fg)L#Pf3dPkEfOeARpLbws&Y av}lo)rFXlrW0ygv$pp!k$&!K$4AubpX-<Lw diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/AWTCursor.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/AWTCursor.java deleted file mode 100644 index eba43f23a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/AWTCursor.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @(#)AWTCursor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.standard; - -import java.awt.Cursor; - -/** - * Default implementation of the {@link org.jhotdraw.framework.Cursor} interface - * for AWT/Swing. - * - * <p>Created on: 08/05/2003.</p> - * - * @version $Revision$ - * @author <a href="mailto:ricardo_padilha@users.sourceforge.net">Ricardo - * Sangoi Padilha</a> - * @see org.jhotdraw.framework.Cursor - */ -public class AWTCursor extends Cursor implements org.jhotdraw.framework.Cursor { - - /** - * Constructor for <code>AWTCursor</code>. - * @param type - * @see Cursor#Cursor(int) - */ - public AWTCursor(int type) { - super(type); - } - - /** - * Constructor for <code>AWTCursor</code>. - * @param name - * @see Cursor#Cursor(java.lang.String) - */ - public AWTCursor(String newName) { - super(newName); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractCommand.java deleted file mode 100644 index 6e84c67c4..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractCommand.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * @(#)AbstractCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Command; -import org.jhotdraw.util.CommandListener; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.CollectionsFactory; - -import java.util.*; - -/** - * @author Helge Horch - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractCommand implements Command, FigureSelectionListener { - - private String myName; - private Undoable myUndoableActivity; - private boolean myIsViewRequired; - private AbstractCommand.EventDispatcher myEventDispatcher; - - /** - * the DrawingEditor this command applies to - */ - private DrawingEditor myDrawingEditor; - - /** - * Constructs a command with the given name that applies to the given view. - * @param newName java.lang.String - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public AbstractCommand(String newName, DrawingEditor newDrawingEditor) { - this(newName, newDrawingEditor, true); - } - - public AbstractCommand(String newName, DrawingEditor newDrawingEditor, boolean newIsViewRequired) { - setName(newName); - setDrawingEditor(newDrawingEditor); - getDrawingEditor().addViewChangeListener(createViewChangeListener()); - myIsViewRequired = newIsViewRequired; - setEventDispatcher(createEventDispatcher()); - } - - protected void viewSelectionChanged(DrawingView oldView, DrawingView newView) { - if (oldView != null) { - oldView.removeFigureSelectionListener(this); - } - if (newView != null) { - newView.addFigureSelectionListener(this); - } - if (isViewRequired()) { - boolean isOldViewInteractive = (oldView != null) && oldView.isInteractive(); - boolean isNewViewInteractive = (newView != null) && newView.isInteractive(); - // old view was not interactive aware while new view is now interactive aware - if (!isOldViewInteractive && isNewViewInteractive) { - getEventDispatcher().fireCommandExecutableEvent(); - } - // old view was interactive aware while new view is not - else if (isOldViewInteractive && !isNewViewInteractive) { - getEventDispatcher().fireCommandNotExecutableEvent(); - } - } - } - - /** - * Sent when a new view is created - */ - protected void viewCreated(DrawingView view) { - } - - /** - * Send when an existing view is about to be destroyed. - */ - protected void viewDestroying(DrawingView view) { - } - - /** - * @param view a DrawingView - */ - public void figureSelectionChanged(DrawingView view) { - } - - /** - * @return DrawingEditor associated with this command - */ - public DrawingEditor getDrawingEditor() { - return myDrawingEditor; - } - - private void setDrawingEditor(DrawingEditor newDrawingEditor) { - myDrawingEditor = newDrawingEditor; - } - - /** - * Convenience method - * - * @return DrawingView currently active in the editor - */ - public DrawingView view() { - return getDrawingEditor().view(); - } - - /** - * Gets the command name. - */ - public String name() { - return myName; - } - - public void setName(String newName) { - myName = newName; - } - - /** - * Releases resources associated with this command - */ - public void dispose() { - if (view() != null) { - view().removeFigureSelectionListener(this); - } - } - - /** - * Executes the command. - */ - public void execute() { - if (view() == null) { - throw new JHotDrawRuntimeException("execute should NOT be getting called when view() == null"); - } - } - - /** - * Tests if the command can be executed. The view must be valid when this is - * called. Per default, a command is executable if at - * least one figure is selected in the current activated - * view. - */ - public boolean isExecutable() { - // test whether there is a view required and whether an existing view - // accepts user input - if (isViewRequired()) { - if ((view() == null) || !view().isInteractive()) { - return false; - } - } - return isExecutableWithView(); - } - - protected boolean isViewRequired() { - return myIsViewRequired; - } - - protected boolean isExecutableWithView() { - return true; - } - - public Undoable getUndoActivity() { - return myUndoableActivity; - } - - public void setUndoActivity(Undoable newUndoableActivity) { - myUndoableActivity = newUndoableActivity; - } - - public void addCommandListener(CommandListener newCommandListener) { - getEventDispatcher().addCommandListener(newCommandListener); - } - - public void removeCommandListener(CommandListener oldCommandListener) { - getEventDispatcher().removeCommandListener(oldCommandListener); - } - - private void setEventDispatcher(AbstractCommand.EventDispatcher newEventDispatcher) { - myEventDispatcher = newEventDispatcher; - } - - protected AbstractCommand.EventDispatcher getEventDispatcher() { - return myEventDispatcher; - } - - protected AbstractCommand.EventDispatcher createEventDispatcher() { - return new AbstractCommand.EventDispatcher(this); - } - - protected ViewChangeListener createViewChangeListener() { - return new ViewChangeListener() { - public void viewSelectionChanged(DrawingView oldView, DrawingView newView){ - AbstractCommand.this.viewSelectionChanged(oldView, newView); - } - public void viewCreated(DrawingView view){ - AbstractCommand.this.viewCreated(view); - } - public void viewDestroying(DrawingView view){ - AbstractCommand.this.viewDestroying(view); - } - }; - } - - public static class EventDispatcher { - private List myRegisteredListeners; - private Command myObservedCommand; - - public EventDispatcher(Command newObservedCommand) { - myRegisteredListeners = CollectionsFactory.current().createList(); - myObservedCommand = newObservedCommand; - } - - public void fireCommandExecutedEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((CommandListener)iter.next()).commandExecuted(new EventObject(myObservedCommand)); - } - } - - public void fireCommandExecutableEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((CommandListener)iter.next()).commandExecutable(new EventObject(myObservedCommand)); - } - } - - public void fireCommandNotExecutableEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((CommandListener)iter.next()).commandNotExecutable(new EventObject(myObservedCommand)); - } - } - - public void addCommandListener(CommandListener newCommandListener) { - if (!myRegisteredListeners.contains(newCommandListener)) { - myRegisteredListeners.add(newCommandListener); - } - } - - public void removeCommandListener(CommandListener oldCommandListener) { - if (myRegisteredListeners.contains(oldCommandListener)) { - myRegisteredListeners.remove(oldCommandListener); - } - } - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractConnector.java deleted file mode 100644 index 72b065c30..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractConnector.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * @(#)AbstractConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import java.io.IOException; -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; - -/** - * AbstractConnector provides default implementation for - * the Connector interface. - * - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractConnector implements Connector { - /** - * the owner of the connector - */ - protected Figure fOwner; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -5170007865562687545L; - private int abstractConnectorSerializedDataVersion = 1; - - /** - * Constructs a connector that has no owner. It is only - * used internally to resurrect a connectors from a - * StorableOutput. It should never be called directly. - */ - public AbstractConnector() { - fOwner = null; - } - - /** - * Constructs a connector with the given owner figure. - */ - public AbstractConnector(Figure owner) { - fOwner = owner; - } - - /** - * Gets the connector's owner. - * Which is the figure this is attached too and NOT the connection it may be - * attached too. - * - */ - public Figure owner() { - return fOwner; - } - - public Point findStart(ConnectionFigure connection) { - return findPoint(connection); - } - - public Point findEnd(ConnectionFigure connection) { - return findPoint(connection); - } - - /** - * Gets the connection point. Override when the connector - * does not need to distinguish between the start and end - * point of a connection. - */ - protected Point findPoint(ConnectionFigure connection) { - return Geom.center(displayBox()); - } - - /** - * Gets the display box of the connector. - */ - public Rectangle displayBox() { - return owner().displayBox(); - } - - /** - * Tests if a point is contained in the connector. - */ - public boolean containsPoint(int x, int y) { - return owner().containsPoint(x, y); - } - - /** - * Draws this connector. By default connectors are invisible. - */ - public void draw(Graphics g) { - // invisible by default - } - - /** - * Stores the connector and its owner to a StorableOutput. - */ - public void write(StorableOutput dw) { - dw.writeStorable(owner()); - } - - /** - * Reads the connector and its owner from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - try {fOwner = (Figure)dr.readStorable();} - catch (ClassCastException ex) { - Object o = dr.readStorable(); - System.out.println("Class Cast Exception " + o.toString()); - } - } - - /** - * Requests that the connector should show itself or hide itself. The - * ConnectionFigure which desires to connect to this Connector is passed in. - * It a connector should show itself it should do so when draw is called, if - * so desired. - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure courtingConnection) { - //invisible by default - } - - /** - * SupportsConnector dragging. - * - */ - public Point connectorMovedTo(int x, int y){ - return new Point(x,y); - } - - /** - * Returns a 'finalized' connector. Can be used to change Connector. - * - * @param start - true if a startConnector - * @return - final Connector - */ - public Connector finalizeConnector(boolean start){ - return this; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractFigure.java deleted file mode 100644 index 1bc446b3c..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractFigure.java +++ /dev/null @@ -1,482 +0,0 @@ -/* - * @(#)AbstractFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.util.*; -import org.jhotdraw.framework.*; - -import java.awt.*; -import java.util.List; -import java.io.*; - -/** - * AbstractFigure provides default implementations for - * the Figure interface. - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld036.htm>Template Method</a></b><br> - * Template Methods implement default and invariant behavior for - * figure subclasses. - * <hr> - * - * @see Figure - * @see Handle - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractFigure implements Figure { - - /** - * The listeners for a figure's changes. - * It is only one listener but this one can be a (chained) MultiCastFigureChangeListener - * @see #invalidate - * @see #changed - * @see #willChange - */ - private transient FigureChangeListener fListener; - - /** - * The dependend figures which have been added to this container. - */ - private List myDependendFigures; - - /* - * Serialization support. - */ - private static final long serialVersionUID = -10857585979273442L; - private int abstractFigureSerializedDataVersion = 1; - private int _nZ; - - protected AbstractFigure() { - myDependendFigures = CollectionsFactory.current().createList(); - } - - /** - * Moves the figure by the given offset. - */ - public void moveBy(int dx, int dy) { - willChange(); - basicMoveBy(dx, dy); - changed(); - } - - /** - * Moves the figure. This is the - * method that subclassers override. Clients usually - * call displayBox. - * @see #moveBy - */ - protected abstract void basicMoveBy(int dx, int dy); - - /** - * Changes the display box of a figure. Clients usually - * call this method. It changes the display box - * and announces the corresponding change. - * @param origin the new origin - * @param corner the new corner - * @see #displayBox - */ - public void displayBox(Point origin, Point corner) { - willChange(); - basicDisplayBox(origin, corner); - changed(); - } - - /** - * Sets the display box of a figure. This is the - * method that subclassers override. Clients usually - * call displayBox. - * @see #displayBox - */ - public abstract void basicDisplayBox(Point origin, Point corner); - - /** - * Gets the display box of a figure. - */ - public abstract Rectangle displayBox(); - - /** - * Returns the handles of a Figure that can be used - * to manipulate some of its attributes. - * @return a type-safe iterator of handles - * @see Handle - */ - public abstract HandleEnumeration handles(); - - /** - * Returns an Enumeration of the figures contained in this figure. - * @see CompositeFigure - */ - public FigureEnumeration figures() { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Gets the size of the figure. A convenience method. - */ - public Dimension size() { - return new Dimension(displayBox().width, displayBox().height); - } - - /** - * Checks if the figure is empty. The default implementation returns - * true if the width or height of its display box is < 3 - * @see Figure#isEmpty - */ - public boolean isEmpty() { - return (size().width < 3) || (size().height < 3); - } - - /** - * Returns the figure that contains the given point. - * In contrast to containsPoint it returns its - * innermost figure that contains the point. - * - * @see #containsPoint - */ - public Figure findFigureInside(int x, int y) { - if (containsPoint(x, y)) { - return this; - } - return null; - } - - /** - * Checks if a point is inside the figure. - */ - public boolean containsPoint(int x, int y) { - return displayBox().contains(x, y); - } - - /** - * Changes the display box of a figure. This is a - * convenience method. Implementors should only - * have to override basicDisplayBox - * @see #displayBox - */ - public void displayBox(Rectangle r) { - displayBox(new Point(r.x, r.y), new Point(r.x+r.width, r.y+r.height)); - } - - /** - * Checks whether the given figure is contained in this figure. - */ - public boolean includes(Figure figure) { - return figure == this; - } - - /** - * Decomposes a figure into its parts. It returns a FigureEnumeration - * that contains itself. - * @return an Enumeration with itself as the only element. - */ - public FigureEnumeration decompose() { - List figures = CollectionsFactory.current().createList(1); - figures.add(this); - return new FigureEnumerator(figures); - } - - /** - * Sets the Figure's container and registers the container - * as a figure change listener. A figure's container can be - * any kind of FigureChangeListener. A figure is not restricted - * to have a single container. - */ - public void addToContainer(FigureChangeListener c) { - addFigureChangeListener(c); - invalidate(); - } - - /** - * Removes a figure from the given container and unregisters - * it as a change listener. - */ - public void removeFromContainer(FigureChangeListener c) { - invalidate(); - removeFigureChangeListener(c); - } - - /** - * Adds a listener for this figure. - */ - public synchronized void addFigureChangeListener(FigureChangeListener l) { - fListener = FigureChangeEventMulticaster.add(listener(), l); - } - - /** - * Removes a listener for this figure. - */ - public synchronized void removeFigureChangeListener(FigureChangeListener l) { - fListener = FigureChangeEventMulticaster.remove(listener(), l); - } - - /** - * Gets the figure's listners. - */ - public synchronized FigureChangeListener listener() { - return fListener; - } - - /** - * A figure is released from the drawing. You never call this - * method directly. Release notifies its listeners. - * @see Figure#release - */ - public void release() { - if (listener() != null) { - listener().figureRemoved(new FigureChangeEvent(this)); - } - } - - /** - * Invalidates the figure. This method informs the listeners - * that the figure's current display box is invalid and should be - * refreshed. - */ - public void invalidate() { - if (listener() != null) { - Rectangle r = invalidateRectangle(displayBox()); - listener().figureInvalidated(new FigureChangeEvent(this, r)); - } - } - - /** - * Hook method to change the rectangle that will be invalidated - */ - protected Rectangle invalidateRectangle(Rectangle r) { - r.grow(Handle.HANDLESIZE, Handle.HANDLESIZE); - return r; - } - - /** - * Informes that a figure is about to change something that - * affects the contents of its display box. - * - * @see Figure#willChange - */ - public void willChange() { - // call invalidate before the change occurs to invalidate the old display area - invalidate(); - } - - /** - * Informs that a figure changed the area of its display box. - * - * @see FigureChangeEvent - * @see Figure#changed - */ - public void changed() { - invalidate(); - if (listener() != null) { - listener().figureChanged(new FigureChangeEvent(this)); - } - } - - /** - * Gets the center of a figure. A convenice - * method that is rarely overridden. - */ - public Point center() { - return Geom.center(displayBox()); - } - - /** - * Checks if this figure can be connected. By default - * AbstractFigures can be connected. - */ - public boolean canConnect() { - return true; - } - - /** - * Returns the connection inset. The connection inset - * defines the area where the display box of a - * figure can't be connected. By default the entire - * display box can be connected. - * - */ - public Insets connectionInsets() { - return new Insets(0, 0, 0, 0); - } - - /** - * Returns the Figures connector for the specified location. - * By default a ChopBoxConnector is returned. - * @see ChopBoxConnector - */ - public Connector connectorAt(int x, int y) { - return new ChopBoxConnector(this); - } - - /** - * Sets whether the connectors should be visible. - * By default they are not visible - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure connector) { - } - - /** - * Returns the locator used to located connected text. - */ - public Locator connectedTextLocator(Figure text) { - return RelativeLocator.center(); - } - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * By default figures don't have any attributes so getAttribute - * returns null. - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return null; - } - - /** - * Returns the named attribute or null if a - * a figure doesn't have an attribute. - * By default figures don't have any attributes getAttribute - * returns null. - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - return null; - } - - /** - * Sets the named attribute to the new value. By default - * figures don't have any attributes and the request is ignored. - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - } - - /** - * Sets the named attribute to the new value. By default - * figures don't have any attributes and the request is ignored. - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - } - - /** - * Clones a figure. Creates a clone by using the storable - * mechanism to flatten the Figure to stream followed by - * resurrecting it from the same stream. - * - * @see Figure#clone - */ - public Object clone() { - Object clone = null; - ByteArrayOutputStream output = new ByteArrayOutputStream(200); - try { - ObjectOutput writer = new ObjectOutputStream(output); - writer.writeObject(this); - writer.close(); - } - catch (IOException e) { - System.err.println("Class not found: " + e); - } - - InputStream input = new ByteArrayInputStream(output.toByteArray()); - try { - ObjectInput reader = new ObjectInputStream(input); - clone = reader.readObject(); - } - catch (IOException e) { - System.err.println(e.toString()); - } - catch (ClassNotFoundException e) { - System.err.println("Class not found: " + e); - } - return clone; - } - - /** - * Stores the Figure to a StorableOutput. - */ - public void write(StorableOutput dw) { - } - - /** - * Reads the Figure from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - } - - /** - * Gets the z value (back-to-front ordering) of this figure. - */ - public int getZValue() { - return _nZ; - } - - /** - * Sets the z value (back-to-front ordering) of this figure. - */ - public void setZValue(int z) { - _nZ = z; - } - - public void visit(FigureVisitor visitor) { - // remember original listener as listeners might be changed by a visitor - // (e.g. by calling addToContainer() or removeFromContainer()) - //FigureChangeListener originalListener = listener(); - FigureEnumeration fe = getDependendFigures(); - - visitor.visitFigure(this); - - FigureEnumeration visitFigures = figures(); - while (visitFigures.hasNextFigure()) { - visitFigures.nextFigure().visit(visitor); - } - - HandleEnumeration visitHandles = handles(); - while (visitHandles.hasNextHandle()) { - visitor.visitHandle(visitHandles.nextHandle()); - } -/* - originalListener = listener(); - if (originalListener != null) { - visitor.visitFigureChangeListener(originalListener); - } -*/ - - while (fe.hasNextFigure()) { - fe.nextFigure().visit(visitor); - // or visitor.visitDependendFigure(fe.nextFigure()); - } - } - - public synchronized FigureEnumeration getDependendFigures() { - return new FigureEnumerator(myDependendFigures); - } - - public synchronized void addDependendFigure(Figure newDependendFigure) { - myDependendFigures.add(newDependendFigure); - } - - public synchronized void removeDependendFigure(Figure oldDependendFigure) { - myDependendFigures.remove(oldDependendFigure); - } - - public TextHolder getTextHolder() { - return null; - } - - public Figure getDecoratedFigure() { - return this; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractHandle.java deleted file mode 100644 index 355d9c8cd..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractHandle.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * @(#)AbstractHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Undoable; - -/** - * AbstractHandle provides defaulf implementation for the Handle interface. - * - * @see org.jhotdraw.framework.Figure - * @see org.jhotdraw.framework.Handle - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractHandle implements Handle { - - /** - * The standard size of a handle. - */ - public static final int HANDLESIZE = 8; - - private Figure fOwner; - private Undoable myUndoableActivity; - - /** - * Constructor for <code>AbstractHandle</code>. - * Initializes the owner of the figure. - * @param owner - */ - public AbstractHandle(Figure owner) { - fOwner = owner; - } - - /** - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - * @see org.jhotdraw.framework.Handle#invokeStart(int, int, org.jhotdraw.framework.DrawingView) - */ - public void invokeStart(int x, int y, DrawingView view) { - invokeStart(x, y, view.drawing()); - } - - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @see org.jhotdraw.framework.Handle#invokeStart(int, int, org.jhotdraw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeStart(x, y, drawingView) - */ - public void invokeStart(int x, int y, Drawing drawing) { } - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - * @see org.jhotdraw.framework.Handle#invokeStep(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - public void invokeStep(int x, int y, int anchorX, int anchorY, DrawingView view) { - invokeStep(x-anchorX, y-anchorY, view.drawing()); - } - - /** - * Tracks a step of the interaction. - * @param dx x delta of this step - * @param dy y delta of this step - * @see org.jhotdraw.framework.Handle#invokeStep(int, int, org.jhotdraw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeStep(x, y, anchorX, anchorY, drawingView) - */ - public void invokeStep(int dx, int dy, Drawing drawing) { } - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - * @see org.jhotdraw.framework.Handle#invokeEnd(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - invokeEnd(x-anchorX, y-anchorY, view.drawing()); - } - - /** - * Tracks the end of the interaction. - * @see org.jhotdraw.framework.Handle#invokeEnd(int, int, org.jhotdraw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeEnd(x, y, anchorX, anchorY, drawingView). - */ - public void invokeEnd(int dx, int dy, Drawing drawing) { } - - /** - * Gets the handle's owner. - * @see org.jhotdraw.framework.Handle#owner() - */ - public Figure owner() { - return fOwner; - } - - /** - * Gets the display box of the handle. - * @see org.jhotdraw.framework.Handle#displayBox() - */ - public Rectangle displayBox() { - Point p = locate(); - return new Rectangle( - p.x - HANDLESIZE / 2, - p.y - HANDLESIZE / 2, - HANDLESIZE, - HANDLESIZE); - } - - /** - * Tests if a point is contained in the handle. - * @see org.jhotdraw.framework.Handle#containsPoint(int, int) - */ - public boolean containsPoint(int x, int y) { - return displayBox().contains(x, y); - } - - /** - * Draws this handle. - * @see org.jhotdraw.framework.Handle#draw(java.awt.Graphics) - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.white); - g.fillRect(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - } - - /** - * @see org.jhotdraw.framework.Handle#getUndoActivity() - */ - public Undoable getUndoActivity() { - return myUndoableActivity; - } - - /** - * @see org.jhotdraw.framework.Handle#setUndoActivity(org.jhotdraw.util.Undoable) - */ - public void setUndoActivity(Undoable newUndoableActivity) { - myUndoableActivity = newUndoableActivity; - } - - /** - * @see org.jhotdraw.framework.Handle#getCursor() - */ - public Cursor getCursor() { - return new AWTCursor(AWTCursor.DEFAULT_CURSOR); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractLocator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractLocator.java deleted file mode 100644 index 70173bfd5..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractLocator.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)AbstractLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.util.*; -import org.jhotdraw.framework.*; - -import java.io.IOException; - - -/** - * AbstractLocator provides default implementations for - * the Locator interface. - * - * @see Locator - * @see Handle - * - * @version <$CURRENT_VERSION$> - */ -public abstract class AbstractLocator implements Locator, Storable, Cloneable { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -7742023180844048409L; - - protected AbstractLocator() { - } - - public Object clone() { - try { - return super.clone(); - } - catch (CloneNotSupportedException e) { - throw new InternalError(); - } - } - - /** - * Stores the arrow tip to a StorableOutput. - */ - public void write(StorableOutput dw) { - } - - /** - * Reads the arrow tip from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - } -} - - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractTool.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractTool.java deleted file mode 100644 index cb3f7dda3..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/AbstractTool.java +++ /dev/null @@ -1,395 +0,0 @@ -/* - * @(#)AbstractTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.util.EventObject; -import java.util.Iterator; -import java.util.List; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.Undoable; - -/** - * Default implementation support for Tools. - * - * @see DrawingView - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ - -public abstract class AbstractTool implements Tool { - - private DrawingEditor myDrawingEditor; - - /** - * The position of the initial mouse down. - * The anchor point is usually the first mouse click performed with this tool. - */ - private int myAnchorX; - private int myAnchorY; - - /** - * A tool can have a drawing view on which it operates - * independingly of the currently active drawing view. - * For example, if a tool can be used - */ - private DrawingView myDrawingView; - - private Undoable myUndoActivity; - private AbstractTool.EventDispatcher myEventDispatcher; - - private boolean myIsUsable; - - /** - * Flag to indicate whether to perform usable checks or not - */ - private boolean myIsEnabled; - - /** - * Constructs a tool for the given view. - */ - public AbstractTool(DrawingEditor newDrawingEditor) { - setEditor(newDrawingEditor); - setEventDispatcher(createEventDispatcher()); - setEnabled(true); - checkUsable(); - editor().addViewChangeListener(createViewChangeListener()); - } - - /** - * Activates the tool for use on the given view. This method is called - * whenever the user switches to this tool. Use this method to - * reinitialize a tool. - * Since tools will be disabled unless it is useable, there will always - * be an active view when this is called. based on isUsable() - * Tool should never be activated if the view is null. - * Ideally, the dditor should take care of that. - */ - public void activate() { - if (getActiveView() != null) { - getActiveView().clearSelection(); - getActiveView().checkDamage(); - getEventDispatcher().fireToolActivatedEvent(); - } - } - - /** - * Deactivates the tool. This method is called whenever the user - * switches to another tool. Use this method to do some clean-up - * when the tool is switched. Subclassers should always call - * super.deactivate. - * An inactive tool should never be deactivated - */ - public void deactivate() { - if (isActive()) { - if (getActiveView() != null) { - getActiveView().setCursor(new AWTCursor(java.awt.Cursor.DEFAULT_CURSOR)); - } - getEventDispatcher().fireToolDeactivatedEvent(); - } - } - - /** - * Fired when the selected view changes. - * Subclasses should always call super. ViewSelectionChanged() this allows - * the tools state to be updated and referenced to the new view. - */ - protected void viewSelectionChanged(DrawingView oldView, DrawingView newView) { - if (isActive()) { - deactivate(); - activate(); - } - - checkUsable(); - } - - /** - * Sent when a new view is created - */ - protected void viewCreated(DrawingView view) { - } - - /** - * Send when an existing view is about to be destroyed. - */ - protected void viewDestroying(DrawingView view) { - } - - /** - * Handles mouse down events in the drawing view. - */ - public void mouseDown(MouseEvent e, int x, int y) { - setAnchorX(x); - setAnchorY(y); - setView((DrawingView)e.getSource()); - } - - /** - * Handles mouse drag events in the drawing view. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - } - - /** - * Handles mouse up in the drawing view. - */ - public void mouseUp(MouseEvent e, int x, int y) { -// setView(null);//This must be fixed!!! the view should not be held onto after mouse up?? -//unlike super.mousedown which is usually called immediately after a sub classes mouse down -//method starts, super.mouseup should probably be called last before the method ends? -//it must if its going to set the view to null. getting messy. - } - - /** - * Handles mouse moves (if the mouse button is up). - */ - public void mouseMove(MouseEvent evt, int x, int y) { - } - - /** - * Handles key down events in the drawing view. - */ - public void keyDown(KeyEvent evt, int key) { - } - - /** - * Gets the tool's drawing. - */ - public Drawing drawing() { - return view().drawing(); - } - - public Drawing getActiveDrawing() { - return getActiveView().drawing(); - } - - /** - * Gets the tool's editor. - */ - public DrawingEditor editor() { - return myDrawingEditor; - } - - protected void setEditor(DrawingEditor newDrawingEditor) { - myDrawingEditor = newDrawingEditor; - } - - /** - * Gets the tool's view (convienence method). - */ - public DrawingView view() { - return myDrawingView; - } - - protected void setView(DrawingView newDrawingView) { - myDrawingView = newDrawingView; - } - - public DrawingView getActiveView() { - return editor().view(); - } - - /** - * Tests if the tool can be used or "executed." - */ - public boolean isUsable() { - return isEnabled() && myIsUsable; - } - - public void setUsable(boolean newIsUsable) { - // perform notification only if the usable state of the tool has changed - if (isUsable() != newIsUsable) { - myIsUsable = newIsUsable; - if (isUsable()) { - getEventDispatcher().fireToolUsableEvent(); - } - else { - getEventDispatcher().fireToolUnusableEvent(); - } - } - } - - public void setEnabled(boolean newIsEnabled) { - // perform notification only if the usable state of the tool has changed - if (isEnabled() != newIsEnabled) { - myIsEnabled = newIsEnabled; - if (isEnabled()) { - getEventDispatcher().fireToolEnabledEvent(); - } - else { - getEventDispatcher().fireToolDisabledEvent(); - setUsable(false); - deactivate(); - } - } - } - - public boolean isEnabled() { - return myIsEnabled; - } - - /** - * The anchor point is usually the first mouse click performed with this tool. - * @see #mouseDown - */ - protected void setAnchorX(int newAnchorX) { - myAnchorX = newAnchorX; - } - - /** - * The anchor point is usually the first mouse click performed with this tool. - * - * @return the anchor X coordinate for the interaction - * @see #mouseDown - */ - protected int getAnchorX() { - return myAnchorX; - } - - /** - * The anchor point is usually the first mouse click performed with this tool. - * @see #mouseDown - */ - protected void setAnchorY(int newAnchorY) { - myAnchorY = newAnchorY; - } - - /** - * The anchor point is usually the first mouse click performed with this tool. - * - * @return the anchor Y coordinate for the interaction - * @see #mouseDown - */ - protected int getAnchorY() { - return myAnchorY; - } - - public Undoable getUndoActivity() { - return myUndoActivity; - } - - public void setUndoActivity(Undoable newUndoActivity) { - myUndoActivity = newUndoActivity; - } - - public boolean isActive() { - return (editor().tool() == this) && isUsable(); - } - - public void addToolListener(ToolListener newToolListener) { - getEventDispatcher().addToolListener(newToolListener); - } - - public void removeToolListener(ToolListener oldToolListener) { - getEventDispatcher().removeToolListener(oldToolListener); - } - - private void setEventDispatcher(AbstractTool.EventDispatcher newEventDispatcher) { - myEventDispatcher = newEventDispatcher; - } - - protected AbstractTool.EventDispatcher getEventDispatcher() { - return myEventDispatcher; - } - - protected AbstractTool.EventDispatcher createEventDispatcher() { - return new AbstractTool.EventDispatcher(this); - } - - protected ViewChangeListener createViewChangeListener() { - return new ViewChangeListener() { - public void viewSelectionChanged(DrawingView oldView, DrawingView newView){ - AbstractTool.this.viewSelectionChanged(oldView, newView); - } - public void viewCreated(DrawingView view){ - AbstractTool.this.viewCreated(view); - } - public void viewDestroying(DrawingView view){ - AbstractTool.this.viewDestroying(view); - } - }; - } - - protected void checkUsable() { - if (isEnabled()) { - setUsable((getActiveView() != null) && getActiveView().isInteractive()); - } - } - - public static class EventDispatcher { - private List myRegisteredListeners; - private Tool myObservedTool; - - public EventDispatcher(Tool newObservedTool) { - myRegisteredListeners = CollectionsFactory.current().createList(); - myObservedTool = newObservedTool; - } - - public void fireToolUsableEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolUsable(new EventObject(myObservedTool)); - } - } - - public void fireToolUnusableEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolUnusable(new EventObject(myObservedTool)); - } - } - - public void fireToolActivatedEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolActivated(new EventObject(myObservedTool)); - } - } - - public void fireToolDeactivatedEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolDeactivated(new EventObject(myObservedTool)); - } - } - - public void fireToolEnabledEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolEnabled(new EventObject(myObservedTool)); - } - } - - public void fireToolDisabledEvent() { - Iterator iter = myRegisteredListeners.iterator(); - while (iter.hasNext()) { - ((ToolListener)iter.next()).toolDisabled(new EventObject(myObservedTool)); - } - } - - public void addToolListener(ToolListener newToolListener) { - if (!myRegisteredListeners.contains(newToolListener)) { - myRegisteredListeners.add(newToolListener); - } - } - - public void removeToolListener(ToolListener oldToolListener) { - if (myRegisteredListeners.contains(oldToolListener)) { - myRegisteredListeners.remove(oldToolListener); - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ActionTool.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ActionTool.java deleted file mode 100644 index ed5b5f2af..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ActionTool.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * @(#)ActionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; - -import java.awt.event.MouseEvent; - -/** - * A tool that performs an action when it is active and - * the mouse is clicked. - * - * @version <$CURRENT_VERSION$> - */ -public abstract class ActionTool extends AbstractTool { - - public ActionTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - /** - * Add the touched figure to the selection an invoke action - * @see #action - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - Figure target = drawing().findFigure(x, y); - if (target != null) { - view().addToSelection(target); - action(target); - } - } - - public void mouseUp(MouseEvent e, int x, int y) { - editor().toolDone(); - } - - /** - * Performs an action with the touched figure. - */ - public abstract void action(Figure figure); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/AlignCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/AlignCommand.java deleted file mode 100644 index 548106b80..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/AlignCommand.java +++ /dev/null @@ -1,224 +0,0 @@ -/* - * @(#)AlignCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.UndoableAdapter; -import org.jhotdraw.util.Undoable; -import java.util.*; -import java.awt.*; - -/** - * Align a selection of figures relative to each other. - * - * @version <$CURRENT_VERSION$> - */ -public class AlignCommand extends AbstractCommand { - - public static abstract class Alignment { - /** - * align left sides - */ - public final static Alignment LEFTS = new Alignment("Lefts") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy(anchor.x-rr.x, 0); - } - }; - - /** - * align centers (horizontally) - */ - public final static Alignment CENTERS = new Alignment("Centers") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy((anchor.x+anchor.width/2) - (rr.x+rr.width/2), 0); - } - }; - - /** - * align right sides - */ - public final static Alignment RIGHTS = new Alignment("Rights") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy((anchor.x+anchor.width) - (rr.x+rr.width), 0); - } - }; - - /** - * align tops - */ - public final static Alignment TOPS = new Alignment("Tops") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy(0, anchor.y-rr.y); - } - }; - - /** - * align middles (vertically) - */ - public final static Alignment MIDDLES = new Alignment("Middles") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy(0, (anchor.y+anchor.height/2) - (rr.y+rr.height/2)); - } - }; - - /** - * align bottoms - */ - public final static Alignment BOTTOMS = new Alignment("Bottoms") { - public void moveBy(Figure f, Rectangle anchor) { - Rectangle rr = f.displayBox(); - f.moveBy(0, (anchor.y+anchor.height) - (rr.y+rr.height)); - } - }; - - private String myDescription; - - private Alignment(String newDescription) { - setDescription(newDescription); - } - - public String toString() { - return getDescription(); - } - - public String getDescription() { - return myDescription; - } - - private void setDescription(String newDescription) { - myDescription = newDescription; - } - - public abstract void moveBy(Figure f, Rectangle anchor); - } - - private Alignment myAlignment; - - /** - * Constructs an alignment command. - * @param newAlignment the alignment operation (LEFTS, CENTERS, RIGHTS, etc.) - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public AlignCommand(Alignment newAlignment, DrawingEditor newDrawingEditor) { - super(newAlignment.getDescription(), newDrawingEditor); - setAlignment(newAlignment); - } - - protected boolean isExecutableWithView() { - return view().selectionCount() > 1; - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - // get selected figures in the order the figures have been selected - getUndoActivity().setAffectedFigures(view().selection()); - ((AlignCommand.UndoActivity)getUndoActivity()).alignAffectedFigures(getAlignment()); - view().checkDamage(); - } - - protected void setAlignment(Alignment newAlignment) { - myAlignment = newAlignment; - } - - public Alignment getAlignment() { - return myAlignment; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new AlignCommand.UndoActivity(view(), getAlignment()); - } - - public static class UndoActivity extends UndoableAdapter { - private Hashtable myOriginalPoints; - private Alignment myAppliedAlignment; - - public UndoActivity(DrawingView newView, Alignment newAlignment) { - super(newView); - myOriginalPoints = new Hashtable(); - setAppliedAlignment(newAlignment); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - Point originalPoint = getOriginalPoint(f); - Point currentPoint = f.displayBox().getLocation(); - // substract current lcoation to get to 0,0 and then move to original location - f.moveBy(-currentPoint.x + originalPoint.x, - -currentPoint.y + originalPoint.y); - } - - return true; - } - - public boolean redo() { - if (!isRedoable()) { - return false; - } - alignAffectedFigures(getAppliedAlignment()); - return true; - } - - protected void setAppliedAlignment(Alignment newAlignment) { - myAppliedAlignment = newAlignment; - } - - public Alignment getAppliedAlignment() { - return myAppliedAlignment; - } - - protected void addOriginalPoint(Figure f) { - myOriginalPoints.put(f, f.displayBox().getLocation()); - } - - public Point getOriginalPoint(Figure f) { - return (Point)myOriginalPoints.get(f); - } - - public void alignAffectedFigures(Alignment applyAlignment) { - FigureEnumeration fe = getAffectedFigures(); - Figure anchorFigure = fe.nextFigure(); - Rectangle r = anchorFigure.displayBox(); - - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - applyAlignment.moveBy(f, r); - } - } - - public void setAffectedFigures(FigureEnumeration fe) { - // first make copy of FigureEnumeration in superclass - super.setAffectedFigures(fe); - // then get new FigureEnumeration of copy to save aligment - FigureEnumeration copyFe = getAffectedFigures(); - while (copyFe.hasNextFigure()) { - addOriginalPoint(copyFe.nextFigure()); - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/BoxHandleKit.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/BoxHandleKit.java deleted file mode 100644 index a49e964ee..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/BoxHandleKit.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * @(#)BoxHandleKit.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.UndoableAdapter; -import java.awt.*; -import java.util.List; - -/** - * A set of utility methods to create Handles for the common - * locations on a figure's display box. - * - * @see Handle - * - * @version <$CURRENT_VERSION$> - */ - - // TBD: use anonymous inner classes (had some problems with JDK 1.1) - -public class BoxHandleKit { - - /** - * Fills the given collection with handles at each corner of a - * figure. - */ - static public void addCornerHandles(Figure f, List handles) { - handles.add(southEast(f)); - handles.add(southWest(f)); - handles.add(northEast(f)); - handles.add(northWest(f)); - } - - /** - * Fills the given collection with handles at each corner - * and the north, south, east, and west of the figure. - */ - static public void addHandles(Figure f, List handles) { - addCornerHandles(f, handles); - handles.add(south(f)); - handles.add(north(f)); - handles.add(east(f)); - handles.add(west(f)); - } - - static public Handle south(Figure owner) { - return new SouthHandle(owner); - } - - static public Handle southEast(Figure owner) { - return new SouthEastHandle(owner); - } - - static public Handle southWest(Figure owner) { - return new SouthWestHandle(owner); - } - - static public Handle north(Figure owner) { - return new NorthHandle(owner); - } - - static public Handle northEast(Figure owner) { - return new NorthEastHandle(owner); - } - - static public Handle northWest(Figure owner) { - return new NorthWestHandle(owner); - } - - static public Handle east(Figure owner) { - return new EastHandle(owner); - } - - static public Handle west(Figure owner) { - return new WestHandle(owner); - } -} - -class ResizeHandle extends LocatorHandle { - ResizeHandle(Figure owner, Locator loc) { - super(owner, loc); - } - - public void invokeStart(int x, int y, DrawingView view) { - setUndoActivity(createUndoActivity(view)); - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(owner())); - ((ResizeHandle.UndoActivity)getUndoActivity()).setOldDisplayBox(owner().displayBox()); - } - - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle oldDisplayBox = ((ResizeHandle.UndoActivity)getUndoActivity()).getOldDisplayBox(); - if (owner().displayBox().equals(oldDisplayBox)) { - // display box hasn't change so there is nothing to undo - setUndoActivity(null); - } - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected Undoable createUndoActivity(DrawingView view) { - return new ResizeHandle.UndoActivity(view); - } - - public static class UndoActivity extends UndoableAdapter { - private Rectangle myOldDisplayBox; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - return resetDisplayBox(); - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - return resetDisplayBox(); - } - - private boolean resetDisplayBox() { - FigureEnumeration fe = getAffectedFigures(); - if (!fe.hasNextFigure()) { - return false; - } - Figure currentFigure = fe.nextFigure(); - - Rectangle figureDisplayBox = currentFigure.displayBox(); - currentFigure.displayBox(getOldDisplayBox()); - setOldDisplayBox(figureDisplayBox); - return true; - } - - protected void setOldDisplayBox(Rectangle newOldDisplayBox) { - myOldDisplayBox = newOldDisplayBox; - } - - public Rectangle getOldDisplayBox() { - return myOldDisplayBox; - } - } -} - -class NorthEastHandle extends ResizeHandle { - NorthEastHandle(Figure owner) { - super(owner, RelativeLocator.northEast()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, Math.min(r.y + r.height, y)), - new Point(Math.max(r.x, x), r.y + r.height) - ); - } -} - -class EastHandle extends ResizeHandle { - EastHandle(Figure owner) { - super(owner, RelativeLocator.east()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, r.y), new Point(Math.max(r.x, x), r.y + r.height) - ); - } -} - -class NorthHandle extends ResizeHandle { - NorthHandle(Figure owner) { - super(owner, RelativeLocator.north()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, Math.min(r.y + r.height, y)), - new Point(r.x + r.width, r.y + r.height) - ); - } -} - -class NorthWestHandle extends ResizeHandle { - NorthWestHandle(Figure owner) { - super(owner, RelativeLocator.northWest()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(Math.min(r.x + r.width, x), Math.min(r.y + r.height, y)), - new Point(r.x + r.width, r.y + r.height) - ); - } -} - -class SouthEastHandle extends ResizeHandle { - SouthEastHandle(Figure owner) { - super(owner, RelativeLocator.southEast()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, r.y), - new Point(Math.max(r.x, x), Math.max(r.y, y)) - ); - } -} - -class SouthHandle extends ResizeHandle { - SouthHandle(Figure owner) { - super(owner, RelativeLocator.south()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(r.x, r.y), - new Point(r.x + r.width, Math.max(r.y, y)) - ); - } -} - -class SouthWestHandle extends ResizeHandle { - SouthWestHandle(Figure owner) { - super(owner, RelativeLocator.southWest()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(Math.min(r.x + r.width, x), r.y), - new Point(r.x + r.width, Math.max(r.y, y)) - ); - } -} - -class WestHandle extends ResizeHandle { - WestHandle(Figure owner) { - super(owner, RelativeLocator.west()); - } - - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Rectangle r = owner().displayBox(); - owner().displayBox( - new Point(Math.min(r.x + r.width, x), r.y), - new Point(r.x + r.width, r.y + r.height) - ); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/BringToFrontCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/BringToFrontCommand.java deleted file mode 100644 index 6ceeeff58..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/BringToFrontCommand.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * @(#)BringToFrontCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Undoable; - -/** - * BringToFrontCommand brings the selected figures in the front of - * the other figures. - * - * @see SendToBackCommand - * @version <$CURRENT_VERSION$> - */ -public class BringToFrontCommand extends AbstractCommand { - - /** - * Constructs a bring to front command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public BringToFrontCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); - FigureEnumeration fe = getUndoActivity().getAffectedFigures(); - while (fe.hasNextFigure()) { - view().drawing().bringToFront(fe.nextFigure()); - } - view().checkDamage(); - } - - public boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - protected Undoable createUndoActivity() { - return new BringToFrontCommand.UndoActivity(view()); - } - - public static class UndoActivity extends SendToBackCommand.UndoActivity { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - } - - protected void sendToCommand(Figure f) { - getDrawingView().drawing().bringToFront(f); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/BufferedUpdateStrategy.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/BufferedUpdateStrategy.java deleted file mode 100644 index 7c8676c08..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/BufferedUpdateStrategy.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * @(#)BufferedUpdateStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import org.jhotdraw.framework.*; - -/** - * The BufferedUpdateStrategy implements an update - * strategy that first draws a view into a buffer - * followed by copying the buffer to the DrawingView. - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public class BufferedUpdateStrategy implements Painter { - - /** - * The offscreen image - */ - transient private Image fOffscreen; - private int fImagewidth = -1; - private int fImageheight = -1; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 6489532222954612824L; - private int bufferedUpdateSerializedDataVersion = 1; - - /** - * Draws the view contents. - */ - public void draw(Graphics g, DrawingView view) { - // create the buffer if necessary - Dimension d = view.getSize(); - if ((fOffscreen == null) || (d.width != fImagewidth) - || (d.height != fImageheight)) { - fOffscreen = view.createImage(d.width, d.height); - fImagewidth = d.width; - fImageheight = d.height; - } - - // let the view draw on offscreen buffer - Graphics g2 = fOffscreen.getGraphics(); - view.drawAll(g2); - - g.drawImage(fOffscreen, 0, 0, view); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeAttributeCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeAttributeCommand.java deleted file mode 100644 index 77b449712..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeAttributeCommand.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)ChangeAttributeCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.UndoableAdapter; -import org.jhotdraw.util.Undoable; -import java.util.Hashtable; - -/** - * Command to change a named figure attribute. - * - * @version <$CURRENT_VERSION$> - */ -public class ChangeAttributeCommand extends AbstractCommand { - - private FigureAttributeConstant fAttribute; - private Object fValue; - - /** - * Constructs a change attribute command. - * @param name the command name - * @param attribute the attribute to be changed - * @param value the new attribute value - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public ChangeAttributeCommand(String name, FigureAttributeConstant attribute, - Object value, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - fAttribute = attribute; - fValue = value; - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); - FigureEnumeration fe = getUndoActivity().getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().setAttribute(fAttribute, fValue); - } - view().checkDamage(); - } - - public boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new ChangeAttributeCommand.UndoActivity(view(), fAttribute, fValue); - } - - public static class UndoActivity extends UndoableAdapter { - private FigureAttributeConstant myUndoAttribute; - private Hashtable myOriginalValues; - private Object myUndoValue; - - public UndoActivity(DrawingView newDrawingView, FigureAttributeConstant newUndoAttribute, Object newUndoValue) { - super(newDrawingView); - myOriginalValues = new Hashtable(); - setAttribute(newUndoAttribute); - setBackupValue(newUndoValue); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - if (getOriginalValue(f) != null) { - f.setAttribute(getAttribute(), getOriginalValue(f)); - } - } - - return true; - } - - public boolean redo() { - if (!isRedoable()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - if (getBackupValue() != null) { - f.setAttribute(getAttribute(), getBackupValue()); - } - } - - return true; - } - - protected void addOriginalValue(Figure affectedFigure, Object newOriginalValue) { - myOriginalValues.put(affectedFigure, newOriginalValue); - } - - protected Object getOriginalValue(Figure lookupAffectedFigure) { - return myOriginalValues.get(lookupAffectedFigure); - } - - protected void setAttribute(FigureAttributeConstant newUndoAttribute) { - myUndoAttribute = newUndoAttribute; - } - - public FigureAttributeConstant getAttribute() { - return myUndoAttribute; - } - - protected void setBackupValue(Object newUndoValue) { - myUndoValue = newUndoValue; - } - - public Object getBackupValue() { - return myUndoValue; - } - - public void release() { - super.release(); - myOriginalValues = null; - } - - public void setAffectedFigures(FigureEnumeration fe) { - // first make copy of FigureEnumeration in superclass - super.setAffectedFigures(fe); - // then get new FigureEnumeration of copy to save attributes - FigureEnumeration copyFe = getAffectedFigures(); - while (copyFe.hasNextFigure()) { - Figure f = copyFe.nextFigure(); - Object attributeValue = f.getAttribute(getAttribute()); - if (attributeValue != null) { - addOriginalValue(f, attributeValue); - } - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionEndHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionEndHandle.java deleted file mode 100644 index 281f5cffb..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionEndHandle.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * @(#)ChangeConnectionEndHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Undoable; -import java.awt.Point; - -/** - * A handle to reconnect the end point of - * a connection to another figure. - * - * @version <$CURRENT_VERSION$> - */ -public class ChangeConnectionEndHandle extends ChangeConnectionHandle { - - /** - * Constructs the connection handle. - */ - public ChangeConnectionEndHandle(ConnectionFigure owner) { - super(owner); - } - - /** - * Gets the end figure of a connection. - */ - protected Connector target() { - return getConnection().getEndConnector(); - } - - /** - * Disconnects the end figure. - */ - protected void disconnect() { - getConnection().disconnectEnd(); - } - - /** - * Sets the end of the connection. - */ - protected void connect(Connector c) { - getConnection().connectEnd(c); - } - - /** - * Sets the end point of the connection. - */ - protected void setPoint(int x, int y) { - getConnection().endPoint(x, y); - } - - /** - * Returns the end point of the connection. - */ - public Point locate() { - return getConnection().endPoint(); - } - - /** - * Draws this handle. - */ - public void draw(java.awt.Graphics g) { - if (getConnection().getEndConnector() instanceof OffsetConnector && - getConnection().getStartConnector() != null && - getConnection().getStartConnector().owner() != null && - getConnection().getStartConnector().owner() == getConnection().getEndConnector().owner()) { - return; - } - - super.draw(g); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new ChangeConnectionEndHandle.UndoActivity(newView); - } - - public static class UndoActivity extends ChangeConnectionHandle.UndoActivity { - public UndoActivity(DrawingView newView) { - super(newView); - } - - protected Connector replaceConnector(ConnectionFigure connection) { - Connector tempEndConnector = connection.getEndConnector(); - connection.connectEnd(getOldConnector()); - return tempEndConnector; - } - } - - protected boolean canConnectTo(Figure figure) { - return getConnection().canConnect(source().owner(), figure); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionHandle.java deleted file mode 100644 index 45a19edc0..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionHandle.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * @(#)ChangeConnectionHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Geom; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.UndoableAdapter; -import java.awt.*; - -/** - * ChangeConnectionHandle factors the common code for handles - * that can be used to reconnect connections. - * - * @see ChangeConnectionEndHandle - * @see ChangeConnectionStartHandle - * - * @version <$CURRENT_VERSION$> - */ -public abstract class ChangeConnectionHandle extends AbstractHandle { - - private Connector fOriginalTarget; - private Figure myTarget; - private ConnectionFigure myConnection; - private Point fStart; - - /** - * Initializes the change connection handle. - */ - protected ChangeConnectionHandle(ConnectionFigure owner) { - super(owner); - setConnection(owner); - setTargetFigure(null); - } - - /** - * Returns the target connector of the change. - */ - protected abstract Connector target(); - - /** - * Disconnects the connection. - */ - protected abstract void disconnect(); - - /** - * Connect the connection with the given figure. - */ - protected abstract void connect(Connector c); - - /** - * Sets the location of the target point. - */ - protected abstract void setPoint(int x, int y); - - /** - * Gets the side of the connection that is unaffected by - * the change. - */ - protected Connector source() { - if (target() == getConnection().getStartConnector()) { - return getConnection().getEndConnector(); - } - return getConnection().getStartConnector(); - } - - /** - * Disconnects the connection. - */ - public void invokeStart(int x, int y, DrawingView view) { - fOriginalTarget = target(); - fStart = new Point(x, y); - - setUndoActivity(createUndoActivity(view)); - ((ChangeConnectionHandle.UndoActivity)getUndoActivity()).setOldConnector(target()); - - disconnect(); - } - - /** - * Finds a new target of the connection. - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Point p = new Point(x, y); - Figure f = findConnectableFigure(x, y, view.drawing()); - // track the figure containing the mouse - if (f != getTargetFigure()) { - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - } - setTargetFigure(f); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(true, getConnection()); - } - } - - Connector target = findConnectionTarget(p.x, p.y, view.drawing()); - if (target != null) { - p = Geom.center(target.displayBox()); - } - setPoint(p.x, p.y); - - if (target == fOriginalTarget) { - p = target.connectorMovedTo(x, y); - setPoint(p.x, p.y); - } - } - - /** - * Connects the figure to the new target. If there is no - * new target the connection reverts to its original one. - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - Connector target = findConnectionTarget(x, y, view.drawing()); - if (target == null) { - target = fOriginalTarget; - } - - if (target == fOriginalTarget) { - Point p = target.connectorMovedTo(x, y); - x=p.x; - y=p.y; - } - - setPoint(x, y); - connect(target); - getConnection().updateConnection(); - - Connector oldConnector = ((ChangeConnectionHandle.UndoActivity) - getUndoActivity()).getOldConnector(); - // there has been no change so there is nothing to undo - if ((oldConnector == null) - || (target() == null) - || (oldConnector.owner() == target().owner())) { - setUndoActivity(null); - } - else { - getUndoActivity().setAffectedFigures(new SingleFigureEnumerator(getConnection())); - } - - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - setTargetFigure(null); - } - } - - private Connector findConnectionTarget(int x, int y, Drawing drawing) { - Figure target = findConnectableFigure(x, y, drawing); - - if (target == fOriginalTarget.owner() && fOriginalTarget instanceof OffsetConnector) { - return fOriginalTarget; - } - - if ((target != null) - && target.canConnect() - && target != fOriginalTarget - && !target.includes(owner()) - /* - * JP, 25-May-03: Fix for ignored direction when checking - * connectability. Old version didn't take direction of - * connection into account, which could result in incorrect - * drawing if syntax rules were a concern. - * - * See also new canConnectTo() method below. - * - * Was: - * - * && getConnection().canConnect(source().owner(), target)) { - */ - && canConnectTo(target)) { - return findConnector(x, y, target); - } - return null; - } - - /** - * Called to check whether this end of the connection can connect to the - * given target figure. Needs to be overriden by the start and end changers - * to take the connection's direction into account during the check. JHD 5.4 - * beta and before did not do this. - */ - protected abstract boolean canConnectTo(Figure figure); - - protected Connector findConnector(int x, int y, Figure f) { - return f.connectorAt(x, y); - } - - /** - * Draws this handle. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.green); - g.fillRect(r.x, r.y, r.width, r.height); - - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - } - - private Figure findConnectableFigure(int x, int y, Drawing drawing) { - FigureEnumeration fe = drawing.figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (!figure.includes(getConnection()) && figure.canConnect()) { - if (figure.containsPoint(x, y)) { - return figure; - } - } - } - return null; - } - - protected void setConnection(ConnectionFigure newConnection) { - myConnection = newConnection; - } - - protected ConnectionFigure getConnection() { - return myConnection; - } - - protected void setTargetFigure(Figure newTarget) { - myTarget = newTarget; - } - - protected Figure getTargetFigure() { - return myTarget; - } - - /** - * Factory method for undo activity. To be overriden by subclasses. - */ - protected abstract Undoable createUndoActivity(DrawingView newView); - - public static abstract class UndoActivity extends UndoableAdapter { - private Connector myOldConnector; - - public UndoActivity(DrawingView newView) { - super(newView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - swapConnectors(); - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - swapConnectors(); - return true; - } - - private void swapConnectors() { - FigureEnumeration fe = getAffectedFigures(); - if (fe.hasNextFigure()) { - ConnectionFigure connection = (ConnectionFigure)fe.nextFigure(); - setOldConnector(replaceConnector(connection)); - connection.updateConnection(); - } - } - - protected abstract Connector replaceConnector(ConnectionFigure connection); - - public void setOldConnector(Connector newOldConnector) { - myOldConnector = newOldConnector; - } - - public Connector getOldConnector() { - return myOldConnector; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionStartHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionStartHandle.java deleted file mode 100644 index fc3edb566..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChangeConnectionStartHandle.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * @(#)ChangeConnectionStartHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Undoable; -import java.awt.Point; - -/** - * Handle to reconnect the - * start of a connection to another figure. - * - * @version <$CURRENT_VERSION$> - */ -public class ChangeConnectionStartHandle extends ChangeConnectionHandle { - - /** - * Constructs the connection handle for the given start figure. - */ - public ChangeConnectionStartHandle(ConnectionFigure owner) { - super(owner); - } - - /** - * Gets the start figure of a connection. - */ - protected Connector target() { - return getConnection().getStartConnector(); - } - - /** - * Disconnects the start figure. - */ - protected void disconnect() { - getConnection().disconnectStart(); - } - - /** - * Sets the start of the connection. - */ - protected void connect(Connector c) { - getConnection().connectStart(c); - } - - /** - * Sets the start point of the connection. - */ - protected void setPoint(int x, int y) { - getConnection().startPoint(x, y); - } - - /** - * Returns the start point of the connection. - */ - public Point locate() { - return getConnection().startPoint(); - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity(DrawingView newView) { - return new ChangeConnectionStartHandle.UndoActivity(newView); - } - - public static class UndoActivity extends ChangeConnectionHandle.UndoActivity { - public UndoActivity(DrawingView newView) { - super(newView); - } - - protected Connector replaceConnector(ConnectionFigure connection) { - Connector tempStartConnector = connection.getStartConnector(); - connection.connectStart(getOldConnector()); - return tempStartConnector; - } - } - - protected boolean canConnectTo(Figure figure) { - return getConnection().canConnect(figure, source().owner()); -} -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChopBoxConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ChopBoxConnector.java deleted file mode 100644 index 7e3d75eb3..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ChopBoxConnector.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * @(#)ChopBoxConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Geom; - -/** - * A ChopBoxConnector locates connection points by - * choping the connection between the centers of the - * two figures at the display box. - * - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ -public class ChopBoxConnector extends AbstractConnector { - - /* - * Serialization support. - */ - private static final long serialVersionUID = -1461450322712345462L; - - public ChopBoxConnector() { // only used for Storable implementation - } - - public ChopBoxConnector(Figure owner) { - super(owner); - } - - public Point findStart(ConnectionFigure connection) { - Figure startFigure = connection.getStartConnector().owner(); - Rectangle r2 = connection.getEndConnector().displayBox(); - Point r2c = null; - - if (connection.pointCount() == 2) { - r2c = new Point(r2.x + r2.width/2, r2.y + r2.height/2); - } - else { - r2c = connection.pointAt(1); - } - - return chop(startFigure, r2c); - } - - public Point findEnd(ConnectionFigure connection) { - Figure endFigure = connection.getEndConnector().owner(); - Rectangle r1 = connection.getStartConnector().displayBox(); - Point r1c = null; - - if (connection.pointCount() == 2) { - r1c = new Point(r1.x + r1.width/2, r1.y + r1.height/2); - } - else { - r1c = connection.pointAt(connection.pointCount()-2); - } - - return chop(endFigure, r1c); - } - - protected Point chop(Figure target, Point from) { - Rectangle r = target.displayBox(); - return Geom.angleToPoint(r, (Geom.pointToAngle(r, from))); - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/CompositeFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/CompositeFigure.java deleted file mode 100644 index fe4047be8..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/CompositeFigure.java +++ /dev/null @@ -1,734 +0,0 @@ -/* - * @(#)CompositeFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.util.*; -import org.jhotdraw.framework.*; -import java.awt.*; -import java.util.*; -import java.util.List; -import java.io.*; - -/** - * A Figure that is composed of several figures. A CompositeFigure - * doesn't define any layout behavior. It is up to subclassers to - * arrange the contained figures. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld012.htm>Composite</a></b><br> - * CompositeFigure enables to treat a composition of figures like - * a single figure.<br> - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ - -public abstract class CompositeFigure - extends AbstractFigure - implements FigureChangeListener { - - /** - * The figures that this figure is composed of - * @see #add - * @see #remove - */ - protected List fFigures; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 7408153435700021866L; - private int compositeFigureSerializedDataVersion = 1; - private transient QuadTree _theQuadTree; - protected int _nLowestZ; - protected int _nHighestZ; - - protected CompositeFigure() { - fFigures = CollectionsFactory.current().createList(); - _nLowestZ = 0; - _nHighestZ = 0; - } - - /** - * Adds a figure to the list of figures. Initializes the - * the figure's container. - * - * @param figure to be added to the drawing - * @return the figure that was inserted (might be different from the figure specified). - */ - public Figure add(Figure figure) { - if (!containsFigure(figure)) { - figure.setZValue(++_nHighestZ); - fFigures.add(figure); - figure.addToContainer(this); - _addToQuadTree(figure); - } - return figure; - } - - /** - * Adds a list of figures. - * - * @see #add - * @deprecated use addAll(FigureEnumeration) instead - */ - public void addAll(List newFigures) { - addAll(new FigureEnumerator(newFigures)); - } - - /** - * Adds a FigureEnumeration of figures. - * - * @see #add - * @param fe (unused) enumeration containing all figures to be added - */ - public void addAll(FigureEnumeration fe) { - while (fe.hasNextFigure()) { - add(fe.nextFigure()); - } - } - - /** - * Removes a figure from the composite. - * - * @param figure that is part of the drawing and should be removed - * @return the figure that has been removed (might be different from the figure specified) - * @see #removeAll - */ - public Figure remove(Figure figure) { - Figure orphanedFigure = orphan(figure); - if (orphanedFigure != null) { - orphanedFigure.release(); - } - return orphanedFigure; - } - - /** - * Removes a list of figures. - * - * @see #remove - * @deprecated use removeAll(FigureEnumeration) instead - */ - public void removeAll(List figures) { - removeAll(new FigureEnumerator(figures)); - } - - /** - * Removes a FigureEnumeration of figures. - * @see #remove - */ - public void removeAll(FigureEnumeration fe) { - while (fe.hasNextFigure()) { - remove(fe.nextFigure()); - } - } - - /** - * Removes all children. - * @see #remove - */ - public void removeAll() { - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - figure.removeFromContainer(this); - } - fFigures.clear(); - - _clearQuadTree(); - _nLowestZ = 0; - _nHighestZ = 0; - } - - /** - * Removes a figure from the figure list, but - * doesn't release it. Use this method to temporarily - * manipulate a figure outside of the drawing. - * - * @param figure that is part of the drawing and should be added - */ - public synchronized Figure orphan(Figure figure) { - figure.removeFromContainer(this); - fFigures.remove(figure); - _removeFromQuadTree(figure); - return figure; - } - - /** - * Removes a list of figures from the figure's list - * without releasing the figures. - * - * @see #orphan - * @deprecated use orphanAll(FigureEnumeration) instead - */ - public void orphanAll(List newFigures) { - orphanAll(new FigureEnumerator(newFigures)); - } - - public void orphanAll(FigureEnumeration fe) { - while (fe.hasNextFigure()) { - orphan(fe.nextFigure()); - } - } - - /** - * Replaces a figure in the drawing without - * removing it from the drawing. - * - * @param figure figure to be replaced - * @param replacement figure that should replace the specified figure - * @return the figure that has been inserted (might be different from the figure specified) - */ - public synchronized Figure replace(Figure figure, Figure replacement) { - int index = fFigures.indexOf(figure); - if (index != -1) { - replacement.setZValue(figure.getZValue()); - replacement.addToContainer(this); // will invalidate figure - figure.removeFromContainer(this); - fFigures.set(index, replacement); - figure.changed(); - replacement.changed(); - } - return replacement; - } - - /** - * Sends a figure to the back of the drawing. - * - * @param figure that is part of the drawing - */ - public synchronized void sendToBack(Figure figure) { - if (containsFigure(figure)) { - fFigures.remove(figure); - fFigures.add(0, figure); - _nLowestZ--; - figure.setZValue(_nLowestZ); - figure.changed(); - } - } - - /** - * Brings a figure to the front. - * - * @param figure that is part of the drawing - */ - public synchronized void bringToFront(Figure figure) { - if (containsFigure(figure)) { - fFigures.remove(figure); - fFigures.add(figure); - _nHighestZ++; - figure.setZValue(_nHighestZ); - figure.changed(); - } - } - - /** - * Sends a figure to a certain layer within a drawing. Each figure - * lays in a unique layer and the layering order decides which - * figure is drawn on top of another figure. Figures with a higher - * layer number have usually been added later and may overlay - * figures in lower layers. Layers are counted from to (the number - * of figures - 1). - * The figure is removed from its current layer (if it has been already - * part of this drawing) and is transferred to the specified layers after - * all figures between the original layer and the new layer are shifted to - * one layer below to fill the layer sequence. It is not possible to skip a - * layer number and if the figure is sent to a layer beyond the latest layer - * it will be added as the last figure to the drawing and its layer number - * will be set to the be the one beyond the latest layer so far. - * - * @param figure figure to be sent to a certain layer - * @param layerNr target layer of the figure - */ - public void sendToLayer(Figure figure, int layerNr) { - if (containsFigure(figure)) { - if (layerNr >= fFigures.size()) { - layerNr = fFigures.size() - 1; - } - Figure layerFigure = getFigureFromLayer(layerNr); - int layerFigureZValue = layerFigure.getZValue(); - int figureLayer = getLayer(figure); - // move figure forward - if (figureLayer < layerNr) { - assignFiguresToPredecessorZValue(figureLayer + 1, layerNr); - } - else if (figureLayer > layerNr) { - assignFiguresToSuccessorZValue(layerNr, figureLayer - 1); - } - - fFigures.remove(figure); - fFigures.add(layerNr, figure); - figure.setZValue(layerFigureZValue); - figure.changed(); - } - } - - private void assignFiguresToPredecessorZValue(int lowerBound, int upperBound) { - // cannot shift figures to a lower layer if the lower bound is - // already the first layer. - if (upperBound >= fFigures.size()) { - upperBound = fFigures.size() - 1; - } - - for (int i = upperBound; i >= lowerBound; i--) { - Figure currentFigure = (Figure)fFigures.get(i); - Figure predecessorFigure = (Figure)fFigures.get(i - 1); - currentFigure.setZValue(predecessorFigure.getZValue()); - } - } - - private void assignFiguresToSuccessorZValue(int lowerBound, int upperBound) { - if (upperBound >= fFigures.size()) { - upperBound = fFigures.size() - 1; - } - - for (int i = upperBound; i >= lowerBound; i--) { - Figure currentFigure = (Figure)fFigures.get(i); - Figure successorFigure = (Figure)fFigures.get(i + 1); - currentFigure.setZValue(successorFigure.getZValue()); - } - } - - /** - * Gets the layer for a certain figure (first occurrence). The number - * returned is the number of the layer in which the figure is placed. - * - * @param figure figure to be queried for its layering place - * @return number of the layer in which the figure is placed and -1 if the - * figure could not be found. - * @see #sendToLayer - */ - public int getLayer(Figure figure) { - if (!containsFigure(figure)) { - return -1; - } - else { - return fFigures.indexOf(figure); - } - } - - /** - * Gets the figure from a certain layer. - * - * @param layerNr number of the layer which figure should be returned - * @return figure from the layer specified, null, if the layer nr was outside - * the number of possible layer (0...(number of figures - 1)) - * @see #sendToLayer - */ - public Figure getFigureFromLayer(int layerNr) { - if ((layerNr >= 0) && (layerNr < fFigures.size())) { - return (Figure)fFigures.get(layerNr); - } - else { - return null; - } - } - - /** - * Draws all the contained figures - * @see Figure#draw - */ - public void draw(Graphics g) { - draw(g, figures()); - } - - /** - * Draws only the given figures - * @see Figure#draw - */ - public void draw(Graphics g, FigureEnumeration fe) { - while (fe.hasNextFigure()) { - fe.nextFigure().draw(g); - } - } - - /** - * Gets a figure at the given index. - */ - public Figure figureAt(int i) { - return (Figure)fFigures.get(i); - } - - /** - * Returns an Enumeration for accessing the contained figures. - * The enumeration is a snapshot of the current contained figures - * and is not a "live" enumeration and does not take subsequent - * changes of the CompositeFigure into account. - * The figures are returned in the drawing order. - */ - public FigureEnumeration figures() { - return new FigureEnumerator(CollectionsFactory.current().createList(fFigures)); - } - - /** - * Returns an enumeration to iterate in - * Z-order back to front over the figures - * that lie within the given bounds. - */ - public FigureEnumeration figures(Rectangle viewRectangle) { - if (_theQuadTree != null) { - - FigureEnumeration fe = - _theQuadTree.getAllWithin(new Bounds(viewRectangle).asRectangle2D()); - - List l2 = CollectionsFactory.current().createList(); - - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - //int z = fFigures.indexOf(f); - l2.add(new OrderedFigureElement(f, f.getZValue())); - } - - Collections.sort(l2); - - List l3 = CollectionsFactory.current().createList(); - - for (Iterator iter = l2.iterator(); iter.hasNext(); ) { - OrderedFigureElement ofe = (OrderedFigureElement)iter.next(); - l3.add(ofe.getFigure()); - } - - return new FigureEnumerator(l3); - } - - return figures(); - } - - /** - * Gets number of child figures. - */ - public int figureCount() { - return fFigures.size(); - } - - /** - * Check whether a given figure is a child figure of this CompositeFigure. - */ - public boolean containsFigure(Figure checkFigure) { - return fFigures.contains(checkFigure); - } - - /** - * Returns an Enumeration for accessing the contained figures - * in the reverse drawing order. - */ - public final FigureEnumeration figuresReverse() { - return new ReverseFigureEnumerator(CollectionsFactory.current().createList(fFigures)); - } - - /** - * Finds a top level Figure. Use this call for hit detection that - * should not descend into the figure's children. - */ - public Figure findFigure(int x, int y) { - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (figure.containsPoint(x, y)) { - return figure; - } - } - return null; - } - - /** - * Finds a top level Figure that intersects the given rectangle. - */ - public Figure findFigure(Rectangle r) { - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - Rectangle fr = figure.displayBox(); - if (r.intersects(fr)) { - return figure; - } - } - return null; - } - - /** - * Finds a top level Figure, but supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - * @param x the x coordinate - * @param y the y coordinate - * @param without the figure to be ignored during - * the find. - */ - public Figure findFigureWithout(int x, int y, Figure without) { - if (without == null) { - return findFigure(x, y); - } - - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (figure.containsPoint(x, y) && !figure.includes(without)) { - return figure; - } - } - return null; - } - - /** - * Finds a top level Figure that intersects the given rectangle. - * It supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - */ - public Figure findFigure(Rectangle r, Figure without) { - if (without == null) { - return findFigure(r); - } - - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - Rectangle fr = figure.displayBox(); - if (r.intersects(fr) && !figure.includes(without)) { - return figure; - } - } - return null; - } - - /** - * Finds a figure but descends into a figure's - * children. Use this method to implement <i>click-through</i> - * hit detection, that is, you want to detect the inner most - * figure containing the given point. - */ - public Figure findFigureInside(int x, int y) { - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure().findFigureInside(x, y); - if (figure != null) { - return figure; - } - } - - // bug-fix: 661878 - if (containsPoint(x, y)) { - return this; - } - else { - return null; - } - } - - /** - * Finds a figure but descends into a figure's - * children. It supresses the passed - * in figure. Use this method to ignore a figure - * that is temporarily inserted into the drawing. - */ - public Figure findFigureInsideWithout(int x, int y, Figure without) { - if (without == null) { - return findFigureInside(x, y); - } - - FigureEnumeration fe = figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (figure != without) { - Figure found = figure.findFigureInside(x, y); - if ((found != null) && !figure.includes(without)) { - return found; - } - } - } - - if (containsPoint(x, y)) { - return this; - } - else { - return null; - } - } - - /** - * Checks if the composite figure has the argument as one of - * its children. - * @return true if the figure is part of this CompositeFigure, else otherwise - */ - public boolean includes(Figure figure) { - if (super.includes(figure)) { - return true; - } - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure f = fe.nextFigure(); - if (f.includes(figure)) { - return true; - } - } - return false; - } - - /** - * Moves all the given figures by x and y. Doesn't announce - * any changes. Subclassers override - * basicMoveBy. Clients usually call moveBy. - * @see #moveBy - */ - protected void basicMoveBy(int x, int y) { - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - fe.nextFigure().moveBy(x,y); - } - } - - /** - * Releases the figure and all its children. - */ - public void release() { - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - figure.release(); - } - // bug-fix: 661879 (CompositeFigure.release releasing itself before containees) - super.release(); - } - - /** - * Propagates the figureInvalidated event to my listener. - * @see FigureChangeListener - */ - public void figureInvalidated(FigureChangeEvent e) { - if (listener() != null) { - listener().figureInvalidated(e); - } - } - - /** - * Propagates the removeFromDrawing request up to the container. - * @see FigureChangeListener - */ - public void figureRequestRemove(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestRemove(new FigureChangeEvent(this)); - } - } - - /** - * Propagates the requestUpdate request up to the container. - * @see FigureChangeListener - */ - public void figureRequestUpdate(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestUpdate(e); - } - } - - public void figureChanged(FigureChangeEvent e) { - _removeFromQuadTree(e.getFigure()); - _addToQuadTree(e.getFigure()); - } - - public void figureRemoved(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRemoved(e); - } - } - - /** - * Writes the contained figures to the StorableOutput. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(figureCount()); - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - dw.writeStorable(fe.nextFigure()); - } - } - - /** - * Reads the contained figures from StorableInput. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - int size = dr.readInt(); - fFigures = CollectionsFactory.current().createList(size); - for (int i=0; i<size; i++) { - add((Figure)dr.readStorable()); - } - init(displayBox()); - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - figure.addToContainer(this); - } - - init(new Rectangle(0, 0)); - } - - /** - * Used to optimize rendering. Rendering of many objects may - * be slow until this method is called. The view rectangle - * should at least approximately enclose the CompositeFigure. - * If the view rectangle is too small or too large, performance - * may suffer. - * - * Don't forget to call this after loading or creating a - * new CompositeFigure. If you forget, drawing performance may - * suffer. - */ - public void init(Rectangle viewRectangle) { - _theQuadTree = new QuadTree(new Bounds(viewRectangle).asRectangle2D()); - - FigureEnumeration fe = figures(); - while (fe.hasNextFigure()) { - _addToQuadTree(fe.nextFigure()); - } - } - - private void _addToQuadTree(Figure f) { - if (_theQuadTree != null) { - // Bugfix: Make sure the rectangle is not zero width or height. - // Otherwise, the quadTree search in this.figures(Rectangle) - // will be incorrect. [John Yu, 2002/05/23] - Rectangle r = f.displayBox(); - if (r.height == 0) { - r.grow(0, 1); - } - if (r.width == 0) { - r.grow(1, 0); - } - - _theQuadTree.add(f, new Bounds(r).asRectangle2D()); - } - } - - private void _removeFromQuadTree(Figure f) { - if (_theQuadTree != null) { - _theQuadTree.remove(f); - } - } - - private void _clearQuadTree() { - if (_theQuadTree != null) { - _theQuadTree.clear(); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ConnectionHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ConnectionHandle.java deleted file mode 100644 index df409e6f3..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ConnectionHandle.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * @(#)ConnectionHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; -import java.util.List; - -import org.jhotdraw.framework.ConnectionFigure; -import org.jhotdraw.framework.Connector; -import org.jhotdraw.framework.Cursor; -import org.jhotdraw.framework.Drawing; -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.framework.Locator; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.Geom; -import org.jhotdraw.util.Undoable; - -/** - * A handle to connect figures. - * The connection object to be created is specified by a prototype. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld029.htm>Prototype</a></b><br> - * ConnectionHandle creates the connection by cloning a prototype. - * <hr> - * - * @see ConnectionFigure - * @see Object#clone - * - * @version <$CURRENT_VERSION$> - */ -public class ConnectionHandle extends LocatorHandle { - - /** - * the currently created connection - */ - private ConnectionFigure myConnection; - - /** - * the prototype of the connection to be created - */ - private ConnectionFigure fPrototype; - - /** - * the current target - */ - private Figure myTargetFigure; - - /** - * Constructs a handle with the given owner, locator, and connection prototype - */ - public ConnectionHandle(Figure owner, Locator l, ConnectionFigure prototype) { - super(owner, l); - fPrototype = prototype; - } - - /** - * Creates the connection - */ - public void invokeStart(int x, int y, DrawingView view) { - setConnection(createConnection()); - - setUndoActivity(createUndoActivity(view)); - List connectionsList = CollectionsFactory.current().createList(); - connectionsList.add(getConnection()); - getUndoActivity().setAffectedFigures(new FigureEnumerator(connectionsList)); - - Point p = locate(); - getConnection().startPoint(p.x, p.y); - getConnection().endPoint(p.x, p.y); - view.drawing().add(getConnection()); - } - - /** - * Tracks the connection. - */ - public void invokeStep (int x, int y, int anchorX, int anchorY, DrawingView view) { - Point p = new Point(x,y); - Figure f = findConnectableFigure(x, y, view.drawing()); - // track the figure containing the mouse - if (f != getTargetFigure()) { - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - } - setTargetFigure(f); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(true, getConnection()); - } - } - - Connector target = findConnectionTarget(p.x, p.y, view.drawing()); - if (target != null) { - p = Geom.center(target.displayBox()); - } - getConnection().endPoint(p.x, p.y); - } - - /** - * Connects the figures if the mouse is released over another - * figure. - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - Connector target = findConnectionTarget(x, y, view.drawing()); - if (target != null) { - getConnection().connectStart(startConnector()); - getConnection().connectEnd(target); - getConnection().updateConnection(); - } - else { - view.drawing().remove(getConnection()); - setUndoActivity(null); - } - setConnection(null); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - setTargetFigure(null); - } - } - - private Connector startConnector() { - Point p = locate(); - return owner().connectorAt(p.x, p.y); - } - - /** - * Creates the ConnectionFigure. By default the figure prototype is - * cloned. - */ - protected ConnectionFigure createConnection() { - return (ConnectionFigure)fPrototype.clone(); - } - - /** - * Factory method for undo activity. - */ - protected Undoable createUndoActivity(DrawingView view) { - return new PasteCommand.UndoActivity(view); - } - - /** - * Finds a connection end figure. - */ - protected Connector findConnectionTarget(int x, int y, Drawing drawing) { - Figure target = findConnectableFigure(x, y, drawing); - if ((target != null) && target.canConnect() - && !target.includes(owner()) - && getConnection().canConnect(owner(), target)) { - return findConnector(x, y, target); - } - return null; - } - - private Figure findConnectableFigure(int x, int y, Drawing drawing) { - FigureEnumeration fe = drawing.figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (!figure.includes(getConnection()) && figure.canConnect() - && figure.containsPoint(x, y)) { - return figure; - } - } - return null; - } - - protected Connector findConnector(int x, int y, Figure f) { - return f.connectorAt(x, y); - } - - - /** - * Draws the connection handle, by default the outline of a - * blue circle. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - g.setColor(Color.blue); - g.drawOval(r.x, r.y, r.width, r.height); - } - - protected void setConnection(ConnectionFigure newConnection) { - myConnection = newConnection; - } - - protected ConnectionFigure getConnection() { - return myConnection; - } - - protected Figure getTargetFigure() { - return myTargetFigure; - } - - protected void setTargetFigure(Figure newTargetFigure) { - myTargetFigure = newTargetFigure; - } - - /** - * @see org.jhotdraw.framework.Handle#getCursor() - */ - public Cursor getCursor() { - return new AWTCursor(java.awt.Cursor.HAND_CURSOR); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ConnectionTool.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ConnectionTool.java deleted file mode 100644 index dddc78e7b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ConnectionTool.java +++ /dev/null @@ -1,455 +0,0 @@ -/* - * @(#)ConnectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.Geom; -import org.jhotdraw.util.UndoableAdapter; -import org.jhotdraw.util.Undoable; -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * A tool that can be used to connect figures, to split - * connections, and to join two segments of a connection. - * ConnectionTools turns the visibility of the Connectors - * on when it enters a figure. - * The connection object to be created is specified by a prototype. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld029.htm>Prototype</a></b><br> - * ConnectionTools creates the connection by cloning a prototype. - * <hr> - * - * @see ConnectionFigure - * @see Object#clone - * - * @version <$CURRENT_VERSION$> - */ -public class ConnectionTool extends AbstractTool { - - /** - * the anchor point of the interaction - */ - private Connector myStartConnector; - private Connector myEndConnector; - private Connector myTargetConnector; - - private Figure myTarget; - - /** - * the currently created figure - */ - private ConnectionFigure myConnection; - - /** - * the currently manipulated connection point - */ - private int fSplitPoint; - - /** - * the currently edited connection - */ - private ConnectionFigure fEditedConnection; - - /** - * the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - private Figure myAddedFigure; - - /** - * the prototypical figure that is used to create new - * connections. - */ - private ConnectionFigure fPrototype; - - - public ConnectionTool(DrawingEditor newDrawingEditor, ConnectionFigure newPrototype) { - super(newDrawingEditor); - fPrototype = newPrototype; - } - - /** - * Handles mouse move events in the drawing view. - */ - public void mouseMove(MouseEvent e, int x, int y) { - trackConnectors(e, x, y); - } - - /** - * Manipulates connections in a context dependent way. If the - * mouse down hits a figure start a new connection. If the mousedown - * hits a connection split a segment or join two segments. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e,x,y); - int ex = e.getX(); - int ey = e.getY(); - - OffsetConnector.trackingConnector1.reset(getActiveView()); - - /* - * JP, 25-May-03: Swapped checking for underlying figure and - * existing connection. If figure is checked first (old version), - * it is not possible to insert new points into a connection that - * crosses or otherwise goes through an existing figure. New - * version checks for connection first. - */ - ConnectionFigure connection = findConnection(ex, ey, drawing()); - if (connection != null) { - if (!connection.joinSegments(ex, ey)) { - fSplitPoint = connection.splitSegment(ex, ey); - fEditedConnection = connection; - } - else { - fEditedConnection = null; - } - } - else { - setTargetFigure(findConnectionStart(ex, ey, drawing())); - if (getTargetFigure() != null) { - setStartConnector(findConnector(ex, ey, getTargetFigure())); - if (getStartConnector() != null) { - setConnection(createConnection()); - getConnection().startPoint(ex, ey); - getConnection().endPoint(ex, ey); - setAddedFigure(view().add(getConnection())); - } - } - } - } - - /** - * Adjust the created connection or split segment. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - Point p = new Point(e.getX(), e.getY()); - if (getConnection() != null) { - trackConnectors(e, x, y); - if (getTargetConnector() != null) { - p = Geom.center(getTargetConnector().displayBox()); - } - getConnection().endPoint(p.x, p.y); - } - else if (fEditedConnection != null) { - Point pp = new Point(x, y); - fEditedConnection.setPointAt(pp, fSplitPoint); - } - } - - /** - * Connects the figures if the mouse is released over another - * figure. - */ - public void mouseUp(MouseEvent e, int x, int y) { - Figure c = null; - if (getStartConnector() != null) { - c = findTarget(e.getX(), e.getY(), drawing()); - } - - if (c != null) { - setEndConnector(findConnector(e.getX(), e.getY(), c)); - if (getEndConnector() != null) { - getConnection().connectStart(getStartConnector()); - getConnection().connectEnd(getEndConnector()); - getConnection().updateConnection(); - - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures( - new SingleFigureEnumerator(getAddedFigure())); - } - } - else if (getConnection() != null) { - view().remove(getConnection()); - } - - setConnection(null); - setStartConnector(null); - setEndConnector(null); - setAddedFigure(null); - editor().toolDone(); - } - - public void deactivate() { - super.deactivate(); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - } - } - - /** - * Creates the ConnectionFigure. By default the figure prototype is - * cloned. - */ - protected ConnectionFigure createConnection() { - return (ConnectionFigure)fPrototype.clone(); - } - - /** - * Finds a connectable figure target. - */ - protected Figure findSource(int x, int y, Drawing drawing) { - return findConnectableFigure(x, y, drawing); - } - - /** - * Finds a connectable figure target at the current mouse location that can - * 1. Connect to things - * 2. Is not already connected to the current Connection (no self connection) - * 3. The current Connection can make a connection between it and the start - * figure. - */ - protected Figure findTarget(int x, int y, Drawing drawing) { - Figure target = findConnectableFigure(x, y, drawing); - Figure start = getStartConnector().owner(); - boolean includesStart = (target != null && target.includes(start)); - if ((myStartConnector == OffsetConnector.trackingConnector1) - || (myStartConnector == OffsetConnector.trackingConnector2)) { - includesStart = false; - } - - if (target != null - && getConnection() != null - && target.canConnect() - && !includesStart - && getConnection().canConnect(start, target)) { - return target; - } - return null; - } - - /** - * Finds an existing connection figure. - */ - protected ConnectionFigure findConnection(int x, int y, Drawing drawing) { - FigureEnumeration fe = drawing.figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - figure = figure.findFigureInside(x, y); - if (figure != null && (figure instanceof ConnectionFigure)) { - return (ConnectionFigure)figure; - } - } - return null; - } - - protected void setConnection(ConnectionFigure newConnection) { - myConnection = newConnection; - } - - /** - * Gets the connection which is created by this tool - */ - protected ConnectionFigure getConnection() { - return myConnection; - } - - /** - * Attempts to set the Connector to be connected to based on the current - * location of the mouse. - */ - protected void trackConnectors(MouseEvent e, int x, int y) { - Figure c = null; - - // If tool is not actively looking for a target for our current - // Connection, see if there are any connectable figures at at the - // current location(findSource). - if (getStartConnector() == null) { - c = findSource(x, y, getActiveDrawing()); - } - else { - c = findTarget(x, y, getActiveDrawing()); - } - - // track the figure containing the mouse - /** - * If the current target is not the stored target then turn off the - * stored targets connectors visibility and turn on the current targets - * connectors visibility. Then set the stored target to the current target. - * If the targets match then don't do anything. - * Note: the target may have more than one connector. - */ - if (c != getTargetFigure()) { - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(false, null); - } - setTargetFigure(c); - if (getTargetFigure() != null) { - getTargetFigure().connectorVisibility(true, getConnection()); - } - } - - // Since you have a legitimate target, grab its connector and set it as - // the new target connector. - Connector cc = null; - if (c != null) { - cc = findConnector(e.getX(), e.getY(), c); - } - if (cc != getTargetConnector()) { - setTargetConnector(cc); - } - - // Clean up the view. - getActiveView().checkDamage(); - } - - protected Connector findConnector(int x, int y, Figure f) { - return f.connectorAt(x, y); - } - - /** - * Finds a connection start figure. - */ - protected Figure findConnectionStart(int x, int y, Drawing drawing) { - Figure target = findConnectableFigure(x, y, drawing); - if ((target != null) && target.canConnect()) { - return target; - } - return null; - } - - /** - * Returns the topmost? figure that can connect and is at the current mouse - * location. - */ - protected Figure findConnectableFigure(int x, int y, Drawing drawing) { - FigureEnumeration fe = drawing.figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (!figure.includes(getConnection()) && figure.canConnect() - && figure.containsPoint(x, y)) { - return figure; - } - } - return null; - } - - protected void setStartConnector(Connector newStartConnector) { - myStartConnector = newStartConnector; - } - - protected Connector getStartConnector() { - return myStartConnector; - } - - protected void setEndConnector(Connector newEndConnector) { - myEndConnector = newEndConnector; - } - - protected Connector getEndConnector() { - return myEndConnector; - } - - protected void setTargetConnector(Connector newTargetConnector) { - myTargetConnector = newTargetConnector; - } - - protected Connector getTargetConnector() { - return myTargetConnector; - } - - protected void setTargetFigure(Figure newTarget) { - myTarget = newTarget; - } - - protected Figure getTargetFigure() { - return myTarget; - } - - /** - * Gets the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - protected Figure getAddedFigure() { - return myAddedFigure; - } - - protected void setAddedFigure(Figure newAddedFigure) { - myAddedFigure = newAddedFigure; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new ConnectionTool.UndoActivity(view(), getConnection()); - } - - public static class UndoActivity extends UndoableAdapter { - - private ConnectionFigure myConnection; - private Connector myStartConnector; - private Connector myEndConnector; - - public UndoActivity(DrawingView newDrawingView, ConnectionFigure newConnection) { - super(newDrawingView); - setConnection(newConnection); - myStartConnector = getConnection().getStartConnector(); - myEndConnector = getConnection().getEndConnector(); - setUndoable(true); - setRedoable(true); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - - getConnection().disconnectStart(); - getConnection().disconnectEnd(); - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - getDrawingView().drawing().orphan(fe.nextFigure()); - } - - getDrawingView().clearSelection(); - - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - - getConnection().connectStart(myStartConnector); - getConnection().connectEnd(myEndConnector); - getConnection().updateConnection(); - - getDrawingView().insertFigures(getAffectedFigures(), 0, 0, false); - - return true; - } - - protected void setConnection(ConnectionFigure newConnection) { - myConnection = newConnection; - } - - /** - * Gets the currently created figure - */ - protected ConnectionFigure getConnection() { - return myConnection; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/CopyCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/CopyCommand.java deleted file mode 100644 index 1bb74820b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/CopyCommand.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * @(#)CopyCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.DrawingEditor; - -/** - * Copy the selection to the clipboard. - * - * @see Clipboard - * - * @version <$CURRENT_VERSION$> - */ -public class CopyCommand extends FigureTransferCommand { - - /** - * Constructs a copy command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public CopyCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - copyFigures(view().selection(), view().selectionCount()); - } - - protected boolean isExecutableWithView() { - return view().selectionCount() > 0; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/CreationTool.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/CreationTool.java deleted file mode 100644 index b436511bd..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/CreationTool.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - * @(#)CreationTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.Point; -import java.awt.event.MouseEvent; -import java.util.List; - -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.JHotDrawRuntimeException; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.Undoable; - -/** - * A tool to create new figures. The figure to be - * created is specified by a prototype. - * - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld029.htm>Prototype</a></b><br> - * CreationTool creates new figures by cloning a prototype. - * <hr> - * - * @see Figure - * @see Object#clone - * - * @version <$CURRENT_VERSION$> - */ -public class CreationTool extends AbstractTool { - - /** - * the list of currently added figures - * by: ricardo_padilha. - * description: This has been added to provide support for creation tools that - * insert more than one figure to the drawing, for example, by - * maintaining SHIFT down and clicking. However, this class still - * maintains its normal behavior of creating only one figure. - */ - private List fAddedFigures; - - /** - * the currently created figure - */ - private Figure fCreatedFigure; - - /** - * the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - private Figure myAddedFigure; - - /** - * the prototypical figure that is used to create new figuresthe prototypical figure that is used to create new figures. - */ - private Figure myPrototypeFigure; - - - /** - * Initializes a CreationTool with the given prototype. - */ - public CreationTool(DrawingEditor newDrawingEditor, Figure prototype) { - super(newDrawingEditor); - setPrototypeFigure(prototype); - } - - /** - * Constructs a CreationTool without a prototype. - * This is for subclassers overriding createFigure. - */ - protected CreationTool(DrawingEditor newDrawingEditor) { - this(newDrawingEditor, null); - } - - /** - * Sets the cross hair cursor. - */ - public void activate() { - super.activate(); - if (isUsable()) { - getActiveView().setCursor(new AWTCursor(java.awt.Cursor.CROSSHAIR_CURSOR)); - } - setAddedFigures(CollectionsFactory.current().createList()); - } - - /** - * @see org.jhotdraw.framework.Tool#deactivate() - */ - public void deactivate() { - setCreatedFigure(null); - setAddedFigure(null); - setAddedFigures(null); - super.deactivate(); - } - - /** - * Creates a new figure by cloning the prototype. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - setCreatedFigure(createFigure()); - setAddedFigure(getActiveView().add(getCreatedFigure())); - getAddedFigure().displayBox(new Point(getAnchorX(), getAnchorY()), new Point(getAnchorX(), getAnchorY())); - } - - /** - * Creates a new figure by cloning the prototype. - */ - protected Figure createFigure() { - if (getPrototypeFigure() == null) { - throw new JHotDrawRuntimeException("No protoype defined"); - } - return (Figure)getPrototypeFigure().clone(); - } - - /** - * Adjusts the extent of the created figure - */ - public void mouseDrag(MouseEvent e, int x, int y) { - if (getAddedFigure() != null) { - getAddedFigure().displayBox(new Point(getAnchorX(), getAnchorY()), new Point(x, y)); - } - } - - /** - * Checks if the created figure is empty. If it is, the figure - * is removed from the drawing. - * @see Figure#isEmpty - */ - public void mouseUp(MouseEvent e, int x, int y) { - if (getAddedFigure() != null && !getCreatedFigure().isEmpty()) { - getAddedFigures().add(getAddedFigure()); - } - else { - getActiveView().remove(getAddedFigure()); - } - - if (getAddedFigures().isEmpty()) { - setUndoActivity(null); - } - else { - // use undo activity from paste command... - setUndoActivity(createUndoActivity()); - // put created figure into a figure enumeration - getUndoActivity().setAffectedFigures(new FigureEnumerator(getAddedFigures())); - } - editor().toolDone(); - } - - /** - * As the name suggests this CreationTool uses the Prototype design pattern. - * Thus, the prototype figure which is used to create new figures of the same - * type by cloning the original prototype figure. - * @param newPrototypeFigure figure to be cloned to create new figures - */ - protected void setPrototypeFigure(Figure newPrototypeFigure) { - myPrototypeFigure = newPrototypeFigure; - } - - /** - * As the name suggests this CreationTool uses the Prototype design pattern. - * Thus, the prototype figure which is used to create new figures of the same - * type by cloning the original prototype figure. - * @return figure to be cloned to create new figures - */ - protected Figure getPrototypeFigure() { - return myPrototypeFigure; - } - - /** - * Gets the list of currently added figure - */ - protected List getAddedFigures() { - return fAddedFigures; - } - - /** - * Sets the addedFigures attribute of the CreationTool object - */ - protected void setAddedFigures(List newAddedFigures) { - fAddedFigures = newAddedFigures; - } - - /** - * Gets the currently created figure - */ - protected Figure getCreatedFigure() { - return fCreatedFigure; - } - - /** - * Sets the createdFigure attribute of the CreationTool object - */ - protected void setCreatedFigure(Figure newCreatedFigure) { - fCreatedFigure = newCreatedFigure; - } - - /** - * Gets the figure that was actually added - * Note, this can be a different figure from the one which has been created. - */ - protected Figure getAddedFigure() { - return myAddedFigure; - } - - /** - * Sets the addedFigure attribute of the CreationTool object - */ - protected void setAddedFigure(Figure newAddedFigure) { - myAddedFigure = newAddedFigure; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(getActiveView()); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/CutCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/CutCommand.java deleted file mode 100644 index ac8cade79..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/CutCommand.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * @(#)CutCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.util.List; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.UndoableAdapter; - -/** - * Delete the selection and move the selected figures to - * the clipboard. - * - * @see org.jhotdraw.util.Clipboard - * - * @version <$CURRENT_VERSION$> - */ -public class CutCommand extends FigureTransferCommand { - - /** - * Constructs a cut command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public CutCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - /** - * @see org.jhotdraw.util.Command#execute() - */ - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - /* ricardo_padilha: bugfix for correct delete/undelete behavior - * When enumerating the affected figures we must not forget the dependent - * figures, since they are deleted as well! - */ - FigureEnumeration fe = view().selection(); - List affected = CollectionsFactory.current().createList(); - Figure f; - FigureEnumeration dfe; - while (fe.hasNextFigure()) { - f = fe.nextFigure(); - affected.add(0, f); - dfe = f.getDependendFigures(); - if (dfe != null) { - while (dfe.hasNextFigure()) { - affected.add(0, dfe.nextFigure()); - } - } - } - fe = new FigureEnumerator(affected); - getUndoActivity().setAffectedFigures(fe); - UndoActivity ua = (UndoActivity) getUndoActivity(); - ua.setSelectedFigures(view().selection()); - copyFigures(ua.getSelectedFigures(), ua.getSelectedFiguresCount()); - /* ricardo_padilha: end of bugfix */ - deleteFigures(getUndoActivity().getAffectedFigures()); - view().checkDamage(); - } - - /** - * @see org.jhotdraw.standard.AbstractCommand#isExecutableWithView() - */ - public boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - /** - * Factory method for undo activity - * @return Undoable - */ - protected Undoable createUndoActivity() { - return new CutCommand.UndoActivity(this); - } - - public static class UndoActivity extends UndoableAdapter { - - private FigureTransferCommand myCommand; - private List mySelectedFigures; - - /** - * Constructor for <code>UndoActivity</code>. - * @param newCommand - */ - public UndoActivity(FigureTransferCommand newCommand) { - super(newCommand.view()); - myCommand = newCommand; - setUndoable(true); - setRedoable(true); - } - - /** - * @see org.jhotdraw.util.Undoable#undo() - */ - public boolean undo() { - if (super.undo() && getAffectedFigures().hasNextFigure()) { - getDrawingView().clearSelection(); - myCommand.insertFigures(getAffectedFiguresReversed(), 0, 0); - return true; - } - return false; - } - - /** - * @see org.jhotdraw.util.Undoable#redo() - */ - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - myCommand.copyFigures(getSelectedFigures(), getSelectedFiguresCount()); - myCommand.deleteFigures(getAffectedFigures()); - return true; - } - - return false; - } - - /** - * Preserve the selection of figures the moment the command was executed. - * @param newSelectedFigures - */ - public void setSelectedFigures(FigureEnumeration newSelectedFigures) { - // the enumeration is not reusable therefore a copy is made - // to be able to undo-redo the command several time - rememberSelectedFigures(newSelectedFigures); - } - - /** - * Preserve a copy of the enumeration in a private list. - * @param toBeRemembered - */ - protected void rememberSelectedFigures(FigureEnumeration toBeRemembered) { - mySelectedFigures = CollectionsFactory.current().createList(); - while (toBeRemembered.hasNextFigure()) { - mySelectedFigures.add(toBeRemembered.nextFigure()); - } - } - - /** - * Returns the selection of figures to perform the command on. - * @return - */ - public FigureEnumeration getSelectedFigures() { - return new FigureEnumerator( - CollectionsFactory.current().createList(mySelectedFigures)); - } - - /** - * Returns the size of the selection. - * @return - */ - public int getSelectedFiguresCount() { - return mySelectedFigures.size(); - } - - /** - * @see org.jhotdraw.util.UndoableAdapter#release() - */ - public void release() { - super.release(); - FigureEnumeration fe = getSelectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().release(); - } - setSelectedFigures(FigureEnumerator.getEmptyEnumeration()); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/DecoratorFigure.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/DecoratorFigure.java deleted file mode 100644 index 0b9d97f14..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/DecoratorFigure.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * @(#)DecoratorFigure.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.util.*; -import org.jhotdraw.framework.*; - -import java.awt.*; -import java.io.*; - -/** - * DecoratorFigure can be used to decorate other figures with - * decorations like borders. Decorator forwards all the - * methods to their contained figure. Subclasses can selectively - * override these methods to extend and filter their behavior. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld014.htm>Decorator</a></b><br> - * DecoratorFigure is a decorator. - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ - -public abstract class DecoratorFigure - extends AbstractFigure - implements FigureChangeListener { - - /** - * The decorated figure. - */ - private Figure myDecoratedFigure; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 8993011151564573288L; - private int decoratorFigureSerializedDataVersion = 1; - - public DecoratorFigure() { - initialize(); - } - - /** - * Constructs a DecoratorFigure and decorates the passed in figure. - */ - public DecoratorFigure(Figure figure) { - initialize(); - decorate(figure); - } - - /** - * Performs additional initialization code before the figure is decorated. - * Subclasses may override this method. - */ - protected void initialize() { - } - - /** - * Forwards the connection insets to its contained figure.. - */ - public Insets connectionInsets() { - return getDecoratedFigure().connectionInsets(); - } - - /** - * Forwards the canConnect to its contained figure.. - */ - public boolean canConnect() { - return getDecoratedFigure().canConnect(); - } - - /** - * Forwards containsPoint to its contained figure. - */ - public boolean containsPoint(int x, int y) { - return getDecoratedFigure().containsPoint(x, y); - } - - /** - * Decorates the given figure. - */ - public void decorate(Figure figure) { - setDecoratedFigure(figure); - getDecoratedFigure().addToContainer(this); - //addDependendFigure(getDecoratedFigure()); - } - - /** - * Removes the decoration from the contained figure. - */ - public Figure peelDecoration() { - getDecoratedFigure().removeFromContainer(this); //??? set the container to the listener()? - removeDependendFigure(getDecoratedFigure()); - return getDecoratedFigure(); - } - - public void setDecoratedFigure(Figure newDecoratedFigure) { - myDecoratedFigure = newDecoratedFigure; - } - - public Figure getDecoratedFigure() { - return myDecoratedFigure; - } - - /** - * Forwards displayBox to its contained figure. - */ - public Rectangle displayBox() { - return getDecoratedFigure().displayBox(); - } - - /** - * Forwards basicDisplayBox to its contained figure. - */ - public void basicDisplayBox(Point origin, Point corner) { - getDecoratedFigure().basicDisplayBox(origin, corner); - } - - /** - * Forwards draw to its contained figure. - */ - public void draw(Graphics g) { - getDecoratedFigure().draw(g); - } - - /** - * Forwards findFigureInside to its contained figure. - */ - public Figure findFigureInside(int x, int y) { - Figure foundFigure = getDecoratedFigure().findFigureInside(x, y); - // if the found figure is the same as the one the DecoratorFigure decorates - // then do not peel of the decoration - if ((foundFigure != null) && (foundFigure == getDecoratedFigure())) { - return this; - } - else { - return foundFigure; - } - } - - /** - * Forwards handles to its contained figure. - */ - public HandleEnumeration handles() { - return getDecoratedFigure().handles(); - } - - /** - * Forwards includes to its contained figure. - */ - public boolean includes(Figure figure) { - return (super.includes(figure) || getDecoratedFigure().includes(figure)); - } - - /** - * Forwards moveBy to its contained figure. - */ - public void moveBy(int x, int y) { - getDecoratedFigure().moveBy(x, y); - } - - /** - * Forwards basicMoveBy to its contained figure. - */ - protected void basicMoveBy(int x, int y) { - // this will never be called - } - - /** - * Releases itself and the contained figure. - */ - public void release() { - super.release(); - getDecoratedFigure().removeFromContainer(this); - getDecoratedFigure().release(); - } - - /** - * Propagates invalidate up the container chain. - * @see FigureChangeListener - */ - public void figureInvalidated(FigureChangeEvent e) { - if (listener() != null) { - listener().figureInvalidated(e); - } - } - - public void figureChanged(FigureChangeEvent e) { - } - - public void figureRemoved(FigureChangeEvent e) { - } - - /** - * Propagates figureRequestUpdate up the container chain. - * @see FigureChangeListener - */ - public void figureRequestUpdate(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestUpdate(e); - } - } - - /** - * Propagates the removeFromDrawing request up to the container. - * @see FigureChangeListener - */ - public void figureRequestRemove(FigureChangeEvent e) { - if (listener() != null) { - listener().figureRequestRemove(new FigureChangeEvent(this)); - } - } - - /** - * Forwards figures to its contained figure. - */ - public FigureEnumeration figures() { - return getDecoratedFigure().figures(); - } - - /** - * Forwards decompose to its contained figure. - */ - public FigureEnumeration decompose() { - return getDecoratedFigure().decompose(); - } - - /** - * Forwards setAttribute to its contained figure. - * - * @deprecated use setAttribute(FigureAttributeConstant, Object) instead - */ - public void setAttribute(String name, Object value) { - getDecoratedFigure().setAttribute(name, value); - } - - /** - * Forwards setAttribute to its contained figure. - */ - public void setAttribute(FigureAttributeConstant attributeConstant, Object value) { - getDecoratedFigure().setAttribute(attributeConstant, value); - } - - /** - * Forwards getAttribute to its contained figure. - * - * @deprecated use getAttribute(FigureAttributeConstant) instead - */ - public Object getAttribute(String name) { - return getDecoratedFigure().getAttribute(name); - } - - /** - * Forwards getAttribute to its contained figure. - */ - public Object getAttribute(FigureAttributeConstant attributeConstant) { - return getDecoratedFigure().getAttribute(attributeConstant); - } - - /** - * Returns the locator used to located connected text. - */ - public Locator connectedTextLocator(Figure text) { - return getDecoratedFigure().connectedTextLocator(text); - } - - /** - * Returns the Connector for the given location. - */ - public Connector connectorAt(int x, int y) { - return getDecoratedFigure().connectorAt(x, y); - } - - /** - * Forwards the connector visibility request to its component. - */ - public void connectorVisibility(boolean isVisible, ConnectionFigure courtingConnection) { - getDecoratedFigure().connectorVisibility(isVisible, null); - } - - /** - * Writes itself and the contained figure to the StorableOutput. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getDecoratedFigure()); - } - - /** - * Reads itself and the contained figure from the StorableInput. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - decorate((Figure)dr.readStorable()); - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - getDecoratedFigure().addToContainer(this); - } -/* - public void visit(FigureVisitor visitor) { - super.visit(visitor); -// getDecoratedFigure().visit(visitor); - } -*/ - public TextHolder getTextHolder() { - return getDecoratedFigure().getTextHolder(); - } - - public synchronized FigureEnumeration getDependendFigures() { - return getDecoratedFigure().getDependendFigures(); - } - - public synchronized void addDependendFigure(Figure newDependendFigure) { - getDecoratedFigure().addDependendFigure(newDependendFigure); - } - - public synchronized void removeDependendFigure(Figure oldDependendFigure) { - getDecoratedFigure().removeDependendFigure(oldDependendFigure); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/DeleteCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/DeleteCommand.java deleted file mode 100644 index ba3e1bd5e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/DeleteCommand.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)DeleteCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.util.List; - -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.Undoable; -import org.jhotdraw.util.UndoableAdapter; - -/** - * Command to delete the selection. - * - * @version <$CURRENT_VERSION$> - */ -public class DeleteCommand extends FigureTransferCommand { - - /** - * Constructs a delete command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public DeleteCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - /** - * @see org.jhotdraw.util.Command#execute() - */ - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - /* ricardo_padilha: bugfix for correct delete/undelete behavior - * When enumerating the affected figures we must not forget the dependent - * figures, since they are deleted as well! - */ - FigureEnumeration fe = view().selection(); - List affected = CollectionsFactory.current().createList(); - Figure f; - FigureEnumeration dfe; - while (fe.hasNextFigure()) { - f = fe.nextFigure(); - affected.add(0, f); - dfe = f.getDependendFigures(); - if (dfe != null) { - while (dfe.hasNextFigure()) { - affected.add(0, dfe.nextFigure()); - } - } - } - fe = new FigureEnumerator(affected); - getUndoActivity().setAffectedFigures(fe); - /* ricardo_padilha: end of bugfix */ - deleteFigures(getUndoActivity().getAffectedFigures()); - view().checkDamage(); - } - - /** - * @see org.jhotdraw.standard.AbstractCommand#isExecutableWithView() - */ - protected boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - /** - * Factory method for undo activity - * @return Undoable - */ - protected Undoable createUndoActivity() { - return new DeleteCommand.UndoActivity(this); - } - - public static class UndoActivity extends UndoableAdapter { - - private FigureTransferCommand myCommand; - - /** - * Constructor for <code>UndoActivity</code>. - * @param newCommand parent command - */ - public UndoActivity(FigureTransferCommand newCommand) { - super(newCommand.view()); - myCommand = newCommand; - setUndoable(true); - setRedoable(true); - } - - /** - * @see org.jhotdraw.util.Undoable#undo() - */ - public boolean undo() { - if (super.undo() && getAffectedFigures().hasNextFigure()) { - getDrawingView().clearSelection(); - setAffectedFigures( - myCommand.insertFigures(getAffectedFiguresReversed(), 0, 0)); - return true; - } - return false; - } - - /** - * @see org.jhotdraw.util.Undoable#redo() - */ - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - myCommand.deleteFigures(getAffectedFigures()); - getDrawingView().clearSelection(); - return true; - } - return false; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/DeleteFromDrawingVisitor.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/DeleteFromDrawingVisitor.java deleted file mode 100644 index 07ce5acf4..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/DeleteFromDrawingVisitor.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * @(#)DeleteFromDrawingVisitor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.CollectionsFactory; - -import java.util.Set; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class DeleteFromDrawingVisitor implements FigureVisitor { - private Set myDeletedFigures; - private Drawing myDrawing; - - public DeleteFromDrawingVisitor(Drawing newDrawing) { - myDeletedFigures = CollectionsFactory.current().createSet(); - setDrawing(newDrawing); - } - - private void setDrawing(Drawing newDrawing) { - myDrawing = newDrawing; - } - - protected Drawing getDrawing() { - return myDrawing; - } - - public void visitFigure(Figure hostFigure) { - if (!myDeletedFigures.contains(hostFigure) && getDrawing().containsFigure(hostFigure)) { - Figure orphanedFigure = getDrawing().orphan(hostFigure); - myDeletedFigures.add(orphanedFigure); - } - } - - public void visitHandle(Handle hostHandle) { - } - - public void visitFigureChangeListener(FigureChangeListener hostFigureChangeListener) { -// System.out.println("visitFigureChangeListener: " + hostFigureChangeListener); -// hostFigureChangeListener.visit(this); - } - - public FigureEnumeration getDeletedFigures() { - return new FigureEnumerator(myDeletedFigures); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/DragTracker.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/DragTracker.java deleted file mode 100644 index 4240c7faa..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/DragTracker.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * @(#)DragTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.UndoableAdapter; -import org.jhotdraw.util.Undoable; -import java.awt.*; -import java.awt.event.MouseEvent; - -/** - * DragTracker implements the dragging of the clicked - * figure. - * - * @see SelectionTool - * - * @version <$CURRENT_VERSION$> - */ -public class DragTracker extends AbstractTool { - - private Figure fAnchorFigure; - private int fLastX, fLastY; // previous mouse position - private boolean fMoved = false; - - public DragTracker(DrawingEditor newDrawingEditor, Figure anchor) { - super(newDrawingEditor); - setAnchorFigure(anchor); - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - setLastMouseX(x); - setLastMouseY(y); - - if (e.isShiftDown()) { - getActiveView().toggleSelection(getAnchorFigure()); - setAnchorFigure(null); - } - else if (!getActiveView().isFigureSelected(getAnchorFigure())) { - getActiveView().clearSelection(); - getActiveView().addToSelection(getAnchorFigure()); - } - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(getActiveView().selection()); -// getUndoActivity().setAffectedFigures(view().selectionElements()); - } - - public void mouseDrag(MouseEvent e, int x, int y) { - super.mouseDrag(e, x, y); - setHasMoved((Math.abs(x - getAnchorX()) > 4) || (Math.abs(y - getAnchorY()) > 4)); - - if (hasMoved()) { - FigureEnumeration figures = getUndoActivity().getAffectedFigures(); - while (figures.hasNextFigure()) { - figures.nextFigure().moveBy(x - getLastMouseX(), y - getLastMouseY()); - } - } - setLastMouseX(x); - setLastMouseY(y); - } - - protected void setAnchorFigure(Figure newAnchorFigure) { - fAnchorFigure = newAnchorFigure; - } - - public Figure getAnchorFigure() { - return fAnchorFigure; - } - - protected void setLastMouseX(int newLastMouseX) { - fLastX = newLastMouseX; - } - - protected int getLastMouseX() { - return fLastX; - } - - protected void setLastMouseY(int newLastMouseY) { - fLastY = newLastMouseY; - } - - protected int getLastMouseY() { - return fLastY; - } - - /** - * Check whether the selected figure has been moved since - * the tool has been activated. - * - * @return true if the selected figure has been moved - */ - public boolean hasMoved() { - return fMoved; - } - - protected void setHasMoved(boolean newMoved) { - fMoved = newMoved; - } - - public void activate() { - // suppress clearSelection() and tool-activation-notification - // in superclass - } - - public void deactivate() { - if (hasMoved()) { - ((DragTracker.UndoActivity)getUndoActivity()).setBackupPoint(new Point(getLastMouseX(), getLastMouseY())); - } - else { - setUndoActivity(null); - } - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new DragTracker.UndoActivity(getActiveView(), new Point(getLastMouseX(), getLastMouseY())); - } - - public static class UndoActivity extends UndoableAdapter { - private Point myOriginalPoint; - private Point myBackupPoint; - - public UndoActivity(DrawingView newDrawingView, Point newOriginalPoint) { - super(newDrawingView); - setOriginalPoint(newOriginalPoint); - setUndoable(true); - setRedoable(true); - } - - /* - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (!super.undo()) { - return false; - } - moveAffectedFigures(getBackupPoint(), getOriginalPoint()); - return true; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (!super.redo()) { - return false; - } - moveAffectedFigures(getOriginalPoint(), getBackupPoint()); - return true; - } - - public void setBackupPoint(Point newBackupPoint) { - myBackupPoint = newBackupPoint; - } - - public Point getBackupPoint() { - return myBackupPoint; - } - - public void setOriginalPoint(Point newOriginalPoint) { - myOriginalPoint = newOriginalPoint; - } - - public Point getOriginalPoint() { - return myOriginalPoint; - } - - public void moveAffectedFigures(Point startPoint, Point endPoint) { - FigureEnumeration figures = getAffectedFigures(); - while (figures.hasNextFigure()) { - figures.nextFigure().moveBy(endPoint.x - startPoint.x, - endPoint.y - startPoint.y); - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/DuplicateCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/DuplicateCommand.java deleted file mode 100644 index 4e3e08b4e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/DuplicateCommand.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * @(#)DuplicateCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; - -/** - * Duplicate the selection and select the duplicates. - * - * @version <$CURRENT_VERSION$> - */ -public class DuplicateCommand extends FigureTransferCommand { - - /** - * Constructs a duplicate command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public DuplicateCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - FigureSelection selection = view().getFigureSelection(); - - // create duplicate figure(s) - FigureEnumeration figures = (FigureEnumeration)selection.getData(StandardFigureSelection.TYPE); - getUndoActivity().setAffectedFigures(figures); - - view().clearSelection(); - getUndoActivity().setAffectedFigures( - insertFigures(getUndoActivity().getAffectedFigures(), 10, 10)); - view().checkDamage(); - } - - protected boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/FastBufferedUpdateStrategy.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/FastBufferedUpdateStrategy.java deleted file mode 100644 index 2235e426a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/FastBufferedUpdateStrategy.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * @(#)FastBufferedUpdateStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Rectangle; -import java.awt.image.BufferedImage; -import org.jhotdraw.framework.Drawing; -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.framework.Painter; - -/** - * @author WMG (INIT Copyright (C) 2000 All rights reserved) - * @version <$CURRENT_VERSION$> - */ -public class FastBufferedUpdateStrategy implements Painter { - - //_________________________________________________________VARIABLES - - private BufferedImage _doubleBufferedImage; - private BufferedImage _scratchPadBufferedImage; - private int _nImageWidth = 0; - private int _nImageHeight = 0; - private boolean _bRedrawAll = true; - - //______________________________________________________CONSTRUCTORS - - public FastBufferedUpdateStrategy() { - } - - //____________________________________________________PUBLIC METHODS - - public void draw(Graphics g, DrawingView view) { - _checkCaches(view); - if (_bRedrawAll == true) { - Graphics imageGraphics = _doubleBufferedImage.getGraphics(); - view.drawAll(imageGraphics); - } - else { - Rectangle viewClipRectangle = g.getClipBounds(); - int nX1 = viewClipRectangle.x; - int nY1 = viewClipRectangle.y; - int nX2 = viewClipRectangle.x + viewClipRectangle.width; - int nY2 = viewClipRectangle.y + viewClipRectangle.height; - - if (nX1 < 0) { - nX1 = 0; - } - if (nY1 < 0) { - nY1 = 0; - } - if (nX2 < 0) { - nX2 = 0; - } - if (nY2 < 0) { - nY2 = 0; - } - - Rectangle viewClipRectangle2 = new Rectangle(nX1, nY1, nX2-nX1, nY2-nY1); - - Drawing theDrawing = view.drawing(); - FigureEnumeration fe = theDrawing.figures(viewClipRectangle2); - - Graphics imageGraphics = _scratchPadBufferedImage.getGraphics(); - imageGraphics.setColor(view.getBackground()); - imageGraphics.fillRect(nX1, nY1, nX2-nX1, nY2-nY1); - view.draw(imageGraphics, fe); - - Graphics dbGraphics = _doubleBufferedImage.getGraphics(); - dbGraphics.drawImage(_scratchPadBufferedImage, nX1, nY1, - nX2, nY2, nX1, nY1, nX2, nY2, view); - - } - - g.drawImage(_doubleBufferedImage, 0, 0, view); - _bRedrawAll = false; - } - - - //___________________________________________________PRIVATE METHODS - - - private void _checkCaches(DrawingView view) { - Dimension d = view.getSize(); - - if ((_doubleBufferedImage == null) - || (_nImageWidth != d.width) - || (_nImageHeight != d.height)) { - _doubleBufferedImage = new BufferedImage(d.width, - d.height, BufferedImage.TYPE_INT_RGB); - _bRedrawAll = true; - } - - if ((_scratchPadBufferedImage == null) - || (_nImageWidth != d.width) - || (_nImageHeight != d.height)) { - _scratchPadBufferedImage = new BufferedImage(d.width, - d.height, BufferedImage.TYPE_INT_RGB); - Graphics imageGraphics = _scratchPadBufferedImage.getGraphics(); - view.drawBackground(imageGraphics); - _bRedrawAll = true; - } - - _nImageWidth = d.width; - _nImageHeight = d.height; - } - - //_______________________________________________________________END - -} //end of class FastBufferedUpdateStrategy diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureAndEnumerator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureAndEnumerator.java deleted file mode 100644 index b7fb1c4ee..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureAndEnumerator.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)FigureAndEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.framework.Figure; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class FigureAndEnumerator implements FigureEnumeration { - private FigureEnumeration myFE1; - private FigureEnumeration myFE2; - - public FigureAndEnumerator(FigureEnumeration newFE1, FigureEnumeration newFE2) { - myFE1 = newFE1; - myFE2 = newFE2; - } - - public Figure nextFigure() { - if (myFE1.hasNextFigure()) { - return myFE1.nextFigure(); - } - else if (myFE2.hasNextFigure()) { - return myFE2.nextFigure(); - } - else { - // todo: throw exception - return null; - } - } - - public boolean hasNextFigure() { - return myFE1.hasNextFigure() || myFE2.hasNextFigure(); - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - myFE1.reset(); - myFE2.reset(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureChangeAdapter.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureChangeAdapter.java deleted file mode 100644 index 9f94ed938..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureChangeAdapter.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * @(#)FigureChangeAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; - -/** - * Empty implementation of FigureChangeListener. - * - * @version <$CURRENT_VERSION$> - */ -public class FigureChangeAdapter implements FigureChangeListener { - - /** - * Sent when an area is invalid - */ - public void figureInvalidated(FigureChangeEvent e) {} - - /** - * Sent when a figure changed - */ - public void figureChanged(FigureChangeEvent e) {} - - /** - * Sent when a figure was removed - */ - public void figureRemoved(FigureChangeEvent e) {} - - /** - * Sent when requesting to remove a figure. - */ - public void figureRequestRemove(FigureChangeEvent e) {} - - /** - * Sent when an update should happen. - * - */ - public void figureRequestUpdate(FigureChangeEvent e) {} - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureChangeEventMulticaster.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureChangeEventMulticaster.java deleted file mode 100644 index 3b424fb9a..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureChangeEventMulticaster.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * @(#)FigureChangeEventMulticaster.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import java.awt.*; -import java.util.*; - -/** - * Manages a list of FigureChangeListeners to be notified of - * specific FigureChangeEvents. - * - * @version <$CURRENT_VERSION$> - */ -public class FigureChangeEventMulticaster extends - AWTEventMulticaster implements FigureChangeListener { - - public FigureChangeEventMulticaster(EventListener newListenerA, EventListener newListenerB) { - super(newListenerA, newListenerB); - } - - public void figureInvalidated(FigureChangeEvent e) { - ((FigureChangeListener)a).figureInvalidated(e); - ((FigureChangeListener)b).figureInvalidated(e); - } - - public void figureRequestRemove(FigureChangeEvent e) { - ((FigureChangeListener)a).figureRequestRemove(e); - ((FigureChangeListener)b).figureRequestRemove(e); - } - - public void figureRequestUpdate(FigureChangeEvent e) { - ((FigureChangeListener)a).figureRequestUpdate(e); - ((FigureChangeListener)b).figureRequestUpdate(e); - } - - public void figureChanged(FigureChangeEvent e) { - ((FigureChangeListener)a).figureChanged(e); - ((FigureChangeListener)b).figureChanged(e); - } - - public void figureRemoved(FigureChangeEvent e) { - ((FigureChangeListener)a).figureRemoved(e); - ((FigureChangeListener)b).figureRemoved(e); - } - - public static FigureChangeListener add(FigureChangeListener a, FigureChangeListener b) { - return (FigureChangeListener)addInternal(a, b); - } - - - public static FigureChangeListener remove(FigureChangeListener l, FigureChangeListener oldl) { - return (FigureChangeListener) removeInternal(l, oldl); - } - - protected EventListener remove(EventListener oldl) - { - if (oldl == a) { - return b; - } - if (oldl == b) { - return a; - } - EventListener a2 = removeInternal(a, oldl); - EventListener b2 = removeInternal(b, oldl); - if (a2 == a && b2 == b) { - return this; - } - else { - return addInternal((FigureChangeListener)a2, (FigureChangeListener)b2); - } - } - - protected static EventListener addInternal(FigureChangeListener a, FigureChangeListener b) { - if (a == null) { - return b; - } - if (b == null) { - return a; - } - return new FigureChangeEventMulticaster(a, b); - } - - protected static EventListener removeInternal(EventListener l, EventListener oldl) { - if (l == oldl || l == null) { - return null; - } - else if (l instanceof FigureChangeEventMulticaster) { - return ((FigureChangeEventMulticaster)l).remove(oldl); - } - else { - return l; // it's not here - } - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureEnumerator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureEnumerator.java deleted file mode 100644 index 82179d083..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureEnumerator.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * @(#)FigureEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.CollectionsFactory; - -import java.util.Iterator; -import java.util.Collection; - - -/** - * An Enumeration for a Collection of Figures. - * - * @version <$CURRENT_VERSION$> - */ -public final class FigureEnumerator implements FigureEnumeration { - private Iterator myIterator; - private Collection myInitialCollection; - - private static FigureEnumerator singletonEmptyEnumerator = - new FigureEnumerator(CollectionsFactory.current().createList()); - - public FigureEnumerator(Collection c) { - myInitialCollection = c; - reset(); - } - - /** - * Returns true if the enumeration contains more elements; false - * if its empty. - */ - public boolean hasNextFigure() { - return myIterator.hasNext(); - } - - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Figure nextFigure() { - return (Figure)myIterator.next(); - } - - public static FigureEnumeration getEmptyEnumeration() { - return singletonEmptyEnumerator; - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - myIterator = myInitialCollection.iterator(); - } - -/* public static FigureEnumeration getClonedFigures(FigureEnumeration toDuplicate) { - List v = CollectionsFactory.current().createList(); - while (toDuplicate.hasMoreElements()) { - try { - v.addElement(toDuplicate.nextFigure().clone()); - } - catch (CloneNotSupportedException e) { - e.printStackTrace(); - } - } - return new FigureEnumerator(v); - } -*/ -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureTransferCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureTransferCommand.java deleted file mode 100644 index 55bbc340b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/FigureTransferCommand.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * @(#)FigureTransferCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.util.*; -import org.jhotdraw.framework.*; - -/** - * Common base clase for commands that transfer figures - * between a drawing and the clipboard. - * - * @version <$CURRENT_VERSION$> - */ -public abstract class FigureTransferCommand extends AbstractCommand { - - /** - * Constructs a drawing command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - protected FigureTransferCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - /** - * Deletes the selection from the drawing. - */ - protected void deleteFigures(FigureEnumeration fe) { - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor(view().drawing()); - while (fe.hasNextFigure()) { - fe.nextFigure().visit(deleteVisitor); - } - - view().clearSelection(); - } - - /** - * Copies the FigureEnumeration to the clipboard. - */ - protected void copyFigures(FigureEnumeration fe, int figureCount) { - Clipboard.getClipboard().setContents(new StandardFigureSelection(fe, figureCount)); - } - - /** - * Inserts an enumeration of figures and translates them by the - * given offset. - * @todo mrfloppy to investigate making this protected. Looks like it would - * be no problem to me. It was package scope. I thought it safer to - * make it less restrictive just incase their was a reason for the - * package scope I didn't know about. dnoyeb. - * Bug - [ 673096 ] FigureTransferCommand has a wrong method - */ - public FigureEnumeration insertFigures(FigureEnumeration fe, int dx, int dy) { - return view().insertFigures(fe, dx, dy, false); - } -} - - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/GridConstrainer.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/GridConstrainer.java deleted file mode 100644 index 5db9d65a9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/GridConstrainer.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * @(#)GridConstrainer.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.PointConstrainer; -import java.awt.*; -import java.io.Serializable; - -/** - * Constrains a point such that it falls on a grid. - * - * @see org.jhotdraw.framework.DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public class GridConstrainer implements PointConstrainer, Serializable { - - private int fGridX; - private int fGridY; - - public GridConstrainer(int x, int y) { - fGridX = Math.max(1, x); - fGridY = Math.max(1, y); - } - - /** - * Constrains the given point. - * @return constrained point. - */ - public Point constrainPoint(Point p) { - p.x = ((p.x+fGridX/2) / fGridX) * fGridX; - p.y = ((p.y+fGridY/2) / fGridY) * fGridY; - return p; - } - - /** - * Gets the x offset to move an object. - */ - public int getStepX() { - return fGridX; - } - - /** - * Gets the y offset to move an object. - */ - public int getStepY() { - return fGridY; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/HandleAndEnumerator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/HandleAndEnumerator.java deleted file mode 100644 index 724bf9949..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/HandleAndEnumerator.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * @(#)HandleAndEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.HandleEnumeration; -import org.jhotdraw.framework.Handle; - -import java.util.List; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class HandleAndEnumerator implements HandleEnumeration { - private HandleEnumeration myHE1; - private HandleEnumeration myHE2; - - public HandleAndEnumerator(HandleEnumeration newHE1, HandleEnumeration newHE2) { - myHE1 = newHE1; - myHE2 = newHE2; - } - - public Handle nextHandle() { - if (myHE1.hasNextHandle()) { - return myHE1.nextHandle(); - } - else if (myHE2.hasNextHandle()) { - return myHE2.nextHandle(); - } - else { - // todo: throw exception - return null; - } - } - - public boolean hasNextHandle() { - return myHE1.hasNextHandle() || myHE2.hasNextHandle(); - } - - public List toList() { - List joinedList = myHE1.toList(); - joinedList.addAll(myHE2.toList()); - return joinedList; - } - - public void reset() { - myHE1.reset(); - myHE2.reset(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/HandleEnumerator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/HandleEnumerator.java deleted file mode 100644 index 212b217f5..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/HandleEnumerator.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * @(#)HandleEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.framework.HandleEnumeration; -import org.jhotdraw.framework.Handle; - -import java.util.Iterator; -import java.util.Collection; -import java.util.List; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class HandleEnumerator implements HandleEnumeration { - private Iterator myIterator; - private Collection myInitialCollection; - - private static HandleEnumerator singletonEmptyEnumerator = - new HandleEnumerator(CollectionsFactory.current().createList()); - - public HandleEnumerator(Collection c) { - myInitialCollection = c; - reset(); - } - - /** - * Returns true if the enumeration contains more elements; false - * if its empty. - */ - public boolean hasNextHandle() { - return myIterator.hasNext(); - } - - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Handle nextHandle() { - return (Handle)myIterator.next(); - } - - /** - * Returns a list with all elements currently available in the enumeration. - * That means, elements retrieved already by calling nextHandle() are not - * contained. This method does not change the position of the enumeration. - * Warning: this method is not necessarily synchronized so this enumeration should not - * be modified at the same time! - * - * @return list with all elements currently available in the enumeration. - */ - public List toList() { - List handles = CollectionsFactory.current().createList(); - while (hasNextHandle()) { - handles.add(nextHandle()); - } - // copy/reset iterator to original content - myIterator = handles.iterator(); - return handles; - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - myIterator = myInitialCollection.iterator(); - } - - public static HandleEnumeration getEmptyEnumeration() { - return singletonEmptyEnumerator; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/HandleTracker.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/HandleTracker.java deleted file mode 100644 index 1ef42b648..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/HandleTracker.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * @(#)HandleTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.event.MouseEvent; -import org.jhotdraw.framework.*; - -/** - * HandleTracker implements interactions with the handles of a Figure. - * - * @see SelectionTool - * - * @version <$CURRENT_VERSION$> - */ -public class HandleTracker extends AbstractTool { - - private Handle fAnchorHandle; - - public HandleTracker(DrawingEditor newDrawingEditor, Handle anchorHandle) { - super(newDrawingEditor); - fAnchorHandle = anchorHandle; - } - - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - fAnchorHandle.invokeStart(x, y, view()); - } - - public void mouseDrag(MouseEvent e, int x, int y) { - super.mouseDrag(e, x, y); - fAnchorHandle.invokeStep(x, y, getAnchorX(), getAnchorY(), view()); - } - - public void mouseUp(MouseEvent e, int x, int y) { - super.mouseUp(e, x, y); - fAnchorHandle.invokeEnd(x, y, getAnchorX(), getAnchorY(), view()); - } - - public void activate() { - // suppress clearSelection() and tool-activation-notification - // in superclass by providing an empty implementation - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/InsertIntoDrawingVisitor.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/InsertIntoDrawingVisitor.java deleted file mode 100644 index 38e232b6b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/InsertIntoDrawingVisitor.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * @(#)InsertIntoDrawingVisitor.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.CollectionsFactory; - -import java.util.Set; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class InsertIntoDrawingVisitor implements FigureVisitor { - private Set myInsertedFigures; - private Drawing myDrawing; - - public InsertIntoDrawingVisitor(Drawing newDrawing) { - myInsertedFigures = CollectionsFactory.current().createSet(); - setDrawing(newDrawing); - } - - private void setDrawing(Drawing newDrawing) { - myDrawing = newDrawing; - } - - protected Drawing getDrawing() { - return myDrawing; - } - - public void visitFigure(Figure hostFigure) { - if (!myInsertedFigures.contains(hostFigure) && !getDrawing().includes(hostFigure)) { - Figure addedFigure = getDrawing().add(hostFigure); - myInsertedFigures.add(addedFigure); - } - } - - public void visitHandle(Handle hostHandle) { - } - - public void visitFigureChangeListener(FigureChangeListener hostFigureChangeListener) { -// hostFigureChangeListener.visit(this); - } - - public FigureEnumeration getInsertedFigures() { - return new FigureEnumerator(myInsertedFigures); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/LocatorConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/LocatorConnector.java deleted file mode 100644 index 89820eb4c..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/LocatorConnector.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * @(#)LocatorConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import java.io.IOException; -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; - -/** - * A LocatorConnector locates connection points with - * the help of a Locator. It supports the definition - * of connection points to semantic locations. - * - * @see Locator - * @see Connector - * - * @version <$CURRENT_VERSION$> - */ -public class LocatorConnector extends AbstractConnector { - - /** - * The standard size of the connector. The display box - * is centered around the located point. - */ - public static final int SIZE = 8; - - protected Locator myLocator; - - /* - * Serialization support. - */ - private static final long serialVersionUID = 5062833203337604181L; - private int locatorConnectorSerializedDataVersion = 1; - - public LocatorConnector() { // only used for Storable - setLocator(null); - } - - public LocatorConnector(Figure owner, Locator l) { - super(owner); - setLocator(l); - } - - /** - * Tests if a point is contained in the connector. - */ - public boolean containsPoint(int x, int y) { - return displayBox().contains(x, y); - } - - /** - * Gets the display box of the connector. - */ - public Rectangle displayBox() { - Point p = getLocator().locate(owner()); - return new Rectangle( - p.x - SIZE / 2, - p.y - SIZE / 2, - SIZE, - SIZE); - } - - /** - * Draws this connector. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.blue); - g.fillOval(r.x, r.y, r.width, r.height); - g.setColor(Color.black); - g.drawOval(r.x, r.y, r.width, r.height); - } - - /** - * Stores the arrow tip to a StorableOutput. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeStorable(getLocator()); - } - - /** - * Reads the arrow tip from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - setLocator((Locator)dr.readStorable()); - } - - protected void setLocator(Locator newLocator) { - myLocator = newLocator; - } - - public Locator getLocator() { - return myLocator; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/LocatorHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/LocatorHandle.java deleted file mode 100644 index ca9276d53..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/LocatorHandle.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * @(#)LocatorHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.Point; - -import org.jhotdraw.framework.Cursor; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.Locator; - -/** - * A LocatorHandle implements a Handle by delegating the location requests to - * a Locator object. - * - * @see LocatorHandle - * - * @version <$CURRENT_VERSION$> - */ -public class LocatorHandle extends AbstractHandle { - - private Locator fLocator; - - /** - * Initializes the LocatorHandle with the given Locator. - */ - public LocatorHandle(Figure owner, Locator l) { - super(owner); - fLocator = l; - } - /** - * This should be cloned or it gives the receiver the opportunity to alter - * our internal behavior. - */ - public Locator getLocator() { - return fLocator; - } - - /** - * Locates the handle on the figure by forwarding the request - * to its figure. - */ - public Point locate() { - return fLocator.locate(owner()); - } - - /** - * @see org.jhotdraw.framework.Handle#getCursor() - */ - public Cursor getCursor() { - Cursor c = super.getCursor(); - if (getLocator() instanceof RelativeLocator) { - RelativeLocator rl = (RelativeLocator) getLocator(); - if (rl.equals( RelativeLocator.north())) { - c = new AWTCursor(java.awt.Cursor.N_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.northEast())) { - c = new AWTCursor(java.awt.Cursor.NE_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.east())) { - c = new AWTCursor(java.awt.Cursor.E_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.southEast())) { - c = new AWTCursor(java.awt.Cursor.SE_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.south())) { - c = new AWTCursor(java.awt.Cursor.S_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.southWest())) { - c = new AWTCursor(java.awt.Cursor.SW_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.west())) { - c = new AWTCursor(java.awt.Cursor.W_RESIZE_CURSOR); - } - else if (rl.equals(RelativeLocator.northWest())) { - c = new AWTCursor(java.awt.Cursor.NW_RESIZE_CURSOR); - } - } - return c; - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/NullDrawingView.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/NullDrawingView.java deleted file mode 100644 index 9a38423fa..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/NullDrawingView.java +++ /dev/null @@ -1,430 +0,0 @@ -/* - * @(#)NullDrawingView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import java.util.Collection; -import java.util.Hashtable; - -import javax.swing.JPanel; - -import org.jhotdraw.framework.*; - -/** - * This DrawingView provides a very basic implementation. It does not perform any - * functionality apart from keeping track of its state represented by some important - * fields. It is a Null-value object and is used instead of a null reference to - * avoid null pointer exception. This concept is known as the Null-value object - * bug pattern. - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class NullDrawingView extends JPanel implements DrawingView { - - private DrawingEditor myDrawingEditor; - private Drawing myDrawing; - private Painter myUpdateStrategy; - private Color myBackgroundColor; - - private static Hashtable drawingViewManager = new Hashtable(); - - protected NullDrawingView(DrawingEditor editor) { - setEditor(editor); - setDrawing(new StandardDrawing()); - } - - /** - * Sets the view's editor. - */ - public void setEditor(DrawingEditor editor) { - myDrawingEditor = editor; - } - - /** - * Gets the current tool. - */ - public Tool tool() { - return editor().tool(); - } - - /** - * Gets the drawing. - */ - public Drawing drawing() { - return myDrawing; - } - - /** - * Sets and installs another drawing in the view. - */ - public void setDrawing(Drawing d) { - myDrawing = d; - } - - /** - * Gets the editor. - */ - public DrawingEditor editor() { - return myDrawingEditor; - } - - /** - * Adds a figure to the drawing. - * @return the added figure. - */ - public Figure add(Figure figure) { - return figure; - } - - /** - * Removes a figure from the drawing. - * @return the removed figure - */ - public Figure remove(Figure figure) { - return figure; - } - - /** - * Adds a collection of figures to the drawing. - */ - public void addAll(Collection figures) { - // ignore: do nothing - } - - /** - * Gets the size of the drawing. - */ - public Dimension getSize() { - return new Dimension(); - } - - /** - * Gets the minimum dimension of the drawing. - */ - public Dimension getMinimumSize() { - return new Dimension(); - } - - /** - * Gets the preferred dimension of the drawing.. - */ - public Dimension getPreferredSize() { - return new Dimension(); - } - - /** - * Sets the current display update strategy. - * @see Painter - */ - public void setDisplayUpdate(Painter newUpdateStrategy) { - myUpdateStrategy = newUpdateStrategy; - } - - /** - * Gets the current display update strategy. - * @see Painter - */ - public Painter getDisplayUpdate() { - return myUpdateStrategy; - } - - /** - * Gets an enumeration over the currently selected figures. - * The selection is a snapshot of the current selection - * which does not get changed anymore - * - * @return an enumeration with the currently selected figures. - */ - public FigureEnumeration selection() { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Gets the currently seleced figures in Z order. - * @see #selection - * @return a FigureEnumeration with the selected figures. This enumeration - * represents a snapshot of the current selection. - */ - public FigureEnumeration selectionZOrdered() { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Gets the number of selected figures. - */ - public int selectionCount() { - return 0; - } - - /** - * Test whether a given figure is selected. - */ - public boolean isFigureSelected(Figure checkFigure) { - return false; - } - - /** - * Adds a figure to the current selection. - */ - public void addToSelection(Figure figure) { - // ignore: do nothing - } - - /** - * Adds a Collection of figures to the current selection. - */ - public void addToSelectionAll(Collection figures) { - // ignore: do nothing - } - - /** - * Adds a FigureEnumeration to the current selection. - */ - public void addToSelectionAll(FigureEnumeration fe) { - // ignore: do nothing - } - - /** - * Removes a figure from the selection. - */ - public void removeFromSelection(Figure figure) { - // ignore: do nothing - } - - /** - * If a figure isn't selected it is added to the selection. - * Otherwise it is removed from the selection. - */ - public void toggleSelection(Figure figure) { - // ignore: do nothing - } - - /** - * Clears the current selection. - */ - public void clearSelection() { - // ignore: do nothing - } - - /** - * Gets the current selection as a FigureSelection. A FigureSelection - * can be cut, copied, pasted. - */ - public FigureSelection getFigureSelection() { - return new StandardFigureSelection(selection(), 0); - } - - /** - * Finds a handle at the given coordinates. - * @return the hit handle, null if no handle is found. - */ - public Handle findHandle(int x, int y) { - return null; - } - - /** - * Gets the position of the last click inside the view. - */ - public Point lastClick() { - return new Point(); - } - - /** - * Sets the current point constrainer. - */ - public void setConstrainer(PointConstrainer p) { - // ignore: do nothing - } - - /** - * Gets the current grid setting. - */ - public PointConstrainer getConstrainer() { - return null; - } - - /** - * Checks whether the drawing has some accumulated damage - */ - public void checkDamage() { - // ignore: do nothing - } - - /** - * Repair the damaged area - */ - public void repairDamage() { - // ignore: do nothing - } - - /** - * Paints the drawing view. The actual drawing is delegated to - * the current update strategy. - * @see Painter - */ - public void paint(Graphics g) { - // ignore: do nothing - } - - /** - * Creates an image with the given dimensions - */ - public Image createImage(int width, int height) { - return null; - } - - /** - * Gets a graphic to draw into - */ - public Graphics getGraphics() { - return null; - } - - /** - * Gets the background color of the DrawingView - */ - public Color getBackground() { - return myBackgroundColor; - } - - /** - * Sets the background color of the DrawingView - */ - public void setBackground(Color c) { - myBackgroundColor = c; - } - - /** - * Draws the contents of the drawing view. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void drawAll(Graphics g) { - // ignore: do nothing - } - - /** - * Draws the given figures. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void draw(Graphics g, FigureEnumeration fe) { - // ignore: do nothing - } - - /** - * Draws the currently active handles. - */ - public void drawHandles(Graphics g) { - // ignore: do nothing - } - - /** - * Draws the drawing. - */ - public void drawDrawing(Graphics g) { - // ignore: do nothing - } - - /** - * Draws the background. If a background pattern is set it - * is used to fill the background. Otherwise the background - * is filled in the background color. - */ - public void drawBackground(Graphics g) { - // ignore: do nothing - } - - /** - * Sets the cursor of the DrawingView - */ - public void setCursor(org.jhotdraw.framework.Cursor c) { - // ignore: do nothing - } - - /** - * Freezes the view by acquiring the drawing lock. - * @see Drawing#lock - */ - public void freezeView() { - // ignore: do nothing - } - - /** - * Unfreezes the view by releasing the drawing lock. - * @see Drawing#unlock - */ - public void unfreezeView() { - // ignore: do nothing - } - - /** - * Add a listener for selection changes in this DrawingView. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void addFigureSelectionListener(FigureSelectionListener fsl) { - // ignore: do nothing - } - - /** - * Remove a listener for selection changes in this DrawingView. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void removeFigureSelectionListener(FigureSelectionListener fsl) { - // ignore: do nothing - } - - /** - * Returns a FigureEnumeration of connection figures - */ - public FigureEnumeration getConnectionFigures(Figure inFigure) { - return FigureEnumerator.getEmptyEnumeration(); - } - - /** - * Inserts figures in a drawing at given offset. Optional check for connection figures - * - * @return enumeration which has been added to the drawing. The figures in the enumeration - * can have changed during adding them (e.g. they could have been decorated). - */ - public FigureEnumeration insertFigures(FigureEnumeration inFigures, int dx, int dy, boolean bCheck) { - return FigureEnumerator.getEmptyEnumeration(); - } - - public void drawingInvalidated(DrawingChangeEvent e) { - // ignore: do nothing - } - - public void drawingRequestUpdate(DrawingChangeEvent e) { - // ignore: do nothing - } - - public void drawingTitleChanged(DrawingChangeEvent e) { - // ignore: do nothing - } - - public boolean isInteractive() { - return false; - } - - public synchronized static DrawingView getManagedDrawingView(DrawingEditor editor) { - if (drawingViewManager.containsKey(editor)) { - return (DrawingView)drawingViewManager.get(editor); - } - else { - DrawingView newDrawingView = new NullDrawingView(editor); - drawingViewManager.put(editor, newDrawingView); - return newDrawingView; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/NullHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/NullHandle.java deleted file mode 100644 index ade30edf7..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/NullHandle.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * @(#)NullHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import org.jhotdraw.framework.*; - -/** - * A handle that doesn't change the owned figure. Its only purpose is - * to show feedback that a figure is selected. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b>NullObject</b><br> - * NullObject enables to treat handles that don't do - * anything in the same way as other handles. - * - * @version <$CURRENT_VERSION$> - */ -public class NullHandle extends LocatorHandle { - - /** - * The handle's locator. - */ - protected Locator fLocator; - - public NullHandle(Figure owner, Locator locator) { - super(owner, locator); - } - - /** - * Draws the NullHandle. NullHandles are drawn as a - * red framed rectangle. - */ - public void draw(Graphics g) { - Rectangle r = displayBox(); - - g.setColor(Color.black); - g.drawRect(r.x, r.y, r.width, r.height); - } - - public org.jhotdraw.framework.Cursor getCursor() { - return new AWTCursor(java.awt.Cursor.DEFAULT_CURSOR); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/NullPainter.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/NullPainter.java deleted file mode 100644 index bb4cdaea8..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/NullPainter.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)NullPainter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: \x{FFFD} by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.standard; - -import java.awt.Graphics; - -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.framework.Painter; - -/** - * Default implementation support for a Painter. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b>NullObject</b><br> - * NullObject enables to treat handles that don't do - * anything in the same way as other handles. - * - * @see Painter - * - * @version <$CURRENT_VERSION$> - */ - -public class NullPainter implements Painter { - /* (non-Javadoc) - * @see org.jhotdraw.framework.Painter#draw(java.awt.Graphics, org.jhotdraw.framework.DrawingView) - */ - public void draw(Graphics g, DrawingView view) { - // Do nothing in a reasonable way. - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/NullTool.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/NullTool.java deleted file mode 100644 index 30820ee0f..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/NullTool.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * @(#)NullTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; - -/** - * Default implementation support for Tools. - * - * @see DrawingView - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ - -public class NullTool extends AbstractTool { - public NullTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - public void activate() { - // suppress clearSelection() and tool-activation notification in superclass - } - - public void deactivate() { - // suppress clearSelection() and tool-activation notification in superclass - } - - protected void checkUsable() { - //suppress setUsable(false); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/OffsetConnector.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/OffsetConnector.java deleted file mode 100644 index 917ebca52..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/OffsetConnector.java +++ /dev/null @@ -1,375 +0,0 @@ -/* - * @(#)OffsetConnector.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.figures.*; -import org.jhotdraw.util.*; - -/** - * An OffsetConnector locates connection points with the help of an - * OffsetLocator. - * <p> - * It allows the dynamic creation of connection points for new LineConnections. - * <p> - * It dynamically adjusts connection points when connection handles are - * dragged. - * <p> - * This class is not thread safe - * - * <hr> - * <b>Design Patterns </b> - * <P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "><b><a - * href=../pattlets/sld036.htm>Proxy </a> </b> <br> - * <b><a href=../pattlets/sld036.htm>Prototype </a> </b> <br> - * Tracking connectors are Proxy Objects that are provided by the - * trackConnector method when new connectors need to be created. The tracking - * connectors permit deferral of OffsetConnector creation until the - * finalizeConnector() method is called. New connectors are then created by - * copying the tracking connectors (as in the Prototype pattern). - * <hr> - * - * @see OffsetLocator - * @see Connector - */ -public class OffsetConnector extends LocatorConnector { - - // Static trackingConnectors are used to minimize object creation. - // A static trackingPoint minimizes Point creation. - static public OffsetConnector trackingConnector1 = new OffsetConnector(); - static public OffsetConnector trackingConnector2 = new OffsetConnector(); - static private Point trackingPoint = new Point(); - - // variables used in trackConnector() to control what trackingConnector to - // use - static private OffsetConnector firstConnector; - static private OffsetConnector lastConnector; - - // need GridConstraint of view - static private DrawingView view; - - // The variable fOwnerBox preserves the owner's previous display box; - // it is used to maintain line orientations during resizing and to - // minimize Rectangle creation. - private transient Rectangle fOwnerBox; - - /** - * Called when a ConnectionTool starts a new connection. (ConnectionTool - * MouseDown event). - * - * @param drawingView - - * the current DrawingView; needed for it's GridConstrainer - */ - public void reset(DrawingView drawingView) { - if (this == trackingConnector1) { - view = drawingView; - firstConnector = null; - lastConnector = null; - trackingConnector1.fOwner = null; - trackingConnector2.fOwner = null; - } - } - - /** - * Use this method to create new OffsetConnectors. - * - * <p> - * Returns a tracking Connector initialized to the required owner and - * location. The trackingConnector will create a new connector when it's - * method finalizeConnector() is called. - * - * <p> - * This method depends on trackingConnector1.reset() resetting the - * trackingConnectors - * - * @see finalizeConnector(boolean start) - * - * @param owner - the owning figure - * @param x - x co-ordinate - * @param y - y co-ordinate - * @return - either trackingConnector1 or trackingConnector2 (if 1 is in use) - */ - static public OffsetConnector trackConnector(Figure owner, int x, int y) { - OffsetConnector trackingConnector = trackingConnector1; - //This method depends on reset() nullifying firstConnector and - //lastConnector. It also depends on the tracking connector's owner - //being set to null in reset(). Otherwise fOwner and fOwnerBox would - // have - // to be set unconditionally and would then create a Rectangle on every - // call. - if (firstConnector != null && owner != trackingConnector1.owner()) { - trackingConnector = trackingConnector2; - } - - if (trackingConnector.fOwner != owner) { - trackingConnector.fOwner = owner; - trackingConnector.fOwnerBox = owner.displayBox(); - } - if (firstConnector == null) { - firstConnector = trackingConnector; - } - lastConnector = trackingConnector; - return trackingConnector.calculateFigureConstrainedOffsets(x, y); - } - - /** - * Constructs a connector that has no owner. It is used internally to - * resurrect a connector from a StorableOutput and to create the static - * tracking connectors. - */ - public OffsetConnector() { - OffsetLocator loc = new OffsetLocator(RelativeLocator.northWest()); - myLocator = loc; - fOwner = null; - fOwnerBox = new Rectangle(); - //System.out.println("OffsetConnector()-Tracking Only"); - } - - /** - * Constructs an OffsetConnector with the given owner and given location. - * It is called only by the finalizeConnector method; - * - * @param owner - * @param offsetX - * @param offsetY - */ - private OffsetConnector(Figure owner, int offsetX, int offsetY) { - super(owner, null); - OffsetLocator loc = new OffsetLocator(RelativeLocator.northWest(), offsetX, offsetY); - myLocator = loc; - fOwnerBox = owner.displayBox(); - //System.out.println("OffsetConnector(" + owner.toString()+","+offsetX - // +","+offsetY+")"); - } - - /** - * Returns a newly created OffsetConnector for tracking connectors. The - * tracking connector's owner and offsets are copied to the new connector. - * <p> - * Existing non-tracking connectors are returned unchanged without side - * effects. - * <p> - * This method is called by the connectStart(Connector) and the - * connectEnd(Connector) methods of the LineConnection object - * - * @see LineConnection - * - * @param start - - * a boolean indicating whether the receiver is a start or end - * Connector - * @return - the receiver unchanged if it is not a tracking connector; a - * new Offset connector if this is a tracking connector. - */ - public Connector finalizeConnector(boolean start) { - if ((this != OffsetConnector.trackingConnector1) - && (this != OffsetConnector.trackingConnector2)) { - return this; - } - OffsetLocator l = (OffsetLocator) myLocator; - OffsetConnector o = new OffsetConnector(owner(), l.fOffsetX, l.fOffsetY); - - // an adjustment to the end connector that helps draw vertical or - // horizontal lines. - // This adjustment applies only to the initial rendering of the line - // and has no - // subsequent effect - // N.B. trackingConnector2 is used iff 2 connectors needed ... new line - // connection - if (this == OffsetConnector.trackingConnector2) { - int p1X = trackingConnector1.locateX(); - int p1Y = trackingConnector1.locateY(); - int p2X = locateX(); - int p2Y = locateY(); - if (Math.abs(p1X - p2X) <= 8) p2X = p1X; - if (Math.abs(p1Y - p2Y) <= 8) p2Y = p1Y; - l = (OffsetLocator) o.myLocator; - l.fOffsetX = Geom.range(0, fOwnerBox.width, p2X - fOwnerBox.x); - l.fOffsetY = Geom.range(0, fOwnerBox.height, p2Y - fOwnerBox.y); - } - return o; - } - - /** - * Resets offsets for an existing OffsetConnector. Called when dragging a - * ChangeConnectionHandle. - * - * @see org.jhotdraw.standard.ChangeConnectionHandle - * - * @param x - - * x coordinate of point moved to - * @param y - - * y coordinate of point moved to - * @see org.jhotdraw.framework.Connector#connectorMovedTo(int, int) - */ - public Point connectorMovedTo(int x, int y) { - calculateFigureConstrainedOffsets(x, y); - - // adjustment to make it easier for user to position point - // will use x or y parameters under certain conditions overriding - // calculated point - // only applies to sides of figure & the adjusted point will still lie - // on appropriate side - int px = locateX(); - int py = locateY(); - OffsetLocator l = (OffsetLocator) myLocator; - if (owner() instanceof RectangleFigure) { - if (Math.abs(py - y) <= 3) { - if (l.fOffsetX == 0 || l.fOffsetX == fOwnerBox.width) { - // can use y - l.fOffsetY = Geom.range(0, fOwnerBox.height, y - fOwnerBox.y); - } - } - if (Math.abs(px - x) <= 3) { - if (l.fOffsetY == 0 || l.fOffsetY == fOwnerBox.height) { - // can use x - l.fOffsetX = Geom.range(0, fOwnerBox.width, x - fOwnerBox.x); - } - } - } - return new Point(locateX(), locateY()); - } - - /** - * Gets the connection point. If the owner is resized the connection points - * are (visually) preserved provided they lie on the box of the resized - * figure. - * - * @see org.jhotdraw.standard.AbstractConnector#findPoint(org.jhotdraw.framework.ConnectionFigure) - */ - protected Point findPoint(ConnectionFigure connection) { - Rectangle r = owner().displayBox(); - if (fOwnerBox.width == 0 && fOwnerBox.height == 0) { - // for deSerialization - fOwnerBox = r; - } - OffsetLocator l = (OffsetLocator) myLocator; - Point p1 = locate(connection); - - // if not resized then no adjustments needed - if (fOwnerBox.width == r.width && fOwnerBox.height == r.height) { - fOwnerBox = r; - //System.out.println("findPoint - " +this.toString() +":"+ - // p1.toString()); - return p1; - } - - // ???? - if (owner() instanceof EllipseFigure) { - calculateFigureConstrainedOffsets(p1.x, p1.y); - fOwnerBox = r; - return p1; - } - //get the point (use previous box with offsets) - p1.x = fOwnerBox.x + l.fOffsetX; - p1.y = fOwnerBox.y + l.fOffsetY; - - if (l.fOffsetX == 0) { - p1.x = r.x; - } - else if (l.fOffsetX == fOwnerBox.width) { - p1.x = r.x + r.width; - } - - if (l.fOffsetY == 0) { - p1.y = r.y; - } - else if (l.fOffsetY == fOwnerBox.height) { - p1.y = r.y + r.height; - } - - if (view != null && view.getConstrainer() != null) { - p1 = view.getConstrainer().constrainPoint(p1); - } - l.fOffsetX = Geom.range(0, r.width, p1.x - r.x); - l.fOffsetY = Geom.range(0, r.height, p1.y - r.y); - fOwnerBox = r; - //System.out.println("findPoint(x) - " +this.toString() +":"+ - // p1.toString()); - return p1; - } - - /** - * @return the connector Point - */ - protected Point locate(ConnectionFigure connection) { - return myLocator.locate(owner()); - } - - /** - * @return the x-coordinate of this connector - */ - public int locateX() { - OffsetLocator l = (OffsetLocator) myLocator; - return fOwnerBox.x + l.fOffsetX; - } - - /** - * @return the y-coordinate of this connector - */ - public int locateY() { - OffsetLocator l = (OffsetLocator) myLocator; - return fOwnerBox.y + l.fOffsetY; - } - - /** - * Constrains the point (x,y) to the figure and calculates the offsets for - * the resulting constrained point. - * - * @param x - x coordinate - * @param y - y coordinate - */ - public OffsetConnector calculateFigureConstrainedOffsets(int x, int y) { - // minimize Point, Rectangle & other object creation - // as this method is called by the trackConnector() method. - trackingPoint = calculateFigureConstrainedTrackingPoint(x, y); - OffsetLocator l = (OffsetLocator) myLocator; - l.fOffsetX = trackingPoint.x - fOwnerBox.x; - l.fOffsetY = trackingPoint.y - fOwnerBox.y; - return this; - } - - /** - * Constrains the point (x,y) to the figure and returns a constrained - * point. This method can be overridden for different figure types or - * different constraining policies. - * <p> - * For efficiency reasons the <em>same</em> point object is returned from - * every call. Be careful not to publicly expose this internal tracking - * point when overriding. - * <p> - * This method is NOT thread safe. - * - * @param x - x coordinate - * @param y - y coordinate - * @return internal tracking point containing the constrained coordinates - */ - protected Point calculateFigureConstrainedTrackingPoint(int x, int y) { - // minimize Point, Rectangle & other object creation - trackingPoint.x = x; - trackingPoint.y = y; - if (view != null && view.getConstrainer() != null) { - trackingPoint = view.getConstrainer().constrainPoint(trackingPoint); - } - - if (!(owner() instanceof EllipseFigure)) { - trackingPoint = Geom.angleToPoint(fOwnerBox, Geom - .pointToAngle(fOwnerBox, trackingPoint)); - } - else { - trackingPoint = Geom.ovalAngleToPoint(fOwnerBox, Geom.pointToAngle(fOwnerBox, - trackingPoint)); - } - return trackingPoint; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/OffsetLocator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/OffsetLocator.java deleted file mode 100644 index 34a05bcab..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/OffsetLocator.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * @(#)OffsetLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import java.io.IOException; -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; - -/** - * A locator to offset another Locator. - * @see Locator - * - * @version <$CURRENT_VERSION$> - */ -public class OffsetLocator extends AbstractLocator { - - /* - * Serialization support. - */ - private static final long serialVersionUID = 2679950024611847621L; - private int offsetLocatorSerializedDataVersion = 1; - - private Locator fBase; - - protected int fOffsetX; - protected int fOffsetY; - - public OffsetLocator() { - fBase = null; - fOffsetX = 0; - fOffsetY = 0; - } - - public OffsetLocator(Locator base) { - this(); - fBase = base; - } - - public OffsetLocator(Locator base, int offsetX, int offsetY) { - this(base); - fOffsetX = offsetX; - fOffsetY = offsetY; - } - - public Point locate(Figure owner) { - Point p = fBase.locate(owner); - p.x += fOffsetX; - p.y += fOffsetY; - return p; - } - - public void moveBy(int dx, int dy) { - fOffsetX += dx; - fOffsetY += dy; - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(fOffsetX); - dw.writeInt(fOffsetY); - dw.writeStorable(fBase); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fOffsetX = dr.readInt(); - fOffsetY = dr.readInt(); - fBase = (Locator)dr.readStorable(); - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/OrderedFigureElement.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/OrderedFigureElement.java deleted file mode 100644 index 9456fdc63..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/OrderedFigureElement.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * @(#)OrderFigureElement.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.Figure; - -/** - * @author WMG (INIT Copyright (C) 2000 All rights reserved) - * @version <$CURRENT_VERSION$> - */ -class OrderedFigureElement implements Comparable { - - //_________________________________________________________VARIABLES - - private Figure _theFigure; - private int _nZ; - - //______________________________________________________CONSTRUCTORS - - public OrderedFigureElement(Figure aFigure, int nZ) { - _theFigure = aFigure; - _nZ = nZ; - } - - //____________________________________________________PUBLIC METHODS - - public Figure getFigure() { - return _theFigure; - } - - public int getZValue() { - return _nZ; - } - - public int compareTo(Object o) { - OrderedFigureElement ofe = (OrderedFigureElement) o; - if (_nZ == ofe.getZValue()) { - return 0; - } - - if (_nZ > ofe.getZValue()) { - return 1; - } - - return -1; - } - - //_______________________________________________________________END - -} //end of class OrderedFigureElement diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/PasteCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/PasteCommand.java deleted file mode 100644 index 27c1b6273..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/PasteCommand.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * @(#)PasteCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; -import java.awt.*; - -/** - * Command to insert the clipboard into the drawing. - * - * @see Clipboard - * - * @version <$CURRENT_VERSION$> - */ -public class PasteCommand extends FigureTransferCommand { - - /** - * Constructs a paste command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public PasteCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - Point lastClick = view().lastClick(); - FigureSelection selection = (FigureSelection)Clipboard.getClipboard().getContents(); - if (selection != null) { - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures( - (FigureEnumerator)selection.getData(StandardFigureSelection.TYPE)); - - if (!getUndoActivity().getAffectedFigures().hasNextFigure()) { - setUndoActivity(null); - return; - } - - Rectangle r = getBounds(getUndoActivity().getAffectedFigures()); - view().clearSelection(); - - // get an enumeration of inserted figures - FigureEnumeration fe = insertFigures(getUndoActivity().getAffectedFigures(), lastClick.x-r.x, lastClick.y-r.y); - getUndoActivity().setAffectedFigures(fe); - - view().checkDamage(); - } - } - - public boolean isExecutableWithView() { - return Clipboard.getClipboard().getContents() != null; - } - - private Rectangle getBounds(FigureEnumeration fe) { - Rectangle r = fe.nextFigure().displayBox(); - while (fe.hasNextFigure()) { - r.add(fe.nextFigure().displayBox()); - } - return r; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new PasteCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - DeleteFromDrawingVisitor deleteVisitor = new DeleteFromDrawingVisitor(getDrawingView().drawing()); - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().visit(deleteVisitor); - } - - getDrawingView().clearSelection(); - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - getDrawingView().clearSelection(); - setAffectedFigures(getDrawingView().insertFigures( - getAffectedFigures(), 0, 0, false)); - - return true; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/PeripheralLocator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/PeripheralLocator.java deleted file mode 100644 index 7f12908e6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/PeripheralLocator.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * @(#)PeripheralLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.Point; -import org.jhotdraw.framework.Figure; -import java.awt.*; -import java.lang.Math; - -/** - * @author C.L.Gilbert <dnoyeb@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class PeripheralLocator extends AbstractLocator { - private static int CORNERSPACE = 1; - private Figure fOwner; - private int fPPS; - private int fIndex; - - private PeripheralLocator() { - // do nothing: for JDO-compliance only - } - - public PeripheralLocator(int pointsPerSide, int index) { - fPPS = pointsPerSide; - fIndex = index; - if (index >= pointsPerSide *4) { - throw new IllegalArgumentException("Index must be within the range of points starting with index = 0."); - } - } - - public Point locate(Figure parm1) { - Rectangle r = parm1.displayBox(); - /* calculate total length for spacing */ - //int circumference = r.width*2 + r.height*2; - /* subtrace corners spacing */ - //int insets = 2 * 4 * CORNERSPACE; - - //int spacing = circumference/(fPPS*4 +4); - float hSpacing = (float)r.width / (fPPS +1); - float vSpacing = (float)r.height / (fPPS +1); - - int x = 0; - int y = 0; - if (fIndex < fPPS) { - //north - x = Math.round((fIndex + 1.0f ) * hSpacing); - y = 0; - } - else if (fIndex < (fPPS*2)) { - //east - x = Math.round((fPPS + 1 ) * hSpacing) ;//r.width; - y = Math.round((fIndex +1 - fPPS) * vSpacing); //should be negative? - } - else if (fIndex < (fPPS*3)) { - //south - x = Math.round(((fPPS + 1 ) - (fIndex +1 - fPPS*2))* hSpacing); - y = Math.round((fPPS + 1 )* vSpacing) /*r.height*/; - } - else { - //west - x = 0; - y = Math.round(((fPPS +1) - (fIndex +1 - fPPS*3))*vSpacing); - } - x = x+r.x; - y = y+r.y; - return new Point((int)x, (int)y); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/QuadTree.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/QuadTree.java deleted file mode 100644 index c9e537533..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/QuadTree.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * @(#)QuadTree.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.util.CollectionsFactory; - -import java.awt.geom.Rectangle2D; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.io.Serializable; - -/** - * @author WMG (INIT Copyright (C) 2000 All rights reserved) - * @version <$CURRENT_VERSION$> - */ -class QuadTree implements Serializable { - - //_________________________________________________________VARIABLES - - private Rectangle2D _absoluteBoundingRectangle2D = new Rectangle2D.Double(); - private int _nMaxTreeDepth; - private Hashtable _theHashtable = new Hashtable(); - private Hashtable _outsideHashtable = new Hashtable(); - private QuadTree _nwQuadTree; - private QuadTree _neQuadTree; - private QuadTree _swQuadTree; - private QuadTree _seQuadTree; - - //______________________________________________________CONSTRUCTORS - - public QuadTree(Rectangle2D absoluteBoundingRectangle2D) { - this(2, absoluteBoundingRectangle2D); - } - - public QuadTree(int nMaxTreeDepth, Rectangle2D - absoluteBoundingRectangle2D) { - _init(nMaxTreeDepth, absoluteBoundingRectangle2D); - } - - //____________________________________________________PUBLIC METHODS - - public void add(Object anObject, Rectangle2D absoluteBoundingRectangle2D) { - if (_nMaxTreeDepth == 1) { - if (absoluteBoundingRectangle2D.intersects(_absoluteBoundingRectangle2D)) { - _theHashtable.put(anObject, absoluteBoundingRectangle2D); - } - else { - _outsideHashtable.put(anObject, absoluteBoundingRectangle2D); - } - return; - } - - boolean bNW = absoluteBoundingRectangle2D.intersects( - _nwQuadTree.getAbsoluteBoundingRectangle2D()); - - boolean bNE = absoluteBoundingRectangle2D.intersects( - _neQuadTree.getAbsoluteBoundingRectangle2D()); - - boolean bSW = absoluteBoundingRectangle2D.intersects( - _swQuadTree.getAbsoluteBoundingRectangle2D()); - - boolean bSE = absoluteBoundingRectangle2D.intersects( - _seQuadTree.getAbsoluteBoundingRectangle2D()); - - int nCount = 0; - - if (bNW == true) { - nCount++; - } - if (bNE == true) { - nCount++; - } - if (bSW == true) { - nCount++; - } - if (bSE == true) { - nCount++; - } - - if (nCount > 1) { - _theHashtable.put(anObject, absoluteBoundingRectangle2D); - return; - } - if (nCount == 0) { - _outsideHashtable.put(anObject, absoluteBoundingRectangle2D); - return; - } - - if (bNW == true) { - _nwQuadTree.add(anObject, absoluteBoundingRectangle2D); - } - if (bNE == true) { - _neQuadTree.add(anObject, absoluteBoundingRectangle2D); - } - if (bSW == true) { - _swQuadTree.add(anObject, absoluteBoundingRectangle2D); - } - if (bSE == true) { - _seQuadTree.add(anObject, absoluteBoundingRectangle2D); - } - } - - public Object remove(Object anObject) { - Object returnObject = _theHashtable.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - if (_nMaxTreeDepth > 1) { - returnObject = _nwQuadTree.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - returnObject = _neQuadTree.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - returnObject = _swQuadTree.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - returnObject = _seQuadTree.remove(anObject); - if (returnObject != null) { - return returnObject; - } - } - - returnObject = _outsideHashtable.remove(anObject); - if (returnObject != null) { - return returnObject; - } - - return null; - } - - - public void clear() { - _theHashtable.clear(); - _outsideHashtable.clear(); - if (_nMaxTreeDepth > 1) { - _nwQuadTree.clear(); - _neQuadTree.clear(); - _swQuadTree.clear(); - _seQuadTree.clear(); - } - } - - public int getMaxTreeDepth() { - return _nMaxTreeDepth; - } -/* - public FigureEnumeration getAll() { - List l = CollectionsFactory.current().createList(); - l.add(_theHashtable.keySet()); - l.add(_outsideHashtable.keySet()); - - if (_nMaxTreeDepth > 1) { - l.add(_nwQuadTree.getAll().toList()); - l.add(_neQuadTree.getAll().toList()); - l.add(_swQuadTree.getAll().toList()); - l.add(_seQuadTree.getAll().toList()); - } - - return new FigureEnumerator(l); - } -*/ - public FigureEnumeration getAllWithin(Rectangle2D r) { - List l = CollectionsFactory.current().createList(); - for (Iterator ii = _outsideHashtable.keySet().iterator(); ii.hasNext(); ) { - Object anObject = ii.next(); - Rectangle2D itsAbsoluteBoundingRectangle2D = (Rectangle2D) - _outsideHashtable.get(anObject); - - if (itsAbsoluteBoundingRectangle2D.intersects(r)) { - l.add(anObject); - } - } - - if (_absoluteBoundingRectangle2D.intersects(r)) { - for(Iterator i = _theHashtable.keySet().iterator(); i.hasNext(); ) { - Object anObject = i.next(); - Rectangle2D itsAbsoluteBoundingRectangle2D = (Rectangle2D) - _theHashtable.get(anObject); - - if (itsAbsoluteBoundingRectangle2D.intersects(r)) { - l.add(anObject); - } - } - - if (_nMaxTreeDepth > 1) { - // bug-fix: 698988 - figures(Rectangle viewRectangle) bug - addFigureEnumerationToList(l, _nwQuadTree.getAllWithin(r)); - addFigureEnumerationToList(l, _neQuadTree.getAllWithin(r)); - addFigureEnumerationToList(l, _swQuadTree.getAllWithin(r)); - addFigureEnumerationToList(l, _seQuadTree.getAllWithin(r)); - } - } - - return new FigureEnumerator(l); - } - - public Rectangle2D getAbsoluteBoundingRectangle2D() { - return _absoluteBoundingRectangle2D; - } - - //___________________________________________________PRIVATE METHODS - - private void _init(int nMaxTreeDepth, Rectangle2D absoluteBoundingRectangle2D) { - _absoluteBoundingRectangle2D.setRect(absoluteBoundingRectangle2D); - _nMaxTreeDepth = nMaxTreeDepth; - - if (_nMaxTreeDepth > 1) { - _nwQuadTree = new QuadTree(_nMaxTreeDepth-1, - _makeNorthwest(absoluteBoundingRectangle2D)); - _neQuadTree = new QuadTree(_nMaxTreeDepth-1, - _makeNortheast(absoluteBoundingRectangle2D)); - _swQuadTree = new QuadTree(_nMaxTreeDepth-1, - _makeSouthwest(absoluteBoundingRectangle2D)); - _seQuadTree = new QuadTree(_nMaxTreeDepth-1, - _makeSoutheast(absoluteBoundingRectangle2D)); - } - } - - private Rectangle2D _makeNorthwest(Rectangle2D r) { - return new Rectangle2D.Double(r.getX(), r.getY(), r.getWidth() / 2.0, r.getHeight() / 2.0); - } - - private Rectangle2D _makeNortheast(Rectangle2D r) { - return new Rectangle2D.Double(r.getX() + r.getWidth() / 2.0, - r.getY(), r.getWidth() / 2.0, r.getHeight() / 2.0); - } - - private Rectangle2D _makeSouthwest(Rectangle2D r) { - return new Rectangle2D.Double(r.getX(), r.getY() + r.getHeight() / 2.0, - r.getWidth() / 2.0, r.getHeight() / 2.0); - } - - private Rectangle2D _makeSoutheast(Rectangle2D r) { - return new Rectangle2D.Double(r.getX() + r.getWidth() / 2.0, - r.getY() + r.getHeight() / 2.0, r.getWidth() / 2.0, - r.getHeight() / 2.0); - } - - private void addFigureEnumerationToList(List l, FigureEnumeration fe) { - while (fe.hasNextFigure()) { - l.add(fe.nextFigure()); - } - } - -//_______________________________________________________________END - -} //end of class QuadTree diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/RelativeLocator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/RelativeLocator.java deleted file mode 100644 index 5cf778114..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/RelativeLocator.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * @(#)RelativeLocator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import java.io.IOException; -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; - -/** - * A locator that specfies a point that is relative to the bounds - * of a figure. - * - * @see Locator - * - * @version <$CURRENT_VERSION$> - */ -public class RelativeLocator extends AbstractLocator { - /* - * Serialization support. - */ - private static final long serialVersionUID = 2619148876087898602L; - private int relativeLocatorSerializedDataVersion = 1; - - double fRelativeX; - double fRelativeY; - - public RelativeLocator() { - fRelativeX = 0.0; - fRelativeY = 0.0; - } - - public boolean equals(Object o) { - if (RelativeLocator.class.isInstance(o)) { - RelativeLocator rl = (RelativeLocator) o; - if ((rl.fRelativeX) == fRelativeX && (rl.fRelativeY == fRelativeY)) { - return true; - } - } - return false; - } - - public RelativeLocator(double relativeX, double relativeY) { - fRelativeX = relativeX; - fRelativeY = relativeY; - } - - public Point locate(Figure owner) { - Rectangle r = owner.displayBox(); - return new Point( - r.x + (int)(r.width * fRelativeX), - r.y + (int)(r.height * fRelativeY) - ); - } - - public void write(StorableOutput dw) { - super.write(dw); - dw.writeDouble(fRelativeX); - dw.writeDouble(fRelativeY); - } - - public void read(StorableInput dr) throws IOException { - super.read(dr); - fRelativeX = dr.readDouble(); - fRelativeY = dr.readDouble(); - } - - static public Locator east() { - return new RelativeLocator(1.0, 0.5); - } - - /** - * North. - */ - static public Locator north() { - return new RelativeLocator(0.5, 0.0); - } - - /** - * West. - */ - static public Locator west() { - return new RelativeLocator(0.0, 0.5); - } - - /** - * North east. - */ - static public Locator northEast() { - return new RelativeLocator(1.0, 0.0); - } - - /** - * North west. - */ - static public Locator northWest() { - return new RelativeLocator(0.0, 0.0); - } - - /** - * South. - */ - static public Locator south() { - return new RelativeLocator(0.5, 1.0); - } - - /** - * South east. - */ - static public Locator southEast() { - return new RelativeLocator(1.0, 1.0); - } - - /** - * South west. - */ - static public Locator southWest() { - return new RelativeLocator(0.0, 1.0); - } - - /** - * Center. - */ - static public Locator center() { - return new RelativeLocator(0.5, 0.5); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ReverseFigureEnumerator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ReverseFigureEnumerator.java deleted file mode 100644 index 020fec542..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ReverseFigureEnumerator.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * @(#)ReverseFigureEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.util.ReverseListEnumerator; -import org.jhotdraw.framework.*; - -import java.util.Iterator; -import java.util.List; - -/** - * An Enumeration that enumerates a Collection of figures back (size-1) to front (0). - * - * @version <$CURRENT_VERSION$> - */ -public final class ReverseFigureEnumerator implements FigureEnumeration { - private Iterator myIterator; - private List myInitialList; - - public ReverseFigureEnumerator(List l) { - myInitialList = l; - reset(); - } - - /** - * Returns true if the enumeration contains more elements; false - * if its empty. - */ - public boolean hasNextFigure() { - return myIterator.hasNext(); - } - - /** - * Returns the next element casted as a figure of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Figure nextFigure() { - return (Figure)myIterator.next(); - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - myIterator = new ReverseListEnumerator(myInitialList); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/SelectAllCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/SelectAllCommand.java deleted file mode 100644 index c8fb51682..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/SelectAllCommand.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * @(#)SelectAllCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.UndoableAdapter; -import org.jhotdraw.util.Undoable; - -/** - * Command to select all figures in a view. - * - * @version <$CURRENT_VERSION$> - */ -public class SelectAllCommand extends AbstractCommand { - - /** - * Constructs a select all command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public SelectAllCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selection()); - view().addToSelectionAll(view().drawing().figures()); - view().checkDamage(); - } - - /** - * Used in enabling the properties menu item. - * SelectAll menu item will be enabled only when there ia atleast one figure - * in the selected drawing view. - */ - public boolean isExecutableWithView() { - FigureEnumeration fe = view().drawing().figures(); - if (fe.hasNextFigure() && (fe.nextFigure() != null)) { - return true; - } - - return false; - } - - /** - * Factory method for undo activity - */ - protected Undoable createUndoActivity() { - return new SelectAllCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - getDrawingView().clearSelection(); - getDrawingView().addToSelectionAll(getAffectedFigures()); - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (isRedoable()) { - getDrawingView().addToSelectionAll(getDrawingView().drawing().figures()); - return true; - } - - return false; - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/SelectAreaTracker.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/SelectAreaTracker.java deleted file mode 100644 index b9e90d43c..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/SelectAreaTracker.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * @(#)SelectAreaTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import java.awt.event.MouseEvent; -import org.jhotdraw.framework.*; - -/** - * SelectAreaTracker implements a rubberband selection of an area. - * - * @version <$CURRENT_VERSION$> - */ -public class SelectAreaTracker extends AbstractTool { - /** Selected rectangle in physical coordinates space */ - private Rectangle fSelectGroup; - private Color fRubberBandColor; - - public SelectAreaTracker(DrawingEditor newDrawingEditor) { - this(newDrawingEditor, Color.black); - } - - public SelectAreaTracker(DrawingEditor newDrawingEditor, Color rubberBandColor) { - super(newDrawingEditor); - fRubberBandColor = rubberBandColor; - } - - public void mouseDown(MouseEvent e, int x, int y) { - // use event coordinates to supress any kind of - // transformations like constraining points to a grid - super.mouseDown(e, e.getX(), e.getY()); - rubberBand(getAnchorX(), getAnchorY(), getAnchorX(), getAnchorY()); - } - - public void mouseDrag(MouseEvent e, int x, int y) { - super.mouseDrag(e, x, y); - eraseRubberBand(); - rubberBand(getAnchorX(), getAnchorY(), x, y); - } - - public void mouseUp(MouseEvent e, int x, int y) { - eraseRubberBand(); - selectGroup(e.isShiftDown()); - super.mouseUp(e, x, y); - } - - private void rubberBand(int x1, int y1, int x2, int y2) { - fSelectGroup = new Rectangle(new Point(x1, y1)); - fSelectGroup.add(new Point(x2, y2)); - drawXORRect(fSelectGroup); - } - - private void eraseRubberBand() { - drawXORRect(fSelectGroup); - } - - private void drawXORRect(Rectangle r) { - Graphics g = view().getGraphics(); - if ( g != null ) { - try { - if (g instanceof Graphics2D) { - // Do dotted-line in Java2 - Stroke dashedStroke = new BasicStroke(1.0f, - BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, - 10.0f, new float[] {5f, 5f, 5f, 5f}, 5.0f); - ((Graphics2D) g).setStroke(dashedStroke); - } - - g.setXORMode(view().getBackground()); - g.setColor(fRubberBandColor); - g.drawRect(r.x, r.y, r.width, r.height); - } - finally { - g.dispose(); // SF bugtracker id: #490663 - } - } - } - - private void selectGroup(boolean toggle) { - FigureEnumeration fe = drawing().figuresReverse(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - Rectangle r2 = figure.displayBox(); - if (fSelectGroup.contains(r2.x, r2.y) && fSelectGroup.contains(r2.x+r2.width, r2.y+r2.height)) { - if (toggle) { - view().toggleSelection(figure); - } - else { - view().addToSelection(figure); - } - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/SelectionTool.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/SelectionTool.java deleted file mode 100644 index 1866eae90..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/SelectionTool.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)SelectionTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.UndoableTool; -import org.jhotdraw.util.UndoableHandle; -import org.jhotdraw.contrib.dnd.DragNDropTool; -import java.awt.event.MouseEvent; - -/** - * Tool to select and manipulate figures. - * A selection tool is in one of three states, e.g., background - * selection, figure selection, handle manipulation. The different - * states are handled by different child tools. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld032.htm>State</a></b><br> - * SelectionTool is the StateContext and child is the State. - * The SelectionTool delegates state specific - * behavior to its current child tool. - * <hr> - * - * @version <$CURRENT_VERSION$> - */ - -public class SelectionTool extends AbstractTool { - - private Tool myDelegationTool = null; - - public SelectionTool(DrawingEditor newDrawingEditor) { - super(newDrawingEditor); - } - - /** - * Handles mouse down events and starts the corresponding tracker. - */ - public void mouseDown(MouseEvent e, int x, int y) { - super.mouseDown(e, x, y); - // on MS-Windows NT: AWT generates additional mouse down events - // when the left button is down && right button is clicked. - // To avoid dead locks we ignore such events - if (getDelegateTool() != null) { - return; - } - - view().freezeView(); - - Handle handle = view().findHandle(e.getX(), e.getY()); - if (handle != null) { - setDelegateTool(createHandleTracker(view(), handle)); - } - else { - Figure figure = drawing().findFigure(e.getX(), e.getY()); - if (figure != null) { - setDelegateTool(createDragTracker(figure)); - } - else { - if (!e.isShiftDown()) { - view().clearSelection(); - } - setDelegateTool(createAreaTracker()); - } - } - getDelegateTool().activate(); - getDelegateTool().mouseDown(e, x, y); - } - - /** - * Handles mouse moves (if the mouse button is up). - * Switches the cursors depending on whats under them. - */ - public void mouseMove(MouseEvent evt, int x, int y) { - if (evt.getSource() == getActiveView() ) { - DragNDropTool.setCursor(evt.getX(), evt.getY(), getActiveView()); - } - } - - /** - * Handles mouse drag events. The events are forwarded to the - * current tracker. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - if (getDelegateTool() != null) { // JDK1.1 doesn't guarantee mouseDown, mouseDrag, mouseUp - getDelegateTool().mouseDrag(e, x, y); - } - } - - /** - * Handles mouse up events. The events are forwarded to the - * current tracker. - */ - public void mouseUp(MouseEvent e, int x, int y) { - if (getDelegateTool() != null) { // JDK1.1 doesn't guarantee mouseDown, mouseDrag, mouseUp - getDelegateTool().mouseUp(e, x, y); - getDelegateTool().deactivate(); - setDelegateTool(null); - } - if (view() != null) { - view().unfreezeView(); - editor().figureSelectionChanged(view()); - } - } - - /** - * Factory method to create a Handle tracker. It is used to track a handle. - */ - protected Tool createHandleTracker(DrawingView view, Handle handle) { - return new HandleTracker(editor(), new UndoableHandle(handle)); - } - - /** - * Factory method to create a Drag tracker. It is used to drag a figure. - */ - protected Tool createDragTracker(Figure f) { - return new UndoableTool(new DragTracker(editor(), f)); - } - - /** - * Factory method to create an area tracker. It is used to select an - * area. - */ - protected Tool createAreaTracker() { - return new SelectAreaTracker(editor()); - } - - protected Tool getDelegateTool() { - return myDelegationTool; - } - - protected final void setDelegateTool(Tool newDelegateTool) { - myDelegationTool = newDelegateTool; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/SendToBackCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/SendToBackCommand.java deleted file mode 100644 index d1c555fb1..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/SendToBackCommand.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * @(#)SendToBackCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.UndoableAdapter; -import org.jhotdraw.util.Undoable; -import java.util.*; - -/** - * A command to send the selection to the back of the drawing. - * - * @version <$CURRENT_VERSION$> - */ -public class SendToBackCommand extends AbstractCommand { - - /** - * Constructs a send to back command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public SendToBackCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - setUndoActivity(createUndoActivity()); - getUndoActivity().setAffectedFigures(view().selectionZOrdered()); - FigureEnumeration fe = getUndoActivity().getAffectedFigures(); - while (fe.hasNextFigure()) { - view().drawing().sendToBack(fe.nextFigure()); - } - view().checkDamage(); - } - - protected boolean isExecutableWithView() { - return view().selectionCount() > 0; - } - - protected Undoable createUndoActivity() { - return new SendToBackCommand.UndoActivity(view()); - } - - public static class UndoActivity extends UndoableAdapter { - private Hashtable myOriginalLayers; - - public UndoActivity(DrawingView newDrawingView) { - super(newDrawingView); - myOriginalLayers = new Hashtable(); - setUndoable(true); - setRedoable(true); - } - - public boolean undo() { - if (!super.undo()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - Figure currentFigure = fe.nextFigure(); - int currentFigureLayer = getOriginalLayer(currentFigure); - getDrawingView().drawing().sendToLayer(currentFigure, currentFigureLayer); - } - - return true; - } - - public boolean redo() { - // do not call execute directly as the selection might has changed - if (!isRedoable()) { - return false; - } - - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - sendToCommand(fe.nextFigure()); - } - - return true; - } - - protected void sendToCommand(Figure f) { - getDrawingView().drawing().sendToBack(f); - } - - protected void addOriginalLayer(Figure affectedFigure, int newOriginalLayer) { - myOriginalLayers.put(affectedFigure, new Integer(newOriginalLayer)); - } - - protected int getOriginalLayer(Figure lookupAffectedFigure) { - return ((Integer)myOriginalLayers.get(lookupAffectedFigure)).intValue(); - } - - public void setAffectedFigures(FigureEnumeration fe) { - // first make copy of FigureEnumeration in superclass - super.setAffectedFigures(fe); - // then get new FigureEnumeration of copy to save attributes - FigureEnumeration copyFe = getAffectedFigures(); - while (copyFe.hasNextFigure()) { - Figure f = copyFe.nextFigure(); - int originalLayer = getDrawingView().drawing().getLayer(f); - addOriginalLayer(f, originalLayer); - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/SimpleUpdateStrategy.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/SimpleUpdateStrategy.java deleted file mode 100644 index e9c669766..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/SimpleUpdateStrategy.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * @(#)SimpleUpdateStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import org.jhotdraw.framework.*; - -/** - * The SimpleUpdateStrategy implements an update - * strategy that directly redraws a DrawingView. - * - * @see DrawingView - * - * @version <$CURRENT_VERSION$> - */ -public class SimpleUpdateStrategy implements Painter { - - /* - * Serialization support. In JavaDraw only the Drawing is serialized. - * However, for beans support SimpleUpdateStrategy supports - * serialization - */ - private static final long serialVersionUID = -7539925820692134566L; - - /** - * Draws the view contents. - */ - public void draw(Graphics g, DrawingView view) { - view.drawAll(g); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/SingleFigureEnumerator.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/SingleFigureEnumerator.java deleted file mode 100644 index cd5207a1e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/SingleFigureEnumerator.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)SingleFigureEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; - -/** - * An Enumeration that contains only a single Figures. An instance of this - * enumeration can be used only once to retrieve the figure as the figure - * is forgotten after the first retrieval. - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public final class SingleFigureEnumerator implements FigureEnumeration { - private Figure mySingleFigure; - private Figure myInitialFigure; - - public SingleFigureEnumerator(Figure newSingleFigure) { - myInitialFigure = newSingleFigure; - reset(); - } - - /** - * Returns true if the enumeration contains more elements; false - * if its empty. - */ - public boolean hasNextFigure() { - return mySingleFigure != null; - } - - /** - * Returns the next element of the enumeration. Calls to this - * method will enumerate successive elements. - * @exception java.util.NoSuchElementException If no more elements exist. - */ - public Figure nextFigure() { - Figure returnFigure = mySingleFigure; - mySingleFigure = null; - return returnFigure; - } - - /** - * Reset the enumeration so it can be reused again. However, the - * underlying collection might have changed since the last usage - * so the elements and the order may vary when using an enumeration - * which has been reset. - */ - public void reset() { - mySingleFigure = myInitialFigure; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/StandardDrawing.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/StandardDrawing.java deleted file mode 100644 index 53a1b17a8..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/StandardDrawing.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * @(#)StandardDrawing.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.CollectionsFactory; - -import java.awt.*; -import java.util.*; -import java.util.List; -import java.io.*; - -/** - * The standard implementation of the Drawing interface. - * - * @see Drawing - * - * @version <$CURRENT_VERSION$> - */ - -public class StandardDrawing extends CompositeFigure implements Drawing { - - - /** - * the registered listeners - */ - private transient List fListeners; - - /** - * boolean that serves as a condition variable - * to lock the access to the drawing. - * The lock is recursive and we keep track of the current - * lock holder. - */ - private transient Thread fDrawingLockHolder = null; - private String myTitle; - - /* - * Serialization support - */ - private static final long serialVersionUID = -2602151437447962046L; - private int drawingSerializedDataVersion = 1; - - /** - * Constructs the Drawing. - */ - public StandardDrawing() { - super(); - fListeners = CollectionsFactory.current().createList(2); - init(new Rectangle(-500, -500, 2000, 2000)); - } - - /** - * Adds a listener for this drawing. - */ - public void addDrawingChangeListener(DrawingChangeListener listener) { - if (fListeners == null) { - fListeners = CollectionsFactory.current().createList(2); - } - fListeners.add(listener); - } - - /** - * Removes a listener from this drawing. - */ - public void removeDrawingChangeListener(DrawingChangeListener listener) { - fListeners.remove(listener); - } - - /** - * Gets an enumeration with all listener for this drawing. - */ - public Iterator drawingChangeListeners() { - return fListeners.iterator(); - } - - /** - * Removes a figure from the figure list, but - * doesn't release it. Use this method to temporarily - * manipulate a figure outside of the drawing. - * - * @param figure that is part of the drawing and should be added - */ - public synchronized Figure orphan(Figure figure) { - Figure orphanedFigure = super.orphan(figure); - // ensure that we remove the top level figure in a drawing - if (orphanedFigure.listener() != null) { - Rectangle rect = invalidateRectangle(displayBox()); - orphanedFigure.listener().figureRequestRemove(new FigureChangeEvent(orphanedFigure, rect)); - } - return orphanedFigure; - } - - public synchronized Figure add(Figure figure) { - Figure addedFigure = super.add(figure); - if (addedFigure.listener() != null) { - Rectangle rect = invalidateRectangle(displayBox()); - addedFigure.listener().figureRequestUpdate(new FigureChangeEvent(figure, rect)); - return addedFigure; - } - return addedFigure; - } - - /** - * Invalidates a rectangle and merges it with the - * existing damaged area. - * @see FigureChangeListener - */ - public void figureInvalidated(FigureChangeEvent e) { - if (fListeners != null) { - for (int i = 0; i < fListeners.size(); i++) { - DrawingChangeListener l = (DrawingChangeListener)fListeners.get(i); - l.drawingInvalidated(new DrawingChangeEvent(this, e.getInvalidatedRectangle())); - } - } - } - - /** - * Forces an update of the drawing change listeners. - */ - public void fireDrawingTitleChanged() { - if (fListeners != null) { - for (int i = 0; i < fListeners.size(); i++) { - DrawingChangeListener l = (DrawingChangeListener)fListeners.get(i); - l.drawingTitleChanged(new DrawingChangeEvent(this, null)); - } - } - } - - /** - * Forces an update of the drawing change listeners. - */ - public void figureRequestUpdate(FigureChangeEvent e) { - if (fListeners != null) { - for (int i = 0; i < fListeners.size(); i++) { - DrawingChangeListener l = (DrawingChangeListener)fListeners.get(i); - l.drawingRequestUpdate(new DrawingChangeEvent(this, null)); - } - } - } - - /** - * Return's the figure's handles. This is only used when a drawing - * is nested inside another drawing. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(); - handles.add(new NullHandle(this, RelativeLocator.northWest())); - handles.add(new NullHandle(this, RelativeLocator.northEast())); - handles.add(new NullHandle(this, RelativeLocator.southWest())); - handles.add(new NullHandle(this, RelativeLocator.southEast())); - return new HandleEnumerator(handles); - } - - /** - * Gets the display box. This is the union of all figures. - */ - public Rectangle displayBox() { - if (fFigures.size() > 0) { - FigureEnumeration fe = figures(); - - Rectangle r = fe.nextFigure().displayBox(); - - while (fe.hasNextFigure()) { - r.add(fe.nextFigure().displayBox()); - } - return r; - } - return new Rectangle(0, 0, 0, 0); - } - - public void basicDisplayBox(Point p1, Point p2) { - } - - /** - * Acquires the drawing lock. - */ - public synchronized void lock() { - // recursive lock - Thread current = Thread.currentThread(); - if (fDrawingLockHolder == current) { - return; - } - while (fDrawingLockHolder != null) { - try { - wait(); - } - catch (InterruptedException ex) { } - } - fDrawingLockHolder = current; - } - - /** - * Releases the drawing lock. - */ - public synchronized void unlock() { - if (fDrawingLockHolder != null) { - fDrawingLockHolder = null; - notify(); - } - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - fListeners = CollectionsFactory.current().createList(2); - } - - public String getTitle() { - return myTitle; - } - - public void setTitle(String newTitle) { - myTitle = newTitle; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/StandardDrawingView.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/StandardDrawingView.java deleted file mode 100644 index f26e88361..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/StandardDrawingView.java +++ /dev/null @@ -1,1235 +0,0 @@ -/* - * @(#)StandardDrawingView.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import java.awt.dnd.DragGestureListener; -import java.awt.dnd.DragSourceListener; -import java.awt.event.*; -import java.awt.print.PrinterGraphics; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - -import javax.swing.JOptionPane; -import javax.swing.JPanel; - -import org.jhotdraw.contrib.AutoscrollHelper; -import org.jhotdraw.contrib.dnd.DNDHelper; -import org.jhotdraw.contrib.dnd.DNDInterface; -import org.jhotdraw.framework.*; -import org.jhotdraw.framework.Cursor; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.Command; -import org.jhotdraw.util.Geom; -import org.jhotdraw.util.UndoableCommand; - -/** - * The standard implementation of DrawingView. - * - * @see DrawingView - * @see Painter - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ -public class StandardDrawingView - extends JPanel - implements DrawingView, DNDInterface, java.awt.dnd.Autoscroll { - - /** - * The DrawingEditor of the view. - * @see #tool - */ - transient private DrawingEditor fEditor; - - /** - * the registered listeners for selection changes - */ - private transient List fSelectionListeners; - - /** - * The shown drawing. - */ - private Drawing fDrawing; - - /** - * the accumulated damaged area - */ - private transient Rectangle fDamage; - - /** - * The list of currently selected figures. - */ - transient private List fSelection; - - /** - * The shown selection handles. - */ - transient private List fSelectionHandles; - - /** - * The preferred size of the view - */ - - /** - * The position of the last mouse click - * inside the view. - */ - private Point fLastClick; - - /** - * A List of optional backgrounds. The list contains - * view painters that are drawn before the contents, - * that is in the background. - */ - private List fBackgrounds; - - /** - * A List of optional foregrounds. The list contains - * view painters that are drawn after the contents, - * that is in the foreground. - */ - private List fForegrounds; - - /** - * The update strategy used to repair the view. - */ - private Painter fUpdateStrategy; - - /** - * The grid used to constrain points for snap to - * grid functionality. - */ - private PointConstrainer fConstrainer; - - /** - * Scrolling increment - */ - public static final int MINIMUM_WIDTH = 400; - public static final int MINIMUM_HEIGHT = 300; - public static final int SCROLL_INCR = 100; - public static final int SCROLL_OFFSET = 10; - - private static int counter; - private int myCounter = counter; - - private DNDHelper dndh; - - /** - * Listener for mouse clicks. - */ - private MouseListener mouseListener; - - /** - * Listener for mouse movements. - */ - private MouseMotionListener motionListener; - - /** - * Listener for the keyboard. - */ - private KeyListener keyListener; - - /** - * Reflects whether the drawing view is in read-only mode (from a user's - * perspective). - */ - private boolean myIsReadOnly; - - /* - * Serialization support. In JavaDraw only the Drawing is serialized. - * However, for beans support StandardDrawingView supports - * serialization - */ - private static final long serialVersionUID = -3878153366174603336L; - private int drawingViewSerializedDataVersion = 1; - - /** - * Remembers the current tool tip location in order to support - * tool tips for a figure. - */ - private Point toolTipLocation; - - /** - * Constructs the view. - */ - public StandardDrawingView(DrawingEditor editor) { - this(editor, MINIMUM_WIDTH, MINIMUM_HEIGHT); - } - - public StandardDrawingView(DrawingEditor editor, int width, int height) { - setAutoscrolls(true); - counter++; - fEditor = editor; - // ricardo_padilha: changed from setSize(int, int) because it is not - // JScrollPane-friendly. - setPreferredSize(new Dimension(width, height)); - fSelectionListeners = CollectionsFactory.current().createList(); - addFigureSelectionListener(editor()); - setLastClick(new Point(0, 0)); - fConstrainer = null; - fSelection = CollectionsFactory.current().createList(); - // JFC/Swing uses double buffering automatically as default - setDisplayUpdate(createDisplayUpdate()); - // TODO: Test FastBufferedUpdateStrategy with JFC/Swing double buffering - //setDisplayUpdate(new FastBufferedUpdateStrategy()); - setBackground(Color.lightGray); - - addMouseListener(createMouseListener()); - addMouseMotionListener(createMouseMotionListener()); - addKeyListener(createKeyListener()); - } - - protected MouseListener createMouseListener() { - mouseListener = new DrawingViewMouseListener(); - return mouseListener; - } - - protected MouseMotionListener createMouseMotionListener() { - motionListener = new DrawingViewMouseMotionListener(); - return motionListener; - } - - protected KeyListener createKeyListener() { - keyListener = new DrawingViewKeyListener(); - return keyListener; - } - - /** - * Factory method which can be overriden by subclasses - */ - protected Painter createDisplayUpdate() { - return new SimpleUpdateStrategy(); - //return new ClippingUpdateStrategy(); - } - - /** - * Sets the view's editor. - */ - public void setEditor(DrawingEditor editor) { - fEditor = editor; - } - - /** - * Gets the current tool. - */ - public Tool tool() { - return editor().tool(); - } - - /** - * Gets the drawing. - */ - public Drawing drawing() { - return fDrawing; - } - - /** - * Sets and installs another drawing in the view. - */ - public void setDrawing(Drawing d) { - if (drawing() != null) { - clearSelection(); - drawing().removeDrawingChangeListener(this); - } - - fDrawing = d; - if (drawing() != null) { - drawing().addDrawingChangeListener(this); - } - - checkMinimumSize(); - repaint(); - } - - /** - * Gets the editor. - */ - public DrawingEditor editor() { - return fEditor; - } - - /** - * Adds a figure to the drawing. - * @return the added figure. - */ - public Figure add(Figure figure) { - return drawing().add(figure); - } - - /** - * Removes a figure from the drawing. - * @return the removed figure - */ - public Figure remove(Figure figure) { - return drawing().remove(figure); - } - - /** - * Adds a Collection of figures to the drawing. - */ - public void addAll(Collection figures) { - FigureEnumeration fe = new FigureEnumerator(figures); - while (fe.hasNextFigure()) { - add(fe.nextFigure()); - } - } - - /** - * Check existance of figure in the drawing - */ - public boolean figureExists(Figure inf, FigureEnumeration fe) { - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - - if (figure.includes(inf)) { - return true; - } - } - - return false; - } - - /** - * Inserts a FigureEnumeration of figures and translates them by the - * given offset. This function is used to insert figures from clipboards (cut/copy) - * - * @return enumeration which has been added to the drawing. The figures in the enumeration - * can have changed during adding them (e.g. they could have been decorated). - */ - public FigureEnumeration insertFigures(FigureEnumeration fe, int dx, int dy, boolean bCheck) { - if (fe == null) { - return FigureEnumerator.getEmptyEnumeration(); - } - - List vCF = CollectionsFactory.current().createList(10); - InsertIntoDrawingVisitor visitor = new InsertIntoDrawingVisitor(drawing()); - - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - if (figure instanceof ConnectionFigure) { - vCF.add(figure); - } - else if (figure != null) { - figure.moveBy(dx, dy); - figure.visit(visitor); - } - } - - FigureEnumeration ecf = new FigureEnumerator(vCF); - - while (ecf.hasNextFigure()) { - ConnectionFigure cf = (ConnectionFigure) ecf.nextFigure(); - Figure sf = cf.startFigure(); - Figure ef = cf.endFigure(); - - if (figureExists(sf, drawing().figures()) - && figureExists(ef, drawing().figures()) - && (!bCheck || cf.canConnect(sf, ef))) { - - if (bCheck) { - Point sp = sf.center(); - Point ep = ef.center(); - Connector fStartConnector = cf.startFigure().connectorAt(ep.x, ep.y); - Connector fEndConnector = cf.endFigure().connectorAt(sp.x, sp.y); - - if (fEndConnector != null && fStartConnector != null) { - cf.connectStart(fStartConnector); - cf.connectEnd(fEndConnector); - cf.updateConnection(); - } - } - - cf.visit(visitor); - } - } - - addToSelectionAll(visitor.getInsertedFigures()); - return visitor.getInsertedFigures(); - } - - /** - * Returns a FigureEnumeration of connectionfigures attached to this figure - */ - public FigureEnumeration getConnectionFigures(Figure inFigure) { - // If no figure or figure is non connectable, just return null - if (inFigure == null || !inFigure.canConnect()) { - return null; - } - - // if (inFigure instanceof ConnectionFigure) - // return null; - - List result = CollectionsFactory.current().createList(5); - FigureEnumeration figures = drawing().figures(); - - // Find all connection figures - while (figures.hasNextFigure()) { - Figure f= figures.nextFigure(); - - if ((f instanceof ConnectionFigure) && !(isFigureSelected(f))) { - ConnectionFigure cf = (ConnectionFigure) f; - - if (cf.startFigure().includes(inFigure) || cf.endFigure().includes(inFigure)) { - result.add(f); - } - } - } - - return new FigureEnumerator(result); - } - - /** - * Sets the current display update strategy. - * @see Painter - */ - public void setDisplayUpdate(Painter updateStrategy) { - fUpdateStrategy = updateStrategy; - } - - /** - * Sets the current display update strategy. - * @see Painter - */ - public Painter getDisplayUpdate() { - return fUpdateStrategy; - } - - /** - * Gets an enumeration over the currently selected figures. - * The selection is a snapshot of the current selection - * which does not get changed anymore - * - * @return an enumeration with the currently selected figures. - */ - public FigureEnumeration selection() { - return selectionZOrdered(); - } - - /** - * Gets the currently selected figures in Z order. - * @see #selection - * @return a FigureEnumeration with the selected figures. The enumeration - * represents a snapshot of the current selection. - */ - public FigureEnumeration selectionZOrdered() { - List result = CollectionsFactory.current().createList(selectionCount()); - - result.addAll(fSelection); - return new ReverseFigureEnumerator(result); - } - - /** - * Gets the number of selected figures. - */ - public int selectionCount() { - return fSelection.size(); - } - - /** - * Test whether a given figure is selected. - */ - public boolean isFigureSelected(Figure checkFigure) { - return fSelection.contains(checkFigure); - } - - /** - * Adds a figure to the current selection. The figure is only selected if - * it is also contained in the Drawing associated with this DrawingView. - */ - public void addToSelection(Figure figure) { - if(addToSelectionImpl(figure) == true){ - fireSelectionChanged(); - } - } - protected boolean addToSelectionImpl(Figure figure){ - boolean changed = false; - if (!isFigureSelected(figure) && drawing().includes(figure)) { - fSelection.add(figure); - fSelectionHandles = null; - figure.invalidate(); - changed = true; - } - return changed; - } - /** - * Adds a Collection of figures to the current selection. - */ - public void addToSelectionAll(Collection figures) { - addToSelectionAll(new FigureEnumerator(figures)); - } - - /** - * Adds a FigureEnumeration to the current selection. - */ - public void addToSelectionAll(FigureEnumeration fe) { - boolean changed = false; - while (fe.hasNextFigure()) { - changed |= addToSelectionImpl(fe.nextFigure()); - } - if(changed == true){ - fireSelectionChanged(); - } - } - - /** - * Removes a figure from the selection. - */ - public void removeFromSelection(Figure figure) { - if (isFigureSelected(figure)) { - fSelection.remove(figure); - fSelectionHandles = null; - figure.invalidate(); - fireSelectionChanged(); - } - } - - /** - * If a figure isn't selected it is added to the selection. - * Otherwise it is removed from the selection. - */ - public void toggleSelection(Figure figure) { - if (isFigureSelected(figure)) { - removeFromSelection(figure); - } - else { - addToSelection(figure); - } - fireSelectionChanged(); - } - - /** - * Clears the current selection. - */ - public void clearSelection() { - // there is nothing selected - bug fix ID 628818 - if (selectionCount() == 0) { - // avoid unnecessary selection changed event when nothing has to be cleared - return; - } - - FigureEnumeration fe = selection(); - while (fe.hasNextFigure()) { - fe.nextFigure().invalidate(); - } - fSelection = CollectionsFactory.current().createList(); - fSelectionHandles = null; - fireSelectionChanged(); - } - - /** - * Gets an enumeration of the currently active handles. - */ - protected HandleEnumeration selectionHandles() { - if (fSelectionHandles == null) { - fSelectionHandles = CollectionsFactory.current().createList(); - FigureEnumeration fe = selection(); - while (fe.hasNextFigure()) { - Figure figure = fe.nextFigure(); - HandleEnumeration kk = figure.handles(); - while (kk.hasNextHandle()) { - fSelectionHandles.add(kk.nextHandle()); - } - } - } - return new HandleEnumerator(fSelectionHandles); - } - - /** - * Gets the current selection as a FigureSelection. A FigureSelection - * can be cut, copied, pasted. - */ - public FigureSelection getFigureSelection() { - return new StandardFigureSelection(selectionZOrdered(), selectionCount()); - } - - /** - * Finds a handle at the given coordinates. - * @return the hit handle, null if no handle is found. - */ - public Handle findHandle(int x, int y) { - Handle handle; - - HandleEnumeration he = selectionHandles(); - while (he.hasNextHandle()) { - handle = he.nextHandle(); - if (handle.containsPoint(x, y)) { - return handle; - } - } - return null; - } - - /** - * Informs that the current selection changed. - * By default this event is forwarded to the - * drawing editor. - */ - protected void fireSelectionChanged() { - if (fSelectionListeners != null) { - for (int i = 0; i < fSelectionListeners.size(); i++) { - FigureSelectionListener l = (FigureSelectionListener)fSelectionListeners.get(i); - l.figureSelectionChanged(this); - } - } - } - - protected Rectangle getDamage() { - return fDamage; // clone? - } - - protected void setDamage(Rectangle r) { - fDamage = r; - } - - /** - * Gets the position of the last click inside the view. - */ - public Point lastClick() { - return fLastClick; - } - - protected void setLastClick(Point newLastClick) { - fLastClick = newLastClick; - } - - /** - * Sets the grid spacing that is used to constrain points. - */ - public void setConstrainer(PointConstrainer c) { - fConstrainer = c; - } - - /** - * Gets the current constrainer. - */ - public PointConstrainer getConstrainer() { - return fConstrainer; - } - - /** - * Constrains a point to the current grid. - */ - protected Point constrainPoint(Point p) { - // constrain to view size - Dimension size = getSize(); - //p.x = Math.min(size.width, Math.max(1, p.x)); - //p.y = Math.min(size.height, Math.max(1, p.y)); - p.x = Geom.range(1, size.width, p.x); - p.y = Geom.range(1, size.height, p.y); - - if (fConstrainer != null ) { - return fConstrainer.constrainPoint(p); - } - return p; - } - - private void moveSelection(int dx, int dy) { - FigureEnumeration figures = selection(); - while (figures.hasNextFigure()) { - figures.nextFigure().moveBy(dx, dy); - } - checkDamage(); - } - - /** - * Refreshes the drawing if there is some accumulated damage - */ - public synchronized void checkDamage() { - Iterator each = drawing().drawingChangeListeners(); - while (each.hasNext()) { - Object l = each.next(); - if (l instanceof DrawingView) { - ((DrawingView)l).repairDamage(); - } - } - } - - public void repairDamage() { - if (getDamage() != null) { - repaint(getDamage().x, getDamage().y, getDamage().width, getDamage().height); - setDamage(null); - } - } - - public void drawingInvalidated(DrawingChangeEvent e) { - Rectangle r = e.getInvalidatedRectangle(); - if (getDamage() == null) { - setDamage(r); - } - else { - // don't manipulate rectangle returned by getDamage() directly - // because it could be a cloned rectangle. - Rectangle damagedR = getDamage(); - damagedR.add(r); - setDamage(damagedR); - } - } - - public void drawingRequestUpdate(DrawingChangeEvent e) { - repairDamage(); - } - - public void drawingTitleChanged(DrawingChangeEvent e){ - } - - /** - * Paints the drawing view. The actual drawing is delegated to - * the current update strategy. - * @see Painter - */ - protected void paintComponent(Graphics g) { - if(getDisplayUpdate() != null) { - getDisplayUpdate().draw(g, this); - } - } - - /** - * Draws the contents of the drawing view. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - */ - public void drawAll(Graphics g) { - boolean isPrinting = isPrinting(g); - drawBackground(g); - if ((fBackgrounds != null) && !isPrinting) { - drawPainters(g, fBackgrounds); - } - drawDrawing(g); - if ((fForegrounds != null) && !isPrinting) { - drawPainters(g, fForegrounds); - } - if (!isPrinting) { - drawHandles(g); - } - } - - /** - * Draws the given figures. - * The view has three layers: background, drawing, handles. - * The layers are drawn in back to front order. - * No background is drawn. - */ - public void draw(Graphics g, FigureEnumeration fe) { - boolean isPrinting = isPrinting(g); - //drawBackground(g); - if ((fBackgrounds != null) && !isPrinting) { - drawPainters(g, fBackgrounds); - } - drawing().draw(g, fe); - if ((fForegrounds != null) && !isPrinting) { - drawPainters(g, fForegrounds); - } - if (!isPrinting) { - drawHandles(g); - } - } - - /** - * Draws the currently active handles. - */ - public void drawHandles(Graphics g) { - HandleEnumeration he = selectionHandles(); - while (he.hasNextHandle()) { - (he.nextHandle()).draw(g); - } - } - - /** - * Draws the drawing. - */ - public void drawDrawing(Graphics g) { - drawing().draw(g); - } - - /** - * Draws the background. If a background pattern is set it - * is used to fill the background. Otherwise the background - * is filled in the background color. - */ - public void drawBackground(Graphics g) { - g.setColor(getBackground()); - g.fillRect(0, 0, getBounds().width, getBounds().height); - } - - protected void drawPainters(Graphics g, List v) { - for (int i = 0; i < v.size(); i++) { - ((Painter)v.get(i)).draw(g, this); - } - } - - /** - * Adds a background. - */ - public void addBackground(Painter painter) { - if (fBackgrounds == null) { - fBackgrounds = CollectionsFactory.current().createList(3); - } - fBackgrounds.add(painter); - repaint(); - } - - /** - * Removes a background. - */ - public void removeBackground(Painter painter) { - if (fBackgrounds != null) { - fBackgrounds.remove(painter); - } - repaint(); - } - - protected List getBackgrounds() { - return fBackgrounds; - } - - /** - * Removes a foreground. - */ - public void removeForeground(Painter painter) { - if (fForegrounds != null) { - fForegrounds.remove(painter); - } - repaint(); - } - - /** - * Adds a foreground. - */ - public void addForeground(Painter painter) { - if (fForegrounds == null) { - fForegrounds = CollectionsFactory.current().createList(3); - } - fForegrounds.add(painter); - repaint(); - } - - protected List getForegrounds() { - return fForegrounds; - } - - /** - * Freezes the view by acquiring the drawing lock. - * @see Drawing#lock - */ - public void freezeView() { - drawing().lock(); - } - - /** - * Unfreezes the view by releasing the drawing lock. - * @see Drawing#unlock - */ - public void unfreezeView() { - drawing().unlock(); - } - - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - - s.defaultReadObject(); - - fSelection = CollectionsFactory.current().createList(); // could use lazy initialization instead - // could use lazy initialization instead - if (drawing() != null) { - drawing().addDrawingChangeListener(this); - } - fSelectionListeners= CollectionsFactory.current().createList(); - } - - protected void checkMinimumSize() { - Dimension d = getDrawingSize(); - Dimension v = getPreferredSize(); - - if (v.height < d.height || v.width < d.width) { - v.height = d.height + SCROLL_OFFSET; - v.width = d.width + SCROLL_OFFSET; - setPreferredSize(v); - } - } - - /** - * Return the size of the area occupied by the contained figures inside - * the drawing. This method is called by checkMinimumSize(). - */ - protected Dimension getDrawingSize() { - Dimension d = new Dimension(0, 0); - // ricardo_padilha: this test had to be introduced because a drawing view - // can be assigned a null drawing (see setDrawing() ). - if (drawing() != null) { - FigureEnumeration fe = drawing().figures(); - while (fe.hasNextFigure()) { - Rectangle r = fe.nextFigure().displayBox(); - d.width = Math.max(d.width, r.x+r.width); - d.height = Math.max(d.height, r.y+r.height); - } - } - return d; - } - - /** - * @see java.awt.Component#isFocusTraversable() - * @deprecated see super class - */ - public boolean isFocusTraversable() { - return true; - } - - public boolean isInteractive() { - return true; - } - - public void keyTyped(KeyEvent e) {} - public void keyReleased(KeyEvent e) {} - - /** - * Add a listener for selection changes. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void addFigureSelectionListener(FigureSelectionListener fsl) { - fSelectionListeners.add(fsl); - } - - /** - * Remove a listener for selection changes. - * @param fsl jhotdraw.framework.FigureSelectionListener - */ - public void removeFigureSelectionListener(FigureSelectionListener fsl) { - fSelectionListeners.remove(fsl); - } - - public int getDefaultDNDActions() { - return java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE; - } - - /***** Autoscroll support *****/ - private ASH ash = new ASH(10); - - public void autoscroll(java.awt.Point p) { - ash.autoscroll(p); - } - public Insets getAutoscrollInsets() { - return ash.getAutoscrollInsets(); - } - class ASH extends AutoscrollHelper { - public ASH(int margin) { - super(margin); - } - public Dimension getSize() { - return StandardDrawingView.this.getSize(); - } - public Rectangle getVisibleRect() { - return StandardDrawingView.this.getVisibleRect(); - } - public void scrollRectToVisible(Rectangle aRect) { - StandardDrawingView.this.scrollRectToVisible(aRect); - } - } - - public String toString() { - return "DrawingView Nr: " + myCounter; - } - - /** - * Default action when any uncaught exception bubbled from - * the mouse event handlers of the tools. Subclass may override it - * to provide other action. - */ - protected void handleMouseEventException(Throwable t) { - JOptionPane.showMessageDialog( - this, - t.getClass().getName() + " - " + t.getMessage(), - "Error", - JOptionPane.ERROR_MESSAGE); - t.printStackTrace(); - } - - public class DrawingViewMouseListener extends MouseAdapter { - /** - * Handles mouse down events. The event is delegated to the - * currently active tool. - */ - public void mousePressed(MouseEvent e) { - try { - requestFocus(); // JDK1.1 - Point p = constrainPoint(new Point(e.getX(), e.getY())); - setLastClick(new Point(e.getX(), e.getY())); - tool().mouseDown(e, p.x, p.y); - checkDamage(); - } - catch (Throwable t) { - handleMouseEventException(t); - } - } - - /** - * Handles mouse up events. The event is delegated to the - * currently active tool. - */ - public void mouseReleased(MouseEvent e) { - try { - Point p = constrainPoint(new Point(e.getX(), e.getY())); - tool().mouseUp(e, p.x, p.y); - checkDamage(); - } - catch (Throwable t) { - handleMouseEventException(t); - } - } - } - - public class DrawingViewMouseMotionListener implements MouseMotionListener { - /** - * Handles mouse drag events. The event is delegated to the - * currently active tool. - */ - public void mouseDragged(MouseEvent e) { - try { - Point p = constrainPoint(new Point(e.getX(), e.getY())); - tool().mouseDrag(e, p.x, p.y); - checkDamage(); - } - catch (Throwable t) { - handleMouseEventException(t); - } - } - - /** - * Handles mouse move events. The event is delegated to the - * currently active tool. - */ - public void mouseMoved(MouseEvent e) { - try { - tool().mouseMove(e, e.getX(), e.getY()); - } - catch (Throwable t) { - handleMouseEventException(t); - } - } - } - - public class DrawingViewKeyListener implements KeyListener { - private Command deleteCmd; - - public DrawingViewKeyListener() { - deleteCmd = createDeleteCommand(); - } - - /** - * Handles key down events. Cursor keys are handled - * by the view the other key events are delegated to the - * currently active tool. - */ - public void keyPressed(KeyEvent e) { - int code = e.getKeyCode(); - // Only act on nonModified keys... - int modifiers = e.getModifiers(); - if (modifiers == 0 && - ((code == KeyEvent.VK_BACK_SPACE) || - (code == KeyEvent.VK_DELETE))) { - if (deleteCmd.isExecutable()) { - deleteCmd.execute(); - //deleteCmd.viewSelectionChanged(this); - } - } - else if (modifiers == 0 && - ((code == KeyEvent.VK_DOWN) - || (code == KeyEvent.VK_UP) - || (code == KeyEvent.VK_RIGHT) - || (code == KeyEvent.VK_LEFT))) { - handleCursorKey(code); - } - else { - tool().keyDown(e, code); - } - checkDamage(); - } - - /** - * Handles cursor keys by moving all the selected figures - * one grid point in the cursor direction. - */ - protected void handleCursorKey(int key) { - int dx = 0, dy = 0; - int stepX = 1, stepY = 1; - // should consider Null Object. - if (fConstrainer != null) { - stepX = fConstrainer.getStepX(); - stepY = fConstrainer.getStepY(); - } - - switch (key) { - case KeyEvent.VK_DOWN: - dy = stepY; - break; - case KeyEvent.VK_UP: - dy = -stepY; - break; - case KeyEvent.VK_RIGHT: - dx = stepX; - break; - case KeyEvent.VK_LEFT: - dx = -stepX; - break; - } - moveSelection(dx, dy); - } - - public void keyTyped(KeyEvent event) { - // do nothing - } - - public void keyReleased(KeyEvent event) { - // do nothing - } - - protected Command createDeleteCommand() { - return new UndoableCommand(new DeleteCommand("Delete", editor())); - } - } - - protected DNDHelper createDNDHelper() { - return new DNDHelper(true, true) { - protected DrawingView view() { - return StandardDrawingView.this; - } - protected DrawingEditor editor() { - return StandardDrawingView.this.editor(); - } - }; - } - - protected DNDHelper getDNDHelper() { - if (dndh == null) { - dndh = createDNDHelper(); - } - return dndh; - } - - public DragSourceListener getDragSourceListener(){ - return getDNDHelper().getDragSourceListener(); - } - - public void DNDInitialize(DragGestureListener dgl){ - getDNDHelper().initialize(dgl); - } - - public void DNDDeinitialize() { - getDNDHelper().deinitialize(); - } - - /** - * Asks whether the drawing view is in read-only mode. If so, - * the user can't modify it using mouse or keyboard - * actions. Yet, it can still be modified from inside the - * program. - */ - public boolean isReadOnly() { - return myIsReadOnly; - } - - /** - * Determines whether the drawing view is in read-only - * mode. If so, the user can't modify it using mouse or - * keyboard actions. Yet, it can still be modified from inside - * the program. - */ - public void setReadOnly(boolean newIsReadOnly) { - if (newIsReadOnly != isReadOnly()) { - if (newIsReadOnly) { - removeMouseListener(mouseListener); - removeMouseMotionListener(motionListener); - removeKeyListener(keyListener); - } - else { - addMouseListener(mouseListener); - addMouseMotionListener(motionListener); - addKeyListener(keyListener); - } - - myIsReadOnly = newIsReadOnly; - } - } - - /** - * @see DrawingView#setCursor(Cursor) - * @see java.awt.Component#setCursor(java.awt.Cursor) - */ - public void setCursor(Cursor cursor) { - if (cursor instanceof java.awt.Cursor) { - super.setCursor((java.awt.Cursor) cursor); - } - } - - /** - * Gets the minimum dimension of the drawing.<br /> - * Fixed version (JHotDraw version has a bug). - * @see StandardDrawingView#getMinimumSize() - * @see java.awt.Component#getMinimumSize() - */ - public Dimension getMinimumSize() { - Rectangle r = new Rectangle(); - FigureEnumeration k = drawing().figures(); - while (k.hasNextFigure()) { - r.add(k.nextFigure().displayBox()); - } - return new Dimension(r.width, r.height); - } - - /** - * Return the location of the tool tip to Swing - */ - public Point getToolTipLocation(MouseEvent event) { - return toolTipLocation; - } - - /** - * Works along with setToolTipText() and when both are called, a - * tool tip is shown at the Point p until clearToolTip() is called - */ - public void setToolTipLocation(Point p) { - toolTipLocation = p; - } - - /** - * Calls setToolTipLocation(Point p) with a standard position - * relative to the given figure. - */ - public void setToolTipFigure(Figure f) { - Rectangle r = f.displayBox(); - /* Show tool tip 10 below the figure's bottom left - * corner... */ - Point p = new Point (r.x, r.y + r.height + 10); - setToolTipLocation(p); - } - - /** - * Call this to ensure that the tool tip is no longer shown. - */ - public void clearToolTip() { - if (getToolTipText() != null) { - setToolTipText(null); - /* According to javadoc for JComponent calling - * setToolTipText(null) should be enough to - * clear the tool tip, but at least for - * 1.4.2-b28 that is not sufficient... */ - setToolTipLocation(null); - } - } - - private boolean isPrinting(Graphics g) { - return (g instanceof PrintGraphics) || (g instanceof PrinterGraphics); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/StandardFigureSelection.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/StandardFigureSelection.java deleted file mode 100644 index e5a81593c..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/StandardFigureSelection.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * @(#)FigureSelection.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.framework.*; -import org.jhotdraw.util.*; - -import java.util.*; -import java.io.*; - -/** - * FigureSelection enables to transfer the selected figures - * to a clipboard.<p> - * Will soon be converted to the JDK 1.1 Transferable interface. - * - * @see Clipboard - * - * @version <$CURRENT_VERSION$> - */ - -public class StandardFigureSelection implements FigureSelection, Serializable { - - private byte[] fData; // flattend figures, ready to be resurrected - - /** - * The type identifier of the selection. - */ - public final static String TYPE = "org.jhotdraw.Figures"; - - /** - * Constructes the Figure selection for the FigureEnumeration. - */ - public StandardFigureSelection(FigureEnumeration fe, int figureCount) { - // a FigureSelection is represented as a flattened ByteStream - // of figures. - ByteArrayOutputStream output = new ByteArrayOutputStream(200); - StorableOutput writer = new StorableOutput(output); - writer.writeInt(figureCount); - while (fe.hasNextFigure()) { - writer.writeStorable(fe.nextFigure()); - } - writer.close(); - fData = output.toByteArray(); - } - - /** - * Gets the type of the selection. - */ - public String getType() { - return TYPE; - } - - /** - * Gets the data of the selection. The result is returned - * as a FigureEnumeration of Figures. - * - * @return a copy of the figure selection. - */ - public Object getData(String type) { - if (type.equals(TYPE)) { - InputStream input = new ByteArrayInputStream(fData); - List result = CollectionsFactory.current().createList(10); - StorableInput reader = new StorableInput(input); - int numRead = 0; - try { - int count = reader.readInt(); - while (numRead < count) { - Figure newFigure = (Figure) reader.readStorable(); - result.add(newFigure); - numRead++; - } - } - catch (IOException e) { - System.err.println(e.toString()); - } - return new FigureEnumerator(result); - } - return null; - } - - public static FigureEnumeration duplicateFigures(FigureEnumeration toBeCloned, int figureCount) { - StandardFigureSelection duplicater = new StandardFigureSelection(toBeCloned, figureCount); - return (FigureEnumeration)duplicater.getData(duplicater.getType()); - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/TextHolder.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/TextHolder.java deleted file mode 100644 index 0f5d60a16..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/TextHolder.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * @(#)TextHolder.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.*; -import org.jhotdraw.framework.*; - -/** - * The interface of a figure that has some editable text contents. - * - * @see Figure - * - * @version <$CURRENT_VERSION$> - */ - -public interface TextHolder { - - public Rectangle textDisplayBox(); - - /** - * Gets the text shown by the text figure. - */ - public String getText(); - - /** - * Sets the text shown by the text figure. - */ - public void setText(String newText); - - /** - * Tests whether the figure accepts typing. - */ - public boolean acceptsTyping(); - - /** - * Gets the number of columns to be overlaid when the figure is edited. - */ - public int overlayColumns(); - - /** - * Connects a text holder to another figure. - */ - public void connect(Figure connectedFigure); - - /** - * Disconnects a text holder from a connect figure. - */ - public void disconnect(Figure disconnectFigure); - - /** - * Gets the font. - */ - public Font getFont(); - - /** - * Usually, a TextHolders is implemented by a Figure subclass. To avoid casting - * a TextHolder to a Figure this method can be used for polymorphism (in this - * case, let the (same) object appear to be of another type). - * Note, that the figure returned is not the figure to which the TextHolder is - * (and its representing figure) connected. - * @return figure responsible for representing the content of this TextHolder - */ - public Figure getRepresentingFigure(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ToggleGridCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ToggleGridCommand.java deleted file mode 100644 index 0c13c4128..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ToggleGridCommand.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * @(#)ToggleGridCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import java.awt.Point; -import org.jhotdraw.framework.*; - -/** - * A command to toggle the snap to grid behavior. - * - * @version <$CURRENT_VERSION$> - */ -public class ToggleGridCommand extends AbstractCommand { - - private Point fGrid; - - /** - * Constructs a toggle grid command. - * @param name the command name - * @param newDrawingEditor editor - * @param grid the grid size. A grid size of 1,1 turns grid snapping off. - */ - public ToggleGridCommand(String name, DrawingEditor newDrawingEditor, Point grid) { - super(name, newDrawingEditor); - fGrid = new Point(grid.x, grid.y); - } - - public void execute() { - super.execute(); - PointConstrainer grid = view().getConstrainer(); - if (grid != null) { - view().setConstrainer(null); - } - else { - view().setConstrainer(new GridConstrainer(fGrid.x, fGrid.y)); - } - } -} - - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/standard/ToolButton.java b/jhotdraw6/src/main/java/org/jhotdraw/standard/ToolButton.java deleted file mode 100644 index c4c85213f..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/standard/ToolButton.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * @(#)ToolButton.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.standard; - -import org.jhotdraw.util.*; -import org.jhotdraw.framework.*; -import javax.swing.*; -import java.awt.*; -import java.util.EventObject; - -/** - * A PaletteButton that is associated with a tool. - * - * @see Tool - * - * @version <$CURRENT_VERSION$> - */ -public class ToolButton extends PaletteButton implements ToolListener { - - private Tool myTool; - private PaletteIcon myIcon; - - public ToolButton(PaletteListener listener, String iconName, String name, Tool tool) { - super(listener); - tool.addToolListener(this); - setEnabled(tool.isUsable()); - - // use a Mediatracker to ensure that all the images are initially loaded - Iconkit kit = Iconkit.instance(); - if (kit == null) { - throw new JHotDrawRuntimeException("Iconkit instance isn't set"); - } - - Image im[] = new Image[3]; - im[0] = kit.loadImage(iconName+"1.gif"); - im[1] = kit.loadImage(iconName+"2.gif"); - im[2] = kit.loadImage(iconName+"3.gif"); - - MediaTracker tracker = new MediaTracker(this); - for (int i = 0; i < 3; i++) { - tracker.addImage(im[i], i); - } - try { - tracker.waitForAll(); - } - catch (Exception e) { - // ignore exception - } - - setPaletteIcon(new PaletteIcon(new Dimension(24,24), im[0], im[1], im[2])); - setTool(tool); - setName(name); - - // avoid null pointer exception if image could not be loaded - if (im[0] != null) { - setIcon(new ImageIcon(im[0])); - } - if (im[1] != null) { - setPressedIcon(new ImageIcon(im[1])); - } - if (im[2] != null) { - setSelectedIcon(new ImageIcon(im[2])); - } - setToolTipText(name); - } - - public Tool tool() { - return myTool; - } - - public String name() { - return getName(); - } - - public Object attributeValue() { - return tool(); - } - - public Dimension getMinimumSize() { - return new Dimension(getPaletteIcon().getWidth(), getPaletteIcon().getHeight()); - } - - public Dimension getPreferredSize() { - return new Dimension(getPaletteIcon().getWidth(), getPaletteIcon().getHeight()); - } - - public Dimension getMaximumSize() { - return new Dimension(getPaletteIcon().getWidth(), getPaletteIcon().getHeight()); - } - -// Not necessary anymore in JFC due to the support of Icons in JButton -/* - public void paintBackground(Graphics g) { } - - public void paintNormal(Graphics g) { - if (fIcon.normal() != null) - g.drawImage(fIcon.normal(), 0, 0, this); - } - - public void paintPressed(Graphics g) { - if (fIcon.pressed() != null) - g.drawImage(fIcon.pressed(), 0, 0, this); - } -*/ - public void paintSelected(Graphics g) { - if (getPaletteIcon().selected() != null) { - g.drawImage(getPaletteIcon().selected(), 0, 0, this); - } - } - - public void paint(Graphics g) { - // selecting does not work as expected with JFC1.1 - // see JavaBug: 4228035, 4233965 - if (isSelected()) { - paintSelected(g); - } - else { - super.paint(g); - } - } - - public void toolUsable(EventObject toolEvent) { - setEnabled(true); - } - - public void toolUnusable(EventObject toolEvent) { - setEnabled(false); - setSelected(false); - } - - public void toolActivated(EventObject toolEvent) { - } - - public void toolDeactivated(EventObject toolEvent) { - } - - public void toolEnabled(EventObject toolEvent) { - setEnabled(true); - } - - public void toolDisabled(EventObject toolEvent) { - setEnabled(false); - } - - protected PaletteIcon getPaletteIcon() { - return myIcon; - } - - private void setPaletteIcon(PaletteIcon newIcon) { - myIcon = newIcon; - } - - private void setTool(Tool newTool) { - myTool = newTool; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/Animatable.java b/jhotdraw6/src/main/java/org/jhotdraw/util/Animatable.java deleted file mode 100644 index 24c215d0d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/Animatable.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * @(#)Animatable.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -/** - * Animatable defines a simple animation interface - * - * @version <$CURRENT_VERSION$> - */ -public interface Animatable { - /** - * Perform a step of the animation. - */ - void animationStep(); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/Bounds.java b/jhotdraw6/src/main/java/org/jhotdraw/util/Bounds.java deleted file mode 100644 index c32058b79..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/Bounds.java +++ /dev/null @@ -1,496 +0,0 @@ -/* - * @(#)Bounds.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.awt.Dimension; -import java.awt.geom.Point2D; -import java.awt.geom.Rectangle2D; -import java.io.Serializable; - -/** - * This class is a rectangle with floating point - * dimensions and location. This class provides - * many convenient geometrical methods related to - * rectangles. Basically, this class is like - * java.awt.geom.Rectangle2D with some extra - * functionality. - * - * @author WMG (28.02.1999) - * @version <$CURRENT_VERSION$> - */ -public class Bounds implements Serializable { - - //_________________________________________________________VARIABLES - - protected double _dX1 = 0; - protected double _dY1 = 0; - protected double _dX2 = 0; - protected double _dY2 = 0; - - //______________________________________________________CONSTRUCTORS - - public Bounds(double x, double y) { - _dX1 = x; - _dX2 = x; - _dY1 = y; - _dY2 = y; - } - - public Bounds(double x1, double y1, double x2, double y2) { - _dX1 = Math.min(x1, x2); - _dX2 = Math.max(x1, x2); - _dY1 = Math.min(y1, y2); - _dY2 = Math.max(y1, y2); - } - - public Bounds(Point2D aPoint2D) { - this(aPoint2D.getX(), aPoint2D.getY()); - } - - public Bounds(Point2D firstPoint2D, Point2D secondPoint2D) { - this(firstPoint2D.getX(), firstPoint2D.getY(), - secondPoint2D.getX(), secondPoint2D.getY()); - } - - public Bounds(Bounds aBounds) { - this(aBounds.getLesserX(), aBounds.getLesserY(), - aBounds.getGreaterX(), aBounds.getGreaterY()); - } - - public Bounds(Rectangle2D aRectangle2D) { - _dX1 = aRectangle2D.getMinX(); - _dX2 = aRectangle2D.getMaxX(); - _dY1 = aRectangle2D.getMinY(); - _dY2 = aRectangle2D.getMaxY(); - } - - public Bounds(Point2D centerPoint2D, double dWidth, double dHeight) { - _dX1 = centerPoint2D.getX() - (dWidth / 2.0); - _dX2 = centerPoint2D.getX() + (dWidth / 2.0); - _dY1 = centerPoint2D.getY() - (dHeight / 2.0); - _dY2 = centerPoint2D.getY() + (dHeight / 2.0); - } - - public Bounds(Dimension aDimension) { - this(0, 0, aDimension.width, aDimension.height); - } - - protected Bounds() { - // empty constructor - } - - //____________________________________________________PUBLIC METHODS - - public double getLesserX() { - return _dX1; - } - - public double getGreaterX() { - return _dX2; - } - - public double getLesserY() { - return _dY1; - } - - public double getGreaterY() { - return _dY2; - } - - public double getWest() { - return _dX1; - } - - public double getEast() { - return _dX2; - } - - public double getSouth() { - return _dY1; - } - - public double getNorth() { - return _dY2; - } - - public double getWidth() { - return _dX2 - _dX1; - } - - public double getHeight() { - return _dY2 - _dY1; - } - - public Rectangle2D asRectangle2D() { - return new Rectangle2D.Double(getLesserX(), getLesserY(), - getWidth(), getHeight()); - } - - public void setCenter(Point2D centerPoint2D) { - if(centerPoint2D == null) { - throw new IllegalArgumentException(); - } - Point2D currentCenterPoint2D = getCenter(); - double dDeltaX = centerPoint2D.getX() - currentCenterPoint2D.getX(); - double dDeltaY = centerPoint2D.getY() - currentCenterPoint2D.getY(); - offset(dDeltaX, dDeltaY); - } - - public Point2D getCenter() { - return new Point2D.Double((_dX1 + _dX2) / 2.0, (_dY1 + _dY2) / 2.0); - } - - public void zoomBy(double dRatio) { - double dWidth = _dX2 - _dX1; - double dHeight = _dY2 - _dY1; - double dNewWidth = (dWidth * dRatio); - double dNewHeight = (dHeight * dRatio); - Point2D centerPoint2D = getCenter(); - _dX1 = centerPoint2D.getX() - (dNewWidth / 2.0); - _dY1 = centerPoint2D.getY() - (dNewHeight / 2.0); - _dX2 = centerPoint2D.getX() + (dNewWidth / 2.0); - _dY2 = centerPoint2D.getY() + (dNewHeight / 2.0); - } - - public void shiftBy(int nXPercentage, int nYPercentage) { - double dWidth = _dX2 - _dX1; - double dHeight = _dY2 - _dY1; - double dDeltaX = (dWidth * nXPercentage) / 100.0; - double dDeltaY = (dHeight * nYPercentage) / 100.0; - offset(dDeltaX, dDeltaY); - } - - public void offset(double dDeltaX, double dDeltaY) { - _dX1 += dDeltaX; - _dX2 += dDeltaX; - _dY1 += dDeltaY; - _dY2 += dDeltaY; - } - - /** - * This will cause the bounds to grow until the given ratio - * is satisfied. The Ration is calculated by - * <code> getWidth() / getHeight() </code> - **/ - public void expandToRatio(double dRatio) { - double dCurrentRatio = getWidth() / getHeight(); - if (dCurrentRatio < dRatio) { - double dNewWidth = dRatio * getHeight(); - double dCenterX = (_dX1 + _dX2) / 2.0; - double dDelta = dNewWidth / 2.0; - _dX1 = dCenterX - dDelta; - _dX2 = dCenterX + dDelta; - } - if (dCurrentRatio > dRatio) { - double dNewHeight = getWidth() / dRatio; - double dCenterY = (_dY1 + _dY2) / 2.0; - double dDelta = dNewHeight / 2.0; - _dY1 = dCenterY - dDelta; - _dY2 = dCenterY + dDelta; - } - } - - public void includeXCoordinate(double x) { - _dX1 = min(_dX1, _dX2, x); - _dX2 = max(_dX1, _dX2, x); - } - - public void includeYCoordinate(double y) { - _dY1 = min(_dY1, _dY2, y); - _dY2 = max(_dY1, _dY2, y); - } - - public void includePoint(double x, double y) { - includeXCoordinate(x); - includeYCoordinate(y); - } - - public void includePoint(Point2D aPoint2D) { - includePoint(aPoint2D.getX(), aPoint2D.getY()); - } - - public void includeLine(double x1, double y1, double x2, double y2) { - includePoint(x1, y1); - includePoint(x2, y2); - } - - public void includeLine(Point2D onePoint2D, Point2D twoPoint2D) { - includeLine(onePoint2D.getX(), onePoint2D.getY(), - twoPoint2D.getX(), twoPoint2D.getY()); - } - - public void includeBounds(Bounds aBounds) { - includeXCoordinate(aBounds.getLesserX()); - includeXCoordinate(aBounds.getGreaterX()); - includeYCoordinate(aBounds.getLesserY()); - includeYCoordinate(aBounds.getGreaterY()); - } - - public void includeRectangle2D(Rectangle2D aRectangle2D) { - includeXCoordinate(aRectangle2D.getMinX()); - includeXCoordinate(aRectangle2D.getMaxX()); - includeYCoordinate(aRectangle2D.getMinY()); - includeYCoordinate(aRectangle2D.getMaxY()); - } - - public void intersect(Bounds aBounds) { - _dX1 = Math.max(_dX1, aBounds.getLesserX()); - _dY1 = Math.max(_dY1, aBounds.getLesserY()); - _dX2 = Math.min(_dX2, aBounds.getGreaterX()); - _dY2 = Math.min(_dY2, aBounds.getGreaterY()); - - if (_dX1 > _dX2) { - _dX1 = _dX2; - } - if (_dY1 > _dY2) { - _dY1 = _dY2; - } - } - - public boolean intersectsPoint(double x, double y) { - return ((_dX1 <= x) && (x <= _dX2) && (_dY1 <= y) && (y <= _dY2)); - } - - public boolean intersectsPoint(Point2D aPoint2D) { - return intersectsPoint(aPoint2D.getX(), aPoint2D.getY()); - } - - - public boolean intersectsLine(double x1, double y1, double x2, double y2) { - if (intersectsPoint(x1, y1)) { - return true; - } - if (intersectsPoint(x2, y2)) { - return true; - } - if ((x1 < _dX1) && (x2 < _dX1)) { - return false; - } - if ((x1 > _dX2) && (x2 > _dX2)) { - return false; - } - if ((y1 < _dY1) && (y2 < _dY1)) { - return false; - } - if ((y1 > _dY2) && (y2 > _dY2)) { - return false; - } - if (((_dX1 <= x1) && (x1 <= _dX2)) && ((_dX1 <= x2) && (x2 <= _dX2))) { - return true; - } - if (((_dY1 <= y1) && (y1 <= _dY2)) && ((_dY1 <= y2) && (y2 <= _dY2))) { - return true; - } - - double dSlope = (y2-y1) / (x2-x1); - double _dYIntersectionAtX1 = dSlope * (_dX1 - x1) + y1; - double _dYIntersectionAtX2 = dSlope * (_dX2 - x1) + y1; - double _dXIntersectionAtY1 = (_dY1 - y1) / dSlope + x1; - double _dXIntersectionAtY2 = (_dY2 - y1) / dSlope + x1; - - return (intersectsPoint(_dX1, _dYIntersectionAtX1)) || - (intersectsPoint(_dX2, _dYIntersectionAtX2)) || - (intersectsPoint(_dXIntersectionAtY1, _dY1)) || - (intersectsPoint(_dXIntersectionAtY2, _dY2)); - } - - public boolean intersectsLine(Point2D onePoint2D, Point2D twoPoint2D) { - return intersectsLine(onePoint2D.getX(), onePoint2D.getY(), - twoPoint2D.getX(), twoPoint2D.getY()); - } - - //use K-map to simplify - public boolean intersectsBounds(Bounds aBounds) { - double dLesserX = aBounds.getLesserX(); - double dGreaterX = aBounds.getGreaterX(); - double dLesserY = aBounds.getLesserY(); - double dGreaterY = aBounds.getGreaterY(); - - if (dLesserX < _dX1) { - if (dLesserY < _dY1) { - return ((dGreaterX >= _dX1) && (dGreaterY >= _dY1)); - } - else { - return ((dGreaterX >= _dX1) && (dLesserY <= _dY2)); - } - } - else { - if (dLesserY < _dY1) { - return ((dLesserX <= _dX2) && (dGreaterY >= _dY1)); - } - else { - return ((dLesserX <= _dX2) && (dLesserY <= _dY2)); - } - } - } - - public boolean completelyContainsLine(double x1, double y1, double x2, double y2) { - return (_dX1 > Math.min(x1, x2)) && - (_dX2 < Math.max(x1, x2)) && - (_dY1 > Math.min(y1, y2)) && - (_dY2 < Math.max(y1, y2)); - } - - public boolean isCompletelyInside(Bounds aBounds) { - return (_dX1 > aBounds.getLesserX()) && - (_dX2 < aBounds.getGreaterX()) && - (_dY1 > aBounds.getLesserY()) && - (_dY2 < aBounds.getGreaterY()); - } - - public Point2D[] cropLine(double x1, double y1, double x2, double y2) { - if (!intersectsLine(x1, y1, x2, y2)) { - return null; - } - - Point2D[] resultLine = new Point2D[2]; - Point2D beginPoint2D = new Point2D.Double(x1, y1); - Point2D endPoint2D = new Point2D.Double(x2, y2); - - if (beginPoint2D.getX() == endPoint2D.getX()) { - if (beginPoint2D.getY() > _dY2) { - beginPoint2D.setLocation(beginPoint2D.getX(), _dY2); - } - if (endPoint2D.getY() > _dY2) { - endPoint2D.setLocation(endPoint2D.getX(), _dY2); - } - if (beginPoint2D.getY() < _dY1) { - beginPoint2D.setLocation(beginPoint2D.getX(), _dY1); - } - if (endPoint2D.getY() < _dY1) { - endPoint2D.setLocation(endPoint2D.getX(), _dY1); - } - } - else if (beginPoint2D.getY() == endPoint2D.getY()) { - if (beginPoint2D.getX() > _dX2) { - beginPoint2D.setLocation(_dX2, beginPoint2D.getY()); - } - if (endPoint2D.getX() > _dX2) { - endPoint2D.setLocation(_dX2, endPoint2D.getY()); - } - if (beginPoint2D.getX() < _dX1) { - beginPoint2D.setLocation(_dX1, beginPoint2D.getY()); - } - if (endPoint2D.getX() < _dX1) { - endPoint2D.setLocation(_dX1, endPoint2D.getY()); - } - } - else { - double dSlope = (beginPoint2D.getY() - endPoint2D.getY()) - / (beginPoint2D.getX() - endPoint2D.getX()); - - if (!intersectsPoint(beginPoint2D)) { - if (beginPoint2D.getY() > _dY2) { - double x = ((_dY2 - beginPoint2D.getY()) / dSlope) + beginPoint2D.getX(); - if ((x >= _dX1) && (x <= _dX2)) { - beginPoint2D.setLocation(x, beginPoint2D.getY()); - beginPoint2D.setLocation(beginPoint2D.getX(), _dY2); - } - } - if (beginPoint2D.getY() < _dY1) { - double x = ((_dY1 - beginPoint2D.getY()) / dSlope) + beginPoint2D.getX(); - if ((x >= _dX1) && (x <= _dX2)) { - beginPoint2D.setLocation(x, beginPoint2D.getY()); - beginPoint2D.setLocation(beginPoint2D.getX(), _dY1); - } - } - if (beginPoint2D.getX() > _dX2) { - double y = dSlope*(_dX2 - beginPoint2D.getX()) + beginPoint2D.getY(); - if ((y >= _dY1) && (y <= _dY2)) { - beginPoint2D.setLocation(_dX2, beginPoint2D.getY()); - beginPoint2D.setLocation(beginPoint2D.getX(), y); - } - } - if (beginPoint2D.getX() < _dX1) { - double y = dSlope*(_dX1 - beginPoint2D.getX()) + beginPoint2D.getY(); - if ((y >= _dY1) && (y <= _dY2)) { - beginPoint2D.setLocation(_dX1, beginPoint2D.getY()); - beginPoint2D.setLocation(beginPoint2D.getX(), y); - } - } - } - if (!intersectsPoint(endPoint2D)) { - if (endPoint2D.getY() > _dY2) { - double x = ((_dY2 - beginPoint2D.getY()) / dSlope) + beginPoint2D.getX(); - if ((x >= _dX1) && (x <= _dX2)) { - endPoint2D.setLocation(x, endPoint2D.getY()); - endPoint2D.setLocation(endPoint2D.getX(), _dY2); - } - } - if (endPoint2D.getY() < _dY1) { - double x = ((_dY1 - beginPoint2D.getY()) / dSlope) + beginPoint2D.getX(); - if ((x >= _dX1) && (x <= _dX2)) { - endPoint2D.setLocation(x, endPoint2D.getY()); - endPoint2D.setLocation(endPoint2D.getX(), _dY1); - } - } - if (endPoint2D.getX() > _dX2) { - double y = dSlope*(_dX2 - beginPoint2D.getX()) + beginPoint2D.getY(); - if ((y >= _dY1) && (y <= _dY2)) { - endPoint2D.setLocation(_dX2, endPoint2D.getY()); - endPoint2D.setLocation(endPoint2D.getX(), y); - } - } - if (endPoint2D.getX() < _dX1) { - double y = dSlope*(_dX1 - beginPoint2D.getX()) + beginPoint2D.getY(); - if ((y >= _dY1) && (y <= _dY2)) { - endPoint2D.setLocation(_dX1, endPoint2D.getY()); - endPoint2D.setLocation(endPoint2D.getX(), y); - } - } - } - } - - resultLine[0] = beginPoint2D; - resultLine[1] = endPoint2D; - - return resultLine; - } - - public boolean equals(Object anObject) { - if ((anObject == null) || (!(anObject instanceof Bounds))) { - return false; - } - Bounds aBounds = (Bounds) anObject; - - if ((_dX1 == aBounds.getLesserX()) && - (_dX2 == aBounds.getGreaterX()) && - (_dY1 == aBounds.getLesserY()) && - (_dY2 == aBounds.getGreaterY())) { - return true; - } - - return false; - } - - public int hashCode() { - double temp = Math.abs(_dX1 + _dX2 +_dY1 + _dY2); - while ((temp != 0) && (temp < 1)) { - temp *= 4; - } - - return (int) temp; - } - - public String toString() { - return Double.toString(_dX1) + " " + Double.toString(_dY1) - + " " + Double.toString(_dX2) + " " + Double.toString(_dY2); - } - - private double min( double x1, double x2, double x3 ) { - return Math.min( Math.min( x1, x2 ), x3 ); - } - - private double max( double x1, double x2, double x3 ) { - return Math.max( Math.max( x1, x2 ), x3 ); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/Clipboard.java b/jhotdraw6/src/main/java/org/jhotdraw/util/Clipboard.java deleted file mode 100644 index b52fd141f..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/Clipboard.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * @(#)Clipboard.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -/** - * A temporary replacement for a global clipboard. - * It is a singleton that can be used to store and - * get the contents of the clipboard. - * - * @version <$CURRENT_VERSION$> - */ -public class Clipboard { - static Clipboard fgClipboard = new Clipboard(); - - /** - * Gets the clipboard. - */ - static public Clipboard getClipboard() { - return fgClipboard; - } - - private Object fContents; - - private Clipboard() { - } - - /** - * Sets the contents of the clipboard. - */ - public void setContents(Object contents) { - fContents = contents; - } - - /** - * Gets the contents of the clipboard. - */ - public Object getContents() { - return fContents; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/CollectionsFactory.java b/jhotdraw6/src/main/java/org/jhotdraw/util/CollectionsFactory.java deleted file mode 100644 index 7942b6875..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/CollectionsFactory.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * @(#)CollectionsFactory.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.JHotDrawRuntimeException; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public abstract class CollectionsFactory { - private static String JAVA_UTIL_LIST = "java.util.List"; - private static String COLLECTIONS_FACTORY_PACKAGE = "org.jhotdraw.util.collections.jdk"; - - private static final CollectionsFactory factory = determineCollectionsFactory(); - - public abstract List createList(); - - public abstract List createList(Collection initList); - - public abstract List createList(int initSize); - - public abstract Map createMap(); - - public abstract Map createMap(Map initMap); - - public abstract Set createSet(); - - public abstract Set createSet(Set initSet); - - public static CollectionsFactory current() { - return factory; - } - - protected static CollectionsFactory determineCollectionsFactory() { - String jdkVersion = null; - if (isJDK12()) { - jdkVersion = "12"; - } - else { - jdkVersion = "11"; - } - return createCollectionsFactory(jdkVersion); - } - - protected static boolean isJDK12() { - try { - Class.forName(JAVA_UTIL_LIST); - return true; - } - catch (ClassNotFoundException e) { - // ignore - } - return false; - } - - protected static CollectionsFactory createCollectionsFactory(String jdkVersion) { - try { - Class factoryClass = Class.forName(COLLECTIONS_FACTORY_PACKAGE + jdkVersion + ".CollectionsFactoryJDK" + jdkVersion); - return (CollectionsFactory)factoryClass.newInstance(); - } - catch (ClassNotFoundException e) { - throw new JHotDrawRuntimeException(e); - } - catch (InstantiationException e) { - throw new JHotDrawRuntimeException(e); - } - catch (IllegalAccessException e) { - throw new JHotDrawRuntimeException(e); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/ColorMap.java b/jhotdraw6/src/main/java/org/jhotdraw/util/ColorMap.java deleted file mode 100644 index 8158a5d50..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/ColorMap.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * @(#)ColorMap.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.awt.Color; - -class ColorEntry { - public String fName; - public Color fColor; - - ColorEntry(String name, Color color) { - fColor = color; - fName = name; - } -} - -/** - * A map that is filled with some standard colors. The colors - * can be looked up by name or index. - * - * @version <$CURRENT_VERSION$> - */ -public class ColorMap { - - static ColorEntry fMap[] = { - new ColorEntry("Black", Color.black), - new ColorEntry("Blue", Color.blue), - new ColorEntry("Green", Color.green), - new ColorEntry("Red", Color.red), - new ColorEntry("Pink", Color.pink), - new ColorEntry("Magenta", Color.magenta), - new ColorEntry("Orange", Color.orange), - new ColorEntry("Yellow", Color.yellow), - new ColorEntry("New Tan", new Color(0xEBC79E)), - new ColorEntry("Aquamarine", new Color(0x70DB93)), - new ColorEntry("Sea Green", new Color(0x238E68)), - new ColorEntry("Dark Gray", Color.darkGray), - new ColorEntry("Light Gray", Color.lightGray), - new ColorEntry("White", Color.white), - // there is no support for alpha values so we use a special value - // to represent a transparent color - new ColorEntry("None", new Color(0xFFC79E)) - }; - - public static int size() { - return fMap.length; - } - - public static Color color(int index) { - if (index < size() && index >= 0) { - return fMap[index].fColor; - } - - throw new ArrayIndexOutOfBoundsException("Color index: " + index); - } - - public static Color color(String name) { - for (int i = 0; i < fMap.length; i++) { - if (fMap[i].fName.equals(name)) { - return fMap[i].fColor; - } - } - - return Color.black; - } - - public static String name(int index) { - if (index < size() && index >= 0) { - return fMap[index].fName; - } - - throw new ArrayIndexOutOfBoundsException("Color index: " + index); - } - - public static int colorIndex(Color color) { - for (int i=0; i<fMap.length; i++) { - if (fMap[i].fColor.equals(color)) { - return i; - } - } - - return 0; - } - - public static boolean isTransparent(Color color) { - return color.equals(color("None")); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/Command.java b/jhotdraw6/src/main/java/org/jhotdraw/util/Command.java deleted file mode 100644 index 4f95b885d..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/Command.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * @(#)Command.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.DrawingEditor; - -/** - * Commands encapsulate an action to be executed. Commands have - * a name and can be used in conjunction with <i>Command enabled</i> - * ui components. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld010.htm>Command</a></b><br> - * Command is a simple instance of the command pattern without undo - * support. - * <hr> - * - * @see CommandButton - * @see CommandMenu - * @see CommandChoice - * - * @version <$CURRENT_VERSION$> - */ -public interface Command { - - /** - * Executes the command. - */ - public void execute(); - - /** - * Tests if the command can be executed. - */ - public boolean isExecutable(); - - /** - * Gets the command name. - */ - public String name(); - - public DrawingEditor getDrawingEditor(); - - public Undoable getUndoActivity(); - - public void setUndoActivity(Undoable newUndoableActivity); - - public void addCommandListener(CommandListener newCommandListener); - public void removeCommandListener(CommandListener oldCommandListener); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/CommandButton.java b/jhotdraw6/src/main/java/org/jhotdraw/util/CommandButton.java deleted file mode 100644 index 8b4ea4e62..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/CommandButton.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#)CommandButton.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import javax.swing.*; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; - -/** - * A Command enabled button. Clicking the button executes the command. - * - * @see Command - * - * @version <$CURRENT_VERSION$> - */ -public class CommandButton - extends JButton implements ActionListener { - - private Command fCommand; - - /** - * Initializes the button with the given command. - * The command's name is used as the label. - */ - public CommandButton(Command command) { - super(command.name()); - fCommand = command; - addActionListener(this); - } - - /** - * Executes the command. If the command's name was changed - * as a result of the command the button's label is updated - * accordingly. - */ - public void actionPerformed(ActionEvent e) { - fCommand.execute(); - if (!getText().equals(fCommand.name()) ) { - setText(fCommand.name()); - } - } -} - - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/CommandChoice.java b/jhotdraw6/src/main/java/org/jhotdraw/util/CommandChoice.java deleted file mode 100644 index 9963ba932..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/CommandChoice.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * @(#)CommandChoice.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import javax.swing.*; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.List; - -/** - * A Command enabled choice. Selecting a choice executes the - * corresponding command. - * - * @see Command - * - * @version <$CURRENT_VERSION$> - */ -public class CommandChoice extends JComboBox implements ItemListener { - - private List fCommands; - - public CommandChoice() { - super(); - fCommands = CollectionsFactory.current().createList(10); - addItemListener(this); - } - - /** - * Adds a command to the menu. - */ - public synchronized void addItem(Command command) { - addItem(command.name()); - fCommands.add(command); - } - - /** - * Executes the command. - */ - public void itemStateChanged(ItemEvent e) { - if ((getSelectedIndex() >= 0) && (getSelectedIndex() < fCommands.size())) { - Command command = (Command)fCommands.get(getSelectedIndex()); - if (command.isExecutable()) { - command.execute(); - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/CommandListener.java b/jhotdraw6/src/main/java/org/jhotdraw/util/CommandListener.java deleted file mode 100644 index 524aa395e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/CommandListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * @(#)CommandListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.util.EventObject; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public interface CommandListener { - public void commandExecuted(EventObject commandEvent); - public void commandExecutable(EventObject commandEvent); - public void commandNotExecutable(EventObject commandEvent); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/CommandMenu.java b/jhotdraw6/src/main/java/org/jhotdraw/util/CommandMenu.java deleted file mode 100644 index 93cb140e6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/CommandMenu.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * @(#)CommandMenu.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.JHotDrawRuntimeException; -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; -import java.util.*; - -/** - * A Command enabled menu. Selecting a menu item - * executes the corresponding command. - * - * @see Command - * - * @version <$CURRENT_VERSION$> - */ -public class CommandMenu extends JMenu implements ActionListener, CommandListener { - - private HashMap hm; - - public CommandMenu(String name) { - super(name); - hm = new HashMap(); - } - - /** - * Adds a command to the menu. The item's label is - * the command's name. - */ - public synchronized void add(Command command) { - addMenuItem(command, new JMenuItem(command.name())); - } - - /** - * Adds a command with the given short cut to the menu. The item's label is - * the command's name. - */ - public synchronized void add(Command command, MenuShortcut shortcut) { - addMenuItem(command, new JMenuItem(command.name(), shortcut.getKey())); - } - - /** - * Adds a command with the given short cut to the menu. The item's label is - * the command's name. - */ - public synchronized void addCheckItem(Command command) { - addMenuItem(command, new JCheckBoxMenuItem(command.name())); - } - - protected void addMenuItem(Command command, JMenuItem m) { - m.setName(command.name()); - m.addActionListener(this); - add(m); - command.addCommandListener(this); - hm.put(m, command); -// checkEnabled(); - } - - public synchronized void remove(Command command) { - throw new JHotDrawRuntimeException("not implemented"); - } - - public synchronized void remove(MenuItem item) { - throw new JHotDrawRuntimeException("not implemented"); - } - - /** - * Changes the enabling/disabling state of a named menu item. - */ - public synchronized void enable(String name, boolean state) { - for (int i = 0; i < getItemCount(); i++) { - JMenuItem item = getItem(i); - if (name.equals(item.getText())) { - item.setEnabled(state); - return; - } - } - } - - public synchronized void checkEnabled() { - // ignore separators (a separator has a hyphen as its label) - for (int i = 0; i < getMenuComponentCount(); i++) { - Component c = getMenuComponent(i); - Command cmd = (Command) hm.get(c); - if (cmd != null) { - c.setEnabled(cmd.isExecutable()); - } - } - } - - /** - * Executes the command. - */ - public void actionPerformed(ActionEvent e) { - Object source = e.getSource(); - for (int i = 0; i < getItemCount(); i++) { - JMenuItem item = getItem(i); - // ignore separators (a separator has a hyphen as its label) - if (source == item) { - Command cmd = (Command) hm.get(item); - if (cmd != null) { - cmd.execute(); - } - break; - } - } - } - - public void commandExecuted(EventObject commandEvent) { -// checkEnabled(); - } - - public void commandExecutable(EventObject commandEvent) { -// checkEnabled(); - } - - public void commandNotExecutable(EventObject commandEvent) { -// checkEnabled(); - } -} - - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/Filler.java b/jhotdraw6/src/main/java/org/jhotdraw/util/Filler.java deleted file mode 100644 index b9d0900be..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/Filler.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * @(#)Filler.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import javax.swing.JPanel; -import java.awt.*; - -/** - * A component that can be used to reserve white space in a layout. - * - * @version <$CURRENT_VERSION$> - */ -public class Filler - extends JPanel { - - private int fWidth; - private int fHeight; - private Color fBackground; - - - public Filler(int width, int height) { - this(width, height, null); - } - - public Filler(int width, int height, Color background) { - fWidth = width; - fHeight = height; - fBackground = background; - } - - public Dimension getMinimumSize() { - return new Dimension(fWidth, fHeight); - } - - public Dimension getPreferredSize() { - return getMinimumSize(); - } - - public Color getBackground() { - if (fBackground != null) { - return fBackground; - } - return super.getBackground(); - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/FloatingTextField.java b/jhotdraw6/src/main/java/org/jhotdraw/util/FloatingTextField.java deleted file mode 100644 index 6993cc809..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/FloatingTextField.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)FloatingTextField.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; - -/** - * A text field overlay that is used to edit a TextFigure. - * A FloatingTextField requires a two step initialization: - * In a first step the overlay is created and in a - * second step it can be positioned. - * - * @see org.jhotdraw.figures.TextFigure - * - * @version <$CURRENT_VERSION$> - */ -public class FloatingTextField { - - private JTextField fEditWidget; - private Container fContainer; - - public FloatingTextField() { - fEditWidget = new JTextField(20); - } - - /** - * Creates the overlay for the given Component. - */ - public void createOverlay(Container container) { - createOverlay(container, null); - } - - /** - * Creates the overlay for the given Container using a - * specific font. - */ - public void createOverlay(Container container, Font font) { - container.add(fEditWidget, 0); - if (font != null) { - fEditWidget.setFont(font); - } - fContainer = container; - } - - /** - * Adds an action listener - */ - public void addActionListener(ActionListener listener) { - fEditWidget.addActionListener(listener); - } - - /** - * Remove an action listener - */ - public void removeActionListener(ActionListener listener) { - fEditWidget.removeActionListener(listener); - } - - /** - * Positions the overlay. - */ - public void setBounds(Rectangle r, String text) { - fEditWidget.setText(text); - fEditWidget.setLocation(r.x, r.y); - fEditWidget.setSize(r.width, r.height); - fEditWidget.setVisible(true); - fEditWidget.selectAll(); - fEditWidget.requestFocus(); - } - - /** - * Gets the text contents of the overlay. - */ - public String getText() { - return fEditWidget.getText(); - } - - /** - * Gets the preferred size of the overlay. - */ - public Dimension getPreferredSize(int cols) { - fEditWidget.setColumns(cols); - return fEditWidget.getPreferredSize(); - } - - /** - * Removes the overlay. - */ - public void endOverlay() { - fContainer.requestFocus(); - if (fEditWidget != null) { - fEditWidget.setVisible(false); - fContainer.remove(fEditWidget); - - Rectangle bounds = fEditWidget.getBounds(); - fContainer.repaint(bounds.x, bounds.y, bounds.width, bounds.height); - } - } -} - diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/Geom.java b/jhotdraw6/src/main/java/org/jhotdraw/util/Geom.java deleted file mode 100644 index b51e882fd..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/Geom.java +++ /dev/null @@ -1,423 +0,0 @@ -/* - * @(#)Geom.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.awt.Rectangle; -import java.awt.Point; -import java.awt.geom.Line2D; - -/** - * Some geometric utilities. - * - * @version <$CURRENT_VERSION$> - */ -public class Geom { - - private Geom() {} // never instantiated - - /** - * Tests if a point is on a line. - */ - static public boolean lineContainsPoint(int x1, int y1, - int x2, int y2, - int px, int py) { - - Rectangle r = new Rectangle(new Point(x1, y1)); - r.add(x2, y2); - r.grow(2, 2); - if (! r.contains(px,py)) { - return false; - } - - double a, b, x, y; - - if (x1 == x2) { - return (Math.abs(px - x1) < 3); - } - if (y1 == y2) { - return (Math.abs(py - y1) < 3); - } - - // casts to avoid integer arithmetic instead of floating-point - a = (double)(y1 - y2) / (double)(x1 - x2); - b = (double)y1 - a * (double)x1; - x = (py - b) / a; - y = a * px + b; - - return (Math.min(Math.abs(x - px), Math.abs(y - py)) < 4); - } - - static public final int NORTH = 1; - static public final int SOUTH = 2; - static public final int WEST = 3; - static public final int EAST = 4; - - /** - * Returns the direction NORTH, SOUTH, WEST, EAST from - * one point to another one. - */ - static public int direction(int x1, int y1, int x2, int y2) { - int direction = 0; - int vx = x2 - x1; - int vy = y2 - y1; - - if (vy < vx && vx > -vy) { - direction = EAST; - } - else if (vy > vx && vy > -vx) { - direction = NORTH; - } - else if (vx < vy && vx < -vy) { - direction = WEST; - } - else { - direction = SOUTH; - } - return direction; - } - - static public Point south(Rectangle r) { - return new Point(r.x + r.width /2, r.y + r.height); - } - - static public Point center(Rectangle r) { - return new Point(r.x + r.width /2, r.y + r.height/2); - } - - static public Point west(Rectangle r) { - return new Point(r.x, r.y + r.height/ 2); - } - - static public Point east(Rectangle r) { - return new Point(r.x+r.width, r.y + r.height/ 2); - } - - static public Point north(Rectangle r) { - return new Point(r.x+r.width/2, r.y); - } - - /** - * Returns the corner (bottom right) of the rectangle - * - * @param r the rectangle - * @return the corner - */ - public static Point corner(Rectangle r) - { - return new Point((int)r.getMaxX(), (int)r.getMaxY()); - } - - - /** - * Returns the top left corner of the rectangle - * - * @param r the rectangle - * @return the corner - */ - public static Point topLeftCorner(Rectangle r) - { - return r.getLocation(); - } - - - /** - * Returns the top right corner of the rectangle - * - * @param r the rectangle - * @return the corner - */ - public static Point topRightCorner(Rectangle r) - { - return new Point((int)r.getMaxX(), (int)r.getMinY()); - } - - - /** - * Returns the bottom left corner of the rectangle - * - * @param r the rectangle - * @return the corner - */ - public static Point bottomLeftCorner(Rectangle r) - { - return new Point((int)r.getMinX(), (int)r.getMaxY()); - } - - - /** - * Returns the bottom right corner of the rectangle. - * Same as corner, added for naming coherence with the other - * corner extracting methods - * - * @param r the rectangle - * @return the corner - */ - public static Point bottomRightCorner(Rectangle r) - { - return corner(r); - } - - /** - * Constains a value to the given range. - * @return the constrained value - */ - static public int range(int min, int max, int value) { - if (value < min) { - value = min; - } - if (value > max) { - value = max; - } - return value; - } - - /** - * Gets the square distance between two points. - */ - static public long length2(int x1, int y1, int x2, int y2) { - return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); - } - - /** - * Gets the distance between to points - */ - static public long length(int x1, int y1, int x2, int y2) { - return (long)Math.sqrt(length2(x1, y1, x2, y2)); - } - - /** - * Gets the angle of a point relative to a rectangle. - */ - static public double pointToAngle(Rectangle r, Point p) { - int px = p.x - (r.x + r.width/2); - int py = p.y - (r.y + r.height/2); - return Math.atan2(py*r.width, px*r.height); - } - - /** - * Gets the point on a rectangle that corresponds to the given angle. - */ - static public Point angleToPoint(Rectangle r, double angle) { - return angleToPoint(r, angle, new Point()); - } - - /** - * Gets the point on a rectangle that corresponds to the given angle. - */ - static public Point angleToPoint(Rectangle r, double angle, Point p) { - double si = Math.sin(angle); - double co = Math.cos(angle); - double e = 0.0001; - - int x= 0; - int y= 0; - if (Math.abs(si) > e) { - x= (int) ((1.0 + co/Math.abs(si))/2.0 * r.width); - x= range(0, r.width, x); - } - else if (co >= 0.0) { - x= r.width; - } - if (Math.abs(co) > e) { - y= (int) ((1.0 + si/Math.abs(co))/2.0 * r.height); - y= range(0, r.height, y); - } - else if (si >= 0.0) { - y= r.height; - } - - p.x = r.x + x; - p.y = r.y + y; - return p; - } - - /** - * Converts a polar to a point - */ - static public Point polarToPoint(double angle, double fx, double fy) { - return polarToPoint(angle, fx, fy, new Point()); - } - - /** - * Converts a polar to a point - */ - static public Point polarToPoint(double angle, double fx, double fy, Point p) { - double si = Math.sin(angle); - double co = Math.cos(angle); - p.x = (int)(fx*co+0.5); - p.y = (int)(fy*si+0.5); - return p; - } - - /** - * Gets the point on an oval that corresponds to the given angle. - */ - static public Point ovalAngleToPoint(Rectangle r, double angle) { - return ovalAngleToPoint(r, angle, new Point()); - } - - /** - * Gets the point on an oval that corresponds to the given angle. - */ - static public Point ovalAngleToPoint(Rectangle r, double angle, Point p) { - p = Geom.polarToPoint(angle, r.width/2, r.height/2, p); - p.x = r.x + r.width /2 + p.x; - p.y = r.y + r.height/2 + p.y; - return p; - } - - /** - * Standard line intersection algorithm - * Return the point of intersection if it exists, else null - **/ - // from Doug Lea's PolygonFigure - static public Point intersect(int xa, // line 1 point 1 x - int ya, // line 1 point 1 y - int xb, // line 1 point 2 x - int yb, // line 1 point 2 y - int xc, // line 2 point 1 x - int yc, // line 2 point 1 y - int xd, // line 2 point 2 x - int yd) { // line 2 point 2 y - - // source: http://vision.dai.ed.ac.uk/andrewfg/c-g-a-faq.html - // eq: for lines AB and CD - // (YA-YC)(XD-XC)-(XA-XC)(YD-YC) - // r = ----------------------------- (eqn 1) - // (XB-XA)(YD-YC)-(YB-YA)(XD-XC) - // - // (YA-YC)(XB-XA)-(XA-XC)(YB-YA) - // s = ----------------------------- (eqn 2) - // (XB-XA)(YD-YC)-(YB-YA)(XD-XC) - // XI = XA + r(XB-XA) - // YI = YA + r(YB-YA) - - double denom = ((xb - xa) * (yd - yc) - (yb - ya) * (xd - xc)); - - double rnum = ((ya - yc) * (xd - xc) - (xa - xc) * (yd - yc)); - - if (denom == 0.0) { // parallel - if (rnum == 0.0) { // coincident; pick one end of first line - if ((xa < xb && (xb < xc || xb < xd)) || - (xa > xb && (xb > xc || xb > xd))) { - return new Point(xb, yb); - } - else { - return new Point(xa, ya); - } - } - else { - return null; - } - } - - double r = rnum / denom; - double snum = ((ya - yc) * (xb - xa) - (xa - xc) * (yb - ya)); - double s = snum / denom; - - if (0.0 <= r && r <= 1.0 && 0.0 <= s && s <= 1.0) { - int px = (int)(xa + (xb - xa) * r); - int py = (int)(ya + (yb - ya) * r); - return new Point(px, py); - } - else { - return null; - } - } - - /** - * compute distance of point from line segment, or - * Double.MAX_VALUE if perpendicular projection is outside segment; or - * If pts on line are same, return distance from point - **/ - // from Doug Lea's PolygonFigure - public static double distanceFromLine(int xa, int ya, - int xb, int yb, - int xc, int yc) { - - - // source:http://vision.dai.ed.ac.uk/andrewfg/c-g-a-faq.html#q7 - //Let the point be C (XC,YC) and the line be AB (XA,YA) to (XB,YB). - //The length of the - // line segment AB is L: - // - // ___________________ - // | 2 2 - // L = \| (XB-XA) + (YB-YA) - //and - // - // (YA-YC)(YA-YB)-(XA-XC)(XB-XA) - // r = ----------------------------- - // L**2 - // - // (YA-YC)(XB-XA)-(XA-XC)(YB-YA) - // s = ----------------------------- - // L**2 - // - // Let I be the point of perpendicular projection of C onto AB, the - // - // XI=XA+r(XB-XA) - // YI=YA+r(YB-YA) - // - // Distance from A to I = r*L - // Distance from C to I = s*L - // - // If r < 0 I is on backward extension of AB - // If r>1 I is on ahead extension of AB - // If 0<=r<=1 I is on AB - // - // If s < 0 C is left of AB (you can just check the numerator) - // If s>0 C is right of AB - // If s=0 C is on AB - - int xdiff = xb - xa; - int ydiff = yb - ya; - long l2 = xdiff * xdiff + ydiff * ydiff; - - if (l2 == 0) { - return Geom.length(xa, ya, xc, yc); - } - - double rnum = (ya - yc) * (ya - yb) - (xa - xc) * (xb - xa); - double r = rnum / l2; - - if (r < 0.0 || r > 1.0) { - return Double.MAX_VALUE; - } - - double xi = xa + r * xdiff; - double yi = ya + r * ydiff; - double xd = xc - xi; - double yd = yc - yi; - return Math.sqrt(xd * xd + yd * yd); - - /* - for directional version, instead use - double snum = (ya-yc) * (xb-xa) - (xa-xc) * (yb-ya); - double s = snum / l2; - - double l = Math.sqrt((double)l2); - return = s * l; - */ - } - - /** - * compute distance of point from line segment.<br> - * Uses AWT Line2D utility methods - */ - public static double distanceFromLine2D(int xa, int ya, - int xb, int yb, - int xc, int yc) { - Line2D.Double line = new Line2D.Double(xa, xb, ya, yb); - return line.ptSegDist(xc, yc); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/GraphLayout.java b/jhotdraw6/src/main/java/org/jhotdraw/util/GraphLayout.java deleted file mode 100644 index 9862e70d2..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/GraphLayout.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * @(#)GraphLayout.java - * - * The original file Graph.java (1.5 99/11/29) is - * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved. - * Adapted by F. Wienberg, 1999 - * - * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, - * modify and redistribute this software in source and binary code form, - * provided that i) this copyright notice and license appear on all copies of - * the software; and ii) Licensee does not utilize the software in a manner - * which is disparaging to Sun. - * - * This software is provided "AS IS," without a warranty of any kind. ALL - * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY - * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR - * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE - * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING - * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS - * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, - * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER - * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF - * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGES. - * - * This software is not designed or intended for use in on-line control of - * aircraft, air traffic, aircraft navigation or aircraft communications; or in - * the design, construction, operation or maintenance of any nuclear - * facility. Licensee represents and warrants that it will not use or - * redistribute the Software for such purposes. - */ - -package org.jhotdraw.util; - -import java.util.*; -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.*; -import java.awt.*; - -/** - * @version <$CURRENT_VERSION$> - */ -public class GraphLayout extends FigureChangeAdapter { - public double LENGTH_FACTOR=1.0; - public double REPULSION_STRENGTH=0.5; - public double REPULSION_LIMIT=200.0; - int REPULSION_TYPE=0; // 0: (1-r)/r 1: 1-r 2: (1-r)^2 - public double SPRING_STRENGTH=0.1; - public double TORQUE_STRENGTH=0.25; - public double FRICTION_FACTOR=0.75; - - private Hashtable nodes = new Hashtable(), - edges = new Hashtable(); - - public GraphLayout() {} - - private GraphNode getGraphNode(Figure node) { - return (GraphNode)nodes.get(node); - } - - private double len(Figure edge) { - return ((Double)edges.get(edge)).doubleValue()*LENGTH_FACTOR; - } - - public void addNode(Figure node) { - nodes.put(node, new GraphNode(node)); - node.addFigureChangeListener(this); - } - - public void addEdge(ConnectionFigure edge, int addlen) { - Dimension d1 = edge.getStartConnector().owner().size(); - Dimension d2 = edge.getEndConnector().owner().size(); - int len = Math.max(d1.width,d1.height)/2 + - Math.max(d2.width,d2.height)/2 + addlen; - edges.put(edge, new Double(len)); - } - - public synchronized void relax() { - if (nodes == null) - return; - Enumeration edgeEnum = edges.keys(); - while (edgeEnum.hasMoreElements()) { - ConnectionFigure e = (ConnectionFigure)edgeEnum.nextElement(); - double targetlen = len(e); - GraphNode from = getGraphNode(e.getStartConnector().owner()); - GraphNode to = getGraphNode(e.getEndConnector().owner()); - double vx = to.x - from.x; - double vy = to.y - from.y; - double len = Math.sqrt(vx * vx + vy * vy); - - if (len>0) { - double f = SPRING_STRENGTH * (targetlen - len) / len; - double dx = f * vx; - double dy = f * vy; - - double phi=Math.atan2(vx,vy); - double dir=-Math.sin(4*phi); - dx += TORQUE_STRENGTH*vy*dir/len; - dy += -TORQUE_STRENGTH*vx*dir/len; - - to.dx += dx; - to.dy += dy; - from.dx += -dx; - from.dy += -dy; - } - } - - Enumeration nodeEnum1 = nodes.elements(); - while (nodeEnum1.hasMoreElements()) { - GraphNode n1 = (GraphNode)nodeEnum1.nextElement(); - double dx = 0; - double dy = 0; - - Enumeration nodeEnum2 = nodes.elements(); - while (nodeEnum2.hasMoreElements()) { - GraphNode n2 = (GraphNode)nodeEnum2.nextElement(); - if (n1 == n2) { - continue; - } - double vx = n1.x - n2.x; - double vy = n1.y - n2.y; - double lensqr = vx * vx + vy * vy; - double len = Math.sqrt(lensqr); - if (len == 0) { - dx += REPULSION_STRENGTH * Math.random(); - dy += REPULSION_STRENGTH * Math.random(); - } - else if (len < REPULSION_LIMIT) { - // Normalize length. - vx=vx/REPULSION_LIMIT; - vy=vy/REPULSION_LIMIT; - len=len/REPULSION_LIMIT; - // Compute force. - double f=0; - - switch (REPULSION_TYPE) { - case 0: - f = 0.5 * (1 - len) / len; - break; - case 1: - f = 1 - len; - break; - case 2: - f = 2 * (1 - len) * (1 - len); - break; - } - - f *= REPULSION_STRENGTH; - dx += f * vx; - dy += f * vy; - } - } - - n1.dx += dx; - n1.dy += dy; - } - - Enumeration nodeEnum = nodes.keys(); - while (nodeEnum.hasMoreElements()) { - Figure node = (Figure)nodeEnum.nextElement(); - GraphNode n = getGraphNode(node); - if (!Boolean.TRUE.equals(node.getAttribute(FigureAttributeConstant.LOCATION))) { - n.x += Math.max(-5, Math.min(5, n.dx)); - n.y += Math.max(-5, Math.min(5, n.dy)); - Point c = node.center(); - node.moveBy((int)Math.round(n.x)-c.x, - (int)Math.round(n.y)-c.y); - - //System.out.println("v= " + n.dx + "," + n.dy); - if (n.x < 0) { - n.x = 0; - } - if (n.y < 0) { - n.y = 0; - } - } - n.dx *= FRICTION_FACTOR; - n.dy *= FRICTION_FACTOR; - } - } - - /** - * Sent when a figure changed - */ - synchronized public void figureChanged(FigureChangeEvent e) { - if (nodes!=null) { - Figure node = e.getFigure(); - if (nodes.containsKey(node)) { - getGraphNode(node).update(); - } - } - } - - public void remove() { - if (nodes!=null) { - Enumeration nodeEnum = nodes.keys(); - while (nodeEnum.hasMoreElements()) { - Figure node = (Figure)nodeEnum.nextElement(); - node.removeFigureChangeListener(this); - } - nodes = null; - edges = null; - } - } -} - -class GraphNode { - double x=0.0, y=0.0; - double dx=0.0; - double dy=0.0; - final Figure node; - - GraphNode(Figure newNode) { - node = newNode; - update(); - } - - void update() { - Point p = node.center(); - if (Math.abs(p.x - Math.round(x))>1 || - Math.abs(p.y - Math.round(y))>1) { - x = p.x; - y = p.y; - //System.out.println(this+" has new coords: "+x+","+y+"\n"); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/Iconkit.java b/jhotdraw6/src/main/java/org/jhotdraw/util/Iconkit.java deleted file mode 100644 index 73ee5a3f8..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/Iconkit.java +++ /dev/null @@ -1,248 +0,0 @@ -/* - * @(#)Iconkit.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import javax.swing.*; -import java.awt.*; -import java.awt.image.ImageProducer; -import java.net.URL; -import java.util.Iterator; -import java.util.Set; -import java.util.Map; -import java.util.Hashtable; - -/** - * The Iconkit class supports the sharing of images. It maintains - * a map of image names and their corresponding images. - * - * Iconkit also supports to load a collection of images in - * synchronized way. - * The resolution of a path name to an image is delegated to the DrawingEditor. - * <hr> - * <b>Design Patterns</b><P> - * <img src="images/red-ball-small.gif" width=6 height=6 alt=" o "> - * <b><a href=../pattlets/sld031.htm>Singleton</a></b><br> - * The Iconkit is a singleton. - * <hr> - * - * @version <$CURRENT_VERSION$> - */ -public class Iconkit { - /* Holds URLs as keys, and Images as values */ - private Map fMap; - /* Holds URLs */ - private Set fRegisteredImages; - private Component fComponent; - private final static int ID = 123; - private static Iconkit fgIconkit = null; - - /** - * Constructs an Iconkit that uses the given editor to - * resolve image path names. - */ - public Iconkit(Component component) { - fMap = new Hashtable(53); - fRegisteredImages = CollectionsFactory.current().createSet(); - fComponent = component; - fgIconkit = this; - } - - /** - * Gets the single instance - */ - public static Iconkit instance() { - return fgIconkit; - } - - /********************************************************************* - * - * Basic methods for image/icon retrieval. - * - ********************************************************************/ - - /** - * Just gets the image pointed to by the URL and doesn't store - * it in cache. - */ - public Image loadImageUncachedURL(URL url) { - Toolkit toolkit = Toolkit.getDefaultToolkit(); - try { - return toolkit.createImage((ImageProducer) url.getContent()); - } - catch (Exception ex) { - return null; - } - } - - /** - * Just gets the file but doesn't store it in cache. - */ - public Image loadImageUncached(String fileName) { - return loadImageUncachedURL(getResourceURL(fileName)); - } - - /** - * Loads an image URL with the given name, caches it, and - * optionally waits for it to finish loading. - */ - public Image loadImageURL(URL url, boolean waitForLoad) { - if (fMap.containsKey(url)) { - return (Image) fMap.get(url); - } - - Image image = loadImageUncachedURL(url); - - if (image != null) { - fMap.put(url, image); - if (waitForLoad) { - waitForLoadedImage(image); - } - } - - return image; - } - - /** - * Loads an image file with the given name, caches it, and - * optionally waits for it to finish loading. - */ - public Image loadImage(String fileName, boolean waitForLoad) { - return loadImageURL(getResourceURL(fileName), waitForLoad); - } - - /** - * Loads an image URL with the given name and caches it - */ - public Image loadImageURL(URL url) { - return loadImageURL(url, false); - } - - /** - * Loads an image with the given fileName and caches it. - */ - public Image loadImage(String fileName) { - return loadImageURL(getResourceURL(fileName), false); - } - - /** - * Blocks while image loads and returns a completely loaded - * version of image. - */ - public Image waitForLoadedImage(Image image) { - if (image!=null) { - ImageIcon icon = new ImageIcon(image); - // icon.getImage forces the wait to happen - image = icon.getImage(); - } - return image; - } - - /** - * To translate between a resource and a URL - */ - private URL getResourceURL(String resourceName) { - return getClass().getResource(resourceName); - } - - /** - * Registers a URL that is then loaded together with - * the other registered images by loadRegisteredImages. - * @see #loadRegisteredImages - */ - public void registerImageURL(URL url) { - fRegisteredImages.add(url); - } - - /** - * Registers the URL for the image resource - * @see #registerImageURL - */ - public void registerImage(String fileName) { - registerImageURL(getResourceURL(fileName)); - } - - /** - * Loads all registered images. - * If component is null, the component supplied in the - * constructor will be used. - * @see #registerImage - * @see #registerImageURL - */ - public void loadRegisteredImages(Component component) { - if (fRegisteredImages.size() == 0) - return; - - if (component == null) { - component = fComponent; - } - - MediaTracker tracker = new MediaTracker(component); - // register images with MediaTracker - Iterator iter = fRegisteredImages.iterator(); - while (iter.hasNext()) { - URL url = (URL)iter.next(); - if (! fMap.containsKey(url)) { - tracker.addImage(loadImageURL(url), ID); - } - } - fRegisteredImages.clear(); - - // block until all images are loaded - try { - tracker.waitForAll(); - } - catch (Exception e) { - // ignore: do nothing - } - } - - /********************************************************************* - * - * Deprecated methods - * - ********************************************************************/ - - /** - * Gets the image with the given fileName. If the image can't - * be found it tries it again after registering the image and - * loading all the registered images. - * - * @deprecated use loadImage instead - */ - public Image getImage(String fileName) { - return loadImage(fileName, true); - } - - /** - * Registers and loads an image. - * If component is null, the component supplied in the - * constructor will be used. - * - * @deprecated use loadImage instead - */ - public Image registerAndLoadImage(Component component, String fileName) { - registerImage(fileName); - loadRegisteredImages(component); - return loadImage(fileName, true); - } - - /** - * Loads an image but does not put in in the cache. - * - * @deprecated use loadImageUncached instead - */ - public Image loadImageResource(String fileName) { - return loadImageUncached(fileName); - } - - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteButton.java b/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteButton.java deleted file mode 100644 index ef359f432..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteButton.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * @(#)PaletteButton.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import javax.swing.*; -import java.awt.event.*; - -/** - * A palette button is a three state button. The states are normal - * pressed and selected. It uses to the palette listener interface - * to notify about state changes. - * - * @see PaletteListener - * @see PaletteLayout - * - * @version <$CURRENT_VERSION$> -*/ -public abstract class PaletteButton - extends JButton - implements MouseListener, MouseMotionListener { - - protected static final int NORMAL = 1; - protected static final int PRESSED = 2; - protected static final int SELECTED = 3; - - private int fState; - private int fOldState; - - private PaletteListener fListener; - - /** - * Constructs a PaletteButton. - * @param listener the listener to be notified. - */ - public PaletteButton(PaletteListener listener) { - fListener = listener; - fState = fOldState = NORMAL; - addMouseListener(this); - addMouseMotionListener(this); - } - - public Object value() { - return null; - } - - public String name() { - return ""; - } - - public void reset() { - if (isEnabled()) { - fState = NORMAL; - setSelected(false); - repaint(); - } - } - - public void select() { - if (isEnabled()) { - fState = SELECTED; - setSelected(true); - repaint(); - } - } - - public void mousePressed(MouseEvent e) { - if (isEnabled()) { - fOldState = fState; - fState = PRESSED; - repaint(); - } - } - - public void mouseDragged(MouseEvent e) { - if (isEnabled()) { - if (contains(e.getX(),e.getY())) { - fState = PRESSED; - } - else { - fState = fOldState; - } - repaint(); - } - } - - public void mouseReleased(MouseEvent e) { - if (isEnabled()) { - fState = fOldState; - repaint(); - if (contains(e.getX(),e.getY())) { - fListener.paletteUserSelected(this); - } - } - } - - public void mouseMoved(MouseEvent e) { - fListener.paletteUserOver(this, true); - } - - public void mouseExited(MouseEvent e) { - if (fState == PRESSED) { - // JDK1.1 on MS-Windows sometimes looses mouse released - mouseDragged(e); - } - fListener.paletteUserOver(this, false); - } - - public void mouseClicked(MouseEvent e) {} - public void mouseEntered(MouseEvent e) {} - -// Not necessary anymore in JFC due to the support of Icons in JButton -/* - public abstract void paintBackground(Graphics g); - public abstract void paintNormal(Graphics g); - public abstract void paintPressed(Graphics g); - public abstract void paintSelected(Graphics g); - - public void update(Graphics g) { - paint(g); - } - - public void paint(Graphics g) { - paintBackground(g); - - switch (fState) { - case PRESSED: - paintPressed(g); - break; - case SELECTED: - paintSelected(g); - break; - case NORMAL: - default: - paintNormal(g); - break; - } - } -*/ -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteIcon.java b/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteIcon.java deleted file mode 100644 index 3aa4355cc..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteIcon.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * @(#)PaletteIcon.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.awt.*; - -/** - * A three state icon that can be used in Palettes. - * - * @see PaletteButton - * - * @version <$CURRENT_VERSION$> - */ -public class PaletteIcon extends Object { - - Image fNormal; - Image fPressed; - Image fSelected; - Dimension fSize; - - public PaletteIcon(Dimension size, Image normal, Image pressed, Image selected) { - fSize = size; - fNormal = normal; - fPressed = pressed; - fSelected = selected; - } - - public Image normal() { return fNormal; } - public Image pressed() { return fPressed; } - public Image selected() { return fSelected; } - - public int getWidth() { return fSize.width; } - public int getHeight() { return fSize.height; } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteLayout.java b/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteLayout.java deleted file mode 100644 index c469a81f6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteLayout.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)PaletteLayout.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.awt.*; - -/** - * A custom layout manager for the palette. - * - * @see PaletteButton - * - * @version <$CURRENT_VERSION$> - */ -public class PaletteLayout implements LayoutManager { - - private int fGap; - private Point fBorder; - private boolean fVerticalLayout; - - /** - * Initializes the palette layout. - * @param gap the gap between palette entries. - */ - public PaletteLayout(int gap) { - this(gap, new Point(0,0), true); - } - - public PaletteLayout(int gap, Point border) { - this(gap, border, true); - } - - public PaletteLayout(int gap, Point border, boolean vertical) { - fGap = gap; - fBorder = border; - fVerticalLayout = vertical; - } - - public void addLayoutComponent(String name, Component comp) { - } - - public void removeLayoutComponent(Component comp) { - } - - public Dimension preferredLayoutSize(Container target) { - return minimumLayoutSize(target); - } - - public Dimension minimumLayoutSize(Container target) { - Dimension dim = new Dimension(0, 0); - int nmembers = target.getComponentCount(); - - for (int i = 0 ; i < nmembers ; i++) { - Component m = target.getComponent(i); - if (m.isVisible()) { - Dimension d = m.getMinimumSize(); - if (fVerticalLayout) { - dim.width = Math.max(dim.width, d.width); - if (i > 0) { - dim.height += fGap; - } - dim.height += d.height; - } - else { - dim.height = Math.max(dim.height, d.height); - if (i > 0) { - dim.width += fGap; - } - dim.width += d.width; - } - } - } - - Insets insets = target.getInsets(); - dim.width += insets.left + insets.right; - dim.width += 2 * fBorder.x; - dim.height += insets.top + insets.bottom; - dim.height += 2 * fBorder.y; - return dim; - } - - public void layoutContainer(Container target) { - Insets insets = target.getInsets(); - int nmembers = target.getComponentCount(); - int x = insets.left + fBorder.x; - int y = insets.top + fBorder.y; - - for (int i = 0 ; i < nmembers ; i++) { - Component m = target.getComponent(i); - if (m.isVisible()) { - Dimension d = m.getMinimumSize(); - m.setBounds(x, y, d.width, d.height); - if (fVerticalLayout) { - y += d.height; - y += fGap; - } - else { - x += d.width; - x += fGap; - } - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteListener.java b/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteListener.java deleted file mode 100644 index fbf22c694..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/PaletteListener.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * @(#)PaletteListener.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -/** - * Interface for handling palette events. - * - * @see PaletteButton - * - * @version <$CURRENT_VERSION$> - */ -public interface PaletteListener { - /** - * The user selected a palette entry. The selected button is - * passed as an argument. - */ - public void paletteUserSelected(PaletteButton button); - - /** - * The user moved the mouse over the palette entry. - */ - public void paletteUserOver(PaletteButton button, boolean inside); -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/RedoCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/util/RedoCommand.java deleted file mode 100644 index 0511c4fa6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/RedoCommand.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * @(#)RedoCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.standard.*; -import org.jhotdraw.framework.*; - -/** - * Command to redo the latest undone change in the drawing. - * - * @version <$CURRENT_VERSION$> - */ -public class RedoCommand extends AbstractCommand { - - /** - * Constructs a properties command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public RedoCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - UndoManager um = getDrawingEditor().getUndoManager(); - if ((um == null) || !um.isRedoable()) { - return; - } - - Undoable lastRedoable = um.popRedo(); - // Execute redo - boolean hasBeenUndone = lastRedoable.redo(); - // Add to undo stack - if (hasBeenUndone && lastRedoable.isUndoable()) { - um.pushUndo(lastRedoable); - } - - lastRedoable.getDrawingView().checkDamage(); - - getDrawingEditor().figureSelectionChanged(lastRedoable.getDrawingView()); - } - - /** - * Used in enabling the redo menu item. - * Redo menu item will be enabled only when there is at least one redoable - * activity in the UndoManager. - */ - public boolean isExecutableWithView() { - UndoManager um = getDrawingEditor().getUndoManager(); - if ((um != null) && (um.getRedoSize() > 0)) { - return true; - } - - return false; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/ReverseListEnumerator.java b/jhotdraw6/src/main/java/org/jhotdraw/util/ReverseListEnumerator.java deleted file mode 100644 index fd50237df..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/ReverseListEnumerator.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * @(#)ReverseListEnumerator.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Iterator; - -/** - * An Enumeration that enumerates a list back (size-1) to front (0). - * - * @version <$CURRENT_VERSION$> - */ -public class ReverseListEnumerator implements Iterator { - - private List myList; - private int count; - - public ReverseListEnumerator(List l) { - myList = l; - count = myList.size() - 1; - } - - public boolean hasNext() { - return count >= 0; - } - - public Object next() { - if (count >= 0) { - return myList.get(count--); - } - throw new NoSuchElementException("ReverseListEnumerator"); - } - - public void remove() { - myList.remove(count); - count--; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/SerializationStorageFormat.java b/jhotdraw6/src/main/java/org/jhotdraw/util/SerializationStorageFormat.java deleted file mode 100644 index b443accb7..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/SerializationStorageFormat.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * @(#)SerializationStorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.io.*; -import org.jhotdraw.framework.Drawing; - -/** - * A SerializationStorageFormat is a straight-forward file format to store and restore - * Drawings. It uses Java's serialization mechanism to store Drawings. The SerializationStorageFormat - * has the file extension "ser" (e.g. my_picasso.ser). - * - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class SerializationStorageFormat extends StandardStorageFormat { - - /** - * Create a SerialzationStorageFormat for storing and restoring Drawings. - */ - public SerializationStorageFormat() { - super(); - } - - /** - * Factory method to create the file extension recognized by the FileFilter for this - * SerializationStorageFormat. The SerializationStorageFormat has the file extension "ser" - * (e.g. my_picasso.ser). - * - * @return new file extension - */ - protected String createFileExtension() { - return "ser"; - } - - /** - * Factory method to create a file description for the file type when displaying the - * associated FileFilter. - * - * @return new file description - */ - public String createFileDescription() { - return "Serialization (" + getFileExtension() + ")"; - } - - /** - * Store a Drawing under a given name. The name should be valid with regard to the FileFilter - * that means, it should already contain the appropriate file extension. - * - * @param fileName file name of the Drawing under which it should be stored - * @param saveDrawing drawing to be saved - */ - public String store(String fileName, Drawing saveDrawing) throws IOException { - FileOutputStream stream = new FileOutputStream(adjustFileName(fileName)); - ObjectOutput output = new ObjectOutputStream(stream); - output.writeObject(saveDrawing); - output.close(); - return adjustFileName(fileName); - } - - /** - * Restore a Drawing from a file with a given name. The name must be should with regard to the - * FileFilter that means, it should have the appropriate file extension. - * - * @param fileName of the file in which the Drawing has been saved - * @return restored Drawing - */ - public Drawing restore(String fileName) throws IOException { - try { - FileInputStream stream = new FileInputStream(fileName); - ObjectInput input = new ObjectInputStream(stream); - return (Drawing)input.readObject(); - } - catch (ClassNotFoundException exception) { - throw new IOException("Could not restore drawing '" + fileName +"': class not found!"); - } - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/StandardStorageFormat.java b/jhotdraw6/src/main/java/org/jhotdraw/util/StandardStorageFormat.java deleted file mode 100644 index 8327ca446..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/StandardStorageFormat.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * @(#)StandardStorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import javax.swing.filechooser.FileFilter; -import java.io.IOException; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.File; -import org.jhotdraw.framework.Drawing; - -/** - * A StandardStorageFormat is an internal file format to store and restore - * Drawings. It uses its own descriptive syntax ands write classes and attributes - * as plain text in a text file. The StandardStorageFormat has the file extension - * "draw" (e.g. my_picasso.draw). - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class StandardStorageFormat implements StorageFormat { - - /** - * FileFilter for a javax.swing.JFileChooser which recognizes files with the - * extension "draw" - */ - private FileFilter myFileFilter; - - /** - * File extension - */ - private String myFileExtension; - - /** - * Description of the file type when displaying the FileFilter - */ - private String myFileDescription; - - /** - * Create a StandardStorageFormat for storing and restoring Drawings. - */ - public StandardStorageFormat() { - setFileExtension(createFileExtension()); - setFileDescription(createFileDescription()); - setFileFilter(createFileFilter()); - } - - /** - * Factory method to create the file extension recognized by the FileFilter for this - * StandardStorageFormat. The StandardStorageFormat has the file extension "draw" - * (e.g. my_picasso.draw). - * - * @return new file extension - */ - protected String createFileExtension() { - return myFileExtension = "draw"; - } - - /** - * Set the file extension for the storage format - * - * @param newFileExtension extension - */ - public void setFileExtension(String newFileExtension) { - myFileExtension = newFileExtension; - } - - /** - * Return the file extension for the storage format - * - * @return file extension - */ - public String getFileExtension() { - return myFileExtension; - } - - /** - * Factory method to create a file description for the file type when displaying the - * associated FileFilter. - * - * @return new file description - */ - public String createFileDescription() { - return "Internal Format (" + getFileExtension() + ")"; - } - - /** - * Set the file description for the file type of the storage format - * - * @param newFileDescription description of the file type - */ - public void setFileDescription(String newFileDescription) { - myFileDescription = newFileDescription; - } - - /** - * Return the file description for the file type of the storage format - * - * @return description of the file type - */ - public String getFileDescription() { - return myFileDescription; - } - - /** - * Factory method to create a FileFilter that accepts file with the appropriate - * file exention used by a javax.swing.JFileChooser. Subclasses can override this - * method to provide their own file filters. - * - * @return FileFilter for this StorageFormat - */ - protected FileFilter createFileFilter() { - return new FileFilter() { - public boolean accept(File checkFile) { - // still display directories for navigation - if (checkFile.isDirectory()) { - return true; - } - else { - return checkFile.getName().endsWith("." + getFileExtension()); - } - } - - public String getDescription() { - return getFileDescription(); - } - }; - } - - /** - * Set the FileFilter used to identify Drawing files with the correct file - * extension for this StorageFormat. - * - * @param newFileFilter FileFilter for this StorageFormat - */ - public void setFileFilter(FileFilter newFileFilter) { - myFileFilter = newFileFilter; - } - - /** - * Return the FileFilter used to identify Drawing files with the correct file - * extension for this StorageFormat. - * - * @return FileFilter for this StorageFormat - */ - public FileFilter getFileFilter() { - return myFileFilter; - } - - /** - * @see org.jhotdraw.util.StorageFormat#isRestoreFormat() - */ - public boolean isRestoreFormat() { - return true; - } - - /** - * @see org.jhotdraw.util.StorageFormat#isStoreFormat() - */ - public boolean isStoreFormat() { - return true; - } - - /** - * Store a Drawing under a given name. If the file name does not have the correct - * file extension, then the file extension is added. - * - * @param fileName file name of the Drawing under which it should be stored - * @param saveDrawing drawing to be saved - * @return file name with correct file extension - */ - public String store(String fileName, Drawing saveDrawing) throws IOException { - FileOutputStream stream = new FileOutputStream(adjustFileName(fileName)); - StorableOutput output = new StorableOutput(stream); - output.writeStorable(saveDrawing); - output.close(); - return adjustFileName(fileName); - } - - /** - * Restore a Drawing from a file with a given name. - * - * @param fileName of the file in which the Drawing has been saved - * @return restored Drawing - */ - public Drawing restore(String fileName) throws IOException { - if (!hasCorrectFileExtension(fileName)) { - return null; - } - else { - FileInputStream stream = new FileInputStream(fileName); - StorableInput input = new StorableInput(stream); - return (Drawing)input.readStorable(); - } - } - - /** - * Test, whether two StorageFormats are the same. They are the same if they both support the - * same file extension. - * - * @return true, if both StorageFormats have the same file extension, false otherwise - */ - public boolean equals(Object compareObject) { - if (compareObject instanceof StandardStorageFormat) { - return getFileExtension().equals(((StandardStorageFormat)compareObject).getFileExtension()); - } - else { - return false; - } - } - - /** - * Adjust a file name to have the correct file extension. - * - * @param testFileName file name to be tested for a correct file extension - * @return testFileName + file extension if necessary - */ - protected String adjustFileName(String testFileName) { - if (!hasCorrectFileExtension(testFileName)) { - return testFileName + "." + getFileExtension(); - } - else { - return testFileName; - } - } - - /** - * Test whether the file name has the correct file extension - * - * @return true, if the file has the correct extension, false otherwise - */ - protected boolean hasCorrectFileExtension(String testFileName) { - return testFileName.endsWith("." + getFileExtension()); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/StandardVersionControlStrategy.java b/jhotdraw6/src/main/java/org/jhotdraw/util/StandardVersionControlStrategy.java deleted file mode 100644 index 31115210b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/StandardVersionControlStrategy.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * @(#)StandardVersionControlStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.*; - -/** - * @author Wolfram Kaiser - * @version <$CURRENT_VERSION$> - */ -public class StandardVersionControlStrategy implements VersionControlStrategy { - private VersionRequester myVersionRequester; - - public StandardVersionControlStrategy(VersionRequester newVersionRequester) { - setVersionRequester(newVersionRequester); - } - - /** - * Define a strategy how to select those versions of JHotDraw - * with which they are compatible. - */ - public void assertCompatibleVersion() { - String[] requiredVersions = getVersionRequester().getRequiredVersions(); - // version is compatible if no version was specified - if (requiredVersions.length == 0) { - return; - } - for (int i = 0; i < requiredVersions.length; i++) { - if (isCompatibleVersion(requiredVersions[i])) { - // a compatible version has been found - return; - } - } - // no matching version was found - handleIncompatibleVersions(); - } - - /** - * This method is called in open() if an incompatible version has been - * encountered. Applications can override this method to provide customized - * exception handling for this case. In the default implementation, a - * JHotDrawRuntimeException is thrown. - */ - protected void handleIncompatibleVersions() { - // collect version info - String[] requiredVersions = getVersionRequester().getRequiredVersions(); - StringBuffer expectedVersions = new StringBuffer("["); - for (int i = 0; i < requiredVersions.length - 1; i++) { - expectedVersions.append(requiredVersions[i] + ", "); - } - if (requiredVersions.length > 0) { - expectedVersions.append(requiredVersions[requiredVersions.length - 1]); - } - expectedVersions.append("]"); - - // no compatible version has been found - throw new JHotDrawRuntimeException("Incompatible version of JHotDraw found: " - + VersionManagement.getJHotDrawVersion() - + " (expected: " + expectedVersions + ")"); - } - - /** - * Subclasses can override this method to specify an algorithms that determines - * how version strings are compared and which version strings can be regarded - * as compatible. For example, a subclass may choose that all versions 5.x of - * JHotDraw are compatible with the application, so only the first digit in - * the version number is considered significant. In the default implementation, - * all versions that are equal or greater than the expected version are compatible. - * - * @param compareVersionString application version to compare with JHotDraw's version - */ - protected boolean isCompatibleVersion(String compareVersionString) { - return VersionManagement.isCompatibleVersion(compareVersionString); - } - - private void setVersionRequester(VersionRequester newVersionRequester) { - myVersionRequester = newVersionRequester; - } - - protected VersionRequester getVersionRequester() { - return myVersionRequester; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/Storable.java b/jhotdraw6/src/main/java/org/jhotdraw/util/Storable.java deleted file mode 100644 index 217084e49..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/Storable.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)Storable.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.io.*; - -/** - * Interface that is used by StorableInput and StorableOutput - * to flatten and resurrect objects. Objects that implement - * this interface and that are resurrected by StorableInput - * have to provide a default constructor with no arguments. - * - * @see StorableInput - * @see StorableOutput - * - * @version <$CURRENT_VERSION$> - */ -public interface Storable { - /** - * Writes the object to the StorableOutput. - */ - public void write(StorableOutput dw); - - /** - * Reads the object from the StorableInput. - */ - public void read(StorableInput dr) throws IOException; -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/StorableInput.java b/jhotdraw6/src/main/java/org/jhotdraw/util/StorableInput.java deleted file mode 100644 index 7e5a86b86..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/StorableInput.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * @(#)StorableInput.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.io.*; -import java.awt.Color; -import java.util.List; - -/** - * An input stream that can be used to resurrect Storable objects. - * StorableInput preserves the object identity of the stored objects. - * - * @see Storable - * @see StorableOutput - * - * @version <$CURRENT_VERSION$>s - */ -public class StorableInput { - - private StreamTokenizer fTokenizer; - private List fMap; - - /** - * Initializes a Storable input with the given input stream. - */ - public StorableInput(InputStream stream) { - Reader r = new BufferedReader(new InputStreamReader(stream)); - fTokenizer = new StreamTokenizer(r); - // include inner class separate in class names - fTokenizer.wordChars('$', '$'); - fMap = CollectionsFactory.current().createList(); - } - - /** - * Reads and resurrects a Storable object from the input stream. - */ - public Storable readStorable() throws IOException { - Storable storable; - String s = readString(); - - if (s.equals("NULL")) { - return null; - } - - if (s.equals("REF")) { - int ref = readInt(); - return retrieve(ref); - } - - storable = (Storable) makeInstance(s); - map(storable); - storable.read(this); - return storable; - } - - /** - * Reads a string from the input stream. - */ - public String readString() throws IOException { - int token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_WORD || token == '"') { - return fTokenizer.sval; - } - - String msg = "String expected in line: " + fTokenizer.lineno(); - throw new IOException(msg); - } - - /** - * Reads an int from the input stream. - */ - public int readInt() throws IOException { - int token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_NUMBER) { - return (int) fTokenizer.nval; - } - - String msg = "Integer expected in line: " + fTokenizer.lineno(); - IOException exception = new IOException(msg); - exception.printStackTrace(); - throw new IOException(msg); - } - - /** - * Reads an int from the input stream. - */ - public long readLong() throws IOException { - long token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_NUMBER) { - return (long)fTokenizer.nval; - } - String msg = "Long expected in line: " + fTokenizer.lineno(); - IOException exception = new IOException(msg); - //exception.printStackTrace(); - throw exception; - } - - /** - * Reads a color from the input stream. - */ - public Color readColor() throws IOException { - return new Color(readInt(), readInt(), readInt()); - } - - /** - * Reads a double from the input stream. - */ - public double readDouble() throws IOException { - double value = 0.0; - int token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_NUMBER) { - // Allow for a bug in StreamTokenizer (JDK-bugs 4079180, 4146533 and 4638205), which - // causes the exponent to be ignored, then read in as a string as the next token. - // This is a nasty kludge and I think it could fail if a number - // without an exponent is followed by a string beginning with "E" or "e" - value = fTokenizer.nval; - int token2 = fTokenizer.nextToken(); - if (token2 == StreamTokenizer.TT_WORD && - (fTokenizer.sval.charAt(0) == 'E' || fTokenizer.sval.charAt(0) == 'e')) { - value = Double.valueOf(value+fTokenizer.sval).doubleValue(); - } - else { - fTokenizer.pushBack(); - } - return value; - } - else { - throw new IOException("Double expected in line: " + fTokenizer.lineno()); - } - } - - /** - * Reads a boolean from the input stream. - */ - public boolean readBoolean() throws IOException { - int token = fTokenizer.nextToken(); - if (token == StreamTokenizer.TT_NUMBER) { - return ((int) fTokenizer.nval) == 1; - } - - String msg = "Integer expected in line: " + fTokenizer.lineno(); - throw new IOException(msg); - } - - private Object makeInstance(String className) throws IOException { - try { - Class cl = Class.forName(className); - return cl.newInstance(); - } - catch (NoSuchMethodError e) { - throw new IOException("Class " + className - + " does not seem to have a no-arg constructor"); - } - catch (ClassNotFoundException e) { - throw new IOException("No class: " + className); - } - catch (InstantiationException e) { - throw new IOException("Cannot instantiate: " + className); - } - catch (IllegalAccessException e) { - throw new IOException("Class (" + className + ") not accessible"); - } - } - - private void map(Storable storable) { - if (!fMap.contains(storable)) { - fMap.add(storable); - } - } - - private Storable retrieve(int ref) { - return (Storable)fMap.get(ref); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/StorableOutput.java b/jhotdraw6/src/main/java/org/jhotdraw/util/StorableOutput.java deleted file mode 100644 index d5d6948f3..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/StorableOutput.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * @(#)StorableOutput.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.io.*; -import java.awt.Color; -import java.util.List; - -/** - * An output stream that can be used to flatten Storable objects. - * StorableOutput preserves the object identity of the stored objects. - * - * @see Storable - * @see StorableInput - * - * @version <$CURRENT_VERSION$> - */ -public class StorableOutput extends Object { - - private PrintWriter fStream; - private List fMap; - private int fIndent; - - /** - * Initializes the StorableOutput with the given output stream. - */ - public StorableOutput(OutputStream stream) { - fStream = new PrintWriter(stream); - fMap = CollectionsFactory.current().createList(); - fIndent = 0; - } - - /** - * Writes a storable object to the output stream. - */ - public void writeStorable(Storable storable) { - if (storable == null) { - fStream.print("NULL"); - space(); - return; - } - - if (mapped(storable)) { - writeRef(storable); - return; - } - - incrementIndent(); - startNewLine(); - map(storable); - fStream.print(storable.getClass().getName()); - space(); - storable.write(this); - space(); - decrementIndent(); - } - - /** - * Writes an int to the output stream. - */ - public void writeInt(int i) { - fStream.print(i); - space(); - } - - /** - * Writes a long to the output stream. - */ - public void writeLong(long l) { - fStream.print(l); - space(); - } - - public void writeColor(Color c) { - writeInt(c.getRed()); - writeInt(c.getGreen()); - writeInt(c.getBlue()); - } - - /** - * Writes an int to the output stream. - */ - public void writeDouble(double d) { - fStream.print(d); - space(); - } - - /** - * Writes an int to the output stream. - */ - public void writeBoolean(boolean b) { - if (b) { - fStream.print(1); - } - else { - fStream.print(0); - } - space(); - } - - /** - * Writes a string to the output stream. Special characters - * are quoted. - */ - public void writeString(String s) { - fStream.print('"'); - for(int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - switch(c) { - case '\n': fStream.print('\\'); fStream.print('n'); break; - case '"' : fStream.print('\\'); fStream.print('"'); break; - case '\\': fStream.print('\\'); fStream.print('\\'); break; - case '\t': fStream.print('\\'); fStream.print('\t'); break; - default: fStream.print(c); - } - - } - fStream.print('"'); - space(); - } - - /** - * Closes a storable output stream. - */ - public void close() { - fStream.close(); - } - - private boolean mapped(Storable storable) { - return fMap.contains(storable); - } - - private void map(Storable storable) { - if (!fMap.contains(storable)) { - fMap.add(storable); - } - } - - private void writeRef(Storable storable) { - int ref = fMap.indexOf(storable); - - fStream.print("REF"); - space(); - fStream.print(ref); - space(); - } - - private void incrementIndent() { - fIndent += 4; - } - - private void decrementIndent() { - fIndent -= 4; - if (fIndent < 0) fIndent = 0; - } - - private void startNewLine() { - fStream.println(); - for (int i=0; i<fIndent; i++) { - space(); - } - } - - private void space() { - fStream.print(' '); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/StorageFormat.java b/jhotdraw6/src/main/java/org/jhotdraw/util/StorageFormat.java deleted file mode 100644 index caa70bdbb..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/StorageFormat.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * @(#)StorageFormat.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: (c) by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import javax.swing.filechooser.FileFilter; -import java.io.IOException; -import org.jhotdraw.framework.Drawing; - -/** - * Interface to define a storage format. A StorageFormat is a strategy that knows how to store - * and restore a Drawing according to a specific encoding. Typically it can be recognized by - * a file extension. To identify a valid file format for a Drawing an appropriate FileFilter - * for a javax.swing.JFileChooser component can be requested. - * - * @see Drawing - * @see StorageFormatManager - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface StorageFormat { - - /** - * Return a FileFilter that can be used to identify files which can be stored and restored - * with this Storage Format. Typically, each storage format has its own recognizable file - * extension. - * - * @return FileFilter to be used with a javax.swing.JFileChooser - */ - public FileFilter getFileFilter(); - - /** - * Every format has to identify itself as able to store and/or restore from - * the format it represents. If the storage format can save to the format, it - * should return true in this method. - * @return boolean <code>true</code> if the format can save - */ - public boolean isStoreFormat(); - - /** - * Every format has to identify itself as able to store and/or restore from - * the format it represents. If the storage format can load from the format, - * it should return true in this method. - * @return boolean <code>true</code> if the format can load - */ - public boolean isRestoreFormat(); - - /** - * Store a Drawing under a given name. - * - * @param fileName file name of the Drawing under which it should be stored - * @param saveDrawing drawing to be saved - * @return file name with correct file extension - */ - public String store(String fileName, Drawing saveDrawing) throws IOException; - - /** - * Restore a Drawing from a file with a given name. - * - * @param fileName of the file in which the Drawing has been saved - * @return restored Drawing - */ - public Drawing restore(String fileName) throws IOException; -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/StorageFormatManager.java b/jhotdraw6/src/main/java/org/jhotdraw/util/StorageFormatManager.java deleted file mode 100644 index 029cf8f02..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/StorageFormatManager.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * @(#)StorageFormatManager.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import javax.swing.JFileChooser; -import javax.swing.filechooser.FileFilter; - -import java.io.File; -import java.util.List; -import java.util.Iterator; - -/** - * The StorageFormatManager is a contains StorageFormats. - * It is not a Singleton because it could be necessary to deal with different - * format managers, e.g. one for importing Drawings, one for exporting Drawings. - * If one StorageFormat matches the file extension of the Drawing file, then this - * StorageFormat can be used to store or restore the Drawing. - * - * @see StorageFormat - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class StorageFormatManager { - - /** - * List containing all registered storage formats - */ - private List myStorageFormats; - - /** - * Default storage format that should be selected in a javax.swing.JFileChooser - */ - private StorageFormat myDefaultStorageFormat; - - /** - * Create a new StorageFormatManager. - */ - public StorageFormatManager() { - myStorageFormats = CollectionsFactory.current().createList(); - } - - /** - * Add a StorageFormat that should be supported by this StorageFormatManager. - * - * @param newStorageFormat new StorageFormat to be supported - */ - public void addStorageFormat(StorageFormat newStorageFormat) { - myStorageFormats.add(newStorageFormat); - } - - /** - * Remove a StorageFormat that should no longer be supported by this StorageFormatManager. - * The StorageFormat is excluded in when search for a StorageFormat. - * - * @param oldStorageFormat old StorageFormat no longer to be supported - */ - public void removeStorageFormat(StorageFormat oldStorageFormat) { - myStorageFormats.remove(oldStorageFormat); - } - - /** - * Test, whether a StorageFormat is supported by this StorageFormat - */ - public boolean containsStorageFormat(StorageFormat checkStorageFormat){ - return myStorageFormats.contains(checkStorageFormat); - } - - /** - * Set a StorageFormat as the default storage format which is selected in a - * javax.swing.JFileChooser. The default storage format must be already - * added with addStorageFormat. Setting the default storage format to null - * does not automatically remove the StorageFormat from the list of - * supported StorageFormats. - * - * @param newDefaultStorageFormat StorageFormat that should be selected in a JFileChooser - */ - public void setDefaultStorageFormat(StorageFormat newDefaultStorageFormat) { - myDefaultStorageFormat = newDefaultStorageFormat; - } - - /** - * Return the StorageFormat which is used as selected file format in a javax.swing.JFileChooser - * - * @return default storage format - */ - public StorageFormat getDefaultStorageFormat() { - return myDefaultStorageFormat; - } - - /** - * Register all FileFilters supported by StorageFormats - * - * @param fileChooser javax.swing.JFileChooser to which FileFilters are added - */ - public void registerFileFilters(JFileChooser fileChooser) { - if (fileChooser.getDialogType() == JFileChooser.OPEN_DIALOG) { - // behavior for open dialogs - StorageFormat sf; - for (Iterator e = myStorageFormats.iterator(); e.hasNext();) { - sf = (StorageFormat) e.next(); - if (sf.isRestoreFormat()) { - fileChooser.addChoosableFileFilter(sf.getFileFilter()); - } - } - - // set a current activated file filter if a default storage Format has been defined - sf = getDefaultStorageFormat(); - if (sf != null && sf.isRestoreFormat()) { - fileChooser.setFileFilter(sf.getFileFilter()); - } - } - else if (fileChooser.getDialogType() == JFileChooser.SAVE_DIALOG) { - // behavior for save dialogs - StorageFormat sf; - for (Iterator e = myStorageFormats.iterator(); e.hasNext();) { - sf = (StorageFormat) e.next(); - if (sf.isStoreFormat()) { - fileChooser.addChoosableFileFilter(sf.getFileFilter()); - } - } - - // set a current activated file filter if a default storage Format has been defined - sf = getDefaultStorageFormat(); - if (sf != null && sf.isStoreFormat()) { - fileChooser.setFileFilter(sf.getFileFilter()); - } - } - else { - // old behavior - StorageFormat sf; - for (Iterator e = myStorageFormats.iterator(); e.hasNext();) { - sf = (StorageFormat) e.next(); - fileChooser.addChoosableFileFilter(sf.getFileFilter()); - } - - // set a current activated file filter if a default storage Format has been defined - sf = getDefaultStorageFormat(); - if (sf != null) { - fileChooser.setFileFilter(sf.getFileFilter()); - } - } - } - - /** - * Find a StorageFormat that can be used according to a FileFilter to store a Drawing - * in a file or restore it from a file respectively. - * - * @param findFileFilter FileFilter used to identify a StorageFormat - * @return StorageFormat, if a matching file extension could be found, false otherwise - */ - public StorageFormat findStorageFormat(FileFilter findFileFilter) { - Iterator formatsIterator = myStorageFormats.iterator(); - StorageFormat currentStorageFormat = null; - while (formatsIterator.hasNext()) { - currentStorageFormat = (StorageFormat)formatsIterator.next(); - if (currentStorageFormat.getFileFilter().equals(findFileFilter)) { - return currentStorageFormat; - } - } - - return null; - } - - /** - * Find a StorageFormat that can be used according to a file object to store a - * Drawing in a file or restore it from a file respectively. - * - * @param file a File object to be matched - * @return StorageFormat, if a matching file extension could be found, <code>null</code> - * otherwise - */ - public StorageFormat findStorageFormat(File file) { - Iterator formatsIterator = myStorageFormats.iterator(); - StorageFormat currentStorageFormat; - while (formatsIterator.hasNext()) { - currentStorageFormat = (StorageFormat) formatsIterator.next(); - if (currentStorageFormat.getFileFilter().accept(file)) { - return currentStorageFormat; - } - } - return null; - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/util/UndoCommand.java deleted file mode 100644 index f8533f804..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoCommand.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * @(#)UndoCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.standard.*; -import org.jhotdraw.framework.*; - -/** - * Command to undo the latest change in the drawing. - * Undo activities can be undone only once, therefore they - * are not added to the undo stack again (redo activities - * can be added to the redo stack again, because they can - * be redone several times, every time pushing a corresponding - * undo activity as well). - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoCommand extends AbstractCommand { - - /** - * Constructs a properties command. - * @param name the command name - * @param newDrawingEditor the DrawingEditor which manages the views - */ - public UndoCommand(String name, DrawingEditor newDrawingEditor) { - super(name, newDrawingEditor); - } - - public void execute() { - super.execute(); - UndoManager um = getDrawingEditor().getUndoManager(); - - if ((um == null) || !um.isUndoable()) { - return; - } - - Undoable lastUndoable = um.popUndo(); - // Execute undo - boolean hasBeenUndone = lastUndoable.undo(); - - // Add to redo stack - if (hasBeenUndone && lastUndoable.isRedoable()) { - um.pushRedo(lastUndoable); - } - lastUndoable.getDrawingView().checkDamage(); - - getDrawingEditor().figureSelectionChanged(lastUndoable.getDrawingView()); - } - - /** - * Used in enabling the undo menu item. - * Undo menu item will be enabled only when there is atleast one undoable - * activity registered with UndoManager. - */ - public boolean isExecutableWithView() { - UndoManager um = getDrawingEditor().getUndoManager(); - - if ((um != null) && (um.getUndoSize() > 0)) { - return true; - } - - return false; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoManager.java b/jhotdraw6/src/main/java/org/jhotdraw/util/UndoManager.java deleted file mode 100644 index fb504e375..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoManager.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * @(#)UndoManager.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.DrawingView; - -import java.util.List; -import java.util.Iterator; - -/** - * This class manages all the undoable commands. It keeps track of all - * the modifications done through user interactions. - * - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoManager { - /** - * Maximum default buffer size for undo and redo stack - */ - public static final int DEFAULT_BUFFER_SIZE = 20; - - /** - * Collection of undo activities - */ - private List redoStack; - - /** - * Collection of undo activities - */ - private List undoStack; - private int maxStackCapacity; - - public UndoManager() { - this(DEFAULT_BUFFER_SIZE); - } - - public UndoManager(int newUndoStackSize) { - maxStackCapacity = newUndoStackSize; - undoStack = CollectionsFactory.current().createList(maxStackCapacity); - redoStack = CollectionsFactory.current().createList(maxStackCapacity); - } - - public void pushUndo(Undoable undoActivity) { - if (undoActivity.isUndoable()) { - removeFirstElementInFullList(undoStack); - undoStack.add(undoActivity); - } - else { - // a not undoable activity clears the stack because - // the last activity does not correspond with the - // last undo activity - undoStack = CollectionsFactory.current().createList(maxStackCapacity); - } - } - - public void pushRedo(Undoable redoActivity) { - if (redoActivity.isRedoable()) { - - removeFirstElementInFullList(redoStack); - - // add redo activity only if it is not already the last - // one in the buffer - if ((getRedoSize() == 0) || (peekRedo() != redoActivity)) { - redoStack.add(redoActivity); - } - } - else { - // a not undoable activity clears the tack because - // the last activity does not correspond with the - // last undo activity - redoStack = CollectionsFactory.current().createList(maxStackCapacity); - } - } - - /** - * If buffersize exceeds, remove the oldest command - */ - private void removeFirstElementInFullList(List l) { - if (l.size() >= maxStackCapacity) { - Undoable removedActivity = (Undoable)l.remove(0); - removedActivity.release(); - } - } - - private Undoable getLastElement(List l) { - if (l.size() > 0) { - return (Undoable)l.get(l.size() - 1); - } - else { - return null; - } - } - public boolean isUndoable() { - if (getUndoSize() > 0) { - return getLastElement(undoStack).isUndoable(); - } - else { - return false; - } - } - - public boolean isRedoable() { - if (getRedoSize() > 0) { - return getLastElement(redoStack).isRedoable(); - } - else { - return false; - } - } - - protected Undoable peekUndo() { - if (getUndoSize() > 0) { - return getLastElement(undoStack); - } - else { - return null; - } - } - - protected Undoable peekRedo() { - if (getRedoSize() > 0) { - return getLastElement(redoStack); - } - else { - return null; - } - } - - /** - * Returns the current size of undo buffer. - */ - public int getUndoSize() { - return undoStack.size(); - } - - /** - * Returns the current size of redo buffer. - */ - public int getRedoSize() { - return redoStack.size(); - } - - /** - * Throw NoSuchElementException if there is none - */ - public Undoable popUndo() { - // Get the last element - throw NoSuchElementException if there is none - Undoable lastUndoable = peekUndo(); - - // Remove it from undo collection - undoStack.remove(getUndoSize() - 1); - - return lastUndoable; - } - - /** - * Throw NoSuchElementException if there is none - */ - public Undoable popRedo() { - // Get the last element - throw NoSuchElementException if there is none - Undoable lastUndoable = peekRedo(); - - // Remove it from undo collection - redoStack.remove(getRedoSize() - 1); - - return lastUndoable; - } - - public void clearUndos() { - clearStack(undoStack); - } - - public void clearRedos() { - clearStack(redoStack); - } - - protected void clearStack(List clearStack) { - clearStack.clear(); - } - - /** - * Removes all undo activities that operate on the given DrawingView. - * @param checkDV DrawingView which is compared undo's DrawingView - */ - public void clearUndos(DrawingView checkDV) { - Iterator iter = undoStack.iterator(); - while (iter.hasNext()) { - Undoable currentUndo = (Undoable)iter.next(); - if (currentUndo.getDrawingView() == checkDV) { - iter.remove(); - } - } - } - - /** - * Removes all redo activities that operate on the given DrawingView. - * @param checkDV DrawingView which is compared redo's DrawingView - */ - public void clearRedos(DrawingView checkDV) { - Iterator iter = redoStack.iterator(); - while (iter.hasNext()) { - Undoable currentRedo = (Undoable)iter.next(); - if (currentRedo.getDrawingView() == checkDV) { - iter.remove(); - } - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoRedoActivity.java b/jhotdraw6/src/main/java/org/jhotdraw/util/UndoRedoActivity.java deleted file mode 100644 index 8ab449462..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoRedoActivity.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * @(#)DragTracker.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.*; - -/** - * An UndoRedoActivity can be used to turn a UndoActivity into a RedoActivity. - * In this case, the redo() method of an encapsulated activity is called when - * the undo() is executed, and undo() when redo() is executed. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoRedoActivity implements Undoable { - private Undoable myReversedActivity; - - protected UndoRedoActivity(Undoable newReversedActivity) { - setReversedActivity(newReversedActivity); - } - - /** - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - if (isRedoable()) { - return getReversedActivity().redo(); - } - - return false; - } - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - if (isUndoable()) { - return getReversedActivity().undo(); - } - - return false; - } - - /** - * Dispatch to isRedoable of the activity to be reversed. - */ - public boolean isUndoable() { - return getReversedActivity().isRedoable(); - } - - /** - * Dispatch to setRedoable of the activity to be reversed. - */ - public void setUndoable(boolean newIsUndoable) { - getReversedActivity().setRedoable(newIsUndoable); - } - - /** - * Dispatch to isUndoable of the activity to be reversed. - */ - public boolean isRedoable() { - return getReversedActivity().isUndoable(); - } - - /** - * Dispatch to setUndoable of the activity to be reversed. - */ - public void setRedoable(boolean newIsRedoable) { - getReversedActivity().setUndoable(newIsRedoable); - } - - public void setAffectedFigures(FigureEnumeration newAffectedFigures) { - getReversedActivity().setAffectedFigures(newAffectedFigures); - } - - public FigureEnumeration getAffectedFigures() { - return getReversedActivity().getAffectedFigures(); - } - - public int getAffectedFiguresCount() { - return getReversedActivity().getAffectedFiguresCount(); - } - - public DrawingView getDrawingView() { - return getReversedActivity().getDrawingView(); - } - - public void release() { - getReversedActivity().release(); - } - - protected void setReversedActivity(Undoable newReversedActivity) { - myReversedActivity = newReversedActivity; - } - - public Undoable getReversedActivity() { - return myReversedActivity; - } - - public static Undoable createUndoRedoActivity(Undoable toBeReversed) { - // instead of reversing the reversed activity just return the original activity - if (toBeReversed instanceof UndoRedoActivity) { - return ((UndoRedoActivity)toBeReversed).getReversedActivity(); - } - else { - return new UndoRedoActivity(toBeReversed); - } - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/Undoable.java b/jhotdraw6/src/main/java/org/jhotdraw/util/Undoable.java deleted file mode 100644 index c578b73f6..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/Undoable.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * @(#)Undoable.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.framework.DrawingView; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface Undoable { - /** - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo(); - - /* - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo(); - - public boolean isUndoable(); - - public void setUndoable(boolean newIsUndoable); - - public boolean isRedoable(); - - public void setRedoable(boolean newIsRedoable); - - /** - * Releases all resources related to an undoable activity - */ - public void release(); - - public DrawingView getDrawingView(); - - public void setAffectedFigures(FigureEnumeration newAffectedFigures); - - public FigureEnumeration getAffectedFigures(); - - public int getAffectedFiguresCount(); -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableAdapter.java b/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableAdapter.java deleted file mode 100644 index 99bf0eab3..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableAdapter.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * @(#)UndoableAdapter.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: ? by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.FigureEnumerator; -import org.jhotdraw.standard.ReverseFigureEnumerator; -import org.jhotdraw.standard.StandardFigureSelection; - -import java.util.Collections; -import java.util.List; - -/** - * Most basic implementation for an Undoable activity. Subclasses should override - * methods to provide specialized behaviour when necessary. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoableAdapter implements Undoable { - - private List myAffectedFigures; - private boolean myIsUndoable; - private boolean myIsRedoable; - private DrawingView myDrawingView; - - public UndoableAdapter(DrawingView newDrawingView) { - setDrawingView(newDrawingView); - } - - /** - * Undo the activity - * @return true if the activity could be undone, false otherwise - */ - public boolean undo() { - return isUndoable(); - } - - /** - * Redo the activity - * @return true if the activity could be redone, false otherwise - */ - public boolean redo() { - return isRedoable(); - } - - public boolean isUndoable() { - return myIsUndoable; - } - - public void setUndoable(boolean newIsUndoable) { - myIsUndoable = newIsUndoable; - } - - public boolean isRedoable() { - return myIsRedoable; - } - - public void setRedoable(boolean newIsRedoable) { - myIsRedoable = newIsRedoable; - } - - public void setAffectedFigures(FigureEnumeration newAffectedFigures) { - // the enumeration is not reusable therefore a copy is made - // to be able to undo-redo the command several time - if(newAffectedFigures == null) { - throw new IllegalArgumentException(); - } - rememberFigures(newAffectedFigures); - } - - public FigureEnumeration getAffectedFigures() { - if(myAffectedFigures == null) { - return new FigureEnumerator(Collections.EMPTY_LIST); - } - else { - return new FigureEnumerator(CollectionsFactory.current().createList(myAffectedFigures)); - } - } - - public FigureEnumeration getAffectedFiguresReversed() { - return new ReverseFigureEnumerator(CollectionsFactory.current().createList(myAffectedFigures)); - } - - public int getAffectedFiguresCount() { - return myAffectedFigures.size(); - } - - protected void rememberFigures(FigureEnumeration toBeRemembered) { - myAffectedFigures = CollectionsFactory.current().createList(); - while (toBeRemembered.hasNextFigure()) { - myAffectedFigures.add(toBeRemembered.nextFigure()); - } - } - - /** - * Releases all resources related to an undoable activity - */ - public void release() { - FigureEnumeration fe = getAffectedFigures(); - while (fe.hasNextFigure()) { - fe.nextFigure().release(); - } - setAffectedFigures(FigureEnumerator.getEmptyEnumeration()); - } - - /** - * Create new set of affected figures for redo operation because - * deleting figures in an undo operation makes them unusable - * Especially contained figures have been removed from their - * observing container like CompositeFigure or DecoratorFigure. - * Duplicating these figures re-establishes the dependencies. - */ - protected void duplicateAffectedFigures() { - setAffectedFigures(StandardFigureSelection.duplicateFigures( - getAffectedFigures(), getAffectedFiguresCount())); - } - - public DrawingView getDrawingView() { - return myDrawingView; - } - - protected void setDrawingView(DrawingView newDrawingView) { - myDrawingView = newDrawingView; - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableCommand.java b/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableCommand.java deleted file mode 100644 index d7907a6cc..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableCommand.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * @(#)UndoableCommand.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.AbstractCommand; -import java.util.EventObject; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoableCommand implements Command, FigureSelectionListener, CommandListener { - - private Command myWrappedCommand; - private boolean hasSelectionChanged; - private AbstractCommand.EventDispatcher myEventDispatcher; - - public UndoableCommand(Command newWrappedCommand) { - setWrappedCommand(newWrappedCommand); - getWrappedCommand().addCommandListener(this); - setEventDispatcher(createEventDispatcher()); - } - - /** - * Executes the command. - */ - public void execute() { - hasSelectionChanged = false; - // listen for selection change events during executing the wrapped command - view().addFigureSelectionListener(this); - - getWrappedCommand().execute(); - - Undoable undoableCommand = getWrappedCommand().getUndoActivity(); - if ((undoableCommand != null) && (undoableCommand.isUndoable())) { - getDrawingEditor().getUndoManager().pushUndo(undoableCommand); - getDrawingEditor().getUndoManager().clearRedos(); - } - - // initiate manual update of undo/redo menu states if it has not - // been done automatically during executing the wrapped command - if (!hasSelectionChanged || (getDrawingEditor().getUndoManager().getUndoSize() == 1)) { - getDrawingEditor().figureSelectionChanged(view()); - } - - // remove because not all commands are listeners that have to be notified - // all the time (bug-id 595461) - view().removeFigureSelectionListener(this); - } - - /** - * Tests if the command can be executed. - */ - public boolean isExecutable() { - return getWrappedCommand().isExecutable(); - } - - protected void setWrappedCommand(Command newWrappedCommand) { - myWrappedCommand = newWrappedCommand; - } - - protected Command getWrappedCommand() { - return myWrappedCommand; - } - - /** - * Gets the command name. - */ - public String name() { - return getWrappedCommand().name(); - } - - public DrawingEditor getDrawingEditor() { - return getWrappedCommand().getDrawingEditor(); - } - - public DrawingView view() { - return getDrawingEditor().view(); - } - - public void figureSelectionChanged(DrawingView view) { - hasSelectionChanged = true; - } - - public Undoable getUndoActivity() { - return new UndoableAdapter(view()); - } - - public void setUndoActivity(Undoable newUndoableActivity) { - // do nothing: always return default UndoableAdapter - } - - public void addCommandListener(CommandListener newCommandListener) { - getEventDispatcher().addCommandListener(newCommandListener); - } - - public void removeCommandListener(CommandListener oldCommandListener) { - getEventDispatcher().removeCommandListener(oldCommandListener); - } - - private void setEventDispatcher(AbstractCommand.EventDispatcher newEventDispatcher) { - myEventDispatcher = newEventDispatcher; - } - - protected AbstractCommand.EventDispatcher getEventDispatcher() { - return myEventDispatcher; - } - - public AbstractCommand.EventDispatcher createEventDispatcher() { - return new AbstractCommand.EventDispatcher(this); - } - - public void commandExecuted(EventObject commandEvent) { - getEventDispatcher().fireCommandExecutedEvent(); - } - - public void commandExecutable(EventObject commandEvent) { - getEventDispatcher().fireCommandExecutableEvent(); - } - - public void commandNotExecutable(EventObject commandEvent) { - getEventDispatcher().fireCommandNotExecutableEvent(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableHandle.java b/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableHandle.java deleted file mode 100644 index d04043bf9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableHandle.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * @(#)UndoableHandle.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.awt.Graphics; -import java.awt.Point; -import java.awt.Rectangle; - -import org.jhotdraw.framework.*; -import org.jhotdraw.framework.Drawing; -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.Handle; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoableHandle implements Handle { - - private Handle myWrappedHandle; - private DrawingView myDrawingView; - - /** - * Constructor for <code>UndoableHandle</code>. - * @param newWrappedHandle - */ - public UndoableHandle(Handle newWrappedHandle) { - setWrappedHandle(newWrappedHandle); - } - - /** - * Constructor for <code>UndoableHandle</code>. - * @param newWrappedHandle - * @param newDrawingView - * @deprecated use the constructor without the DrawingView instead - */ - public UndoableHandle(Handle newWrappedHandle, DrawingView newDrawingView) { - setWrappedHandle(newWrappedHandle); - setDrawingView(newDrawingView); - } - - /** - * Locates the handle on the figure. The handle is drawn - * centered around the returned point. - * @see org.jhotdraw.framework.Handle#locate() - */ - public Point locate() { - return getWrappedHandle().locate(); - } - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @param view the handles container - * @see org.jhotdraw.framework.Handle#invokeStart(int, int, org.jhotdraw.framework.DrawingView) - */ - public void invokeStart(int x, int y, DrawingView view) { - getWrappedHandle().invokeStart(x, y, view); - } - - /** - * Tracks the start of the interaction. The default implementation - * does nothing. - * @param x the x position where the interaction started - * @param y the y position where the interaction started - * @see org.jhotdraw.framework.Handle#invokeStart(int, int, org.jhotdraw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeStart(x, y, drawingView) - */ - public void invokeStart(int x, int y, Drawing drawing) { - getWrappedHandle().invokeStart(x, y, drawing); - } - - /** - * Tracks a step of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - * @see org.jhotdraw.framework.Handle#invokeStep(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - public void invokeStep(int x, int y, int anchorX, int anchorY, DrawingView view) { - getWrappedHandle().invokeStep(x, y, anchorX, anchorY, view); - } - - /** - * Tracks a step of the interaction. - * @param dx x delta of this step - * @param dy y delta of this step - * @see org.jhotdraw.framework.Handle#invokeStep(int, int, org.jhotdraw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeStep(x, y, anchorX, anchorY, drawingView) - */ - public void invokeStep(int dx, int dy, Drawing drawing) { - getWrappedHandle().invokeStep(dx, dy, drawing); - } - - /** - * Tracks the end of the interaction. - * @param x the current x position - * @param y the current y position - * @param anchorX the x position where the interaction started - * @param anchorY the y position where the interaction started - * @see org.jhotdraw.framework.Handle#invokeEnd(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - public void invokeEnd(int x, int y, int anchorX, int anchorY, DrawingView view) { - getWrappedHandle().invokeEnd(x, y, anchorX, anchorY, view); - - Undoable undoableActivity = getWrappedHandle().getUndoActivity(); - if ((undoableActivity != null) && (undoableActivity.isUndoable())) { - view.editor().getUndoManager().pushUndo(undoableActivity); - view.editor().getUndoManager().clearRedos(); - } - } - - /** - * Tracks the end of the interaction. - * @see org.jhotdraw.framework.Handle#invokeEnd(int, int, org.jhotdraw.framework.Drawing) - * @deprecated As of version 4.1, - * use invokeEnd(x, y, anchorX, anchorY, drawingView). - */ - public void invokeEnd(int dx, int dy, Drawing drawing) { - getWrappedHandle().invokeEnd(dx, dy, drawing); - } - - /** - * Gets the handle's owner. - * @see org.jhotdraw.framework.Handle#owner() - */ - public Figure owner() { - return getWrappedHandle().owner(); - } - - /** - * Gets the display box of the handle. - * @see org.jhotdraw.framework.Handle#displayBox() - */ - public Rectangle displayBox() { - return getWrappedHandle().displayBox(); - } - - /** - * Tests if a point is contained in the handle. - * @see org.jhotdraw.framework.Handle#containsPoint(int, int) - */ - public boolean containsPoint(int x, int y) { - return getWrappedHandle().containsPoint(x, y); - } - - /** - * Draws this handle. - * @see org.jhotdraw.framework.Handle#draw(java.awt.Graphics) - */ - public void draw(Graphics g) { - getWrappedHandle().draw(g); - } - - protected void setWrappedHandle(Handle newWrappedHandle) { - myWrappedHandle = newWrappedHandle; - } - - protected Handle getWrappedHandle() { - return myWrappedHandle; - } - - /** - * @deprecated attribute not required anymore - */ - public DrawingView getDrawingView() { - return myDrawingView; - } - - /** - * @deprecated attribute not required anymore - */ - protected void setDrawingView(DrawingView newDrawingView) { - myDrawingView = newDrawingView; - } - - /** - * @see org.jhotdraw.framework.Handle#getUndoActivity() - */ - public Undoable getUndoActivity() { - return new UndoableAdapter(getDrawingView()); - } - - /** - * @see org.jhotdraw.framework.Handle#setUndoActivity(org.jhotdraw.util.Undoable) - */ - public void setUndoActivity(Undoable newUndoableActivity) { - // do nothing: always return default UndoableAdapter - } - - /** - * @see org.jhotdraw.framework.Handle#getCursor() - */ - public Cursor getCursor() { - return getWrappedHandle().getCursor(); - } - -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableTool.java b/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableTool.java deleted file mode 100644 index c15bcea27..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/UndoableTool.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * @(#)UndoableTool.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import org.jhotdraw.framework.*; -import org.jhotdraw.standard.AbstractTool; -import java.awt.event.MouseEvent; -import java.awt.event.KeyEvent; -import java.util.EventObject; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class UndoableTool implements Tool, ToolListener { - - private Tool myWrappedTool; - private AbstractTool.EventDispatcher myEventDispatcher; - - public UndoableTool(Tool newWrappedTool) { - setEventDispatcher(createEventDispatcher()); - setWrappedTool(newWrappedTool); - getWrappedTool().addToolListener(this); - } - - /** - * Activates the tool for the given view. This method is called - * whenever the user switches to this tool. Use this method to - * reinitialize a tool. - */ - public void activate() { - getWrappedTool().activate(); - } - - /** - * Deactivates the tool. This method is called whenever the user - * switches to another tool. Use this method to do some clean-up - * when the tool is switched. Subclassers should always call - * super.deactivate. - */ - public void deactivate() { - getWrappedTool().deactivate(); - Undoable undoActivity = getWrappedTool().getUndoActivity(); - if ((undoActivity != null) && (undoActivity.isUndoable())) { - editor().getUndoManager().pushUndo(undoActivity); - editor().getUndoManager().clearRedos(); - // update menus - editor().figureSelectionChanged(getActiveView()); - } - } - - /** - * Handles mouse down events in the drawing view. - */ - public void mouseDown(MouseEvent e, int x, int y) { - getWrappedTool().mouseDown(e, x, y); - } - - /** - * Handles mouse drag events in the drawing view. - */ - public void mouseDrag(MouseEvent e, int x, int y) { - getWrappedTool().mouseDrag(e, x, y); - } - - /** - * Handles mouse up in the drawing view. After the mouse button - * has been released, the associated tool activity can be undone - * if the associated tool supports the undo operation from the Undoable interface. - * - * @see org.jhotdraw.util.Undoable - */ - public void mouseUp(MouseEvent e, int x, int y) { - getWrappedTool().mouseUp(e, x, y); - } - - /** - * Handles mouse moves (if the mouse button is up). - */ - public void mouseMove(MouseEvent evt, int x, int y) { - getWrappedTool().mouseMove(evt, x, y); - } - - /** - * Handles key down events in the drawing view. - */ - public void keyDown(KeyEvent evt, int key) { - getWrappedTool().keyDown(evt, key); - } - - public boolean isUsable() { - return getWrappedTool().isUsable(); - } - - public boolean isActive() { - // do not delegate but test whether this undoable tool is active - return editor().tool() == this; - } - - public boolean isEnabled() { - return getWrappedTool().isEnabled(); - } - - public void setUsable(boolean newIsUsable) { - getWrappedTool().setUsable(newIsUsable); - } - - public void setEnabled(boolean newIsEnabled) { - getWrappedTool().setEnabled(newIsEnabled); - } - - protected void setWrappedTool(Tool newWrappedTool) { - myWrappedTool = newWrappedTool; - } - - protected Tool getWrappedTool() { - return myWrappedTool; - } - - public DrawingEditor editor() { - return getWrappedTool().editor(); - } - - public DrawingView view() { - return editor().view(); - } - - public Undoable getUndoActivity() { - return new UndoableAdapter(view()); - } - - public void setUndoActivity(Undoable newUndoableActivity) { - // do nothing: always return default UndoableAdapter - } - - public void toolUsable(EventObject toolEvent) { - getEventDispatcher().fireToolUsableEvent(); - } - - public void toolUnusable(EventObject toolEvent) { - getEventDispatcher().fireToolUnusableEvent(); - } - - public void toolActivated(EventObject toolEvent) { - getEventDispatcher().fireToolActivatedEvent(); - } - - public void toolDeactivated(EventObject toolEvent) { - getEventDispatcher().fireToolDeactivatedEvent(); - } - - public void toolEnabled(EventObject toolEvent) { - getEventDispatcher().fireToolEnabledEvent(); - } - - public void toolDisabled(EventObject toolEvent) { - getEventDispatcher().fireToolDisabledEvent(); - } - - public void addToolListener(ToolListener newToolListener) { - getEventDispatcher().addToolListener(newToolListener); - } - - public void removeToolListener(ToolListener oldToolListener) { - getEventDispatcher().removeToolListener(oldToolListener); - } - - private void setEventDispatcher(AbstractTool.EventDispatcher newEventDispatcher) { - myEventDispatcher = newEventDispatcher; - } - - protected AbstractTool.EventDispatcher getEventDispatcher() { - return myEventDispatcher; - } - - public AbstractTool.EventDispatcher createEventDispatcher() { - return new AbstractTool.EventDispatcher(this); - } - - public DrawingView getActiveView() { - return editor().view(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/VersionControlStrategy.java b/jhotdraw6/src/main/java/org/jhotdraw/util/VersionControlStrategy.java deleted file mode 100644 index caa10b8b7..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/VersionControlStrategy.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * @(#)VersionControlStrategy.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface VersionControlStrategy { - /** - * Define a strategy how to select those versions of JHotDraw - * with which they are compatible. - */ - public void assertCompatibleVersion(); -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/VersionManagement.java b/jhotdraw6/src/main/java/org/jhotdraw/util/VersionManagement.java deleted file mode 100644 index 1cd541ecd..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/VersionManagement.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * @(#)VersionManagement.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -import java.io.*; -import java.util.*; -import java.util.jar.*; - -/** - * Collection of utility methods that are useful for dealing with version information - * retrieved from reading jar files or package loaded by the class manager. Some - * methods also help comparing version information. The method getJHotDrawVersion() - * can be used to retrieve the current version of JHotDraw as loaded by the class manager. - * - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class VersionManagement { - public static String JHOTDRAW_COMPONENT = "org.jhotdraw/"; - public static String JHOTDRAW_JAR = "jhotdraw.jar"; - - public static Package[] packages = { - Package.getPackage("org.jhotdraw.applet"), - Package.getPackage("org.jhotdraw.application"), - Package.getPackage("org.jhotdraw.contrib"), - Package.getPackage("org.jhotdraw.figures"), - Package.getPackage("org.jhotdraw.framework"), - Package.getPackage("org.jhotdraw.standard"), - Package.getPackage("org.jhotdraw.util") - }; - - /** - * Return the version of the main package of the framework. A version number is - * available if there is a corresponding version entry in the JHotDraw jar file - * for the framework package. - */ - public static String getJHotDrawVersion() { - // look for the framework main package - Package pack = packages[4]; - return pack.getSpecificationVersion(); - } - - /** - * - */ - public static String getPackageVersion(final Package lookupPackage) { - if (lookupPackage == null) { - return null; - } - - String specVersion = lookupPackage.getSpecificationVersion(); - if (specVersion != null) { - return specVersion; - } - else { - // search in parent package - String normalizedPackageName = normalizePackageName(lookupPackage.getName()); - String nextPackageName = getNextPackage(normalizedPackageName); - return getPackageVersion(Package.getPackage(nextPackageName)); - } - } - - /** - * Check whether a given application version is compatible with the version - * of JHotDraw currently loaded in the Java VM. A version number is - * available if there is a corresponding version entry in the JHotDraw jar file - * for the framework package. - */ - public static boolean isCompatibleVersion(String compareVersionString) { -// Package pack = VersionManagement.class.getPackage(); - Package pack = packages[4]; - if (compareVersionString == null) { - return pack.getSpecificationVersion() == null; - } - else { - return pack.isCompatibleWith(compareVersionString); - } - } - - /** - * Read the version information from a file with a given file name. The file - * must be a jar manifest file and all its entries are searched for package names - * and their specification version information. All information is collected - * in a map for later lookup of package names and their versions. - * - * @param versionFileName name of the jar file containing version information - */ - public static String readVersionFromFile(String applicationName, String versionFileName) { - try { - FileInputStream fileInput = new FileInputStream(versionFileName); - Manifest manifest = new Manifest(); - manifest.read(fileInput); - - Map entries = manifest.getEntries(); - // Now write out the pre-entry attributes - Iterator entryIterator = entries.entrySet().iterator(); - while (entryIterator.hasNext()) { - Map.Entry currentEntry = (Map.Entry)entryIterator.next(); - String packageName = currentEntry.getKey().toString(); - packageName = normalizePackageName(packageName); - Attributes attributes = (Attributes)currentEntry.getValue(); - String packageSpecVersion = attributes.getValue(Attributes.Name.SPECIFICATION_VERSION); - packageSpecVersion = extractVersionInfo(packageSpecVersion); - return packageSpecVersion; - } - } - catch (IOException exception) { - exception.printStackTrace(); - } - - // no version found - return null; - } - - /** - * Get the super package of a package specifier. The super package is the package - * specifier without the latest package name, e.g. the next package for "org.jhotdraw.tools" - * would be "org.jhotdraw". - * - * @param searchPackage package specifier - * @return next package if one is available, null otherwise - */ - protected static String getNextPackage(String searchPackage) { - if (searchPackage == null) { - return null; - } - - int foundNextPackage = searchPackage.lastIndexOf('.'); - if (foundNextPackage > 0) { - return searchPackage.substring(0, foundNextPackage); - } - else { - return null; - } - } - - /** - * A package name is normalized by replacing all path delimiters by "." to retrieve - * a valid standardized package specifier used in package declarations in Java source - * files. - * - * @param toBeNormalized package name to be normalized - * @return normalized package name - */ - public static String normalizePackageName(String toBeNormalized) { - // first, replace the standard package delimiter used in jars - String replaced = toBeNormalized.replace('/', '.'); - // then, replace the default path separator in case this one was used as well - replaced = replaced.replace(File.pathSeparatorChar, '.'); - if (replaced.endsWith(".")) { - int lastSeparator = replaced.lastIndexOf('.'); - return replaced.substring(0, lastSeparator); - } - else { - return replaced; - } - } - - /** - * Get the version information specified in a jar manifest file without - * any leading or trailing "\"". - * - * @param versionString a version string with possibly leading or trailing "\"" - * @return stripped version information - */ - public static String extractVersionInfo(String versionString) { - // guarding conditions - if (versionString == null) { - return null; - } - if (versionString.length() == 0) { - return ""; - } - - int startIndex = versionString.indexOf("\""); - if (startIndex < 0) { - startIndex = 0; - } - else { - // start from next character - startIndex++; - } - - int endIndex = versionString.lastIndexOf("\""); - if (endIndex < 0) { - endIndex = versionString.length(); - } - - return versionString.substring(startIndex, endIndex); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/VersionRequester.java b/jhotdraw6/src/main/java/org/jhotdraw/util/VersionRequester.java deleted file mode 100644 index e0b3c4689..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/VersionRequester.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * @(#)VersionRequester.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util; - -/** - * @author Wolfram Kaiser <mrfloppy@sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public interface VersionRequester { - /** - * Subclasses should override this method to specify to which versions of - * JHotDraw they are compatible. A string array is returned so it is possible - * to specify several version numbers of JHotDraw to which the application - * is compatible with. - * - * @return all versions number of JHotDraw the application is compatible with. - */ - public abstract String[] getRequiredVersions(); -} \ No newline at end of file diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/CollectionsFactoryJDK11.java b/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/CollectionsFactoryJDK11.java deleted file mode 100644 index bb057660e..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/CollectionsFactoryJDK11.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#)CollectionsFactoryJDK11.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.util.collections.jdk11; - -import org.jhotdraw.util.CollectionsFactory; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class CollectionsFactoryJDK11 extends CollectionsFactory { - public CollectionsFactoryJDK11() { - // required in order to create instances of this class via reflection - } - - public List createList() { - return new ListWrapper(); - } - - public List createList(Collection initList) { - return new ListWrapper(initList); - } - - public List createList(int initSize) { - return new ListWrapper(initSize); - } - - public Map createMap() { - return new MapWrapper(); - } - - public Map createMap(Map initMap) { - return new MapWrapper(initMap); - } - - public Set createSet() { - return new SetWrapper(); - } - - public Set createSet(Set initSet) { - return new SetWrapper(initSet); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/IteratorWrapper.java b/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/IteratorWrapper.java deleted file mode 100644 index 5ef42db0b..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/IteratorWrapper.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * @(#)IteratorWrapper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util.collections.jdk11; - -import java.util.Iterator; -import java.util.Enumeration; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class IteratorWrapper implements Iterator { - private Enumeration myEnumeration; - public IteratorWrapper(Enumeration enumeration) { - myEnumeration = enumeration; - } - - public boolean hasNext() { - return myEnumeration.hasMoreElements(); - } - - public Object next() { - return myEnumeration.nextElement(); - } - - public void remove() { - // do nothing or throw exception - //throw new UnsupportedOperationException(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/ListWrapper.java b/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/ListWrapper.java deleted file mode 100644 index fb2b14ed8..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/ListWrapper.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)ListWrapper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util.collections.jdk11; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class ListWrapper implements List { - private Vector myDelegee; - - public ListWrapper() { - myDelegee = new Vector(); - } - - public ListWrapper(int initialSize) { - myDelegee = new Vector(initialSize); - } - - public ListWrapper(Collection copyCollection) { - myDelegee = new Vector(copyCollection); - } - - public int size() { - return myDelegee.size(); - } - - public boolean isEmpty() { - return myDelegee.isEmpty(); - } - - public boolean contains(Object o) { - return myDelegee.contains(o); - } - - public Iterator iterator() { - return new IteratorWrapper(myDelegee.elements()); - } - - public Object[] toArray() { - return myDelegee.toArray(); - } - - public Object[] toArray(Object a[]) { - return myDelegee.toArray(a); - } - - public boolean add(Object o) { - return myDelegee.add(o); - } - - public boolean remove(Object o) { - return myDelegee.removeElement(o); - } - - public boolean containsAll(Collection c) { - return myDelegee.containsAll(c); - } - - public boolean addAll(Collection c) { - return myDelegee.addAll(c); - } - - public boolean addAll(int index, Collection c) { - return myDelegee.addAll(index, c); - } - - public boolean removeAll(Collection c) { - return myDelegee.removeAll(c); - } - - public boolean retainAll(Collection c) { - return myDelegee.retainAll(c); - } - - public void clear() { - myDelegee.clear(); - } - - public Object get(int index) { - return myDelegee.elementAt(index); - } - - public Object set(int index, Object element) { - return myDelegee.set(index, element) ; - } - - public void add(int index, Object element) { - myDelegee.add(index, element); - } - - public Object remove(int index) { - return myDelegee.remove(index); - } - - public int indexOf(Object o) { - return myDelegee.indexOf(o); - } - - public int lastIndexOf(Object o) { - return myDelegee.lastIndexOf(o); - } - - public ListIterator listIterator() { - return myDelegee.listIterator(); - } - - public ListIterator listIterator(int index) { - return myDelegee.listIterator(index); - } - - public List subList(int fromIndex, int toIndex) { - return null; - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/MapWrapper.java b/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/MapWrapper.java deleted file mode 100644 index e524bb2e9..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/MapWrapper.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * @(#)MapWrapper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ - -package org.jhotdraw.util.collections.jdk11; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class MapWrapper implements Map { - private Map myDelegee; - - public MapWrapper() { - myDelegee = new Hashtable(); - } - - public MapWrapper(Map copyMap) { - myDelegee = new Hashtable(copyMap); - } - - public int size() { - return myDelegee.size(); - } - - public boolean isEmpty() { - return myDelegee.isEmpty(); - } - - public boolean containsKey(Object key) { - return myDelegee.containsKey(key); - } - - public boolean containsValue(Object value) { - return myDelegee.containsKey(value); - } - - public Object get(Object key) { - return myDelegee.get(key); - } - - public Object put(Object key, Object value) { - return myDelegee.put(key, value); - } - - public Object remove(Object key) { - return myDelegee.remove(key); - } - - public void putAll(Map t) { - myDelegee.putAll(t); - } - - public void clear() { - myDelegee.clear(); - } - - public Set keySet() { - return myDelegee.keySet(); - } - - public Collection values() { - return myDelegee.values(); - } - - public Set entrySet() { - return myDelegee.entrySet(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/SetWrapper.java b/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/SetWrapper.java deleted file mode 100644 index e797be5ea..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk11/SetWrapper.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * @(#)SetWrapper.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.util.collections.jdk11; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class SetWrapper implements Set { - private Hashtable myDelegee; - - public SetWrapper() { - myDelegee = new Hashtable(); - } - - public SetWrapper(Set initSet) { - myDelegee = new Hashtable(); - Iterator iter = initSet.iterator(); - while (iter.hasNext()) { - add(iter.next()); - } - } - - public int size() { - return myDelegee.size(); - } - - public boolean isEmpty() { - return myDelegee.isEmpty(); - } - - public boolean contains(Object o) { - return myDelegee.containsKey(o); - } - - public Iterator iterator() { - return new IteratorWrapper(myDelegee.elements()); - } - - public Object[] toArray() { - return new Object[0]; - } - - public Object[] toArray(Object a[]) { - return new Object[0]; - } - - public boolean add(Object o) { - return myDelegee.put(o, o) == null; - } - - public boolean remove(Object o) { - return myDelegee.remove(o) != null; - } - - public boolean containsAll(Collection c) { - return false; - } - - public boolean addAll(Collection c) { - return false; - } - - public boolean retainAll(Collection c) { - return false; - } - - public boolean removeAll(Collection c) { - return false; - } - - public void clear() { - myDelegee.clear(); - } -} diff --git a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk12/CollectionsFactoryJDK12.java b/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk12/CollectionsFactoryJDK12.java deleted file mode 100644 index 8fed3c9d2..000000000 --- a/jhotdraw6/src/main/java/org/jhotdraw/util/collections/jdk12/CollectionsFactoryJDK12.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * @(#)CollectionsFactoryJDK12.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.util.collections.jdk12; - -import org.jhotdraw.util.CollectionsFactory; - -import java.util.*; - -/** - * @author Wolfram Kaiser <mrfloppy@users.sourceforge.net> - * @version <$CURRENT_VERSION$> - */ -public class CollectionsFactoryJDK12 extends CollectionsFactory { - public CollectionsFactoryJDK12() { - // required in order to create instances of this class via reflection - } - - public List createList() { - return new ArrayList(); - } - - public List createList(Collection initList) { - return new ArrayList(initList); - } - - public List createList(int initSize) { - return new ArrayList(initSize); - } - - public Map createMap() { - return new Hashtable(); - } - - public Map createMap(Map initMap) { - return new Hashtable(initMap); - } - - public Set createSet() { - return new HashSet(); - } - - public Set createSet(Set initSet) { - return new HashSet(initSet); - } -} diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/contrib.jdo b/jhotdraw6/src/main/resources/org/jhotdraw/contrib.jdo deleted file mode 100644 index cdea47b17..000000000 --- a/jhotdraw6/src/main/resources/org/jhotdraw/contrib.jdo +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="org.jhotdraw.contrib"> -<!-- - <class name="ComponentFigure"> - </class> ---> - <class name="ChopDiamondConnector"> - </class> - <class name="ChopPolygonConnector"> - </class> - <class name="DiamondFigure"> - </class> - <class name="GraphicalCompositeFigure"> - </class> - <class name="PolygonFigure"> - </class> - <class name="TextAreaFigure"> - </class> - <class name="TriangleFigure"> - </class> - <class name="SimpleLayouter"> - <field name="myInsets"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="StandardLayouter"> - </class> - </package> -</jdo> diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/figures.jdo b/jhotdraw6/src/main/resources/org/jhotdraw/figures.jdo deleted file mode 100644 index f75f4162c..000000000 --- a/jhotdraw6/src/main/resources/org/jhotdraw/figures.jdo +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="org.jhotdraw.figures"> - <class name="AttributeFigure"> - </class> - <class name="ArrowTip"> - </class> - <class name="ChopEllipseConnector"> - </class> - <class name="ElbowConnection"> - </class> - <class name="EllipseFigure"> - <field name="fDisplayBox"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - <field name="fPoints"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="FigureAttributes"> - <field name="fMap"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="GroupFigure"> - </class> - <class name="ImageFigure"> - </class> - <class name="LineFigure"> - </class> - <class name="NullConnector"> - </class> - <class name="NullFigure"> - </class> - <class name="NumberTextFigure"> - </class> - <class name="PolyLineConnector"> - </class> - <class name="PolyLineFigure"> - <field name="fFrameColor"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="ShortestDistanceConnector"> - </class> - <class name="RectangleFigure"> - <field name="fDisplayBox"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - <class name="RoundRectangleFigure"> - </class> - <class name="TextFigure"> - <field name="fFont"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> - </class> - </package> -</jdo> diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/framework.jdo b/jhotdraw6/src/main/resources/org/jhotdraw/framework.jdo deleted file mode 100644 index 3af8233ee..000000000 --- a/jhotdraw6/src/main/resources/org/jhotdraw/framework.jdo +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="org.jhotdraw.framework"> - <class name="Figure"> - </class> - <class name="FigureChangeListener"> - <extension vendor-name="FastObjects" key="implementation" value="java.lang.Object"/> - </class> - </package> -</jdo> diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/TOBACK1.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/TOBACK1.gif deleted file mode 100644 index 567e489b72e480d175b2157361e77f34ab9aaf35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQud+2bM;<_eTNT5$8)5~v@2W=TX!R6QQXa-*M-YAam@Mi_tDk`AH;;Eyj`ZU z9pRZc!C-0o&euP40+X+LdCBc}SzU3*+xFaxEm3p-O6{Gy?9WeauP3{t{=Cb%y3{v1 gwcbc9IX2g^$)>|0&#}5++cRZqv+)cQK?VkE0EH1${{R30 diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/TOBACK2.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/TOBACK2.gif deleted file mode 100644 index 6917725772fb5159a45302490e4007968e91e5f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlKY{-bM;;arIKAW+!}2&)fs26Tom0sC3w}jFPh~CPVCY@cg?}S$6aSxo0?DR zSK+>Ss)@qOwGS;bemYf{hp+d6*rsUd$(th_GS(*FQ+ZQy<$GB7mJ+?by~Vj-)kVW9 V9cq(W(lhcqEgGZx*##LGtN|`bOXL6m diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/TOBACK3.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/TOBACK3.gif deleted file mode 100644 index 0734a255fa3c12e374155bb0c5effe6db129004b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQt_d|bM;<_MV~Dq_%+%b(!CCp&C`6eFVcKv%-&l+a_S#m-nUMot4#Y@kj3J_ z^hdoeOO-FaJj^juj$0t?u-4?*C*Q4a&pN;1io~6e_O*x1nyyy=nq<67R^<G--KF*p ifuZ$Ajp;3w2~ufYd9DRT*<RgKDl`gaNeVJBSOWmZtyEe7 diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/TOFRONT1.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/TOFRONT1.gif deleted file mode 100644 index e598010f002f95e097b07407e0dc4ca5290067b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu(35bM;<_eTNT5$8)5~v@2W=TX!R6QQXa-*M-YAtziD%ef_`#T``?$ZCbn; zl1j3Pp8S(fI{)lA@G8^WNoxP$wG}>M%jI5dsoL9C*L&|=$df&8&rk0<t9$)vX0^Rg ig?wmijgWC$nQK&9Prg&fL~W1M=_!(3vn2%?7_0%%2vd&$ diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/TOFRONT2.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/TOFRONT2.gif deleted file mode 100644 index aaa1758c47e6d990f9f4766d43c9a29d76230c75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ}v(bM;;arIKAW+!}2&)fs26Tom0sC3w}jFPh~CR%|wi{y%R<wuj6u3rC*R zr`)fcRGz(MzMESWtj5;PRMmR)L%@r_6Hjk3UUy1QbveVg6K7jbFPv&s^q1x17d0=D X@CH+z<kpO!>Mlq1rU{aQ3=Gx)<a$m% diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/TOFRONT3.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/TOFRONT3.gif deleted file mode 100644 index 7420d65229120749ee2d9e1486bdb6c65fb26c1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQuU$1bM;<_MV~Dq_%+%b(!CCp&C`6eFVcKv%-&l+a_STHw;77Obvv`P;OL@r zN2LGedG}uqU+F48qf5KOwJP%Xlk2ytW}bhM>vd*c<7UTaw_dG2Zd)8#TXOuFYPGFH j5r<BrLUToHd}^9%muEpsPI6uM6c@>Y*&^(M3=Gx)s%TZQ diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/TRIANGLE1.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/TRIANGLE1.gif deleted file mode 100644 index d3e40b57d567538f6daf9e555ea1dcb581595cd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 192 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu?96bM;<_eTR3;`9CY<Fv^wr(D3F}mwRPjiR|oGE4C^4JkppQFin`R(d@v1 z=Zb9BUe_l*`{Gim9e*`LdD^}Q8*cp6n0-FOWK#6)YctN8`m+8%`)tiFX)WHsr}DM7 fh2=sKHU`lW-DR#h%6`d{k|evQiLnbZFjxZsl^9UM diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/TRIANGLE2.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/TRIANGLE2.gif deleted file mode 100644 index b6a48fdbe47c51d90395eef9902b26465af45c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhlJ%j%bM;;arIKCW4@{_4*f8;-@rpG+eAPA2Pda(><*P+zZ>P^*P~h?8K%V`r zz>`uRlh%iQ?wsOLdYMn>r?uGr!>Z+Ka>2Xz8NGXGGr2T3K~$yp`hr{8VYitR|7-cB UO0?8eq(zywbc?VHGB8*J0ORmZ@&Et; diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/TRIANGLE3.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/TRIANGLE3.gif deleted file mode 100644 index 6fbdab7df54ee05e19389064b599f127fa7a21b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n+QhQu3j}bM;<_MW1)PKQOs;iFvMyflc=5O$#{}#K+#dl;i#0>e_PIycvrH`&|{) z-FWyyH!NExQna&fK_*}EM9HZ^Efqd`vjx?cSn;xLp3l7OEpJVt{g)}B^JYC<Wvf(N dR}p4gQ_|38SJ9H?RGDio88cOkU66sn8UR={OnCqR diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/URL1.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/URL1.gif deleted file mode 100644 index 18fecf8b5402640df3d39a92367d0d6f0c22d2f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ4RaStOExQG&D5)XJBCX&+s2i{RgxD|NpN8 z(gD)zz%uzmgXikK4tA9l-(qhlp4ifQrdi;G+lm~ISuz>j$9d-bn7D5C)HPdPOIBOm z`#57ws>WRYbvt<kIh0nta8G!$E^^VNk5(~>OFpz5$=iMZWP6R@`s+viPO4<()Xl32 z%5tqYYjQTJs*$U1_OjrasF~K`Y8&GiF||KNB_)kxc68cgeeF!;3XPc=3;PN-<oio( L5oZ@<V6X-Ncz|8< diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/URL2.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/URL2.gif deleted file mode 100644 index b328f34f69ecd307f0bcd83c4f944fa77108a87f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ4RaStOExQG&D5)XJBCX&+s2i{RgxD|NpN8 z(gD)zz|#An!E^Oq2c?pf^H;9-%5Rvc{8@pecms>&+>BgrwerO-Hs^MUJS=>%mSfAM zw39hjmJSoujkmhmUe$S(6}+)yO+4RISE2Sb4|0x&+1>Zc+g-M_N$t{G32vdluO?-Y z^+weeLFFwLp0PZA=}A2*sR?#@rm50Ah8`0gW%YE^-93xgwe&MQ<_Alx6K5A>V6X-N DBkohz diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/URL3.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/URL3.gif deleted file mode 100644 index cae0fdfbfda19073ee60e002c714f17fd0a8da03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ4RaStOExQG&D5)XJBCX&+s2i{RgxD|NpN8 z(gD)zz%u(ogXikK4vRh?n4EB}Rz;mL`lkWElY-vDsll&Wh09l`XRYc{@OE<k%jX>a zy7j@;zC9~mT5`Qy<@Y#!)83#>b`L%^3;1qTJJ#rMV_U%4VhJz(L+^g<kqevrtG-r2 z*<3PBt5HcVzA2z1F1D>fqn>?gcJ8FYKpii3y_vJUjSQ!%G^)(em(SHpTrR^igJF$N T`{dFc%hV<Ih_MSYFjxZsJRDuP diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/ZOOM1.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/ZOOM1.gif deleted file mode 100644 index 19846a6b4d508c26a6eab125e89211221bcf8337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmZ?wbhEHblwgoxc+3C-`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|F8Iu z&o?n8RiQkyBtya7(>H)Y2V@4wGzJ!n4<|fV@3nY+cK3gAg{}oGHX2+F>9f|wy|yb* l-)&mH|Ngp7#zNUHI-zcETt=BfM$^yB6nm|WG8bg91^^%4H`f3F diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/ZOOM2.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/ZOOM2.gif deleted file mode 100644 index 6f98416d189b60f397f6dadb8cdf7ee998840895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmZ?wbhEHblwgoxc+3C-`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBV*cTT=jy!{ug~uOufWlhT*2T!i)qoTO>(c+&9^x`_wP01v-@{QWM(Xy&^1~4 TQ%IE7#Is9FypFmsFjxZs#+5ei diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/ZOOM3.gif b/jhotdraw6/src/main/resources/org/jhotdraw/images/ZOOM3.gif deleted file mode 100644 index c512db3d8d2c620a556c77fbb02cf5e5ed420c0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmZ?wbh9u|lwgox_|5<V`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|L?}Y zz>r$Zz_8!p`+iOi1_nk31_qXQVGRHO|Nmd3<<|r<kZHmnkYNmm-i9%BybWUzvH!lG znSp`fx8wKy6Q=yx|LQD+KJqb)VgK7OkQRmvD6KR<f?>(qFos9M-}lEeGB6w!`o5nb zGmIhOPx8TKdO!Cgi!Uf-VBlb2V9*KtzMt8dfdOP5$gny3nIMWmVSWU|57q!T#}H#9 zhPPqPRxu3w#W#Q7&%odSmIt}%4{HE}6$1lE9fQY*FoxSApX*`rAUO`v&-FYP{?>!o zh6<m-^s##o8e|9yBLhS3z0dU)AHo>se1Z4{WL}#%NEU*b7`P8JFt9OLGB7YO#yT+Y zeGOx1c^Ag;xbpXYmL(e+8JHNrVjww?8heHfjXT~!%mcAOYL3J>FxbR8FdTRn#$a^u zJ6IpcK7p@c3@2h77)lrz7(i-4`atG^_#k<Z3(mX?V*rW0co)Vn_d3Xb3=9nK!x-+c zq&9-g1%)k$|8K!}l<)z$1!Q)?r!WSPIv2F?0m;F_2gC-24~SO3_ql%h2XI(4Sp5IK zAH?<v2w?z)H^@DpG~<z9;!>1Y9#dSD9OLW}lR4*o7=r}^149J^1H%Mg2Zo7@A@RiF z=KvN5>Ei*%n*&%L#0O!JA3);BW=AZA=>7ly|8oTf28OkZzwh@E;{c~oP|WifBs4M@ zBs3~)O=(p8$pSKlK?g*F@&p6NBnEi~36Bj64mLBeC`Fvuu<&p@2b+?`hlWK*yCn3p zrp(y5*sY(5(TC;dMwR2;Y@SI|IzBaePv`Uwv(fyp^z00U$a7nM3N@TzHWB``Ml)Fb z!a}BcHrKAti!aVHubs5SQ*dF(a;5rnG8sWjyt-L7_FdtclI^xC{_wgpzrN-KZ%MJX Z>)m}(`|g~a_jx>-TlEjJGcqz*0|2%6KxF^` diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/images/pspbrwse.jbf b/jhotdraw6/src/main/resources/org/jhotdraw/images/pspbrwse.jbf deleted file mode 100644 index 412902ade2fab1b81d220a2717e8c91f2685093e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21230 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 F1OVlMK6?NF diff --git a/jhotdraw6/src/main/resources/org/jhotdraw/standard.jdo b/jhotdraw6/src/main/resources/org/jhotdraw/standard.jdo deleted file mode 100644 index 219344b1e..000000000 --- a/jhotdraw6/src/main/resources/org/jhotdraw/standard.jdo +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE jdo SYSTEM "jdo.dtd"> -<jdo> - <package name="org.jhotdraw.standard"> - <class name="AbstractFigure"> - <field name="fListener" persistence-modifier="persistent"> - </field> - </class> - <class name="CompositeFigure"> -<!-- - <field name="fFigures"> - <extension vendor-name="FastObjects" key="serialized" value="true"/> - </field> ---> - </class> - <class name="ChopBoxConnector"> - </class> - <class name="DecoratorFigure"> - </class> - <class name="LocatorConnector"> - </class> - <class name="PeripheralLocator"> - </class> - <class name="OffsetLocator"> - </class> - <class name="RelativeLocator"> - </class> - <class name="StandardDrawing"> - </class> - </package> -</jdo> diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/AllTests.java deleted file mode 100644 index 2106f0144..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/AllTests.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test"); - //$JUnit-BEGIN$ - - suite.addTest(org.jhotdraw.test.contrib.AllTests.suite()); - suite.addTest(org.jhotdraw.test.figures.AllTests.suite()); - suite.addTest(org.jhotdraw.test.framework.AllTests.suite()); - suite.addTest(org.jhotdraw.test.samples.javadraw.AllTests.suite()); - suite.addTest(org.jhotdraw.test.samples.minimap.AllTests.suite()); - suite.addTest(org.jhotdraw.test.samples.net.AllTests.suite()); - suite.addTest(org.jhotdraw.test.samples.nothing.AllTests.suite()); - suite.addTest(org.jhotdraw.test.samples.pert.AllTests.suite()); - suite.addTest(org.jhotdraw.test.standard.AllTests.suite()); - suite.addTest(org.jhotdraw.test.util.AllTests.suite()); - suite.addTest(org.jhotdraw.test.util.collections.jdk11.AllTests.suite()); - suite.addTest(org.jhotdraw.test.util.collections.jdk12.AllTests.suite()); - - - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/JHDTestCase.java b/jhotdraw6/src/test/java/org/jhotdraw/test/JHDTestCase.java deleted file mode 100644 index 72f6a2677..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/JHDTestCase.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test; - -import junit.framework.TestCase; -import org.jhotdraw.application.DrawApplication; -import org.jhotdraw.samples.javadraw.JavaDrawApp; - -public class JHDTestCase extends TestCase { - public JavaDrawApp myDrawingEditor; - - public JHDTestCase(String name) { - super(name); - } - - protected void setUp() throws Exception { - myDrawingEditor = new JavaDrawApp("TestApplication"); - } - - protected void tearDown() throws Exception { - myDrawingEditor.setVisible(false); - myDrawingEditor = null; - } - - public DrawApplication getDrawingEditor() { - return myDrawingEditor; - } - - /** - * Some tests might want start from scratch with a new DrawingEditor - * (to avoid side-effects from previous test) - */ - public JavaDrawApp createNewDrawingEditor() { - return new JavaDrawApp("TestApplication"); - } -} \ No newline at end of file diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/AllTests.java deleted file mode 100644 index 998161e95..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/AllTests.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * @(#)AllTests.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.contrib"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(CTXCommandMenuTest.class)); - suite.addTest(new TestSuite(CTXWindowMenuTest.class)); - suite.addTest(new TestSuite(ChopDiamondConnectorTest.class)); - suite.addTest(new TestSuite(ChopPolygonConnectorTest.class)); - suite.addTest(new TestSuite(ClippingUpdateStrategyTest.class)); - suite.addTest(new TestSuite(CommandCheckBoxMenuItemTest.class)); - suite.addTest(new TestSuite(CommandMenuItemTest.class)); - suite.addTest(new TestSuite(ComponentFigureTest.class)); - suite.addTest(new TestSuite(CompositeFigureCreationToolTest.class)); - suite.addTest(new TestSuite(CustomSelectionToolTest.class)); - suite.addTest(new TestSuite(CustomToolBarTest.class)); - suite.addTest(new TestSuite(DesktopEventServiceTest.class)); - suite.addTest(new TestSuite(DiamondFigureTest.class)); - suite.addTest(new TestSuite(FloatingTextAreaTest.class)); - suite.addTest(new TestSuite(GraphicalCompositeFigureTest.class)); - suite.addTest(new TestSuite(HelperTest.class)); - suite.addTest(new TestSuite(JPanelDesktopTest.class)); - suite.addTest(new TestSuite(JScrollPaneDesktopTest.class)); - suite.addTest(new TestSuite(MDIDesktopPaneTest.class)); - suite.addTest(new TestSuite(MDI_DrawApplicationTest.class)); - suite.addTest(new TestSuite(MiniMapViewTest.class)); - suite.addTest(new TestSuite(NestedCreationToolTest.class)); - suite.addTest(new TestSuite(PolygonFigureTest.class)); - suite.addTest(new TestSuite(PolygonHandleTest.class)); - suite.addTest(new TestSuite(PolygonToolTest.class)); - suite.addTest(new TestSuite(SVGDrawAppTest.class)); - suite.addTest(new TestSuite(SVGStorageFormatTest.class)); - suite.addTest(new TestSuite(SimpleLayouterTest.class)); - suite.addTest(new TestSuite(SplitConnectionToolTest.class)); - suite.addTest(new TestSuite(StandardLayouterTest.class)); - suite.addTest(new TestSuite(TextAreaFigureTest.class)); - suite.addTest(new TestSuite(TextAreaToolTest.class)); - suite.addTest(new TestSuite(TriangleFigureTest.class)); - suite.addTest(new TestSuite(WindowMenuTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CTXCommandMenuTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CTXCommandMenuTest.java deleted file mode 100644 index 2971e442d..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CTXCommandMenuTest.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.CTXCommandMenu; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CTXCommandMenuTest is generated by - * JUnitDoclet to hold the tests for CTXCommandMenu. - * @see org.jhotdraw.contrib.CTXCommandMenu - */ -// JUnitDoclet end javadoc_class -public class CTXCommandMenuTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CTXCommandMenu ctxcommandmenu; - // JUnitDoclet end class - - /** - * Constructor CTXCommandMenuTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CTXCommandMenuTest(String name) { - // JUnitDoclet begin method CTXCommandMenuTest - super(name); - // JUnitDoclet end method CTXCommandMenuTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CTXCommandMenu createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CTXCommandMenu("TestCTXCommandMenu"); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - ctxcommandmenu = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - ctxcommandmenu = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.contrib.CTXCommandMenu#add(org.jhotdraw.util.Command) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method addCheckItem() - /** - * Method testAddCheckItem is testing addCheckItem - * @see org.jhotdraw.contrib.CTXCommandMenu#addCheckItem(org.jhotdraw.util.Command) - */ - // JUnitDoclet end javadoc_method addCheckItem() - public void testAddCheckItem() throws Exception { - // JUnitDoclet begin method addCheckItem - // JUnitDoclet end method addCheckItem - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.contrib.CTXCommandMenu#remove(org.jhotdraw.util.Command) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method enable() - /** - * Method testEnable is testing enable - * @see org.jhotdraw.contrib.CTXCommandMenu#enable(java.lang.String, boolean) - */ - // JUnitDoclet end javadoc_method enable() - public void testEnable() throws Exception { - // JUnitDoclet begin method enable - // JUnitDoclet end method enable - } - - // JUnitDoclet begin javadoc_method checkEnabled() - /** - * Method testCheckEnabled is testing checkEnabled - * @see org.jhotdraw.contrib.CTXCommandMenu#checkEnabled() - */ - // JUnitDoclet end javadoc_method checkEnabled() - public void testCheckEnabled() throws Exception { - // JUnitDoclet begin method checkEnabled - // JUnitDoclet end method checkEnabled - } - - // JUnitDoclet begin javadoc_method actionPerformed() - /** - * Method testActionPerformed is testing actionPerformed - * @see org.jhotdraw.contrib.CTXCommandMenu#actionPerformed(java.awt.event.ActionEvent) - */ - // JUnitDoclet end javadoc_method actionPerformed() - public void testActionPerformed() throws Exception { - // JUnitDoclet begin method actionPerformed - // JUnitDoclet end method actionPerformed - } - - // JUnitDoclet begin javadoc_method commandExecuted() - /** - * Method testCommandExecuted is testing commandExecuted - * @see org.jhotdraw.contrib.CTXCommandMenu#commandExecuted(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecuted() - public void testCommandExecuted() throws Exception { - // JUnitDoclet begin method commandExecuted - // JUnitDoclet end method commandExecuted - } - - // JUnitDoclet begin javadoc_method commandExecutable() - /** - * Method testCommandExecutable is testing commandExecutable - * @see org.jhotdraw.contrib.CTXCommandMenu#commandExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecutable() - public void testCommandExecutable() throws Exception { - // JUnitDoclet begin method commandExecutable - // JUnitDoclet end method commandExecutable - } - - // JUnitDoclet begin javadoc_method commandNotExecutable() - /** - * Method testCommandNotExecutable is testing commandNotExecutable - * @see org.jhotdraw.contrib.CTXCommandMenu#commandNotExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandNotExecutable() - public void testCommandNotExecutable() throws Exception { - // JUnitDoclet begin method commandNotExecutable - // JUnitDoclet end method commandNotExecutable - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CTXWindowMenuTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CTXWindowMenuTest.java deleted file mode 100644 index 996be1afb..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CTXWindowMenuTest.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.application.DrawApplication; -import org.jhotdraw.contrib.CTXWindowMenu; -import org.jhotdraw.contrib.MDIDesktopPane; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CTXWindowMenuTest is generated by - * JUnitDoclet to hold the tests for CTXWindowMenu. - * @see org.jhotdraw.contrib.CTXWindowMenu - */ -// JUnitDoclet end javadoc_class -public class CTXWindowMenuTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CTXWindowMenu ctxwindowmenu; - // JUnitDoclet end class - - /** - * Constructor CTXWindowMenuTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CTXWindowMenuTest(String name) { - // JUnitDoclet begin method CTXWindowMenuTest - super(name); - // JUnitDoclet end method CTXWindowMenuTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CTXWindowMenu createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - MDIDesktopPane desktop = (MDIDesktopPane) (((DrawApplication)getDrawingEditor()).getDesktop()); - return new CTXWindowMenu("TestCTXWindowMenu", desktop, getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - ctxwindowmenu = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - ctxwindowmenu = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ChopDiamondConnectorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ChopDiamondConnectorTest.java deleted file mode 100644 index 5d4ca381d..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ChopDiamondConnectorTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.ChopDiamondConnector; -import junit.framework.TestCase; - -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChopDiamondConnectorTest is generated by - * JUnitDoclet to hold the tests for ChopDiamondConnector. - * @see org.jhotdraw.contrib.ChopDiamondConnector - */ -// JUnitDoclet end javadoc_class -public class ChopDiamondConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChopDiamondConnector chopdiamondconnector; - // JUnitDoclet end class - - /** - * Constructor ChopDiamondConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChopDiamondConnectorTest(String name) { - // JUnitDoclet begin method ChopDiamondConnectorTest - super(name); - // JUnitDoclet end method ChopDiamondConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ChopDiamondConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ChopDiamondConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - chopdiamondconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - chopdiamondconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ChopPolygonConnectorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ChopPolygonConnectorTest.java deleted file mode 100644 index f54019191..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ChopPolygonConnectorTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.ChopPolygonConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChopPolygonConnectorTest is generated by - * JUnitDoclet to hold the tests for ChopPolygonConnector. - * @see org.jhotdraw.contrib.ChopPolygonConnector - */ -// JUnitDoclet end javadoc_class -public class ChopPolygonConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChopPolygonConnector choppolygonconnector; - // JUnitDoclet end class - - /** - * Constructor ChopPolygonConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChopPolygonConnectorTest(String name) { - // JUnitDoclet begin method ChopPolygonConnectorTest - super(name); - // JUnitDoclet end method ChopPolygonConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ChopPolygonConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ChopPolygonConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - choppolygonconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - choppolygonconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ClippingUpdateStrategyTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ClippingUpdateStrategyTest.java deleted file mode 100644 index 799003ead..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ClippingUpdateStrategyTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.ClippingUpdateStrategy; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ClippingUpdateStrategyTest is generated by - * JUnitDoclet to hold the tests for ClippingUpdateStrategy. - * @see org.jhotdraw.contrib.ClippingUpdateStrategy - */ -// JUnitDoclet end javadoc_class -public class ClippingUpdateStrategyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ClippingUpdateStrategy clippingupdatestrategy; - // JUnitDoclet end class - - /** - * Constructor ClippingUpdateStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ClippingUpdateStrategyTest(String name) { - // JUnitDoclet begin method ClippingUpdateStrategyTest - super(name); - // JUnitDoclet end method ClippingUpdateStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ClippingUpdateStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ClippingUpdateStrategy(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - clippingupdatestrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - clippingupdatestrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.contrib.ClippingUpdateStrategy#draw(java.awt.Graphics, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CommandCheckBoxMenuItemTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CommandCheckBoxMenuItemTest.java deleted file mode 100644 index a56e25f9a..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CommandCheckBoxMenuItemTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.CommandCheckBoxMenuItem; -import org.jhotdraw.standard.DeleteCommand; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.Command; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandCheckBoxMenuItemTest is generated by - * JUnitDoclet to hold the tests for CommandCheckBoxMenuItem. - * @see org.jhotdraw.contrib.CommandCheckBoxMenuItem - */ -// JUnitDoclet end javadoc_class -public class CommandCheckBoxMenuItemTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandCheckBoxMenuItem commandcheckboxmenuitem; - // JUnitDoclet end class - - /** - * Constructor CommandCheckBoxMenuItemTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandCheckBoxMenuItemTest(String name) { - // JUnitDoclet begin method CommandCheckBoxMenuItemTest - super(name); - // JUnitDoclet end method CommandCheckBoxMenuItemTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CommandCheckBoxMenuItem createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Command cmd = new DeleteCommand("TestDelete", getDrawingEditor()); - return new CommandCheckBoxMenuItem(cmd); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandcheckboxmenuitem = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandcheckboxmenuitem = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setCommand() - /** - * Method testSetGetCommand is testing setCommand - * and getCommand together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.CommandCheckBoxMenuItem#setCommand(org.jhotdraw.util.Command) - * @see org.jhotdraw.contrib.CommandCheckBoxMenuItem#getCommand() - */ - // JUnitDoclet end javadoc_method setCommand() - public void testSetGetCommand() throws Exception { - // JUnitDoclet begin method setCommand getCommand - org.jhotdraw.util.Command[] tests = { new DeleteCommand("TestDelete", getDrawingEditor()), null }; - - for (int i = 0; i < tests.length; i++) { - commandcheckboxmenuitem.setCommand(tests[i]); - assertEquals(tests[i], commandcheckboxmenuitem.getCommand()); - } - // JUnitDoclet end method setCommand getCommand - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CommandMenuItemTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CommandMenuItemTest.java deleted file mode 100644 index c39b46472..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CommandMenuItemTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.CommandMenuItem; -import org.jhotdraw.standard.DeleteCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandMenuItemTest is generated by - * JUnitDoclet to hold the tests for CommandMenuItem. - * @see org.jhotdraw.contrib.CommandMenuItem - */ -// JUnitDoclet end javadoc_class -public class CommandMenuItemTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandMenuItem commandmenuitem; - // JUnitDoclet end class - - /** - * Constructor CommandMenuItemTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandMenuItemTest(String name) { - // JUnitDoclet begin method CommandMenuItemTest - super(name); - // JUnitDoclet end method CommandMenuItemTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CommandMenuItem createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CommandMenuItem(new DeleteCommand("TestDelete", getDrawingEditor())); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandmenuitem = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandmenuitem = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setCommand() - /** - * Method testSetGetCommand is testing setCommand - * and getCommand together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.CommandMenuItem#setCommand(org.jhotdraw.util.Command) - * @see org.jhotdraw.contrib.CommandMenuItem#getCommand() - */ - // JUnitDoclet end javadoc_method setCommand() - public void testSetGetCommand() throws Exception { - org.jhotdraw.util.Command[] tests = { new DeleteCommand("TestDelete", getDrawingEditor()), null }; - - for (int i = 0; i < tests.length; i++) { - commandmenuitem.setCommand(tests[i]); - assertEquals(tests[i], commandmenuitem.getCommand()); - } - // JUnitDoclet begin method setCommand getCommand - // JUnitDoclet end method setCommand getCommand - } - - // JUnitDoclet begin javadoc_method actionPerformed() - /** - * Method testActionPerformed is testing actionPerformed - * @see org.jhotdraw.contrib.CommandMenuItem#actionPerformed(java.awt.event.ActionEvent) - */ - // JUnitDoclet end javadoc_method actionPerformed() - public void testActionPerformed() throws Exception { - // JUnitDoclet begin method actionPerformed - // JUnitDoclet end method actionPerformed - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ComponentFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ComponentFigureTest.java deleted file mode 100644 index 6e4780616..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/ComponentFigureTest.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import javax.swing.JButton; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.ComponentFigure; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ComponentFigureTest is generated by - * JUnitDoclet to hold the tests for ComponentFigure. - * @see org.jhotdraw.contrib.ComponentFigure - */ -// JUnitDoclet end javadoc_class -public class ComponentFigureTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ComponentFigure componentfigure; - // JUnitDoclet end class - - /** - * Constructor ComponentFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ComponentFigureTest(String name) { - // JUnitDoclet begin method ComponentFigureTest - super(name); - // JUnitDoclet end method ComponentFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ComponentFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ComponentFigure(new JButton("TestComponent")); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - componentfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - componentfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.contrib.ComponentFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.contrib.ComponentFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.contrib.ComponentFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method getComponent() - /** - * Method testGetComponent is testing getComponent - * @see org.jhotdraw.contrib.ComponentFigure#getComponent() - */ - // JUnitDoclet end javadoc_method getComponent() - public void testGetComponent() throws Exception { - // JUnitDoclet begin method getComponent - // JUnitDoclet end method getComponent - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.contrib.ComponentFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CompositeFigureCreationToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CompositeFigureCreationToolTest.java deleted file mode 100644 index d645d8bd8..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CompositeFigureCreationToolTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.CompositeFigureCreationTool; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CompositeFigureCreationToolTest is generated by - * JUnitDoclet to hold the tests for CompositeFigureCreationTool. - * @see org.jhotdraw.contrib.CompositeFigureCreationTool - */ -// JUnitDoclet end javadoc_class -public class CompositeFigureCreationToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CompositeFigureCreationTool compositefigurecreationtool; - // JUnitDoclet end class - - /** - * Constructor CompositeFigureCreationToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CompositeFigureCreationToolTest(String name) { - // JUnitDoclet begin method CompositeFigureCreationToolTest - super(name); - // JUnitDoclet end method CompositeFigureCreationToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CompositeFigureCreationTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CompositeFigureCreationTool(getDrawingEditor(), new RectangleFigure()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - compositefigurecreationtool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - compositefigurecreationtool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.contrib.CompositeFigureCreationTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see org.jhotdraw.contrib.CompositeFigureCreationTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.contrib.CompositeFigureCreationTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method getContainerFigure() - /** - * Method testGetContainerFigure is testing getContainerFigure - * @see org.jhotdraw.contrib.CompositeFigureCreationTool#getContainerFigure() - */ - // JUnitDoclet end javadoc_method getContainerFigure() - public void testGetContainerFigure() throws Exception { - // JUnitDoclet begin method getContainerFigure - // JUnitDoclet end method getContainerFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CustomSelectionToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CustomSelectionToolTest.java deleted file mode 100644 index 90b2dad53..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CustomSelectionToolTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.CustomSelectionTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CustomSelectionToolTest is generated by - * JUnitDoclet to hold the tests for CustomSelectionTool. - * @see org.jhotdraw.contrib.CustomSelectionTool - */ -// JUnitDoclet end javadoc_class -public class CustomSelectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CustomSelectionTool customselectiontool; - // JUnitDoclet end class - - /** - * Constructor CustomSelectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CustomSelectionToolTest(String name) { - // JUnitDoclet begin method CustomSelectionToolTest - super(name); - // JUnitDoclet end method CustomSelectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CustomSelectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CustomSelectionTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - customselectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - customselectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.contrib.CustomSelectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.contrib.CustomSelectionTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.contrib.CustomSelectionTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CustomToolBarTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CustomToolBarTest.java deleted file mode 100644 index 7d1287ad0..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/CustomToolBarTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.CustomToolBar; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CustomToolBarTest is generated by - * JUnitDoclet to hold the tests for CustomToolBar. - * @see org.jhotdraw.contrib.CustomToolBar - */ -// JUnitDoclet end javadoc_class -public class CustomToolBarTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CustomToolBar customtoolbar; - // JUnitDoclet end class - - /** - * Constructor CustomToolBarTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CustomToolBarTest(String name) { - // JUnitDoclet begin method CustomToolBarTest - super(name); - // JUnitDoclet end method CustomToolBarTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CustomToolBar createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CustomToolBar(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - customtoolbar = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - customtoolbar = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method switchToolBar() - /** - * Method testSwitchToolBar is testing switchToolBar - * @see org.jhotdraw.contrib.CustomToolBar#switchToolBar() - */ - // JUnitDoclet end javadoc_method switchToolBar() - public void testSwitchToolBar() throws Exception { - // JUnitDoclet begin method switchToolBar - // JUnitDoclet end method switchToolBar - } - - // JUnitDoclet begin javadoc_method switchToEditTools() - /** - * Method testSwitchToEditTools is testing switchToEditTools - * @see org.jhotdraw.contrib.CustomToolBar#switchToEditTools() - */ - // JUnitDoclet end javadoc_method switchToEditTools() - public void testSwitchToEditTools() throws Exception { - // JUnitDoclet begin method switchToEditTools - // JUnitDoclet end method switchToEditTools - } - - // JUnitDoclet begin javadoc_method switchToStandardTools() - /** - * Method testSwitchToStandardTools is testing switchToStandardTools - * @see org.jhotdraw.contrib.CustomToolBar#switchToStandardTools() - */ - // JUnitDoclet end javadoc_method switchToStandardTools() - public void testSwitchToStandardTools() throws Exception { - // JUnitDoclet begin method switchToStandardTools - // JUnitDoclet end method switchToStandardTools - } - - // JUnitDoclet begin javadoc_method activateTools() - /** - * Method testActivateTools is testing activateTools - * @see org.jhotdraw.contrib.CustomToolBar#activateTools() - */ - // JUnitDoclet end javadoc_method activateTools() - public void testActivateTools() throws Exception { - // JUnitDoclet begin method activateTools - // JUnitDoclet end method activateTools - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.contrib.CustomToolBar#add(java.awt.Component) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/DesktopEventServiceTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/DesktopEventServiceTest.java deleted file mode 100644 index 9e36bf065..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/DesktopEventServiceTest.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import java.awt.Container; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.Desktop; -import org.jhotdraw.contrib.DesktopEventService; -import org.jhotdraw.contrib.JPanelDesktop; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase DesktopEventServiceTest is generated by - * JUnitDoclet to hold the tests for DesktopEventService. - * @see org.jhotdraw.contrib.DesktopEventService - */ -// JUnitDoclet end javadoc_class -public class DesktopEventServiceTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DesktopEventService desktopeventservice; - // JUnitDoclet end class - - /** - * Constructor DesktopEventServiceTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DesktopEventServiceTest(String name) { - // JUnitDoclet begin method DesktopEventServiceTest - super(name); - // JUnitDoclet end method DesktopEventServiceTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public DesktopEventService createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Desktop desktop = new JPanelDesktop(getDrawingEditor()); - return new DesktopEventService(desktop, ((Container)desktop)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - desktopeventservice = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - desktopeventservice = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addComponent() - /** - * Method testAddComponent is testing addComponent - * @see org.jhotdraw.contrib.DesktopEventService#addComponent(java.awt.Component) - */ - // JUnitDoclet end javadoc_method addComponent() - public void testAddComponent() throws Exception { - // JUnitDoclet begin method addComponent - // JUnitDoclet end method addComponent - } - - // JUnitDoclet begin javadoc_method removeComponent() - /** - * Method testRemoveComponent is testing removeComponent - * @see org.jhotdraw.contrib.DesktopEventService#removeComponent(org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method removeComponent() - public void testRemoveComponent() throws Exception { - // JUnitDoclet begin method removeComponent - // JUnitDoclet end method removeComponent - } - - // JUnitDoclet begin javadoc_method removeAllComponents() - /** - * Method testRemoveAllComponents is testing removeAllComponents - * @see org.jhotdraw.contrib.DesktopEventService#removeAllComponents() - */ - // JUnitDoclet end javadoc_method removeAllComponents() - public void testRemoveAllComponents() throws Exception { - // JUnitDoclet begin method removeAllComponents - // JUnitDoclet end method removeAllComponents - } - - // JUnitDoclet begin javadoc_method addDesktopListener() - /** - * Method testAddDesktopListener is testing addDesktopListener - * @see org.jhotdraw.contrib.DesktopEventService#addDesktopListener(org.jhotdraw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method addDesktopListener() - public void testAddDesktopListener() throws Exception { - // JUnitDoclet begin method addDesktopListener - // JUnitDoclet end method addDesktopListener - } - - // JUnitDoclet begin javadoc_method removeDesktopListener() - /** - * Method testRemoveDesktopListener is testing removeDesktopListener - * @see org.jhotdraw.contrib.DesktopEventService#removeDesktopListener(org.jhotdraw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method removeDesktopListener() - public void testRemoveDesktopListener() throws Exception { - // JUnitDoclet begin method removeDesktopListener - // JUnitDoclet end method removeDesktopListener - } - - // JUnitDoclet begin javadoc_method getDrawingViews() - /** - * Method testGetDrawingViews is testing getDrawingViews - * @see org.jhotdraw.contrib.DesktopEventService#getDrawingViews(java.awt.Component[]) - */ - // JUnitDoclet end javadoc_method getDrawingViews() - public void testGetDrawingViews() throws Exception { - // JUnitDoclet begin method getDrawingViews - // JUnitDoclet end method getDrawingViews - } - - // JUnitDoclet begin javadoc_method getActiveDrawingView() - /** - * Method testGetActiveDrawingView is testing getActiveDrawingView - * @see org.jhotdraw.contrib.DesktopEventService#getActiveDrawingView() - */ - // JUnitDoclet end javadoc_method getActiveDrawingView() - public void testGetActiveDrawingView() throws Exception { - // JUnitDoclet begin method getActiveDrawingView - // JUnitDoclet end method getActiveDrawingView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/DiamondFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/DiamondFigureTest.java deleted file mode 100644 index bb6925986..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/DiamondFigureTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.DiamondFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DiamondFigureTest is generated by - * JUnitDoclet to hold the tests for DiamondFigure. - * @see org.jhotdraw.contrib.DiamondFigure - */ -// JUnitDoclet end javadoc_class -public class DiamondFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DiamondFigure diamondfigure; - // JUnitDoclet end class - - /** - * Constructor DiamondFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DiamondFigureTest(String name) { - // JUnitDoclet begin method DiamondFigureTest - super(name); - // JUnitDoclet end method DiamondFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public DiamondFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new DiamondFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - diamondfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - diamondfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.contrib.DiamondFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see org.jhotdraw.contrib.DiamondFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see org.jhotdraw.contrib.DiamondFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method chop() - /** - * Method testChop is testing chop - * @see org.jhotdraw.contrib.DiamondFigure#chop(java.awt.Point) - */ - // JUnitDoclet end javadoc_method chop() - public void testChop() throws Exception { - // JUnitDoclet begin method chop - // JUnitDoclet end method chop - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see org.jhotdraw.contrib.DiamondFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/FloatingTextAreaTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/FloatingTextAreaTest.java deleted file mode 100644 index e7ff63378..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/FloatingTextAreaTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.FloatingTextArea; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FloatingTextAreaTest is generated by - * JUnitDoclet to hold the tests for FloatingTextArea. - * @see org.jhotdraw.contrib.FloatingTextArea - */ -// JUnitDoclet end javadoc_class -public class FloatingTextAreaTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FloatingTextArea floatingtextarea; - // JUnitDoclet end class - - /** - * Constructor FloatingTextAreaTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FloatingTextAreaTest(String name) { - // JUnitDoclet begin method FloatingTextAreaTest - super(name); - // JUnitDoclet end method FloatingTextAreaTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FloatingTextArea createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new FloatingTextArea(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - floatingtextarea = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - floatingtextarea = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createOverlay() - /** - * Method testCreateOverlay is testing createOverlay - * @see org.jhotdraw.contrib.FloatingTextArea#createOverlay(java.awt.Container) - */ - // JUnitDoclet end javadoc_method createOverlay() - public void testCreateOverlay() throws Exception { - // JUnitDoclet begin method createOverlay - // JUnitDoclet end method createOverlay - } - - // JUnitDoclet begin javadoc_method setBounds() - /** - * Method testSetBounds is testing setBounds - * @see org.jhotdraw.contrib.FloatingTextArea#setBounds(java.awt.Rectangle, java.lang.String) - */ - // JUnitDoclet end javadoc_method setBounds() - public void testSetBounds() throws Exception { - // JUnitDoclet begin method setBounds - // JUnitDoclet end method setBounds - } - - // JUnitDoclet begin javadoc_method getText() - /** - * Method testGetText is testing getText - * @see org.jhotdraw.contrib.FloatingTextArea#getText() - */ - // JUnitDoclet end javadoc_method getText() - public void testGetText() throws Exception { - // JUnitDoclet begin method getText - // JUnitDoclet end method getText - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see org.jhotdraw.contrib.FloatingTextArea#getPreferredSize(int) - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method endOverlay() - /** - * Method testEndOverlay is testing endOverlay - * @see org.jhotdraw.contrib.FloatingTextArea#endOverlay() - */ - // JUnitDoclet end javadoc_method endOverlay() - public void testEndOverlay() throws Exception { - // JUnitDoclet begin method endOverlay - // JUnitDoclet end method endOverlay - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/GraphicalCompositeFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/GraphicalCompositeFigureTest.java deleted file mode 100644 index a107ef953..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/GraphicalCompositeFigureTest.java +++ /dev/null @@ -1,275 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import java.awt.Point; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import org.jhotdraw.contrib.GraphicalCompositeFigure; -import org.jhotdraw.contrib.SimpleLayouter; -import org.jhotdraw.figures.RectangleFigure; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase GraphicalCompositeFigureTest is generated by - * JUnitDoclet to hold the tests for GraphicalCompositeFigure. - * @see org.jhotdraw.contrib.GraphicalCompositeFigure - */ -// JUnitDoclet end javadoc_class -public class GraphicalCompositeFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GraphicalCompositeFigure graphicalcompositefigure; - // JUnitDoclet end class - - /** - * Constructor GraphicalCompositeFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GraphicalCompositeFigureTest(String name) { - // JUnitDoclet begin method GraphicalCompositeFigureTest - super(name); - // JUnitDoclet end method GraphicalCompositeFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public GraphicalCompositeFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new GraphicalCompositeFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - graphicalcompositefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - graphicalcompositefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method clone() - /** - * Method testClone is testing clone - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#clone() - */ - // JUnitDoclet end javadoc_method clone() - public void testClone() throws Exception { - // JUnitDoclet begin method clone - // JUnitDoclet end method clone - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method update() - /** - * Method testUpdate is testing update - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#update() - */ - // JUnitDoclet end javadoc_method update() - public void testUpdate() throws Exception { - // JUnitDoclet begin method update - // JUnitDoclet end method update - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method setPresentationFigure() - /** - * Method testSetGetPresentationFigure is testing setPresentationFigure - * and getPresentationFigure together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#setPresentationFigure(org.jhotdraw.framework.Figure) - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#getPresentationFigure() - */ - // JUnitDoclet end javadoc_method setPresentationFigure() - public void testSetGetPresentationFigure() throws Exception { - // JUnitDoclet begin method setPresentationFigure getPresentationFigure - org.jhotdraw.framework.Figure[] tests = { new RectangleFigure(new Point(10, 10), new Point(100, 100)), null }; - - for (int i = 0; i < tests.length; i++) { - graphicalcompositefigure.setPresentationFigure(tests[i]); - assertEquals(tests[i], graphicalcompositefigure.getPresentationFigure()); - } - // JUnitDoclet end method setPresentationFigure getPresentationFigure - } - - // JUnitDoclet begin javadoc_method layout() - /** - * Method testLayout is testing layout - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#layout() - */ - // JUnitDoclet end javadoc_method layout() - public void testLayout() throws Exception { - // JUnitDoclet begin method layout - // JUnitDoclet end method layout - } - - // JUnitDoclet begin javadoc_method setLayouter() - /** - * Method testSetGetLayouter is testing setLayouter - * and getLayouter together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#setLayouter(org.jhotdraw.contrib.Layouter) - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#getLayouter() - */ - // JUnitDoclet end javadoc_method setLayouter() - public void testSetGetLayouter() throws Exception { - // JUnitDoclet begin method setLayouter getLayouter - org.jhotdraw.contrib.Layouter[] tests = { new SimpleLayouter(graphicalcompositefigure), null }; - - for (int i = 0; i < tests.length; i++) { - graphicalcompositefigure.setLayouter(tests[i]); - assertEquals(tests[i], graphicalcompositefigure.getLayouter()); - } - // JUnitDoclet end method setLayouter getLayouter - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#figureRequestRemove(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.contrib.GraphicalCompositeFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/HelperTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/HelperTest.java deleted file mode 100644 index 6caf2d282..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/HelperTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.Helper; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase HelperTest is generated by - * JUnitDoclet to hold the tests for Helper. - * @see org.jhotdraw.contrib.Helper - */ -// JUnitDoclet end javadoc_class -public class HelperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Helper helper; - // JUnitDoclet end class - - /** - * Constructor HelperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public HelperTest(String name) { - // JUnitDoclet begin method HelperTest - super(name); - // JUnitDoclet end method HelperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public Helper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new Helper(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - helper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - helper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getDrawingView() - /** - * Method testGetDrawingView is testing getDrawingView - * @see org.jhotdraw.contrib.Helper#getDrawingView(java.awt.Container) - */ - // JUnitDoclet end javadoc_method getDrawingView() - public void testGetDrawingView() throws Exception { - // JUnitDoclet begin method getDrawingView - // JUnitDoclet end method getDrawingView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/JPanelDesktopTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/JPanelDesktopTest.java deleted file mode 100644 index 6552ebb6b..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/JPanelDesktopTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.JPanelDesktop; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JPanelDesktopTest is generated by - * JUnitDoclet to hold the tests for JPanelDesktop. - * @see org.jhotdraw.contrib.JPanelDesktop - */ -// JUnitDoclet end javadoc_class -public class JPanelDesktopTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JPanelDesktop jpaneldesktop; - // JUnitDoclet end class - - /** - * Constructor JPanelDesktopTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JPanelDesktopTest(String name) { - // JUnitDoclet begin method JPanelDesktopTest - super(name); - // JUnitDoclet end method JPanelDesktopTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public JPanelDesktop createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new JPanelDesktop(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - jpaneldesktop = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - jpaneldesktop = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getActiveDrawingView() - /** - * Method testGetActiveDrawingView is testing getActiveDrawingView - * @see org.jhotdraw.contrib.JPanelDesktop#getActiveDrawingView() - */ - // JUnitDoclet end javadoc_method getActiveDrawingView() - public void testGetActiveDrawingView() throws Exception { - // JUnitDoclet begin method getActiveDrawingView - // JUnitDoclet end method getActiveDrawingView - } - - // JUnitDoclet begin javadoc_method addToDesktop() - /** - * Method testAddToDesktop is testing addToDesktop - * @see org.jhotdraw.contrib.JPanelDesktop#addToDesktop(org.jhotdraw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method addToDesktop() - public void testAddToDesktop() throws Exception { - // JUnitDoclet begin method addToDesktop - // JUnitDoclet end method addToDesktop - } - - // JUnitDoclet begin javadoc_method removeFromDesktop() - /** - * Method testRemoveFromDesktop is testing removeFromDesktop - * @see org.jhotdraw.contrib.JPanelDesktop#removeFromDesktop(org.jhotdraw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method removeFromDesktop() - public void testRemoveFromDesktop() throws Exception { - // JUnitDoclet begin method removeFromDesktop - // JUnitDoclet end method removeFromDesktop - } - - // JUnitDoclet begin javadoc_method removeAllFromDesktop() - /** - * Method testRemoveAllFromDesktop is testing removeAllFromDesktop - * @see org.jhotdraw.contrib.JPanelDesktop#removeAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method removeAllFromDesktop() - public void testRemoveAllFromDesktop() throws Exception { - // JUnitDoclet begin method removeAllFromDesktop - // JUnitDoclet end method removeAllFromDesktop - } - - // JUnitDoclet begin javadoc_method getAllFromDesktop() - /** - * Method testGetAllFromDesktop is testing getAllFromDesktop - * @see org.jhotdraw.contrib.JPanelDesktop#getAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method getAllFromDesktop() - public void testGetAllFromDesktop() throws Exception { - // JUnitDoclet begin method getAllFromDesktop - // JUnitDoclet end method getAllFromDesktop - } - - // JUnitDoclet begin javadoc_method addDesktopListener() - /** - * Method testAddDesktopListener is testing addDesktopListener - * @see org.jhotdraw.contrib.JPanelDesktop#addDesktopListener(org.jhotdraw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method addDesktopListener() - public void testAddDesktopListener() throws Exception { - // JUnitDoclet begin method addDesktopListener - // JUnitDoclet end method addDesktopListener - } - - // JUnitDoclet begin javadoc_method removeDesktopListener() - /** - * Method testRemoveDesktopListener is testing removeDesktopListener - * @see org.jhotdraw.contrib.JPanelDesktop#removeDesktopListener(org.jhotdraw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method removeDesktopListener() - public void testRemoveDesktopListener() throws Exception { - // JUnitDoclet begin method removeDesktopListener - // JUnitDoclet end method removeDesktopListener - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} \ No newline at end of file diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/JScrollPaneDesktopTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/JScrollPaneDesktopTest.java deleted file mode 100644 index 4bc605cf3..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/JScrollPaneDesktopTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.JScrollPaneDesktop; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JScrollPaneDesktopTest is generated by - * JUnitDoclet to hold the tests for JScrollPaneDesktop. - * @see org.jhotdraw.contrib.JScrollPaneDesktop - */ -// JUnitDoclet end javadoc_class -public class JScrollPaneDesktopTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JScrollPaneDesktop jscrollpanedesktop; - // JUnitDoclet end class - - /** - * Constructor JScrollPaneDesktopTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JScrollPaneDesktopTest(String name) { - // JUnitDoclet begin method JScrollPaneDesktopTest - super(name); - // JUnitDoclet end method JScrollPaneDesktopTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public JScrollPaneDesktop createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new JScrollPaneDesktop(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - jscrollpanedesktop = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - jscrollpanedesktop = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getActiveDrawingView() - /** - * Method testGetActiveDrawingView is testing getActiveDrawingView - * @see org.jhotdraw.contrib.JScrollPaneDesktop#getActiveDrawingView() - */ - // JUnitDoclet end javadoc_method getActiveDrawingView() - public void testGetActiveDrawingView() throws Exception { - // JUnitDoclet begin method getActiveDrawingView - // JUnitDoclet end method getActiveDrawingView - } - - // JUnitDoclet begin javadoc_method addToDesktop() - /** - * Method testAddToDesktop is testing addToDesktop - * @see org.jhotdraw.contrib.JScrollPaneDesktop#addToDesktop(org.jhotdraw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method addToDesktop() - public void testAddToDesktop() throws Exception { - // JUnitDoclet begin method addToDesktop - // JUnitDoclet end method addToDesktop - } - - // JUnitDoclet begin javadoc_method removeFromDesktop() - /** - * Method testRemoveFromDesktop is testing removeFromDesktop - * @see org.jhotdraw.contrib.JScrollPaneDesktop#removeFromDesktop(org.jhotdraw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method removeFromDesktop() - public void testRemoveFromDesktop() throws Exception { - // JUnitDoclet begin method removeFromDesktop - // JUnitDoclet end method removeFromDesktop - } - - // JUnitDoclet begin javadoc_method removeAllFromDesktop() - /** - * Method testRemoveAllFromDesktop is testing removeAllFromDesktop - * @see org.jhotdraw.contrib.JScrollPaneDesktop#removeAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method removeAllFromDesktop() - public void testRemoveAllFromDesktop() throws Exception { - // JUnitDoclet begin method removeAllFromDesktop - // JUnitDoclet end method removeAllFromDesktop - } - - // JUnitDoclet begin javadoc_method getAllFromDesktop() - /** - * Method testGetAllFromDesktop is testing getAllFromDesktop - * @see org.jhotdraw.contrib.JScrollPaneDesktop#getAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method getAllFromDesktop() - public void testGetAllFromDesktop() throws Exception { - // JUnitDoclet begin method getAllFromDesktop - // JUnitDoclet end method getAllFromDesktop - } - - // JUnitDoclet begin javadoc_method addDesktopListener() - /** - * Method testAddDesktopListener is testing addDesktopListener - * @see org.jhotdraw.contrib.JScrollPaneDesktop#addDesktopListener(org.jhotdraw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method addDesktopListener() - public void testAddDesktopListener() throws Exception { - // JUnitDoclet begin method addDesktopListener - // JUnitDoclet end method addDesktopListener - } - - // JUnitDoclet begin javadoc_method removeDesktopListener() - /** - * Method testRemoveDesktopListener is testing removeDesktopListener - * @see org.jhotdraw.contrib.JScrollPaneDesktop#removeDesktopListener(org.jhotdraw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method removeDesktopListener() - public void testRemoveDesktopListener() throws Exception { - // JUnitDoclet begin method removeDesktopListener - // JUnitDoclet end method removeDesktopListener - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MDIDesktopPaneTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MDIDesktopPaneTest.java deleted file mode 100644 index 77464402c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MDIDesktopPaneTest.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.MDIDesktopPane; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MDIDesktopPaneTest is generated by - * JUnitDoclet to hold the tests for MDIDesktopPane. - * @see org.jhotdraw.contrib.MDIDesktopPane - */ -// JUnitDoclet end javadoc_class -public class MDIDesktopPaneTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MDIDesktopPane mdidesktoppane; - // JUnitDoclet end class - - /** - * Constructor MDIDesktopPaneTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MDIDesktopPaneTest(String name) { - // JUnitDoclet begin method MDIDesktopPaneTest - super(name); - // JUnitDoclet end method MDIDesktopPaneTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public MDIDesktopPane createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new MDIDesktopPane(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - mdidesktoppane = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - mdidesktoppane = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getActiveDrawingView() - /** - * Method testGetActiveDrawingView is testing getActiveDrawingView - * @see org.jhotdraw.contrib.MDIDesktopPane#getActiveDrawingView() - */ - // JUnitDoclet end javadoc_method getActiveDrawingView() - public void testGetActiveDrawingView() throws Exception { - // JUnitDoclet begin method getActiveDrawingView - // JUnitDoclet end method getActiveDrawingView - } - - // JUnitDoclet begin javadoc_method addToDesktop() - /** - * Method testAddToDesktop is testing addToDesktop - * @see org.jhotdraw.contrib.MDIDesktopPane#addToDesktop(org.jhotdraw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method addToDesktop() - public void testAddToDesktop() throws Exception { - // JUnitDoclet begin method addToDesktop - // JUnitDoclet end method addToDesktop - } - - // JUnitDoclet begin javadoc_method removeFromDesktop() - /** - * Method testRemoveFromDesktop is testing removeFromDesktop - * @see org.jhotdraw.contrib.MDIDesktopPane#removeFromDesktop(org.jhotdraw.framework.DrawingView, int) - */ - // JUnitDoclet end javadoc_method removeFromDesktop() - public void testRemoveFromDesktop() throws Exception { - // JUnitDoclet begin method removeFromDesktop - // JUnitDoclet end method removeFromDesktop - } - - // JUnitDoclet begin javadoc_method removeAllFromDesktop() - /** - * Method testRemoveAllFromDesktop is testing removeAllFromDesktop - * @see org.jhotdraw.contrib.MDIDesktopPane#removeAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method removeAllFromDesktop() - public void testRemoveAllFromDesktop() throws Exception { - // JUnitDoclet begin method removeAllFromDesktop - // JUnitDoclet end method removeAllFromDesktop - } - - // JUnitDoclet begin javadoc_method getAllFromDesktop() - /** - * Method testGetAllFromDesktop is testing getAllFromDesktop - * @see org.jhotdraw.contrib.MDIDesktopPane#getAllFromDesktop(int) - */ - // JUnitDoclet end javadoc_method getAllFromDesktop() - public void testGetAllFromDesktop() throws Exception { - // JUnitDoclet begin method getAllFromDesktop - // JUnitDoclet end method getAllFromDesktop - } - - // JUnitDoclet begin javadoc_method addDesktopListener() - /** - * Method testAddDesktopListener is testing addDesktopListener - * @see org.jhotdraw.contrib.MDIDesktopPane#addDesktopListener(org.jhotdraw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method addDesktopListener() - public void testAddDesktopListener() throws Exception { - // JUnitDoclet begin method addDesktopListener - // JUnitDoclet end method addDesktopListener - } - - // JUnitDoclet begin javadoc_method removeDesktopListener() - /** - * Method testRemoveDesktopListener is testing removeDesktopListener - * @see org.jhotdraw.contrib.MDIDesktopPane#removeDesktopListener(org.jhotdraw.contrib.DesktopListener) - */ - // JUnitDoclet end javadoc_method removeDesktopListener() - public void testRemoveDesktopListener() throws Exception { - // JUnitDoclet begin method removeDesktopListener - // JUnitDoclet end method removeDesktopListener - } - - // JUnitDoclet begin javadoc_method cascadeFrames() - /** - * Method testCascadeFrames is testing cascadeFrames - * @see org.jhotdraw.contrib.MDIDesktopPane#cascadeFrames() - */ - // JUnitDoclet end javadoc_method cascadeFrames() - public void testCascadeFrames() throws Exception { - // JUnitDoclet begin method cascadeFrames - // JUnitDoclet end method cascadeFrames - } - - // JUnitDoclet begin javadoc_method tileFrames() - /** - * Method testTileFrames is testing tileFrames - * @see org.jhotdraw.contrib.MDIDesktopPane#tileFrames() - */ - // JUnitDoclet end javadoc_method tileFrames() - public void testTileFrames() throws Exception { - // JUnitDoclet begin method tileFrames - // JUnitDoclet end method tileFrames - } - - // JUnitDoclet begin javadoc_method tileFramesHorizontally() - /** - * Method testTileFramesHorizontally is testing tileFramesHorizontally - * @see org.jhotdraw.contrib.MDIDesktopPane#tileFramesHorizontally() - */ - // JUnitDoclet end javadoc_method tileFramesHorizontally() - public void testTileFramesHorizontally() throws Exception { - // JUnitDoclet begin method tileFramesHorizontally - // JUnitDoclet end method tileFramesHorizontally - } - - // JUnitDoclet begin javadoc_method tileFramesVertically() - /** - * Method testTileFramesVertically is testing tileFramesVertically - * @see org.jhotdraw.contrib.MDIDesktopPane#tileFramesVertically() - */ - // JUnitDoclet end javadoc_method tileFramesVertically() - public void testTileFramesVertically() throws Exception { - // JUnitDoclet begin method tileFramesVertically - // JUnitDoclet end method tileFramesVertically - } - - // JUnitDoclet begin javadoc_method arrangeFramesVertically() - /** - * Method testArrangeFramesVertically is testing arrangeFramesVertically - * @see org.jhotdraw.contrib.MDIDesktopPane#arrangeFramesVertically() - */ - // JUnitDoclet end javadoc_method arrangeFramesVertically() - public void testArrangeFramesVertically() throws Exception { - // JUnitDoclet begin method arrangeFramesVertically - // JUnitDoclet end method arrangeFramesVertically - } - - // JUnitDoclet begin javadoc_method arrangeFramesHorizontally() - /** - * Method testArrangeFramesHorizontally is testing arrangeFramesHorizontally - * @see org.jhotdraw.contrib.MDIDesktopPane#arrangeFramesHorizontally() - */ - // JUnitDoclet end javadoc_method arrangeFramesHorizontally() - public void testArrangeFramesHorizontally() throws Exception { - // JUnitDoclet begin method arrangeFramesHorizontally - // JUnitDoclet end method arrangeFramesHorizontally - } - - // JUnitDoclet begin javadoc_method setAllSize() - /** - * Method testSetAllSize is testing setAllSize - * @see org.jhotdraw.contrib.MDIDesktopPane#setAllSize(java.awt.Dimension) - */ - // JUnitDoclet end javadoc_method setAllSize() - public void testSetAllSize() throws Exception { - // JUnitDoclet begin method setAllSize - // JUnitDoclet end method setAllSize - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MDI_DrawApplicationTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MDI_DrawApplicationTest.java deleted file mode 100644 index d91d4b122..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MDI_DrawApplicationTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.MDI_DrawApplication; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MDI_DrawApplicationTest is generated by - * JUnitDoclet to hold the tests for MDI_DrawApplication. - * @see org.jhotdraw.contrib.MDI_DrawApplication - */ -// JUnitDoclet end javadoc_class -public class MDI_DrawApplicationTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MDI_DrawApplication mdi_drawapplication; - // JUnitDoclet end class - - /** - * Constructor MDI_DrawApplicationTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MDI_DrawApplicationTest(String name) { - // JUnitDoclet begin method MDI_DrawApplicationTest - super(name); - // JUnitDoclet end method MDI_DrawApplicationTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public MDI_DrawApplication createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new MDI_DrawApplication(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - mdi_drawapplication = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - mdi_drawapplication = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method promptNew() - /** - * Method testPromptNew is testing promptNew - * @see org.jhotdraw.contrib.MDI_DrawApplication#promptNew() - */ - // JUnitDoclet end javadoc_method promptNew() - public void testPromptNew() throws Exception { - // JUnitDoclet begin method promptNew - // JUnitDoclet end method promptNew - } - - // JUnitDoclet begin javadoc_method newWindow() - /** - * Method testNewWindow is testing newWindow - * @see org.jhotdraw.contrib.MDI_DrawApplication#newWindow(org.jhotdraw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method newWindow() - public void testNewWindow() throws Exception { - // JUnitDoclet begin method newWindow - // JUnitDoclet end method newWindow - } - - // JUnitDoclet begin javadoc_method newView() - /** - * Method testNewView is testing newView - * @see org.jhotdraw.contrib.MDI_DrawApplication#newView() - */ - // JUnitDoclet end javadoc_method newView() - public void testNewView() throws Exception { - // JUnitDoclet begin method newView - // JUnitDoclet end method newView - } - - // JUnitDoclet begin javadoc_method views() - /** - * Method testViews is testing views - * @see org.jhotdraw.contrib.MDI_DrawApplication#views() - */ - // JUnitDoclet end javadoc_method views() - public void testViews() throws Exception { - // JUnitDoclet begin method views - // JUnitDoclet end method views - } - - // JUnitDoclet begin javadoc_method getDefaultDrawingTitle() - /** - * Method testGetDefaultDrawingTitle is testing getDefaultDrawingTitle - * @see org.jhotdraw.contrib.MDI_DrawApplication#getDefaultDrawingTitle() - */ - // JUnitDoclet end javadoc_method getDefaultDrawingTitle() - public void testGetDefaultDrawingTitle() throws Exception { - // JUnitDoclet begin method getDefaultDrawingTitle - // JUnitDoclet end method getDefaultDrawingTitle - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MiniMapViewTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MiniMapViewTest.java deleted file mode 100644 index 049ac966a..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/MiniMapViewTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; -import java.awt.Component; - -import javax.swing.JScrollPane; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.MiniMapView; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MiniMapViewTest is generated by - * JUnitDoclet to hold the tests for MiniMapView. - * @see org.jhotdraw.contrib.MiniMapView - */ -// JUnitDoclet end javadoc_class -public class MiniMapViewTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MiniMapView minimapview; - // JUnitDoclet end class - - /** - * Constructor MiniMapViewTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MiniMapViewTest(String name) { - // JUnitDoclet begin method MiniMapViewTest - super(name); - // JUnitDoclet end method MiniMapViewTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public MiniMapView createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - JScrollPane sp = new JScrollPane((Component)getDrawingEditor().view()); - sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); - sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); - sp.setAlignmentX(Component.LEFT_ALIGNMENT); - return new MiniMapView(getDrawingEditor().view(), sp); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - minimapview = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - minimapview = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getMappedDrawingView() - /** - * Method testGetMappedDrawingView is testing getMappedDrawingView - * @see org.jhotdraw.contrib.MiniMapView#getMappedDrawingView() - */ - // JUnitDoclet end javadoc_method getMappedDrawingView() - public void testGetMappedDrawingView() throws Exception { - // JUnitDoclet begin method getMappedDrawingView - // JUnitDoclet end method getMappedDrawingView - } - - // JUnitDoclet begin javadoc_method getSubject() - /** - * Method testGetSubject is testing getSubject - * @see org.jhotdraw.contrib.MiniMapView#getSubject() - */ - // JUnitDoclet end javadoc_method getSubject() - public void testGetSubject() throws Exception { - // JUnitDoclet begin method getSubject - // JUnitDoclet end method getSubject - } - - // JUnitDoclet begin javadoc_method getViewBowColor() - /** - * Method testGetViewBowColor is testing getViewBowColor - * @see org.jhotdraw.contrib.MiniMapView#getViewBowColor() - */ - // JUnitDoclet end javadoc_method getViewBowColor() - public void testGetViewBowColor() throws Exception { - // JUnitDoclet begin method getViewBowColor - // JUnitDoclet end method getViewBowColor - } - - // JUnitDoclet begin javadoc_method setViewBoxColor() - /** - * Method testSetViewBoxColor is testing setViewBoxColor - * @see org.jhotdraw.contrib.MiniMapView#setViewBoxColor(java.awt.Color) - */ - // JUnitDoclet end javadoc_method setViewBoxColor() - public void testSetViewBoxColor() throws Exception { - // JUnitDoclet begin method setViewBoxColor - // JUnitDoclet end method setViewBoxColor - } - - // JUnitDoclet begin javadoc_method paint() - /** - * Method testPaint is testing paint - * @see org.jhotdraw.contrib.MiniMapView#paint(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method paint() - public void testPaint() throws Exception { - // JUnitDoclet begin method paint - // JUnitDoclet end method paint - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/NestedCreationToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/NestedCreationToolTest.java deleted file mode 100644 index 420b083c3..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/NestedCreationToolTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.NestedCreationTool; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NestedCreationToolTest is generated by - * JUnitDoclet to hold the tests for NestedCreationTool. - * @see org.jhotdraw.contrib.NestedCreationTool - */ -// JUnitDoclet end javadoc_class -public class NestedCreationToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NestedCreationTool nestedcreationtool; - // JUnitDoclet end class - - /** - * Constructor NestedCreationToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NestedCreationToolTest(String name) { - // JUnitDoclet begin method NestedCreationToolTest - super(name); - // JUnitDoclet end method NestedCreationToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NestedCreationTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NestedCreationTool(getDrawingEditor(), new RectangleFigure(new Point(20, 20), new Point(90, 90))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nestedcreationtool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nestedcreationtool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.contrib.NestedCreationTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see org.jhotdraw.contrib.NestedCreationTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.contrib.NestedCreationTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method getContainerFigure() - /** - * Method testGetContainerFigure is testing getContainerFigure - * @see org.jhotdraw.contrib.NestedCreationTool#getContainerFigure() - */ - // JUnitDoclet end javadoc_method getContainerFigure() - public void testGetContainerFigure() throws Exception { - // JUnitDoclet begin method getContainerFigure - // JUnitDoclet end method getContainerFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonFigureTest.java deleted file mode 100644 index 977f81164..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonFigureTest.java +++ /dev/null @@ -1,419 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.PolygonFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolygonFigureTest is generated by - * JUnitDoclet to hold the tests for PolygonFigure. - * @see org.jhotdraw.contrib.PolygonFigure - */ -// JUnitDoclet end javadoc_class -public class PolygonFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolygonFigure polygonfigure; - // JUnitDoclet end class - - /** - * Constructor PolygonFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolygonFigureTest(String name) { - // JUnitDoclet begin method PolygonFigureTest - super(name); - // JUnitDoclet end method PolygonFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PolygonFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PolygonFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polygonfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polygonfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.contrib.PolygonFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see org.jhotdraw.contrib.PolygonFigure#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.contrib.PolygonFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.contrib.PolygonFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method getPolygon() - /** - * Method testGetPolygon is testing getPolygon - * @see org.jhotdraw.contrib.PolygonFigure#getPolygon() - */ - // JUnitDoclet end javadoc_method getPolygon() - public void testGetPolygon() throws Exception { - // JUnitDoclet begin method getPolygon - // JUnitDoclet end method getPolygon - } - - // JUnitDoclet begin javadoc_method getInternalPolygon() - /** - * Method testGetInternalPolygon is testing getInternalPolygon - * @see org.jhotdraw.contrib.PolygonFigure#getInternalPolygon() - */ - // JUnitDoclet end javadoc_method getInternalPolygon() - public void testGetInternalPolygon() throws Exception { - // JUnitDoclet begin method getInternalPolygon - // JUnitDoclet end method getInternalPolygon - } - - // JUnitDoclet begin javadoc_method center() - /** - * Method testCenter is testing center - * @see org.jhotdraw.contrib.PolygonFigure#center() - */ - // JUnitDoclet end javadoc_method center() - public void testCenter() throws Exception { - // JUnitDoclet begin method center - // JUnitDoclet end method center - } - - // JUnitDoclet begin javadoc_method points() - /** - * Method testPoints is testing points - * @see org.jhotdraw.contrib.PolygonFigure#points() - */ - // JUnitDoclet end javadoc_method points() - public void testPoints() throws Exception { - // JUnitDoclet begin method points - // JUnitDoclet end method points - } - - // JUnitDoclet begin javadoc_method pointCount() - /** - * Method testPointCount is testing pointCount - * @see org.jhotdraw.contrib.PolygonFigure#pointCount() - */ - // JUnitDoclet end javadoc_method pointCount() - public void testPointCount() throws Exception { - // JUnitDoclet begin method pointCount - // JUnitDoclet end method pointCount - } - - // JUnitDoclet begin javadoc_method basicMoveBy() - /** - * Method testBasicMoveBy is testing basicMoveBy - * @see org.jhotdraw.contrib.PolygonFigure#basicMoveBy(int, int) - */ - // JUnitDoclet end javadoc_method basicMoveBy() - public void testBasicMoveBy() throws Exception { - // JUnitDoclet begin method basicMoveBy - // JUnitDoclet end method basicMoveBy - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see org.jhotdraw.contrib.PolygonFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see org.jhotdraw.contrib.PolygonFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see org.jhotdraw.contrib.PolygonFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see org.jhotdraw.contrib.PolygonFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method addPoint() - /** - * Method testAddPoint is testing addPoint - * @see org.jhotdraw.contrib.PolygonFigure#addPoint(int, int) - */ - // JUnitDoclet end javadoc_method addPoint() - public void testAddPoint() throws Exception { - // JUnitDoclet begin method addPoint - // JUnitDoclet end method addPoint - } - - // JUnitDoclet begin javadoc_method setPointAt() - /** - * Method testSetPointAt is testing setPointAt - * @see org.jhotdraw.contrib.PolygonFigure#setPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method setPointAt() - public void testSetPointAt() throws Exception { - // JUnitDoclet begin method setPointAt - // JUnitDoclet end method setPointAt - } - - // JUnitDoclet begin javadoc_method insertPointAt() - /** - * Method testInsertPointAt is testing insertPointAt - * @see org.jhotdraw.contrib.PolygonFigure#insertPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method insertPointAt() - public void testInsertPointAt() throws Exception { - // JUnitDoclet begin method insertPointAt - // JUnitDoclet end method insertPointAt - } - - // JUnitDoclet begin javadoc_method removePointAt() - /** - * Method testRemovePointAt is testing removePointAt - * @see org.jhotdraw.contrib.PolygonFigure#removePointAt(int) - */ - // JUnitDoclet end javadoc_method removePointAt() - public void testRemovePointAt() throws Exception { - // JUnitDoclet begin method removePointAt - // JUnitDoclet end method removePointAt - } - - // JUnitDoclet begin javadoc_method scaleRotate() - /** - * Method testScaleRotate is testing scaleRotate - * @see org.jhotdraw.contrib.PolygonFigure#scaleRotate(java.awt.Point, java.awt.Polygon, java.awt.Point) - */ - // JUnitDoclet end javadoc_method scaleRotate() - public void testScaleRotate() throws Exception { - // JUnitDoclet begin method scaleRotate - // JUnitDoclet end method scaleRotate - } - - // JUnitDoclet begin javadoc_method smoothPoints() - /** - * Method testSmoothPoints is testing smoothPoints - * @see org.jhotdraw.contrib.PolygonFigure#smoothPoints() - */ - // JUnitDoclet end javadoc_method smoothPoints() - public void testSmoothPoints() throws Exception { - // JUnitDoclet begin method smoothPoints - // JUnitDoclet end method smoothPoints - } - - // JUnitDoclet begin javadoc_method splitSegment() - /** - * Method testSplitSegment is testing splitSegment - * @see org.jhotdraw.contrib.PolygonFigure#splitSegment(int, int) - */ - // JUnitDoclet end javadoc_method splitSegment() - public void testSplitSegment() throws Exception { - // JUnitDoclet begin method splitSegment - // JUnitDoclet end method splitSegment - } - - // JUnitDoclet begin javadoc_method pointAt() - /** - * Method testPointAt is testing pointAt - * @see org.jhotdraw.contrib.PolygonFigure#pointAt(int) - */ - // JUnitDoclet end javadoc_method pointAt() - public void testPointAt() throws Exception { - // JUnitDoclet begin method pointAt - // JUnitDoclet end method pointAt - } - - // JUnitDoclet begin javadoc_method outermostPoint() - /** - * Method testOutermostPoint is testing outermostPoint - * @see org.jhotdraw.contrib.PolygonFigure#outermostPoint() - */ - // JUnitDoclet end javadoc_method outermostPoint() - public void testOutermostPoint() throws Exception { - // JUnitDoclet begin method outermostPoint - // JUnitDoclet end method outermostPoint - } - - // JUnitDoclet begin javadoc_method findSegment() - /** - * Method testFindSegment is testing findSegment - * @see org.jhotdraw.contrib.PolygonFigure#findSegment(int, int) - */ - // JUnitDoclet end javadoc_method findSegment() - public void testFindSegment() throws Exception { - // JUnitDoclet begin method findSegment - // JUnitDoclet end method findSegment - } - - // JUnitDoclet begin javadoc_method chop() - /** - * Method testChop is testing chop - * @see org.jhotdraw.contrib.PolygonFigure#chop(java.awt.Point) - */ - // JUnitDoclet end javadoc_method chop() - public void testChop() throws Exception { - // JUnitDoclet begin method chop - // JUnitDoclet end method chop - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.contrib.PolygonFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.contrib.PolygonFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method locator() - /** - * Method testLocator is testing locator - * @see org.jhotdraw.contrib.PolygonFigure#locator(int) - */ - // JUnitDoclet end javadoc_method locator() - public void testLocator() throws Exception { - // JUnitDoclet begin method locator - // JUnitDoclet end method locator - } - - // JUnitDoclet begin javadoc_method bounds() - /** - * Method testBounds is testing bounds - * @see org.jhotdraw.contrib.PolygonFigure#bounds(java.awt.Polygon) - */ - // JUnitDoclet end javadoc_method bounds() - public void testBounds() throws Exception { - // JUnitDoclet begin method bounds - // JUnitDoclet end method bounds - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonHandleTest.java deleted file mode 100644 index 64f6a56a7..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonHandleTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.PolygonFigure; -import org.jhotdraw.contrib.PolygonHandle; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolygonHandleTest is generated by - * JUnitDoclet to hold the tests for PolygonHandle. - * @see org.jhotdraw.contrib.PolygonHandle - */ -// JUnitDoclet end javadoc_class -public class PolygonHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolygonHandle polygonhandle; - // JUnitDoclet end class - - /** - * Constructor PolygonHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolygonHandleTest(String name) { - // JUnitDoclet begin method PolygonHandleTest - super(name); - // JUnitDoclet end method PolygonHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PolygonHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - PolygonFigure figure = new PolygonFigure(20, 20); - figure.addPoint(30, 30); - figure.addPoint(40, 40); - return new PolygonHandle(figure, PolygonFigure.locator(2), 2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polygonhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polygonhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see org.jhotdraw.contrib.PolygonHandle#invokeStart(int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see org.jhotdraw.contrib.PolygonHandle#invokeStep(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see org.jhotdraw.contrib.PolygonHandle#invokeEnd(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see org.jhotdraw.contrib.PolygonHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonToolTest.java deleted file mode 100644 index 46bf89e38..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/PolygonToolTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.PolygonTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolygonToolTest is generated by - * JUnitDoclet to hold the tests for PolygonTool. - * @see org.jhotdraw.contrib.PolygonTool - */ -// JUnitDoclet end javadoc_class -public class PolygonToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolygonTool polygontool; - // JUnitDoclet end class - - /** - * Constructor PolygonToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolygonToolTest(String name) { - // JUnitDoclet begin method PolygonToolTest - super(name); - // JUnitDoclet end method PolygonToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PolygonTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PolygonTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polygontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polygontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.contrib.PolygonTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.contrib.PolygonTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.contrib.PolygonTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see org.jhotdraw.contrib.PolygonTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.contrib.PolygonTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.contrib.PolygonTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SVGDrawAppTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SVGDrawAppTest.java deleted file mode 100644 index 824352d78..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SVGDrawAppTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.SVGDrawApp; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SVGDrawAppTest is generated by - * JUnitDoclet to hold the tests for SVGDrawApp. - * @see org.jhotdraw.contrib.SVGDrawApp - */ -// JUnitDoclet end javadoc_class -public class SVGDrawAppTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SVGDrawApp svgdrawapp; - // JUnitDoclet end class - - /** - * Constructor SVGDrawAppTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SVGDrawAppTest(String name) { - // JUnitDoclet begin method SVGDrawAppTest - super(name); - // JUnitDoclet end method SVGDrawAppTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SVGDrawApp createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SVGDrawApp(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - svgdrawapp = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - svgdrawapp = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see org.jhotdraw.contrib.SVGDrawApp#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method createStorageFormatManager() - /** - * Method testCreateStorageFormatManager is testing createStorageFormatManager - * @see org.jhotdraw.contrib.SVGDrawApp#createStorageFormatManager() - */ - // JUnitDoclet end javadoc_method createStorageFormatManager() - public void testCreateStorageFormatManager() throws Exception { - // JUnitDoclet begin method createStorageFormatManager - // JUnitDoclet end method createStorageFormatManager - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SVGStorageFormatTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SVGStorageFormatTest.java deleted file mode 100644 index 0f3b9dba8..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SVGStorageFormatTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.SVGStorageFormat; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SVGStorageFormatTest is generated by - * JUnitDoclet to hold the tests for SVGStorageFormat. - * @see org.jhotdraw.contrib.SVGStorageFormat - */ -// JUnitDoclet end javadoc_class -public class SVGStorageFormatTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SVGStorageFormat svgstorageformat; - // JUnitDoclet end class - - /** - * Constructor SVGStorageFormatTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SVGStorageFormatTest(String name) { - // JUnitDoclet begin method SVGStorageFormatTest - super(name); - // JUnitDoclet end method SVGStorageFormatTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SVGStorageFormat createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SVGStorageFormat(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - svgstorageformat = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - svgstorageformat = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createFileDescription() - /** - * Method testCreateFileDescription is testing createFileDescription - * @see org.jhotdraw.contrib.SVGStorageFormat#createFileDescription() - */ - // JUnitDoclet end javadoc_method createFileDescription() - public void testCreateFileDescription() throws Exception { - // JUnitDoclet begin method createFileDescription - // JUnitDoclet end method createFileDescription - } - - // JUnitDoclet begin javadoc_method store() - /** - * Method testStore is testing store - * @see org.jhotdraw.contrib.SVGStorageFormat#store(java.lang.String, org.jhotdraw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method store() - public void testStore() throws Exception { - // JUnitDoclet begin method store - // JUnitDoclet end method store - } - - // JUnitDoclet begin javadoc_method restore() - /** - * Method testRestore is testing restore - * @see org.jhotdraw.contrib.SVGStorageFormat#restore(java.lang.String) - */ - // JUnitDoclet end javadoc_method restore() - public void testRestore() throws Exception { - // JUnitDoclet begin method restore - // JUnitDoclet end method restore - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SimpleLayouterTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SimpleLayouterTest.java deleted file mode 100644 index 3e7135382..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SimpleLayouterTest.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import java.awt.Point; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import org.jhotdraw.contrib.GraphicalCompositeFigure; -import org.jhotdraw.contrib.Layoutable; -import org.jhotdraw.contrib.SimpleLayouter; -import org.jhotdraw.figures.RectangleFigure; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SimpleLayouterTest is generated by - * JUnitDoclet to hold the tests for SimpleLayouter. - * @see org.jhotdraw.contrib.SimpleLayouter - */ -// JUnitDoclet end javadoc_class -public class SimpleLayouterTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SimpleLayouter simplelayouter; - // JUnitDoclet end class - - /** - * Constructor SimpleLayouterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SimpleLayouterTest(String name) { - // JUnitDoclet begin method SimpleLayouterTest - super(name); - // JUnitDoclet end method SimpleLayouterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SimpleLayouter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Layoutable fig = new GraphicalCompositeFigure(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - return new SimpleLayouter(fig); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - simplelayouter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - simplelayouter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setLayoutable() - /** - * Method testSetGetLayoutable is testing setLayoutable - * and getLayoutable together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.SimpleLayouter#setLayoutable(org.jhotdraw.contrib.Layoutable) - * @see org.jhotdraw.contrib.SimpleLayouter#getLayoutable() - */ - // JUnitDoclet end javadoc_method setLayoutable() - public void testSetGetLayoutable() throws Exception { - // JUnitDoclet begin method setLayoutable getLayoutable - org.jhotdraw.contrib.Layoutable[] tests = { new GraphicalCompositeFigure(), null }; - - for (int i = 0; i < tests.length; i++) { - simplelayouter.setLayoutable(tests[i]); - assertEquals(tests[i], simplelayouter.getLayoutable()); - } - // JUnitDoclet end method setLayoutable getLayoutable - } - - // JUnitDoclet begin javadoc_method setInsets() - /** - * Method testSetGetInsets is testing setInsets - * and getInsets together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.SimpleLayouter#setInsets(java.awt.Insets) - * @see org.jhotdraw.contrib.SimpleLayouter#getInsets() - */ - // JUnitDoclet end javadoc_method setInsets() - public void testSetGetInsets() throws Exception { - // JUnitDoclet begin method setInsets getInsets - java.awt.Insets[] tests = { new java.awt.Insets(5, 5, 5, 5), null }; - - for (int i = 0; i < tests.length; i++) { - simplelayouter.setInsets(tests[i]); - assertEquals(tests[i], simplelayouter.getInsets()); - } - // JUnitDoclet end method setInsets getInsets - } - - // JUnitDoclet begin javadoc_method create() - /** - * Method testCreate is testing create - * @see org.jhotdraw.contrib.SimpleLayouter#create(org.jhotdraw.contrib.Layoutable) - */ - // JUnitDoclet end javadoc_method create() - public void testCreate() throws Exception { - // JUnitDoclet begin method create - // JUnitDoclet end method create - } - - // JUnitDoclet begin javadoc_method calculateLayout() - /** - * Method testCalculateLayout is testing calculateLayout - * @see org.jhotdraw.contrib.SimpleLayouter#calculateLayout(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method calculateLayout() - public void testCalculateLayout() throws Exception { - // JUnitDoclet begin method calculateLayout - // JUnitDoclet end method calculateLayout - } - - // JUnitDoclet begin javadoc_method layout() - /** - * Method testLayout is testing layout - * @see org.jhotdraw.contrib.SimpleLayouter#layout(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method layout() - public void testLayout() throws Exception { - // JUnitDoclet begin method layout - // JUnitDoclet end method layout - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.contrib.SimpleLayouter#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.contrib.SimpleLayouter#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SplitConnectionToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SplitConnectionToolTest.java deleted file mode 100644 index 22425aa41..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/SplitConnectionToolTest.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.SplitConnectionTool; -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.framework.ConnectionFigure; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SplitConnectionToolTest is generated by - * JUnitDoclet to hold the tests for SplitConnectionTool. - * @see org.jhotdraw.contrib.SplitConnectionTool - */ -// JUnitDoclet end javadoc_class -public class SplitConnectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SplitConnectionTool splitconnectiontool; - // JUnitDoclet end class - - /** - * Constructor SplitConnectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SplitConnectionToolTest(String name) { - // JUnitDoclet begin method SplitConnectionToolTest - super(name); - // JUnitDoclet end method SplitConnectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SplitConnectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - ConnectionFigure lineConnection = new LineConnection(); - return new SplitConnectionTool(getDrawingEditor(), lineConnection); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - splitconnectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - splitconnectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.contrib.SplitConnectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.contrib.SplitConnectionTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see org.jhotdraw.contrib.SplitConnectionTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.contrib.SplitConnectionTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.contrib.SplitConnectionTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/StandardLayouterTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/StandardLayouterTest.java deleted file mode 100644 index b90ce7a41..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/StandardLayouterTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.StandardLayouter; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardLayouterTest is generated by - * JUnitDoclet to hold the tests for StandardLayouter. - * @see org.jhotdraw.contrib.StandardLayouter - */ -// JUnitDoclet end javadoc_class -public class StandardLayouterTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardLayouter standardlayouter; - // JUnitDoclet end class - - /** - * Constructor StandardLayouterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardLayouterTest(String name) { - // JUnitDoclet begin method StandardLayouterTest - super(name); - // JUnitDoclet end method StandardLayouterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public StandardLayouter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new StandardLayouter(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standardlayouter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standardlayouter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method create() - /** - * Method testCreate is testing create - * @see org.jhotdraw.contrib.StandardLayouter#create(org.jhotdraw.contrib.Layoutable) - */ - // JUnitDoclet end javadoc_method create() - public void testCreate() throws Exception { - // JUnitDoclet begin method create - // JUnitDoclet end method create - } - - // JUnitDoclet begin javadoc_method calculateLayout() - /** - * Method testCalculateLayout is testing calculateLayout - * @see org.jhotdraw.contrib.StandardLayouter#calculateLayout(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method calculateLayout() - public void testCalculateLayout() throws Exception { - // JUnitDoclet begin method calculateLayout - // JUnitDoclet end method calculateLayout - } - - // JUnitDoclet begin javadoc_method layout() - /** - * Method testLayout is testing layout - * @see org.jhotdraw.contrib.StandardLayouter#layout(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method layout() - public void testLayout() throws Exception { - // JUnitDoclet begin method layout - // JUnitDoclet end method layout - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TextAreaFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TextAreaFigureTest.java deleted file mode 100644 index 588efa4c6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TextAreaFigureTest.java +++ /dev/null @@ -1,508 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import java.awt.Font; - -import org.jhotdraw.contrib.TextAreaFigure; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase TextAreaFigureTest is generated by - * JUnitDoclet to hold the tests for TextAreaFigure. - * @see org.jhotdraw.contrib.TextAreaFigure - */ -// JUnitDoclet end javadoc_class -public class TextAreaFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TextAreaFigure textareafigure; - // JUnitDoclet end class - - /** - * Constructor TextAreaFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TextAreaFigureTest(String name) { - // JUnitDoclet begin method TextAreaFigureTest - super(name); - // JUnitDoclet end method TextAreaFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public TextAreaFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new TextAreaFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - textareafigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - textareafigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setText() - /** - * Method testSetGetText is testing setText - * and getText together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.TextAreaFigure#setText(java.lang.String) - * @see org.jhotdraw.contrib.TextAreaFigure#getText() - */ - // JUnitDoclet end javadoc_method setText() - public void testSetGetText() throws Exception { - // JUnitDoclet begin method setText getText - java.lang.String[] tests = { "", " ", "a", "A", "?", "?", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setText(tests[i]); - assertEquals(tests[i], textareafigure.getText()); - } - // JUnitDoclet end method setText getText - } - - // JUnitDoclet begin javadoc_method textDisplayBox() - /** - * Method testTextDisplayBox is testing textDisplayBox - * @see org.jhotdraw.contrib.TextAreaFigure#textDisplayBox() - */ - // JUnitDoclet end javadoc_method textDisplayBox() - public void testTextDisplayBox() throws Exception { - // JUnitDoclet begin method textDisplayBox - // JUnitDoclet end method textDisplayBox - } - - // JUnitDoclet begin javadoc_method createFont() - /** - * Method testCreateFont is testing createFont - * @see org.jhotdraw.contrib.TextAreaFigure#createFont() - */ - // JUnitDoclet end javadoc_method createFont() - public void testCreateFont() throws Exception { - // JUnitDoclet begin method createFont - // JUnitDoclet end method createFont - } - - // JUnitDoclet begin javadoc_method setReadOnly() - /** - * Method testSetIsReadOnly is testing setReadOnly - * and isReadOnly together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.TextAreaFigure#setReadOnly(boolean) - * @see org.jhotdraw.contrib.TextAreaFigure#isReadOnly() - */ - // JUnitDoclet end javadoc_method setReadOnly() - public void testSetIsReadOnly() throws Exception { - // JUnitDoclet begin method setReadOnly isReadOnly - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setReadOnly(tests[i]); - assertEquals(tests[i], textareafigure.isReadOnly()); - } - // JUnitDoclet end method setReadOnly isReadOnly - } - - // JUnitDoclet begin javadoc_method acceptsTyping() - /** - * Method testAcceptsTyping is testing acceptsTyping - * @see org.jhotdraw.contrib.TextAreaFigure#acceptsTyping() - */ - // JUnitDoclet end javadoc_method acceptsTyping() - public void testAcceptsTyping() throws Exception { - // JUnitDoclet begin method acceptsTyping - // JUnitDoclet end method acceptsTyping - } - - // JUnitDoclet begin javadoc_method isTextDirty() - /** - * Method testIsTextDirty is testing isTextDirty - * @see org.jhotdraw.contrib.TextAreaFigure#isTextDirty() - */ - // JUnitDoclet end javadoc_method isTextDirty() - public void testIsTextDirty() throws Exception { - // JUnitDoclet begin method isTextDirty - // JUnitDoclet end method isTextDirty - } - - // JUnitDoclet begin javadoc_method setSizeDirty() - /** - * Method testSetIsSizeDirty is testing setSizeDirty - * and isSizeDirty together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.TextAreaFigure#setSizeDirty(boolean) - * @see org.jhotdraw.contrib.TextAreaFigure#isSizeDirty() - */ - // JUnitDoclet end javadoc_method setSizeDirty() - public void testSetIsSizeDirty() throws Exception { - // JUnitDoclet begin method setSizeDirty isSizeDirty - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setSizeDirty(tests[i]); - assertEquals(tests[i], textareafigure.isSizeDirty()); - } - // JUnitDoclet end method setSizeDirty isSizeDirty - } - - // JUnitDoclet begin javadoc_method setFont() - /** - * Method testSetGetFont is testing setFont - * and getFont together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.TextAreaFigure#setFont(java.awt.Font) - * @see org.jhotdraw.contrib.TextAreaFigure#getFont() - */ - // JUnitDoclet end javadoc_method setFont() - public void testSetGetFont() throws Exception { - // JUnitDoclet begin method setFont getFont - Font[] tests = { new Font("Helvetica", Font.PLAIN, 12)}; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setFont(tests[i]); - assertEquals(tests[i], textareafigure.getFont()); - } - // JUnitDoclet end method setFont getFont - } - - // JUnitDoclet begin method setNullFont() - /** - * Test a null argument to setFont. Expect an IllegalArgumentException - * - * @see org.jhotdraw.contrib.TextAreaFigure#setFont(java.awt.Font) - */ - public void testSetNullFont() throws Exception { - Font original = textareafigure.getFont(); - - try { - textareafigure.setFont(null); - fail("IllegalArgumentException expected"); - } - catch (IllegalArgumentException ok) { - assertEquals("setFont(null) altered property value", original, textareafigure.getFont()); - } - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method overlayColumns() - /** - * Method testOverlayColumns is testing overlayColumns - * @see org.jhotdraw.contrib.TextAreaFigure#overlayColumns() - */ - // JUnitDoclet end javadoc_method overlayColumns() - public void testOverlayColumns() throws Exception { - // JUnitDoclet begin method overlayColumns - // JUnitDoclet end method overlayColumns - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.contrib.TextAreaFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.contrib.TextAreaFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.contrib.TextAreaFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method moveBy() - /** - * Method testMoveBy is testing moveBy - * @see org.jhotdraw.contrib.TextAreaFigure#moveBy(int, int) - */ - // JUnitDoclet end javadoc_method moveBy() - public void testMoveBy() throws Exception { - // JUnitDoclet begin method moveBy - // JUnitDoclet end method moveBy - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see org.jhotdraw.contrib.TextAreaFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.contrib.TextAreaFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see org.jhotdraw.contrib.TextAreaFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see org.jhotdraw.contrib.TextAreaFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see org.jhotdraw.contrib.TextAreaFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.contrib.TextAreaFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.contrib.TextAreaFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method connect() - /** - * Method testConnect is testing connect - * @see org.jhotdraw.contrib.TextAreaFigure#connect(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method connect() - public void testConnect() throws Exception { - // JUnitDoclet begin method connect - // JUnitDoclet end method connect - } - - // JUnitDoclet begin javadoc_method disconnect() - /** - * Method testDisconnect is testing disconnect - * @see org.jhotdraw.contrib.TextAreaFigure#disconnect(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method disconnect() - public void testDisconnect() throws Exception { - // JUnitDoclet begin method disconnect - // JUnitDoclet end method disconnect - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see org.jhotdraw.contrib.TextAreaFigure#figureInvalidated(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see org.jhotdraw.contrib.TextAreaFigure#figureChanged(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see org.jhotdraw.contrib.TextAreaFigure#figureRemoved(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see org.jhotdraw.contrib.TextAreaFigure#figureRequestRemove(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see org.jhotdraw.contrib.TextAreaFigure#figureRequestUpdate(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method getTextColor() - /** - * Method testGetTextColor is testing getTextColor - * @see org.jhotdraw.contrib.TextAreaFigure#getTextColor() - */ - // JUnitDoclet end javadoc_method getTextColor() - public void testGetTextColor() throws Exception { - // JUnitDoclet begin method getTextColor - // JUnitDoclet end method getTextColor - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see org.jhotdraw.contrib.TextAreaFigure#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method setFontDirty() - /** - * Method testSetIsFontDirty is testing setFontDirty - * and isFontDirty together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.contrib.TextAreaFigure#setFontDirty(boolean) - * @see org.jhotdraw.contrib.TextAreaFigure#isFontDirty() - */ - // JUnitDoclet end javadoc_method setFontDirty() - public void testSetIsFontDirty() throws Exception { - // JUnitDoclet begin method setFontDirty isFontDirty - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - textareafigure.setFontDirty(tests[i]); - assertEquals(tests[i], textareafigure.isFontDirty()); - } - // JUnitDoclet end method setFontDirty isFontDirty - } - - // JUnitDoclet begin javadoc_method getRepresentingFigure() - /** - * Method testGetRepresentingFigure is testing getRepresentingFigure - * @see org.jhotdraw.contrib.TextAreaFigure#getRepresentingFigure() - */ - // JUnitDoclet end javadoc_method getRepresentingFigure() - public void testGetRepresentingFigure() throws Exception { - // JUnitDoclet begin method getRepresentingFigure - // JUnitDoclet end method getRepresentingFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TextAreaToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TextAreaToolTest.java deleted file mode 100644 index 5bb963191..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TextAreaToolTest.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.TextAreaTool; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase TextAreaToolTest is generated by - * JUnitDoclet to hold the tests for TextAreaTool. - * @see org.jhotdraw.contrib.TextAreaTool - */ -// JUnitDoclet end javadoc_class -public class TextAreaToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TextAreaTool textareatool; - // JUnitDoclet end class - - /** - * Constructor TextAreaToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TextAreaToolTest(String name) { - // JUnitDoclet begin method TextAreaToolTest - super(name); - // JUnitDoclet end method TextAreaToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public TextAreaTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new TextAreaTool(getDrawingEditor(), new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - textareatool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - textareatool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.contrib.TextAreaTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.contrib.TextAreaTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.contrib.TextAreaTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.contrib.TextAreaTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.contrib.TextAreaTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method isActivated() - /** - * Method testIsActivated is testing isActivated - * @see org.jhotdraw.contrib.TextAreaTool#isActivated() - */ - // JUnitDoclet end javadoc_method isActivated() - public void testIsActivated() throws Exception { - // JUnitDoclet begin method isActivated - // JUnitDoclet end method isActivated - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TriangleFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TriangleFigureTest.java deleted file mode 100644 index 58d7a2921..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/TriangleFigureTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -import org.jhotdraw.contrib.TriangleFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase TriangleFigureTest is generated by - * JUnitDoclet to hold the tests for TriangleFigure. - * @see org.jhotdraw.contrib.TriangleFigure - */ -// JUnitDoclet end javadoc_class -public class TriangleFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TriangleFigure trianglefigure; - // JUnitDoclet end class - - /** - * Constructor TriangleFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TriangleFigureTest(String name) { - // JUnitDoclet begin method TriangleFigureTest - super(name); - // JUnitDoclet end method TriangleFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public TriangleFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new TriangleFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - trianglefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - trianglefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.contrib.TriangleFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method rotate() - /** - * Method testRotate is testing rotate - * @see org.jhotdraw.contrib.TriangleFigure#rotate(double) - */ - // JUnitDoclet end javadoc_method rotate() - public void testRotate() throws Exception { - // JUnitDoclet begin method rotate - // JUnitDoclet end method rotate - } - - // JUnitDoclet begin javadoc_method getPolygon() - /** - * Method testGetPolygon is testing getPolygon - * @see org.jhotdraw.contrib.TriangleFigure#getPolygon() - */ - // JUnitDoclet end javadoc_method getPolygon() - public void testGetPolygon() throws Exception { - // JUnitDoclet begin method getPolygon - // JUnitDoclet end method getPolygon - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.contrib.TriangleFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see org.jhotdraw.contrib.TriangleFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see org.jhotdraw.contrib.TriangleFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method center() - /** - * Method testCenter is testing center - * @see org.jhotdraw.contrib.TriangleFigure#center() - */ - // JUnitDoclet end javadoc_method center() - public void testCenter() throws Exception { - // JUnitDoclet begin method center - // JUnitDoclet end method center - } - - // JUnitDoclet begin javadoc_method chop() - /** - * Method testChop is testing chop - * @see org.jhotdraw.contrib.TriangleFigure#chop(java.awt.Point) - */ - // JUnitDoclet end javadoc_method chop() - public void testChop() throws Exception { - // JUnitDoclet begin method chop - // JUnitDoclet end method chop - } - - // JUnitDoclet begin javadoc_method clone() - /** - * Method testClone is testing clone - * @see org.jhotdraw.contrib.TriangleFigure#clone() - */ - // JUnitDoclet end javadoc_method clone() - public void testClone() throws Exception { - // JUnitDoclet begin method clone - // JUnitDoclet end method clone - } - - // JUnitDoclet begin javadoc_method getRotationAngle() - /** - * Method testGetRotationAngle is testing getRotationAngle - * @see org.jhotdraw.contrib.TriangleFigure#getRotationAngle() - */ - // JUnitDoclet end javadoc_method getRotationAngle() - public void testGetRotationAngle() throws Exception { - // JUnitDoclet begin method getRotationAngle - // JUnitDoclet end method getRotationAngle - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.contrib.TriangleFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.contrib.TriangleFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/WindowMenuTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/WindowMenuTest.java deleted file mode 100644 index d6d3490e4..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/contrib/WindowMenuTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.contrib; - -// JUnitDoclet begin import -import org.jhotdraw.application.DrawApplication; -import org.jhotdraw.contrib.MDIDesktopPane; -import org.jhotdraw.contrib.WindowMenu; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase WindowMenuTest is generated by - * JUnitDoclet to hold the tests for WindowMenu. - * @see org.jhotdraw.contrib.WindowMenu - */ -// JUnitDoclet end javadoc_class -public class WindowMenuTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private WindowMenu windowmenu; - // JUnitDoclet end class - - /** - * Constructor WindowMenuTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public WindowMenuTest(String name) { - // JUnitDoclet begin method WindowMenuTest - super(name); - // JUnitDoclet end method WindowMenuTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public WindowMenu createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - MDIDesktopPane desktop = (MDIDesktopPane) ((DrawApplication)getDrawingEditor()).getDesktop(); - return new WindowMenu("TestWindowMenu", desktop, getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - windowmenu = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - windowmenu = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/AllTests.java deleted file mode 100644 index 056d1ab9c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/AllTests.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.figures"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(ArrowTipTest.class)); - suite.addTest(new TestSuite(BorderDecoratorTest.class)); - suite.addTest(new TestSuite(BorderToolTest.class)); - suite.addTest(new TestSuite(ChopEllipseConnectorTest.class)); - suite.addTest(new TestSuite(ConnectedTextToolTest.class)); - suite.addTest(new TestSuite(ElbowConnectionTest.class)); - suite.addTest(new TestSuite(ElbowHandleTest.class)); - suite.addTest(new TestSuite(EllipseFigureTest.class)); - suite.addTest(new TestSuite(FigureAttributesTest.class)); - suite.addTest(new TestSuite(FontSizeHandleTest.class)); - suite.addTest(new TestSuite(GroupCommandTest.class)); - suite.addTest(new TestSuite(GroupFigureTest.class)); - suite.addTest(new TestSuite(ImageFigureTest.class)); - suite.addTest(new TestSuite(InsertImageCommandTest.class)); - suite.addTest(new TestSuite(LineConnectionTest.class)); - suite.addTest(new TestSuite(LineFigureTest.class)); - suite.addTest(new TestSuite(NullConnectorTest.class)); - suite.addTest(new TestSuite(NullFigureTest.class)); - suite.addTest(new TestSuite(NumberTextFigureTest.class)); - suite.addTest(new TestSuite(PolyLineConnectorTest.class)); - suite.addTest(new TestSuite(PolyLineFigureTest.class)); - suite.addTest(new TestSuite(PolyLineHandleTest.class)); - suite.addTest(new TestSuite(RectangleFigureTest.class)); - suite.addTest(new TestSuite(RoundRectangleFigureTest.class)); - suite.addTest(new TestSuite(ScribbleToolTest.class)); - suite.addTest(new TestSuite(ShortestDistanceConnectorTest.class)); - suite.addTest(new TestSuite(TextFigureTest.class)); - suite.addTest(new TestSuite(TextToolTest.class)); - suite.addTest(new TestSuite(UngroupCommandTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ArrowTipTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ArrowTipTest.java deleted file mode 100644 index 4a3c81a42..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ArrowTipTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.ArrowTip; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase ArrowTipTest is generated by - * JUnitDoclet to hold the tests for ArrowTip. - * @see org.jhotdraw.figures.ArrowTip - */ -// JUnitDoclet end javadoc_class -public class ArrowTipTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ArrowTip arrowtip; - // JUnitDoclet end class - - /** - * Constructor ArrowTipTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ArrowTipTest(String name) { - // JUnitDoclet begin method ArrowTipTest - super(name); - // JUnitDoclet end method ArrowTipTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ArrowTip createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ArrowTip(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - arrowtip = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - arrowtip = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method outline() - /** - * Method testOutline is testing outline - * @see org.jhotdraw.figures.ArrowTip#outline(int, int, int, int) - */ - // JUnitDoclet end javadoc_method outline() - public void testOutline() throws Exception { - // JUnitDoclet begin method outline - // JUnitDoclet end method outline - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.figures.ArrowTip#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.figures.ArrowTip#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/BorderDecoratorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/BorderDecoratorTest.java deleted file mode 100644 index dd2b339b1..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/BorderDecoratorTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import java.awt.Point; - -import org.jhotdraw.figures.BorderDecorator; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BorderDecoratorTest is generated by - * JUnitDoclet to hold the tests for BorderDecorator. - * @see org.jhotdraw.figures.BorderDecorator - */ -// JUnitDoclet end javadoc_class -public class BorderDecoratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BorderDecorator borderdecorator; - // JUnitDoclet end class - - /** - * Constructor BorderDecoratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BorderDecoratorTest(String name) { - // JUnitDoclet begin method BorderDecoratorTest - super(name); - // JUnitDoclet end method BorderDecoratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public BorderDecorator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new BorderDecorator(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - borderdecorator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - borderdecorator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setBorderOffset() - /** - * Method testSetGetBorderOffset is testing setBorderOffset - * and getBorderOffset together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.figures.BorderDecorator#setBorderOffset(java.awt.Point) - * @see org.jhotdraw.figures.BorderDecorator#getBorderOffset() - */ - // JUnitDoclet end javadoc_method setBorderOffset() - public void testSetGetBorderOffset() throws Exception { - // JUnitDoclet begin method setBorderOffset getBorderOffset - Point[] tests = { new java.awt.Point()}; - - for (int i = 0; i < tests.length; i++) { - borderdecorator.setBorderOffset(tests[i]); - assertEquals(tests[i], borderdecorator.getBorderOffset()); - } - // JUnitDoclet end method setBorderOffset getBorderOffset - } - - // JUnitDoclet begin method setNullBorderOffset() - /** - * Test a null argument to setBorderOffset. Expect an Point(0, 0) to come back - * - * @see org.jhotdraw.figures.BorderDecorator#setBorderOffset(java.awt.Point) - */ - public void setNullBorderOffset() throws Exception { - Point original = borderdecorator.getBorderOffset(); - - borderdecorator.setBorderOffset(null); - assertEquals(new Point(0, 0), borderdecorator.getBorderOffset()); - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.figures.BorderDecorator#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.figures.BorderDecorator#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see org.jhotdraw.figures.BorderDecorator#figureInvalidated(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see org.jhotdraw.figures.BorderDecorator#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/BorderToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/BorderToolTest.java deleted file mode 100644 index 7b50c0255..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/BorderToolTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -// JUnitDoclet begin import -import org.jhotdraw.figures.BorderTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BorderToolTest is generated by - * JUnitDoclet to hold the tests for BorderTool. - * @see org.jhotdraw.figures.BorderTool - */ -// JUnitDoclet end javadoc_class -public class BorderToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BorderTool bordertool; - // JUnitDoclet end class - - /** - * Constructor BorderToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BorderToolTest(String name) { - // JUnitDoclet begin method BorderToolTest - super(name); - // JUnitDoclet end method BorderToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public BorderTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new BorderTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bordertool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bordertool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.figures.BorderTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method action() - /** - * Method testAction is testing action - * @see org.jhotdraw.figures.BorderTool#action(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method action() - public void testAction() throws Exception { - // JUnitDoclet begin method action - // JUnitDoclet end method action - } - - // JUnitDoclet begin javadoc_method reverseAction() - /** - * Method testReverseAction is testing reverseAction - * @see org.jhotdraw.figures.BorderTool#reverseAction(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method reverseAction() - public void testReverseAction() throws Exception { - // JUnitDoclet begin method reverseAction - // JUnitDoclet end method reverseAction - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ChopEllipseConnectorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ChopEllipseConnectorTest.java deleted file mode 100644 index 78a0c5888..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ChopEllipseConnectorTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.ChopEllipseConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChopEllipseConnectorTest is generated by - * JUnitDoclet to hold the tests for ChopEllipseConnector. - * @see org.jhotdraw.figures.ChopEllipseConnector - */ -// JUnitDoclet end javadoc_class -public class ChopEllipseConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChopEllipseConnector chopellipseconnector; - // JUnitDoclet end class - - /** - * Constructor ChopEllipseConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChopEllipseConnectorTest(String name) { - // JUnitDoclet begin method ChopEllipseConnectorTest - super(name); - // JUnitDoclet end method ChopEllipseConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ChopEllipseConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ChopEllipseConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - chopellipseconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - chopellipseconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ConnectedTextToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ConnectedTextToolTest.java deleted file mode 100644 index 58ffc0f07..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ConnectedTextToolTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.ConnectedTextTool; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ConnectedTextToolTest is generated by - * JUnitDoclet to hold the tests for ConnectedTextTool. - * @see org.jhotdraw.figures.ConnectedTextTool - */ -// JUnitDoclet end javadoc_class -public class ConnectedTextToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ConnectedTextTool connectedtexttool; - // JUnitDoclet end class - - /** - * Constructor ConnectedTextToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ConnectedTextToolTest(String name) { - // JUnitDoclet begin method ConnectedTextToolTest - super(name); - // JUnitDoclet end method ConnectedTextToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ConnectedTextTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ConnectedTextTool(getDrawingEditor(), new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - connectedtexttool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - connectedtexttool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.figures.ConnectedTextTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method getConnectedFigure() - /** - * Method testGetConnectedFigure is testing getConnectedFigure - * @see org.jhotdraw.figures.ConnectedTextTool#getConnectedFigure() - */ - // JUnitDoclet end javadoc_method getConnectedFigure() - public void testGetConnectedFigure() throws Exception { - // JUnitDoclet begin method getConnectedFigure - // JUnitDoclet end method getConnectedFigure - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.figures.ConnectedTextTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ElbowConnectionTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ElbowConnectionTest.java deleted file mode 100644 index a1a3e00ca..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ElbowConnectionTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.ElbowConnection; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ElbowConnectionTest is generated by - * JUnitDoclet to hold the tests for ElbowConnection. - * @see org.jhotdraw.figures.ElbowConnection - */ -// JUnitDoclet end javadoc_class -public class ElbowConnectionTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ElbowConnection elbowconnection; - // JUnitDoclet end class - - /** - * Constructor ElbowConnectionTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ElbowConnectionTest(String name) { - // JUnitDoclet begin method ElbowConnectionTest - super(name); - // JUnitDoclet end method ElbowConnectionTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ElbowConnection createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ElbowConnection(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - elbowconnection = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - elbowconnection = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method updateConnection() - /** - * Method testUpdateConnection is testing updateConnection - * @see org.jhotdraw.figures.ElbowConnection#updateConnection() - */ - // JUnitDoclet end javadoc_method updateConnection() - public void testUpdateConnection() throws Exception { - // JUnitDoclet begin method updateConnection - // JUnitDoclet end method updateConnection - } - - // JUnitDoclet begin javadoc_method layoutConnection() - /** - * Method testLayoutConnection is testing layoutConnection - * @see org.jhotdraw.figures.ElbowConnection#layoutConnection() - */ - // JUnitDoclet end javadoc_method layoutConnection() - public void testLayoutConnection() throws Exception { - // JUnitDoclet begin method layoutConnection - // JUnitDoclet end method layoutConnection - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.ElbowConnection#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method connectedTextLocator() - /** - * Method testConnectedTextLocator is testing connectedTextLocator - * @see org.jhotdraw.figures.ElbowConnection#connectedTextLocator(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method connectedTextLocator() - public void testConnectedTextLocator() throws Exception { - // JUnitDoclet begin method connectedTextLocator - // JUnitDoclet end method connectedTextLocator - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ElbowHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ElbowHandleTest.java deleted file mode 100644 index 3e989e5ff..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ElbowHandleTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -// JUnitDoclet begin import -import org.jhotdraw.figures.ElbowHandle; -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ElbowHandleTest is generated by - * JUnitDoclet to hold the tests for ElbowHandle. - * @see org.jhotdraw.figures.ElbowHandle - */ -// JUnitDoclet end javadoc_class -public class ElbowHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ElbowHandle elbowhandle; - // JUnitDoclet end class - - /** - * Constructor ElbowHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ElbowHandleTest(String name) { - // JUnitDoclet begin method ElbowHandleTest - super(name); - // JUnitDoclet end method ElbowHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ElbowHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - LineConnection lineConn = new LineConnection(); - //lineConn.connectStart(); - //lineConn.connectEnd(); - return new ElbowHandle(lineConn, 1); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - elbowhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - elbowhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see org.jhotdraw.figures.ElbowHandle#invokeStart(int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see org.jhotdraw.figures.ElbowHandle#invokeStep(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see org.jhotdraw.figures.ElbowHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.figures.ElbowHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/EllipseFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/EllipseFigureTest.java deleted file mode 100644 index 0295a074a..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/EllipseFigureTest.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.EllipseFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase EllipseFigureTest is generated by - * JUnitDoclet to hold the tests for EllipseFigure. - * @see org.jhotdraw.figures.EllipseFigure - */ -// JUnitDoclet end javadoc_class -public class EllipseFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private EllipseFigure ellipsefigure; - // JUnitDoclet end class - - /** - * Constructor EllipseFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public EllipseFigureTest(String name) { - // JUnitDoclet begin method EllipseFigureTest - super(name); - // JUnitDoclet end method EllipseFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public EllipseFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new EllipseFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - ellipsefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - ellipsefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.EllipseFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.figures.EllipseFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.figures.EllipseFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see org.jhotdraw.figures.EllipseFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see org.jhotdraw.figures.EllipseFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see org.jhotdraw.figures.EllipseFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see org.jhotdraw.figures.EllipseFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.figures.EllipseFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.figures.EllipseFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/FigureAttributesTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/FigureAttributesTest.java deleted file mode 100644 index e46ba0fbb..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/FigureAttributesTest.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.FigureAttributes; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureAttributesTest is generated by - * JUnitDoclet to hold the tests for FigureAttributes. - * @see org.jhotdraw.figures.FigureAttributes - */ -// JUnitDoclet end javadoc_class -public class FigureAttributesTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureAttributes figureattributes; - // JUnitDoclet end class - - /** - * Constructor FigureAttributesTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureAttributesTest(String name) { - // JUnitDoclet begin method FigureAttributesTest - super(name); - // JUnitDoclet end method FigureAttributesTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FigureAttributes createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new FigureAttributes(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figureattributes = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figureattributes = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method get() - /** - * Method testGet is testing get - * @see org.jhotdraw.figures.FigureAttributes#get(org.jhotdraw.framework.FigureAttributeConstant) - */ - // JUnitDoclet end javadoc_method get() - public void testGet() throws Exception { - // JUnitDoclet begin method get - // JUnitDoclet end method get - } - - // JUnitDoclet begin javadoc_method set() - /** - * Method testSet is testing set - * @see org.jhotdraw.figures.FigureAttributes#set(org.jhotdraw.framework.FigureAttributeConstant, java.lang.Object) - */ - // JUnitDoclet end javadoc_method set() - public void testSet() throws Exception { - // JUnitDoclet begin method set - // JUnitDoclet end method set - } - - // JUnitDoclet begin javadoc_method hasDefined() - /** - * Method testHasDefined is testing hasDefined - * @see org.jhotdraw.figures.FigureAttributes#hasDefined(org.jhotdraw.framework.FigureAttributeConstant) - */ - // JUnitDoclet end javadoc_method hasDefined() - public void testHasDefined() throws Exception { - // JUnitDoclet begin method hasDefined - // JUnitDoclet end method hasDefined - } - - // JUnitDoclet begin javadoc_method clone() - /** - * Method testClone is testing clone - * @see org.jhotdraw.figures.FigureAttributes#clone() - */ - // JUnitDoclet end javadoc_method clone() - public void testClone() throws Exception { - // JUnitDoclet begin method clone - // JUnitDoclet end method clone - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.figures.FigureAttributes#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.figures.FigureAttributes#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method writeColor() - /** - * Method testWriteColor is testing writeColor - * @see org.jhotdraw.figures.FigureAttributes#writeColor(org.jhotdraw.util.StorableOutput, java.lang.String, java.awt.Color) - */ - // JUnitDoclet end javadoc_method writeColor() - public void testWriteColor() throws Exception { - // JUnitDoclet begin method writeColor - // JUnitDoclet end method writeColor - } - - // JUnitDoclet begin javadoc_method readColor() - /** - * Method testReadColor is testing readColor - * @see org.jhotdraw.figures.FigureAttributes#readColor(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method readColor() - public void testReadColor() throws Exception { - // JUnitDoclet begin method readColor - // JUnitDoclet end method readColor - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/FiguresSuite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/FiguresSuite.java deleted file mode 100644 index db4286a3c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/FiguresSuite.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * @(#)FiguresSuite.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite FiguresSuite -*/ -// JUnitDoclet end javadoc_class -public class FiguresSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.figures"); - - suite.addTestSuite(org.jhotdraw.test.figures.NullConnectorTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.NullFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.UngroupCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.ShortestDistanceConnectorTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.ScribbleToolTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.RectangleFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.RoundRectangleFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.PolyLineHandleTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.PolyLineConnectorTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.NumberTextFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.LineFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.InsertImageCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.ImageFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.GroupFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.GroupCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.FontSizeHandleTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.EllipseFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.ElbowHandleTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.ElbowConnectionTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.TextToolTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.ConnectedTextToolTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.ChopEllipseConnectorTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.BorderToolTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.BorderDecoratorTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.ArrowTipTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.FigureAttributesTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.TextFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.PolyLineFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.figures.LineConnectionTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/FontSizeHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/FontSizeHandleTest.java deleted file mode 100644 index d1f6528b8..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/FontSizeHandleTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.FontSizeHandle; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.RelativeLocator; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FontSizeHandleTest is generated by - * JUnitDoclet to hold the tests for FontSizeHandle. - * @see org.jhotdraw.figures.FontSizeHandle - */ -// JUnitDoclet end javadoc_class -public class FontSizeHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FontSizeHandle fontsizehandle; - // JUnitDoclet end class - - /** - * Constructor FontSizeHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FontSizeHandleTest(String name) { - // JUnitDoclet begin method FontSizeHandleTest - super(name); - // JUnitDoclet end method FontSizeHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FontSizeHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new FontSizeHandle(new RectangleFigure(new Point(10, 10), new Point(100, 100)), new RelativeLocator()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - fontsizehandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - fontsizehandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see org.jhotdraw.figures.FontSizeHandle#invokeStart(int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see org.jhotdraw.figures.FontSizeHandle#invokeStep(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see org.jhotdraw.figures.FontSizeHandle#invokeEnd(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.figures.FontSizeHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/GroupCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/GroupCommandTest.java deleted file mode 100644 index 6a3c09e3b..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/GroupCommandTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -// JUnitDoclet begin import -import org.jhotdraw.figures.GroupCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase GroupCommandTest is generated by - * JUnitDoclet to hold the tests for GroupCommand. - * @see org.jhotdraw.figures.GroupCommand - */ -// JUnitDoclet end javadoc_class -public class GroupCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GroupCommand groupcommand; - // JUnitDoclet end class - - /** - * Constructor GroupCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GroupCommandTest(String name) { - // JUnitDoclet begin method GroupCommandTest - super(name); - // JUnitDoclet end method GroupCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public GroupCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new GroupCommand("TestGroup", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - groupcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - groupcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.figures.GroupCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see org.jhotdraw.figures.GroupCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/GroupFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/GroupFigureTest.java deleted file mode 100644 index db40201eb..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/GroupFigureTest.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.GroupFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase GroupFigureTest is generated by - * JUnitDoclet to hold the tests for GroupFigure. - * @see org.jhotdraw.figures.GroupFigure - */ -// JUnitDoclet end javadoc_class -public class GroupFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GroupFigure groupfigure; - // JUnitDoclet end class - - /** - * Constructor GroupFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GroupFigureTest(String name) { - // JUnitDoclet begin method GroupFigureTest - super(name); - // JUnitDoclet end method GroupFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public GroupFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new GroupFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - groupfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - groupfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method canConnect() - /** - * Method testCanConnect is testing canConnect - * @see org.jhotdraw.figures.GroupFigure#canConnect() - */ - // JUnitDoclet end javadoc_method canConnect() - public void testCanConnect() throws Exception { - // JUnitDoclet begin method canConnect - // JUnitDoclet end method canConnect - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.figures.GroupFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.figures.GroupFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method decompose() - /** - * Method testDecompose is testing decompose - * @see org.jhotdraw.figures.GroupFigure#decompose() - */ - // JUnitDoclet end javadoc_method decompose() - public void testDecompose() throws Exception { - // JUnitDoclet begin method decompose - // JUnitDoclet end method decompose - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.GroupFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see org.jhotdraw.figures.GroupFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ImageFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ImageFigureTest.java deleted file mode 100644 index 7ba35f669..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ImageFigureTest.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.ImageFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ImageFigureTest is generated by - * JUnitDoclet to hold the tests for ImageFigure. - * @see org.jhotdraw.figures.ImageFigure - */ -// JUnitDoclet end javadoc_class -public class ImageFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ImageFigure imagefigure; - // JUnitDoclet end class - - /** - * Constructor ImageFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ImageFigureTest(String name) { - // JUnitDoclet begin method ImageFigureTest - super(name); - // JUnitDoclet end method ImageFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ImageFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ImageFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - imagefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - imagefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.figures.ImageFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.ImageFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.figures.ImageFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.figures.ImageFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method imageUpdate() - /** - * Method testImageUpdate is testing imageUpdate - * @see org.jhotdraw.figures.ImageFigure#imageUpdate(java.awt.Image, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method imageUpdate() - public void testImageUpdate() throws Exception { - // JUnitDoclet begin method imageUpdate - // JUnitDoclet end method imageUpdate - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see org.jhotdraw.figures.ImageFigure#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.figures.ImageFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.figures.ImageFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/InsertImageCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/InsertImageCommandTest.java deleted file mode 100644 index 730458c61..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/InsertImageCommandTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -// JUnitDoclet begin import -import org.jhotdraw.figures.InsertImageCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase InsertImageCommandTest is generated by - * JUnitDoclet to hold the tests for InsertImageCommand. - * @see org.jhotdraw.figures.InsertImageCommand - */ -// JUnitDoclet end javadoc_class -public class InsertImageCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private InsertImageCommand insertimagecommand; - private static String fgSampleImagesPath = "/org/jhotdraw/samples/javadraw/sampleimages/DUKE.gif"; - // JUnitDoclet end class - - /** - * Constructor InsertImageCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public InsertImageCommandTest(String name) { - // JUnitDoclet begin method InsertImageCommandTest - super(name); - // JUnitDoclet end method InsertImageCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public InsertImageCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new InsertImageCommand("TestImage", fgSampleImagesPath, getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - insertimagecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - insertimagecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.figures.InsertImageCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/LineConnectionTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/LineConnectionTest.java deleted file mode 100644 index fdeb075e8..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/LineConnectionTest.java +++ /dev/null @@ -1,397 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.LineConnection; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase LineConnectionTest is generated by - * JUnitDoclet to hold the tests for LineConnection. - * @see org.jhotdraw.figures.LineConnection - */ -// JUnitDoclet end javadoc_class -public class LineConnectionTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private LineConnection lineconnection; - // JUnitDoclet end class - - /** - * Constructor LineConnectionTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public LineConnectionTest(String name) { - // JUnitDoclet begin method LineConnectionTest - super(name); - // JUnitDoclet end method LineConnectionTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public LineConnection createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new LineConnection(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - lineconnection = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - lineconnection = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method canConnect() - /** - * Method testCanConnect is testing canConnect - * @see org.jhotdraw.figures.LineConnection#canConnect() - */ - // JUnitDoclet end javadoc_method canConnect() - public void testCanConnect() throws Exception { - // JUnitDoclet begin method canConnect - // JUnitDoclet end method canConnect - } - - // JUnitDoclet begin javadoc_method connectStart() - /** - * Method testConnectStart is testing connectStart - * @see org.jhotdraw.figures.LineConnection#connectStart(org.jhotdraw.framework.Connector) - */ - // JUnitDoclet end javadoc_method connectStart() - public void testConnectStart() throws Exception { - // JUnitDoclet begin method connectStart - // JUnitDoclet end method connectStart - } - - // JUnitDoclet begin javadoc_method connectEnd() - /** - * Method testConnectEnd is testing connectEnd - * @see org.jhotdraw.figures.LineConnection#connectEnd(org.jhotdraw.framework.Connector) - */ - // JUnitDoclet end javadoc_method connectEnd() - public void testConnectEnd() throws Exception { - // JUnitDoclet begin method connectEnd - // JUnitDoclet end method connectEnd - } - - // JUnitDoclet begin javadoc_method disconnectStart() - /** - * Method testDisconnectStart is testing disconnectStart - * @see org.jhotdraw.figures.LineConnection#disconnectStart() - */ - // JUnitDoclet end javadoc_method disconnectStart() - public void testDisconnectStart() throws Exception { - // JUnitDoclet begin method disconnectStart - // JUnitDoclet end method disconnectStart - } - - // JUnitDoclet begin javadoc_method disconnectEnd() - /** - * Method testDisconnectEnd is testing disconnectEnd - * @see org.jhotdraw.figures.LineConnection#disconnectEnd() - */ - // JUnitDoclet end javadoc_method disconnectEnd() - public void testDisconnectEnd() throws Exception { - // JUnitDoclet begin method disconnectEnd - // JUnitDoclet end method disconnectEnd - } - - // JUnitDoclet begin javadoc_method connectsSame() - /** - * Method testConnectsSame is testing connectsSame - * @see org.jhotdraw.figures.LineConnection#connectsSame(org.jhotdraw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method connectsSame() - public void testConnectsSame() throws Exception { - // JUnitDoclet begin method connectsSame - // JUnitDoclet end method connectsSame - } - - // JUnitDoclet begin javadoc_method startFigure() - /** - * Method testStartFigure is testing startFigure - * @see org.jhotdraw.figures.LineConnection#startFigure() - */ - // JUnitDoclet end javadoc_method startFigure() - public void testStartFigure() throws Exception { - // JUnitDoclet begin method startFigure - // JUnitDoclet end method startFigure - } - - // JUnitDoclet begin javadoc_method endFigure() - /** - * Method testEndFigure is testing endFigure - * @see org.jhotdraw.figures.LineConnection#endFigure() - */ - // JUnitDoclet end javadoc_method endFigure() - public void testEndFigure() throws Exception { - // JUnitDoclet begin method endFigure - // JUnitDoclet end method endFigure - } - - // JUnitDoclet begin javadoc_method getStartConnector() - /** - * Method testGetStartConnector is testing getStartConnector - * @see org.jhotdraw.figures.LineConnection#getStartConnector() - */ - // JUnitDoclet end javadoc_method getStartConnector() - public void testGetStartConnector() throws Exception { - // JUnitDoclet begin method getStartConnector - // JUnitDoclet end method getStartConnector - } - - // JUnitDoclet begin javadoc_method getEndConnector() - /** - * Method testGetEndConnector is testing getEndConnector - * @see org.jhotdraw.figures.LineConnection#getEndConnector() - */ - // JUnitDoclet end javadoc_method getEndConnector() - public void testGetEndConnector() throws Exception { - // JUnitDoclet begin method getEndConnector - // JUnitDoclet end method getEndConnector - } - - // JUnitDoclet begin javadoc_method startPoint() - /** - * Method testStartPoint is testing startPoint - * @see org.jhotdraw.figures.LineConnection#startPoint(int, int) - */ - // JUnitDoclet end javadoc_method startPoint() - public void testStartPoint() throws Exception { - // JUnitDoclet begin method startPoint - // JUnitDoclet end method startPoint - } - - // JUnitDoclet begin javadoc_method endPoint() - /** - * Method testEndPoint is testing endPoint - * @see org.jhotdraw.figures.LineConnection#endPoint(int, int) - */ - // JUnitDoclet end javadoc_method endPoint() - public void testEndPoint() throws Exception { - // JUnitDoclet begin method endPoint - // JUnitDoclet end method endPoint - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.LineConnection#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method setPointAt() - /** - * Method testSetPointAt is testing setPointAt - * @see org.jhotdraw.figures.LineConnection#setPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method setPointAt() - public void testSetPointAt() throws Exception { - // JUnitDoclet begin method setPointAt - // JUnitDoclet end method setPointAt - } - - // JUnitDoclet begin javadoc_method insertPointAt() - /** - * Method testInsertPointAt is testing insertPointAt - * @see org.jhotdraw.figures.LineConnection#insertPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method insertPointAt() - public void testInsertPointAt() throws Exception { - // JUnitDoclet begin method insertPointAt - // JUnitDoclet end method insertPointAt - } - - // JUnitDoclet begin javadoc_method removePointAt() - /** - * Method testRemovePointAt is testing removePointAt - * @see org.jhotdraw.figures.LineConnection#removePointAt(int) - */ - // JUnitDoclet end javadoc_method removePointAt() - public void testRemovePointAt() throws Exception { - // JUnitDoclet begin method removePointAt - // JUnitDoclet end method removePointAt - } - - // JUnitDoclet begin javadoc_method updateConnection() - /** - * Method testUpdateConnection is testing updateConnection - * @see org.jhotdraw.figures.LineConnection#updateConnection() - */ - // JUnitDoclet end javadoc_method updateConnection() - public void testUpdateConnection() throws Exception { - // JUnitDoclet begin method updateConnection - // JUnitDoclet end method updateConnection - } - - // JUnitDoclet begin javadoc_method layoutConnection() - /** - * Method testLayoutConnection is testing layoutConnection - * @see org.jhotdraw.figures.LineConnection#layoutConnection() - */ - // JUnitDoclet end javadoc_method layoutConnection() - public void testLayoutConnection() throws Exception { - // JUnitDoclet begin method layoutConnection - // JUnitDoclet end method layoutConnection - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see org.jhotdraw.figures.LineConnection#figureChanged(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see org.jhotdraw.figures.LineConnection#figureRemoved(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see org.jhotdraw.figures.LineConnection#figureRequestRemove(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see org.jhotdraw.figures.LineConnection#figureInvalidated(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see org.jhotdraw.figures.LineConnection#figureRequestUpdate(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see org.jhotdraw.figures.LineConnection#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.figures.LineConnection#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.figures.LineConnection#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method visit() - /** - * Method testVisit is testing visit - * @see org.jhotdraw.figures.LineConnection#visit(org.jhotdraw.framework.FigureVisitor) - */ - // JUnitDoclet end javadoc_method visit() - public void testVisit() throws Exception { - // JUnitDoclet begin method visit - // JUnitDoclet end method visit - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/LineFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/LineFigureTest.java deleted file mode 100644 index 52d34d665..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/LineFigureTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.LineFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase LineFigureTest is generated by - * JUnitDoclet to hold the tests for LineFigure. - * @see org.jhotdraw.figures.LineFigure - */ -// JUnitDoclet end javadoc_class -public class LineFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private LineFigure linefigure; - // JUnitDoclet end class - - /** - * Constructor LineFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public LineFigureTest(String name) { - // JUnitDoclet begin method LineFigureTest - super(name); - // JUnitDoclet end method LineFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public LineFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new LineFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - linefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - linefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method startPoint() - /** - * Method testStartPoint is testing startPoint - * @see org.jhotdraw.figures.LineFigure#startPoint() - */ - // JUnitDoclet end javadoc_method startPoint() - public void testStartPoint() throws Exception { - // JUnitDoclet begin method startPoint - // JUnitDoclet end method startPoint - } - - // JUnitDoclet begin javadoc_method endPoint() - /** - * Method testEndPoint is testing endPoint - * @see org.jhotdraw.figures.LineFigure#endPoint() - */ - // JUnitDoclet end javadoc_method endPoint() - public void testEndPoint() throws Exception { - // JUnitDoclet begin method endPoint - // JUnitDoclet end method endPoint - } - - // JUnitDoclet begin javadoc_method setPoints() - /** - * Method testSetPoints is testing setPoints - * @see org.jhotdraw.figures.LineFigure#setPoints(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method setPoints() - public void testSetPoints() throws Exception { - // JUnitDoclet begin method setPoints - // JUnitDoclet end method setPoints - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.figures.LineFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/NullConnectorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/NullConnectorTest.java deleted file mode 100644 index da94c96b7..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/NullConnectorTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import java.awt.Point; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import org.jhotdraw.figures.NullConnector; -import org.jhotdraw.figures.RectangleFigure; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullConnectorTest is generated by - * JUnitDoclet to hold the tests for NullConnector. - * @see org.jhotdraw.figures.NullConnector - */ -// JUnitDoclet end javadoc_class -public class NullConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullConnector nullconnector; - // JUnitDoclet end class - - /** - * Constructor NullConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullConnectorTest(String name) { - // JUnitDoclet begin method NullConnectorTest - super(name); - // JUnitDoclet end method NullConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NullConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NullConnector(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nullconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nullconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/NullFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/NullFigureTest.java deleted file mode 100644 index ccf5b1fac..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/NullFigureTest.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.NullFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullFigureTest is generated by - * JUnitDoclet to hold the tests for NullFigure. - * @see org.jhotdraw.figures.NullFigure - */ -// JUnitDoclet end javadoc_class -public class NullFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullFigure nullfigure; - // JUnitDoclet end class - - /** - * Constructor NullFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullFigureTest(String name) { - // JUnitDoclet begin method NullFigureTest - super(name); - // JUnitDoclet end method NullFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NullFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NullFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nullfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nullfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.figures.NullFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.figures.NullFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.figures.NullFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.NullFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see org.jhotdraw.figures.NullFigure#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method figures() - /** - * Method testFigures is testing figures - * @see org.jhotdraw.figures.NullFigure#figures() - */ - // JUnitDoclet end javadoc_method figures() - public void testFigures() throws Exception { - // JUnitDoclet begin method figures - // JUnitDoclet end method figures - } - - // JUnitDoclet begin javadoc_method findFigureInside() - /** - * Method testFindFigureInside is testing findFigureInside - * @see org.jhotdraw.figures.NullFigure#findFigureInside(int, int) - */ - // JUnitDoclet end javadoc_method findFigureInside() - public void testFindFigureInside() throws Exception { - // JUnitDoclet begin method findFigureInside - // JUnitDoclet end method findFigureInside - } - - // JUnitDoclet begin javadoc_method clone() - /** - * Method testClone is testing clone - * @see org.jhotdraw.figures.NullFigure#clone() - */ - // JUnitDoclet end javadoc_method clone() - public void testClone() throws Exception { - // JUnitDoclet begin method clone - // JUnitDoclet end method clone - } - - // JUnitDoclet begin javadoc_method includes() - /** - * Method testIncludes is testing includes - * @see org.jhotdraw.figures.NullFigure#includes(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method includes() - public void testIncludes() throws Exception { - // JUnitDoclet begin method includes - // JUnitDoclet end method includes - } - - // JUnitDoclet begin javadoc_method decompose() - /** - * Method testDecompose is testing decompose - * @see org.jhotdraw.figures.NullFigure#decompose() - */ - // JUnitDoclet end javadoc_method decompose() - public void testDecompose() throws Exception { - // JUnitDoclet begin method decompose - // JUnitDoclet end method decompose - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see org.jhotdraw.figures.NullFigure#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method invalidate() - /** - * Method testInvalidate is testing invalidate - * @see org.jhotdraw.figures.NullFigure#invalidate() - */ - // JUnitDoclet end javadoc_method invalidate() - public void testInvalidate() throws Exception { - // JUnitDoclet begin method invalidate - // JUnitDoclet end method invalidate - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see org.jhotdraw.figures.NullFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see org.jhotdraw.figures.NullFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/NumberTextFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/NumberTextFigureTest.java deleted file mode 100644 index ebabec42c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/NumberTextFigureTest.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.NumberTextFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NumberTextFigureTest is generated by - * JUnitDoclet to hold the tests for NumberTextFigure. - * @see org.jhotdraw.figures.NumberTextFigure - */ -// JUnitDoclet end javadoc_class -public class NumberTextFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NumberTextFigure numbertextfigure; - // JUnitDoclet end class - - /** - * Constructor NumberTextFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NumberTextFigureTest(String name) { - // JUnitDoclet begin method NumberTextFigureTest - super(name); - // JUnitDoclet end method NumberTextFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NumberTextFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NumberTextFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - numbertextfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - numbertextfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method overlayColumns() - /** - * Method testOverlayColumns is testing overlayColumns - * @see org.jhotdraw.figures.NumberTextFigure#overlayColumns() - */ - // JUnitDoclet end javadoc_method overlayColumns() - public void testOverlayColumns() throws Exception { - // JUnitDoclet begin method overlayColumns - // JUnitDoclet end method overlayColumns - } - - // JUnitDoclet begin javadoc_method setValue() - /** - * Method testSetGetValue is testing setValue - * and getValue together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.figures.NumberTextFigure#setValue(int) - * @see org.jhotdraw.figures.NumberTextFigure#getValue() - */ - // JUnitDoclet end javadoc_method setValue() - public void testSetGetValue() throws Exception { - // JUnitDoclet begin method setValue getValue - int[] tests = { Integer.MIN_VALUE, -1, 0, 1, Integer.MAX_VALUE }; - - for (int i = 0; i < tests.length; i++) { - numbertextfigure.setValue(tests[i]); - assertEquals(tests[i], numbertextfigure.getValue()); - } - // JUnitDoclet end method setValue getValue - } - - // JUnitDoclet begin javadoc_method getRepresentingFigure() - /** - * Method testGetRepresentingFigure is testing getRepresentingFigure - * @see org.jhotdraw.figures.NumberTextFigure#getRepresentingFigure() - */ - // JUnitDoclet end javadoc_method getRepresentingFigure() - public void testGetRepresentingFigure() throws Exception { - // JUnitDoclet begin method getRepresentingFigure - // JUnitDoclet end method getRepresentingFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineConnectorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineConnectorTest.java deleted file mode 100644 index 85a35bad8..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineConnectorTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.PolyLineConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolyLineConnectorTest is generated by - * JUnitDoclet to hold the tests for PolyLineConnector. - * @see org.jhotdraw.figures.PolyLineConnector - */ -// JUnitDoclet end javadoc_class -public class PolyLineConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolyLineConnector polylineconnector; - // JUnitDoclet end class - - /** - * Constructor PolyLineConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolyLineConnectorTest(String name) { - // JUnitDoclet begin method PolyLineConnectorTest - super(name); - // JUnitDoclet end method PolyLineConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PolyLineConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PolyLineConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polylineconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polylineconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineFigureTest.java deleted file mode 100644 index b88c4484f..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineFigureTest.java +++ /dev/null @@ -1,383 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import org.jhotdraw.figures.ArrowTip; -import org.jhotdraw.figures.PolyLineFigure; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolyLineFigureTest is generated by - * JUnitDoclet to hold the tests for PolyLineFigure. - * @see org.jhotdraw.figures.PolyLineFigure - */ -// JUnitDoclet end javadoc_class -public class PolyLineFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolyLineFigure polylinefigure; - // JUnitDoclet end class - - /** - * Constructor PolyLineFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolyLineFigureTest(String name) { - // JUnitDoclet begin method PolyLineFigureTest - super(name); - // JUnitDoclet end method PolyLineFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PolyLineFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PolyLineFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polylinefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polylinefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.figures.PolyLineFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see org.jhotdraw.figures.PolyLineFigure#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.PolyLineFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.figures.PolyLineFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method addPoint() - /** - * Method testAddPoint is testing addPoint - * @see org.jhotdraw.figures.PolyLineFigure#addPoint(int, int) - */ - // JUnitDoclet end javadoc_method addPoint() - public void testAddPoint() throws Exception { - // JUnitDoclet begin method addPoint - // JUnitDoclet end method addPoint - } - - // JUnitDoclet begin javadoc_method points() - /** - * Method testPoints is testing points - * @see org.jhotdraw.figures.PolyLineFigure#points() - */ - // JUnitDoclet end javadoc_method points() - public void testPoints() throws Exception { - // JUnitDoclet begin method points - // JUnitDoclet end method points - } - - // JUnitDoclet begin javadoc_method pointCount() - /** - * Method testPointCount is testing pointCount - * @see org.jhotdraw.figures.PolyLineFigure#pointCount() - */ - // JUnitDoclet end javadoc_method pointCount() - public void testPointCount() throws Exception { - // JUnitDoclet begin method pointCount - // JUnitDoclet end method pointCount - } - - // JUnitDoclet begin javadoc_method setPointAt() - /** - * Method testSetPointAt is testing setPointAt - * @see org.jhotdraw.figures.PolyLineFigure#setPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method setPointAt() - public void testSetPointAt() throws Exception { - // JUnitDoclet begin method setPointAt - // JUnitDoclet end method setPointAt - } - - // JUnitDoclet begin javadoc_method insertPointAt() - /** - * Method testInsertPointAt is testing insertPointAt - * @see org.jhotdraw.figures.PolyLineFigure#insertPointAt(java.awt.Point, int) - */ - // JUnitDoclet end javadoc_method insertPointAt() - public void testInsertPointAt() throws Exception { - // JUnitDoclet begin method insertPointAt - // JUnitDoclet end method insertPointAt - } - - // JUnitDoclet begin javadoc_method removePointAt() - /** - * Method testRemovePointAt is testing removePointAt - * @see org.jhotdraw.figures.PolyLineFigure#removePointAt(int) - */ - // JUnitDoclet end javadoc_method removePointAt() - public void testRemovePointAt() throws Exception { - // JUnitDoclet begin method removePointAt - // JUnitDoclet end method removePointAt - } - - // JUnitDoclet begin javadoc_method splitSegment() - /** - * Method testSplitSegment is testing splitSegment - * @see org.jhotdraw.figures.PolyLineFigure#splitSegment(int, int) - */ - // JUnitDoclet end javadoc_method splitSegment() - public void testSplitSegment() throws Exception { - // JUnitDoclet begin method splitSegment - // JUnitDoclet end method splitSegment - } - - // JUnitDoclet begin javadoc_method pointAt() - /** - * Method testPointAt is testing pointAt - * @see org.jhotdraw.figures.PolyLineFigure#pointAt(int) - */ - // JUnitDoclet end javadoc_method pointAt() - public void testPointAt() throws Exception { - // JUnitDoclet begin method pointAt - // JUnitDoclet end method pointAt - } - - // JUnitDoclet begin javadoc_method joinSegments() - /** - * Method testJoinSegments is testing joinSegments - * @see org.jhotdraw.figures.PolyLineFigure#joinSegments(int, int) - */ - // JUnitDoclet end javadoc_method joinSegments() - public void testJoinSegments() throws Exception { - // JUnitDoclet begin method joinSegments - // JUnitDoclet end method joinSegments - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see org.jhotdraw.figures.PolyLineFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method setStartDecoration() - /** - * Method testSetGetStartDecoration is testing setStartDecoration - * and getStartDecoration together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.figures.PolyLineFigure#setStartDecoration(org.jhotdraw.figures.LineDecoration) - * @see org.jhotdraw.figures.PolyLineFigure#getStartDecoration() - */ - // JUnitDoclet end javadoc_method setStartDecoration() - public void testSetGetStartDecoration() throws Exception { - // JUnitDoclet begin method setStartDecoration getStartDecoration - org.jhotdraw.figures.LineDecoration[] tests = { new ArrowTip(), null }; - - for (int i = 0; i < tests.length; i++) { - polylinefigure.setStartDecoration(tests[i]); - assertEquals(tests[i], polylinefigure.getStartDecoration()); - } - // JUnitDoclet end method setStartDecoration getStartDecoration - } - - // JUnitDoclet begin javadoc_method setEndDecoration() - /** - * Method testSetGetEndDecoration is testing setEndDecoration - * and getEndDecoration together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.figures.PolyLineFigure#setEndDecoration(org.jhotdraw.figures.LineDecoration) - * @see org.jhotdraw.figures.PolyLineFigure#getEndDecoration() - */ - // JUnitDoclet end javadoc_method setEndDecoration() - public void testSetGetEndDecoration() throws Exception { - // JUnitDoclet begin method setEndDecoration getEndDecoration - org.jhotdraw.figures.LineDecoration[] tests = { new ArrowTip(), null }; - - for (int i = 0; i < tests.length; i++) { - polylinefigure.setEndDecoration(tests[i]); - assertEquals(tests[i], polylinefigure.getEndDecoration()); - } - // JUnitDoclet end method setEndDecoration getEndDecoration - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.figures.PolyLineFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see org.jhotdraw.figures.PolyLineFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method findSegment() - /** - * Method testFindSegment is testing findSegment - * @see org.jhotdraw.figures.PolyLineFigure#findSegment(int, int) - */ - // JUnitDoclet end javadoc_method findSegment() - public void testFindSegment() throws Exception { - // JUnitDoclet begin method findSegment - // JUnitDoclet end method findSegment - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see org.jhotdraw.figures.PolyLineFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see org.jhotdraw.figures.PolyLineFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.figures.PolyLineFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.figures.PolyLineFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method locator() - /** - * Method testLocator is testing locator - * @see org.jhotdraw.figures.PolyLineFigure#locator(int) - */ - // JUnitDoclet end javadoc_method locator() - public void testLocator() throws Exception { - // JUnitDoclet begin method locator - // JUnitDoclet end method locator - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineHandleTest.java deleted file mode 100644 index 9bfafc130..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/PolyLineHandleTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -// JUnitDoclet begin import -import org.jhotdraw.figures.PolyLineFigure; -import org.jhotdraw.figures.PolyLineHandle; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PolyLineHandleTest is generated by - * JUnitDoclet to hold the tests for PolyLineHandle. - * @see org.jhotdraw.figures.PolyLineHandle - */ -// JUnitDoclet end javadoc_class -public class PolyLineHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PolyLineHandle polylinehandle; - // JUnitDoclet end class - - /** - * Constructor PolyLineHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PolyLineHandleTest(String name) { - // JUnitDoclet begin method PolyLineHandleTest - super(name); - // JUnitDoclet end method PolyLineHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PolyLineHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - PolyLineFigure figure = new PolyLineFigure(20, 20); - figure.addPoint(30, 30); - figure.addPoint(40, 40); - return new PolyLineHandle(figure, PolyLineFigure.locator(2), 2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - polylinehandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - polylinehandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see org.jhotdraw.figures.PolyLineHandle#invokeStart(int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see org.jhotdraw.figures.PolyLineHandle#invokeStep(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see org.jhotdraw.figures.PolyLineHandle#invokeEnd(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/RectangleFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/RectangleFigureTest.java deleted file mode 100644 index 90fe46619..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/RectangleFigureTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.RectangleFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase RectangleFigureTest is generated by - * JUnitDoclet to hold the tests for RectangleFigure. - * @see org.jhotdraw.figures.RectangleFigure - */ -// JUnitDoclet end javadoc_class -public class RectangleFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private RectangleFigure rectanglefigure; - // JUnitDoclet end class - - /** - * Constructor RectangleFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public RectangleFigureTest(String name) { - // JUnitDoclet begin method RectangleFigureTest - super(name); - // JUnitDoclet end method RectangleFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public RectangleFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new RectangleFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - rectanglefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - rectanglefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.figures.RectangleFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.RectangleFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.figures.RectangleFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see org.jhotdraw.figures.RectangleFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see org.jhotdraw.figures.RectangleFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.figures.RectangleFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.figures.RectangleFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/RoundRectangleFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/RoundRectangleFigureTest.java deleted file mode 100644 index d4b6a4eb4..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/RoundRectangleFigureTest.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.RoundRectangleFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase RoundRectangleFigureTest is generated by - * JUnitDoclet to hold the tests for RoundRectangleFigure. - * @see org.jhotdraw.figures.RoundRectangleFigure - */ -// JUnitDoclet end javadoc_class -public class RoundRectangleFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private RoundRectangleFigure roundrectanglefigure; - // JUnitDoclet end class - - /** - * Constructor RoundRectangleFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public RoundRectangleFigureTest(String name) { - // JUnitDoclet begin method RoundRectangleFigureTest - super(name); - // JUnitDoclet end method RoundRectangleFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public RoundRectangleFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new RoundRectangleFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - roundrectanglefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - roundrectanglefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.figures.RoundRectangleFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method setArc() - /** - * Method testSetArc is testing setArc - * @see org.jhotdraw.figures.RoundRectangleFigure#setArc(int, int) - */ - // JUnitDoclet end javadoc_method setArc() - public void testSetArc() throws Exception { - // JUnitDoclet begin method setArc - // JUnitDoclet end method setArc - } - - // JUnitDoclet begin javadoc_method getArc() - /** - * Method testGetArc is testing getArc - * @see org.jhotdraw.figures.RoundRectangleFigure#getArc() - */ - // JUnitDoclet end javadoc_method getArc() - public void testGetArc() throws Exception { - // JUnitDoclet begin method getArc - // JUnitDoclet end method getArc - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.RoundRectangleFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.figures.RoundRectangleFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see org.jhotdraw.figures.RoundRectangleFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see org.jhotdraw.figures.RoundRectangleFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see org.jhotdraw.figures.RoundRectangleFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see org.jhotdraw.figures.RoundRectangleFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.figures.RoundRectangleFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.figures.RoundRectangleFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ScribbleToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ScribbleToolTest.java deleted file mode 100644 index 398154b32..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ScribbleToolTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -// JUnitDoclet begin import -import org.jhotdraw.figures.ScribbleTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ScribbleToolTest is generated by - * JUnitDoclet to hold the tests for ScribbleTool. - * @see org.jhotdraw.figures.ScribbleTool - */ -// JUnitDoclet end javadoc_class -public class ScribbleToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ScribbleTool scribbletool; - // JUnitDoclet end class - - /** - * Constructor ScribbleToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ScribbleToolTest(String name) { - // JUnitDoclet begin method ScribbleToolTest - super(name); - // JUnitDoclet end method ScribbleToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ScribbleTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ScribbleTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - scribbletool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - scribbletool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.figures.ScribbleTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.figures.ScribbleTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.figures.ScribbleTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.figures.ScribbleTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.figures.ScribbleTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ShortestDistanceConnectorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ShortestDistanceConnectorTest.java deleted file mode 100644 index 1f7740383..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/ShortestDistanceConnectorTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import org.jhotdraw.figures.ShortestDistanceConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ShortestDistanceConnectorTest is generated by - * JUnitDoclet to hold the tests for ShortestDistanceConnector. - * @see org.jhotdraw.figures.ShortestDistanceConnector - */ -// JUnitDoclet end javadoc_class -public class ShortestDistanceConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ShortestDistanceConnector shortestdistanceconnector; - // JUnitDoclet end class - - /** - * Constructor ShortestDistanceConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ShortestDistanceConnectorTest(String name) { - // JUnitDoclet begin method ShortestDistanceConnectorTest - super(name); - // JUnitDoclet end method ShortestDistanceConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ShortestDistanceConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ShortestDistanceConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - shortestdistanceconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - shortestdistanceconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method findStart() - /** - * Method testFindStart is testing findStart - * @see org.jhotdraw.figures.ShortestDistanceConnector#findStart(org.jhotdraw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method findStart() - public void testFindStart() throws Exception { - // JUnitDoclet begin method findStart - // JUnitDoclet end method findStart - } - - // JUnitDoclet begin javadoc_method findEnd() - /** - * Method testFindEnd is testing findEnd - * @see org.jhotdraw.figures.ShortestDistanceConnector#findEnd(org.jhotdraw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method findEnd() - public void testFindEnd() throws Exception { - // JUnitDoclet begin method findEnd - // JUnitDoclet end method findEnd - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/TextFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/TextFigureTest.java deleted file mode 100644 index d9ad93aba..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/TextFigureTest.java +++ /dev/null @@ -1,473 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import java.awt.Font; - -import org.jhotdraw.figures.TextFigure; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase TextFigureTest is generated by - * JUnitDoclet to hold the tests for TextFigure. - * @see org.jhotdraw.figures.TextFigure - */ -// JUnitDoclet end javadoc_class -public class TextFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TextFigure textfigure; - // JUnitDoclet end class - - /** - * Constructor TextFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TextFigureTest(String name) { - // JUnitDoclet begin method TextFigureTest - super(name); - // JUnitDoclet end method TextFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public TextFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new TextFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - textfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - textfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method moveBy() - /** - * Method testMoveBy is testing moveBy - * @see org.jhotdraw.figures.TextFigure#moveBy(int, int) - */ - // JUnitDoclet end javadoc_method moveBy() - public void testMoveBy() throws Exception { - // JUnitDoclet begin method moveBy - // JUnitDoclet end method moveBy - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.figures.TextFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.figures.TextFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method textDisplayBox() - /** - * Method testTextDisplayBox is testing textDisplayBox - * @see org.jhotdraw.figures.TextFigure#textDisplayBox() - */ - // JUnitDoclet end javadoc_method textDisplayBox() - public void testTextDisplayBox() throws Exception { - // JUnitDoclet begin method textDisplayBox - // JUnitDoclet end method textDisplayBox - } - - // JUnitDoclet begin javadoc_method readOnly() - /** - * Method testReadOnly is testing readOnly - * @see org.jhotdraw.figures.TextFigure#readOnly() - */ - // JUnitDoclet end javadoc_method readOnly() - public void testReadOnly() throws Exception { - // JUnitDoclet begin method readOnly - // JUnitDoclet end method readOnly - } - - // JUnitDoclet begin javadoc_method setReadOnly() - /** - * Method testSetReadOnly is testing setReadOnly - * @see org.jhotdraw.figures.TextFigure#setReadOnly(boolean) - */ - // JUnitDoclet end javadoc_method setReadOnly() - public void testSetReadOnly() throws Exception { - // JUnitDoclet begin method setReadOnly - // JUnitDoclet end method setReadOnly - } - - // JUnitDoclet begin javadoc_method getRepresentingFigure() - /** - * Method testGetRepresentingFigure is testing getRepresentingFigure - * @see org.jhotdraw.figures.TextFigure#getRepresentingFigure() - */ - // JUnitDoclet end javadoc_method getRepresentingFigure() - public void testGetRepresentingFigure() throws Exception { - // JUnitDoclet begin method getRepresentingFigure - // JUnitDoclet end method getRepresentingFigure - } - - // JUnitDoclet begin javadoc_method setFont() - /** - * Method testSetGetFont is testing setFont - * and getFont together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.figures.TextFigure#setFont(java.awt.Font) - * @see org.jhotdraw.figures.TextFigure#getFont() - */ - // JUnitDoclet end javadoc_method setFont() - public void testSetGetFont() throws Exception { - // JUnitDoclet begin method setFont getFont - java.awt.Font[] tests = { new Font("Helvetica", Font.PLAIN, 12), null }; - - for (int i = 0; i < tests.length; i++) { - textfigure.setFont(tests[i]); - assertEquals(tests[i], textfigure.getFont()); - } - // JUnitDoclet end method setFont getFont - } - - // JUnitDoclet begin javadoc_method changed() - /** - * Method testChanged is testing changed - * @see org.jhotdraw.figures.TextFigure#changed() - */ - // JUnitDoclet end javadoc_method changed() - public void testChanged() throws Exception { - // JUnitDoclet begin method changed - // JUnitDoclet end method changed - } - - // JUnitDoclet begin javadoc_method getAttribute() - /** - * Method testGetAttribute is testing getAttribute - * @see org.jhotdraw.figures.TextFigure#getAttribute(java.lang.String) - */ - // JUnitDoclet end javadoc_method getAttribute() - public void testGetAttribute() throws Exception { - // JUnitDoclet begin method getAttribute - // JUnitDoclet end method getAttribute - } - - // JUnitDoclet begin javadoc_method setAttribute() - /** - * Method testSetAttribute is testing setAttribute - * @see org.jhotdraw.figures.TextFigure#setAttribute(java.lang.String, java.lang.Object) - */ - // JUnitDoclet end javadoc_method setAttribute() - public void testSetAttribute() throws Exception { - // JUnitDoclet begin method setAttribute - // JUnitDoclet end method setAttribute - } - - // JUnitDoclet begin javadoc_method setText() - /** - * Method testSetGetText is testing setText - * and getText together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.figures.TextFigure#setText(java.lang.String) - * @see org.jhotdraw.figures.TextFigure#getText() - */ - // JUnitDoclet end javadoc_method setText() - public void testSetGetText() throws Exception { - // JUnitDoclet begin method setText getText - java.lang.String[] tests = { "", " ", "a", "A", "�", "�", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - textfigure.setText(tests[i]); - assertEquals(tests[i], textfigure.getText()); - } - // JUnitDoclet end method setText getText - } - - // JUnitDoclet begin javadoc_method acceptsTyping() - /** - * Method testAcceptsTyping is testing acceptsTyping - * @see org.jhotdraw.figures.TextFigure#acceptsTyping() - */ - // JUnitDoclet end javadoc_method acceptsTyping() - public void testAcceptsTyping() throws Exception { - // JUnitDoclet begin method acceptsTyping - // JUnitDoclet end method acceptsTyping - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see org.jhotdraw.figures.TextFigure#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method drawFrame() - /** - * Method testDrawFrame is testing drawFrame - * @see org.jhotdraw.figures.TextFigure#drawFrame(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawFrame() - public void testDrawFrame() throws Exception { - // JUnitDoclet begin method drawFrame - // JUnitDoclet end method drawFrame - } - - // JUnitDoclet begin javadoc_method overlayColumns() - /** - * Method testOverlayColumns is testing overlayColumns - * @see org.jhotdraw.figures.TextFigure#overlayColumns() - */ - // JUnitDoclet end javadoc_method overlayColumns() - public void testOverlayColumns() throws Exception { - // JUnitDoclet begin method overlayColumns - // JUnitDoclet end method overlayColumns - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.figures.TextFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.figures.TextFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.figures.TextFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method connect() - /** - * Method testConnect is testing connect - * @see org.jhotdraw.figures.TextFigure#connect(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method connect() - public void testConnect() throws Exception { - // JUnitDoclet begin method connect - // JUnitDoclet end method connect - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see org.jhotdraw.figures.TextFigure#figureChanged(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see org.jhotdraw.figures.TextFigure#figureRemoved(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see org.jhotdraw.figures.TextFigure#figureRequestRemove(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see org.jhotdraw.figures.TextFigure#figureInvalidated(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see org.jhotdraw.figures.TextFigure#figureRequestUpdate(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see org.jhotdraw.figures.TextFigure#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method disconnect() - /** - * Method testDisconnect is testing disconnect - * @see org.jhotdraw.figures.TextFigure#disconnect(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method disconnect() - public void testDisconnect() throws Exception { - // JUnitDoclet begin method disconnect - // JUnitDoclet end method disconnect - } - - // JUnitDoclet begin javadoc_method getTextHolder() - /** - * Method testGetTextHolder is testing getTextHolder - * @see org.jhotdraw.figures.TextFigure#getTextHolder() - */ - // JUnitDoclet end javadoc_method getTextHolder() - public void testGetTextHolder() throws Exception { - // JUnitDoclet begin method getTextHolder - // JUnitDoclet end method getTextHolder - } - - // JUnitDoclet begin javadoc_method createCurrentFont() - /** - * Method testCreateCurrentFont is testing createCurrentFont - * @see org.jhotdraw.figures.TextFigure#createCurrentFont() - */ - // JUnitDoclet end javadoc_method createCurrentFont() - public void testCreateCurrentFont() throws Exception { - // JUnitDoclet begin method createCurrentFont - // JUnitDoclet end method createCurrentFont - } - - // JUnitDoclet begin javadoc_method setCurrentFontName() - /** - * Method testSetCurrentFontName is testing setCurrentFontName - * @see org.jhotdraw.figures.TextFigure#setCurrentFontName(java.lang.String) - */ - // JUnitDoclet end javadoc_method setCurrentFontName() - public void testSetCurrentFontName() throws Exception { - // JUnitDoclet begin method setCurrentFontName - // JUnitDoclet end method setCurrentFontName - } - - // JUnitDoclet begin javadoc_method setCurrentFontSize() - /** - * Method testSetCurrentFontSize is testing setCurrentFontSize - * @see org.jhotdraw.figures.TextFigure#setCurrentFontSize(int) - */ - // JUnitDoclet end javadoc_method setCurrentFontSize() - public void testSetCurrentFontSize() throws Exception { - // JUnitDoclet begin method setCurrentFontSize - // JUnitDoclet end method setCurrentFontSize - } - - // JUnitDoclet begin javadoc_method setCurrentFontStyle() - /** - * Method testSetCurrentFontStyle is testing setCurrentFontStyle - * @see org.jhotdraw.figures.TextFigure#setCurrentFontStyle(int) - */ - // JUnitDoclet end javadoc_method setCurrentFontStyle() - public void testSetCurrentFontStyle() throws Exception { - // JUnitDoclet begin method setCurrentFontStyle - // JUnitDoclet end method setCurrentFontStyle - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/TextToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/TextToolTest.java deleted file mode 100644 index 2a22ee5a5..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/TextToolTest.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.figures.TextTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase TextToolTest is generated by - * JUnitDoclet to hold the tests for TextTool. - * @see org.jhotdraw.figures.TextTool - */ -// JUnitDoclet end javadoc_class -public class TextToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private TextTool texttool; - // JUnitDoclet end class - - /** - * Constructor TextToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public TextToolTest(String name) { - // JUnitDoclet begin method TextToolTest - super(name); - // JUnitDoclet end method TextToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public TextTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new TextTool(getDrawingEditor(), new RectangleFigure(new Point(10,10), new Point(100,100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - texttool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - texttool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.figures.TextTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.figures.TextTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.figures.TextTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.figures.TextTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.figures.TextTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method isActive() - /** - * Method testIsActive is testing isActive - * @see org.jhotdraw.figures.TextTool#isActive() - */ - // JUnitDoclet end javadoc_method isActive() - public void testIsActive() throws Exception { - // JUnitDoclet begin method isActive - // JUnitDoclet end method isActive - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/UngroupCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/figures/UngroupCommandTest.java deleted file mode 100644 index ced7a9f90..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/figures/UngroupCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.figures; - -// JUnitDoclet begin import -import org.jhotdraw.figures.UngroupCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UngroupCommandTest is generated by - * JUnitDoclet to hold the tests for UngroupCommand. - * @see org.jhotdraw.figures.UngroupCommand - */ -// JUnitDoclet end javadoc_class -public class UngroupCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UngroupCommand ungroupcommand; - // JUnitDoclet end class - - /** - * Constructor UngroupCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UngroupCommandTest(String name) { - // JUnitDoclet begin method UngroupCommandTest - super(name); - // JUnitDoclet end method UngroupCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public UngroupCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new UngroupCommand("UngroupTest", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - ungroupcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - ungroupcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.figures.UngroupCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see org.jhotdraw.figures.UngroupCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/framework/AllTests.java deleted file mode 100644 index 180c1a910..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/AllTests.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.framework; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.framework"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(DrawingChangeEventTest.class)); - suite.addTest(new TestSuite(FigureAttributeConstantTest.class)); - suite.addTest(new TestSuite(FigureChangeEventTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/DrawingChangeEventTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/framework/DrawingChangeEventTest.java deleted file mode 100644 index 34fe67c28..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/DrawingChangeEventTest.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.framework; - -import java.awt.Rectangle; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import org.jhotdraw.framework.DrawingChangeEvent; -import org.jhotdraw.standard.StandardDrawing; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DrawingChangeEventTest is generated by - * JUnitDoclet to hold the tests for DrawingChangeEvent. - * @see org.jhotdraw.framework.DrawingChangeEvent - */ -// JUnitDoclet end javadoc_class -public class DrawingChangeEventTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DrawingChangeEvent drawingchangeevent; - // JUnitDoclet end class - - /** - * Constructor DrawingChangeEventTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DrawingChangeEventTest(String name) { - // JUnitDoclet begin method DrawingChangeEventTest - super(name); - // JUnitDoclet end method DrawingChangeEventTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public DrawingChangeEvent createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new DrawingChangeEvent(new StandardDrawing(), new Rectangle(10, 10, 100, 100)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - drawingchangeevent = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - drawingchangeevent = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getDrawing() - /** - * Method testGetDrawing is testing getDrawing - * @see org.jhotdraw.framework.DrawingChangeEvent#getDrawing() - */ - // JUnitDoclet end javadoc_method getDrawing() - public void testGetDrawing() throws Exception { - // JUnitDoclet begin method getDrawing - // JUnitDoclet end method getDrawing - } - - // JUnitDoclet begin javadoc_method getInvalidatedRectangle() - /** - * Method testGetInvalidatedRectangle is testing getInvalidatedRectangle - * @see org.jhotdraw.framework.DrawingChangeEvent#getInvalidatedRectangle() - */ - // JUnitDoclet end javadoc_method getInvalidatedRectangle() - public void testGetInvalidatedRectangle() throws Exception { - // JUnitDoclet begin method getInvalidatedRectangle - // JUnitDoclet end method getInvalidatedRectangle - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/FigureAttributeConstantTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/framework/FigureAttributeConstantTest.java deleted file mode 100644 index 4dec655b6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/FigureAttributeConstantTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.framework; - -import org.jhotdraw.framework.FigureAttributeConstant; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureAttributeConstantTest is generated by - * JUnitDoclet to hold the tests for FigureAttributeConstant. - * @see org.jhotdraw.framework.FigureAttributeConstant - */ -// JUnitDoclet end javadoc_class -public class FigureAttributeConstantTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureAttributeConstant figureattributeconstant; - // JUnitDoclet end class - - /** - * Constructor FigureAttributeConstantTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureAttributeConstantTest(String name) { - // JUnitDoclet begin method FigureAttributeConstantTest - super(name); - // JUnitDoclet end method FigureAttributeConstantTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FigureAttributeConstant createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new FigureAttributeConstant("test_property"); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figureattributeconstant = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figureattributeconstant = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getName() - /** - * Method testGetName is testing getName - * @see org.jhotdraw.framework.FigureAttributeConstant#getName() - */ - // JUnitDoclet end javadoc_method getName() - public void testGetName() throws Exception { - // JUnitDoclet begin method getName - // JUnitDoclet end method getName - } - - // JUnitDoclet begin javadoc_method getID() - /** - * Method testGetID is testing getID - * @see org.jhotdraw.framework.FigureAttributeConstant#getID() - */ - // JUnitDoclet end javadoc_method getID() - public void testGetID() throws Exception { - // JUnitDoclet begin method getID - // JUnitDoclet end method getID - } - - // JUnitDoclet begin javadoc_method equals() - /** - * Method testEquals is testing equals - * @see org.jhotdraw.framework.FigureAttributeConstant#equals(java.lang.Object) - */ - // JUnitDoclet end javadoc_method equals() - public void testEquals() throws Exception { - // JUnitDoclet begin method equals - // JUnitDoclet end method equals - } - - // JUnitDoclet begin javadoc_method hashCode() - /** - * Method testHashCode is testing hashCode - * @see org.jhotdraw.framework.FigureAttributeConstant#hashCode() - */ - // JUnitDoclet end javadoc_method hashCode() - public void testHashCode() throws Exception { - // JUnitDoclet begin method hashCode - // JUnitDoclet end method hashCode - } - - // JUnitDoclet begin javadoc_method getConstant() - /** - * Method testGetConstant is testing getConstant - * @see org.jhotdraw.framework.FigureAttributeConstant#getConstant(java.lang.String) - */ - // JUnitDoclet end javadoc_method getConstant() - public void testGetConstant() throws Exception { - // JUnitDoclet begin method getConstant - // JUnitDoclet end method getConstant - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/FigureChangeEventTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/framework/FigureChangeEventTest.java deleted file mode 100644 index bff8630cd..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/FigureChangeEventTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.framework; - -import java.awt.Point; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.framework.FigureChangeEvent; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureChangeEventTest is generated by - * JUnitDoclet to hold the tests for FigureChangeEvent. - * @see org.jhotdraw.framework.FigureChangeEvent - */ -// JUnitDoclet end javadoc_class -public class FigureChangeEventTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureChangeEvent figurechangeevent; - // JUnitDoclet end class - - /** - * Constructor FigureChangeEventTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureChangeEventTest(String name) { - // JUnitDoclet begin method FigureChangeEventTest - super(name); - // JUnitDoclet end method FigureChangeEventTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FigureChangeEvent createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new FigureChangeEvent(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figurechangeevent = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figurechangeevent = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getFigure() - /** - * Method testGetFigure is testing getFigure - * @see org.jhotdraw.framework.FigureChangeEvent#getFigure() - */ - // JUnitDoclet end javadoc_method getFigure() - public void testGetFigure() throws Exception { - // JUnitDoclet begin method getFigure - // JUnitDoclet end method getFigure - } - - // JUnitDoclet begin javadoc_method getInvalidatedRectangle() - /** - * Method testGetInvalidatedRectangle is testing getInvalidatedRectangle - * @see org.jhotdraw.framework.FigureChangeEvent#getInvalidatedRectangle() - */ - // JUnitDoclet end javadoc_method getInvalidatedRectangle() - public void testGetInvalidatedRectangle() throws Exception { - // JUnitDoclet begin method getInvalidatedRectangle - // JUnitDoclet end method getInvalidatedRectangle - } - - // JUnitDoclet begin javadoc_method getNestedEvent() - /** - * Method testGetNestedEvent is testing getNestedEvent - * @see org.jhotdraw.framework.FigureChangeEvent#getNestedEvent() - */ - // JUnitDoclet end javadoc_method getNestedEvent() - public void testGetNestedEvent() throws Exception { - // JUnitDoclet begin method getNestedEvent - // JUnitDoclet end method getNestedEvent - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/FrameworkSuite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/framework/FrameworkSuite.java deleted file mode 100644 index 0e71af09c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/framework/FrameworkSuite.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * @(#)FrameworkSuite - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.framework; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite FrameworkSuite -*/ -// JUnitDoclet end javadoc_class -public class FrameworkSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.framework"); - - suite.addTestSuite(org.jhotdraw.test.framework.FigureAttributeConstantTest.class); - suite.addTestSuite(org.jhotdraw.test.framework.FigureChangeEventTest.class); - suite.addTestSuite(org.jhotdraw.test.framework.DrawingChangeEventTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AllTests.java deleted file mode 100644 index 487477ff1..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AllTests.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.samples.javadraw"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(AnimationDecoratorTest.class)); - suite.addTest(new TestSuite(AnimatorTest.class)); - suite.addTest(new TestSuite(BouncingDrawingTest.class)); - suite.addTest(new TestSuite(JavaDrawAppTest.class)); - suite.addTest(new TestSuite(JavaDrawAppletTest.class)); - suite.addTest(new TestSuite(JavaDrawViewerTest.class)); - suite.addTest(new TestSuite(MySelectionToolTest.class)); - suite.addTest(new TestSuite(PatternPainterTest.class)); - suite.addTest(new TestSuite(URLToolTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AnimationDecoratorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AnimationDecoratorTest.java deleted file mode 100644 index db41ef5b9..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AnimationDecoratorTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -import org.jhotdraw.samples.javadraw.AnimationDecorator; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase AnimationDecoratorTest is generated by - * JUnitDoclet to hold the tests for AnimationDecorator. - * @see org.jhotdraw.samples.javadraw.AnimationDecorator - */ -// JUnitDoclet end javadoc_class -public class AnimationDecoratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private AnimationDecorator animationdecorator; - // JUnitDoclet end class - - /** - * Constructor AnimationDecoratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public AnimationDecoratorTest(String name) { - // JUnitDoclet begin method AnimationDecoratorTest - super(name); - // JUnitDoclet end method AnimationDecoratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public AnimationDecorator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new AnimationDecorator(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - animationdecorator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - animationdecorator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method velocity() - /** - * Method testVelocity is testing velocity - * @see org.jhotdraw.samples.javadraw.AnimationDecorator#velocity(int, int) - */ - // JUnitDoclet end javadoc_method velocity() - public void testVelocity() throws Exception { - // JUnitDoclet begin method velocity - // JUnitDoclet end method velocity - } - - // JUnitDoclet begin javadoc_method animationStep() - /** - * Method testAnimationStep is testing animationStep - * @see org.jhotdraw.samples.javadraw.AnimationDecorator#animationStep() - */ - // JUnitDoclet end javadoc_method animationStep() - public void testAnimationStep() throws Exception { - // JUnitDoclet begin method animationStep - // JUnitDoclet end method animationStep - } - - // JUnitDoclet begin javadoc_method basicMoveBy() - /** - * Method testBasicMoveBy is testing basicMoveBy - * @see org.jhotdraw.samples.javadraw.AnimationDecorator#basicMoveBy(int, int) - */ - // JUnitDoclet end javadoc_method basicMoveBy() - public void testBasicMoveBy() throws Exception { - // JUnitDoclet begin method basicMoveBy - // JUnitDoclet end method basicMoveBy - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.samples.javadraw.AnimationDecorator#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.samples.javadraw.AnimationDecorator#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.samples.javadraw.AnimationDecorator#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.samples.javadraw.AnimationDecorator#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AnimatorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AnimatorTest.java deleted file mode 100644 index 519803caf..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/AnimatorTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.framework.Drawing; -import org.jhotdraw.samples.javadraw.Animator; -import org.jhotdraw.samples.javadraw.BouncingDrawing; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.Animatable; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase AnimatorTest is generated by - * JUnitDoclet to hold the tests for Animator. - * @see org.jhotdraw.samples.javadraw.Animator - */ -// JUnitDoclet end javadoc_class -public class AnimatorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Animator animator; - // JUnitDoclet end class - - /** - * Constructor AnimatorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public AnimatorTest(String name) { - // JUnitDoclet begin method AnimatorTest - super(name); - // JUnitDoclet end method AnimatorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public Animator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Drawing drawing = new BouncingDrawing(); - Animatable animatable = (Animatable)drawing.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - return new Animator(animatable, getDrawingEditor().view()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - animator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - animator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method start() - /** - * Method testStart is testing start - * @see org.jhotdraw.samples.javadraw.Animator#start() - */ - // JUnitDoclet end javadoc_method start() - public void testStart() throws Exception { - // JUnitDoclet begin method start - // JUnitDoclet end method start - } - - // JUnitDoclet begin javadoc_method end() - /** - * Method testEnd is testing end - * @see org.jhotdraw.samples.javadraw.Animator#end() - */ - // JUnitDoclet end javadoc_method end() - public void testEnd() throws Exception { - // JUnitDoclet begin method end - // JUnitDoclet end method end - } - - // JUnitDoclet begin javadoc_method run() - /** - * Method testRun is testing run - * @see org.jhotdraw.samples.javadraw.Animator#run() - */ - // JUnitDoclet end javadoc_method run() - public void testRun() throws Exception { - // JUnitDoclet begin method run - // JUnitDoclet end method run - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/BouncingDrawingTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/BouncingDrawingTest.java deleted file mode 100644 index e757058a4..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/BouncingDrawingTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -import org.jhotdraw.samples.javadraw.BouncingDrawing; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BouncingDrawingTest is generated by - * JUnitDoclet to hold the tests for BouncingDrawing. - * @see org.jhotdraw.samples.javadraw.BouncingDrawing - */ -// JUnitDoclet end javadoc_class -public class BouncingDrawingTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BouncingDrawing bouncingdrawing; - // JUnitDoclet end class - - /** - * Constructor BouncingDrawingTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BouncingDrawingTest(String name) { - // JUnitDoclet begin method BouncingDrawingTest - super(name); - // JUnitDoclet end method BouncingDrawingTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public BouncingDrawing createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new BouncingDrawing(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bouncingdrawing = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bouncingdrawing = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.samples.javadraw.BouncingDrawing#add(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.samples.javadraw.BouncingDrawing#remove(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method replace() - /** - * Method testReplace is testing replace - * @see org.jhotdraw.samples.javadraw.BouncingDrawing#replace(org.jhotdraw.framework.Figure, org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method replace() - public void testReplace() throws Exception { - // JUnitDoclet begin method replace - // JUnitDoclet end method replace - } - - // JUnitDoclet begin javadoc_method animationStep() - /** - * Method testAnimationStep is testing animationStep - * @see org.jhotdraw.samples.javadraw.BouncingDrawing#animationStep() - */ - // JUnitDoclet end javadoc_method animationStep() - public void testAnimationStep() throws Exception { - // JUnitDoclet begin method animationStep - // JUnitDoclet end method animationStep - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawAppTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawAppTest.java deleted file mode 100644 index e17cc2c90..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawAppTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -// JUnitDoclet begin import -import org.jhotdraw.application.DrawApplication; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JavaDrawAppTest is generated by - * JUnitDoclet to hold the tests for JavaDrawApp. - * @see org.jhotdraw.samples.javadraw.JavaDrawApp - */ -// JUnitDoclet end javadoc_class -public class JavaDrawAppTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DrawApplication myDrawApplication; - // JUnitDoclet end class - - /** - * Constructor JavaDrawAppTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JavaDrawAppTest(String name) { - // JUnitDoclet begin method JavaDrawAppTest - super(name); - // JUnitDoclet end method JavaDrawAppTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public DrawApplication createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return getDrawingEditor(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - myDrawApplication = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - myDrawApplication = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method destroy() - /** - * Method testDestroy is testing destroy - * @see org.jhotdraw.samples.javadraw.JavaDrawApp#destroy() - */ - // JUnitDoclet end javadoc_method destroy() - public void testDestroy() throws Exception { - // JUnitDoclet begin method destroy - // JUnitDoclet end method destroy - } - - // JUnitDoclet begin javadoc_method startAnimation() - /** - * Method testStartAnimation is testing startAnimation - * @see org.jhotdraw.samples.javadraw.JavaDrawApp#startAnimation() - */ - // JUnitDoclet end javadoc_method startAnimation() - public void testStartAnimation() throws Exception { - // JUnitDoclet begin method startAnimation - // JUnitDoclet end method startAnimation - } - - // JUnitDoclet begin javadoc_method endAnimation() - /** - * Method testEndAnimation is testing endAnimation - * @see org.jhotdraw.samples.javadraw.JavaDrawApp#endAnimation() - */ - // JUnitDoclet end javadoc_method endAnimation() - public void testEndAnimation() throws Exception { - // JUnitDoclet begin method endAnimation - // JUnitDoclet end method endAnimation - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see org.jhotdraw.samples.javadraw.JavaDrawApp#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawAppletTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawAppletTest.java deleted file mode 100644 index 319a3e387..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawAppletTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -import org.jhotdraw.samples.javadraw.JavaDrawApplet; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JavaDrawAppletTest is generated by - * JUnitDoclet to hold the tests for JavaDrawApplet. - * @see org.jhotdraw.samples.javadraw.JavaDrawApplet - */ -// JUnitDoclet end javadoc_class -public class JavaDrawAppletTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JavaDrawApplet javadrawapplet; - // JUnitDoclet end class - - /** - * Constructor JavaDrawAppletTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JavaDrawAppletTest(String name) { - // JUnitDoclet begin method JavaDrawAppletTest - super(name); - // JUnitDoclet end method JavaDrawAppletTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public JavaDrawApplet createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new JavaDrawApplet(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - javadrawapplet = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - javadrawapplet = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method destroy() - /** - * Method testDestroy is testing destroy - * @see org.jhotdraw.samples.javadraw.JavaDrawApplet#destroy() - */ - // JUnitDoclet end javadoc_method destroy() - public void testDestroy() throws Exception { - // JUnitDoclet begin method destroy - // JUnitDoclet end method destroy - } - - // JUnitDoclet begin javadoc_method startAnimation() - /** - * Method testStartAnimation is testing startAnimation - * @see org.jhotdraw.samples.javadraw.JavaDrawApplet#startAnimation() - */ - // JUnitDoclet end javadoc_method startAnimation() - public void testStartAnimation() throws Exception { - // JUnitDoclet begin method startAnimation - // JUnitDoclet end method startAnimation - } - - // JUnitDoclet begin javadoc_method endAnimation() - /** - * Method testEndAnimation is testing endAnimation - * @see org.jhotdraw.samples.javadraw.JavaDrawApplet#endAnimation() - */ - // JUnitDoclet end javadoc_method endAnimation() - public void testEndAnimation() throws Exception { - // JUnitDoclet begin method endAnimation - // JUnitDoclet end method endAnimation - } - - // JUnitDoclet begin javadoc_method toggleAnimation() - /** - * Method testToggleAnimation is testing toggleAnimation - * @see org.jhotdraw.samples.javadraw.JavaDrawApplet#toggleAnimation() - */ - // JUnitDoclet end javadoc_method toggleAnimation() - public void testToggleAnimation() throws Exception { - // JUnitDoclet begin method toggleAnimation - // JUnitDoclet end method toggleAnimation - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawViewerTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawViewerTest.java deleted file mode 100644 index 5da8817e2..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavaDrawViewerTest.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -import org.jhotdraw.samples.javadraw.JavaDrawViewer; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase JavaDrawViewerTest is generated by - * JUnitDoclet to hold the tests for JavaDrawViewer. - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer - */ -// JUnitDoclet end javadoc_class -public class JavaDrawViewerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JavaDrawViewer javadrawviewer; - // JUnitDoclet end class - - /** - * Constructor JavaDrawViewerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JavaDrawViewerTest(String name) { - // JUnitDoclet begin method JavaDrawViewerTest - super(name); - // JUnitDoclet end method JavaDrawViewerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public JavaDrawViewer createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new JavaDrawViewer(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - javadrawviewer = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - javadrawviewer = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method init() - /** - * Method testInit is testing init - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#init() - */ - // JUnitDoclet end javadoc_method init() - public void testInit() throws Exception { - // JUnitDoclet begin method init - // JUnitDoclet end method init - } - - // JUnitDoclet begin javadoc_method addViewChangeListener() - /** - * Method testAddViewChangeListener is testing addViewChangeListener - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#addViewChangeListener(org.jhotdraw.framework.ViewChangeListener) - */ - // JUnitDoclet end javadoc_method addViewChangeListener() - public void testAddViewChangeListener() throws Exception { - // JUnitDoclet begin method addViewChangeListener - // JUnitDoclet end method addViewChangeListener - } - - // JUnitDoclet begin javadoc_method removeViewChangeListener() - /** - * Method testRemoveViewChangeListener is testing removeViewChangeListener - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#removeViewChangeListener(org.jhotdraw.framework.ViewChangeListener) - */ - // JUnitDoclet end javadoc_method removeViewChangeListener() - public void testRemoveViewChangeListener() throws Exception { - // JUnitDoclet begin method removeViewChangeListener - // JUnitDoclet end method removeViewChangeListener - } - - // JUnitDoclet begin javadoc_method view() - /** - * Method testView is testing view - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#view() - */ - // JUnitDoclet end javadoc_method view() - public void testView() throws Exception { - // JUnitDoclet begin method view - // JUnitDoclet end method view - } - - // JUnitDoclet begin javadoc_method views() - /** - * Method testViews is testing views - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#views() - */ - // JUnitDoclet end javadoc_method views() - public void testViews() throws Exception { - // JUnitDoclet begin method views - // JUnitDoclet end method views - } - - // JUnitDoclet begin javadoc_method drawing() - /** - * Method testDrawing is testing drawing - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#drawing() - */ - // JUnitDoclet end javadoc_method drawing() - public void testDrawing() throws Exception { - // JUnitDoclet begin method drawing - // JUnitDoclet end method drawing - } - - // JUnitDoclet begin javadoc_method tool() - /** - * Method testTool is testing tool - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#tool() - */ - // JUnitDoclet end javadoc_method tool() - public void testTool() throws Exception { - // JUnitDoclet begin method tool - // JUnitDoclet end method tool - } - - // JUnitDoclet begin javadoc_method setTool() - /** - * Method testSetTool is testing setTool - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#setTool(org.jhotdraw.framework.Tool) - */ - // JUnitDoclet end javadoc_method setTool() - public void testSetTool() throws Exception { - // JUnitDoclet begin method setTool - // JUnitDoclet end method setTool - } - - // JUnitDoclet begin javadoc_method toolDone() - /** - * Method testToolDone is testing toolDone - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#toolDone() - */ - // JUnitDoclet end javadoc_method toolDone() - public void testToolDone() throws Exception { - // JUnitDoclet begin method toolDone - // JUnitDoclet end method toolDone - } - - // JUnitDoclet begin javadoc_method figureSelectionChanged() - /** - * Method testFigureSelectionChanged is testing figureSelectionChanged - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#figureSelectionChanged(org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method figureSelectionChanged() - public void testFigureSelectionChanged() throws Exception { - // JUnitDoclet begin method figureSelectionChanged - // JUnitDoclet end method figureSelectionChanged - } - - // JUnitDoclet begin javadoc_method getUndoManager() - /** - * Method testGetUndoManager is testing getUndoManager - * @see org.jhotdraw.samples.javadraw.JavaDrawViewer#getUndoManager() - */ - // JUnitDoclet end javadoc_method getUndoManager() - public void testGetUndoManager() throws Exception { - // JUnitDoclet begin method getUndoManager - // JUnitDoclet end method getUndoManager - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavadrawSuite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavadrawSuite.java deleted file mode 100644 index d979d98c0..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/JavadrawSuite.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite JavadrawSuite -*/ -// JUnitDoclet end javadoc_class -public class JavadrawSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.samples.javadraw"); - - suite.addTestSuite(org.jhotdraw.test.samples.javadraw.URLToolTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.javadraw.PatternPainterTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.javadraw.MySelectionToolTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.javadraw.JavaDrawViewerTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.javadraw.JavaDrawAppletTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.javadraw.JavaDrawAppTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.javadraw.BouncingDrawingTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.javadraw.AnimatorTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.javadraw.AnimationDecoratorTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/MySelectionToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/MySelectionToolTest.java deleted file mode 100644 index 61f91e401..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/MySelectionToolTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -// JUnitDoclet begin import -import org.jhotdraw.samples.javadraw.MySelectionTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MySelectionToolTest is generated by - * JUnitDoclet to hold the tests for MySelectionTool. - * @see org.jhotdraw.samples.javadraw.MySelectionTool - */ -// JUnitDoclet end javadoc_class -public class MySelectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MySelectionTool myselectiontool; - // JUnitDoclet end class - - /** - * Constructor MySelectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MySelectionToolTest(String name) { - // JUnitDoclet begin method MySelectionToolTest - super(name); - // JUnitDoclet end method MySelectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public MySelectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new MySelectionTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - myselectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - myselectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.samples.javadraw.MySelectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/PatternPainterTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/PatternPainterTest.java deleted file mode 100644 index c2d67f708..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/PatternPainterTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -import java.awt.Image; - -// JUnitDoclet begin import -import org.jhotdraw.application.DrawApplication; -import org.jhotdraw.samples.javadraw.PatternPainter; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.Iconkit; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PatternPainterTest is generated by - * JUnitDoclet to hold the tests for PatternPainter. - * @see org.jhotdraw.samples.javadraw.PatternPainter - */ -// JUnitDoclet end javadoc_class -public class PatternPainterTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PatternPainter patternpainter; - // JUnitDoclet end class - - /** - * Constructor PatternPainterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PatternPainterTest(String name) { - // JUnitDoclet begin method PatternPainterTest - super(name); - // JUnitDoclet end method PatternPainterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PatternPainter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Image img = Iconkit.instance().loadImage(DrawApplication.IMAGES + "SEL1.gif", true); - return new PatternPainter(img); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - patternpainter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - patternpainter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.samples.javadraw.PatternPainter#draw(java.awt.Graphics, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/URLToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/URLToolTest.java deleted file mode 100644 index bcda39a71..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/javadraw/URLToolTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.javadraw; - -// JUnitDoclet begin import -import org.jhotdraw.samples.javadraw.URLTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase URLToolTest is generated by - * JUnitDoclet to hold the tests for URLTool. - * @see org.jhotdraw.samples.javadraw.URLTool - */ -// JUnitDoclet end javadoc_class -public class URLToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private URLTool urltool; - // JUnitDoclet end class - - /** - * Constructor URLToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public URLToolTest(String name) { - // JUnitDoclet begin method URLToolTest - super(name); - // JUnitDoclet end method URLToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public URLTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new URLTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - urltool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - urltool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.samples.javadraw.URLTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.samples.javadraw.URLTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.samples.javadraw.URLTool#deactivate(org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/AllTests.java deleted file mode 100644 index f6772a57d..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/AllTests.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.minimap; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.samples.minimap"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(MiniMapApplicationTest.class)); - suite.addTest(new TestSuite(MiniMapDesktopTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MiniMapApplicationTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MiniMapApplicationTest.java deleted file mode 100644 index 0470f6a2a..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MiniMapApplicationTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.minimap; - -import org.jhotdraw.samples.minimap.MiniMapApplication; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MiniMapApplicationTest is generated by - * JUnitDoclet to hold the tests for MiniMapApplication. - * @see org.jhotdraw.samples.minimap.MiniMapApplication - */ -// JUnitDoclet end javadoc_class -public class MiniMapApplicationTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MiniMapApplication minimapapplication; - // JUnitDoclet end class - - /** - * Constructor MiniMapApplicationTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MiniMapApplicationTest(String name) { - // JUnitDoclet begin method MiniMapApplicationTest - super(name); - // JUnitDoclet end method MiniMapApplicationTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public MiniMapApplication createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new MiniMapApplication(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - minimapapplication = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - minimapapplication = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see org.jhotdraw.samples.minimap.MiniMapApplication#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MiniMapDesktopTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MiniMapDesktopTest.java deleted file mode 100644 index b6eb3eb2f..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MiniMapDesktopTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.minimap; - -import org.jhotdraw.samples.minimap.MiniMapDesktop; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MiniMapDesktopTest is generated by - * JUnitDoclet to hold the tests for MiniMapDesktop. - * @see org.jhotdraw.samples.minimap.MiniMapDesktop - */ -// JUnitDoclet end javadoc_class -public class MiniMapDesktopTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MiniMapDesktop minimapdesktop; - // JUnitDoclet end class - - /** - * Constructor MiniMapDesktopTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MiniMapDesktopTest(String name) { - // JUnitDoclet begin method MiniMapDesktopTest - super(name); - // JUnitDoclet end method MiniMapDesktopTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public MiniMapDesktop createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new MiniMapDesktop(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - minimapdesktop = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - minimapdesktop = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MinimapSuite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MinimapSuite.java deleted file mode 100644 index 81b2abe48..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/minimap/MinimapSuite.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.minimap; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite MinimapSuite -*/ -// JUnitDoclet end javadoc_class -public class MinimapSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.samples.minimap"); - - suite.addTestSuite(org.jhotdraw.test.samples.minimap.MiniMapDesktopTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.minimap.MiniMapApplicationTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/AllTests.java deleted file mode 100644 index cddd3287c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/AllTests.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.net; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.samples.net"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(NetAppTest.class)); - suite.addTest(new TestSuite(NodeFigureTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NetAppTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NetAppTest.java deleted file mode 100644 index bb1262e3c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NetAppTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.net; - -import org.jhotdraw.samples.net.NetApp; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NetAppTest is generated by - * JUnitDoclet to hold the tests for NetApp. - * @see org.jhotdraw.samples.net.NetApp - */ -// JUnitDoclet end javadoc_class -public class NetAppTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NetApp netapp; - // JUnitDoclet end class - - /** - * Constructor NetAppTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NetAppTest(String name) { - // JUnitDoclet begin method NetAppTest - super(name); - // JUnitDoclet end method NetAppTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NetApp createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NetApp(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - netapp = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - netapp = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see org.jhotdraw.samples.net.NetApp#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NetSuite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NetSuite.java deleted file mode 100644 index ca8ac05a3..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NetSuite.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)NetSuite - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.net; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite NetSuite -*/ -// JUnitDoclet end javadoc_class -public class NetSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.samples.net"); - - suite.addTestSuite(org.jhotdraw.test.samples.net.NodeFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.net.NetAppTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NodeFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NodeFigureTest.java deleted file mode 100644 index dd8b0444f..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/net/NodeFigureTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.net; - -import org.jhotdraw.samples.net.NodeFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NodeFigureTest is generated by - * JUnitDoclet to hold the tests for NodeFigure. - * @see org.jhotdraw.samples.net.NodeFigure - */ -// JUnitDoclet end javadoc_class -public class NodeFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NodeFigure nodefigure; - // JUnitDoclet end class - - /** - * Constructor NodeFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NodeFigureTest(String name) { - // JUnitDoclet begin method NodeFigureTest - super(name); - // JUnitDoclet end method NodeFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NodeFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NodeFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nodefigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nodefigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.samples.net.NodeFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see org.jhotdraw.samples.net.NodeFigure#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.samples.net.NodeFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.samples.net.NodeFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method connectorVisibility() - /** - * Method testConnectorVisibility is testing connectorVisibility - * @see org.jhotdraw.samples.net.NodeFigure#connectorVisibility(boolean, org.jhotdraw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method connectorVisibility() - public void testConnectorVisibility() throws Exception { - // JUnitDoclet begin method connectorVisibility - // JUnitDoclet end method connectorVisibility - } - - // JUnitDoclet begin javadoc_method connectorAt() - /** - * Method testConnectorAt is testing connectorAt - * @see org.jhotdraw.samples.net.NodeFigure#connectorAt(int, int) - */ - // JUnitDoclet end javadoc_method connectorAt() - public void testConnectorAt() throws Exception { - // JUnitDoclet begin method connectorAt - // JUnitDoclet end method connectorAt - } - - // JUnitDoclet begin javadoc_method getRepresentingFigure() - /** - * Method testGetRepresentingFigure is testing getRepresentingFigure - * @see org.jhotdraw.samples.net.NodeFigure#getRepresentingFigure() - */ - // JUnitDoclet end javadoc_method getRepresentingFigure() - public void testGetRepresentingFigure() throws Exception { - // JUnitDoclet begin method getRepresentingFigure - // JUnitDoclet end method getRepresentingFigure - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/AllTests.java deleted file mode 100644 index 0cdeb70e9..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/AllTests.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.nothing; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.samples.nothing"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(NothingAppTest.class)); - suite.addTest(new TestSuite(NothingAppletTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingAppTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingAppTest.java deleted file mode 100644 index fb1b17de6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingAppTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.nothing; - -import org.jhotdraw.samples.nothing.NothingApp; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NothingAppTest is generated by - * JUnitDoclet to hold the tests for NothingApp. - * @see org.jhotdraw.samples.nothing.NothingApp - */ -// JUnitDoclet end javadoc_class -public class NothingAppTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NothingApp nothingapp; - // JUnitDoclet end class - - /** - * Constructor NothingAppTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NothingAppTest(String name) { - // JUnitDoclet begin method NothingAppTest - super(name); - // JUnitDoclet end method NothingAppTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NothingApp createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NothingApp(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nothingapp = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nothingapp = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see org.jhotdraw.samples.nothing.NothingApp#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingAppletTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingAppletTest.java deleted file mode 100644 index d30b85f6d..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingAppletTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.nothing; - -import org.jhotdraw.samples.nothing.NothingApplet; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NothingAppletTest is generated by - * JUnitDoclet to hold the tests for NothingApplet. - * @see org.jhotdraw.samples.nothing.NothingApplet - */ -// JUnitDoclet end javadoc_class -public class NothingAppletTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NothingApplet nothingapplet; - // JUnitDoclet end class - - /** - * Constructor NothingAppletTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NothingAppletTest(String name) { - // JUnitDoclet begin method NothingAppletTest - super(name); - // JUnitDoclet end method NothingAppletTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NothingApplet createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NothingApplet(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nothingapplet = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nothingapplet = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingSuite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingSuite.java deleted file mode 100644 index 63d5209d9..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/nothing/NothingSuite.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.nothing; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite NothingSuite -*/ -// JUnitDoclet end javadoc_class -public class NothingSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.samples.nothing"); - - suite.addTestSuite(org.jhotdraw.test.samples.nothing.NothingAppletTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.nothing.NothingAppTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/AllTests.java deleted file mode 100644 index 90e7bfa02..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/AllTests.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.pert; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.samples.pert"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(PertAppletTest.class)); - suite.addTest(new TestSuite(PertApplicationTest.class)); - suite.addTest(new TestSuite(PertDependencyTest.class)); - suite.addTest(new TestSuite(PertFigureCreationToolTest.class)); - suite.addTest(new TestSuite(PertFigureTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertAppletTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertAppletTest.java deleted file mode 100644 index 8e8124a19..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertAppletTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.pert; - -import org.jhotdraw.samples.pert.PertApplet; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertAppletTest is generated by - * JUnitDoclet to hold the tests for PertApplet. - * @see org.jhotdraw.samples.pert.PertApplet - */ -// JUnitDoclet end javadoc_class -public class PertAppletTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertApplet pertapplet; - // JUnitDoclet end class - - /** - * Constructor PertAppletTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertAppletTest(String name) { - // JUnitDoclet begin method PertAppletTest - super(name); - // JUnitDoclet end method PertAppletTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PertApplet createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PertApplet(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertapplet = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertapplet = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertApplicationTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertApplicationTest.java deleted file mode 100644 index ba0b7b514..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertApplicationTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.pert; - -import org.jhotdraw.samples.pert.PertApplication; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertApplicationTest is generated by - * JUnitDoclet to hold the tests for PertApplication. - * @see org.jhotdraw.samples.pert.PertApplication - */ -// JUnitDoclet end javadoc_class -public class PertApplicationTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertApplication pertapplication; - // JUnitDoclet end class - - /** - * Constructor PertApplicationTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertApplicationTest(String name) { - // JUnitDoclet begin method PertApplicationTest - super(name); - // JUnitDoclet end method PertApplicationTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PertApplication createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PertApplication(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertapplication = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertapplication = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see org.jhotdraw.samples.pert.PertApplication#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertDependencyTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertDependencyTest.java deleted file mode 100644 index 1f4832f78..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertDependencyTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.pert; - -import org.jhotdraw.samples.pert.PertDependency; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertDependencyTest is generated by - * JUnitDoclet to hold the tests for PertDependency. - * @see org.jhotdraw.samples.pert.PertDependency - */ -// JUnitDoclet end javadoc_class -public class PertDependencyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertDependency pertdependency; - // JUnitDoclet end class - - /** - * Constructor PertDependencyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertDependencyTest(String name) { - // JUnitDoclet begin method PertDependencyTest - super(name); - // JUnitDoclet end method PertDependencyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PertDependency createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PertDependency(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertdependency = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertdependency = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method handleConnect() - /** - * Method testHandleConnect is testing handleConnect - * @see org.jhotdraw.samples.pert.PertDependency#handleConnect(org.jhotdraw.framework.Figure, org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method handleConnect() - public void testHandleConnect() throws Exception { - // JUnitDoclet begin method handleConnect - // JUnitDoclet end method handleConnect - } - - // JUnitDoclet begin javadoc_method handleDisconnect() - /** - * Method testHandleDisconnect is testing handleDisconnect - * @see org.jhotdraw.samples.pert.PertDependency#handleDisconnect(org.jhotdraw.framework.Figure, org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method handleDisconnect() - public void testHandleDisconnect() throws Exception { - // JUnitDoclet begin method handleDisconnect - // JUnitDoclet end method handleDisconnect - } - - // JUnitDoclet begin javadoc_method canConnect() - /** - * Method testCanConnect is testing canConnect - * @see org.jhotdraw.samples.pert.PertDependency#canConnect(org.jhotdraw.framework.Figure, org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method canConnect() - public void testCanConnect() throws Exception { - // JUnitDoclet begin method canConnect - // JUnitDoclet end method canConnect - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.samples.pert.PertDependency#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertFigureCreationToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertFigureCreationToolTest.java deleted file mode 100644 index fd0a8c5d0..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertFigureCreationToolTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.pert; - -// JUnitDoclet begin import -import org.jhotdraw.samples.pert.PertFigureCreationTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertFigureCreationToolTest is generated by - * JUnitDoclet to hold the tests for PertFigureCreationTool. - * @see org.jhotdraw.samples.pert.PertFigureCreationTool - */ -// JUnitDoclet end javadoc_class -public class PertFigureCreationToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertFigureCreationTool pertfigurecreationtool; - // JUnitDoclet end class - - /** - * Constructor PertFigureCreationToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertFigureCreationToolTest(String name) { - // JUnitDoclet begin method PertFigureCreationToolTest - super(name); - // JUnitDoclet end method PertFigureCreationToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PertFigureCreationTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PertFigureCreationTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertfigurecreationtool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertfigurecreationtool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertFigureTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertFigureTest.java deleted file mode 100644 index 5fe67506e..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertFigureTest.java +++ /dev/null @@ -1,357 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.pert; - -import org.jhotdraw.samples.pert.PertFigure; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - - -// JUnitDoclet begin javadoc_class -/** - * TestCase PertFigureTest is generated by - * JUnitDoclet to hold the tests for PertFigure. - * @see org.jhotdraw.samples.pert.PertFigure - */ -// JUnitDoclet end javadoc_class -public class PertFigureTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PertFigure pertfigure; - // JUnitDoclet end class - - /** - * Constructor PertFigureTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PertFigureTest(String name) { - // JUnitDoclet begin method PertFigureTest - super(name); - // JUnitDoclet end method PertFigureTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PertFigure createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PertFigure(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pertfigure = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pertfigure = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method start() - /** - * Method testStart is testing start - * @see org.jhotdraw.samples.pert.PertFigure#start() - */ - // JUnitDoclet end javadoc_method start() - public void testStart() throws Exception { - // JUnitDoclet begin method start - // JUnitDoclet end method start - } - - // JUnitDoclet begin javadoc_method end() - /** - * Method testEnd is testing end - * @see org.jhotdraw.samples.pert.PertFigure#end() - */ - // JUnitDoclet end javadoc_method end() - public void testEnd() throws Exception { - // JUnitDoclet begin method end - // JUnitDoclet end method end - } - - // JUnitDoclet begin javadoc_method duration() - /** - * Method testDuration is testing duration - * @see org.jhotdraw.samples.pert.PertFigure#duration() - */ - // JUnitDoclet end javadoc_method duration() - public void testDuration() throws Exception { - // JUnitDoclet begin method duration - // JUnitDoclet end method duration - } - - // JUnitDoclet begin javadoc_method setEnd() - /** - * Method testSetEnd is testing setEnd - * @see org.jhotdraw.samples.pert.PertFigure#setEnd(int) - */ - // JUnitDoclet end javadoc_method setEnd() - public void testSetEnd() throws Exception { - // JUnitDoclet begin method setEnd - // JUnitDoclet end method setEnd - } - - // JUnitDoclet begin javadoc_method addPreTask() - /** - * Method testAddPreTask is testing addPreTask - * @see org.jhotdraw.samples.pert.PertFigure#addPreTask(org.jhotdraw.samples.pert.PertFigure) - */ - // JUnitDoclet end javadoc_method addPreTask() - public void testAddPreTask() throws Exception { - // JUnitDoclet begin method addPreTask - // JUnitDoclet end method addPreTask - } - - // JUnitDoclet begin javadoc_method addPostTask() - /** - * Method testAddPostTask is testing addPostTask - * @see org.jhotdraw.samples.pert.PertFigure#addPostTask(org.jhotdraw.samples.pert.PertFigure) - */ - // JUnitDoclet end javadoc_method addPostTask() - public void testAddPostTask() throws Exception { - // JUnitDoclet begin method addPostTask - // JUnitDoclet end method addPostTask - } - - // JUnitDoclet begin javadoc_method removePreTask() - /** - * Method testRemovePreTask is testing removePreTask - * @see org.jhotdraw.samples.pert.PertFigure#removePreTask(org.jhotdraw.samples.pert.PertFigure) - */ - // JUnitDoclet end javadoc_method removePreTask() - public void testRemovePreTask() throws Exception { - // JUnitDoclet begin method removePreTask - // JUnitDoclet end method removePreTask - } - - // JUnitDoclet begin javadoc_method removePostTask() - /** - * Method testRemovePostTask is testing removePostTask - * @see org.jhotdraw.samples.pert.PertFigure#removePostTask(org.jhotdraw.samples.pert.PertFigure) - */ - // JUnitDoclet end javadoc_method removePostTask() - public void testRemovePostTask() throws Exception { - // JUnitDoclet begin method removePostTask - // JUnitDoclet end method removePostTask - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.samples.pert.PertFigure#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.samples.pert.PertFigure#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.samples.pert.PertFigure#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.samples.pert.PertFigure#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method update() - /** - * Method testUpdate is testing update - * @see org.jhotdraw.samples.pert.PertFigure#update(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method update() - public void testUpdate() throws Exception { - // JUnitDoclet begin method update - // JUnitDoclet end method update - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see org.jhotdraw.samples.pert.PertFigure#figureChanged(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see org.jhotdraw.samples.pert.PertFigure#figureRemoved(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method notifyPostTasks() - /** - * Method testNotifyPostTasks is testing notifyPostTasks - * @see org.jhotdraw.samples.pert.PertFigure#notifyPostTasks() - */ - // JUnitDoclet end javadoc_method notifyPostTasks() - public void testNotifyPostTasks() throws Exception { - // JUnitDoclet begin method notifyPostTasks - // JUnitDoclet end method notifyPostTasks - } - - // JUnitDoclet begin javadoc_method updateDurations() - /** - * Method testUpdateDurations is testing updateDurations - * @see org.jhotdraw.samples.pert.PertFigure#updateDurations() - */ - // JUnitDoclet end javadoc_method updateDurations() - public void testUpdateDurations() throws Exception { - // JUnitDoclet begin method updateDurations - // JUnitDoclet end method updateDurations - } - - // JUnitDoclet begin javadoc_method hasCycle() - /** - * Method testHasCycle is testing hasCycle - * @see org.jhotdraw.samples.pert.PertFigure#hasCycle(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method hasCycle() - public void testHasCycle() throws Exception { - // JUnitDoclet begin method hasCycle - // JUnitDoclet end method hasCycle - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.samples.pert.PertFigure#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method writeTasks() - /** - * Method testWriteTasks is testing writeTasks - * @see org.jhotdraw.samples.pert.PertFigure#writeTasks(org.jhotdraw.util.StorableOutput, java.util.List) - */ - // JUnitDoclet end javadoc_method writeTasks() - public void testWriteTasks() throws Exception { - // JUnitDoclet begin method writeTasks - // JUnitDoclet end method writeTasks - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.samples.pert.PertFigure#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method connectionInsets() - /** - * Method testConnectionInsets is testing connectionInsets - * @see org.jhotdraw.samples.pert.PertFigure#connectionInsets() - */ - // JUnitDoclet end javadoc_method connectionInsets() - public void testConnectionInsets() throws Exception { - // JUnitDoclet begin method connectionInsets - // JUnitDoclet end method connectionInsets - } - - // JUnitDoclet begin javadoc_method readTasks() - /** - * Method testReadTasks is testing readTasks - * @see org.jhotdraw.samples.pert.PertFigure#readTasks(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method readTasks() - public void testReadTasks() throws Exception { - // JUnitDoclet begin method readTasks - // JUnitDoclet end method readTasks - } - - - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertSuite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertSuite.java deleted file mode 100644 index 70773af8a..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/samples/pert/PertSuite.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.samples.pert; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite PertSuite -*/ -// JUnitDoclet end javadoc_class -public class PertSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.samples.pert"); - - suite.addTestSuite(org.jhotdraw.test.samples.pert.PertFigureCreationToolTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.pert.PertFigureTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.pert.PertDependencyTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.pert.PertApplicationTest.class); - suite.addTestSuite(org.jhotdraw.test.samples.pert.PertAppletTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/AlignCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/AlignCommandTest.java deleted file mode 100644 index fe0ed0257..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/AlignCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.AlignCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase AlignCommandTest is generated by - * JUnitDoclet to hold the tests for AlignCommand. - * @see org.jhotdraw.standard.AlignCommand - */ -// JUnitDoclet end javadoc_class -public class AlignCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private AlignCommand aligncommand; - // JUnitDoclet end class - - /** - * Constructor AlignCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public AlignCommandTest(String name) { - // JUnitDoclet begin method AlignCommandTest - super(name); - // JUnitDoclet end method AlignCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public AlignCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new AlignCommand(AlignCommand.Alignment.TOPS, getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - aligncommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - aligncommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.AlignCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method getAlignment() - /** - * Method testGetAlignment is testing getAlignment - * @see org.jhotdraw.standard.AlignCommand#getAlignment() - */ - // JUnitDoclet end javadoc_method getAlignment() - public void testGetAlignment() throws Exception { - // JUnitDoclet begin method getAlignment - // JUnitDoclet end method getAlignment - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/AllTests.java deleted file mode 100644 index d1cb1767d..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/AllTests.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.standard"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(AlignCommandTest.class)); - suite.addTest(new TestSuite(BoxHandleKitTest.class)); - suite.addTest(new TestSuite(BringToFrontCommandTest.class)); - suite.addTest(new TestSuite(BufferedUpdateStrategyTest.class)); - suite.addTest(new TestSuite(ChangeAttributeCommandTest.class)); - suite.addTest(new TestSuite(ChangeConnectionEndHandleTest.class)); - suite.addTest(new TestSuite(ChangeConnectionStartHandleTest.class)); - suite.addTest(new TestSuite(ChopBoxConnectorTest.class)); - suite.addTest(new TestSuite(ConnectionHandleTest.class)); - suite.addTest(new TestSuite(ConnectionToolTest.class)); - suite.addTest(new TestSuite(CopyCommandTest.class)); - suite.addTest(new TestSuite(CreationToolTest.class)); - suite.addTest(new TestSuite(CutCommandTest.class)); - suite.addTest(new TestSuite(DeleteCommandTest.class)); - suite.addTest(new TestSuite(DeleteFromDrawingVisitorTest.class)); - suite.addTest(new TestSuite(DragTrackerTest.class)); - suite.addTest(new TestSuite(DuplicateCommandTest.class)); - suite.addTest(new TestSuite(FastBufferedUpdateStrategyTest.class)); - suite.addTest(new TestSuite(FigureAndEnumeratorTest.class)); - suite.addTest(new TestSuite(FigureChangeAdapterTest.class)); - suite.addTest(new TestSuite(FigureChangeEventMulticasterTest.class)); - suite.addTest(new TestSuite(FigureEnumeratorTest.class)); - suite.addTest(new TestSuite(GridConstrainerTest.class)); - suite.addTest(new TestSuite(HandleAndEnumeratorTest.class)); - suite.addTest(new TestSuite(HandleEnumeratorTest.class)); - suite.addTest(new TestSuite(HandleTrackerTest.class)); - suite.addTest(new TestSuite(InsertIntoDrawingVisitorTest.class)); - suite.addTest(new TestSuite(LocatorConnectorTest.class)); - suite.addTest(new TestSuite(LocatorHandleTest.class)); - suite.addTest(new TestSuite(NullDrawingViewTest.class)); - suite.addTest(new TestSuite(NullHandleTest.class)); - suite.addTest(new TestSuite(NullToolTest.class)); - suite.addTest(new TestSuite(OffsetLocatorTest.class)); - suite.addTest(new TestSuite(PasteCommandTest.class)); - suite.addTest(new TestSuite(PeripheralLocatorTest.class)); - suite.addTest(new TestSuite(RelativeLocatorTest.class)); - suite.addTest(new TestSuite(ReverseFigureEnumeratorTest.class)); - suite.addTest(new TestSuite(SelectAllCommandTest.class)); - suite.addTest(new TestSuite(SelectAreaTrackerTest.class)); - suite.addTest(new TestSuite(SelectionToolTest.class)); - suite.addTest(new TestSuite(SendToBackCommandTest.class)); - suite.addTest(new TestSuite(SimpleUpdateStrategyTest.class)); - suite.addTest(new TestSuite(SingleFigureEnumeratorTest.class)); - suite.addTest(new TestSuite(StandardDrawingTest.class)); - suite.addTest(new TestSuite(StandardDrawingViewTest.class)); - suite.addTest(new TestSuite(StandardFigureSelectionTest.class)); - suite.addTest(new TestSuite(ToggleGridCommandTest.class)); - suite.addTest(new TestSuite(ToolButtonTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/BoxHandleKitTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/BoxHandleKitTest.java deleted file mode 100644 index a94bd63b3..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/BoxHandleKitTest.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.BoxHandleKit; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BoxHandleKitTest is generated by - * JUnitDoclet to hold the tests for BoxHandleKit. - * @see org.jhotdraw.standard.BoxHandleKit - */ -// JUnitDoclet end javadoc_class -public class BoxHandleKitTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BoxHandleKit boxhandlekit; - // JUnitDoclet end class - - /** - * Constructor BoxHandleKitTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BoxHandleKitTest(String name) { - // JUnitDoclet begin method BoxHandleKitTest - super(name); - // JUnitDoclet end method BoxHandleKitTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public BoxHandleKit createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new BoxHandleKit(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - boxhandlekit = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - boxhandlekit = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addCornerHandles() - /** - * Method testAddCornerHandles is testing addCornerHandles - * @see org.jhotdraw.standard.BoxHandleKit#addCornerHandles(org.jhotdraw.framework.Figure, java.util.List) - */ - // JUnitDoclet end javadoc_method addCornerHandles() - public void testAddCornerHandles() throws Exception { - // JUnitDoclet begin method addCornerHandles - // JUnitDoclet end method addCornerHandles - } - - // JUnitDoclet begin javadoc_method addHandles() - /** - * Method testAddHandles is testing addHandles - * @see org.jhotdraw.standard.BoxHandleKit#addHandles(org.jhotdraw.framework.Figure, java.util.List) - */ - // JUnitDoclet end javadoc_method addHandles() - public void testAddHandles() throws Exception { - // JUnitDoclet begin method addHandles - // JUnitDoclet end method addHandles - } - - // JUnitDoclet begin javadoc_method south() - /** - * Method testSouth is testing south - * @see org.jhotdraw.standard.BoxHandleKit#south(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method south() - public void testSouth() throws Exception { - // JUnitDoclet begin method south - // JUnitDoclet end method south - } - - // JUnitDoclet begin javadoc_method southEast() - /** - * Method testSouthEast is testing southEast - * @see org.jhotdraw.standard.BoxHandleKit#southEast(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method southEast() - public void testSouthEast() throws Exception { - // JUnitDoclet begin method southEast - // JUnitDoclet end method southEast - } - - // JUnitDoclet begin javadoc_method southWest() - /** - * Method testSouthWest is testing southWest - * @see org.jhotdraw.standard.BoxHandleKit#southWest(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method southWest() - public void testSouthWest() throws Exception { - // JUnitDoclet begin method southWest - // JUnitDoclet end method southWest - } - - // JUnitDoclet begin javadoc_method north() - /** - * Method testNorth is testing north - * @see org.jhotdraw.standard.BoxHandleKit#north(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method north() - public void testNorth() throws Exception { - // JUnitDoclet begin method north - // JUnitDoclet end method north - } - - // JUnitDoclet begin javadoc_method northEast() - /** - * Method testNorthEast is testing northEast - * @see org.jhotdraw.standard.BoxHandleKit#northEast(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method northEast() - public void testNorthEast() throws Exception { - // JUnitDoclet begin method northEast - // JUnitDoclet end method northEast - } - - // JUnitDoclet begin javadoc_method northWest() - /** - * Method testNorthWest is testing northWest - * @see org.jhotdraw.standard.BoxHandleKit#northWest(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method northWest() - public void testNorthWest() throws Exception { - // JUnitDoclet begin method northWest - // JUnitDoclet end method northWest - } - - // JUnitDoclet begin javadoc_method east() - /** - * Method testEast is testing east - * @see org.jhotdraw.standard.BoxHandleKit#east(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method east() - public void testEast() throws Exception { - // JUnitDoclet begin method east - // JUnitDoclet end method east - } - - // JUnitDoclet begin javadoc_method west() - /** - * Method testWest is testing west - * @see org.jhotdraw.standard.BoxHandleKit#west(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method west() - public void testWest() throws Exception { - // JUnitDoclet begin method west - // JUnitDoclet end method west - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/BringToFrontCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/BringToFrontCommandTest.java deleted file mode 100644 index 9812bd557..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/BringToFrontCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.BringToFrontCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BringToFrontCommandTest is generated by - * JUnitDoclet to hold the tests for BringToFrontCommand. - * @see org.jhotdraw.standard.BringToFrontCommand - */ -// JUnitDoclet end javadoc_class -public class BringToFrontCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BringToFrontCommand bringtofrontcommand; - // JUnitDoclet end class - - /** - * Constructor BringToFrontCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BringToFrontCommandTest(String name) { - // JUnitDoclet begin method BringToFrontCommandTest - super(name); - // JUnitDoclet end method BringToFrontCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public BringToFrontCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new BringToFrontCommand("TestBringToFront", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bringtofrontcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bringtofrontcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.BringToFrontCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see org.jhotdraw.standard.BringToFrontCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/BufferedUpdateStrategyTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/BufferedUpdateStrategyTest.java deleted file mode 100644 index f332c4a16..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/BufferedUpdateStrategyTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.BufferedUpdateStrategy; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BufferedUpdateStrategyTest is generated by - * JUnitDoclet to hold the tests for BufferedUpdateStrategy. - * @see org.jhotdraw.standard.BufferedUpdateStrategy - */ -// JUnitDoclet end javadoc_class -public class BufferedUpdateStrategyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private BufferedUpdateStrategy bufferedupdatestrategy; - // JUnitDoclet end class - - /** - * Constructor BufferedUpdateStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BufferedUpdateStrategyTest(String name) { - // JUnitDoclet begin method BufferedUpdateStrategyTest - super(name); - // JUnitDoclet end method BufferedUpdateStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public BufferedUpdateStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new BufferedUpdateStrategy(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bufferedupdatestrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bufferedupdatestrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.standard.BufferedUpdateStrategy#draw(java.awt.Graphics, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeAttributeCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeAttributeCommandTest.java deleted file mode 100644 index ba1e51bde..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeAttributeCommandTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Font; - -// JUnitDoclet begin import -import org.jhotdraw.framework.FigureAttributeConstant; -import org.jhotdraw.standard.ChangeAttributeCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChangeAttributeCommandTest is generated by - * JUnitDoclet to hold the tests for ChangeAttributeCommand. - * @see org.jhotdraw.standard.ChangeAttributeCommand - */ -// JUnitDoclet end javadoc_class -public class ChangeAttributeCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChangeAttributeCommand changeattributecommand; - // JUnitDoclet end class - - /** - * Constructor ChangeAttributeCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChangeAttributeCommandTest(String name) { - // JUnitDoclet begin method ChangeAttributeCommandTest - super(name); - // JUnitDoclet end method ChangeAttributeCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ChangeAttributeCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - FigureAttributeConstant fontStyle = FigureAttributeConstant.FONT_STYLE; - return new ChangeAttributeCommand("Bold", fontStyle, new Integer(Font.BOLD), getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - changeattributecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - changeattributecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.ChangeAttributeCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see org.jhotdraw.standard.ChangeAttributeCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeConnectionEndHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeConnectionEndHandleTest.java deleted file mode 100644 index db23f879f..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeConnectionEndHandleTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import junit.framework.TestCase; -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.standard.ChangeConnectionEndHandle; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChangeConnectionEndHandleTest is generated by - * JUnitDoclet to hold the tests for ChangeConnectionEndHandle. - * @see org.jhotdraw.standard.ChangeConnectionEndHandle - */ -// JUnitDoclet end javadoc_class -public class ChangeConnectionEndHandleTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChangeConnectionEndHandle changeconnectionendhandle; - // JUnitDoclet end class - - /** - * Constructor ChangeConnectionEndHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChangeConnectionEndHandleTest(String name) { - // JUnitDoclet begin method ChangeConnectionEndHandleTest - super(name); - // JUnitDoclet end method ChangeConnectionEndHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ChangeConnectionEndHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ChangeConnectionEndHandle(new LineConnection()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - changeconnectionendhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - changeconnectionendhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see org.jhotdraw.standard.ChangeConnectionEndHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeConnectionStartHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeConnectionStartHandleTest.java deleted file mode 100644 index a798bedbf..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChangeConnectionStartHandleTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import junit.framework.TestCase; -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.standard.ChangeConnectionStartHandle; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChangeConnectionStartHandleTest is generated by - * JUnitDoclet to hold the tests for ChangeConnectionStartHandle. - * @see org.jhotdraw.standard.ChangeConnectionStartHandle - */ -// JUnitDoclet end javadoc_class -public class ChangeConnectionStartHandleTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChangeConnectionStartHandle changeconnectionstarthandle; - // JUnitDoclet end class - - /** - * Constructor ChangeConnectionStartHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChangeConnectionStartHandleTest(String name) { - // JUnitDoclet begin method ChangeConnectionStartHandleTest - super(name); - // JUnitDoclet end method ChangeConnectionStartHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ChangeConnectionStartHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ChangeConnectionStartHandle(new LineConnection()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - changeconnectionstarthandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - changeconnectionstarthandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see org.jhotdraw.standard.ChangeConnectionStartHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChopBoxConnectorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChopBoxConnectorTest.java deleted file mode 100644 index 8b64d510e..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ChopBoxConnectorTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.ChopBoxConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ChopBoxConnectorTest is generated by - * JUnitDoclet to hold the tests for ChopBoxConnector. - * @see org.jhotdraw.standard.ChopBoxConnector - */ -// JUnitDoclet end javadoc_class -public class ChopBoxConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ChopBoxConnector chopboxconnector; - // JUnitDoclet end class - - /** - * Constructor ChopBoxConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ChopBoxConnectorTest(String name) { - // JUnitDoclet begin method ChopBoxConnectorTest - super(name); - // JUnitDoclet end method ChopBoxConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ChopBoxConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ChopBoxConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - chopboxconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - chopboxconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method findStart() - /** - * Method testFindStart is testing findStart - * @see org.jhotdraw.standard.ChopBoxConnector#findStart(org.jhotdraw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method findStart() - public void testFindStart() throws Exception { - // JUnitDoclet begin method findStart - // JUnitDoclet end method findStart - } - - // JUnitDoclet begin javadoc_method findEnd() - /** - * Method testFindEnd is testing findEnd - * @see org.jhotdraw.standard.ChopBoxConnector#findEnd(org.jhotdraw.framework.ConnectionFigure) - */ - // JUnitDoclet end javadoc_method findEnd() - public void testFindEnd() throws Exception { - // JUnitDoclet begin method findEnd - // JUnitDoclet end method findEnd - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ConnectionHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ConnectionHandleTest.java deleted file mode 100644 index d56ef4838..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ConnectionHandleTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.ConnectionHandle; -import org.jhotdraw.standard.RelativeLocator; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ConnectionHandleTest is generated by - * JUnitDoclet to hold the tests for ConnectionHandle. - * @see org.jhotdraw.standard.ConnectionHandle - */ -// JUnitDoclet end javadoc_class -public class ConnectionHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ConnectionHandle connectionhandle; - // JUnitDoclet end class - - /** - * Constructor ConnectionHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ConnectionHandleTest(String name) { - // JUnitDoclet begin method ConnectionHandleTest - super(name); - // JUnitDoclet end method ConnectionHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ConnectionHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ConnectionHandle(new RectangleFigure(new Point(10, 10), new Point(100, 100)), RelativeLocator.east(), new LineConnection()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - connectionhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - connectionhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see org.jhotdraw.standard.ConnectionHandle#invokeStart(int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see org.jhotdraw.standard.ConnectionHandle#invokeStep(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see org.jhotdraw.standard.ConnectionHandle#invokeEnd(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.standard.ConnectionHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ConnectionToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ConnectionToolTest.java deleted file mode 100644 index 9a27ebb34..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ConnectionToolTest.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.standard.ConnectionTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ConnectionToolTest is generated by - * JUnitDoclet to hold the tests for ConnectionTool. - * @see org.jhotdraw.standard.ConnectionTool - */ -// JUnitDoclet end javadoc_class -public class ConnectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ConnectionTool connectiontool; - // JUnitDoclet end class - - /** - * Constructor ConnectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ConnectionToolTest(String name) { - // JUnitDoclet begin method ConnectionToolTest - super(name); - // JUnitDoclet end method ConnectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ConnectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - LineConnection lineConn = new LineConnection(); - // todo: lineConn.connectStart(); - // todo: lineConn.connectEnd(); - return new ConnectionTool(getDrawingEditor(), lineConn); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - connectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - connectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see org.jhotdraw.standard.ConnectionTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.standard.ConnectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.standard.ConnectionTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.standard.ConnectionTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.standard.ConnectionTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/CopyCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/CopyCommandTest.java deleted file mode 100644 index 9f78ab349..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/CopyCommandTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.CopyCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CopyCommandTest is generated by - * JUnitDoclet to hold the tests for CopyCommand. - * @see org.jhotdraw.standard.CopyCommand - */ -// JUnitDoclet end javadoc_class -public class CopyCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CopyCommand copycommand; - // JUnitDoclet end class - - /** - * Constructor CopyCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CopyCommandTest(String name) { - // JUnitDoclet begin method CopyCommandTest - super(name); - // JUnitDoclet end method CopyCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CopyCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CopyCommand("TestCopy", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - copycommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - copycommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.CopyCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/CreationToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/CreationToolTest.java deleted file mode 100644 index c968c717c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/CreationToolTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.CreationTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CreationToolTest is generated by - * JUnitDoclet to hold the tests for CreationTool. - * @see org.jhotdraw.standard.CreationTool - */ -// JUnitDoclet end javadoc_class -public class CreationToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CreationTool creationtool; - // JUnitDoclet end class - - /** - * Constructor CreationToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CreationToolTest(String name) { - // JUnitDoclet begin method CreationToolTest - super(name); - // JUnitDoclet end method CreationToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CreationTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CreationTool(getDrawingEditor(), new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - creationtool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - creationtool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.standard.CreationTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.standard.CreationTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.standard.CreationTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.standard.CreationTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/CutCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/CutCommandTest.java deleted file mode 100644 index c35642b12..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/CutCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.CutCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CutCommandTest is generated by - * JUnitDoclet to hold the tests for CutCommand. - * @see org.jhotdraw.standard.CutCommand - */ -// JUnitDoclet end javadoc_class -public class CutCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CutCommand cutcommand; - // JUnitDoclet end class - - /** - * Constructor CutCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CutCommandTest(String name) { - // JUnitDoclet begin method CutCommandTest - super(name); - // JUnitDoclet end method CutCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CutCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CutCommand("TestCut", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - cutcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - cutcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.CutCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see org.jhotdraw.standard.CutCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DeleteCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DeleteCommandTest.java deleted file mode 100644 index 0303b16df..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DeleteCommandTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.DeleteCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DeleteCommandTest is generated by - * JUnitDoclet to hold the tests for DeleteCommand. - * @see org.jhotdraw.standard.DeleteCommand - */ -// JUnitDoclet end javadoc_class -public class DeleteCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DeleteCommand deletecommand; - // JUnitDoclet end class - - /** - * Constructor DeleteCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DeleteCommandTest(String name) { - // JUnitDoclet begin method DeleteCommandTest - super(name); - // JUnitDoclet end method DeleteCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public DeleteCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new DeleteCommand("TestDelete", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - deletecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - deletecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.DeleteCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DeleteFromDrawingVisitorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DeleteFromDrawingVisitorTest.java deleted file mode 100644 index 5bc3eb2b8..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DeleteFromDrawingVisitorTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.DeleteFromDrawingVisitor; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DeleteFromDrawingVisitorTest is generated by - * JUnitDoclet to hold the tests for DeleteFromDrawingVisitor. - * @see org.jhotdraw.standard.DeleteFromDrawingVisitor - */ -// JUnitDoclet end javadoc_class -public class DeleteFromDrawingVisitorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DeleteFromDrawingVisitor deletefromdrawingvisitor; - // JUnitDoclet end class - - /** - * Constructor DeleteFromDrawingVisitorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DeleteFromDrawingVisitorTest(String name) { - // JUnitDoclet begin method DeleteFromDrawingVisitorTest - super(name); - // JUnitDoclet end method DeleteFromDrawingVisitorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public DeleteFromDrawingVisitor createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new DeleteFromDrawingVisitor(getDrawingEditor().view().drawing()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - deletefromdrawingvisitor = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - deletefromdrawingvisitor = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method visitFigure() - /** - * Method testVisitFigure is testing visitFigure - * @see org.jhotdraw.standard.DeleteFromDrawingVisitor#visitFigure(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method visitFigure() - public void testVisitFigure() throws Exception { - // JUnitDoclet begin method visitFigure - // JUnitDoclet end method visitFigure - } - - // JUnitDoclet begin javadoc_method visitHandle() - /** - * Method testVisitHandle is testing visitHandle - * @see org.jhotdraw.standard.DeleteFromDrawingVisitor#visitHandle(org.jhotdraw.framework.Handle) - */ - // JUnitDoclet end javadoc_method visitHandle() - public void testVisitHandle() throws Exception { - // JUnitDoclet begin method visitHandle - // JUnitDoclet end method visitHandle - } - - // JUnitDoclet begin javadoc_method visitFigureChangeListener() - /** - * Method testVisitFigureChangeListener is testing visitFigureChangeListener - * @see org.jhotdraw.standard.DeleteFromDrawingVisitor#visitFigureChangeListener(org.jhotdraw.framework.FigureChangeListener) - */ - // JUnitDoclet end javadoc_method visitFigureChangeListener() - public void testVisitFigureChangeListener() throws Exception { - // JUnitDoclet begin method visitFigureChangeListener - // JUnitDoclet end method visitFigureChangeListener - } - - // JUnitDoclet begin javadoc_method getDeletedFigures() - /** - * Method testGetDeletedFigures is testing getDeletedFigures - * @see org.jhotdraw.standard.DeleteFromDrawingVisitor#getDeletedFigures() - */ - // JUnitDoclet end javadoc_method getDeletedFigures() - public void testGetDeletedFigures() throws Exception { - // JUnitDoclet begin method getDeletedFigures - // JUnitDoclet end method getDeletedFigures - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DragTrackerTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DragTrackerTest.java deleted file mode 100644 index ec261e4d2..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DragTrackerTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.DragTracker; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DragTrackerTest is generated by - * JUnitDoclet to hold the tests for DragTracker. - * @see org.jhotdraw.standard.DragTracker - */ -// JUnitDoclet end javadoc_class -public class DragTrackerTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DragTracker dragtracker; - // JUnitDoclet end class - - /** - * Constructor DragTrackerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DragTrackerTest(String name) { - // JUnitDoclet begin method DragTrackerTest - super(name); - // JUnitDoclet end method DragTrackerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public DragTracker createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new DragTracker(getDrawingEditor(), new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - dragtracker = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - dragtracker = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.standard.DragTracker#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.standard.DragTracker#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.standard.DragTracker#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.standard.DragTracker#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DuplicateCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DuplicateCommandTest.java deleted file mode 100644 index 78b8ee697..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/DuplicateCommandTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.DuplicateCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase DuplicateCommandTest is generated by - * JUnitDoclet to hold the tests for DuplicateCommand. - * @see org.jhotdraw.standard.DuplicateCommand - */ -// JUnitDoclet end javadoc_class -public class DuplicateCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private DuplicateCommand duplicatecommand; - // JUnitDoclet end class - - /** - * Constructor DuplicateCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public DuplicateCommandTest(String name) { - // JUnitDoclet begin method DuplicateCommandTest - super(name); - // JUnitDoclet end method DuplicateCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public DuplicateCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new DuplicateCommand("TestDuplicate", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - duplicatecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - duplicatecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.DuplicateCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FastBufferedUpdateStrategyTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FastBufferedUpdateStrategyTest.java deleted file mode 100644 index 1161d6616..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FastBufferedUpdateStrategyTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.FastBufferedUpdateStrategy; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FastBufferedUpdateStrategyTest is generated by - * JUnitDoclet to hold the tests for FastBufferedUpdateStrategy. - * @see org.jhotdraw.standard.FastBufferedUpdateStrategy - */ -// JUnitDoclet end javadoc_class -public class FastBufferedUpdateStrategyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FastBufferedUpdateStrategy fastbufferedupdatestrategy; - // JUnitDoclet end class - - /** - * Constructor FastBufferedUpdateStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FastBufferedUpdateStrategyTest(String name) { - // JUnitDoclet begin method FastBufferedUpdateStrategyTest - super(name); - // JUnitDoclet end method FastBufferedUpdateStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FastBufferedUpdateStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new FastBufferedUpdateStrategy(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - fastbufferedupdatestrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - fastbufferedupdatestrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.standard.FastBufferedUpdateStrategy#draw(java.awt.Graphics, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureAndEnumeratorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureAndEnumeratorTest.java deleted file mode 100644 index 8257516b1..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureAndEnumeratorTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; -import java.util.List; - -// JUnitDoclet begin import -import org.jhotdraw.figures.PolyLineFigure; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.FigureAndEnumerator; -import org.jhotdraw.standard.FigureEnumerator; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureAndEnumeratorTest is generated by - * JUnitDoclet to hold the tests for FigureAndEnumerator. - * @see org.jhotdraw.standard.FigureAndEnumerator - */ -// JUnitDoclet end javadoc_class -public class FigureAndEnumeratorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureAndEnumerator figureandenumerator; - // JUnitDoclet end class - - /** - * Constructor FigureAndEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureAndEnumeratorTest(String name) { - // JUnitDoclet begin method FigureAndEnumeratorTest - super(name); - // JUnitDoclet end method FigureAndEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FigureAndEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l1 = CollectionsFactory.current().createList(); - l1.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - l1.add(new PolyLineFigure(20, 20)); - FigureEnumerator enum1 = new FigureEnumerator(l1); - - List l2 = CollectionsFactory.current().createList(); - l2.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - l2.add(new PolyLineFigure(20, 20)); - FigureEnumerator enum2 = new FigureEnumerator(l2); - return new FigureAndEnumerator(enum1, enum2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figureandenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figureandenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method nextFigure() - /** - * Method testNextFigure is testing nextFigure - * @see org.jhotdraw.standard.FigureAndEnumerator#nextFigure() - */ - // JUnitDoclet end javadoc_method nextFigure() - public void testNextFigure() throws Exception { - // JUnitDoclet begin method nextFigure - // JUnitDoclet end method nextFigure - } - - // JUnitDoclet begin javadoc_method hasNextFigure() - /** - * Method testHasNextFigure is testing hasNextFigure - * @see org.jhotdraw.standard.FigureAndEnumerator#hasNextFigure() - */ - // JUnitDoclet end javadoc_method hasNextFigure() - public void testHasNextFigure() throws Exception { - // JUnitDoclet begin method hasNextFigure - // JUnitDoclet end method hasNextFigure - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see org.jhotdraw.standard.FigureAndEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureChangeAdapterTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureChangeAdapterTest.java deleted file mode 100644 index ae121abdd..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureChangeAdapterTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.FigureChangeAdapter; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureChangeAdapterTest is generated by - * JUnitDoclet to hold the tests for FigureChangeAdapter. - * @see org.jhotdraw.standard.FigureChangeAdapter - */ -// JUnitDoclet end javadoc_class -public class FigureChangeAdapterTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureChangeAdapter figurechangeadapter; - // JUnitDoclet end class - - /** - * Constructor FigureChangeAdapterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureChangeAdapterTest(String name) { - // JUnitDoclet begin method FigureChangeAdapterTest - super(name); - // JUnitDoclet end method FigureChangeAdapterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FigureChangeAdapter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new FigureChangeAdapter(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figurechangeadapter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figurechangeadapter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see org.jhotdraw.standard.FigureChangeAdapter#figureInvalidated(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see org.jhotdraw.standard.FigureChangeAdapter#figureChanged(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see org.jhotdraw.standard.FigureChangeAdapter#figureRemoved(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see org.jhotdraw.standard.FigureChangeAdapter#figureRequestRemove(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see org.jhotdraw.standard.FigureChangeAdapter#figureRequestUpdate(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureChangeEventMulticasterTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureChangeEventMulticasterTest.java deleted file mode 100644 index afc1ab9b8..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureChangeEventMulticasterTest.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.util.EventListener; - -// JUnitDoclet begin import -import org.jhotdraw.figures.TextFigure; -import org.jhotdraw.framework.Drawing; -import org.jhotdraw.standard.FigureChangeEventMulticaster; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureChangeEventMulticasterTest is generated by - * JUnitDoclet to hold the tests for FigureChangeEventMulticaster. - * @see org.jhotdraw.standard.FigureChangeEventMulticaster - */ -// JUnitDoclet end javadoc_class -public class FigureChangeEventMulticasterTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureChangeEventMulticaster figurechangeeventmulticaster; - // JUnitDoclet end class - - /** - * Constructor FigureChangeEventMulticasterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureChangeEventMulticasterTest(String name) { - // JUnitDoclet begin method FigureChangeEventMulticasterTest - super(name); - // JUnitDoclet end method FigureChangeEventMulticasterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FigureChangeEventMulticaster createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - EventListener l1 = new TextFigure(); - Drawing l2 = getDrawingEditor().view().drawing(); - return new FigureChangeEventMulticaster(l1, l2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - figurechangeeventmulticaster = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figurechangeeventmulticaster = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see org.jhotdraw.standard.FigureChangeEventMulticaster#figureInvalidated(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method figureRequestRemove() - /** - * Method testFigureRequestRemove is testing figureRequestRemove - * @see org.jhotdraw.standard.FigureChangeEventMulticaster#figureRequestRemove(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestRemove() - public void testFigureRequestRemove() throws Exception { - // JUnitDoclet begin method figureRequestRemove - // JUnitDoclet end method figureRequestRemove - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see org.jhotdraw.standard.FigureChangeEventMulticaster#figureRequestUpdate(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see org.jhotdraw.standard.FigureChangeEventMulticaster#figureChanged(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method figureRemoved() - /** - * Method testFigureRemoved is testing figureRemoved - * @see org.jhotdraw.standard.FigureChangeEventMulticaster#figureRemoved(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRemoved() - public void testFigureRemoved() throws Exception { - // JUnitDoclet begin method figureRemoved - // JUnitDoclet end method figureRemoved - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.standard.FigureChangeEventMulticaster#add(org.jhotdraw.framework.FigureChangeListener, org.jhotdraw.framework.FigureChangeListener) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.standard.FigureChangeEventMulticaster#remove(org.jhotdraw.framework.FigureChangeListener, org.jhotdraw.framework.FigureChangeListener) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureEnumeratorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureEnumeratorTest.java deleted file mode 100644 index e50a2b278..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/FigureEnumeratorTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import org.jhotdraw.figures.PolyLineFigure; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.FigureEnumerator; -import org.jhotdraw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FigureEnumeratorTest is generated by - * JUnitDoclet to hold the tests for FigureEnumerator. - * @see org.jhotdraw.standard.FigureEnumerator - */ -// JUnitDoclet end javadoc_class -public class FigureEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FigureEnumerator figureenumerator; - // JUnitDoclet end class - - /** - * Constructor FigureEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FigureEnumeratorTest(String name) { - // JUnitDoclet begin method FigureEnumeratorTest - super(name); - // JUnitDoclet end method FigureEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FigureEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l = CollectionsFactory.current().createList(); - l.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - l.add(new PolyLineFigure(20, 20)); - return new FigureEnumerator(l); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - figureenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - figureenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNextFigure() - /** - * Method testHasNextFigure is testing hasNextFigure - * @see org.jhotdraw.standard.FigureEnumerator#hasNextFigure() - */ - // JUnitDoclet end javadoc_method hasNextFigure() - public void testHasNextFigure() throws Exception { - // JUnitDoclet begin method hasNextFigure - // JUnitDoclet end method hasNextFigure - } - - // JUnitDoclet begin javadoc_method nextFigure() - /** - * Method testNextFigure is testing nextFigure - * @see org.jhotdraw.standard.FigureEnumerator#nextFigure() - */ - // JUnitDoclet end javadoc_method nextFigure() - public void testNextFigure() throws Exception { - // JUnitDoclet begin method nextFigure - // JUnitDoclet end method nextFigure - } - - // JUnitDoclet begin javadoc_method getEmptyEnumeration() - /** - * Method testGetEmptyEnumeration is testing getEmptyEnumeration - * @see org.jhotdraw.standard.FigureEnumerator#getEmptyEnumeration() - */ - // JUnitDoclet end javadoc_method getEmptyEnumeration() - public void testGetEmptyEnumeration() throws Exception { - // JUnitDoclet begin method getEmptyEnumeration - // JUnitDoclet end method getEmptyEnumeration - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see org.jhotdraw.standard.FigureEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/GridConstrainerTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/GridConstrainerTest.java deleted file mode 100644 index 61c751708..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/GridConstrainerTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.GridConstrainer; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase GridConstrainerTest is generated by - * JUnitDoclet to hold the tests for GridConstrainer. - * @see org.jhotdraw.standard.GridConstrainer - */ -// JUnitDoclet end javadoc_class -public class GridConstrainerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GridConstrainer gridconstrainer; - // JUnitDoclet end class - - /** - * Constructor GridConstrainerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GridConstrainerTest(String name) { - // JUnitDoclet begin method GridConstrainerTest - super(name); - // JUnitDoclet end method GridConstrainerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public GridConstrainer createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new GridConstrainer(5, 5); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - gridconstrainer = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - gridconstrainer = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method constrainPoint() - /** - * Method testConstrainPoint is testing constrainPoint - * @see org.jhotdraw.standard.GridConstrainer#constrainPoint(java.awt.Point) - */ - // JUnitDoclet end javadoc_method constrainPoint() - public void testConstrainPoint() throws Exception { - // JUnitDoclet begin method constrainPoint - // JUnitDoclet end method constrainPoint - } - - // JUnitDoclet begin javadoc_method getStepX() - /** - * Method testGetStepX is testing getStepX - * @see org.jhotdraw.standard.GridConstrainer#getStepX() - */ - // JUnitDoclet end javadoc_method getStepX() - public void testGetStepX() throws Exception { - // JUnitDoclet begin method getStepX - // JUnitDoclet end method getStepX - } - - // JUnitDoclet begin javadoc_method getStepY() - /** - * Method testGetStepY is testing getStepY - * @see org.jhotdraw.standard.GridConstrainer#getStepY() - */ - // JUnitDoclet end javadoc_method getStepY() - public void testGetStepY() throws Exception { - // JUnitDoclet begin method getStepY - // JUnitDoclet end method getStepY - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleAndEnumeratorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleAndEnumeratorTest.java deleted file mode 100644 index 6320795d2..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleAndEnumeratorTest.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.HandleAndEnumerator; -import org.jhotdraw.standard.HandleEnumerator; -import org.jhotdraw.standard.NullHandle; -import org.jhotdraw.standard.RelativeLocator; -import org.jhotdraw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase HandleAndEnumeratorTest is generated by - * JUnitDoclet to hold the tests for HandleAndEnumerator. - * @see org.jhotdraw.standard.HandleAndEnumerator - */ -// JUnitDoclet end javadoc_class -public class HandleAndEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private HandleAndEnumerator handleandenumerator; - // JUnitDoclet end class - - /** - * Constructor HandleAndEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public HandleAndEnumeratorTest(String name) { - // JUnitDoclet begin method HandleAndEnumeratorTest - super(name); - // JUnitDoclet end method HandleAndEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public HandleAndEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - RectangleFigure figure1 = new RectangleFigure(new Point(15, 15), new Point(20, 20)); - List l1 = CollectionsFactory.current().createList(); - l1.add(new NullHandle(figure1, RelativeLocator.north())); - l1.add(new NullHandle(figure1, RelativeLocator.north())); - HandleEnumerator handleEnum1 = new HandleEnumerator(l1); - - RectangleFigure figure2 = new RectangleFigure(new Point(55, 55), new Point(70, 70)); - List l2 = CollectionsFactory.current().createList(); - l2.add(new NullHandle(figure2, RelativeLocator.north())); - l2.add(new NullHandle(figure2, RelativeLocator.north())); - HandleEnumerator handleEnum2 = new HandleEnumerator(l2); - return new HandleAndEnumerator(handleEnum1, handleEnum2); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - handleandenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - handleandenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method nextHandle() - /** - * Method testNextHandle is testing nextHandle - * @see org.jhotdraw.standard.HandleAndEnumerator#nextHandle() - */ - // JUnitDoclet end javadoc_method nextHandle() - public void testNextHandle() throws Exception { - // JUnitDoclet begin method nextHandle - // JUnitDoclet end method nextHandle - } - - // JUnitDoclet begin javadoc_method hasNextHandle() - /** - * Method testHasNextHandle is testing hasNextHandle - * @see org.jhotdraw.standard.HandleAndEnumerator#hasNextHandle() - */ - // JUnitDoclet end javadoc_method hasNextHandle() - public void testHasNextHandle() throws Exception { - // JUnitDoclet begin method hasNextHandle - // JUnitDoclet end method hasNextHandle - } - - // JUnitDoclet begin javadoc_method toList() - /** - * Method testToList is testing toList - * @see org.jhotdraw.standard.HandleAndEnumerator#toList() - */ - // JUnitDoclet end javadoc_method toList() - public void testToList() throws Exception { - // JUnitDoclet begin method toList - // JUnitDoclet end method toList - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see org.jhotdraw.standard.HandleAndEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleEnumeratorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleEnumeratorTest.java deleted file mode 100644 index c79369859..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleEnumeratorTest.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; -import java.util.List; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.HandleEnumerator; -import org.jhotdraw.standard.NullHandle; -import org.jhotdraw.standard.RelativeLocator; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase HandleEnumeratorTest is generated by - * JUnitDoclet to hold the tests for HandleEnumerator. - * @see org.jhotdraw.standard.HandleEnumerator - */ -// JUnitDoclet end javadoc_class -public class HandleEnumeratorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private HandleEnumerator handleenumerator; - // JUnitDoclet end class - - /** - * Constructor HandleEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public HandleEnumeratorTest(String name) { - // JUnitDoclet begin method HandleEnumeratorTest - super(name); - // JUnitDoclet end method HandleEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public HandleEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - RectangleFigure figure = new RectangleFigure(new Point(15, 15), new Point(20, 20)); - List l = CollectionsFactory.current().createList(); - l.add(new NullHandle(figure, RelativeLocator.north())); - l.add(new NullHandle(figure, RelativeLocator.north())); - //return (HandleEnumerator)figure.handles(); - return new HandleEnumerator(l); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - handleenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - handleenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNextHandle() - /** - * Method testHasNextHandle is testing hasNextHandle - * @see org.jhotdraw.standard.HandleEnumerator#hasNextHandle() - */ - // JUnitDoclet end javadoc_method hasNextHandle() - public void testHasNextHandle() throws Exception { - // JUnitDoclet begin method hasNextHandle - // JUnitDoclet end method hasNextHandle - } - - // JUnitDoclet begin javadoc_method nextHandle() - /** - * Method testNextHandle is testing nextHandle - * @see org.jhotdraw.standard.HandleEnumerator#nextHandle() - */ - // JUnitDoclet end javadoc_method nextHandle() - public void testNextHandle() throws Exception { - // JUnitDoclet begin method nextHandle - // JUnitDoclet end method nextHandle - } - - // JUnitDoclet begin javadoc_method toList() - /** - * Method testToList is testing toList - * @see org.jhotdraw.standard.HandleEnumerator#toList() - */ - // JUnitDoclet end javadoc_method toList() - public void testToList() throws Exception { - // JUnitDoclet begin method toList - // JUnitDoclet end method toList - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see org.jhotdraw.standard.HandleEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method getEmptyEnumeration() - /** - * Method testGetEmptyEnumeration is testing getEmptyEnumeration - * @see org.jhotdraw.standard.HandleEnumerator#getEmptyEnumeration() - */ - // JUnitDoclet end javadoc_method getEmptyEnumeration() - public void testGetEmptyEnumeration() throws Exception { - // JUnitDoclet begin method getEmptyEnumeration - // JUnitDoclet end method getEmptyEnumeration - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleTrackerTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleTrackerTest.java deleted file mode 100644 index b16f681e6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/HandleTrackerTest.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.framework.Handle; -import org.jhotdraw.standard.HandleTracker; -import org.jhotdraw.standard.NullHandle; -import org.jhotdraw.standard.RelativeLocator; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase HandleTrackerTest is generated by - * JUnitDoclet to hold the tests for HandleTracker. - * @see org.jhotdraw.standard.HandleTracker - */ -// JUnitDoclet end javadoc_class -public class HandleTrackerTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private HandleTracker handletracker; - // JUnitDoclet end class - - /** - * Constructor HandleTrackerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public HandleTrackerTest(String name) { - // JUnitDoclet begin method HandleTrackerTest - super(name); - // JUnitDoclet end method HandleTrackerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public HandleTracker createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Handle handle = new NullHandle(new RectangleFigure(new Point(10, 10), new Point(40, 40)), RelativeLocator.north()); - return new HandleTracker(getDrawingEditor(), handle); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - handletracker = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - handletracker = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.standard.HandleTracker#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.standard.HandleTracker#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.standard.HandleTracker#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.standard.HandleTracker#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/InsertIntoDrawingVisitorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/InsertIntoDrawingVisitorTest.java deleted file mode 100644 index 8c67e71b6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/InsertIntoDrawingVisitorTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.InsertIntoDrawingVisitor; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase InsertIntoDrawingVisitorTest is generated by - * JUnitDoclet to hold the tests for InsertIntoDrawingVisitor. - * @see org.jhotdraw.standard.InsertIntoDrawingVisitor - */ -// JUnitDoclet end javadoc_class -public class InsertIntoDrawingVisitorTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private InsertIntoDrawingVisitor insertintodrawingvisitor; - // JUnitDoclet end class - - /** - * Constructor InsertIntoDrawingVisitorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public InsertIntoDrawingVisitorTest(String name) { - // JUnitDoclet begin method InsertIntoDrawingVisitorTest - super(name); - // JUnitDoclet end method InsertIntoDrawingVisitorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public InsertIntoDrawingVisitor createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new InsertIntoDrawingVisitor(getDrawingEditor().view().drawing()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - insertintodrawingvisitor = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - insertintodrawingvisitor = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method visitFigure() - /** - * Method testVisitFigure is testing visitFigure - * @see org.jhotdraw.standard.InsertIntoDrawingVisitor#visitFigure(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method visitFigure() - public void testVisitFigure() throws Exception { - // JUnitDoclet begin method visitFigure - // JUnitDoclet end method visitFigure - } - - // JUnitDoclet begin javadoc_method visitHandle() - /** - * Method testVisitHandle is testing visitHandle - * @see org.jhotdraw.standard.InsertIntoDrawingVisitor#visitHandle(org.jhotdraw.framework.Handle) - */ - // JUnitDoclet end javadoc_method visitHandle() - public void testVisitHandle() throws Exception { - // JUnitDoclet begin method visitHandle - // JUnitDoclet end method visitHandle - } - - // JUnitDoclet begin javadoc_method visitFigureChangeListener() - /** - * Method testVisitFigureChangeListener is testing visitFigureChangeListener - * @see org.jhotdraw.standard.InsertIntoDrawingVisitor#visitFigureChangeListener(org.jhotdraw.framework.FigureChangeListener) - */ - // JUnitDoclet end javadoc_method visitFigureChangeListener() - public void testVisitFigureChangeListener() throws Exception { - // JUnitDoclet begin method visitFigureChangeListener - // JUnitDoclet end method visitFigureChangeListener - } - - // JUnitDoclet begin javadoc_method getInsertedFigures() - /** - * Method testGetInsertedFigures is testing getInsertedFigures - * @see org.jhotdraw.standard.InsertIntoDrawingVisitor#getInsertedFigures() - */ - // JUnitDoclet end javadoc_method getInsertedFigures() - public void testGetInsertedFigures() throws Exception { - // JUnitDoclet begin method getInsertedFigures - // JUnitDoclet end method getInsertedFigures - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/LocatorConnectorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/LocatorConnectorTest.java deleted file mode 100644 index 627fb6cec..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/LocatorConnectorTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.LocatorConnector; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase LocatorConnectorTest is generated by - * JUnitDoclet to hold the tests for LocatorConnector. - * @see org.jhotdraw.standard.LocatorConnector - */ -// JUnitDoclet end javadoc_class -public class LocatorConnectorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private LocatorConnector locatorconnector; - // JUnitDoclet end class - - /** - * Constructor LocatorConnectorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public LocatorConnectorTest(String name) { - // JUnitDoclet begin method LocatorConnectorTest - super(name); - // JUnitDoclet end method LocatorConnectorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public LocatorConnector createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new LocatorConnector(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - locatorconnector = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - locatorconnector = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see org.jhotdraw.standard.LocatorConnector#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.standard.LocatorConnector#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.standard.LocatorConnector#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.standard.LocatorConnector#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.standard.LocatorConnector#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method getLocator() - /** - * Method testGetLocator is testing getLocator - * @see org.jhotdraw.standard.LocatorConnector#getLocator() - */ - // JUnitDoclet end javadoc_method getLocator() - public void testGetLocator() throws Exception { - // JUnitDoclet begin method getLocator - // JUnitDoclet end method getLocator - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/LocatorHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/LocatorHandleTest.java deleted file mode 100644 index b1f8a238b..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/LocatorHandleTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.LocatorHandle; -import org.jhotdraw.standard.RelativeLocator; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase LocatorHandleTest is generated by - * JUnitDoclet to hold the tests for LocatorHandle. - * @see org.jhotdraw.standard.LocatorHandle - */ -// JUnitDoclet end javadoc_class -public class LocatorHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private LocatorHandle locatorhandle; - // JUnitDoclet end class - - /** - * Constructor LocatorHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public LocatorHandleTest(String name) { - // JUnitDoclet begin method LocatorHandleTest - super(name); - // JUnitDoclet end method LocatorHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public LocatorHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new LocatorHandle(new RectangleFigure(new Point(), new Point()), new RelativeLocator(1.0, 2.0)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - locatorhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - locatorhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getLocator() - /** - * Method testGetLocator is testing getLocator - * @see org.jhotdraw.standard.LocatorHandle#getLocator() - */ - // JUnitDoclet end javadoc_method getLocator() - public void testGetLocator() throws Exception { - // JUnitDoclet begin method getLocator - // JUnitDoclet end method getLocator - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see org.jhotdraw.standard.LocatorHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullDrawingViewTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullDrawingViewTest.java deleted file mode 100644 index d66c9e38b..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullDrawingViewTest.java +++ /dev/null @@ -1,650 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.NullDrawingView; -import org.jhotdraw.standard.SimpleUpdateStrategy; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullDrawingViewTest is generated by - * JUnitDoclet to hold the tests for NullDrawingView. - * @see org.jhotdraw.standard.NullDrawingView - */ -// JUnitDoclet end javadoc_class -public class NullDrawingViewTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullDrawingView nulldrawingview; - // JUnitDoclet end class - - /** - * Constructor NullDrawingViewTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullDrawingViewTest(String name) { - // JUnitDoclet begin method NullDrawingViewTest - super(name); - // JUnitDoclet end method NullDrawingViewTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NullDrawingView createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return (NullDrawingView)NullDrawingView.getManagedDrawingView(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nulldrawingview = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nulldrawingview = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setEditor() - /** - * Method testSetEditor is testing setEditor - * @see org.jhotdraw.standard.NullDrawingView#setEditor(org.jhotdraw.framework.DrawingEditor) - */ - // JUnitDoclet end javadoc_method setEditor() - public void testSetEditor() throws Exception { - // JUnitDoclet begin method setEditor - // JUnitDoclet end method setEditor - } - - // JUnitDoclet begin javadoc_method tool() - /** - * Method testTool is testing tool - * @see org.jhotdraw.standard.NullDrawingView#tool() - */ - // JUnitDoclet end javadoc_method tool() - public void testTool() throws Exception { - // JUnitDoclet begin method tool - // JUnitDoclet end method tool - } - - // JUnitDoclet begin javadoc_method drawing() - /** - * Method testDrawing is testing drawing - * @see org.jhotdraw.standard.NullDrawingView#drawing() - */ - // JUnitDoclet end javadoc_method drawing() - public void testDrawing() throws Exception { - // JUnitDoclet begin method drawing - // JUnitDoclet end method drawing - } - - // JUnitDoclet begin javadoc_method setDrawing() - /** - * Method testSetDrawing is testing setDrawing - * @see org.jhotdraw.standard.NullDrawingView#setDrawing(org.jhotdraw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method setDrawing() - public void testSetDrawing() throws Exception { - // JUnitDoclet begin method setDrawing - // JUnitDoclet end method setDrawing - } - - // JUnitDoclet begin javadoc_method editor() - /** - * Method testEditor is testing editor - * @see org.jhotdraw.standard.NullDrawingView#editor() - */ - // JUnitDoclet end javadoc_method editor() - public void testEditor() throws Exception { - // JUnitDoclet begin method editor - // JUnitDoclet end method editor - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.standard.NullDrawingView#add(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.standard.NullDrawingView#remove(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method addAll() - /** - * Method testAddAll is testing addAll - * @see org.jhotdraw.standard.NullDrawingView#addAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addAll() - public void testAddAll() throws Exception { - // JUnitDoclet begin method addAll - // JUnitDoclet end method addAll - } - - // JUnitDoclet begin javadoc_method getSize() - /** - * Method testGetSize is testing getSize - * @see org.jhotdraw.standard.NullDrawingView#getSize() - */ - // JUnitDoclet end javadoc_method getSize() - public void testGetSize() throws Exception { - // JUnitDoclet begin method getSize - // JUnitDoclet end method getSize - } - - // JUnitDoclet begin javadoc_method getMinimumSize() - /** - * Method testGetMinimumSize is testing getMinimumSize - * @see org.jhotdraw.standard.NullDrawingView#getMinimumSize() - */ - // JUnitDoclet end javadoc_method getMinimumSize() - public void testGetMinimumSize() throws Exception { - // JUnitDoclet begin method getMinimumSize - // JUnitDoclet end method getMinimumSize - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see org.jhotdraw.standard.NullDrawingView#getPreferredSize() - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method setDisplayUpdate() - /** - * Method testSetGetDisplayUpdate is testing setDisplayUpdate - * and getDisplayUpdate together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.standard.NullDrawingView#setDisplayUpdate(org.jhotdraw.framework.Painter) - * @see org.jhotdraw.standard.NullDrawingView#getDisplayUpdate() - */ - // JUnitDoclet end javadoc_method setDisplayUpdate() - public void testSetGetDisplayUpdate() throws Exception { - // JUnitDoclet begin method setDisplayUpdate getDisplayUpdate - org.jhotdraw.framework.Painter[] tests = { new SimpleUpdateStrategy(), null }; - - for (int i = 0; i < tests.length; i++) { - nulldrawingview.setDisplayUpdate(tests[i]); - assertEquals(tests[i], nulldrawingview.getDisplayUpdate()); - } - // JUnitDoclet end method setDisplayUpdate getDisplayUpdate - } - - // JUnitDoclet begin javadoc_method selection() - /** - * Method testSelection is testing selection - * @see org.jhotdraw.standard.NullDrawingView#selection() - */ - // JUnitDoclet end javadoc_method selection() - public void testSelection() throws Exception { - // JUnitDoclet begin method selection - // JUnitDoclet end method selection - } - - // JUnitDoclet begin javadoc_method selectionZOrdered() - /** - * Method testSelectionZOrdered is testing selectionZOrdered - * @see org.jhotdraw.standard.NullDrawingView#selectionZOrdered() - */ - // JUnitDoclet end javadoc_method selectionZOrdered() - public void testSelectionZOrdered() throws Exception { - // JUnitDoclet begin method selectionZOrdered - // JUnitDoclet end method selectionZOrdered - } - - // JUnitDoclet begin javadoc_method selectionCount() - /** - * Method testSelectionCount is testing selectionCount - * @see org.jhotdraw.standard.NullDrawingView#selectionCount() - */ - // JUnitDoclet end javadoc_method selectionCount() - public void testSelectionCount() throws Exception { - // JUnitDoclet begin method selectionCount - // JUnitDoclet end method selectionCount - } - - // JUnitDoclet begin javadoc_method isFigureSelected() - /** - * Method testIsFigureSelected is testing isFigureSelected - * @see org.jhotdraw.standard.NullDrawingView#isFigureSelected(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method isFigureSelected() - public void testIsFigureSelected() throws Exception { - // JUnitDoclet begin method isFigureSelected - // JUnitDoclet end method isFigureSelected - } - - // JUnitDoclet begin javadoc_method addToSelection() - /** - * Method testAddToSelection is testing addToSelection - * @see org.jhotdraw.standard.NullDrawingView#addToSelection(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method addToSelection() - public void testAddToSelection() throws Exception { - // JUnitDoclet begin method addToSelection - // JUnitDoclet end method addToSelection - } - - // JUnitDoclet begin javadoc_method addToSelectionAll() - /** - * Method testAddToSelectionAll is testing addToSelectionAll - * @see org.jhotdraw.standard.NullDrawingView#addToSelectionAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addToSelectionAll() - public void testAddToSelectionAll() throws Exception { - // JUnitDoclet begin method addToSelectionAll - // JUnitDoclet end method addToSelectionAll - } - - // JUnitDoclet begin javadoc_method removeFromSelection() - /** - * Method testRemoveFromSelection is testing removeFromSelection - * @see org.jhotdraw.standard.NullDrawingView#removeFromSelection(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method removeFromSelection() - public void testRemoveFromSelection() throws Exception { - // JUnitDoclet begin method removeFromSelection - // JUnitDoclet end method removeFromSelection - } - - // JUnitDoclet begin javadoc_method toggleSelection() - /** - * Method testToggleSelection is testing toggleSelection - * @see org.jhotdraw.standard.NullDrawingView#toggleSelection(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method toggleSelection() - public void testToggleSelection() throws Exception { - // JUnitDoclet begin method toggleSelection - // JUnitDoclet end method toggleSelection - } - - // JUnitDoclet begin javadoc_method clearSelection() - /** - * Method testClearSelection is testing clearSelection - * @see org.jhotdraw.standard.NullDrawingView#clearSelection() - */ - // JUnitDoclet end javadoc_method clearSelection() - public void testClearSelection() throws Exception { - // JUnitDoclet begin method clearSelection - // JUnitDoclet end method clearSelection - } - - // JUnitDoclet begin javadoc_method getFigureSelection() - /** - * Method testGetFigureSelection is testing getFigureSelection - * @see org.jhotdraw.standard.NullDrawingView#getFigureSelection() - */ - // JUnitDoclet end javadoc_method getFigureSelection() - public void testGetFigureSelection() throws Exception { - // JUnitDoclet begin method getFigureSelection - // JUnitDoclet end method getFigureSelection - } - - // JUnitDoclet begin javadoc_method findHandle() - /** - * Method testFindHandle is testing findHandle - * @see org.jhotdraw.standard.NullDrawingView#findHandle(int, int) - */ - // JUnitDoclet end javadoc_method findHandle() - public void testFindHandle() throws Exception { - // JUnitDoclet begin method findHandle - // JUnitDoclet end method findHandle - } - - // JUnitDoclet begin javadoc_method lastClick() - /** - * Method testLastClick is testing lastClick - * @see org.jhotdraw.standard.NullDrawingView#lastClick() - */ - // JUnitDoclet end javadoc_method lastClick() - public void testLastClick() throws Exception { - // JUnitDoclet begin method lastClick - // JUnitDoclet end method lastClick - } - - // JUnitDoclet begin javadoc_method setConstrainer() - /** - * NullDrawingView.setConstrainer is a no-op. - * - * @see org.jhotdraw.standard.NullDrawingView#setConstrainer(org.jhotdraw.framework.PointConstrainer) - * @see org.jhotdraw.standard.NullDrawingView#getConstrainer() - */ - // JUnitDoclet end javadoc_method setConstrainer() - public void testSetGetConstrainer() throws Exception { - // JUnitDoclet begin method setConstrainer getConstrainer - // Do nothing: NullDrawingView.setConstrainer is a no-op. - // JUnitDoclet end method setConstrainer getConstrainer - } - - // JUnitDoclet begin javadoc_method checkDamage() - /** - * Method testCheckDamage is testing checkDamage - * @see org.jhotdraw.standard.NullDrawingView#checkDamage() - */ - // JUnitDoclet end javadoc_method checkDamage() - public void testCheckDamage() throws Exception { - // JUnitDoclet begin method checkDamage - // JUnitDoclet end method checkDamage - } - - // JUnitDoclet begin javadoc_method repairDamage() - /** - * Method testRepairDamage is testing repairDamage - * @see org.jhotdraw.standard.NullDrawingView#repairDamage() - */ - // JUnitDoclet end javadoc_method repairDamage() - public void testRepairDamage() throws Exception { - // JUnitDoclet begin method repairDamage - // JUnitDoclet end method repairDamage - } - - // JUnitDoclet begin javadoc_method paint() - /** - * Method testPaint is testing paint - * @see org.jhotdraw.standard.NullDrawingView#paint(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method paint() - public void testPaint() throws Exception { - // JUnitDoclet begin method paint - // JUnitDoclet end method paint - } - - // JUnitDoclet begin javadoc_method createImage() - /** - * Method testCreateImage is testing createImage - * @see org.jhotdraw.standard.NullDrawingView#createImage(int, int) - */ - // JUnitDoclet end javadoc_method createImage() - public void testCreateImage() throws Exception { - // JUnitDoclet begin method createImage - // JUnitDoclet end method createImage - } - - // JUnitDoclet begin javadoc_method getGraphics() - /** - * Method testGetGraphics is testing getGraphics - * @see org.jhotdraw.standard.NullDrawingView#getGraphics() - */ - // JUnitDoclet end javadoc_method getGraphics() - public void testGetGraphics() throws Exception { - // JUnitDoclet begin method getGraphics - // JUnitDoclet end method getGraphics - } - - // JUnitDoclet begin javadoc_method setBackground() - /** - * Method testSetGetBackground is testing setBackground - * and getBackground together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.standard.NullDrawingView#setBackground(java.awt.Color) - * @see org.jhotdraw.standard.NullDrawingView#getBackground() - */ - // JUnitDoclet end javadoc_method setBackground() - public void testSetGetBackground() throws Exception { - // JUnitDoclet begin method setBackground getBackground - java.awt.Color[] tests = { java.awt.Color.BLACK, null }; - - for (int i = 0; i < tests.length; i++) { - nulldrawingview.setBackground(tests[i]); - assertEquals(tests[i], nulldrawingview.getBackground()); - } - // JUnitDoclet end method setBackground getBackground - } - - // JUnitDoclet begin javadoc_method drawAll() - /** - * Method testDrawAll is testing drawAll - * @see org.jhotdraw.standard.NullDrawingView#drawAll(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawAll() - public void testDrawAll() throws Exception { - // JUnitDoclet begin method drawAll - // JUnitDoclet end method drawAll - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.standard.NullDrawingView#draw(java.awt.Graphics, org.jhotdraw.framework.FigureEnumeration) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method drawHandles() - /** - * Method testDrawHandles is testing drawHandles - * @see org.jhotdraw.standard.NullDrawingView#drawHandles(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawHandles() - public void testDrawHandles() throws Exception { - // JUnitDoclet begin method drawHandles - // JUnitDoclet end method drawHandles - } - - // JUnitDoclet begin javadoc_method drawDrawing() - /** - * Method testDrawDrawing is testing drawDrawing - * @see org.jhotdraw.standard.NullDrawingView#drawDrawing(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawDrawing() - public void testDrawDrawing() throws Exception { - // JUnitDoclet begin method drawDrawing - // JUnitDoclet end method drawDrawing - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see org.jhotdraw.standard.NullDrawingView#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method setCursor() - /** - * Method testSetCursor is testing setCursor - * @see org.jhotdraw.standard.NullDrawingView#setCursor(java.awt.Cursor) - */ - // JUnitDoclet end javadoc_method setCursor() - public void testSetCursor() throws Exception { - // JUnitDoclet begin method setCursor - // JUnitDoclet end method setCursor - } - - // JUnitDoclet begin javadoc_method freezeView() - /** - * Method testFreezeView is testing freezeView - * @see org.jhotdraw.standard.NullDrawingView#freezeView() - */ - // JUnitDoclet end javadoc_method freezeView() - public void testFreezeView() throws Exception { - // JUnitDoclet begin method freezeView - // JUnitDoclet end method freezeView - } - - // JUnitDoclet begin javadoc_method unfreezeView() - /** - * Method testUnfreezeView is testing unfreezeView - * @see org.jhotdraw.standard.NullDrawingView#unfreezeView() - */ - // JUnitDoclet end javadoc_method unfreezeView() - public void testUnfreezeView() throws Exception { - // JUnitDoclet begin method unfreezeView - // JUnitDoclet end method unfreezeView - } - - // JUnitDoclet begin javadoc_method addFigureSelectionListener() - /** - * Method testAddFigureSelectionListener is testing addFigureSelectionListener - * @see org.jhotdraw.standard.NullDrawingView#addFigureSelectionListener(org.jhotdraw.framework.FigureSelectionListener) - */ - // JUnitDoclet end javadoc_method addFigureSelectionListener() - public void testAddFigureSelectionListener() throws Exception { - // JUnitDoclet begin method addFigureSelectionListener - // JUnitDoclet end method addFigureSelectionListener - } - - // JUnitDoclet begin javadoc_method removeFigureSelectionListener() - /** - * Method testRemoveFigureSelectionListener is testing removeFigureSelectionListener - * @see org.jhotdraw.standard.NullDrawingView#removeFigureSelectionListener(org.jhotdraw.framework.FigureSelectionListener) - */ - // JUnitDoclet end javadoc_method removeFigureSelectionListener() - public void testRemoveFigureSelectionListener() throws Exception { - // JUnitDoclet begin method removeFigureSelectionListener - // JUnitDoclet end method removeFigureSelectionListener - } - - // JUnitDoclet begin javadoc_method getConnectionFigures() - /** - * Method testGetConnectionFigures is testing getConnectionFigures - * @see org.jhotdraw.standard.NullDrawingView#getConnectionFigures(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method getConnectionFigures() - public void testGetConnectionFigures() throws Exception { - // JUnitDoclet begin method getConnectionFigures - // JUnitDoclet end method getConnectionFigures - } - - // JUnitDoclet begin javadoc_method insertFigures() - /** - * Method testInsertFigures is testing insertFigures - * @see org.jhotdraw.standard.NullDrawingView#insertFigures(org.jhotdraw.framework.FigureEnumeration, int, int, boolean) - */ - // JUnitDoclet end javadoc_method insertFigures() - public void testInsertFigures() throws Exception { - // JUnitDoclet begin method insertFigures - // JUnitDoclet end method insertFigures - } - - // JUnitDoclet begin javadoc_method drawingInvalidated() - /** - * Method testDrawingInvalidated is testing drawingInvalidated - * @see org.jhotdraw.standard.NullDrawingView#drawingInvalidated(org.jhotdraw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingInvalidated() - public void testDrawingInvalidated() throws Exception { - // JUnitDoclet begin method drawingInvalidated - // JUnitDoclet end method drawingInvalidated - } - - // JUnitDoclet begin javadoc_method drawingRequestUpdate() - /** - * Method testDrawingRequestUpdate is testing drawingRequestUpdate - * @see org.jhotdraw.standard.NullDrawingView#drawingRequestUpdate(org.jhotdraw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingRequestUpdate() - public void testDrawingRequestUpdate() throws Exception { - // JUnitDoclet begin method drawingRequestUpdate - // JUnitDoclet end method drawingRequestUpdate - } - - // JUnitDoclet begin javadoc_method drawingTitleChanged() - /** - * Method testDrawingTitleChanged is testing drawingTitleChanged - * @see org.jhotdraw.standard.NullDrawingView#drawingTitleChanged(org.jhotdraw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingTitleChanged() - public void testDrawingTitleChanged() throws Exception { - // JUnitDoclet begin method drawingTitleChanged - // JUnitDoclet end method drawingTitleChanged - } - - // JUnitDoclet begin javadoc_method isInteractive() - /** - * Method testIsInteractive is testing isInteractive - * @see org.jhotdraw.standard.NullDrawingView#isInteractive() - */ - // JUnitDoclet end javadoc_method isInteractive() - public void testIsInteractive() throws Exception { - // JUnitDoclet begin method isInteractive - // JUnitDoclet end method isInteractive - } - - // JUnitDoclet begin javadoc_method getManagedDrawingView() - /** - * Method testGetManagedDrawingView is testing getManagedDrawingView - * @see org.jhotdraw.standard.NullDrawingView#getManagedDrawingView(org.jhotdraw.framework.DrawingEditor) - */ - // JUnitDoclet end javadoc_method getManagedDrawingView() - public void testGetManagedDrawingView() throws Exception { - // JUnitDoclet begin method getManagedDrawingView - // JUnitDoclet end method getManagedDrawingView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullHandleTest.java deleted file mode 100644 index 7f0daa41c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullHandleTest.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.NullHandle; -import org.jhotdraw.standard.RelativeLocator; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullHandleTest is generated by - * JUnitDoclet to hold the tests for NullHandle. - * @see org.jhotdraw.standard.NullHandle - */ -// JUnitDoclet end javadoc_class -public class NullHandleTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullHandle nullhandle; - // JUnitDoclet end class - - /** - * Constructor NullHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullHandleTest(String name) { - // JUnitDoclet begin method NullHandleTest - super(name); - // JUnitDoclet end method NullHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NullHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NullHandle(new RectangleFigure(new Point(5, 5), new Point(100, 100)), new RelativeLocator()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nullhandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nullhandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.standard.NullHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullToolTest.java deleted file mode 100644 index 013df9ed2..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/NullToolTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.NullTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase NullToolTest is generated by - * JUnitDoclet to hold the tests for NullTool. - * @see org.jhotdraw.standard.NullTool - */ -// JUnitDoclet end javadoc_class -public class NullToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private NullTool nulltool; - // JUnitDoclet end class - - /** - * Constructor NullToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public NullToolTest(String name) { - // JUnitDoclet begin method NullToolTest - super(name); - // JUnitDoclet end method NullToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public NullTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new NullTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - nulltool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - nulltool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.standard.NullTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.standard.NullTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/OffsetLocatorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/OffsetLocatorTest.java deleted file mode 100644 index eb3398ce3..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/OffsetLocatorTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.OffsetLocator; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase OffsetLocatorTest is generated by - * JUnitDoclet to hold the tests for OffsetLocator. - * @see org.jhotdraw.standard.OffsetLocator - */ -// JUnitDoclet end javadoc_class -public class OffsetLocatorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private OffsetLocator offsetlocator; - // JUnitDoclet end class - - /** - * Constructor OffsetLocatorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public OffsetLocatorTest(String name) { - // JUnitDoclet begin method OffsetLocatorTest - super(name); - // JUnitDoclet end method OffsetLocatorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public OffsetLocator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new OffsetLocator(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - offsetlocator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - offsetlocator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see org.jhotdraw.standard.OffsetLocator#locate(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method moveBy() - /** - * Method testMoveBy is testing moveBy - * @see org.jhotdraw.standard.OffsetLocator#moveBy(int, int) - */ - // JUnitDoclet end javadoc_method moveBy() - public void testMoveBy() throws Exception { - // JUnitDoclet begin method moveBy - // JUnitDoclet end method moveBy - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.standard.OffsetLocator#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.standard.OffsetLocator#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/PasteCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/PasteCommandTest.java deleted file mode 100644 index 6064a6415..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/PasteCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.PasteCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PasteCommandTest is generated by - * JUnitDoclet to hold the tests for PasteCommand. - * @see org.jhotdraw.standard.PasteCommand - */ -// JUnitDoclet end javadoc_class -public class PasteCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PasteCommand pastecommand; - // JUnitDoclet end class - - /** - * Constructor PasteCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PasteCommandTest(String name) { - // JUnitDoclet begin method PasteCommandTest - super(name); - // JUnitDoclet end method PasteCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PasteCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PasteCommand("TestPaste", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - pastecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - pastecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.PasteCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see org.jhotdraw.standard.PasteCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/PeripheralLocatorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/PeripheralLocatorTest.java deleted file mode 100644 index 58df611d6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/PeripheralLocatorTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.PeripheralLocator; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PeripheralLocatorTest is generated by - * JUnitDoclet to hold the tests for PeripheralLocator. - * @see org.jhotdraw.standard.PeripheralLocator - */ -// JUnitDoclet end javadoc_class -public class PeripheralLocatorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PeripheralLocator peripherallocator; - // JUnitDoclet end class - - /** - * Constructor PeripheralLocatorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PeripheralLocatorTest(String name) { - // JUnitDoclet begin method PeripheralLocatorTest - super(name); - // JUnitDoclet end method PeripheralLocatorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PeripheralLocator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PeripheralLocator(5, 10); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - peripherallocator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - peripherallocator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see org.jhotdraw.standard.PeripheralLocator#locate(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/RelativeLocatorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/RelativeLocatorTest.java deleted file mode 100644 index 50117ed47..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/RelativeLocatorTest.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.RelativeLocator; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase RelativeLocatorTest is generated by - * JUnitDoclet to hold the tests for RelativeLocator. - * @see org.jhotdraw.standard.RelativeLocator - */ -// JUnitDoclet end javadoc_class -public class RelativeLocatorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private RelativeLocator relativelocator; - // JUnitDoclet end class - - /** - * Constructor RelativeLocatorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public RelativeLocatorTest(String name) { - // JUnitDoclet begin method RelativeLocatorTest - super(name); - // JUnitDoclet end method RelativeLocatorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public RelativeLocator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new RelativeLocator(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - relativelocator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - relativelocator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method equals() - /** - * Method testEquals is testing equals - * @see org.jhotdraw.standard.RelativeLocator#equals(java.lang.Object) - */ - // JUnitDoclet end javadoc_method equals() - public void testEquals() throws Exception { - // JUnitDoclet begin method equals - // JUnitDoclet end method equals - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see org.jhotdraw.standard.RelativeLocator#locate(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method write() - /** - * Method testWrite is testing write - * @see org.jhotdraw.standard.RelativeLocator#write(org.jhotdraw.util.StorableOutput) - */ - // JUnitDoclet end javadoc_method write() - public void testWrite() throws Exception { - // JUnitDoclet begin method write - // JUnitDoclet end method write - } - - // JUnitDoclet begin javadoc_method read() - /** - * Method testRead is testing read - * @see org.jhotdraw.standard.RelativeLocator#read(org.jhotdraw.util.StorableInput) - */ - // JUnitDoclet end javadoc_method read() - public void testRead() throws Exception { - // JUnitDoclet begin method read - // JUnitDoclet end method read - } - - // JUnitDoclet begin javadoc_method east() - /** - * Method testEast is testing east - * @see org.jhotdraw.standard.RelativeLocator#east() - */ - // JUnitDoclet end javadoc_method east() - public void testEast() throws Exception { - // JUnitDoclet begin method east - // JUnitDoclet end method east - } - - // JUnitDoclet begin javadoc_method north() - /** - * Method testNorth is testing north - * @see org.jhotdraw.standard.RelativeLocator#north() - */ - // JUnitDoclet end javadoc_method north() - public void testNorth() throws Exception { - // JUnitDoclet begin method north - // JUnitDoclet end method north - } - - // JUnitDoclet begin javadoc_method west() - /** - * Method testWest is testing west - * @see org.jhotdraw.standard.RelativeLocator#west() - */ - // JUnitDoclet end javadoc_method west() - public void testWest() throws Exception { - // JUnitDoclet begin method west - // JUnitDoclet end method west - } - - // JUnitDoclet begin javadoc_method northEast() - /** - * Method testNorthEast is testing northEast - * @see org.jhotdraw.standard.RelativeLocator#northEast() - */ - // JUnitDoclet end javadoc_method northEast() - public void testNorthEast() throws Exception { - // JUnitDoclet begin method northEast - // JUnitDoclet end method northEast - } - - // JUnitDoclet begin javadoc_method northWest() - /** - * Method testNorthWest is testing northWest - * @see org.jhotdraw.standard.RelativeLocator#northWest() - */ - // JUnitDoclet end javadoc_method northWest() - public void testNorthWest() throws Exception { - // JUnitDoclet begin method northWest - // JUnitDoclet end method northWest - } - - // JUnitDoclet begin javadoc_method south() - /** - * Method testSouth is testing south - * @see org.jhotdraw.standard.RelativeLocator#south() - */ - // JUnitDoclet end javadoc_method south() - public void testSouth() throws Exception { - // JUnitDoclet begin method south - // JUnitDoclet end method south - } - - // JUnitDoclet begin javadoc_method southEast() - /** - * Method testSouthEast is testing southEast - * @see org.jhotdraw.standard.RelativeLocator#southEast() - */ - // JUnitDoclet end javadoc_method southEast() - public void testSouthEast() throws Exception { - // JUnitDoclet begin method southEast - // JUnitDoclet end method southEast - } - - // JUnitDoclet begin javadoc_method southWest() - /** - * Method testSouthWest is testing southWest - * @see org.jhotdraw.standard.RelativeLocator#southWest() - */ - // JUnitDoclet end javadoc_method southWest() - public void testSouthWest() throws Exception { - // JUnitDoclet begin method southWest - // JUnitDoclet end method southWest - } - - // JUnitDoclet begin javadoc_method center() - /** - * Method testCenter is testing center - * @see org.jhotdraw.standard.RelativeLocator#center() - */ - // JUnitDoclet end javadoc_method center() - public void testCenter() throws Exception { - // JUnitDoclet begin method center - // JUnitDoclet end method center - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ReverseFigureEnumeratorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ReverseFigureEnumeratorTest.java deleted file mode 100644 index bd0c8f2a6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ReverseFigureEnumeratorTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import org.jhotdraw.figures.PolyLineFigure; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.ReverseFigureEnumerator; -import org.jhotdraw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ReverseFigureEnumeratorTest is generated by - * JUnitDoclet to hold the tests for ReverseFigureEnumerator. - * @see org.jhotdraw.standard.ReverseFigureEnumerator - */ -// JUnitDoclet end javadoc_class -public class ReverseFigureEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ReverseFigureEnumerator reversefigureenumerator; - // JUnitDoclet end class - - /** - * Constructor ReverseFigureEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ReverseFigureEnumeratorTest(String name) { - // JUnitDoclet begin method ReverseFigureEnumeratorTest - super(name); - // JUnitDoclet end method ReverseFigureEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ReverseFigureEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l = CollectionsFactory.current().createList(); - l.add(new RectangleFigure(new Point(10, 10), new Point(50, 50))); - l.add(new PolyLineFigure()); - return new ReverseFigureEnumerator(l); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - reversefigureenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - reversefigureenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNextFigure() - /** - * Method testHasNextFigure is testing hasNextFigure - * @see org.jhotdraw.standard.ReverseFigureEnumerator#hasNextFigure() - */ - // JUnitDoclet end javadoc_method hasNextFigure() - public void testHasNextFigure() throws Exception { - // JUnitDoclet begin method hasNextFigure - // JUnitDoclet end method hasNextFigure - } - - // JUnitDoclet begin javadoc_method nextFigure() - /** - * Method testNextFigure is testing nextFigure - * @see org.jhotdraw.standard.ReverseFigureEnumerator#nextFigure() - */ - // JUnitDoclet end javadoc_method nextFigure() - public void testNextFigure() throws Exception { - // JUnitDoclet begin method nextFigure - // JUnitDoclet end method nextFigure - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see org.jhotdraw.standard.ReverseFigureEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectAllCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectAllCommandTest.java deleted file mode 100644 index 6de88f465..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectAllCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.SelectAllCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SelectAllCommandTest is generated by - * JUnitDoclet to hold the tests for SelectAllCommand. - * @see org.jhotdraw.standard.SelectAllCommand - */ -// JUnitDoclet end javadoc_class -public class SelectAllCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SelectAllCommand selectallcommand; - // JUnitDoclet end class - - /** - * Constructor SelectAllCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SelectAllCommandTest(String name) { - // JUnitDoclet begin method SelectAllCommandTest - super(name); - // JUnitDoclet end method SelectAllCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SelectAllCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SelectAllCommand("TestSelectAll", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - selectallcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - selectallcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.SelectAllCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see org.jhotdraw.standard.SelectAllCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectAreaTrackerTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectAreaTrackerTest.java deleted file mode 100644 index 6de92eb28..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectAreaTrackerTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.SelectAreaTracker; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SelectAreaTrackerTest is generated by - * JUnitDoclet to hold the tests for SelectAreaTracker. - * @see org.jhotdraw.standard.SelectAreaTracker - */ -// JUnitDoclet end javadoc_class -public class SelectAreaTrackerTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SelectAreaTracker selectareatracker; - // JUnitDoclet end class - - /** - * Constructor SelectAreaTrackerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SelectAreaTrackerTest(String name) { - // JUnitDoclet begin method SelectAreaTrackerTest - super(name); - // JUnitDoclet end method SelectAreaTrackerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SelectAreaTracker createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SelectAreaTracker(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - selectareatracker = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - selectareatracker = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.standard.SelectAreaTracker#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.standard.SelectAreaTracker#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.standard.SelectAreaTracker#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectionToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectionToolTest.java deleted file mode 100644 index 18ed7a601..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SelectionToolTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.SelectionTool; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SelectionToolTest is generated by - * JUnitDoclet to hold the tests for SelectionTool. - * @see org.jhotdraw.standard.SelectionTool - */ -// JUnitDoclet end javadoc_class -public class SelectionToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SelectionTool selectiontool; - // JUnitDoclet end class - - /** - * Constructor SelectionToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SelectionToolTest(String name) { - // JUnitDoclet begin method SelectionToolTest - super(name); - // JUnitDoclet end method SelectionToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SelectionTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SelectionTool(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - selectiontool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - selectiontool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.standard.SelectionTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see org.jhotdraw.standard.SelectionTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.standard.SelectionTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.standard.SelectionTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SendToBackCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SendToBackCommandTest.java deleted file mode 100644 index aae620087..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SendToBackCommandTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.SendToBackCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SendToBackCommandTest is generated by - * JUnitDoclet to hold the tests for SendToBackCommand. - * @see org.jhotdraw.standard.SendToBackCommand - */ -// JUnitDoclet end javadoc_class -public class SendToBackCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SendToBackCommand sendtobackcommand; - // JUnitDoclet end class - - /** - * Constructor SendToBackCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SendToBackCommandTest(String name) { - // JUnitDoclet begin method SendToBackCommandTest - super(name); - // JUnitDoclet end method SendToBackCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SendToBackCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SendToBackCommand("TestSendToBack", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - sendtobackcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - sendtobackcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.SendToBackCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SimpleUpdateStrategyTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SimpleUpdateStrategyTest.java deleted file mode 100644 index 20a48779b..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SimpleUpdateStrategyTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.SimpleUpdateStrategy; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SimpleUpdateStrategyTest is generated by - * JUnitDoclet to hold the tests for SimpleUpdateStrategy. - * @see org.jhotdraw.standard.SimpleUpdateStrategy - */ -// JUnitDoclet end javadoc_class -public class SimpleUpdateStrategyTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SimpleUpdateStrategy simpleupdatestrategy; - // JUnitDoclet end class - - /** - * Constructor SimpleUpdateStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SimpleUpdateStrategyTest(String name) { - // JUnitDoclet begin method SimpleUpdateStrategyTest - super(name); - // JUnitDoclet end method SimpleUpdateStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SimpleUpdateStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SimpleUpdateStrategy(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - simpleupdatestrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - simpleupdatestrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.standard.SimpleUpdateStrategy#draw(java.awt.Graphics, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SingleFigureEnumeratorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SingleFigureEnumeratorTest.java deleted file mode 100644 index 51afc6752..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/SingleFigureEnumeratorTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.SingleFigureEnumerator; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SingleFigureEnumeratorTest is generated by - * JUnitDoclet to hold the tests for SingleFigureEnumerator. - * @see org.jhotdraw.standard.SingleFigureEnumerator - */ -// JUnitDoclet end javadoc_class -public class SingleFigureEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SingleFigureEnumerator singlefigureenumerator; - // JUnitDoclet end class - - /** - * Constructor SingleFigureEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SingleFigureEnumeratorTest(String name) { - // JUnitDoclet begin method SingleFigureEnumeratorTest - super(name); - // JUnitDoclet end method SingleFigureEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SingleFigureEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SingleFigureEnumerator(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - singlefigureenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - singlefigureenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNextFigure() - /** - * Method testHasNextFigure is testing hasNextFigure - * @see org.jhotdraw.standard.SingleFigureEnumerator#hasNextFigure() - */ - // JUnitDoclet end javadoc_method hasNextFigure() - public void testHasNextFigure() throws Exception { - // JUnitDoclet begin method hasNextFigure - // JUnitDoclet end method hasNextFigure - } - - // JUnitDoclet begin javadoc_method nextFigure() - /** - * Method testNextFigure is testing nextFigure - * @see org.jhotdraw.standard.SingleFigureEnumerator#nextFigure() - */ - // JUnitDoclet end javadoc_method nextFigure() - public void testNextFigure() throws Exception { - // JUnitDoclet begin method nextFigure - // JUnitDoclet end method nextFigure - } - - // JUnitDoclet begin javadoc_method reset() - /** - * Method testReset is testing reset - * @see org.jhotdraw.standard.SingleFigureEnumerator#reset() - */ - // JUnitDoclet end javadoc_method reset() - public void testReset() throws Exception { - // JUnitDoclet begin method reset - // JUnitDoclet end method reset - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardDrawingTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardDrawingTest.java deleted file mode 100644 index b336ffd5f..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardDrawingTest.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import org.jhotdraw.standard.StandardDrawing; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardDrawingTest is generated by - * JUnitDoclet to hold the tests for StandardDrawing. - * @see org.jhotdraw.standard.StandardDrawing - */ -// JUnitDoclet end javadoc_class -public class StandardDrawingTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardDrawing standarddrawing; - // JUnitDoclet end class - - /** - * Constructor StandardDrawingTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardDrawingTest(String name) { - // JUnitDoclet begin method StandardDrawingTest - super(name); - // JUnitDoclet end method StandardDrawingTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public StandardDrawing createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new StandardDrawing(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standarddrawing = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standarddrawing = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addDrawingChangeListener() - /** - * Method testAddDrawingChangeListener is testing addDrawingChangeListener - * @see org.jhotdraw.standard.StandardDrawing#addDrawingChangeListener(org.jhotdraw.framework.DrawingChangeListener) - */ - // JUnitDoclet end javadoc_method addDrawingChangeListener() - public void testAddDrawingChangeListener() throws Exception { - // JUnitDoclet begin method addDrawingChangeListener - // JUnitDoclet end method addDrawingChangeListener - } - - // JUnitDoclet begin javadoc_method removeDrawingChangeListener() - /** - * Method testRemoveDrawingChangeListener is testing removeDrawingChangeListener - * @see org.jhotdraw.standard.StandardDrawing#removeDrawingChangeListener(org.jhotdraw.framework.DrawingChangeListener) - */ - // JUnitDoclet end javadoc_method removeDrawingChangeListener() - public void testRemoveDrawingChangeListener() throws Exception { - // JUnitDoclet begin method removeDrawingChangeListener - // JUnitDoclet end method removeDrawingChangeListener - } - - // JUnitDoclet begin javadoc_method drawingChangeListeners() - /** - * Method testDrawingChangeListeners is testing drawingChangeListeners - * @see org.jhotdraw.standard.StandardDrawing#drawingChangeListeners() - */ - // JUnitDoclet end javadoc_method drawingChangeListeners() - public void testDrawingChangeListeners() throws Exception { - // JUnitDoclet begin method drawingChangeListeners - // JUnitDoclet end method drawingChangeListeners - } - - // JUnitDoclet begin javadoc_method orphan() - /** - * Method testOrphan is testing orphan - * @see org.jhotdraw.standard.StandardDrawing#orphan(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method orphan() - public void testOrphan() throws Exception { - // JUnitDoclet begin method orphan - // JUnitDoclet end method orphan - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.standard.StandardDrawing#add(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method figureInvalidated() - /** - * Method testFigureInvalidated is testing figureInvalidated - * @see org.jhotdraw.standard.StandardDrawing#figureInvalidated(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureInvalidated() - public void testFigureInvalidated() throws Exception { - // JUnitDoclet begin method figureInvalidated - // JUnitDoclet end method figureInvalidated - } - - // JUnitDoclet begin javadoc_method fireDrawingTitleChanged() - /** - * Method testFireDrawingTitleChanged is testing fireDrawingTitleChanged - * @see org.jhotdraw.standard.StandardDrawing#fireDrawingTitleChanged() - */ - // JUnitDoclet end javadoc_method fireDrawingTitleChanged() - public void testFireDrawingTitleChanged() throws Exception { - // JUnitDoclet begin method fireDrawingTitleChanged - // JUnitDoclet end method fireDrawingTitleChanged - } - - // JUnitDoclet begin javadoc_method figureRequestUpdate() - /** - * Method testFigureRequestUpdate is testing figureRequestUpdate - * @see org.jhotdraw.standard.StandardDrawing#figureRequestUpdate(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureRequestUpdate() - public void testFigureRequestUpdate() throws Exception { - // JUnitDoclet begin method figureRequestUpdate - // JUnitDoclet end method figureRequestUpdate - } - - // JUnitDoclet begin javadoc_method handles() - /** - * Method testHandles is testing handles - * @see org.jhotdraw.standard.StandardDrawing#handles() - */ - // JUnitDoclet end javadoc_method handles() - public void testHandles() throws Exception { - // JUnitDoclet begin method handles - // JUnitDoclet end method handles - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.standard.StandardDrawing#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method basicDisplayBox() - /** - * Method testBasicDisplayBox is testing basicDisplayBox - * @see org.jhotdraw.standard.StandardDrawing#basicDisplayBox(java.awt.Point, java.awt.Point) - */ - // JUnitDoclet end javadoc_method basicDisplayBox() - public void testBasicDisplayBox() throws Exception { - // JUnitDoclet begin method basicDisplayBox - // JUnitDoclet end method basicDisplayBox - } - - // JUnitDoclet begin javadoc_method lock() - /** - * Method testLock is testing lock - * @see org.jhotdraw.standard.StandardDrawing#lock() - */ - // JUnitDoclet end javadoc_method lock() - public void testLock() throws Exception { - // JUnitDoclet begin method lock - // JUnitDoclet end method lock - } - - // JUnitDoclet begin javadoc_method unlock() - /** - * Method testUnlock is testing unlock - * @see org.jhotdraw.standard.StandardDrawing#unlock() - */ - // JUnitDoclet end javadoc_method unlock() - public void testUnlock() throws Exception { - // JUnitDoclet begin method unlock - // JUnitDoclet end method unlock - } - - // JUnitDoclet begin javadoc_method setTitle() - /** - * Method testSetGetTitle is testing setTitle - * and getTitle together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.standard.StandardDrawing#setTitle(java.lang.String) - * @see org.jhotdraw.standard.StandardDrawing#getTitle() - */ - // JUnitDoclet end javadoc_method setTitle() - public void testSetGetTitle() throws Exception { - // JUnitDoclet begin method setTitle getTitle - java.lang.String[] tests = { "", " ", "a", "A", "�", "�", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - standarddrawing.setTitle(tests[i]); - assertEquals(tests[i], standarddrawing.getTitle()); - } - // JUnitDoclet end method setTitle getTitle - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardDrawingViewTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardDrawingViewTest.java deleted file mode 100644 index 51ce9e7c7..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardDrawingViewTest.java +++ /dev/null @@ -1,728 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.standard.*; -import org.jhotdraw.standard.GridConstrainer; -import org.jhotdraw.standard.SimpleUpdateStrategy; -import org.jhotdraw.standard.StandardDrawingView; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardDrawingViewTest is generated by - * JUnitDoclet to hold the tests for StandardDrawingView. - * @see org.jhotdraw.standard.StandardDrawingView - */ -// JUnitDoclet end javadoc_class -public class StandardDrawingViewTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardDrawingView standarddrawingview; - // JUnitDoclet end class - - /** - * Constructor StandardDrawingViewTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardDrawingViewTest(String name) { - // JUnitDoclet begin method StandardDrawingViewTest - super(name); - // JUnitDoclet end method StandardDrawingViewTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public StandardDrawingView createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return (StandardDrawingView)getDrawingEditor().view(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - getDrawingEditor().open(); - getDrawingEditor().newWindow(new StandardDrawing()); - standarddrawingview = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standarddrawingview = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setEditor() - /** - * Method testSetEditor is testing setEditor - * @see org.jhotdraw.standard.StandardDrawingView#setEditor(org.jhotdraw.framework.DrawingEditor) - */ - // JUnitDoclet end javadoc_method setEditor() - public void testSetEditor() throws Exception { - // JUnitDoclet begin method setEditor - // JUnitDoclet end method setEditor - } - - // JUnitDoclet begin javadoc_method tool() - /** - * Method testTool is testing tool - * @see org.jhotdraw.standard.StandardDrawingView#tool() - */ - // JUnitDoclet end javadoc_method tool() - public void testTool() throws Exception { - // JUnitDoclet begin method tool - // JUnitDoclet end method tool - } - - // JUnitDoclet begin javadoc_method drawing() - /** - * Method testDrawing is testing drawing - * @see org.jhotdraw.standard.StandardDrawingView#drawing() - */ - // JUnitDoclet end javadoc_method drawing() - public void testDrawing() throws Exception { - // JUnitDoclet begin method drawing - // JUnitDoclet end method drawing - } - - // JUnitDoclet begin javadoc_method setDrawing() - /** - * Method testSetDrawing is testing setDrawing - * @see org.jhotdraw.standard.StandardDrawingView#setDrawing(org.jhotdraw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method setDrawing() - public void testSetDrawing() throws Exception { - // JUnitDoclet begin method setDrawing - // JUnitDoclet end method setDrawing - } - - // JUnitDoclet begin javadoc_method editor() - /** - * Method testEditor is testing editor - * @see org.jhotdraw.standard.StandardDrawingView#editor() - */ - // JUnitDoclet end javadoc_method editor() - public void testEditor() throws Exception { - // JUnitDoclet begin method editor - // JUnitDoclet end method editor - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.standard.StandardDrawingView#add(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.standard.StandardDrawingView#remove(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method addAll() - /** - * Method testAddAll is testing addAll - * @see org.jhotdraw.standard.StandardDrawingView#addAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addAll() - public void testAddAll() throws Exception { - // JUnitDoclet begin method addAll - // JUnitDoclet end method addAll - } - - // JUnitDoclet begin javadoc_method figureExists() - /** - * Method testFigureExists is testing figureExists - * @see org.jhotdraw.standard.StandardDrawingView#figureExists(org.jhotdraw.framework.Figure, org.jhotdraw.framework.FigureEnumeration) - */ - // JUnitDoclet end javadoc_method figureExists() - public void testFigureExists() throws Exception { - // JUnitDoclet begin method figureExists - // JUnitDoclet end method figureExists - } - - // JUnitDoclet begin javadoc_method insertFigures() - /** - * Method testInsertFigures is testing insertFigures - * @see org.jhotdraw.standard.StandardDrawingView#insertFigures(org.jhotdraw.framework.FigureEnumeration, int, int, boolean) - */ - // JUnitDoclet end javadoc_method insertFigures() - public void testInsertFigures() throws Exception { - // JUnitDoclet begin method insertFigures - // JUnitDoclet end method insertFigures - } - - // JUnitDoclet begin javadoc_method getConnectionFigures() - /** - * Method testGetConnectionFigures is testing getConnectionFigures - * @see org.jhotdraw.standard.StandardDrawingView#getConnectionFigures(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method getConnectionFigures() - public void testGetConnectionFigures() throws Exception { - // JUnitDoclet begin method getConnectionFigures - // JUnitDoclet end method getConnectionFigures - } - - // JUnitDoclet begin javadoc_method getMinimumSize() - /** - * Method testGetMinimumSize is testing getMinimumSize - * @see org.jhotdraw.standard.StandardDrawingView#getMinimumSize() - */ - // JUnitDoclet end javadoc_method getMinimumSize() - public void testGetMinimumSize() throws Exception { - // JUnitDoclet begin method getMinimumSize - // JUnitDoclet end method getMinimumSize - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see org.jhotdraw.standard.StandardDrawingView#getPreferredSize() - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method setDisplayUpdate() - /** - * Method testSetGetDisplayUpdate is testing setDisplayUpdate - * and getDisplayUpdate together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.standard.StandardDrawingView#setDisplayUpdate(org.jhotdraw.framework.Painter) - * @see org.jhotdraw.standard.StandardDrawingView#getDisplayUpdate() - */ - // JUnitDoclet end javadoc_method setDisplayUpdate() - public void testSetGetDisplayUpdate() throws Exception { - // JUnitDoclet begin method setDisplayUpdate getDisplayUpdate - org.jhotdraw.framework.Painter[] tests = { new SimpleUpdateStrategy(), null }; - - for (int i = 0; i < tests.length; i++) { - standarddrawingview.setDisplayUpdate(tests[i]); - assertEquals(tests[i], standarddrawingview.getDisplayUpdate()); - } - // JUnitDoclet end method setDisplayUpdate getDisplayUpdate - } - - // JUnitDoclet begin javadoc_method selection() - /** - * Method testSelection is testing selection - * @see org.jhotdraw.standard.StandardDrawingView#selection() - */ - // JUnitDoclet end javadoc_method selection() - public void testSelection() throws Exception { - // JUnitDoclet begin method selection - // JUnitDoclet end method selection - } - - // JUnitDoclet begin javadoc_method selectionZOrdered() - /** - * Method testSelectionZOrdered is testing selectionZOrdered - * @see org.jhotdraw.standard.StandardDrawingView#selectionZOrdered() - */ - // JUnitDoclet end javadoc_method selectionZOrdered() - public void testSelectionZOrdered() throws Exception { - // JUnitDoclet begin method selectionZOrdered - // JUnitDoclet end method selectionZOrdered - } - - // JUnitDoclet begin javadoc_method selectionCount() - /** - * Method testSelectionCount is testing selectionCount - * @see org.jhotdraw.standard.StandardDrawingView#selectionCount() - */ - // JUnitDoclet end javadoc_method selectionCount() - public void testSelectionCount() throws Exception { - // JUnitDoclet begin method selectionCount - // JUnitDoclet end method selectionCount - } - - // JUnitDoclet begin javadoc_method isFigureSelected() - /** - * Method testIsFigureSelected is testing isFigureSelected - * @see org.jhotdraw.standard.StandardDrawingView#isFigureSelected(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method isFigureSelected() - public void testIsFigureSelected() throws Exception { - // JUnitDoclet begin method isFigureSelected - // JUnitDoclet end method isFigureSelected - } - - // JUnitDoclet begin javadoc_method addToSelection() - /** - * Method testAddToSelection is testing addToSelection - * @see org.jhotdraw.standard.StandardDrawingView#addToSelection(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method addToSelection() - public void testAddToSelection() throws Exception { - // JUnitDoclet begin method addToSelection - // JUnitDoclet end method addToSelection - } - - // JUnitDoclet begin javadoc_method addToSelectionAll() - /** - * Method testAddToSelectionAll is testing addToSelectionAll - * @see org.jhotdraw.standard.StandardDrawingView#addToSelectionAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addToSelectionAll() - public void testAddToSelectionAll() throws Exception { - // JUnitDoclet begin method addToSelectionAll - // JUnitDoclet end method addToSelectionAll - } - - // JUnitDoclet begin javadoc_method removeFromSelection() - /** - * Method testRemoveFromSelection is testing removeFromSelection - * @see org.jhotdraw.standard.StandardDrawingView#removeFromSelection(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method removeFromSelection() - public void testRemoveFromSelection() throws Exception { - // JUnitDoclet begin method removeFromSelection - // JUnitDoclet end method removeFromSelection - } - - // JUnitDoclet begin javadoc_method toggleSelection() - /** - * Method testToggleSelection is testing toggleSelection - * @see org.jhotdraw.standard.StandardDrawingView#toggleSelection(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method toggleSelection() - public void testToggleSelection() throws Exception { - // JUnitDoclet begin method toggleSelection - // JUnitDoclet end method toggleSelection - } - - // JUnitDoclet begin javadoc_method clearSelection() - /** - * Method testClearSelection is testing clearSelection - * @see org.jhotdraw.standard.StandardDrawingView#clearSelection() - */ - // JUnitDoclet end javadoc_method clearSelection() - public void testClearSelection() throws Exception { - // JUnitDoclet begin method clearSelection - // JUnitDoclet end method clearSelection - } - - // JUnitDoclet begin javadoc_method getFigureSelection() - /** - * Method testGetFigureSelection is testing getFigureSelection - * @see org.jhotdraw.standard.StandardDrawingView#getFigureSelection() - */ - // JUnitDoclet end javadoc_method getFigureSelection() - public void testGetFigureSelection() throws Exception { - // JUnitDoclet begin method getFigureSelection - // JUnitDoclet end method getFigureSelection - } - - // JUnitDoclet begin javadoc_method findHandle() - /** - * Method testFindHandle is testing findHandle - * @see org.jhotdraw.standard.StandardDrawingView#findHandle(int, int) - */ - // JUnitDoclet end javadoc_method findHandle() - public void testFindHandle() throws Exception { - // JUnitDoclet begin method findHandle - // JUnitDoclet end method findHandle - } - - // JUnitDoclet begin javadoc_method lastClick() - /** - * Method testLastClick is testing lastClick - * @see org.jhotdraw.standard.StandardDrawingView#lastClick() - */ - // JUnitDoclet end javadoc_method lastClick() - public void testLastClick() throws Exception { - // JUnitDoclet begin method lastClick - // JUnitDoclet end method lastClick - } - - // JUnitDoclet begin javadoc_method setConstrainer() - /** - * Method testSetGetConstrainer is testing setConstrainer - * and getConstrainer together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.standard.StandardDrawingView#setConstrainer(org.jhotdraw.framework.PointConstrainer) - * @see org.jhotdraw.standard.StandardDrawingView#getConstrainer() - */ - // JUnitDoclet end javadoc_method setConstrainer() - public void testSetGetConstrainer() throws Exception { - // JUnitDoclet begin method setConstrainer getConstrainer - org.jhotdraw.framework.PointConstrainer[] tests = { new GridConstrainer(5, 5), null }; - - for (int i = 0; i < tests.length; i++) { - standarddrawingview.setConstrainer(tests[i]); - assertEquals(tests[i], standarddrawingview.getConstrainer()); - } - // JUnitDoclet end method setConstrainer getConstrainer - } - - // JUnitDoclet begin javadoc_method checkDamage() - /** - * Method testCheckDamage is testing checkDamage - * @see org.jhotdraw.standard.StandardDrawingView#checkDamage() - */ - // JUnitDoclet end javadoc_method checkDamage() - public void testCheckDamage() throws Exception { - // JUnitDoclet begin method checkDamage - // JUnitDoclet end method checkDamage - } - - // JUnitDoclet begin javadoc_method repairDamage() - /** - * Method testRepairDamage is testing repairDamage - * @see org.jhotdraw.standard.StandardDrawingView#repairDamage() - */ - // JUnitDoclet end javadoc_method repairDamage() - public void testRepairDamage() throws Exception { - // JUnitDoclet begin method repairDamage - // JUnitDoclet end method repairDamage - } - - // JUnitDoclet begin javadoc_method drawingInvalidated() - /** - * Method testDrawingInvalidated is testing drawingInvalidated - * @see org.jhotdraw.standard.StandardDrawingView#drawingInvalidated(org.jhotdraw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingInvalidated() - public void testDrawingInvalidated() throws Exception { - // JUnitDoclet begin method drawingInvalidated - // JUnitDoclet end method drawingInvalidated - } - - // JUnitDoclet begin javadoc_method drawingRequestUpdate() - /** - * Method testDrawingRequestUpdate is testing drawingRequestUpdate - * @see org.jhotdraw.standard.StandardDrawingView#drawingRequestUpdate(org.jhotdraw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingRequestUpdate() - public void testDrawingRequestUpdate() throws Exception { - // JUnitDoclet begin method drawingRequestUpdate - // JUnitDoclet end method drawingRequestUpdate - } - - // JUnitDoclet begin javadoc_method drawingTitleChanged() - /** - * Method testDrawingTitleChanged is testing drawingTitleChanged - * @see org.jhotdraw.standard.StandardDrawingView#drawingTitleChanged(org.jhotdraw.framework.DrawingChangeEvent) - */ - // JUnitDoclet end javadoc_method drawingTitleChanged() - public void testDrawingTitleChanged() throws Exception { - // JUnitDoclet begin method drawingTitleChanged - // JUnitDoclet end method drawingTitleChanged - } - - // JUnitDoclet begin javadoc_method drawAll() - /** - * Method testDrawAll is testing drawAll - * @see org.jhotdraw.standard.StandardDrawingView#drawAll(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawAll() - public void testDrawAll() throws Exception { - // JUnitDoclet begin method drawAll - // JUnitDoclet end method drawAll - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.standard.StandardDrawingView#draw(java.awt.Graphics, org.jhotdraw.framework.FigureEnumeration) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method drawHandles() - /** - * Method testDrawHandles is testing drawHandles - * @see org.jhotdraw.standard.StandardDrawingView#drawHandles(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawHandles() - public void testDrawHandles() throws Exception { - // JUnitDoclet begin method drawHandles - // JUnitDoclet end method drawHandles - } - - // JUnitDoclet begin javadoc_method drawDrawing() - /** - * Method testDrawDrawing is testing drawDrawing - * @see org.jhotdraw.standard.StandardDrawingView#drawDrawing(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawDrawing() - public void testDrawDrawing() throws Exception { - // JUnitDoclet begin method drawDrawing - // JUnitDoclet end method drawDrawing - } - - // JUnitDoclet begin javadoc_method drawBackground() - /** - * Method testDrawBackground is testing drawBackground - * @see org.jhotdraw.standard.StandardDrawingView#drawBackground(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method drawBackground() - public void testDrawBackground() throws Exception { - // JUnitDoclet begin method drawBackground - // JUnitDoclet end method drawBackground - } - - // JUnitDoclet begin javadoc_method addBackground() - /** - * Method testAddBackground is testing addBackground - * @see org.jhotdraw.standard.StandardDrawingView#addBackground(org.jhotdraw.framework.Painter) - */ - // JUnitDoclet end javadoc_method addBackground() - public void testAddBackground() throws Exception { - // JUnitDoclet begin method addBackground - // JUnitDoclet end method addBackground - } - - // JUnitDoclet begin javadoc_method removeBackground() - /** - * Method testRemoveBackground is testing removeBackground - * @see org.jhotdraw.standard.StandardDrawingView#removeBackground(org.jhotdraw.framework.Painter) - */ - // JUnitDoclet end javadoc_method removeBackground() - public void testRemoveBackground() throws Exception { - // JUnitDoclet begin method removeBackground - // JUnitDoclet end method removeBackground - } - - // JUnitDoclet begin javadoc_method removeForeground() - /** - * Method testRemoveForeground is testing removeForeground - * @see org.jhotdraw.standard.StandardDrawingView#removeForeground(org.jhotdraw.framework.Painter) - */ - // JUnitDoclet end javadoc_method removeForeground() - public void testRemoveForeground() throws Exception { - // JUnitDoclet begin method removeForeground - // JUnitDoclet end method removeForeground - } - - // JUnitDoclet begin javadoc_method addForeground() - /** - * Method testAddForeground is testing addForeground - * @see org.jhotdraw.standard.StandardDrawingView#addForeground(org.jhotdraw.framework.Painter) - */ - // JUnitDoclet end javadoc_method addForeground() - public void testAddForeground() throws Exception { - // JUnitDoclet begin method addForeground - // JUnitDoclet end method addForeground - } - - // JUnitDoclet begin javadoc_method freezeView() - /** - * Method testFreezeView is testing freezeView - * @see org.jhotdraw.standard.StandardDrawingView#freezeView() - */ - // JUnitDoclet end javadoc_method freezeView() - public void testFreezeView() throws Exception { - // JUnitDoclet begin method freezeView - // JUnitDoclet end method freezeView - } - - // JUnitDoclet begin javadoc_method unfreezeView() - /** - * Method testUnfreezeView is testing unfreezeView - * @see org.jhotdraw.standard.StandardDrawingView#unfreezeView() - */ - // JUnitDoclet end javadoc_method unfreezeView() - public void testUnfreezeView() throws Exception { - // JUnitDoclet begin method unfreezeView - // JUnitDoclet end method unfreezeView - } - - // JUnitDoclet begin javadoc_method isFocusTraversable() - /** - * Method testIsFocusTraversable is testing isFocusTraversable - * @see org.jhotdraw.standard.StandardDrawingView#isFocusTraversable() - */ - // JUnitDoclet end javadoc_method isFocusTraversable() - public void testIsFocusTraversable() throws Exception { - // JUnitDoclet begin method isFocusTraversable - // JUnitDoclet end method isFocusTraversable - } - - // JUnitDoclet begin javadoc_method isInteractive() - /** - * Method testIsInteractive is testing isInteractive - * @see org.jhotdraw.standard.StandardDrawingView#isInteractive() - */ - // JUnitDoclet end javadoc_method isInteractive() - public void testIsInteractive() throws Exception { - // JUnitDoclet begin method isInteractive - // JUnitDoclet end method isInteractive - } - - // JUnitDoclet begin javadoc_method keyTyped() - /** - * Method testKeyTyped is testing keyTyped - * @see org.jhotdraw.standard.StandardDrawingView#keyTyped(java.awt.event.KeyEvent) - */ - // JUnitDoclet end javadoc_method keyTyped() - public void testKeyTyped() throws Exception { - // JUnitDoclet begin method keyTyped - // JUnitDoclet end method keyTyped - } - - // JUnitDoclet begin javadoc_method keyReleased() - /** - * Method testKeyReleased is testing keyReleased - * @see org.jhotdraw.standard.StandardDrawingView#keyReleased(java.awt.event.KeyEvent) - */ - // JUnitDoclet end javadoc_method keyReleased() - public void testKeyReleased() throws Exception { - // JUnitDoclet begin method keyReleased - // JUnitDoclet end method keyReleased - } - - // JUnitDoclet begin javadoc_method addFigureSelectionListener() - /** - * Method testAddFigureSelectionListener is testing addFigureSelectionListener - * @see org.jhotdraw.standard.StandardDrawingView#addFigureSelectionListener(org.jhotdraw.framework.FigureSelectionListener) - */ - // JUnitDoclet end javadoc_method addFigureSelectionListener() - public void testAddFigureSelectionListener() throws Exception { - // JUnitDoclet begin method addFigureSelectionListener - // JUnitDoclet end method addFigureSelectionListener - } - - // JUnitDoclet begin javadoc_method removeFigureSelectionListener() - /** - * Method testRemoveFigureSelectionListener is testing removeFigureSelectionListener - * @see org.jhotdraw.standard.StandardDrawingView#removeFigureSelectionListener(org.jhotdraw.framework.FigureSelectionListener) - */ - // JUnitDoclet end javadoc_method removeFigureSelectionListener() - public void testRemoveFigureSelectionListener() throws Exception { - // JUnitDoclet begin method removeFigureSelectionListener - // JUnitDoclet end method removeFigureSelectionListener - } - - // JUnitDoclet begin javadoc_method getDefaultDNDActions() - /** - * Method testGetDefaultDNDActions is testing getDefaultDNDActions - * @see org.jhotdraw.standard.StandardDrawingView#getDefaultDNDActions() - */ - // JUnitDoclet end javadoc_method getDefaultDNDActions() - public void testGetDefaultDNDActions() throws Exception { - // JUnitDoclet begin method getDefaultDNDActions - // JUnitDoclet end method getDefaultDNDActions - } - - // JUnitDoclet begin javadoc_method autoscroll() - /** - * Method testAutoscroll is testing autoscroll - * @see org.jhotdraw.standard.StandardDrawingView#autoscroll(java.awt.Point) - */ - // JUnitDoclet end javadoc_method autoscroll() - public void testAutoscroll() throws Exception { - // JUnitDoclet begin method autoscroll - // JUnitDoclet end method autoscroll - } - - // JUnitDoclet begin javadoc_method getAutoscrollInsets() - /** - * Method testGetAutoscrollInsets is testing getAutoscrollInsets - * @see org.jhotdraw.standard.StandardDrawingView#getAutoscrollInsets() - */ - // JUnitDoclet end javadoc_method getAutoscrollInsets() - public void testGetAutoscrollInsets() throws Exception { - // JUnitDoclet begin method getAutoscrollInsets - // JUnitDoclet end method getAutoscrollInsets - } - - // JUnitDoclet begin javadoc_method toString() - /** - * Method testToString is testing toString - * @see org.jhotdraw.standard.StandardDrawingView#toString() - */ - // JUnitDoclet end javadoc_method toString() - public void testToString() throws Exception { - // JUnitDoclet begin method toString - // JUnitDoclet end method toString - } - - // JUnitDoclet begin javadoc_method setDragSourceActive() - /** - * Method testSetDragSourceActive is testing setDragSourceActive - * @see org.jhotdraw.standard.StandardDrawingView#setDragSourceActive(boolean) - */ - // JUnitDoclet end javadoc_method setDragSourceActive() - public void testSetDragSourceActive() throws Exception { - // JUnitDoclet begin method setDragSourceActive - // JUnitDoclet end method setDragSourceActive - } - - // JUnitDoclet begin javadoc_method setDropTargetActive() - /** - * Method testSetDropTargetActive is testing setDropTargetActive - * @see org.jhotdraw.standard.StandardDrawingView#setDropTargetActive(boolean) - */ - // JUnitDoclet end javadoc_method setDropTargetActive() - public void testSetDropTargetActive() throws Exception { - // JUnitDoclet begin method setDropTargetActive - // JUnitDoclet end method setDropTargetActive - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardFigureSelectionTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardFigureSelectionTest.java deleted file mode 100644 index 686eafabe..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardFigureSelectionTest.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import org.jhotdraw.figures.PolyLineFigure; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.standard.FigureEnumerator; -import org.jhotdraw.standard.StandardFigureSelection; -import org.jhotdraw.util.CollectionsFactory; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardFigureSelectionTest is generated by - * JUnitDoclet to hold the tests for StandardFigureSelection. - * @see org.jhotdraw.standard.StandardFigureSelection - */ -// JUnitDoclet end javadoc_class -public class StandardFigureSelectionTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardFigureSelection standardfigureselection; - // JUnitDoclet end class - - /** - * Constructor StandardFigureSelectionTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardFigureSelectionTest(String name) { - // JUnitDoclet begin method StandardFigureSelectionTest - super(name); - // JUnitDoclet end method StandardFigureSelectionTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public StandardFigureSelection createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l = CollectionsFactory.current().createList(); - l.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - l.add(new PolyLineFigure(20, 20)); - FigureEnumeration fenum = new FigureEnumerator(l); - return new StandardFigureSelection(fenum, l.size()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standardfigureselection = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standardfigureselection = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getType() - /** - * Method testGetType is testing getType - * @see org.jhotdraw.standard.StandardFigureSelection#getType() - */ - // JUnitDoclet end javadoc_method getType() - public void testGetType() throws Exception { - // JUnitDoclet begin method getType - // JUnitDoclet end method getType - } - - // JUnitDoclet begin javadoc_method getData() - /** - * Method testGetData is testing getData - * @see org.jhotdraw.standard.StandardFigureSelection#getData(java.lang.String) - */ - // JUnitDoclet end javadoc_method getData() - public void testGetData() throws Exception { - // JUnitDoclet begin method getData - // JUnitDoclet end method getData - } - - // JUnitDoclet begin javadoc_method duplicateFigures() - /** - * Method testDuplicateFigures is testing duplicateFigures - * @see org.jhotdraw.standard.StandardFigureSelection#duplicateFigures(org.jhotdraw.framework.FigureEnumeration, int) - */ - // JUnitDoclet end javadoc_method duplicateFigures() - public void testDuplicateFigures() throws Exception { - // JUnitDoclet begin method duplicateFigures - // JUnitDoclet end method duplicateFigures - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardSuite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardSuite.java deleted file mode 100644 index 83f524721..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/StandardSuite.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite StandardSuite -*/ -// JUnitDoclet end javadoc_class -public class StandardSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.standard"); - - suite.addTestSuite(org.jhotdraw.test.standard.PeripheralLocatorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.SingleFigureEnumeratorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.NullDrawingViewTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.NullToolTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.HandleAndEnumeratorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.InsertIntoDrawingVisitorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.DeleteFromDrawingVisitorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.SelectAllCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.FigureAndEnumeratorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.HandleEnumeratorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.StandardFigureSelectionTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.FastBufferedUpdateStrategyTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.ToolButtonTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.ToggleGridCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.StandardDrawingViewTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.StandardDrawingTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.SimpleUpdateStrategyTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.SelectionToolTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.SelectAreaTrackerTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.ReverseFigureEnumeratorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.RelativeLocatorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.PasteCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.OffsetLocatorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.NullHandleTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.LocatorConnectorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.HandleTrackerTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.GridConstrainerTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.FigureEnumeratorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.FigureChangeEventMulticasterTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.DuplicateCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.DragTrackerTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.DeleteCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.CutCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.CreationToolTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.CopyCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.ConnectionToolTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.ConnectionHandleTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.ChopBoxConnectorTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.ChangeConnectionStartHandleTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.ChangeConnectionEndHandleTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.ChangeAttributeCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.BufferedUpdateStrategyTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.SendToBackCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.BringToFrontCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.LocatorHandleTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.BoxHandleKitTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.AlignCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.standard.FigureChangeAdapterTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ToggleGridCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ToggleGridCommandTest.java deleted file mode 100644 index 35a6998b9..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ToggleGridCommandTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.standard.ToggleGridCommand; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ToggleGridCommandTest is generated by - * JUnitDoclet to hold the tests for ToggleGridCommand. - * @see org.jhotdraw.standard.ToggleGridCommand - */ -// JUnitDoclet end javadoc_class -public class ToggleGridCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ToggleGridCommand togglegridcommand; - // JUnitDoclet end class - - /** - * Constructor ToggleGridCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ToggleGridCommandTest(String name) { - // JUnitDoclet begin method ToggleGridCommandTest - super(name); - // JUnitDoclet end method ToggleGridCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ToggleGridCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ToggleGridCommand("TestToggle", getDrawingEditor(), new Point(5, 5)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - togglegridcommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - togglegridcommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.standard.ToggleGridCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ToolButtonTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ToolButtonTest.java deleted file mode 100644 index ccab144cb..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/standard/ToolButtonTest.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.standard; - -// JUnitDoclet begin import -import org.jhotdraw.application.DrawApplication; -import org.jhotdraw.framework.Tool; -import org.jhotdraw.standard.SelectionTool; -import org.jhotdraw.standard.ToolButton; -import org.jhotdraw.test.JHDTestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ToolButtonTest is generated by - * JUnitDoclet to hold the tests for ToolButton. - * @see org.jhotdraw.standard.ToolButton - */ -// JUnitDoclet end javadoc_class -public class ToolButtonTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ToolButton toolbutton; - // JUnitDoclet end class - - /** - * Constructor ToolButtonTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ToolButtonTest(String name) { - // JUnitDoclet begin method ToolButtonTest - super(name); - // JUnitDoclet end method ToolButtonTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ToolButton createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Tool tool = new SelectionTool(getDrawingEditor()); - return new ToolButton(getDrawingEditor(), DrawApplication.IMAGES + "SEL", "Selection Tool", tool); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - toolbutton = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - toolbutton = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method tool() - /** - * Method testTool is testing tool - * @see org.jhotdraw.standard.ToolButton#tool() - */ - // JUnitDoclet end javadoc_method tool() - public void testTool() throws Exception { - // JUnitDoclet begin method tool - // JUnitDoclet end method tool - } - - // JUnitDoclet begin javadoc_method name() - /** - * Method testName is testing name - * @see org.jhotdraw.standard.ToolButton#name() - */ - // JUnitDoclet end javadoc_method name() - public void testName() throws Exception { - // JUnitDoclet begin method name - // JUnitDoclet end method name - } - - // JUnitDoclet begin javadoc_method attributeValue() - /** - * Method testAttributeValue is testing attributeValue - * @see org.jhotdraw.standard.ToolButton#attributeValue() - */ - // JUnitDoclet end javadoc_method attributeValue() - public void testAttributeValue() throws Exception { - // JUnitDoclet begin method attributeValue - // JUnitDoclet end method attributeValue - } - - // JUnitDoclet begin javadoc_method getMinimumSize() - /** - * Method testGetMinimumSize is testing getMinimumSize - * @see org.jhotdraw.standard.ToolButton#getMinimumSize() - */ - // JUnitDoclet end javadoc_method getMinimumSize() - public void testGetMinimumSize() throws Exception { - // JUnitDoclet begin method getMinimumSize - // JUnitDoclet end method getMinimumSize - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see org.jhotdraw.standard.ToolButton#getPreferredSize() - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method getMaximumSize() - /** - * Method testGetMaximumSize is testing getMaximumSize - * @see org.jhotdraw.standard.ToolButton#getMaximumSize() - */ - // JUnitDoclet end javadoc_method getMaximumSize() - public void testGetMaximumSize() throws Exception { - // JUnitDoclet begin method getMaximumSize - // JUnitDoclet end method getMaximumSize - } - - // JUnitDoclet begin javadoc_method paintSelected() - /** - * Method testPaintSelected is testing paintSelected - * @see org.jhotdraw.standard.ToolButton#paintSelected(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method paintSelected() - public void testPaintSelected() throws Exception { - // JUnitDoclet begin method paintSelected - // JUnitDoclet end method paintSelected - } - - // JUnitDoclet begin javadoc_method paint() - /** - * Method testPaint is testing paint - * @see org.jhotdraw.standard.ToolButton#paint(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method paint() - public void testPaint() throws Exception { - // JUnitDoclet begin method paint - // JUnitDoclet end method paint - } - - // JUnitDoclet begin javadoc_method toolUsable() - /** - * Method testToolUsable is testing toolUsable - * @see org.jhotdraw.standard.ToolButton#toolUsable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolUsable() - public void testToolUsable() throws Exception { - // JUnitDoclet begin method toolUsable - // JUnitDoclet end method toolUsable - } - - // JUnitDoclet begin javadoc_method toolUnusable() - /** - * Method testToolUnusable is testing toolUnusable - * @see org.jhotdraw.standard.ToolButton#toolUnusable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolUnusable() - public void testToolUnusable() throws Exception { - // JUnitDoclet begin method toolUnusable - // JUnitDoclet end method toolUnusable - } - - // JUnitDoclet begin javadoc_method toolActivated() - /** - * Method testToolActivated is testing toolActivated - * @see org.jhotdraw.standard.ToolButton#toolActivated(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolActivated() - public void testToolActivated() throws Exception { - // JUnitDoclet begin method toolActivated - // JUnitDoclet end method toolActivated - } - - // JUnitDoclet begin javadoc_method toolDeactivated() - /** - * Method testToolDeactivated is testing toolDeactivated - * @see org.jhotdraw.standard.ToolButton#toolDeactivated(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolDeactivated() - public void testToolDeactivated() throws Exception { - // JUnitDoclet begin method toolDeactivated - // JUnitDoclet end method toolDeactivated - } - - // JUnitDoclet begin javadoc_method toolEnabled() - /** - * Method testToolEnabled is testing toolEnabled - * @see org.jhotdraw.standard.ToolButton#toolEnabled(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolEnabled() - public void testToolEnabled() throws Exception { - // JUnitDoclet begin method toolEnabled - // JUnitDoclet end method toolEnabled - } - - // JUnitDoclet begin javadoc_method toolDisabled() - /** - * Method testToolDisabled is testing toolDisabled - * @see org.jhotdraw.standard.ToolButton#toolDisabled(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolDisabled() - public void testToolDisabled() throws Exception { - // JUnitDoclet begin method toolDisabled - // JUnitDoclet end method toolDisabled - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/AllTests.java deleted file mode 100644 index 02807c4c7..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/AllTests.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.util"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(BoundsTest.class)); - suite.addTest(new TestSuite(ClipboardTest.class)); - suite.addTest(new TestSuite(ColorMapTest.class)); - suite.addTest(new TestSuite(CommandButtonTest.class)); - suite.addTest(new TestSuite(CommandChoiceTest.class)); - suite.addTest(new TestSuite(CommandMenuTest.class)); - suite.addTest(new TestSuite(FillerTest.class)); - suite.addTest(new TestSuite(FloatingTextFieldTest.class)); - suite.addTest(new TestSuite(GeomTest.class)); - suite.addTest(new TestSuite(GraphLayoutTest.class)); - suite.addTest(new TestSuite(IconkitTest.class)); - suite.addTest(new TestSuite(PaletteIconTest.class)); - suite.addTest(new TestSuite(PaletteLayoutTest.class)); - suite.addTest(new TestSuite(RedoCommandTest.class)); - suite.addTest(new TestSuite(ReverseListEnumeratorTest.class)); - suite.addTest(new TestSuite(SerializationStorageFormatTest.class)); - suite.addTest(new TestSuite(StandardStorageFormatTest.class)); - suite.addTest(new TestSuite(StandardVersionControlStrategyTest.class)); - suite.addTest(new TestSuite(StorableInputTest.class)); - suite.addTest(new TestSuite(StorableOutputTest.class)); - suite.addTest(new TestSuite(StorageFormatManagerTest.class)); - suite.addTest(new TestSuite(UndoCommandTest.class)); - suite.addTest(new TestSuite(UndoManagerTest.class)); - suite.addTest(new TestSuite(UndoRedoActivityTest.class)); - suite.addTest(new TestSuite(UndoableAdapterTest.class)); - suite.addTest(new TestSuite(UndoableCommandTest.class)); - suite.addTest(new TestSuite(UndoableHandleTest.class)); - suite.addTest(new TestSuite(UndoableToolTest.class)); - suite.addTest(new TestSuite(VersionManagementTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/BoundsTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/BoundsTest.java deleted file mode 100644 index c1234bd68..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/BoundsTest.java +++ /dev/null @@ -1,484 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import java.awt.Dimension; -import java.awt.geom.Point2D; - -import org.jhotdraw.util.Bounds; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase BoundsTest is generated by - * JUnitDoclet to hold the tests for Bounds. - * @see org.jhotdraw.util.Bounds - */ -// JUnitDoclet end javadoc_class -public class BoundsTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Bounds bounds; - // JUnitDoclet end class - - /** - * Constructor BoundsTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public BoundsTest(String name) { - // JUnitDoclet begin method BoundsTest - super(name); - // JUnitDoclet end method BoundsTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public Bounds createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new Bounds(new Dimension(100, 100)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - bounds = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - bounds = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getLesserX() - /** - * Method testGetLesserX is testing getLesserX - * @see org.jhotdraw.util.Bounds#getLesserX() - */ - // JUnitDoclet end javadoc_method getLesserX() - public void testGetLesserX() throws Exception { - // JUnitDoclet begin method getLesserX - // JUnitDoclet end method getLesserX - } - - // JUnitDoclet begin javadoc_method getGreaterX() - /** - * Method testGetGreaterX is testing getGreaterX - * @see org.jhotdraw.util.Bounds#getGreaterX() - */ - // JUnitDoclet end javadoc_method getGreaterX() - public void testGetGreaterX() throws Exception { - // JUnitDoclet begin method getGreaterX - // JUnitDoclet end method getGreaterX - } - - // JUnitDoclet begin javadoc_method getLesserY() - /** - * Method testGetLesserY is testing getLesserY - * @see org.jhotdraw.util.Bounds#getLesserY() - */ - // JUnitDoclet end javadoc_method getLesserY() - public void testGetLesserY() throws Exception { - // JUnitDoclet begin method getLesserY - // JUnitDoclet end method getLesserY - } - - // JUnitDoclet begin javadoc_method getGreaterY() - /** - * Method testGetGreaterY is testing getGreaterY - * @see org.jhotdraw.util.Bounds#getGreaterY() - */ - // JUnitDoclet end javadoc_method getGreaterY() - public void testGetGreaterY() throws Exception { - // JUnitDoclet begin method getGreaterY - // JUnitDoclet end method getGreaterY - } - - // JUnitDoclet begin javadoc_method getWest() - /** - * Method testGetWest is testing getWest - * @see org.jhotdraw.util.Bounds#getWest() - */ - // JUnitDoclet end javadoc_method getWest() - public void testGetWest() throws Exception { - // JUnitDoclet begin method getWest - // JUnitDoclet end method getWest - } - - // JUnitDoclet begin javadoc_method getEast() - /** - * Method testGetEast is testing getEast - * @see org.jhotdraw.util.Bounds#getEast() - */ - // JUnitDoclet end javadoc_method getEast() - public void testGetEast() throws Exception { - // JUnitDoclet begin method getEast - // JUnitDoclet end method getEast - } - - // JUnitDoclet begin javadoc_method getSouth() - /** - * Method testGetSouth is testing getSouth - * @see org.jhotdraw.util.Bounds#getSouth() - */ - // JUnitDoclet end javadoc_method getSouth() - public void testGetSouth() throws Exception { - // JUnitDoclet begin method getSouth - // JUnitDoclet end method getSouth - } - - // JUnitDoclet begin javadoc_method getNorth() - /** - * Method testGetNorth is testing getNorth - * @see org.jhotdraw.util.Bounds#getNorth() - */ - // JUnitDoclet end javadoc_method getNorth() - public void testGetNorth() throws Exception { - // JUnitDoclet begin method getNorth - // JUnitDoclet end method getNorth - } - - // JUnitDoclet begin javadoc_method getWidth() - /** - * Method testGetWidth is testing getWidth - * @see org.jhotdraw.util.Bounds#getWidth() - */ - // JUnitDoclet end javadoc_method getWidth() - public void testGetWidth() throws Exception { - // JUnitDoclet begin method getWidth - // JUnitDoclet end method getWidth - } - - // JUnitDoclet begin javadoc_method getHeight() - /** - * Method testGetHeight is testing getHeight - * @see org.jhotdraw.util.Bounds#getHeight() - */ - // JUnitDoclet end javadoc_method getHeight() - public void testGetHeight() throws Exception { - // JUnitDoclet begin method getHeight - // JUnitDoclet end method getHeight - } - - // JUnitDoclet begin javadoc_method asRectangle2D() - /** - * Method testAsRectangle2D is testing asRectangle2D - * @see org.jhotdraw.util.Bounds#asRectangle2D() - */ - // JUnitDoclet end javadoc_method asRectangle2D() - public void testAsRectangle2D() throws Exception { - // JUnitDoclet begin method asRectangle2D - // JUnitDoclet end method asRectangle2D - } - - // JUnitDoclet begin javadoc_method setCenter() - /** - * Method testSetGetCenter is testing setCenter - * and getCenter together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.Bounds#setCenter(java.awt.geom.Point2D) - * @see org.jhotdraw.util.Bounds#getCenter() - */ - // JUnitDoclet end javadoc_method setCenter() - public void testSetGetCenter() throws Exception { - // JUnitDoclet begin method setCenter getCenter - Point2D[] tests = { new Point2D.Double(2.0, 3.0)}; - - for (int i = 0; i < tests.length; i++) { - bounds.setCenter(tests[i]); - assertEquals(tests[i], bounds.getCenter()); - } - // JUnitDoclet end method setCenter getCenter - } - - // JUnitDoclet begin method setNullCenter() - /** - * Test a null argument to setCenter. Expect an IllegalArgumentException - * - * @see org.jhotdraw.util.Bounds#setCenter(java.awt.geom.Point2D) - */ - public void testSetNullCenter() throws Exception { - Point2D original = bounds.getCenter(); - - try { - bounds.setCenter(null); - fail("IllegalArgumentException expected"); - } - catch (IllegalArgumentException ok) { - assertEquals("setCenter(null) altered property value", original, bounds.getCenter()); - } - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method zoomBy() - /** - * Method testZoomBy is testing zoomBy - * @see org.jhotdraw.util.Bounds#zoomBy(double) - */ - // JUnitDoclet end javadoc_method zoomBy() - public void testZoomBy() throws Exception { - // JUnitDoclet begin method zoomBy - // JUnitDoclet end method zoomBy - } - - // JUnitDoclet begin javadoc_method shiftBy() - /** - * Method testShiftBy is testing shiftBy - * @see org.jhotdraw.util.Bounds#shiftBy(int, int) - */ - // JUnitDoclet end javadoc_method shiftBy() - public void testShiftBy() throws Exception { - // JUnitDoclet begin method shiftBy - // JUnitDoclet end method shiftBy - } - - // JUnitDoclet begin javadoc_method offset() - /** - * Method testOffset is testing offset - * @see org.jhotdraw.util.Bounds#offset(double, double) - */ - // JUnitDoclet end javadoc_method offset() - public void testOffset() throws Exception { - // JUnitDoclet begin method offset - // JUnitDoclet end method offset - } - - // JUnitDoclet begin javadoc_method expandToRatio() - /** - * Method testExpandToRatio is testing expandToRatio - * @see org.jhotdraw.util.Bounds#expandToRatio(double) - */ - // JUnitDoclet end javadoc_method expandToRatio() - public void testExpandToRatio() throws Exception { - // JUnitDoclet begin method expandToRatio - // JUnitDoclet end method expandToRatio - } - - // JUnitDoclet begin javadoc_method includeXCoordinate() - /** - * Method testIncludeXCoordinate is testing includeXCoordinate - * @see org.jhotdraw.util.Bounds#includeXCoordinate(double) - */ - // JUnitDoclet end javadoc_method includeXCoordinate() - public void testIncludeXCoordinate() throws Exception { - // JUnitDoclet begin method includeXCoordinate - // JUnitDoclet end method includeXCoordinate - } - - // JUnitDoclet begin javadoc_method includeYCoordinate() - /** - * Method testIncludeYCoordinate is testing includeYCoordinate - * @see org.jhotdraw.util.Bounds#includeYCoordinate(double) - */ - // JUnitDoclet end javadoc_method includeYCoordinate() - public void testIncludeYCoordinate() throws Exception { - // JUnitDoclet begin method includeYCoordinate - // JUnitDoclet end method includeYCoordinate - } - - // JUnitDoclet begin javadoc_method includePoint() - /** - * Method testIncludePoint is testing includePoint - * @see org.jhotdraw.util.Bounds#includePoint(double, double) - */ - // JUnitDoclet end javadoc_method includePoint() - public void testIncludePoint() throws Exception { - // JUnitDoclet begin method includePoint - // JUnitDoclet end method includePoint - } - - // JUnitDoclet begin javadoc_method includeLine() - /** - * Method testIncludeLine is testing includeLine - * @see org.jhotdraw.util.Bounds#includeLine(double, double, double, double) - */ - // JUnitDoclet end javadoc_method includeLine() - public void testIncludeLine() throws Exception { - // JUnitDoclet begin method includeLine - // JUnitDoclet end method includeLine - } - - // JUnitDoclet begin javadoc_method includeBounds() - /** - * Method testIncludeBounds is testing includeBounds - * @see org.jhotdraw.util.Bounds#includeBounds(org.jhotdraw.util.Bounds) - */ - // JUnitDoclet end javadoc_method includeBounds() - public void testIncludeBounds() throws Exception { - // JUnitDoclet begin method includeBounds - // JUnitDoclet end method includeBounds - } - - // JUnitDoclet begin javadoc_method includeRectangle2D() - /** - * Method testIncludeRectangle2D is testing includeRectangle2D - * @see org.jhotdraw.util.Bounds#includeRectangle2D(java.awt.geom.Rectangle2D) - */ - // JUnitDoclet end javadoc_method includeRectangle2D() - public void testIncludeRectangle2D() throws Exception { - // JUnitDoclet begin method includeRectangle2D - // JUnitDoclet end method includeRectangle2D - } - - // JUnitDoclet begin javadoc_method intersect() - /** - * Method testIntersect is testing intersect - * @see org.jhotdraw.util.Bounds#intersect(org.jhotdraw.util.Bounds) - */ - // JUnitDoclet end javadoc_method intersect() - public void testIntersect() throws Exception { - // JUnitDoclet begin method intersect - // JUnitDoclet end method intersect - } - - // JUnitDoclet begin javadoc_method intersectsPoint() - /** - * Method testIntersectsPoint is testing intersectsPoint - * @see org.jhotdraw.util.Bounds#intersectsPoint(double, double) - */ - // JUnitDoclet end javadoc_method intersectsPoint() - public void testIntersectsPoint() throws Exception { - // JUnitDoclet begin method intersectsPoint - // JUnitDoclet end method intersectsPoint - } - - // JUnitDoclet begin javadoc_method intersectsLine() - /** - * Method testIntersectsLine is testing intersectsLine - * @see org.jhotdraw.util.Bounds#intersectsLine(double, double, double, double) - */ - // JUnitDoclet end javadoc_method intersectsLine() - public void testIntersectsLine() throws Exception { - // JUnitDoclet begin method intersectsLine - // JUnitDoclet end method intersectsLine - } - - // JUnitDoclet begin javadoc_method intersectsBounds() - /** - * Method testIntersectsBounds is testing intersectsBounds - * @see org.jhotdraw.util.Bounds#intersectsBounds(org.jhotdraw.util.Bounds) - */ - // JUnitDoclet end javadoc_method intersectsBounds() - public void testIntersectsBounds() throws Exception { - // JUnitDoclet begin method intersectsBounds - // JUnitDoclet end method intersectsBounds - } - - // JUnitDoclet begin javadoc_method completelyContainsLine() - /** - * Method testCompletelyContainsLine is testing completelyContainsLine - * @see org.jhotdraw.util.Bounds#completelyContainsLine(double, double, double, double) - */ - // JUnitDoclet end javadoc_method completelyContainsLine() - public void testCompletelyContainsLine() throws Exception { - // JUnitDoclet begin method completelyContainsLine - // JUnitDoclet end method completelyContainsLine - } - - // JUnitDoclet begin javadoc_method isCompletelyInside() - /** - * Method testIsCompletelyInside is testing isCompletelyInside - * @see org.jhotdraw.util.Bounds#isCompletelyInside(org.jhotdraw.util.Bounds) - */ - // JUnitDoclet end javadoc_method isCompletelyInside() - public void testIsCompletelyInside() throws Exception { - // JUnitDoclet begin method isCompletelyInside - // JUnitDoclet end method isCompletelyInside - } - - // JUnitDoclet begin javadoc_method cropLine() - /** - * Method testCropLine is testing cropLine - * @see org.jhotdraw.util.Bounds#cropLine(double, double, double, double) - */ - // JUnitDoclet end javadoc_method cropLine() - public void testCropLine() throws Exception { - // JUnitDoclet begin method cropLine - // JUnitDoclet end method cropLine - } - - // JUnitDoclet begin javadoc_method equals() - /** - * Method testEquals is testing equals - * @see org.jhotdraw.util.Bounds#equals(java.lang.Object) - */ - // JUnitDoclet end javadoc_method equals() - public void testEquals() throws Exception { - // JUnitDoclet begin method equals - // JUnitDoclet end method equals - } - - // JUnitDoclet begin javadoc_method hashCode() - /** - * Method testHashCode is testing hashCode - * @see org.jhotdraw.util.Bounds#hashCode() - */ - // JUnitDoclet end javadoc_method hashCode() - public void testHashCode() throws Exception { - // JUnitDoclet begin method hashCode - // JUnitDoclet end method hashCode - } - - // JUnitDoclet begin javadoc_method toString() - /** - * Method testToString is testing toString - * @see org.jhotdraw.util.Bounds#toString() - */ - // JUnitDoclet end javadoc_method toString() - public void testToString() throws Exception { - // JUnitDoclet begin method toString - // JUnitDoclet end method toString - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/ClipboardTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/ClipboardTest.java deleted file mode 100644 index 4faec7a40..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/ClipboardTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import org.jhotdraw.util.Clipboard; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ClipboardTest is generated by - * JUnitDoclet to hold the tests for Clipboard. - * @see org.jhotdraw.util.Clipboard - */ -// JUnitDoclet end javadoc_class -public class ClipboardTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Clipboard clipboard; - // JUnitDoclet end class - - /** - * Constructor ClipboardTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ClipboardTest(String name) { - // JUnitDoclet begin method ClipboardTest - super(name); - // JUnitDoclet end method ClipboardTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public Clipboard createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return Clipboard.getClipboard(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - clipboard = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - clipboard = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getClipboard() - /** - * Method testGetClipboard is testing getClipboard - * @see org.jhotdraw.util.Clipboard#getClipboard() - */ - // JUnitDoclet end javadoc_method getClipboard() - public void testGetClipboard() throws Exception { - // JUnitDoclet begin method getClipboard - // JUnitDoclet end method getClipboard - } - - // JUnitDoclet begin javadoc_method setContents() - /** - * Method testSetGetContents is testing setContents - * and getContents together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.Clipboard#setContents(java.lang.Object) - * @see org.jhotdraw.util.Clipboard#getContents() - */ - // JUnitDoclet end javadoc_method setContents() - public void testSetGetContents() throws Exception { - // JUnitDoclet begin method setContents getContents - java.lang.Object[] tests = { new java.lang.Object(), null }; - - for (int i = 0; i < tests.length; i++) { - clipboard.setContents(tests[i]); - assertEquals(tests[i], clipboard.getContents()); - } - // JUnitDoclet end method setContents getContents - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/ColorMapTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/ColorMapTest.java deleted file mode 100644 index 0f1fd9c39..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/ColorMapTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.util.ColorMap; -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ColorMapTest is generated by - * JUnitDoclet to hold the tests for ColorMap. - * @see org.jhotdraw.util.ColorMap - */ -// JUnitDoclet end javadoc_class -public class ColorMapTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ColorMap colormap; - // JUnitDoclet end class - - /** - * Constructor ColorMapTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ColorMapTest(String name) { - // JUnitDoclet begin method ColorMapTest - super(name); - // JUnitDoclet end method ColorMapTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ColorMap createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ColorMap(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - colormap = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - colormap = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method size() - /** - * Method testSize is testing size - * @see org.jhotdraw.util.ColorMap#size() - */ - // JUnitDoclet end javadoc_method size() - public void testSize() throws Exception { - // JUnitDoclet begin method size - // JUnitDoclet end method size - } - - // JUnitDoclet begin javadoc_method color() - /** - * Method testColor is testing color - * @see org.jhotdraw.util.ColorMap#color(int) - */ - // JUnitDoclet end javadoc_method color() - public void testColor() throws Exception { - // JUnitDoclet begin method color - // JUnitDoclet end method color - } - - // JUnitDoclet begin javadoc_method name() - /** - * Method testName is testing name - * @see org.jhotdraw.util.ColorMap#name(int) - */ - // JUnitDoclet end javadoc_method name() - public void testName() throws Exception { - // JUnitDoclet begin method name - // JUnitDoclet end method name - } - - // JUnitDoclet begin javadoc_method colorIndex() - /** - * Method testColorIndex is testing colorIndex - * @see org.jhotdraw.util.ColorMap#colorIndex(java.awt.Color) - */ - // JUnitDoclet end javadoc_method colorIndex() - public void testColorIndex() throws Exception { - // JUnitDoclet begin method colorIndex - // JUnitDoclet end method colorIndex - } - - // JUnitDoclet begin javadoc_method isTransparent() - /** - * Method testIsTransparent is testing isTransparent - * @see org.jhotdraw.util.ColorMap#isTransparent(java.awt.Color) - */ - // JUnitDoclet end javadoc_method isTransparent() - public void testIsTransparent() throws Exception { - // JUnitDoclet begin method isTransparent - // JUnitDoclet end method isTransparent - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandButtonTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandButtonTest.java deleted file mode 100644 index aebe0578d..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandButtonTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.standard.DuplicateCommand; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.CommandButton; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandButtonTest is generated by - * JUnitDoclet to hold the tests for CommandButton. - * @see org.jhotdraw.util.CommandButton - */ -// JUnitDoclet end javadoc_class -public class CommandButtonTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandButton commandbutton; - // JUnitDoclet end class - - /** - * Constructor CommandButtonTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandButtonTest(String name) { - // JUnitDoclet begin method CommandButtonTest - super(name); - // JUnitDoclet end method CommandButtonTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CommandButton createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CommandButton(new DuplicateCommand("Duplicate", getDrawingEditor())); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandbutton = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandbutton = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method actionPerformed() - /** - * Method testActionPerformed is testing actionPerformed - * @see org.jhotdraw.util.CommandButton#actionPerformed(java.awt.event.ActionEvent) - */ - // JUnitDoclet end javadoc_method actionPerformed() - public void testActionPerformed() throws Exception { - // JUnitDoclet begin method actionPerformed - // JUnitDoclet end method actionPerformed - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandChoiceTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandChoiceTest.java deleted file mode 100644 index f2dd7aecb..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandChoiceTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import org.jhotdraw.util.CommandChoice; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandChoiceTest is generated by - * JUnitDoclet to hold the tests for CommandChoice. - * @see org.jhotdraw.util.CommandChoice - */ -// JUnitDoclet end javadoc_class -public class CommandChoiceTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandChoice commandchoice; - // JUnitDoclet end class - - /** - * Constructor CommandChoiceTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandChoiceTest(String name) { - // JUnitDoclet begin method CommandChoiceTest - super(name); - // JUnitDoclet end method CommandChoiceTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CommandChoice createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CommandChoice(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandchoice = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandchoice = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addItem() - /** - * Method testAddItem is testing addItem - * @see org.jhotdraw.util.CommandChoice#addItem(org.jhotdraw.util.Command) - */ - // JUnitDoclet end javadoc_method addItem() - public void testAddItem() throws Exception { - // JUnitDoclet begin method addItem - // JUnitDoclet end method addItem - } - - // JUnitDoclet begin javadoc_method itemStateChanged() - /** - * Method testItemStateChanged is testing itemStateChanged - * @see org.jhotdraw.util.CommandChoice#itemStateChanged(java.awt.event.ItemEvent) - */ - // JUnitDoclet end javadoc_method itemStateChanged() - public void testItemStateChanged() throws Exception { - // JUnitDoclet begin method itemStateChanged - // JUnitDoclet end method itemStateChanged - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandMenuTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandMenuTest.java deleted file mode 100644 index 5dfe5be5d..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/CommandMenuTest.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import org.jhotdraw.util.CommandMenu; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CommandMenuTest is generated by - * JUnitDoclet to hold the tests for CommandMenu. - * @see org.jhotdraw.util.CommandMenu - */ -// JUnitDoclet end javadoc_class -public class CommandMenuTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CommandMenu commandmenu; - // JUnitDoclet end class - - /** - * Constructor CommandMenuTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CommandMenuTest(String name) { - // JUnitDoclet begin method CommandMenuTest - super(name); - // JUnitDoclet end method CommandMenuTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public CommandMenu createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CommandMenu("TestCommandMenu"); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - commandmenu = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - commandmenu = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.util.CommandMenu#add(org.jhotdraw.util.Command) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method addCheckItem() - /** - * Method testAddCheckItem is testing addCheckItem - * @see org.jhotdraw.util.CommandMenu#addCheckItem(org.jhotdraw.util.Command) - */ - // JUnitDoclet end javadoc_method addCheckItem() - public void testAddCheckItem() throws Exception { - // JUnitDoclet begin method addCheckItem - // JUnitDoclet end method addCheckItem - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.util.CommandMenu#remove(org.jhotdraw.util.Command) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method enable() - /** - * Method testEnable is testing enable - * @see org.jhotdraw.util.CommandMenu#enable(java.lang.String, boolean) - */ - // JUnitDoclet end javadoc_method enable() - public void testEnable() throws Exception { - // JUnitDoclet begin method enable - // JUnitDoclet end method enable - } - - // JUnitDoclet begin javadoc_method checkEnabled() - /** - * Method testCheckEnabled is testing checkEnabled - * @see org.jhotdraw.util.CommandMenu#checkEnabled() - */ - // JUnitDoclet end javadoc_method checkEnabled() - public void testCheckEnabled() throws Exception { - // JUnitDoclet begin method checkEnabled - // JUnitDoclet end method checkEnabled - } - - // JUnitDoclet begin javadoc_method actionPerformed() - /** - * Method testActionPerformed is testing actionPerformed - * @see org.jhotdraw.util.CommandMenu#actionPerformed(java.awt.event.ActionEvent) - */ - // JUnitDoclet end javadoc_method actionPerformed() - public void testActionPerformed() throws Exception { - // JUnitDoclet begin method actionPerformed - // JUnitDoclet end method actionPerformed - } - - // JUnitDoclet begin javadoc_method commandExecuted() - /** - * Method testCommandExecuted is testing commandExecuted - * @see org.jhotdraw.util.CommandMenu#commandExecuted(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecuted() - public void testCommandExecuted() throws Exception { - // JUnitDoclet begin method commandExecuted - // JUnitDoclet end method commandExecuted - } - - // JUnitDoclet begin javadoc_method commandExecutable() - /** - * Method testCommandExecutable is testing commandExecutable - * @see org.jhotdraw.util.CommandMenu#commandExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecutable() - public void testCommandExecutable() throws Exception { - // JUnitDoclet begin method commandExecutable - // JUnitDoclet end method commandExecutable - } - - // JUnitDoclet begin javadoc_method commandNotExecutable() - /** - * Method testCommandNotExecutable is testing commandNotExecutable - * @see org.jhotdraw.util.CommandMenu#commandNotExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandNotExecutable() - public void testCommandNotExecutable() throws Exception { - // JUnitDoclet begin method commandNotExecutable - // JUnitDoclet end method commandNotExecutable - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/FillerTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/FillerTest.java deleted file mode 100644 index 617591e0c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/FillerTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import org.jhotdraw.util.Filler; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FillerTest is generated by - * JUnitDoclet to hold the tests for Filler. - * @see org.jhotdraw.util.Filler - */ -// JUnitDoclet end javadoc_class -public class FillerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Filler filler; - // JUnitDoclet end class - - /** - * Constructor FillerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FillerTest(String name) { - // JUnitDoclet begin method FillerTest - super(name); - // JUnitDoclet end method FillerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public Filler createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new Filler(10, 10); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - filler = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - filler = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getMinimumSize() - /** - * Method testGetMinimumSize is testing getMinimumSize - * @see org.jhotdraw.util.Filler#getMinimumSize() - */ - // JUnitDoclet end javadoc_method getMinimumSize() - public void testGetMinimumSize() throws Exception { - // JUnitDoclet begin method getMinimumSize - // JUnitDoclet end method getMinimumSize - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see org.jhotdraw.util.Filler#getPreferredSize() - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method getBackground() - /** - * Method testGetBackground is testing getBackground - * @see org.jhotdraw.util.Filler#getBackground() - */ - // JUnitDoclet end javadoc_method getBackground() - public void testGetBackground() throws Exception { - // JUnitDoclet begin method getBackground - // JUnitDoclet end method getBackground - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/FloatingTextFieldTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/FloatingTextFieldTest.java deleted file mode 100644 index 0300485d4..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/FloatingTextFieldTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import org.jhotdraw.util.FloatingTextField; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase FloatingTextFieldTest is generated by - * JUnitDoclet to hold the tests for FloatingTextField. - * @see org.jhotdraw.util.FloatingTextField - */ -// JUnitDoclet end javadoc_class -public class FloatingTextFieldTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private FloatingTextField floatingtextfield; - // JUnitDoclet end class - - /** - * Constructor FloatingTextFieldTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public FloatingTextFieldTest(String name) { - // JUnitDoclet begin method FloatingTextFieldTest - super(name); - // JUnitDoclet end method FloatingTextFieldTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public FloatingTextField createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new FloatingTextField(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - floatingtextfield = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - floatingtextfield = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createOverlay() - /** - * Method testCreateOverlay is testing createOverlay - * @see org.jhotdraw.util.FloatingTextField#createOverlay(java.awt.Container) - */ - // JUnitDoclet end javadoc_method createOverlay() - public void testCreateOverlay() throws Exception { - // JUnitDoclet begin method createOverlay - // JUnitDoclet end method createOverlay - } - - // JUnitDoclet begin javadoc_method addActionListener() - /** - * Method testAddActionListener is testing addActionListener - * @see org.jhotdraw.util.FloatingTextField#addActionListener(java.awt.event.ActionListener) - */ - // JUnitDoclet end javadoc_method addActionListener() - public void testAddActionListener() throws Exception { - // JUnitDoclet begin method addActionListener - // JUnitDoclet end method addActionListener - } - - // JUnitDoclet begin javadoc_method removeActionListener() - /** - * Method testRemoveActionListener is testing removeActionListener - * @see org.jhotdraw.util.FloatingTextField#removeActionListener(java.awt.event.ActionListener) - */ - // JUnitDoclet end javadoc_method removeActionListener() - public void testRemoveActionListener() throws Exception { - // JUnitDoclet begin method removeActionListener - // JUnitDoclet end method removeActionListener - } - - // JUnitDoclet begin javadoc_method setBounds() - /** - * Method testSetBounds is testing setBounds - * @see org.jhotdraw.util.FloatingTextField#setBounds(java.awt.Rectangle, java.lang.String) - */ - // JUnitDoclet end javadoc_method setBounds() - public void testSetBounds() throws Exception { - // JUnitDoclet begin method setBounds - // JUnitDoclet end method setBounds - } - - // JUnitDoclet begin javadoc_method getText() - /** - * Method testGetText is testing getText - * @see org.jhotdraw.util.FloatingTextField#getText() - */ - // JUnitDoclet end javadoc_method getText() - public void testGetText() throws Exception { - // JUnitDoclet begin method getText - // JUnitDoclet end method getText - } - - // JUnitDoclet begin javadoc_method getPreferredSize() - /** - * Method testGetPreferredSize is testing getPreferredSize - * @see org.jhotdraw.util.FloatingTextField#getPreferredSize(int) - */ - // JUnitDoclet end javadoc_method getPreferredSize() - public void testGetPreferredSize() throws Exception { - // JUnitDoclet begin method getPreferredSize - // JUnitDoclet end method getPreferredSize - } - - // JUnitDoclet begin javadoc_method endOverlay() - /** - * Method testEndOverlay is testing endOverlay - * @see org.jhotdraw.util.FloatingTextField#endOverlay() - */ - // JUnitDoclet end javadoc_method endOverlay() - public void testEndOverlay() throws Exception { - // JUnitDoclet begin method endOverlay - // JUnitDoclet end method endOverlay - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/GeomTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/GeomTest.java deleted file mode 100644 index 19a4602a6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/GeomTest.java +++ /dev/null @@ -1,343 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import org.jhotdraw.util.Geom; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase GeomTest is generated by - * JUnitDoclet to hold the tests for Geom. - * @see org.jhotdraw.util.Geom - */ -// JUnitDoclet end javadoc_class -public class GeomTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Geom geom; - // JUnitDoclet end class - - /** - * Constructor GeomTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GeomTest(String name) { - // JUnitDoclet begin method GeomTest - super(name); - // JUnitDoclet end method GeomTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public Geom createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - // Geom has static methods and cannot be instantiated. - return null; - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - geom = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - geom = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method lineContainsPoint() - /** - * Method testLineContainsPoint is testing lineContainsPoint - * @see org.jhotdraw.util.Geom#lineContainsPoint(int, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method lineContainsPoint() - public void testLineContainsPoint() throws Exception { - // JUnitDoclet begin method lineContainsPoint - // JUnitDoclet end method lineContainsPoint - } - - // JUnitDoclet begin javadoc_method direction() - /** - * Method testDirection is testing direction - * @see org.jhotdraw.util.Geom#direction(int, int, int, int) - */ - // JUnitDoclet end javadoc_method direction() - public void testDirection() throws Exception { - // JUnitDoclet begin method direction - // JUnitDoclet end method direction - } - - // JUnitDoclet begin javadoc_method south() - /** - * Method testSouth is testing south - * @see org.jhotdraw.util.Geom#south(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method south() - public void testSouth() throws Exception { - // JUnitDoclet begin method south - // JUnitDoclet end method south - } - - // JUnitDoclet begin javadoc_method center() - /** - * Method testCenter is testing center - * @see org.jhotdraw.util.Geom#center(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method center() - public void testCenter() throws Exception { - // JUnitDoclet begin method center - // JUnitDoclet end method center - } - - // JUnitDoclet begin javadoc_method west() - /** - * Method testWest is testing west - * @see org.jhotdraw.util.Geom#west(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method west() - public void testWest() throws Exception { - // JUnitDoclet begin method west - // JUnitDoclet end method west - } - - // JUnitDoclet begin javadoc_method east() - /** - * Method testEast is testing east - * @see org.jhotdraw.util.Geom#east(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method east() - public void testEast() throws Exception { - // JUnitDoclet begin method east - // JUnitDoclet end method east - } - - // JUnitDoclet begin javadoc_method north() - /** - * Method testNorth is testing north - * @see org.jhotdraw.util.Geom#north(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method north() - public void testNorth() throws Exception { - // JUnitDoclet begin method north - // JUnitDoclet end method north - } - - // JUnitDoclet begin javadoc_method corner() - /** - * Method testCorner is testing corner - * @see org.jhotdraw.util.Geom#corner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method corner() - public void testCorner() throws Exception { - // JUnitDoclet begin method corner - // JUnitDoclet end method corner - } - - // JUnitDoclet begin javadoc_method topLeftCorner() - /** - * Method testTopLeftCorner is testing topLeftCorner - * @see org.jhotdraw.util.Geom#topLeftCorner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method topLeftCorner() - public void testTopLeftCorner() throws Exception { - // JUnitDoclet begin method topLeftCorner - // JUnitDoclet end method topLeftCorner - } - - // JUnitDoclet begin javadoc_method topRightCorner() - /** - * Method testTopRightCorner is testing topRightCorner - * @see org.jhotdraw.util.Geom#topRightCorner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method topRightCorner() - public void testTopRightCorner() throws Exception { - // JUnitDoclet begin method topRightCorner - // JUnitDoclet end method topRightCorner - } - - // JUnitDoclet begin javadoc_method bottomLeftCorner() - /** - * Method testBottomLeftCorner is testing bottomLeftCorner - * @see org.jhotdraw.util.Geom#bottomLeftCorner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method bottomLeftCorner() - public void testBottomLeftCorner() throws Exception { - // JUnitDoclet begin method bottomLeftCorner - // JUnitDoclet end method bottomLeftCorner - } - - // JUnitDoclet begin javadoc_method bottomRightCorner() - /** - * Method testBottomRightCorner is testing bottomRightCorner - * @see org.jhotdraw.util.Geom#bottomRightCorner(java.awt.Rectangle) - */ - // JUnitDoclet end javadoc_method bottomRightCorner() - public void testBottomRightCorner() throws Exception { - // JUnitDoclet begin method bottomRightCorner - // JUnitDoclet end method bottomRightCorner - } - - // JUnitDoclet begin javadoc_method range() - /** - * Method testRange is testing range - * @see org.jhotdraw.util.Geom#range(int, int, int) - */ - // JUnitDoclet end javadoc_method range() - public void testRange() throws Exception { - // JUnitDoclet begin method range - // JUnitDoclet end method range - } - - // JUnitDoclet begin javadoc_method length2() - /** - * Method testLength2 is testing length2 - * @see org.jhotdraw.util.Geom#length2(int, int, int, int) - */ - // JUnitDoclet end javadoc_method length2() - public void testLength2() throws Exception { - // JUnitDoclet begin method length2 - // JUnitDoclet end method length2 - } - - // JUnitDoclet begin javadoc_method length() - /** - * Method testLength is testing length - * @see org.jhotdraw.util.Geom#length(int, int, int, int) - */ - // JUnitDoclet end javadoc_method length() - public void testLength() throws Exception { - // JUnitDoclet begin method length - // JUnitDoclet end method length - } - - // JUnitDoclet begin javadoc_method pointToAngle() - /** - * Method testPointToAngle is testing pointToAngle - * @see org.jhotdraw.util.Geom#pointToAngle(java.awt.Rectangle, java.awt.Point) - */ - // JUnitDoclet end javadoc_method pointToAngle() - public void testPointToAngle() throws Exception { - // JUnitDoclet begin method pointToAngle - // JUnitDoclet end method pointToAngle - } - - // JUnitDoclet begin javadoc_method angleToPoint() - /** - * Method testAngleToPoint is testing angleToPoint - * @see org.jhotdraw.util.Geom#angleToPoint(java.awt.Rectangle, double) - */ - // JUnitDoclet end javadoc_method angleToPoint() - public void testAngleToPoint() throws Exception { - // JUnitDoclet begin method angleToPoint - // JUnitDoclet end method angleToPoint - } - - // JUnitDoclet begin javadoc_method polarToPoint() - /** - * Method testPolarToPoint is testing polarToPoint - * @see org.jhotdraw.util.Geom#polarToPoint(double, double, double) - */ - // JUnitDoclet end javadoc_method polarToPoint() - public void testPolarToPoint() throws Exception { - // JUnitDoclet begin method polarToPoint - // JUnitDoclet end method polarToPoint - } - - // JUnitDoclet begin javadoc_method ovalAngleToPoint() - /** - * Method testOvalAngleToPoint is testing ovalAngleToPoint - * @see org.jhotdraw.util.Geom#ovalAngleToPoint(java.awt.Rectangle, double) - */ - // JUnitDoclet end javadoc_method ovalAngleToPoint() - public void testOvalAngleToPoint() throws Exception { - // JUnitDoclet begin method ovalAngleToPoint - // JUnitDoclet end method ovalAngleToPoint - } - - // JUnitDoclet begin javadoc_method intersect() - /** - * Method testIntersect is testing intersect - * @see org.jhotdraw.util.Geom#intersect(int, int, int, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method intersect() - public void testIntersect() throws Exception { - // JUnitDoclet begin method intersect - // JUnitDoclet end method intersect - } - - // JUnitDoclet begin javadoc_method distanceFromLine() - /** - * Method testDistanceFromLine is testing distanceFromLine - * @see org.jhotdraw.util.Geom#distanceFromLine(int, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method distanceFromLine() - public void testDistanceFromLine() throws Exception { - // JUnitDoclet begin method distanceFromLine - // JUnitDoclet end method distanceFromLine - } - - // JUnitDoclet begin javadoc_method distanceFromLine2D() - /** - * Method testDistanceFromLine2D is testing distanceFromLine2D - * @see org.jhotdraw.util.Geom#distanceFromLine2D(int, int, int, int, int, int) - */ - // JUnitDoclet end javadoc_method distanceFromLine2D() - public void testDistanceFromLine2D() throws Exception { - // JUnitDoclet begin method distanceFromLine2D - // JUnitDoclet end method distanceFromLine2D - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/GraphLayoutTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/GraphLayoutTest.java deleted file mode 100644 index 8f6178e91..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/GraphLayoutTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import org.jhotdraw.util.GraphLayout; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase GraphLayoutTest is generated by - * JUnitDoclet to hold the tests for GraphLayout. - * @see org.jhotdraw.util.GraphLayout - */ -// JUnitDoclet end javadoc_class -public class GraphLayoutTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private GraphLayout graphlayout; - // JUnitDoclet end class - - /** - * Constructor GraphLayoutTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public GraphLayoutTest(String name) { - // JUnitDoclet begin method GraphLayoutTest - super(name); - // JUnitDoclet end method GraphLayoutTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public GraphLayout createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new GraphLayout(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - graphlayout = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - graphlayout = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addNode() - /** - * Method testAddNode is testing addNode - * @see org.jhotdraw.util.GraphLayout#addNode(org.jhotdraw.framework.Figure) - */ - // JUnitDoclet end javadoc_method addNode() - public void testAddNode() throws Exception { - // JUnitDoclet begin method addNode - // JUnitDoclet end method addNode - } - - // JUnitDoclet begin javadoc_method addEdge() - /** - * Method testAddEdge is testing addEdge - * @see org.jhotdraw.util.GraphLayout#addEdge(org.jhotdraw.framework.ConnectionFigure, int) - */ - // JUnitDoclet end javadoc_method addEdge() - public void testAddEdge() throws Exception { - // JUnitDoclet begin method addEdge - // JUnitDoclet end method addEdge - } - - // JUnitDoclet begin javadoc_method relax() - /** - * Method testRelax is testing relax - * @see org.jhotdraw.util.GraphLayout#relax() - */ - // JUnitDoclet end javadoc_method relax() - public void testRelax() throws Exception { - // JUnitDoclet begin method relax - // JUnitDoclet end method relax - } - - // JUnitDoclet begin javadoc_method figureChanged() - /** - * Method testFigureChanged is testing figureChanged - * @see org.jhotdraw.util.GraphLayout#figureChanged(org.jhotdraw.framework.FigureChangeEvent) - */ - // JUnitDoclet end javadoc_method figureChanged() - public void testFigureChanged() throws Exception { - // JUnitDoclet begin method figureChanged - // JUnitDoclet end method figureChanged - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.util.GraphLayout#remove() - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/IconkitTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/IconkitTest.java deleted file mode 100644 index f0ca1a2ff..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/IconkitTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.Iconkit; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase IconkitTest is generated by - * JUnitDoclet to hold the tests for Iconkit. - * @see org.jhotdraw.util.Iconkit - */ -// JUnitDoclet end javadoc_class -public class IconkitTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private Iconkit iconkit; - // JUnitDoclet end class - - /** - * Constructor IconkitTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public IconkitTest(String name) { - // JUnitDoclet begin method IconkitTest - super(name); - // JUnitDoclet end method IconkitTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public Iconkit createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new Iconkit(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - iconkit = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - iconkit = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method instance() - /** - * Method testInstance is testing instance - * @see org.jhotdraw.util.Iconkit#instance() - */ - // JUnitDoclet end javadoc_method instance() - public void testInstance() throws Exception { - // JUnitDoclet begin method instance - // JUnitDoclet end method instance - } - - // JUnitDoclet begin javadoc_method loadRegisteredImages() - /** - * Method testLoadRegisteredImages is testing loadRegisteredImages - * @see org.jhotdraw.util.Iconkit#loadRegisteredImages(java.awt.Component) - */ - // JUnitDoclet end javadoc_method loadRegisteredImages() - public void testLoadRegisteredImages() throws Exception { - // JUnitDoclet begin method loadRegisteredImages - // JUnitDoclet end method loadRegisteredImages - } - - // JUnitDoclet begin javadoc_method registerImage() - /** - * Method testRegisterImage is testing registerImage - * @see org.jhotdraw.util.Iconkit#registerImage(java.lang.String) - */ - // JUnitDoclet end javadoc_method registerImage() - public void testRegisterImage() throws Exception { - // JUnitDoclet begin method registerImage - // JUnitDoclet end method registerImage - } - - // JUnitDoclet begin javadoc_method registerAndLoadImage() - /** - * Method testRegisterAndLoadImage is testing registerAndLoadImage - * @see org.jhotdraw.util.Iconkit#registerAndLoadImage(java.awt.Component, java.lang.String) - */ - // JUnitDoclet end javadoc_method registerAndLoadImage() - public void testRegisterAndLoadImage() throws Exception { - // JUnitDoclet begin method registerAndLoadImage - // JUnitDoclet end method registerAndLoadImage - } - - // JUnitDoclet begin javadoc_method loadImage() - /** - * Method testLoadImage is testing loadImage - * @see org.jhotdraw.util.Iconkit#loadImage(java.lang.String) - */ - // JUnitDoclet end javadoc_method loadImage() - public void testLoadImage() throws Exception { - // JUnitDoclet begin method loadImage - // JUnitDoclet end method loadImage - } - - // JUnitDoclet begin javadoc_method loadImageResource() - /** - * Method testLoadImageResource is testing loadImageResource - * @see org.jhotdraw.util.Iconkit#loadImageResource(java.lang.String) - */ - // JUnitDoclet end javadoc_method loadImageResource() - public void testLoadImageResource() throws Exception { - // JUnitDoclet begin method loadImageResource - // JUnitDoclet end method loadImageResource - } - - // JUnitDoclet begin javadoc_method getImage() - /** - * Method testGetImage is testing getImage - * @see org.jhotdraw.util.Iconkit#getImage(java.lang.String) - */ - // JUnitDoclet end javadoc_method getImage() - public void testGetImage() throws Exception { - // JUnitDoclet begin method getImage - // JUnitDoclet end method getImage - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/JDOStorageFormatTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/JDOStorageFormatTest.java deleted file mode 100644 index e1638c1b9..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/JDOStorageFormatTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import org.jhotdraw.util.JDOStorageFormat; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestCase JDOStorageFormatTest is generated by -* JUnitDoclet to hold the tests for JDOStorageFormat. -* @see org.jhotdraw.util.JDOStorageFormat -*/ -// JUnitDoclet end javadoc_class -public class JDOStorageFormatTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private JDOStorageFormat jdostorageformat; - // JUnitDoclet end class - - /** - * Constructor JDOStorageFormatTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public JDOStorageFormatTest(String name) { - // JUnitDoclet begin method JDOStorageFormatTest - super(name); - // JUnitDoclet end method JDOStorageFormatTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public JDOStorageFormat createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new JDOStorageFormat(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - jdostorageformat = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - jdostorageformat = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createFileDescription() - /** - * Method testCreateFileDescription is testing createFileDescription - * @see org.jhotdraw.util.JDOStorageFormat#createFileDescription() - */ - // JUnitDoclet end javadoc_method createFileDescription() - public void testCreateFileDescription() throws Exception { - // JUnitDoclet begin method createFileDescription - // JUnitDoclet end method createFileDescription - } - - // JUnitDoclet begin javadoc_method store() - /** - * Method testStore is testing store - * @see org.jhotdraw.util.JDOStorageFormat#store(java.lang.String, org.jhotdraw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method store() - public void testStore() throws Exception { - // JUnitDoclet begin method store - // JUnitDoclet end method store - } - - // JUnitDoclet begin javadoc_method restore() - /** - * Method testRestore is testing restore - * @see org.jhotdraw.util.JDOStorageFormat#restore(java.lang.String) - */ - // JUnitDoclet end javadoc_method restore() - public void testRestore() throws Exception { - // JUnitDoclet begin method restore - // JUnitDoclet end method restore - } - - // JUnitDoclet begin javadoc_method main() - /** - * Method testMain is testing main - * @see org.jhotdraw.util.JDOStorageFormat#main(java.lang.String[]) - */ - // JUnitDoclet end javadoc_method main() - public void testMain() throws Exception { - // JUnitDoclet begin method main - // JUnitDoclet end method main - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/PaletteIconTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/PaletteIconTest.java deleted file mode 100644 index 86db2c2da..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/PaletteIconTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.util.PaletteIcon; -import org.jhotdraw.util.Iconkit; -import org.jhotdraw.application.DrawApplication; -import org.jhotdraw.framework.JHotDrawRuntimeException; -import org.jhotdraw.test.JHDTestCase; - -import java.awt.*; -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestCase PaletteIconTest is generated by -* JUnitDoclet to hold the tests for PaletteIcon. -* @see org.jhotdraw.util.PaletteIcon -*/ -// JUnitDoclet end javadoc_class -public class PaletteIconTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PaletteIcon paletteicon; - // JUnitDoclet end class - - /** - * Constructor PaletteIconTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PaletteIconTest(String name) { - // JUnitDoclet begin method PaletteIconTest - super(name); - // JUnitDoclet end method PaletteIconTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PaletteIcon createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Iconkit kit = Iconkit.instance(); - if (kit == null) { - throw new JHotDrawRuntimeException("Iconkit instance isn't set"); - } - - String iconName = DrawApplication.IMAGES + "SEL"; - Image im[] = new Image[3]; - im[0] = kit.loadImageResource(iconName + "1.gif"); - im[1] = kit.loadImageResource(iconName + "2.gif"); - im[2] = kit.loadImageResource(iconName + "3.gif"); - - MediaTracker tracker = new MediaTracker(getDrawingEditor()); - for (int i = 0; i < 3; i++) { - tracker.addImage(im[i], i); - } - try { - tracker.waitForAll(); - } - catch (Exception e) { - // ignore exception - } - - return new PaletteIcon(new Dimension(24, 24), im[0], im[1], im[2]); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - paletteicon = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - paletteicon = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method normal() - /** - * Method testNormal is testing normal - * @see org.jhotdraw.util.PaletteIcon#normal() - */ - // JUnitDoclet end javadoc_method normal() - public void testNormal() throws Exception { - // JUnitDoclet begin method normal - // JUnitDoclet end method normal - } - - // JUnitDoclet begin javadoc_method pressed() - /** - * Method testPressed is testing pressed - * @see org.jhotdraw.util.PaletteIcon#pressed() - */ - // JUnitDoclet end javadoc_method pressed() - public void testPressed() throws Exception { - // JUnitDoclet begin method pressed - // JUnitDoclet end method pressed - } - - // JUnitDoclet begin javadoc_method selected() - /** - * Method testSelected is testing selected - * @see org.jhotdraw.util.PaletteIcon#selected() - */ - // JUnitDoclet end javadoc_method selected() - public void testSelected() throws Exception { - // JUnitDoclet begin method selected - // JUnitDoclet end method selected - } - - // JUnitDoclet begin javadoc_method getWidth() - /** - * Method testGetWidth is testing getWidth - * @see org.jhotdraw.util.PaletteIcon#getWidth() - */ - // JUnitDoclet end javadoc_method getWidth() - public void testGetWidth() throws Exception { - // JUnitDoclet begin method getWidth - // JUnitDoclet end method getWidth - } - - // JUnitDoclet begin javadoc_method getHeight() - /** - * Method testGetHeight is testing getHeight - * @see org.jhotdraw.util.PaletteIcon#getHeight() - */ - // JUnitDoclet end javadoc_method getHeight() - public void testGetHeight() throws Exception { - // JUnitDoclet begin method getHeight - // JUnitDoclet end method getHeight - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/PaletteLayoutTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/PaletteLayoutTest.java deleted file mode 100644 index 70b55ea03..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/PaletteLayoutTest.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import java.awt.Point; - -import org.jhotdraw.util.PaletteLayout; - -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase PaletteLayoutTest is generated by - * JUnitDoclet to hold the tests for PaletteLayout. - * @see org.jhotdraw.util.PaletteLayout - */ -// JUnitDoclet end javadoc_class -public class PaletteLayoutTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private PaletteLayout palettelayout; - // JUnitDoclet end class - - /** - * Constructor PaletteLayoutTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public PaletteLayoutTest(String name) { - // JUnitDoclet begin method PaletteLayoutTest - super(name); - // JUnitDoclet end method PaletteLayoutTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public PaletteLayout createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new PaletteLayout(10, new Point(5, 5)); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - palettelayout = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - palettelayout = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addLayoutComponent() - /** - * Method testAddLayoutComponent is testing addLayoutComponent - * @see org.jhotdraw.util.PaletteLayout#addLayoutComponent(java.lang.String, java.awt.Component) - */ - // JUnitDoclet end javadoc_method addLayoutComponent() - public void testAddLayoutComponent() throws Exception { - // JUnitDoclet begin method addLayoutComponent - // JUnitDoclet end method addLayoutComponent - } - - // JUnitDoclet begin javadoc_method removeLayoutComponent() - /** - * Method testRemoveLayoutComponent is testing removeLayoutComponent - * @see org.jhotdraw.util.PaletteLayout#removeLayoutComponent(java.awt.Component) - */ - // JUnitDoclet end javadoc_method removeLayoutComponent() - public void testRemoveLayoutComponent() throws Exception { - // JUnitDoclet begin method removeLayoutComponent - // JUnitDoclet end method removeLayoutComponent - } - - // JUnitDoclet begin javadoc_method preferredLayoutSize() - /** - * Method testPreferredLayoutSize is testing preferredLayoutSize - * @see org.jhotdraw.util.PaletteLayout#preferredLayoutSize(java.awt.Container) - */ - // JUnitDoclet end javadoc_method preferredLayoutSize() - public void testPreferredLayoutSize() throws Exception { - // JUnitDoclet begin method preferredLayoutSize - // JUnitDoclet end method preferredLayoutSize - } - - // JUnitDoclet begin javadoc_method minimumLayoutSize() - /** - * Method testMinimumLayoutSize is testing minimumLayoutSize - * @see org.jhotdraw.util.PaletteLayout#minimumLayoutSize(java.awt.Container) - */ - // JUnitDoclet end javadoc_method minimumLayoutSize() - public void testMinimumLayoutSize() throws Exception { - // JUnitDoclet begin method minimumLayoutSize - // JUnitDoclet end method minimumLayoutSize - } - - // JUnitDoclet begin javadoc_method layoutContainer() - /** - * Method testLayoutContainer is testing layoutContainer - * @see org.jhotdraw.util.PaletteLayout#layoutContainer(java.awt.Container) - */ - // JUnitDoclet end javadoc_method layoutContainer() - public void testLayoutContainer() throws Exception { - // JUnitDoclet begin method layoutContainer - // JUnitDoclet end method layoutContainer - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/RedoCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/RedoCommandTest.java deleted file mode 100644 index 9271528c5..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/RedoCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.RedoCommand; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase RedoCommandTest is generated by - * JUnitDoclet to hold the tests for RedoCommand. - * @see org.jhotdraw.util.RedoCommand - */ -// JUnitDoclet end javadoc_class -public class RedoCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private RedoCommand redocommand; - // JUnitDoclet end class - - /** - * Constructor RedoCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public RedoCommandTest(String name) { - // JUnitDoclet begin method RedoCommandTest - super(name); - // JUnitDoclet end method RedoCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public RedoCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new RedoCommand("TestRedo", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - redocommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - redocommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.util.RedoCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see org.jhotdraw.util.RedoCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/ReverseListEnumeratorTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/ReverseListEnumeratorTest.java deleted file mode 100644 index 8e68c9e8c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/ReverseListEnumeratorTest.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import java.util.List; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.ReverseListEnumerator; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ReverseListEnumeratorTest is generated by - * JUnitDoclet to hold the tests for ReverseListEnumerator. - * @see org.jhotdraw.util.ReverseListEnumerator - */ -// JUnitDoclet end javadoc_class -public class ReverseListEnumeratorTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ReverseListEnumerator reverselistenumerator; - // JUnitDoclet end class - - /** - * Constructor ReverseListEnumeratorTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ReverseListEnumeratorTest(String name) { - // JUnitDoclet begin method ReverseListEnumeratorTest - super(name); - // JUnitDoclet end method ReverseListEnumeratorTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ReverseListEnumerator createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - List l = CollectionsFactory.current().createList(); - l.add("TestString1"); - l.add("TestString2"); - return new ReverseListEnumerator(l); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - reverselistenumerator = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - reverselistenumerator = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNext() - /** - * Method testHasNext is testing hasNext - * @see org.jhotdraw.util.ReverseListEnumerator#hasNext() - */ - // JUnitDoclet end javadoc_method hasNext() - public void testHasNext() throws Exception { - // JUnitDoclet begin method hasNext - // JUnitDoclet end method hasNext - } - - // JUnitDoclet begin javadoc_method next() - /** - * Method testNext is testing next - * @see org.jhotdraw.util.ReverseListEnumerator#next() - */ - // JUnitDoclet end javadoc_method next() - public void testNext() throws Exception { - // JUnitDoclet begin method next - // JUnitDoclet end method next - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.util.ReverseListEnumerator#remove() - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/SerializationStorageFormatTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/SerializationStorageFormatTest.java deleted file mode 100644 index 966634121..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/SerializationStorageFormatTest.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import org.jhotdraw.util.SerializationStorageFormat; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SerializationStorageFormatTest is generated by - * JUnitDoclet to hold the tests for SerializationStorageFormat. - * @see org.jhotdraw.util.SerializationStorageFormat - */ -// JUnitDoclet end javadoc_class -public class SerializationStorageFormatTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SerializationStorageFormat serializationstorageformat; - // JUnitDoclet end class - - /** - * Constructor SerializationStorageFormatTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SerializationStorageFormatTest(String name) { - // JUnitDoclet begin method SerializationStorageFormatTest - super(name); - // JUnitDoclet end method SerializationStorageFormatTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SerializationStorageFormat createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SerializationStorageFormat(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - serializationstorageformat = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - serializationstorageformat = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createFileDescription() - /** - * Method testCreateFileDescription is testing createFileDescription - * @see org.jhotdraw.util.SerializationStorageFormat#createFileDescription() - */ - // JUnitDoclet end javadoc_method createFileDescription() - public void testCreateFileDescription() throws Exception { - // JUnitDoclet begin method createFileDescription - // JUnitDoclet end method createFileDescription - } - - // JUnitDoclet begin javadoc_method store() - /** - * Method testStore is testing store - * @see org.jhotdraw.util.SerializationStorageFormat#store(java.lang.String, org.jhotdraw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method store() - public void testStore() throws Exception { - // JUnitDoclet begin method store - // JUnitDoclet end method store - } - - // JUnitDoclet begin javadoc_method restore() - /** - * Method testRestore is testing restore - * @see org.jhotdraw.util.SerializationStorageFormat#restore(java.lang.String) - */ - // JUnitDoclet end javadoc_method restore() - public void testRestore() throws Exception { - // JUnitDoclet begin method restore - // JUnitDoclet end method restore - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StandardStorageFormatTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/StandardStorageFormatTest.java deleted file mode 100644 index 56b9b9e11..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StandardStorageFormatTest.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.util.StandardStorageFormat; -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardStorageFormatTest is generated by - * JUnitDoclet to hold the tests for StandardStorageFormat. - * @see org.jhotdraw.util.StandardStorageFormat - */ -// JUnitDoclet end javadoc_class -public class StandardStorageFormatTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardStorageFormat standardstorageformat; - // JUnitDoclet end class - - /** - * Constructor StandardStorageFormatTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardStorageFormatTest(String name) { - // JUnitDoclet begin method StandardStorageFormatTest - super(name); - // JUnitDoclet end method StandardStorageFormatTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public StandardStorageFormat createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new StandardStorageFormat(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standardstorageformat = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standardstorageformat = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method setFileExtension() - /** - * Method testSetGetFileExtension is testing setFileExtension - * and getFileExtension together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.StandardStorageFormat#setFileExtension(java.lang.String) - * @see org.jhotdraw.util.StandardStorageFormat#getFileExtension() - */ - // JUnitDoclet end javadoc_method setFileExtension() - public void testSetGetFileExtension() throws Exception { - // JUnitDoclet begin method setFileExtension getFileExtension - java.lang.String[] tests = { "", " ", "a", "A", "�", "�", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - standardstorageformat.setFileExtension(tests[i]); - assertEquals(tests[i], standardstorageformat.getFileExtension()); - } - // JUnitDoclet end method setFileExtension getFileExtension - } - - // JUnitDoclet begin javadoc_method createFileDescription() - /** - * Method testCreateFileDescription is testing createFileDescription - * @see org.jhotdraw.util.StandardStorageFormat#createFileDescription() - */ - // JUnitDoclet end javadoc_method createFileDescription() - public void testCreateFileDescription() throws Exception { - // JUnitDoclet begin method createFileDescription - // JUnitDoclet end method createFileDescription - } - - // JUnitDoclet begin javadoc_method setFileDescription() - /** - * Method testSetGetFileDescription is testing setFileDescription - * and getFileDescription together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.StandardStorageFormat#setFileDescription(java.lang.String) - * @see org.jhotdraw.util.StandardStorageFormat#getFileDescription() - */ - // JUnitDoclet end javadoc_method setFileDescription() - public void testSetGetFileDescription() throws Exception { - // JUnitDoclet begin method setFileDescription getFileDescription - java.lang.String[] tests = { "", " ", "a", "A", "�", "�", "0123456789", "012345678901234567890", "\n", null }; - - for (int i = 0; i < tests.length; i++) { - standardstorageformat.setFileDescription(tests[i]); - assertEquals(tests[i], standardstorageformat.getFileDescription()); - } - // JUnitDoclet end method setFileDescription getFileDescription - } - - // JUnitDoclet begin javadoc_method setFileFilter() - /** - * Method testSetGetFileFilter is testing setFileFilter - * and getFileFilter together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.StandardStorageFormat#setFileFilter(javax.swing.filechooser.FileFilter) - * @see org.jhotdraw.util.StandardStorageFormat#getFileFilter() - */ - // JUnitDoclet end javadoc_method setFileFilter() - public void testSetGetFileFilter() throws Exception { - // JUnitDoclet begin method setFileFilter getFileFilter - javax.swing.filechooser.FileFilter[] tests = { null, null }; - - for (int i = 0; i < tests.length; i++) { - standardstorageformat.setFileFilter(tests[i]); - assertEquals(tests[i], standardstorageformat.getFileFilter()); - } - // JUnitDoclet end method setFileFilter getFileFilter - } - - // JUnitDoclet begin javadoc_method store() - /** - * Method testStore is testing store - * @see org.jhotdraw.util.StandardStorageFormat#store(java.lang.String, org.jhotdraw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method store() - public void testStore() throws Exception { - // JUnitDoclet begin method store - // JUnitDoclet end method store - } - - // JUnitDoclet begin javadoc_method restore() - /** - * Method testRestore is testing restore - * @see org.jhotdraw.util.StandardStorageFormat#restore(java.lang.String) - */ - // JUnitDoclet end javadoc_method restore() - public void testRestore() throws Exception { - // JUnitDoclet begin method restore - // JUnitDoclet end method restore - } - - // JUnitDoclet begin javadoc_method equals() - /** - * Method testEquals is testing equals - * @see org.jhotdraw.util.StandardStorageFormat#equals(java.lang.Object) - */ - // JUnitDoclet end javadoc_method equals() - public void testEquals() throws Exception { - // JUnitDoclet begin method equals - // JUnitDoclet end method equals - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StandardVersionControlStrategyTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/StandardVersionControlStrategyTest.java deleted file mode 100644 index fbf711321..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StandardVersionControlStrategyTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.StandardVersionControlStrategy; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StandardVersionControlStrategyTest is generated by - * JUnitDoclet to hold the tests for StandardVersionControlStrategy. - * @see org.jhotdraw.util.StandardVersionControlStrategy - */ -// JUnitDoclet end javadoc_class -public class StandardVersionControlStrategyTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StandardVersionControlStrategy standardversioncontrolstrategy; - // JUnitDoclet end class - /** - * Constructor StandardVersionControlStrategyTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StandardVersionControlStrategyTest(String name) { - // JUnitDoclet begin method StandardVersionControlStrategyTest - super(name); - // JUnitDoclet end method StandardVersionControlStrategyTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public StandardVersionControlStrategy createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new StandardVersionControlStrategy(getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - standardversioncontrolstrategy = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - standardversioncontrolstrategy = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method assertCompatibleVersion() - /** - * Method testAssertCompatibleVersion is testing assertCompatibleVersion - * @see org.jhotdraw.util.StandardVersionControlStrategy#assertCompatibleVersion() - */ - // JUnitDoclet end javadoc_method assertCompatibleVersion() - public void testAssertCompatibleVersion() throws Exception { - // JUnitDoclet begin method assertCompatibleVersion - // JUnitDoclet end method assertCompatibleVersion - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StorableInputTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/StorableInputTest.java deleted file mode 100644 index 17f581ef7..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StorableInputTest.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import java.io.File; -import java.io.FileInputStream; - -import org.jhotdraw.util.StorableInput; - -// JUnitDoclet begin import -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StorableInputTest is generated by - * JUnitDoclet to hold the tests for StorableInput. - * @see org.jhotdraw.util.StorableInput - */ -// JUnitDoclet end javadoc_class -public class StorableInputTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StorableInput storableinput; - // JUnitDoclet end class - - /** - * Constructor StorableInputTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StorableInputTest(String name) { - // JUnitDoclet begin method StorableInputTest - super(name); - // JUnitDoclet end method StorableInputTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public StorableInput createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - File tempFile = File.createTempFile("StorableInputTest", "dat"); - FileInputStream stream = new FileInputStream(tempFile); - tempFile.deleteOnExit(); - return new StorableInput(stream); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - storableinput = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - storableinput = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method readStorable() - /** - * Method testReadStorable is testing readStorable - * @see org.jhotdraw.util.StorableInput#readStorable() - */ - // JUnitDoclet end javadoc_method readStorable() - public void testReadStorable() throws Exception { - // JUnitDoclet begin method readStorable - // JUnitDoclet end method readStorable - } - - // JUnitDoclet begin javadoc_method readString() - /** - * Method testReadString is testing readString - * @see org.jhotdraw.util.StorableInput#readString() - */ - // JUnitDoclet end javadoc_method readString() - public void testReadString() throws Exception { - // JUnitDoclet begin method readString - // JUnitDoclet end method readString - } - - // JUnitDoclet begin javadoc_method readInt() - /** - * Method testReadInt is testing readInt - * @see org.jhotdraw.util.StorableInput#readInt() - */ - // JUnitDoclet end javadoc_method readInt() - public void testReadInt() throws Exception { - // JUnitDoclet begin method readInt - // JUnitDoclet end method readInt - } - - // JUnitDoclet begin javadoc_method readLong() - /** - * Method testReadLong is testing readLong - * @see org.jhotdraw.util.StorableInput#readLong() - */ - // JUnitDoclet end javadoc_method readLong() - public void testReadLong() throws Exception { - // JUnitDoclet begin method readLong - // JUnitDoclet end method readLong - } - - // JUnitDoclet begin javadoc_method readColor() - /** - * Method testReadColor is testing readColor - * @see org.jhotdraw.util.StorableInput#readColor() - */ - // JUnitDoclet end javadoc_method readColor() - public void testReadColor() throws Exception { - // JUnitDoclet begin method readColor - // JUnitDoclet end method readColor - } - - // JUnitDoclet begin javadoc_method readDouble() - /** - * Method testReadDouble is testing readDouble - * @see org.jhotdraw.util.StorableInput#readDouble() - */ - // JUnitDoclet end javadoc_method readDouble() - public void testReadDouble() throws Exception { - // JUnitDoclet begin method readDouble - // JUnitDoclet end method readDouble - } - - // JUnitDoclet begin javadoc_method readBoolean() - /** - * Method testReadBoolean is testing readBoolean - * @see org.jhotdraw.util.StorableInput#readBoolean() - */ - // JUnitDoclet end javadoc_method readBoolean() - public void testReadBoolean() throws Exception { - // JUnitDoclet begin method readBoolean - // JUnitDoclet end method readBoolean - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StorableOutputTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/StorableOutputTest.java deleted file mode 100644 index 94f7cad19..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StorableOutputTest.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import java.io.File; -import java.io.FileOutputStream; - -import org.jhotdraw.util.StorableOutput; - -// JUnitDoclet begin import -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StorableOutputTest is generated by - * JUnitDoclet to hold the tests for StorableOutput. - * @see org.jhotdraw.util.StorableOutput - */ -// JUnitDoclet end javadoc_class -public class StorableOutputTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StorableOutput storableoutput; - // JUnitDoclet end class - - /** - * Constructor StorableOutputTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StorableOutputTest(String name) { - // JUnitDoclet begin method StorableOutputTest - super(name); - // JUnitDoclet end method StorableOutputTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public StorableOutput createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - File tempFile = File.createTempFile("StorableOutputTest", "dat"); - FileOutputStream stream = new FileOutputStream(tempFile); - tempFile.deleteOnExit(); - return new StorableOutput(stream); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - storableoutput = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - storableoutput = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method writeStorable() - /** - * Method testWriteStorable is testing writeStorable - * @see org.jhotdraw.util.StorableOutput#writeStorable(org.jhotdraw.util.Storable) - */ - // JUnitDoclet end javadoc_method writeStorable() - public void testWriteStorable() throws Exception { - // JUnitDoclet begin method writeStorable - // JUnitDoclet end method writeStorable - } - - // JUnitDoclet begin javadoc_method writeInt() - /** - * Method testWriteInt is testing writeInt - * @see org.jhotdraw.util.StorableOutput#writeInt(int) - */ - // JUnitDoclet end javadoc_method writeInt() - public void testWriteInt() throws Exception { - // JUnitDoclet begin method writeInt - // JUnitDoclet end method writeInt - } - - // JUnitDoclet begin javadoc_method writeLong() - /** - * Method testWriteLong is testing writeLong - * @see org.jhotdraw.util.StorableOutput#writeLong(long) - */ - // JUnitDoclet end javadoc_method writeLong() - public void testWriteLong() throws Exception { - // JUnitDoclet begin method writeLong - // JUnitDoclet end method writeLong - } - - // JUnitDoclet begin javadoc_method writeColor() - /** - * Method testWriteColor is testing writeColor - * @see org.jhotdraw.util.StorableOutput#writeColor(java.awt.Color) - */ - // JUnitDoclet end javadoc_method writeColor() - public void testWriteColor() throws Exception { - // JUnitDoclet begin method writeColor - // JUnitDoclet end method writeColor - } - - // JUnitDoclet begin javadoc_method writeDouble() - /** - * Method testWriteDouble is testing writeDouble - * @see org.jhotdraw.util.StorableOutput#writeDouble(double) - */ - // JUnitDoclet end javadoc_method writeDouble() - public void testWriteDouble() throws Exception { - // JUnitDoclet begin method writeDouble - // JUnitDoclet end method writeDouble - } - - // JUnitDoclet begin javadoc_method writeBoolean() - /** - * Method testWriteBoolean is testing writeBoolean - * @see org.jhotdraw.util.StorableOutput#writeBoolean(boolean) - */ - // JUnitDoclet end javadoc_method writeBoolean() - public void testWriteBoolean() throws Exception { - // JUnitDoclet begin method writeBoolean - // JUnitDoclet end method writeBoolean - } - - // JUnitDoclet begin javadoc_method writeString() - /** - * Method testWriteString is testing writeString - * @see org.jhotdraw.util.StorableOutput#writeString(java.lang.String) - */ - // JUnitDoclet end javadoc_method writeString() - public void testWriteString() throws Exception { - // JUnitDoclet begin method writeString - // JUnitDoclet end method writeString - } - - // JUnitDoclet begin javadoc_method close() - /** - * Method testClose is testing close - * @see org.jhotdraw.util.StorableOutput#close() - */ - // JUnitDoclet end javadoc_method close() - public void testClose() throws Exception { - // JUnitDoclet begin method close - // JUnitDoclet end method close - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StorageFormatManagerTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/StorageFormatManagerTest.java deleted file mode 100644 index e2e17144c..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/StorageFormatManagerTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import junit.framework.TestCase; - -// JUnitDoclet begin import -import org.jhotdraw.util.StandardStorageFormat; -import org.jhotdraw.util.StorageFormatManager; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase StorageFormatManagerTest is generated by - * JUnitDoclet to hold the tests for StorageFormatManager. - * @see org.jhotdraw.util.StorageFormatManager - */ -// JUnitDoclet end javadoc_class -public class StorageFormatManagerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private StorageFormatManager storageformatmanager; - // JUnitDoclet end class - - /** - * Constructor StorageFormatManagerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public StorageFormatManagerTest(String name) { - // JUnitDoclet begin method StorageFormatManagerTest - super(name); - // JUnitDoclet end method StorageFormatManagerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public StorageFormatManager createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new StorageFormatManager(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - storageformatmanager = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - storageformatmanager = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method addStorageFormat() - /** - * Method testAddStorageFormat is testing addStorageFormat - * @see org.jhotdraw.util.StorageFormatManager#addStorageFormat(org.jhotdraw.util.StorageFormat) - */ - // JUnitDoclet end javadoc_method addStorageFormat() - public void testAddStorageFormat() throws Exception { - // JUnitDoclet begin method addStorageFormat - // JUnitDoclet end method addStorageFormat - } - - // JUnitDoclet begin javadoc_method removeStorageFormat() - /** - * Method testRemoveStorageFormat is testing removeStorageFormat - * @see org.jhotdraw.util.StorageFormatManager#removeStorageFormat(org.jhotdraw.util.StorageFormat) - */ - // JUnitDoclet end javadoc_method removeStorageFormat() - public void testRemoveStorageFormat() throws Exception { - // JUnitDoclet begin method removeStorageFormat - // JUnitDoclet end method removeStorageFormat - } - - // JUnitDoclet begin javadoc_method containsStorageFormat() - /** - * Method testContainsStorageFormat is testing containsStorageFormat - * @see org.jhotdraw.util.StorageFormatManager#containsStorageFormat(org.jhotdraw.util.StorageFormat) - */ - // JUnitDoclet end javadoc_method containsStorageFormat() - public void testContainsStorageFormat() throws Exception { - // JUnitDoclet begin method containsStorageFormat - // JUnitDoclet end method containsStorageFormat - } - - // JUnitDoclet begin javadoc_method setDefaultStorageFormat() - /** - * Method testSetGetDefaultStorageFormat is testing setDefaultStorageFormat - * and getDefaultStorageFormat together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.StorageFormatManager#setDefaultStorageFormat(org.jhotdraw.util.StorageFormat) - * @see org.jhotdraw.util.StorageFormatManager#getDefaultStorageFormat() - */ - // JUnitDoclet end javadoc_method setDefaultStorageFormat() - public void testSetGetDefaultStorageFormat() throws Exception { - // JUnitDoclet begin method setDefaultStorageFormat getDefaultStorageFormat - org.jhotdraw.util.StorageFormat[] tests = { new StandardStorageFormat(), null }; - - for (int i = 0; i < tests.length; i++) { - storageformatmanager.setDefaultStorageFormat(tests[i]); - assertEquals(tests[i], storageformatmanager.getDefaultStorageFormat()); - } - // JUnitDoclet end method setDefaultStorageFormat getDefaultStorageFormat - } - - // JUnitDoclet begin javadoc_method registerFileFilters() - /** - * Method testRegisterFileFilters is testing registerFileFilters - * @see org.jhotdraw.util.StorageFormatManager#registerFileFilters(javax.swing.JFileChooser) - */ - // JUnitDoclet end javadoc_method registerFileFilters() - public void testRegisterFileFilters() throws Exception { - // JUnitDoclet begin method registerFileFilters - // JUnitDoclet end method registerFileFilters - } - - // JUnitDoclet begin javadoc_method findStorageFormat() - /** - * Method testFindStorageFormat is testing findStorageFormat - * @see org.jhotdraw.util.StorageFormatManager#findStorageFormat(javax.swing.filechooser.FileFilter) - */ - // JUnitDoclet end javadoc_method findStorageFormat() - public void testFindStorageFormat() throws Exception { - // JUnitDoclet begin method findStorageFormat - // JUnitDoclet end method findStorageFormat - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoCommandTest.java deleted file mode 100644 index bb055e3bf..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoCommandTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.UndoCommand; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoCommandTest is generated by - * JUnitDoclet to hold the tests for UndoCommand. - * @see org.jhotdraw.util.UndoCommand - */ -// JUnitDoclet end javadoc_class -public class UndoCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoCommand undocommand; - // JUnitDoclet end class - - /** - * Constructor UndoCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoCommandTest(String name) { - // JUnitDoclet begin method UndoCommandTest - super(name); - // JUnitDoclet end method UndoCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public UndoCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new UndoCommand("TestUndo", getDrawingEditor()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undocommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undocommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.util.UndoCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutableWithView() - /** - * Method testIsExecutableWithView is testing isExecutableWithView - * @see org.jhotdraw.util.UndoCommand#isExecutableWithView() - */ - // JUnitDoclet end javadoc_method isExecutableWithView() - public void testIsExecutableWithView() throws Exception { - // JUnitDoclet begin method isExecutableWithView - // JUnitDoclet end method isExecutableWithView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoManagerTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoManagerTest.java deleted file mode 100644 index 2ae653a0b..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoManagerTest.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.util.UndoManager; -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoManagerTest is generated by - * JUnitDoclet to hold the tests for UndoManager. - * @see org.jhotdraw.util.UndoManager - */ -// JUnitDoclet end javadoc_class -public class UndoManagerTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoManager undomanager; - // JUnitDoclet end class - - /** - * Constructor UndoManagerTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoManagerTest(String name) { - // JUnitDoclet begin method UndoManagerTest - super(name); - // JUnitDoclet end method UndoManagerTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public UndoManager createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new UndoManager(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undomanager = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undomanager = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method pushUndo() - /** - * Method testPushUndo is testing pushUndo - * @see org.jhotdraw.util.UndoManager#pushUndo(org.jhotdraw.util.Undoable) - */ - // JUnitDoclet end javadoc_method pushUndo() - public void testPushUndo() throws Exception { - // JUnitDoclet begin method pushUndo - // JUnitDoclet end method pushUndo - } - - // JUnitDoclet begin javadoc_method pushRedo() - /** - * Method testPushRedo is testing pushRedo - * @see org.jhotdraw.util.UndoManager#pushRedo(org.jhotdraw.util.Undoable) - */ - // JUnitDoclet end javadoc_method pushRedo() - public void testPushRedo() throws Exception { - // JUnitDoclet begin method pushRedo - // JUnitDoclet end method pushRedo - } - - // JUnitDoclet begin javadoc_method isUndoable() - /** - * Method testIsUndoable is testing isUndoable - * @see org.jhotdraw.util.UndoManager#isUndoable() - */ - // JUnitDoclet end javadoc_method isUndoable() - public void testIsUndoable() throws Exception { - // JUnitDoclet begin method isUndoable - // JUnitDoclet end method isUndoable - } - - // JUnitDoclet begin javadoc_method isRedoable() - /** - * Method testIsRedoable is testing isRedoable - * @see org.jhotdraw.util.UndoManager#isRedoable() - */ - // JUnitDoclet end javadoc_method isRedoable() - public void testIsRedoable() throws Exception { - // JUnitDoclet begin method isRedoable - // JUnitDoclet end method isRedoable - } - - // JUnitDoclet begin javadoc_method getUndoSize() - /** - * Method testGetUndoSize is testing getUndoSize - * @see org.jhotdraw.util.UndoManager#getUndoSize() - */ - // JUnitDoclet end javadoc_method getUndoSize() - public void testGetUndoSize() throws Exception { - // JUnitDoclet begin method getUndoSize - // JUnitDoclet end method getUndoSize - } - - // JUnitDoclet begin javadoc_method getRedoSize() - /** - * Method testGetRedoSize is testing getRedoSize - * @see org.jhotdraw.util.UndoManager#getRedoSize() - */ - // JUnitDoclet end javadoc_method getRedoSize() - public void testGetRedoSize() throws Exception { - // JUnitDoclet begin method getRedoSize - // JUnitDoclet end method getRedoSize - } - - // JUnitDoclet begin javadoc_method popUndo() - /** - * Method testPopUndo is testing popUndo - * @see org.jhotdraw.util.UndoManager#popUndo() - */ - // JUnitDoclet end javadoc_method popUndo() - public void testPopUndo() throws Exception { - // JUnitDoclet begin method popUndo - // JUnitDoclet end method popUndo - } - - // JUnitDoclet begin javadoc_method popRedo() - /** - * Method testPopRedo is testing popRedo - * @see org.jhotdraw.util.UndoManager#popRedo() - */ - // JUnitDoclet end javadoc_method popRedo() - public void testPopRedo() throws Exception { - // JUnitDoclet begin method popRedo - // JUnitDoclet end method popRedo - } - - // JUnitDoclet begin javadoc_method clearUndos() - /** - * Method testClearUndos is testing clearUndos - * @see org.jhotdraw.util.UndoManager#clearUndos() - */ - // JUnitDoclet end javadoc_method clearUndos() - public void testClearUndos() throws Exception { - // JUnitDoclet begin method clearUndos - // JUnitDoclet end method clearUndos - } - - // JUnitDoclet begin javadoc_method clearRedos() - /** - * Method testClearRedos is testing clearRedos - * @see org.jhotdraw.util.UndoManager#clearRedos() - */ - // JUnitDoclet end javadoc_method clearRedos() - public void testClearRedos() throws Exception { - // JUnitDoclet begin method clearRedos - // JUnitDoclet end method clearRedos - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoRedoActivityTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoRedoActivityTest.java deleted file mode 100644 index d5b0c2c93..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoRedoActivityTest.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import java.awt.Point; -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.framework.FigureEnumeration; -import org.jhotdraw.standard.PasteCommand; -import org.jhotdraw.standard.SingleFigureEnumerator; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.UndoRedoActivity; -import org.jhotdraw.util.Undoable; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoRedoActivityTest is generated by - * JUnitDoclet to hold the tests for UndoRedoActivity. - * @see org.jhotdraw.util.UndoRedoActivity - */ -// JUnitDoclet end javadoc_class -public class UndoRedoActivityTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoRedoActivity undoredoactivity; - // JUnitDoclet end class - - /** - * Constructor UndoRedoActivityTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoRedoActivityTest(String name) { - // JUnitDoclet begin method UndoRedoActivityTest - super(name); - // JUnitDoclet end method UndoRedoActivityTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public UndoRedoActivity createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Undoable undoActivity = new PasteCommand.UndoActivity(getDrawingEditor().view()); - undoActivity.setAffectedFigures(new SingleFigureEnumerator(new RectangleFigure(new Point(33, 33), new Point(44, 44)))); - return (UndoRedoActivity)UndoRedoActivity.createUndoRedoActivity(undoActivity); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoredoactivity = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoredoactivity = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method undo() - /** - * Method testUndo is testing undo - * @see org.jhotdraw.util.UndoRedoActivity#undo() - */ - // JUnitDoclet end javadoc_method undo() - public void testUndo() throws Exception { - // JUnitDoclet begin method undo - // JUnitDoclet end method undo - } - - // JUnitDoclet begin javadoc_method redo() - /** - * Method testRedo is testing redo - * @see org.jhotdraw.util.UndoRedoActivity#redo() - */ - // JUnitDoclet end javadoc_method redo() - public void testRedo() throws Exception { - // JUnitDoclet begin method redo - // JUnitDoclet end method redo - } - - // JUnitDoclet begin javadoc_method setUndoable() - /** - * Method testSetIsUndoable is testing setUndoable - * and isUndoable together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoRedoActivity#setUndoable(boolean) - * @see org.jhotdraw.util.UndoRedoActivity#isUndoable() - */ - // JUnitDoclet end javadoc_method setUndoable() - public void testSetIsUndoable() throws Exception { - // JUnitDoclet begin method setUndoable isUndoable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoredoactivity.setUndoable(tests[i]); - assertEquals(tests[i], undoredoactivity.isUndoable()); - } - // JUnitDoclet end method setUndoable isUndoable - } - - // JUnitDoclet begin javadoc_method setRedoable() - /** - * Method testSetIsRedoable is testing setRedoable - * and isRedoable together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoRedoActivity#setRedoable(boolean) - * @see org.jhotdraw.util.UndoRedoActivity#isRedoable() - */ - // JUnitDoclet end javadoc_method setRedoable() - public void testSetIsRedoable() throws Exception { - // JUnitDoclet begin method setRedoable isRedoable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoredoactivity.setRedoable(tests[i]); - assertEquals(tests[i], undoredoactivity.isRedoable()); - } - // JUnitDoclet end method setRedoable isRedoable - } - - // JUnitDoclet begin javadoc_method setAffectedFigures() - /** - * Method testSetGetAffectedFigures is testing setAffectedFigures - * and getAffectedFigures together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoRedoActivity#setAffectedFigures(org.jhotdraw.framework.FigureEnumeration) - * @see org.jhotdraw.util.UndoRedoActivity#getAffectedFigures() - */ - // JUnitDoclet end javadoc_method setAffectedFigures() - public void testSetGetAffectedFigures() throws Exception { - // JUnitDoclet begin method setAffectedFigures getAffectedFigures - FigureEnumeration[] tests = { new SingleFigureEnumerator(new RectangleFigure(new Point(44, 44), new Point(55, 55)))}; - - for (int i = 0; i < tests.length; i++) { - undoredoactivity.setAffectedFigures(tests[i]); - FigureEnumeration returned = undoredoactivity.getAffectedFigures(); - tests[i].reset(); - while (returned.hasNextFigure()) { - assertTrue(tests[i].hasNextFigure()); - assertEquals(tests[i].nextFigure(), returned.nextFigure()); - } - assertFalse(tests[i].hasNextFigure()); - } - // JUnitDoclet end method setAffectedFigures getAffectedFigures - } - - // JUnitDoclet begin method testSetNullAffectedFigures() - /** - * Test a null argument to setAffectedFigures. Expect an IllegalArgumentException - * - * @see org.jhotdraw.util.UndoRedoActivity#setAffectedFigures(org.jhotdraw.framework.PointConstrainer) - */ - public void testSetNullAffectedFigures() throws Exception { - FigureEnumeration original = undoredoactivity.getAffectedFigures(); - - try { - undoredoactivity.setAffectedFigures(null); - fail("IllegalArgumentException expected"); - } - catch (IllegalArgumentException ok) { - } - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method getAffectedFiguresCount() - /** - * Method testGetAffectedFiguresCount is testing getAffectedFiguresCount - * @see org.jhotdraw.util.UndoRedoActivity#getAffectedFiguresCount() - */ - // JUnitDoclet end javadoc_method getAffectedFiguresCount() - public void testGetAffectedFiguresCount() throws Exception { - // JUnitDoclet begin method getAffectedFiguresCount - // JUnitDoclet end method getAffectedFiguresCount - } - - // JUnitDoclet begin javadoc_method getDrawingView() - /** - * Method testGetDrawingView is testing getDrawingView - * @see org.jhotdraw.util.UndoRedoActivity#getDrawingView() - */ - // JUnitDoclet end javadoc_method getDrawingView() - public void testGetDrawingView() throws Exception { - // JUnitDoclet begin method getDrawingView - // JUnitDoclet end method getDrawingView - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see org.jhotdraw.util.UndoRedoActivity#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method getReversedActivity() - /** - * Method testGetReversedActivity is testing getReversedActivity - * @see org.jhotdraw.util.UndoRedoActivity#getReversedActivity() - */ - // JUnitDoclet end javadoc_method getReversedActivity() - public void testGetReversedActivity() throws Exception { - // JUnitDoclet begin method getReversedActivity - // JUnitDoclet end method getReversedActivity - } - - // JUnitDoclet begin javadoc_method createUndoRedoActivity() - /** - * Method testCreateUndoRedoActivity is testing createUndoRedoActivity - * @see org.jhotdraw.util.UndoRedoActivity#createUndoRedoActivity(org.jhotdraw.util.Undoable) - */ - // JUnitDoclet end javadoc_method createUndoRedoActivity() - public void testCreateUndoRedoActivity() throws Exception { - // JUnitDoclet begin method createUndoRedoActivity - // JUnitDoclet end method createUndoRedoActivity - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableAdapterTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableAdapterTest.java deleted file mode 100644 index 357b685f7..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableAdapterTest.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.UndoableAdapter; -import org.jhotdraw.standard.SingleFigureEnumerator; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.framework.FigureEnumeration; - -import java.awt.*; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoableAdapterTest is generated by - * JUnitDoclet to hold the tests for UndoableAdapter. - * @see org.jhotdraw.util.UndoableAdapter - */ -// JUnitDoclet end javadoc_class -public class UndoableAdapterTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoableAdapter undoableadapter; - // JUnitDoclet end class - - /** - * Constructor UndoableAdapterTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoableAdapterTest(String name) { - // JUnitDoclet begin method UndoableAdapterTest - super(name); - // JUnitDoclet end method UndoableAdapterTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public UndoableAdapter createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new UndoableAdapter(getDrawingEditor().view()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoableadapter = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoableadapter = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method undo() - /** - * Method testUndo is testing undo - * @see org.jhotdraw.util.UndoableAdapter#undo() - */ - // JUnitDoclet end javadoc_method undo() - public void testUndo() throws Exception { - // JUnitDoclet begin method undo - // JUnitDoclet end method undo - } - - // JUnitDoclet begin javadoc_method redo() - /** - * Method testRedo is testing redo - * @see org.jhotdraw.util.UndoableAdapter#redo() - */ - // JUnitDoclet end javadoc_method redo() - public void testRedo() throws Exception { - // JUnitDoclet begin method redo - // JUnitDoclet end method redo - } - - // JUnitDoclet begin javadoc_method setUndoable() - /** - * Method testSetIsUndoable is testing setUndoable - * and isUndoable together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoableAdapter#setUndoable(boolean) - * @see org.jhotdraw.util.UndoableAdapter#isUndoable() - */ - // JUnitDoclet end javadoc_method setUndoable() - public void testSetIsUndoable() throws Exception { - // JUnitDoclet begin method setUndoable isUndoable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoableadapter.setUndoable(tests[i]); - assertEquals(tests[i], undoableadapter.isUndoable()); - } - // JUnitDoclet end method setUndoable isUndoable - } - - // JUnitDoclet begin javadoc_method setRedoable() - /** - * Method testSetIsRedoable is testing setRedoable - * and isRedoable together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoableAdapter#setRedoable(boolean) - * @see org.jhotdraw.util.UndoableAdapter#isRedoable() - */ - // JUnitDoclet end javadoc_method setRedoable() - public void testSetIsRedoable() throws Exception { - // JUnitDoclet begin method setRedoable isRedoable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoableadapter.setRedoable(tests[i]); - assertEquals(tests[i], undoableadapter.isRedoable()); - } - // JUnitDoclet end method setRedoable isRedoable - } - - // JUnitDoclet begin javadoc_method setAffectedFigures() - /** - * Method testSetGetAffectedFigures is testing setAffectedFigures - * and getAffectedFigures together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoableAdapter#setAffectedFigures(org.jhotdraw.framework.FigureEnumeration) - * @see org.jhotdraw.util.UndoableAdapter#getAffectedFigures() - */ - // JUnitDoclet end javadoc_method setAffectedFigures() - public void testSetGetAffectedFigures() throws Exception { - // JUnitDoclet begin method setAffectedFigures getAffectedFigures - FigureEnumeration[] tests = { new SingleFigureEnumerator(new RectangleFigure(new Point(30, 30), new Point(60, 60)))}; - - for (int i = 0; i < tests.length; i++) { - undoableadapter.setAffectedFigures(tests[i]); - FigureEnumeration returned = undoableadapter.getAffectedFigures(); - tests[i].reset(); - while (returned.hasNextFigure()) { - assertTrue(tests[i].hasNextFigure()); - assertEquals(tests[i].nextFigure(), returned.nextFigure()); - } - assertFalse(tests[i].hasNextFigure()); - } - // JUnitDoclet end method setAffectedFigures getAffectedFigures - } - - // JUnitDoclet begin method testSetNullAffectedFigures() - /** - * Test a null argument to setAffectedFigures. Expect an IllegalArgumentException - * - * @see org.jhotdraw.util.UndoRedoActivity#setAffectedFigures(org.jhotdraw.framework.PointConstrainer) - */ - public void testSetNullAffectedFigures() throws Exception { - FigureEnumeration original = undoableadapter.getAffectedFigures(); - - try { - undoableadapter.setAffectedFigures(null); - fail("IllegalArgumentException expected"); - } - catch (IllegalArgumentException ok) { - } - } - // JUnitDoclet end method - - // JUnitDoclet begin javadoc_method getAffectedFiguresCount() - /** - * Method testGetAffectedFiguresCount is testing getAffectedFiguresCount - * @see org.jhotdraw.util.UndoableAdapter#getAffectedFiguresCount() - */ - // JUnitDoclet end javadoc_method getAffectedFiguresCount() - public void testGetAffectedFiguresCount() throws Exception { - // JUnitDoclet begin method getAffectedFiguresCount - // JUnitDoclet end method getAffectedFiguresCount - } - - // JUnitDoclet begin javadoc_method release() - /** - * Method testRelease is testing release - * @see org.jhotdraw.util.UndoableAdapter#release() - */ - // JUnitDoclet end javadoc_method release() - public void testRelease() throws Exception { - // JUnitDoclet begin method release - // JUnitDoclet end method release - } - - // JUnitDoclet begin javadoc_method getDrawingView() - /** - * Method testGetDrawingView is testing getDrawingView - * @see org.jhotdraw.util.UndoableAdapter#getDrawingView() - */ - // JUnitDoclet end javadoc_method getDrawingView() - public void testGetDrawingView() throws Exception { - // JUnitDoclet begin method getDrawingView - // JUnitDoclet end method getDrawingView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableCommandTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableCommandTest.java deleted file mode 100644 index 28aef01f6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableCommandTest.java +++ /dev/null @@ -1,248 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.standard.DeleteCommand; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.UndoableCommand; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoableCommandTest is generated by - * JUnitDoclet to hold the tests for UndoableCommand. - * @see org.jhotdraw.util.UndoableCommand - */ -// JUnitDoclet end javadoc_class -public class UndoableCommandTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoableCommand undoablecommand; - // JUnitDoclet end class - - /** - * Constructor UndoableCommandTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoableCommandTest(String name) { - // JUnitDoclet begin method UndoableCommandTest - super(name); - // JUnitDoclet end method UndoableCommandTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public UndoableCommand createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new UndoableCommand(new DeleteCommand("Delete", getDrawingEditor())); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoablecommand = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoablecommand = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method execute() - /** - * Method testExecute is testing execute - * @see org.jhotdraw.util.UndoableCommand#execute() - */ - // JUnitDoclet end javadoc_method execute() - public void testExecute() throws Exception { - // JUnitDoclet begin method execute - // JUnitDoclet end method execute - } - - // JUnitDoclet begin javadoc_method isExecutable() - /** - * Method testIsExecutable is testing isExecutable - * @see org.jhotdraw.util.UndoableCommand#isExecutable() - */ - // JUnitDoclet end javadoc_method isExecutable() - public void testIsExecutable() throws Exception { - // JUnitDoclet begin method isExecutable - // JUnitDoclet end method isExecutable - } - - // JUnitDoclet begin javadoc_method name() - /** - * Method testName is testing name - * @see org.jhotdraw.util.UndoableCommand#name() - */ - // JUnitDoclet end javadoc_method name() - public void testName() throws Exception { - // JUnitDoclet begin method name - // JUnitDoclet end method name - } - - // JUnitDoclet begin javadoc_method getDrawingEditor() - /** - * Method testGetDrawingEditor is testing getDrawingEditor - * @see org.jhotdraw.util.UndoableCommand#getDrawingEditor() - */ - // JUnitDoclet end javadoc_method getDrawingEditor() - public void testGetDrawingEditor() throws Exception { - // JUnitDoclet begin method getDrawingEditor - // JUnitDoclet end method getDrawingEditor - } - - // JUnitDoclet begin javadoc_method view() - /** - * Method testView is testing view - * @see org.jhotdraw.util.UndoableCommand#view() - */ - // JUnitDoclet end javadoc_method view() - public void testView() throws Exception { - // JUnitDoclet begin method view - // JUnitDoclet end method view - } - - // JUnitDoclet begin javadoc_method figureSelectionChanged() - /** - * Method testFigureSelectionChanged is testing figureSelectionChanged - * @see org.jhotdraw.util.UndoableCommand#figureSelectionChanged(org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method figureSelectionChanged() - public void testFigureSelectionChanged() throws Exception { - // JUnitDoclet begin method figureSelectionChanged - // JUnitDoclet end method figureSelectionChanged - } - - // JUnitDoclet begin javadoc_method setUndoActivity() - /** - * Method testSetGetUndoActivity is testing setUndoActivity - * and getUndoActivity together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoableCommand#setUndoActivity(org.jhotdraw.util.Undoable) - * @see org.jhotdraw.util.UndoableCommand#getUndoActivity() - */ - // JUnitDoclet end javadoc_method setUndoActivity() - public void testSetGetUndoActivity() throws Exception { - // JUnitDoclet begin method setUndoActivity getUndoActivity - // Do nothing: UndoCommand.setUndoActivity() is a no-op - // JUnitDoclet end method setUndoActivity getUndoActivity - } - - // JUnitDoclet begin javadoc_method addCommandListener() - /** - * Method testAddCommandListener is testing addCommandListener - * @see org.jhotdraw.util.UndoableCommand#addCommandListener(org.jhotdraw.util.CommandListener) - */ - // JUnitDoclet end javadoc_method addCommandListener() - public void testAddCommandListener() throws Exception { - // JUnitDoclet begin method addCommandListener - // JUnitDoclet end method addCommandListener - } - - // JUnitDoclet begin javadoc_method removeCommandListener() - /** - * Method testRemoveCommandListener is testing removeCommandListener - * @see org.jhotdraw.util.UndoableCommand#removeCommandListener(org.jhotdraw.util.CommandListener) - */ - // JUnitDoclet end javadoc_method removeCommandListener() - public void testRemoveCommandListener() throws Exception { - // JUnitDoclet begin method removeCommandListener - // JUnitDoclet end method removeCommandListener - } - - // JUnitDoclet begin javadoc_method createEventDispatcher() - /** - * Method testCreateEventDispatcher is testing createEventDispatcher - * @see org.jhotdraw.util.UndoableCommand#createEventDispatcher() - */ - // JUnitDoclet end javadoc_method createEventDispatcher() - public void testCreateEventDispatcher() throws Exception { - // JUnitDoclet begin method createEventDispatcher - // JUnitDoclet end method createEventDispatcher - } - - // JUnitDoclet begin javadoc_method commandExecuted() - /** - * Method testCommandExecuted is testing commandExecuted - * @see org.jhotdraw.util.UndoableCommand#commandExecuted(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecuted() - public void testCommandExecuted() throws Exception { - // JUnitDoclet begin method commandExecuted - // JUnitDoclet end method commandExecuted - } - - // JUnitDoclet begin javadoc_method commandExecutable() - /** - * Method testCommandExecutable is testing commandExecutable - * @see org.jhotdraw.util.UndoableCommand#commandExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandExecutable() - public void testCommandExecutable() throws Exception { - // JUnitDoclet begin method commandExecutable - // JUnitDoclet end method commandExecutable - } - - // JUnitDoclet begin javadoc_method commandNotExecutable() - /** - * Method testCommandNotExecutable is testing commandNotExecutable - * @see org.jhotdraw.util.UndoableCommand#commandNotExecutable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method commandNotExecutable() - public void testCommandNotExecutable() throws Exception { - // JUnitDoclet begin method commandNotExecutable - // JUnitDoclet end method commandNotExecutable - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableHandleTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableHandleTest.java deleted file mode 100644 index 7fb322de6..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableHandleTest.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import java.awt.Point; - -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.standard.BoxHandleKit; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.UndoableHandle; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoableHandleTest is generated by - * JUnitDoclet to hold the tests for UndoableHandle. - * @see org.jhotdraw.util.UndoableHandle - */ -// JUnitDoclet end javadoc_class -public class UndoableHandleTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoableHandle undoablehandle; - // JUnitDoclet end class - - /** - * Constructor UndoableHandleTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoableHandleTest(String name) { - // JUnitDoclet begin method UndoableHandleTest - super(name); - // JUnitDoclet end method UndoableHandleTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public UndoableHandle createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new UndoableHandle(BoxHandleKit.south(new RectangleFigure(new Point(44, 44), new Point(88, 88)))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoablehandle = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoablehandle = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method locate() - /** - * Method testLocate is testing locate - * @see org.jhotdraw.util.UndoableHandle#locate() - */ - // JUnitDoclet end javadoc_method locate() - public void testLocate() throws Exception { - // JUnitDoclet begin method locate - // JUnitDoclet end method locate - } - - // JUnitDoclet begin javadoc_method invokeStart() - /** - * Method testInvokeStart is testing invokeStart - * @see org.jhotdraw.util.UndoableHandle#invokeStart(int, int, org.jhotdraw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method invokeStart() - public void testInvokeStart() throws Exception { - // JUnitDoclet begin method invokeStart - // JUnitDoclet end method invokeStart - } - - // JUnitDoclet begin javadoc_method invokeStep() - /** - * Method testInvokeStep is testing invokeStep - * @see org.jhotdraw.util.UndoableHandle#invokeStep(int, int, org.jhotdraw.framework.Drawing) - */ - // JUnitDoclet end javadoc_method invokeStep() - public void testInvokeStep() throws Exception { - // JUnitDoclet begin method invokeStep - // JUnitDoclet end method invokeStep - } - - // JUnitDoclet begin javadoc_method invokeEnd() - /** - * Method testInvokeEnd is testing invokeEnd - * @see org.jhotdraw.util.UndoableHandle#invokeEnd(int, int, int, int, org.jhotdraw.framework.DrawingView) - */ - // JUnitDoclet end javadoc_method invokeEnd() - public void testInvokeEnd() throws Exception { - // JUnitDoclet begin method invokeEnd - // JUnitDoclet end method invokeEnd - } - - // JUnitDoclet begin javadoc_method owner() - /** - * Method testOwner is testing owner - * @see org.jhotdraw.util.UndoableHandle#owner() - */ - // JUnitDoclet end javadoc_method owner() - public void testOwner() throws Exception { - // JUnitDoclet begin method owner - // JUnitDoclet end method owner - } - - // JUnitDoclet begin javadoc_method displayBox() - /** - * Method testDisplayBox is testing displayBox - * @see org.jhotdraw.util.UndoableHandle#displayBox() - */ - // JUnitDoclet end javadoc_method displayBox() - public void testDisplayBox() throws Exception { - // JUnitDoclet begin method displayBox - // JUnitDoclet end method displayBox - } - - // JUnitDoclet begin javadoc_method containsPoint() - /** - * Method testContainsPoint is testing containsPoint - * @see org.jhotdraw.util.UndoableHandle#containsPoint(int, int) - */ - // JUnitDoclet end javadoc_method containsPoint() - public void testContainsPoint() throws Exception { - // JUnitDoclet begin method containsPoint - // JUnitDoclet end method containsPoint - } - - // JUnitDoclet begin javadoc_method draw() - /** - * Method testDraw is testing draw - * @see org.jhotdraw.util.UndoableHandle#draw(java.awt.Graphics) - */ - // JUnitDoclet end javadoc_method draw() - public void testDraw() throws Exception { - // JUnitDoclet begin method draw - // JUnitDoclet end method draw - } - - // JUnitDoclet begin javadoc_method getDrawingView() - /** - * Method testGetDrawingView is testing getDrawingView - * @see org.jhotdraw.util.UndoableHandle#getDrawingView() - */ - // JUnitDoclet end javadoc_method getDrawingView() - public void testGetDrawingView() throws Exception { - // JUnitDoclet begin method getDrawingView - // JUnitDoclet end method getDrawingView - } - - // JUnitDoclet begin javadoc_method setUndoActivity() - /** - * Method testSetGetUndoActivity is testing setUndoActivity - * and getUndoActivity together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoableHandle#setUndoActivity(org.jhotdraw.util.Undoable) - * @see org.jhotdraw.util.UndoableHandle#getUndoActivity() - */ - // JUnitDoclet end javadoc_method setUndoActivity() - public void testSetGetUndoActivity() throws Exception { - // JUnitDoclet begin method setUndoActivity getUndoActivity - // Do nothing: UndoableHandle.setUndoActivity() is a no-op. - // JUnitDoclet end method setUndoActivity getUndoActivity - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableToolTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableToolTest.java deleted file mode 100644 index 34b5acfb8..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UndoableToolTest.java +++ /dev/null @@ -1,374 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.contrib.DiamondFigure; -import org.jhotdraw.standard.CreationTool; -import org.jhotdraw.test.JHDTestCase; -import org.jhotdraw.util.UndoableTool; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase UndoableToolTest is generated by - * JUnitDoclet to hold the tests for UndoableTool. - * @see org.jhotdraw.util.UndoableTool - */ -// JUnitDoclet end javadoc_class -public class UndoableToolTest -// JUnitDoclet begin extends_implements -extends JHDTestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private UndoableTool undoabletool; - // JUnitDoclet end class - - /** - * Constructor UndoableToolTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public UndoableToolTest(String name) { - // JUnitDoclet begin method UndoableToolTest - super(name); - // JUnitDoclet end method UndoableToolTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public UndoableTool createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new UndoableTool(new UndoableTool(new CreationTool(getDrawingEditor(), new DiamondFigure()))); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - undoabletool = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - undoabletool = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method activate() - /** - * Method testActivate is testing activate - * @see org.jhotdraw.util.UndoableTool#activate() - */ - // JUnitDoclet end javadoc_method activate() - public void testActivate() throws Exception { - // JUnitDoclet begin method activate - // JUnitDoclet end method activate - } - - // JUnitDoclet begin javadoc_method deactivate() - /** - * Method testDeactivate is testing deactivate - * @see org.jhotdraw.util.UndoableTool#deactivate() - */ - // JUnitDoclet end javadoc_method deactivate() - public void testDeactivate() throws Exception { - // JUnitDoclet begin method deactivate - // JUnitDoclet end method deactivate - } - - // JUnitDoclet begin javadoc_method mouseDown() - /** - * Method testMouseDown is testing mouseDown - * @see org.jhotdraw.util.UndoableTool#mouseDown(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDown() - public void testMouseDown() throws Exception { - // JUnitDoclet begin method mouseDown - // JUnitDoclet end method mouseDown - } - - // JUnitDoclet begin javadoc_method mouseDrag() - /** - * Method testMouseDrag is testing mouseDrag - * @see org.jhotdraw.util.UndoableTool#mouseDrag(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseDrag() - public void testMouseDrag() throws Exception { - // JUnitDoclet begin method mouseDrag - // JUnitDoclet end method mouseDrag - } - - // JUnitDoclet begin javadoc_method mouseUp() - /** - * Method testMouseUp is testing mouseUp - * @see org.jhotdraw.util.UndoableTool#mouseUp(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseUp() - public void testMouseUp() throws Exception { - // JUnitDoclet begin method mouseUp - // JUnitDoclet end method mouseUp - } - - // JUnitDoclet begin javadoc_method mouseMove() - /** - * Method testMouseMove is testing mouseMove - * @see org.jhotdraw.util.UndoableTool#mouseMove(java.awt.event.MouseEvent, int, int) - */ - // JUnitDoclet end javadoc_method mouseMove() - public void testMouseMove() throws Exception { - // JUnitDoclet begin method mouseMove - // JUnitDoclet end method mouseMove - } - - // JUnitDoclet begin javadoc_method keyDown() - /** - * Method testKeyDown is testing keyDown - * @see org.jhotdraw.util.UndoableTool#keyDown(java.awt.event.KeyEvent, int) - */ - // JUnitDoclet end javadoc_method keyDown() - public void testKeyDown() throws Exception { - // JUnitDoclet begin method keyDown - // JUnitDoclet end method keyDown - } - - // JUnitDoclet begin javadoc_method isActive() - /** - * Method testIsActive is testing isActive - * @see org.jhotdraw.util.UndoableTool#isActive() - */ - // JUnitDoclet end javadoc_method isActive() - public void testIsActive() throws Exception { - // JUnitDoclet begin method isActive - // JUnitDoclet end method isActive - } - - // JUnitDoclet begin javadoc_method setUsable() - /** - * Method testSetIsUsable is testing setUsable - * and isUsable together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoableTool#setUsable(boolean) - * @see org.jhotdraw.util.UndoableTool#isUsable() - */ - // JUnitDoclet end javadoc_method setUsable() - public void testSetIsUsable() throws Exception { - // JUnitDoclet begin method setUsable isUsable - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoabletool.setUsable(tests[i]); - assertEquals(tests[i], undoabletool.isUsable()); - } - // JUnitDoclet end method setUsable isUsable - } - - // JUnitDoclet begin javadoc_method setEnabled() - /** - * Method testSetIsEnabled is testing setEnabled - * and isEnabled together by setting some value - * and verifying it by reading. - * @see org.jhotdraw.util.UndoableTool#setEnabled(boolean) - * @see org.jhotdraw.util.UndoableTool#isEnabled() - */ - // JUnitDoclet end javadoc_method setEnabled() - public void testSetIsEnabled() throws Exception { - // JUnitDoclet begin method setEnabled isEnabled - boolean[] tests = { true, false }; - - for (int i = 0; i < tests.length; i++) { - undoabletool.setEnabled(tests[i]); - assertEquals(tests[i], undoabletool.isEnabled()); - } - // JUnitDoclet end method setEnabled isEnabled - } - - // JUnitDoclet begin javadoc_method editor() - /** - * Method testEditor is testing editor - * @see org.jhotdraw.util.UndoableTool#editor() - */ - // JUnitDoclet end javadoc_method editor() - public void testEditor() throws Exception { - // JUnitDoclet begin method editor - // JUnitDoclet end method editor - } - - // JUnitDoclet begin javadoc_method view() - /** - * Method testView is testing view - * @see org.jhotdraw.util.UndoableTool#view() - */ - // JUnitDoclet end javadoc_method view() - public void testView() throws Exception { - // JUnitDoclet begin method view - // JUnitDoclet end method view - } - - // JUnitDoclet begin javadoc_method setUndoActivity() - /** - * @see org.jhotdraw.util.UndoableTool#setUndoActivity(org.jhotdraw.util.Undoable) - * @see org.jhotdraw.util.UndoableTool#getUndoActivity() - */ - // JUnitDoclet end javadoc_method setUndoActivity() - public void testSetGetUndoActivity() throws Exception { - // JUnitDoclet begin method setUndoActivity getUndoActivity - // Do nothing: UndoableTool.setUndoActivity is a no-op - // JUnitDoclet end method setUndoActivity getUndoActivity - } - - // JUnitDoclet begin javadoc_method toolUsable() - /** - * Method testToolUsable is testing toolUsable - * @see org.jhotdraw.util.UndoableTool#toolUsable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolUsable() - public void testToolUsable() throws Exception { - // JUnitDoclet begin method toolUsable - // JUnitDoclet end method toolUsable - } - - // JUnitDoclet begin javadoc_method toolUnusable() - /** - * Method testToolUnusable is testing toolUnusable - * @see org.jhotdraw.util.UndoableTool#toolUnusable(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolUnusable() - public void testToolUnusable() throws Exception { - // JUnitDoclet begin method toolUnusable - // JUnitDoclet end method toolUnusable - } - - // JUnitDoclet begin javadoc_method toolActivated() - /** - * Method testToolActivated is testing toolActivated - * @see org.jhotdraw.util.UndoableTool#toolActivated(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolActivated() - public void testToolActivated() throws Exception { - // JUnitDoclet begin method toolActivated - // JUnitDoclet end method toolActivated - } - - // JUnitDoclet begin javadoc_method toolDeactivated() - /** - * Method testToolDeactivated is testing toolDeactivated - * @see org.jhotdraw.util.UndoableTool#toolDeactivated(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolDeactivated() - public void testToolDeactivated() throws Exception { - // JUnitDoclet begin method toolDeactivated - // JUnitDoclet end method toolDeactivated - } - - // JUnitDoclet begin javadoc_method toolEnabled() - /** - * Method testToolEnabled is testing toolEnabled - * @see org.jhotdraw.util.UndoableTool#toolEnabled(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolEnabled() - public void testToolEnabled() throws Exception { - // JUnitDoclet begin method toolEnabled - // JUnitDoclet end method toolEnabled - } - - // JUnitDoclet begin javadoc_method toolDisabled() - /** - * Method testToolDisabled is testing toolDisabled - * @see org.jhotdraw.util.UndoableTool#toolDisabled(java.util.EventObject) - */ - // JUnitDoclet end javadoc_method toolDisabled() - public void testToolDisabled() throws Exception { - // JUnitDoclet begin method toolDisabled - // JUnitDoclet end method toolDisabled - } - - // JUnitDoclet begin javadoc_method addToolListener() - /** - * Method testAddToolListener is testing addToolListener - * @see org.jhotdraw.util.UndoableTool#addToolListener(org.jhotdraw.framework.ToolListener) - */ - // JUnitDoclet end javadoc_method addToolListener() - public void testAddToolListener() throws Exception { - // JUnitDoclet begin method addToolListener - // JUnitDoclet end method addToolListener - } - - // JUnitDoclet begin javadoc_method removeToolListener() - /** - * Method testRemoveToolListener is testing removeToolListener - * @see org.jhotdraw.util.UndoableTool#removeToolListener(org.jhotdraw.framework.ToolListener) - */ - // JUnitDoclet end javadoc_method removeToolListener() - public void testRemoveToolListener() throws Exception { - // JUnitDoclet begin method removeToolListener - // JUnitDoclet end method removeToolListener - } - - // JUnitDoclet begin javadoc_method createEventDispatcher() - /** - * Method testCreateEventDispatcher is testing createEventDispatcher - * @see org.jhotdraw.util.UndoableTool#createEventDispatcher() - */ - // JUnitDoclet end javadoc_method createEventDispatcher() - public void testCreateEventDispatcher() throws Exception { - // JUnitDoclet begin method createEventDispatcher - // JUnitDoclet end method createEventDispatcher - } - - // JUnitDoclet begin javadoc_method getActiveView() - /** - * Method testGetActiveView is testing getActiveView - * @see org.jhotdraw.util.UndoableTool#getActiveView() - */ - // JUnitDoclet end javadoc_method getActiveView() - public void testGetActiveView() throws Exception { - // JUnitDoclet begin method getActiveView - // JUnitDoclet end method getActiveView - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UtilSuite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/UtilSuite.java deleted file mode 100644 index 293917f46..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/UtilSuite.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite UtilSuite -*/ -// JUnitDoclet end javadoc_class -public class UtilSuite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.util"); - - suite.addTestSuite(org.jhotdraw.test.util.ReverseListEnumeratorTest.class); - suite.addTestSuite(org.jhotdraw.test.util.StandardVersionControlStrategyTest.class); - suite.addTestSuite(org.jhotdraw.test.util.VersionManagementTest.class); - suite.addTestSuite(org.jhotdraw.test.util.UndoableHandleTest.class); - suite.addTestSuite(org.jhotdraw.test.util.UndoRedoActivityTest.class); - suite.addTestSuite(org.jhotdraw.test.util.UndoableAdapterTest.class); - suite.addTestSuite(org.jhotdraw.test.util.UndoableToolTest.class); - suite.addTestSuite(org.jhotdraw.test.util.RedoCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.util.UndoCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.util.UndoableCommandTest.class); - suite.addTestSuite(org.jhotdraw.test.util.GraphLayoutTest.class); - suite.addTestSuite(org.jhotdraw.test.util.BoundsTest.class); - suite.addTestSuite(org.jhotdraw.test.util.StorageFormatManagerTest.class); - suite.addTestSuite(org.jhotdraw.test.util.SerializationStorageFormatTest.class); - suite.addTestSuite(org.jhotdraw.test.util.StandardStorageFormatTest.class); - suite.addTestSuite(org.jhotdraw.test.util.PaletteLayoutTest.class); - suite.addTestSuite(org.jhotdraw.test.util.PaletteIconTest.class); - suite.addTestSuite(org.jhotdraw.test.util.IconkitTest.class); - suite.addTestSuite(org.jhotdraw.test.util.GeomTest.class); - suite.addTestSuite(org.jhotdraw.test.util.FloatingTextFieldTest.class); - suite.addTestSuite(org.jhotdraw.test.util.FillerTest.class); - suite.addTestSuite(org.jhotdraw.test.util.CommandMenuTest.class); - suite.addTestSuite(org.jhotdraw.test.util.CommandChoiceTest.class); - suite.addTestSuite(org.jhotdraw.test.util.CommandButtonTest.class); - suite.addTestSuite(org.jhotdraw.test.util.StorableInputTest.class); - suite.addTestSuite(org.jhotdraw.test.util.StorableOutputTest.class); - suite.addTestSuite(org.jhotdraw.test.util.UndoManagerTest.class); - suite.addTestSuite(org.jhotdraw.test.util.ColorMapTest.class); - suite.addTestSuite(org.jhotdraw.test.util.ClipboardTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/VersionManagementTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/VersionManagementTest.java deleted file mode 100644 index a64ed6137..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/VersionManagementTest.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util; - -// JUnitDoclet begin import -import org.jhotdraw.util.VersionManagement; -import junit.framework.TestCase; -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase VersionManagementTest is generated by - * JUnitDoclet to hold the tests for VersionManagement. - * @see org.jhotdraw.util.VersionManagement - */ -// JUnitDoclet end javadoc_class -public class VersionManagementTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private VersionManagement versionmanagement; - // JUnitDoclet end class - - /** - * Constructor VersionManagementTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public VersionManagementTest(String name) { - // JUnitDoclet begin method VersionManagementTest - super(name); - // JUnitDoclet end method VersionManagementTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public VersionManagement createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new VersionManagement(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - versionmanagement = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - versionmanagement = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method getJHotDrawVersion() - /** - * Method testGetJHotDrawVersion is testing getJHotDrawVersion - * @see org.jhotdraw.util.VersionManagement#getJHotDrawVersion() - */ - // JUnitDoclet end javadoc_method getJHotDrawVersion() - public void testGetJHotDrawVersion() throws Exception { - // JUnitDoclet begin method getJHotDrawVersion - // JUnitDoclet end method getJHotDrawVersion - } - - // JUnitDoclet begin javadoc_method getPackageVersion() - /** - * Method testGetPackageVersion is testing getPackageVersion - * @see org.jhotdraw.util.VersionManagement#getPackageVersion(java.lang.Package) - */ - // JUnitDoclet end javadoc_method getPackageVersion() - public void testGetPackageVersion() throws Exception { - // JUnitDoclet begin method getPackageVersion - // JUnitDoclet end method getPackageVersion - } - - // JUnitDoclet begin javadoc_method isCompatibleVersion() - /** - * Method testIsCompatibleVersion is testing isCompatibleVersion - * @see org.jhotdraw.util.VersionManagement#isCompatibleVersion(java.lang.String) - */ - // JUnitDoclet end javadoc_method isCompatibleVersion() - public void testIsCompatibleVersion() throws Exception { - // JUnitDoclet begin method isCompatibleVersion - // JUnitDoclet end method isCompatibleVersion - } - - // JUnitDoclet begin javadoc_method readVersionFromFile() - /** - * Method testReadVersionFromFile is testing readVersionFromFile - * @see org.jhotdraw.util.VersionManagement#readVersionFromFile(java.lang.String, java.lang.String) - */ - // JUnitDoclet end javadoc_method readVersionFromFile() - public void testReadVersionFromFile() throws Exception { - // JUnitDoclet begin method readVersionFromFile - // JUnitDoclet end method readVersionFromFile - } - - // JUnitDoclet begin javadoc_method normalizePackageName() - /** - * Method testNormalizePackageName is testing normalizePackageName - * @see org.jhotdraw.util.VersionManagement#normalizePackageName(java.lang.String) - */ - // JUnitDoclet end javadoc_method normalizePackageName() - public void testNormalizePackageName() throws Exception { - // JUnitDoclet begin method normalizePackageName - // JUnitDoclet end method normalizePackageName - } - - // JUnitDoclet begin javadoc_method extractVersionInfo() - /** - * Method testExtractVersionInfo is testing extractVersionInfo - * @see org.jhotdraw.util.VersionManagement#extractVersionInfo(java.lang.String) - */ - // JUnitDoclet end javadoc_method extractVersionInfo() - public void testExtractVersionInfo() throws Exception { - // JUnitDoclet begin method extractVersionInfo - // JUnitDoclet end method extractVersionInfo - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/AllTests.java deleted file mode 100644 index 2e6ad2fd0..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/AllTests.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util.collections.jdk11; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.util.collections.jdk11"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(CollectionsFactoryJDK11Test.class)); - suite.addTest(new TestSuite(IteratorWrapperTest.class)); - suite.addTest(new TestSuite(ListWrapperTest.class)); - suite.addTest(new TestSuite(MapWrapperTest.class)); - suite.addTest(new TestSuite(SetWrapperTest.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/CollectionsFactoryJDK11Test.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/CollectionsFactoryJDK11Test.java deleted file mode 100644 index 2ac7507a5..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/CollectionsFactoryJDK11Test.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util.collections.jdk11; - -import org.jhotdraw.util.collections.jdk11.CollectionsFactoryJDK11; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CollectionsFactoryJDK11Test is generated by - * JUnitDoclet to hold the tests for CollectionsFactoryJDK11. - * @see org.jhotdraw.util.collections.jdk11.CollectionsFactoryJDK11 - */ -// JUnitDoclet end javadoc_class -public class CollectionsFactoryJDK11Test -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CollectionsFactoryJDK11 collectionsfactoryjdk11; - // JUnitDoclet end class - - /** - * Constructor CollectionsFactoryJDK11Test is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CollectionsFactoryJDK11Test(String name) { - // JUnitDoclet begin method CollectionsFactoryJDK11Test - super(name); - // JUnitDoclet end method CollectionsFactoryJDK11Test - } - - /** - * Factory method for instances of the class to be tested. - */ - public CollectionsFactoryJDK11 createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CollectionsFactoryJDK11(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - collectionsfactoryjdk11 = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - collectionsfactoryjdk11 = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createList() - /** - * Method testCreateList is testing createList - * @see org.jhotdraw.util.collections.jdk11.CollectionsFactoryJDK11#createList() - */ - // JUnitDoclet end javadoc_method createList() - public void testCreateList() throws Exception { - // JUnitDoclet begin method createList - // JUnitDoclet end method createList - } - - // JUnitDoclet begin javadoc_method createMap() - /** - * Method testCreateMap is testing createMap - * @see org.jhotdraw.util.collections.jdk11.CollectionsFactoryJDK11#createMap() - */ - // JUnitDoclet end javadoc_method createMap() - public void testCreateMap() throws Exception { - // JUnitDoclet begin method createMap - // JUnitDoclet end method createMap - } - - // JUnitDoclet begin javadoc_method createSet() - /** - * Method testCreateSet is testing createSet - * @see org.jhotdraw.util.collections.jdk11.CollectionsFactoryJDK11#createSet() - */ - // JUnitDoclet end javadoc_method createSet() - public void testCreateSet() throws Exception { - // JUnitDoclet begin method createSet - // JUnitDoclet end method createSet - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/IteratorWrapperTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/IteratorWrapperTest.java deleted file mode 100644 index 86a5925a8..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/IteratorWrapperTest.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util.collections.jdk11; - -import junit.framework.TestCase; -// JUnitDoclet begin import -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.figures.PolyLineFigure; -import org.jhotdraw.util.collections.jdk11.IteratorWrapper; - -import java.util.Vector; -import java.awt.*; -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestCase IteratorWrapperTest is generated by -* JUnitDoclet to hold the tests for IteratorWrapper. -* @see org.jhotdraw.util.collections.jdk11.IteratorWrapper -*/ -// JUnitDoclet end javadoc_class -public class IteratorWrapperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private IteratorWrapper iteratorwrapper; - // JUnitDoclet end class - - /** - * Constructor IteratorWrapperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public IteratorWrapperTest(String name) { - // JUnitDoclet begin method IteratorWrapperTest - super(name); - // JUnitDoclet end method IteratorWrapperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public IteratorWrapper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - Vector v = new Vector(); - v.add(new RectangleFigure(new Point(10, 10), new Point(100, 100))); - v.add(new PolyLineFigure(20, 20)); - v.add(new RectangleFigure(new Point(100, 10), new Point(150, 100))); - return new IteratorWrapper(v.elements()); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - iteratorwrapper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - iteratorwrapper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method hasNext() - /** - * Method testHasNext is testing hasNext - * @see org.jhotdraw.util.collections.jdk11.IteratorWrapper#hasNext() - */ - // JUnitDoclet end javadoc_method hasNext() - public void testHasNext() throws Exception { - // JUnitDoclet begin method hasNext - // JUnitDoclet end method hasNext - } - - // JUnitDoclet begin javadoc_method next() - /** - * Method testNext is testing next - * @see org.jhotdraw.util.collections.jdk11.IteratorWrapper#next() - */ - // JUnitDoclet end javadoc_method next() - public void testNext() throws Exception { - // JUnitDoclet begin method next - // JUnitDoclet end method next - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.util.collections.jdk11.IteratorWrapper#remove() - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/Jdk11Suite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/Jdk11Suite.java deleted file mode 100644 index 4e5de4aeb..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/Jdk11Suite.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util.collections.jdk11; - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - -// JUnitDoclet begin javadoc_class -/** -* TestSuite Jdk11Suite -*/ -// JUnitDoclet end javadoc_class -public class Jdk11Suite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.util.collections.jdk11"); - - suite.addTestSuite(org.jhotdraw.test.util.collections.jdk11.SetWrapperTest.class); - suite.addTestSuite(org.jhotdraw.test.util.collections.jdk11.CollectionsFactoryJDK11Test.class); - suite.addTestSuite(org.jhotdraw.test.util.collections.jdk11.MapWrapperTest.class); - suite.addTestSuite(org.jhotdraw.test.util.collections.jdk11.ListWrapperTest.class); - suite.addTestSuite(org.jhotdraw.test.util.collections.jdk11.IteratorWrapperTest.class); - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/ListWrapperTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/ListWrapperTest.java deleted file mode 100644 index ec1456bef..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/ListWrapperTest.java +++ /dev/null @@ -1,298 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util.collections.jdk11; - -import org.jhotdraw.util.collections.jdk11.ListWrapper; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase ListWrapperTest is generated by - * JUnitDoclet to hold the tests for ListWrapper. - * @see org.jhotdraw.util.collections.jdk11.ListWrapper - */ -// JUnitDoclet end javadoc_class -public class ListWrapperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private ListWrapper listwrapper; - // JUnitDoclet end class - - /** - * Constructor ListWrapperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public ListWrapperTest(String name) { - // JUnitDoclet begin method ListWrapperTest - super(name); - // JUnitDoclet end method ListWrapperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public ListWrapper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new ListWrapper(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - listwrapper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - listwrapper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method size() - /** - * Method testSize is testing size - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#size() - */ - // JUnitDoclet end javadoc_method size() - public void testSize() throws Exception { - // JUnitDoclet begin method size - // JUnitDoclet end method size - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method contains() - /** - * Method testContains is testing contains - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#contains(java.lang.Object) - */ - // JUnitDoclet end javadoc_method contains() - public void testContains() throws Exception { - // JUnitDoclet begin method contains - // JUnitDoclet end method contains - } - - // JUnitDoclet begin javadoc_method iterator() - /** - * Method testIterator is testing iterator - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#iterator() - */ - // JUnitDoclet end javadoc_method iterator() - public void testIterator() throws Exception { - // JUnitDoclet begin method iterator - // JUnitDoclet end method iterator - } - - // JUnitDoclet begin javadoc_method toArray() - /** - * Method testToArray is testing toArray - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#toArray() - */ - // JUnitDoclet end javadoc_method toArray() - public void testToArray() throws Exception { - // JUnitDoclet begin method toArray - // JUnitDoclet end method toArray - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#add(java.lang.Object) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#remove(java.lang.Object) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method containsAll() - /** - * Method testContainsAll is testing containsAll - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#containsAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method containsAll() - public void testContainsAll() throws Exception { - // JUnitDoclet begin method containsAll - // JUnitDoclet end method containsAll - } - - // JUnitDoclet begin javadoc_method addAll() - /** - * Method testAddAll is testing addAll - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#addAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addAll() - public void testAddAll() throws Exception { - // JUnitDoclet begin method addAll - // JUnitDoclet end method addAll - } - - // JUnitDoclet begin javadoc_method removeAll() - /** - * Method testRemoveAll is testing removeAll - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#removeAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method removeAll() - public void testRemoveAll() throws Exception { - // JUnitDoclet begin method removeAll - // JUnitDoclet end method removeAll - } - - // JUnitDoclet begin javadoc_method retainAll() - /** - * Method testRetainAll is testing retainAll - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#retainAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method retainAll() - public void testRetainAll() throws Exception { - // JUnitDoclet begin method retainAll - // JUnitDoclet end method retainAll - } - - // JUnitDoclet begin javadoc_method clear() - /** - * Method testClear is testing clear - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#clear() - */ - // JUnitDoclet end javadoc_method clear() - public void testClear() throws Exception { - // JUnitDoclet begin method clear - // JUnitDoclet end method clear - } - - // JUnitDoclet begin javadoc_method get() - /** - * Method testGet is testing get - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#get(int) - */ - // JUnitDoclet end javadoc_method get() - public void testGet() throws Exception { - // JUnitDoclet begin method get - // JUnitDoclet end method get - } - - // JUnitDoclet begin javadoc_method set() - /** - * Method testSet is testing set - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#set(int, java.lang.Object) - */ - // JUnitDoclet end javadoc_method set() - public void testSet() throws Exception { - // JUnitDoclet begin method set - // JUnitDoclet end method set - } - - // JUnitDoclet begin javadoc_method indexOf() - /** - * Method testIndexOf is testing indexOf - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#indexOf(java.lang.Object) - */ - // JUnitDoclet end javadoc_method indexOf() - public void testIndexOf() throws Exception { - // JUnitDoclet begin method indexOf - // JUnitDoclet end method indexOf - } - - // JUnitDoclet begin javadoc_method lastIndexOf() - /** - * Method testLastIndexOf is testing lastIndexOf - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#lastIndexOf(java.lang.Object) - */ - // JUnitDoclet end javadoc_method lastIndexOf() - public void testLastIndexOf() throws Exception { - // JUnitDoclet begin method lastIndexOf - // JUnitDoclet end method lastIndexOf - } - - // JUnitDoclet begin javadoc_method listIterator() - /** - * Method testListIterator is testing listIterator - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#listIterator() - */ - // JUnitDoclet end javadoc_method listIterator() - public void testListIterator() throws Exception { - // JUnitDoclet begin method listIterator - // JUnitDoclet end method listIterator - } - - // JUnitDoclet begin javadoc_method subList() - /** - * Method testSubList is testing subList - * @see org.jhotdraw.util.collections.jdk11.ListWrapper#subList(int, int) - */ - // JUnitDoclet end javadoc_method subList() - public void testSubList() throws Exception { - // JUnitDoclet begin method subList - // JUnitDoclet end method subList - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/MapWrapperTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/MapWrapperTest.java deleted file mode 100644 index 369c288e3..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/MapWrapperTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util.collections.jdk11; - -import org.jhotdraw.util.collections.jdk11.MapWrapper; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase MapWrapperTest is generated by - * JUnitDoclet to hold the tests for MapWrapper. - * @see org.jhotdraw.util.collections.jdk11.MapWrapper - */ -// JUnitDoclet end javadoc_class -public class MapWrapperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private MapWrapper mapwrapper; - // JUnitDoclet end class - - /** - * Constructor MapWrapperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public MapWrapperTest(String name) { - // JUnitDoclet begin method MapWrapperTest - super(name); - // JUnitDoclet end method MapWrapperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public MapWrapper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new MapWrapper(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - mapwrapper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - mapwrapper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method size() - /** - * Method testSize is testing size - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#size() - */ - // JUnitDoclet end javadoc_method size() - public void testSize() throws Exception { - // JUnitDoclet begin method size - // JUnitDoclet end method size - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method containsKey() - /** - * Method testContainsKey is testing containsKey - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#containsKey(java.lang.Object) - */ - // JUnitDoclet end javadoc_method containsKey() - public void testContainsKey() throws Exception { - // JUnitDoclet begin method containsKey - // JUnitDoclet end method containsKey - } - - // JUnitDoclet begin javadoc_method containsValue() - /** - * Method testContainsValue is testing containsValue - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#containsValue(java.lang.Object) - */ - // JUnitDoclet end javadoc_method containsValue() - public void testContainsValue() throws Exception { - // JUnitDoclet begin method containsValue - // JUnitDoclet end method containsValue - } - - // JUnitDoclet begin javadoc_method get() - /** - * Method testGet is testing get - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#get(java.lang.Object) - */ - // JUnitDoclet end javadoc_method get() - public void testGet() throws Exception { - // JUnitDoclet begin method get - // JUnitDoclet end method get - } - - // JUnitDoclet begin javadoc_method put() - /** - * Method testPut is testing put - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#put(java.lang.Object, java.lang.Object) - */ - // JUnitDoclet end javadoc_method put() - public void testPut() throws Exception { - // JUnitDoclet begin method put - // JUnitDoclet end method put - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#remove(java.lang.Object) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method putAll() - /** - * Method testPutAll is testing putAll - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#putAll(java.util.Map) - */ - // JUnitDoclet end javadoc_method putAll() - public void testPutAll() throws Exception { - // JUnitDoclet begin method putAll - // JUnitDoclet end method putAll - } - - // JUnitDoclet begin javadoc_method clear() - /** - * Method testClear is testing clear - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#clear() - */ - // JUnitDoclet end javadoc_method clear() - public void testClear() throws Exception { - // JUnitDoclet begin method clear - // JUnitDoclet end method clear - } - - // JUnitDoclet begin javadoc_method keySet() - /** - * Method testKeySet is testing keySet - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#keySet() - */ - // JUnitDoclet end javadoc_method keySet() - public void testKeySet() throws Exception { - // JUnitDoclet begin method keySet - // JUnitDoclet end method keySet - } - - // JUnitDoclet begin javadoc_method values() - /** - * Method testValues is testing values - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#values() - */ - // JUnitDoclet end javadoc_method values() - public void testValues() throws Exception { - // JUnitDoclet begin method values - // JUnitDoclet end method values - } - - // JUnitDoclet begin javadoc_method entrySet() - /** - * Method testEntrySet is testing entrySet - * @see org.jhotdraw.util.collections.jdk11.MapWrapper#entrySet() - */ - // JUnitDoclet end javadoc_method entrySet() - public void testEntrySet() throws Exception { - // JUnitDoclet begin method entrySet - // JUnitDoclet end method entrySet - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/SetWrapperTest.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/SetWrapperTest.java deleted file mode 100644 index ba21f4606..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk11/SetWrapperTest.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util.collections.jdk11; - -import org.jhotdraw.util.collections.jdk11.SetWrapper; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase SetWrapperTest is generated by - * JUnitDoclet to hold the tests for SetWrapper. - * @see org.jhotdraw.util.collections.jdk11.SetWrapper - */ -// JUnitDoclet end javadoc_class -public class SetWrapperTest -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private SetWrapper setwrapper; - // JUnitDoclet end class - - /** - * Constructor SetWrapperTest is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public SetWrapperTest(String name) { - // JUnitDoclet begin method SetWrapperTest - super(name); - // JUnitDoclet end method SetWrapperTest - } - - /** - * Factory method for instances of the class to be tested. - */ - public SetWrapper createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new SetWrapper(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - setwrapper = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - setwrapper = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method size() - /** - * Method testSize is testing size - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#size() - */ - // JUnitDoclet end javadoc_method size() - public void testSize() throws Exception { - // JUnitDoclet begin method size - // JUnitDoclet end method size - } - - // JUnitDoclet begin javadoc_method isEmpty() - /** - * Method testIsEmpty is testing isEmpty - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#isEmpty() - */ - // JUnitDoclet end javadoc_method isEmpty() - public void testIsEmpty() throws Exception { - // JUnitDoclet begin method isEmpty - // JUnitDoclet end method isEmpty - } - - // JUnitDoclet begin javadoc_method contains() - /** - * Method testContains is testing contains - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#contains(java.lang.Object) - */ - // JUnitDoclet end javadoc_method contains() - public void testContains() throws Exception { - // JUnitDoclet begin method contains - // JUnitDoclet end method contains - } - - // JUnitDoclet begin javadoc_method iterator() - /** - * Method testIterator is testing iterator - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#iterator() - */ - // JUnitDoclet end javadoc_method iterator() - public void testIterator() throws Exception { - // JUnitDoclet begin method iterator - // JUnitDoclet end method iterator - } - - // JUnitDoclet begin javadoc_method toArray() - /** - * Method testToArray is testing toArray - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#toArray() - */ - // JUnitDoclet end javadoc_method toArray() - public void testToArray() throws Exception { - // JUnitDoclet begin method toArray - // JUnitDoclet end method toArray - } - - // JUnitDoclet begin javadoc_method add() - /** - * Method testAdd is testing add - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#add(java.lang.Object) - */ - // JUnitDoclet end javadoc_method add() - public void testAdd() throws Exception { - // JUnitDoclet begin method add - // JUnitDoclet end method add - } - - // JUnitDoclet begin javadoc_method remove() - /** - * Method testRemove is testing remove - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#remove(java.lang.Object) - */ - // JUnitDoclet end javadoc_method remove() - public void testRemove() throws Exception { - // JUnitDoclet begin method remove - // JUnitDoclet end method remove - } - - // JUnitDoclet begin javadoc_method containsAll() - /** - * Method testContainsAll is testing containsAll - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#containsAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method containsAll() - public void testContainsAll() throws Exception { - // JUnitDoclet begin method containsAll - // JUnitDoclet end method containsAll - } - - // JUnitDoclet begin javadoc_method addAll() - /** - * Method testAddAll is testing addAll - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#addAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method addAll() - public void testAddAll() throws Exception { - // JUnitDoclet begin method addAll - // JUnitDoclet end method addAll - } - - // JUnitDoclet begin javadoc_method retainAll() - /** - * Method testRetainAll is testing retainAll - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#retainAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method retainAll() - public void testRetainAll() throws Exception { - // JUnitDoclet begin method retainAll - // JUnitDoclet end method retainAll - } - - // JUnitDoclet begin javadoc_method removeAll() - /** - * Method testRemoveAll is testing removeAll - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#removeAll(java.util.Collection) - */ - // JUnitDoclet end javadoc_method removeAll() - public void testRemoveAll() throws Exception { - // JUnitDoclet begin method removeAll - // JUnitDoclet end method removeAll - } - - // JUnitDoclet begin javadoc_method clear() - /** - * Method testClear is testing clear - * @see org.jhotdraw.util.collections.jdk11.SetWrapper#clear() - */ - // JUnitDoclet end javadoc_method clear() - public void testClear() throws Exception { - // JUnitDoclet begin method clear - // JUnitDoclet end method clear - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/AllTests.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/AllTests.java deleted file mode 100644 index 183b6f169..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/AllTests.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util.collections.jdk12; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * @author <a href="mailto:mtnygard@charter.net">Michael T. Nygard</a> - * @version $Revision: 231 $ - */ -public class AllTests { - - public static void main(String[] args) { - junit.textui.TestRunner.run(AllTests.class); - } - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.jhotdraw.test.util.collections.jdk12"); - //$JUnit-BEGIN$ - suite.addTest(new TestSuite(CollectionsFactoryJDK12Test.class)); - //$JUnit-END$ - return suite; - } -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/CollectionsFactoryJDK12Test.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/CollectionsFactoryJDK12Test.java deleted file mode 100644 index 8d499cb11..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/CollectionsFactoryJDK12Test.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * @(#)Test.java - * - * Project: JHotdraw - a GUI framework for technical drawings - * http://www.jhotdraw.org - * http://jhotdraw.sourceforge.net - * Copyright: � by the original author(s) and all contributors - * License: Lesser GNU Public License (LGPL) - * http://www.opensource.org/licenses/lgpl-license.html - */ -package org.jhotdraw.test.util.collections.jdk12; - -import org.jhotdraw.util.collections.jdk12.CollectionsFactoryJDK12; -import junit.framework.TestCase; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* - * Generated by JUnitDoclet, a tool provided by - * ObjectFab GmbH under LGPL. - * Please see www.junitdoclet.org, www.gnu.org - * and www.objectfab.de for informations about - * the tool, the licence and the authors. - */ - -// JUnitDoclet begin javadoc_class -/** - * TestCase CollectionsFactoryJDK12Test is generated by - * JUnitDoclet to hold the tests for CollectionsFactoryJDK12. - * @see org.jhotdraw.util.collections.jdk12.CollectionsFactoryJDK12 - */ -// JUnitDoclet end javadoc_class -public class CollectionsFactoryJDK12Test -// JUnitDoclet begin extends_implements -extends TestCase -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // instance variables, helper methods, ... put them in this marker - private CollectionsFactoryJDK12 collectionsfactoryjdk12; - // JUnitDoclet end class - - /** - * Constructor CollectionsFactoryJDK12Test is - * basically calling the inherited constructor to - * initiate the TestCase for use by the Framework. - */ - public CollectionsFactoryJDK12Test(String name) { - // JUnitDoclet begin method CollectionsFactoryJDK12Test - super(name); - // JUnitDoclet end method CollectionsFactoryJDK12Test - } - - /** - * Factory method for instances of the class to be tested. - */ - public CollectionsFactoryJDK12 createInstance() throws Exception { - // JUnitDoclet begin method testcase.createInstance - return new CollectionsFactoryJDK12(); - // JUnitDoclet end method testcase.createInstance - } - - /** - * Method setUp is overwriting the framework method to - * prepare an instance of this TestCase for a single test. - * It's called from the JUnit framework only. - */ - protected void setUp() throws Exception { - // JUnitDoclet begin method testcase.setUp - super.setUp(); - collectionsfactoryjdk12 = createInstance(); - // JUnitDoclet end method testcase.setUp - } - - /** - * Method tearDown is overwriting the framework method to - * clean up after each single test of this TestCase. - * It's called from the JUnit framework only. - */ - protected void tearDown() throws Exception { - // JUnitDoclet begin method testcase.tearDown - collectionsfactoryjdk12 = null; - super.tearDown(); - // JUnitDoclet end method testcase.tearDown - } - - // JUnitDoclet begin javadoc_method createList() - /** - * Method testCreateList is testing createList - * @see org.jhotdraw.util.collections.jdk12.CollectionsFactoryJDK12#createList() - */ - // JUnitDoclet end javadoc_method createList() - public void testCreateList() throws Exception { - // JUnitDoclet begin method createList - // JUnitDoclet end method createList - } - - // JUnitDoclet begin javadoc_method createMap() - /** - * Method testCreateMap is testing createMap - * @see org.jhotdraw.util.collections.jdk12.CollectionsFactoryJDK12#createMap() - */ - // JUnitDoclet end javadoc_method createMap() - public void testCreateMap() throws Exception { - // JUnitDoclet begin method createMap - // JUnitDoclet end method createMap - } - - // JUnitDoclet begin javadoc_method createSet() - /** - * Method testCreateSet is testing createSet - * @see org.jhotdraw.util.collections.jdk12.CollectionsFactoryJDK12#createSet() - */ - // JUnitDoclet end javadoc_method createSet() - public void testCreateSet() throws Exception { - // JUnitDoclet begin method createSet - // JUnitDoclet end method createSet - } - - // JUnitDoclet begin javadoc_method testVault - /** - * JUnitDoclet moves marker to this method, if there is not match - * for them in the regenerated code and if the marker is not empty. - * This way, no test gets lost when regenerating after renaming. - * <b>Method testVault is supposed to be empty.</b> - */ - // JUnitDoclet end javadoc_method testVault - public void testVault() throws Exception { - // JUnitDoclet begin method testcase.testVault - // JUnitDoclet end method testcase.testVault - } - -} diff --git a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/Jdk12Suite.java b/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/Jdk12Suite.java deleted file mode 100644 index 3e6026ff1..000000000 --- a/jhotdraw6/src/test/java/org/jhotdraw/test/util/collections/jdk12/Jdk12Suite.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.jhotdraw.test.util.collections.jdk12; - - - -import junit.framework.TestSuite; -// JUnitDoclet begin import -// JUnitDoclet end import - -/* -* Generated by JUnitDoclet, a tool provided by -* ObjectFab GmbH under LGPL. -* Please see www.junitdoclet.org, www.gnu.org -* and www.objectfab.de for informations about -* the tool, the licence and the authors. -*/ - - -// JUnitDoclet begin javadoc_class -/** -* TestSuite Jdk12Suite -*/ -// JUnitDoclet end javadoc_class -public class Jdk12Suite -// JUnitDoclet begin extends_implements -// JUnitDoclet end extends_implements -{ - // JUnitDoclet begin class - // JUnitDoclet end class - - public static TestSuite suite() { - - TestSuite suite; - - suite = new TestSuite("org.jhotdraw.test.util.collections.jdk12"); - - suite.addTestSuite(org.jhotdraw.test.util.collections.jdk12.CollectionsFactoryJDK12Test.class); - - - - // JUnitDoclet begin method suite() - // JUnitDoclet end method suite() - - return suite; - } - - /** - * Method to execute the TestSuite from command line - * using JUnit's textui.TestRunner . - */ - public static void main(String[] args) { - // JUnitDoclet begin method testsuite.main - junit.textui.TestRunner.run(suite()); - // JUnitDoclet end method testsuite.main - } -} diff --git a/jhotdraw7/manifest.mf b/jhotdraw7/manifest.mf deleted file mode 100644 index 328e8e5bc..000000000 --- a/jhotdraw7/manifest.mf +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -X-COMMENT: Main-Class will be added automatically by build - diff --git a/jhotdraw7/pom.xml b/jhotdraw7/pom.xml deleted file mode 100644 index efb2c93c4..000000000 --- a/jhotdraw7/pom.xml +++ /dev/null @@ -1,104 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><project> - <modelVersion>4.0.0</modelVersion> - <groupId>org.jhotdraw</groupId> - <artifactId>jhotdraw</artifactId> - <version>6.2.0</version> - <description></description> - <scm> - <connection>scm:https://svn.sourceforge.net/svnroot/jhotdraw/trunk</connection> - <developerConnection>scm:https://svn.sourceforge.net/svnroot/jhotdraw/trunk</developerConnection> - </scm> - <build> - <sourceDirectory>src/main/java</sourceDirectory> - <testSourceDirectory>src/test/java</testSourceDirectory> - <resources> - <resource> - <directory>src/main/resources</directory> - </resource> - </resources> - <testResources> - <testResource> - <directory>src/test/resources</directory> - </testResource> - </testResources> - <pluginManagement> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <configuration> - <skip>true</skip> - </configuration> - </plugin> - </plugins> - </pluginManagement> - </build> - <dependencies> - <dependency> - <groupId>javax.jdo</groupId> - <artifactId>jdo</artifactId> - <version>1.0.1</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>batik</groupId> - <artifactId>batik-awt-util</artifactId> - <version>1.6</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>batik</groupId> - <artifactId>batik-dom</artifactId> - <version>1.6</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>batik</groupId> - <artifactId>batik-svggen</artifactId> - <version>1.6</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>batik</groupId> - <artifactId>batik-util</artifactId> - <version>1.6</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>3.8.2</version> - <scope>provided</scope> - </dependency> - </dependencies> - <reporting> - <plugins> - <plugin> - <artifactId>maven-surefire-report-plugin</artifactId> - </plugin> - <plugin> - <artifactId>maven-jxr-plugin</artifactId> - </plugin> - <plugin> - <artifactId>maven-javadoc-plugin</artifactId> - </plugin> - <plugin> - <artifactId>maven-pmd-plugin</artifactId> - </plugin> - <plugin> - <artifactId>maven-checkstyle-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>clirr-maven-plugin</artifactId> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>cobertura-maven-plugin</artifactId> - </plugin> - <plugin> - <artifactId>maven-clover-plugin</artifactId> - </plugin> - </plugins> - </reporting> -</project> \ No newline at end of file diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/PERT1.gif b/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/PERT1.gif deleted file mode 100644 index f69744556b8a98b0f903febf45498dd09fcde923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlK-K>bM;<_eP?(7Kk-E-C3Bvd5R>w&d8>Y$OF1(sB5u8|!Jh*P2E`k`vPmdj z>=3r9_m<Nuzj;!{KmE(A(`?(#buKO1(zZKp#m^aG;!Be>mi~FR?XC~!)lJLJeyY=G ZXw<aPYVYXm((dl<maLvADagQJ4FJ?UQ3?P6 diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/PERT2.gif b/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/PERT2.gif deleted file mode 100644 index eb9f10ef03f573d2d7c08a805dee7264cabd6ef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlK!E=bM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)MQbmW_0GOA^<6__frm_*&x-pD z!8T0Y0SiB~{Qg>VVwDQlT(#{ni^8R2qGnyox76{SeADf_ua9H;^AAh!RIPneY#h>H Qq}1GEQyb1M$iQF?0Mukk*8l(j diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/PERT3.gif b/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/PERT3.gif deleted file mode 100644 index aac7c5e3ad403e29fb246df6eb318f71ef45be0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBQuv|4bM;<_MQ3;aKhYw?pE>Qt%C5}SyZV2e+rXkwT6aqI*=!x51P2|dZUzy5 zqXRO=duM<0P*rO+U+{j>QO?y@vUP4V+wZ=-?CDAs<Fg)L#Pf3dPkEfOeARpLbws&Y av}lo)rFXlrW0ygv$pp!k$&!K$4AubpX-<Lw diff --git a/jmodeller/.classpath b/jmodeller/.classpath deleted file mode 100644 index 2157b343f..000000000 --- a/jmodeller/.classpath +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry sourcepath="/JHOTDRAW6_HOME/src" kind="var" path="JHOTDRAW6_HOME/jhotdraw.jar"/> - <classpathentry kind="src" path="/JHotDraw6-Sourceforge"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/jmodeller/DifferenceReporter.java b/jmodeller/DifferenceReporter.java deleted file mode 100644 index 853f6f4ad..000000000 --- a/jmodeller/DifferenceReporter.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.jhotdraw.tools.libchecker; - -public interface DifferenceReporter extends DifferenceCollector { - public void startLibrary(); - public void endLibrary(); - public void startPackage(); - public void endPackage(); - public void startClass(); - public void endClass(); -} \ No newline at end of file diff --git a/jmodeller/compile.bat b/jmodeller/compile.bat deleted file mode 100644 index 31e6f6942..000000000 --- a/jmodeller/compile.bat +++ /dev/null @@ -1 +0,0 @@ -javac -d classes -classpath c:\source\java\JHotDraw;. src\*.java \ No newline at end of file diff --git a/jmodeller/compile_g.bat b/jmodeller/compile_g.bat deleted file mode 100644 index 80be73946..000000000 --- a/jmodeller/compile_g.bat +++ /dev/null @@ -1 +0,0 @@ -javac -g -d classes -classpath c:\source\java\JHotDraw;. src\*.java \ No newline at end of file diff --git a/jmodeller/run.bat b/jmodeller/run.bat deleted file mode 100644 index 013359b47..000000000 --- a/jmodeller/run.bat +++ /dev/null @@ -1 +0,0 @@ -java -classpath c:\source\java\JHotDraw;.\classes JModellerApplication \ No newline at end of file diff --git a/jmodeller/src/AggregationDecoration.java b/jmodeller/src/AggregationDecoration.java deleted file mode 100644 index 2575fe196..000000000 --- a/jmodeller/src/AggregationDecoration.java +++ /dev/null @@ -1,138 +0,0 @@ -/** - * JModeller - * - * @version 1.0 15.01.2001 - * @author Wolfram Kaiser (�2001) - */ - -import java.awt.Color; -import java.awt.Polygon; -import java.io.IOException; - -import org.jhotdraw.figures.AbstractLineDecoration; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * An AggregationDecoration draws a diamond at the starting ClassFigure - * of a AssociationLineConnection to indicate that the starting ClassFigure - * is an aggregration of the end ClassFigure - */ -public class AggregationDecoration extends AbstractLineDecoration { - - /** - * Size of the diamond (measured as a diagonal line) - */ - private int mySize; - - static final long serialVersionUID = 5949131894547260707L; - - /** - * Create a new instance of AggregationDecoration with a default - * diamond size of 20 - */ - public AggregationDecoration() { - this(20); - } - - /** - * Create a new instance of AggregationDecoration with a given - * diamond size - * - * @param newSize size of the diamond - */ - public AggregationDecoration(int newSize) { - setSize(newSize); - setFillColor(Color.white); - setBorderColor(Color.black); - } - - /** - * Calculates the outline of an arrow tip. - */ - public Polygon outline(int x1, int y1, int x2, int y2) { - Polygon shape = new Polygon(); - - // calculate direction vector - double xDir = (double)(x2 - x1); - double yDir = (double)(y2 - y1); - - // calculate direction vector length - double vLength = Math.sqrt(xDir*xDir + yDir*yDir); - if (vLength == 0.0) { - return shape; - } - - if (xDir == 0.0) { - xDir = 1.0; - } - - // normalize direction vector - xDir = xDir / vLength; - yDir = yDir / vLength; - - double endX = x1 + xDir * getSize(); - double endY = y1 + yDir * getSize(); - - // calculate vector length - double h = Math.sqrt(getSize()); - - // calculate orthogonal vector - double v1y = 1.0; - double v1x = -(yDir * v1y) / xDir; - // calculate orthogonal vector length - double v1Length = Math.sqrt(v1x*v1x + v1y*v1y); - // normalize orthogonal vector - v1y = v1y / v1Length; - v1x = v1x / v1Length; - double p1y = (endY + y1)/2 + v1y * h; - double p1x = (endX + x1)/2 + v1x * h; - double p2y = (endY + y1)/2 - v1y * h; - double p2x = (endX + x1)/2 - v1x * h; - - shape.addPoint(x1, y1); - - shape.addPoint((int)p1x, (int)p1y); - shape.addPoint((int)endX, (int)endY); - shape.addPoint((int)p2x, (int)p2y); - - shape.addPoint(x1, y1); - - return shape; - - } - - /** - * Stores the arrow tip to a StorableOutput. - */ - public void write(StorableOutput dw) { - super.write(dw); - dw.writeInt(getSize()); - } - - /** - * Reads the arrow tip from a StorableInput. - */ - public void read(StorableInput dr) throws IOException { - super.read(dr); - setSize(dr.readInt()); - } - - /** - * Set the size of the diamond. The size is measured as diagonal line. - * - * @param newSize size of the diamond - */ - public void setSize(int newSize) { - mySize = newSize; - } - - /** - * Return the size of the diamond. The size is measured as diagonal line. - * - * @return diamond size - */ - public int getSize() { - return mySize; - } -} \ No newline at end of file diff --git a/jmodeller/src/AssociationLineConnection.java b/jmodeller/src/AssociationLineConnection.java deleted file mode 100644 index 415ce7ccf..000000000 --- a/jmodeller/src/AssociationLineConnection.java +++ /dev/null @@ -1,229 +0,0 @@ -/** - * JModeller - * - * @version 1.0 15.01.2001 - * @author Wolfram Kaiser (�2001) - */ - -import java.awt.Color; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.io.ObjectInputStream; - -import javax.swing.AbstractAction; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; - -import org.jhotdraw.figures.ArrowTip; -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.FigureAttributeConstant; -import org.jhotdraw.framework.FigureChangeEvent; - -/** - * An AssociationLineConnection represents an association relationship (has-a) - * between two classes (represented by their ClassFigures). An association - * can either be bi-directional or uni-directional. An association can - * be turned into an aggregation which can be regard a special kind of association. - */ -public class AssociationLineConnection extends LineConnection { - - /** - * PopupMenu for an associations which allows to switch between - * directed and not directed associations and associations and - * aggregations - */ - private transient JPopupMenu myPopupMenu; - - static final long serialVersionUID = 6492295462615980490L; - - /* - * Create a new un-directed AssociationLineConnection - */ - public AssociationLineConnection() { - super(); - - setStartDecoration(null); - setEndDecoration(null); - - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - } - - /** - * Hook method to plug in application behaviour into - * a template method. This method is called when a - * connection between two objects has been established. - */ - protected void handleConnect(Figure start, Figure end) { - super.handleConnect(start, end); - JModellerClass startClass = ((ClassFigure)start).getModellerClass(); - JModellerClass endClass = ((ClassFigure)end).getModellerClass(); - startClass.addAssociation(endClass); - endClass.addAssociation(startClass); - } - - /** - * Hook method to plug in application behaviour into - * a template method. This method is called when a - * connection between two objects has been cancelled. - */ - protected void handleDisconnect(Figure start, Figure end) { - super.handleDisconnect(start, end); - if ((start != null) && (end!= null)) { - JModellerClass startClass = ((ClassFigure)start).getModellerClass(); - JModellerClass endClass = ((ClassFigure)end).getModellerClass(); - startClass.removeAssociation(endClass); - endClass.removeAssociation(startClass); - } - } - - /** - * Sets the named attribute to the new value. - * Intercept to enable popup menus. - */ - public void setAttribute(FigureAttributeConstant constant, Object value) { - if ((constant != null) && (constant.equals(FigureAttributeConstant.POPUP_MENU))) { - myPopupMenu = (JPopupMenu)value; - } - else { - super.setAttribute(constant, value); - } - } - - /** - * Return the named attribute or null if a - * a figure doesn't have an attribute. - * All figures support the attribute names - * FillColor and FrameColor - */ - public Object getAttribute(FigureAttributeConstant constant) { - if ((constant != null) && (constant.equals(FigureAttributeConstant.POPUP_MENU))) { - return myPopupMenu; - } - else { - return super.getAttribute(constant); - } - } - - /** - * Factory method to create the associated popup menu. - * It allows switching between associations and aggregation - * and directed and not-directed associations depending - * on the current kind of association. For uni-directional - * associations the reference from the target class to - * the start class is removed, while for bi-directional - * associations, this relation is established again. - * - * @return newly created popup menu - */ - protected JPopupMenu createPopupMenu() { - JPopupMenu popupMenu = new JPopupMenu(); - popupMenu.add(new AbstractAction("aggregation") { - public void actionPerformed(ActionEvent event) { - setAggregation(!isAggregation()); - if (isAggregation()) { - ((JMenuItem)event.getSource()).setText("no aggregation"); - } - else { - ((JMenuItem)event.getSource()).setText("aggregation"); - } - } - }); - popupMenu.add(new AbstractAction("uni-directional") { - public void actionPerformed(ActionEvent event) { - setUniDirectional(!isUniDirectional()); - if (isUniDirectional()) { - ((JMenuItem)event.getSource()).setText("bi-directional"); - JModellerClass startClass = ((ClassFigure)startFigure()).getModellerClass(); - JModellerClass endClass = ((ClassFigure)endFigure()).getModellerClass(); - endClass.addAssociation(startClass); - } - else { - ((JMenuItem)event.getSource()).setText("uni-directional"); - JModellerClass startClass = ((ClassFigure)startFigure()).getModellerClass(); - JModellerClass endClass = ((ClassFigure)endFigure()).getModellerClass(); - endClass.removeAssociation(startClass); - } - } - }); - - popupMenu.setLightWeightPopupEnabled(true); - return popupMenu; - } - - /** - * Turn an association into an aggregation or vice versa. - * Whether an association is an aggregation is determined - * by an internal flag that can be set with this method. - * - * @param isAggregation true to turn an association into an aggregation, false for the opposite effect - */ - protected void setAggregation(boolean isAggregation) { - willChange(); - if (isAggregation) { - setStartDecoration(new AggregationDecoration()); - } - else { - setStartDecoration(null); - } - change(); - changed(); - } - - /** - * Test whether an association is an aggregation or not - * - * @return true if the association is an aggregation, false otherwise - */ - protected boolean isAggregation() { - return getStartDecoration() != null; - } - - /** - * Make an association directed or not directed. - * - * @param isDirected true for a directed association, false otherwise - */ - protected void setUniDirectional(boolean isDirected) { - willChange(); - if (isDirected) { - ArrowTip arrow = new ArrowTip(0.4, 12.0, 0.0); - arrow.setBorderColor(Color.black); - setEndDecoration(arrow); - } - else { - setEndDecoration(null); - } - change(); - changed(); - } - - /** - * Test whether an associations is directed or not - * - * @return true, if the association is directed, false otherwise - */ - protected boolean isUniDirectional() { - return getEndDecoration() != null; - } - - /** - * Notify listeners about a change - */ - protected void change() { - if (listener() != null) { - listener().figureRequestUpdate(new FigureChangeEvent(this)); - } - } - - /** - * Read a serialized AssociationLineConnection from an input stream and activate the - * popup menu again. - */ - private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException { - // call superclass' private readObject() indirectly - s.defaultReadObject(); - - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - } -} \ No newline at end of file diff --git a/jmodeller/src/ClassFigure.java b/jmodeller/src/ClassFigure.java deleted file mode 100644 index 8299b4e42..000000000 --- a/jmodeller/src/ClassFigure.java +++ /dev/null @@ -1,438 +0,0 @@ -/** - * JModeller - * - * @version 1.0 15.01.2001 - * @author Wolfram Kaiser (�2001) - */ - -import java.awt.Font; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.util.Iterator; -import java.util.List; - -import javax.swing.AbstractAction; -import javax.swing.JPopupMenu; - -import org.jhotdraw.contrib.GraphicalCompositeFigure; -import org.jhotdraw.figures.RectangleFigure; -import org.jhotdraw.figures.TextFigure; -import org.jhotdraw.framework.Figure; -import org.jhotdraw.framework.FigureAttributeConstant; -import org.jhotdraw.framework.FigureChangeEvent; -import org.jhotdraw.framework.HandleEnumeration; -import org.jhotdraw.standard.HandleEnumerator; -import org.jhotdraw.standard.NullHandle; -import org.jhotdraw.standard.RelativeLocator; -import org.jhotdraw.util.CollectionsFactory; -import org.jhotdraw.util.StorableInput; -import org.jhotdraw.util.StorableOutput; - -/** - * A ClassFigure is a graphical representation for a class - * in a class diagramm. A ClassFigure separates the graphical - * representation from the data model. A class has a class - * name, attributes and methods. Accordingly, a ClassFigure - * consists of other parts to edit the class names, attributes - * and methods respectively. - * - * @author Wolfram Kaiser - */ -public class ClassFigure extends GraphicalCompositeFigure { - - /** - * Class in the model which is represented by this figure graphically - */ - private JModellerClass myClass; - - /** - * Font used for attribute names - */ - private Font attributeFont; - - /** - * Font used for method names - */ - private Font methodFont; - - /** - * Direct reference to a composite figure which stores text figures for attribute names. - * This figure is also part of this composite container. - */ - private GraphicalCompositeFigure myAttributesFigure; - - /** - * Direct reference to a composite figure which stores text figures for method names. - * This figure is also part of this composite container. - */ - private GraphicalCompositeFigure myMethodsFigure; - - /** - * TextFigure for editing the class name - */ - private TextFigure myClassNameFigure; - - /** - * Default Font for classname. - */ - private final static Font CLASSNAME_FONT = new Font( "Helvetica", Font.BOLD, 12 ); - - /** - * Default Font for attribut and operations. - */ - private final static Font DEFAULT_FONT = new Font( "Helvetica", Font.PLAIN, 12 ); - - /** - * Some insets. - */ - private final static Insets INSETS0400 = new Insets( 0, 4, 0, 0 ); - - private final static Insets INSETS4440 = new Insets( 4, 4, 4, 0 ); - - - static final long serialVersionUID = 6098176631854387694L; - - /** - * Create a new instance of ClassFigure with a RectangleFigure as presentation figure - */ - public ClassFigure() { - this(new RectangleFigure()); - } - - /** - * Create a new instance of ClassFigure with a given presentation figure - * - * @param newPresentationFigure presentation figure - */ - public ClassFigure(Figure newPresentationFigure) { - super(newPresentationFigure); - } - - /** - * Hook method called to initizialize a ClassFigure. - * It is called from the constructors and the clone() method. - */ - protected void initialize() { - // start with an empty Composite - removeAll(); - - // set the fonts used to print attributes and methods - attributeFont = DEFAULT_FONT; - methodFont = DEFAULT_FONT; - - // create a new Model object associated with this View figure - setModellerClass(new JModellerClass()); - - // create a TextFigure responsible for the class name - setClassNameFigure(new TextFigure() { - public void setText(String newText) { - super.setText(newText); - getModellerClass().setName(newText); - update(); - } - }); - - getClassNameFigure().setFont(CLASSNAME_FONT); - getClassNameFigure().setText(getModellerClass().getName()); - - // add the TextFigure to the Composite - GraphicalCompositeFigure nameFigure = new GraphicalCompositeFigure(new SeparatorFigure()); - nameFigure.add(getClassNameFigure()); - nameFigure.getLayouter().setInsets(INSETS0400); - add(nameFigure); - - // create a figure responsible for maintaining attributes - setAttributesFigure(new GraphicalCompositeFigure(new SeparatorFigure())); - getAttributesFigure().getLayouter().setInsets(INSETS4440); - // add the figure to the Composite - add(getAttributesFigure()); - - // create a figure responsible for maintaining methods - setMethodsFigure(new GraphicalCompositeFigure(new SeparatorFigure())); - getMethodsFigure().getLayouter().setInsets(INSETS4440); - // add the figure to the Composite - add(getMethodsFigure()); - - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - - super.initialize(); - } - - /** - * Factory method to create a popup menu which allows to add attributes and methods. - * - * @return newly created popup menu - */ - protected JPopupMenu createPopupMenu() { - JPopupMenu popupMenu = new JPopupMenu(); - popupMenu.add(new AbstractAction("add attribute") { - public void actionPerformed(ActionEvent event) { - addAttribute("attribute"); - } - }); - popupMenu.add(new AbstractAction("add method") { - public void actionPerformed(ActionEvent event) { - addMethod("method()"); - } - }); - - popupMenu.setLightWeightPopupEnabled(true); - return popupMenu; - } - - /** - * Set the figure which containes all figures representing attribute names. - * - * @param newAttributesFigure container for other figures - */ - protected void setAttributesFigure(GraphicalCompositeFigure newAttributesFigure) { - myAttributesFigure = newAttributesFigure; - } - - /** - * Return the figure which containes all figures representing attribute names. - * - * @return container for other figures - */ - public GraphicalCompositeFigure getAttributesFigure() { - return myAttributesFigure; - } - - /** - * Set the figure which containes all figures representing methods names. - * - * @param newMethodsFigure container for other figures - */ - protected void setMethodsFigure(GraphicalCompositeFigure newMethodsFigure) { - myMethodsFigure = newMethodsFigure; - } - - /** - * Return the figure which containes all figures representing method names. - * - * @return container for other figures - */ - public GraphicalCompositeFigure getMethodsFigure() { - return myMethodsFigure; - } - - /** - * Set the class name text figure responsible for handling user input - * - * @param newClassNameFigure text figure for the class name - */ - protected void setClassNameFigure(TextFigure newClassNameFigure) { - myClassNameFigure = newClassNameFigure; - } - - /** - * Return the text figure for the class name - * - * @return text figure for the class name - */ - public TextFigure getClassNameFigure() { - return myClassNameFigure; - } - - /** - * Add a name for an attribute. The underlying class in the model is updated as well. - * to hold the attribute name. - * - * @param newAttribute name of the new attribute - */ - protected void addAttribute(String newAttribute) { - getModellerClass().addAttribute(newAttribute); - TextFigure classFigureAttribute = new TextFigure() { - public void setText(String newString) { - if (!getText().equals(newString)) { - getModellerClass().renameAttribute(getText(), newString); - } - super.setText(newString); - updateAttributeFigure(); - } - }; - classFigureAttribute.setText(newAttribute); - classFigureAttribute.setFont(attributeFont); - getAttributesFigure().add(classFigureAttribute); - updateAttributeFigure(); - } - - /** - * Remove an attribute with a given name. The underlying class in the model is updated - * as well to exclude the attribute name. - * - * @param oldAttribute name of the attribute to be removed. - */ - protected void removeAttribute(Figure oldAttribute) { - getModellerClass().removeAttribute(((TextFigure)oldAttribute).getText()); - getAttributesFigure().remove(oldAttribute); - updateAttributeFigure(); - } - - /** - * Update the attribute figure and the ClassFigure itself as well. This causes calculating - * the layout of contained figures. - */ - protected void updateAttributeFigure() { - getAttributesFigure().update(); - update(); - } - - /** - * Add a name for a method. The underlying class in the model is updated as well - * to hold the method name. - * - * @param newMethod name of the new method - */ - protected void addMethod(String newMethod) { - getModellerClass().addMethod(newMethod); - TextFigure classFigureMethod = new TextFigure() { - public void setText(String newString) { - if (!getText().equals(newString)) { - getModellerClass().renameMethod(getText(), newString); - } - super.setText(newString); - updateMethodFigure(); - } - }; - classFigureMethod.setText(newMethod); - classFigureMethod.setFont(methodFont); - getMethodsFigure().add(classFigureMethod); - updateMethodFigure(); - } - - /** - * Remove an method with a given name. The underlying class in the model is updated - * as well to exclude the method name. - * - * @param oldMethod name of the method to be removed. - */ - protected void removeMethod(Figure oldMethod) { - getModellerClass().removeMethod(((TextFigure)oldMethod).getText()); - getMethodsFigure().remove(oldMethod); - updateMethodFigure(); - } - - /** - * Update the method figure and the ClassFigure itself as well. This causes calculating - * the layout of contained figures. - */ - protected void updateMethodFigure() { - getMethodsFigure().update(); - update(); - } - - /** - * Set the class in the model which should be represented by this ClassFigure - * - * @param newClass class in the model - */ - protected void setModellerClass(JModellerClass newClass) { - myClass = newClass; - } - - /** - * Return the class from the model which is represented by this ClassFigure - * - * @return class from the model - */ - public JModellerClass getModellerClass() { - return myClass; - } - - /** - * Propagate the removeFromDrawing request up to the container. - * A ClassFigure should not be removed just because one of its childern - * is removed. - */ - public void figureRequestRemove(FigureChangeEvent e) { - Figure removeFigure = e.getFigure(); - if (getAttributesFigure().includes(removeFigure)) { - removeAttribute(removeFigure); - } - else if (getMethodsFigure().includes(removeFigure)) { - removeMethod(removeFigure); - } - else { - // remove itself - listener().figureRequestRemove(new FigureChangeEvent(this, displayBox())); - } - } - - /** - * Return default handles on all four edges for this figure. - */ - public HandleEnumeration handles() { - List handles = CollectionsFactory.current().createList(4); - - handles.add(new NullHandle(getPresentationFigure(), RelativeLocator.northWest())); - handles.add(new NullHandle(getPresentationFigure(), RelativeLocator.northEast())); - handles.add(new NullHandle(getPresentationFigure(), RelativeLocator.southWest())); - handles.add(new NullHandle(getPresentationFigure(), RelativeLocator.southEast())); - - return new HandleEnumerator(handles); - } - - /** - * Test whether this figure has child figures. - * - * @return true, if there are no child figures, false otherwise - */ - public boolean isEmpty() { - return figureCount() == 0; - } - - /** - * Read the figure and its contained elements from the StorableOutput and sets - * the presentation figure and creates the popup menu. - */ - public void read(StorableInput dr) throws IOException { - getClassNameFigure().setText(dr.readString()); - - int attributesCount = dr.readInt(); - for (int attributeIndex = 0; attributeIndex < attributesCount; attributeIndex++) { - addAttribute(dr.readString()); - } - - int methodsCount = dr.readInt(); - for (int methodIndex = 0; methodIndex < methodsCount; methodIndex++) { - addMethod(dr.readString()); - } - setPresentationFigure((Figure)dr.readStorable()); - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - update(); - } - - /** - * Write the figure and its contained elements to the StorableOutput. - */ - public void write(StorableOutput dw) { - dw.writeString(getModellerClass().getName()); - dw.writeInt(getModellerClass().getNumberOfAttributes()); - - Iterator attributeIterator = getModellerClass().getAttributes(); - while (attributeIterator.hasNext()) { - dw.writeString((String)attributeIterator.next()); - } - dw.writeInt(getModellerClass().getNumberOfMethods()); - - Iterator methodIterator = getModellerClass().getMethods(); - while (methodIterator.hasNext()) { - dw.writeString((String)methodIterator.next()); - } - dw.writeStorable(getPresentationFigure()); - } - - /** - * Read the serialized figure and its contained elements from the input stream and - * creates the popup menu - */ - private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException { - // call superclass' private readObject() indirectly - s.defaultReadObject(); - - setAttribute(FigureAttributeConstant.POPUP_MENU, createPopupMenu()); - } -} diff --git a/jmodeller/src/DelegationSelectionTool.java b/jmodeller/src/DelegationSelectionTool.java deleted file mode 100644 index a66ad5c63..000000000 --- a/jmodeller/src/DelegationSelectionTool.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * JModeller - * - * @version 1.0 15.01.2001 - * @author Wolfram Kaiser (�2001) - */ - -import java.awt.event.MouseEvent; - -import org.jhotdraw.contrib.CustomSelectionTool; -import org.jhotdraw.figures.TextFigure; -import org.jhotdraw.figures.TextTool; -import org.jhotdraw.framework.DrawingEditor; -import org.jhotdraw.framework.Figure; - -/** - * Delegate mouse selection to a specific TextTool if - * the figure selected inside a CompositeFigure is a - * TextFigure - */ -public class DelegationSelectionTool extends CustomSelectionTool { - - /** - * TextTool which will be invoked at the top level container. - */ - private TextTool myTextTool; - - public DelegationSelectionTool(DrawingEditor newEditor) { - super(newEditor); - setTextTool(new TextTool(newEditor, new TextFigure())); - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse double click. - */ - protected void handleMouseDoubleClick(MouseEvent e, int x, int y) { - Figure figure = drawing().findFigureInside(e.getX(), e.getY()); - if ((figure != null) && (figure instanceof TextFigure)) { - getTextTool().activate(); - getTextTool().mouseDown(e, x, y); - } - } - - /** - * Hook method which can be overriden by subclasses to provide - * specialised behaviour in the event of a mouse down. - */ - protected void handleMouseClick(MouseEvent e, int x, int y) { - deactivate(); - } - - /** - * Terminates the editing of a text figure. - */ - public void deactivate() { - super.deactivate(); - if (getTextTool().isActive()) { - getTextTool().deactivate(); - } - } - - /** - * Set the text tool to which double clicks should be delegated. The text tool is shared by - * all figures upon which this selection tool operates. - * - * @param newTextTool delegate text tool - */ - protected void setTextTool(TextTool newTextTool) { - myTextTool = newTextTool; - } - - /** - * Return the text tool to which double clicks are delegated. The text tool is shared by - * all figures upon which this selection tool operates. - * - * @return delegate text tool - */ - protected TextTool getTextTool() { - return myTextTool; - } -} \ No newline at end of file diff --git a/jmodeller/src/DependencyLineConnection.java b/jmodeller/src/DependencyLineConnection.java deleted file mode 100644 index 1f84b9eeb..000000000 --- a/jmodeller/src/DependencyLineConnection.java +++ /dev/null @@ -1,103 +0,0 @@ -/** - * JModeller - * - * @version 1.0 15.01.2001 - * @author Wolfram Kaiser (�2001) - */ - -import java.awt.Color; -import java.awt.Graphics; - -import org.jhotdraw.figures.ArrowTip; -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.framework.Figure; - -/** - * Draw a dependency line between two classes. A dependency relation is a - * uses-a relation with a direction where the connection points to the class - * used by another one. The start class is dependend on the end class. A - * DependencyLineConnection has an arrow at the end point and is dotted. - * Currently, classes keep track themselves about other dependend classes - */ -public class DependencyLineConnection extends LineConnection { - - static final long serialVersionUID = -2964321053621789632L; - - /** - * Create a new instance - */ - public DependencyLineConnection() { - super(); - - setStartDecoration(null); - ArrowTip arrow = new ArrowTip(0.4, 12.0, 0.0); - arrow.setBorderColor(Color.black); - setEndDecoration(arrow); - setEndDecoration(arrow); - } - - /** - * Hook method to plug in application behaviour into - * a template method. This method is called when a - * connection between two objects has been established. - * - * @param start figure representing the start class which is dependend on the end class - * @param end figure representing the end class - */ - protected void handleConnect(Figure start, Figure end) { - super.handleConnect(start, end); - - JModellerClass startClass = ((ClassFigure)start).getModellerClass(); - JModellerClass endClass = ((ClassFigure)end).getModellerClass(); - - startClass.addDependency(endClass); - } - - /** - * Hook method to plug in application behaviour into - * a template method. This method is called when a - * connection between two objects has been cancelled. - * - * @param start figure representing the start class which is dependend on the end class - * @param end figure representing the end class - */ - protected void handleDisconnect(Figure start, Figure end) { - super.handleDisconnect(start, end); - if ((start != null) && (end != null)) { - JModellerClass startClass = ((ClassFigure)start).getModellerClass(); - JModellerClass endClass = ((ClassFigure)end).getModellerClass(); - startClass.removeDependency(endClass); - } - } - - /* - * Draw the line which is a dotted line for a dependency connection. Instead - * of drawing one line from start point to end point, the line is divided into - * several small lines each 5 pixels long and 5 pixels away from the previous - * line. Some minor inaccuracy are possible due to rounding errors or incomplete - * last lines. - * - * @param g graphics context into which the line is drawn - * @param x1 start x point - * @param y1 start y point - * @param x2 end x point - * @param y2 end y point - */ - protected void drawLine(Graphics g, int x1, int y1, int x2, int y2) { - int xDistance = x2 - x1; - int yDistance = y2 - y1; - double direction = Math.PI/2 - Math.atan2(xDistance, yDistance); - - double xAngle = Math.cos(direction); - double yAngle = Math.sin(direction); - int lineLength = (int)Math.sqrt(xDistance*xDistance + yDistance*yDistance); - - for (int i = 0; i + 5 < lineLength; i = i + 10) { - int p1x = x1 + (int)(i * xAngle); - int p1y = y1 + (int)(i * yAngle); - int p2x = x1 + (int)((i + 5) * xAngle); - int p2y = y1 + (int)((i + 5) * yAngle); - g.drawLine(p1x, p1y, p2x, p2y); - } - } -} \ No newline at end of file diff --git a/jmodeller/src/InheritanceLineConnection.java b/jmodeller/src/InheritanceLineConnection.java deleted file mode 100644 index 3c896c35c..000000000 --- a/jmodeller/src/InheritanceLineConnection.java +++ /dev/null @@ -1,78 +0,0 @@ -/** - * JModeller - * - * @version 1.0 15.01.2001 - * @author Wolfram Kaiser (�2001) - */ - -import java.awt.Color; - -import org.jhotdraw.figures.ArrowTip; -import org.jhotdraw.figures.LineConnection; -import org.jhotdraw.framework.Figure; - -/** - * An InheritanceLineConnection is a graphical representation for - * an inheritance relationship (is-a) between two classes (represented - * by ClassFigures). - */ -public class InheritanceLineConnection extends LineConnection { - - static final long serialVersionUID = 3140686678671889499L; - - /** - * Create a new instance with a predefined arrow - */ - public InheritanceLineConnection() { - setStartDecoration(null); - ArrowTip arrow = new ArrowTip(0.35, 20.0 , 20.0); - arrow.setFillColor(Color.white); - arrow.setBorderColor(Color.black); - setEndDecoration(arrow); - } - - /** - * Hook method to plug in application behaviour into - * a template method. This method is called when a - * connection between two objects has been established. - */ - protected void handleConnect(Figure start, Figure end) { - super.handleConnect(start, end); - - JModellerClass startClass = ((ClassFigure)start).getModellerClass(); - JModellerClass endClass = ((ClassFigure)end).getModellerClass(); - - startClass.addSuperclass(endClass); - } - - /** - * Hook method to plug in application behaviour into - * a template method. This method is called when a - * connection between two objects has been cancelled. - */ - protected void handleDisconnect(Figure start, Figure end) { - super.handleDisconnect(start, end); - if ((start != null) && (end!= null)) { - JModellerClass startClass = ((ClassFigure)start).getModellerClass(); - JModellerClass endClass = ((ClassFigure)end).getModellerClass(); - startClass.removeSuperclass(endClass); - } - } - - /** - * Test whether an inheritance relationship between two ClassFigures can - * be established. An inheritance relationshop can be established if - * there is no cyclic inheritance graph. This method is called before - * the two classes are connected in the diagram. - * - * @param start subclass - * @param end superclass - * @return true, if an inheritance relationship can be established, false otherwise - */ - public boolean canConnect(Figure start, Figure end) { - JModellerClass startClass = ((ClassFigure)start).getModellerClass(); - JModellerClass endClass = ((ClassFigure)end).getModellerClass(); - - return !endClass.hasInheritanceCycle(startClass); - } -} \ No newline at end of file diff --git a/jmodeller/src/JModellerApplication.java b/jmodeller/src/JModellerApplication.java deleted file mode 100644 index b541efb90..000000000 --- a/jmodeller/src/JModellerApplication.java +++ /dev/null @@ -1,174 +0,0 @@ -/** - * JModeller - * - * @version 1.1 25.02.2002 - * @author Wolfram Kaiser (�2002) - */ - -import java.awt.Color; -import java.awt.Point; -import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; - -import javax.swing.AbstractAction; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JToolBar; - -import org.jhotdraw.contrib.MDI_DrawApplication; -import org.jhotdraw.figures.ConnectedTextTool; -import org.jhotdraw.figures.TextFigure; -import org.jhotdraw.framework.DrawingView; -import org.jhotdraw.framework.FigureAttributeConstant; -import org.jhotdraw.framework.Tool; -import org.jhotdraw.standard.ConnectionTool; -import org.jhotdraw.standard.CreationTool; -import org.jhotdraw.standard.ToggleGridCommand; -import org.jhotdraw.util.CommandMenu; -import org.jhotdraw.util.UndoableTool; - -/** - * This is the main class to start the JModeller application. The actual main() method - * is already defined in CH.ifa.draw.application.DrawApplication - * - * @see CH.ifa.draw.application.DrawApplication - */ -public class JModellerApplication extends MDI_DrawApplication { - - /** - * Path where to find the pictures (relatively to where the class files are stored) - */ - public static final String DIAGRAM_IMAGES = "/images/"; - - /** - * Create a new instance of JModellerApplication - */ - public JModellerApplication() { - super("JModeller - Class Diagram Editor"); - } - - /** - * Create the tools for the toolbar. The tools are - * a selection tool, a tool to create a new class and - * two tools to create association and inheritance - * relationships between classes. - * - * @param palette toolbar to which the tools should be added - */ - protected void createTools(JToolBar palette) { - super.createTools(palette); - - Tool tool = new UndoableTool(new ConnectedTextTool(this, new TextFigure())); - palette.add(createToolButton(IMAGES+"ATEXT", "Label", tool)); - - tool = new UndoableTool(new CreationTool(this, new ClassFigure()) { - public void mouseDrag(MouseEvent e, int x, int y) { - // don't track drag events during creation: figure size is - // calculated and independent of current size - } - }); - palette.add(createToolButton(DIAGRAM_IMAGES+"CLASS", "New Class", tool)); - - tool = new UndoableTool(new ConnectionTool(this, new AssociationLineConnection())); - palette.add(createToolButton(IMAGES+"LINE", "Association Tool", tool)); - - tool = new UndoableTool(new ConnectionTool(this, new DependencyLineConnection())); - palette.add(createToolButton(DIAGRAM_IMAGES+"DEPENDENCY", "Dependency Tool", tool)); - - tool = new UndoableTool(new ConnectionTool(this, new InheritanceLineConnection())); - palette.add(createToolButton(DIAGRAM_IMAGES+"INHERITANCE", "Inheritance Tool", tool)); - } - - /** - * Create a special selection tool which reacts on the right mouse button - * to show a popup menu. - * - * @return selection tool with special behaviour for the right mouse button - */ - protected Tool createSelectionTool() { - return new DelegationSelectionTool(this); - } - - /** - * Create the menues for a given menu bar. - * - * @param mb menu bar to which the menus should be added - */ - protected void createMenus(JMenuBar mb) { - mb.add(createFileMenu()); - mb.add(createEditMenu()); - mb.add(createAlignmentMenu()); - mb.add(createAttributesMenu()); - mb.add(createLookAndFeelMenu()); - } - - /** - * Create an attribute menu hiding some special menu entries from - * the superclass. The attribute menu contains actions which can be - * performed if a figure is selected in a drawing. For this figure - * some attributes can be set such as fill and pen colour. - * - * @return newly create attribute menu - */ - protected JMenu createAttributesMenu() { - JMenu menu = new JMenu("Attributes"); - menu.add(createColorMenu("Fill Color", FigureAttributeConstant.FILL_COLOR)); - menu.add(createColorMenu("Pen Color", FigureAttributeConstant.FRAME_COLOR)); - return menu; - } - - /** - * Create an alignment menu hiding some special menu entries from - * the superclass. The alignment menu contains actions for aligning - * figures within the drawing in this case to arrange them in a grid - * or not. - * - * @return newly created alignment menu - */ - protected JMenu createAlignmentMenu() { - CommandMenu menu = new CommandMenu("Align"); - menu.add(new ToggleGridCommand("Toggle Snap to Grid", this, new Point(4,4))); - return menu; - } - - /** - * Create an internal window menu, so several drawing cans be manipulated - * at the same time. - * - * @return newly created alignment menu - */ - protected JMenu createFileMenu() { - JMenu menu = super.createFileMenu(); - menu.insert( - new AbstractAction("New Window") { - public void actionPerformed(ActionEvent event) { - newWindow(createDrawing()); - } - }, 5); - - menu.insertSeparator( 6 ); - - return menu; - } - - /** - * Creates the drawing view used in this application. - * You need to override this method to use a DrawingView - * subclass in your application. By default a standard - * DrawingView is returned. - */ - protected DrawingView createDrawingView() { - DrawingView newView = super.createDrawingView(); - newView.setBackground(Color.white); - return newView; - } - - /** - * Start the application by creating an instance and open - * the editor window. - */ - public static void main(String[] args) { - JModellerApplication window = new JModellerApplication(); - window.open(); - } -} \ No newline at end of file diff --git a/jmodeller/src/JModellerClass.java b/jmodeller/src/JModellerClass.java deleted file mode 100644 index 5db7aa54b..000000000 --- a/jmodeller/src/JModellerClass.java +++ /dev/null @@ -1,345 +0,0 @@ -/** - * JModeller - * - * @version 1.0 15.01.2001 - * @author Wolfram Kaiser (�2001) - */ - -import java.util.*; -import java.io.Serializable; - -/** - * A JModellerClass represents a class in a class diagram. It is known by its name - * and has attributes and methods and keeps track of its superclasses, associations - * and dependencies. - */ -public class JModellerClass implements Serializable { - - /** - * Name of the class to represent - */ - private String myName; - - /** - * Names of attribute in the class - */ - private Vector myAttributes; - - /** - * Names of methods in the class - */ - private Vector myMethods; - - /** - * Associated classes - */ - private Vector myAssociatedClasses; - - /** - * Direct superclasses (multiple inheritance is possible) - */ - private Vector mySuperclasses; - - /** - * Classes upon which the current class is dependend - */ - private Vector myDependClasses; - - static final long serialVersionUID = -3748332488864682801L; - - /** - * Create a new JModellerClass instance - */ - public JModellerClass() { - this("Class"); - } - - /** - * Create a new JModellerClass instance with a given name - * - * @param newClassName name of the class - */ - public JModellerClass(String newClassName) { - setName(newClassName); - myAttributes = new Vector(); - myMethods = new Vector(); - myAssociatedClasses = new Vector(); - mySuperclasses = new Vector(); - myDependClasses = new Vector(); - } - - /** - * Set the name of the class. The name can be altered after a JModellerClass - * has been created. - * - * @param newName new name of the class - */ - public void setName(String newName) { - myName = newName; - } - - /** - * Return the name of the class - * - * @return name of the class - */ - public String getName() { - return myName; - } - - /** - * Add an attribute with a given name - * - * @param newAttribute name of an attribute to be added - */ - public void addAttribute(String newAttribute) { - myAttributes.addElement(newAttribute); - } - - /** - * Remove an attribute with a given name - * - * @param oldAttribute name of the attribute to be removed - */ - public void removeAttribute(String oldAttribute) { - myAttributes.removeElement(oldAttribute); - } - - /** - * Rename an attribute with a given name if the attribute exists. - * - * @param oldAttribute name of the attribute to be renamed - * @param newAttribute new attribute name - */ - public void renameAttribute(String oldAttribute, String newAttribute) { - int attributeIndex = myAttributes.indexOf(oldAttribute); - if (attributeIndex >= 0) { - myAttributes.removeElementAt(attributeIndex); - myAttributes.insertElementAt(newAttribute, attributeIndex); - } - } - - /** - * Return an iterator over all attribute names - * - * @return iterator over all attribute names - */ - public Iterator getAttributes() { - return myAttributes.iterator(); - } - - /** - * Return the number of attributes in this class - * - * @return number of attributes - */ - public int getNumberOfAttributes() { - return myAttributes.size(); - } - - /** - * Test whether an attribute with a specific name exists in this class already - * - * @return true, if the attribute exists, false otherwise - */ - public boolean hasAttribute(String checkAttributeName) { - return myAttributes.contains(checkAttributeName); - } - - /** - * Add a method with a given name - * - * @param newMethod name of a method to be added - */ - public void addMethod(String newMethod) { - myMethods.addElement(newMethod); - } - - /** - * Remove an method with a given name - * - * @param oldMethod name of the method to be removed - */ - public void removeMethod(String oldMethod) { - myMethods.removeElement(oldMethod); - } - - /** - * Rename an method with a given name if the method exists. - * - * @param oldMethod name of the method to be renamed - * @param newMethod new method name - */ - public void renameMethod(String oldMethod, String newMethod) { - int methodIndex = myMethods.indexOf(oldMethod); - if (methodIndex >= 0) { - myMethods.removeElementAt(methodIndex); - myMethods.insertElementAt(newMethod, methodIndex); - } - } - - /** - * Return an iterator over all method names - * - * @return iterator over all method names - */ - public Iterator getMethods() { - return myMethods.iterator(); - } - - /** - * Return the number of methods in this class - * - * @return number of methods - */ - public int getNumberOfMethods() { - return myMethods.size(); - } - - /** - * Test whether an method with a specific name exists in this class already - * - * @return true, if the method exists, false otherwise - */ - public boolean hasMethod(String checkMethodName) { - return myMethods.contains(checkMethodName); - } - - /** - * Add another class as associated class. - * - * @param newAssociatedClass associated class - */ - public void addAssociation(JModellerClass newAssociatedClass) { - myAssociatedClasses.add(newAssociatedClass); - } - - /** - * Remove an associated class. - * - * @param oldAssociatedClass associated class to be removed - */ - public void removeAssociation(JModellerClass oldAssociatedClass) { - myAssociatedClasses.remove(oldAssociatedClass); - } - - /** - * Test whether another class is an associated class - * - * @return true, if the class is associated, false otherwise - */ - public boolean hasAssociation(JModellerClass checkAssociatedClass) { - return myAssociatedClasses.contains(checkAssociatedClass); - } - - /** - * Return an iterator containing all associated classes - * - * @return iterator over associated classes - */ - public Iterator getAssociations() { - return myAssociatedClasses.iterator(); - } - - /** - * Add another class as superclass. This class becomes a subclass of - * the other class. - * - * @param newSuperclass superclass to be added - */ - public void addSuperclass(JModellerClass newSuperclass) { - mySuperclasses.add(newSuperclass); - } - - /** - * Remove a superclass so this class is not longer a subclass of the other class - * - * @param oldSuperclass superclass to be removed - */ - public void removeSuperclass(JModellerClass oldSuperclass) { - mySuperclasses.remove(oldSuperclass); - } - - /** - * Return an iterator containing all superclasses - * - * @return iterator over superclasses - */ - public Iterator getSuperclasses() { - return mySuperclasses.iterator(); - } - - /** - * Checks whether class has an inheritance cycle. A inheritance - * cycle is encountered - * - if the possible subclass it the same as the current class - * - if the possible subrclass is already a superclass of the current class - * - * @param possibleSuperclass class to which should - */ - public boolean hasInheritanceCycle(JModellerClass possibleSubclass) { - if (possibleSubclass == this) { - return true; - } - - return possibleSubclass.isSuperclass(this); - - } - - /** - * Checks whether this class is the superclass of the class to test - * - * @param possibleSubclass class which should be subclass to this class or its superclasses - */ - public boolean isSuperclass(JModellerClass possibleSubclass) { - if (possibleSubclass.mySuperclasses.contains(this)) { - return true; - } - - Iterator i = possibleSubclass.getSuperclasses(); - while (i.hasNext()) { - Object currentObject = i.next(); - if (isSuperclass((JModellerClass) currentObject)) { - return true; - } - } - - return false; - } - - /** - * Add another class so this class becomes a dependend class of the other - * - * @param newDependency class upon which this class should depend - */ - public void addDependency(JModellerClass newDependency) { - myDependClasses.add(newDependency); - } - - /** - * Remove a class on which this class is dependend - * - * @param oldDependency dependency class to be removed - */ - public void removeDependency(JModellerClass oldDependency) { - myDependClasses.remove(oldDependency); - } - - /** - * Test whether this class is dependend on the given class - * - * @return true, if this class is dependend, false otherwise - */ - public boolean hasDependency(JModellerClass checkDependency) { - return myDependClasses.contains(checkDependency); - } - - /** - * Return an iterator containing all classes on which this class is dependend - * - * @return iterator over all classes on which this class depends - */ - public Iterator getDependencies() { - return myDependClasses.iterator(); - } -} \ No newline at end of file diff --git a/jmodeller/src/SeparatorFigure.java b/jmodeller/src/SeparatorFigure.java deleted file mode 100644 index ae0b4f1e0..000000000 --- a/jmodeller/src/SeparatorFigure.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * JModeller - * - * @version 1.0 15.01.2001 - * @author Wolfram Kaiser (�2001) - */ - -import java.awt.Graphics; - -import org.jhotdraw.figures.LineFigure; - -/** - * A SeparatorFigure is a similar to a LineFigure - * but draws only a horizontal line and separates - * from other figures beneath - */ -public class SeparatorFigure extends LineFigure { - - static final long serialVersionUID = 7110919055213080660L; - - /** - * Create a new SeparatorFigure - */ - public SeparatorFigure() { - super(); - } - - /** - * Draw the separation line and to hold some space free - */ - public void draw(Graphics g) { - g.setColor(getFrameColor()); - g.drawLine(startPoint().x, startPoint().y, endPoint().x - 1, startPoint().y); - } -} \ No newline at end of file diff --git a/jmodeller/src/images/CLASS1.gif b/jmodeller/src/images/CLASS1.gif deleted file mode 100644 index fe729a40fdf07dcdd0f9776e4de98baec8697aaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlJ}v(bM;<_eP?(7Kk-E-C3Bvd5R>w&d8>Y$OF1(sB5u8|!Jh*P2E`k`vPmdj z>=3r9_m<Nuzj;!{KmE(A=4TVGNt;RE=~{VpQHf7mTYuc?4|j8RUyUhg^{Y1gtykY* XV58O6-qESu)zc+eRmCpIz+epkdy-Gv diff --git a/jmodeller/src/images/CLASS2.gif b/jmodeller/src/images/CLASS2.gif deleted file mode 100644 index 6b26a6caa7f825a5ded6e41ee4845d581a596788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBlJcR!bM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)MQbmW_0GOA^<6__frm_*&x-pD z!8T0Y0SiB~{Qg>VVwDQlT(#|&?p^xDThtl%R`j=x^vSHpPv`F4`SL(1>%7Z>zm1d{ N8f~g<*##LGtN~2iOius+ diff --git a/jmodeller/src/images/CLASS3.gif b/jmodeller/src/images/CLASS3.gif deleted file mode 100644 index 08a2ee428b70731ecadf89c630adc795f8f01572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FBQt+X{bM;<_MQ3;aKhYw?pE>Qt%C5}SyZV2e+rXkwT6aqI*=!x51P2|dZUzy5 zqXRO=duM<0P*rO+U+{j>QO?y@vUP56&YOK#^M*!T-p;`MoU>t*X8JBS{kt^!t#V+# ZNR5@Hcbl<er$L8FzhrYWyC4IDH2|T6O^pBm diff --git a/jmodeller/src/images/DEPENDENCY1.gif b/jmodeller/src/images/DEPENDENCY1.gif deleted file mode 100644 index 7a5533bfc25be699bed493923b68f4b4d9326f07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|F8Iy zg^_`QgFy$R6J!PhOZbNd&((V!_MP4R|HK!Wl+1Z*LQKl9=B@g1F6GRn&37k>uA40x zle=}YM6Jt$0*zwU`2DInmeqc<F9l6WOTD)#YSo2ZtkXBAXI8BY-g*DS4==yz=>`>N I6qy*T0p`a?asU7T diff --git a/jmodeller/src/images/DEPENDENCY2.gif b/jmodeller/src/images/DEPENDENCY2.gif deleted file mode 100644 index 699b586c64aab1c5b9124a742199fc1f968791dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|F8Iy zg^_`QgFy$R6J!PhOTdQ)&((V!7M<Pw{{&0le3l&dRqJ%Lm2zeF7p=Wi*8BW3=lZF4 z^rk+X8Q{Q~zrw_5veo>J?N?6D3(i^1F~u)7E`9qi)wa{e<$vwiH`Actv?3FOH2}mm BL!STu diff --git a/jmodeller/src/images/DEPENDENCY3.gif b/jmodeller/src/images/DEPENDENCY3.gif deleted file mode 100644 index 300dbd4ccfa1d7ffb6447e998a5e4444123381d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|F8Iy zg^_`QgFy$R6J!PhOXP<J&((V!7M<Pw|3r%nf9A9oE4wmR@9O_?ZUc)#Y2B#|*Y(>& z+^#>G$Y8jrbL*djJ+7+3KlfNp+`n=%+tX`XuFRd<CCavaXWkALw{G`rg>$j3m&46^ L?iF<~FjxZs>Mu$< diff --git a/jmodeller/src/images/INHERITANCE1.gif b/jmodeller/src/images/INHERITANCE1.gif deleted file mode 100644 index 7d5e12cb27752ce14a47694fae7fa06eac63c826..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB68oXSbM;<_eP?(7Kk-E-C3Bvd5R>w&d8>Y$OF47yX7=`sX^X9|zn>oU(aVMN zLd7AUgfrorG$x;G3X2V?xchBa=sL4MviCRXt+9B!)bV7VmbdHr+wZma$h|NArOhtL Hz+epk`XEcW diff --git a/jmodeller/src/images/INHERITANCE2.gif b/jmodeller/src/images/INHERITANCE2.gif deleted file mode 100644 index 967650d19d8df5e8b82c8e4113c84698781e14f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|E~km z0n*FB68xdTbM;<_MQ3;aKf%&BpC!kA)jAz*rCgc)n?h#4$T?jyd#U|>&SzR&#ad^c wcwD(!<#+ExW%I99!E$1iwP}kt=ZBv%oiuxUf#u#!n{F@P9_G1SMv1{10BX%d+5i9m diff --git a/jmodeller/src/images/INHERITANCE3.gif b/jmodeller/src/images/INHERITANCE3.gif deleted file mode 100644 index 20acf1d75b5f7878699280ab749837ba85e09ace..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173 zcmZ?wbhEHblwgox*vtR|`xzJ*_A~4UQ~SZJ0|yQ?G&KBYU|{&q@E=V52ebbF|F8Iy zg^_`QgFy$R6J!PhOVo!3&((V!7M<Pw|3r%nf9A9oE4wmR@9O_?ZUc)#>CC4^bKe?= zU0})i8s;(GpmpY+J_CnyZHqnEY?Kbmish?}x_4#uowm%F`?)!Cox8JhqV4+p59a;a LaB{nh5`#4W2pvjC diff --git a/jhotdraw7/lib/annotations.jar b/lib/annotations.jar similarity index 100% rename from jhotdraw7/lib/annotations.jar rename to lib/annotations.jar diff --git a/jhotdraw7/lib/java_30.zip b/lib/java_30.zip similarity index 100% rename from jhotdraw7/lib/java_30.zip rename to lib/java_30.zip diff --git a/jhotdraw7/lib/jsr305.jar b/lib/jsr305.jar similarity index 100% rename from jhotdraw7/lib/jsr305.jar rename to lib/jsr305.jar diff --git a/jhotdraw7/lib/libquaqua.jnilib b/lib/libquaqua.jnilib similarity index 100% rename from jhotdraw7/lib/libquaqua.jnilib rename to lib/libquaqua.jnilib diff --git a/jhotdraw7/lib/libquaqua64.jnilib b/lib/libquaqua64.jnilib similarity index 100% rename from jhotdraw7/lib/libquaqua64.jnilib rename to lib/libquaqua64.jnilib diff --git a/jhotdraw7/lib/quaqua.jar b/lib/quaqua.jar similarity index 100% rename from jhotdraw7/lib/quaqua.jar rename to lib/quaqua.jar diff --git a/jhotdraw6/manifest.mf b/manifest.mf similarity index 100% rename from jhotdraw6/manifest.mf rename to manifest.mf diff --git a/jhotdraw7/nbproject/build-impl.xml b/nbproject/build-impl.xml similarity index 100% rename from jhotdraw7/nbproject/build-impl.xml rename to nbproject/build-impl.xml diff --git a/jhotdraw7/nbproject/genfiles.properties b/nbproject/genfiles.properties similarity index 100% rename from jhotdraw7/nbproject/genfiles.properties rename to nbproject/genfiles.properties diff --git a/jhotdraw7/nbproject/private/private.properties b/nbproject/private/private.properties similarity index 100% rename from jhotdraw7/nbproject/private/private.properties rename to nbproject/private/private.properties diff --git a/jhotdraw7/nbproject/private/private.xml b/nbproject/private/private.xml similarity index 100% rename from jhotdraw7/nbproject/private/private.xml rename to nbproject/private/private.xml diff --git a/jhotdraw7/nbproject/profiler-build-impl.xml b/nbproject/profiler-build-impl.xml similarity index 100% rename from jhotdraw7/nbproject/profiler-build-impl.xml rename to nbproject/profiler-build-impl.xml diff --git a/jhotdraw7/nbproject/project.properties b/nbproject/project.properties similarity index 100% rename from jhotdraw7/nbproject/project.properties rename to nbproject/project.properties diff --git a/jhotdraw7/nbproject/project.xml b/nbproject/project.xml similarity index 100% rename from jhotdraw7/nbproject/project.xml rename to nbproject/project.xml diff --git a/jhotdraw6/pom.xml b/pom.xml similarity index 100% rename from jhotdraw6/pom.xml rename to pom.xml diff --git a/jhotdraw7/src/documentation/changes.html b/src/documentation/changes.html similarity index 100% rename from jhotdraw7/src/documentation/changes.html rename to src/documentation/changes.html diff --git a/jhotdraw7/src/documentation/getting_started.html b/src/documentation/getting_started.html similarity index 100% rename from jhotdraw7/src/documentation/getting_started.html rename to src/documentation/getting_started.html diff --git a/jhotdraw7/src/documentation/images/draw_mdi.png b/src/documentation/images/draw_mdi.png similarity index 100% rename from jhotdraw7/src/documentation/images/draw_mdi.png rename to src/documentation/images/draw_mdi.png diff --git a/jhotdraw7/src/documentation/images/draw_mdi_small.png b/src/documentation/images/draw_mdi_small.png similarity index 100% rename from jhotdraw7/src/documentation/images/draw_mdi_small.png rename to src/documentation/images/draw_mdi_small.png diff --git a/jhotdraw7/src/documentation/images/draw_osx.png b/src/documentation/images/draw_osx.png similarity index 100% rename from jhotdraw7/src/documentation/images/draw_osx.png rename to src/documentation/images/draw_osx.png diff --git a/jhotdraw7/src/documentation/images/draw_osx_small.png b/src/documentation/images/draw_osx_small.png similarity index 100% rename from jhotdraw7/src/documentation/images/draw_osx_small.png rename to src/documentation/images/draw_osx_small.png diff --git a/jhotdraw7/src/documentation/images/jhotdraw-duked.xml b/src/documentation/images/jhotdraw-duked.xml similarity index 100% rename from jhotdraw7/src/documentation/images/jhotdraw-duked.xml rename to src/documentation/images/jhotdraw-duked.xml diff --git a/jhotdraw7/src/documentation/images/jhotdraw-seven.xml b/src/documentation/images/jhotdraw-seven.xml similarity index 100% rename from jhotdraw7/src/documentation/images/jhotdraw-seven.xml rename to src/documentation/images/jhotdraw-seven.xml diff --git a/jhotdraw7/src/documentation/images/lion.svg b/src/documentation/images/lion.svg similarity index 100% rename from jhotdraw7/src/documentation/images/lion.svg rename to src/documentation/images/lion.svg diff --git a/jhotdraw7/src/documentation/images/lion.svgz b/src/documentation/images/lion.svgz similarity index 100% rename from jhotdraw7/src/documentation/images/lion.svgz rename to src/documentation/images/lion.svgz diff --git a/jhotdraw7/src/documentation/images/net.xml b/src/documentation/images/net.xml similarity index 100% rename from jhotdraw7/src/documentation/images/net.xml rename to src/documentation/images/net.xml diff --git a/jhotdraw7/src/documentation/images/net_osx.png b/src/documentation/images/net_osx.png similarity index 100% rename from jhotdraw7/src/documentation/images/net_osx.png rename to src/documentation/images/net_osx.png diff --git a/jhotdraw7/src/documentation/images/net_osx_small.png b/src/documentation/images/net_osx_small.png similarity index 100% rename from jhotdraw7/src/documentation/images/net_osx_small.png rename to src/documentation/images/net_osx_small.png diff --git a/jhotdraw7/src/documentation/images/pert.xml b/src/documentation/images/pert.xml similarity index 100% rename from jhotdraw7/src/documentation/images/pert.xml rename to src/documentation/images/pert.xml diff --git a/jhotdraw7/src/documentation/images/pert_osx.png b/src/documentation/images/pert_osx.png similarity index 100% rename from jhotdraw7/src/documentation/images/pert_osx.png rename to src/documentation/images/pert_osx.png diff --git a/jhotdraw7/src/documentation/images/pert_osx_small.png b/src/documentation/images/pert_osx_small.png similarity index 100% rename from jhotdraw7/src/documentation/images/pert_osx_small.png rename to src/documentation/images/pert_osx_small.png diff --git a/jhotdraw7/src/documentation/images/svg_osx.png b/src/documentation/images/svg_osx.png similarity index 100% rename from jhotdraw7/src/documentation/images/svg_osx.png rename to src/documentation/images/svg_osx.png diff --git a/jhotdraw7/src/documentation/images/svg_osx_small.png b/src/documentation/images/svg_osx_small.png similarity index 100% rename from jhotdraw7/src/documentation/images/svg_osx_small.png rename to src/documentation/images/svg_osx_small.png diff --git a/jhotdraw7/src/documentation/images/webstart.small.gif b/src/documentation/images/webstart.small.gif similarity index 100% rename from jhotdraw7/src/documentation/images/webstart.small.gif rename to src/documentation/images/webstart.small.gif diff --git a/jhotdraw7/src/documentation/index.html b/src/documentation/index.html similarity index 100% rename from jhotdraw7/src/documentation/index.html rename to src/documentation/index.html diff --git a/jhotdraw7/src/documentation/jws/draw.jnlp b/src/documentation/jws/draw.jnlp similarity index 100% rename from jhotdraw7/src/documentation/jws/draw.jnlp rename to src/documentation/jws/draw.jnlp diff --git a/jhotdraw7/src/documentation/jws/net.jnlp b/src/documentation/jws/net.jnlp similarity index 100% rename from jhotdraw7/src/documentation/jws/net.jnlp rename to src/documentation/jws/net.jnlp diff --git a/jhotdraw7/src/documentation/jws/pert.jnlp b/src/documentation/jws/pert.jnlp similarity index 100% rename from jhotdraw7/src/documentation/jws/pert.jnlp rename to src/documentation/jws/pert.jnlp diff --git a/jhotdraw7/src/documentation/jws/svg.jnlp b/src/documentation/jws/svg.jnlp similarity index 100% rename from jhotdraw7/src/documentation/jws/svg.jnlp rename to src/documentation/jws/svg.jnlp diff --git a/jhotdraw7/src/documentation/jws/teddy.jnlp b/src/documentation/jws/teddy.jnlp similarity index 100% rename from jhotdraw7/src/documentation/jws/teddy.jnlp rename to src/documentation/jws/teddy.jnlp diff --git a/jhotdraw7/src/documentation/license.html b/src/documentation/license.html similarity index 100% rename from jhotdraw7/src/documentation/license.html rename to src/documentation/license.html diff --git a/jhotdraw7/src/documentation/license_terms_ccby.html b/src/documentation/license_terms_ccby.html similarity index 100% rename from jhotdraw7/src/documentation/license_terms_ccby.html rename to src/documentation/license_terms_ccby.html diff --git a/jhotdraw7/src/documentation/license_terms_lgpl.html b/src/documentation/license_terms_lgpl.html similarity index 100% rename from jhotdraw7/src/documentation/license_terms_lgpl.html rename to src/documentation/license_terms_lgpl.html diff --git a/jhotdraw7/src/documentation/release_notes.html b/src/documentation/release_notes.html similarity index 100% rename from jhotdraw7/src/documentation/release_notes.html rename to src/documentation/release_notes.html diff --git a/jhotdraw7/src/documentation/sample_draw_applet.html b/src/documentation/sample_draw_applet.html similarity index 100% rename from jhotdraw7/src/documentation/sample_draw_applet.html rename to src/documentation/sample_draw_applet.html diff --git a/jhotdraw7/src/documentation/sample_draw_application.html b/src/documentation/sample_draw_application.html similarity index 100% rename from jhotdraw7/src/documentation/sample_draw_application.html rename to src/documentation/sample_draw_application.html diff --git a/jhotdraw7/src/documentation/sample_net_applet.html b/src/documentation/sample_net_applet.html similarity index 100% rename from jhotdraw7/src/documentation/sample_net_applet.html rename to src/documentation/sample_net_applet.html diff --git a/jhotdraw7/src/documentation/sample_net_application.html b/src/documentation/sample_net_application.html similarity index 100% rename from jhotdraw7/src/documentation/sample_net_application.html rename to src/documentation/sample_net_application.html diff --git a/jhotdraw7/src/documentation/sample_pert_applet.html b/src/documentation/sample_pert_applet.html similarity index 100% rename from jhotdraw7/src/documentation/sample_pert_applet.html rename to src/documentation/sample_pert_applet.html diff --git a/jhotdraw7/src/documentation/sample_pert_application.html b/src/documentation/sample_pert_application.html similarity index 100% rename from jhotdraw7/src/documentation/sample_pert_application.html rename to src/documentation/sample_pert_application.html diff --git a/jhotdraw7/src/documentation/sample_svg_applet.html b/src/documentation/sample_svg_applet.html similarity index 100% rename from jhotdraw7/src/documentation/sample_svg_applet.html rename to src/documentation/sample_svg_applet.html diff --git a/jhotdraw7/src/documentation/sample_svg_application.html b/src/documentation/sample_svg_application.html similarity index 100% rename from jhotdraw7/src/documentation/sample_svg_application.html rename to src/documentation/sample_svg_application.html diff --git a/jhotdraw7/src/documentation/sample_teddy_application.html b/src/documentation/sample_teddy_application.html similarity index 100% rename from jhotdraw7/src/documentation/sample_teddy_application.html rename to src/documentation/sample_teddy_application.html diff --git a/jhotdraw7/src/documentation/stylesheet.css b/src/documentation/stylesheet.css similarity index 100% rename from jhotdraw7/src/documentation/stylesheet.css rename to src/documentation/stylesheet.css diff --git a/jhotdraw7/src/documentation/toc.html b/src/documentation/toc.html similarity index 100% rename from jhotdraw7/src/documentation/toc.html rename to src/documentation/toc.html diff --git a/jhotdraw7/src/documentation/tutorial/index.html b/src/documentation/tutorial/index.html similarity index 100% rename from jhotdraw7/src/documentation/tutorial/index.html rename to src/documentation/tutorial/index.html diff --git a/jhotdraw7/src/documentation/tutorial/purpose.html b/src/documentation/tutorial/purpose.html similarity index 100% rename from jhotdraw7/src/documentation/tutorial/purpose.html rename to src/documentation/tutorial/purpose.html diff --git a/jhotdraw7/src/documentation/tutorial/stylesheet.css b/src/documentation/tutorial/stylesheet.css similarity index 100% rename from jhotdraw7/src/documentation/tutorial/stylesheet.css rename to src/documentation/tutorial/stylesheet.css diff --git a/jhotdraw7/src/documentation/tutorial/toc.html b/src/documentation/tutorial/toc.html similarity index 100% rename from jhotdraw7/src/documentation/tutorial/toc.html rename to src/documentation/tutorial/toc.html diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/CDATAReader.java b/src/main/java/net/n3/nanoxml/CDATAReader.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/CDATAReader.java rename to src/main/java/net/n3/nanoxml/CDATAReader.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/ContentReader.java b/src/main/java/net/n3/nanoxml/ContentReader.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/ContentReader.java rename to src/main/java/net/n3/nanoxml/ContentReader.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/IXMLBuilder.java b/src/main/java/net/n3/nanoxml/IXMLBuilder.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/IXMLBuilder.java rename to src/main/java/net/n3/nanoxml/IXMLBuilder.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/IXMLElement.java b/src/main/java/net/n3/nanoxml/IXMLElement.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/IXMLElement.java rename to src/main/java/net/n3/nanoxml/IXMLElement.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/IXMLEntityResolver.java b/src/main/java/net/n3/nanoxml/IXMLEntityResolver.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/IXMLEntityResolver.java rename to src/main/java/net/n3/nanoxml/IXMLEntityResolver.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/IXMLParser.java b/src/main/java/net/n3/nanoxml/IXMLParser.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/IXMLParser.java rename to src/main/java/net/n3/nanoxml/IXMLParser.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/IXMLReader.java b/src/main/java/net/n3/nanoxml/IXMLReader.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/IXMLReader.java rename to src/main/java/net/n3/nanoxml/IXMLReader.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/IXMLValidator.java b/src/main/java/net/n3/nanoxml/IXMLValidator.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/IXMLValidator.java rename to src/main/java/net/n3/nanoxml/IXMLValidator.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/NonValidator.java b/src/main/java/net/n3/nanoxml/NonValidator.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/NonValidator.java rename to src/main/java/net/n3/nanoxml/NonValidator.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/PIReader.java b/src/main/java/net/n3/nanoxml/PIReader.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/PIReader.java rename to src/main/java/net/n3/nanoxml/PIReader.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/StdXMLBuilder.java b/src/main/java/net/n3/nanoxml/StdXMLBuilder.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/StdXMLBuilder.java rename to src/main/java/net/n3/nanoxml/StdXMLBuilder.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/StdXMLParser.java b/src/main/java/net/n3/nanoxml/StdXMLParser.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/StdXMLParser.java rename to src/main/java/net/n3/nanoxml/StdXMLParser.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/StdXMLReader.java b/src/main/java/net/n3/nanoxml/StdXMLReader.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/StdXMLReader.java rename to src/main/java/net/n3/nanoxml/StdXMLReader.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/ValidatorPlugin.java b/src/main/java/net/n3/nanoxml/ValidatorPlugin.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/ValidatorPlugin.java rename to src/main/java/net/n3/nanoxml/ValidatorPlugin.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/XMLAttribute.java b/src/main/java/net/n3/nanoxml/XMLAttribute.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/XMLAttribute.java rename to src/main/java/net/n3/nanoxml/XMLAttribute.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/XMLElement.java b/src/main/java/net/n3/nanoxml/XMLElement.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/XMLElement.java rename to src/main/java/net/n3/nanoxml/XMLElement.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/XMLEntityResolver.java b/src/main/java/net/n3/nanoxml/XMLEntityResolver.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/XMLEntityResolver.java rename to src/main/java/net/n3/nanoxml/XMLEntityResolver.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/XMLException.java b/src/main/java/net/n3/nanoxml/XMLException.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/XMLException.java rename to src/main/java/net/n3/nanoxml/XMLException.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/XMLParseException.java b/src/main/java/net/n3/nanoxml/XMLParseException.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/XMLParseException.java rename to src/main/java/net/n3/nanoxml/XMLParseException.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/XMLParserFactory.java b/src/main/java/net/n3/nanoxml/XMLParserFactory.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/XMLParserFactory.java rename to src/main/java/net/n3/nanoxml/XMLParserFactory.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/XMLUtil.java b/src/main/java/net/n3/nanoxml/XMLUtil.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/XMLUtil.java rename to src/main/java/net/n3/nanoxml/XMLUtil.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/XMLValidationException.java b/src/main/java/net/n3/nanoxml/XMLValidationException.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/XMLValidationException.java rename to src/main/java/net/n3/nanoxml/XMLValidationException.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/XMLWriter.java b/src/main/java/net/n3/nanoxml/XMLWriter.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/XMLWriter.java rename to src/main/java/net/n3/nanoxml/XMLWriter.java diff --git a/jhotdraw7/src/main/java/net/n3/nanoxml/package-info.java b/src/main/java/net/n3/nanoxml/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/net/n3/nanoxml/package-info.java rename to src/main/java/net/n3/nanoxml/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/AbstractApplication.java b/src/main/java/org/jhotdraw/app/AbstractApplication.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/AbstractApplication.java rename to src/main/java/org/jhotdraw/app/AbstractApplication.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/AbstractApplicationModel.java b/src/main/java/org/jhotdraw/app/AbstractApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/AbstractApplicationModel.java rename to src/main/java/org/jhotdraw/app/AbstractApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/AbstractView.form b/src/main/java/org/jhotdraw/app/AbstractView.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/AbstractView.form rename to src/main/java/org/jhotdraw/app/AbstractView.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/AbstractView.java b/src/main/java/org/jhotdraw/app/AbstractView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/AbstractView.java rename to src/main/java/org/jhotdraw/app/AbstractView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/AppletApplication.java b/src/main/java/org/jhotdraw/app/AppletApplication.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/AppletApplication.java rename to src/main/java/org/jhotdraw/app/AppletApplication.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/Application.java b/src/main/java/org/jhotdraw/app/Application.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/Application.java rename to src/main/java/org/jhotdraw/app/Application.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/ApplicationModel.java b/src/main/java/org/jhotdraw/app/ApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/ApplicationModel.java rename to src/main/java/org/jhotdraw/app/ApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/DefaultApplicationModel.java b/src/main/java/org/jhotdraw/app/DefaultApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/DefaultApplicationModel.java rename to src/main/java/org/jhotdraw/app/DefaultApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/DefaultMenuBuilder.java b/src/main/java/org/jhotdraw/app/DefaultMenuBuilder.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/DefaultMenuBuilder.java rename to src/main/java/org/jhotdraw/app/DefaultMenuBuilder.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/Disposable.java b/src/main/java/org/jhotdraw/app/Disposable.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/Disposable.java rename to src/main/java/org/jhotdraw/app/Disposable.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/EmptyApplicationModel.java b/src/main/java/org/jhotdraw/app/EmptyApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/EmptyApplicationModel.java rename to src/main/java/org/jhotdraw/app/EmptyApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/EmptyMenuBuilder.java b/src/main/java/org/jhotdraw/app/EmptyMenuBuilder.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/EmptyMenuBuilder.java rename to src/main/java/org/jhotdraw/app/EmptyMenuBuilder.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/Labels.properties b/src/main/java/org/jhotdraw/app/Labels.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/Labels.properties rename to src/main/java/org/jhotdraw/app/Labels.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/Labels_de.properties b/src/main/java/org/jhotdraw/app/Labels_de.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/Labels_de.properties rename to src/main/java/org/jhotdraw/app/Labels_de.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/Labels_fr.properties b/src/main/java/org/jhotdraw/app/Labels_fr.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/Labels_fr.properties rename to src/main/java/org/jhotdraw/app/Labels_fr.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/MDIApplication.java b/src/main/java/org/jhotdraw/app/MDIApplication.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/MDIApplication.java rename to src/main/java/org/jhotdraw/app/MDIApplication.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/MenuBuilder.java b/src/main/java/org/jhotdraw/app/MenuBuilder.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/MenuBuilder.java rename to src/main/java/org/jhotdraw/app/MenuBuilder.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/OSXApplication.java b/src/main/java/org/jhotdraw/app/OSXApplication.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/OSXApplication.java rename to src/main/java/org/jhotdraw/app/OSXApplication.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/PrintableView.java b/src/main/java/org/jhotdraw/app/PrintableView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/PrintableView.java rename to src/main/java/org/jhotdraw/app/PrintableView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/SDIApplication.java b/src/main/java/org/jhotdraw/app/SDIApplication.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/SDIApplication.java rename to src/main/java/org/jhotdraw/app/SDIApplication.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/View.java b/src/main/java/org/jhotdraw/app/View.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/View.java rename to src/main/java/org/jhotdraw/app/View.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/AbstractApplicationAction.java b/src/main/java/org/jhotdraw/app/action/AbstractApplicationAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/AbstractApplicationAction.java rename to src/main/java/org/jhotdraw/app/action/AbstractApplicationAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/AbstractSaveUnsavedChangesAction.java b/src/main/java/org/jhotdraw/app/action/AbstractSaveUnsavedChangesAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/AbstractSaveUnsavedChangesAction.java rename to src/main/java/org/jhotdraw/app/action/AbstractSaveUnsavedChangesAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/AbstractViewAction.java b/src/main/java/org/jhotdraw/app/action/AbstractViewAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/AbstractViewAction.java rename to src/main/java/org/jhotdraw/app/action/AbstractViewAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/ActionUtil.java b/src/main/java/org/jhotdraw/app/action/ActionUtil.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/ActionUtil.java rename to src/main/java/org/jhotdraw/app/action/ActionUtil.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/app/AboutAction.java b/src/main/java/org/jhotdraw/app/action/app/AboutAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/app/AboutAction.java rename to src/main/java/org/jhotdraw/app/action/app/AboutAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/app/AbstractPreferencesAction.java b/src/main/java/org/jhotdraw/app/action/app/AbstractPreferencesAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/app/AbstractPreferencesAction.java rename to src/main/java/org/jhotdraw/app/action/app/AbstractPreferencesAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/app/ExitAction.java b/src/main/java/org/jhotdraw/app/action/app/ExitAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/app/ExitAction.java rename to src/main/java/org/jhotdraw/app/action/app/ExitAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/app/OpenApplicationAction.java b/src/main/java/org/jhotdraw/app/action/app/OpenApplicationAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/app/OpenApplicationAction.java rename to src/main/java/org/jhotdraw/app/action/app/OpenApplicationAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/app/OpenApplicationFileAction.java b/src/main/java/org/jhotdraw/app/action/app/OpenApplicationFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/app/OpenApplicationFileAction.java rename to src/main/java/org/jhotdraw/app/action/app/OpenApplicationFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/app/PrintApplicationFileAction.java b/src/main/java/org/jhotdraw/app/action/app/PrintApplicationFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/app/PrintApplicationFileAction.java rename to src/main/java/org/jhotdraw/app/action/app/PrintApplicationFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/app/ReOpenApplicationAction.java b/src/main/java/org/jhotdraw/app/action/app/ReOpenApplicationAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/app/ReOpenApplicationAction.java rename to src/main/java/org/jhotdraw/app/action/app/ReOpenApplicationAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/app/package-info.java b/src/main/java/org/jhotdraw/app/action/app/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/app/package-info.java rename to src/main/java/org/jhotdraw/app/action/app/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/AbstractFindAction.java b/src/main/java/org/jhotdraw/app/action/edit/AbstractFindAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/AbstractFindAction.java rename to src/main/java/org/jhotdraw/app/action/edit/AbstractFindAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/AbstractSelectionAction.java b/src/main/java/org/jhotdraw/app/action/edit/AbstractSelectionAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/AbstractSelectionAction.java rename to src/main/java/org/jhotdraw/app/action/edit/AbstractSelectionAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/ClearSelectionAction.java b/src/main/java/org/jhotdraw/app/action/edit/ClearSelectionAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/ClearSelectionAction.java rename to src/main/java/org/jhotdraw/app/action/edit/ClearSelectionAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/CopyAction.java b/src/main/java/org/jhotdraw/app/action/edit/CopyAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/CopyAction.java rename to src/main/java/org/jhotdraw/app/action/edit/CopyAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/CutAction.java b/src/main/java/org/jhotdraw/app/action/edit/CutAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/CutAction.java rename to src/main/java/org/jhotdraw/app/action/edit/CutAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/DeleteAction.java b/src/main/java/org/jhotdraw/app/action/edit/DeleteAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/DeleteAction.java rename to src/main/java/org/jhotdraw/app/action/edit/DeleteAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/DuplicateAction.java b/src/main/java/org/jhotdraw/app/action/edit/DuplicateAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/DuplicateAction.java rename to src/main/java/org/jhotdraw/app/action/edit/DuplicateAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/PasteAction.java b/src/main/java/org/jhotdraw/app/action/edit/PasteAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/PasteAction.java rename to src/main/java/org/jhotdraw/app/action/edit/PasteAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/RedoAction.java b/src/main/java/org/jhotdraw/app/action/edit/RedoAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/RedoAction.java rename to src/main/java/org/jhotdraw/app/action/edit/RedoAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/SelectAllAction.java b/src/main/java/org/jhotdraw/app/action/edit/SelectAllAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/SelectAllAction.java rename to src/main/java/org/jhotdraw/app/action/edit/SelectAllAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/UndoAction.java b/src/main/java/org/jhotdraw/app/action/edit/UndoAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/UndoAction.java rename to src/main/java/org/jhotdraw/app/action/edit/UndoAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/package-info.java b/src/main/java/org/jhotdraw/app/action/edit/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/edit/package-info.java rename to src/main/java/org/jhotdraw/app/action/edit/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/ClearFileAction.java b/src/main/java/org/jhotdraw/app/action/file/ClearFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/ClearFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/ClearFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/ClearRecentFilesMenuAction.java b/src/main/java/org/jhotdraw/app/action/file/ClearRecentFilesMenuAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/ClearRecentFilesMenuAction.java rename to src/main/java/org/jhotdraw/app/action/file/ClearRecentFilesMenuAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/CloseFileAction.java b/src/main/java/org/jhotdraw/app/action/file/CloseFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/CloseFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/CloseFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/ExportFileAction.java b/src/main/java/org/jhotdraw/app/action/file/ExportFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/ExportFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/ExportFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/LoadDirectoryAction.java b/src/main/java/org/jhotdraw/app/action/file/LoadDirectoryAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/LoadDirectoryAction.java rename to src/main/java/org/jhotdraw/app/action/file/LoadDirectoryAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/LoadFileAction.java b/src/main/java/org/jhotdraw/app/action/file/LoadFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/LoadFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/LoadFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/LoadRecentFileAction.java b/src/main/java/org/jhotdraw/app/action/file/LoadRecentFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/LoadRecentFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/LoadRecentFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/NewFileAction.java b/src/main/java/org/jhotdraw/app/action/file/NewFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/NewFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/NewFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/NewWindowAction.java b/src/main/java/org/jhotdraw/app/action/file/NewWindowAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/NewWindowAction.java rename to src/main/java/org/jhotdraw/app/action/file/NewWindowAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/OpenDirectoryAction.java b/src/main/java/org/jhotdraw/app/action/file/OpenDirectoryAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/OpenDirectoryAction.java rename to src/main/java/org/jhotdraw/app/action/file/OpenDirectoryAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/OpenFileAction.java b/src/main/java/org/jhotdraw/app/action/file/OpenFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/OpenFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/OpenFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/OpenRecentFileAction.java b/src/main/java/org/jhotdraw/app/action/file/OpenRecentFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/OpenRecentFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/OpenRecentFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/PrintFileAction.java b/src/main/java/org/jhotdraw/app/action/file/PrintFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/PrintFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/PrintFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/SaveFileAction.java b/src/main/java/org/jhotdraw/app/action/file/SaveFileAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/SaveFileAction.java rename to src/main/java/org/jhotdraw/app/action/file/SaveFileAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/SaveFileAsAction.java b/src/main/java/org/jhotdraw/app/action/file/SaveFileAsAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/SaveFileAsAction.java rename to src/main/java/org/jhotdraw/app/action/file/SaveFileAsAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/file/package-info.java b/src/main/java/org/jhotdraw/app/action/file/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/file/package-info.java rename to src/main/java/org/jhotdraw/app/action/file/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editCopy.png b/src/main/java/org/jhotdraw/app/action/images/editCopy.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editCopy.png rename to src/main/java/org/jhotdraw/app/action/images/editCopy.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editCut.png b/src/main/java/org/jhotdraw/app/action/images/editCut.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editCut.png rename to src/main/java/org/jhotdraw/app/action/images/editCut.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editPaste.png b/src/main/java/org/jhotdraw/app/action/images/editPaste.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editPaste.png rename to src/main/java/org/jhotdraw/app/action/images/editPaste.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editRedo.png b/src/main/java/org/jhotdraw/app/action/images/editRedo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editRedo.png rename to src/main/java/org/jhotdraw/app/action/images/editRedo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editUndo.png b/src/main/java/org/jhotdraw/app/action/images/editUndo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/editUndo.png rename to src/main/java/org/jhotdraw/app/action/images/editUndo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/fileNew.png b/src/main/java/org/jhotdraw/app/action/images/fileNew.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/fileNew.png rename to src/main/java/org/jhotdraw/app/action/images/fileNew.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/fileOpen.png b/src/main/java/org/jhotdraw/app/action/images/fileOpen.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/fileOpen.png rename to src/main/java/org/jhotdraw/app/action/images/fileOpen.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/filePrint.png b/src/main/java/org/jhotdraw/app/action/images/filePrint.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/filePrint.png rename to src/main/java/org/jhotdraw/app/action/images/filePrint.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/fileSave.png b/src/main/java/org/jhotdraw/app/action/images/fileSave.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/fileSave.png rename to src/main/java/org/jhotdraw/app/action/images/fileSave.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/images/spacerIcon.png b/src/main/java/org/jhotdraw/app/action/images/spacerIcon.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/images/spacerIcon.png rename to src/main/java/org/jhotdraw/app/action/images/spacerIcon.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/package-info.java b/src/main/java/org/jhotdraw/app/action/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/package-info.java rename to src/main/java/org/jhotdraw/app/action/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/view/ToggleViewPropertyAction.java b/src/main/java/org/jhotdraw/app/action/view/ToggleViewPropertyAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/view/ToggleViewPropertyAction.java rename to src/main/java/org/jhotdraw/app/action/view/ToggleViewPropertyAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/view/ViewPropertyAction.java b/src/main/java/org/jhotdraw/app/action/view/ViewPropertyAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/view/ViewPropertyAction.java rename to src/main/java/org/jhotdraw/app/action/view/ViewPropertyAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/view/package-info.java b/src/main/java/org/jhotdraw/app/action/view/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/view/package-info.java rename to src/main/java/org/jhotdraw/app/action/view/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/window/ArrangeWindowsAction.java b/src/main/java/org/jhotdraw/app/action/window/ArrangeWindowsAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/window/ArrangeWindowsAction.java rename to src/main/java/org/jhotdraw/app/action/window/ArrangeWindowsAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/window/FocusWindowAction.java b/src/main/java/org/jhotdraw/app/action/window/FocusWindowAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/window/FocusWindowAction.java rename to src/main/java/org/jhotdraw/app/action/window/FocusWindowAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/window/MaximizeWindowAction.java b/src/main/java/org/jhotdraw/app/action/window/MaximizeWindowAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/window/MaximizeWindowAction.java rename to src/main/java/org/jhotdraw/app/action/window/MaximizeWindowAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/window/MinimizeWindowAction.java b/src/main/java/org/jhotdraw/app/action/window/MinimizeWindowAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/window/MinimizeWindowAction.java rename to src/main/java/org/jhotdraw/app/action/window/MinimizeWindowAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/window/TogglePaletteAction.java b/src/main/java/org/jhotdraw/app/action/window/TogglePaletteAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/window/TogglePaletteAction.java rename to src/main/java/org/jhotdraw/app/action/window/TogglePaletteAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/window/ToggleToolBarAction.java b/src/main/java/org/jhotdraw/app/action/window/ToggleToolBarAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/window/ToggleToolBarAction.java rename to src/main/java/org/jhotdraw/app/action/window/ToggleToolBarAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/window/ToggleVisibleAction.java b/src/main/java/org/jhotdraw/app/action/window/ToggleVisibleAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/window/ToggleVisibleAction.java rename to src/main/java/org/jhotdraw/app/action/window/ToggleVisibleAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/action/window/package-info.java b/src/main/java/org/jhotdraw/app/action/window/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/action/window/package-info.java rename to src/main/java/org/jhotdraw/app/action/window/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/osx/OSXAdapter.java b/src/main/java/org/jhotdraw/app/osx/OSXAdapter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/osx/OSXAdapter.java rename to src/main/java/org/jhotdraw/app/osx/OSXAdapter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/osx/OSXPaletteHandler.java b/src/main/java/org/jhotdraw/app/osx/OSXPaletteHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/osx/OSXPaletteHandler.java rename to src/main/java/org/jhotdraw/app/osx/OSXPaletteHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/osx/package-info.java b/src/main/java/org/jhotdraw/app/osx/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/osx/package-info.java rename to src/main/java/org/jhotdraw/app/osx/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/package-info.java b/src/main/java/org/jhotdraw/app/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/package-info.java rename to src/main/java/org/jhotdraw/app/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/editCopy.png b/src/main/java/org/jhotdraw/app/resources/editCopy.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/editCopy.png rename to src/main/java/org/jhotdraw/app/resources/editCopy.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/editCut.png b/src/main/java/org/jhotdraw/app/resources/editCut.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/editCut.png rename to src/main/java/org/jhotdraw/app/resources/editCut.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/editPaste.png b/src/main/java/org/jhotdraw/app/resources/editPaste.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/editPaste.png rename to src/main/java/org/jhotdraw/app/resources/editPaste.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/editRedo.png b/src/main/java/org/jhotdraw/app/resources/editRedo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/editRedo.png rename to src/main/java/org/jhotdraw/app/resources/editRedo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/editUndo.png b/src/main/java/org/jhotdraw/app/resources/editUndo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/editUndo.png rename to src/main/java/org/jhotdraw/app/resources/editUndo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/fileNew.png b/src/main/java/org/jhotdraw/app/resources/fileNew.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/fileNew.png rename to src/main/java/org/jhotdraw/app/resources/fileNew.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/fileOpen.png b/src/main/java/org/jhotdraw/app/resources/fileOpen.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/fileOpen.png rename to src/main/java/org/jhotdraw/app/resources/fileOpen.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/filePrint.png b/src/main/java/org/jhotdraw/app/resources/filePrint.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/filePrint.png rename to src/main/java/org/jhotdraw/app/resources/filePrint.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/fileSave.png b/src/main/java/org/jhotdraw/app/resources/fileSave.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/fileSave.png rename to src/main/java/org/jhotdraw/app/resources/fileSave.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/app/resources/spacerIcon.png b/src/main/java/org/jhotdraw/app/resources/spacerIcon.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/app/resources/spacerIcon.png rename to src/main/java/org/jhotdraw/app/resources/spacerIcon.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/beans/AbstractBean.java b/src/main/java/org/jhotdraw/beans/AbstractBean.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/beans/AbstractBean.java rename to src/main/java/org/jhotdraw/beans/AbstractBean.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/beans/PropertyChangeEdit.java b/src/main/java/org/jhotdraw/beans/PropertyChangeEdit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/beans/PropertyChangeEdit.java rename to src/main/java/org/jhotdraw/beans/PropertyChangeEdit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/beans/WeakPropertyChangeListener.java b/src/main/java/org/jhotdraw/beans/WeakPropertyChangeListener.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/beans/WeakPropertyChangeListener.java rename to src/main/java/org/jhotdraw/beans/WeakPropertyChangeListener.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/beans/package-info.java b/src/main/java/org/jhotdraw/beans/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/beans/package-info.java rename to src/main/java/org/jhotdraw/beans/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/AbstractColorSlidersModel.java b/src/main/java/org/jhotdraw/color/AbstractColorSlidersModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/AbstractColorSlidersModel.java rename to src/main/java/org/jhotdraw/color/AbstractColorSlidersModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/AbstractColorWheelImageProducer.java b/src/main/java/org/jhotdraw/color/AbstractColorWheelImageProducer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/AbstractColorWheelImageProducer.java rename to src/main/java/org/jhotdraw/color/AbstractColorWheelImageProducer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/AbstractHarmonicRule.java b/src/main/java/org/jhotdraw/color/AbstractHarmonicRule.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/AbstractHarmonicRule.java rename to src/main/java/org/jhotdraw/color/AbstractHarmonicRule.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/CIELABColorSpace.java b/src/main/java/org/jhotdraw/color/CIELABColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/CIELABColorSpace.java rename to src/main/java/org/jhotdraw/color/CIELABColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/CIELCHabColorSpace.java b/src/main/java/org/jhotdraw/color/CIELCHabColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/CIELCHabColorSpace.java rename to src/main/java/org/jhotdraw/color/CIELCHabColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/CIEXYChromaticityDiagramImageProducer.java b/src/main/java/org/jhotdraw/color/CIEXYChromaticityDiagramImageProducer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/CIEXYChromaticityDiagramImageProducer.java rename to src/main/java/org/jhotdraw/color/CIEXYChromaticityDiagramImageProducer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/CMYKGenericColorSpace.java b/src/main/java/org/jhotdraw/color/CMYKGenericColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/CMYKGenericColorSpace.java rename to src/main/java/org/jhotdraw/color/CMYKGenericColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/CMYKNominalColorSpace.java b/src/main/java/org/jhotdraw/color/CMYKNominalColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/CMYKNominalColorSpace.java rename to src/main/java/org/jhotdraw/color/CMYKNominalColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/ColorListCellRenderer.java b/src/main/java/org/jhotdraw/color/ColorListCellRenderer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/ColorListCellRenderer.java rename to src/main/java/org/jhotdraw/color/ColorListCellRenderer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/ColorSliderModel.java b/src/main/java/org/jhotdraw/color/ColorSliderModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/ColorSliderModel.java rename to src/main/java/org/jhotdraw/color/ColorSliderModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/ColorSliderUI.java b/src/main/java/org/jhotdraw/color/ColorSliderUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/ColorSliderUI.java rename to src/main/java/org/jhotdraw/color/ColorSliderUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/ColorSquareImageProducer.java b/src/main/java/org/jhotdraw/color/ColorSquareImageProducer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/ColorSquareImageProducer.java rename to src/main/java/org/jhotdraw/color/ColorSquareImageProducer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/ColorTrackImageProducer.java b/src/main/java/org/jhotdraw/color/ColorTrackImageProducer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/ColorTrackImageProducer.java rename to src/main/java/org/jhotdraw/color/ColorTrackImageProducer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/ColorUtil.java b/src/main/java/org/jhotdraw/color/ColorUtil.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/ColorUtil.java rename to src/main/java/org/jhotdraw/color/ColorUtil.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/ColorWheelChooser.form b/src/main/java/org/jhotdraw/color/ColorWheelChooser.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/ColorWheelChooser.form rename to src/main/java/org/jhotdraw/color/ColorWheelChooser.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/ColorWheelChooser.java b/src/main/java/org/jhotdraw/color/ColorWheelChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/ColorWheelChooser.java rename to src/main/java/org/jhotdraw/color/ColorWheelChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/ComplexColorWheelImageProducer.java b/src/main/java/org/jhotdraw/color/ComplexColorWheelImageProducer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/ComplexColorWheelImageProducer.java rename to src/main/java/org/jhotdraw/color/ComplexColorWheelImageProducer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/CompositeColor.java b/src/main/java/org/jhotdraw/color/CompositeColor.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/CompositeColor.java rename to src/main/java/org/jhotdraw/color/CompositeColor.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/DefaultColorSliderModel.java b/src/main/java/org/jhotdraw/color/DefaultColorSliderModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/DefaultColorSliderModel.java rename to src/main/java/org/jhotdraw/color/DefaultColorSliderModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/DefaultHarmonicColorModel.java b/src/main/java/org/jhotdraw/color/DefaultHarmonicColorModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/DefaultHarmonicColorModel.java rename to src/main/java/org/jhotdraw/color/DefaultHarmonicColorModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/Generic CMYK Profile.icc b/src/main/java/org/jhotdraw/color/Generic CMYK Profile.icc similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/Generic CMYK Profile.icc rename to src/main/java/org/jhotdraw/color/Generic CMYK Profile.icc diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/HSBColorSpace.java b/src/main/java/org/jhotdraw/color/HSBColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/HSBColorSpace.java rename to src/main/java/org/jhotdraw/color/HSBColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/HSLColorSpace.java b/src/main/java/org/jhotdraw/color/HSLColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/HSLColorSpace.java rename to src/main/java/org/jhotdraw/color/HSLColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/HSLHarmonicColorWheelImageProducer.java b/src/main/java/org/jhotdraw/color/HSLHarmonicColorWheelImageProducer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/HSLHarmonicColorWheelImageProducer.java rename to src/main/java/org/jhotdraw/color/HSLHarmonicColorWheelImageProducer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/HSLPhysiologicColorSpace.java b/src/main/java/org/jhotdraw/color/HSLPhysiologicColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/HSLPhysiologicColorSpace.java rename to src/main/java/org/jhotdraw/color/HSLPhysiologicColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/HSVColorSpace.java b/src/main/java/org/jhotdraw/color/HSVColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/HSVColorSpace.java rename to src/main/java/org/jhotdraw/color/HSVColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/HSVHarmonicColorWheelImageProducer.java b/src/main/java/org/jhotdraw/color/HSVHarmonicColorWheelImageProducer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/HSVHarmonicColorWheelImageProducer.java rename to src/main/java/org/jhotdraw/color/HSVHarmonicColorWheelImageProducer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/HSVPhysiologicColorSpace.java b/src/main/java/org/jhotdraw/color/HSVPhysiologicColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/HSVPhysiologicColorSpace.java rename to src/main/java/org/jhotdraw/color/HSVPhysiologicColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/HarmonicColorModel.java b/src/main/java/org/jhotdraw/color/HarmonicColorModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/HarmonicColorModel.java rename to src/main/java/org/jhotdraw/color/HarmonicColorModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/HarmonicRule.java b/src/main/java/org/jhotdraw/color/HarmonicRule.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/HarmonicRule.java rename to src/main/java/org/jhotdraw/color/HarmonicRule.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/JColorWheel.form b/src/main/java/org/jhotdraw/color/JColorWheel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/JColorWheel.form rename to src/main/java/org/jhotdraw/color/JColorWheel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/JColorWheel.java b/src/main/java/org/jhotdraw/color/JColorWheel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/JColorWheel.java rename to src/main/java/org/jhotdraw/color/JColorWheel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/JHarmonicColorWheel.form b/src/main/java/org/jhotdraw/color/JHarmonicColorWheel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/JHarmonicColorWheel.form rename to src/main/java/org/jhotdraw/color/JHarmonicColorWheel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/JHarmonicColorWheel.java b/src/main/java/org/jhotdraw/color/JHarmonicColorWheel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/JHarmonicColorWheel.java rename to src/main/java/org/jhotdraw/color/JHarmonicColorWheel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/NamedColorSpace.java b/src/main/java/org/jhotdraw/color/NamedColorSpace.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/NamedColorSpace.java rename to src/main/java/org/jhotdraw/color/NamedColorSpace.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/PolarColorWheelImageProducer.java b/src/main/java/org/jhotdraw/color/PolarColorWheelImageProducer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/PolarColorWheelImageProducer.java rename to src/main/java/org/jhotdraw/color/PolarColorWheelImageProducer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/QuantizingColorWheelImageProducer.java b/src/main/java/org/jhotdraw/color/QuantizingColorWheelImageProducer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/QuantizingColorWheelImageProducer.java rename to src/main/java/org/jhotdraw/color/QuantizingColorWheelImageProducer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/SimpleHarmonicRule.java b/src/main/java/org/jhotdraw/color/SimpleHarmonicRule.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/SimpleHarmonicRule.java rename to src/main/java/org/jhotdraw/color/SimpleHarmonicRule.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/images/Slider.northThumbs.small.png b/src/main/java/org/jhotdraw/color/images/Slider.northThumbs.small.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/images/Slider.northThumbs.small.png rename to src/main/java/org/jhotdraw/color/images/Slider.northThumbs.small.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/images/Slider.westThumbs.small.png b/src/main/java/org/jhotdraw/color/images/Slider.westThumbs.small.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/images/Slider.westThumbs.small.png rename to src/main/java/org/jhotdraw/color/images/Slider.westThumbs.small.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/color/package-info.java b/src/main/java/org/jhotdraw/color/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/color/package-info.java rename to src/main/java/org/jhotdraw/color/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractAttributedCompositeFigure.java b/src/main/java/org/jhotdraw/draw/AbstractAttributedCompositeFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractAttributedCompositeFigure.java rename to src/main/java/org/jhotdraw/draw/AbstractAttributedCompositeFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractAttributedDecoratedFigure.java b/src/main/java/org/jhotdraw/draw/AbstractAttributedDecoratedFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractAttributedDecoratedFigure.java rename to src/main/java/org/jhotdraw/draw/AbstractAttributedDecoratedFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractAttributedFigure.java b/src/main/java/org/jhotdraw/draw/AbstractAttributedFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractAttributedFigure.java rename to src/main/java/org/jhotdraw/draw/AbstractAttributedFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractCompositeFigure.java b/src/main/java/org/jhotdraw/draw/AbstractCompositeFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractCompositeFigure.java rename to src/main/java/org/jhotdraw/draw/AbstractCompositeFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractConstrainer.java b/src/main/java/org/jhotdraw/draw/AbstractConstrainer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractConstrainer.java rename to src/main/java/org/jhotdraw/draw/AbstractConstrainer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractDrawing.java b/src/main/java/org/jhotdraw/draw/AbstractDrawing.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractDrawing.java rename to src/main/java/org/jhotdraw/draw/AbstractDrawing.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractFigure.java b/src/main/java/org/jhotdraw/draw/AbstractFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/AbstractFigure.java rename to src/main/java/org/jhotdraw/draw/AbstractFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/AttributeKey.java b/src/main/java/org/jhotdraw/draw/AttributeKey.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/AttributeKey.java rename to src/main/java/org/jhotdraw/draw/AttributeKey.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/AttributeKeys.java b/src/main/java/org/jhotdraw/draw/AttributeKeys.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/AttributeKeys.java rename to src/main/java/org/jhotdraw/draw/AttributeKeys.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/BezierFigure.java b/src/main/java/org/jhotdraw/draw/BezierFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/BezierFigure.java rename to src/main/java/org/jhotdraw/draw/BezierFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/CompositeFigure.java b/src/main/java/org/jhotdraw/draw/CompositeFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/CompositeFigure.java rename to src/main/java/org/jhotdraw/draw/CompositeFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/ConnectionFigure.java b/src/main/java/org/jhotdraw/draw/ConnectionFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/ConnectionFigure.java rename to src/main/java/org/jhotdraw/draw/ConnectionFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/Constrainer.java b/src/main/java/org/jhotdraw/draw/Constrainer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/Constrainer.java rename to src/main/java/org/jhotdraw/draw/Constrainer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DecoratedFigure.java b/src/main/java/org/jhotdraw/draw/DecoratedFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DecoratedFigure.java rename to src/main/java/org/jhotdraw/draw/DecoratedFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawing.java b/src/main/java/org/jhotdraw/draw/DefaultDrawing.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawing.java rename to src/main/java/org/jhotdraw/draw/DefaultDrawing.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingEditor.java b/src/main/java/org/jhotdraw/draw/DefaultDrawingEditor.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingEditor.java rename to src/main/java/org/jhotdraw/draw/DefaultDrawingEditor.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingView.form b/src/main/java/org/jhotdraw/draw/DefaultDrawingView.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingView.form rename to src/main/java/org/jhotdraw/draw/DefaultDrawingView.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingView.java b/src/main/java/org/jhotdraw/draw/DefaultDrawingView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingView.java rename to src/main/java/org/jhotdraw/draw/DefaultDrawingView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingViewBeanInfo.java b/src/main/java/org/jhotdraw/draw/DefaultDrawingViewBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingViewBeanInfo.java rename to src/main/java/org/jhotdraw/draw/DefaultDrawingViewBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingViewTransferHandler.java b/src/main/java/org/jhotdraw/draw/DefaultDrawingViewTransferHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DefaultDrawingViewTransferHandler.java rename to src/main/java/org/jhotdraw/draw/DefaultDrawingViewTransferHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DiamondFigure.java b/src/main/java/org/jhotdraw/draw/DiamondFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DiamondFigure.java rename to src/main/java/org/jhotdraw/draw/DiamondFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/Drawing.java b/src/main/java/org/jhotdraw/draw/Drawing.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/Drawing.java rename to src/main/java/org/jhotdraw/draw/Drawing.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DrawingEditor.java b/src/main/java/org/jhotdraw/draw/DrawingEditor.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DrawingEditor.java rename to src/main/java/org/jhotdraw/draw/DrawingEditor.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DrawingEditorProxy.java b/src/main/java/org/jhotdraw/draw/DrawingEditorProxy.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DrawingEditorProxy.java rename to src/main/java/org/jhotdraw/draw/DrawingEditorProxy.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/DrawingView.java b/src/main/java/org/jhotdraw/draw/DrawingView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/DrawingView.java rename to src/main/java/org/jhotdraw/draw/DrawingView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/EllipseFigure.java b/src/main/java/org/jhotdraw/draw/EllipseFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/EllipseFigure.java rename to src/main/java/org/jhotdraw/draw/EllipseFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/Figure.java b/src/main/java/org/jhotdraw/draw/Figure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/Figure.java rename to src/main/java/org/jhotdraw/draw/Figure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/FigureLayerComparator.java b/src/main/java/org/jhotdraw/draw/FigureLayerComparator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/FigureLayerComparator.java rename to src/main/java/org/jhotdraw/draw/FigureLayerComparator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/GraphicalCompositeFigure.java b/src/main/java/org/jhotdraw/draw/GraphicalCompositeFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/GraphicalCompositeFigure.java rename to src/main/java/org/jhotdraw/draw/GraphicalCompositeFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/GridConstrainer.java b/src/main/java/org/jhotdraw/draw/GridConstrainer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/GridConstrainer.java rename to src/main/java/org/jhotdraw/draw/GridConstrainer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/GroupFigure.java b/src/main/java/org/jhotdraw/draw/GroupFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/GroupFigure.java rename to src/main/java/org/jhotdraw/draw/GroupFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/ImageFigure.java b/src/main/java/org/jhotdraw/draw/ImageFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/ImageFigure.java rename to src/main/java/org/jhotdraw/draw/ImageFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/ImageHolderFigure.java b/src/main/java/org/jhotdraw/draw/ImageHolderFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/ImageHolderFigure.java rename to src/main/java/org/jhotdraw/draw/ImageHolderFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/LabelFigure.java b/src/main/java/org/jhotdraw/draw/LabelFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/LabelFigure.java rename to src/main/java/org/jhotdraw/draw/LabelFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/LabeledLineConnectionFigure.java b/src/main/java/org/jhotdraw/draw/LabeledLineConnectionFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/LabeledLineConnectionFigure.java rename to src/main/java/org/jhotdraw/draw/LabeledLineConnectionFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/Labels.properties b/src/main/java/org/jhotdraw/draw/Labels.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/Labels.properties rename to src/main/java/org/jhotdraw/draw/Labels.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/Labels_de.properties b/src/main/java/org/jhotdraw/draw/Labels_de.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/Labels_de.properties rename to src/main/java/org/jhotdraw/draw/Labels_de.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/LineConnectionFigure.java b/src/main/java/org/jhotdraw/draw/LineConnectionFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/LineConnectionFigure.java rename to src/main/java/org/jhotdraw/draw/LineConnectionFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/LineFigure.java b/src/main/java/org/jhotdraw/draw/LineFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/LineFigure.java rename to src/main/java/org/jhotdraw/draw/LineFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/ListFigure.java b/src/main/java/org/jhotdraw/draw/ListFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/ListFigure.java rename to src/main/java/org/jhotdraw/draw/ListFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/QuadTreeCompositeFigure.java b/src/main/java/org/jhotdraw/draw/QuadTreeCompositeFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/QuadTreeCompositeFigure.java rename to src/main/java/org/jhotdraw/draw/QuadTreeCompositeFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/QuadTreeDrawing.java b/src/main/java/org/jhotdraw/draw/QuadTreeDrawing.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/QuadTreeDrawing.java rename to src/main/java/org/jhotdraw/draw/QuadTreeDrawing.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/RectangleFigure.java b/src/main/java/org/jhotdraw/draw/RectangleFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/RectangleFigure.java rename to src/main/java/org/jhotdraw/draw/RectangleFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/RotationDirection.java b/src/main/java/org/jhotdraw/draw/RotationDirection.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/RotationDirection.java rename to src/main/java/org/jhotdraw/draw/RotationDirection.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/RoundRectangleFigure.java b/src/main/java/org/jhotdraw/draw/RoundRectangleFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/RoundRectangleFigure.java rename to src/main/java/org/jhotdraw/draw/RoundRectangleFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/TextAreaFigure.java b/src/main/java/org/jhotdraw/draw/TextAreaFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/TextAreaFigure.java rename to src/main/java/org/jhotdraw/draw/TextAreaFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/TextFigure.java b/src/main/java/org/jhotdraw/draw/TextFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/TextFigure.java rename to src/main/java/org/jhotdraw/draw/TextFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/TextHolderFigure.java b/src/main/java/org/jhotdraw/draw/TextHolderFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/TextHolderFigure.java rename to src/main/java/org/jhotdraw/draw/TextHolderFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/TranslationDirection.java b/src/main/java/org/jhotdraw/draw/TranslationDirection.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/TranslationDirection.java rename to src/main/java/org/jhotdraw/draw/TranslationDirection.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/TriangleFigure.java b/src/main/java/org/jhotdraw/draw/TriangleFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/TriangleFigure.java rename to src/main/java/org/jhotdraw/draw/TriangleFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/AbstractDrawingEditorAction.java b/src/main/java/org/jhotdraw/draw/action/AbstractDrawingEditorAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/AbstractDrawingEditorAction.java rename to src/main/java/org/jhotdraw/draw/action/AbstractDrawingEditorAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/AbstractDrawingViewAction.java b/src/main/java/org/jhotdraw/draw/action/AbstractDrawingViewAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/AbstractDrawingViewAction.java rename to src/main/java/org/jhotdraw/draw/action/AbstractDrawingViewAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/AbstractSelectedAction.java b/src/main/java/org/jhotdraw/draw/action/AbstractSelectedAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/AbstractSelectedAction.java rename to src/main/java/org/jhotdraw/draw/action/AbstractSelectedAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/AlignAction.java b/src/main/java/org/jhotdraw/draw/action/AlignAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/AlignAction.java rename to src/main/java/org/jhotdraw/draw/action/AlignAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/ApplyAttributesAction.java b/src/main/java/org/jhotdraw/draw/action/ApplyAttributesAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/ApplyAttributesAction.java rename to src/main/java/org/jhotdraw/draw/action/ApplyAttributesAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/AttributeAction.java b/src/main/java/org/jhotdraw/draw/action/AttributeAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/AttributeAction.java rename to src/main/java/org/jhotdraw/draw/action/AttributeAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/AttributeToggler.java b/src/main/java/org/jhotdraw/draw/action/AttributeToggler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/AttributeToggler.java rename to src/main/java/org/jhotdraw/draw/action/AttributeToggler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/BringToFrontAction.java b/src/main/java/org/jhotdraw/draw/action/BringToFrontAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/BringToFrontAction.java rename to src/main/java/org/jhotdraw/draw/action/BringToFrontAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/ButtonFactory.java b/src/main/java/org/jhotdraw/draw/action/ButtonFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/ButtonFactory.java rename to src/main/java/org/jhotdraw/draw/action/ButtonFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/ColorIcon.java b/src/main/java/org/jhotdraw/draw/action/ColorIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/ColorIcon.java rename to src/main/java/org/jhotdraw/draw/action/ColorIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/DefaultAttributeAction.java b/src/main/java/org/jhotdraw/draw/action/DefaultAttributeAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/DefaultAttributeAction.java rename to src/main/java/org/jhotdraw/draw/action/DefaultAttributeAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/DrawingAttributeAction.java b/src/main/java/org/jhotdraw/draw/action/DrawingAttributeAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/DrawingAttributeAction.java rename to src/main/java/org/jhotdraw/draw/action/DrawingAttributeAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/DrawingColorChooserAction.java b/src/main/java/org/jhotdraw/draw/action/DrawingColorChooserAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/DrawingColorChooserAction.java rename to src/main/java/org/jhotdraw/draw/action/DrawingColorChooserAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/DrawingColorChooserHandler.java b/src/main/java/org/jhotdraw/draw/action/DrawingColorChooserHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/DrawingColorChooserHandler.java rename to src/main/java/org/jhotdraw/draw/action/DrawingColorChooserHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/DrawingColorIcon.java b/src/main/java/org/jhotdraw/draw/action/DrawingColorIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/DrawingColorIcon.java rename to src/main/java/org/jhotdraw/draw/action/DrawingColorIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditCanvasAction.java b/src/main/java/org/jhotdraw/draw/action/EditCanvasAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditCanvasAction.java rename to src/main/java/org/jhotdraw/draw/action/EditCanvasAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditCanvasPanel.form b/src/main/java/org/jhotdraw/draw/action/EditCanvasPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditCanvasPanel.form rename to src/main/java/org/jhotdraw/draw/action/EditCanvasPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditCanvasPanel.java b/src/main/java/org/jhotdraw/draw/action/EditCanvasPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditCanvasPanel.java rename to src/main/java/org/jhotdraw/draw/action/EditCanvasPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditGridAction.java b/src/main/java/org/jhotdraw/draw/action/EditGridAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditGridAction.java rename to src/main/java/org/jhotdraw/draw/action/EditGridAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditGridPanel.form b/src/main/java/org/jhotdraw/draw/action/EditGridPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditGridPanel.form rename to src/main/java/org/jhotdraw/draw/action/EditGridPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditGridPanel.java b/src/main/java/org/jhotdraw/draw/action/EditGridPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditGridPanel.java rename to src/main/java/org/jhotdraw/draw/action/EditGridPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditorColorChooserAction.java b/src/main/java/org/jhotdraw/draw/action/EditorColorChooserAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditorColorChooserAction.java rename to src/main/java/org/jhotdraw/draw/action/EditorColorChooserAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditorColorIcon.java b/src/main/java/org/jhotdraw/draw/action/EditorColorIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/EditorColorIcon.java rename to src/main/java/org/jhotdraw/draw/action/EditorColorIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/FontChooserHandler.java b/src/main/java/org/jhotdraw/draw/action/FontChooserHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/FontChooserHandler.java rename to src/main/java/org/jhotdraw/draw/action/FontChooserHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/GroupAction.java b/src/main/java/org/jhotdraw/draw/action/GroupAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/GroupAction.java rename to src/main/java/org/jhotdraw/draw/action/GroupAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/ImageBevelBorder.java b/src/main/java/org/jhotdraw/draw/action/ImageBevelBorder.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/ImageBevelBorder.java rename to src/main/java/org/jhotdraw/draw/action/ImageBevelBorder.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/IncreaseHandleDetailLevelAction.java b/src/main/java/org/jhotdraw/draw/action/IncreaseHandleDetailLevelAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/IncreaseHandleDetailLevelAction.java rename to src/main/java/org/jhotdraw/draw/action/IncreaseHandleDetailLevelAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/LineDecorationIcon.java b/src/main/java/org/jhotdraw/draw/action/LineDecorationIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/LineDecorationIcon.java rename to src/main/java/org/jhotdraw/draw/action/LineDecorationIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/MoveAction.java b/src/main/java/org/jhotdraw/draw/action/MoveAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/MoveAction.java rename to src/main/java/org/jhotdraw/draw/action/MoveAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/MoveConstrainedAction.java b/src/main/java/org/jhotdraw/draw/action/MoveConstrainedAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/MoveConstrainedAction.java rename to src/main/java/org/jhotdraw/draw/action/MoveConstrainedAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/PickAttributesAction.java b/src/main/java/org/jhotdraw/draw/action/PickAttributesAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/PickAttributesAction.java rename to src/main/java/org/jhotdraw/draw/action/PickAttributesAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/SelectSameAction.java b/src/main/java/org/jhotdraw/draw/action/SelectSameAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/SelectSameAction.java rename to src/main/java/org/jhotdraw/draw/action/SelectSameAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/SelectionColorChooserAction.java b/src/main/java/org/jhotdraw/draw/action/SelectionColorChooserAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/SelectionColorChooserAction.java rename to src/main/java/org/jhotdraw/draw/action/SelectionColorChooserAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/SelectionColorChooserHandler.java b/src/main/java/org/jhotdraw/draw/action/SelectionColorChooserHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/SelectionColorChooserHandler.java rename to src/main/java/org/jhotdraw/draw/action/SelectionColorChooserHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/SelectionColorIcon.java b/src/main/java/org/jhotdraw/draw/action/SelectionColorIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/SelectionColorIcon.java rename to src/main/java/org/jhotdraw/draw/action/SelectionColorIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/SendToBackAction.java b/src/main/java/org/jhotdraw/draw/action/SendToBackAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/SendToBackAction.java rename to src/main/java/org/jhotdraw/draw/action/SendToBackAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/StrokeIcon.java b/src/main/java/org/jhotdraw/draw/action/StrokeIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/StrokeIcon.java rename to src/main/java/org/jhotdraw/draw/action/StrokeIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/ToggleGridAction.java b/src/main/java/org/jhotdraw/draw/action/ToggleGridAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/ToggleGridAction.java rename to src/main/java/org/jhotdraw/draw/action/ToggleGridAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/UngroupAction.java b/src/main/java/org/jhotdraw/draw/action/UngroupAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/UngroupAction.java rename to src/main/java/org/jhotdraw/draw/action/UngroupAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/ZoomAction.java b/src/main/java/org/jhotdraw/draw/action/ZoomAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/ZoomAction.java rename to src/main/java/org/jhotdraw/draw/action/ZoomAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/ZoomEditorAction.java b/src/main/java/org/jhotdraw/draw/action/ZoomEditorAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/ZoomEditorAction.java rename to src/main/java/org/jhotdraw/draw/action/ZoomEditorAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/actions.png b/src/main/java/org/jhotdraw/draw/action/images/actions.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/actions.png rename to src/main/java/org/jhotdraw/draw/action/images/actions.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignEast.png b/src/main/java/org/jhotdraw/draw/action/images/alignEast.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignEast.png rename to src/main/java/org/jhotdraw/draw/action/images/alignEast.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignGrid.png b/src/main/java/org/jhotdraw/draw/action/images/alignGrid.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignGrid.png rename to src/main/java/org/jhotdraw/draw/action/images/alignGrid.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignGridSmall.png b/src/main/java/org/jhotdraw/draw/action/images/alignGridSmall.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignGridSmall.png rename to src/main/java/org/jhotdraw/draw/action/images/alignGridSmall.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignHorizontal.png b/src/main/java/org/jhotdraw/draw/action/images/alignHorizontal.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignHorizontal.png rename to src/main/java/org/jhotdraw/draw/action/images/alignHorizontal.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignNorth.png b/src/main/java/org/jhotdraw/draw/action/images/alignNorth.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignNorth.png rename to src/main/java/org/jhotdraw/draw/action/images/alignNorth.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignSouth.png b/src/main/java/org/jhotdraw/draw/action/images/alignSouth.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignSouth.png rename to src/main/java/org/jhotdraw/draw/action/images/alignSouth.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignVertical.png b/src/main/java/org/jhotdraw/draw/action/images/alignVertical.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignVertical.png rename to src/main/java/org/jhotdraw/draw/action/images/alignVertical.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignWest.png b/src/main/java/org/jhotdraw/draw/action/images/alignWest.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/alignWest.png rename to src/main/java/org/jhotdraw/draw/action/images/alignWest.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attribute.color.colorChooser.png b/src/main/java/org/jhotdraw/draw/action/images/attribute.color.colorChooser.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attribute.color.colorChooser.png rename to src/main/java/org/jhotdraw/draw/action/images/attribute.color.colorChooser.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attribute.color.noColor.png b/src/main/java/org/jhotdraw/draw/action/images/attribute.color.noColor.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attribute.color.noColor.png rename to src/main/java/org/jhotdraw/draw/action/images/attribute.color.noColor.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFillColor.png b/src/main/java/org/jhotdraw/draw/action/images/attributeFillColor.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFillColor.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeFillColor.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFont.png b/src/main/java/org/jhotdraw/draw/action/images/attributeFont.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFont.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeFont.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontBold.png b/src/main/java/org/jhotdraw/draw/action/images/attributeFontBold.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontBold.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeFontBold.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontBold_de.png b/src/main/java/org/jhotdraw/draw/action/images/attributeFontBold_de.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontBold_de.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeFontBold_de.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontItalic.png b/src/main/java/org/jhotdraw/draw/action/images/attributeFontItalic.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontItalic.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeFontItalic.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontItalic_de.png b/src/main/java/org/jhotdraw/draw/action/images/attributeFontItalic_de.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontItalic_de.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeFontItalic_de.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline.png b/src/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline_de.png b/src/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline_de.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline_de.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeFontUnderline_de.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeOpacity.png b/src/main/java/org/jhotdraw/draw/action/images/attributeOpacity.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeOpacity.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeOpacity.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeCap.png b/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeCap.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeCap.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeStrokeCap.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeColor.png b/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeColor.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeColor.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeStrokeColor.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeDashes.png b/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeDashes.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeDashes.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeStrokeDashes.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeDecoration.png b/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeDecoration.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeDecoration.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeStrokeDecoration.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeJoin.png b/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeJoin.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeJoin.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeStrokeJoin.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokePlacement.png b/src/main/java/org/jhotdraw/draw/action/images/attributeStrokePlacement.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokePlacement.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeStrokePlacement.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeType.png b/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeType.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeType.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeStrokeType.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeWidth.png b/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeWidth.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeStrokeWidth.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeStrokeWidth.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeTextColor.png b/src/main/java/org/jhotdraw/draw/action/images/attributeTextColor.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributeTextColor.png rename to src/main/java/org/jhotdraw/draw/action/images/attributeTextColor.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributesApply.png b/src/main/java/org/jhotdraw/draw/action/images/attributesApply.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributesApply.png rename to src/main/java/org/jhotdraw/draw/action/images/attributesApply.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributesPick.png b/src/main/java/org/jhotdraw/draw/action/images/attributesPick.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/attributesPick.png rename to src/main/java/org/jhotdraw/draw/action/images/attributesPick.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createArrow.png b/src/main/java/org/jhotdraw/draw/action/images/createArrow.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createArrow.png rename to src/main/java/org/jhotdraw/draw/action/images/createArrow.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createCurvedConnection.png b/src/main/java/org/jhotdraw/draw/action/images/createCurvedConnection.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createCurvedConnection.png rename to src/main/java/org/jhotdraw/draw/action/images/createCurvedConnection.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createDiamond.png b/src/main/java/org/jhotdraw/draw/action/images/createDiamond.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createDiamond.png rename to src/main/java/org/jhotdraw/draw/action/images/createDiamond.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createElbowConnection.png b/src/main/java/org/jhotdraw/draw/action/images/createElbowConnection.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createElbowConnection.png rename to src/main/java/org/jhotdraw/draw/action/images/createElbowConnection.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createEllipse.png b/src/main/java/org/jhotdraw/draw/action/images/createEllipse.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createEllipse.png rename to src/main/java/org/jhotdraw/draw/action/images/createEllipse.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createImage.png b/src/main/java/org/jhotdraw/draw/action/images/createImage.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createImage.png rename to src/main/java/org/jhotdraw/draw/action/images/createImage.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createLine.png b/src/main/java/org/jhotdraw/draw/action/images/createLine.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createLine.png rename to src/main/java/org/jhotdraw/draw/action/images/createLine.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createLineConnection.png b/src/main/java/org/jhotdraw/draw/action/images/createLineConnection.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createLineConnection.png rename to src/main/java/org/jhotdraw/draw/action/images/createLineConnection.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createPolygon.png b/src/main/java/org/jhotdraw/draw/action/images/createPolygon.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createPolygon.png rename to src/main/java/org/jhotdraw/draw/action/images/createPolygon.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createRectangle.png b/src/main/java/org/jhotdraw/draw/action/images/createRectangle.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createRectangle.png rename to src/main/java/org/jhotdraw/draw/action/images/createRectangle.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createRoundRectangle.png b/src/main/java/org/jhotdraw/draw/action/images/createRoundRectangle.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createRoundRectangle.png rename to src/main/java/org/jhotdraw/draw/action/images/createRoundRectangle.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createScribble.png b/src/main/java/org/jhotdraw/draw/action/images/createScribble.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createScribble.png rename to src/main/java/org/jhotdraw/draw/action/images/createScribble.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createText.png b/src/main/java/org/jhotdraw/draw/action/images/createText.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createText.png rename to src/main/java/org/jhotdraw/draw/action/images/createText.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createTextArea.png b/src/main/java/org/jhotdraw/draw/action/images/createTextArea.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createTextArea.png rename to src/main/java/org/jhotdraw/draw/action/images/createTextArea.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createTriangle.png b/src/main/java/org/jhotdraw/draw/action/images/createTriangle.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/createTriangle.png rename to src/main/java/org/jhotdraw/draw/action/images/createTriangle.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editCopy.png b/src/main/java/org/jhotdraw/draw/action/images/editCopy.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editCopy.png rename to src/main/java/org/jhotdraw/draw/action/images/editCopy.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editCut.png b/src/main/java/org/jhotdraw/draw/action/images/editCut.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editCut.png rename to src/main/java/org/jhotdraw/draw/action/images/editCut.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editPaste.png b/src/main/java/org/jhotdraw/draw/action/images/editPaste.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editPaste.png rename to src/main/java/org/jhotdraw/draw/action/images/editPaste.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editRedo.png b/src/main/java/org/jhotdraw/draw/action/images/editRedo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editRedo.png rename to src/main/java/org/jhotdraw/draw/action/images/editRedo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editUndo.png b/src/main/java/org/jhotdraw/draw/action/images/editUndo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/editUndo.png rename to src/main/java/org/jhotdraw/draw/action/images/editUndo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/fileNew.png b/src/main/java/org/jhotdraw/draw/action/images/fileNew.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/fileNew.png rename to src/main/java/org/jhotdraw/draw/action/images/fileNew.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/fileOpen.png b/src/main/java/org/jhotdraw/draw/action/images/fileOpen.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/fileOpen.png rename to src/main/java/org/jhotdraw/draw/action/images/fileOpen.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/filePrint.png b/src/main/java/org/jhotdraw/draw/action/images/filePrint.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/filePrint.png rename to src/main/java/org/jhotdraw/draw/action/images/filePrint.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/fileSave.png b/src/main/java/org/jhotdraw/draw/action/images/fileSave.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/fileSave.png rename to src/main/java/org/jhotdraw/draw/action/images/fileSave.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveDown.png b/src/main/java/org/jhotdraw/draw/action/images/moveDown.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveDown.png rename to src/main/java/org/jhotdraw/draw/action/images/moveDown.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveEast.png b/src/main/java/org/jhotdraw/draw/action/images/moveEast.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveEast.png rename to src/main/java/org/jhotdraw/draw/action/images/moveEast.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveNorth.png b/src/main/java/org/jhotdraw/draw/action/images/moveNorth.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveNorth.png rename to src/main/java/org/jhotdraw/draw/action/images/moveNorth.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveSouth.png b/src/main/java/org/jhotdraw/draw/action/images/moveSouth.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveSouth.png rename to src/main/java/org/jhotdraw/draw/action/images/moveSouth.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveToBack.png b/src/main/java/org/jhotdraw/draw/action/images/moveToBack.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveToBack.png rename to src/main/java/org/jhotdraw/draw/action/images/moveToBack.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveToFront.png b/src/main/java/org/jhotdraw/draw/action/images/moveToFront.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveToFront.png rename to src/main/java/org/jhotdraw/draw/action/images/moveToFront.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveUp.png b/src/main/java/org/jhotdraw/draw/action/images/moveUp.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveUp.png rename to src/main/java/org/jhotdraw/draw/action/images/moveUp.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveWest.png b/src/main/java/org/jhotdraw/draw/action/images/moveWest.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/moveWest.png rename to src/main/java/org/jhotdraw/draw/action/images/moveWest.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/popupIcon.png b/src/main/java/org/jhotdraw/draw/action/images/popupIcon.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/popupIcon.png rename to src/main/java/org/jhotdraw/draw/action/images/popupIcon.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/selectionGroup.png b/src/main/java/org/jhotdraw/draw/action/images/selectionGroup.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/selectionGroup.png rename to src/main/java/org/jhotdraw/draw/action/images/selectionGroup.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/selectionTool.png b/src/main/java/org/jhotdraw/draw/action/images/selectionTool.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/selectionTool.png rename to src/main/java/org/jhotdraw/draw/action/images/selectionTool.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/selectionUngroup.png b/src/main/java/org/jhotdraw/draw/action/images/selectionUngroup.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/selectionUngroup.png rename to src/main/java/org/jhotdraw/draw/action/images/selectionUngroup.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/spacerIcon.png b/src/main/java/org/jhotdraw/draw/action/images/spacerIcon.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/images/spacerIcon.png rename to src/main/java/org/jhotdraw/draw/action/images/spacerIcon.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/action/package-info.java b/src/main/java/org/jhotdraw/draw/action/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/action/package-info.java rename to src/main/java/org/jhotdraw/draw/action/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/AbstractConnector.java b/src/main/java/org/jhotdraw/draw/connector/AbstractConnector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/AbstractConnector.java rename to src/main/java/org/jhotdraw/draw/connector/AbstractConnector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopBezierConnector.java b/src/main/java/org/jhotdraw/draw/connector/ChopBezierConnector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopBezierConnector.java rename to src/main/java/org/jhotdraw/draw/connector/ChopBezierConnector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopDiamondConnector.java b/src/main/java/org/jhotdraw/draw/connector/ChopDiamondConnector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopDiamondConnector.java rename to src/main/java/org/jhotdraw/draw/connector/ChopDiamondConnector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopEllipseConnector.java b/src/main/java/org/jhotdraw/draw/connector/ChopEllipseConnector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopEllipseConnector.java rename to src/main/java/org/jhotdraw/draw/connector/ChopEllipseConnector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopRectangleConnector.java b/src/main/java/org/jhotdraw/draw/connector/ChopRectangleConnector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopRectangleConnector.java rename to src/main/java/org/jhotdraw/draw/connector/ChopRectangleConnector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopRoundRectangleConnector.java b/src/main/java/org/jhotdraw/draw/connector/ChopRoundRectangleConnector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopRoundRectangleConnector.java rename to src/main/java/org/jhotdraw/draw/connector/ChopRoundRectangleConnector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopTriangleConnector.java b/src/main/java/org/jhotdraw/draw/connector/ChopTriangleConnector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/ChopTriangleConnector.java rename to src/main/java/org/jhotdraw/draw/connector/ChopTriangleConnector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/Connector.java b/src/main/java/org/jhotdraw/draw/connector/Connector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/Connector.java rename to src/main/java/org/jhotdraw/draw/connector/Connector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/LocatorConnector.java b/src/main/java/org/jhotdraw/draw/connector/LocatorConnector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/LocatorConnector.java rename to src/main/java/org/jhotdraw/draw/connector/LocatorConnector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/StickyRectangleConnector.java b/src/main/java/org/jhotdraw/draw/connector/StickyRectangleConnector.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/StickyRectangleConnector.java rename to src/main/java/org/jhotdraw/draw/connector/StickyRectangleConnector.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/connector/package-info.java b/src/main/java/org/jhotdraw/draw/connector/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/connector/package-info.java rename to src/main/java/org/jhotdraw/draw/connector/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/AbstractLineDecoration.java b/src/main/java/org/jhotdraw/draw/decoration/AbstractLineDecoration.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/AbstractLineDecoration.java rename to src/main/java/org/jhotdraw/draw/decoration/AbstractLineDecoration.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/ArrowTip.java b/src/main/java/org/jhotdraw/draw/decoration/ArrowTip.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/ArrowTip.java rename to src/main/java/org/jhotdraw/draw/decoration/ArrowTip.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/CompositeLineDecoration.java b/src/main/java/org/jhotdraw/draw/decoration/CompositeLineDecoration.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/CompositeLineDecoration.java rename to src/main/java/org/jhotdraw/draw/decoration/CompositeLineDecoration.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/GeneralPathTip.java b/src/main/java/org/jhotdraw/draw/decoration/GeneralPathTip.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/GeneralPathTip.java rename to src/main/java/org/jhotdraw/draw/decoration/GeneralPathTip.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/LineDecoration.java b/src/main/java/org/jhotdraw/draw/decoration/LineDecoration.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/LineDecoration.java rename to src/main/java/org/jhotdraw/draw/decoration/LineDecoration.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/PerpendicularBar.java b/src/main/java/org/jhotdraw/draw/decoration/PerpendicularBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/PerpendicularBar.java rename to src/main/java/org/jhotdraw/draw/decoration/PerpendicularBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/package-info.java b/src/main/java/org/jhotdraw/draw/decoration/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/decoration/package-info.java rename to src/main/java/org/jhotdraw/draw/decoration/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/AbstractAttributeEditorHandler.java b/src/main/java/org/jhotdraw/draw/event/AbstractAttributeEditorHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/AbstractAttributeEditorHandler.java rename to src/main/java/org/jhotdraw/draw/event/AbstractAttributeEditorHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/AttributeChangeEdit.java b/src/main/java/org/jhotdraw/draw/event/AttributeChangeEdit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/AttributeChangeEdit.java rename to src/main/java/org/jhotdraw/draw/event/AttributeChangeEdit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/BezierNodeEdit.java b/src/main/java/org/jhotdraw/draw/event/BezierNodeEdit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/BezierNodeEdit.java rename to src/main/java/org/jhotdraw/draw/event/BezierNodeEdit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/CompositeFigureEdit.java b/src/main/java/org/jhotdraw/draw/event/CompositeFigureEdit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/CompositeFigureEdit.java rename to src/main/java/org/jhotdraw/draw/event/CompositeFigureEdit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/CompositeFigureEvent.java b/src/main/java/org/jhotdraw/draw/event/CompositeFigureEvent.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/CompositeFigureEvent.java rename to src/main/java/org/jhotdraw/draw/event/CompositeFigureEvent.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/CompositeFigureListener.java b/src/main/java/org/jhotdraw/draw/event/CompositeFigureListener.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/CompositeFigureListener.java rename to src/main/java/org/jhotdraw/draw/event/CompositeFigureListener.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/DrawingAttributeEditorHandler.java b/src/main/java/org/jhotdraw/draw/event/DrawingAttributeEditorHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/DrawingAttributeEditorHandler.java rename to src/main/java/org/jhotdraw/draw/event/DrawingAttributeEditorHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/DrawingComponentRepainter.java b/src/main/java/org/jhotdraw/draw/event/DrawingComponentRepainter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/DrawingComponentRepainter.java rename to src/main/java/org/jhotdraw/draw/event/DrawingComponentRepainter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureAdapter.java b/src/main/java/org/jhotdraw/draw/event/FigureAdapter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureAdapter.java rename to src/main/java/org/jhotdraw/draw/event/FigureAdapter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureAttributeEditorHandler.java b/src/main/java/org/jhotdraw/draw/event/FigureAttributeEditorHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureAttributeEditorHandler.java rename to src/main/java/org/jhotdraw/draw/event/FigureAttributeEditorHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureEvent.java b/src/main/java/org/jhotdraw/draw/event/FigureEvent.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureEvent.java rename to src/main/java/org/jhotdraw/draw/event/FigureEvent.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureListener.java b/src/main/java/org/jhotdraw/draw/event/FigureListener.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureListener.java rename to src/main/java/org/jhotdraw/draw/event/FigureListener.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureSelectionEvent.java b/src/main/java/org/jhotdraw/draw/event/FigureSelectionEvent.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureSelectionEvent.java rename to src/main/java/org/jhotdraw/draw/event/FigureSelectionEvent.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureSelectionListener.java b/src/main/java/org/jhotdraw/draw/event/FigureSelectionListener.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/FigureSelectionListener.java rename to src/main/java/org/jhotdraw/draw/event/FigureSelectionListener.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/HandleEvent.java b/src/main/java/org/jhotdraw/draw/event/HandleEvent.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/HandleEvent.java rename to src/main/java/org/jhotdraw/draw/event/HandleEvent.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/HandleListener.java b/src/main/java/org/jhotdraw/draw/event/HandleListener.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/HandleListener.java rename to src/main/java/org/jhotdraw/draw/event/HandleListener.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/HandleMulticaster.java b/src/main/java/org/jhotdraw/draw/event/HandleMulticaster.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/HandleMulticaster.java rename to src/main/java/org/jhotdraw/draw/event/HandleMulticaster.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/SelectionComponentDisplayer.java b/src/main/java/org/jhotdraw/draw/event/SelectionComponentDisplayer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/SelectionComponentDisplayer.java rename to src/main/java/org/jhotdraw/draw/event/SelectionComponentDisplayer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/SelectionComponentRepainter.java b/src/main/java/org/jhotdraw/draw/event/SelectionComponentRepainter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/SelectionComponentRepainter.java rename to src/main/java/org/jhotdraw/draw/event/SelectionComponentRepainter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/SetBoundsEdit.java b/src/main/java/org/jhotdraw/draw/event/SetBoundsEdit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/SetBoundsEdit.java rename to src/main/java/org/jhotdraw/draw/event/SetBoundsEdit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/ToolAdapter.java b/src/main/java/org/jhotdraw/draw/event/ToolAdapter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/ToolAdapter.java rename to src/main/java/org/jhotdraw/draw/event/ToolAdapter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/ToolEvent.java b/src/main/java/org/jhotdraw/draw/event/ToolEvent.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/ToolEvent.java rename to src/main/java/org/jhotdraw/draw/event/ToolEvent.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/ToolListener.java b/src/main/java/org/jhotdraw/draw/event/ToolListener.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/ToolListener.java rename to src/main/java/org/jhotdraw/draw/event/ToolListener.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/TransformEdit.java b/src/main/java/org/jhotdraw/draw/event/TransformEdit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/TransformEdit.java rename to src/main/java/org/jhotdraw/draw/event/TransformEdit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/TransformRestoreEdit.java b/src/main/java/org/jhotdraw/draw/event/TransformRestoreEdit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/TransformRestoreEdit.java rename to src/main/java/org/jhotdraw/draw/event/TransformRestoreEdit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/event/package-info.java b/src/main/java/org/jhotdraw/draw/event/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/event/package-info.java rename to src/main/java/org/jhotdraw/draw/event/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeSlider.form b/src/main/java/org/jhotdraw/draw/gui/JAttributeSlider.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeSlider.form rename to src/main/java/org/jhotdraw/draw/gui/JAttributeSlider.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeSlider.java b/src/main/java/org/jhotdraw/draw/gui/JAttributeSlider.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeSlider.java rename to src/main/java/org/jhotdraw/draw/gui/JAttributeSlider.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeSliderBeanInfo.java b/src/main/java/org/jhotdraw/draw/gui/JAttributeSliderBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeSliderBeanInfo.java rename to src/main/java/org/jhotdraw/draw/gui/JAttributeSliderBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.form b/src/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.form rename to src/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.java b/src/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.java rename to src/main/java/org/jhotdraw/draw/gui/JAttributeTextArea.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextAreaBeanInfo.java b/src/main/java/org/jhotdraw/draw/gui/JAttributeTextAreaBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextAreaBeanInfo.java rename to src/main/java/org/jhotdraw/draw/gui/JAttributeTextAreaBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextField.form b/src/main/java/org/jhotdraw/draw/gui/JAttributeTextField.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextField.form rename to src/main/java/org/jhotdraw/draw/gui/JAttributeTextField.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextField.java b/src/main/java/org/jhotdraw/draw/gui/JAttributeTextField.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextField.java rename to src/main/java/org/jhotdraw/draw/gui/JAttributeTextField.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextFieldBeanInfo.java b/src/main/java/org/jhotdraw/draw/gui/JAttributeTextFieldBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/JAttributeTextFieldBeanInfo.java rename to src/main/java/org/jhotdraw/draw/gui/JAttributeTextFieldBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/gui/package-info.java b/src/main/java/org/jhotdraw/draw/gui/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/gui/package-info.java rename to src/main/java/org/jhotdraw/draw/gui/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/AbstractConnectionHandle.java b/src/main/java/org/jhotdraw/draw/handle/AbstractConnectionHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/AbstractConnectionHandle.java rename to src/main/java/org/jhotdraw/draw/handle/AbstractConnectionHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/AbstractHandle.java b/src/main/java/org/jhotdraw/draw/handle/AbstractHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/AbstractHandle.java rename to src/main/java/org/jhotdraw/draw/handle/AbstractHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/AbstractRotateHandle.java b/src/main/java/org/jhotdraw/draw/handle/AbstractRotateHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/AbstractRotateHandle.java rename to src/main/java/org/jhotdraw/draw/handle/AbstractRotateHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BezierControlPointHandle.java b/src/main/java/org/jhotdraw/draw/handle/BezierControlPointHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BezierControlPointHandle.java rename to src/main/java/org/jhotdraw/draw/handle/BezierControlPointHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BezierNodeHandle.java b/src/main/java/org/jhotdraw/draw/handle/BezierNodeHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BezierNodeHandle.java rename to src/main/java/org/jhotdraw/draw/handle/BezierNodeHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BezierOutlineHandle.java b/src/main/java/org/jhotdraw/draw/handle/BezierOutlineHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BezierOutlineHandle.java rename to src/main/java/org/jhotdraw/draw/handle/BezierOutlineHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BezierScaleHandle.java b/src/main/java/org/jhotdraw/draw/handle/BezierScaleHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BezierScaleHandle.java rename to src/main/java/org/jhotdraw/draw/handle/BezierScaleHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BoundsOutlineHandle.java b/src/main/java/org/jhotdraw/draw/handle/BoundsOutlineHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/BoundsOutlineHandle.java rename to src/main/java/org/jhotdraw/draw/handle/BoundsOutlineHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/CloseHandle.java b/src/main/java/org/jhotdraw/draw/handle/CloseHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/CloseHandle.java rename to src/main/java/org/jhotdraw/draw/handle/CloseHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/ConnectionEndHandle.java b/src/main/java/org/jhotdraw/draw/handle/ConnectionEndHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/ConnectionEndHandle.java rename to src/main/java/org/jhotdraw/draw/handle/ConnectionEndHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/ConnectionStartHandle.java b/src/main/java/org/jhotdraw/draw/handle/ConnectionStartHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/ConnectionStartHandle.java rename to src/main/java/org/jhotdraw/draw/handle/ConnectionStartHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/ConnectorHandle.java b/src/main/java/org/jhotdraw/draw/handle/ConnectorHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/ConnectorHandle.java rename to src/main/java/org/jhotdraw/draw/handle/ConnectorHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/DragHandle.java b/src/main/java/org/jhotdraw/draw/handle/DragHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/DragHandle.java rename to src/main/java/org/jhotdraw/draw/handle/DragHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/FontSizeHandle.java b/src/main/java/org/jhotdraw/draw/handle/FontSizeHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/FontSizeHandle.java rename to src/main/java/org/jhotdraw/draw/handle/FontSizeHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/Handle.java b/src/main/java/org/jhotdraw/draw/handle/Handle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/Handle.java rename to src/main/java/org/jhotdraw/draw/handle/Handle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/HandleAttributeKeys.java b/src/main/java/org/jhotdraw/draw/handle/HandleAttributeKeys.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/HandleAttributeKeys.java rename to src/main/java/org/jhotdraw/draw/handle/HandleAttributeKeys.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/LocatorHandle.java b/src/main/java/org/jhotdraw/draw/handle/LocatorHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/LocatorHandle.java rename to src/main/java/org/jhotdraw/draw/handle/LocatorHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/MoveHandle.java b/src/main/java/org/jhotdraw/draw/handle/MoveHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/MoveHandle.java rename to src/main/java/org/jhotdraw/draw/handle/MoveHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/NullHandle.java b/src/main/java/org/jhotdraw/draw/handle/NullHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/NullHandle.java rename to src/main/java/org/jhotdraw/draw/handle/NullHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/OrientationHandle.java b/src/main/java/org/jhotdraw/draw/handle/OrientationHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/OrientationHandle.java rename to src/main/java/org/jhotdraw/draw/handle/OrientationHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/ResizeHandleKit.java b/src/main/java/org/jhotdraw/draw/handle/ResizeHandleKit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/ResizeHandleKit.java rename to src/main/java/org/jhotdraw/draw/handle/ResizeHandleKit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/RotateHandle.java b/src/main/java/org/jhotdraw/draw/handle/RotateHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/RotateHandle.java rename to src/main/java/org/jhotdraw/draw/handle/RotateHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/RoundRectangleRadiusHandle.java b/src/main/java/org/jhotdraw/draw/handle/RoundRectangleRadiusHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/RoundRectangleRadiusHandle.java rename to src/main/java/org/jhotdraw/draw/handle/RoundRectangleRadiusHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/TextOverflowHandle.java b/src/main/java/org/jhotdraw/draw/handle/TextOverflowHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/TextOverflowHandle.java rename to src/main/java/org/jhotdraw/draw/handle/TextOverflowHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/TransformHandleKit.java b/src/main/java/org/jhotdraw/draw/handle/TransformHandleKit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/TransformHandleKit.java rename to src/main/java/org/jhotdraw/draw/handle/TransformHandleKit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/handle/package-info.java b/src/main/java/org/jhotdraw/draw/handle/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/handle/package-info.java rename to src/main/java/org/jhotdraw/draw/handle/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/io/DOMStorableInputOutputFormat.java b/src/main/java/org/jhotdraw/draw/io/DOMStorableInputOutputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/io/DOMStorableInputOutputFormat.java rename to src/main/java/org/jhotdraw/draw/io/DOMStorableInputOutputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/io/ImageInputFormat.java b/src/main/java/org/jhotdraw/draw/io/ImageInputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/io/ImageInputFormat.java rename to src/main/java/org/jhotdraw/draw/io/ImageInputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/io/ImageOutputFormat.java b/src/main/java/org/jhotdraw/draw/io/ImageOutputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/io/ImageOutputFormat.java rename to src/main/java/org/jhotdraw/draw/io/ImageOutputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/io/InputFormat.java b/src/main/java/org/jhotdraw/draw/io/InputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/io/InputFormat.java rename to src/main/java/org/jhotdraw/draw/io/InputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/io/OutputFormat.java b/src/main/java/org/jhotdraw/draw/io/OutputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/io/OutputFormat.java rename to src/main/java/org/jhotdraw/draw/io/OutputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/io/SerializationInputOutputFormat.java b/src/main/java/org/jhotdraw/draw/io/SerializationInputOutputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/io/SerializationInputOutputFormat.java rename to src/main/java/org/jhotdraw/draw/io/SerializationInputOutputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/io/TextInputFormat.java b/src/main/java/org/jhotdraw/draw/io/TextInputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/io/TextInputFormat.java rename to src/main/java/org/jhotdraw/draw/io/TextInputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/io/package-info.java b/src/main/java/org/jhotdraw/draw/io/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/io/package-info.java rename to src/main/java/org/jhotdraw/draw/io/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/AbstractLayouter.java b/src/main/java/org/jhotdraw/draw/layouter/AbstractLayouter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/AbstractLayouter.java rename to src/main/java/org/jhotdraw/draw/layouter/AbstractLayouter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/HorizontalLayouter.java b/src/main/java/org/jhotdraw/draw/layouter/HorizontalLayouter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/HorizontalLayouter.java rename to src/main/java/org/jhotdraw/draw/layouter/HorizontalLayouter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/Layouter.java b/src/main/java/org/jhotdraw/draw/layouter/Layouter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/Layouter.java rename to src/main/java/org/jhotdraw/draw/layouter/Layouter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/LocatorLayouter.java b/src/main/java/org/jhotdraw/draw/layouter/LocatorLayouter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/LocatorLayouter.java rename to src/main/java/org/jhotdraw/draw/layouter/LocatorLayouter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/VerticalLayouter.java b/src/main/java/org/jhotdraw/draw/layouter/VerticalLayouter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/VerticalLayouter.java rename to src/main/java/org/jhotdraw/draw/layouter/VerticalLayouter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/package-info.java b/src/main/java/org/jhotdraw/draw/layouter/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/layouter/package-info.java rename to src/main/java/org/jhotdraw/draw/layouter/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/liner/CurvedLiner.java b/src/main/java/org/jhotdraw/draw/liner/CurvedLiner.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/liner/CurvedLiner.java rename to src/main/java/org/jhotdraw/draw/liner/CurvedLiner.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/liner/ElbowLiner.java b/src/main/java/org/jhotdraw/draw/liner/ElbowLiner.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/liner/ElbowLiner.java rename to src/main/java/org/jhotdraw/draw/liner/ElbowLiner.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/liner/Liner.java b/src/main/java/org/jhotdraw/draw/liner/Liner.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/liner/Liner.java rename to src/main/java/org/jhotdraw/draw/liner/Liner.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/liner/SlantedLiner.java b/src/main/java/org/jhotdraw/draw/liner/SlantedLiner.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/liner/SlantedLiner.java rename to src/main/java/org/jhotdraw/draw/liner/SlantedLiner.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/liner/package-info.java b/src/main/java/org/jhotdraw/draw/liner/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/liner/package-info.java rename to src/main/java/org/jhotdraw/draw/liner/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/locator/AbstractLocator.java b/src/main/java/org/jhotdraw/draw/locator/AbstractLocator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/locator/AbstractLocator.java rename to src/main/java/org/jhotdraw/draw/locator/AbstractLocator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/locator/BezierLabelLocator.java b/src/main/java/org/jhotdraw/draw/locator/BezierLabelLocator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/locator/BezierLabelLocator.java rename to src/main/java/org/jhotdraw/draw/locator/BezierLabelLocator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/locator/BezierPointLocator.java b/src/main/java/org/jhotdraw/draw/locator/BezierPointLocator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/locator/BezierPointLocator.java rename to src/main/java/org/jhotdraw/draw/locator/BezierPointLocator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/locator/FontSizeLocator.java b/src/main/java/org/jhotdraw/draw/locator/FontSizeLocator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/locator/FontSizeLocator.java rename to src/main/java/org/jhotdraw/draw/locator/FontSizeLocator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/locator/Locator.java b/src/main/java/org/jhotdraw/draw/locator/Locator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/locator/Locator.java rename to src/main/java/org/jhotdraw/draw/locator/Locator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/locator/RelativeDecoratorLocator.java b/src/main/java/org/jhotdraw/draw/locator/RelativeDecoratorLocator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/locator/RelativeDecoratorLocator.java rename to src/main/java/org/jhotdraw/draw/locator/RelativeDecoratorLocator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/locator/RelativeLocator.java b/src/main/java/org/jhotdraw/draw/locator/RelativeLocator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/locator/RelativeLocator.java rename to src/main/java/org/jhotdraw/draw/locator/RelativeLocator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/locator/package-info.java b/src/main/java/org/jhotdraw/draw/locator/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/locator/package-info.java rename to src/main/java/org/jhotdraw/draw/locator/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/package-info.java b/src/main/java/org/jhotdraw/draw/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/package-info.java rename to src/main/java/org/jhotdraw/draw/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/print/DrawingPageable.java b/src/main/java/org/jhotdraw/draw/print/DrawingPageable.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/print/DrawingPageable.java rename to src/main/java/org/jhotdraw/draw/print/DrawingPageable.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/print/package-info.java b/src/main/java/org/jhotdraw/draw/print/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/print/package-info.java rename to src/main/java/org/jhotdraw/draw/print/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/text/FloatingTextArea.java b/src/main/java/org/jhotdraw/draw/text/FloatingTextArea.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/text/FloatingTextArea.java rename to src/main/java/org/jhotdraw/draw/text/FloatingTextArea.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/text/FloatingTextField.java b/src/main/java/org/jhotdraw/draw/text/FloatingTextField.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/text/FloatingTextField.java rename to src/main/java/org/jhotdraw/draw/text/FloatingTextField.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/text/package-info.java b/src/main/java/org/jhotdraw/draw/text/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/text/package-info.java rename to src/main/java/org/jhotdraw/draw/text/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/AbstractTool.java b/src/main/java/org/jhotdraw/draw/tool/AbstractTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/AbstractTool.java rename to src/main/java/org/jhotdraw/draw/tool/AbstractTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/BezierTool.java b/src/main/java/org/jhotdraw/draw/tool/BezierTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/BezierTool.java rename to src/main/java/org/jhotdraw/draw/tool/BezierTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/ConnectionTool.java b/src/main/java/org/jhotdraw/draw/tool/ConnectionTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/ConnectionTool.java rename to src/main/java/org/jhotdraw/draw/tool/ConnectionTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/CreationTool.java b/src/main/java/org/jhotdraw/draw/tool/CreationTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/CreationTool.java rename to src/main/java/org/jhotdraw/draw/tool/CreationTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DefaultDragTracker.java b/src/main/java/org/jhotdraw/draw/tool/DefaultDragTracker.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DefaultDragTracker.java rename to src/main/java/org/jhotdraw/draw/tool/DefaultDragTracker.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DefaultHandleTracker.java b/src/main/java/org/jhotdraw/draw/tool/DefaultHandleTracker.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DefaultHandleTracker.java rename to src/main/java/org/jhotdraw/draw/tool/DefaultHandleTracker.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DefaultSelectAreaTracker.java b/src/main/java/org/jhotdraw/draw/tool/DefaultSelectAreaTracker.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DefaultSelectAreaTracker.java rename to src/main/java/org/jhotdraw/draw/tool/DefaultSelectAreaTracker.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DelegationSelectionTool.java b/src/main/java/org/jhotdraw/draw/tool/DelegationSelectionTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DelegationSelectionTool.java rename to src/main/java/org/jhotdraw/draw/tool/DelegationSelectionTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DnDTracker.java b/src/main/java/org/jhotdraw/draw/tool/DnDTracker.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DnDTracker.java rename to src/main/java/org/jhotdraw/draw/tool/DnDTracker.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DragTracker.java b/src/main/java/org/jhotdraw/draw/tool/DragTracker.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/DragTracker.java rename to src/main/java/org/jhotdraw/draw/tool/DragTracker.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/HandleTracker.java b/src/main/java/org/jhotdraw/draw/tool/HandleTracker.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/HandleTracker.java rename to src/main/java/org/jhotdraw/draw/tool/HandleTracker.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/ImageTool.java b/src/main/java/org/jhotdraw/draw/tool/ImageTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/ImageTool.java rename to src/main/java/org/jhotdraw/draw/tool/ImageTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/SelectAreaTracker.java b/src/main/java/org/jhotdraw/draw/tool/SelectAreaTracker.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/SelectAreaTracker.java rename to src/main/java/org/jhotdraw/draw/tool/SelectAreaTracker.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/SelectionTool.java b/src/main/java/org/jhotdraw/draw/tool/SelectionTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/SelectionTool.java rename to src/main/java/org/jhotdraw/draw/tool/SelectionTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/TextAreaCreationTool.java b/src/main/java/org/jhotdraw/draw/tool/TextAreaCreationTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/TextAreaCreationTool.java rename to src/main/java/org/jhotdraw/draw/tool/TextAreaCreationTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/TextAreaEditingTool.java b/src/main/java/org/jhotdraw/draw/tool/TextAreaEditingTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/TextAreaEditingTool.java rename to src/main/java/org/jhotdraw/draw/tool/TextAreaEditingTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/TextCreationTool.java b/src/main/java/org/jhotdraw/draw/tool/TextCreationTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/TextCreationTool.java rename to src/main/java/org/jhotdraw/draw/tool/TextCreationTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/TextEditingTool.java b/src/main/java/org/jhotdraw/draw/tool/TextEditingTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/TextEditingTool.java rename to src/main/java/org/jhotdraw/draw/tool/TextEditingTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/Tool.java b/src/main/java/org/jhotdraw/draw/tool/Tool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/Tool.java rename to src/main/java/org/jhotdraw/draw/tool/Tool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/draw/tool/package-info.java b/src/main/java/org/jhotdraw/draw/tool/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/draw/tool/package-info.java rename to src/main/java/org/jhotdraw/draw/tool/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/Bezier.java b/src/main/java/org/jhotdraw/geom/Bezier.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/Bezier.java rename to src/main/java/org/jhotdraw/geom/Bezier.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/BezierPath.java b/src/main/java/org/jhotdraw/geom/BezierPath.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/BezierPath.java rename to src/main/java/org/jhotdraw/geom/BezierPath.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/BezierPathIterator.java b/src/main/java/org/jhotdraw/geom/BezierPathIterator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/BezierPathIterator.java rename to src/main/java/org/jhotdraw/geom/BezierPathIterator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/ConvexHull.java b/src/main/java/org/jhotdraw/geom/ConvexHull.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/ConvexHull.java rename to src/main/java/org/jhotdraw/geom/ConvexHull.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/Dimension2DDouble.java b/src/main/java/org/jhotdraw/geom/Dimension2DDouble.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/Dimension2DDouble.java rename to src/main/java/org/jhotdraw/geom/Dimension2DDouble.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/DoubleStroke.java b/src/main/java/org/jhotdraw/geom/DoubleStroke.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/DoubleStroke.java rename to src/main/java/org/jhotdraw/geom/DoubleStroke.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/Geom.java b/src/main/java/org/jhotdraw/geom/Geom.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/Geom.java rename to src/main/java/org/jhotdraw/geom/Geom.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/GrowStroke.java b/src/main/java/org/jhotdraw/geom/GrowStroke.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/GrowStroke.java rename to src/main/java/org/jhotdraw/geom/GrowStroke.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/Insets2D.java b/src/main/java/org/jhotdraw/geom/Insets2D.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/Insets2D.java rename to src/main/java/org/jhotdraw/geom/Insets2D.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/Polygon2D.java b/src/main/java/org/jhotdraw/geom/Polygon2D.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/Polygon2D.java rename to src/main/java/org/jhotdraw/geom/Polygon2D.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/QuadTree.java b/src/main/java/org/jhotdraw/geom/QuadTree.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/QuadTree.java rename to src/main/java/org/jhotdraw/geom/QuadTree.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/Shapes.java b/src/main/java/org/jhotdraw/geom/Shapes.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/Shapes.java rename to src/main/java/org/jhotdraw/geom/Shapes.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/geom/package-info.java b/src/main/java/org/jhotdraw/geom/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/geom/package-info.java rename to src/main/java/org/jhotdraw/geom/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/Arrangeable.java b/src/main/java/org/jhotdraw/gui/Arrangeable.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/Arrangeable.java rename to src/main/java/org/jhotdraw/gui/Arrangeable.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/AttributeEditor.java b/src/main/java/org/jhotdraw/gui/AttributeEditor.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/AttributeEditor.java rename to src/main/java/org/jhotdraw/gui/AttributeEditor.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/DisclosureIcon.java b/src/main/java/org/jhotdraw/gui/DisclosureIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/DisclosureIcon.java rename to src/main/java/org/jhotdraw/gui/DisclosureIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/EditableComponent.java b/src/main/java/org/jhotdraw/gui/EditableComponent.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/EditableComponent.java rename to src/main/java/org/jhotdraw/gui/EditableComponent.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/EmptyIcon.java b/src/main/java/org/jhotdraw/gui/EmptyIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/EmptyIcon.java rename to src/main/java/org/jhotdraw/gui/EmptyIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JComponentPopup.java b/src/main/java/org/jhotdraw/gui/JComponentPopup.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JComponentPopup.java rename to src/main/java/org/jhotdraw/gui/JComponentPopup.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JDisclosureToolBar.form b/src/main/java/org/jhotdraw/gui/JDisclosureToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JDisclosureToolBar.form rename to src/main/java/org/jhotdraw/gui/JDisclosureToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JDisclosureToolBar.java b/src/main/java/org/jhotdraw/gui/JDisclosureToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JDisclosureToolBar.java rename to src/main/java/org/jhotdraw/gui/JDisclosureToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JDisclosureToolBarBeanInfo.java b/src/main/java/org/jhotdraw/gui/JDisclosureToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JDisclosureToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/gui/JDisclosureToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JFileURIChooser.java b/src/main/java/org/jhotdraw/gui/JFileURIChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JFileURIChooser.java rename to src/main/java/org/jhotdraw/gui/JFileURIChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JFontChooser.form b/src/main/java/org/jhotdraw/gui/JFontChooser.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JFontChooser.form rename to src/main/java/org/jhotdraw/gui/JFontChooser.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JFontChooser.java b/src/main/java/org/jhotdraw/gui/JFontChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JFontChooser.java rename to src/main/java/org/jhotdraw/gui/JFontChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTexAreaBeanInfo.java b/src/main/java/org/jhotdraw/gui/JLifeFormattedTexAreaBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTexAreaBeanInfo.java rename to src/main/java/org/jhotdraw/gui/JLifeFormattedTexAreaBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.form b/src/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.form rename to src/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.java b/src/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.java rename to src/main/java/org/jhotdraw/gui/JLifeFormattedTextArea.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextField.form b/src/main/java/org/jhotdraw/gui/JLifeFormattedTextField.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextField.form rename to src/main/java/org/jhotdraw/gui/JLifeFormattedTextField.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextField.java b/src/main/java/org/jhotdraw/gui/JLifeFormattedTextField.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextField.java rename to src/main/java/org/jhotdraw/gui/JLifeFormattedTextField.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextFieldBeanInfo.java b/src/main/java/org/jhotdraw/gui/JLifeFormattedTextFieldBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JLifeFormattedTextFieldBeanInfo.java rename to src/main/java/org/jhotdraw/gui/JLifeFormattedTextFieldBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JMDIDesktopPane.java b/src/main/java/org/jhotdraw/gui/JMDIDesktopPane.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JMDIDesktopPane.java rename to src/main/java/org/jhotdraw/gui/JMDIDesktopPane.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JPopupButton.form b/src/main/java/org/jhotdraw/gui/JPopupButton.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JPopupButton.form rename to src/main/java/org/jhotdraw/gui/JPopupButton.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JPopupButton.java b/src/main/java/org/jhotdraw/gui/JPopupButton.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JPopupButton.java rename to src/main/java/org/jhotdraw/gui/JPopupButton.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JPopupButtonBeanInfo.java b/src/main/java/org/jhotdraw/gui/JPopupButtonBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JPopupButtonBeanInfo.java rename to src/main/java/org/jhotdraw/gui/JPopupButtonBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/JSheet.java b/src/main/java/org/jhotdraw/gui/JSheet.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/JSheet.java rename to src/main/java/org/jhotdraw/gui/JSheet.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/Labels.properties b/src/main/java/org/jhotdraw/gui/Labels.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/Labels.properties rename to src/main/java/org/jhotdraw/gui/Labels.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/Labels_de.properties b/src/main/java/org/jhotdraw/gui/Labels_de.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/Labels_de.properties rename to src/main/java/org/jhotdraw/gui/Labels_de.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/PlacardScrollPaneLayout.java b/src/main/java/org/jhotdraw/gui/PlacardScrollPaneLayout.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/PlacardScrollPaneLayout.java rename to src/main/java/org/jhotdraw/gui/PlacardScrollPaneLayout.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/ToolBarLayout.java b/src/main/java/org/jhotdraw/gui/ToolBarLayout.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/ToolBarLayout.java rename to src/main/java/org/jhotdraw/gui/ToolBarLayout.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/URIChooser.java b/src/main/java/org/jhotdraw/gui/URIChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/URIChooser.java rename to src/main/java/org/jhotdraw/gui/URIChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/VerticalGridLayout.java b/src/main/java/org/jhotdraw/gui/VerticalGridLayout.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/VerticalGridLayout.java rename to src/main/java/org/jhotdraw/gui/VerticalGridLayout.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/Worker.java b/src/main/java/org/jhotdraw/gui/Worker.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/Worker.java rename to src/main/java/org/jhotdraw/gui/Worker.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/AWTClipboard.java b/src/main/java/org/jhotdraw/gui/datatransfer/AWTClipboard.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/AWTClipboard.java rename to src/main/java/org/jhotdraw/gui/datatransfer/AWTClipboard.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/AbstractClipboard.java b/src/main/java/org/jhotdraw/gui/datatransfer/AbstractClipboard.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/AbstractClipboard.java rename to src/main/java/org/jhotdraw/gui/datatransfer/AbstractClipboard.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/AbstractTransferable.java b/src/main/java/org/jhotdraw/gui/datatransfer/AbstractTransferable.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/AbstractTransferable.java rename to src/main/java/org/jhotdraw/gui/datatransfer/AbstractTransferable.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/ClipboardUtil.java b/src/main/java/org/jhotdraw/gui/datatransfer/ClipboardUtil.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/ClipboardUtil.java rename to src/main/java/org/jhotdraw/gui/datatransfer/ClipboardUtil.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/CompositeTransferable.java b/src/main/java/org/jhotdraw/gui/datatransfer/CompositeTransferable.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/CompositeTransferable.java rename to src/main/java/org/jhotdraw/gui/datatransfer/CompositeTransferable.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/ImageTransferable.java b/src/main/java/org/jhotdraw/gui/datatransfer/ImageTransferable.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/ImageTransferable.java rename to src/main/java/org/jhotdraw/gui/datatransfer/ImageTransferable.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/InputStreamTransferable.java b/src/main/java/org/jhotdraw/gui/datatransfer/InputStreamTransferable.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/InputStreamTransferable.java rename to src/main/java/org/jhotdraw/gui/datatransfer/InputStreamTransferable.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/JNLPClipboard.java b/src/main/java/org/jhotdraw/gui/datatransfer/JNLPClipboard.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/JNLPClipboard.java rename to src/main/java/org/jhotdraw/gui/datatransfer/JNLPClipboard.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/OSXClipboard.java b/src/main/java/org/jhotdraw/gui/datatransfer/OSXClipboard.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/OSXClipboard.java rename to src/main/java/org/jhotdraw/gui/datatransfer/OSXClipboard.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/package-info.java b/src/main/java/org/jhotdraw/gui/datatransfer/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/datatransfer/package-info.java rename to src/main/java/org/jhotdraw/gui/datatransfer/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/event/GenericListener.java b/src/main/java/org/jhotdraw/gui/event/GenericListener.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/event/GenericListener.java rename to src/main/java/org/jhotdraw/gui/event/GenericListener.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/event/SheetEvent.java b/src/main/java/org/jhotdraw/gui/event/SheetEvent.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/event/SheetEvent.java rename to src/main/java/org/jhotdraw/gui/event/SheetEvent.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/event/SheetListener.java b/src/main/java/org/jhotdraw/gui/event/SheetListener.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/event/SheetListener.java rename to src/main/java/org/jhotdraw/gui/event/SheetListener.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/event/package-info.java b/src/main/java/org/jhotdraw/gui/event/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/event/package-info.java rename to src/main/java/org/jhotdraw/gui/event/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/filechooser/ExtensionFileFilter.java b/src/main/java/org/jhotdraw/gui/filechooser/ExtensionFileFilter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/filechooser/ExtensionFileFilter.java rename to src/main/java/org/jhotdraw/gui/filechooser/ExtensionFileFilter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/filechooser/package-info.java b/src/main/java/org/jhotdraw/gui/filechooser/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/filechooser/package-info.java rename to src/main/java/org/jhotdraw/gui/filechooser/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/AbstractFontChooserModel.java b/src/main/java/org/jhotdraw/gui/fontchooser/AbstractFontChooserModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/AbstractFontChooserModel.java rename to src/main/java/org/jhotdraw/gui/fontchooser/AbstractFontChooserModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/DefaultFontChooserModel.java b/src/main/java/org/jhotdraw/gui/fontchooser/DefaultFontChooserModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/DefaultFontChooserModel.java rename to src/main/java/org/jhotdraw/gui/fontchooser/DefaultFontChooserModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/FontChooserModel.java b/src/main/java/org/jhotdraw/gui/fontchooser/FontChooserModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/FontChooserModel.java rename to src/main/java/org/jhotdraw/gui/fontchooser/FontChooserModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/FontCollectionNode.java b/src/main/java/org/jhotdraw/gui/fontchooser/FontCollectionNode.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/FontCollectionNode.java rename to src/main/java/org/jhotdraw/gui/fontchooser/FontCollectionNode.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/FontFaceNode.java b/src/main/java/org/jhotdraw/gui/fontchooser/FontFaceNode.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/FontFaceNode.java rename to src/main/java/org/jhotdraw/gui/fontchooser/FontFaceNode.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/FontFamilyNode.java b/src/main/java/org/jhotdraw/gui/fontchooser/FontFamilyNode.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/FontFamilyNode.java rename to src/main/java/org/jhotdraw/gui/fontchooser/FontFamilyNode.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/package-info.java b/src/main/java/org/jhotdraw/gui/fontchooser/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/fontchooser/package-info.java rename to src/main/java/org/jhotdraw/gui/fontchooser/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/package-info.java b/src/main/java/org/jhotdraw/gui/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/package-info.java rename to src/main/java/org/jhotdraw/gui/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/FontChooserUI.java b/src/main/java/org/jhotdraw/gui/plaf/FontChooserUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/FontChooserUI.java rename to src/main/java/org/jhotdraw/gui/plaf/FontChooserUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/package-info.java b/src/main/java/org/jhotdraw/gui/plaf/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/package-info.java rename to src/main/java/org/jhotdraw/gui/plaf/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/BackdropBorder.java b/src/main/java/org/jhotdraw/gui/plaf/palette/BackdropBorder.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/BackdropBorder.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/BackdropBorder.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/MultiIcon.java b/src/main/java/org/jhotdraw/gui/plaf/palette/MultiIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/MultiIcon.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/MultiIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteBorders.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteBorders.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteBorders.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteBorders.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonBorder.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonBorder.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonBorder.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonBorder.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteButtonUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorChooserUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorChooserUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorChooserUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorChooserUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorSliderUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorSliderUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorSliderUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteColorSliderUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.form b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserPreviewPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.form b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserSelectionPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFontChooserUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFormattedTextFieldUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFormattedTextFieldUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFormattedTextFieldUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteFormattedTextFieldUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLabelUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLabelUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLabelUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLabelUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLazyActionMap.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLazyActionMap.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLazyActionMap.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLazyActionMap.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteListCellRenderer.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteListCellRenderer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteListCellRenderer.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteListCellRenderer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteListUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteListUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteListUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteListUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLookAndFeel.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLookAndFeel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLookAndFeel.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteLookAndFeel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteMenuItemUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteMenuItemUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteMenuItemUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteMenuItemUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PalettePanelUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PalettePanelUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PalettePanelUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PalettePanelUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteRootPaneUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteRootPaneUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteRootPaneUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteRootPaneUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderThumbIcon.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderThumbIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderThumbIcon.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderThumbIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteSliderUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTabbedPaneUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTabbedPaneUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTabbedPaneUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTabbedPaneUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextComponentBorder.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextComponentBorder.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextComponentBorder.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextComponentBorder.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextFieldUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextFieldUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextFieldUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteTextFieldUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarBorder.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarBorder.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarBorder.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarBorder.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarUI.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarUI.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarUI.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteToolBarUI.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteUtilities.java b/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteUtilities.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/PaletteUtilities.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/PaletteUtilities.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorIcon.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorIcon.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorSliderTextFieldHandler.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorSliderTextFieldHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorSliderTextFieldHandler.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/ColorSliderTextFieldHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.form b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteCMYKChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.form b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserMainPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.form b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorChooserPreviewPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSliderModel.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSliderModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSliderModel.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSliderModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.form b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorSlidersChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.form b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteColorWheelChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.form b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteHSBChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.form b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteRGBChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.form b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.form rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/PaletteSwatchesChooser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/package-info.java b/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/package-info.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/colorchooser/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.northThumbs.small.png b/src/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.northThumbs.small.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.northThumbs.small.png rename to src/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.northThumbs.small.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.westThumbs.small.png b/src/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.westThumbs.small.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.westThumbs.small.png rename to src/main/java/org/jhotdraw/gui/plaf/palette/images/Slider.westThumbs.small.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/package-info.java b/src/main/java/org/jhotdraw/gui/plaf/palette/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/gui/plaf/palette/package-info.java rename to src/main/java/org/jhotdraw/gui/plaf/palette/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/io/Base64.java b/src/main/java/org/jhotdraw/io/Base64.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/io/Base64.java rename to src/main/java/org/jhotdraw/io/Base64.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/io/BoundedRangeInputStream.java b/src/main/java/org/jhotdraw/io/BoundedRangeInputStream.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/io/BoundedRangeInputStream.java rename to src/main/java/org/jhotdraw/io/BoundedRangeInputStream.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/io/StreamPosTokenizer.java b/src/main/java/org/jhotdraw/io/StreamPosTokenizer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/io/StreamPosTokenizer.java rename to src/main/java/org/jhotdraw/io/StreamPosTokenizer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/io/package-info.java b/src/main/java/org/jhotdraw/io/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/io/package-info.java rename to src/main/java/org/jhotdraw/io/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/net/ClientHttpRequest.java b/src/main/java/org/jhotdraw/net/ClientHttpRequest.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/net/ClientHttpRequest.java rename to src/main/java/org/jhotdraw/net/ClientHttpRequest.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/net/URIUtil.java b/src/main/java/org/jhotdraw/net/URIUtil.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/net/URIUtil.java rename to src/main/java/org/jhotdraw/net/URIUtil.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/net/package-info.java b/src/main/java/org/jhotdraw/net/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/net/package-info.java rename to src/main/java/org/jhotdraw/net/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/overview.html b/src/main/java/org/jhotdraw/overview.html similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/overview.html rename to src/main/java/org/jhotdraw/overview.html diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.form b/src/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.form rename to src/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.java b/src/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.java rename to src/main/java/org/jhotdraw/samples/color/CIEXYChromaticityDiagram.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/color/JMixer.form b/src/main/java/org/jhotdraw/samples/color/JMixer.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/color/JMixer.form rename to src/main/java/org/jhotdraw/samples/color/JMixer.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/color/JMixer.java b/src/main/java/org/jhotdraw/samples/color/JMixer.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/color/JMixer.java rename to src/main/java/org/jhotdraw/samples/color/JMixer.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.form b/src/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.form rename to src/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.java b/src/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.java rename to src/main/java/org/jhotdraw/samples/color/WheelsAndSlidersMain.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/color/package-info.java b/src/main/java/org/jhotdraw/samples/color/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/color/package-info.java rename to src/main/java/org/jhotdraw/samples/color/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawApplet.form b/src/main/java/org/jhotdraw/samples/draw/DrawApplet.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawApplet.form rename to src/main/java/org/jhotdraw/samples/draw/DrawApplet.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawApplet.html b/src/main/java/org/jhotdraw/samples/draw/DrawApplet.html similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawApplet.html rename to src/main/java/org/jhotdraw/samples/draw/DrawApplet.html diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawApplet.java b/src/main/java/org/jhotdraw/samples/draw/DrawApplet.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawApplet.java rename to src/main/java/org/jhotdraw/samples/draw/DrawApplet.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawApplicationModel.java b/src/main/java/org/jhotdraw/samples/draw/DrawApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawApplicationModel.java rename to src/main/java/org/jhotdraw/samples/draw/DrawApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawFigureFactory.java b/src/main/java/org/jhotdraw/samples/draw/DrawFigureFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawFigureFactory.java rename to src/main/java/org/jhotdraw/samples/draw/DrawFigureFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.form b/src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.form rename to src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.html b/src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.html similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.html rename to src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.html diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.java b/src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.java rename to src/main/java/org/jhotdraw/samples/draw/DrawLiveConnectApplet.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawView.form b/src/main/java/org/jhotdraw/samples/draw/DrawView.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawView.form rename to src/main/java/org/jhotdraw/samples/draw/DrawView.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawView.java b/src/main/java/org/jhotdraw/samples/draw/DrawView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawView.java rename to src/main/java/org/jhotdraw/samples/draw/DrawView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawingPanel.form b/src/main/java/org/jhotdraw/samples/draw/DrawingPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawingPanel.form rename to src/main/java/org/jhotdraw/samples/draw/DrawingPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawingPanel.java b/src/main/java/org/jhotdraw/samples/draw/DrawingPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawingPanel.java rename to src/main/java/org/jhotdraw/samples/draw/DrawingPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawingPanelBeanInfo.java b/src/main/java/org/jhotdraw/samples/draw/DrawingPanelBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/DrawingPanelBeanInfo.java rename to src/main/java/org/jhotdraw/samples/draw/DrawingPanelBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/Main.java b/src/main/java/org/jhotdraw/samples/draw/Main.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/Main.java rename to src/main/java/org/jhotdraw/samples/draw/Main.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/package-info.java b/src/main/java/org/jhotdraw/samples/draw/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/package-info.java rename to src/main/java/org/jhotdraw/samples/draw/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/draw/plasmadraw.xml b/src/main/java/org/jhotdraw/samples/draw/plasmadraw.xml similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/draw/plasmadraw.xml rename to src/main/java/org/jhotdraw/samples/draw/plasmadraw.xml diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/font/FontChooserMain.form b/src/main/java/org/jhotdraw/samples/font/FontChooserMain.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/font/FontChooserMain.form rename to src/main/java/org/jhotdraw/samples/font/FontChooserMain.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/font/FontChooserMain.java b/src/main/java/org/jhotdraw/samples/font/FontChooserMain.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/font/FontChooserMain.java rename to src/main/java/org/jhotdraw/samples/font/FontChooserMain.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/font/package-info.java b/src/main/java/org/jhotdraw/samples/font/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/font/package-info.java rename to src/main/java/org/jhotdraw/samples/font/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/AnimationSample.form b/src/main/java/org/jhotdraw/samples/mini/AnimationSample.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/AnimationSample.form rename to src/main/java/org/jhotdraw/samples/mini/AnimationSample.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/AnimationSample.java b/src/main/java/org/jhotdraw/samples/mini/AnimationSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/AnimationSample.java rename to src/main/java/org/jhotdraw/samples/mini/AnimationSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/BezierDemo.form b/src/main/java/org/jhotdraw/samples/mini/BezierDemo.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/BezierDemo.form rename to src/main/java/org/jhotdraw/samples/mini/BezierDemo.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/BezierDemo.java b/src/main/java/org/jhotdraw/samples/mini/BezierDemo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/BezierDemo.java rename to src/main/java/org/jhotdraw/samples/mini/BezierDemo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/BorderRectangleFigure.java b/src/main/java/org/jhotdraw/samples/mini/BorderRectangleFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/BorderRectangleFigure.java rename to src/main/java/org/jhotdraw/samples/mini/BorderRectangleFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/ConnectingFiguresSample.java b/src/main/java/org/jhotdraw/samples/mini/ConnectingFiguresSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/ConnectingFiguresSample.java rename to src/main/java/org/jhotdraw/samples/mini/ConnectingFiguresSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/CreationToolSample.java b/src/main/java/org/jhotdraw/samples/mini/CreationToolSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/CreationToolSample.java rename to src/main/java/org/jhotdraw/samples/mini/CreationToolSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/DefaultDOMStorableSample.java b/src/main/java/org/jhotdraw/samples/mini/DefaultDOMStorableSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/DefaultDOMStorableSample.java rename to src/main/java/org/jhotdraw/samples/mini/DefaultDOMStorableSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/DnDMultiEditorSample.java b/src/main/java/org/jhotdraw/samples/mini/DnDMultiEditorSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/DnDMultiEditorSample.java rename to src/main/java/org/jhotdraw/samples/mini/DnDMultiEditorSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/EditorSample.java b/src/main/java/org/jhotdraw/samples/mini/EditorSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/EditorSample.java rename to src/main/java/org/jhotdraw/samples/mini/EditorSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/FileIconsSample.java b/src/main/java/org/jhotdraw/samples/mini/FileIconsSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/FileIconsSample.java rename to src/main/java/org/jhotdraw/samples/mini/FileIconsSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/LabeledLineConnectionFigureSample.java b/src/main/java/org/jhotdraw/samples/mini/LabeledLineConnectionFigureSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/LabeledLineConnectionFigureSample.java rename to src/main/java/org/jhotdraw/samples/mini/LabeledLineConnectionFigureSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/LayouterSample.java b/src/main/java/org/jhotdraw/samples/mini/LayouterSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/LayouterSample.java rename to src/main/java/org/jhotdraw/samples/mini/LayouterSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/MovableChildFiguresSample.java b/src/main/java/org/jhotdraw/samples/mini/MovableChildFiguresSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/MovableChildFiguresSample.java rename to src/main/java/org/jhotdraw/samples/mini/MovableChildFiguresSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/MultiEditorSample.java b/src/main/java/org/jhotdraw/samples/mini/MultiEditorSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/MultiEditorSample.java rename to src/main/java/org/jhotdraw/samples/mini/MultiEditorSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.form b/src/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.form rename to src/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.java b/src/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.java rename to src/main/java/org/jhotdraw/samples/mini/SVGDrawingPanelSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/SelectionToolSample.java b/src/main/java/org/jhotdraw/samples/mini/SelectionToolSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/SelectionToolSample.java rename to src/main/java/org/jhotdraw/samples/mini/SelectionToolSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/SmartConnectionFigureSample.java b/src/main/java/org/jhotdraw/samples/mini/SmartConnectionFigureSample.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/SmartConnectionFigureSample.java rename to src/main/java/org/jhotdraw/samples/mini/SmartConnectionFigureSample.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/StraightLineFigure.java b/src/main/java/org/jhotdraw/samples/mini/StraightLineFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/StraightLineFigure.java rename to src/main/java/org/jhotdraw/samples/mini/StraightLineFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/mini/package-info.java b/src/main/java/org/jhotdraw/samples/mini/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/mini/package-info.java rename to src/main/java/org/jhotdraw/samples/mini/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/Labels.properties b/src/main/java/org/jhotdraw/samples/net/Labels.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/Labels.properties rename to src/main/java/org/jhotdraw/samples/net/Labels.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/Labels_de.properties b/src/main/java/org/jhotdraw/samples/net/Labels_de.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/Labels_de.properties rename to src/main/java/org/jhotdraw/samples/net/Labels_de.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/Main.java b/src/main/java/org/jhotdraw/samples/net/Main.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/Main.java rename to src/main/java/org/jhotdraw/samples/net/Main.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetApplet.form b/src/main/java/org/jhotdraw/samples/net/NetApplet.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetApplet.form rename to src/main/java/org/jhotdraw/samples/net/NetApplet.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetApplet.java b/src/main/java/org/jhotdraw/samples/net/NetApplet.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetApplet.java rename to src/main/java/org/jhotdraw/samples/net/NetApplet.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetApplicationModel.java b/src/main/java/org/jhotdraw/samples/net/NetApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetApplicationModel.java rename to src/main/java/org/jhotdraw/samples/net/NetApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetFactory.java b/src/main/java/org/jhotdraw/samples/net/NetFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetFactory.java rename to src/main/java/org/jhotdraw/samples/net/NetFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetPanel.form b/src/main/java/org/jhotdraw/samples/net/NetPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetPanel.form rename to src/main/java/org/jhotdraw/samples/net/NetPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetPanel.java b/src/main/java/org/jhotdraw/samples/net/NetPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetPanel.java rename to src/main/java/org/jhotdraw/samples/net/NetPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetView.form b/src/main/java/org/jhotdraw/samples/net/NetView.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetView.form rename to src/main/java/org/jhotdraw/samples/net/NetView.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetView.java b/src/main/java/org/jhotdraw/samples/net/NetView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/NetView.java rename to src/main/java/org/jhotdraw/samples/net/NetView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/figures/NodeFigure.java b/src/main/java/org/jhotdraw/samples/net/figures/NodeFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/figures/NodeFigure.java rename to src/main/java/org/jhotdraw/samples/net/figures/NodeFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/figures/package-info.java b/src/main/java/org/jhotdraw/samples/net/figures/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/figures/package-info.java rename to src/main/java/org/jhotdraw/samples/net/figures/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/images/createLink.png b/src/main/java/org/jhotdraw/samples/net/images/createLink.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/images/createLink.png rename to src/main/java/org/jhotdraw/samples/net/images/createLink.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/images/createNode.png b/src/main/java/org/jhotdraw/samples/net/images/createNode.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/images/createNode.png rename to src/main/java/org/jhotdraw/samples/net/images/createNode.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/net/package-info.java b/src/main/java/org/jhotdraw/samples/net/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/net/package-info.java rename to src/main/java/org/jhotdraw/samples/net/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/Gradient.java b/src/main/java/org/jhotdraw/samples/odg/Gradient.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/Gradient.java rename to src/main/java/org/jhotdraw/samples/odg/Gradient.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/Labels.properties b/src/main/java/org/jhotdraw/samples/odg/Labels.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/Labels.properties rename to src/main/java/org/jhotdraw/samples/odg/Labels.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/Main.java b/src/main/java/org/jhotdraw/samples/odg/Main.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/Main.java rename to src/main/java/org/jhotdraw/samples/odg/Main.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGApplicationModel.java b/src/main/java/org/jhotdraw/samples/odg/ODGApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGApplicationModel.java rename to src/main/java/org/jhotdraw/samples/odg/ODGApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGAttributeKeys.java b/src/main/java/org/jhotdraw/samples/odg/ODGAttributeKeys.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGAttributeKeys.java rename to src/main/java/org/jhotdraw/samples/odg/ODGAttributeKeys.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGConstants.java b/src/main/java/org/jhotdraw/samples/odg/ODGConstants.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGConstants.java rename to src/main/java/org/jhotdraw/samples/odg/ODGConstants.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGDrawing.java b/src/main/java/org/jhotdraw/samples/odg/ODGDrawing.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGDrawing.java rename to src/main/java/org/jhotdraw/samples/odg/ODGDrawing.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.form b/src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.form rename to src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.java b/src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.java rename to src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanelBeanInfo.java b/src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanelBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanelBeanInfo.java rename to src/main/java/org/jhotdraw/samples/odg/ODGDrawingPanelBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.form b/src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.form rename to src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.java b/src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.java rename to src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanelBeanInfo.java b/src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanelBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanelBeanInfo.java rename to src/main/java/org/jhotdraw/samples/odg/ODGPropertiesPanelBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGView.form b/src/main/java/org/jhotdraw/samples/odg/ODGView.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGView.form rename to src/main/java/org/jhotdraw/samples/odg/ODGView.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGView.java b/src/main/java/org/jhotdraw/samples/odg/ODGView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/ODGView.java rename to src/main/java/org/jhotdraw/samples/odg/ODGView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/PathTool.java b/src/main/java/org/jhotdraw/samples/odg/PathTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/PathTool.java rename to src/main/java/org/jhotdraw/samples/odg/PathTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/action/CombineAction.java b/src/main/java/org/jhotdraw/samples/odg/action/CombineAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/action/CombineAction.java rename to src/main/java/org/jhotdraw/samples/odg/action/CombineAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/action/SplitAction.java b/src/main/java/org/jhotdraw/samples/odg/action/SplitAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/action/SplitAction.java rename to src/main/java/org/jhotdraw/samples/odg/action/SplitAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/action/TogglePropertiesPanelAction.java b/src/main/java/org/jhotdraw/samples/odg/action/TogglePropertiesPanelAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/action/TogglePropertiesPanelAction.java rename to src/main/java/org/jhotdraw/samples/odg/action/TogglePropertiesPanelAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/action/package-info.java b/src/main/java/org/jhotdraw/samples/odg/action/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/action/package-info.java rename to src/main/java/org/jhotdraw/samples/odg/action/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGAttributedFigure.java b/src/main/java/org/jhotdraw/samples/odg/figures/ODGAttributedFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGAttributedFigure.java rename to src/main/java/org/jhotdraw/samples/odg/figures/ODGAttributedFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGBezierFigure.java b/src/main/java/org/jhotdraw/samples/odg/figures/ODGBezierFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGBezierFigure.java rename to src/main/java/org/jhotdraw/samples/odg/figures/ODGBezierFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGEllipseFigure.java b/src/main/java/org/jhotdraw/samples/odg/figures/ODGEllipseFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGEllipseFigure.java rename to src/main/java/org/jhotdraw/samples/odg/figures/ODGEllipseFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGFigure.java b/src/main/java/org/jhotdraw/samples/odg/figures/ODGFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGFigure.java rename to src/main/java/org/jhotdraw/samples/odg/figures/ODGFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGGroupFigure.java b/src/main/java/org/jhotdraw/samples/odg/figures/ODGGroupFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGGroupFigure.java rename to src/main/java/org/jhotdraw/samples/odg/figures/ODGGroupFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGPathFigure.java b/src/main/java/org/jhotdraw/samples/odg/figures/ODGPathFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGPathFigure.java rename to src/main/java/org/jhotdraw/samples/odg/figures/ODGPathFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGPathOutlineHandle.java b/src/main/java/org/jhotdraw/samples/odg/figures/ODGPathOutlineHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGPathOutlineHandle.java rename to src/main/java/org/jhotdraw/samples/odg/figures/ODGPathOutlineHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGRectFigure.java b/src/main/java/org/jhotdraw/samples/odg/figures/ODGRectFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGRectFigure.java rename to src/main/java/org/jhotdraw/samples/odg/figures/ODGRectFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGRectRadiusHandle.java b/src/main/java/org/jhotdraw/samples/odg/figures/ODGRectRadiusHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/ODGRectRadiusHandle.java rename to src/main/java/org/jhotdraw/samples/odg/figures/ODGRectRadiusHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/package-info.java b/src/main/java/org/jhotdraw/samples/odg/figures/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/figures/package-info.java rename to src/main/java/org/jhotdraw/samples/odg/figures/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/geom/EnhancedPath.java b/src/main/java/org/jhotdraw/samples/odg/geom/EnhancedPath.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/geom/EnhancedPath.java rename to src/main/java/org/jhotdraw/samples/odg/geom/EnhancedPath.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/geom/package-info.java b/src/main/java/org/jhotdraw/samples/odg/geom/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/geom/package-info.java rename to src/main/java/org/jhotdraw/samples/odg/geom/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/DefaultODGFigureFactory.java b/src/main/java/org/jhotdraw/samples/odg/io/DefaultODGFigureFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/DefaultODGFigureFactory.java rename to src/main/java/org/jhotdraw/samples/odg/io/DefaultODGFigureFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/ODGFigureFactory.java b/src/main/java/org/jhotdraw/samples/odg/io/ODGFigureFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/ODGFigureFactory.java rename to src/main/java/org/jhotdraw/samples/odg/io/ODGFigureFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/ODGInputFormat.java b/src/main/java/org/jhotdraw/samples/odg/io/ODGInputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/ODGInputFormat.java rename to src/main/java/org/jhotdraw/samples/odg/io/ODGInputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/ODGStylesReader.java b/src/main/java/org/jhotdraw/samples/odg/io/ODGStylesReader.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/ODGStylesReader.java rename to src/main/java/org/jhotdraw/samples/odg/io/ODGStylesReader.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/package-info.java b/src/main/java/org/jhotdraw/samples/odg/io/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/io/package-info.java rename to src/main/java/org/jhotdraw/samples/odg/io/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/odg/package-info.java b/src/main/java/org/jhotdraw/samples/odg/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/odg/package-info.java rename to src/main/java/org/jhotdraw/samples/odg/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/Labels.properties b/src/main/java/org/jhotdraw/samples/pert/Labels.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/Labels.properties rename to src/main/java/org/jhotdraw/samples/pert/Labels.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/Labels_de.properties b/src/main/java/org/jhotdraw/samples/pert/Labels_de.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/Labels_de.properties rename to src/main/java/org/jhotdraw/samples/pert/Labels_de.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/Main.java b/src/main/java/org/jhotdraw/samples/pert/Main.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/Main.java rename to src/main/java/org/jhotdraw/samples/pert/Main.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertApplet.form b/src/main/java/org/jhotdraw/samples/pert/PertApplet.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertApplet.form rename to src/main/java/org/jhotdraw/samples/pert/PertApplet.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertApplet.java b/src/main/java/org/jhotdraw/samples/pert/PertApplet.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertApplet.java rename to src/main/java/org/jhotdraw/samples/pert/PertApplet.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertApplicationModel.java b/src/main/java/org/jhotdraw/samples/pert/PertApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertApplicationModel.java rename to src/main/java/org/jhotdraw/samples/pert/PertApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertFactory.java b/src/main/java/org/jhotdraw/samples/pert/PertFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertFactory.java rename to src/main/java/org/jhotdraw/samples/pert/PertFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertPanel.form b/src/main/java/org/jhotdraw/samples/pert/PertPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertPanel.form rename to src/main/java/org/jhotdraw/samples/pert/PertPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertPanel.java b/src/main/java/org/jhotdraw/samples/pert/PertPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertPanel.java rename to src/main/java/org/jhotdraw/samples/pert/PertPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertView.form b/src/main/java/org/jhotdraw/samples/pert/PertView.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertView.form rename to src/main/java/org/jhotdraw/samples/pert/PertView.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertView.java b/src/main/java/org/jhotdraw/samples/pert/PertView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/PertView.java rename to src/main/java/org/jhotdraw/samples/pert/PertView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/figures/DependencyFigure.java b/src/main/java/org/jhotdraw/samples/pert/figures/DependencyFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/figures/DependencyFigure.java rename to src/main/java/org/jhotdraw/samples/pert/figures/DependencyFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/figures/SeparatorLineFigure.java b/src/main/java/org/jhotdraw/samples/pert/figures/SeparatorLineFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/figures/SeparatorLineFigure.java rename to src/main/java/org/jhotdraw/samples/pert/figures/SeparatorLineFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/figures/TaskFigure.java b/src/main/java/org/jhotdraw/samples/pert/figures/TaskFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/figures/TaskFigure.java rename to src/main/java/org/jhotdraw/samples/pert/figures/TaskFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/figures/package-info.java b/src/main/java/org/jhotdraw/samples/pert/figures/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/figures/package-info.java rename to src/main/java/org/jhotdraw/samples/pert/figures/package-info.java diff --git a/JHotDraw/src/CH/ifa/draw/images/PERT1.gif b/src/main/java/org/jhotdraw/samples/pert/images/PERT1.gif similarity index 100% rename from JHotDraw/src/CH/ifa/draw/images/PERT1.gif rename to src/main/java/org/jhotdraw/samples/pert/images/PERT1.gif diff --git a/JHotDraw/src/CH/ifa/draw/images/PERT2.gif b/src/main/java/org/jhotdraw/samples/pert/images/PERT2.gif similarity index 100% rename from JHotDraw/src/CH/ifa/draw/images/PERT2.gif rename to src/main/java/org/jhotdraw/samples/pert/images/PERT2.gif diff --git a/JHotDraw/src/CH/ifa/draw/images/PERT3.gif b/src/main/java/org/jhotdraw/samples/pert/images/PERT3.gif similarity index 100% rename from JHotDraw/src/CH/ifa/draw/images/PERT3.gif rename to src/main/java/org/jhotdraw/samples/pert/images/PERT3.gif diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/createDependency.png b/src/main/java/org/jhotdraw/samples/pert/images/createDependency.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/createDependency.png rename to src/main/java/org/jhotdraw/samples/pert/images/createDependency.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/createTask.png b/src/main/java/org/jhotdraw/samples/pert/images/createTask.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/images/createTask.png rename to src/main/java/org/jhotdraw/samples/pert/images/createTask.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/pert/package-info.java b/src/main/java/org/jhotdraw/samples/pert/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/pert/package-info.java rename to src/main/java/org/jhotdraw/samples/pert/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/Gradient.java b/src/main/java/org/jhotdraw/samples/svg/Gradient.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/Gradient.java rename to src/main/java/org/jhotdraw/samples/svg/Gradient.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/Labels.properties b/src/main/java/org/jhotdraw/samples/svg/Labels.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/Labels.properties rename to src/main/java/org/jhotdraw/samples/svg/Labels.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/Labels_de.properties b/src/main/java/org/jhotdraw/samples/svg/Labels_de.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/Labels_de.properties rename to src/main/java/org/jhotdraw/samples/svg/Labels_de.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/LinearGradient.java b/src/main/java/org/jhotdraw/samples/svg/LinearGradient.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/LinearGradient.java rename to src/main/java/org/jhotdraw/samples/svg/LinearGradient.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/Main.java b/src/main/java/org/jhotdraw/samples/svg/Main.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/Main.java rename to src/main/java/org/jhotdraw/samples/svg/Main.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/PathTool.java b/src/main/java/org/jhotdraw/samples/svg/PathTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/PathTool.java rename to src/main/java/org/jhotdraw/samples/svg/PathTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/RadialGradient.java b/src/main/java/org/jhotdraw/samples/svg/RadialGradient.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/RadialGradient.java rename to src/main/java/org/jhotdraw/samples/svg/RadialGradient.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGApplet.form b/src/main/java/org/jhotdraw/samples/svg/SVGApplet.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGApplet.form rename to src/main/java/org/jhotdraw/samples/svg/SVGApplet.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGApplet.java b/src/main/java/org/jhotdraw/samples/svg/SVGApplet.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGApplet.java rename to src/main/java/org/jhotdraw/samples/svg/SVGApplet.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGApplicationModel.java b/src/main/java/org/jhotdraw/samples/svg/SVGApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGApplicationModel.java rename to src/main/java/org/jhotdraw/samples/svg/SVGApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGAttributeKeys.java b/src/main/java/org/jhotdraw/samples/svg/SVGAttributeKeys.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGAttributeKeys.java rename to src/main/java/org/jhotdraw/samples/svg/SVGAttributeKeys.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGConstants.java b/src/main/java/org/jhotdraw/samples/svg/SVGConstants.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGConstants.java rename to src/main/java/org/jhotdraw/samples/svg/SVGConstants.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGCreateFromFileTool.java b/src/main/java/org/jhotdraw/samples/svg/SVGCreateFromFileTool.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGCreateFromFileTool.java rename to src/main/java/org/jhotdraw/samples/svg/SVGCreateFromFileTool.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.form b/src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.form rename to src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.java b/src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.java rename to src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanelBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanelBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanelBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/SVGDrawingPanelBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGView.form b/src/main/java/org/jhotdraw/samples/svg/SVGView.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGView.form rename to src/main/java/org/jhotdraw/samples/svg/SVGView.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGView.java b/src/main/java/org/jhotdraw/samples/svg/SVGView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/SVGView.java rename to src/main/java/org/jhotdraw/samples/svg/SVGView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/CombineAction.java b/src/main/java/org/jhotdraw/samples/svg/action/CombineAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/CombineAction.java rename to src/main/java/org/jhotdraw/samples/svg/action/CombineAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/SplitAction.java b/src/main/java/org/jhotdraw/samples/svg/action/SplitAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/SplitAction.java rename to src/main/java/org/jhotdraw/samples/svg/action/SplitAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/ViewSourceAction.java b/src/main/java/org/jhotdraw/samples/svg/action/ViewSourceAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/ViewSourceAction.java rename to src/main/java/org/jhotdraw/samples/svg/action/ViewSourceAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/actions.png b/src/main/java/org/jhotdraw/samples/svg/action/images/actions.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/actions.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/actions.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignEast.png b/src/main/java/org/jhotdraw/samples/svg/action/images/alignEast.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignEast.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/alignEast.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignGrid.png b/src/main/java/org/jhotdraw/samples/svg/action/images/alignGrid.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignGrid.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/alignGrid.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignHorizontal.png b/src/main/java/org/jhotdraw/samples/svg/action/images/alignHorizontal.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignHorizontal.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/alignHorizontal.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignNorth.png b/src/main/java/org/jhotdraw/samples/svg/action/images/alignNorth.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignNorth.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/alignNorth.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignSouth.png b/src/main/java/org/jhotdraw/samples/svg/action/images/alignSouth.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignSouth.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/alignSouth.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignVertical.png b/src/main/java/org/jhotdraw/samples/svg/action/images/alignVertical.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignVertical.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/alignVertical.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignWest.png b/src/main/java/org/jhotdraw/samples/svg/action/images/alignWest.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/alignWest.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/alignWest.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.colorChooser.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.colorChooser.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.colorChooser.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.colorChooser.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.noColor.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.noColor.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.noColor.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attribute.color.noColor.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFillColor.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFillColor.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFillColor.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeFillColor.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFont.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFont.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFont.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeFont.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontBold.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontBold.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontBold.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontBold.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontItalic.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontItalic.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontItalic.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontItalic.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontSize.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontSize.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontSize.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontSize.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontUnderline.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontUnderline.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontUnderline.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeFontUnderline.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeOpacity.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeOpacity.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeOpacity.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeOpacity.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeCap.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeCap.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeCap.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeCap.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeColor.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeColor.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeColor.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeColor.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDashes.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDashes.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDashes.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDashes.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDecoration.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDecoration.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDecoration.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeDecoration.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeJoin.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeJoin.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeJoin.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeJoin.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeWidth.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeWidth.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeWidth.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributeStrokeWidth.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributesApply.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributesApply.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributesApply.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributesApply.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributesPick.png b/src/main/java/org/jhotdraw/samples/svg/action/images/attributesPick.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/attributesPick.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/attributesPick.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createArrow.png b/src/main/java/org/jhotdraw/samples/svg/action/images/createArrow.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createArrow.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/createArrow.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createEllipse.png b/src/main/java/org/jhotdraw/samples/svg/action/images/createEllipse.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createEllipse.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/createEllipse.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createImage.png b/src/main/java/org/jhotdraw/samples/svg/action/images/createImage.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createImage.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/createImage.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createLine.png b/src/main/java/org/jhotdraw/samples/svg/action/images/createLine.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createLine.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/createLine.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createPolygon.png b/src/main/java/org/jhotdraw/samples/svg/action/images/createPolygon.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createPolygon.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/createPolygon.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createRectangle.png b/src/main/java/org/jhotdraw/samples/svg/action/images/createRectangle.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createRectangle.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/createRectangle.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createScribble.png b/src/main/java/org/jhotdraw/samples/svg/action/images/createScribble.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createScribble.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/createScribble.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createText.png b/src/main/java/org/jhotdraw/samples/svg/action/images/createText.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createText.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/createText.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createTextArea.png b/src/main/java/org/jhotdraw/samples/svg/action/images/createTextArea.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/createTextArea.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/createTextArea.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/editRedo.png b/src/main/java/org/jhotdraw/samples/svg/action/images/editRedo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/editRedo.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/editRedo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/editUndo.png b/src/main/java/org/jhotdraw/samples/svg/action/images/editUndo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/editUndo.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/editUndo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/moveDown.png b/src/main/java/org/jhotdraw/samples/svg/action/images/moveDown.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/moveDown.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/moveDown.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/moveToBack.png b/src/main/java/org/jhotdraw/samples/svg/action/images/moveToBack.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/moveToBack.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/moveToBack.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/moveToFront.png b/src/main/java/org/jhotdraw/samples/svg/action/images/moveToFront.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/moveToFront.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/moveToFront.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/moveUp.png b/src/main/java/org/jhotdraw/samples/svg/action/images/moveUp.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/moveUp.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/moveUp.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/selectionTool.png b/src/main/java/org/jhotdraw/samples/svg/action/images/selectionTool.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/images/selectionTool.png rename to src/main/java/org/jhotdraw/samples/svg/action/images/selectionTool.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/package-info.java b/src/main/java/org/jhotdraw/samples/svg/action/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/action/package-info.java rename to src/main/java/org/jhotdraw/samples/svg/action/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/ConvexHullOutlineHandle.java b/src/main/java/org/jhotdraw/samples/svg/figures/ConvexHullOutlineHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/ConvexHullOutlineHandle.java rename to src/main/java/org/jhotdraw/samples/svg/figures/ConvexHullOutlineHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/LinkHandle.java b/src/main/java/org/jhotdraw/samples/svg/figures/LinkHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/LinkHandle.java rename to src/main/java/org/jhotdraw/samples/svg/figures/LinkHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGAttributedFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGAttributedFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGAttributedFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGAttributedFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGBezierFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGBezierFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGBezierFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGBezierFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGEllipseFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGEllipseFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGEllipseFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGEllipseFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGGroupFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGGroupFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGGroupFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGGroupFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGImageFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGImageFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGImageFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGImageFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGPathFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGPathFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGPathFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGPathFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGPathOutlineHandle.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGPathOutlineHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGPathOutlineHandle.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGPathOutlineHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGRectFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGRectFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGRectFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGRectFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGRectRadiusHandle.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGRectRadiusHandle.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGRectRadiusHandle.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGRectRadiusHandle.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGTextAreaFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGTextAreaFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGTextAreaFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGTextAreaFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGTextFigure.java b/src/main/java/org/jhotdraw/samples/svg/figures/SVGTextFigure.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/SVGTextFigure.java rename to src/main/java/org/jhotdraw/samples/svg/figures/SVGTextFigure.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/package-info.java b/src/main/java/org/jhotdraw/samples/svg/figures/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/figures/package-info.java rename to src/main/java/org/jhotdraw/samples/svg/figures/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/AbstractToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ActionsToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/AlignToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ArrangeToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/CanvasToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/DrawingComponent.java b/src/main/java/org/jhotdraw/samples/svg/gui/DrawingComponent.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/DrawingComponent.java rename to src/main/java/org/jhotdraw/samples/svg/gui/DrawingComponent.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/DrawingOpacityIcon.java b/src/main/java/org/jhotdraw/samples/svg/gui/DrawingOpacityIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/DrawingOpacityIcon.java rename to src/main/java/org/jhotdraw/samples/svg/gui/DrawingOpacityIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/FigureToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/FillToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FillToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/FillToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FillToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/FillToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/FontToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FontToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/FontToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/FontToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/FontToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/LinkToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.form b/src/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.form rename to src/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.java b/src/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.java rename to src/main/java/org/jhotdraw/samples/svg/gui/MessagePanel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.form b/src/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.form rename to src/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.java b/src/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ProgressIndicator.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/SelectionOpacityIcon.java b/src/main/java/org/jhotdraw/samples/svg/gui/SelectionOpacityIcon.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/SelectionOpacityIcon.java rename to src/main/java/org/jhotdraw/samples/svg/gui/SelectionOpacityIcon.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ServerAuthenticationException.java b/src/main/java/org/jhotdraw/samples/svg/gui/ServerAuthenticationException.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ServerAuthenticationException.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ServerAuthenticationException.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/StrokeToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/SummaryToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ToolsToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.form b/src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.form rename to src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.java b/src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBar.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBarBeanInfo.java b/src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBarBeanInfo.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBarBeanInfo.java rename to src/main/java/org/jhotdraw/samples/svg/gui/ViewToolBarBeanInfo.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/package-info.java b/src/main/java/org/jhotdraw/samples/svg/gui/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/gui/package-info.java rename to src/main/java/org/jhotdraw/samples/svg/gui/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/DefaultSVGFigureFactory.java b/src/main/java/org/jhotdraw/samples/svg/io/DefaultSVGFigureFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/DefaultSVGFigureFactory.java rename to src/main/java/org/jhotdraw/samples/svg/io/DefaultSVGFigureFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/ImageMapOutputFormat.java b/src/main/java/org/jhotdraw/samples/svg/io/ImageMapOutputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/ImageMapOutputFormat.java rename to src/main/java/org/jhotdraw/samples/svg/io/ImageMapOutputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGElementFactory.java b/src/main/java/org/jhotdraw/samples/svg/io/SVGElementFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGElementFactory.java rename to src/main/java/org/jhotdraw/samples/svg/io/SVGElementFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGFigureFactory.java b/src/main/java/org/jhotdraw/samples/svg/io/SVGFigureFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGFigureFactory.java rename to src/main/java/org/jhotdraw/samples/svg/io/SVGFigureFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGInputFormat.java b/src/main/java/org/jhotdraw/samples/svg/io/SVGInputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGInputFormat.java rename to src/main/java/org/jhotdraw/samples/svg/io/SVGInputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGOutputFormat.java b/src/main/java/org/jhotdraw/samples/svg/io/SVGOutputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGOutputFormat.java rename to src/main/java/org/jhotdraw/samples/svg/io/SVGOutputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGZInputFormat.java b/src/main/java/org/jhotdraw/samples/svg/io/SVGZInputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGZInputFormat.java rename to src/main/java/org/jhotdraw/samples/svg/io/SVGZInputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGZOutputFormat.java b/src/main/java/org/jhotdraw/samples/svg/io/SVGZOutputFormat.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/SVGZOutputFormat.java rename to src/main/java/org/jhotdraw/samples/svg/io/SVGZOutputFormat.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/package-info.java b/src/main/java/org/jhotdraw/samples/svg/io/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/io/package-info.java rename to src/main/java/org/jhotdraw/samples/svg/io/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/svg/package-info.java b/src/main/java/org/jhotdraw/samples/svg/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/svg/package-info.java rename to src/main/java/org/jhotdraw/samples/svg/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.form b/src/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.form rename to src/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.java b/src/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.java rename to src/main/java/org/jhotdraw/samples/teddy/CharacterSetAccessory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/FindDialog.form b/src/main/java/org/jhotdraw/samples/teddy/FindDialog.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/FindDialog.form rename to src/main/java/org/jhotdraw/samples/teddy/FindDialog.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/FindDialog.java b/src/main/java/org/jhotdraw/samples/teddy/FindDialog.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/FindDialog.java rename to src/main/java/org/jhotdraw/samples/teddy/FindDialog.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/JEditorArea.form b/src/main/java/org/jhotdraw/samples/teddy/JEditorArea.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/JEditorArea.form rename to src/main/java/org/jhotdraw/samples/teddy/JEditorArea.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/JEditorArea.java b/src/main/java/org/jhotdraw/samples/teddy/JEditorArea.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/JEditorArea.java rename to src/main/java/org/jhotdraw/samples/teddy/JEditorArea.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/Labels.properties b/src/main/java/org/jhotdraw/samples/teddy/Labels.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/Labels.properties rename to src/main/java/org/jhotdraw/samples/teddy/Labels.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/Labels_de.properties b/src/main/java/org/jhotdraw/samples/teddy/Labels_de.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/Labels_de.properties rename to src/main/java/org/jhotdraw/samples/teddy/Labels_de.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/Main.java b/src/main/java/org/jhotdraw/samples/teddy/Main.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/Main.java rename to src/main/java/org/jhotdraw/samples/teddy/Main.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/TeddyApplicationModel.java b/src/main/java/org/jhotdraw/samples/teddy/TeddyApplicationModel.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/TeddyApplicationModel.java rename to src/main/java/org/jhotdraw/samples/teddy/TeddyApplicationModel.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/TeddyView.form b/src/main/java/org/jhotdraw/samples/teddy/TeddyView.form similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/TeddyView.form rename to src/main/java/org/jhotdraw/samples/teddy/TeddyView.form diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/TeddyView.java b/src/main/java/org/jhotdraw/samples/teddy/TeddyView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/TeddyView.java rename to src/main/java/org/jhotdraw/samples/teddy/TeddyView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/FindAction.java b/src/main/java/org/jhotdraw/samples/teddy/action/FindAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/FindAction.java rename to src/main/java/org/jhotdraw/samples/teddy/action/FindAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/ToggleLineNumbersAction.java b/src/main/java/org/jhotdraw/samples/teddy/action/ToggleLineNumbersAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/ToggleLineNumbersAction.java rename to src/main/java/org/jhotdraw/samples/teddy/action/ToggleLineNumbersAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/ToggleLineWrapAction.java b/src/main/java/org/jhotdraw/samples/teddy/action/ToggleLineWrapAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/ToggleLineWrapAction.java rename to src/main/java/org/jhotdraw/samples/teddy/action/ToggleLineWrapAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/ToggleStatusBarAction.java b/src/main/java/org/jhotdraw/samples/teddy/action/ToggleStatusBarAction.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/ToggleStatusBarAction.java rename to src/main/java/org/jhotdraw/samples/teddy/action/ToggleStatusBarAction.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/package-info.java b/src/main/java/org/jhotdraw/samples/teddy/action/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/action/package-info.java rename to src/main/java/org/jhotdraw/samples/teddy/action/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/io/LFWriter.java b/src/main/java/org/jhotdraw/samples/teddy/io/LFWriter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/io/LFWriter.java rename to src/main/java/org/jhotdraw/samples/teddy/io/LFWriter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/io/package-info.java b/src/main/java/org/jhotdraw/samples/teddy/io/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/io/package-info.java rename to src/main/java/org/jhotdraw/samples/teddy/io/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/package-info.java b/src/main/java/org/jhotdraw/samples/teddy/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/package-info.java rename to src/main/java/org/jhotdraw/samples/teddy/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/regex/MatchType.java b/src/main/java/org/jhotdraw/samples/teddy/regex/MatchType.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/regex/MatchType.java rename to src/main/java/org/jhotdraw/samples/teddy/regex/MatchType.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/regex/Matcher.java b/src/main/java/org/jhotdraw/samples/teddy/regex/Matcher.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/regex/Matcher.java rename to src/main/java/org/jhotdraw/samples/teddy/regex/Matcher.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/regex/package-info.java b/src/main/java/org/jhotdraw/samples/teddy/regex/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/regex/package-info.java rename to src/main/java/org/jhotdraw/samples/teddy/regex/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/text/NumberedEditorKit.java b/src/main/java/org/jhotdraw/samples/teddy/text/NumberedEditorKit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/text/NumberedEditorKit.java rename to src/main/java/org/jhotdraw/samples/teddy/text/NumberedEditorKit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/text/NumberedParagraphView.java b/src/main/java/org/jhotdraw/samples/teddy/text/NumberedParagraphView.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/text/NumberedParagraphView.java rename to src/main/java/org/jhotdraw/samples/teddy/text/NumberedParagraphView.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/text/NumberedViewFactory.java b/src/main/java/org/jhotdraw/samples/teddy/text/NumberedViewFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/text/NumberedViewFactory.java rename to src/main/java/org/jhotdraw/samples/teddy/text/NumberedViewFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/text/package-info.java b/src/main/java/org/jhotdraw/samples/teddy/text/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/samples/teddy/text/package-info.java rename to src/main/java/org/jhotdraw/samples/teddy/text/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/text/ColorFormatter.java b/src/main/java/org/jhotdraw/text/ColorFormatter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/text/ColorFormatter.java rename to src/main/java/org/jhotdraw/text/ColorFormatter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/text/ColorToolTipTextFormatter.java b/src/main/java/org/jhotdraw/text/ColorToolTipTextFormatter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/text/ColorToolTipTextFormatter.java rename to src/main/java/org/jhotdraw/text/ColorToolTipTextFormatter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/text/FontFormatter.java b/src/main/java/org/jhotdraw/text/FontFormatter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/text/FontFormatter.java rename to src/main/java/org/jhotdraw/text/FontFormatter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/text/JavaNumberFormatter.java b/src/main/java/org/jhotdraw/text/JavaNumberFormatter.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/text/JavaNumberFormatter.java rename to src/main/java/org/jhotdraw/text/JavaNumberFormatter.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/text/package-info.java b/src/main/java/org/jhotdraw/text/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/text/package-info.java rename to src/main/java/org/jhotdraw/text/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/undo/CompositeEdit.java b/src/main/java/org/jhotdraw/undo/CompositeEdit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/undo/CompositeEdit.java rename to src/main/java/org/jhotdraw/undo/CompositeEdit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/undo/Labels.properties b/src/main/java/org/jhotdraw/undo/Labels.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/undo/Labels.properties rename to src/main/java/org/jhotdraw/undo/Labels.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/undo/Labels_de.properties b/src/main/java/org/jhotdraw/undo/Labels_de.properties similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/undo/Labels_de.properties rename to src/main/java/org/jhotdraw/undo/Labels_de.properties diff --git a/jhotdraw7/src/main/java/org/jhotdraw/undo/NonUndoableEdit.java b/src/main/java/org/jhotdraw/undo/NonUndoableEdit.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/undo/NonUndoableEdit.java rename to src/main/java/org/jhotdraw/undo/NonUndoableEdit.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/undo/UndoRedoManager.java b/src/main/java/org/jhotdraw/undo/UndoRedoManager.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/undo/UndoRedoManager.java rename to src/main/java/org/jhotdraw/undo/UndoRedoManager.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/undo/images/editRedo.png b/src/main/java/org/jhotdraw/undo/images/editRedo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/undo/images/editRedo.png rename to src/main/java/org/jhotdraw/undo/images/editRedo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/undo/images/editUndo.png b/src/main/java/org/jhotdraw/undo/images/editUndo.png similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/undo/images/editUndo.png rename to src/main/java/org/jhotdraw/undo/images/editUndo.png diff --git a/jhotdraw7/src/main/java/org/jhotdraw/undo/package-info.java b/src/main/java/org/jhotdraw/undo/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/undo/package-info.java rename to src/main/java/org/jhotdraw/undo/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/util/Images.java b/src/main/java/org/jhotdraw/util/Images.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/util/Images.java rename to src/main/java/org/jhotdraw/util/Images.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/util/LocaleUtil.java b/src/main/java/org/jhotdraw/util/LocaleUtil.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/util/LocaleUtil.java rename to src/main/java/org/jhotdraw/util/LocaleUtil.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/util/Methods.java b/src/main/java/org/jhotdraw/util/Methods.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/util/Methods.java rename to src/main/java/org/jhotdraw/util/Methods.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/util/ResourceBundleUtil.java b/src/main/java/org/jhotdraw/util/ResourceBundleUtil.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/util/ResourceBundleUtil.java rename to src/main/java/org/jhotdraw/util/ResourceBundleUtil.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/util/ReversedList.java b/src/main/java/org/jhotdraw/util/ReversedList.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/util/ReversedList.java rename to src/main/java/org/jhotdraw/util/ReversedList.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/util/package-info.java b/src/main/java/org/jhotdraw/util/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/util/package-info.java rename to src/main/java/org/jhotdraw/util/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/util/prefs/PreferencesUtil.java b/src/main/java/org/jhotdraw/util/prefs/PreferencesUtil.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/util/prefs/PreferencesUtil.java rename to src/main/java/org/jhotdraw/util/prefs/PreferencesUtil.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/util/prefs/ToolBarPrefsHandler.java b/src/main/java/org/jhotdraw/util/prefs/ToolBarPrefsHandler.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/util/prefs/ToolBarPrefsHandler.java rename to src/main/java/org/jhotdraw/util/prefs/ToolBarPrefsHandler.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/util/prefs/package-info.java b/src/main/java/org/jhotdraw/util/prefs/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/util/prefs/package-info.java rename to src/main/java/org/jhotdraw/util/prefs/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/DOMFactory.java b/src/main/java/org/jhotdraw/xml/DOMFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/DOMFactory.java rename to src/main/java/org/jhotdraw/xml/DOMFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/DOMInput.java b/src/main/java/org/jhotdraw/xml/DOMInput.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/DOMInput.java rename to src/main/java/org/jhotdraw/xml/DOMInput.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/DOMOutput.java b/src/main/java/org/jhotdraw/xml/DOMOutput.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/DOMOutput.java rename to src/main/java/org/jhotdraw/xml/DOMOutput.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/DOMStorable.java b/src/main/java/org/jhotdraw/xml/DOMStorable.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/DOMStorable.java rename to src/main/java/org/jhotdraw/xml/DOMStorable.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/DefaultDOMFactory.java b/src/main/java/org/jhotdraw/xml/DefaultDOMFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/DefaultDOMFactory.java rename to src/main/java/org/jhotdraw/xml/DefaultDOMFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/JavaPrimitivesDOMFactory.java b/src/main/java/org/jhotdraw/xml/JavaPrimitivesDOMFactory.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/JavaPrimitivesDOMFactory.java rename to src/main/java/org/jhotdraw/xml/JavaPrimitivesDOMFactory.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/JavaxDOMInput.java b/src/main/java/org/jhotdraw/xml/JavaxDOMInput.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/JavaxDOMInput.java rename to src/main/java/org/jhotdraw/xml/JavaxDOMInput.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/JavaxDOMOutput.java b/src/main/java/org/jhotdraw/xml/JavaxDOMOutput.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/JavaxDOMOutput.java rename to src/main/java/org/jhotdraw/xml/JavaxDOMOutput.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/NanoXMLDOMInput.java b/src/main/java/org/jhotdraw/xml/NanoXMLDOMInput.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/NanoXMLDOMInput.java rename to src/main/java/org/jhotdraw/xml/NanoXMLDOMInput.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/NanoXMLDOMOutput.java b/src/main/java/org/jhotdraw/xml/NanoXMLDOMOutput.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/NanoXMLDOMOutput.java rename to src/main/java/org/jhotdraw/xml/NanoXMLDOMOutput.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/XMLTransferable.java b/src/main/java/org/jhotdraw/xml/XMLTransferable.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/XMLTransferable.java rename to src/main/java/org/jhotdraw/xml/XMLTransferable.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/css/CSSParser.java b/src/main/java/org/jhotdraw/xml/css/CSSParser.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/css/CSSParser.java rename to src/main/java/org/jhotdraw/xml/css/CSSParser.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/css/CSSRule.java b/src/main/java/org/jhotdraw/xml/css/CSSRule.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/css/CSSRule.java rename to src/main/java/org/jhotdraw/xml/css/CSSRule.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/css/StyleManager.java b/src/main/java/org/jhotdraw/xml/css/StyleManager.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/css/StyleManager.java rename to src/main/java/org/jhotdraw/xml/css/StyleManager.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/css/package-info.java b/src/main/java/org/jhotdraw/xml/css/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/css/package-info.java rename to src/main/java/org/jhotdraw/xml/css/package-info.java diff --git a/jhotdraw7/src/main/java/org/jhotdraw/xml/package-info.java b/src/main/java/org/jhotdraw/xml/package-info.java similarity index 100% rename from jhotdraw7/src/main/java/org/jhotdraw/xml/package-info.java rename to src/main/java/org/jhotdraw/xml/package-info.java diff --git a/jhotdraw7/src/main/resources/JHotDrawIcons.png b/src/main/resources/JHotDrawIcons.png similarity index 100% rename from jhotdraw7/src/main/resources/JHotDrawIcons.png rename to src/main/resources/JHotDrawIcons.png diff --git a/jhotdraw7/src/main/resources/sRGBmatrix.m b/src/main/resources/sRGBmatrix.m similarity index 100% rename from jhotdraw7/src/main/resources/sRGBmatrix.m rename to src/main/resources/sRGBmatrix.m diff --git a/jhotdraw7/src/main/resources/xyToRGBmatrix.m b/src/main/resources/xyToRGBmatrix.m similarity index 100% rename from jhotdraw7/src/main/resources/xyToRGBmatrix.m rename to src/main/resources/xyToRGBmatrix.m diff --git a/jhotdraw7/src/test/java/org/jhotdraw/geom/BezierPathTest.java b/src/test/java/org/jhotdraw/geom/BezierPathTest.java similarity index 100% rename from jhotdraw7/src/test/java/org/jhotdraw/geom/BezierPathTest.java rename to src/test/java/org/jhotdraw/geom/BezierPathTest.java -- GitLab