/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Eclipse Public License, Version 1.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.eclipse.org/org/documents/epl-v10.php * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.ide.eclipse.editors.layout.parts; import com.android.ide.eclipse.editors.AndroidEditor; import com.android.ide.eclipse.editors.descriptors.ElementDescriptor; import com.android.ide.eclipse.editors.layout.LayoutEditor; import com.android.ide.eclipse.editors.layout.LayoutEditor.UiEditorActions; import com.android.ide.eclipse.editors.uimodel.UiElementNode; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.commands.Command; /** * A command that knows how to instantiate a new element based on a given {@link ElementDescriptor}, * the parent {@link UiElementEditPart} and an optional target location. */ public class ElementCreateCommand extends Command { /** Descriptor of the new element to create */ private final ElementDescriptor mDescriptor; /** The edit part that hosts the new edit part */ private final UiElementEditPart mParentPart; /** The drop location in parent coordinates */ private final Point mTargetPoint; /** * Creates a new {@link ElementCreateCommand}. * * @param descriptor Descriptor of the new element to create * @param targetPart The edit part that hosts the new edit part * @param targetPoint The drop location in parent coordinates */ public ElementCreateCommand(ElementDescriptor descriptor, UiElementEditPart targetPart, Point targetPoint) { mDescriptor = descriptor; mParentPart = targetPart; mTargetPoint = targetPoint; } // --- Methods inherited from Command --- @Override public boolean canExecute() { return mDescriptor != null && mParentPart != null && mParentPart.getUiNode() != null && mParentPart.getUiNode().getEditor() instanceof LayoutEditor; } @Override public void execute() { super.execute(); UiElementNode uiParent = mParentPart.getUiNode(); if (uiParent != null) { final AndroidEditor editor = uiParent.getEditor(); if (editor instanceof LayoutEditor) { ((LayoutEditor) editor).wrapUndoRecording( String.format("Create %1$s", mDescriptor.getXmlLocalName()), new Runnable() { public void run() { UiEditorActions actions = ((LayoutEditor) editor).getUiEditorActions(); if (actions != null) { DropFeedback.addElementToXml(mParentPart, mDescriptor, mTargetPoint, actions); } } }); } } } @Override public void redo() { throw new UnsupportedOperationException("redo not supported by this command"); //$NON-NLS-1$ } @Override public void undo() { throw new UnsupportedOperationException("undo not supported by this command"); //$NON-NLS-1$ } }