diff --git a/ui/event.py b/ui/event.py deleted file mode 100644 index ef9111e..0000000 --- a/ui/event.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright 2021 (c) Anna Schumaker. -from gi.repository import Gtk - -Key = Gtk.EventControllerKey() - -def on_key_released(controller, keyval, keycode, state): - print(keyval, keycode, state) - -Key.connect("key-released", on_key_released) diff --git a/ui/keyboard.py b/ui/keyboard.py new file mode 100644 index 0000000..62ce31a --- /dev/null +++ b/ui/keyboard.py @@ -0,0 +1,38 @@ +# Copyright 2021 (c) Anna Schumaker. +from gi.repository import Gtk, Gdk +import audio +import tagdb + +Event = Gtk.EventControllerKey() +Event.set_propagation_phase(Gtk.PropagationPhase.CAPTURE) + +Shortcuts = dict() + +def initialize(): + Shortcuts.clear() + Shortcuts.update({ + "Return" : audio.Player.next, + "BackSpace" : audio.Player.previous, + "space" : audio.Player.playpause, + "plus" : tagdb.Stack.Counter.increment, + "KP_Add" : tagdb.Stack.Counter.increment, + "minus" : tagdb.Stack.Counter.decrement, + "KP_Subtract" : tagdb.Stack.Counter.decrement, + }) +initialize() + + +def on_key_released(controller, keyval, keycode, state): + window = Event.get_widget() + name = Gdk.keyval_name(keyval) + if name == "Escape": + window.set_focus(None) + elif not isinstance(window.get_focus(), Gtk.Text): + if func := Shortcuts.get(name): + func() + return True + else: + print(name) + return False + +Event.connect("key-released", on_key_released) diff --git a/ui/test_event.py b/ui/test_event.py deleted file mode 100644 index c8c425c..0000000 --- a/ui/test_event.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright 2021 (c) Anna Schumaker. -from . import event -from gi.repository import Gtk -import unittest - -class TestUIEvents(unittest.TestCase): - def test_ui_events(self): - self.assertIsInstance(event.Key, Gtk.EventControllerKey) diff --git a/ui/test_keyboard.py b/ui/test_keyboard.py new file mode 100644 index 0000000..5512100 --- /dev/null +++ b/ui/test_keyboard.py @@ -0,0 +1,20 @@ +# Copyright 2021 (c) Anna Schumaker. +from . import keyboard +from gi.repository import Gtk +import audio +import tagdb +import unittest + +class TestUIKeyboard(unittest.TestCase): + def setUp(self): + keyboard.initialize() + + def test_keyboard_init(self): + self.assertIsInstance(keyboard.Event, Gtk.EventControllerKey) + + self.assertEqual(keyboard.Shortcuts["Return"], audio.Player.next) + self.assertEqual(keyboard.Shortcuts["BackSpace"], audio.Player.previous) + self.assertEqual(keyboard.Shortcuts["plus"], tagdb.Stack.Counter.increment) + self.assertEqual(keyboard.Shortcuts["KP_Add"], tagdb.Stack.Counter.increment) + self.assertEqual(keyboard.Shortcuts["minus"], tagdb.Stack.Counter.decrement) + self.assertEqual(keyboard.Shortcuts["KP_Subtract"], tagdb.Stack.Counter.decrement) diff --git a/ui/test_window.py b/ui/test_window.py index 18cea85..ab5b1e4 100644 --- a/ui/test_window.py +++ b/ui/test_window.py @@ -3,6 +3,7 @@ from lib import settings from lib import version from . import window from . import header +from . import keyboard from . import pane from gi.repository import Gtk import sidebar @@ -31,6 +32,8 @@ class TestUIWindow(unittest.TestCase): self.assertEqual(window.Window.get_title(), version.string()) self.assertEqual(window.Window.get_icon_name(), "emmental") + self.assertEqual(keyboard.Event.get_widget(), window.Window) + def test_window_resize(self): self.assertEqual(settings.get_int("window.width"), 1100) self.assertEqual(settings.get_int("window.height"), 600) diff --git a/ui/window.py b/ui/window.py index 65505c6..df6fdbc 100644 --- a/ui/window.py +++ b/ui/window.py @@ -6,6 +6,7 @@ import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk from . import header +from . import keyboard from . import pane Window = Gtk.ApplicationWindow() @@ -20,6 +21,7 @@ initialize() Box.append(sidebar.Switcher) Box.append(pane.Pane) +Window.add_controller(keyboard.Event) Window.set_title(version.string()) Window.set_icon_name("emmental") Window.set_titlebar(header.Header)