package vooga.scroller.level_editor.view; import javax.swing.JScrollPane; import vooga.scroller.level_editor.LevelEditing; import vooga.scroller.level_editor.commands.CommandConstants; import vooga.scroller.util.Renderable; import vooga.scroller.util.Renderer; import vooga.scroller.util.mvc.vcFramework.TabbedToolsView; import vooga.scroller.util.mvc.vcFramework.Tools; import vooga.scroller.util.mvc.vcFramework.WorkspaceView; import vooga.scroller.viewUtil.EasyGridFactory; /** * This class is a specialized Workspace for a Level Editor. * * @author Dagbedji Fagnisse * */ public class LEWorkspaceView extends WorkspaceView<LevelEditing> implements Renderer<LevelEditing> { /** * */ private static final long serialVersionUID = 1L; private LEGridView myGridView; private TabbedToolsView<LevelEditing> myToolsView; private JScrollPane myLevelGridScroller; private JScrollPane myToolsScroller; /**TODO - This class could use a bit of redesign to reduce the * amount of casts used. * Create a Workspace with the specified host, id, and renderable * * @param host - parent containing this workspace, typically a Window * @param id - containing tab * @param grid - renderable to be loaded in this workspace. * @param tools - tools to be used in editing */ public LEWorkspaceView (LEView host, int id, Renderable<LevelEditing> grid, Tools<LevelEditing> tools) { super(id, host); myGridView = (LEGridView) grid.initializeRenderer(this); myToolsView = new TabbedToolsView<LevelEditing>(tools, this); myLevelGridScroller = new JScrollPane((LEGridView) myGridView, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); myToolsScroller = new JScrollPane(myToolsView, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); EasyGridFactory.layout(this, myLevelGridScroller, myToolsScroller); } @Override public void process (Object isn) { if (isn instanceof String) { String cmd = (String) isn; if (getCommand(cmd).equals(CommandConstants.CREATE_SPRITE)) { cmd = cmd + CommandConstants.SPACE + myToolsView.getSelectedEditableDependent(); } super.process(cmd); } else { super.process(isn); } } private String getCommand (String cmd) { return cmd.split(CommandConstants.SPACE)[0]; } /** * Check for validity of this workspace for simulation * @return - true if the workspace complies with simulation requirements. */ public boolean isValidForSimulation () { return ((LEGridView) myGridView).isValidForSimulation(); } @Override public void render (Renderable<LevelEditing> grid) { myGridView.render(grid); } @Override public void setRenderable (Renderable<LevelEditing> grid) { myGridView.setRenderable(grid); } @Override public Renderable<LevelEditing> getRenderable () { return myGridView.getRenderable(); } /** * Returns the renderer * @return */ public Renderer<LevelEditing> getEditableRenderer () { return myGridView; } }