From: Enlightenment S. <no-...@en...> - 2010-04-09 21:43:26
|
Log: (Temporary) commit to fix issue of main window losing focus on any elm_widget.focus() call. Author: glima Date: 2010-04-09 14:43:18 -0700 (Fri, 09 Apr 2010) New Revision: 47887 Modified: trunk/editje/editje/editable.py trunk/editje/editje/floater.py trunk/editje/editje/groupselector.py Modified: trunk/editje/editje/editable.py =================================================================== --- trunk/editje/editje/editable.py 2010-04-09 19:38:28 UTC (rev 47886) +++ trunk/editje/editje/editable.py 2010-04-09 21:43:18 UTC (rev 47887) @@ -388,7 +388,7 @@ if self._part_add(name, part_data.type, source): part = self._edje.part_get(name) part_data.apply_to(part) - # FIXME: remove event emitions for others + # FIXME: remove double emissions self.event_emit("part.added", name) def _part_init(self, name): Modified: trunk/editje/editje/floater.py =================================================================== --- trunk/editje/editje/floater.py 2010-04-09 19:38:28 UTC (rev 47886) +++ trunk/editje/editje/floater.py 2010-04-09 21:43:18 UTC (rev 47887) @@ -354,6 +354,7 @@ self.show() def close(self): + self._parent.focus_set(True) self.hide() self.delete() Modified: trunk/editje/editje/groupselector.py =================================================================== --- trunk/editje/editje/groupselector.py 2010-04-09 19:38:28 UTC (rev 47886) +++ trunk/editje/editje/groupselector.py 2010-04-09 21:43:18 UTC (rev 47887) @@ -157,7 +157,6 @@ scroller.content_set(self._name) self._name.show() - #self._name.focus() self.pack_end(self._entry_bx) self.pack_end(self._status_lb) |
From: Enlightenment S. <no-...@en...> - 2010-04-12 21:33:58
|
Log: Dead code removal. Author: glima Date: 2010-04-12 14:33:50 -0700 (Mon, 12 Apr 2010) New Revision: 47975 Modified: trunk/editje/editje/details.py Modified: trunk/editje/editje/details.py =================================================================== --- trunk/editje/editje/details.py 2010-04-12 20:52:23 UTC (rev 47974) +++ trunk/editje/editje/details.py 2010-04-12 21:33:50 UTC (rev 47975) @@ -123,17 +123,6 @@ def prop_value_changed(self, prop, value, group): pass - def _header_toggle_cb(self, obj, emission, source): - if emission == "cl,opened": - self.size_hint_weight_set(1.0, 1.0) - self.size_hint_min_set(*self._min_size) - self._opened = True - elif emission == "cl,closed": - self.size_hint_weight_set(1.0, 0.0) - self.size_hint_min_set(*self._min_size_collapsed) - self._opened = False - self.calc_force() - def __getitem__(self, key): if key == "main": return self._proptable @@ -174,13 +163,13 @@ def _opened_cb(self, obj, emission, source): self._open = True - self.size_hint_weight_set(1.0, 1.0) + self.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND) self.size_hint_min_set(*self._min_size) self.calc_force() def _closed_cb(self, obj, emission, source): self._open = False - self.size_hint_weight_set(1.0, 0.0) + self.size_hint_weight_set(EVAS_HINT_EXPAND, 0.0) self.size_hint_min_set(*self._min_size_collapsed) self.calc_force() |
From: Enlightenment S. <no-...@en...> - 2010-04-12 21:34:46
|
Log: More dead code removal. Author: glima Date: 2010-04-12 14:34:40 -0700 (Mon, 12 Apr 2010) New Revision: 47976 Modified: trunk/editje/editje/parts.py Modified: trunk/editje/editje/parts.py =================================================================== --- trunk/editje/editje/parts.py 2010-04-12 21:33:50 UTC (rev 47975) +++ trunk/editje/editje/parts.py 2010-04-12 21:34:40 UTC (rev 47976) @@ -441,25 +441,22 @@ self._name_changed = False def _add(self): - name = self._part_name_entry.entry - if (self._type == edje.EDJE_PART_TYPE_EXTERNAL): - ext_name = self._ext_list.type - ext_module = self._ext_list.module - else: - ext_name = "" - ext_module = None - - def add_internal(name, edje_type, ext_name="", ext_module=None): + def add_internal(name, edje_type, ext_name=""): if not self._edit_grp.part_add(name, edje_type, ext_name): self.notify("Error adding new part.") return False return True - if add_internal(name, self._type, ext_name, ext_module): + name = self._part_name_entry.entry + if (self._type == edje.EDJE_PART_TYPE_EXTERNAL): + ext_name = self._ext_list.type + else: + ext_name = "" + + if add_internal(name, self._type, ext_name): op = Operation("part addition") - op.redo_callback_add( - add_internal, name, self._type, ext_name, ext_module) + op.redo_callback_add(add_internal, name, self._type, ext_name) op.undo_callback_add(self._edit_grp.part_del, name) self._operation_stack_cb(op) |
From: Enlightenment S. <no-...@en...> - 2010-04-12 21:36:30
|
Log: It would be good to differenciate between parts "real" states and the ones which compose animations. Gotta find a name for the latter, trying "frame" for now. Author: glima Date: 2010-04-12 14:36:24 -0700 (Mon, 12 Apr 2010) New Revision: 47977 Modified: trunk/editje/editje/details_state.py Modified: trunk/editje/editje/details_state.py =================================================================== --- trunk/editje/editje/details_state.py 2010-04-12 21:34:40 UTC (rev 47976) +++ trunk/editje/editje/details_state.py 2010-04-12 21:36:24 UTC (rev 47977) @@ -46,7 +46,7 @@ return list def _floater_title_init(self): - self._floater.title_set("State Selection") + self._floater.title_set("Copy from state") def value_set(self, value): self.e.part.state.copy_from(*value) @@ -787,7 +787,7 @@ workfile_name_get_cb, part_object_get_cb, group) def _header_init(self, parent): - self.title = "part properties" + self.title = "part frame properties" self._header_table = PropertyTable(parent, "part name/type") |
From: Enlightenment S. <no-...@en...> - 2010-04-12 22:44:33
|
Log: Missed that, now going. Author: glima Date: 2010-04-12 15:44:26 -0700 (Mon, 12 Apr 2010) New Revision: 47981 Modified: trunk/editje/editje/details.py trunk/editje/editje/details_part.py trunk/editje/editje/details_state.py Modified: trunk/editje/editje/details.py =================================================================== --- trunk/editje/editje/details.py 2010-04-12 21:51:35 UTC (rev 47980) +++ trunk/editje/editje/details.py 2010-04-12 22:44:26 UTC (rev 47981) @@ -16,6 +16,7 @@ # License along with Editje. If not, see <http://www.gnu.org/licenses/>. import edje +import evas import elementary from prop import PropertyTable @@ -29,7 +30,6 @@ " EditjeDetails objects.") edje.Edje.__init__(self, parent.evas_get()) - self._parent = parent self._operation_stack_cb = operation_stack_cb @@ -40,23 +40,37 @@ self._proptable.show() self.e = parent.e - self._min_size_collapsed = self.size_min_calc() - self._min_size = self._min_size_collapsed + self._min_sizes_init(group) self._box = elementary.Box(parent) self._box.pack_end(self._proptable) - self._box.size_hint_weight_set(1.0, 0.0) - self._box.size_hint_align_set(-1.0, 0.0) + self._box.size_hint_weight_set(evas.EVAS_HINT_EXPAND, 0.0) + self._box.size_hint_align_set(evas.EVAS_HINT_FILL, 0.0) self._box.show() self.content_set("cl.content", self._box) - self.size_hint_weight_set(1.0, 0.0) - self.size_hint_align_set(-1.0, -1.0) + self.size_hint_weight_set(evas.EVAS_HINT_EXPAND, 0.0) + self.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL) self.size_hint_min_set(*self._min_size_collapsed) self._subgroups = dict() self._open_load() + def _min_sizes_init(self, group): + self._m_save = self.size_min_calc() + self._min_size_collapsed = self._m_save + self.edje_get().signal_emit("cl,extra,activate", "") + edje.message_signal_process() + self._m_save_extra = self.size_min_calc() + self.edje_get().signal_emit("cl,extra,deactivate", "") + self._min_size = self._min_size_collapsed + + def min_size_expanded_toggle(self, value): + if value: + self._min_size_collapsed = self._m_save_extra + else: + self._min_size_collapsed = self._m_save + def _size_hint_changed_cb(self, obj): self._min_size = self.size_min_calc() if self._open: @@ -80,8 +94,8 @@ frm.file_set(self._parent.theme, "subgroup") frm.edje_get().part_text_set("title.label", name) - frm.size_hint_weight_set(1.0, 0.0) - frm.size_hint_align_set(-1.0, 0.0) + frm.size_hint_weight_set(evas.EVAS_HINT_EXPAND, 0.0) + frm.size_hint_align_set(evas.EVAS_HINT_FILL, 0.0) frm.content_set("content", tbl) frm.show() self._box.pack_end(frm) @@ -163,13 +177,13 @@ def _opened_cb(self, obj, emission, source): self._open = True - self.size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND) + self.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND) self.size_hint_min_set(*self._min_size) self.calc_force() def _closed_cb(self, obj, emission, source): self._open = False - self.size_hint_weight_set(EVAS_HINT_EXPAND, 0.0) + self.size_hint_weight_set(evas.EVAS_HINT_EXPAND, 0.0) self.size_hint_min_set(*self._min_size_collapsed) self.calc_force() Modified: trunk/editje/editje/details_part.py =================================================================== --- trunk/editje/editje/details_part.py 2010-04-12 21:51:35 UTC (rev 47980) +++ trunk/editje/editje/details_part.py 2010-04-12 22:44:26 UTC (rev 47981) @@ -108,6 +108,14 @@ self.open_disable = False self.open = True + def _closed_cb(self, obj, emission, source): + if not self.e.part.name: + return + + expanded = self.e.part.type == edje.EDJE_PART_TYPE_EXTERNAL + self.min_size_expanded_toggle(expanded) + EditjeDetails._closed_cb(self, obj, emission, source) + def _part_select(self, part_name): if self.e.part.name != part_name: self.e.part.name = part_name Modified: trunk/editje/editje/details_state.py =================================================================== --- trunk/editje/editje/details_state.py 2010-04-12 21:51:35 UTC (rev 47980) +++ trunk/editje/editje/details_state.py 2010-04-12 22:44:26 UTC (rev 47981) @@ -803,6 +803,18 @@ prop.widget_add("t", wid) self._header_table.property_add(prop) + self._source_prop = Property(parent, "source widget") + wid = WidgetEntry(self) + wid.disabled_set(True) + self._source_prop.widget_add("s", wid) + self._source_prop.hide() + + self._module_prop = Property(parent, "module") + wid = WidgetEntry(self) + wid.disabled_set(True) + self._module_prop.widget_add("m", wid) + self._module_prop.hide() + self.content_set("part_name.swallow", self._header_table) self.e.animation.callback_add("animation.changed", self._anim_selected) self.e.animation.callback_add("animation.unselected", @@ -823,16 +835,46 @@ self._header_table["type"].value = \ self._part_type_to_text(self.part_edje.type) self._header_table["type"].show_value() + + if self.e.part.type == edje.EDJE_PART_TYPE_EXTERNAL: + source = self.e.part.source + if source.startswith("elm/"): + source = source[4:] + module = "Elementary" + else: + module = "Emotion" + + self.edje_get().signal_emit("cl,extra,activate", "") + if not self._header_table.has_key("source widget"): + self._header_table.property_add(self._source_prop) + if not self._header_table.has_key("module"): + self._header_table.property_add(self._module_prop) + + self._header_table["source widget"].value = source + self._header_table["source widget"].show_value() + self._header_table["module"].value = module + self._header_table["module"].show_value() + else: + self._header_extra_hide() + self.edje_get().signal_emit("cl,option,enable", "editje") self.state = self.part_edje.state_get(*state) self._update() self.show() + def _header_extra_hide(self): + self.edje_get().signal_emit("cl,extra,deactivate", "") + for p in ["source widget", "module"]: + if self._header_table.has_key(p): + self._header_table.property_del(p) + def _hide(self): self._header_table["name"].value = None self._header_table["name"].hide_value() self._header_table["type"].value = None self._header_table["type"].hide_value() + self._header_extra_hide() + self.edje_get().signal_emit("cl,option,disable", "editje") self._hide_all() self.hide() |
From: Enlightenment S. <no-...@en...> - 2010-04-13 20:26:26
|
Log: Some guessing of rel_to/relative/offset of subject part when setting first rel_to property. Author: glima Date: 2010-04-13 13:26:19 -0700 (Tue, 13 Apr 2010) New Revision: 47989 Modified: trunk/editje/editje/details_state.py Modified: trunk/editje/editje/details_state.py =================================================================== --- trunk/editje/editje/details_state.py 2010-04-13 19:22:03 UTC (rev 47988) +++ trunk/editje/editje/details_state.py 2010-04-13 20:26:19 UTC (rev 47989) @@ -15,6 +15,7 @@ # You should have received a copy of the GNU Lesser General Public # License along with Editje. If not, see <http://www.gnu.org/licenses/>. +from itertools import izip import ecore import edje @@ -623,125 +624,189 @@ if self.e.part.state.name != state_name: self.e.part.state.name = state_name - def _prop_change_do(self, op_name, prop_group, prop_name, prop_value, - prop_attr=None, is_external=False, pval_filter=None): + def _prop_change_do(self, op_name, prop_groups, prop_names, prop_values, + prop_attrs, is_external, filters): - def set_property(part_name, state_name, prop_attr, - prop_name, prop_value, is_external, filter_): - self._part_and_state_select(part_name, state_name) + def set_property(part_name, state_name, prop_attrs, prop_names, + prop_values, is_external, filter_, reverse=False): - if is_external: - self.e.part.state.external_param_set(prop_attr, prop_value) + if reverse: + efunc = lambda l: izip(xrange(len(l) - 1, -1, -1), reversed(l)) else: - setattr(self.e.part.state, prop_attr, prop_value) + efunc = enumerate - if filter_: - label_value = filter_(prop_value) - else: - label_value = prop_value - if self[prop_group][prop_name].value != label_value: - self[prop_group][prop_name].value = label_value + self._part_and_state_select(part_name, state_name) + for i, p in efunc(prop_attrs): + if is_external[i]: + self.e.part.state.external_param_set(prop_attrs[i], + prop_values[i]) + else: + setattr(self.e.part.state, prop_attrs[i], prop_values[i]) + + if filter_[i]: + label_value = filter_[i](prop_values[i]) + else: + label_value = prop_values[i] + if self[prop_groups[i]][prop_names[i]].value != label_value: + self[prop_groups[i]][prop_names[i]].value = label_value + + l = len(prop_groups) + for arg in (prop_names, prop_values, prop_attrs, + is_external, filters): + if len(arg) != l: + raise TypeError("Cardinality of property fields differ.") + part_name = self.e.part.name state_name = self.e.part.state.name state = self.e.part.state - if not prop_attr: - prop_attr = prop_name + old_values = [] + for i, p in enumerate(prop_attrs): + if not p: + prop_attrs[i] = prop_names[i] - if is_external: - type_, old_value = state.external_param_get(prop_attr) - if (type_ == edje.EDJE_EXTERNAL_PARAM_TYPE_STRING or type_ == \ - edje.EDJE_EXTERNAL_PARAM_TYPE_CHOICE) and old_value is \ - None: - old_value = "" - else: - old_value = getattr(state, prop_attr) + if is_external[i]: + type_, old_value = state.external_param_get(prop_attrs[i]) + if (type_ == edje.EDJE_EXTERNAL_PARAM_TYPE_STRING or type_ == \ + edje.EDJE_EXTERNAL_PARAM_TYPE_CHOICE) and \ + old_value is None: + old_values.append("") + else: + old_values.append(getattr(state, prop_attrs[i])) - set_property(part_name, state_name, prop_attr, prop_name, prop_value, - is_external, pval_filter) + set_property(part_name, state_name, prop_attrs, prop_names, + prop_values, is_external, filters) op = Operation(op_name) - op.redo_callback_add(set_property, part_name, state_name, prop_attr, - prop_name, prop_value, is_external, pval_filter) - op.undo_callback_add(set_property, part_name, state_name, prop_attr, - prop_name, old_value, is_external, pval_filter) + op.redo_callback_add( + set_property, part_name, state_name, prop_attrs, + prop_names, prop_values, is_external, filters) + op.undo_callback_add( + set_property, part_name, state_name, prop_attrs, + prop_names, old_values, is_external, filters, True) self._operation_stack_cb(op) def _prop_common_value_changed(self, prop, value): + args = [["main"], [prop], [value], [None], [False], [None]] if prop == "min": self._prop_change_do( - "part state mininum size setting", "main", prop, value) + "part state mininum size setting", *args) elif prop == "max": self._prop_change_do( - "part state maximum size setting", "main", prop, value) + "part state maximum size setting", *args) elif prop == "color": self._prop_change_do( - "part state color setting", "main", prop, value) + "part state color setting", *args) elif prop == "visible": self._prop_change_do( - "part state visibility setting", "main", prop, value) + "part state visibility setting", *args) elif prop == "align": self._prop_change_do( - "part state alignment setting", "main", prop, value) + "part state alignment setting", *args) + def _check_state_relto_void(self): + state = self.e.part.state + rel1_to, rel2_to = state.rel1_to, state.rel2_to + if (rel1_to == (None, None) and rel2_to == (None, None)): + return True + return False + + def _relto_fill_args(self, relto): + return [["rel1", "rel2", "rel1", "rel2", "rel1", "rel2"], + ["to", "to", "relative", "relative", "offset", "offset"], + [relto, relto, [0.0, 0.0], [1.0, 1.0], [0, 0], [-1, -1]], + ["rel1_to", "rel2_to", "rel1_relative", "rel2_relative", + "rel1_offset", "rel2_offset"], + [False, False, False, False, False, False], + [None, None, None, None, None, None]] + def _prop_rel1_value_changed(self, prop, value): if prop == "to": + if self._check_state_relto_void(): + if value[0]: + value = [value[0], value[0]] + else: + value = [value[1], value[1]] + args = self._relto_fill_args(value) + else: + args = [["rel1"], [prop], [value], ["rel1_to"], [False], + [None]] self._prop_change_do( "part state relative positioning setting (top-left corner's" - " origin part)", "rel1", prop, value, "rel1_to") + " origin part)", *args) elif prop == "relative": + args = [["rel1"], [prop], [value], ["rel1_relative"], [False], + [None]] self._prop_change_do( "part state relative positioning setting (top-left corner's" - " relative position WRT origin's dimensions)", - "rel1", prop, value, "rel1_relative") + " relative position WRT origin's dimensions)", *args) elif prop == "offset": + args = [["rel1"], [prop], [value], ["rel1_offset"], [False], + [None]] self._prop_change_do( "part state relative positioning setting (top-left corner's" - " additional offset)", "rel1", prop, value, "rel1_offset") + " additional offset)", *args) def _prop_rel2_value_changed(self, prop, value): if prop == "to": + if self._check_state_relto_void(): + if value[0]: + value = [value[0], value[0]] + else: + value = [value[1], value[1]] + args = self._relto_fill_args(value) + else: + args = [["rel2"], [prop], [value], ["rel2_to"], [False], + [None]] self._prop_change_do( "part state relative positioning setting (bottom-right" - " corner's origin part)", "rel2", prop, value, "rel2_to") + " corner's origin part)", *args) elif prop == "relative": + args = [["rel2"], [prop], [value], ["rel2_relative"], [False], + [None]] self._prop_change_do( "part state relative positioning setting (bottom-right" - " corner's relative position WRT origin's dimensions)", - "rel2", prop, value, "rel2_relative") + " corner's relative position WRT origin's dimensions)", *args) elif prop == "offset": + args = [["rel2"], [prop], [value], ["rel2_offset"], [False], + [None]] self._prop_change_do( "part state relative positioning setting (bottom-right" - " corner's additional offset)", "rel2", prop, value, - "rel2_offset") + " corner's additional offset)", *args) def _prop_text_value_changed(self, prop, value): if prop == "text": + args = [["text"], [prop], [value], [None], [False], [None]] self._prop_change_do( - "part state text string setting", "text", prop, value) + "part state text string setting", *args) elif prop == "font": + args = [["text"], [prop], [value], [None], [False], [None]] self._prop_change_do( - "part state text font setting", "text", prop, value) + "part state text font setting", *args) elif prop == "size": - self._prop_change_do("part state text size setting", "text", prop, - value, "text_size") + args = [["text"], [prop], [value], ["text_size"], [False], [None]] + self._prop_change_do("part state text size setting", *args) elif prop == "fit": + args = [["text"], [prop], [value], ["text_fit"], [False], [None]] self._prop_change_do("part state text fit to given axis setting", - "text", prop, value, "text_fit") + *args) elif prop == "align": - self._prop_change_do("part state text alignment setting", "text", - prop, value, "text_align") + args = [["text"], [prop], [value], ["text_align"], [False], [None]] + self._prop_change_do("part state text alignment setting", *args) elif prop == "color2": - self._prop_change_do("part state text shadow color setting", - "text", prop, value) + args = [["text"], [prop], [value], [None], [False], [None]] + self._prop_change_do("part state text shadow color setting", *args) elif prop == "color3": + args = [["text"], [prop], [value], [None], [False], [None]] self._prop_change_do("part state text outline color setting", - "text", prop, value) + *args) elif prop == "elipsis": + args = [["text"], [prop], [value], ["text_elipsis"], [False], + [None]] self._prop_change_do("part state text elipsis (balancing) setting", - "text", prop, value, "text_elipsis") + *args) def _prop_image_value_changed(self, prop, value): if prop == "normal": @@ -749,14 +814,17 @@ # won't reset the img part at all: edje was not really meant to # have "void" img parts. img part addition should raise the img # wizard dialog to choose an initial img from. - self._prop_change_do("part state image setting", - "image", prop, value, "image") + args = [["image"], [prop], [value], ["image"], [False], + [None]] + self._prop_change_do("part state image setting", *args) elif prop == "border": - self._prop_change_do("part state image border setting", - "image", prop, value, "image_border") + args = [["image"], [prop], [value], ["image_border"], [False], + [None]] + self._prop_change_do("part state image border setting", *args) elif prop == "middle": - self._prop_change_do("part state \"middle\" setting", - "image", prop, value, "image_border_fill") + args = [["image"], [prop], [value], ["image_border_fill"], [False], + [None]] + self._prop_change_do("part state \"middle\" setting", *args) def _prop_external_value_changed(self, prop, value): for p in self._params_info: @@ -765,9 +833,9 @@ nil, value = self.state.external_param_get(prop) self["external"][prop].value = value return - + args = [["external"], [prop], [value], [None], [True], [None]] self._prop_change_do("(external) part state \"%s\" setting" % prop, - "external", prop, value, None, True) + "external", *args) def _size_changed(self, obj): self["main"]["current"].value = obj.size |
From: Enlightenment S. <no-...@en...> - 2010-04-13 20:44:18
|
Log: Bug--. Author: glima Date: 2010-04-13 13:44:11 -0700 (Tue, 13 Apr 2010) New Revision: 47990 Modified: trunk/editje/editje/details_state.py Modified: trunk/editje/editje/details_state.py =================================================================== --- trunk/editje/editje/details_state.py 2010-04-13 20:26:19 UTC (rev 47989) +++ trunk/editje/editje/details_state.py 2010-04-13 20:44:11 UTC (rev 47990) @@ -834,9 +834,10 @@ self["external"][prop].value = value return args = [["external"], [prop], [value], [None], [True], [None]] - self._prop_change_do("(external) part state \"%s\" setting" % prop, - "external", *args) + self._prop_change_do( + "(external) part state \"%s\" setting" % prop, *args) + def _size_changed(self, obj): self["main"]["current"].value = obj.size if self.part_edje.type == edje.EDJE_PART_TYPE_IMAGE: |
From: Enlightenment S. <no-...@en...> - 2010-04-14 18:58:02
|
Log: First set of changes in way of correcting part/state selection issues on undo/redo. Author: glima Date: 2010-04-14 11:50:35 -0700 (Wed, 14 Apr 2010) New Revision: 48002 Modified: trunk/editje/editje/details.py trunk/editje/editje/details_part.py trunk/editje/editje/details_state.py Modified: trunk/editje/editje/details.py =================================================================== --- trunk/editje/editje/details.py 2010-04-14 17:47:40 UTC (rev 48001) +++ trunk/editje/editje/details.py 2010-04-14 18:50:35 UTC (rev 48002) @@ -18,8 +18,10 @@ import edje import evas import elementary +from itertools import izip from prop import PropertyTable +from operation import Operation class EditjeDetails(edje.Edje): @@ -203,3 +205,75 @@ return self._open_disable open_disable = property(_open_disable_get, _open_disable_set) + + def _part_and_state_select(self, part_name, state_name): + self.e.part.name = part_name + self.e.part.state.name = state_name + + def _prop_change_do(self, op_name, prop_groups, prop_names, prop_values, + prop_attrs, is_external, filters): + + def set_property(part_name, state_name, prop_attrs, prop_names, + prop_values, is_external, filter_, reverse=False): + + if reverse: + efunc = lambda l: izip(xrange(len(l) - 1, -1, -1), reversed(l)) + else: + efunc = enumerate + + self._part_and_state_select(part_name, state_name) + + for i, p in efunc(prop_attrs): + if is_external[i]: + self.e.part.state.external_param_set(prop_attrs[i], + prop_values[i]) + else: + obj = self._prop_object_get() + setattr(obj, prop_attrs[i], prop_values[i]) + + if filter_[i]: + label_value = filter_[i](prop_values[i]) + else: + label_value = prop_values[i] + if self[prop_groups[i]][prop_names[i]].value != label_value: + self[prop_groups[i]][prop_names[i]].value = label_value + + if not self._prop_object_get: + raise NotImplementedError( + "One must implement self._prop_object_get for" + " EditjeDetails children classes.") + + if not self._prop_old_values_get: + raise NotImplementedError( + "One must implement self._prop_old_values_get() for" + " EditjeDetails children classes.") + + l = len(prop_groups) + for arg in (prop_names, prop_values, prop_attrs, + is_external, filters): + if len(arg) != l: + raise TypeError("Cardinality of property fields differ.") + + part_name = self.e.part.name + state_name = self.e.part.state.name + state = self.e.part.state + + old_values = [] + for i, p in enumerate(prop_attrs): + if not p: + prop_attrs[i] = prop_names[i] + + old_values = self._prop_old_values_get(prop_attrs, is_external) + + set_property(part_name, state_name, prop_attrs, prop_names, + prop_values, is_external, filters) + + op = Operation(op_name) + op.redo_callback_add( + set_property, part_name, state_name, prop_attrs, + prop_names, prop_values, is_external, filters) + op.undo_callback_add( + set_property, part_name, state_name, prop_attrs, + prop_names, old_values, is_external, filters, True) + + self._operation_stack_cb(op) Modified: trunk/editje/editje/details_part.py =================================================================== --- trunk/editje/editje/details_part.py 2010-04-14 17:47:40 UTC (rev 48001) +++ trunk/editje/editje/details_part.py 2010-04-14 18:50:35 UTC (rev 48002) @@ -108,6 +108,22 @@ self.open_disable = False self.open = True + # no sense in switching states to part properties + def _part_and_state_select(self, part_name, state_name=None): + self.e.part.name = part_name + + def _prop_object_get(self): + return self.e.part_get(self.e.part.name) + + def _prop_old_values_get(self, prop_attrs, is_external): + old_values = [] + part = self._prop_object_get() + + for i, p in enumerate(prop_attrs): + old_values.append(getattr(part, p)) + + return old_values + def _closed_cb(self, obj, emission, source): if not self.e.part.name: return @@ -116,15 +132,11 @@ self.min_size_expanded_toggle(expanded) EditjeDetails._closed_cb(self, obj, emission, source) - def _part_select(self, part_name): - if self.e.part.name != part_name: - self.e.part.name = part_name - def header_prop_value_changed(self, prop_name, prop_value, group_name): def part_rename(old_name, new_name): # select 1st - self._part_select(old_name) + self._part_and_state_select(old_name) # rename later return self.e.part.rename(new_name) @@ -133,7 +145,7 @@ return old_name = self.e.part.name - if part_rename(old_name, prop_value): + if part_rename(old_name, None, prop_value): op = Operation("part renaming") op.redo_callback_add(part_rename, old_name, prop_value) @@ -149,53 +161,24 @@ elif group_name == "textblock": self._prop_value_text_changed(prop_name, prop_value) - def _prop_change_do(self, op_name, prop_group, prop_name, prop_value, - pval_filter=None): - - def set_property(part_name, prop_name, prop_value, filter_): - self._part_select(part_name) - part = self.e.part_get(part_name) - setattr(part, prop_name, prop_value) - - if filter_: - label_value = filter_(prop_value) - else: - label_value = prop_value - if self[prop_group][prop_name].value != label_value: - self[prop_group][prop_name].value = label_value - - part_name = self.e.part.name - part = self.e.part_get(part_name) - old_value = getattr(part, prop_name) - - set_property(part_name, prop_name, prop_value, pval_filter) - - op = Operation(op_name) - op.redo_callback_add( - set_property, part_name, prop_name, prop_value, pval_filter) - op.undo_callback_add( - set_property, part_name, prop_name, old_value, pval_filter) - - self._operation_stack_cb(op) - def _prop_value_common_changed(self, prop, value): + args = [["main"], [prop], [value], [None], [False], [None]] if prop == "mouse_events": self._prop_change_do( - "part reaction to mouse events setting", "main", prop, value) + "part reaction to mouse events setting", *args) elif prop == "repeat_events": self._prop_change_do( - "part events repeating property setting", "main", prop, value) + "part events repeating property setting", *args) elif prop == "clip_to": - self._prop_change_do( - "part clipper setting", "main", prop, value) + self._prop_change_do("part clipper setting", *args) def _prop_value_text_changed(self, prop, value): if prop != "effect": return - self._prop_change_do( - "text part effects setting", "textblock", prop, - self._effects.index(value), lambda x: self._effects[x]) + args = [["textblock"], [prop], [self._effects.index(value)], + [None], [False], [lambda x: self._effects[x]]] + self._prop_change_do("text part effects setting", *args) def _part_update(self, emissor, data): if not self.e.part.name: Modified: trunk/editje/editje/details_state.py =================================================================== --- trunk/editje/editje/details_state.py 2010-04-14 17:47:40 UTC (rev 48001) +++ trunk/editje/editje/details_state.py 2010-04-14 18:50:35 UTC (rev 48002) @@ -112,6 +112,25 @@ self.part_edje = None self.part_evas = None + def _prop_object_get(self): + return self.e.part.state + + def _prop_old_values_get(self, prop_attrs, is_external): + old_values = [] + state = self._prop_object_get() + + for i, p in enumerate(prop_attrs): + if is_external[i]: + type_, old_value = state.external_param_get(p) + if (type_ == edje.EDJE_EXTERNAL_PARAM_TYPE_STRING or type_ == \ + edje.EDJE_EXTERNAL_PARAM_TYPE_CHOICE) and \ + old_value is None: + old_values.append("") + else: + old_values.append(getattr(state, p)) + + return old_values + def _header_init(self, parent): self.title = "part state" @@ -618,76 +637,6 @@ self.editable.calc_force() - def _part_and_state_select(self, part_name, state_name): - if self.e.part.name != part_name: - self.e.part.name = part_name - if self.e.part.state.name != state_name: - self.e.part.state.name = state_name - - def _prop_change_do(self, op_name, prop_groups, prop_names, prop_values, - prop_attrs, is_external, filters): - - def set_property(part_name, state_name, prop_attrs, prop_names, - prop_values, is_external, filter_, reverse=False): - - if reverse: - efunc = lambda l: izip(xrange(len(l) - 1, -1, -1), reversed(l)) - else: - efunc = enumerate - - self._part_and_state_select(part_name, state_name) - - for i, p in efunc(prop_attrs): - if is_external[i]: - self.e.part.state.external_param_set(prop_attrs[i], - prop_values[i]) - else: - setattr(self.e.part.state, prop_attrs[i], prop_values[i]) - - if filter_[i]: - label_value = filter_[i](prop_values[i]) - else: - label_value = prop_values[i] - if self[prop_groups[i]][prop_names[i]].value != label_value: - self[prop_groups[i]][prop_names[i]].value = label_value - - l = len(prop_groups) - for arg in (prop_names, prop_values, prop_attrs, - is_external, filters): - if len(arg) != l: - raise TypeError("Cardinality of property fields differ.") - - part_name = self.e.part.name - state_name = self.e.part.state.name - state = self.e.part.state - - old_values = [] - for i, p in enumerate(prop_attrs): - if not p: - prop_attrs[i] = prop_names[i] - - if is_external[i]: - type_, old_value = state.external_param_get(prop_attrs[i]) - if (type_ == edje.EDJE_EXTERNAL_PARAM_TYPE_STRING or type_ == \ - edje.EDJE_EXTERNAL_PARAM_TYPE_CHOICE) and \ - old_value is None: - old_values.append("") - else: - old_values.append(getattr(state, prop_attrs[i])) - - set_property(part_name, state_name, prop_attrs, prop_names, - prop_values, is_external, filters) - - op = Operation(op_name) - op.redo_callback_add( - set_property, part_name, state_name, prop_attrs, - prop_names, prop_values, is_external, filters) - op.undo_callback_add( - set_property, part_name, state_name, prop_attrs, - prop_names, old_values, is_external, filters, True) - - self._operation_stack_cb(op) - def _prop_common_value_changed(self, prop, value): args = [["main"], [prop], [value], [None], [False], [None]] if prop == "min": |
From: Enlightenment S. <no-...@en...> - 2010-04-14 22:35:41
|
Log: Better undo-logic handling of different state selections in workflow. Author: glima Date: 2010-04-14 15:35:33 -0700 (Wed, 14 Apr 2010) New Revision: 48010 Modified: trunk/editje/editje/desktop_part_handlers.py Modified: trunk/editje/editje/desktop_part_handlers.py =================================================================== --- trunk/editje/editje/desktop_part_handlers.py 2010-04-14 21:02:56 UTC (rev 48009) +++ trunk/editje/editje/desktop_part_handlers.py 2010-04-14 22:35:33 UTC (rev 48010) @@ -37,9 +37,9 @@ self._geometry = self._part.geometry # one time only calls to move() (undo/redo) will call this - def _part_select(self, name): - if self._edit_grp.part.name != name: - self._edit_grp.part.name = name + def _part_and_state_select(self, part, state): + self._edit_grp.part.name = part + self._edit_grp.part.state.name = state class PartHandler_Move(PartHandler): @@ -57,9 +57,9 @@ self.center = obj.center self.show() - def move(self, dw, dh, part_name=None): - if part_name: - self._part_select(part_name) + def move(self, dw, dh, part_name=None, state_name=None): + if part_name and state_name: + self._part_and_state_select(part_name, state_name) if self._part: x, y, w, h = self._geometry @@ -72,12 +72,14 @@ if (dw, dh) != (0, 0): op = Operation("part moving") - op.redo_callback_add(self.move, dw, dh, self._edit_grp.part.name) + args = self._edit_grp.part.name, self._edit_grp.part.state.name + + op.redo_callback_add(self.move, dw, dh, *args) op.redo_callback_add(self.part_move, self._part) op.redo_callback_add(self._rel1_move_offset_inform_cb, dw, dh) op.redo_callback_add(self._rel2_move_offset_inform_cb, dw, dh) - op.undo_callback_add(self.move, -dw, -dh, self._edit_grp.part.name) + op.undo_callback_add(self.move, -dw, -dh, *args) op.undo_callback_add(self.part_move, self._part) op.undo_callback_add(self._rel1_move_offset_inform_cb, -dw, -dh) op.undo_callback_add(self._rel2_move_offset_inform_cb, -dw, -dh) @@ -95,9 +97,9 @@ else: self.show() - def move(self, dw, dh, part_name=None): + def move(self, dw, dh, part_name=None, state_name=None): if part_name: - self._part_select(part_name) + self._part_and_state_select(part_name, state_name) if self._part: x, y, w, h = self._geometry @@ -110,11 +112,13 @@ if dh != 0: op = Operation("part resing (from top)") - op.redo_callback_add(self.move, 0, dh, self._edit_grp.part.name) + args = self._edit_grp.part.name, self._edit_grp.part.state.name + + op.redo_callback_add(self.move, 0, dh, *args) op.redo_callback_add(self.part_move, self._part) op.redo_callback_add(self._rel1_move_offset_inform_cb, 0, dh) - op.undo_callback_add(self.move, 0, -dh, self._edit_grp.part.name) + op.undo_callback_add(self.move, 0, -dh, *args) op.undo_callback_add(self.part_move, self._part) op.undo_callback_add(self._rel1_move_offset_inform_cb, 0, -dh) self._operation_stack_cb(op) @@ -127,9 +131,9 @@ self.show() self.bottom_right = obj.top_left - def move(self, dw, dh, part_name=None): + def move(self, dw, dh, part_name=None, state_name=None): if part_name: - self._part_select(part_name) + self._part_and_state_select(part_name, state_name) if self._part: x, y, w, h = self._geometry @@ -142,11 +146,13 @@ if (dw, dh) != (0, 0): op = Operation("part resing (from top-left)") - op.redo_callback_add(self.move, dw, dh, self._edit_grp.part.name) + args = self._edit_grp.part.name, self._edit_grp.part.state.name + + op.redo_callback_add(self.move, dw, dh, *args) op.redo_callback_add(self.part_move, self._part) op.redo_callback_add(self._rel1_move_offset_inform_cb, dw, dh) - op.undo_callback_add(self.move, -dw, -dh, self._edit_grp.part.name) + op.undo_callback_add(self.move, -dw, -dh, *args) op.undo_callback_add(self.part_move, self._part) op.undo_callback_add(self._rel1_move_offset_inform_cb, -dw, -dh) self._operation_stack_cb(op) @@ -159,9 +165,9 @@ self.show() self.bottom_left = obj.top_right - def move(self, dw, dh, part_name=None): + def move(self, dw, dh, part_name=None, state_name=None): if part_name: - self._part_select(part_name) + self._part_and_state_select(part_name, state_name) if self._part: x, y, w, h = self._geometry @@ -174,12 +180,14 @@ if (dw, dh) != (0, 0): op = Operation("part resing (from top-left)") - op.redo_callback_add(self.move, dw, dh, self._edit_grp.part.name) + args = self._edit_grp.part.name, self._edit_grp.part.state.name + + op.redo_callback_add(self.move, dw, dh, *args) op.redo_callback_add(self.part_move, self._part) op.redo_callback_add(self._rel1_move_offset_inform_cb, 0, dh) op.redo_callback_add(self._rel2_move_offset_inform_cb, dw, 0) - op.undo_callback_add(self.move, -dw, -dh, self._edit_grp.part.name) + op.undo_callback_add(self.move, -dw, -dh, *args) op.undo_callback_add(self.part_move, self._part) op.undo_callback_add(self._rel1_move_offset_inform_cb, 0, -dh) op.undo_callback_add(self._rel2_move_offset_inform_cb, -dw, 0) @@ -197,9 +205,9 @@ else: self.show() - def move(self, dw, dh, part_name=None): + def move(self, dw, dh, part_name=None, state_name=None): if part_name: - self._part_select(part_name) + self._part_and_state_select(part_name, state_name) if self._part: x, y, w, h = self._geometry @@ -212,11 +220,13 @@ if dh != 0: op = Operation("part resing (from bottom)") - op.redo_callback_add(self.move, 0, dh, self._edit_grp.part.name) + args = self._edit_grp.part.name, self._edit_grp.part.state.name + + op.redo_callback_add(self.move, 0, dh, *args) op.redo_callback_add(self.part_move, self._part) op.redo_callback_add(self._rel2_move_offset_inform_cb, 0, dh) - op.undo_callback_add(self.move, 0, -dh, self._edit_grp.part.name) + op.undo_callback_add(self.move, 0, -dh, *args) op.undo_callback_add(self.part_move, self._part) op.undo_callback_add(self._rel2_move_offset_inform_cb, 0, -dh) self._operation_stack_cb(op) @@ -229,9 +239,9 @@ self.show() self.top_left = obj.bottom_right - def move(self, dw, dh, part_name=None): + def move(self, dw, dh, part_name=None, state_name=None): if part_name: - self._part_select(part_name) + self._part_and_state_select(part_name, state_name) if self._part: x, y, w, h = self._geometry @@ -244,11 +254,13 @@ if (dw, dh) != (0, 0): op = Operation("part resing (from bottom-right)") - op.redo_callback_add(self.move, dw, dh, self._edit_grp.part.name) + args = self._edit_grp.part.name, self._edit_grp.part.state.name + + op.redo_callback_add(self.move, dw, dh, *args) op.redo_callback_add(self.part_move, self._part) op.redo_callback_add(self._rel2_move_offset_inform_cb, dw, dh) - op.undo_callback_add(self.move, -dw, -dh, self._edit_grp.part.name) + op.undo_callback_add(self.move, -dw, -dh, *args) op.undo_callback_add(self.part_move, self._part) op.undo_callback_add(self._rel2_move_offset_inform_cb, -dw, -dh) self._operation_stack_cb(op) @@ -261,9 +273,9 @@ self.show() self.top_right = obj.bottom_left - def move(self, dw, dh, part_name=None): + def move(self, dw, dh, part_name=None, state_name=None): if part_name: - self._part_select(part_name) + self._part_and_state_select(part_name, state_name) if self._part: x, y, w, h = self._geometry @@ -276,12 +288,14 @@ if (dw, dh) != (0, 0): op = Operation("part resing (from bottom-left)") - op.redo_callback_add(self.move, dw, dh, self._edit_grp.part.name) + args = self._edit_grp.part.name, self._edit_grp.part.state.name + + op.redo_callback_add(self.move, dw, dh, *args) op.redo_callback_add(self.part_move, self._part) op.redo_callback_add(self._rel1_move_offset_inform_cb, dw, 0) op.redo_callback_add(self._rel2_move_offset_inform_cb, 0, dh) - op.undo_callback_add(self.move, -dw, -dh, self._edit_grp.part.name) + op.undo_callback_add(self.move, -dw, -dh, *args) op.undo_callback_add(self.part_move, self._part) op.undo_callback_add(self._rel1_move_offset_inform_cb, -dw, 0) op.undo_callback_add(self._rel2_move_offset_inform_cb, 0, -dh) @@ -299,9 +313,9 @@ else: self.show() - def move(self, dw, dh, part_name=None): + def move(self, dw, dh, part_name=None, state_name=None): if part_name: - self._part_select(part_name) + self._part_and_state_select(part_name, state_name) if self._part: x, y, w, h = self._geometry @@ -314,11 +328,13 @@ if dw != 0: op = Operation("part resing (from left)") - op.redo_callback_add(self.move, dw, 0, self._edit_grp.part.name) + args = self._edit_grp.part.name, self._edit_grp.part.state.name + + op.redo_callback_add(self.move, dw, 0, *args) op.redo_callback_add(self.part_move, self._part) op.redo_callback_add(self._rel1_move_offset_inform_cb, dw, 0) - op.undo_callback_add(self.move, -dw, 0, self._edit_grp.part.name) + op.undo_callback_add(self.move, -dw, 0, *args) op.undo_callback_add(self.part_move, self._part) op.undo_callback_add(self._rel1_move_offset_inform_cb, -dw, 0) self._operation_stack_cb(op) @@ -334,9 +350,9 @@ else: self.show() - def move(self, dw, dh, part_name=None): + def move(self, dw, dh, part_name=None, state_name=None): if part_name: - self._part_select(part_name) + self._part_and_state_select(part_name, state_name) if self._part: x, y, w, h = self._geometry @@ -349,11 +365,13 @@ if dw != 0: op = Operation("part resing (from right)") - op.redo_callback_add(self.move, dw, 0, self._edit_grp.part.name) + args = self._edit_grp.part.name, self._edit_grp.part.state.name + + op.redo_callback_add(self.move, dw, 0, *args) op.redo_callback_add(self.part_move, self._part) op.redo_callback_add(self._rel2_move_offset_inform_cb, dw, 0) - op.undo_callback_add(self.move, -dw, 0, self._edit_grp.part.name) + op.undo_callback_add(self.move, -dw, 0, *args) op.undo_callback_add(self.part_move, self._part) op.undo_callback_add(self._rel2_move_offset_inform_cb, -dw, 0) self._operation_stack_cb(op) |
From: Enlightenment S. <no-...@en...> - 2010-04-14 22:37:10
|
Log: Better undo-logic for different time frame selections on animations. More to come, just flushing partial work. Gotta support different animation selections on workflow. Also, frame deletion not being undo-tracked. Author: glima Date: 2010-04-14 15:37:02 -0700 (Wed, 14 Apr 2010) New Revision: 48011 Modified: trunk/editje/editje/animations.py trunk/editje/editje/details_state.py trunk/editje/editje/editable_animation.py trunk/editje/editje/editje.py Modified: trunk/editje/editje/animations.py =================================================================== --- trunk/editje/editje/animations.py 2010-04-14 22:35:33 UTC (rev 48010) +++ trunk/editje/editje/animations.py 2010-04-14 22:37:02 UTC (rev 48011) @@ -157,8 +157,8 @@ self._edit_grp.animation.part_add(part) else: # FIXME: Take the confirmation out of this function - self._notification = ErrorNotify(self, - elementary.ELM_NOTIFY_ORIENT_CENTER) + self._notification = ErrorNotify( + self, elementary.ELM_NOTIFY_ORIENT_CENTER) self._notification.title = "Part Removal" lb = elementary.Label(self._notification) lb.label_set("Are you sure you want to remove<br>" @@ -185,7 +185,8 @@ class NewAnimationWizard(Wizard): - def __init__(self, parent, new_anim_cb=None, anims_list_cb=None, parts_list_cb=None): + def __init__(self, parent, new_anim_cb=None, anims_list_cb=None, + parts_list_cb=None): if not new_anim_cb or not anims_list_cb: raise TypeError("You must set callbacks for animations retrieval" " and creation on NewAnimationWizard objects.") @@ -204,7 +205,8 @@ self._anim_name_entry.show() lbl = elementary.Label(self) - lbl.label_set("Select the parts to use in the animation. An empty selection will use all parts.") + lbl.label_set("Select the parts to use in the animation." + " An empty selection will use all parts.") self.content_add("default", lbl) lbl.show() @@ -342,7 +344,7 @@ self.e.animation.callback_add("animation.changed", self._update) self.e.animation.callback_add("animation.unselected", self._removed) self.e.animation.callback_add("state.added", self._timestop_add) - self.e.animation.callback_add("state.changed", self._update_states) + self.e.animation.callback_add("frame.changed", self._update_states) def _removed(self, emissor, data): self.open_disable = True @@ -425,10 +427,11 @@ def header_prop_value_changed(self, prop, value, group): if prop == "name": if not self.e.animation.name_set(value): - self._header_table["name"].value = self.e.animation.name + self._header_table["name"].value = self.e.animation.name def prop_value_changed(self, prop, value, group): if prop == "transition": + def transition_set(animation, state, transition): self.e.animation.name = animation self.e.animation.state = state Modified: trunk/editje/editje/details_state.py =================================================================== --- trunk/editje/editje/details_state.py 2010-04-14 22:35:33 UTC (rev 48010) +++ trunk/editje/editje/details_state.py 2010-04-14 22:37:02 UTC (rev 48011) @@ -15,7 +15,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with Editje. If not, see <http://www.gnu.org/licenses/>. -from itertools import izip import ecore import edje @@ -786,7 +785,6 @@ self._prop_change_do( "(external) part state \"%s\" setting" % prop, *args) - def _size_changed(self, obj): self["main"]["current"].value = obj.size if self.part_edje.type == edje.EDJE_PART_TYPE_IMAGE: Modified: trunk/editje/editje/editable_animation.py =================================================================== --- trunk/editje/editje/editable_animation.py 2010-04-14 22:35:33 UTC (rev 48010) +++ trunk/editje/editje/editable_animation.py 2010-04-14 22:37:02 UTC (rev 48011) @@ -9,14 +9,13 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + import re - import edje from event_manager import Manager @@ -27,22 +26,24 @@ re_anim_program_time = re.compile("@(.*)@(\d+\.\d+)$") re_anim_program = re.compile("@(.*)@((?:\d+\.\d+)|end|stop)$") + class EditableAnimation(Manager, object): def __init__(self, editable): Manager.__init__(self) - self.e = editable - self._name = "" - self.timestops = None + self._edit_grp = editable + self._name = None self._parts_init() self._states_init() - self.program = EditableProgram(self.e) + self.program = EditableProgram(self._edit_grp) - self._name = None - self.e.callback_add("group.changed", self._group_changed_cb) - self.e.callback_add("animation.removed", self._animation_removed_cb) + self._edit_grp.callback_add("group.changed", self._group_changed_cb) + self._edit_grp.callback_add( + "animation.removed", self._animation_removed_cb) + self._edit_grp.part.state.callback_add( + "state.changed", self._state_from_signal) def _group_changed_cb(self, emissor, data): self.name = None @@ -50,26 +51,27 @@ def _animation_removed_cb(self, emissor, data): if self._name == data: self.name = None - for p in self.e.parts: - part = self.e.part_get(p) + for p in self._edit_grp.parts: + part = self._edit_grp.part_get(p) part.state_selected_set("default 0.00") # Name def _name_set(self, value): - if not self.e._edje: + if not self._edit_grp.edje: return if not value: - self._name = "" + self._name = None self.event_emit("animation.unselected") elif self._name != value: - if value in self.e.animations: + if value in self._edit_grp.animations: self._name = value self.event_emit("animation.changed", self._name) else: - self._name = "" - for p in self.e.parts: - part = self.e._edje.part_get(p) + self._name = None + for p in self._edit_grp.parts: + part = self._edit_grp.part_get(p) + #FIXME: is this really desired? part.state_selected_set("default") self.event_emit("animation.unselected") @@ -84,21 +86,21 @@ # stop program stopname = "@%s@stop" % self._name - stopprog = self.e._edje.program_get(stopname) + stopprog = self._edit_grp.edje.program_get(stopname) if not stopprog or not stopprog.rename("@%s@stop" % name): return stopprog.source_set(name) # others programs for p in stopprog.targets_get(): - prog = self.e._edje.program_get(p) - time = re_program.match(p).group(2) + prog = self._edit_grp.edje.program_get(p) + time = re_anim_program.match(p).group(2) p2 = "@%s@%s" % (name, time) if time == "end": prog.state2_set(name) else: for pp in prog.targets_get(): - part = self.e._edje.part_get(pp) + part = self._edit_grp.part_get(pp) if not part: #prog.target_del(pp) TODO: binding continue @@ -116,7 +118,7 @@ # Hack to force reload animation list # self._name = name state = self.state - self.e._programs_reload_cb(self, True) + self._edit_grp._programs_reload_cb(self, True) self.name = name self.state = state return @@ -124,21 +126,24 @@ # Play def play(self): if self.name: - self.e._edje.signal_callback_add("animation,end", self._name, self._play_end) - self.e._edje.program_get(self.program._program.afters_get()[0]).run() + self._edit_grp.edje.signal_callback_add( + "animation,end", self._name, self._play_end) + self._edit_grp.edje.program_get( + self.program._program.afters_get()[0]).run() def _play_end(self, obj, emission, source): - self.e._edje.signal_callback_del("animation,end", self._name, self._play_end) + self._edit_grp.edje.signal_callback_del( + "animation,end", self._name, self._play_end) self.state = self.state self.event_emit("animation.play.end") def stop(self): - self.e._edje.signal_emit("animation,stop", self._name) + self._edit_grp.edje.signal_emit("animation,stop", self._name) # Parts def _parts_init(self): self.parts = {} - self.e.part.callback_add("name.changed", self._part_rename_cb) + self._edit_grp.part.callback_add("name.changed", self._part_rename_cb) self.callback_add("animation.changed", self._parts_reload_cb) self.callback_add("animation.unselected", self._parts_reload_cb) @@ -147,7 +152,7 @@ if not data: return - prog = self.e.program_get("@%s@0.00" % self._name) + prog = self._edit_grp.program_get("@%s@0.00" % self._name) for t in prog.targets: self.parts[t] = True @@ -164,9 +169,9 @@ return progname = "@%s@0.00" % self._name - prog = self.e.program_get(progname) + prog = self._edit_grp.program_get(progname) prog.target_add(part) - p = self.e._edje.part_get(part) + p = self._edit_grp.part_get(part) p.state_copy("default", 0.0, progname, 0.0) self.parts[part] = True @@ -179,14 +184,14 @@ if part not in self.parts: return - p = self.e._edje.part_get(part) + p = self._edit_grp.part_get(part) p.state_selected_set("default 0.00") - if p.name == self.e.part.name: - self.e.part.state.name = None + if p.name == self._edit_grp.part.name: + self._edit_grp.part.state.name = None for t in self.timestops: progname = "@%s@%.2f" % (self._name, t) st = progname + " 0.00" - prog = self.e.program_get(progname) + prog = self._edit_grp.program_get(progname) prog.target_del(part) p.state_del(st) @@ -210,11 +215,11 @@ if not data: return - p = self.e.program_get("@%s@0.00" % self._name) + p = self._edit_grp.program_get("@%s@0.00" % self._name) t = p.name[-4:] while t != "@end": self.timestops.append(float(t)) - p = self.e.program_get(p.afters[0]) + p = self._edit_grp.program_get(p.afters[0]) t = p.name[-4:] self.event_emit("states.changed", self.timestops) @@ -244,20 +249,20 @@ statename = name # Create - self.e.program_add(name) - prog = self.e.program_get(name) + self._edit_grp.program_add(name) + prog = self._edit_grp.program_get(name) prog.state_set(name) prog.transition = edje.EDJE_TWEEN_MODE_LINEAR prog.transition_time = time - prev for p in self.parts.iterkeys(): prog.target_add(p) - part = self.e._edje.part_get(p) + part = self._edit_grp.part_get(p) part.state_add(name) state = part.state_get(statename) state.copy_from(prevstatename) # Link Prev - prevprog = self.e.program_get(prevname) + prevprog = self._edit_grp.program_get(prevname) nextname = prevprog.afters[0] prog.after_add(nextname) prevprog.afters_clear() @@ -267,13 +272,13 @@ next = nextname[-4:] if not next == "@end": next = float(next) - nextprog = self.e.program_get(nextname) + nextprog = self._edit_grp.program_get(nextname) nextprog.transition_time = next - time # Stop stopname = "@%s@stop" % self._name - self.e.program_add(stopname) - prog = self.e.program_get(stopname) + self._edit_grp.program_add(stopname) + prog = self._edit_grp.program_get(stopname) prog.action = edje.EDJE_ACTION_TYPE_ACTION_STOP prog.signal = "animation,stop" prog.target_add(name) @@ -291,12 +296,12 @@ idx = self.timestops.index(time) progname = "@%s@%.2f" % (self._name, time) - prog = self.e.program_get(progname) + prog = self._edit_grp.program_get(progname) # Unlink prev = self.timestops[idx - 1] prevname = "@%s@%.2f" % (self._name, prev) - prevprog = self.e.program_get(prevname) + prevprog = self._edit_grp.program_get(prevname) nextname = prog.afters[0] prevprog.afters_clear() prevprog.after_add(nextname) @@ -305,13 +310,13 @@ next = nextname[-4:] if not next == "@end": next = float(next) - nextprog = self.e.program_get(nextname) + nextprog = self._edit_grp.program_get(nextname) nextprog.transition_time = next - prev # Delete states from parts statename = progname for p in self.parts.iterkeys(): - part = self.e._edje.part_get(p) + part = self._edit_grp.part_get(p) part.state_del(statename, 0.0) self.timestops.pop(idx) @@ -332,25 +337,44 @@ self.program.target_add(part.name) - def _state_set(self, time): - if not self._name: + def _state_set(self, time, is_callback=False): + if not self._name or time == self._current: return + self._current_idx = self.timestops.index(time) self._current = time self.program.name = "@%s@%.2f" % (self._name, time) statename = self.program.name for p in self.parts.iterkeys(): - part = self.e._edje.part_get(p) + part = self._edit_grp.part_get(p) if part.state_exist(statename): part.state_selected_set(statename) else: self._part_state_create(part) part.state_selected_set(statename) - #self.e.part.state.name = statename # Why is this here? - if self.e.part.name in self.parts: - self.e.part.state.name = statename - self.event_emit("state.changed", self.e.part.state.name) + if not is_callback: + if self._edit_grp.part.name in self.parts: + self._edit_grp.part.state.name = statename + + self.event_emit("frame.changed", self._edit_grp.part.state.name) + + def _state_from_signal(self, emissor, data): + name, time = data + m = re_anim_program.match(name) + if not m: + return # not an animation program, skip + anim_name = m.group(1) + frame_time = float(m.group(2)) + + if self.program.name == name and frame_time == self._current: + return + + if self._name != anim_name: + return + + self._state_set(frame_time, is_callback=True) + def _state_get(self): return self._current Modified: trunk/editje/editje/editje.py =================================================================== --- trunk/editje/editje/editje.py 2010-04-14 22:35:33 UTC (rev 48010) +++ trunk/editje/editje/editje.py 2010-04-14 22:37:02 UTC (rev 48011) @@ -149,7 +149,7 @@ self.main_layout.size_hint_weight_set(1.0, 1.0) self.resize_object_add(self.main_layout) self.main_edje = self.main_layout.edje_get() - self.main_edje.signal_emit("details,enable", "") #TODO: remove this + self.main_edje.signal_emit("details,enable", "") # TODO: remove this self.main_layout.show() def save(self): @@ -197,8 +197,10 @@ except swapfile.FileAlreadyExists, e: notification = ErrorNotify(win) notification.title = str(e).replace(':', '<br>') - notification.action_add("Abort", notify_close, None, notification) - notification.action_add("Overwrite", notify_overwrite, None, notification) + notification.action_add("Abort", notify_close, + None, notification) + notification.action_add("Overwrite", notify_overwrite, + None, notification) notification.show() except Exception, e: notification = ErrorNotify(win) @@ -656,7 +658,7 @@ self._prevstates = [] for p_name in self.e.parts: - real_part = self.e._edje.part_get(p_name) + real_part = self.e.part_get(p_name) s_name = real_part.state_selected_get() self._prevstates.append((p_name, s_name)) @@ -665,7 +667,7 @@ return for p_name, s_name in self._prevstates: - real_part = self.e._edje.part_get(p_name) + real_part = self.e.part_get(p_name) real_part.state_selected_set(*s_name) if p_name == self.e.part.name: self.e.part.state.name = s_name[0] |
From: Enlightenment S. <no-...@en...> - 2010-04-16 22:52:11
|
Log: No need to expose value prop here. Author: glima Date: 2010-04-16 15:52:03 -0700 (Fri, 16 Apr 2010) New Revision: 48059 Modified: trunk/editje/editje/editable_state.py Modified: trunk/editje/editje/editable_state.py =================================================================== --- trunk/editje/editje/editable_state.py 2010-04-16 18:36:28 UTC (rev 48058) +++ trunk/editje/editje/editable_state.py 2010-04-16 22:52:03 UTC (rev 48059) @@ -24,7 +24,6 @@ self._edit_grp = editable_part.e self.name = None - self.value = 0.0 self.callback_add("state.changed", self._rel1_inform) self.callback_add("state.changed", self._rel2_inform) @@ -44,7 +43,6 @@ if not part_name: self.name = None - self.value = 0.0 return part = self._edit_grp.part_get(part_name) @@ -58,15 +56,21 @@ # Name def _name_set(self, st): + + def null(): + self._state = None + self._name = None + self._value = 0.0 + name = None value = None - if type(st) == list or type(st) == tuple: + if type(st) is list or type(st) is tuple: if len(st) == 2: name, value = st else: name = st[0] value = 0.0 - elif type(st) == str: + elif type(st) is str: tmp = st.split(None, 1) name = tmp[0] if len(tmp) == 2: @@ -74,11 +78,6 @@ else: value = 0.0 - def null(): - self._state = None - self._name = None - self.value = 0.0 - if not self._edit_grp.edje: null() return @@ -94,18 +93,19 @@ self.event_emit("state.unselected") return - if self._name == name and self.value == value: + if self._name == name and self._value == value: return part = self._edit_grp.part_get(part_name) self._state = part.state_get(name, value) if self._state: self._name = name - self.value = value - self.event_emit("state.changed", (self._name, self.value)) + self._value = value + self.event_emit("state.changed", (self._name, self._value)) + def _name_get(self): - return self._name, self.value + return self._name, self._value name = property(_name_get, _name_set) @@ -114,11 +114,11 @@ return False if new_value is None: - new_value = self.value + new_value = self._value r = self._state.name_set(new_name, new_value) if r: - self.event_emit("state.renamed", (self._name, self.value)) + self.event_emit("state.renamed", (self._name, self._value)) self._name_set((new_name, new_value)) return r @@ -131,7 +131,7 @@ if not r: return False - self.event_emit("state.changed", (self._name, self.value)) + self.event_emit("state.changed", (self._name, self._value)) return True def _rel1_inform(self, emissor, data): |
From: Enlightenment S. <no-...@en...> - 2010-04-19 16:26:36
|
Log: Forgot to clean undo/redo stack here. Author: glima Date: 2010-04-19 09:26:29 -0700 (Mon, 19 Apr 2010) New Revision: 48136 Modified: trunk/editje/editje/editje.py Modified: trunk/editje/editje/editje.py =================================================================== --- trunk/editje/editje/editje.py 2010-04-19 16:09:35 UTC (rev 48135) +++ trunk/editje/editje/editje.py 2010-04-19 16:26:29 UTC (rev 48136) @@ -275,8 +275,12 @@ return self.e.group_exists(grp_name) def _group_wizard_new_group_cb(self, grp_name): - return self.e.group_add(grp_name) + r = self.e.group_add(grp_name) + if r: + self._operation_stack_clean() + return r + def _group_wizard_del_group_cb(self, grp_name): return self.e.group_del(grp_name) |
From: Enlightenment S. <no-...@en...> - 2010-04-19 23:35:15
|
Log: Just style here. Author: glima Date: 2010-04-19 16:35:07 -0700 (Mon, 19 Apr 2010) New Revision: 48149 Modified: trunk/editje/editje/editable_program.py Modified: trunk/editje/editje/editable_program.py =================================================================== --- trunk/editje/editje/editable_program.py 2010-04-19 21:34:28 UTC (rev 48148) +++ trunk/editje/editje/editable_program.py 2010-04-19 23:35:07 UTC (rev 48149) @@ -9,12 +9,11 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. import edje @@ -25,26 +24,28 @@ def __init__(self, editable): Manager.__init__(self) - self.e = editable + self._edit_grp = editable + self._null() + + def _null(self): self._name = None self._program = None # Name def _name_set(self, value): - if not self.e._edje: + if not self._edit_grp.edje: return if not value: - self._name = None + self._null() self.event_emit("program.unselected") elif self._name != value: - if value in self.e.programs: + if value in self._edit_grp.programs: self._name = value self._program_fetch() self.event_emit("program.changed", self.name) else: - self._name = None - self._program = None + self._null() self.event_emit("program.unselected") def _name_get(self): @@ -53,7 +54,7 @@ name = property(_name_get, _name_set) def _program_fetch(self): - self._program = self.e._edje.program_get(self._name) + self._program = self._edit_grp.edje.program_get(self._name) def _signal_get(self): return self._program.signal_get() |
From: Enlightenment S. <no-...@en...> - 2010-04-19 23:35:51
|
Log: Wrong logic fix. Author: glima Date: 2010-04-19 16:35:45 -0700 (Mon, 19 Apr 2010) New Revision: 48150 Modified: trunk/editje/editje/parts.py Modified: trunk/editje/editje/parts.py =================================================================== --- trunk/editje/editje/parts.py 2010-04-19 23:35:07 UTC (rev 48149) +++ trunk/editje/editje/parts.py 2010-04-19 23:35:45 UTC (rev 48150) @@ -198,7 +198,7 @@ r = self._edit_grp.part_del(part_name) if not r: del part_save - return + continue op = Operation("part deletion") op.redo_callback_add(self._edit_grp.part_del, part_name) |
From: Enlightenment S. <no-...@en...> - 2010-04-19 23:36:42
|
Log: Undo/redo support for animations deletion/insertion. Author: glima Date: 2010-04-19 16:36:35 -0700 (Mon, 19 Apr 2010) New Revision: 48151 Modified: trunk/editje/editje/animations.py trunk/editje/editje/editable.py trunk/editje/editje/editable_animation.py trunk/editje/editje/editje.py trunk/editje/editje/objects_data.py Modified: trunk/editje/editje/animations.py =================================================================== --- trunk/editje/editje/animations.py 2010-04-19 23:35:45 UTC (rev 48150) +++ trunk/editje/editje/animations.py 2010-04-19 23:36:35 UTC (rev 48151) @@ -33,24 +33,29 @@ class AnimationsList(CList): - def __init__(self, parent, new_anim_cb, anims_list_cb, parts_list_cb): + def __init__(self, parent, new_anim_cb, anims_list_cb, parts_list_cb, + op_stack_cb): CList.__init__(self, parent) - self.e = parent.e + self._edit_grp = parent.e self._new_anim_cb = new_anim_cb self._anims_list_cb = anims_list_cb self._parts_list_cb = parts_list_cb + self._operation_stack_cb = op_stack_cb self._options_load() self.options = True - self.e.callback_add("animations.changed", self._animations_update) - self.e.callback_add("animation.added", self._animation_added) - self.e.callback_add("animation.removed", self._animation_removed) + self._edit_grp.callback_add( + "animations.changed", self._animations_update) + self._edit_grp.callback_add( + "animation.added", self._animation_added) + self._edit_grp.callback_add( + "animation.removed", self._animation_removed) - self.e.animation.callback_add( + self._edit_grp.animation.callback_add( "animation.changed", self._animation_changed) - self.e.animation.callback_add( + self._edit_grp.animation.callback_add( "animation.unselected", self._animation_changed) def _animations_update(self, emissor, data): @@ -76,7 +81,7 @@ def _selected_cb(self, li, it): CList._selected_cb(self, li, it) name = it.label_get() - self.e.animation.name = name + self._edit_grp.animation.name = name self._options_edje.signal_emit("remove,enable", "") def _unselected_cb(self, li, it): @@ -107,10 +112,30 @@ anim_wiz.open() def _remove_cb(self, obj, emission, source): - for i in self.selected: - self.e.animation_del(i[0]) + def anim_restore(anim_save): + name = anim_save.name + if self._edit_grp.animation_add(name): + anim_save.apply_to(self._edit_grp) + for s in self.selected: + anim_name = s[0] + pname = "@%s@stop" % anim_name + stop_prog = self._edit_grp.edje.program_get(pname) + anim_data = objects_data.Animation(stop_prog) + + r = self._edit_grp.animation_del(anim_name) + if not r: + del anim_data + continue + + op = Operation("animation deletion: %s" % anim_name) + op.redo_callback_add(self._edit_grp.animation_del, anim_name) + op.undo_callback_add(anim_restore, anim_data) + self._operation_stack_cb(op) + + + class AnimationsPartsList(PartsList): def __init__(self, parent, editable_grp, operation_stack_cb): PartsList.__init__(self, parent, editable_grp, operation_stack_cb) Modified: trunk/editje/editje/editable.py =================================================================== --- trunk/editje/editje/editable.py 2010-04-19 23:35:45 UTC (rev 48150) +++ trunk/editje/editje/editable.py 2010-04-19 23:36:35 UTC (rev 48151) @@ -545,8 +545,9 @@ def animation_del(self, name): stopname = "@%s@stop" % name stopprog = self.program_get(stopname) + if not stopprog: - return + return False for p in stopprog.targets: prog = self.program_get(p) for pp in prog.targets: @@ -559,6 +560,8 @@ self._animations.pop(self._animations.index(name)) self._modified = True + return True + # Signals def _signal_get(self): return self._signals Modified: trunk/editje/editje/editable_animation.py =================================================================== --- trunk/editje/editje/editable_animation.py 2010-04-19 23:35:45 UTC (rev 48150) +++ trunk/editje/editje/editable_animation.py 2010-04-19 23:36:35 UTC (rev 48151) @@ -335,7 +335,7 @@ self.program.target_add(part.name) - def _state_set(self, time, is_callback=False): + def _state_set(self, time): if not self._name or time == self._current: return @@ -351,9 +351,8 @@ self._part_state_create(part) part.state_selected_set(statename) - if not is_callback: - if self._edit_grp.part.name in self.parts: - self._edit_grp.part.state.name = statename + if self._edit_grp.part.name in self.parts: + self._edit_grp.part.state.name = statename self.event_emit("frame.changed", self._edit_grp.part.state.name) Modified: trunk/editje/editje/editje.py =================================================================== --- trunk/editje/editje/editje.py 2010-04-19 23:35:45 UTC (rev 48150) +++ trunk/editje/editje/editje.py 2010-04-19 23:36:35 UTC (rev 48151) @@ -861,15 +861,26 @@ mainbar.show() def new_anim_cb(name, parts): - return self.e.animation_add(name, parts) + r = self.e.animation_add(name, parts) + if not r: + return r + op = Operation("new animation: %s " % name) + + op.undo_callback_add(self.e.animation_del, name) + op.redo_callback_add(self.e.animation_add, name, parts) + self._operation_stack(op) + + return r + def anims_list_cb(): return self.e.animations def parts_list_cb(): return self.e.parts - list = AnimationsList(self, new_anim_cb, anims_list_cb, parts_list_cb) + list = AnimationsList(self, new_anim_cb, anims_list_cb, parts_list_cb, + self._operation_stack) list.options = True list.title = "Animations" list.open = True Modified: trunk/editje/editje/objects_data.py =================================================================== --- trunk/editje/editje/objects_data.py 2010-04-19 23:35:45 UTC (rev 48150) +++ trunk/editje/editje/objects_data.py 2010-04-19 23:36:35 UTC (rev 48151) @@ -456,7 +456,6 @@ self["transition_time"] = obj.transition_time_get() self["in"] = (obj.in_from_get(), obj.in_range_get()) - targets = [] self["targets"] = targets for target in obj.targets_get(): @@ -530,17 +529,26 @@ class Animation(Object): + """Animations data serializer. + + Objects must be instantiated with an animation's stop program reference. + + """ + def __init__(self, obj): prog = re_anim_program_stop.match(obj.name) if not prog: - raise TypeError("not animation end program") - name = prog.group(0) + raise TypeError("Not an animation's stop program") + name = re_anim_program.match(obj.name).group(1) Object.__init__(self, name) edj = obj.edje_get() - keyframes = {} - self["keyframes"] = keyframes + + self["parts"] = None + + frames = {} + self["frames"] = frames for target in obj.targets_get(): program = edj.program_get(target) if not program: @@ -551,13 +559,31 @@ continue time = float(time) - keyframes[time] = AnimatioKeyFrame(program) + frames[time] = AnimationFrame(program) + if not self["parts"]: + self["parts"] = frames[time]["targets"].keys() def apply_to(self, obj): - pass + anim = obj.animation + # select it, so we to act on it by this ptr + anim.name = self.name + # in pristine order we were getting wrong state selected at the end + for time, frame_data in reversed(self["frames"].items()): + if time != 0.0: # we have it, already + r = anim.state_add(time) + if not r: + obj.animation_del(self.name) + return False -class AnimatioKeyFrame(Object): + pname = "@%s@%.2f" % (self.name, time) + prog = obj.edje.program_get(pname) + frame_data.apply_to(prog) + + return True + + +class AnimationFrame(Object): def __init__(self, obj): Object.__init__(self, obj.name) @@ -570,7 +596,8 @@ part = edj.part_get(target) if not part: continue - state = part.state_get(self._name+" 0.00") + + state = part.state_get(self.name) if not state: continue @@ -588,22 +615,26 @@ targets[target] = stateclass(state) def apply_to(self, obj): - name = obj.name + state_name = obj.name edj = obj.edje_get() - animation, time = program_time.match(name) + animation = re_anim_program.match(state_name).group(1) + time = re_anim_program.match(state_name).group(2) + obj.transition_set(self["transition"]) obj.targets_clear() - for target, data in self["targets"].values(): + for target, data in self["targets"].items(): obj.target_add(target) part = edj.part_get(target) if not part: continue - state_name = name + part.state_add(state_name) + state = part.state_get(state_name) if not state: continue + data.apply_to(state) |
From: Enlightenment S. <no-...@en...> - 2010-04-20 18:04:49
|
Log: Fix animation selection (of 1st frame) logic. Author: glima Date: 2010-04-20 11:04:43 -0700 (Tue, 20 Apr 2010) New Revision: 48166 Modified: trunk/editje/editje/animations.py trunk/editje/editje/editable_animation.py Modified: trunk/editje/editje/animations.py =================================================================== --- trunk/editje/editje/animations.py 2010-04-20 17:48:21 UTC (rev 48165) +++ trunk/editje/editje/animations.py 2010-04-20 18:04:43 UTC (rev 48166) @@ -395,7 +395,6 @@ self._last_timestamp = 0.0 self._timeline_update() - self.e.animation.state = 0.0 self.open_disable = False self.open = True self.show() Modified: trunk/editje/editje/editable_animation.py =================================================================== --- trunk/editje/editje/editable_animation.py 2010-04-20 17:48:21 UTC (rev 48165) +++ trunk/editje/editje/editable_animation.py 2010-04-20 18:04:43 UTC (rev 48166) @@ -386,12 +386,9 @@ self.state = state def _state_reload_cb(self, emissor, data): + self._current = None if data and self.timestops: self.state = 0.0 - else: - self._current = None - self._idx = 0 - self._prog = None # Info def _length_get(self): |
From: Enlightenment S. <no-...@en...> - 2010-04-20 18:54:46
|
Log: Periodical pyflakes + pep9 run and fixes. Author: glima Date: 2010-04-20 11:54:38 -0700 (Tue, 20 Apr 2010) New Revision: 48171 Modified: trunk/editje/editje/about.py trunk/editje/editje/actions_box.py trunk/editje/editje/animations.py trunk/editje/editje/controller.py trunk/editje/editje/desktop_part_listener.py trunk/editje/editje/desktop_parts_manager.py trunk/editje/editje/details_widget_entry_button.py trunk/editje/editje/details_widget_entry_button_list.py trunk/editje/editje/details_widget_font.py trunk/editje/editje/details_widget_partlist.py trunk/editje/editje/details_widget_states.py trunk/editje/editje/editable.py trunk/editje/editje/editable_part.py trunk/editje/editje/editable_program.py trunk/editje/editje/editje.py trunk/editje/editje/error_notify.py trunk/editje/editje/fileselector.py trunk/editje/editje/filewizard.py trunk/editje/editje/floater.py trunk/editje/editje/floater_opener.py trunk/editje/editje/groupselector.py trunk/editje/editje/misc.py trunk/editje/editje/objects_data.py trunk/editje/editje/openfile.py trunk/editje/editje/parts.py trunk/editje/editje/popup_win.py trunk/editje/editje/popups.py trunk/editje/editje/prop.py trunk/editje/editje/signals.py trunk/editje/editje/swapfile.py Modified: trunk/editje/editje/about.py =================================================================== --- trunk/editje/editje/about.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/about.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -13,8 +13,7 @@ # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. import evas import elementary @@ -22,6 +21,7 @@ import sysconfig from floater import Wizard + class About(Wizard): def __init__(self, parent): Wizard.__init__(self, parent) @@ -38,7 +38,7 @@ self.content_add("default", ico) name = elementary.Label(self) - name.label_set("<b>Editje " + str(sysconfig.VERSION)+"</b>") + name.label_set("<b>Editje " + str(sysconfig.VERSION) + "</b>") name.show() self.content_add("default", name) @@ -66,7 +66,6 @@ sc.bounce_set(False, False) sc.show() self.content_add("default", sc) - copyright = elementary.Label(self) copyright.label_set( @@ -86,6 +85,4 @@ copyright.show() sc.content_set(copyright) - self.action_add("default", "Close", self.close) - Modified: trunk/editje/editje/actions_box.py =================================================================== --- trunk/editje/editje/actions_box.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/actions_box.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -1,4 +1,3 @@ -# # Copyright (C) 2009 Samsung Electronics. # # This file is part of Editje. @@ -10,16 +9,16 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. import evas import elementary + class ActionsBox(elementary.Box): def __init__(self, parent): elementary.Box.__init__(self, parent) Modified: trunk/editje/editje/animations.py =================================================================== --- trunk/editje/editje/animations.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/animations.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -135,7 +135,6 @@ self._operation_stack_cb(op) - class AnimationsPartsList(PartsList): def __init__(self, parent, editable_grp, operation_stack_cb): PartsList.__init__(self, parent, editable_grp, operation_stack_cb) @@ -377,7 +376,8 @@ def _removed(self, emissor, data): self.open_disable = True self._header_table["name"].value = "Unselected" - self._header_table["name"].value_obj._values_dict["n"].disabled_set(True) + self._header_table["name"].value_obj._values_dict["n"].disabled_set( + True) self._header_table["length"].value = None self["main"]["current"].hide_value() self["main"]["previous"].hide_value() @@ -390,7 +390,8 @@ def _update(self, emissor, data): self.open_disable = False self._header_table["name"].value = data - self._header_table["name"].value_obj._values_dict["n"].disabled_set(False) + self._header_table["name"].value_obj._values_dict["n"].disabled_set( + False) self._header_table["length"].value = "%.1gs" % self.e.animation.length self._last_timestamp = 0.0 self._timeline_update() Modified: trunk/editje/editje/controller.py =================================================================== --- trunk/editje/editje/controller.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/controller.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -1,4 +1,3 @@ -# # Copyright (C) 2009 Samsung Electronics. # # This file is part of Editje. @@ -10,14 +9,14 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. -class Controller(object): +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + +class Controller(object): def __init__(self, parent): self.parent = parent self._view_load() @@ -42,7 +41,6 @@ class View(object): - def __init__(self, controller, parent_view): self.controller = controller self.parent_view = parent_view Modified: trunk/editje/editje/desktop_part_listener.py =================================================================== --- trunk/editje/editje/desktop_part_listener.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/desktop_part_listener.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -1,4 +1,3 @@ -# # Copyright (C) 2009 Samsung Electronics. # # This file is part of Editje. @@ -10,13 +9,13 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + class PartListener(object): def __init__(self): self._part = None Modified: trunk/editje/editje/desktop_parts_manager.py =================================================================== --- trunk/editje/editje/desktop_parts_manager.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/desktop_parts_manager.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -1,4 +1,3 @@ -# # Copyright (C) 2009 Samsung Electronics. # # This file is part of Editje. @@ -10,18 +9,18 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + import evas class PartViewport(evas.Rectangle): def __init__(self, canvas, manager, part): - evas.Rectangle.__init__(self, canvas, color=(0,0,0,0)) + evas.Rectangle.__init__(self, canvas, color=(0, 0, 0, 0)) self._manager = manager self._part = part self._part.on_resize_add(self._resize) Modified: trunk/editje/editje/details_widget_entry_button.py =================================================================== --- trunk/editje/editje/details_widget_entry_button.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/details_widget_entry_button.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -1,4 +1,3 @@ -# # Copyright (C) 2009 Samsung Electronics. # # This file is part of Editje. @@ -10,12 +9,12 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + import elementary from details_widget import Widget @@ -56,7 +55,7 @@ self.rect = elementary.Button(parent) self.rect.label_set("...") self.rect.size_hint_align_set(-1.0, -1.0) - self.rect.size_hint_min_set(30,16) + self.rect.size_hint_min_set(30, 16) self.rect.callback_clicked_add(self._open) self.rect.style_set("editje.details") self.rect.show() Modified: trunk/editje/editje/details_widget_entry_button_list.py =================================================================== --- trunk/editje/editje/details_widget_entry_button_list.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/details_widget_entry_button_list.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -31,4 +31,3 @@ def _open(self, obj): self._floater_open(obj) - Modified: trunk/editje/editje/details_widget_font.py =================================================================== --- trunk/editje/editje/details_widget_font.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/details_widget_font.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -1,4 +1,3 @@ -# # Copyright (C) 2010 Samsung Electronics. # # This file is part of Editje. @@ -10,17 +9,17 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + from details_widget_entry_button import WidgetEntryButton from filewizard import FontSelectionWizard -class WidgetFont(WidgetEntryButton): +class WidgetFont(WidgetEntryButton): def __init__(self, parent, fnt_new_fnt_cb=None, fnt_list_get_cb=None, fnt_id_get_cb=None, workfile_name_get_cb=None): WidgetEntryButton.__init__(self, parent) Modified: trunk/editje/editje/details_widget_partlist.py =================================================================== --- trunk/editje/editje/details_widget_partlist.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/details_widget_partlist.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -87,4 +87,3 @@ self._value = value self._update() self._callback_call("changed") - Modified: trunk/editje/editje/details_widget_states.py =================================================================== --- trunk/editje/editje/details_widget_states.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/details_widget_states.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -215,7 +215,8 @@ self._part_state_copy_from(part_name, st_from, curr_state) - op = Operation("state copying (%s into %s)" % (st_from[0], curr_state[0])) + op = Operation( + "state copying (%s into %s)" % (st_from[0], curr_state[0])) op.redo_callback_add( self._part_state_copy_from, part_name, st_from, curr_state) op.undo_callback_add(self._state_restore, part_name, state_save) Modified: trunk/editje/editje/editable.py =================================================================== --- trunk/editje/editje/editable.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/editable.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -24,7 +24,6 @@ from editable_part import EditablePart from editable_program import EditableProgram from event_manager import Manager -from operation import Operation class Editable(Manager): @@ -388,7 +387,7 @@ self.event_emit("part.added", name) return True - def part_add_bydata(self, name, part_data, relatives = None): + def part_add_bydata(self, name, part_data, relatives=None): source = part_data["source"] if source is None: source = '' @@ -413,7 +412,6 @@ if rels[3]: state.rel2_to_y_set(name) - def _part_init(self, name): part = self._edje.part_get(name) type = part.type @@ -433,9 +431,9 @@ part.mouse_events = False elif type == edje.EDJE_PART_TYPE_IMAGE: - images = self._edje.images - if images: - state.image = images[0] + images = self._edje.images + if images: + state.image = images[0] elif type == edje.EDJE_PART_TYPE_TEXT: part.mouse_events = False @@ -532,7 +530,7 @@ prog.source = name prog.after_add("@%s@end" % name) - prevstatename = "default" + prevstatename = "default" statename = startname if not parts: parts = self.parts @@ -633,4 +631,3 @@ if saved_states: relatives[p] = saved_states return relatives - Modified: trunk/editje/editje/editable_part.py =================================================================== --- trunk/editje/editje/editable_part.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/editable_part.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -114,7 +114,8 @@ def _states_reload_cb(self, emissor, data): if data and self._part: self.states = [] - for s in filter(lambda x: not x.startswith("@"), self._part.states): + for s in filter(lambda x: not x.startswith("@"), + self._part.states): n, v = s.split(None) self.states.append((n, float(v))) else: Modified: trunk/editje/editje/editable_program.py =================================================================== --- trunk/editje/editje/editable_program.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/editable_program.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -112,7 +112,7 @@ self._program.action_set(edje.EDJE_ACTION_TYPE_STATE_SET) self._program.state_set(state) - def signal_emit(self, signal, source = ""): + def signal_emit(self, signal, source=""): self._program.action_set(edje.EDJE_ACTION_TYPE_SIGNAL_EMIT) self._program.state_set(signal) self._program.state2_set(source) Modified: trunk/editje/editje/editje.py =================================================================== --- trunk/editje/editje/editje.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/editje.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -664,7 +664,6 @@ self._mainbar_pager.content_push(mainbar) self._sidebar_pager.content_push(sidebar) - def _mode_get(self): return self._mode Modified: trunk/editje/editje/error_notify.py =================================================================== --- trunk/editje/editje/error_notify.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/error_notify.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -1,4 +1,3 @@ -# # Copyright (C) 2009 Samsung Electronics. # # This file is part of Editje. @@ -10,17 +9,18 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + import evas import elementary from actions_box import ActionsBox + class ErrorNotify(elementary.Notify): def __init__(self, parent, orient=elementary.ELM_NOTIFY_ORIENT_BOTTOM): elementary.Notify.__init__(self, parent) Modified: trunk/editje/editje/fileselector.py =================================================================== --- trunk/editje/editje/fileselector.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/fileselector.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -147,7 +147,8 @@ elementary.ELM_SCROLLER_POLICY_OFF) self._file_sc.bounce_set(False, False) self._file_sc.size_hint_weight_set(evas.EVAS_HINT_EXPAND, 0.0) - self._file_sc.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL) + self._file_sc.size_hint_align_set(evas.EVAS_HINT_FILL, + evas.EVAS_HINT_FILL) self._file_entry = elementary.Entry(self) self._file_entry.single_line_set(True) @@ -263,7 +264,8 @@ ic = elementary.Icon(self) ic.standard_set("folder") ic.scale_set(0, 0) - it = self._directories.item_append(file, ic, None, None, full) + it = self._directories.item_append( + file, ic, None, None, full) self._ls_dir[file] = it elif os.path.isfile(full): if not filter or self._filter_call(full): Modified: trunk/editje/editje/filewizard.py =================================================================== --- trunk/editje/editje/filewizard.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/filewizard.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -94,7 +94,7 @@ if not self._file_preview_page_created: self._create_file_preview_page() else: - self._get_preview_file(self._selection) + self._get_preview_file(self._selection) self.goto("file_preview", alt_bg_style=False) self._get_title_text() @@ -150,7 +150,7 @@ for i in self._files: self._file_list.item_append( - i.split(',',1)[0], None, None, None, None) + i.split(',', 1)[0], None, None, None, None) self._file_list.go() def _fs_file_selected_cb(self, obj, data): @@ -293,4 +293,3 @@ self.action_add("file_list", "Close", self.close) self._file_list.callback_selected_add(self._goto_preview) - Modified: trunk/editje/editje/floater.py =================================================================== --- trunk/editje/editje/floater.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/floater.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -32,8 +32,8 @@ def __init__(self, parent, rel_to_obj=None): if not rel_to_obj: - raise TypeError("You must pass an object whose geometry the Floater" - " will use to move itself in the canvas.") + raise TypeError("You must pass an object whose geometry the" + " Floater will use to move itself in the canvas.") Layout.__init__(self, parent) self.on_changed_size_hints_add(self._move_and_resize) @@ -93,7 +93,7 @@ if oy < py: oy = py - elif oy + oh + py>= ch: + elif oy + oh + py >= ch: oy = ch - oh - py self.resize(ow, oh) @@ -124,7 +124,7 @@ content.size_hint_align_set(-1.0, -1.0) Layout.content_set(self, "content", content) - def action_add(self, label, func_cb, data = None): + def action_add(self, label, func_cb, data=None): btn = Button(self._parent) self._action_btns.append(btn) btn.label_set(label) @@ -148,7 +148,6 @@ action.delete() del self._action_btns[:] - def show(self): self._move_and_resize(self) global _instance @@ -193,7 +192,7 @@ InnerWindow.__init__(self, parent) self._parent = parent - self.style_set("minimal") # size fallbacks to __layout's min/max + self.style_set("minimal") # size fallbacks to __layout's min/max self.__layout = edje.Edje(self.evas) self.__theme_file = sysconfig.theme_file_get("default") Modified: trunk/editje/editje/floater_opener.py =================================================================== --- trunk/editje/editje/floater_opener.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/floater_opener.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -40,7 +40,8 @@ def _floater_open(self, parent, *args): if not self._floater: self._floater = Floater(parent, parent) - self._floater.size_min_set(self._floater_min_w, self._floater_min_h) + self._floater.size_min_set( + self._floater_min_w, self._floater_min_h) self._floater_title_init() self._floater_actions_init() Modified: trunk/editje/editje/groupselector.py =================================================================== --- trunk/editje/editje/groupselector.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/groupselector.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -312,7 +312,8 @@ self._preview.group_set(self._groups_list.file, self._groups_list.selection) self.goto("group_preview") - self.title_text = "Group preview - \"%s\"" % self._groups_list.selection + self.title_text = "Group preview - \"%s\"" % \ + self._groups_list.selection def _goto_group_list(self): self._groups_list.selection_clear() Modified: trunk/editje/editje/misc.py =================================================================== --- trunk/editje/editje/misc.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/misc.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -17,6 +17,7 @@ import re + def name_generate(suggest, list=[]): # Split the name and the number in end spliter = re.compile("((?:(?:\d+\D)*|\D)*)(\d*$)") @@ -30,7 +31,7 @@ has = False for item in list: - iname, inumber = spliter.match(item).groups() + iname, inumber = spliter.match(item).groups() if iname != name: continue @@ -56,4 +57,3 @@ return name accepted_filetype = re.compile("(.*\.(?:edc|edj))").match - Modified: trunk/editje/editje/objects_data.py =================================================================== --- trunk/editje/editje/objects_data.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/objects_data.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -502,7 +502,7 @@ ret += indent + ' action: SIGNAL_EMIT "%s" "%s";\n' % \ (self["state"], self["state2"]) - trans["NONE", "LINEAR", "SINUSOIDAL", "ACCELERATE", "DECELERATE"] + trans = ["NONE", "LINEAR", "SINUSOIDAL", "ACCELERATE", "DECELERATE"] ret += indent + ' transition: %s %.5f;\n' % \ (trans[self["transition"]], self["transition_time"]) ret += indent + ' in: %.5f %.5f;\n' % self["in"] @@ -538,7 +538,7 @@ def __init__(self, obj): prog = re_anim_program_stop.match(obj.name) if not prog: - raise TypeError("Not an animation's stop program") + raise TypeError("Not an animation's stop program") name = re_anim_program.match(obj.name).group(1) Object.__init__(self, name) Modified: trunk/editje/editje/openfile.py =================================================================== --- trunk/editje/editje/openfile.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/openfile.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -16,7 +16,6 @@ # License along with Editje. If not, see <http://www.gnu.org/licenses/>. import os -import shutil import string import evas Modified: trunk/editje/editje/parts.py =================================================================== --- trunk/editje/editje/parts.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/parts.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -188,7 +188,6 @@ self._edit_grp.part_add_bydata(name, part_save, saved_relatives) - for to_del in self.selected: part_name = to_del[0] part_save = objects_data.Part(self._edit_grp.part_get(part_name)) @@ -205,7 +204,6 @@ op.undo_callback_add(part_restore, part_save, relatives) self._operation_stack_cb(op) - def remove(self, item): i = self._items.get(item) if i: Modified: trunk/editje/editje/popup_win.py =================================================================== --- trunk/editje/editje/popup_win.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/popup_win.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -1,4 +1,3 @@ -# # Copyright (C) 2010 Samsung Electronics. # # This file is part of Editje. @@ -10,17 +9,18 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + import evas import elementary from actions_box import ActionsBox + class PopupWindow(elementary.Window): def __init__(self, name="popup", type=elementary.ELM_WIN_BASIC): elementary.Window.__init__(self, name, type) Modified: trunk/editje/editje/popups.py =================================================================== --- trunk/editje/editje/popups.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/popups.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -9,12 +9,11 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. import evas from elementary import InnerWindow, Layout, Button, Box @@ -66,8 +65,8 @@ self._set_controls() - def set_message(self,message): - self.label_set("filename",message) + def set_message(self, message): + self.label_set("filename", message) def action_add(self, label, func_cb, data=None): btn = Button(self) Modified: trunk/editje/editje/prop.py =================================================================== --- trunk/editje/editje/prop.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/prop.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -205,7 +205,7 @@ def property_del(self, key): if not key in self._props: - raise KeyError(prop.name) + raise KeyError(key) prop = self._props[key] self.unpack(prop.label_obj) @@ -224,7 +224,7 @@ return self._props.get(key) def has_key(self, key): - return self._props.has_key(key) + return key in self._props def __getitem__(self, key): if key in self._props: Modified: trunk/editje/editje/signals.py =================================================================== --- trunk/editje/editje/signals.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/signals.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -9,12 +9,11 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. import evas import ecore @@ -296,7 +295,8 @@ def _removed(self, emissor, data): self._header_table["name"].value = "Unselected" - self._header_table["name"].value_obj._values_dict["n"].disabled_set(True) + self._header_table["name"].value_obj._values_dict["n"].disabled_set( + True) self["main"]["signal"].value = "" self["main"]["signal"].hide_value() @@ -323,7 +323,8 @@ def _update(self, emissor, data): self._header_table["name"].value = data self._header_table["name"].show_value() - self._header_table["name"].value_obj._values_dict["n"].disabled_set(False) + self._header_table["name"].value_obj._values_dict["n"].disabled_set( + False) signal = self.e.signal.signal self["main"]["signal"].show_value() Modified: trunk/editje/editje/swapfile.py =================================================================== --- trunk/editje/editje/swapfile.py 2010-04-20 18:49:42 UTC (rev 48170) +++ trunk/editje/editje/swapfile.py 2010-04-20 18:54:38 UTC (rev 48171) @@ -1,4 +1,3 @@ -# # Copyright (C) 2009 Samsung Electronics. # # This file is part of Editje. @@ -10,14 +9,14 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + from os import system, remove, path, getcwd, chdir, listdir -from shutil import copyfile, move, rmtree +from shutil import copyfile, rmtree from tempfile import mkstemp, mkdtemp from subprocess import Popen, PIPE import re @@ -27,13 +26,14 @@ RESTORE = 1 REPLACE = 2 + class SwapFile(object): __opened_files = {} def is_opened(self, filename=None): if not filename: filename = self.__filepath - return self.__opened_files.has_key(filename) + return filename in self.__opened_files def __init__(self): self.__new = False @@ -53,14 +53,14 @@ self.__opened = True return - if self.__opened_files.has_key(self.__filepath): + if self.__filepath in self.__opened_files: raise FileOpened(self) if not self.__filepath: raise FileNotSet(self) if path.exists(self.__swapfile): - if mode == RESTORE: # or filecmp.cmp(self.__filepath, self.__swapfile): + if mode == RESTORE: self.__opened = True self.__opened_files[self.__filepath] = self return @@ -104,7 +104,7 @@ opened = self.__opened_files.get(filepath) if opened and opened != self: raise FileOpened(self) - if self.__opened_files.has_key(self.__filepath): + if self.__filepath in self.__opened_files: del self.__opened_files[self.__filepath] if path.exists(filepath) and mode != REPLACE: raise FileAlreadyExists(self) @@ -119,7 +119,8 @@ orig_dir = getcwd() temp_dir = mkdtemp(prefix="editje_") chdir(temp_dir) - system('edje_decc ' + self.__swapfile + ' -no-build-sh -current-dir') + system('edje_decc ' + self.__swapfile + + ' -no-build-sh -current-dir') copyfile("./generated_source.edc", self.__filepath) remove("./generated_source.edc") dir, file = path.split(self.__filepath) @@ -186,33 +187,42 @@ def __init__(self, swapfile): self.swapfile = swapfile + class FileNotSet(SwapFileError): def __str__(self): return "File not set." + class UnknownFileType(SwapFileError): def __str__(self): return "Unknown File type." + class CacheAlreadyExists(SwapFileError): def __str__(self): - return self.swapfile.file + " : Swap file (" + self.swapfile.workfile + ") exists." + return self.swapfile.file + " : Swap file (" + \ + self.swapfile.workfile + ") exists." + class CompileError(SwapFileError): def __init__(self, swapfile, message): SwapFileError.__init__(self, swapfile) self.message = message + def __str__(self): return self.swapfile.file + " : Compile Error\n" + self.message + class FileAlreadyExists(SwapFileError): def __str__(self): return self.swapfile.file + " : File exists." + class FileNotFound(SwapFileError): def __str__(self): return self.swapfile.file + " : File not found." + class FileOpened(SwapFileError): def __str__(self): return self.swapfile.file + " : File opened." |
From: Enlightenment S. <no-...@en...> - 2010-04-22 19:46:31
|
Log: Recording parts' participation in animations when one deletes them. TODO: handle part inclusion setting for animations properly wrt to this schema. Author: glima Date: 2010-04-22 12:46:23 -0700 (Thu, 22 Apr 2010) New Revision: 48230 Modified: trunk/editje/editje/animations.py trunk/editje/editje/details_widget_states.py trunk/editje/editje/editable.py trunk/editje/editje/editable_animation.py trunk/editje/editje/objects_data.py trunk/editje/editje/parts.py Modified: trunk/editje/editje/animations.py =================================================================== --- trunk/editje/editje/animations.py 2010-04-22 19:17:51 UTC (rev 48229) +++ trunk/editje/editje/animations.py 2010-04-22 19:46:23 UTC (rev 48230) @@ -413,18 +413,6 @@ self.e.animation.state = t - def _state_class_from_part_type_get(self, part): - st_class = objects_data.State - if part.type == edje.EDJE_PART_TYPE_IMAGE: - st_class = objects_data.StateImage - elif part.type == edje.EDJE_PART_TYPE_GRADIENT: - st_class = objects_data.StateGradient - elif part.type == edje.EDJE_PART_TYPE_TEXT: - st_class = objects_data.StateText - elif part.type == edje.EDJE_PART_TYPE_EXTERNAL: - st_class = objects_data.StateExternal - return st_class - def _remove_time_point(self, t): prog = "@%s@%.2f" % (self.e.animation.name, t) self.e.animation.state_prev_goto() @@ -458,7 +446,7 @@ for part_name in self.e.animation.parts: part = self.e.part_get(part_name) st_obj = part.state_get(prog) - st_class = self._state_class_from_part_type_get(part) + st_class = objects_data.state_class_from_part_type_get(part) state_save = st_class(st_obj) saved_states.append([part.name, state_save]) Modified: trunk/editje/editje/details_widget_states.py =================================================================== --- trunk/editje/editje/details_widget_states.py 2010-04-22 19:17:51 UTC (rev 48229) +++ trunk/editje/editje/details_widget_states.py 2010-04-22 19:46:23 UTC (rev 48230) @@ -170,25 +170,11 @@ self._edit_grp.part.state.name = st_name - def _state_class_from_part_type_get(self, part): - # FIXME: find a way of not replicating this check - st_class = objects_data.State - if part.type == edje.EDJE_PART_TYPE_IMAGE: - st_class = objects_data.StateImage - elif part.type == edje.EDJE_PART_TYPE_GRADIENT: - st_class = objects_data.StateGradient - elif part.type == edje.EDJE_PART_TYPE_TEXT: - st_class = objects_data.StateText - elif part.type == edje.EDJE_PART_TYPE_EXTERNAL: - st_class = objects_data.StateExternal - - return st_class - def _remove_state_cb(self, btn, state_name): part_name = self._edit_grp.part.name part = self._edit_grp.part_get(part_name) st_obj = part.state_get(*state_name) - st_class = self._state_class_from_part_type_get(part) + st_class = objects_data.state_class_from_part_type_get(part) state_save = st_class(st_obj) if self._remove_state_internal(state_name): @@ -210,7 +196,7 @@ curr_state = self._edit_grp.part.state.name part = self._edit_grp.part_get(part_name) st_obj = part.state_get(*curr_state) - st_class = self._state_class_from_part_type_get(part) + st_class = objects_data.state_class_from_part_type_get(part) state_save = st_class(st_obj) self._part_state_copy_from(part_name, st_from, curr_state) Modified: trunk/editje/editje/editable.py =================================================================== --- trunk/editje/editje/editable.py 2010-04-22 19:17:51 UTC (rev 48229) +++ trunk/editje/editje/editable.py 2010-04-22 19:46:23 UTC (rev 48230) @@ -320,17 +320,28 @@ def close(self): self._swapfile.close() + def _empty_animations_clear(self): + anim_del_lst = [] + for anim in self.animations: + prog = self.program_get("@%s@0.00" % anim) + if not prog.targets: + anim_del_lst.append(anim) + + for a in anim_del_lst: + self.animation_del(a) + def save(self): -# if self._modified: + self._empty_animations_clear() + if self._edje.save_all(): self._swapfile.save() self.event_emit("saved") else: self.event_emit("saved.error") -# else: -# print "No changes after last save" def save_as(self, path, mode=None): + self._empty_animations_clear() + if self._edje.save_all(): self._swapfile.save(path, mode) self.event_emit("filename.changed", path) @@ -503,10 +514,10 @@ self.callback_add("programs.changed", self._animations_reload_cb) def _animations_reload_cb(self, emissor, data): - self._animations = map(lambda x: x[1:x.rindex("@")], - filter(lambda x: x.startswith("@") and - x.endswith("@end"), - self.programs)) + self._animations = \ + map(lambda x: x[1:x.rindex("@")], + filter(lambda x: x.startswith("@") and x.endswith("@end"), + self.programs)) self.event_emit("animations.changed", self.animations) def animation_add(self, name, parts=None): Modified: trunk/editje/editje/editable_animation.py =================================================================== --- trunk/editje/editje/editable_animation.py 2010-04-22 19:17:51 UTC (rev 48229) +++ trunk/editje/editje/editable_animation.py 2010-04-22 19:46:23 UTC (rev 48230) @@ -174,7 +174,9 @@ self.parts[part] = True # Re-set current state to make sure everything is consistent - self._state_set(self._current) + curr = self._current + self._current = None + self._state_set(curr) self.event_emit("part.added", part) Modified: trunk/editje/editje/objects_data.py =================================================================== --- trunk/editje/editje/objects_data.py 2010-04-22 19:17:51 UTC (rev 48229) +++ trunk/editje/editje/objects_data.py 2010-04-22 19:46:23 UTC (rev 48230) @@ -43,6 +43,7 @@ class Part(Object): def __init__(self, obj): Object.__init__(self, obj.name) + st_class = state_class_from_part_type_get(obj) self["above"] = obj.above_get() self["below"] = obj.below_get() @@ -62,23 +63,13 @@ dragable["confine"] = obj.drag_confine dragable["events"] = obj.drag_event - self._class = State - if self._type == edje.EDJE_PART_TYPE_IMAGE: - self._class = StateImage - elif self._type == edje.EDJE_PART_TYPE_GRADIENT: - self._class = StateGradient - elif self._type == edje.EDJE_PART_TYPE_TEXT: - self._class = StateText - elif self._type == edje.EDJE_PART_TYPE_EXTERNAL: - self._class = StateExternal - states = [] self["states"] = states for st in obj.states: state_name, state_val = st.split(None, 1) state_val = float(state_val) state = obj.state_get(state_name, state_val) - states.append(self._class(state)) + states.append(st_class(state)) def _type_get(self): return self._type @@ -601,17 +592,7 @@ if not state: continue - type = part.type - stateclass = State - if type == edje.EDJE_PART_TYPE_IMAGE: - stateclass = StateImage - elif type == edje.EDJE_PART_TYPE_GRADIENT: - stateclass = StateGradient - elif type == edje.EDJE_PART_TYPE_TEXT: - stateclass = StateText - elif type == edje.EDJE_PART_TYPE_EXTERNAL: - stateclass = StateExternal - + stateclass = state_class_from_part_type_get(part) targets[target] = stateclass(state) def apply_to(self, obj): @@ -638,3 +619,16 @@ continue data.apply_to(state) + + +def state_class_from_part_type_get(part): + st_class = State + if part.type == edje.EDJE_PART_TYPE_IMAGE: + st_class = StateImage + elif part.type == edje.EDJE_PART_TYPE_GRADIENT: + st_class = StateGradient + elif part.type == edje.EDJE_PART_TYPE_TEXT: + st_class = StateText + elif part.type == edje.EDJE_PART_TYPE_EXTERNAL: + st_class = StateExternal + return st_class Modified: trunk/editje/editje/parts.py =================================================================== --- trunk/editje/editje/parts.py 2010-04-22 19:17:51 UTC (rev 48229) +++ trunk/editje/editje/parts.py 2010-04-22 19:46:23 UTC (rev 48230) @@ -188,11 +188,64 @@ self._edit_grp.part_add_bydata(name, part_save, saved_relatives) + def anims_restore(part_name, anims_save): + curr_anim = self._edit_grp.animation.name + self._edit_grp.animation.name = None + + part_obj = self._edit_grp.part_get(part_name) + + for name, contents in anims_save.iteritems(): + for time, st_save in contents: + p_name = "@%s@%.2f" % (name, time) + + # state should exist by objects_data.Part.apply_to + state = part_obj.state_get(p_name, 0.0) + st_save.apply_to(state) + + prog = self._edit_grp.program_get(p_name) + prog.target_add(part_name) + + self._edit_grp.animation.name = curr_anim + if self._edit_grp.mode == "Parts": + self._edit_grp.part.state.name = "default 0.0" + + def relative_animations_part_clear(part_name): + anims = {} + + curr_anim = self._edit_grp.animation.name + part_obj = self._edit_grp.part_get(part_name) + + for anim in self._edit_grp.animations: + prog = self._edit_grp.program_get("@%s@0.00" % anim) + if not part_name in prog.targets: + continue + + anims[anim] = [] + + time = prog.name[-4:] + while time != "@end": + st_cls = objects_data.state_class_from_part_type_get( + part_obj) + st_save = st_cls(part_obj.state_get(prog.name, 0.0)) + + # we gotta clean editable_animation's data for curr_anim + if anim != curr_anim: + prog.target_del(part_name) + + anims[anim].append((float(time), st_save)) + prog = self._edit_grp.program_get(prog.afters[0]) + time = prog.name[-4:] + + if curr_anim: + self._edit_grp.animation.part_remove(part_name) + + return anims + for to_del in self.selected: part_name = to_del[0] part_save = objects_data.Part(self._edit_grp.part_get(part_name)) - relatives = self._edit_grp.relative_parts_get(part_name) + anims_save = relative_animations_part_clear(part_name) r = self._edit_grp.part_del(part_name) if not r: @@ -200,8 +253,10 @@ continue op = Operation("part deletion") + op.redo_callback_add(relative_animations_part_clear, part_name) op.redo_callback_add(self._edit_grp.part_del, part_name) op.undo_callback_add(part_restore, part_save, relatives) + op.undo_callback_add(anims_restore, part_name, anims_save) self._operation_stack_cb(op) def remove(self, item): |
From: Enlightenment S. <no-...@en...> - 2010-04-22 20:56:17
|
Log: Missing button disabling. Author: glima Date: 2010-04-22 13:56:11 -0700 (Thu, 22 Apr 2010) New Revision: 48234 Modified: trunk/editje/editje/editje.py Modified: trunk/editje/editje/editje.py =================================================================== --- trunk/editje/editje/editje.py 2010-04-22 20:53:16 UTC (rev 48233) +++ trunk/editje/editje/editje.py 2010-04-22 20:56:11 UTC (rev 48234) @@ -486,6 +486,7 @@ sz = len(self._op_stack) - 1 if self._op_stack_ptr != sz: del self._op_stack[self._op_stack_ptr + 1:] + self.main_edje.signal_emit("redo.bt,disable", "") self._op_stack.append([op, mode]) |
From: Enlightenment S. <no-...@en...> - 2010-04-22 22:12:31
|
Log: Code replication-- Author: glima Date: 2010-04-22 15:12:22 -0700 (Thu, 22 Apr 2010) New Revision: 48236 Modified: trunk/editje/editje/animations.py Modified: trunk/editje/editje/animations.py =================================================================== --- trunk/editje/editje/animations.py 2010-04-22 21:10:16 UTC (rev 48235) +++ trunk/editje/editje/animations.py 2010-04-22 22:12:22 UTC (rev 48236) @@ -407,7 +407,7 @@ op = Operation("animation (%s) frame (%s) creation" % \ (self.e.animation.name, t)) op.redo_callback_add(self.e.animation.state_add, t) - op.redo_callback_add(setattr, self.e.animation.state, t) + op.redo_callback_add(setattr, self.e.animation, "state", t) op.undo_callback_add(self._remove_time_point, t) self._operation_stack_cb(op) @@ -536,26 +536,28 @@ if not self.e.animation.name_set(value): self._header_table["name"].value = self.e.animation.name + def _context_recall(self, **kargs): + self.e.animation.name = kargs["animation"] + self.e.animation.state = kargs["time"] + self.e.part.name = kargs["part"] + self.e.part.state.name = kargs["state"] + + def _prop_object_get(self): + return self.e.animation.program + + def _prop_old_values_get(self, prop_attrs, is_external): + old_values = [] + prog = self._prop_object_get() + + for i, p in enumerate(prop_attrs): + old_values.append(getattr(prog, p)) + + return old_values + def prop_value_changed(self, prop, value, group): if prop == "transition": + args = [["main"], [prop], [self._transitions.index(value[0])], + [None], [False], + [lambda x: (self._transitions[x], value[1])]] - def transition_set(animation, state, transition): - self.e.animation.name = animation - self.e.animation.state = state - self.e.animation.program.transition = transition - value = self["main"]["transition"].value - value = (self._transitions[transition], value[1]) - self["main"]["transition"].value = value - - op = Operation("animation state transition") - op.undo_callback_add(transition_set, - self.e.animation.name, - self.e.animation.state, - self.e.animation.program.transition) - t = self["main"]["transition"]["type"] - self.e.animation.program.transition = self._transitions.index(t) - op.redo_callback_add(transition_set, - self.e.animation.name, - self.e.animation.state, - self.e.animation.program.transition) - self._operation_stack_cb(op) + self._prop_change_do("animation state transition", *args) |
From: Enlightenment S. <no-...@en...> - 2010-04-23 21:08:22
|
Log: More undo actions, now for signals. Some refactoring which was needed to ship it also going. Report any regressions, if any, please. TODO: signal info recording, in order to do signal deletion undo/redo. Author: glima Date: 2010-04-23 14:08:14 -0700 (Fri, 23 Apr 2010) New Revision: 48257 Modified: trunk/editje/editje/animations.py trunk/editje/editje/details.py trunk/editje/editje/details_group.py trunk/editje/editje/details_part.py trunk/editje/editje/details_widget_actionslist.py trunk/editje/editje/editable.py trunk/editje/editje/editable_animation.py trunk/editje/editje/editable_program.py trunk/editje/editje/editje.py trunk/editje/editje/signals.py Modified: trunk/editje/editje/animations.py =================================================================== --- trunk/editje/editje/animations.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/animations.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -545,15 +545,6 @@ def _prop_object_get(self): return self.e.animation.program - def _prop_old_values_get(self, prop_attrs, is_external): - old_values = [] - prog = self._prop_object_get() - - for i, p in enumerate(prop_attrs): - old_values.append(getattr(prog, p)) - - return old_values - def prop_value_changed(self, prop, value, group): if prop == "transition": args = [["main"], [prop], [self._transitions.index(value[0])], Modified: trunk/editje/editje/details.py =================================================================== --- trunk/editje/editje/details.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/details.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -206,24 +206,36 @@ open_disable = property(_open_disable_get, _open_disable_set) + # most general form, specialise if needed def _context_recall(self, **kargs): self.e.part.name = kargs["part"] self.e.part.state.name = kargs["state"] + # most general form, specialise if needed + def _prop_old_values_get(self, prop_attrs, is_external): + old_values = [] + obj = self._prop_object_get() + + for i, p in enumerate(prop_attrs): + old_values.append(getattr(obj, p)) + + return old_values + def _prop_change_do(self, op_name, prop_groups, prop_names, prop_values, prop_attrs, is_external, filters): - def set_property(part_name, state_name, anim_name, frame, prop_attrs, - prop_names, prop_values, is_external, filter_, - reverse=False): + def set_property(part_name, state_name, anim_name, frame, sig_name, + prop_attrs, prop_names, prop_values, is_external, + filter_, reverse=False): if reverse: efunc = lambda l: izip(xrange(len(l) - 1, -1, -1), reversed(l)) else: efunc = enumerate - self._context_recall(part=part_name, state=state_name, - animation=anim_name, time=frame) + self._context_recall( + part=part_name, state=state_name, animation=anim_name, + time=frame, signal=sig_name) for i, p in efunc(prop_attrs): if is_external[i]: @@ -245,11 +257,6 @@ "One must implement self._prop_object_get for" " EditjeDetails children classes.") - if not self._prop_old_values_get: - raise NotImplementedError( - "One must implement self._prop_old_values_get() for" - " EditjeDetails children classes.") - l = len(prop_groups) for arg in (prop_names, prop_values, prop_attrs, is_external, filters): @@ -263,6 +270,9 @@ anim_name = self.e.animation.name frame = self.e.animation.state + # signals' only + sig_name = self.e.signal.name + old_values = [] for i, p in enumerate(prop_attrs): if not p: @@ -270,16 +280,16 @@ old_values = self._prop_old_values_get(prop_attrs, is_external) - set_property(part_name, state_name, anim_name, frame, - prop_attrs, prop_names, prop_values, - is_external, filters) + set_property(part_name, state_name, anim_name, frame, sig_name, + prop_attrs, prop_names, prop_values, is_external, filters) op = Operation(op_name) op.redo_callback_add( - set_property, part_name, state_name, anim_name, frame, prop_attrs, - prop_names, prop_values, is_external, filters) + set_property, part_name, state_name, anim_name, frame, sig_name, + prop_attrs, prop_names, prop_values, is_external, filters) op.undo_callback_add( - set_property, part_name, state_name, anim_name, frame, prop_attrs, - prop_names, old_values, is_external, filters, True) + set_property, part_name, state_name, anim_name, frame, sig_name, + prop_attrs, prop_names, old_values, is_external, filters, True) + self._operation_stack_cb(op) - self._operation_stack_cb(op) + return op Modified: trunk/editje/editje/details_group.py =================================================================== --- trunk/editje/editje/details_group.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/details_group.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -76,46 +76,22 @@ def _max_update(self, emissor, data): self["main"]["max"].value = data - def prop_value_changed(self, prop_name, prop_value, group_name): - if not prop_value: - return + def _context_recall(self, **kargs): + pass - if prop_name == "min": + def _prop_object_get(self): + return self.e - def min_set(values): - self.e.group_min = values + def prop_value_changed(self, prop, value, group): + if not value: + return - old_values = self.e.group_min - min_set(prop_value) - - op = Operation("group minimum size hints setting") - op.redo_callback_add(min_set, prop_value) - op.undo_callback_add(min_set, old_values) - self._operation_stack_cb(op) - - elif prop_name == "max": - - def max_set(values): - self.e.group_max = values - - old_values = self.e.group_max - max_set(prop_value) - - op = Operation("group maximum size hints setting") - op.redo_callback_add(max_set, prop_value) - op.undo_callback_add(max_set, old_values) - self._operation_stack_cb(op) - - elif prop_name == "current": - - def current_set(values): - self.e.group_size = values - self["main"]["current"].value = values - - old_values = self.e.group_size - current_set(prop_value) - - op = Operation("group current size setting") - op.redo_callback_add(current_set, prop_value) - op.undo_callback_add(current_set, old_values) - self._operation_stack_cb(op) + if prop == "min": + args = [["main"], [prop], [value], ["group_min"], [False], [None]] + self._prop_change_do("group minimum size hints setting", *args) + elif prop == "max": + args = [["main"], [prop], [value], ["group_max"], [False], [None]] + self._prop_change_do("group maximum size hints setting", *args) + elif prop == "current": + args = [["main"], [prop], [value], ["group_size"], [False], [None]] + self._prop_change_do("group current size setting", *args) Modified: trunk/editje/editje/details_part.py =================================================================== --- trunk/editje/editje/details_part.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/details_part.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -115,15 +115,6 @@ def _prop_object_get(self): return self.e.part_get(self.e.part.name) - def _prop_old_values_get(self, prop_attrs, is_external): - old_values = [] - part = self._prop_object_get() - - for i, p in enumerate(prop_attrs): - old_values.append(getattr(part, p)) - - return old_values - def _closed_cb(self, obj, emission, source): if not self.e.part.name: return Modified: trunk/editje/editje/details_widget_actionslist.py =================================================================== --- trunk/editje/editje/details_widget_actionslist.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/details_widget_actionslist.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -1,4 +1,3 @@ -# # Copyright (C) 2009 Samsung Electronics. # # This file is part of Editje. @@ -10,18 +9,17 @@ # # Editje is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with Editje. If not, see -# <http://www.gnu.org/licenses/>. +# License along with Editje. If not, see <http://www.gnu.org/licenses/>. + from details_widget_partlist import WidgetPartList from floater_opener import FloaterListOpener class WidgetActionsList(WidgetPartList): - def _floater_list_items_update(self): list = [] for item in self._list_get_cb(): Modified: trunk/editje/editje/editable.py =================================================================== --- trunk/editje/editje/editable.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/editable.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -536,13 +536,13 @@ endname = "@%s@end" % name self.program_add(endname) prog = self.program_get(endname) - prog.signal_emit("animation,end", name) + prog.signal_emit_action_set(("animation,end", name)) # START startname = "@%s@0.00" % name self.program_add(startname) prog = self.program_get(startname) - prog.state_set(startname) + prog.state_set_action_set(startname) prog.signal = "animation,play" prog.source = name prog.after_add("@%s@end" % name) Modified: trunk/editje/editje/editable_animation.py =================================================================== --- trunk/editje/editje/editable_animation.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/editable_animation.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -251,7 +251,7 @@ # Create self._edit_grp.program_add(name) prog = self._edit_grp.program_get(name) - prog.state_set(name) + prog.state_set_action_set(name) prog.transition = edje.EDJE_TWEEN_MODE_LINEAR prog.transition_time = time - prev for p in self.parts.iterkeys(): Modified: trunk/editje/editje/editable_program.py =================================================================== --- trunk/editje/editje/editable_program.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/editable_program.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -106,15 +106,45 @@ self._program.targets_clear() def state_get(self): + """ + Retrieve the program's target part, if it's action is STATE_SET, + or the program's emission string, if it is of SIGNAL_EMIT type. The + method's name confusion is an inheritance of the EdjeEdit API itself, + what should be fixed in near future. + + """ return self._program.state_get() - def state_set(self, state): + def state_set_action_set(self, target): + """ Set the program's action to "STATE_SET". + + "target" argument is the target part. This method will + override what whas set by signal_emit_action_self(). + + """ self._program.action_set(edje.EDJE_ACTION_TYPE_STATE_SET) - self._program.state_set(state) + self._program.state_set(target) - def signal_emit(self, signal, source=""): + def signal_emit_action_set(self, signal): + """ Set the program's action to "SIGNAL_EMIT". + + "signal" argument is the emission string (in case source will + fallback to the empty string) or a 2-tuple containing emission + and source strings. This method will override what whas set by + state_set_action_set(). + + """ + t = type(signal) + if t is list or t is tuple: + if len(signal) != 2: + raise TypeError("signal must either be an emission string" + " or a (emission, source) tuple/list") + emission, source = signal + else: + emission, source = signal, "" + self._program.action_set(edje.EDJE_ACTION_TYPE_SIGNAL_EMIT) - self._program.state_set(signal) + self._program.state_set(emission) self._program.state2_set(source) def _transition_get(self): Modified: trunk/editje/editje/editje.py =================================================================== --- trunk/editje/editje/editje.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/editje.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -943,8 +943,18 @@ mainbar.show() def new_sig_cb(name, type_): - return self.e.signal_add(name, type_) + r = self.e.signal_add(name, type_) + if not r: + return r + op = Operation("new signal: %s (type %s)" % (name, type_)) + + op.undo_callback_add(self.e.signal_del, name) + op.redo_callback_add(self.e.signal_add, name, type_) + self._operation_stack(op) + + return r + def sigs_list_cb(): return self.e.signals Modified: trunk/editje/editje/signals.py =================================================================== --- trunk/editje/editje/signals.py 2010-04-23 20:48:22 UTC (rev 48256) +++ trunk/editje/editje/signals.py 2010-04-23 21:08:14 UTC (rev 48257) @@ -29,6 +29,7 @@ from clist import CList from prop import Property, PropertyTable from groupselector import NameEntry +from operation import Operation class SignalsList(CList): @@ -350,7 +351,7 @@ self["main"]["delay"].show_value() self["main"]["delay"].value = self.e.signal.in_time - action = self.e.signal._program.action_get() + action = self.e.signal.action self["main"]["action"].show_value() if action == edje.EDJE_ACTION_TYPE_NONE: @@ -368,7 +369,7 @@ self.group_hide("out") self.group_show("out") - state = self.e.signal._program.state_get() + state = self.e.signal.state_get() self["out"]["signal"].show_value() if state: self["out"]["signal"].value = state @@ -385,28 +386,77 @@ self.open_set(True) self.show() - def prop_value_changed(self, prop_name, prop_value, group_name): - if group_name == "main": + def _context_recall(self, **kargs): + self.e.signal.name = kargs["signal"] + + def _prop_object_get(self): + return self.e.signal + + def prop_value_changed(self, prop, value, group): + if group == "main": tbl = self["main"] - if prop_name == "signal": - self.e.signal.signal = prop_value - tbl["signal"].value = prop_value - elif prop_name == "source": - self.e.signal.source = prop_value - tbl["source"].value = prop_value - elif prop_name == "action": - self.e.signal.afters_clear() - self.e.signal.after_add(prop_value) - fixedname = prop_value[1:prop_value.rindex("@")] - tbl["action"].value = fixedname - elif prop_name == "delay": - self.e.signal.in_time = prop_value - tbl["delay"].value = prop_value - elif group_name == "out": - tbl = self["out"] - if prop_name == "signal": - self.e.signal._program.state_set(prop_value) - tbl["signal"].value = prop_value - elif prop_name == "source": - self.e.signal._program.state2_set(prop_value) - tbl["source"].value = prop_value + + if prop == "signal": + args = [["main"], [prop], [value], [None], [False], [None]] + self._prop_change_do( + "signal's triggering action change", *args) + + elif prop == "source": + args = [["main"], [prop], [value], [None], [False], [None]] + self._prop_change_do( + "signal's source part change", *args) + + elif prop == "action": + + def afters_change(value): + self.e.signal.afters_clear() + self.e.signal.after_add(value or "") + if value: + value = value[1:value.rindex("@")] + self["main"]["action"].value = value + + afters = self.e.signal.afters + old_val = None + if afters: + old_val = afters[0] + + op = Operation("signal's \"after\" action change") + op.redo_callback_add(afters_change, value) + op.undo_callback_add(afters_change, old_val) + self._operation_stack_cb(op) + op.redo() + + elif prop == "delay": + args = [["main"], [prop], [value], ["in_time"], [False], [None]] + self._prop_change_do( + "signal's source delay time change", *args) + + elif group == "out": + if prop == "signal": + def signal_change(value): + self.e.signal.signal_emit_action_set(val) + self["out"]["signal"].value = value[0] + + val = [value, self["out"]["source"].value] + old_val = [self["out"]["signal"].value, val[1]] + + op = Operation("signal's \"out\" emission change") + op.redo_callback_add(signal_change, val) + op.undo_callback_add(signal_change, old_val) + self._operation_stack_cb(op) + op.redo() + + elif prop == "source": + def source_change(value): + self.e.signal.signal_emit_action_set(val) + self["out"]["source"].value = value[1] + + val = [self["out"]["signal"].value, value] + old_val = [val[0], self["out"]["signal"].value] + + op = Operation("signal's \"out\" emission change") + op.redo_callback_add(source_change, val) + op.undo_callback_add(source_change, old_val) + self._operation_stack_cb(op) + op.redo() + |
From: Enlightenment S. <no-...@en...> - 2010-04-26 14:49:12
|
Log: Missing UI part hiding at mode switch. Author: glima Date: 2010-04-26 07:49:05 -0700 (Mon, 26 Apr 2010) New Revision: 48328 Modified: trunk/editje/editje/editje.py Modified: trunk/editje/editje/editje.py =================================================================== --- trunk/editje/editje/editje.py 2010-04-26 07:08:27 UTC (rev 48327) +++ trunk/editje/editje/editje.py 2010-04-26 14:49:05 UTC (rev 48328) @@ -715,6 +715,7 @@ return self._prevanim if name == "Signals": + self.main_edje.signal_emit("mode,anim,off", "editje") self.desktop_block(True) elif name == "Animations": self.main_edje.signal_emit("mode,anim,on", "editje") |
From: Enlightenment S. <no-...@en...> - 2010-04-27 19:53:07
|
Log: Signals recording at deletion, with undo/redo support. Author: glima Date: 2010-04-27 12:52:59 -0700 (Tue, 27 Apr 2010) New Revision: 48367 Modified: trunk/editje/editje/editable.py trunk/editje/editje/editje.py trunk/editje/editje/objects_data.py trunk/editje/editje/parts.py trunk/editje/editje/signals.py Modified: trunk/editje/editje/editable.py =================================================================== --- trunk/editje/editje/editable.py 2010-04-27 19:41:11 UTC (rev 48366) +++ trunk/editje/editje/editable.py 2010-04-27 19:52:59 UTC (rev 48367) @@ -404,31 +404,37 @@ self.event_emit("part.added", name) return True - def part_add_bydata(self, name, part_data, relatives=None): + def part_add_bydata(self, part_data, relatives=None): source = part_data["source"] if source is None: source = '' - if self._part_add(name, part_data.type, source): - part = self._edje.part_get(name) - part_data.apply_to(part) - # FIXME: remove double emissions - self.event_emit("part.added", name) + name = part_data.name - if relatives: - for p, st in relatives.iteritems(): - part = self.part_get(p) - for (st_name, st_value), rels in st.iteritems(): - state = part.state_get(st_name, st_value) - if rels[0]: - state.rel1_to_x_set(name) - if rels[1]: - state.rel1_to_y_set(name) - if rels[2]: - state.rel2_to_x_set(name) - if rels[3]: - state.rel2_to_y_set(name) + if not self._part_add(name, part_data.type, source): + return False + part = self._edje.part_get(name) + part_data.apply_to(part) + + if relatives: + for p, st in relatives.iteritems(): + part = self.part_get(p) + for (st_name, st_value), rels in st.iteritems(): + state = part.state_get(st_name, st_value) + if rels[0]: + state.rel1_to_x_set(name) + if rels[1]: + state.rel1_to_y_set(name) + if rels[2]: + state.rel2_to_x_set(name) + if rels[3]: + state.rel2_to_y_set(name) + + self.event_emit("part.added", name) + + return True + def _part_init(self, name): part = self._edje.part_get(name) type = part.type @@ -488,27 +494,34 @@ self.event_emit("programs.changed", self.programs) def program_add(self, name): - if self._edje.program_add(name): - self._modified = True - self.programs.append(name) - self.event_emit("program.added", name) - return True - return False + if not self._edje.program_add(name): + return False + self._modified = True + self.programs.append(name) + self.event_emit("program.added", name) + + return True + def program_del(self, name): - if self._edje.program_del(name): - self._modified = True - self.programs.remove(name) - self.event_emit("program.removed", name) - return True - return False + if not self._edje.program_del(name): + return False + self._modified = True + self.programs.remove(name) + self.event_emit("program.removed", name) + + return True + def program_get(self, program): - if program in self.programs: - prg = EditableProgram(self) - prg.name = program - return prg + if not program in self.programs: + return None + prg = EditableProgram(self) + prg.name = program + + return prg + # Animations def _animation_get(self): return self._animations @@ -607,26 +620,55 @@ self._signals = [e for e in self.programs if not e.startswith("@")] self.event_emit("signals.changed", self._signals) - def signal_add(self, name, type): - if name and not name.startswith("@"): - if self.program_add(name): - program = self.program_get(name) - program._program.action_set(type) - self._signals.append(name) - self.event_emit("signal.added", name) - self.event_emit("signals.changed", self._signals) - return True - return False + def _signal_add(self, name): + if not name or name.startswith("@"): + return False + if not self.program_add(name): + return False + + self._signals.append(name) + + return True + + def signal_add(self, name, action_type): + if not self._signal_add(name): + return False + + program = self._edje.program_get(name) + program.action_set(action_type) + + self.event_emit("signal.added", name) + self.event_emit("signals.changed", self._signals) + + return True + + def signal_add_bydata(self, sig_data): + name = sig_data.name + if not self._signal_add(name): + return False + + program = self._edje.program_get(name) + sig_data.apply_to(program) + + self.event_emit("signal.added", name) + self.event_emit("signals.changed", self._signals) + + return True + def signal_del(self, name): - if name in self._signals: - if self.program_del(name): - self._signals.remove(name) - self.event_emit("signal.removed", name) - self.event_emit("signals.changed", self._signals) - return True - return False + if not name in self._signals: + return False + if not self.program_del(name): + return False + + self._signals.remove(name) + self.event_emit("signal.removed", name) + self.event_emit("signals.changed", self._signals) + + return True + def relative_parts_get(self, part_name): relatives = dict() for p in self.parts: Modified: trunk/editje/editje/editje.py =================================================================== --- trunk/editje/editje/editje.py 2010-04-27 19:41:11 UTC (rev 48366) +++ trunk/editje/editje/editje.py 2010-04-27 19:52:59 UTC (rev 48367) @@ -94,15 +94,19 @@ super = event.modifier_is_set("Super") if key == "Delete": - if self.e.part.name: - name = self.e.part.name - relatives = self.e.relative_parts_get(name) - op = Operation("del part: " + name) - op.undo_callback_add(self.e.part_add_bydata, name, - objects_data.Part(self.e.part._part), relatives) - op.redo_callback_add(self.e.part_del, name) - self._operation_stack(op) - op.redo() + name = self.e.part.name + if not name: + return + + relatives = self.e.relative_parts_get(name) + op = Operation("part deletion: " + name) + op.undo_callback_add( + self.e.part_add_bydata, + objects_data.Part(self.e.part_get(name)), relatives) + op.redo_callback_add(self.e.part_del, name) + self._operation_stack(op) + op.redo() + elif control: if key == "x": self._cut_cb(self, None, None) @@ -536,7 +540,7 @@ name = self._clipboard.name op = Operation("cut part: " + name) - op.undo_callback_add(self.e.part_add_bydata, name, self._clipboard) + op.undo_callback_add(self.e.part_add_bydata, self._clipboard) op.redo_callback_add(self.e.part_del, name) self._operation_stack(op) op.redo() @@ -545,18 +549,19 @@ if not self.e.part.name: return False - self._clipboard = objects_data.Part(self.e.part._part) + self._clipboard = objects_data.Part(self.e.part_get(self.e.part.name)) return True def _paste_cb(self, obj, emission, source): if not self._clipboard: return - name = name_generate(self._clipboard.name, self.e.parts) + self._clipboard.name = \ + name_generate(self._clipboard.name, self.e.parts) - op = Operation("paste part: " + name) - op.undo_callback_add(self.e.part_del, name) - op.redo_callback_add(self.e.part_add_bydata, name, self._clipboard) + op = Operation("paste part: " + self._clipboard.name) + op.undo_callback_add(self.e.part_del, self._clipboard.name) + op.redo_callback_add(self.e.part_add_bydata, self._clipboard) self._operation_stack(op) op.redo() @@ -959,7 +964,8 @@ def sigs_list_cb(): return self.e.signals - list = SignalsList(self, new_sig_cb, sigs_list_cb) + list = SignalsList( + self, new_sig_cb, sigs_list_cb, self._operation_stack) list.title = "Signals" list.open = True list.options = True Modified: trunk/editje/editje/objects_data.py =================================================================== --- trunk/editje/editje/objects_data.py 2010-04-27 19:41:11 UTC (rev 48366) +++ trunk/editje/editje/objects_data.py 2010-04-27 19:52:59 UTC (rev 48367) @@ -27,8 +27,13 @@ def _name_get(self): return self._name - name = property(_name_get) + def _name_set(self, value): + self._name = value + # name setting only useful for object copying et al, where different names + # got to be used + name = property(fget=_name_get, fset=_name_set) + def apply_to(self, obj): return False @@ -437,11 +442,11 @@ def __init__(self, obj): Object.__init__(self, obj.name) - self["signal"] = obj.signal_get() - self["source"] = obj.source_get() + self["signal"] = obj.signal_get() or "" + self["source"] = obj.source_get() or "" self["action"] = obj.action_get() - self["state"] = obj.state_get() - self["state2"] = obj.state2_get() + self["state"] = obj.state_get() or "" + self["state2"] = obj.state2_get() or "" self["value"] = obj.value_get() self["transition"] = obj.transition_get() self["transition_time"] = obj.transition_time_get() Modified: trunk/editje/editje/parts.py =================================================================== --- trunk/editje/editje/parts.py 2010-04-27 19:41:11 UTC (rev 48366) +++ trunk/editje/editje/parts.py 2010-04-27 19:52:59 UTC (rev 48367) @@ -182,12 +182,6 @@ def _remove_cb(self, obj, emission, source): - def part_restore(part_save, saved_relatives): - name = part_save.name - source = part_save["source"] or "" - - self._edit_grp.part_add_bydata(name, part_save, saved_relatives) - def anims_restore(part_name, anims_save): curr_anim = self._edit_grp.animation.name self._edit_grp.animation.name = None @@ -255,7 +249,8 @@ op = Operation("part deletion") op.redo_callback_add(relative_animations_part_clear, part_name) op.redo_callback_add(self._edit_grp.part_del, part_name) - op.undo_callback_add(part_restore, part_save, relatives) + op.undo_callback_add( + self._edit_grp.part_add_bydata, part_save, relatives) op.undo_callback_add(anims_restore, part_name, anims_save) self._operation_stack_cb(op) Modified: trunk/editje/editje/signals.py =================================================================== --- trunk/editje/editje/signals.py 2010-04-27 19:41:11 UTC (rev 48366) +++ trunk/editje/editje/signals.py 2010-04-27 19:52:59 UTC (rev 48367) @@ -30,15 +30,18 @@ from prop import Property, PropertyTable from groupselector import NameEntry from operation import Operation +import objects_data class SignalsList(CList): - def __init__(self, parent, new_sig_cb, sigs_list_cb): + def __init__(self, parent, new_sig_cb, sigs_list_cb, operation_stack_cb): CList.__init__(self, parent) self.e = parent.e self._new_sig_cb = new_sig_cb self._sigs_list_cb = sigs_list_cb + self._operation_stack_cb = operation_stack_cb + self._options_load() self.options = True @@ -100,10 +103,21 @@ sig_wiz.open() def _remove_cb(self, obj, emission, source): - for i in self.selected: - self.e.signal_del(i[0]) + for to_del in self.selected: + sig_name = to_del[0] + sig_save = objects_data.Program(self.e.edje.program_get(sig_name)) + r = self.e.signal_del(sig_name) + if not r: + del sig_save + continue + op = Operation("signal deletion") + op.redo_callback_add(self.e.signal_del, sig_name) + op.undo_callback_add(self.e.signal_add_bydata, sig_save) + self._operation_stack_cb(op) + + class SignalTypesButtons(edje.Edje): def __init__(self, parent, type_select_cb=None): edje.Edje.__init__(self, parent.evas) @@ -329,8 +343,8 @@ def _update(self, emissor, data): self._header_table["name"].value = data self._header_table["name"].show_value() - self._header_table["name"].value_obj._values_dict["n"].disabled_set( - False) + # self._header_table["name"].value_obj._values_dict["n"].disabled_set( + # False) signal = self.e.signal.signal self["main"]["signal"].show_value() @@ -427,12 +441,14 @@ op.redo() elif prop == "delay": - args = [["main"], [prop], [value], ["in_time"], [False], [None]] + args = [["main"], [prop], [value], ["in_time"], [False], + [None]] self._prop_change_do( "signal's source delay time change", *args) elif group == "out": if prop == "signal": + def signal_change(value): self.e.signal.signal_emit_action_set(val) self["out"]["signal"].value = value[0] @@ -447,6 +463,7 @@ op.redo() elif prop == "source": + def source_change(value): self.e.signal.signal_emit_action_set(val) self["out"]["source"].value = value[1] @@ -454,9 +471,8 @@ val = [self["out"]["signal"].value, value] old_val = [val[0], self["out"]["signal"].value] - op = Operation("signal's \"out\" emission change") + op = Operation("signal's \"out\" source change") op.redo_callback_add(source_change, val) op.undo_callback_add(source_change, old_val) self._operation_stack_cb(op) op.redo() - |
From: Enlightenment S. <no-...@en...> - 2010-04-28 15:15:02
|
Log: Fixing dangling references to EdjeEdit object laying around. Also preventing use of that ref out of the property getter. Author: glima Date: 2010-04-28 08:14:55 -0700 (Wed, 28 Apr 2010) New Revision: 48395 Modified: trunk/editje/editje/desktop.py trunk/editje/editje/editable.py Modified: trunk/editje/editje/desktop.py =================================================================== --- trunk/editje/editje/desktop.py 2010-04-28 14:58:27 UTC (rev 48394) +++ trunk/editje/editje/desktop.py 2010-04-28 15:14:55 UTC (rev 48395) @@ -50,7 +50,7 @@ def _group_load(self, emissor, data): if data: - self._view.group = self.e._edje + self._view.group = self.e.edje else: self._view.group = None Modified: trunk/editje/editje/editable.py =================================================================== --- trunk/editje/editje/editable.py 2010-04-28 14:58:27 UTC (rev 48394) +++ trunk/editje/editje/editable.py 2010-04-28 15:14:55 UTC (rev 48395) @@ -40,7 +40,7 @@ self._mode_get_cb = mode_get_cb self._group = "" - self._edje = None + self.__edje = None self.part = EditablePart(self) self.animation = EditableAnimation(self) @@ -61,7 +61,7 @@ # Edje def _edje_get(self): - return self._edje + return self.__edje edje = property(_edje_get) @@ -84,13 +84,13 @@ if not value: value = "" self.event_emit("group.changed", value) - self._edje and self._edje.delete() - self._edje = None + self.__edje and self.__edje.delete() + self.__edje = None self._edje_group = None else: - self._edje = EdjeEdit( + self.__edje = EdjeEdit( self._canvas, file=self._swapfile.workfile, group=value) - self._edje_group = self._edje.current_group + self._edje_group = self.__edje.current_group self.event_emit("group.changed", value) self._group = value @@ -98,20 +98,22 @@ group = property(_group_get, _group_set) def group_add(self, grp_name): - if not self._edje: - self._edje = EdjeEdit( + if not self.__edje: + self.__edje = EdjeEdit( self._canvas, file=self._swapfile.workfile, group=edje.file_collection_list(self._swapfile.workfile)[0]) + self.event_emit("group.changed", self.group) - return self._edje.group_add(grp_name) + return self.__edje.group_add(grp_name) def group_exists(self, grp_name): - if not self._edje: - self._edje = EdjeEdit( + if not self.__edje: + self.__edje = EdjeEdit( self._canvas, file=self._swapfile.workfile, group=edje.file_collection_list(self._swapfile.workfile)[0]) + self.event_emit("group.changed", self.group) - return self._edje.group_exist(grp_name) + return self.__edje.group_exist(grp_name) def group_del(self, grp_name): dummy_grp = None @@ -124,7 +126,7 @@ if not dummy_grp: return False - if not self._edje or self._group == grp_name: + if not self.__edje or self._group == grp_name: self.group = "" dummy_edje = EdjeEdit( @@ -133,14 +135,14 @@ dummy_edje.delete() return r - return self._edje.group_del(grp_name) + return self.__edje.group_del(grp_name) def group_rename(self, name): if not self._group: return False if not name: return False - if self._edje.group_exist(name): + if self.__edje.group_exist(name): return False self._edje_group.rename(name) @@ -166,7 +168,7 @@ self._min = (self._edje_group.w_min, self._edje_group.h_min) self.event_emit("group.min.changed", self._min) - data = self._edje.group_data_get(self.pref_size_key) + data = self.__edje.group_data_get(self.pref_size_key) if not data: w, h = self.default_display_size @@ -208,8 +210,8 @@ group_w, group_h = self.group_size min_w, min_h = self._min - w = self._verify_max_w(w, group_w, group_h, min_w, self._edje) - h = self._verify_max_h(h, group_w, group_h, min_h, self._edje) + w = self._verify_max_w(w, group_w, group_h, min_w, self.__edje) + h = self._verify_max_h(h, group_w, group_h, min_h, self.__edje) self._edje_group.h_max = h self._max = (w, h) self.event_emit("group.max.changed", self._max) @@ -247,8 +249,8 @@ group_w, group_h = self.group_size max_w, max_h = self._max - w = self._verify_min_w(w, group_w, group_h, max_w, self._edje) - h = self._verify_min_h(h, group_w, group_h, max_h, self._edje) + w = self._verify_min_w(w, group_w, group_h, max_w, self.__edje) + h = self._verify_min_h(h, group_w, group_h, max_h, self.__edje) self._edje_group.w_min = w self._edje_group.h_min = h self._min = (w, h) @@ -278,12 +280,12 @@ h = max_h self._size = (w, h) - self._edje.size = (w, h) + self.__edje.size = (w, h) - value = self._edje.group_data_get(self.pref_size_key) + value = self.__edje.group_data_get(self.pref_size_key) if not value: - self._edje.group_data_add(self.pref_size_key, "0x0") - self._edje.group_data_set(self.pref_size_key, "%dx%d" % self._size) + self.__edje.group_data_add(self.pref_size_key, "0x0") + self.__edje.group_data_set(self.pref_size_key, "%dx%d" % self._size) self.event_emit("group.size.changed", self._size) @@ -333,22 +335,24 @@ def save(self): self._empty_animations_clear() - if self._edje.save_all(): + if self.__edje.save_all(): self._swapfile.save() self.event_emit("saved") # FIXME: Workaround that solves a probably bug on # swapfile class that don't allow to add a new group after saving # the file being edited - self._edje = EdjeEdit( + self.__edje = EdjeEdit( self._canvas, file=self._swapfile.workfile, group=self._group) + self.event_emit("group.changed", self.group) + else: self.event_emit("saved.error") def save_as(self, path, mode=None): self._empty_animations_clear() - if self._edje.save_all(): + if self.__edje.save_all(): self._swapfile.save(path, mode) self.event_emit("filename.changed", path) self.event_emit("saved") @@ -368,13 +372,13 @@ def _parts_load_cb(self, emissor, data): if data: - self.parts = self._edje.parts + self.parts = self.__edje.parts else: self.parts = [] self.event_emit("parts.changed", self.parts) def _parts_reload_cb(self, emissor, data): - self.parts = self._edje.parts + self.parts = self.__edje.parts self.event_emit("parts.changed", self.parts) # TODO: externals API may change in near future @@ -382,14 +386,14 @@ # when type is external), there is no external_del (not even indirectly # called def external_add(self, module): - return self._edje.external_add(module) + return self.__edje.external_add(module) def _part_add(self, name, type, source): if type == edje.EDJE_PART_TYPE_EXTERNAL: external = edje.external_type_get(source) if external: - self._edje.external_add(external.module) - return self._edje.part_add(name, type, source) + self.__edje.external_add(external.module) + return self.__edje.part_add(name, type, source) def part_add(self, name, type, source="", init=None): if not self._part_add(name, type, source): @@ -414,7 +418,7 @@ if not self._part_add(name, part_data.type, source): return False - part = self._edje.part_get(name) + part = self.__edje.part_get(name) part_data.apply_to(part) if relatives: @@ -436,11 +440,11 @@ return True def _part_init(self, name): - part = self._edje.part_get(name) + part = self.__edje.part_get(name) type = part.type state = part.state_get(*part.state_selected_get()) - w, h = self._edje.size + w, h = self.__edje.size state.rel1_to = (None, None) state.rel1_relative = (0.0, 0.0) @@ -454,7 +458,7 @@ part.mouse_events = False elif type == edje.EDJE_PART_TYPE_IMAGE: - images = self._edje.images + images = self.__edje.images if images: state.image = images[0] @@ -468,13 +472,13 @@ return part def part_get(self, part_name): - return self._edje.part_get(part_name) + return self.__edje.part_get(part_name) def part_object_get(self, part_name): - return self._edje.part_object_get(part_name) + return self.__edje.part_object_get(part_name) def part_del(self, name): - if self._edje.part_del(name): + if self.__edje.part_del(name): self._modified = True self.event_emit("part.removed", name) return True @@ -487,14 +491,14 @@ def _programs_reload_cb(self, emissor, data): if data: - self.programs = self._edje.programs + self.programs = self.__edje.programs else: self.programs = [] self.event_emit("programs.changed", self.programs) def program_add(self, name): - if not self._edje.program_add(name): + if not self.__edje.program_add(name): return False self._modified = True @@ -504,7 +508,7 @@ return True def program_del(self, name): - if not self._edje.program_del(name): + if not self.__edje.program_del(name): return False self._modified = True @@ -566,7 +570,7 @@ parts = self.parts for p in parts: prog.target_add(p) - part = self._edje.part_get(p) + part = self.__edje.part_get(p) part.state_add(startname) state = part.state_get(statename) state.copy_from(prevstatename) @@ -594,7 +598,7 @@ for p in stopprog.targets: prog = self.program_get(p) for pp in prog.targets: - part = self._edje.part_get(pp) + part = self.__edje.part_get(pp) if part: part.state_selected_set("default") part.state_del(p) @@ -635,7 +639,7 @@ if not self._signal_add(name): return False - program = self._edje.program_get(name) + program = self.__edje.program_get(name) program.action_set(action_type) self.event_emit("signal.added", name) @@ -648,7 +652,7 @@ if not self._signal_add(name): return False - program = self._edje.program_get(name) + program = self.__edje.program_get(name) sig_data.apply_to(program) self.event_emit("signal.added", name) @@ -673,7 +677,7 @@ relatives = dict() for p in self.parts: saved_states = dict() - part = self._edje.part_get(p) + part = self.__edje.part_get(p) for st in part.states: st_name, value = st.split() st_value = float(value) |
From: Enlightenment S. <no-...@en...> - 2010-04-28 18:51:35
|
Log: Okay, no more retroactive undo/redo hooks, I guess. Author: glima Date: 2010-04-28 11:51:27 -0700 (Wed, 28 Apr 2010) New Revision: 48399 Modified: trunk/editje/editje/animations.py trunk/editje/editje/parts.py Modified: trunk/editje/editje/animations.py =================================================================== --- trunk/editje/editje/animations.py 2010-04-28 18:40:05 UTC (rev 48398) +++ trunk/editje/editje/animations.py 2010-04-28 18:51:27 UTC (rev 48399) @@ -118,6 +118,40 @@ if self._edit_grp.animation_add(name): anim_save.apply_to(self._edit_grp) + def sigs_restore(anim_name, sigs_save): + curr_sig = self._edit_grp.signal.name + self._edit_grp.signal.name = None + + pname = "@%s@0.00" % anim_name + + for sig in sigs_save: + prog = self._edit_grp.program_get(sig) + prog.afters_clear() + prog.after_add(pname) + + self._edit_grp.signal.name = curr_sig + + def relative_signals_anim_clear(anim_name): + sigs = [] + + curr_sig = self._edit_grp.signal.name + self._edit_grp.signal.name = None + + pname = "@%s@0.00" % anim_name + + for sig in self._edit_grp.signals: + prog = self._edit_grp.program_get(sig) + afters = prog.afters + if afters and pname != afters[0]: + continue + + prog.afters_clear() + sigs.append(sig) + + self._edit_grp.signal.name = curr_sig + + return sigs + for s in self.selected: anim_name = s[0] pname = "@%s@stop" % anim_name @@ -129,9 +163,14 @@ del anim_data continue + sigs_save = relative_signals_anim_clear(anim_name) + op = Operation("animation deletion: %s" % anim_name) + op.redo_callback_add(relative_signals_anim_clear, anim_name) op.redo_callback_add(self._edit_grp.animation_del, anim_name) op.undo_callback_add(anim_restore, anim_data) + op.undo_callback_add(sigs_restore, anim_name, sigs_save) + self._operation_stack_cb(op) Modified: trunk/editje/editje/parts.py =================================================================== --- trunk/editje/editje/parts.py 2010-04-28 18:40:05 UTC (rev 48398) +++ trunk/editje/editje/parts.py 2010-04-28 18:51:27 UTC (rev 48399) @@ -203,6 +203,16 @@ if self._edit_grp.mode == "Parts": self._edit_grp.part.state.name = "default 0.0" + def sigs_restore(part_name, sigs_save): + curr_sig = self._edit_grp.signal.name + self._edit_grp.signal.name = None + + for sig in sigs_save: + prog = self._edit_grp.program_get(sig) + prog.source = part_name + + self._edit_grp.signal.name = curr_sig + def relative_animations_part_clear(part_name): anims = {} @@ -235,23 +245,49 @@ return anims + # FIXME/TODO: when the "source" property's floater box of general + # purpose signals get properly populated with the group's parts, + # also save the participation of the part being deleted on that signal + def relative_signals_part_clear(part_name): + sigs = [] + + curr_sig = self._edit_grp.signal.name + self._edit_grp.signal.name = None + + for sig in self._edit_grp.signals: + prog = self._edit_grp.program_get(sig) + if part_name != prog.source: + continue + + prog.source = "" + sigs.append(sig) + + self._edit_grp.signal.name = curr_sig + + return sigs + for to_del in self.selected: part_name = to_del[0] part_save = objects_data.Part(self._edit_grp.part_get(part_name)) relatives = self._edit_grp.relative_parts_get(part_name) - anims_save = relative_animations_part_clear(part_name) r = self._edit_grp.part_del(part_name) if not r: del part_save continue + anims_save = relative_animations_part_clear(part_name) + sigs_save = relative_signals_part_clear(part_name) + op = Operation("part deletion") op.redo_callback_add(relative_animations_part_clear, part_name) + op.redo_callback_add(relative_signals_part_clear, part_name) op.redo_callback_add(self._edit_grp.part_del, part_name) op.undo_callback_add( self._edit_grp.part_add_bydata, part_save, relatives) op.undo_callback_add(anims_restore, part_name, anims_save) + op.undo_callback_add(sigs_restore, part_name, sigs_save) + self._operation_stack_cb(op) def remove(self, item): |