/** * Copyright (C) 2008-2010 Daniel Senff * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package de.danielsenff.imageflow.gui; import java.awt.Point; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JTree; import javax.swing.tree.TreePath; import de.danielsenff.imageflow.ImageFlowView; import de.danielsenff.imageflow.controller.GraphController; import de.danielsenff.imageflow.controller.GraphControllerManager; import de.danielsenff.imageflow.models.NodeListener; import de.danielsenff.imageflow.models.delegates.UnitDelegate; import de.danielsenff.imageflow.models.unit.UnitElement; import de.danielsenff.imageflow.models.unit.UnitList; /** * Listener vor {@link DelegatesPanel} related stuff * @author dahie * */ public class DelegatesTreeListener implements MouseListener, KeyListener { private ImageFlowView ifView; /** * @param ifView */ public DelegatesTreeListener(final ImageFlowView ifView, GraphController graphController) { this.ifView = ifView; } private UnitList getNodes() { return ifView.getNodes(); } private GraphPanel getGraphPanel() { return ifView.getGraphPanel(); } private ImageFlowView getView() { return ifView; } public void mouseClicked(final MouseEvent e) { if (e.getClickCount() == 2) { final JTree tree = (JTree) e.getSource(); final int selRow = tree.getRowForLocation(e.getX(), e.getY()); final TreePath selPath = tree.getPathForLocation(e.getX(), e.getY()); if(selRow != -1 && selPath.getLastPathComponent() instanceof UnitDelegate) { final UnitDelegate delegate = ((UnitDelegate)selPath.getLastPathComponent()); Point point = UnitDelegate.POINT; GraphControllerManager.getInstance().getController().addNode(delegate, point); } } } public void mouseEntered(final MouseEvent arg0) {} public void mouseExited(final MouseEvent arg0) {} public void mousePressed(final MouseEvent arg0) {} public void mouseReleased(final MouseEvent arg0) {} /* * KeyListener */ public void keyPressed(final KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { // on enter add new unit to workflow final JTree tree = (JTree) e.getSource(); if (tree.getSelectionRows() != null && tree.getSelectionRows().length > 0) { // with 'Enter' all selected Units were inserted, therefore used an array final int[] selRows = tree.getSelectionRows(); final TreePath[] selPaths = new TreePath[selRows.length]; for (int i = 0; i < selRows.length; i++) { selPaths[i] = tree.getPathForRow(selRows[i]); } final Point insertPoint = UnitDelegate.POINT; // counts only Units, not Folders int realUnitCount = 0; for (int i = 0; i < selRows.length; i++) { if(selRows[i] != -1 && selPaths[i].getLastPathComponent() instanceof UnitDelegate) { final UnitDelegate delegate = ((UnitDelegate)selPaths[i].getLastPathComponent()); Point point = new Point(insertPoint.x + realUnitCount * GraphPanel.GRIDSIZE, insertPoint.y + realUnitCount * GraphPanel.GRIDSIZE); GraphControllerManager.getInstance().getController().addNode(delegate, point); realUnitCount++; } } } } } public void keyTyped(final KeyEvent e) {} public void keyReleased(final KeyEvent e) {} }