package org.seqcode.projects.seqview.components;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.File;
public class FileBasedTracksPanel extends JPanel implements ActionListener {
private java.util.List<JTextField> fnames, labels;
private java.util.List<JButton> browseButtons;
private GridBagLayout layout;
private File currDirectory = new File(System.getProperty("user.home"));
public FileBasedTracksPanel() {
super();
fnames = new ArrayList<JTextField>();
labels = new ArrayList<JTextField>();
browseButtons = new ArrayList<JButton>();
layout = new GridBagLayout();
setLayout(layout);
GridBagConstraints constraints = new GridBagConstraints();
constraints.weightx = 1.0;
constraints.fill = GridBagConstraints.BOTH;
constraints.gridwidth = 1;
JLabel jl = new JLabel("File Name");
layout.setConstraints(jl,constraints);
add(jl);
jl = new JLabel("");
layout.setConstraints(jl,constraints);
add(jl);
jl = new JLabel("Track Label");
constraints.fill = GridBagConstraints.BOTH;
constraints.gridwidth = GridBagConstraints.REMAINDER;
layout.setConstraints(jl,constraints);
add(jl);
for (int i = 0; i < 6; i++) {
addRow();
}
}
public void addRow() {
GridBagConstraints constraints = new GridBagConstraints();
constraints.weightx = 1.0;
JTextField namefield = new JTextField("");
JTextField labelfield = new JTextField("");
JButton button = new JButton("Browse");
fnames.add(namefield);
labels.add(labelfield);
browseButtons.add(button);
button.addActionListener(this);
namefield.setColumns(20);
labelfield.setColumns(10);
constraints.fill = GridBagConstraints.BOTH;
constraints.gridwidth = 1;
layout.setConstraints(namefield,constraints);
add(namefield);
constraints.fill = GridBagConstraints.BOTH;
constraints.gridwidth = 1;
layout.setConstraints(button,constraints);
add(button);
constraints.fill = GridBagConstraints.BOTH;
constraints.gridwidth = GridBagConstraints.REMAINDER;
layout.setConstraints(labelfield,constraints);
add(labelfield);
invalidate();
}
public void actionPerformed(ActionEvent e) {
int index = browseButtons.indexOf(e.getSource());
if (index == -1) {
return;
}
JFileChooser chooser;
chooser = new JFileChooser(currDirectory);
int v = chooser.showOpenDialog(null);
if(v == JFileChooser.APPROVE_OPTION) {
File f = chooser.getSelectedFile();
currDirectory = chooser.getCurrentDirectory();
fnames.get(index).setText(f.getAbsolutePath());
}
}
/* parses the frame into the specified map and returns it. If
the input is null, a new map is created */
public Map<String,String> parse(Map<String,String> map) {
if (map == null) {
map = new HashMap<String,String>();
}
for (int i = 0; i < fnames.size(); i++) {
String name = fnames.get(i).getText();
String label = labels.get(i).getText();
if (name.length() > 0) {
if (label.length() == 0) {
label = name;
}
map.put(name, label);
}
}
return map;
}
public void fill(Map<String,String> map) {
int index = 0;
for (String k : map.keySet()) {
if (index >= fnames.size()) {
addRow();
}
fnames.get(index).setText(k);
labels.get(index).setText(map.get(k));
index++;
}
}
}