package com.clearlyspam23.GLE.GUI.template; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import com.clearlyspam23.GLE.PluginManager; import com.clearlyspam23.GLE.Template; import com.clearlyspam23.GLE.GUI.SubPanel; import com.clearlyspam23.GLE.level.LayerDefinition; import com.clearlyspam23.GLE.level.LayerTemplate; import com.clearlyspam23.GLE.util.Utility; public class LayerPanel extends TemplateSubPanel{ /** * */ private static final long serialVersionUID = 1L; private JTextField nameField; private JScrollPane scrollPane; private JComboBox<String> typeBox; private JList<String> layerList; private DefaultListModel<String> layerListModel; @SuppressWarnings("rawtypes") private List<LayerDefinition> knownLayerDefs; private List<LayerWrapper> activeLayers = new ArrayList<LayerWrapper>(); private List<SubPanel> layerPanels = new ArrayList<SubPanel>(); private LayerWrapper currentLayer; private static class LayerWrapper{ public LayerTemplate template; public LayerWrapper(LayerTemplate template, String name){ this.template = template; template.setName(name); } } /** * Create the panel. */ @SuppressWarnings("rawtypes") public LayerPanel(PluginManager pluginManager) { super(pluginManager); setLayout(null); this.knownLayerDefs = pluginManager.getRecognizedLayerDefs(); for(LayerDefinition def : knownLayerDefs){ layerPanels.add(def.getLayerComponent()); } JLabel lblNewLabel = new JLabel("Layers"); lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 14)); lblNewLabel.setBounds(20, 11, 65, 17); add(lblNewLabel); JLabel lblName = new JLabel("Name"); lblName.setBounds(200, 40, 37, 14); add(lblName); JLabel lblType = new JLabel("Type"); lblType.setBounds(200, 65, 46, 14); add(lblType); nameField = new JTextField(); nameField.setBounds(247, 37, 215, 20); add(nameField); nameField.setColumns(10); scrollPane = new JScrollPane(); scrollPane.setBounds(186, 90, 354, 451); add(scrollPane); // layerPanel = new JPanel(); // scrollPane.setViewportView(layerPanel); typeBox = new JComboBox<String>(); typeBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // propsPanel.removeAll(); // SubPanel p = propertiesPanels.get(propsTypeField.getSelectedIndex()); // p.reset(); // propsPanel.add(p); // validate(); // repaint(); if(typeBox.getSelectedIndex()>=0){ // scrollPane.setViewportView(null); // layerPanel.removeAll(); SubPanel p = layerPanels.get(typeBox.getSelectedIndex()); p.reset(); // layerPanel.add(p); scrollPane.setViewportView(p); validate(); repaint(); } } }); typeBox.setBounds(247, 62, 215, 20); // typeBox.setSelectedIndex(knownLayerDefs.size()>0 ? 0 : -1); add(typeBox); JButton btnCreate = new JButton("Create"); btnCreate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if(typeBox.getSelectedIndex()>=0){ int i = activeLayers.size(); String defName = "Layer"+i; layerListModel.addElement(defName); layerList.setSelectedIndex(layerListModel.getSize()-1); } } }); btnCreate.setBounds(20, 484, 72, 23); add(btnCreate); JButton btnNewButton = new JButton("Delete"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // removeLayer(layerList.getSelectedIndex()); int i = layerList.getSelectedIndex(); if(i>=0){ currentLayer = null; activeLayers.remove(i); layerListModel.remove(i); if(layerListModel.isEmpty()){ // layerPanel.removeAll(); scrollPane.setViewportView(null); validate(); repaint(); layerList.setSelectedIndex(-1); } else{ if(i-1<0) i = 1; layerList.setSelectedIndex(i-1); } } } }); btnNewButton.setBounds(102, 484, 72, 23); add(btnNewButton); JButton btnUp = new JButton("Up"); btnUp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(layerList.getSelectedIndex()>0){ int i = layerList.getSelectedIndex(); LayerWrapper t = activeLayers.remove(i); activeLayers.add(i-1, t); buildCurrentProp(); currentLayer = null; layerListModel.remove(i); currentLayer = null; layerListModel.insertElementAt(t.template.getName(), i-1); layerList.setSelectedIndex(i-1); validate(); repaint(); } } }); btnUp.setBounds(20, 518, 72, 23); add(btnUp); JButton btnDown = new JButton("Down"); btnDown.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(layerList.getSelectedIndex()<activeLayers.size()-1){ int i = layerList.getSelectedIndex(); LayerWrapper t = activeLayers.remove(i); activeLayers.add(i+1, t); buildCurrentProp(); currentLayer = null; layerListModel.remove(i); currentLayer = null; layerListModel.insertElementAt(t.template.getName(), i+1); layerList.setSelectedIndex(i+1); validate(); repaint(); } } }); btnDown.setBounds(102, 518, 72, 23); add(btnDown); JScrollPane scrollPane_1 = new JScrollPane(); scrollPane_1.setBounds(20, 40, 156, 433); add(scrollPane_1); layerList = new JList<String>(); layerList.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent arg0) { checkLayers(); } }); scrollPane_1.setViewportView(layerList); layerListModel = new DefaultListModel<String>(); layerList.setModel(layerListModel); Utility.setModelTo(typeBox, knownLayerDefs); checkLayers(); } @SuppressWarnings({ "unchecked", "rawtypes" }) private void checkLayers(){ boolean shouldBeEnabled = layerList.getSelectedIndex()>=0; if(currentLayer!=null){ buildCurrentProp(); layerListModel.setElementAt(nameField.getText(), activeLayers.indexOf(currentLayer)); } // layerPanel.removeAll(); scrollPane.setViewportView(null); nameField.setEnabled(shouldBeEnabled); typeBox.setEnabled(shouldBeEnabled); if(shouldBeEnabled){ if(layerList.getSelectedIndex()==activeLayers.size()){ int i = activeLayers.size(); String defName = "Layer"+i; nameField.setText(defName); LayerDefinition def = knownLayerDefs.get(typeBox.getSelectedIndex()); SubPanel sub = layerPanels.get(typeBox.getSelectedIndex()); sub.reset(); activeLayers.add(new LayerWrapper(def.buildFromEditorGUI(sub), defName)); } currentLayer = activeLayers.get(layerList.getSelectedIndex()); typeBox.setSelectedIndex(knownLayerDefs.indexOf(currentLayer.template.getDefinition())); currentLayer.template.getDefinition().setEditorGUITo((SubPanel) scrollPane.getViewport().getView(), currentLayer.template); nameField.setText(currentLayer.template.getName()); } else nameField.setText(""); validate(); repaint(); } @SuppressWarnings("unchecked") private void buildCurrentProp(){ String text = nameField.getText(); currentLayer.template = knownLayerDefs.get(typeBox.getSelectedIndex()).buildFromEditorGUI((SubPanel) scrollPane.getViewport().getView()); currentLayer.template.setName(text); } private void buildFromActiveLayers(){ currentLayer = null; layerListModel.removeAllElements(); for(LayerWrapper t : activeLayers){ layerListModel.addElement(t.template.getName()); } if(activeLayers.isEmpty()) currentLayer = null; else currentLayer = activeLayers.get(0); layerList.setSelectedIndex(activeLayers.size()> 0 ? 0 : -1); } public void setToTemplate(Template template) { activeLayers.clear(); for(LayerTemplate t : template.getLayers()){ activeLayers.add(new LayerWrapper(t, t.getName())); } buildFromActiveLayers(); } @Override public String getPanelName() { return "Layers"; } @Override public void generateTemplate(Template template) { if(currentLayer!=null) buildCurrentProp(); for(LayerWrapper t : activeLayers){ template.addLayerTemplate(t.template); } } @Override public void reset() { setToTemplate(new Template()); } @Override public List<String> verify() { // TODO Auto-generated method stub return null; } }