package jas2.swingstudio.adaptor;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import jas2.util.tree.*;
import jas2.util.*;
import hepjas.analysis.Folder;
import hepjas.analysis.HistogramFolder;
import jas2.swingstudio.*;
public class FolderTreeAdaptor extends TreeAdaptor implements ActionListener
{
public void init()
{
folder = getAssociatedObject();
}
public void onSelect()
{
if (folder != null) getPluginContext().sendMessage(folder.toString());
}
protected JPopupMenu getPopupMenu()
{
OrderedNode node = (OrderedNode) getAdaptorSite();
FolderComparator comp = (FolderComparator) node.getOrder();
JPopupMenu popup = new OnScreenPopupMenu();
JMenu sort = new JMenu("Sort");
b1 = new JRadioButtonMenuItem("As Parent Folder", comp == null);
b2 = new JRadioButtonMenuItem("By Creation Time", comp != null && !comp.alphabetical());
b3 = new JRadioButtonMenuItem("Alphabetically" , comp != null && comp.alphabetical());
b4 = new JCheckBoxMenuItem("Folders First", comp != null && comp.foldersFirst());
ButtonGroup b = new ButtonGroup();
b.add(b1);
b.add(b2);
b.add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
sort.add(b1);
sort.add(b2);
sort.add(b3);
sort.add(b4);
popup.add(sort);
return popup;
}
public void actionPerformed(ActionEvent e)
{
OrderedNode node = (OrderedNode) getAdaptorSite();
Object source = e.getSource();
boolean foldersFirst = b4.isSelected();
if (source == b1)
{
node.clearOrder();
}
else
{
node.setOrder(new FolderComparator(b3.isSelected(),foldersFirst));
}
}
private Object folder;
private JRadioButtonMenuItem b1;
private JRadioButtonMenuItem b2;
private JRadioButtonMenuItem b3;
private JCheckBoxMenuItem b4;
private static class FolderComparator implements Comparator
{
FolderComparator(boolean alphabetical, boolean foldersFirst)
{
this.foldersFirst = foldersFirst;
this.alphabetical = alphabetical;
}
public int compare(Object p1, Object p2)
{
OrderedNode n1 = (OrderedNode) p1;
OrderedNode n2 = (OrderedNode) p2;
if (foldersFirst)
{
boolean f1 = (n1.getFlags() & TreeItem.FOLDER) != 0;
boolean f2 = (n2.getFlags() & TreeItem.FOLDER) != 0;
if (f1 && !f2) return -1;
else if (!f1 && f2) return +1;
}
if (alphabetical) return n1.getName().compareTo(n2.getName());
return n1.getNaturalIndex() - n2.getNaturalIndex();
}
boolean alphabetical() { return alphabetical; }
boolean foldersFirst() { return foldersFirst; }
private boolean foldersFirst;
private boolean alphabetical;
}
}
Ads help maintain this website.