/* * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI * for visualizing and manipulating spatial features with geometry and attributes. * * Copyright (C) 2003 Vivid Solutions * * 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. * * For more information, contact: * * Vivid Solutions * Suite #1A * 2328 Government Street * Victoria BC V8T 5G5 * Canada * * (250)385-6040 * www.vividsolutions.com */ package com.vividsolutions.jump.workbench.ui.cursortool; import java.awt.Cursor; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import javax.swing.Icon; import com.vividsolutions.jump.workbench.ui.LayerViewPanel; public abstract class CompositeTool implements CursorTool { protected ArrayList cursorTools = new ArrayList(); public CompositeTool(CursorTool[] cursorTools) { this.cursorTools = new ArrayList(Arrays.asList(cursorTools)); } public void deactivate() { for (Iterator i = cursorTools.iterator(); i.hasNext();) { CursorTool tool = (CursorTool) i.next(); tool.deactivate(); } } public Cursor getCursor() { for (Iterator i = cursorTools.iterator(); i.hasNext();) { CursorTool cursorTool = (CursorTool) i.next(); //Prefer cursors other than the default cursor. [Jon Aquino] if (cursorTool.getCursor() != Cursor.getDefaultCursor()) { return cursorTool.getCursor(); } } return Cursor.getDefaultCursor(); } public boolean isRightMouseButtonUsed() { for (Iterator i = cursorTools.iterator(); i.hasNext();) { CursorTool cursorTool = (CursorTool) i.next(); if (cursorTool.isRightMouseButtonUsed()) { return true; } } return false; } protected CursorTool firstCursorTool() { return (CursorTool) cursorTools.get(0); } private LayerViewPanel panel = null; public void activate(LayerViewPanel layerViewPanel) { this.panel = layerViewPanel; for (Iterator i = cursorTools.iterator(); i.hasNext();) { CursorTool tool = (CursorTool) i.next(); tool.activate(layerViewPanel); } } public CompositeTool add(CursorTool tool) { cursorTools.add(tool); return this; } public void cancelGesture() { for (Iterator i = cursorTools.iterator(); i.hasNext();) { CursorTool tool = (CursorTool) i.next(); tool.cancelGesture(); } } public Icon getIcon() { for (Iterator i = cursorTools.iterator(); i.hasNext();) { CursorTool tool = (CursorTool) i.next(); if (tool.getIcon() != null) { return tool.getIcon(); } } return null; } protected String getName(String delimiter) { String name = ""; for (int i = 0; i < cursorTools.size(); i++) { if (i > 0) { name += (" " + delimiter + " "); } name += ((CursorTool) cursorTools.get(i)).getName(); } return name; } public boolean isGestureInProgress() { for (Iterator i = cursorTools.iterator(); i.hasNext();) { CursorTool tool = (CursorTool) i.next(); if (tool.isGestureInProgress()) { return true; } } return false; } public LayerViewPanel getPanel() { return panel; } }