/* * Copyright (C) 2011 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.color; import static com.android.SdkConstants.ANDROID_NS_NAME; import static com.android.SdkConstants.ANDROID_URI; import com.android.ide.common.api.IAttributeInfo.Format; import com.android.ide.common.resources.platform.AttributeInfo; import com.android.ide.common.resources.platform.DeclareStyleableInfo; import com.android.ide.eclipse.adt.internal.editors.animator.AnimatorDescriptors; 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.IDescriptorProvider; import com.android.ide.eclipse.adt.internal.editors.descriptors.ReferenceAttributeDescriptor; import com.android.ide.eclipse.adt.internal.editors.descriptors.XmlnsAttributeDescriptor; import com.android.resources.ResourceType; import java.util.Map; /** Descriptors for /res/color XML files */ public class ColorDescriptors implements IDescriptorProvider { private static final String SDK_URL = "http://d.android.com/guide/topics/resources/color-list-resource.html"; //$NON-NLS-1$ public static final String SELECTOR_TAG = "selector"; //$NON-NLS-1$ public static final String ATTR_COLOR = "color"; //$NON-NLS-1$ /** The root element descriptor */ private ElementDescriptor mDescriptor = new ElementDescriptor( SELECTOR_TAG, "Selector", "Required. This must be the root element. Contains one or more <item> elements.", SDK_URL, new AttributeDescriptor[] { new XmlnsAttributeDescriptor(ANDROID_NS_NAME, ANDROID_URI) }, null /*children: added later*/, true /*mandatory*/); /** @return the root descriptor. */ @Override public ElementDescriptor getDescriptor() { if (mDescriptor == null) { mDescriptor = new ElementDescriptor("", getRootElementDescriptors()); //$NON-NLS-1$ } return mDescriptor; } @Override public ElementDescriptor[] getRootElementDescriptors() { return new ElementDescriptor[] { mDescriptor }; } public synchronized void updateDescriptors(Map<String, DeclareStyleableInfo> styleMap) { if (styleMap == null) { return; } // Selector children ElementDescriptor selectorItem = AnimatorDescriptors.addElement(null, styleMap, "item", "Item", "DrawableStates", null, //$NON-NLS-1$ //$NON-NLS-3$ "Defines a drawable to use during certain states, as described by " + "its attributes. Must be a child of a <selector> element.", SDK_URL, new ReferenceAttributeDescriptor( ResourceType.COLOR, ATTR_COLOR, ANDROID_URI, new AttributeInfo(ATTR_COLOR, Format.COLOR_SET)).setTooltip( "Hexadeximal color. Required. The color is specified with an RGB value and " + "optional alpha channel.\n" + "The value always begins with a pound (#) character and then " + "followed by the Alpha-Red-Green-Blue information in one of " + "the following formats:\n" + "* RGB\n" + "* ARGB\n" + "* RRGGBB\n" + "* AARRGGBB"), null, /* This is wrong -- we can now embed any above drawable (but without xmlns as extra) */ false /*mandatory*/); if (selectorItem != null) { mDescriptor.setChildren(new ElementDescriptor[] { selectorItem }); } } }