1import gi
2gi.require_version('Caribou', '1.0')
3gi.require_version('Gtk', '3.0')
4from gi.repository import Caribou, GLib, GObject, Gtk
5from .window import AntlerWindowEntry
6from .keyboard_view import AntlerKeyboardView
7import sys
8
9class AntlerKeyboardCommand(object):
10    def run(self):
11        pass
12
13class AntlerKeyboardService(Caribou.KeyboardService, AntlerKeyboardCommand):
14    def __init__(self, args=None):
15        GObject.GObject.__init__(self)
16        self.register_keyboard("Antler")
17        self.window = AntlerWindowEntry(AntlerKeyboardView)
18
19    def run(self):
20        loop = GObject.MainLoop()
21        loop.run()
22
23    def do_show(self, timestamp):
24        self.window.show_all()
25
26    def do_hide(self, timestamp):
27        self.window.hide()
28
29    def do_set_cursor_location (self, x, y, w, h):
30        self.window.set_cursor_location(x, y, w, h)
31
32    def do_set_entry_location (self, x, y, w, h):
33        self.window.set_entry_location(x, y, w, h)
34
35    def do_name_lost (self, name):
36        sys.stderr.write("Another service acquired %s, quitting..\n" % name)
37        sys.exit(0)
38
39class AntlerKeyboardPreview(Gtk.Window, AntlerKeyboardCommand):
40    def __init__(self, args=None):
41        GObject.GObject.__init__(self)
42        if not args or not args.file:
43            sys.stderr.write("Specify keyboard file with -f option.\n")
44            sys.exit(1)
45        self.window = Gtk.Window()
46        self.window.add(AntlerKeyboardView(keyboard_file=args.file,
47                                           keyboard_level=args.level))
48
49    def run(self):
50        self.window.show_all()
51        Gtk.main()
52
53if __name__ == "__main__":
54    import argparse
55    import signal
56    signal.signal(signal.SIGINT, signal.SIG_DFL)
57
58    GLib.set_prgname('antler-keyboard')
59
60    parser = argparse.ArgumentParser(description='antler-keyboard')
61    parser.add_argument('-c', '--command', type=str, default='service',
62                        help='command (service or preview, default: service)')
63    parser.add_argument('-f', '--file', type=str,
64                        help='keyboard file')
65    parser.add_argument('-l', '--level', type=str,
66                        help='shift level')
67    args = parser.parse_args()
68
69    command = globals().get('AntlerKeyboard%s' % args.command.capitalize())
70    if command:
71        command(args).run()
72    else:
73        sys.stderr.write("Unknown command: %s\n" % args.command)
74        sys.exit(1)
75