Browse Source

extended controls: refactor

Fabian Peter Hammerle 6 years ago
parent
commit
ab69866e1f
1 changed files with 33 additions and 25 deletions
  1. 33 25
      tooncher/__init__.py

+ 33 - 25
tooncher/__init__.py

@@ -200,22 +200,36 @@ def wait_for_engine_window(xdisplay, engine_process, timeout_seconds=20, search_
 
 class ExtendedControls:
 
-    def __init__(self, xdisplay):
-        self.xdisplay = xdisplay
-        self.enabled = False
-
-    def enable(self, engine_window, keyboard_mapping):
-        for keysym in keyboard_mapping.keys():
-            x_grab_keysym(self.xdisplay, engine_window, keysym)
-        self.enabled = True
+    def __init__(self, xdisplay, engine_window, keyboard_mapping, toggle_keysym_name):
+        self._xdisplay = xdisplay
+        self._engine_window = engine_window
+        self._keyboard_mapping = keyboard_mapping
+        self._enabled = False
+        print("INFO Extended Controls are currently off."
+              + " Press key '{}' to enable.".format(toggle_keysym_name))
+
+    def enable(self):
+        for keysym in self._keyboard_mapping.keys():
+            x_grab_keysym(self._xdisplay, self._engine_window, keysym)
+        self._enabled = True
         print("INFO Enabled Extended Controls")
 
-    def disable(self, engine_window, keyboard_mapping):
-        for keysym in keyboard_mapping.keys():
-            x_ungrab_keysym(self.xdisplay, engine_window, keysym)
-        self.enabled = False
+    def disable(self):
+        for keysym in self._keyboard_mapping.keys():
+            x_ungrab_keysym(self._xdisplay, self._engine_window, keysym)
+        self._enabled = False
         print("INFO Disabled Extended Controls")
 
+    @property
+    def enabled(self):
+        return self._enabled
+
+    def toggle(self):
+        if self.enabled:
+            self.disable()
+        else:
+            self.enable()
+
 def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
     if not Xlib:
         raise Exception('\n'.join([
@@ -226,7 +240,6 @@ def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
             '\t$ pip3 install --user xlib',
         ]))
     xdisplay = Xlib.display.Display()
-    ec = ExtendedControls(xdisplay)
     engine_window = wait_for_engine_window(xdisplay, engine_process)
     if not engine_window:
         raise Exception('Could not find the game\'s window.')
@@ -242,8 +255,12 @@ def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
         del keyboard_mapping[toggle_keysym]
         print("INFO Extended Controls:"
               + " Ignoring mapping for toggle key '{}'".format(toggle_keysym_name))
-    print("INFO Extended Controls are currently off."
-          + " Press key '{}' to enable.".format(toggle_keysym_name))
+    ec = ExtendedControls(
+        xdisplay,
+        engine_window,
+        keyboard_mapping,
+        toggle_keysym_name,
+    )
     while engine_process.poll() is None:
         # TODO don't block here, engine might have already been stopped
         xevent = xdisplay.next_event()
@@ -256,16 +273,7 @@ def run_extended_keyboard_controls(engine_process, toggle_keysym_name):
             )
             if keysym_in == toggle_keysym:
                 if isinstance(xevent, Xlib.protocol.event.KeyPress):
-                    if ec.enabled:
-                        ec.disable(
-                            engine_window,
-                            keyboard_mapping,
-                        )
-                    else:
-                        ec.enable(
-                            engine_window,
-                            keyboard_mapping,
-                        )
+                    ec.toggle()
             else:
                 if ec.enabled and keysym_in in keyboard_mapping:
                     keysym_out = keyboard_mapping[keysym_in]