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