/* This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2013 Servoy BV This program is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program; if not, see http://www.gnu.org/licenses or write to the Free Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 */ package com.servoy.j2db.debug.layout; import java.util.ArrayList; import java.util.List; import com.servoy.base.persistence.IMobileProperties; import com.servoy.base.persistence.IMobileProperties.MobileProperty; import com.servoy.base.persistence.PersistUtils; import com.servoy.j2db.scripting.solutionmodel.JSComponent; import com.servoy.j2db.scripting.solutionmodel.JSForm; import com.servoy.j2db.scripting.solutionmodel.JSPart; /** * Layout wrapper for solution model parts. * * @author rgansevles * */ public class PartLayoutWrapper implements ILayoutWrapper { private final JSPart part; private final JSForm jsform; public PartLayoutWrapper(JSPart part, JSForm jsform) { this.part = part; this.jsform = jsform; } @Override public void setBounds(int x, int y, int width, int height) { part.setHeight(y + height); if (PersistUtils.isHeaderPart(part.getPartType())) { MobileFormLayout.layoutHeader(getLayoutElements(part.getPartType()), x, y, width); } else if (PersistUtils.isFooterPart(part.getPartType())) { // Adjust body JSPart bodyPart = ((JSForm)part.getJSParent()).getBodyPart(); if (bodyPart != null) { bodyPart.setHeight(y); } MobileFormLayout.layoutFooter(getLayoutElements(part.getPartType()), x, y, width); } } private List<ILayoutWrapper> getLayoutElements(int partType) { List<ILayoutWrapper> elements = new ArrayList<ILayoutWrapper>(); for (JSComponent< ? > comp : jsform.getComponents()) { if ((PersistUtils.isHeaderPart(partType) && comp.getBaseComponent(false).getCustomMobileProperty(IMobileProperties.HEADER_ITEM.propertyName) != null) || (PersistUtils.isFooterPart(partType) && comp.getBaseComponent(false).getCustomMobileProperty(IMobileProperties.FOOTER_ITEM.propertyName) != null)) { elements.add(new ComponentLayoutWrapper(comp)); } } return elements; } @Override public int getWidth() { return 0; } @Override public int getHeight() { return part.getHeight(); } @Override public int getX() { return 0; } @Override public int getY() { return 0; // not used for parts } @Override public int getPreferredHeight() { return 0; } @Override public MobileFormSection getElementType() { return PersistUtils.isHeaderPart(part.getPartType()) ? MobileFormSection.Header : MobileFormSection.Footer; } @SuppressWarnings("unchecked") @Override public <T> T getMobileProperty(MobileProperty<T> property) { return (T)part.getBaseComponent(false).getCustomMobileProperty(property.propertyName); } }