/* * Copyright 2011 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.formapi.client.form; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import org.jbpm.formapi.client.effect.FBFormEffect; import org.jbpm.formapi.client.form.FBCompositeItem; import org.jbpm.formapi.client.form.FBFormItem; import org.jbpm.formapi.client.form.PhantomPanel; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.InsertPanel; import com.google.gwt.user.client.ui.Widget; /** * base UI form item. Represents a composite of {@link FBFormItem} instances */ public abstract class LayoutFormItem extends FBFormItem implements FBCompositeItem { private List<FBFormItem> items = new ArrayList<FBFormItem>(); public LayoutFormItem() { this(new ArrayList<FBFormEffect>()); } public LayoutFormItem(List<FBFormEffect> formEffects) { super(formEffects); } @Override public List<FBFormItem> getItems() { return items; } public boolean removeItem(FBFormItem item) { return this.items.remove(item); } @Override public void setItems(List<FBFormItem> items) { this.items = items; } public int size() { return items.size(); } public Iterator<FBFormItem> formItemIterator() { return items.iterator(); } @Override public boolean remove(Widget w) { if (w instanceof FBFormItem) { FBFormItem item = (FBFormItem) w; this.items.remove(item); } return super.remove(w); } public boolean remove(Object o) { return items.remove(o); } public FBFormItem get(int index) { return items.get(index); } public FBFormItem remove(int index) { return items.remove(index); } public ListIterator<FBFormItem> formItemListIterator() { return items.listIterator(); } public boolean add(FBFormItem item) { return items.add(item); } @Override public abstract void add(PhantomPanel phantom, int x, int y); public FBFormItem insert(int index, FBFormItem newItem) { FBFormItem item = null; if (index == items.size()) { item = newItem; add(item); } else { if (items.get(index) == null || isWhiteSpace(items.get(index))) { item = items.set(index, newItem); } else { item = newItem; for (; index < items.size(); index++) { item = items.set(index, item); } items.add(item); } HasWidgets panel = getPanel(); if (panel instanceof InsertPanel) { InsertPanel iPanel = (InsertPanel) panel; iPanel.insert(newItem, index); } } return item; } protected boolean isWhiteSpace(Widget widget) { return widget.getElement().getParentElement().getInnerHTML() .equals(" "); } public abstract HasWidgets getPanel(); public HasWidgets getUnderlyingLayout(int x, int y) { for (FBFormItem item : items) { if (item instanceof LayoutFormItem) { HasWidgets newLayout = ((LayoutFormItem) item) .getUnderlyingLayout(x, y); if (newLayout != null) { return newLayout; } } } if (x > getAbsoluteLeft() && x < getAbsoluteLeft() + getOffsetWidth() && y > getAbsoluteTop() && y < getAbsoluteTop() + getOffsetHeight()) { return getPanel(); } return null; } }