/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.das2.qds.filters;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
/**
*
* @author mmclouth
*/
public class ButterworthFilterEditorPanel extends AbstractFilterEditorPanel {
private String tf;
/**
* Creates new form ButterworthFilterEditorPane
*/
public ButterworthFilterEditorPanel() {
initComponents();
}
/**
* 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("unchecked")
// //GEN-BEGIN:initComponents
private void initComponents() {
orderPanel = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
orderCB = new javax.swing.JComboBox();
subPanel1 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
type1CB = new javax.swing.JComboBox();
subPanel3 = new javax.swing.JPanel();
jLabel10 = new javax.swing.JLabel();
cutoffFreq = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
subPanel4 = new javax.swing.JPanel();
jLabel4 = new javax.swing.JLabel();
lowFreq = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
highFreq = new javax.swing.JTextField();
jLabel7 = new javax.swing.JLabel();
FormListener formListener = new FormListener();
jLabel1.setText("Order: ");
orderCB.setEditable(true);
orderCB.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2", "3", "4" }));
jLabel2.setText("Type:");
type1CB.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "High-Pass", "Low-Pass", "Band-Pass", "Band-Reject" }));
type1CB.addActionListener(formListener);
org.jdesktop.layout.GroupLayout subPanel1Layout = new org.jdesktop.layout.GroupLayout(subPanel1);
subPanel1.setLayout(subPanel1Layout);
subPanel1Layout.setHorizontalGroup(
subPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(subPanel1Layout.createSequentialGroup()
.addContainerGap()
.add(subPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(subPanel1Layout.createSequentialGroup()
.add(12, 12, 12)
.add(type1CB, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(jLabel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 55, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(0, 0, Short.MAX_VALUE))
);
subPanel1Layout.setVerticalGroup(
subPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(subPanel1Layout.createSequentialGroup()
.add(jLabel2)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(type1CB, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
);
org.jdesktop.layout.GroupLayout orderPanelLayout = new org.jdesktop.layout.GroupLayout(orderPanel);
orderPanel.setLayout(orderPanelLayout);
orderPanelLayout.setHorizontalGroup(
orderPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(orderPanelLayout.createSequentialGroup()
.add(orderPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(orderPanelLayout.createSequentialGroup()
.addContainerGap()
.add(orderPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(orderPanelLayout.createSequentialGroup()
.add(12, 12, 12)
.add(orderCB, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.add(jLabel1)))
.add(subPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
orderPanelLayout.setVerticalGroup(
orderPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(orderPanelLayout.createSequentialGroup()
.add(jLabel1)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(orderCB, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(subPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(0, 86, Short.MAX_VALUE))
);
jLabel10.setText("Cutoff Frequency:");
cutoffFreq.setPreferredSize(new java.awt.Dimension(75, 27));
jLabel3.setText("Hz");
org.jdesktop.layout.GroupLayout subPanel3Layout = new org.jdesktop.layout.GroupLayout(subPanel3);
subPanel3.setLayout(subPanel3Layout);
subPanel3Layout.setHorizontalGroup(
subPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, subPanel3Layout.createSequentialGroup()
.addContainerGap(25, Short.MAX_VALUE)
.add(cutoffFreq, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel3)
.add(10, 10, 10))
.add(subPanel3Layout.createSequentialGroup()
.addContainerGap()
.add(jLabel10)
.addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
subPanel3Layout.setVerticalGroup(
subPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(subPanel3Layout.createSequentialGroup()
.add(jLabel10)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(subPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(cutoffFreq, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel3)))
);
jLabel4.setText("Low Frequency:");
lowFreq.setName("lowf"); // NOI18N
lowFreq.setPreferredSize(new java.awt.Dimension(75, 27));
jLabel5.setText("Hz");
jLabel6.setText("High Frequency:");
highFreq.setPreferredSize(new java.awt.Dimension(75, 27));
jLabel7.setText("Hz");
org.jdesktop.layout.GroupLayout subPanel4Layout = new org.jdesktop.layout.GroupLayout(subPanel4);
subPanel4.setLayout(subPanel4Layout);
subPanel4Layout.setHorizontalGroup(
subPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(subPanel4Layout.createSequentialGroup()
.addContainerGap()
.add(subPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(jLabel6)
.add(subPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(subPanel4Layout.createSequentialGroup()
.add(19, 19, 19)
.add(highFreq, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel7))
.add(org.jdesktop.layout.GroupLayout.TRAILING, subPanel4Layout.createSequentialGroup()
.add(12, 12, 12)
.add(lowFreq, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel5)))
.add(jLabel4))
.addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
subPanel4Layout.setVerticalGroup(
subPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(subPanel4Layout.createSequentialGroup()
.addContainerGap()
.add(jLabel4)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(subPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(lowFreq, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(jLabel5))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabel6)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(subPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
.add(jLabel7)
.add(highFreq, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 27, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addContainerGap(17, Short.MAX_VALUE))
);
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(orderPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(subPanel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(subPanel4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
.addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(orderPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.add(layout.createSequentialGroup()
.add(subPanel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(subPanel4, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
);
}
// Code for dispatching events from components to event handlers.
private class FormListener implements java.awt.event.ActionListener {
FormListener() {}
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (evt.getSource() == type1CB) {
ButterworthFilterEditorPanel.this.type1CBActionPerformed(evt);
}
}
}// //GEN-END:initComponents
private void setType( int type ) {
switch (type) {
case 0:
subPanel3.setVisible(true);
subPanel4.setVisible(false);
break;
case 1:
subPanel3.setVisible(true);
subPanel4.setVisible(false);
break;
case 2:
subPanel3.setVisible(false);
subPanel4.setVisible(true);
break;
case 3:
subPanel3.setVisible(false);
subPanel4.setVisible(true);
break;
default:
break;
}
}
private void type1CBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_type1CBActionPerformed
setType( type1CB.getSelectedIndex() );
}//GEN-LAST:event_type1CBActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
logger.log(java.util.logging.Level.SEVERE, null, ex);
}
//
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
FilterEditorPanel p= new ButterworthFilterEditorPanel();
p.setFilter("|butterworth(1,45.,46.,True)");
JOptionPane.showMessageDialog( null, p );
System.err.println( p.getFilter() );
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
public javax.swing.JTextField cutoffFreq;
public javax.swing.JTextField highFreq;
public javax.swing.JLabel jLabel1;
public javax.swing.JLabel jLabel10;
public javax.swing.JLabel jLabel2;
public javax.swing.JLabel jLabel3;
public javax.swing.JLabel jLabel4;
public javax.swing.JLabel jLabel5;
public javax.swing.JLabel jLabel6;
public javax.swing.JLabel jLabel7;
public javax.swing.JTextField lowFreq;
public javax.swing.JComboBox orderCB;
public javax.swing.JPanel orderPanel;
public javax.swing.JPanel subPanel1;
public javax.swing.JPanel subPanel3;
public javax.swing.JPanel subPanel4;
public javax.swing.JComboBox type1CB;
// End of variables declaration//GEN-END:variables
@Override
public void setFilter(String filter) {
String dec= FilterEditorPanelUtil.decimalRegexSloppy();
String decw= "\\s*("+dec+")\\s*";
Pattern p= Pattern.compile("\\|butterworth\\((\\d),"+decw+",(\\w+)\\)");
Pattern p1= Pattern.compile("\\|butterworth\\((\\d),"+decw+","+decw+",(\\w+)\\)");
Matcher m= p.matcher(filter);
Matcher n= p1.matcher(filter);
if ( m.matches() ) {
//System.out.println("M matches");
orderCB.setSelectedItem( m.group(1) );
cutoffFreq.setText( m.group(2) );
switch (m.group(3)) {
case "True":
type1CB.setSelectedIndex(1);
break;
case "False":
type1CB.setSelectedIndex(0);
break;
default:
type1CB.setSelectedIndex(0);
break;
}
}
else if (n.matches()) {
//System.out.println("N matches");
orderCB.setSelectedItem( n.group(1) );
lowFreq.setText( n.group(2) );
highFreq.setText( n.group(3) );
switch (n.group(4)) {
case "True":
type1CB.setSelectedIndex(2);
break;
case "False":
type1CB.setSelectedIndex(3);
break;
default:
type1CB.setSelectedIndex(0);
break;
}
}
else {
orderCB.setSelectedIndex( 0 );
lowFreq.setText( "0" );
highFreq.setText( "50" );
cutoffFreq.setText("10");
type1CB.setSelectedIndex(0);
}
setType(type1CB.getSelectedIndex());
}
@Override
public String getFilter() {
if (type1CB.getSelectedItem().equals("Low-Pass")) {
tf = "True";
return "|butterworth(" + orderCB.getSelectedItem() + "," + cutoffFreq.getText() + "," + tf + ")";
}
else if (type1CB.getSelectedItem().equals("High-Pass")) {
tf = "False";
return "|butterworth(" + orderCB.getSelectedItem() + "," + cutoffFreq.getText() + "," + tf + ")";
}
else if (type1CB.getSelectedItem().equals("Band-Pass")) {
tf = "True";
return "|butterworth(" + orderCB.getSelectedItem() + "," + lowFreq.getText() + "," + highFreq.getText() + "," + tf + ")";
}
else if (type1CB.getSelectedItem().equals("Band-Reject")) {
tf = "False";
return "|butterworth(" + orderCB.getSelectedItem() + "," + lowFreq.getText() + "," + highFreq.getText() + "," + tf + ")";
}
else {
// return something, so the user doesn't loose so much info.
tf = "False";
return "|butterworth(" + orderCB.getSelectedItem() + "," + cutoffFreq.getText() + "," + tf + ")";
}
}
public String getHighFreq() {
return highFreq.getText();
}
public String getLowFreq() {
return lowFreq.getText();
}
}