Keep the json data around

Will be needed for the next commit
This commit is contained in:
Davide Andreoli 2015-01-24 13:00:31 +01:00
parent ae2dec22da
commit 8fecc5f55b
1 changed files with 11 additions and 10 deletions

View File

@ -62,29 +62,30 @@ class ErigoGui(object):
def __init__ (self, json_file=None, json_string=None, verbose=False):
self._verbose = verbose
self._widgets = {} # key: widget_name data: widget_instance
self._data = None # parsed json data
if json_file is not None:
self._print('\n### Generating gui from file: %s' % json_file)
data = json.load(open(json_file))
self._data = json.load(open(json_file))
elif json_string is not None:
self._print('\n### Generating gui from string')
data = json.loads(json_string)
self._data = json.loads(json_string)
else:
raise RuntimeError('One of "file" or "json_string" is mandatory')
for w_name in data['Settings']['start_points']:
_widget_generate(self, data, w_name)
for w_name in self._data['Settings']['start_points']:
_widget_generate(self, w_name)
def _print(self, msg):
if self._verbose:
print(msg)
def _widget_generate(self, data, name):
def _widget_generate(self, name):
self._print('\n### Generating widget: %s' % name)
# get the widget class object from the correct module
w_data = data['Widgets'][name]
w_data = self._data['Widgets'][name]
eo_klass_name = w_data['Desc']['class']
module_name, klass_name = KLASSES[eo_klass_name]
mod = importlib.import_module(module_name)
@ -139,17 +140,17 @@ def _widget_generate(self, data, name):
# generate (and pack) children widgets
if eo_klass_name == 'Elm_Win':
for c_name in w_data.get('Contains', []):
child = _widget_generate(self, data, c_name)
child = _widget_generate(self, c_name)
w.resize_object_add(child)
elif eo_klass_name == 'Elm_Box':
for c_name in w_data.get('Contains', []):
child = _widget_generate(self, data, c_name)
child = _widget_generate(self, c_name)
w.pack_end(child)
elif eo_klass_name == 'Elm_Table':
for c_name, (x, y, cspan, rspan) in w_data.get('Contains', {}).items():
child = _widget_generate(self, data, c_name)
child = _widget_generate(self, c_name)
w.pack(child, x, y, rspan, cspan)
@ -167,7 +168,7 @@ def _widget_generate(self, data, name):
elif cb_data[0] == 'Invoke':
cb_alias = cb_data[1]
cb_name = data['Resources']['Eo_Callbacks'][cb_alias]
cb_name = self._data['Resources']['Eo_Callbacks'][cb_alias]
self._print('event %s (Invoke) %s => %s' % \
(event_name, cb_alias, cb_name))
w._callback_add(str(event_name), getattr(self, cb_name))