/******************************************************************************* * Copyright (c) 2004, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.gef.examples.logicdesigner.model.commands; import org.eclipse.gef.commands.Command; import org.eclipse.gef.examples.logicdesigner.model.LogicGuide; import org.eclipse.gef.examples.logicdesigner.model.LogicSubpart; /** * @author Pratik Shah */ public class ChangeGuideCommand extends Command { private LogicSubpart part; private LogicGuide oldGuide, newGuide; private int oldAlign, newAlign; private boolean horizontal; public ChangeGuideCommand(LogicSubpart part, boolean horizontalGuide) { super(); this.part = part; horizontal = horizontalGuide; } protected void changeGuide(LogicGuide oldGuide, LogicGuide newGuide, int newAlignment) { if (oldGuide != null && oldGuide != newGuide) { oldGuide.detachPart(part); } // You need to re-attach the part even if the oldGuide and the newGuide are the same // because the alignment could have changed if (newGuide != null) { newGuide.attachPart(part, newAlignment); } } public void execute() { // Cache the old values oldGuide = horizontal ? part.getHorizontalGuide() : part.getVerticalGuide(); if (oldGuide != null) oldAlign = oldGuide.getAlignment(part); redo(); } public void redo() { changeGuide(oldGuide, newGuide, newAlign); } public void setNewGuide(LogicGuide guide, int alignment) { newGuide = guide; newAlign = alignment; } public void undo() { changeGuide(newGuide, oldGuide, oldAlign); } }