private static FormElementContainer getElementContainerImpl(FormElementContainer container, final ResourceId elementId) { if (container.getId().equals(elementId)) { return container; } for (FormElement elem : container.getElements()) { if (elem instanceof FormElementContainer) { FormElementContainer result = getElementContainerImpl((FormElementContainer) elem, elementId); if (result != null) { return result; } } } return null; }
@Override public void setLabel(String label) { if(subFormField != null) { subFormField.setLabel(label); elementContainer.setLabel(label); } }
@Override public void apply(FormElement element, FormElementContainer container) { if (element.equals(formElement)) { container.getElements().remove(formElement); } } });
@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; } });
private void insertIntoTargetFormClass(DropPanelDropController panelDropController, WidgetContainer container, FormElement formElement) { int widgetIndex = panelDropController.getDropTarget().getWidgetIndex(container.asWidget()); // target form class FormElementContainer elementContainer = formDesigner.getModel().getElementContainer(panelDropController.getResourceId()); // update model elementContainer.insertElement(widgetIndex, formElement); }
public void syncWithModel(final boolean force) { panel.getPanel().getLabel().setHTML("<h3>" + SafeHtmlUtils.fromString(Strings.nullToEmpty(elementContainer.getLabel())).asString() + "</h3>"); }
private void addFieldElements(FormElementContainer container, List<BodyElement> elements) { for(BodyElement element : elements) { if (element instanceof Group) { Group group = (Group) element; if (!Strings.isNullOrEmpty(element.getLabel())) { FormSection section = createSection(group); addFieldElements(section, group.getElements()); container.addElement(section); } else { addFieldElements(container, group.getElements()); } } else { container.addElement(createField(element)); } } }
private static FormElementContainer getContainerElementsImpl(FormElementContainer container, final FormElement searchElement) { if (container.getElements().contains(searchElement)) { return container; } for (FormElement elem : container.getElements()) { if (elem instanceof FormElementContainer) { final FormElementContainer result = getContainerElementsImpl((FormElementContainer) elem, searchElement); if (result != null) { return result; } } } return null; }
protected FieldsHolderWidgetContainer(final FormDesigner formDesigner, final FormElementContainer elementContainer, ResourceId parentId) { this.formDesigner = formDesigner; this.elementContainer = elementContainer; this.parentId = parentId; panel = new FieldsHolderPanel(formDesigner, parentId); panel.getPanel().setClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if (FieldsHolderWidgetContainer.this.equals(formDesigner.getModel().getSelectedWidgetContainer())) { return; // skip, container is already selected } formDesigner.getContainerPresenter().show(FieldsHolderWidgetContainer.this); formDesigner.getEventBus().fireEvent(new WidgetContainerSelectionEvent(FieldsHolderWidgetContainer.this)); } }); formDesigner.getEventBus().addHandler(WidgetContainerSelectionEvent.TYPE, new WidgetContainerSelectionEvent.Handler() { @Override public void handle(WidgetContainerSelectionEvent event) { WidgetContainer selectedItem = event.getSelectedItem(); panel.getPanel().setSelected(selectedItem.asWidget().equals(panel.asWidget())); } }); FlowPanel dropPanel = createDropPanel(); panel.getPanel().getSubformContainer().add(dropPanel); dropController = formDesigner.getDropControllerRegistry().register(elementContainer.getId(), dropPanel, formDesigner); dropController.getContainerMap().put(elementContainer.getId(), this); // register yourself syncWithModel(); }
@Override public void execute() { int widgetIndex = dropTarget.getWidgetIndex(widgetContainer.asWidget()); FormElementContainer elementContainer = formDesigner.getModel().getElementContainer(resourceId); // update model elementContainer.insertElement(widgetIndex, formElement); formDesigner.getDragController().makeDraggable(widgetContainer.asWidget(), widgetContainer.getDragHandle()); removePositioner(); } });
public void show(@Nonnull final FieldsHolder fieldsHolder) { if (fieldsHolder.equals(formDesigner.getModel().getSelectedWidgetContainer())) { return; // skip, container is already selected } reset(); formDesigner.getFormDesignerPanel().setContainerPropertiesPanelVisible(); view.getLabelGroup().setVisible(true); view.getLabel().setValue(Strings.nullToEmpty(fieldsHolder.getElementContainer().getLabel())); validateLabel(); labelKeyUpHandler = view.getLabel().addKeyUpHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { if (validateLabel()) { fieldsHolder.setLabel(view.getLabel().getValue()); fieldsHolder.updateUi(); } } }); }
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)) {
public void traverse(FormElementContainer element, TraverseFunction traverseFunction) { for (FormElement elem : Lists.newArrayList(element.getElements())) { traverseFunction.apply(elem, element); if (elem instanceof FormElementContainer) { traverse((FormElementContainer) elem, traverseFunction); } } }
private void vetoDropIfNeeded(DragContext context) throws VetoDragException { // DnDLabel then drop is always allowed if (context.draggable instanceof DnDLabel && ((DnDLabel) context.draggable).getTemplate() instanceof FieldTemplate) { return; } if (isField(context.selectedWidgets.get(0))) { // field is moved // Once placed, fields can only be moved within the same form/subform ResourceId targetFormId = getId(dropTarget, FormDesignerConstants.OWNER_ID); ResourceId dataFieldId = getId(context.draggable, FormDesignerConstants.DATA_FIELD_ID); FormClass targetForm = formDesigner.getModel().getFormClass(targetFormId); if (hasField(targetForm, dataFieldId)) { return; } else { throw new VetoDragException(); } } if (formDesigner.getModel().getElementContainer(resourceId) instanceof FormSection || formDesigner.getModel().isSubform(formDesigner.getModel().getElementContainer(resourceId).getId())) { // we are not going to handle nested FormSection or nested SubForms in FormDesigner // It should be enough to handle one level of FormSections and SubForms: // 1. on selection FormSection/SubForm container is selected by blue color // 2. on formField selection highlight it with green color // nested FormSection/SubForm brings higher complexity without comparative value. throw new VetoDragException(); } }
formDesigner.getModel().getElementContainer(resourceId).insertElement(widgetIndex, formField);
private void dump(String indent, FormElementContainer container) { for(FormElement element : container.getElements()) { if(element instanceof FormSection) { System.out.println(indent + element.getLabel()); dump(indent + " ", ((FormSection) element)); } else { FormField field = ((FormField) element); System.out.println(String.format("%s[%s] %s : %s", indent, field.getCode(), field.getLabel(), field.getType().getTypeClass().getId())); } } }
for (FormElement element : container.getElements()) { if (element instanceof FormLabel) { FormLabel formLabel = (FormLabel) element;