def on_cbProfile_changed(self, *a): """ Called when user chooses profile in selection combo """ if self._recursing : return cb = self.builder.get_object("cbProfile") model = cb.get_model() iter = cb.get_active_iter() if iter is None: # Empty list return f = model.get_value(iter, 1) name = f.get_basename() if name.endswith(".sccprofile"): name = name[0:-11] self.editor.set_action(ChangeProfileAction(name))
def check_values(self): """ Check if all required values are in place and fill by default whatever is missing. Returns True if anything gets changed. """ rv = self._check_dict(self.values, self.DEFAULTS) # Special check for autoswitcher after v0.2.17 if "autoswitch" in self.values: for a in self.values["autoswitch"]: if "profile" in a: a["action"] = ChangeProfileAction(str(a["profile"])).to_string() del a["profile"] rv = True return rv
def on_btSave_clicked(self, *a): tvItems = self.builder.get_object("tvItems") cbProfile = self.builder.get_object("cbProfile") entTitle = self.builder.get_object("entTitle") entClass = self.builder.get_object("entClass") cbMatchTitle = self.builder.get_object("cbMatchTitle") cbMatchClass = self.builder.get_object("cbMatchClass") cbExactTitle = self.builder.get_object("cbExactTitle") cbRegExp = self.builder.get_object("cbRegExp") rbProfile = self.builder.get_object("rbProfile") rbTurnOff = self.builder.get_object("rbTurnOff") rbRestart = self.builder.get_object("rbRestart") ce = self.builder.get_object("ConditionEditor") # Build condition data = {} if cbMatchTitle.get_active() and entTitle.get_text(): if cbExactTitle.get_active(): data['exact_title'] = entTitle.get_text() elif cbRegExp.get_active(): data['regexp'] = entTitle.get_text() else: data['title'] = entTitle.get_text() if cbMatchClass.get_active() and entClass.get_text(): data['wm_class'] = entClass.get_text() condition = Condition(**data) # Grab selected action model, iter = cbProfile.get_model(), cbProfile.get_active_iter() action = NoAction() if rbProfile.get_active(): action = ChangeProfileAction(model.get_value(iter, 0)) elif rbTurnOff.get_active(): action = TurnOffAction() elif rbRestart.get_active(): action = RestartDaemonAction() # Grab & update current row model, iter = tvItems.get_selection().get_selected() o = model.get_value(iter, 0) o.condition = condition o.action = action model.set_value(iter, 1, condition.describe()) model.set_value(iter, 2, action.describe(Action.AC_SWITCHER)) self.hide_dont_destroy(ce) self.save_config()
def parse_action(self, lst_or_str, button=None): """ Parses action from vdf file. a_string can be either string or list of strings, in which case MultiAction is returned. Returns Action instance or ParseError if action is not recognized. """ if type(lst_or_str) == list: return MultiAction.make( *[self.parse_action(x) for x in lst_or_str]) # Split string into binding type, name and parameters binding, params = lst_or_str.split(" ", 1) if "," in params: params, name = params.split(",", 1) else: params, name = params, None params = params.split(" ") if name: name = name.strip() # Return apropriate Action for binding type if binding in ("key_press", "mouse_button"): if binding == "mouse_button": b = VDFProfile.convert_button_name(params[0]) else: b = VDFProfile.convert_key_name(params[0]) return ButtonAction(b).set_name(name) elif binding == "xinput_button": # Special cases, as dpad is apparently button on Windows b = params[0].strip().lower() if b == "dpad_up": return HatUpAction(Axes.ABS_HAT0Y) elif b == "dpad_down": return HatDownAction(Axes.ABS_HAT0Y) elif b == "dpad_left": return HatLeftAction(Axes.ABS_HAT0X) elif b == "dpad_right": return HatRightAction(Axes.ABS_HAT0X) elif b == "trigger_left": return AxisAction(Axes.ABS_Z) elif b == "trigger_right": return AxisAction(Axes.ABS_RZ) else: b = VDFProfile.convert_button_name(b) return ButtonAction(b).set_name(name) elif binding in ("mode_shift"): if button is None: log.warning("Ignoring modeshift assigned to no button: '%s'" % (lst_or_str, )) return NoAction() if button not in VDFProfile.BUTTON_TO_BUTTON: log.warning( "Ignoring modeshift assigned to unknown button: '%s'" % (button, )) return NoAction() self.modeshift_buttons[VDFProfile.BUTTON_TO_BUTTON[button]] = ( params[1], params[0]) return NoAction() elif binding in ("controller_action"): if params[0] == "CHANGE_PRESET": id = int(params[1]) - 1 cpa = ChangeProfileAction("action_set:%s" % (id, )) self.action_set_switches.add(cpa) return cpa log.warning("Ignoring controller_action '%s' binding" % (params[0], )) return NoAction() elif binding == "mouse_wheel": if params[0].lower() == "scroll_down": return MouseAction(Rels.REL_WHEEL, -1) else: return MouseAction(Rels.REL_WHEEL, 1) else: raise ParseError("Unknown binding: '%s'" % (binding, ))