Esempio n. 1
0
	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
Esempio n. 3
0
    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()
Esempio n. 4
0
    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, ))