package script_editor; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JSeparator; //import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import editor.KeySelectionRenderer; import editor.Trigger; public class ScriptViewer extends JPanel implements ActionListener, ListSelectionListener { private static final long serialVersionUID = 1L; private final ScriptEditor editor; private DefaultListModel<Trigger> model; private JList<Trigger> triggerList; private JScrollPane scrollPane; private JButton createButton; private JButton removeButton; private JButton clearButton; private Trigger selectedTrigger; @SuppressWarnings("unused") private int iterator; public ScriptViewer(ScriptEditor editor) { super(); this.editor = editor; this.selectedTrigger = null; this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); this.setBorder(BorderFactory.createTitledBorder("Trigger List:")); constructingList(); constructingButtons(); this.revalidate(); } private void constructingList() { this.model = new DefaultListModel<Trigger>(); this.triggerList = new JList<Trigger>(); this.triggerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.triggerList.setLayoutOrientation(JList.VERTICAL); this.triggerList.setVisibleRowCount(0); Dimension size = new Dimension(100, 300); this.triggerList.setSize(size); this.triggerList.setMinimumSize(size); this.triggerList.setModel(this.model); new KeySelectionRenderer(this.triggerList) { private static final long serialVersionUID = 1L; @Override public String getDisplayValue(Object item) { Trigger t = (Trigger) item; return t.getName(); } }; this.triggerList.addListSelectionListener(this); scrollPane = new JScrollPane(this.triggerList); scrollPane.setSize(size); scrollPane.setMinimumSize(size); scrollPane.setVisible(true); this.add(scrollPane); } private void constructingButtons() { JPanel panel = new JPanel(); Dimension size = new Dimension(90, 20); this.createButton = new JButton("Create"); this.createButton.setActionCommand(Integer.toString(0)); this.createButton.addActionListener(this); this.createButton.setSize(size); this.createButton.setMaximumSize(size); this.createButton.setMinimumSize(size); this.createButton.setPreferredSize(size); panel.add(createButton); panel.add(new JSeparator(SwingConstants.HORIZONTAL)); this.removeButton = new JButton("Remove"); this.removeButton.setActionCommand(Integer.toString(1)); this.removeButton.addActionListener(this); this.removeButton.setSize(size); this.removeButton.setMaximumSize(size); this.removeButton.setMinimumSize(size); this.removeButton.setPreferredSize(size); panel.add(removeButton); panel.add(new JSeparator(SwingConstants.HORIZONTAL)); this.clearButton = new JButton("Clear"); this.clearButton.setActionCommand(Integer.toString(2)); this.clearButton.addActionListener(this); this.clearButton.setSize(size); this.clearButton.setMaximumSize(size); this.clearButton.setMinimumSize(size); this.clearButton.setPreferredSize(size); panel.add(clearButton); this.add(panel); } public void addTrigger(Trigger t) { this.model.add(0, t); this.validate(); } public void removeTrigger() { this.model.remove(this.triggerList.getSelectedIndex()); } public Trigger getSelectedTrigger() { return this.selectedTrigger; } public JList<Trigger> getTriggerList() { return this.triggerList; } @Override public void actionPerformed(ActionEvent event) { switch (Integer.valueOf(event.getActionCommand())) { default: break; case 0: {// Create Button Trigger t = new Trigger(); t.setTriggerID((short) 0); t.setName("<Untitled>"); this.model.addElement(t); this.validate(); JScrollBar vertical = scrollPane.getVerticalScrollBar(); vertical.setValue(vertical.getMaximum() + 1); this.triggerList.setSelectedIndex(this.model.getSize() - 1); this.editor.scriptChanger.enable(); break; } case 1: {// Remove button int index = this.triggerList.getSelectedIndex(); if (index != -1 && !this.model.isEmpty()) this.model.remove(index); else if (!this.model.isEmpty()) { this.model.remove(this.model.getSize() - 1); } if (this.model.isEmpty()) { ScriptViewer.this.editor.scriptChanger.clear(); ScriptViewer.this.editor.scriptChanger.disable(); } break; } case 2: { while (!this.model.isEmpty()) { this.model.remove(0); } ScriptViewer.this.editor.scriptChanger.clear(); ScriptViewer.this.editor.scriptChanger.disable(); break; } } this.editor.getLevelEditorParent().properties.reloadTriggers(); this.triggerList.validate(); } @Override public void valueChanged(ListSelectionEvent event) { if (!event.getValueIsAdjusting()) { if (event.getSource() instanceof JList) { @SuppressWarnings("unchecked") JList<Trigger> list = (JList<Trigger>) event.getSource(); this.selectedTrigger = list.getSelectedValue(); if (this.selectedTrigger != null) { this.editor.scriptChanger.disallowFieldsToUpdate(); this.editor.scriptChanger.getNameField().setText(""); // this.editor.scriptChanger.getXField().setText(""); // this.editor.scriptChanger.getYField().setText(""); this.editor.scriptChanger.getIDField().setText(""); this.editor.scriptChanger.getScriptArea().setText(""); this.editor.scriptChanger.getNameField().setText(this.selectedTrigger.getName()); // this.editor.scriptChanger.getXField().setText(Integer.toString(this.selectedTrigger.getPositionX())); // this.editor.scriptChanger.getYField().setText(Integer.toString(this.selectedTrigger.getPositionY())); this.editor.scriptChanger.getIDField().setText(Integer.toString(this.selectedTrigger.getTriggerID())); this.editor.scriptChanger.getScriptArea().setText(this.selectedTrigger.getScript()); this.editor.scriptChanger.allowFieldsToUpdate(); } } } } }