package org.ohdsi.rabbitInAHat; import java.awt.Container; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import org.ohdsi.rabbitInAHat.ResizeListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.SpringLayout; public class FilterDialog extends JDialog implements ActionListener, ResizeListener { /** * */ private static final long serialVersionUID = 7009265246652874341L; private JTextField sourceSearchField; private JTextField targetSearchField; private MappingPanel filterPanel; SpringLayout layout = new SpringLayout(); Container contentPane = this.getContentPane(); public FilterDialog(Window parentWindow){ super(parentWindow,"Filter",ModalityType.MODELESS); this.setResizable(false); this.setLocation(parentWindow.getX()+parentWindow.getWidth()/2, parentWindow.getY()+100); contentPane.setLayout(layout); sourceSearchField = new JTextField(30); sourceSearchField.setName("Source"); targetSearchField = new JTextField(30); targetSearchField.setName("Target"); // Add key listener to send search string as it's being typed sourceSearchField.addKeyListener(new SearchListener() ); sourceSearchField.addFocusListener(new SearchFocusListener()); JLabel sourceLabel = new JLabel("Filter Source:",JLabel.TRAILING); JButton sourceClearBtn = new JButton("Clear"); contentPane.add(sourceLabel); contentPane.add(sourceSearchField); sourceClearBtn.addActionListener(this); sourceClearBtn.setActionCommand("Clear Source"); sourceClearBtn.setFocusable(false); contentPane.add(sourceClearBtn); targetSearchField.addKeyListener(new SearchListener() ); targetSearchField.addFocusListener(new SearchFocusListener()); JLabel targetLabel = new JLabel("Filter Target:",JLabel.TRAILING); JButton targetClearBtn = new JButton("Clear"); contentPane.add(targetLabel); contentPane.add(targetSearchField); targetClearBtn.addActionListener(this); targetClearBtn.setActionCommand("Clear Target"); targetClearBtn.setFocusable(false); contentPane.add(targetClearBtn); layout.putConstraint(SpringLayout.WEST, sourceLabel, 5, SpringLayout.WEST, contentPane); layout.putConstraint(SpringLayout.NORTH, sourceLabel, 5, SpringLayout.NORTH, contentPane); layout.putConstraint(SpringLayout.WEST, sourceSearchField, 5, SpringLayout.EAST, sourceLabel); layout.putConstraint(SpringLayout.NORTH, sourceSearchField, 5, SpringLayout.NORTH, contentPane); layout.putConstraint(SpringLayout.WEST, sourceClearBtn, 5, SpringLayout.EAST, sourceSearchField); layout.putConstraint(SpringLayout.NORTH, sourceClearBtn, 5, SpringLayout.NORTH, contentPane); layout.putConstraint(SpringLayout.WEST, targetLabel, 5, SpringLayout.WEST, contentPane); layout.putConstraint(SpringLayout.NORTH, targetLabel, 10, SpringLayout.SOUTH, sourceLabel); layout.putConstraint(SpringLayout.WEST, targetSearchField, 0, SpringLayout.WEST, sourceSearchField); layout.putConstraint(SpringLayout.NORTH, targetSearchField, 0, SpringLayout.NORTH, targetLabel); layout.putConstraint(SpringLayout.WEST, targetClearBtn, 5, SpringLayout.EAST, targetSearchField); layout.putConstraint(SpringLayout.NORTH, targetClearBtn, 0, SpringLayout.NORTH, targetSearchField); layout.putConstraint(SpringLayout.SOUTH, contentPane, 5, SpringLayout.SOUTH, targetLabel); layout.putConstraint(SpringLayout.NORTH, contentPane, 5, SpringLayout.NORTH, sourceLabel); layout.putConstraint(SpringLayout.WEST, contentPane, 5, SpringLayout.WEST, sourceLabel); layout.putConstraint(SpringLayout.EAST, contentPane, 5, SpringLayout.EAST, targetClearBtn); this.pack(); }; public void setFilterPanel(MappingPanel aFilterPanel){ if (filterPanel != null) { filterPanel.removeResizeListener(this); } filterPanel = aFilterPanel; if (filterPanel != null) { aFilterPanel.addResizeListener(this); } setSearchFieldsToLastSearch(); } public MappingPanel getFilterPanel(){ if(filterPanel.isMinimized()){ return filterPanel.getSlaveMappingPanel(); }else{ return filterPanel; } } public void doFilterPanel(String str,String panelName){ getFilterPanel().filterComponents(str,panelName=="Target"); } @Override public void actionPerformed(ActionEvent event) { switch (event.getActionCommand()) { case "Clear Source": clearSourceFilter(); break; case "Clear Target": clearTargetFilter(); break; } } private void clearTargetFilter() { targetSearchField.setText(""); doFilterPanel("","Target"); } private void clearSourceFilter() { sourceSearchField.setText(""); doFilterPanel("","Source"); } private void setSearchFieldsToLastSearch(){ sourceSearchField.setText(getFilterPanel().getLastSourceFilter()); targetSearchField.setText(getFilterPanel().getLastTargetFilter()); } public void notifyResized(int height, boolean minimized, boolean maximized) { setSearchFieldsToLastSearch(); } class SearchListener implements KeyListener{ private String searchStrBuffer = ""; @Override public void keyPressed(KeyEvent event) { } @Override public void keyReleased(KeyEvent event) { switch (event.getComponent().getName()) { case "Source": searchStrBuffer = sourceSearchField.getText(); break; case "Target": searchStrBuffer = targetSearchField.getText(); break; } doFilterPanel(searchStrBuffer,event.getComponent().getName()); } @Override public void keyTyped(KeyEvent event) { } } public class SearchFocusListener implements FocusListener { @Override public void focusGained(FocusEvent e) { // TODO Auto-generated method stub JTextField jtf = (JTextField) e.getComponent(); jtf.selectAll(); } @Override public void focusLost(FocusEvent e) { // TODO Auto-generated method stub } } }