def parse_button(self, bdef, button=None): """ Parses button definition from vdf file. Parameter can be either string, as used in v2, or dict used in v3. """ if type(bdef) == str: # V2 return self.parse_action(bdef, button) elif type(bdef) == list: # V2 return MultiAction.make(*[ self.parse_action(x, button) for x in bdef ]) elif "activators" in bdef: # V3 act_actions = [] for k in ("full_press", "double_press", "long_press"): a = NoAction() if k in bdef["activators"]: # TODO: Handle multiple bindings bindings = ensure_list(bdef["activators"][k])[0] a = self.parse_action(bindings["bindings"]["binding"], button) a = VDFProfile.parse_modifiers(bindings, a, Profile.RIGHT) # holly... act_actions.append(a) normal, double, hold = act_actions if not double and not hold: return normal elif hold and not double: return HoldModifier(hold, normal) else: action = DoubleclickModifier(double, normal) action.holdaction = hold return action else: log.warning("Failed to parse button definition: %s" % (bdef,))
def _make_action(self): """ Generates and returns Action instance """ normalaction = self._save_modemod(0) holdaction = self._save_modemod(1) dblaction = self._save_modemod(2) if dblaction: action = DoubleclickModifier(dblaction, normalaction) action.holdaction = holdaction elif holdaction: action = HoldModifier(holdaction, normalaction) else: action = normalaction action.timeout = self.builder.get_object("adjTime").get_value() return action
def on_btOK_clicked(self, *a): """ Handler for OK button """ action = self._save_modemod(0) hold_action = self._save_modemod(1) dbl_action = self._save_modemod(2) if hold_action: action = HoldModifier(hold_action, action) if dbl_action: action.action = dbl_action elif dbl_action: action = DoubleclickModifier(hold_action, action) print action.to_string(True, 4) if self.ac_callback is not None: self.ac_callback(self.id, action) self.close()
def _make_action(self): """ Generates and returns Action instance """ cbHoldFeedback = self.builder.get_object("cbHoldFeedback") sclHoldFeedback = self.builder.get_object("sclHoldFeedback") normalaction = self._save_modemod(0) holdaction = self._save_modemod(1) dblaction = self._save_modemod(2) if dblaction: action = DoubleclickModifier(dblaction, normalaction) action.holdaction = holdaction elif holdaction: action = HoldModifier(holdaction, normalaction) else: action = normalaction action.timeout = self.builder.get_object("adjTime").get_value() if cbHoldFeedback.get_active(): action = FeedbackModifier(HapticPos.BOTH, sclHoldFeedback.get_value(), action) return action
def from_json_data(self, data, key=None): """ Converts dict stored in profile file into action. May throw ParseError. """ if key is not None: # Don't fail if called for non-existent key, return NoAction instead. # Using this is sorter than # calling 'if button in data["buttons"]: ...' everywhere if key in data: return self.from_json_data(data[key], None) else: return NoAction() a = NoAction() if "action" in data: a = self.restart(data["action"]).parse() or NoAction() if "X" in data or "Y" in data: # "action" is ignored if either "X" or "Y" is there x = self.from_json_data(data["X"]) if "X" in data else NoAction() y = self.from_json_data(data["Y"]) if "Y" in data else NoAction() a = XYAction(x, y) if "deadzone" in data: lower = data["deadzone"]["lower"] if "lower" in data["deadzone"] else STICK_PAD_MIN upper = data["deadzone"]["upper"] if "upper" in data["deadzone"] else STICK_PAD_MAX a = DeadzoneModifier(lower, upper, a) if "sensitivity" in data: args = data["sensitivity"] args.append(a) a = SensitivityModifier(*args) if "feedback" in data: args = data["feedback"] if hasattr(HapticPos, args[0]): args[0] = getattr(HapticPos, args[0]) args.append(a) a = FeedbackModifier(*args) if "osd" in data: a = OSDAction(a) if data["osd"] is not True: a.timeout = float(data["osd"]) if "click" in data: a = ClickModifier(a) if "name" in data: a.name = data["name"] if "modes" in data: args = [] for button in data['modes']: if hasattr(SCButtons, button): args += [ getattr(SCButtons, button), self.from_json_data(data['modes'][button]) ] if a: args += [ a ] a = ModeModifier(*args) if "doubleclick" in data: args = [ self.from_json_data(data['doubleclick']), a ] a = DoubleclickModifier(*args) if "hold" in data: if isinstance(a, DoubleclickModifier): a.holdaction = self.from_json_data(data['hold']) else: args = [ self.from_json_data(data['hold']), a ] a = HoldModifier(*args) return a