/* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores * CA 94065 USA or visit www.oracle.com if you need additional information or * have any questions. */ package com.sun.lwuit.layouts; import com.sun.lwuit.Component; import com.sun.lwuit.Container; import com.sun.lwuit.geom.Dimension; import com.sun.lwuit.plaf.Style; /** * Allows placing components one on top of the other like a stack, this layout * effectively allows us to build a UI of overlapping components. The components * may be containers with their own layout managers to allow elaborate arbitrary * looks. * Since the Z-ordering creates a great deal of complexity and inefficiency it * is recommended that you first try to achieve the desired UI without resorting to * this layout or coordinate layout. * * @author Shai Almog */ public class LayeredLayout extends Layout { /** * @inheritDoc */ public void layoutContainer(Container parent) { int numOfcomponents = parent.getComponentCount(); Style s = parent.getStyle(); int x = s.getPadding(parent.isRTL(), Component.LEFT); int y = s.getPadding(false, Component.TOP); int w = parent.getWidth() - x - s.getPadding(parent.isRTL(), Component.RIGHT); int h = parent.getHeight() - y - s.getPadding(false, Component.BOTTOM); for(int i=0; i< numOfcomponents; i++){ Component cmp = parent.getComponentAt(i); cmp.setX(x); cmp.setY(y); cmp.setWidth(w); cmp.setHeight(h); } } /** * @inheritDoc */ public Dimension getPreferredSize(Container parent) { int maxWidth = 0; int maxHeight = 0; int numOfcomponents = parent.getComponentCount(); for(int i=0; i< numOfcomponents; i++){ Component cmp = parent.getComponentAt(i); maxHeight = Math.max(maxHeight, cmp.getPreferredH()); maxWidth = Math.max(maxWidth, cmp.getPreferredW()); } Style s = parent.getStyle(); Dimension d = new Dimension(maxWidth + s.getPadding(false, Component.LEFT)+ s.getPadding(false, Component.RIGHT), maxHeight + s.getPadding(false, Component.TOP)+ s.getPadding(false, Component.BOTTOM)); return d; } /** * @inheritDoc */ public String toString() { return "LayeredLayout"; } /** * @inheritDoc */ public boolean isOverlapSupported(){ return true; } }