package org.infosec.ismp.applet.manager.component.tree; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Comparator; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JToggleButton; import javax.swing.JToolBar; import twaver.ChildrenSortableFilter; import twaver.DataBoxSelectionEvent; import twaver.DataBoxSelectionListener; import twaver.Element; import twaver.Node; import twaver.TWaverConst; import twaver.TWaverUtil; import twaver.tree.TTree; public class TreeToolBar extends JToolBar{ private TTree tree; private ButtonGroup group = new ButtonGroup(); private JButton[] moveButtons = new JButton[4]; public void resetMoveButtons(){ boolean enabled = true; if(tree.getSortComparator() != null || tree.getDataBox().getSelectionModel().size() == 0){ enabled = false; } moveButtons[0].setEnabled(enabled); moveButtons[1].setEnabled(enabled); moveButtons[2].setEnabled(enabled); moveButtons[3].setEnabled(enabled); } public TreeToolBar(final TTree tree){ this.tree = tree; this.tree.getDataBox().getSelectionModel().addDataBoxSelectionListener( new DataBoxSelectionListener(){ public void selectionChanged(DataBoxSelectionEvent e) { resetMoveButtons(); } }); this.setFloatable(false); tree.setChildrenSortableFilter(new ChildrenSortableFilter(){ public boolean isChildrenSortable(Element parentElement) { if(parentElement == null){ return false; } if(parentElement.isEmpty()){ return false; } return parentElement.getChildren().get(0) instanceof Node; } }); this.addGroupButton("default.gif", "Reset Order", new ActionListener(){ public void actionPerformed(ActionEvent e) { tree.setSortComparator(null); tree.expandAll(); resetMoveButtons(); } }); this.addGroupButton("sort1.png", "Sort Ascending", new ActionListener(){ public void actionPerformed(ActionEvent e) { tree.setSortComparator(new Comparator(){ public int compare(Object o1, Object o2) { Element e1 = (Element)o1; Element e2 = (Element)o2; return e1.getName().compareTo(e2.getName()); } }); tree.expandAll(); resetMoveButtons(); } }); this.addGroupButton("sort2.png", "Sort Descending", new ActionListener(){ public void actionPerformed(ActionEvent e) { tree.setSortComparator(new Comparator(){ public int compare(Object o1, Object o2) { Element e1 = (Element)o1; Element e2 = (Element)o2; return e2.getName().compareTo(e1.getName()); } }); tree.expandAll(); resetMoveButtons(); } }); this.addSeparator(); moveButtons[0] = addButton("top.png", "Move Selection To Top", new ActionListener(){ public void actionPerformed(ActionEvent e) { tree.getDataBox().moveSelectionToTop(); } }); moveButtons[1] = addButton("up.gif", "Move Selection To Up", new ActionListener(){ public void actionPerformed(ActionEvent e) { tree.getDataBox().moveSelectionToUp(); } }); moveButtons[2] = addButton("down.gif", "Move Selection To Down", new ActionListener(){ public void actionPerformed(ActionEvent e) { tree.getDataBox().moveSelectionToDown(); } }); moveButtons[3] = addButton("bottom.png", "Move Selection To Bottom", new ActionListener(){ public void actionPerformed(ActionEvent e) { tree.getDataBox().moveSelectionToBottom(); } }); this.addSeparator(); this.addButton("expand.png", "Expand All", new ActionListener(){ public void actionPerformed(ActionEvent e) { tree.expandAll(); } }); this.addButton("collapse.png", "Collapse All", new ActionListener(){ public void actionPerformed(ActionEvent e) { tree.collapseAll(); tree.expandRoot(); } }); resetMoveButtons(); } private JToggleButton addGroupButton(String icon, String tooltipText, ActionListener l){ JToggleButton button = new JToggleButton(); group.add(button); button.addActionListener(l); button.setToolTipText(tooltipText); button.setMargin(TWaverConst.NONE_INSETS); button.setIcon(TWaverUtil.getIcon("/org/infosec/ismp/applet/manager/component/tree/icon/" + icon)); this.add(button); return button; } private JButton addButton(String icon, String tooltipText, ActionListener l){ JButton button = new JButton(); button.addActionListener(l); button.setToolTipText(tooltipText); button.setMargin(TWaverConst.NONE_INSETS); button.setIcon(TWaverUtil.getIcon("/org/infosec/ismp/applet/manager/component/tree/icon/" + icon)); this.add(button); return button; } }