blob: 40c23a8045a20baef9b058b6648eb10f0db6f777 [file] [log] [blame]
/*******************************************************************************
* 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;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editparts.ScalableRootEditPart;
import org.eclipse.jface.text.ITextOperationTarget;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyID;
import org.eclipse.jst.pagedesigner.editors.HTMLEditor;
import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewer;
import org.w3c.dom.Element;
/**
* @author mengbo
*/
public class DesignResizeComponentCommand extends Command {
private EditPart _part;
private Object _constraint;
private SourceViewer _viewer;
/**
* @param child
* @param constraint
*/
public DesignResizeComponentCommand(EditPart child, Object constraint) {
this._part = child;
this._constraint = constraint;
EditPart part = child;
if (part instanceof ScalableRootEditPart) {
// TODO: eh?
// do nothing I guess...
} else {
while (part != null
&& !(part.getParent() instanceof ScalableRootEditPart)) {
part = part.getParent();
}
}
if (part != null) {
EditPartViewer viewer = ((ScalableRootEditPart) part.getParent())
.getViewer();
HTMLEditor editor = ((HTMLEditor) ((DefaultEditDomain) ((HTMLGraphicalViewer) viewer)
.getEditDomain()).getEditorPart());
_viewer = editor.getTextEditor().getTextViewer();
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.commands.Command#execute()
*/
public void execute() {
Element element = ((Element) _part.getModel());
String width = element.getAttribute(ICSSPropertyID.ATTR_WIDTH);
// String height = element.getAttribute(ICSSPropertyID.ATTR_HEIGHT);
String originalStyle = element.getAttribute(ICSSPropertyID.ATTR_STYLE);
StringBuffer style;
if (originalStyle != null) {
originalStyle = this.removeOthers(originalStyle,
ICSSPropertyID.ATTR_WIDTH);
originalStyle = this.removeOthers(originalStyle,
ICSSPropertyID.ATTR_HEIGHT);
style = new StringBuffer(originalStyle);
} else {
style = new StringBuffer(50);
}
if (null == width) {
style.append(";").append(ICSSPropertyID.ATTR_WIDTH).append(":")
.append(((Rectangle) _constraint).width).append(";");
style.append(ICSSPropertyID.ATTR_HEIGHT).append(":").append(
((Rectangle) _constraint).height).append("");
}
element.setAttribute(ICSSPropertyID.ATTR_STYLE, style.toString());
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.commands.Command#redo()
*/
public void redo() {
_viewer.doOperation(ITextOperationTarget.REDO);
}
/**
* @param style
* @param item
* @return ?
*/
public String removeOthers(String style, String item) {
String result = null;
int pos = style.indexOf(item);
if (pos < 0) {
return style;
}
int pos1 = pos;
if (pos > 0) {
if (style.charAt(pos - 1) == ';') {
pos--;
}
}
char ch = style.charAt(pos1);
while (!(ch == ';' || ch == '"' || ch == '\'')) {
pos1++;
if (pos1 >= style.length()) {
break;
}
ch = style.charAt(pos1);
}
if (pos1 < style.length()) {
result = style.substring(0, pos)
+ style.substring(pos1 + 1, style.length());
} else {
result = style.substring(0, pos);
}
if (result.indexOf(item) >= 0) {
return removeOthers(result, item);
}
return result;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.commands.Command#undo()
*/
public void undo() {
_viewer.doOperation(ITextOperationTarget.UNDO);
}
}