package vooga.scroller.util.mvc.vcFramework; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Map; import javax.swing.BoxLayout; import javax.swing.JPanel; import javax.swing.JTabbedPane; import vooga.scroller.util.mvc.IView; import vooga.scroller.viewUtil.EasyGridFactory; import vooga.scroller.viewUtil.RadioGroup; /** * EditorView is responsible for presenting editing tools to the user. * It provides a UI for the user to select various kind of sprites or * environment elements and add them to the actual level being edited. * @param <D> - Domain Descriptor * @author Dagbedji Fagnisse * */ public class TabbedToolsView<D extends IDomainDescriptor> extends WindowComponent<D> { private static final long serialVersionUID = 1L; private JPanel myIndependentsUI; private String mySelectedEditableDependent; private JPanel myEditableDependentsUI; private JTabbedPane myTabs; private Tools<D> myTools; /** * Build a side tabbed option view with the provided tools. * @param tools - to be used to configure this view * @param parent - container */ public TabbedToolsView (Tools<D> tools, IView<D> parent) { super(parent, getDefaultWidthRatio(), getDefaultHeightRatio()); myTabs = new JTabbedPane(); myEditableDependentsUI = new JPanel(); myEditableDependentsUI.setLayout(new BoxLayout(myEditableDependentsUI, BoxLayout.PAGE_AXIS)); myIndependentsUI = new JPanel(); myIndependentsUI.setLayout(new BoxLayout(myIndependentsUI, BoxLayout.PAGE_AXIS)); setTools(tools); } private static double getDefaultHeightRatio () { return ViewConstants.DEFAULT_TOOLSVIEW_HEIGHT_RATIO; } private static double getDefaultWidthRatio () { return ViewConstants.DEFAULT_TOOLSVIEW_WIDTH_RATIO; } /** * State to keep track of the currently selected location-dependent option * It is like a flip-flop * @return */ public String getSelectedEditableDependent () { return mySelectedEditableDependent; } private void setSelectedEditableDependent (String spriteID) { mySelectedEditableDependent = spriteID; } private void setTools (Tools<D> t) { myTools = t; setup(); } private void setup() { for (Map<Image, String> m : myTools.getEditableDependents()) { if (m.size() > 0) { JPanel edDepButtons = new RadioGroup(this.getSize(), new SelectEditableDependentsListener(), m); myEditableDependentsUI.add(edDepButtons); } } for (String keyword : myTools.getEditableIndependents().keySet()) { Map<Image, String> m = myTools.getEditableIndependents().get(keyword); if (m.size() > 0) { JPanel edIndButtons = new RadioGroup(this.getSize(), new EditableIndependentsListener(keyword), m); myIndependentsUI.add(edIndButtons); } } myTabs.add(myEditableDependentsUI, myTools.getEditableDependentsTitle()); myTabs.add(myIndependentsUI, myTools.getEditableIndependentsTitle()); EasyGridFactory.layout(this, myTabs); } private class EditableIndependentsListener implements ActionListener { private String myKeyword; EditableIndependentsListener(String s) { myKeyword = s; } @Override public void actionPerformed (ActionEvent e) { process(myKeyword + " " + e.getActionCommand()); } } private class SelectEditableDependentsListener implements ActionListener { @Override public void actionPerformed (ActionEvent e) { setSelectedEditableDependent(e.getActionCommand()); } } }