package GenomicSetHandling;
import genomeObjects.OrganismSet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.LinkedList;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.RootPaneContainer;
import javax.swing.SwingConstants;
import moduls.frm.FrmPrincipalDesk;
public class CurrentGenomeSet extends JFrame implements ActionListener, ComponentListener{
//fields
//data/base
private FrmPrincipalDesk f;
private RemoveGenomes RG = null;
//GUI
private JPanel jp, jp2, jpEnclosing;
private JTextField LblName, TxtName, LblNotes, LblGenomes;
private JTextArea OrganismSetNotes, LblInfo;
private JComboBox<String> menuGenomes;
private JScrollPane ptsscroll, ptsscroll2;
private JButton btnOK, btnRemoveGenomes;
private int ScrollPaneInset = 15;
private int HeightInset = 160;
private String strGenomes = "Genomes";
private String strSelectGenome = "Select Genome";
private LinkedList<String> Genomes2Remove = new LinkedList<String>();
//Constructor
public CurrentGenomeSet(FrmPrincipalDesk f){
//
this.f = f;
this.getFrame();
this.getPanel();
this.getData();
this.pack();
this.setMinimumSize(this.getSize());
WindowListener closeSubFrames = new WindowAdapter(){
public void windowClosing(WindowEvent e){
//dispose all sub-windows
if (RG != null){
RG.dispose();
}
e.getWindow().dispose();
}
};
this.addWindowListener(closeSubFrames);
//this.setModalityType(ModalityType.DOCUMENT_MODAL);
this.addComponentListener(this);
this.setVisible(true);
}
//frame
public void getFrame(){
this.setSize(400,400);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setTitle("Current Genome Set");
this.setResizable(true);
}
//panel
public void getPanel(){
//initial GridBagLayout parameters
jp = new JPanel();
jp.setLayout(new GridBagLayout());
final GridBagConstraints c = new GridBagConstraints();
int gridy = 0;
c.weightx = 1;
c.insets = new Insets(2,2,2,2);
c.gridx = 0;
c.gridy = gridy;
c.gridheight = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridwidth = 1;
LblName = new JTextField("Name:");
LblName.setEditable(false);
jp.add(LblName, c);
c.gridx = 1;
c.gridy = gridy;
c.gridheight = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridwidth = 1;
TxtName = new JTextField("");
TxtName.setEditable(false);
TxtName.setColumns(30);
jp.add(TxtName, c);
gridy++;
c.gridx = 0;
c.gridy = gridy;
c.gridheight = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridwidth = 1;
LblNotes = new JTextField("Notes:");
LblNotes.setEditable(false);
jp.add(LblNotes, c);
//Enter notes here
c.gridx = 1;
c.gridy = gridy;
c.gridwidth = 1;
c.gridheight = 1;
c.fill = GridBagConstraints.NONE;
OrganismSetNotes = new JTextArea("");
OrganismSetNotes.setEditable(true);
ptsscroll = new JScrollPane(OrganismSetNotes);
ptsscroll.setPreferredSize(new Dimension(TxtName.getColumns()*12+8, 50));
jp.add(ptsscroll, c);
gridy++;
//Genomes
c.gridx = 0;
c.gridy = gridy;
c.gridheight = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridwidth = 1;
LblGenomes = new JTextField(strGenomes);
LblGenomes.setEditable(false);
jp.add(LblGenomes, c);
//Pull-down menu
c.gridx = 1;
c.gridy = gridy;
c.gridheight = 1;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridwidth = 1;
String[] Empty = {"<none>"};
menuGenomes = new JComboBox<String>(Empty);
jp.add(menuGenomes, c);
gridy++;
//information bar
c.gridx = 0;
c.gridy = gridy;
c.fill = GridBagConstraints.HORIZONTAL;
c.gridwidth = 2;
c.ipady = 7;
LblInfo = new JTextArea("");
LblInfo.setEditable(false);
ptsscroll2 = new JScrollPane(LblInfo);
ptsscroll2.setPreferredSize(new Dimension(50, 100));
jp.add(ptsscroll2, c);
gridy++;
//remove genomes button
c.gridx = 0;
c.gridy = gridy;
c.fill = GridBagConstraints.NONE;
c.gridwidth = 1;
c.ipady = 0;
btnRemoveGenomes = new JButton("Remove Genomes");
btnRemoveGenomes.addActionListener(this);
jp.add(btnRemoveGenomes, c);
//central frame
jp2 = new JPanel();
jp2.setLayout(new GridBagLayout());
GridBagConstraints d = new GridBagConstraints();
gridy = 0;
//OK button
d.gridheight = 1;
d.gridx = 0;
d.gridy = gridy;
d.fill = GridBagConstraints.NONE;
d.anchor = GridBagConstraints.CENTER;
btnOK = new JButton("OK");
btnOK.addActionListener(this);
jp2.add(btnOK, d);
//add to frame
jpEnclosing = new JPanel();
jpEnclosing.setLayout(new BorderLayout());
jpEnclosing.add(jp, BorderLayout.NORTH);
jpEnclosing.add(jp2, BorderLayout.SOUTH);
this.add(jpEnclosing);
}
//Data for components
public void getData(){
TxtName.setText(f.getOS().getName());
OrganismSetNotes.setText(f.getOS().getNotes());
//Update genomes
String GenomeswNum = strGenomes + " (" + String.valueOf(f.getOS().getSpeciesNames().size()) + "):";
LblGenomes.setText(GenomeswNum);
if (f.getOS().getSpeciesNames().size() > 0){
menuGenomes.removeItemAt(0);
menuGenomes.addItem(strSelectGenome);
for (String s : f.getOS().getSpeciesNames()){
menuGenomes.addItem(s);
}
menuGenomes.addActionListener(this);
}
}
//Actions!
@Override
public void actionPerformed(ActionEvent e) {
//Show organism data
if (e.getSource().equals(menuGenomes)){
//this try/catch block is associated with the remove-genomes panel.
try {
for (String s : f.getOS().getSpeciesNames()){
//find appropriate species
if (menuGenomes.getSelectedItem().equals(s)){
showGenomeInfo(s);
}
}
if (menuGenomes.getSelectedItem().equals(strSelectGenome)){
LblInfo.setText("");
}
} catch (Exception ex) {}
}
//Remove one or more genomes from the set
if (e.getSource().equals(btnRemoveGenomes)){
if (RG == null){
RG = new RemoveGenomes(this);
}
}
//View Statistics, Update
if (e.getSource().equals(btnOK)){
//Update fields
f.getOS().setNotes(OrganismSetNotes.getText());
//Retrieve GI information
GSInfo GI = f.getGenomeSets().get(f.getOS().getName());
//Update nodes
GI.setGSNotes(OrganismSetNotes.getText());
//Remove genomes from OS + GS Info
for (String s : this.Genomes2Remove){
f.getOS().getSpecies().remove(s);
f.getOS().getSpeciesNames().remove(s);
GI.getGSGenomeDescriptions().remove(s);
}
//replace GI with new GI
f.getGenomeSets().put(f.getOS().getName(), GI);
//close subordinate + this frame
if (RG != null){
RG.dispose();
}
this.dispose();
}
}
//display per-genome information
public void showGenomeInfo(String GenomeName){
LblInfo.setText(f.getOS().getGenomeDescriptions().get(GenomeName));
//LblInfo.setText(GenomeName);
//LblInfo.setText(GenomeName + "\n" + f.getOS().getNotes());
}
@Override
//adjust frame for readability
public void componentResized(ComponentEvent e) {
ptsscroll.setPreferredSize(new Dimension((int) menuGenomes.getSize().getWidth()-5,
50));
ptsscroll2.setPreferredSize(new Dimension((int) this.getWidth()-(ScrollPaneInset*2),
(int)(this.getSize().getHeight()) - HeightInset - btnOK.getHeight()
- this.btnRemoveGenomes.getHeight()));
this.repaint();
}
@Override
public void componentMoved(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentShown(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentHidden(ComponentEvent e) {
// TODO Auto-generated method stub
}
public JComboBox<String> getMenuGenomes() {
return menuGenomes;
}
public void setMenuGenomes(JComboBox<String> menuGenomes) {
this.menuGenomes = menuGenomes;
}
public String getStrSelectGenome() {
return strSelectGenome;
}
public void setStrSelectGenome(String strSelectGenome) {
this.strSelectGenome = strSelectGenome;
}
public JTextField getLblGenomes() {
return LblGenomes;
}
public void setLblGenomes(JTextField lblGenomes) {
LblGenomes = lblGenomes;
}
public String getStrGenomes() {
return strGenomes;
}
public void setStrGenomes(String strGenomes) {
this.strGenomes = strGenomes;
}
public RemoveGenomes getRG() {
return RG;
}
public void setRG(RemoveGenomes rG) {
RG = rG;
}
public LinkedList<String> getGenomes2Remove() {
return Genomes2Remove;
}
public void setGenomes2Remove(LinkedList<String> genomes2Remove) {
Genomes2Remove = genomes2Remove;
}
}