blob: 2489cf57fa54679e4ba01c6bcc5e7a4cc39f9ba0 [file] [log] [blame]
/*
* 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.animator;
import com.android.SdkConstants;
import com.android.ide.common.resources.platform.DeclareStyleableInfo;
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.XmlnsAttributeDescriptor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** Descriptors for the res/anim resources */
public class AnimDescriptors implements IDescriptorProvider {
/** The root element descriptor */
private ElementDescriptor mDescriptor;
/** The root element descriptors */
private ElementDescriptor[] mRootDescriptors;
private Map<String, ElementDescriptor> nameToDescriptor;
/** @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 mRootDescriptors;
}
public ElementDescriptor getElementDescriptor(String mRootTag) {
if (nameToDescriptor == null) {
nameToDescriptor = new HashMap<String, ElementDescriptor>();
for (ElementDescriptor descriptor : getRootElementDescriptors()) {
nameToDescriptor.put(descriptor.getXmlName(), descriptor);
}
}
ElementDescriptor descriptor = nameToDescriptor.get(mRootTag);
if (descriptor == null) {
descriptor = getDescriptor();
}
return descriptor;
}
public synchronized void updateDescriptors(Map<String, DeclareStyleableInfo> styleMap) {
if (styleMap == null) {
return;
}
XmlnsAttributeDescriptor xmlns = new XmlnsAttributeDescriptor(SdkConstants.ANDROID_NS_NAME,
SdkConstants.ANDROID_URI);
List<ElementDescriptor> descriptors = new ArrayList<ElementDescriptor>();
String sdkUrl =
"http://developer.android.com/guide/topics/graphics/view-animation.html"; //$NON-NLS-1$
ElementDescriptor set = AnimatorDescriptors.addElement(descriptors, styleMap,
"set", "Set", "AnimationSet", "Animation", //$NON-NLS-1$ //$NON-NLS-3$ //$NON-NLS-4$
"A container that holds other animation elements (<alpha>, <scale>, "
+ "<translate>, <rotate>) or other <set> elements. ",
sdkUrl,
xmlns, null, true /*mandatory*/);
AnimatorDescriptors.addElement(descriptors, styleMap,
"alpha", "Alpha", "AlphaAnimation", "Animation", //$NON-NLS-1$ //$NON-NLS-3$ //$NON-NLS-4$
"A fade-in or fade-out animation.",
sdkUrl,
xmlns, null, true /*mandatory*/);
AnimatorDescriptors.addElement(descriptors, styleMap,
"scale", "Scale", "ScaleAnimation", "Animation", //$NON-NLS-1$ //$NON-NLS-3$ //$NON-NLS-4$
"A resizing animation. You can specify the center point of the image from "
+ "which it grows outward (or inward) by specifying pivotX and pivotY. "
+ "For example, if these values are 0, 0 (top-left corner), all growth "
+ "will be down and to the right.",
sdkUrl,
xmlns, null, true /*mandatory*/);
AnimatorDescriptors.addElement(descriptors, styleMap,
"rotate", "Rotate", "RotateAnimation", "Animation", //$NON-NLS-1$ //$NON-NLS-3$ //$NON-NLS-4$
"A rotation animation.",
sdkUrl,
xmlns, null, true /*mandatory*/);
AnimatorDescriptors.addElement(descriptors, styleMap,
"translate", "Translate", "TranslateAnimation", "Animation", //$NON-NLS-1$ //$NON-NLS-3$ //$NON-NLS-4$
"A vertical and/or horizontal motion. Supports the following attributes in "
+ "any of the following three formats: values from -100 to 100 ending "
+ "with \"%\", indicating a percentage relative to itself; values from "
+ "-100 to 100 ending in \"%p\", indicating a percentage relative to its "
+ "parent; a float value with no suffix, indicating an absolute value.",
sdkUrl,
xmlns, null, true /*mandatory*/);
mRootDescriptors = descriptors.toArray(new ElementDescriptor[descriptors.size()]);
// Allow <set> to nest the others (and other sets)
if (set != null) {
set.setChildren(mRootDescriptors);
}
}
}