LinVAM/keyactioneditwnd.py

151 lines
5.0 KiB
Python

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from ui_keyactioneditwnd import Ui_KeyActionEditDialog
import keyboard
import threading
class KeyActionEditWnd(QDialog):
def __init__(self, p_keyAction, p_parent = None):
super().__init__(p_parent)
self.ui = Ui_KeyActionEditDialog()
self.ui.setupUi(self)
self.ui.ctrlBut.clicked.connect(self.slotCtrlClicked)
self.ui.altBut.clicked.connect(self.slotAltClicked)
self.ui.shiftBut.clicked.connect(self.slotShiftClicked)
self.ui.winBut.clicked.connect(self.slotWinClicked)
self.ui.ok.clicked.connect(self.slotOK)
self.ui.cancel.clicked.connect(self.slotCancel)
self.m_ctrlState = 0
self.m_altState = 0
self.m_shiftState = 0
self.m_winState = 0
self.m_keyAction = {}
self.ui.press_releaseKey.setChecked(True)
t = threading.Thread(target=self.keyInput)
t.daemon = True
t.start()
if p_keyAction == None:
return
w_hotKey = p_keyAction['key']
w_keys = w_hotKey.split('+')
for w_key in w_keys:
if w_key == 'left ctrl':
self.m_ctrlState = 1
elif w_key == 'right ctrl':
self.m_ctrlState = 2
elif w_key == 'left alt':
self.m_altState = 1
elif w_key == 'right alt':
self.m_altState = 2
elif w_key == 'left shift':
self.m_shiftState = 1
elif w_key == 'right shift':
self.m_shiftState = 2
elif w_key == 'left windows':
self.m_winState = 1
elif w_key == 'right windows':
self.m_winState = 2
else:
self.ui.keyEdit.setText(w_key)
w_stateText = ['Ctrl', 'Left Ctrl', 'Right Ctrl']
self.ui.ctrlBut.setText(w_stateText[self.m_ctrlState])
w_stateText = ['Alt', 'Left Alt', 'Right Alt']
self.ui.altBut.setText(w_stateText[self.m_altState])
w_stateText = ['Shift', 'Left Shift', 'Right Shift']
self.ui.shiftBut.setText(w_stateText[self.m_shiftState])
w_stateText = ['Win', 'Left Win', 'Right Win']
self.ui.winBut.setText(w_stateText[self.m_winState])
if p_keyAction['type'] == 10:
self.ui.press_releaseKey.setChecked(True)
elif p_keyAction['type'] == 0:
self.ui.releaseKey.setChecked(True)
elif p_keyAction['type'] == 1:
self.ui.pressKey.setChecked(True)
def slotOK(self):
w_ctrlStateText = ['', 'left ctrl', 'right ctrl']
w_altStateText = ['', 'left alt', 'right alt']
w_shiftStateText = ['', 'left shift', 'right shift']
w_winStateText = ['', 'left windows', 'right windows']
w_hotKey = ''
if self.m_ctrlState != 0:
w_hotKey = w_ctrlStateText[self.m_ctrlState]
if self.m_altState != 0:
if w_hotKey != '':
w_hotKey = w_hotKey + '+'
w_hotKey = w_hotKey + w_altStateText[self.m_altState]
if self.m_shiftState != 0:
if w_hotKey != '':
w_hotKey = w_hotKey + '+'
w_hotKey = w_hotKey + w_shiftStateText[self.m_shiftState]
if self.m_winState != 0:
if w_hotKey != '':
w_hotKey = w_hotKey + '+'
w_hotKey = w_hotKey + w_winStateText[self.m_winState]
if self.ui.keyEdit.text() != '':
if w_hotKey != '':
w_hotKey = w_hotKey + '+'
w_hotKey = w_hotKey + self.ui.keyEdit.text()
if w_hotKey == '':
return
self.m_keyAction = {}
self.m_keyAction['name'] = 'key action'
self.m_keyAction['key'] = w_hotKey
if self.ui.press_releaseKey.isChecked():
self.m_keyAction['type'] = 10
elif self.ui.pressKey.isChecked():
self.m_keyAction['type'] = 1
elif self.ui.releaseKey.isChecked():
self.m_keyAction['type'] = 0
return super().accept()
def slotCancel(self):
return super().reject()
def slotCtrlClicked(self):
self.m_ctrlState = (self.m_ctrlState + 1) % 3
w_stateText = ['Ctrl', 'Left Ctrl', 'Right Ctrl']
self.ui.ctrlBut.setText(w_stateText[self.m_ctrlState])
def slotAltClicked(self):
self.m_altState = (self.m_altState + 1) % 3
w_stateText = ['Alt', 'Left Alt', 'Right Alt']
self.ui.altBut.setText(w_stateText[self.m_altState])
def slotShiftClicked(self):
self.m_shiftState = (self.m_shiftState + 1) % 3
w_stateText = ['Shift', 'Left Shift', 'Right Shift']
self.ui.shiftBut.setText(w_stateText[self.m_shiftState])
def slotWinClicked(self):
self.m_winState = (self.m_winState + 1) % 3
w_stateText = ['Win', 'Left Win', 'Right Win']
self.ui.winBut.setText(w_stateText[self.m_winState])
def keyInput(self):
try:
while True:
self.ui.keyEdit.setText(keyboard.read_hotkey(False))
except:
pass