FormPanel form = new FormPanel();
form.setHeaderVisible(false);
form.setLabelWidth(200);
form.setFieldWidth(300);
final CheckBox box = new CheckBox();
box.setFieldLabel(Messages.get("label.workflow.inherited","Same workflow as parent"));
form.add(box);
final ListStore<GWTJahiaWorkflowDefinition> states = new ListStore<GWTJahiaWorkflowDefinition>();
final ComboBox<GWTJahiaWorkflowDefinition> combo = new ComboBox<GWTJahiaWorkflowDefinition>();
combo.setFieldLabel(Messages.get("label.workflow","Workflow"));
combo.setForceSelection(true);
combo.setDisplayField("displayName");
combo.setWidth(400);
combo.setStore(states);
combo.setTypeAhead(true);
combo.setTriggerAction(ComboBox.TriggerAction.ALL);
form.add(combo);
data = new BorderLayoutData(Style.LayoutRegion.CENTER);
layoutContainer.add(form, data);
grid.getSelectionModel().addSelectionChangedListener(new SelectionChangedListener<GWTJahiaWorkflowType>() {
@Override
public void selectionChanged(SelectionChangedEvent<GWTJahiaWorkflowType> se) {
previousSelection = null;
combo.setValue(null);
combo.clearSelections();
states.removeAll();
final List<GWTJahiaWorkflowDefinition> list = workflowRules.get(se.getSelectedItem());
states.add(list);
states.sort("displayName", Style.SortDir.ASC);
for (GWTJahiaWorkflowDefinition definition : list) {
if (Boolean.TRUE.equals(definition.get("active"))) {
box.setValue(!Boolean.TRUE.equals(definition.get("set")));
combo.setValue(definition);
return;
}
}
box.setValue(true);
}
});
box.addListener(Events.Change, new Listener<FieldEvent>() {
public void handleEvent(FieldEvent be) {
combo.setEnabled(!box.getValue());
if (combo.getSelection().size() == 1) {
combo.getSelection().get(0).set("set", !box.getValue());
if (!box.getValue()) {
combo.getSelection().get(0).set("active", Boolean.TRUE);
}
}
}
});
combo.addSelectionChangedListener(new SelectionChangedListener<GWTJahiaWorkflowDefinition>() {
@Override
public void selectionChanged(
SelectionChangedEvent<GWTJahiaWorkflowDefinition> event) {
if (previousSelection != null) {
previousSelection.set("set", Boolean.FALSE);
previousSelection.set("active", Boolean.FALSE);
}
if (event.getSelectedItem() != null) {
event.getSelectedItem().set("set", !box.getValue());
if (!box.getValue()) {
event.getSelectedItem().set("active", Boolean.TRUE);
}
}
previousSelection = event.getSelectedItem();
tab.layout();
}
});
// todo : use specific permission to manage workflows ?
if (!PermissionsUtils.isPermitted("jcr:write", engine.getNode()) || engine.getNode().isLocked()) {
box.setReadOnly(true);
combo.setReadOnly(true);
}
grid.getSelectionModel().select(0, false);