eina: Add check for pthread_attr_setaffinity_np
[platform/upstream/efl.git] / generate_widget_header.py
1 #!/usr/bin/env python3
2 import sys
3 import os
4 from ete3 import Tree, TreeStyle, AttrFace, faces, NodeStyle
5 import argparse
6
7 parser = argparse.ArgumentParser(description='Create a image showing all widgets')
8 parser.add_argument('sourcedir', metavar='sourcedir', help='the path where to find efls source')
9
10 G = parser.parse_args()
11 sys.path.insert(0, os.path.join(G.sourcedir, 'src', 'scripts', 'pyolian'))
12
13 import eolian
14
15 SCAN_FOLDER = os.path.join(G.sourcedir, 'src', 'lib')
16
17 eolian_db = eolian.Eolian_State()
18
19 if not eolian_db.directory_add(SCAN_FOLDER):
20   raise(RuntimeError('Eolian, failed to scan source directory'))
21
22 # Parse all known eo files
23 if not eolian_db.all_eot_files_parse():
24   raise(RuntimeError('Eolian, failed to parse all EOT files'))
25
26 if not eolian_db.all_eo_files_parse():
27   raise(RuntimeError('Eolian, failed to parse all EO files'))
28
29 widget = eolian_db.class_by_name_get("Efl.Ui.Widget")
30 assert(widget)
31
32 def is_widget(obj, rd = 0):
33   if obj == widget:
34     return rd
35   elif obj.parent != None:
36     return is_widget(obj.parent, rd + 1)
37   return -1
38
39 list_of_widgets = []
40
41 for kl in eolian_db.classes:
42   widget_depth = is_widget(kl)
43   if widget_depth != -1:
44     insert = {
45       'depth' : widget_depth,
46       'name' : kl.name,
47       'eolian_obj' : kl,
48       'beta' : kl.is_beta,
49     }
50     list_of_widgets.append(insert)
51
52 def layout(node):
53     # Add node name to laef nodes
54     N = AttrFace("name", fsize=9, fgcolor="black")
55     faces.add_face_to_node(N, node, 0)
56
57
58 class Widget_Tree():
59   def __init__(self, name, parent, is_beta):
60     self.name = name
61     self.children = []
62     if parent != None:
63       self.parent = parent
64       parent.children.append(self)
65       self.tree_node = parent.tree_node.add_child(None, self.name, 1)
66     else:
67       self.tree_node = Tree(name = self.name).add_child(None, 'Efl.Ui.Widget', 1)
68     nstyle = NodeStyle()
69     if is_beta:
70       nstyle["fgcolor"] = "red"
71     else:
72       nstyle["fgcolor"] = "blue"
73     self.tree_node.set_style(nstyle)
74
75   def dump(self, prev):
76     print(prev + self.name)
77     self.children.sort(key = lambda x:x.name)
78     for c in self.children:
79       c.dump(prev + " ")
80
81 sorted_widgets = sorted(list_of_widgets, key=lambda x: x['depth'])
82 widget_tree = {}
83
84 for widget in sorted_widgets:
85   if widget['depth'] == 0:
86     widget_tree[widget['name']] = Widget_Tree(widget['name'], None, widget['beta'])
87   else:
88     widget_tree[widget['name']] = Widget_Tree(widget['name'], widget_tree[widget['eolian_obj'].parent.name], widget['beta'])
89
90 ts = TreeStyle()
91 ts.layout_fn = layout
92 ts.show_leaf_name = False
93 ts.show_scale = False
94
95 print("Created widget-overview.svg in $CWD")
96
97 widget_tree['Efl.Ui.Widget'].tree_node.render("widget-overview.svg", units="mm", tree_style=ts)