keyboard: Add initial keyboard shortcuts

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-07-28 13:53:57 -04:00
parent e24999bb2f
commit b0a1ab5796
6 changed files with 63 additions and 17 deletions

View File

@ -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)

38
ui/keyboard.py Normal file
View File

@ -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)

View File

@ -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)

20
ui/test_keyboard.py Normal file
View File

@ -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)

View File

@ -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)

View File

@ -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)