package org.archstudio.bna.demo; import org.archstudio.bna.BNACanvas; import org.archstudio.bna.IBNAModel; import org.archstudio.bna.IBNAView; import org.archstudio.bna.IBNAWorld; import org.archstudio.bna.IThingLogicManager; import org.archstudio.bna.facets.IHasMutableReferencePoint; import org.archstudio.bna.facets.IHasMutableSelected; import org.archstudio.bna.facets.IHasMutableSize; import org.archstudio.bna.logics.background.RotatingOffsetLogic; import org.archstudio.bna.logics.editing.ClickSelectionLogic; import org.archstudio.bna.logics.editing.DragMovableLogic; import org.archstudio.bna.logics.editing.EditTextLogic; import org.archstudio.bna.logics.editing.KeyNudgerLogic; import org.archstudio.bna.logics.editing.MarqueeSelectionLogic; import org.archstudio.bna.logics.editing.ReshapeRectangleLogic; import org.archstudio.bna.logics.editing.ReshapeSplineLogic; import org.archstudio.bna.logics.editing.StandardCursorLogic; import org.archstudio.bna.logics.events.WorldThingExternalEventsLogic; import org.archstudio.bna.logics.events.WorldThingInternalEventsLogic; import org.archstudio.bna.logics.information.ToolTipLogic; import org.archstudio.bna.logics.navigating.PanAndZoomLogic; import org.archstudio.bna.things.shapes.EllipseThing; import org.archstudio.bna.things.shapes.RectangleThing; import org.archstudio.bna.things.utility.GridThing; import org.archstudio.bna.things.utility.ShadowThing; import org.archstudio.bna.utils.AbstractCoordinateMapper; import org.archstudio.bna.utils.Assemblies; import org.archstudio.bna.utils.BNARenderingSettings; import org.archstudio.bna.utils.BNAUtils; import org.archstudio.bna.utils.DefaultBNAModel; import org.archstudio.bna.utils.DefaultBNAView; import org.archstudio.bna.utils.DefaultBNAWorld; import org.archstudio.bna.utils.LinearCoordinateMapper; import org.archstudio.bna.utils.UserEditableUtils; import org.archstudio.sysutils.Finally; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class ShapeDemo { static Rectangle originRectangle = AbstractCoordinateMapper.getDefaultBounds(); static Point origin = new Point(originRectangle.x + originRectangle.width / 2, originRectangle.y + originRectangle.height / 2); public static void main(String args[]) { Display display = new Display(); final Shell shell = new Shell(display); shell.setLayout(new FillLayout()); BNACanvas bnaComposite; IBNAModel model; IBNAWorld world; IBNAView view; try (Finally lock = BNAUtils.lock()) { model = new DefaultBNAModel(); world = new DefaultBNAWorld("bna", model); view = new DefaultBNAView(null, world, new LinearCoordinateMapper()); GridThing.createIn(world); ShadowThing.createIn(world); setupTopWorld(world); populateModel(world); bnaComposite = new BNACanvas(shell, SWT.H_SCROLL | SWT.V_SCROLL, view); BNARenderingSettings.setAntialiasGraphics(bnaComposite, true); BNARenderingSettings.setAntialiasText(bnaComposite, true); BNARenderingSettings.setDecorativeGraphics(bnaComposite, true); BNARenderingSettings.setDisplayShadows(bnaComposite, true); } bnaComposite.setSize(500, 500); bnaComposite.setBackground(display.getSystemColor(SWT.COLOR_WHITE)); shell.setSize(400, 400); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); System.exit(0); } static void setupTopWorld(IBNAWorld world) { IThingLogicManager logicManager = world.getThingLogicManager(); logicManager.addThingLogic(PanAndZoomLogic.class); setupWorld(world); } static void setupWorld(IBNAWorld world) { IThingLogicManager logicManager = world.getThingLogicManager(); logicManager.addThingLogic(ClickSelectionLogic.class); logicManager.addThingLogic(DragMovableLogic.class); logicManager.addThingLogic(EditTextLogic.class); logicManager.addThingLogic(KeyNudgerLogic.class); logicManager.addThingLogic(MarqueeSelectionLogic.class); logicManager.addThingLogic(PanAndZoomLogic.class); logicManager.addThingLogic(ReshapeRectangleLogic.class); logicManager.addThingLogic(ReshapeSplineLogic.class); logicManager.addThingLogic(RotatingOffsetLogic.class); logicManager.addThingLogic(StandardCursorLogic.class); logicManager.addThingLogic(ToolTipLogic.class); logicManager.addThingLogic(WorldThingExternalEventsLogic.class); logicManager.addThingLogic(WorldThingInternalEventsLogic.class); } static void populateModel(IBNAWorld world) { { EllipseThing t = Assemblies.createEllipse(world, null, null); UserEditableUtils.addEditableQualities(t, IHasMutableSelected.USER_MAY_SELECT, IHasMutableSize.USER_MAY_RESIZE, IHasMutableReferencePoint.USER_MAY_MOVE); t.setColor(new RGB(224, 0, 0)); t.setSecondaryColor(new RGB(192, 0, 0)); t.setGlowColor(new RGB(255, 0, 0)); } { RectangleThing t = Assemblies.createRectangle(world, null, null); UserEditableUtils.addEditableQualities(t, IHasMutableSelected.USER_MAY_SELECT, IHasMutableSize.USER_MAY_RESIZE, IHasMutableReferencePoint.USER_MAY_MOVE); t.setColor(new RGB(224, 224, 0)); t.setSecondaryColor(new RGB(192, 192, 0)); t.setGlowColor(new RGB(255, 255, 0)); } } }