/**
*
*/
package cz.cuni.mff.peckam.java.origamist.gui.editor;
import java.awt.Cursor;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
import com.sun.j3d.exp.swing.JCanvas3D;
import cz.cuni.mff.peckam.java.origamist.gui.common.StepRenderer;
import cz.cuni.mff.peckam.java.origamist.model.Origami;
import cz.cuni.mff.peckam.java.origamist.model.Step;
import cz.cuni.mff.peckam.java.origamist.modelstate.ModelPoint;
import cz.cuni.mff.peckam.java.origamist.modelstate.ModelSegment;
import cz.cuni.mff.peckam.java.origamist.modelstate.ModelState;
import cz.cuni.mff.peckam.java.origamist.modelstate.arguments.OperationArgument;
/**
* A renderer of a step that supports mouse interaction with the step.
*
* @author Martin Pecka
*/
public class StepEditor extends StepRenderer
{
/** */
private static final long serialVersionUID = -785240462702127380L;
{
addPropertyChangeListener("pickMode", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt)
{
switch ((PickMode) evt.getNewValue()) {
case POINT:
StepEditor.this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
break;
case LINE:
StepEditor.this.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
break;
case LAYER:
StepEditor.this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
break;
}
}
});
}
/**
*
*/
public StepEditor()
{
super();
setOpaque(true);
}
/**
* @param origami
* @param step
*/
public StepEditor(Origami origami, Step step)
{
super(origami, step);
setOpaque(true);
}
@Override
protected StepEditingCanvasController createCanvasController(JCanvas3D canvas)
{
return new StepEditingCanvasController(canvas.getOffscreenCanvas3D());
}
@Override
public StepEditingCanvasController getCanvasController()
{
return (StepEditingCanvasController) super.getCanvasController();
}
@Override
protected ModelState getModelState()
{
return step != null ? step.getModelState(true) : null;
}
/**
* @return The message bar that can be used to display some text to the user.
*/
public ExtendedMessageBar getMessageBar()
{
return getCanvasController().getMessageBar();
}
/**
* @return The type of primitives the user can pick.
*/
public PickMode getPickMode()
{
return getCanvasController().getPickMode();
}
/**
* @param pickMode The type of primitives the user can pick.
*/
public void setPickMode(PickMode pickMode)
{
getCanvasController().setPickMode(pickMode);
}
/**
* @param currentOperationArgument The operation argument the editor fetches data for.
*/
public void setCurrentOperationArgument(OperationArgument currentOperationArgument)
{
getCanvasController().setCurrentOperationArgument(currentOperationArgument);
}
/**
* @return If a line is chosen, return it, otherwise return <code>null</code>.
*/
public ModelSegment getChosenLine()
{
return getCanvasController().getChosenLine();
}
/**
* @return If an existing line is chosen, return it, otherwise return <code>null</code>.
*/
public ModelSegment getChosenExistingLine()
{
return getCanvasController().getChosenExistingLine();
}
/**
* @return If some existing lines are chosen, return them, otherwise return <code>null</code>.
*/
public List<ModelSegment> getChosenExistingLines()
{
return getCanvasController().getChosenExistingLines();
}
/**
* @return If a point is chosen, return it, otherwise return <code>null</code>.
*/
public ModelPoint getChosenPoint()
{
return getCanvasController().getChosenPoint();
}
/**
* @return If some layers are chosen, return them, otherwise return <code>null</code>.
*/
public List<Integer> getChosenLayers()
{
return getCanvasController().getChosenLayers();
}
/**
* Clear all chosen items.
*/
public void clearChosenItems()
{
getCanvasController().clearChosenItems();
}
/**
* @return True if the user is currently choosing the second point of a line.
*/
public boolean isChoosingSecondPoint()
{
return getCanvasController().isChoosingSecondPoint();
}
}