def apply_to(self, obj): state_name = obj.name edj = obj.edje_get() 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"].items(): obj.target_add(target) part = edj.part_get(target) if not part: continue if not part.state_add(state_name): continue state = part.state_get(state_name) if not state: continue data.apply_to(state)
def __init__(self, obj): prog = re_anim_program_stop.match(obj.name) if not prog: 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() self["parts"] = None frames = {} self["frames"] = frames for target in obj.targets_get(): program = edj.program_get(target) if not program: continue time = re_anim_program.match(program.name).group(2) if time == "end": continue time = float(time) frames[time] = AnimationFrame(program) if not self["parts"]: self["parts"] = frames[time]["targets"].keys()
def prop_value_changed(self, prop, value, group): if group == "main": if prop == "signal": args = [["main"], [prop], [value], [None], [False], [None]] self._prop_change_do("signal's triggering action change", *args) self["main"].property_del("source") if value == "animation,end": self["main"].property_add(self._prop_source_animations, 1) else: self["main"].property_add(self._prop_source_parts, 1) elif prop == "source": args = [["main"], [prop], [value], [None], [False], [None]] self._prop_change_do("signal's source part change", *args) elif prop == "delay": args = [["main"], [prop], [value], ["in_time"], [False], [None]] self._prop_change_do("signal's source delay time change", *args) elif group == "actions": def afters_change(afters, sig_name): self._context_recall(signal=sig_name) self.e.signal.afters_clear() for i in range(len(afters)): self.e.signal.after_add(afters[i]) self._update(self._emissor, self._data) old_afters = self.e.signal._afters_get() new_afters = self.e.signal._afters_get() if value in old_afters: value = re_anim_program.match(value).groups()[0] self._notify("Error: " + value + " is already in the list") self._update(self._emissor, self._data) return action_number = int(re.match("action (\d+)", prop).group(1)) if value: if action_number <= len(new_afters): new_afters[action_number - 1] = value else: new_afters.append(value) elif action_number <= len(new_afters): new_afters.pop(action_number - 1) conflicting_after = self._conflicting_animation_get( new_afters, value) if conflicting_after and conflicting_after != value: conflicting_after = re_anim_program.match( conflicting_after).groups()[0] self._notify("Error: this animation conflicts with " + conflicting_after + ".<br>" "There are parts in common being animated.") self._update(self._emissor, self._data) return op = Operation("signal's \"after\" action change") op.redo_callback_add(afters_change, new_afters, self.e.signal.name) op.undo_callback_add(afters_change, old_afters, self.e.signal.name) self._operation_stack_cb(op) op.redo() elif group == "out": if prop == "signal": def signal_change(value, sig_name): self._context_recall(signal=sig_name) self.e.signal.signal_emit_action_set(value) self["out"]["signal"].value = value[0] val = [value, self["out"]["source"].value] old_val = [self.e.signal.state_get() or "", val[1]] op = Operation("signal's \"out\" emission change") op.redo_callback_add(signal_change, val, self.e.signal.name) op.undo_callback_add(signal_change, old_val, self.e.signal.name) self._operation_stack_cb(op) op.redo() elif prop == "source": def source_change(value, sig_name): self._context_recall(signal=sig_name) self.e.signal.signal_emit_action_set(value) self["out"]["source"].value = value[1] val = [self["out"]["signal"].value, value] old_val = [val[0], self.e.signal.state2_get() or ""] op = Operation("signal's \"out\" source change") op.redo_callback_add(source_change, val, self.e.signal.name) op.undo_callback_add(source_change, old_val, self.e.signal.name) self._operation_stack_cb(op) op.redo() elif group == "api": if prop == "name": def api_name_change(value, sig_name): self._context_recall(signal=sig_name) self.e.signal.api = value self["api"]["name"].value = value[0] val = [value, self.e.signal.api[1]] old_val = [self.e.signal.api[0], val[1]] op = Operation("program's api name change") op.redo_callback_add(api_name_change, val, self.e.signal.name) op.undo_callback_add(api_name_change, old_val, self.e.signal.name) self._operation_stack_cb(op) op.redo() if prop == "description": def api_description_change(value, sig_name): self._context_recall(signal=sig_name) self.e.signal.api = value self["api"]["description"].value = value[1] val = [self.e.signal.api[0], value] old_val = [val[0], self.e.signal.api[1]] op = Operation("program's api description change") op.redo_callback_add(api_description_change, val, self.e.signal.name) op.undo_callback_add(api_description_change, old_val, self.e.signal.name) self._operation_stack_cb(op) op.redo() if prop == "export": def api_export_change(value, sig_name, export): self._context_recall(signal=sig_name) self.e.signal.api_export = export self.e.signal.api = value self._update_api_props(export, value) export = value old_export = self.e.signal.api_export old_val = [self.e.signal.api[0], self.e.signal.api[1]] val = [None, None] op = Operation("program's api description change") op.redo_callback_add(api_export_change, val, self.e.signal.name, export) op.undo_callback_add(api_export_change, old_val, self.e.signal.name, old_export) self._operation_stack_cb(op) op.redo()
def _update(self, emissor, data): self._emissor = emissor self._data = data self._header_table["name"].value = self.e.signal.name self._header_table["name"].show_value() self._header_table["name"].value_obj._values_dict["n"].disabled_set( False) signal = self.e.signal.signal self["main"]["signal"].show_value() if signal: self["main"]["signal"].value = signal else: self.e.signal.signal = "" self["main"]["signal"].value = "" source = self.e.signal.source self["main"]["source"].show_value() if source: self["main"]["source"].value = source else: self.e.signal.source = "" self["main"]["source"].value = "" self["main"]["delay"].show_value() self["main"]["delay"].value = self.e.signal.in_time action = self.e.signal.action self._update_api_props(self.e.signal.api_export, self.e.signal.api) self.group_hide("api") self.group_show("api") if action == edje.EDJE_ACTION_TYPE_NONE: afters = self.e.signal.afters while (self._actions_added < len(afters) + 1): self._actions_added = self._actions_added + 1 self._new_action(self._actions_added) for i in range(self._actions_added): self["actions"]["action " + str(i + 1)].hide() for i in range(len(afters)): self["actions"]["action " + str(i + 1)].show_value() self["actions"]["action " + str(i + 1)].show() fixedname = re_anim_program.match(afters[i]).groups()[0] self["actions"]["action " + str(i + 1)].value = fixedname # The last action with none value self["actions"]["action " + str(len(afters) + 1)].show_value() self["actions"]["action " + str(len(afters) + 1)].show() self["actions"]["action " + str(len(afters) + 1)].value = "" self.group_hide("out") self.group_hide("actions") self.group_show("actions") elif action == edje.EDJE_ACTION_TYPE_SIGNAL_EMIT: self.group_hide("actions") self.group_hide("out") self.group_show("out") state = self.e.signal.state_get() self["out"]["signal"].show_value() if state: self["out"]["signal"].value = state else: self["out"]["signal"].value = "" state = self.e.signal._program.state2_get() self["out"]["source"].show_value() if state: self["out"]["source"].value = state else: self["out"]["source"].value = "" self.open_set(True) self.show()
def prop_value_changed(self, prop, value, group): if group == "main": if prop == "signal": args = [["main"], [prop], [value], [None], [False], [None]] self._prop_change_do("signal's triggering action change", *args) self["main"].property_del("source") if value == "animation,end": self["main"].property_add(self._prop_source_animations, 1) else: self["main"].property_add(self._prop_source_parts, 1) elif prop == "source": args = [["main"], [prop], [value], [None], [False], [None]] self._prop_change_do("signal's source part change", *args) elif prop == "delay": args = [["main"], [prop], [value], ["in_time"], [False], [None]] self._prop_change_do("signal's source delay time change", *args) elif group == "actions": def afters_change(afters, sig_name): self._context_recall(signal=sig_name) self.e.signal.afters_clear() for i in range(len(afters)): self.e.signal.after_add(afters[i]) self._update(self._emissor, self._data) old_afters = self.e.signal._afters_get() new_afters = self.e.signal._afters_get() if value in old_afters: value = re_anim_program.match(value).groups()[0] self._notify("Error: " + value + " is already in the list") self._update(self._emissor, self._data) return action_number = int(re.match("action (\d+)", prop).group(1)) if value: if action_number <= len(new_afters): new_afters[action_number - 1] = value else: new_afters.append(value) elif action_number <= len(new_afters): new_afters.pop(action_number - 1) conflicting_after = self._conflicting_animation_get(new_afters, value) if conflicting_after and conflicting_after != value: conflicting_after = re_anim_program.match(conflicting_after).groups()[0] self._notify( "Error: this animation conflicts with " + conflicting_after + ".<br>" "There are parts in common being animated." ) self._update(self._emissor, self._data) return op = Operation('signal\'s "after" action change') op.redo_callback_add(afters_change, new_afters, self.e.signal.name) op.undo_callback_add(afters_change, old_afters, self.e.signal.name) self._operation_stack_cb(op) op.redo() elif group == "out": if prop == "signal": def signal_change(value, sig_name): self._context_recall(signal=sig_name) self.e.signal.signal_emit_action_set(value) self["out"]["signal"].value = value[0] val = [value, self["out"]["source"].value] old_val = [self.e.signal.state_get() or "", val[1]] op = Operation('signal\'s "out" emission change') op.redo_callback_add(signal_change, val, self.e.signal.name) op.undo_callback_add(signal_change, old_val, self.e.signal.name) self._operation_stack_cb(op) op.redo() elif prop == "source": def source_change(value, sig_name): self._context_recall(signal=sig_name) self.e.signal.signal_emit_action_set(value) self["out"]["source"].value = value[1] val = [self["out"]["signal"].value, value] old_val = [val[0], self.e.signal.state2_get() or ""] op = Operation('signal\'s "out" source change') op.redo_callback_add(source_change, val, self.e.signal.name) op.undo_callback_add(source_change, old_val, self.e.signal.name) self._operation_stack_cb(op) op.redo() elif group == "api": if prop == "name": def api_name_change(value, sig_name): self._context_recall(signal=sig_name) self.e.signal.api = value self["api"]["name"].value = value[0] val = [value, self.e.signal.api[1]] old_val = [self.e.signal.api[0], val[1]] op = Operation("program's api name change") op.redo_callback_add(api_name_change, val, self.e.signal.name) op.undo_callback_add(api_name_change, old_val, self.e.signal.name) self._operation_stack_cb(op) op.redo() if prop == "description": def api_description_change(value, sig_name): self._context_recall(signal=sig_name) self.e.signal.api = value self["api"]["description"].value = value[1] val = [self.e.signal.api[0], value] old_val = [val[0], self.e.signal.api[1]] op = Operation("program's api description change") op.redo_callback_add(api_description_change, val, self.e.signal.name) op.undo_callback_add(api_description_change, old_val, self.e.signal.name) self._operation_stack_cb(op) op.redo() if prop == "export": def api_export_change(value, sig_name, export): self._context_recall(signal=sig_name) self.e.signal.api_export = export self.e.signal.api = value self._update_api_props(export, value) export = value old_export = self.e.signal.api_export old_val = [self.e.signal.api[0], self.e.signal.api[1]] val = [None, None] op = Operation("program's api description change") op.redo_callback_add(api_export_change, val, self.e.signal.name, export) op.undo_callback_add(api_export_change, old_val, self.e.signal.name, old_export) self._operation_stack_cb(op) op.redo()
def _update(self, emissor, data): self._emissor = emissor self._data = data self._header_table["name"].value = self.e.signal.name self._header_table["name"].show_value() self._header_table["name"].value_obj._values_dict["n"].disabled_set(False) signal = self.e.signal.signal self["main"]["signal"].show_value() if signal: self["main"]["signal"].value = signal else: self.e.signal.signal = "" self["main"]["signal"].value = "" source = self.e.signal.source self["main"]["source"].show_value() if source: self["main"]["source"].value = source else: self.e.signal.source = "" self["main"]["source"].value = "" self["main"]["delay"].show_value() self["main"]["delay"].value = self.e.signal.in_time action = self.e.signal.action self._update_api_props(self.e.signal.api_export, self.e.signal.api) self.group_hide("api") self.group_show("api") if action == edje.EDJE_ACTION_TYPE_NONE: afters = self.e.signal.afters while self._actions_added < len(afters) + 1: self._actions_added = self._actions_added + 1 self._new_action(self._actions_added) for i in range(self._actions_added): self["actions"]["action " + str(i + 1)].hide() for i in range(len(afters)): self["actions"]["action " + str(i + 1)].show_value() self["actions"]["action " + str(i + 1)].show() fixedname = re_anim_program.match(afters[i]).groups()[0] self["actions"]["action " + str(i + 1)].value = fixedname # The last action with none value self["actions"]["action " + str(len(afters) + 1)].show_value() self["actions"]["action " + str(len(afters) + 1)].show() self["actions"]["action " + str(len(afters) + 1)].value = "" self.group_hide("out") self.group_hide("actions") self.group_show("actions") elif action == edje.EDJE_ACTION_TYPE_SIGNAL_EMIT: self.group_hide("actions") self.group_hide("out") self.group_show("out") state = self.e.signal.state_get() self["out"]["signal"].show_value() if state: self["out"]["signal"].value = state else: self["out"]["signal"].value = "" state = self.e.signal._program.state2_get() self["out"]["source"].show_value() if state: self["out"]["source"].value = state else: self["out"]["source"].value = "" self.open_set(True) self.show()