// Copyright (c) 1996-98 The Regents of the University of California. All // Rights Reserved. Permission to use, copy, modify, and distribute this // software and its documentation for educational, research and non-profit // purposes, without fee, and without a written agreement is hereby granted, // provided that the above copyright notice and this paragraph appear in all // copies. Permission to incorporate this software into commercial products may // be obtained by contacting the University of California. David F. Redmiles // Department of Information and Computer Science (ICS) University of // California Irvine, California 92697-3425 Phone: 714-824-3823. This software // program and documentation are copyrighted by The Regents of the University // of California. The software program and documentation are supplied "as is", // without any accompanying services from The Regents. The Regents do not // warrant that the operation of the program will be uninterrupted or // error-free. The end-user understands that the program was developed for // research purposes and is advised not to rely exclusively on the program for // any reason. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY // PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, // INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS // DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY // DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE // SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF // CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, // ENHANCEMENTS, OR MODIFICATIONS. // File: ActionSelectNext.java // Classes: ActionSelectNext // Original Author: jrobbins@ics.uci.edu // $Id: ActionSelectNext.java,v 1.5 1997/06/10 23:42:23 jrobbins Exp $ package uci.graphedit; import java.awt.*; import java.util.*; /** Action to select the next (or previous) DiagramElement in the * editor's current view. This is very convienent for moving among * lots of small diagram elements. It also provides a simple example * of an Action that is bound to a key. * * FEATURE: select_by_tab_key * * @see ModeSelect#bindKeys */ public class ActionSelectNext extends Action { //////////////////////////////////////////////////////////////// // constants public static final String DIR = "Direction"; public static final String DIR_NEXT = "Next"; public static final String DIR_PREV = "Previous"; //////////////////////////////////////////////////////////////// // constructors public ActionSelectNext() { } public ActionSelectNext(String d) { setArg(DIR, d); } public ActionSelectNext(boolean next) { setArg(DIR, next ? DIR_NEXT : DIR_PREV); } //////////////////////////////////////////////////////////////// // Action API public String name() { return "Select Next DiagramElement in Layer"; } public void doIt(java.awt.Event e) { SelectionSingle curSel; DiagramElement newDE = null; int offset = 1; String dir = (String) getArg(DIR); if (DIR_PREV.equals(dir) || dir == null && e.shiftDown()) offset = -1; Editor ce = Globals.curEditor(); SelectionMultiple selections = ce.selection(); Vector diagramContents = ce.view().contents(); int diagramSize = diagramContents.size(); int newIndex = diagramSize + 1; if (selections.size() == 0) newIndex = 0; else if (selections.size() == 1) { DiagramElement curDE; curSel = (SelectionSingle) selections.contents().firstElement(); curDE = (DiagramElement) curSel.content(); int curIndex = diagramContents.indexOf(curDE); newIndex = (curIndex + offset + diagramSize) % diagramSize; } if (diagramSize > newIndex) newDE = (DiagramElement) diagramContents.elementAt(newIndex); if (newDE != null) ce.selectItem(newDE); } public void undoIt() { System.out.println("Undo does not make sense for ActionSelectNext"); } } /* end class ActionSelectNext */