mirror of
https://github.com/iperov/DeepFaceLab.git
synced 2024-12-25 07:21:13 -08:00
84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
from PyQt5.QtCore import *
|
|
from PyQt5.QtGui import *
|
|
from PyQt5.QtWidgets import *
|
|
|
|
from localization import StringsDB
|
|
from .QXMainWindow import *
|
|
|
|
class QXIconButton(QPushButton):
|
|
"""
|
|
Custom Icon button that works through keyEvent system, without shortcut of QAction
|
|
works only with QXMainWindow as global window class
|
|
currently works only with one-key shortcut
|
|
"""
|
|
|
|
def __init__(self, icon,
|
|
tooltip=None,
|
|
shortcut=None,
|
|
click_func=None,
|
|
first_repeat_delay=300,
|
|
repeat_delay=20,
|
|
):
|
|
|
|
super().__init__(icon, "")
|
|
|
|
self.setIcon(icon)
|
|
|
|
if shortcut is not None:
|
|
tooltip = f"{tooltip} ( {StringsDB['S_HOT_KEY'] }: {shortcut} )"
|
|
|
|
self.setToolTip(tooltip)
|
|
|
|
|
|
self.seq = QKeySequence(shortcut) if shortcut is not None else None
|
|
|
|
QXMainWindow.inst.add_keyPressEvent_listener ( self.on_keyPressEvent )
|
|
QXMainWindow.inst.add_keyReleaseEvent_listener ( self.on_keyReleaseEvent )
|
|
|
|
self.click_func = click_func
|
|
self.first_repeat_delay = first_repeat_delay
|
|
self.repeat_delay = repeat_delay
|
|
self.repeat_timer = None
|
|
|
|
self.op_device = None
|
|
|
|
self.pressed.connect( lambda : self.action(is_pressed=True) )
|
|
self.released.connect( lambda : self.action(is_pressed=False) )
|
|
|
|
def action(self, is_pressed=None, op_device=None):
|
|
if self.click_func is None:
|
|
return
|
|
|
|
if is_pressed is not None:
|
|
if is_pressed:
|
|
if self.repeat_timer is None:
|
|
self.click_func()
|
|
self.repeat_timer = QTimer()
|
|
self.repeat_timer.timeout.connect(self.action)
|
|
self.repeat_timer.start(self.first_repeat_delay)
|
|
else:
|
|
if self.repeat_timer is not None:
|
|
self.repeat_timer.stop()
|
|
self.repeat_timer = None
|
|
else:
|
|
self.click_func()
|
|
if self.repeat_timer is not None:
|
|
self.repeat_timer.setInterval(self.repeat_delay)
|
|
|
|
def on_keyPressEvent(self, ev):
|
|
key = ev.nativeVirtualKey()
|
|
if ev.isAutoRepeat():
|
|
return
|
|
|
|
if self.seq is not None:
|
|
if key == self.seq[0]:
|
|
self.action(is_pressed=True)
|
|
|
|
def on_keyReleaseEvent(self, ev):
|
|
key = ev.nativeVirtualKey()
|
|
if ev.isAutoRepeat():
|
|
return
|
|
if self.seq is not None:
|
|
if key == self.seq[0]:
|
|
self.action(is_pressed=False)
|