package org.eclipse.etrice.ui.behavior.dialogs;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.etrice.core.room.RoomPackage;
import org.eclipse.etrice.core.room.StateGraph;
import org.eclipse.etrice.core.room.TrPoint;
import org.eclipse.etrice.core.room.TransitionPoint;
import org.eclipse.etrice.ui.behavior.Activator;
import org.eclipse.etrice.ui.common.dialogs.AbstractPropertyDialog;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IManagedForm;
public class TrPointPropertyDialog extends AbstractPropertyDialog {
class NameValidator implements IValidator {
@Override
public IStatus validate(Object value) {
if (value instanceof String) {
String name = (String) value;
if (name.isEmpty())
return ValidationStatus.error("name must not be empty");
for (TrPoint t : sg.getTrPoints()) {
if (t!=tp && t.getName()!=null && t.getName().equals(name))
return ValidationStatus.error("name already used");
}
}
return Status.OK_STATUS;
}
}
private StateGraph sg;
private TrPoint tp;
public TrPointPropertyDialog(Shell shell, TrPoint tp, StateGraph sg,
boolean subtp) {
super(shell, "Edit Transition Point");
this.sg = sg;
this.tp = tp;
}
@Override
protected Image getImage() {
return Activator.getImage("icons/Behavior.gif");
}
@Override
protected void createContent(IManagedForm mform, Composite body,
DataBindingContext bindingContext) {
NameValidator nv = new NameValidator();
Text name = createText(body, "&Name:", tp, RoomPackage.eINSTANCE.getTrPoint_Name(), nv);
if (tp instanceof TransitionPoint) {
createCheck(body, "Is &Handler:", tp, RoomPackage.eINSTANCE.getTransitionPoint_Handler());
}
createDecorator(name, "invalid name");
name.setFocus();
name.selectAll();
}
}