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.