All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.codename1.ui.layouts.mig.CodenameOneMiGComponentWrapper Maven / Gradle / Ivy

There is a newer version: 7.0.164
Show newest version
package com.codename1.ui.layouts.mig;
        
/*
 * License (BSD):
 * ==============
 *
 * Copyright (c) 2004, Mikael Grev, MiG InfoCom AB. (miglayout (at) miginfocom (dot) com)
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 * Redistributions of source code must retain the above copyright notice, this list
 * of conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this
 * list of conditions and the following disclaimer in the documentation and/or other
 * materials provided with the distribution.
 * Neither the name of the MiG InfoCom AB nor the names of its contributors may be
 * used to endorse or promote products derived from this software without specific
 * prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGE.
 *
 * @version 1.0
 * @author Mikael Grev, MiG InfoCom AB
 *         Date: 2006-sep-08
 */

import com.codename1.components.InfiniteProgress;
import com.codename1.ui.Button;
import com.codename1.ui.CheckBox;
import com.codename1.ui.ComboBox;
import com.codename1.ui.Component;
import com.codename1.ui.Container;
import com.codename1.ui.Display;
import com.codename1.ui.Font;
import com.codename1.ui.Label;
import com.codename1.ui.List;
import com.codename1.ui.RadioButton;
import com.codename1.ui.Slider;
import com.codename1.ui.Tabs;
import com.codename1.ui.TextArea;
import com.codename1.ui.TextField;
import com.codename1.ui.geom.Dimension;
import com.codename1.ui.layouts.mig.ComponentWrapper;
import com.codename1.ui.layouts.mig.ContainerWrapper;
import com.codename1.ui.layouts.mig.LayoutUtil;
import com.codename1.ui.layouts.mig.PlatformDefaults;
import com.codename1.ui.spinner.BaseSpinner;
import com.codename1.ui.table.Table;

import java.util.IdentityHashMap;

/**
 */
class CodenameOneMiGComponentWrapper implements ComponentWrapper
{
	private static boolean maxSet = false;

	private static boolean vp = true;

	/** Debug color for component bounds outline.
	 */
	//private static final Color DB_COMP_OUTLINE = new Color(0, 0, 200);

