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.DefaultComboBoxModel; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import com.clearlyspam23.GLE.PluginManager; import com.clearlyspam23.GLE.Template; import com.clearlyspam23.GLE.GUI.PLangSubPanel; import com.clearlyspam23.GLE.GUI.template.dialog.ParameterDialog; import com.clearlyspam23.GLE.template.PLanguageOptions; import com.clearlyspam23.GLE.util.Utility; import javax.swing.JCheckBox; public class PLangPanel extends TemplateSubPanel implements ChangeListener{ /** * */ private static final long serialVersionUID = 1L; private JTextField displayInputField; private JTextField exeFileLoc; private JComboBox<String> comboBox; private JButton btnAdd; private JButton btnDelete; private JList<String> list_1; private DefaultListModel<String> list_1_model; @SuppressWarnings("rawtypes") private List<PLanguageOptions> recognizedLanguages; @SuppressWarnings("rawtypes") private PLangSubPanel[] panels; @SuppressWarnings("rawtypes") private PLangSubPanel currentPanel; private JScrollPane scrollPane; private JButton btnBrowse; private JCheckBox chckbxEnable; private JScrollPane scrollPane_1; /** * Create the panel. */ public PLangPanel(PluginManager pluginManager) { super(pluginManager); recognizedLanguages = pluginManager.getRecognizedProgrammingLanguages(); panels = new PLangSubPanel[recognizedLanguages.size()]; for(int i = 0; i < recognizedLanguages.size(); i++) { panels[i] = recognizedLanguages.get(i).getPanel(); panels[i].addChangeListener(this); } displayInputField = new JTextField(); displayInputField.setBounds(67, 519, 473, 20); displayInputField.setEditable(false); displayInputField.setColumns(10); JLabel label = new JLabel("Run Options"); label.setBounds(10, 11, 128, 20); label.setFont(new Font("Tahoma", Font.BOLD, 14)); JLabel label_1 = new JLabel("Language"); label_1.setBounds(10, 113, 69, 14); comboBox = new JComboBox<String>(); comboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { stateChanged(); } }); DefaultComboBoxModel<String> cm = new DefaultComboBoxModel<String>(); for(int i = 0; i < recognizedLanguages.size(); i++) cm.addElement(recognizedLanguages.get(i).getName()); comboBox.setBounds(104, 110, 179, 20); comboBox.setModel(cm); JLabel label_2 = new JLabel("Parameters"); label_2.setBounds(10, 363, 69, 14); JLabel label_3 = new JLabel("Full Input"); label_3.setBounds(10, 522, 69, 14); JLabel lblExecutableLocation = new JLabel("Game Executable"); lblExecutableLocation.setBounds(10, 82, 83, 14); exeFileLoc = new JTextField(); exeFileLoc.setBounds(103, 79, 358, 20); exeFileLoc.setColumns(10); final JFileChooser fc = new JFileChooser(); fc.setAcceptAllFileFilterUsed(true); btnBrowse = new JButton("Browse"); btnBrowse.setBounds(471, 78, 69, 23); btnBrowse.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { int ret = fc.showOpenDialog(PLangPanel.this); if(ret==JFileChooser.APPROVE_OPTION) { exeFileLoc.setText(fc.getSelectedFile().getPath()); stateChanged(); } } }); JList<String> list = new JList<String>(); list.setBounds(104, 265, 1, 1); setLayout(null); add(label); add(label_3); add(displayInputField); add(lblExecutableLocation); add(label_1); add(label_2); add(list); add(comboBox); add(exeFileLoc); add(btnBrowse); list_1_model = new DefaultListModel<String>(); btnAdd = new JButton("Add"); final ParameterDialog pdialog = new ParameterDialog(pluginManager.getRecognizedMacros()); btnAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { pdialog.showDialog(); if(pdialog.isAccepted()) { ArrayList<String> tokens = Utility.tokenizeBySpaceAndQuote(pdialog.getParameterText()); int index = list_1.getSelectedIndex()+1; if(index<0||index>list_1_model.getSize()) index = list_1_model.getSize(); for(int i = 0; i < tokens.size(); i++) { list_1_model.add(index+i, tokens.get(i)); } stateChanged(); } } }); btnAdd.setBounds(293, 485, 79, 23); add(btnAdd); btnDelete = new JButton("Delete"); btnDelete.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int index = list_1.getSelectedIndex(); if(index>=0&&index<list_1.getModel().getSize()){ list_1_model.remove(index); list_1.setSelectedIndex(index-1); stateChanged(); } } }); btnDelete.setBounds(382, 485, 79, 23); add(btnDelete); scrollPane = new JScrollPane(); scrollPane.setBounds(10, 141, 530, 209); add(scrollPane); scrollPane_1 = new JScrollPane(); scrollPane_1.setBounds(104, 361, 358, 113); add(scrollPane_1); list_1 = new JList<String>(); scrollPane_1.setViewportView(list_1); list_1.setModel(list_1_model); list_1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); chckbxEnable = new JCheckBox("Enable"); chckbxEnable.setFont(new Font("Tahoma", Font.PLAIN, 13)); chckbxEnable.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { checkEnable(chckbxEnable.isSelected()); } }); chckbxEnable.setBounds(20, 27, 276, 50); add(chckbxEnable); // scrollPanel = new JPanel(); // scrollPane.setViewportView(scrollPanel); //stateChanged(); } public void checkEnable(boolean flag){ exeFileLoc.setEnabled(flag); comboBox.setEnabled(flag); btnAdd.setEnabled(flag); btnDelete.setEnabled(flag); list_1.setEnabled(flag); scrollPane_1.setEnabled(flag); btnBrowse.setEnabled(flag); if(flag){ stateChanged(); } else{ scrollPane.setViewportView(new JPanel()); displayInputField.setText(""); } } //private int counter = 0; public void stateChanged() { stateChanged(null); } @SuppressWarnings("unchecked") public void stateChanged(ChangeEvent e) { String ans = ""; // scrollPanel.removeAll(); if(comboBox.getSelectedIndex()>=0&&comboBox.getSelectedIndex()<recognizedLanguages.size()) { @SuppressWarnings("rawtypes") PLanguageOptions lang = recognizedLanguages.get(comboBox.getSelectedIndex()); currentPanel = panels[comboBox.getSelectedIndex()]; scrollPane.setViewportView(currentPanel); if(currentPanel!=null) { currentPanel.reset(); } revalidate(); repaint(); String text = lang.buildRuntimeCall(currentPanel); if(text!=null&&text.length()>0) ans += text + " "; } if(exeFileLoc.getText()!=null&&exeFileLoc.getText().trim().length()>0) ans+= '"' + exeFileLoc.getText() + '"'; for(int i = 0; i < list_1.getModel().getSize(); i++) { String s = list_1.getModel().getElementAt(i); if(s.indexOf(' ')>=0) s = '"' + s + '"'; ans+=" " + s; } displayInputField.setText(ans); } public void setToTemplate(Template template) { list_1_model.clear(); for(String s : template.getParameterMacros()) { list_1_model.addElement(s); } checkEnable(template.allowsRun()); } @Override public String getPanelName() { return "Run"; } @Override public void generateTemplate(Template template) { template.setAllowsRun(chckbxEnable.isSelected()); } @Override public void reset() { // TODO Auto-generated method stub } @Override public List<String> verify() { // TODO Auto-generated method stub return null; } }