summaryrefslogtreecommitdiff
path: root/utils/themeeditor/parsetreenode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/themeeditor/parsetreenode.cpp')
-rw-r--r--utils/themeeditor/parsetreenode.cpp71
1 files changed, 70 insertions, 1 deletions
diff --git a/utils/themeeditor/parsetreenode.cpp b/utils/themeeditor/parsetreenode.cpp
index 99fdbd858d..3a20b1e003 100644
--- a/utils/themeeditor/parsetreenode.cpp
+++ b/utils/themeeditor/parsetreenode.cpp
@@ -224,6 +224,75 @@ QString ParseTreeNode::genCode() const
224 return buffer; 224 return buffer;
225} 225}
226 226
227/* A more or less random hashing algorithm */
228int ParseTreeNode::genHash() const
229{
230 int hash = 0;
231
232 if(element)
233 {
234 hash += element->type;
235 switch(element->type)
236 {
237 case VIEWPORT:
238 case LINE:
239 case SUBLINES:
240 case CONDITIONAL:
241 hash += element->children_count;
242 break;
243
244 case TAG:
245 for(unsigned int i = 0; i < strlen(element->tag->name); i++)
246 hash += element->tag->name[i];
247 break;
248
249 case COMMENT:
250 case TEXT:
251 for(unsigned int i = 0; i < strlen(element->text); i++)
252 {
253 if(i % 2)
254 hash += element->text[i] % element->type;
255 else
256 hash += element->text[i] % element->type * 2;
257 }
258 break;
259 }
260
261 }
262
263 if(param)
264 {
265 hash += param->type;
266 switch(param->type)
267 {
268 case skin_tag_parameter::DEFAULT:
269 case skin_tag_parameter::CODE:
270 break;
271
272 case skin_tag_parameter::NUMERIC:
273 hash += param->data.numeric * (param->data.numeric / 4);
274 break;
275
276 case skin_tag_parameter::STRING:
277 for(unsigned int i = 0; i < strlen(param->data.text); i++)
278 {
279 if(i % 2)
280 hash += param->data.text[i] * 2;
281 else
282 hash += param->data.text[i];
283 }
284 break;
285 }
286 }
287
288 for(int i = 0; i < children.count(); i++)
289 {
290 hash += children[i]->genHash();
291 }
292
293 return hash;
294}
295
227ParseTreeNode* ParseTreeNode::child(int row) 296ParseTreeNode* ParseTreeNode::child(int row)
228{ 297{
229 if(row < 0 || row >= children.count()) 298 if(row < 0 || row >= children.count())
@@ -234,7 +303,7 @@ ParseTreeNode* ParseTreeNode::child(int row)
234 303
235int ParseTreeNode::numChildren() const 304int ParseTreeNode::numChildren() const
236{ 305{
237 return children.count(); 306 return children.count();
238} 307}
239 308
240 309