package com.ppfold.main;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class DataButtonGroup extends JPanel implements Updatable {
/**
*
*/
private static final long serialVersionUID = 8735013149334446736L;
// members:
private JLabel title;
private JButton addButton;
private JButton editButton;
private JButton removeButton;
private JComboBox chooser;
JTextArea dataInfoTextArea ;
public static int FILECHOOSER = 0;
public static int FOLDERCHOOSER = 1;
// constructors:
public DataButtonGroup() {
this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
//this.setSize(100,250);
//this.setPreferredSize(new Dimension(100,250));
// create components
JPanel comboPanel = new JPanel();
comboPanel.setLayout(new BoxLayout(comboPanel, BoxLayout.LINE_AXIS));
//comboPanel.setSize(new Dimension(100, 20));
//comboPanel.setPreferredSize(new Dimension(100, 20));
comboPanel.setAlignmentX(Component.CENTER_ALIGNMENT);
title = new JLabel("Data and constraints: ");
//title.setPreferredSize(new Dimension(130, 10));
title.setAlignmentX(Component.CENTER_ALIGNMENT);
title.setHorizontalAlignment(JLabel.CENTER);
comboPanel.add(title);
chooser = new JComboBox();
//chooser.setPreferredSize(new Dimension(200, 15));
chooser.setEnabled(false);
chooser.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int itemnr = chooser.getItemCount();
if(itemnr>0){
int nr = chooser.getSelectedIndex();
DataInfo datainfo = PPfoldMain.datainfo.get(nr);
String text = "";
if(datainfo.getType()==0){
text = "File: " + datainfo.getFileName() + "\n";
text += "Distribution: " + ((datainfo.getDistFileName())==
PPfoldMain.defaultDataDistfile?"Default\n":(datainfo.getDistFileName() + "\n"));
text += "Sequence name: " + datainfo.getSequenceName();
}
else if(datainfo.getType()==2){
//Constraint data
if(datainfo.getFileName()!=null){
text = "File: " + datainfo.getFileName() + "\n";
}
if(datainfo.getSequenceName()!=null){
text += "Sequence name: " + datainfo.getSequenceName() + "\n";
}
if(datainfo.getContactDistance()>-1){
text += "Max. contact distance: " + datainfo.getContactDistance() + "\n";
}
}
else{
//Constraint data
text = "File: " + datainfo.getFileName() + "\n";
text += "Sequence name: " + datainfo.getSequenceName() + "\n";
}
dataInfoTextArea.setText(text);
}
else{
dataInfoTextArea.setText("<data not selected>");
}
}
});
chooser.setAlignmentX(Component.CENTER_ALIGNMENT);
comboPanel.add(chooser);
chooser.setPreferredSize(chooser.getSize()); //To avoid resizing when items are added.
addButton = new JButton("Add");
addButton.setToolTipText("Add data");
//addButton.setPreferredSize(new Dimension(90,30));
final DataButtonGroup bg = this;
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DataChooserDialog dia = new DataChooserDialog(bg);
if(chooser.getItemCount()>0){
removeButton.setEnabled(true);
chooser.setEnabled(true);
editButton.setEnabled(true);
}
}
});
editButton = new JButton("Edit");
editButton.setToolTipText("Edit data");
//addButton.setPreferredSize(new Dimension(90,30));
editButton.setEnabled(false);
editButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DataChooserDialog dia = new DataChooserDialog(PPfoldMain.datainfo.get(chooser.getSelectedIndex()), bg);
if(chooser.getItemCount()>0){
removeButton.setEnabled(true);
chooser.setEnabled(true);
}
}
});
removeButton = new JButton("Remove");
removeButton.setToolTipText("Remove data");
removeButton.setEnabled(false);
// removeButton.setPreferredSize(new Dimension(80,30));
removeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selected = chooser.getSelectedIndex();
PPfoldMain.datainfo.remove(selected);
updateGUI();
if(chooser.getItemCount()==0){
removeButton.setEnabled(false);
chooser.setEnabled(false);
editButton.setEnabled(false);
PPfoldMain.auxdata=false;
}
}
});
comboPanel.add(Box.createRigidArea(new Dimension(5, 0)));
comboPanel.add(addButton);
comboPanel.add(Box.createRigidArea(new Dimension(5, 0)));
comboPanel.add(editButton);
comboPanel.add(Box.createRigidArea(new Dimension(5, 0)));
comboPanel.add(removeButton);
JPanel infoPanel = new JPanel();
infoPanel.setLayout(new BoxLayout(infoPanel, BoxLayout.PAGE_AXIS));
infoPanel.setAlignmentX(Component.CENTER_ALIGNMENT);
dataInfoTextArea = new JTextArea();
infoPanel.add(dataInfoTextArea);
dataInfoTextArea.setText("<data not selected>");
dataInfoTextArea.setPreferredSize(new Dimension(400, 80));
dataInfoTextArea.setLineWrap(true);
float[] somecolor = new float[3];
somecolor = Color.RGBtoHSB(152,251,152 , null);
//somecolor = Color.RGBtoHSB(255,255,240, null);
dataInfoTextArea.setBackground(Color.getHSBColor(somecolor[0], somecolor[1], somecolor[2]));
//infoPanel.setBackground(Color.BLUE);
this.add(comboPanel);
this.add(Box.createRigidArea(new Dimension(0, 5)));
this.add(infoPanel);
this.add(Box.createRigidArea(new Dimension(0, 5)));
this.setVisible(true);
}
public boolean checkData(){
System.out.println("Checking data...");
return true;
}
public void updateGUI() {
int n = PPfoldMain.datainfo.size();
String[] datalabels = new String[n];
for(int i = 0; i<n; i++){
String datatype = "data";
DataInfo datainfo = PPfoldMain.datainfo.get(i);
if(datainfo.getType()==0){
datatype = "(Probing data)";
}
else if(datainfo.getType()==1){
datatype = "(Probability data)";
}
else{
datatype = "(Constraint data)";
}
datalabels[i] = new String(PPfoldMain.datainfo.get(i).getiD() + " " + datatype);
}
final DefaultComboBoxModel model = new DefaultComboBoxModel(datalabels);
chooser.setModel(model);
chooser.setSelectedIndex(n-1);
chooser.updateUI();
}
@Override
public void setEnabled(boolean value){
chooser.setEnabled(value);
addButton.setEnabled(value);
removeButton.setEnabled(value);
//Just to make sure the remove button doesn't get re-enabled
if(chooser.getItemCount()==0){
removeButton.setEnabled(false);
chooser.setEnabled(false);
}
dataInfoTextArea.setEnabled(value);
}
public void updateModel() {}
public int getDataNumber() {
return chooser.getItemCount();
}
}