2,2c2,2 < * @(#)SendToBackCommand.java 5.2 --- > * @(#)SendToBackCommand.java 3a4,9 > * Project: JHotdraw - a GUI framework for technical drawings > * http://www.jhotdraw.org > * http://jhotdraw.sourceforge.net > * Copyright: © by the original author(s) and all contributors > * License: Lesser GNU Public License (LGPL) > * http://www.opensource.org/licenses/lgpl-license.html 7a15,16 > import CH.ifa.draw.util.UndoableAdapter; > import CH.ifa.draw.util.Undoable; 8,8c17,17 < import java.util.*; --- > import java.util.*; 9,9d17 < import CH.ifa.draw.util.*; 13a21,22 > * > * @version <$CURRENT_VERSION$> 15,15c24,24 < public class SendToBackCommand extends Command { --- > public class SendToBackCommand extends AbstractCommand { 16,17d24 < < private DrawingView fView; 25,25c32,32 < super(name); --- > super(name, view); 26,26d32 < fView = view; 29a36,38 > setUndoActivity(createUndoActivity()); > getUndoActivity().setAffectedFigures(new ReverseFigureEnumerator(view().selectionZOrdered())); > FigureEnumeration fe = getUndoActivity().getAffectedFigures(); 30,30d35 < FigureEnumeration k = new ReverseFigureEnumerator(fView.selectionZOrdered()); 31,31c39,39 < while (k.hasMoreElements()) { --- > while (fe.hasMoreElements()) { 32,32c40,40 < fView.drawing().sendToBack(k.nextFigure()); --- > view().drawing().sendToBack(fe.nextFigure()); 34,34c42,42 < fView.checkDamage(); --- > view().checkDamage(); 37a46,90 > return view().selectionCount() > 0; > } > > protected Undoable createUndoActivity() { > return new SendToBackCommand.UndoActivity(view()); > } > > public static class UndoActivity extends UndoableAdapter { > private Hashtable myOriginalLayers; > > public UndoActivity(DrawingView newDrawingView) { > super(newDrawingView); > myOriginalLayers = new Hashtable(); > setUndoable(true); > setRedoable(true); > } > > public boolean undo() { > if (!super.undo()) { > return false; > } > > FigureEnumeration fe = getAffectedFigures(); > while (fe.hasMoreElements()) { > Figure currentFigure = fe.nextFigure(); > int currentFigureLayer = getOriginalLayer(currentFigure); > System.out.println("CurrentFigure sendToBack: " + currentFigure + " .. " + currentFigureLayer); > getDrawingView().drawing().sendToLayer(currentFigure, currentFigureLayer); > } > > return true; > } > > public boolean redo() { > // do not call execute directly as the selection might has changed > if (!isRedoable()) { > return false; > } > > FigureEnumeration fe = getAffectedFigures(); > while (fe.hasMoreElements()) { > sendToCommand(fe.nextFigure()); > } > > return true; 38,38d45 < return fView.selectionCount() > 0; 40a93,94 > protected void sendToCommand(Figure f) { > getDrawingView().drawing().sendToBack(f); 42a97,103 > protected void addOriginalLayer(Figure affectedFigure, int newOriginalLayer) { > myOriginalLayers.put(affectedFigure, new Integer(newOriginalLayer)); > } > > protected int getOriginalLayer(Figure lookupAffectedFigure) { > return ((Integer)myOriginalLayers.get(lookupAffectedFigure)).intValue(); > } 43a105,117 > public void setAffectedFigures(FigureEnumeration fe) { > // first make copy of FigureEnumeration in superclass > super.setAffectedFigures(fe); > // then get new FigureEnumeration of copy to save attributes > FigureEnumeration copyFe = getAffectedFigures(); > while (copyFe.hasMoreElements()) { > Figure f = copyFe.nextFigure(); > int originalLayer = getDrawingView().drawing().getLayer(f); > addOriginalLayer(f, originalLayer); > } > } > } > }