package edu.stanford.rsl.apps.gui.pointselector;
import ij.ImageJ;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListModel;
import edu.stanford.rsl.conrad.utils.CONRAD;
import edu.stanford.rsl.conrad.utils.Configuration;
import edu.stanford.rsl.conrad.utils.FileUtil;
import edu.stanford.rsl.conrad.utils.XmlUtils;
/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class PointSelector extends JFrame implements ActionListener, ListSelectionListener {
/**
*
*/
private static final long serialVersionUID = -5274899502815414214L;
private JButton jButtonAdd;
private JButton jButtonDelete;
private JList<String> jList;
private JTable jInfoTable;
private JButton jButtonImport;
private JButton jButtonExport;
private JScrollPane jScrollPane;
private JButton jButtonOpenInROImanager;
private PointSelectorWorker psWorker;
public PointSelector () {
initGUI();
psWorker = new PointSelectorWorker();
}
private void initGUI(){
{
GridBagLayout thisLayout = new GridBagLayout();
thisLayout.rowWeights = new double[] {0.1, 0.1, 0.1, 0.1};
thisLayout.rowHeights = new int[] {7, 7, 7, 7};
thisLayout.columnWeights = new double[] {0.1, 0.1, 0.0, 0.1, 0.1};
thisLayout.columnWidths = new int[] {20, 7, 69, 7, 7};
getContentPane().setLayout(thisLayout);
{
jButtonAdd = new JButton();
getContentPane().add(jButtonAdd, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
jButtonAdd.setText("Add");
jButtonAdd.addActionListener(this);
}
{
jButtonExport = new JButton();
getContentPane().add(jButtonExport, new GridBagConstraints(4, 3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
jButtonExport.setText("ExportToXML");
jButtonExport.addActionListener(this);
}
{
jButtonOpenInROImanager = new JButton();
getContentPane().add(jButtonOpenInROImanager, new GridBagConstraints(4, 2, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
jButtonOpenInROImanager.setText("OpenInROImanager");
jButtonOpenInROImanager.addActionListener(this);
jButtonOpenInROImanager.setVisible(false);
}
{
jButtonImport = new JButton();
getContentPane().add(jButtonImport, new GridBagConstraints(3, 3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
jButtonImport.setText("ImportFromXML");
jButtonImport.addActionListener(this);
}
{
jButtonDelete = new JButton();
getContentPane().add(jButtonDelete, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
jButtonDelete.setText("Delete");
jButtonDelete.addActionListener(this);
}
{
TableModel jInfoTableModel =
new DefaultTableModel();
jInfoTable = new JTable();
jScrollPane = new JScrollPane(jInfoTable);
getContentPane().add(jScrollPane, new GridBagConstraints(3, 0, 2, 3, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
jInfoTable.setModel(jInfoTableModel);
}
{
ListModel<String> jListModel =
new DefaultComboBoxModel<String>();
jList = new JList<String>();
getContentPane().add(jList, new GridBagConstraints(0, 0, 2, 3, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
jList.setModel(jListModel);
jList.addListSelectionListener(this);
}
}
{
this.setSize(681, 320);
}
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent arg0) {
if (arg0.getSource().equals(jButtonExport)){
Thread test = new Thread(){
@Override
public void run() {
try {
if (psWorker.getNumberOfPointSets() > 0){
XmlUtils.exportToXML(psWorker.getAllPointSets());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
test.start();
}
if (arg0.getSource().equals(jButtonImport)){
Thread test = new Thread(){
@Override
public void run() {
try {
psWorker.setAllPointSets(XmlUtils.importFromXML());
updateListStrings();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
test.start();
}
if (arg0.getSource().equals(jButtonAdd)){
Thread thrd = new Thread(){
@Override
public void run() {
if (psWorker.evaluate()) {
int nrSets = psWorker.getNumberOfPointSets();
((DefaultComboBoxModel<String>)jList.getModel()).addElement("PointSet_" + nrSets + "_" +
psWorker.getPointSet(nrSets-1).size() + "_Points");
}
}
};
thrd.start();
}
if (arg0.getSource().equals(jButtonOpenInROImanager)){
Thread thrd = new Thread(){
@Override
public void run() {
if (!jList.isSelectionEmpty()){
psWorker.setRoiManagerPointSet(jList.getSelectedIndex());
}
}
};
thrd.start();
}
if (arg0.getSource().equals(jButtonDelete)){
int res;
if (jList.isSelectionEmpty()){
res = JOptionPane.showConfirmDialog(this, "Clear ALL datasets?", "Delete datasets", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if (res == 0){
psWorker.removeAllPointSets();
}
}
else
{
res = JOptionPane.showConfirmDialog(this, "Clear selected datasets?", "Delete datasets", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if (res == 0){
for (int i = 0; i < jList.getSelectedIndices().length; ++i)
psWorker.removePointSet(jList.getSelectedIndices()[jList.getSelectedIndices().length-i-1]);
}
}
if (res==0) {
jInfoTable.setModel(new DefaultTableModel());
jButtonOpenInROImanager.setVisible(false);
}
updateListStrings();
}
}
@Override
public void valueChanged(ListSelectionEvent arg0) {
if (arg0.getSource().equals(jList)){
Thread test = new Thread(){
@Override
public void run() {
if(!jList.isSelectionEmpty()){
int idx = jList.getSelectedIndex();
Set<Integer> sortSet = new HashSet<Integer>();
Iterator<double[]> it = psWorker.getPointSet(idx).iterator();
while (it.hasNext()){
double[] p = it.next();
sortSet.add((int)p[p.length-1]);
}
jInfoTable.setModel(new DefaultTableModel(
new String[][] { { Integer.toString(idx),
Integer.toString(psWorker.getPointSet(idx).size()),
Integer.toString(sortSet.size()) } },
new String[] { "Nr.", "#Points", "#Slices" }));
jInfoTable.setPreferredScrollableViewportSize(jInfoTable.getPreferredSize());
//jScrollPane.setSize(jInfoTable.getPreferredSize());
jButtonOpenInROImanager.setVisible(true);
}
}
};
test.start();
}
}
private void updateListStrings(){
((DefaultComboBoxModel<String>)jList.getModel()).removeAllElements();
int nrSets = psWorker.getNumberOfPointSets();
if (nrSets > 0){
for (int i=0; i < nrSets; ++i)
((DefaultComboBoxModel<String>)jList.getModel()).addElement("PointSet_" + i + "_" +
psWorker.getPointSet(i).size() + "_Points");
}
}
public void startMarkerDetectionTool() {
}
/**
* @param args
*/
public static void main(String[] args) {
CONRAD.setup();
PointSelector ps = new PointSelector();
ps.setVisible(true);
}
}
/*
* Copyright (C) 2010-2014 - Martin Berger
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/