diff options
Diffstat (limited to 'hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewNode.java')
-rw-r--r-- | hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewNode.java | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewNode.java b/hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewNode.java new file mode 100644 index 000000000..64c070353 --- /dev/null +++ b/hierarchyviewer/src/com/android/hierarchyviewer/scene/ViewNode.java @@ -0,0 +1,203 @@ +/* + * Copyright (C) 2008 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.hierarchyviewer.scene; + +import java.awt.Image; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +public class ViewNode { + public String id; + public String name; + + public List<Property> properties = new ArrayList<Property>(); + public Map<String, Property> namedProperties = new HashMap<String, Property>(); + + public ViewNode parent; + public List<ViewNode> children = new ArrayList<ViewNode>(); + + public Image image; + + public int left; + public int top; + public int width; + public int height; + public int scrollX; + public int scrollY; + public int paddingLeft; + public int paddingRight; + public int paddingTop; + public int paddingBottom; + public int marginLeft; + public int marginRight; + public int marginTop; + public int marginBottom; + public int baseline; + public boolean willNotDraw; + public boolean hasMargins; + + boolean hasFocus; + int index; + + public boolean decoded; + public boolean filtered; + + private String shortName; + private StateListener listener; + + void decode() { + id = namedProperties.get("mID").value; + + left = getInt("mLeft", 0); + top = getInt("mTop", 0); + width = getInt("getWidth()", 0); + height = getInt("getHeight()", 0); + scrollX = getInt("mScrollX", 0); + scrollY = getInt("mScrollY", 0); + paddingLeft = getInt("mPaddingLeft", 0); + paddingRight = getInt("mPaddingRight", 0); + paddingTop = getInt("mPaddingTop", 0); + paddingBottom = getInt("mPaddingBottom", 0); + marginLeft = getInt("layout_leftMargin", Integer.MIN_VALUE); + marginRight = getInt("layout_rightMargin", Integer.MIN_VALUE); + marginTop = getInt("layout_topMargin", Integer.MIN_VALUE); + marginBottom = getInt("layout_bottomMargin", Integer.MIN_VALUE); + baseline = getInt("getBaseline()", 0); + willNotDraw = getBoolean("willNotDraw()", false); + hasFocus = getBoolean("hasFocus()", false); + + hasMargins = marginLeft != Integer.MIN_VALUE && + marginRight != Integer.MIN_VALUE && + marginTop != Integer.MIN_VALUE && + marginBottom != Integer.MIN_VALUE; + + decoded = true; + } + + private boolean getBoolean(String name, boolean defaultValue) { + Property p = namedProperties.get(name); + if (p != null) { + try { + return Boolean.parseBoolean(p.value); + } catch (NumberFormatException e) { + return defaultValue; + } + } + return defaultValue; + } + + private int getInt(String name, int defaultValue) { + Property p = namedProperties.get(name); + if (p != null) { + try { + return Integer.parseInt(p.value); + } catch (NumberFormatException e) { + return defaultValue; + } + } + return defaultValue; + } + + public void filter(Pattern pattern) { + if (pattern == null || pattern.pattern().length() == 0) { + filtered = false; + } else { + filtered = pattern.matcher(shortName).find() || pattern.matcher(id).find(); + } + listener.nodeStateChanged(this); + } + + void computeIndex() { + index = parent == null ? 0 : parent.children.indexOf(this); + listener.nodeIndexChanged(this); + } + + void setShortName(String shortName) { + this.shortName = shortName; + } + + void setStateListener(StateListener listener) { + this.listener = listener; + } + + @SuppressWarnings({"StringEquality"}) + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final ViewNode other = (ViewNode) obj; + return !(this.name != other.name && (this.name == null || !this.name.equals(other.name))); + } + + @Override + public String toString() { + return name; + } + + @Override + public int hashCode() { + int hash = 5; + hash = 67 * hash + (this.name != null ? this.name.hashCode() : 0); + return hash; + } + + public static class Property { + public String name; + public String value; + + @Override + public String toString() { + return name + '=' + value; + } + + @SuppressWarnings({"StringEquality"}) + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Property other = (Property) obj; + if (this.name != other.name && (this.name == null || !this.name.equals(other.name))) { + return false; + } + return !(this.value != other.value && (this.value == null || !this.value.equals(other.value))); + } + + @Override + public int hashCode() { + int hash = 5; + hash = 61 * hash + (this.name != null ? this.name.hashCode() : 0); + hash = 61 * hash + (this.value != null ? this.value.hashCode() : 0); + return hash; + } + } + + interface StateListener { + void nodeStateChanged(ViewNode node); + void nodeIndexChanged(ViewNode node); + } +} |