	/** Property to use in LAF settings and as JComponent client property
	 * to specify the visual padding.
	 * 

*/ private static final String VISUAL_PADDING_PROPERTY = com.codename1.ui.layouts.mig.PlatformDefaults.VISUAL_PADDING_PROPERTY; private final Component c; private int compType = TYPE_UNSET; private Boolean bl = null; private boolean prefCalled = false; public CodenameOneMiGComponentWrapper(Component c) { this.c = c; } public final int getBaseline(int width, int height) { int baseLine = c.getBaseline(width < 0 ? c.getWidth() : width, height < 0 ? c.getHeight() : height); if (baseLine != -1) { int[] visPad = getVisualPadding(); if (visPad != null) baseLine += (visPad[2] - visPad[0] + 1) / 2; } return baseLine; } public final Object getComponent() { return c; } /** Cache. */ //private final static IdentityHashMap FM_MAP = new IdentityHashMap(4); private final static Font SUBST_FONT = Font.getDefaultFont(); public final float getPixelUnitFactor(boolean isHor) { switch (PlatformDefaults.getLogicalPixelBase()) { case PlatformDefaults.BASE_FONT_SIZE: /*Font font = c.getFont(); FontMetrics fm = c.getFontMetrics(font != null ? font : SUBST_FONT); Point.Float p = FM_MAP.get(fm); if (p == null) { Rectangle2D r = fm.getStringBounds("X", c.getGraphics()); p = new Point.Float(((float) r.getWidth()) / 6f, ((float) r.getHeight()) / 13.27734375f); FM_MAP.put(fm, p); } return isHor ? p.x : p.y;*/ return isHor ? ((float)SUBST_FONT.charWidth('X')) /6f : ((float)SUBST_FONT.getHeight() / 13.27734375f); case PlatformDefaults.BASE_SCALE_FACTOR: Float s = isHor ? PlatformDefaults.getHorizontalScaleFactor() : PlatformDefaults.getVerticalScaleFactor(); if (s == null) s = new Float(1.0f); return s * (isHor ? getHorizontalScreenDPI() : getVerticalScreenDPI()) / (float) PlatformDefaults.getDefaultDPI(); default: return 1f; } } public final int getX() { return c.getX(); } public final int getY() { return c.getY(); } public final int getHeight() { return c.getHeight(); } public final int getWidth() { return c.getWidth(); } public final int getScreenLocationX() { return 0; } public final int getScreenLocationY() { return 0; } public final int getMinimumHeight(int sz) { return c.getPreferredH(); } public final int getMinimumWidth(int sz) { return c.getPreferredW(); } public final int getPreferredHeight(int sz) { return c.getPreferredH(); } public final int getPreferredWidth(int sz) { return c.getPreferredW(); } public final int getMaximumHeight(int sz) { Container p = c.getParent(); if(p != null) { int w = p.getHeight(); if(w > 10) { return w; } } return Display.getInstance().getDisplayHeight(); } public final int getMaximumWidth(int sz) { Container p = c.getParent(); if(p != null) { int w = p.getWidth(); if(w > 10) { return w; } } return Display.getInstance().getDisplayWidth(); } private boolean isMaxSet(Component c) { return false; } public final ContainerWrapper getParent() { Container p = c.getParent(); return p != null ? new CodenameOneMiGContainerWrapper(p) : null; } public final int getHorizontalScreenDPI() { return PlatformDefaults.getDefaultDPI(); } public final int getVerticalScreenDPI() { return PlatformDefaults.getDefaultDPI(); } public final int getScreenWidth() { return Display.getInstance().getDisplayWidth(); } public final int getScreenHeight() { return Display.getInstance().getDisplayHeight(); } public final boolean hasBaseline() { return true; } public final String getLinkId() { return c.getName(); } public final void setBounds(int x, int y, int width, int height) { c.setX(x); c.setY(y); c.setWidth(width); c.setHeight(height); } public boolean isVisible() { return c.isVisible(); } public final int[] getVisualPadding() { // TOOD, optimize this int[] padding = new int[] {c.getStyle().getMarginTop(), c.getStyle().getMarginLeftNoRTL(), c.getStyle().getMarginBottom(), c.getStyle().getMarginRightNoRTL()}; return padding; } /** * @deprecated Java 1.4 is not supported anymore */ public static boolean isMaxSizeSetOn1_4() { return maxSet; } /** * @deprecated Java 1.4 is not supported anymore */ public static void setMaxSizeSetOn1_4(boolean b) { maxSet = b; } public static boolean isVisualPaddingEnabled() { return vp; } public static void setVisualPaddingEnabled(boolean b) { vp = b; } public final void paintDebugOutline(boolean showVisualPadding) { /*if (c.isShowing() == false) return; Graphics2D g = (Graphics2D) c.getGraphics(); if (g == null) return; g.setPaint(DB_COMP_OUTLINE); g.setStroke(new BasicStroke(1f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, 10f, new float[] {2f, 4f}, 0)); g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); if (showVisualPadding && isVisualPaddingEnabled()) { int[] padding = getVisualPadding(); if (padding != null) { g.setColor(Color.GREEN); g.drawRect(padding[1], padding[0], (getWidth() - 1) - (padding[1] + padding[3]), (getHeight() - 1) - (padding[0] + padding[2])); } }*/ } public int getComponentType(boolean disregardScrollPane) { if (compType == TYPE_UNSET) compType = checkType(disregardScrollPane); return compType; } public int getLayoutHashCode() { Dimension d = c.getPreferredSize(); int hash = (d.getWidth() << 10) + (d.getHeight() << 15); if (c.isVisible()) hash += 1324511; String id = getLinkId(); if (id != null) hash += id.hashCode(); return hash; } private int checkType(boolean disregardScrollPane) { Component c = this.c; if (c instanceof TextField) { return TYPE_TEXT_FIELD; } else if (c instanceof Label) { return TYPE_LABEL; } else if (c instanceof RadioButton || c instanceof CheckBox) { return TYPE_CHECK_BOX; } else if (c instanceof Button) { return TYPE_BUTTON; } else if (c instanceof ComboBox) { return TYPE_COMBO_BOX; } else if (c instanceof TextArea) { return TYPE_TEXT_AREA; } else if (c instanceof Container) { return TYPE_PANEL; } else if (c instanceof List) { return TYPE_LIST; } else if (c instanceof Table) { return TYPE_TABLE; } else if (c instanceof BaseSpinner) { return TYPE_SPINNER; } else if (c instanceof Tabs) { return TYPE_TABBED_PANE; } else if (c instanceof InfiniteProgress) { return TYPE_PROGRESS_BAR; } else if (c instanceof Slider) { return TYPE_SLIDER; } return TYPE_UNKNOWN; } public final int hashCode() { return getComponent().hashCode(); } public final boolean equals(Object o) { if (o instanceof ComponentWrapper == false) return false; return c.equals(((ComponentWrapper) o).getComponent()); } public int getContentBias() { return c instanceof TextArea || (Boolean.TRUE.equals(((Component)c).getClientProperty("migLayout.dynamicAspectRatio"))) ? LayoutUtil.HORIZONTAL : -1; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy