/* ViewerBookTree.java created 2007-09-11 * */ package org.signalml.app.view.workspace; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import javax.swing.tree.TreePath; import org.signalml.app.action.document.ActivateDocumentAction; import org.signalml.app.action.document.CloseDocumentAction; import org.signalml.app.action.selector.ActionFocusListener; import org.signalml.app.action.selector.ActionFocusManager; import org.signalml.app.action.selector.ActionFocusSupport; import org.signalml.app.action.selector.BookDocumentFocusSelector; import org.signalml.app.document.BookDocument; import org.signalml.app.document.DocumentFlowIntegrator; import org.signalml.app.model.book.BookTreeModel; import org.signalml.app.view.common.components.cellrenderers.BookTreeCellRenderer; import org.signalml.plugin.export.signal.Document; import org.signalml.plugin.export.view.AbstractViewerTree; import org.signalml.plugin.impl.PluginAccessClass; /** ViewerBookTree * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class ViewerBookTree extends AbstractViewerTree implements BookDocumentFocusSelector { private static final long serialVersionUID = 1L; private ActionFocusSupport afSupport = new ActionFocusSupport(this); private JPopupMenu bookDocumentPopupMenu; private ActionFocusManager actionFocusManager; private DocumentFlowIntegrator documentFlowIntegrator; private ActivateDocumentAction activateDocumentAction; private CloseDocumentAction closeDocumentAction; private BookDocument activeBookDocument; public ViewerBookTree(BookTreeModel model) { super(model); setCellRenderer(new BookTreeCellRenderer()); expandPath(new TreePath(new Object[] {model.getRoot()})); addMouseListener(new MouseEventHandler()); } @Override public BookTreeModel getModel() { return (BookTreeModel) super.getModel(); } @Override public BookDocument getActiveBookDocument() { return activeBookDocument; } @Override public Document getActiveDocument() { return activeBookDocument; } @Override public void addActionFocusListener(ActionFocusListener listener) { afSupport.addActionFocusListener(listener); } @Override public void removeActionFocusListener(ActionFocusListener listener) { afSupport.removeActionFocusListener(listener); } @Override public JPopupMenu getComponentPopupMenu() { return focus(getSelectionPath()); } private JPopupMenu focus(TreePath path) { JPopupMenu popupMenu = null; activeBookDocument = null; if (path != null) { Object last = path.getLastPathComponent(); if (last instanceof BookDocument) { activeBookDocument = (BookDocument) last; popupMenu = getBookDocumentPopupMenu(); } } afSupport.fireActionFocusChanged(); return popupMenu; } private JPopupMenu getBookDocumentPopupMenu() { if (bookDocumentPopupMenu == null) { bookDocumentPopupMenu = new JPopupMenu(); bookDocumentPopupMenu.add(getActivateDocumentAction()); bookDocumentPopupMenu.addSeparator(); bookDocumentPopupMenu.add(getCloseDocumentAction()); PluginAccessClass.getGUIImpl().addToBookTreeBookDocumentPopupMenu(bookDocumentPopupMenu); } return bookDocumentPopupMenu; } public ActionFocusManager getActionFocusManager() { return actionFocusManager; } public void setActionFocusManager(ActionFocusManager actionFocusManager) { this.actionFocusManager = actionFocusManager; } public DocumentFlowIntegrator getDocumentFlowIntegrator() { return documentFlowIntegrator; } public void setDocumentFlowIntegrator(DocumentFlowIntegrator documentFlowIntegrator) { this.documentFlowIntegrator = documentFlowIntegrator; } public ActivateDocumentAction getActivateDocumentAction() { if (activateDocumentAction == null) { activateDocumentAction = new ActivateDocumentAction(actionFocusManager,this); } return activateDocumentAction; } public CloseDocumentAction getCloseDocumentAction() { if (closeDocumentAction == null) { closeDocumentAction = new CloseDocumentAction(this); closeDocumentAction.setDocumentFlowIntegrator(documentFlowIntegrator); } return closeDocumentAction; } private class MouseEventHandler extends MouseAdapter { // TODO finish @Override public void mousePressed(MouseEvent e) { ViewerBookTree tree = (ViewerBookTree) e.getSource(); if (SwingUtilities.isRightMouseButton(e) && (e.getClickCount() == 1)) { TreePath selPath = tree.getPathForLocation(e.getX(), e.getY()); tree.setSelectionPath(selPath); } } } }