1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.eclipse.org/org/documents/epl-v10.php
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.ide.eclipse.adt.internal.editors.color;
17 
18 import static com.android.SdkConstants.ANDROID_NS_NAME;
19 import static com.android.SdkConstants.ANDROID_URI;
20 
21 import com.android.ide.common.api.IAttributeInfo.Format;
22 import com.android.ide.common.resources.platform.AttributeInfo;
23 import com.android.ide.common.resources.platform.DeclareStyleableInfo;
24 import com.android.ide.eclipse.adt.internal.editors.animator.AnimatorDescriptors;
25 import com.android.ide.eclipse.adt.internal.editors.descriptors.AttributeDescriptor;
26 import com.android.ide.eclipse.adt.internal.editors.descriptors.ElementDescriptor;
27 import com.android.ide.eclipse.adt.internal.editors.descriptors.IDescriptorProvider;
28 import com.android.ide.eclipse.adt.internal.editors.descriptors.ReferenceAttributeDescriptor;
29 import com.android.ide.eclipse.adt.internal.editors.descriptors.XmlnsAttributeDescriptor;
30 import com.android.resources.ResourceType;
31 
32 import java.util.Map;
33 
34 /** Descriptors for /res/color XML files */
35 public class ColorDescriptors implements IDescriptorProvider {
36     private static final String SDK_URL =
37         "http://d.android.com/guide/topics/resources/color-list-resource.html"; //$NON-NLS-1$
38 
39     public static final String SELECTOR_TAG = "selector";               //$NON-NLS-1$
40     public static final String ATTR_COLOR = "color";                    //$NON-NLS-1$
41 
42     /** The root element descriptor */
43     private ElementDescriptor mDescriptor = new ElementDescriptor(
44             SELECTOR_TAG, "Selector",
45             "Required. This must be the root element. Contains one or more <item> elements.",
46             SDK_URL,
47             new AttributeDescriptor[] {
48                     new XmlnsAttributeDescriptor(ANDROID_NS_NAME, ANDROID_URI) },
49             null /*children: added later*/, true /*mandatory*/);
50 
51     /** @return the root descriptor. */
52     @Override
getDescriptor()53     public ElementDescriptor getDescriptor() {
54         if (mDescriptor == null) {
55             mDescriptor = new ElementDescriptor("", getRootElementDescriptors()); //$NON-NLS-1$
56         }
57 
58         return mDescriptor;
59     }
60 
61     @Override
getRootElementDescriptors()62     public ElementDescriptor[] getRootElementDescriptors() {
63         return new ElementDescriptor[] { mDescriptor };
64     }
65 
updateDescriptors(Map<String, DeclareStyleableInfo> styleMap)66     public synchronized void updateDescriptors(Map<String, DeclareStyleableInfo> styleMap) {
67         if (styleMap == null) {
68             return;
69         }
70 
71         // Selector children
72         ElementDescriptor selectorItem = AnimatorDescriptors.addElement(null, styleMap,
73             "item", "Item", "DrawableStates", null, //$NON-NLS-1$ //$NON-NLS-3$
74             "Defines a drawable to use during certain states, as described by "
75                  + "its attributes. Must be a child of a <selector> element.",
76             SDK_URL,
77             new ReferenceAttributeDescriptor(
78                     ResourceType.COLOR, ATTR_COLOR,
79                     ANDROID_URI,
80                     new AttributeInfo(ATTR_COLOR, Format.COLOR_SET)).setTooltip(
81                 "Hexadeximal color. Required. The color is specified with an RGB value and "
82                     + "optional alpha channel.\n"
83                     + "The value always begins with a pound (#) character and then "
84                     + "followed by the Alpha-Red-Green-Blue information in one of "
85                     + "the following formats:\n"
86                     + "* RGB\n"
87                     + "* ARGB\n"
88                     + "* RRGGBB\n"
89                     + "* AARRGGBB"),
90             null, /* This is wrong -- we can now embed any above drawable
91                         (but without xmlns as extra) */
92             false /*mandatory*/);
93 
94         if (selectorItem != null) {
95             mDescriptor.setChildren(new ElementDescriptor[] { selectorItem });
96         }
97     }
98 }
99