package editor; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListModel; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.SwingConstants; import editor.EditorConstants.Tools; public class Properties extends JPanel { private static final long serialVersionUID = -8555733808183623384L; private static final Dimension SIZE = new Dimension(150, 80); private JComboBox<Category> tileCategory; private JComboBox<Data> tiles; private JComboBox<Trigger> triggers; private Data selectedData; private Trigger selectedTrigger; public final LevelEditor editor; public Properties(final LevelEditor editor) { this.editor = editor; this.setLayout(new GridLayout(16, 1)); loadTiles(); loadCategory(); loadTriggers(); JLabel label = new JLabel("Tileset Category"); label.setHorizontalAlignment(SwingConstants.CENTER); this.add(label); this.add(tileCategory); this.add(tiles); label = new JLabel("Triggers"); label.setHorizontalAlignment(SwingConstants.CENTER); this.add(label); this.add(triggers); tileCategory.setSelectedIndex(0); tiles.setSelectedIndex(0); triggers.setSelectedIndex(0); this.validate(); } public Data getSelectedData() { return this.selectedData; } public JComboBox<Trigger> getTriggerList(){ return this.triggers; } public Trigger getSelectedTrigger() { return this.selectedTrigger; } private void loadCategory() { tileCategory = new JComboBox<Category>(); tileCategory.setPreferredSize(SIZE); new KeySelectionRenderer(tileCategory) { private static final long serialVersionUID = 1L; @Override public String getDisplayValue(Object item) { Category c = (Category) item; return c.name; } }; tileCategory.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { EditorConstants.chooser = Tools.Properties; editor.input.forceCancelDrawing(); if (e.getStateChange() == ItemEvent.SELECTED) { Category c = (Category) e.getItem(); DefaultComboBoxModel<Data> model = (DefaultComboBoxModel<Data>) tiles.getModel(); for (Data d : c.nodes) { model.addElement(d); } } if (e.getStateChange() == ItemEvent.DESELECTED) { DefaultComboBoxModel<Data> model = (DefaultComboBoxModel<Data>) tiles.getModel(); model.removeAllElements(); } } }); DefaultComboBoxModel<Category> model = (DefaultComboBoxModel<Category>) this.tileCategory.getModel(); ArrayList<Category> list = EditorConstants.getInstance().getCategories(); int size = list.size(); for (int i = 0; i < size; i++) { model.addElement(list.get(i)); } } private void loadTiles() { tiles = new JComboBox<Data>(); tiles.setPreferredSize(SIZE); new KeySelectionRenderer(tiles) { private static final long serialVersionUID = 1L; @Override public String getDisplayValue(Object item) { Data d = (Data) item; return d.name; } }; tiles.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { EditorConstants.chooser = Tools.Properties; editor.input.forceCancelDrawing(); if (e.getStateChange() == ItemEvent.SELECTED) { Data d = (Data) e.getItem(); Properties.this.selectedData = d; TilePropertiesPanel panel = editor.controlPanel.getPropertiesPanel(); panel.alphaInputField.setText(Integer.toString(d.alpha)); panel.redInputField.setText(Integer.toString(d.red)); panel.greenInputField.setText(Integer.toString(d.green)); panel.blueInputField.setText(Integer.toString(d.blue)); editor.controlPanel.setSelectedData(d); editor.validate(); } } }); Category c = EditorConstants.getInstance().getCategories().get(0); DefaultComboBoxModel<Data> model = (DefaultComboBoxModel<Data>) tiles.getModel(); for (Data d : c.nodes) { model.addElement(d); } } private void loadTriggers() { triggers = new JComboBox<Trigger>(); triggers.setPreferredSize(SIZE); new KeySelectionRenderer(triggers) { private static final long serialVersionUID = 1L; @Override public String getDisplayValue(Object item) { Trigger t = (Trigger) item; return t.getName(); } }; triggers.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { EditorConstants.chooser = Tools.Properties; if (e.getStateChange() == ItemEvent.SELECTED) { Trigger t = (Trigger) e.getItem(); TilePropertiesPanel panel = editor.controlPanel.getPropertiesPanel(); panel.alphaField.setText(Integer.toString(t.getPositionX())); panel.redField.setText(Integer.toString(t.getPositionY())); panel.greenField.setText(Integer.toString((t.getTriggerID() >> 8) & 0xFF)); panel.blueField.setText(Integer.toString(t.getTriggerID() & 0xFF)); Properties.this.selectedTrigger = t; editor.controlPanel.setSelectedTrigger(t); editor.validate(); } } }); DefaultComboBoxModel<Trigger> model = (DefaultComboBoxModel<Trigger>) this.triggers.getModel(); ArrayList<Trigger> list = EditorConstants.getInstance().getTriggers(); for (Trigger t : list) { model.addElement(t); } } public void reloadTriggers() { if (this.triggers != null) { DefaultComboBoxModel<Trigger> model = (DefaultComboBoxModel<Trigger>) this.triggers.getModel(); model.removeAllElements(); Trigger trigger = new Trigger(); trigger.setTriggerID((short) 0); trigger.setName("Eraser"); model.addElement(trigger); JList<Trigger> list = this.editor.scriptEditor.scriptViewer.getTriggerList(); DefaultListModel<Trigger> scriptModel = (DefaultListModel<Trigger>) list.getModel(); for (int i = 0; i < scriptModel.getSize(); i++) { model.addElement(scriptModel.get(i)); } this.revalidate(); } } @Override public void validate() { switch (EditorConstants.metadata) { case Pixel_Data: this.tileCategory.setEnabled(true); this.tiles.setEnabled(true); this.triggers.setEnabled(false); break; case Triggers: this.tileCategory.setEnabled(false); this.tiles.setEnabled(false); this.triggers.setEnabled(true); if (editor.scriptEditor == null) break; } super.validate(); } }