Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
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)
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()
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":
def handles(self, mode, action):
if isinstance(action, NoAction):
return True
if is_gyro_enable(action):
action = action.mods.values()[0] or action.default
if isinstance(action, SensitivityModifier):
action = action.action
if isinstance(action, GyroAction): # Takes GyroAbsAction as well
ap = action.parameters
if (len(ap) == 3 and not ap[1]) or len(ap) == 2:
if ap[0] == Axes.ABS_X and ap[-1] == Axes.ABS_Y:
return True
elif ap[0] == Axes.ABS_RX and ap[-1] == Axes.ABS_RY:
return True
elif ap[0] == Rels.REL_Y and ap[-1] == Rels.REL_X:
return True
return False
if isinstance(action, (MouseAction, MouseAbsAction, CemuHookAction)):
return True
return False
return (
isinstance(action.action.x, (AxisAction, MouseAction))
and isinstance(action.action.x, (AxisAction, MouseAction))
)
return isinstance(action.action, MouseAction)
if isinstance(action, XYAction):
p = [ None, None ]
for x in (0, 1):
if len(action.actions[0].strip().parameters) >= x:
if len(action.actions[x].strip().parameters) > 0:
p[x] = action.actions[x].strip().parameters[0]
if p[0] == Axes.ABS_X and p[1] == Axes.ABS_Y:
return True
elif p[0] == Axes.ABS_RX and p[1] == Axes.ABS_RY:
return True
elif p[0] == Axes.ABS_HAT0X and p[1] == Axes.ABS_HAT0Y:
return True
elif p[0] == Rels.REL_HWHEEL and p[1] == Rels.REL_WHEEL:
return True
return False
if isinstance(action, BallModifier):
if isinstance(action.action, XYAction):
return (
isinstance(action.action.x, (AxisAction, MouseAction))
and isinstance(action.action.x, (AxisAction, MouseAction))
)
return isinstance(action.action, MouseAction)
if isinstance(action, XYAction):
p = [ None, None ]
for x in (0, 1):
if len(action.actions[0].strip().parameters) >= x:
if len(action.actions[x].strip().parameters) > 0:
p[x] = action.actions[x].strip().parameters[0]
if p[0] == Axes.ABS_X and p[1] == Axes.ABS_Y:
return True
elif p[0] == Axes.ABS_RX and p[1] == Axes.ABS_RY:
return True
elif p[0] == Axes.ABS_HAT0X and p[1] == Axes.ABS_HAT0Y:
return True
elif p[0] == Rels.REL_HWHEEL and p[1] == Rels.REL_WHEEL:
return True
return False
sclSoftLevel = self.builder.get_object("sclSoftLevel")
cbGyroButton = self.builder.get_object("cbGyroButton")
cbInvertGyro = self.builder.get_object("cbInvertGyro")
item = cbGyroButton.get_model().get_value(cbGyroButton.get_active_iter(), 0)
rvSoftLevel.set_reveal_child(item in TRIGGERS)
normal, n_set = [ None, None, None ], False
absolute, a_set = [ None, None, None ], False
for i in xrange(0, 3):
if self.axes[i] is not None:
if self.cbs[i].get_active():
absolute[i] = Axes(self.axes[i])
a_set = True
else:
normal[i] = Axes(self.axes[i])
n_set = True
if n_set and a_set:
action = MultiAction(GyroAction(*normal), GyroAbsAction(*absolute))
elif n_set:
action = GyroAction(*normal)
elif a_set:
action = GyroAbsAction(*absolute)
else:
action = NoAction()
if item and action:
what = getattr(SCButtons, item)
# TODO: Restore this
#if item in TRIGGERS:
# what = RangeOP(what, ">=", sclSoftLevel.get_value())
def clamp_axis(id, value):
""" Returns value clamped between min/max allowed for axis """
if id in (Axes.ABS_Z, Axes.ABS_RZ):
# Triggers
return int(max(TRIGGER_MIN, min(TRIGGER_MAX, value)))
if id in (Axes.ABS_HAT0X, Axes.ABS_HAT0Y):
# DPAD
return int(max(-1, min(1, value)))
# Everything else
return int(max(STICK_PAD_MIN, min(STICK_PAD_MAX, value)))
action = DPadAction(*keys)
elif mode == "four_buttons":
keys = []
for k in ("button_y", "button_a", "button_x", "button_b"):
if k in inputs:
keys.append(self.parse_button(inputs[k]))
else:
keys.append(NoAction())
action = DPadAction(*keys)
elif mode == "joystick_move":
if side == Profile.LEFT:
# Left
action = XYAction(AxisAction(Axes.ABS_X), AxisAction(Axes.ABS_Y))
else:
# Right
action = XYAction(AxisAction(Axes.ABS_RX), AxisAction(Axes.ABS_RY))
elif mode == "joystick_camera":
output_joystick = 0
if 'output_joystick' in settings:
output_joystick = int(settings['output_joystick'])
if output_joystick == 0:
action = BallModifier(XYAction(AxisAction(Axes.ABS_X), AxisAction(Axes.ABS_Y)))
elif output_joystick == 1:
action = BallModifier(XYAction(AxisAction(Axes.ABS_RX), AxisAction(Axes.ABS_RY)))
else:
# TODO: Absolute mouse? Doesn't seems to do anything in Steam
action = BallModifier(SensitivityModifier(0.1, 0.1, MouseAction()))
elif mode == "mouse_joystick":
action = BallModifier(XYAction(AxisAction(Axes.ABS_RX), AxisAction(Axes.ABS_RY)))
elif mode == "scrollwheel":
action = BallModifier(XYAction(MouseAction(Rels.REL_HWHEEL), MouseAction(Rels.REL_WHEEL)))
elif mode == "touch_menu":
self.actions = [ NoAction() ] * 8
self.editor.set_action(a)
self.update_button_desc(a)
elif key == "arrows":
# special case of 4-way dpad
a = DPadAction(scl.get_value(),
ButtonAction(Keys.KEY_UP), ButtonAction(Keys.KEY_DOWN),
ButtonAction(Keys.KEY_LEFT), ButtonAction(Keys.KEY_RIGHT))
self.actions = [ NoAction() ] * 8
self.editor.set_action(a)
self.update_button_desc(a)
elif key == "actual_dpad":
# maps to dpad as real gamepad usually has
a = DPadAction(scl.get_value(),
HatUpAction(Axes.ABS_HAT0Y), HatDownAction(Axes.ABS_HAT0Y),
HatLeftAction(Axes.ABS_HAT0X), HatRightAction(Axes.ABS_HAT0X))
self.actions = [ NoAction() ] * 8
self.editor.set_action(a)
self.update_button_desc(a)
else:
# Menu
self.on_cbMenus_changed()
# 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)
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()