Mouse_Keyboard/src/signal_classes/signals.py

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