JavaDrawApp.java
/*
* @(#)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 java.io.File;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JToolBar;
import CH.ifa.draw.application.DrawApplication;
import CH.ifa.draw.contrib.DiamondFigure;
import CH.ifa.draw.contrib.MDIDesktopPane;
import CH.ifa.draw.contrib.MDI_DrawApplication;
import CH.ifa.draw.contrib.PolygonTool;
import CH.ifa.draw.contrib.TriangleFigure;
import CH.ifa.draw.contrib.WindowMenu;
import CH.ifa.draw.figures.BorderTool;
import CH.ifa.draw.figures.ConnectedTextTool;
import CH.ifa.draw.figures.ElbowConnection;
import CH.ifa.draw.figures.EllipseFigure;
import CH.ifa.draw.figures.InsertImageCommand;
import CH.ifa.draw.figures.LineConnection;
import CH.ifa.draw.figures.LineFigure;
import CH.ifa.draw.figures.RectangleFigure;
import CH.ifa.draw.figures.RoundRectangleFigure;
import CH.ifa.draw.figures.ScribbleTool;
import CH.ifa.draw.figures.TextFigure;
import CH.ifa.draw.figures.TextTool;
import CH.ifa.draw.framework.Drawing;
import CH.ifa.draw.framework.Tool;
import CH.ifa.draw.standard.AbstractCommand;
import CH.ifa.draw.standard.ConnectionTool;
import CH.ifa.draw.standard.CreationTool;
import CH.ifa.draw.util.Animatable;
import CH.ifa.draw.util.Command;
import CH.ifa.draw.util.CommandMenu;
import CH.ifa.draw.util.UndoableCommand;
import CH.ifa.draw.util.UndoableTool;
import Testing.RunToTest;
/**
* @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;
public JavaDrawApp() {
super("JHotDraw");
}
/**
* Factory method which create a new instance of this
* application.
*
* @return newly created application
*/
protected DrawApplication createApplication() {
return new JavaDrawApp();
}
//-- application life cycle --------------------------------------------
public void destroy() {
super.destroy();
endAnimation();
}
//-- DrawApplication overrides -----------------------------------------
protected void createTools(JToolBar palette) {
super.createTools(palette);
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));
}
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() {
//RunToTest.endStartSeparation("#doStart");
//RunToTest.endStartSeparation("Start Animation");
startAnimation();
//RunToTest.endStartSeparation("#doStop");
}
};
menu.add(cmd);
cmd = new AbstractCommand("Stop Animation", this) {
public void execute() {
//RunToTest.endStartSeparation("#doStart");
//RunToTest.endStartSeparation("end Animation");
endAnimation();
//RunToTest.endStartSeparation("#doStop");
}
};
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");
File imagesDirectory = new File(fgSampleImagesPath);
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) {}
return menu;
}
protected Drawing createDrawing() {
return new BouncingDrawing();
//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;
}
}
//-- main -----------------------------------------------------------
public static void main(String[] args) {
JavaDrawApp window = new JavaDrawApp();
//RunToTest.endStartSeparation("#doStart");
//RunToTest.endStartSeparation("windowOpen");
//RunToTest.endStartSeparation("#doStop");
window.open();
//RunToTest.endStartSeparation("#doStop");
}
}