diff --git a/efl/utils/erigo.py b/efl/utils/erigo.py index 91d5375..477294d 100644 --- a/efl/utils/erigo.py +++ b/efl/utils/erigo.py @@ -21,9 +21,10 @@ TODO ==== * mainmenu ?? - * implement Resources ... but when? always in the file prop? * test more widget items (only menu tested atm) + * add all the supported widget to KLASSES * documentation for this module + * fix (in erigo) the label with markup * properties that need to be fixed: - visibility @@ -34,6 +35,7 @@ TODO """ +import os import importlib import json @@ -64,10 +66,17 @@ KLASSES = { class ErigoGui(object): """ TODO: Class doc """ - def __init__ (self, json_file=None, json_string=None, verbose=False): + def __init__ (self, json_file=None, json_string=None, resources_path=None, + verbose=False): self._verbose = verbose self._widgets = {} # key: widget_name data: widget_instance self._data = None # parsed json data + if resources_path: + self._res_path = resources_path + elif json_file: + self._res_path = os.path.dirname(json_file) + else: + self._res_path = os.getcwd() # :/ if json_file is not None: self._print('\n### Generating gui from file: %s' % json_file) @@ -86,6 +95,14 @@ class ErigoGui(object): print(msg) +def _resource_find(self, value): + name, group = value + if name in self._data['Resources']['Images']: + fname = os.path.join(self._res_path, + self._data['Resources']['Images'][name]) + return (fname, group) + return value + def _widget_generate(self, name, parent_name=None): self._print('\n### Generating widget: %s' % name) @@ -127,8 +144,9 @@ def _widget_generate(self, name, parent_name=None): else: self._print('property %s => %s' % (p_name, p_vals)) p_vals = _params_list_parse(mod, p_vals) - if p_name == 'file': # ARGHHHHHHHHHHH TODO FIXME - p_vals = (p_vals[0]) + if p_name == 'file': + p_vals = _resource_find(self, p_vals) + p_vals = (p_vals[0]) # ARGHHHHHHHHHHH TODO FIX THE FILE PROP if len(p_vals) == 1: setattr(w, p_name, p_vals[0]) else: @@ -202,6 +220,7 @@ def _item_generate(self, parent_widget, parent_item, item_name, item_data): def _params_list_parse(mod, params): return [ _param_parse(mod, p) for p in params ] + def _param_parse(mod, p_value): if isinstance(p_value, basestring): if p_value.startswith('ELM_'): @@ -210,14 +229,17 @@ def _param_parse(mod, p_value): return enum_val return p_value + def _property_modify_cb(obj, self, widget_name, prop_name, values): w = self._widgets[widget_name] if prop_name == 'visibility': # TODO implement this property in Evas.Object w.show() if values[0] is True else w.hide() else: - if prop_name == 'file': # ARGHHHHHHHHHHH TODO FIXME - values = (values[0]) + if prop_name == 'file': + values = _resource_find(self, values) + values = (values[0]) # ARGHHHHHHHHHHH TODO FIX THE FILE PROP setattr(w, prop_name, values[0] if len(values) == 1 else values) + def _widget_create_cb(obj, self, widget_name, parent_name): _widget_generate(self, widget_name, parent_name) diff --git a/examples/elementary/erigo_prj/images/logo.png b/examples/elementary/erigo_prj/images/logo.png new file mode 100644 index 0000000..5b890e4 Binary files /dev/null and b/examples/elementary/erigo_prj/images/logo.png differ diff --git a/examples/elementary/erigo_prj/images/tux.png b/examples/elementary/erigo_prj/images/tux.png new file mode 100644 index 0000000..3c1958c Binary files /dev/null and b/examples/elementary/erigo_prj/images/tux.png differ diff --git a/examples/elementary/erigo_prj/test_gui.egui b/examples/elementary/erigo_prj/test_gui.egui index a7cf29e..5d8d902 100644 --- a/examples/elementary/erigo_prj/test_gui.egui +++ b/examples/elementary/erigo_prj/test_gui.egui @@ -10,7 +10,8 @@ { "Images": { - "logo":"/home/yakov/egui/examples/logo.png" + "tux":"images/tux.png", + "pyefl_logo":"images/logo.png" }, "Eo_Callbacks": { @@ -164,7 +165,10 @@ "elm_button5":[1, 1, 1, 1], "elm_button6":[0, 2, 1, 1], "elm_button8":[1, 2, 1, 1], - "elm_button9":[0, 3, 2, 1] + "elm_button9":[0, 3, 2, 1], + "elm_image1":[0, 4, 1, 2], + "elm_button10":[1, 4, 1, 1], + "elm_button11":[1, 5, 1, 1] } }, "elm_button2": @@ -454,6 +458,61 @@ "Evas.Object.size":[60, 30], "Elm_Widget.part_text":[null, "I'm a dialog window <br> I should move with my parent"] } + }, + "elm_image1": + { + "Desc": + { + "parent":"elm_table1", + "class":"Elm_Image" + }, + "Properties": + { + "Evas.Object.size_hint_weight":[1, 1], + "Evas.Object.visibility":[true], + "Efl.File.file":["tux", null], + "Evas.Object.size_hint_align":[-1, -1], + "Evas.Object.size":[100, 100], + "Evas.Object.size_hint_min":[100, 100] + } + }, + "elm_button10": + { + "Desc": + { + "parent":"elm_table1", + "class":"Elm_Button" + }, + "Properties": + { + "Evas.Object.size_hint_weight":[1, 1], + "Evas.Object.visibility":[true], + "Evas.Object.size":[73, 30], + "Elm_Widget.part_text":[null, "<- tux"] + }, + "Callbacks": + { + "clicked":["Modify", "elm_image1", "Efl.File.file", ["tux", null]] + } + }, + "elm_button11": + { + "Desc": + { + "parent":"elm_table1", + "class":"Elm_Button" + }, + "Properties": + { + "Evas.Object.size_hint_weight":[1, 1], + "Evas.Object.visibility":[true], + "Evas.Object.size":[73, 30], + "Elm_Widget.part_text":[null, "<- pyefl"] + }, + "Callbacks": + { + "clicked":["Modify", "elm_image1", "Efl.File.file", ["pyefl_logo", null]] + } } } } \ No newline at end of file diff --git a/examples/elementary/test_erigo.py b/examples/elementary/test_erigo.py index 03d1861..2ea2858 100644 --- a/examples/elementary/test_erigo.py +++ b/examples/elementary/test_erigo.py @@ -35,7 +35,7 @@ def erigo_clicked(obj): # Test from json string # json = open(json_file).read() - # egui = MyGui(json_string=json, verbose=True) + # egui = MyGui(json_string=json, resources_path=prj_path, verbose=True) egui.elm_label1.text = 'GUI Generated in %.5f seconds' % \ (time.time() - start_time)