/* * 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 */); } }