blob: 586f10e43ba1095208b359bb2113eac72a978db1 [file] [log] [blame]
/*
* 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;
}
}
}