/*******************************************************************************
 * Copyright (c) 2006 Sybase, Inc. 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:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.pagedesigner.commands.range;

import org.eclipse.jst.pagedesigner.commands.CommandResources;
import org.eclipse.jst.pagedesigner.commands.nav.ICaretPositionMover;
import org.eclipse.jst.pagedesigner.dom.DOMRange;
import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

/**
 * @author mengbo
 */
public class DeleteCommand extends RangeModeCommand implements
		ICaretPositionMover {
	private boolean _forward;

	/**
	 * @param label
	 * @param viewer
	 */
	public DeleteCommand(boolean forward, IHTMLGraphicalViewer viewer) {
		super(CommandResources.getString("DeleteCommand.Label.Delete"), viewer); //$NON-NLS-1$
		_forward = forward;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.jst.pagedesigner.commands.DesignerCommand#doExecute()
	 */
	protected DOMRange doRangeExecute(DOMRange selection) {
		if (selection == null) {
			return null;
		}

		DesignEdit edit = new DeleteEdit(selection, getViewer(), _forward);
		Listener listener = new Listener() {
			public void handleEvent(Event event) {
				event.type = SWT.NONE;
			}
		};
		getViewer().getControl().getDisplay()
				.addFilter(SWT.Selection, listener);
		boolean status = edit.perform();
		getViewer().getControl().getDisplay().removeFilter(SWT.Selection,
				listener);
		if (status) {
			return new DOMRange(edit.getOperationPosition(), edit
					.getOperationPosition());
		}
        return selection;
	}
}
