/**
*
*/
package statalign.ui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import statalign.base.MainManager;
import statalign.postprocess.Postprocess;
/**
*
* The window for setting the input/output preferences.
*
* @author miklos
*
*/
public class OutputPreferences extends JDialog implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
private final static Color BORDER_COLOR = Color.LIGHT_GRAY;
MainFrame owner;
/**
* Creates the window for setting the I/O preferences.
*
* @param owner The main frame
*/
public OutputPreferences(MainFrame owner){
this.owner = owner;
Container cp = getContentPane();
JPanel mainPanel = new JPanel(new GridLayout(1,2));
JPanel leftPanel = new JPanel(new GridLayout(2,1));
// leftPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5),
// BorderFactory.createEtchedBorder()
// /*BorderFactory.createLineBorder(Color.GRAY, 1)*/));
mainPanel.add(leftPanel);
JPanel rightPanel = new JPanel(new BorderLayout());
// rightPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5),
// BorderFactory.createEtchedBorder()
// /*BorderFactory.createLineBorder(Color.GRAY, 1)*/));
mainPanel.add(rightPanel);
cp.add(mainPanel);
//left panel
// samplings
// JPanel logPanel = new JPanel(new BorderLayout());
// leftPanel.add(logPanel);
// logPanel.add(new JLabel("Select entries written into the logfile"),"North");
List<Postprocess> postprocess = owner.manager.postProcMan.getPlugins();
List<Postprocess> list = new ArrayList<Postprocess>();
Comparator<Postprocess> comp = new Comparator<Postprocess>() {
@Override
public int compare(Postprocess o1, Postprocess o2) {
return o1.getTabOrder()-o2.getTabOrder() < 0 ? -1 : 1;
}
};
if(owner.manager.postProcMan.rnaMode) {
for(Postprocess p : postprocess){
if(p.selected && p.outputable){
list.add(p);
}
}
}
else {
for(Postprocess p : postprocess) {
if(p.selected && p.outputable && !p.rnaAssociated) {
list.add(p);
}
}
}
Collections.sort(list, comp);
JPanel logListPanel = new JPanel(new GridLayout(list.size(),1));
logListPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5),
BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY),
BorderFactory.createLineBorder(BORDER_COLOR)),"Select entries written into the logfile")
/*BorderFactory.createLineBorder(Color.GRAY, 1)*/));
leftPanel.add(logListPanel,"Center");
JCheckBox[] logCheckBoxes = new JCheckBox[list.size()];
int k = 0;
for(Postprocess p : list) {
logCheckBoxes[k] = new JCheckBox(p.getTabName(),p.sampling);
logListPanel.add(logCheckBoxes[k]);
logCheckBoxes[k].addActionListener(this);
k++;
}
// postprocess
// JPanel postprocessPanel = new JPanel(new BorderLayout());
// leftPanel.add(postprocessPanel);
// postprocessPanel.add(new JLabel("Select entries that generates postprocess files"),"North");
list.clear();
if(owner.manager.postProcMan.rnaMode) {
for(Postprocess p : postprocess){
if(p.selected && p.postprocessable){
list.add(p);
}
}
}
else {
for(Postprocess p : postprocess) {
if(p.selected && p.postprocessable && !p.rnaAssociated) {
list.add(p);
}
}
}
Collections.sort(list, comp);
JPanel postprocessListPanel = new JPanel(new GridLayout(list.size(),1));
postprocessListPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5),
BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY),
BorderFactory.createLineBorder(BORDER_COLOR)),"Select entries generating postprocess file")
/*BorderFactory.createLineBorder(Color.GRAY, 1)*/));
leftPanel.add(postprocessListPanel);
JCheckBox[] postprocessCheckBoxes = new JCheckBox[list.size()];
k = 0;
for(Postprocess p : list) {
postprocessCheckBoxes[k] = new JCheckBox(p.getTabName()+" ",p.postprocessWrite);
postprocessListPanel.add(postprocessCheckBoxes[k]);
postprocessCheckBoxes[k].addActionListener(this);
k++;
}
// right panel
//alignment types
JRadioButton[] alignmentCheckBox = new JRadioButton[MainManager.alignmentTypes.length];
JPanel alignmentTypePanel = new JPanel(new GridLayout(alignmentCheckBox.length,1));
alignmentTypePanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5),
BorderFactory.createTitledBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.DARK_GRAY),
BorderFactory.createLineBorder(BORDER_COLOR)),"Select alignment output type")
/*BorderFactory.createLineBorder(Color.GRAY, 1)*/));
rightPanel.add(alignmentTypePanel, "Center");
ButtonGroup alignmentGroup = new ButtonGroup();
for(int i = 0; i < alignmentCheckBox.length; i++){
alignmentCheckBox[i] = new JRadioButton(MainManager.alignmentTypes[i],
owner.manager.inputData.currentAlignmentType == i);
alignmentGroup.add(alignmentCheckBox[i]);
alignmentCheckBox[i].addActionListener(this);
alignmentTypePanel.add(alignmentCheckBox[i]);
}
//close button
JPanel buttonPanel = new JPanel(new BorderLayout());
JButton bClose = new JButton("Close");
bClose.addActionListener(this);
buttonPanel.add(bClose,"East");
rightPanel.add(buttonPanel,"South");
setTitle("Output Preferences");
this.setBounds(owner.getX()+owner.getWidth()/10, owner.getY(), owner.getWidth()*4/5, owner.getHeight()*4/5);
setVisible(true);
}
/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent e) {
//System.out.println(e.getSource().getClass());
try {
if(e.getSource().getClass() == Class.forName("javax.swing.JCheckBox")){
//System.out.println("Found!!!");
for(Postprocess plugin : owner.manager.postProcMan.getPlugins()){
if(e.getActionCommand().equals(plugin.getTabName())){
//System.out.println("This is the name: "+plugin.getTabName());
plugin.sampling = !plugin.sampling;
}
if(e.getActionCommand().equals(plugin.getTabName()+" ")){
//System.out.println("This is the name: "+plugin.getTabName());
plugin.postprocessWrite = !plugin.postprocessWrite;
}
}
}
else if(e.getSource().getClass() == Class.forName("javax.swing.JRadioButton")){
for(int i = 0; i < MainManager.alignmentTypes.length; i++){
if(e.getActionCommand().equals(MainManager.alignmentTypes[i])){
owner.manager.inputData.currentAlignmentType = i;
}
}
}
else{
dispose();
}
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
}