use of org.activityinfo.ui.client.component.formdesigner.container.FieldWidgetContainer in project activityinfo by bedatadriven.
the class DropPanelDropController method previewDropNewWidget.
private void previewDropNewWidget(final DragContext context) throws VetoDragException {
final Template template = ((DnDLabel) context.draggable).getTemplate();
if (template instanceof FieldTemplate) {
final FormField formField = ((FieldTemplate) template).create();
vetoDropIfNeeded(context);
FormClass formClass = formDesigner.getModel().getFormClassByElementId(resourceId);
formDesigner.getFormFieldWidgetFactory().createWidget(formClass, formField, new FieldUpdater() {
@Override
public void onInvalid(String errorMessage) {
}
@Override
public void update(Object value) {
formDesigner.getSavedGuard().setSaved(false);
}
}).then(new Function<FormFieldWidget, Void>() {
@Nullable
@Override
public Void apply(@Nullable FormFieldWidget formFieldWidget) {
final FieldWidgetContainer fieldWidgetContainer = new FieldWidgetContainer(formDesigner, formFieldWidget, formField, resourceId);
containerMap.put(formField.getId(), fieldWidgetContainer);
drop(fieldWidgetContainer, context, formField);
initFieldProperties(fieldWidgetContainer, formField);
return null;
}
});
} else if (template instanceof SectionTemplate) {
final FormSection formSection = ((SectionTemplate) template).create();
vetoDropIfNeeded(context);
FieldsHolderWidgetContainer widgetContainer = FieldsHolderWidgetContainer.section(formDesigner, formSection, resourceId);
// parent drop container
containerMap.put(resourceId, widgetContainer);
drop(widgetContainer, context, formSection);
} else if (template instanceof LabelTemplate) {
final FormLabel formLabel = ((LabelTemplate) template).create();
final LabelWidgetContainer fieldWidgetContainer = new LabelWidgetContainer(formDesigner, formLabel, resourceId);
containerMap.put(formLabel.getId(), fieldWidgetContainer);
drop(fieldWidgetContainer, context, formLabel);
} else if (template instanceof SubFormTemplate) {
final FormField formField = ((SubFormTemplate) template).create();
vetoDropIfNeeded(context);
FormClass subForm = formDesigner.getModel().registerNewSubform(formField.getId(), ((SubFormTemplate) template).getKind());
subForm.setDatabaseId(formDesigner.getRootFormClass().getDatabaseId());
subForm.setParentFormId(formDesigner.getRootFormClass().getId());
subForm.setLabel(formField.getLabel());
SubFormReferenceType type = (SubFormReferenceType) formField.getType();
type.setClassId(subForm.getId());
final FieldsHolderWidgetContainer widgetContainer = FieldsHolderWidgetContainer.subform(formDesigner, formField, subForm, formField.getId());
// parent drop container
containerMap.put(formField.getId(), widgetContainer);
drop(widgetContainer.asWidget(), context);
int widgetIndex = dropTarget.getWidgetIndex(widgetContainer.asWidget());
formDesigner.getModel().getElementContainer(resourceId).insertElement(widgetIndex, formField);
formDesigner.getEventBus().fireEvent(new PanelUpdatedEvent(widgetContainer, PanelUpdatedEvent.EventType.ADDED));
formDesigner.getDragController().makeDraggable(widgetContainer.asWidget(), widgetContainer.getDragHandle());
removePositioner();
}
// forbid drop of source control widget
throw new VetoDragException();
}
use of org.activityinfo.ui.client.component.formdesigner.container.FieldWidgetContainer in project activityinfo by bedatadriven.
the class DropPanelDropController method updateModel.
private void updateModel(Widget draggable, DropController dropController) {
DropPanelDropController panelDropController = (DropPanelDropController) dropController;
for (WidgetContainer container : getAllContainers()) {
if (draggable.equals(container.asWidget())) {
if (container instanceof FieldWidgetContainer) {
FormField formField = ((FieldWidgetContainer) container).getFormField();
removeFromSourceFormClass(formField);
insertIntoTargetFormClass(panelDropController, container, formField);
} else if (container instanceof FieldsHolderWidgetContainer) {
FieldsHolderWidgetContainer fieldsHolderContainer = (FieldsHolderWidgetContainer) container;
if (fieldsHolderContainer.isSubform()) {
// subform
FormClass subForm = (FormClass) fieldsHolderContainer.getElementContainer();
FormField subformOwnerField = formDesigner.getModel().getSubformOwnerField(subForm);
removeFromSourceFormClass(subformOwnerField);
insertIntoTargetFormClass(panelDropController, container, subformOwnerField);
} else {
// form section
FormSection formSection = (FormSection) fieldsHolderContainer.getElementContainer();
FormClass sourceFormClass = formDesigner.getModel().getFormClassByElementId(formSection.getId());
sourceFormClass.remove(formSection);
insertIntoTargetFormClass(panelDropController, container, formSection);
}
}
}
}
}
use of org.activityinfo.ui.client.component.formdesigner.container.FieldWidgetContainer in project activityinfo by bedatadriven.
the class FieldEditor method start.
public void start(FormDesigner formDesigner) {
this.formDesigner = formDesigner;
formDesigner.getEventBus().addHandler(WidgetContainerSelectionEvent.TYPE, event -> {
WidgetContainer widgetContainer = event.getSelectedItem();
if (widgetContainer instanceof FieldWidgetContainer) {
show((FieldWidgetContainer) widgetContainer);
}
});
}
use of org.activityinfo.ui.client.component.formdesigner.container.FieldWidgetContainer in project activityinfo by bedatadriven.
the class FormDesignerPanel method buildWidgetContainers.
private void buildWidgetContainers(final FormDesigner formDesigner, final FormElementContainer container, final FormClass owner, final int depth, final List<Promise<Void>> promises) {
for (FormElement element : container.getElements()) {
if (element instanceof FormSection) {
FormSection formSection = (FormSection) element;
containerMap.put(formSection.getId(), FieldsHolderWidgetContainer.section(formDesigner, formSection, container.getId()));
buildWidgetContainers(formDesigner, formSection, owner, depth + 1, promises);
} else if (element instanceof FormLabel) {
FormLabel label = (FormLabel) element;
containerMap.put(label.getId(), new LabelWidgetContainer(formDesigner, label, container.getId()));
} else if (element instanceof FormField && !isSubFormKey(owner, (FormField) element)) {
final FormField formField = (FormField) element;
if (formField.getType() instanceof SubFormReferenceType) {
// subform
SubFormReferenceType subform = (SubFormReferenceType) formField.getType();
Promise<Void> promise = formDesigner.getResourceLocator().getFormClass(subform.getClassId()).then(new Function<FormClass, Void>() {
@Override
public Void apply(FormClass subform) {
formDesigner.getModel().registerSubform(formField.getId(), subform);
containerMap.put(formField.getId(), FieldsHolderWidgetContainer.subform(formDesigner, formField, subform, container.getId()));
buildWidgetContainers(formDesigner, subform, subform, depth + 1, promises);
return null;
}
});
promises.add(promise);
} else {
if (formField.getId().asString().startsWith("_")) {
// skip if form field is built-in
continue;
}
Promise<Void> promise = formDesigner.getFormFieldWidgetFactory().createWidget(owner, formField, new FieldUpdater() {
@Override
public void onInvalid(String errorMessage) {
}
@Override
public void update(Object value) {
formDesigner.getSavedGuard().setSaved(false);
}
}).then(new Function<FormFieldWidget, Void>() {
@Nullable
@Override
public Void apply(@Nullable FormFieldWidget input) {
containerMap.put(formField.getId(), new FieldWidgetContainer(formDesigner, input, formField, container.getId()));
if (container instanceof FormClass && ((FormClass) container).isSubForm()) {
// Possibly returned after initial fill - refill for current subform
fillPanel((FormClass) container, formDesigner);
}
return null;
}
});
promises.add(promise);
}
}
}
}
Aggregations