package contextViewer; import genomeObjects.CSDisplayData; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.util.Arrays; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JTextPane; import moduls.frm.FrmPrincipalDesk; public class AnnotationFrame extends JFrame implements ActionListener, ComponentListener{ //serial ID private static final long serialVersionUID = 1L; //parent frame private FrmPrincipalDesk f; //fields private JPanel jp1 = new JPanel(); //text frame private JPanel jp2 = new JPanel(); //select nodes +search field button private Dimension TheDimension = new Dimension(500,200); private JScrollPane scrpan; private JTextPane jtp; private String Title; //components private JTextField searchableField; private JButton btnSelectNodes; private String strSelectNodes = "Select Nodes"; //constructor public AnnotationFrame(JTextPane JTP, String Title, FrmPrincipalDesk fr){ //note imported information this.jtp = JTP; this.Title = Title; this.f = fr; this.addComponentListener(this); //initialization information this.setSize(450,270); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.setVisible(true); this.setTitle(Title); this.setLocationRelativeTo(null);; this.setResizable(true); //add components getPanels(); } //create panel components private void getPanels() { //initialize panel jp1.setLayout(new GridBagLayout()); //this.setBorder(BorderFactory.createTitledBorder("")); GridBagConstraints c = new GridBagConstraints(); //initial GridBagLayout parameters c.anchor = GridBagConstraints.CENTER; c.weightx = 1; c.insets = new Insets(1,1,1,1); //add precomputed text field to jpanel 1 c.gridy = 0; jp1.add(jtp, c); scrpan = new JScrollPane(jp1); scrpan.setPreferredSize(TheDimension); //jpanel2 //add textfield to jpanel2 jp2.setLayout(new GridBagLayout()); c.ipadx = 300; c.ipady = 7; c.gridx = 0; c.gridy = 0; c.gridwidth = 2; c.gridheight = 1; c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.FIRST_LINE_START; searchableField = new JTextField(""); searchableField.setEditable(true); jp2.add(searchableField, c); //add select button c.gridx = 2; c.ipadx = 0; c.gridy = 0; c.gridwidth = 1; c.gridheight = 1; c.ipady = 0; c.fill = GridBagConstraints.HORIZONTAL; btnSelectNodes = new JButton(strSelectNodes); btnSelectNodes.addActionListener(this); jp2.add(btnSelectNodes,c); //add panels this.add(scrpan, BorderLayout.NORTH); this.add(jp2, BorderLayout.SOUTH); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(btnSelectNodes) || e.getSource().equals(searchableField)){ if (searchableField.getText().equals("")){ String MessageString; MessageString = "Please enter either one or more genera or species, separated by commas." + "\n" + "This will select all appropriate nodes in the tree."; JOptionPane.showMessageDialog(null, MessageString); } else { //retrieve currently selected nodes boolean[] currentlySelected = this.f.getCurrentFrame().getInternalPanel().getSelectedNodeNumbers(); //create a new array, initialize to false boolean[] UpdatedNodes = new boolean[currentlySelected.length]; Arrays.fill(UpdatedNodes,false); //recover query String Query = searchableField.getText(); //parse into candidates String[] Queries = Query.split(","); //search for node names + annotations CSDisplayData CompareCSD = f.getCurrentFrame().getInternalPanel().getCSD(); for (int i = 0; i < CompareCSD.getNodeNames().length; i++){ //check node names against all queries for (int j =0; j < Queries.length; j++){ //TestQuery = Queries[j].toUpperCase().replaceAll("\\s",""); //if (CompareCSD.getNodeNames()[i].toUpperCase().contains(Queries[j].toUpperCase())){ if (CompareCSD.getNodeNames()[i].toUpperCase().contains(Queries[j].toUpperCase().replaceAll("\\s",""))){ UpdatedNodes[i] = true; } } } this.f.getCurrentFrame().getInternalPanel().setSelectedNodeNumbers(UpdatedNodes); this.f.getCurrentFrame().getInternalPanel().repaint(); } } } @Override public void componentHidden(ComponentEvent e) { // TODO Auto-generated method stub } @Override public void componentMoved(ComponentEvent e) { // TODO Auto-generated method stub } @Override public void componentResized(ComponentEvent e) { this.scrpan.setPreferredSize(new Dimension((int)this.getSize().getWidth(), (int)(this.getSize().getHeight() - 70))); } @Override public void componentShown(ComponentEvent e) { // TODO Auto-generated method stub } }