/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.antlr.works.editor.grammar.actions; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.nio.charset.Charset; import java.util.List; import java.util.Locale; import javax.swing.DefaultComboBoxModel; import javax.swing.JTextField; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.netbeans.api.annotations.common.NullAllowed; import org.openide.filesystems.FileChooserBuilder; /** * * @author Sam Harwell */ public final class RunInTestRigVisualPanel extends javax.swing.JPanel { private final RunInTestRigWizardPanel _wizardPanel; private final DocumentListener _documentListener = new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { fireChange(); } @Override public void removeUpdate(DocumentEvent e) { fireChange(); } @Override public void changedUpdate(DocumentEvent e) { fireChange(); } }; private final ActionListener _actionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { fireChange(); } }; /** * Creates new form RunInTestRigPanel */ public RunInTestRigVisualPanel() { this(null); } public RunInTestRigVisualPanel(@NullAllowed RunInTestRigWizardPanel wizardPanel) { initComponents(); _wizardPanel = wizardPanel; if (wizardPanel != null) { setInputFile(wizardPanel.getInputFile()); setAvailableRules(wizardPanel.getAvailableRules(), wizardPanel.getStartRule()); setEncodingSpecified(wizardPanel.isEncodingSpecified()); setEncoding(wizardPanel.getEncoding()); setShowTokens(wizardPanel.isShowTokens()); setShowTree(wizardPanel.isShowTree()); setShowTreeInGUI(wizardPanel.isShowTreeInGUI()); } txtInputFile.getDocument().addDocumentListener(_documentListener); cmbStartRule.addActionListener(_actionListener); txtEncoding.getDocument().addDocumentListener(_documentListener); } public String getInputFile() { return txtInputFile.getText(); } public void setInputFile(String value) { if (value == null) { value = ""; } txtInputFile.setText(value); } public String getStartRule() { if (cmbStartRule.getSelectedItem() == null) { return ""; } return cmbStartRule.getSelectedItem().toString(); } public void setAvailableRules(List<String> rules, String selectedRule) { cmbStartRule.setModel(new DefaultComboBoxModel<>(rules.toArray(new String[rules.size()]))); if (selectedRule != null) { cmbStartRule.setSelectedItem(selectedRule); } } public boolean isEncodingSpecified() { return chkEncoding.isSelected(); } public void setEncodingSpecified(boolean value) { chkEncoding.setSelected(value); } public String getEncoding() { return txtEncoding.getText(); } public void setEncoding(String value) { if (value == null) { value = Locale.getDefault().toLanguageTag(); } txtEncoding.setText(value); } public boolean isShowTokens() { return chkShowTokens.isSelected(); } public void setShowTokens(boolean value) { chkShowTokens.setSelected(value); } public boolean isShowTree() { return chkShowTree.isSelected(); } public void setShowTree(boolean value) { chkShowTree.setSelected(value); } public boolean isShowTreeInGUI() { return chkShowTreeInGUI.isSelected(); } public void setShowTreeInGUI(boolean value) { chkShowTreeInGUI.setSelected(value); } @Override public String getName() { return "TestRig Options"; } private void fireChange() { if (_wizardPanel != null) { _wizardPanel.getChangeSupport().fireChange(); } } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("Convert2Diamond") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); javax.swing.JPanel pnlInput = new javax.swing.JPanel(); javax.swing.JLabel lblInputFile = new javax.swing.JLabel(); txtInputFile = new javax.swing.JTextField(); btnBrowseInput = new javax.swing.JButton(); cmbStartRule = new javax.swing.JComboBox<String>(); javax.swing.JLabel lblStartRule = new javax.swing.JLabel(); chkEncoding = new javax.swing.JCheckBox(); txtEncoding = new javax.swing.JTextField(); btnDefaultEncoding = new javax.swing.JButton(); javax.swing.JPanel pnlOptions = new javax.swing.JPanel(); chkShowTokens = new javax.swing.JCheckBox(); chkShowTree = new javax.swing.JCheckBox(); chkShowTreeInGUI = new javax.swing.JCheckBox(); pnlInput.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.pnlInput.border.title"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(lblInputFile, org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.lblInputFile.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(btnBrowseInput, org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.btnBrowseInput.text")); // NOI18N btnBrowseInput.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnBrowseInputActionPerformed(evt); } }); cmbStartRule.setEditable(true); org.openide.awt.Mnemonics.setLocalizedText(lblStartRule, org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.lblStartRule.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(chkEncoding, org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.chkEncoding.text")); // NOI18N txtEncoding.setText(org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.txtEncoding.text")); // NOI18N org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, chkEncoding, org.jdesktop.beansbinding.ELProperty.create("${selected}"), txtEncoding, org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); org.openide.awt.Mnemonics.setLocalizedText(btnDefaultEncoding, org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.btnDefaultEncoding.text")); // NOI18N binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, chkEncoding, org.jdesktop.beansbinding.ELProperty.create("${selected}"), btnDefaultEncoding, org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); btnDefaultEncoding.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnDefaultEncodingActionPerformed(evt); } }); javax.swing.GroupLayout pnlInputLayout = new javax.swing.GroupLayout(pnlInput); pnlInput.setLayout(pnlInputLayout); pnlInputLayout.setHorizontalGroup( pnlInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlInputLayout.createSequentialGroup() .addContainerGap() .addGroup(pnlInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblInputFile) .addComponent(lblStartRule) .addComponent(chkEncoding)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(pnlInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(cmbStartRule, 0, 307, Short.MAX_VALUE) .addComponent(txtEncoding) .addComponent(txtInputFile)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(pnlInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(btnBrowseInput, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(btnDefaultEncoding, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) ); pnlInputLayout.setVerticalGroup( pnlInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnlInputLayout.createSequentialGroup() .addGroup(pnlInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btnBrowseInput) .addComponent(txtInputFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblInputFile)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(pnlInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cmbStartRule, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblStartRule)) .addGap(6, 6, 6) .addGroup(pnlInputLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(chkEncoding) .addComponent(txtEncoding, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btnDefaultEncoding)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pnlOptions.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.pnlOptions.border.title"))); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(chkShowTokens, org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.chkShowTokens.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(chkShowTree, org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.chkShowTree.text")); // NOI18N org.openide.awt.Mnemonics.setLocalizedText(chkShowTreeInGUI, org.openide.util.NbBundle.getMessage(RunInTestRigVisualPanel.class, "RunInTestRigVisualPanel.chkShowTreeInGUI.text")); // NOI18N javax.swing.GroupLayout pnlOptionsLayout = new javax.swing.GroupLayout(pnlOptions); pnlOptions.setLayout(pnlOptionsLayout); pnlOptionsLayout.setHorizontalGroup( pnlOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnlOptionsLayout.createSequentialGroup() .addContainerGap() .addGroup(pnlOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(chkShowTokens) .addComponent(chkShowTree) .addComponent(chkShowTreeInGUI)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pnlOptionsLayout.setVerticalGroup( pnlOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(pnlOptionsLayout.createSequentialGroup() .addComponent(chkShowTokens) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(chkShowTree) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(chkShowTreeInGUI) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(0, 0, 0) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(pnlOptions, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(pnlInput, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(0, 0, 0)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(pnlInput, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(pnlOptions, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); bindingGroup.bind(); }// </editor-fold>//GEN-END:initComponents private void btnBrowseInputActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBrowseInputActionPerformed browseForFile(txtInputFile); }//GEN-LAST:event_btnBrowseInputActionPerformed private void btnDefaultEncodingActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDefaultEncodingActionPerformed setEncoding(Charset.defaultCharset().name()); }//GEN-LAST:event_btnDefaultEncodingActionPerformed private void browseForFile(JTextField field) { FileChooserBuilder builder = new FileChooserBuilder(RunInTestRigVisualPanel.class) .setTitle("Select input file"); File existing = new File(field.getText()); if (existing.isFile()) { builder.setFilesOnly(true); builder.setDefaultWorkingDirectory(existing.getParentFile()); builder.forceUseOfDefaultWorkingDirectory(true); } File targetFile = builder.showOpenDialog(); if (targetFile != null && targetFile.isFile()) { field.setText(targetFile.getAbsolutePath()); } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnBrowseInput; private javax.swing.JButton btnDefaultEncoding; private javax.swing.JCheckBox chkEncoding; private javax.swing.JCheckBox chkShowTokens; private javax.swing.JCheckBox chkShowTree; private javax.swing.JCheckBox chkShowTreeInGUI; private javax.swing.JComboBox<String> cmbStartRule; private javax.swing.JTextField txtEncoding; private javax.swing.JTextField txtInputFile; private org.jdesktop.beansbinding.BindingGroup bindingGroup; // End of variables declaration//GEN-END:variables }