/******************************************************************************* * Copyright (c) 2000, 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.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.examples.logicdesigner.LogicMessages; import org.eclipse.gef.examples.logicdesigner.model.Circuit; import org.eclipse.gef.examples.logicdesigner.model.LED; import org.eclipse.gef.examples.logicdesigner.model.LogicDiagram; import org.eclipse.gef.examples.logicdesigner.model.LogicSubpart; public class CreateCommand extends org.eclipse.gef.commands.Command { private LogicSubpart child; private Rectangle rect; private LogicDiagram parent; private int index = -1; public CreateCommand() { super(LogicMessages.CreateCommand_Label); } public boolean canExecute() { return child != null && parent != null; } public void execute() { if (rect != null) { Insets expansion = getInsets(); if (!rect.isEmpty()) rect.expand(expansion); else { rect.x -= expansion.left; rect.y -= expansion.top; } child.setLocation(rect.getLocation()); if (!rect.isEmpty()) child.setSize(rect.getSize()); } redo(); } private Insets getInsets() { if (child instanceof LED || child instanceof Circuit) return new Insets(2, 0, 2, 0); return new Insets(); } public void redo() { parent.addChild(child,index); } public void setChild(LogicSubpart subpart) { child = subpart; } public void setIndex( int index ){ this.index = index; } public void setLocation (Rectangle r) { rect = r; } public void setParent(LogicDiagram newParent) { parent = newParent; } public void undo() { parent.removeChild(child); } }