blob: 724e0193268977d8be2e564cc40128b887bfc568 [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
*
* 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.android.ide.eclipse.adt.internal.editors.values.descriptors;
import static com.android.SdkConstants.ATTR_NAME;
import static com.android.SdkConstants.ATTR_TYPE;
import static com.android.SdkConstants.TAG_COLOR;
import static com.android.SdkConstants.TAG_DIMEN;
import static com.android.SdkConstants.TAG_DRAWABLE;
import static com.android.SdkConstants.TAG_INTEGER_ARRAY;
import static com.android.SdkConstants.TAG_ITEM;
import static com.android.SdkConstants.TAG_PLURALS;
import static com.android.SdkConstants.TAG_RESOURCES;
import static com.android.SdkConstants.TAG_STRING;
import static com.android.SdkConstants.TAG_STRING_ARRAY;
import static com.android.SdkConstants.TAG_STYLE;
import com.android.ide.common.api.IAttributeInfo.Format;
import com.android.ide.common.resources.platform.AttributeInfo;
import com.android.ide.eclipse.adt.internal.editors.descriptors.AttributeDescriptor;
import com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor;
import com.android.ide.eclipse.adt.internal.editors.descriptors.EnumAttributeDescriptor;
import com.android.ide.eclipse.adt.internal.editors.descriptors.FlagAttributeDescriptor;
import com.android.ide.eclipse.adt.internal.editors.descriptors.IDescriptorProvider;
import com.android.ide.eclipse.adt.internal.editors.descriptors.ListAttributeDescriptor;
import com.android.ide.eclipse.adt.internal.editors.descriptors.TextAttributeDescriptor;
import com.android.ide.eclipse.adt.internal.editors.descriptors.TextValueDescriptor;
import com.android.resources.ResourceType;
import java.util.EnumSet;
/**
* Complete description of the structure for resources XML files (under res/values/)
*/
public final class ValuesDescriptors implements IDescriptorProvider {
private static final ValuesDescriptors sThis = new ValuesDescriptors();
/** The {@link ElementDescriptor} for the root Resources element. */
public final ElementDescriptor mResourcesElement;
public static ValuesDescriptors getInstance() {
return sThis;
}
/*
* @see com.android.ide.eclipse.editors.descriptors.IDescriptorProvider#getRootElementDescriptors()
*/
@Override
public ElementDescriptor[] getRootElementDescriptors() {
return new ElementDescriptor[] { mResourcesElement };
}
@Override
public ElementDescriptor getDescriptor() {
return mResourcesElement;
}
public ElementDescriptor getElementDescriptor() {
return mResourcesElement;
}
private ValuesDescriptors() {
// Common attributes used in many placed
// Elements
AttributeInfo nameAttrInfo = new AttributeInfo(ATTR_NAME, Format.STRING_SET);
ElementDescriptor color_element = new ElementDescriptor(
TAG_COLOR,
"Color",
"A @color@ value specifies an RGB value with an alpha channel, which can be used in various places such as specifying a solid color for a Drawable or the color to use for text. It always begins with a # character and then is followed by the alpha-red-green-blue information in one of the following formats: #RGB, #ARGB, #RRGGBB or #AARRGGBB.",
"http://code.google.com/android/reference/available-resources.html#colorvals", //$NON-NLS-1$
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo),
new ColorValueDescriptor(
"Value*",
"A mandatory color value.")
.setTooltip("The mandatory name used in referring to this color.")
},
null, // no child nodes
false /* not mandatory */);
ElementDescriptor string_element = new ElementDescriptor(
TAG_STRING,
"String",
"@Strings@, with optional simple formatting, can be stored and retrieved as resources. You can add formatting to your string by using three standard HTML tags: b, i, and u. If you use an apostrophe or a quote in your string, you must either escape it or enclose the whole string in the other kind of enclosing quotes.",
"http://code.google.com/android/reference/available-resources.html#stringresources", //$NON-NLS-1$
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo)
.setTooltip("The mandatory name used in referring to this string."),
new TextValueDescriptor(
"Value*",
"A mandatory string value.")
},
null, // no child nodes
false /* not mandatory */);
ElementDescriptor item_element = new ItemElementDescriptor(
TAG_ITEM,
"Item",
null, // TODO find javadoc
null, // TODO find link to javadoc
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo)
.setTooltip("The mandatory name used in referring to this resource."),
new ListAttributeDescriptor(ATTR_TYPE,
null /* nsUri */,
new AttributeInfo(ATTR_TYPE,
EnumSet.of(Format.STRING, Format.ENUM)
).setEnumValues(ResourceType.getNames())
).setTooltip("The mandatory type of this resource."),
new FlagAttributeDescriptor("format", //$NON-NLS-1$
null /* nsUri */,
new AttributeInfo("format",
EnumSet.of(Format.STRING, Format.FLAG)
).setFlagValues(
new String[] {
"boolean", //$NON-NLS-1$
TAG_COLOR,
"dimension", //$NON-NLS-1$
"float", //$NON-NLS-1$
"fraction", //$NON-NLS-1$
"integer", //$NON-NLS-1$
"reference", //$NON-NLS-1$
"string" //$NON-NLS-1$
} )
).setTooltip("The optional format of this resource."),
new TextValueDescriptor(
"Value",
"A standard string, hex color value, or reference to any other resource type.")
},
null, // no child nodes
false /* not mandatory */);
ElementDescriptor drawable_element = new ElementDescriptor(
TAG_DRAWABLE,
"Drawable",
"A @drawable@ defines a rectangle of color. Android accepts color values written in various web-style formats -- a hexadecimal constant in any of the following forms: #RGB, #ARGB, #RRGGBB, #AARRGGBB. Zero in the alpha channel means transparent. The default value is opaque.",
"http://code.google.com/android/reference/available-resources.html#colordrawableresources", //$NON-NLS-1$
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo)
.setTooltip("The mandatory name used in referring to this drawable."),
new TextValueDescriptor(
"Value*",
"A mandatory color value in the form #RGB, #ARGB, #RRGGBB or #AARRGGBB.")
},
null, // no child nodes
false /* not mandatory */);
ElementDescriptor dimen_element = new ElementDescriptor(
TAG_DIMEN,
"Dimension",
"You can create common dimensions to use for various screen elements by defining @dimension@ values in XML. A dimension resource is a number followed by a unit of measurement. Supported units are px (pixels), in (inches), mm (millimeters), pt (points at 72 DPI), dp (density-independent pixels) and sp (scale-independent pixels)",
"http://code.google.com/android/reference/available-resources.html#dimension", //$NON-NLS-1$
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo)
.setTooltip("The mandatory name used in referring to this dimension."),
new TextValueDescriptor(
"Value*",
"A mandatory dimension value is a number followed by a unit of measurement. For example: 10px, 2in, 5sp.")
},
null, // no child nodes
false /* not mandatory */);
ElementDescriptor style_element = new ElementDescriptor(
TAG_STYLE,
"Style/Theme",
"Both @styles and themes@ are defined in a style block containing one or more string or numerical values (typically color values), or references to other resources (drawables and so on).",
"http://code.google.com/android/reference/available-resources.html#stylesandthemes", //$NON-NLS-1$
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo)
.setTooltip("The mandatory name used in referring to this theme."),
new TextAttributeDescriptor("parent", //$NON-NLS-1$
null /* nsUri */,
new AttributeInfo("parent", //$NON-NLS-1$
Format.STRING_SET))
.setTooltip("An optional parent theme. All values from the specified theme will be inherited into this theme. Any values with identical names that you specify will override inherited values."),
},
new ElementDescriptor[] {
new ElementDescriptor(
TAG_ITEM,
"Item",
"A value to use in this @theme@. It can be a standard string, a hex color value, or a reference to any other resource type.",
"http://code.google.com/android/reference/available-resources.html#stylesandthemes", //$NON-NLS-1$
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo)
.setTooltip("The mandatory name used in referring to this item."),
new TextValueDescriptor(
"Value*",
"A mandatory standard string, hex color value, or reference to any other resource type.")
},
null, // no child nodes
false /* not mandatory */)
},
false /* not mandatory */);
ElementDescriptor string_array_element = new ElementDescriptor(
TAG_STRING_ARRAY,
"String Array",
"An array of strings. Strings are added as underlying item elements to the array.",
null, // tooltips
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo)
.setTooltip("The mandatory name used in referring to this string array."),
},
new ElementDescriptor[] {
new ElementDescriptor(
TAG_ITEM,
"Item",
"A string value to use in this string array.",
null, // tooltip
new AttributeDescriptor[] {
new TextValueDescriptor(
"Value*",
"A mandatory string.")
},
null, // no child nodes
false /* not mandatory */)
},
false /* not mandatory */);
ElementDescriptor plurals_element = new ElementDescriptor(
TAG_PLURALS,
"Quantity Strings (Plurals)",
"A quantity string",
null, // tooltips
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo)
.setTooltip("A name for the pair of strings. This name will be used as the resource ID."),
},
new ElementDescriptor[] {
new ElementDescriptor(
TAG_ITEM,
"Item",
"A plural or singular string",
null, // tooltip
new AttributeDescriptor[] {
new EnumAttributeDescriptor(
"quantity", "Quantity", null,
"A keyword value indicating when this string should be used",
new AttributeInfo("quantity", Format.ENUM_SET)
.setEnumValues(new String[] {
"zero", //$NON-NLS-1$
"one", //$NON-NLS-1$
"two", //$NON-NLS-1$
"few", //$NON-NLS-1$
"many", //$NON-NLS-1$
"other" //$NON-NLS-1$
}))
},
null, // no child nodes
false /* not mandatory */)
},
false /* not mandatory */);
ElementDescriptor integer_array_element = new ElementDescriptor(
TAG_INTEGER_ARRAY,
"Integer Array",
"An array of integers. Integers are added as underlying item elements to the array.",
null, // tooltips
new AttributeDescriptor[] {
new TextAttributeDescriptor(ATTR_NAME,
null /* nsUri */,
nameAttrInfo)
.setTooltip("The mandatory name used in referring to this integer array.")
},
new ElementDescriptor[] {
new ElementDescriptor(
TAG_ITEM,
"Item",
"An integer value to use in this integer array.",
null, // tooltip
new AttributeDescriptor[] {
new TextValueDescriptor(
"Value*",
"A mandatory integer.")
},
null, // no child nodes
false /* not mandatory */)
},
false /* not mandatory */);
mResourcesElement = new ElementDescriptor(
TAG_RESOURCES,
"Resources",
null,
"http://code.google.com/android/reference/available-resources.html", //$NON-NLS-1$
null, // no attributes
new ElementDescriptor[] {
string_element,
color_element,
dimen_element,
drawable_element,
style_element,
item_element,
string_array_element,
integer_array_element,
plurals_element,
},
true /* mandatory */);
}
}