diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLCompositeProperty.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLCompositeProperty.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLCompositeProperty.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLCompositeProperty.java new file mode 100644 index 000000000..ff8b83a86 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLCompositeProperty.java @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 + * + * 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.gltrace.state; + +import java.util.Collection; +import java.util.EnumMap; +import java.util.Map; + +/** + * A composite property is a container for multiple named properties, kind of like a dictionary. + */ +public class GLCompositeProperty implements IGLProperty { + private final GLStateType mType; + private final Map<GLStateType, IGLProperty> mPropertiesMap; + private IGLProperty mParent; + + /** Construct a composite property given a list of {@link IGLProperty} objects. */ + public GLCompositeProperty(GLStateType type, IGLProperty... iglProperties) { + mType = type; + mPropertiesMap = new EnumMap<GLStateType, IGLProperty>(GLStateType.class); + + for (IGLProperty p : iglProperties) { + mPropertiesMap.put(p.getType(), p); + p.setParent(this); + } + } + + public Collection<IGLProperty> getProperties() { + return mPropertiesMap.values(); + } + + public IGLProperty getProperty(GLStateType name) { + return mPropertiesMap.get(name); + } + + @Override + public GLCompositeProperty clone() { + IGLProperty []props = new IGLProperty[mPropertiesMap.size()]; + + int i = 0; + for (IGLProperty p : mPropertiesMap.values()) { + props[i++] = p.clone(); + } + + return new GLCompositeProperty(getType(), props); + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append("GLCompositeProperty {"); //$NON-NLS-1$ + + for (IGLProperty p : mPropertiesMap.values()) { + sb.append(p.toString()); + sb.append(", "); //$NON-NLS-1$ + } + + sb.append("}"); + return sb.toString(); + } + + @Override + public String getStringValue() { + // This method is called for displaying objects in the UI. + // We do not display any values for composites in the UI as they are only intermediate + // nodes in the tree. + return ""; + } + + @Override + public GLStateType getType() { + return mType; + } + + @Override + public boolean isComposite() { + return true; + } + + @Override + public boolean isDefault() { + for (IGLProperty p : mPropertiesMap.values()) { + if (!p.isDefault()) { + return false; + } + } + + return true; + } + + @Override + public IGLProperty getParent() { + return mParent; + } + + @Override + public void setParent(IGLProperty parent) { + mParent = parent; + } + + @Override + public void setValue(Object value) { + throw new UnsupportedOperationException( + "Values cannot be set for composite properties."); //$NON-NLS-1$ + } + + @Override + public Object getValue() { + throw new UnsupportedOperationException( + "Values cannot be obtained for composite properties."); //$NON-NLS-1$ + } + + @Override + public void prettyPrint(StatePrettyPrinter pp) { + pp.prettyPrint(mType, null); + pp.incrementIndentLevel(); + for (IGLProperty p : mPropertiesMap.values()) { + p.prettyPrint(pp); + } + pp.decrementIndentLevel(); + } +} |