package GenomicSetHandling;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.LinkedList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
public class RemoveGenomes extends JFrame implements ActionListener{
//Fields
//Data
private CurrentGenomeSet CGS;
//GUI
private JPanel jp, jpN, jpS, jpE;
private JScrollPane jscrp;
private DefaultListModel<String> GenomeNames;
private JList<String> NameListGUI;
private String strSelect = "Select Genomes to Remove";
//width height
private Dimension d1 = new Dimension(400,250);
private Dimension d2 = new Dimension(420,330);
//panel information
private JButton btnRemove, btnOK;
//Constructor
public RemoveGenomes(final CurrentGenomeSet CGS){
//data adjustment
this.CGS = CGS;
WindowListener setRGtonull = new WindowAdapter(){
public void windowClosing(WindowEvent e){
CGS.setRG(null);
e.getWindow().dispose();
}
};
this.addWindowListener(setRGtonull);
//initialize genome names
this.BuildList();
//panels + frames
this.getPanel();
this.getFrame();
//set visible!
this.setVisible(true);
}
//build list
public void BuildList(){
//Initialize
GenomeNames = new DefaultListModel<String>();
//Iterate through list, add all items.
for (int i = 1; i < CGS.getMenuGenomes().getItemCount(); i++){
String s = CGS.getMenuGenomes().getItemAt(i);
GenomeNames.addElement(s);
}
//GUI
NameListGUI = new JList<String>(GenomeNames);
NameListGUI.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
}
//panels
public void getPanel(){
//North panel
jpN = new JPanel(new BorderLayout());
jpN.setBorder(BorderFactory.createTitledBorder(strSelect));
//Initialize panel
jp = new JPanel();
jp.setLayout(new GridBagLayout());
//add list to panel
jp.add(NameListGUI);
//add list to panel, with scroll panel
jscrp = new JScrollPane(jp);
jscrp.setPreferredSize(d1);
jpN.add(jscrp);
//South panel
jpS = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
int gridy = 0;
//initial GridBagLayout parameters
c.anchor = GridBagConstraints.FIRST_LINE_START;
c.weightx = 1;
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.fill = GridBagConstraints.NONE;
btnRemove = new JButton("Remove Selected");
btnRemove.addActionListener(this);
jpS.add(btnRemove, c);
c.gridx = 1;
c.gridy = 0;
c.gridwidth = 1;
c.fill = GridBagConstraints.NONE;
btnOK = new JButton("OK");
btnOK.addActionListener(this);
jpS.add(btnOK, c);
//assemble panels
jpE = new JPanel();
jpE.setLayout(new BorderLayout());
jpE.add(jpN, BorderLayout.NORTH);
jpE.add(jpS, BorderLayout.SOUTH);
this.add(jpE);
}
//frame
public void getFrame(){
this.setTitle("Remove Genomes");
this.setSize(d2);
this.setLocationRelativeTo(null);
}
@Override
public void actionPerformed(ActionEvent e) {
//remove genomes button
if (e.getSource().equals(btnRemove)){
//TODO: add try/catch block for version
//retrieve selected
List<String> Selected = NameListGUI.getSelectedValuesList();
// String Version = System.getProperty("java.version");
// //System.out.println(Version);
// if (Version.contains("1.7")) {
//
// } else {
// //use deprecated method for older versions
// Object[] vals = NameListGUI.getSelectedValues();
// LinkedList<String> SelectedLL = new LinkedList<String>();
// for (int i = 0; i < vals.length; i++){
// SelectedLL.add((String) vals[i]);
// }
// Selected = SelectedLL;
// }
//schedule for removal
for (String s : Selected){
CGS.getGenomes2Remove().add(s);
}
//Initialize the counter
int GenomeCounter = 0;
//create a list of the unselected genomes
LinkedList<String> Unselected = new LinkedList<String>();
for (int i = 0; i < GenomeNames.getSize(); i++){
String s = GenomeNames.get(i);
if (!Selected.contains(s)){
Unselected.add(s);
GenomeCounter++;
}
}
//reset names
GenomeNames.removeAllElements();
//remove all, then re-add unselected to list
CGS.getMenuGenomes().removeAllItems();
CGS.getMenuGenomes().addItem(CGS.getStrSelectGenome());
for (String s : Unselected){
CGS.getMenuGenomes().addItem(s);
GenomeNames.addElement(s);
}
//reset quantity
String NumGenomes = CGS.getStrGenomes() + " (" + String.valueOf(GenomeCounter) + ")";
CGS.getLblGenomes().setText(NumGenomes);
}
//okay button
if (e.getSource().equals(btnOK)){
CGS.setRG(null);
this.dispose();
}
}
}