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.BaseState; import org.eclipse.etrice.core.room.RoomPackage; import org.eclipse.etrice.core.room.State; import org.eclipse.etrice.core.room.StateGraph; import org.eclipse.etrice.ui.behavior.Activator; import org.eclipse.etrice.ui.common.dialogs.AbstractPropertyDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; 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 StatePropertyDialog 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 (State s : sg.getStates()) { if (s!=state && s.getName()!=null && s.getName().equals(name)) return ValidationStatus.error("name already used"); } } return Status.OK_STATUS; } } private State state; private StateGraph sg; public StatePropertyDialog(Shell shell, State s, StateGraph sg) { super(shell, "Edit State"); this.state = s; this.sg = sg; } @Override protected Image getImage() { return Activator.getImage("icons/Behavior.gif"); } @Override protected void createContent(IManagedForm mform, Composite body, DataBindingContext bindingContext) { if (state instanceof BaseState) { NameValidator nv = new NameValidator(); Text name = createText(body, "Name:", state, RoomPackage.eINSTANCE.getBaseState_Name(), nv); createDecorator(name, "invalid name"); name.setFocus(); name.selectAll(); } else { Text name = mform.getToolkit().createText(body, "Name:", SWT.BORDER); name.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); name.setEnabled(false); } DetailCodeToString m2s = new DetailCodeToString(); StringToDetailCode s2m = new StringToDetailCode(); { Text entry = createText(body, "&Entry Code:", state, RoomPackage.eINSTANCE.getState_EntryCode(), null, s2m, m2s, true); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = 100; entry.setLayoutData(gd); } { Text exit = createText(body, "E&xit Code:", state, RoomPackage.eINSTANCE.getState_ExitCode(), null, s2m, m2s, true); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = 100; exit.setLayoutData(gd); } } }