/* * Copyright (C) 2012 The Android Open Source Project * * 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 com.motorola.studio.android.emulator.skin.android.parser; import java.util.Collection; import java.util.LinkedHashSet; import org.eclipse.swt.graphics.RGB; /** * DESCRIPTION: * This class represents a layout structure from the layout file * * RESPONSIBILITY: * Represent layout structures * * COLABORATORS: * None. * * USAGE: * This class is intended to be used by the LayoutFileParser and LayoutFileModel classes only */ public class LayoutBean implements ILayoutConstants, ILayoutBean { /** * Default name of a landscape layout (used when creating pseudo-layouts) * Pseudo-layouts are created when the skin has only one part and no layouts */ public static final String DEFAULT_LAYOUT_NAME = "default"; /** * Default name of a portrait layout (used when creating pseudo-layouts) * Pseudo-layouts are created when the skin has only one part and no layouts */ public static final String ROTATED_LAYOUT_NAME = "rotated"; /** * The layout structure name */ private String name; /** * The layout width */ private String width; /** * The layout height */ private String height; /** * Thw layout color */ private RGB color; /** * The event command used to switch to this layout */ private String event; /** * Dpad rotation, steps of 90� */ private int dpadRotation; /** * The collection of parts that integrate this layout */ private Collection<PartRefBean> parts = new LinkedHashSet<PartRefBean>(); /** * Constructor * Builds a new layout structure with the given name * * @param name The layout name */ LayoutBean(String name) { this.name = name; } /** * Creates a new reference to a part, registers it and returns it to the user * * @param refName The name to assign to the part reference * * @return The part reference */ PartRefBean newPartRef(String refName) { PartRefBean bean = new PartRefBean(refName); parts.add(bean); return bean; } /** * Retrieves the layout width * * @return The layout width */ String getWidth() { return width; } /** * Retrieves the layout height * * @return The layout height */ String getHeight() { return height; } /** * Retrieves the layout color * * @return The layout color */ RGB getColor() { return color; } /** * Retrieves the event to switch to this layout * * @param event The event */ String getEvent() { return event; } /** * @return the dpadRotation */ int getDpadRotation() { return dpadRotation; } /** * Retrieves this layout name * * @return This layout name */ String getName() { return name; } /** * Retrieves all references to parts from this layout * * @return A collection containing part references */ Collection<PartRefBean> getPartRefs() { return parts; } /* * (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "Layout: " + name; } /* * (non-Javadoc) * @see com.motorola.studio.android.emulator.skin.android.parser.ILayoutBean#setKeyValue(java.lang.String, java.lang.String) */ public void setKeyValue(String key, String value) { if (ATTR_WIDTH.equals(key)) { width = value; } else if (ATTR_HEIGHT.equals(key)) { height = value; } else if (LAYOUT_COLOR.equals(key)) { Integer colorInt = Integer.decode(value); int blue = colorInt.intValue() & 0xFF; int green = (colorInt.intValue() & 0xFF00) >> 8; int red = (colorInt.intValue() & 0xFF0000) >> 16; RGB rgb = new RGB(red, green, blue); color = rgb; } else if (LAYOUT_EVENT.equals(key)) { event = value; } else if (DPAD_ROTATION.equals(key)) { int intValue; try { intValue = Integer.parseInt(value); } catch (NumberFormatException e) { //Assume there's no rotation intValue = 0; } dpadRotation = intValue; } } }