efl

Форк
0
/
generate_widget_header.py 
97 строк · 2.7 Кб
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)
98

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.