/*
* @(#)MovableChildFiguresSample.java
*
* Copyright (c) 2009-2010 The authors and contributors of JHotDraw.
* You may not use, copy or modify this file, except in compliance with the
* accompanying license terms.
*/
package org.jhotdraw.samples.mini;
import org.jhotdraw.draw.tool.DelegationSelectionTool;
import org.jhotdraw.draw.handle.ResizeHandleKit;
import org.jhotdraw.draw.handle.MoveHandle;
import org.jhotdraw.draw.handle.DragHandle;
import org.jhotdraw.draw.handle.Handle;
import java.awt.BorderLayout;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
import org.jhotdraw.draw.*;
/**
* Example showing how to create a graphical composite figure which holds
* component figures that can be moved independently using handles.
*
* @author Werner Randelshofer
* @version $Id: EditorSample.java 527 2009-06-07 14:28:19Z rawcoder $
*/
public class MovableChildFiguresSample {
private static class LabeledEllipseFigure extends GraphicalCompositeFigure {
private static final long serialVersionUID = 1L;
public LabeledEllipseFigure() {
setPresentationFigure(new EllipseFigure());
LabelFigure label = new LabelFigure("Label");
label.transform(new AffineTransform(0, 0, 0, 0, 25, 37));
add(label);
}
/**
* Return default handles from the presentation figure.
*/
@Override
public Collection<Handle> createHandles(int detailLevel) {
LinkedList<Handle> handles = new LinkedList<Handle>();
switch (detailLevel) {
case 0:
MoveHandle.addMoveHandles(this, handles);
for (Figure child : getChildren()) {
MoveHandle.addMoveHandles(child, handles);
handles.add(new DragHandle(child));
}
break;
case 1:
ResizeHandleKit.addResizeHandles(this, handles);
break;
default:
break;
}
return handles;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// Create a simple drawing consisting of three
// text areas and an elbow connection.
LabeledEllipseFigure ta = new LabeledEllipseFigure();
ta.setBounds(new Point2D.Double(10, 10), new Point2D.Double(100, 100));
LabeledEllipseFigure tb = new LabeledEllipseFigure();
tb.setBounds(new Point2D.Double(220, 120), new Point2D.Double(310, 210));
LabeledEllipseFigure tc = new LabeledEllipseFigure();
tc.setBounds(new Point2D.Double(220, 10), new Point2D.Double(310, 100));
Drawing drawing = new DefaultDrawing();
drawing.add(ta);
drawing.add(tb);
drawing.add(tc);
// Create a frame with a drawing view and a drawing editor
JFrame f = new JFrame("My Drawing");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400, 300);
DrawingView view = new DefaultDrawingView();
view.setDrawing(drawing);
f.add(view.getComponent());
f.add(new JLabel("Press space bar to toggle handles."), BorderLayout.SOUTH);
DrawingEditor editor = new DefaultDrawingEditor();
editor.add(view);
editor.setTool(new DelegationSelectionTool());
f.setVisible(true);
}
});
}
}