108 lines
3.5 KiB
Python
108 lines
3.5 KiB
Python
# Python imports
|
|
import threading, subprocess, os
|
|
|
|
# Gtk imports
|
|
import gi
|
|
gi.require_version('Gtk', '3.0')
|
|
from gi.repository import Gtk
|
|
|
|
# Application imports
|
|
from .mixins.keyboardmixin import KeyboardMixin
|
|
|
|
|
|
def threaded(fn):
|
|
def wrapper(*args, **kwargs):
|
|
threading.Thread(target=fn, args=args, kwargs=kwargs).start()
|
|
return wrapper
|
|
|
|
|
|
class Signals(KeyboardMixin):
|
|
def __init__(self, settings):
|
|
self.settings = settings
|
|
self.builder = self.settings.returnBuilder()
|
|
self.autoTypeField = self.builder.get_object("autoTypeField")
|
|
self.commandsStore = self.builder.get_object("commands")
|
|
self.specialsStore = self.builder.get_object("specials")
|
|
self.specialsTree = self.builder.get_object("specialsTree")
|
|
main_keys = self.builder.get_object("main_keys")
|
|
|
|
self.isCapsLockOn = False
|
|
self.isCtrlOn = False
|
|
self.isShiftOn = False
|
|
self.isAltOn = False
|
|
|
|
special_characters = "<>()[]{}/\!?#$%&@*:^|'\"-_=+~`"
|
|
self.generate_keys(special_characters, self.specialsStore)
|
|
self.specialsStore.show_all()
|
|
main_keys.show_all()
|
|
|
|
row1_characters = "1234567890"
|
|
row1 = Gtk.Box()
|
|
self.generate_keys(["Esc",], row1)
|
|
self.generate_keys(row1_characters, row1)
|
|
self.generate_keys(["Backspace",], row1)
|
|
row1.set_homogeneous(True)
|
|
row1.show_all()
|
|
main_keys.add(row1)
|
|
|
|
row2_characters = "qwertyuiop"
|
|
row2 = Gtk.Box()
|
|
self.generate_keys(["Tab",], row2)
|
|
self.generate_keys(row2_characters, row2)
|
|
row2.set_homogeneous(True)
|
|
row2.show_all()
|
|
main_keys.add(row2)
|
|
|
|
row3_characters = "asdfghjkl"
|
|
row3 = Gtk.Box()
|
|
self.generate_keys(["Caps Lock",], row3)
|
|
self.generate_keys(row3_characters, row3)
|
|
self.generate_keys(["Enter",], row3)
|
|
row3.set_homogeneous(True)
|
|
row3.show_all()
|
|
main_keys.add(row3)
|
|
|
|
row4_characters = "zxcvbnm,.:"
|
|
row4 = Gtk.Box()
|
|
self.generate_keys(row4_characters, row4)
|
|
row4.set_homogeneous(True)
|
|
row4.show_all()
|
|
main_keys.add(row4)
|
|
|
|
row5_characters = "Space"
|
|
row5 = Gtk.Box()
|
|
self.generate_keys([row5_characters,], row5)
|
|
row5.set_homogeneous(True)
|
|
row5.show_all()
|
|
main_keys.add(row5)
|
|
|
|
|
|
def generate_keys(self, labels, target):
|
|
for label in labels:
|
|
button = Gtk.Button.new_with_label(label)
|
|
if label not in ["Enter", "Backspace", "Caps Lock"]:
|
|
button.connect("clicked", self.insert)
|
|
else:
|
|
if label == "Enter":
|
|
button.connect("clicked", self.enter)
|
|
if label == "Backspace":
|
|
button.connect("clicked", self.backspace)
|
|
if label == "Caps Lock":
|
|
button = Gtk.ToggleButton.new_with_label(label)
|
|
button.connect("toggled", self.toggleCaps)
|
|
|
|
target.add(button)
|
|
|
|
|
|
def getClipboardData(self):
|
|
proc = subprocess.Popen(['xclip','-selection', 'clipboard', '-o'], stdout=subprocess.PIPE)
|
|
retcode = proc.wait()
|
|
data = proc.stdout.read()
|
|
return data.decode("utf-8").strip()
|
|
|
|
def setClipboardData(self, data):
|
|
proc = subprocess.Popen(['xclip','-selection','clipboard'], stdin=subprocess.PIPE)
|
|
proc.stdin.write(data)
|
|
proc.stdin.close()
|
|
retcode = proc.wait()
|