package husacct.define.presentation.moduletree; import husacct.define.task.components.AbstractDefineComponent; import husacct.define.task.components.LayerComponent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import javax.swing.JTree; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; public class ModuleTree extends JTree { private static final long serialVersionUID = 3282591641481691737L; private ModuletreeContextMenu moduletreeContextMenu; private MouseListener righclikmenu = new MouseListener() { @Override public void mouseClicked(MouseEvent e) { if ((e.getSource() instanceof ModuleTree) && (e.getButton() == MouseEvent.BUTTON3)) { ModuleTree temp = (ModuleTree) e.getSource(); TreePath path = temp.getSelectionPath(); AbstractDefineComponent selectedModule = (AbstractDefineComponent) path.getLastPathComponent(); if (selectedModule instanceof LayerComponent) { moduletreeContextMenu.isLayer(); } else { moduletreeContextMenu.isComponent(); } moduletreeContextMenu.show(e.getComponent(), e.getX(), e.getY()); moduletreeContextMenu.setVisible(true); } } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } }; public ModuleTree(AbstractDefineComponent rootComponent) { super(new CombinedModuleTreeModel(rootComponent)); CombinedModuleCellRenderer moduleCellRenderer = new CombinedModuleCellRenderer(); setCellRenderer(moduleCellRenderer); setDefaultSettings(); addMouseListener(righclikmenu); } public void setContextMenu(ModuletreeContextMenu moduletreeContextMenu) { this.moduletreeContextMenu = moduletreeContextMenu; } public void setDefaultSettings() { getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); } public void setSelectedRow(long moduleId) { ArrayList<Object> pathParts = new ArrayList<Object>(); TreeModel model = getModel(); if (model != null) { Object root = model.getRoot(); pathParts.add(root); walk(root, moduleId, pathParts); } } private void walk(Object o, long moduleId, ArrayList<Object> pathParts) { int cc; cc = getModel().getChildCount(o); for (int i = 0; i < cc; i++) { AbstractDefineComponent child = (AbstractDefineComponent) getModel().getChild(o, i); long childModuleId = child.getModuleId(); if (childModuleId == moduleId) { pathParts.add(child); TreePath path = new TreePath(pathParts.toArray()); setSelectionPath(path); return; } else { if (!getModel().isLeaf(child)) { @SuppressWarnings("unchecked") ArrayList<Object> childPathParts = (ArrayList<Object>) pathParts.clone(); childPathParts.add(child); walk(child, moduleId, childPathParts); } } } } }