OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / sdk / hierarchyviewer / src / com / android / hierarchyviewer / scene / ViewNode.java
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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
17 package com.android.hierarchyviewer.scene;
18
19 import java.awt.Image;
20 import java.util.ArrayList;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.regex.Pattern;
25
26 public class ViewNode {
27     public String id;
28     public String name;
29
30     public List<Property> properties = new ArrayList<Property>();
31     public Map<String, Property> namedProperties = new HashMap<String, Property>();
32
33     public ViewNode parent;
34     public List<ViewNode> children = new ArrayList<ViewNode>();
35
36     public Image image;
37     
38     public int left;
39     public int top;
40     public int width;
41     public int height;
42     public int scrollX;
43     public int scrollY;
44     public int paddingLeft;
45     public int paddingRight;
46     public int paddingTop;
47     public int paddingBottom;
48     public int marginLeft;
49     public int marginRight;
50     public int marginTop;
51     public int marginBottom;
52     public int baseline;
53     public boolean willNotDraw;
54     public boolean hasMargins;
55     
56     boolean hasFocus;
57     int index;
58
59     public boolean decoded;
60     public boolean filtered;
61
62     private String shortName;
63     private StateListener listener;
64
65     void decode() {
66         id = namedProperties.get("mID").value;
67
68         left = getInt("mLeft", 0);
69         top = getInt("mTop", 0);
70         width = getInt("getWidth()", 0);
71         height = getInt("getHeight()", 0);
72         scrollX = getInt("mScrollX", 0);
73         scrollY = getInt("mScrollY", 0);
74         paddingLeft = getInt("mPaddingLeft", 0);
75         paddingRight = getInt("mPaddingRight", 0);
76         paddingTop = getInt("mPaddingTop", 0);
77         paddingBottom = getInt("mPaddingBottom", 0);
78         marginLeft = getInt("layout_leftMargin", Integer.MIN_VALUE);
79         marginRight = getInt("layout_rightMargin", Integer.MIN_VALUE);
80         marginTop = getInt("layout_topMargin", Integer.MIN_VALUE);
81         marginBottom = getInt("layout_bottomMargin", Integer.MIN_VALUE);
82         baseline = getInt("getBaseline()", 0);
83         willNotDraw = getBoolean("willNotDraw()", false);
84         hasFocus = getBoolean("hasFocus()", false);
85
86         hasMargins = marginLeft != Integer.MIN_VALUE &&
87                 marginRight != Integer.MIN_VALUE &&
88                 marginTop != Integer.MIN_VALUE &&
89                 marginBottom != Integer.MIN_VALUE;
90
91         decoded = true;
92     }
93
94     private boolean getBoolean(String name, boolean defaultValue) {
95         Property p = namedProperties.get(name);
96         if (p != null) {
97             try {
98                 return Boolean.parseBoolean(p.value);
99             } catch (NumberFormatException e) {
100                 return defaultValue;
101             }   
102         }
103         return defaultValue;
104     }
105
106     private int getInt(String name, int defaultValue) {
107         Property p = namedProperties.get(name);
108         if (p != null) {
109             try {
110                 return Integer.parseInt(p.value);
111             } catch (NumberFormatException e) {
112                 return defaultValue;
113             }
114         }
115         return defaultValue;
116     }
117
118     public void filter(Pattern pattern) {
119         if (pattern == null || pattern.pattern().length() == 0) {
120             filtered = false;
121         } else {
122             filtered = pattern.matcher(shortName).find() || pattern.matcher(id).find();
123         }
124         listener.nodeStateChanged(this);
125     }
126
127     void computeIndex() {
128         index = parent == null ? 0 : parent.children.indexOf(this);
129         listener.nodeIndexChanged(this);
130     }
131
132     void setShortName(String shortName) {
133         this.shortName = shortName;
134     }
135
136     void setStateListener(StateListener listener) {
137         this.listener = listener;
138     }
139
140     @SuppressWarnings({"StringEquality"})
141     @Override
142     public boolean equals(Object obj) {
143         if (obj == null) {
144             return false;
145         }
146         if (getClass() != obj.getClass()) {
147             return false;
148         }
149         final ViewNode other = (ViewNode) obj;
150         return !(this.name != other.name && (this.name == null || !this.name.equals(other.name)));
151     }
152
153     @Override
154     public String toString() {
155         return name;
156     }
157
158     @Override
159     public int hashCode() {
160         int hash = 5;
161         hash = 67 * hash + (this.name != null ? this.name.hashCode() : 0);
162         return hash;
163     }
164
165     public static class Property {
166         public String name;
167         public String value;
168
169         @Override
170         public String toString() {
171             return name + '=' + value;
172         }
173         
174         @SuppressWarnings({"StringEquality"})
175         @Override
176         public boolean equals(Object obj) {
177             if (obj == null) {
178                 return false;
179             }
180             if (getClass() != obj.getClass()) {
181                 return false;
182             }
183             final Property other = (Property) obj;
184             if (this.name != other.name && (this.name == null || !this.name.equals(other.name))) {
185                 return false;
186             }
187             return !(this.value != other.value && (this.value == null || !this.value.equals(other.value)));
188         }
189
190         @Override
191         public int hashCode() {
192             int hash = 5;
193             hash = 61 * hash + (this.name != null ? this.name.hashCode() : 0);
194             hash = 61 * hash + (this.value != null ? this.value.hashCode() : 0);
195             return hash;
196         }
197     }
198
199     interface StateListener {
200         void nodeStateChanged(ViewNode node);
201         void nodeIndexChanged(ViewNode node);
202     }
203 }