macro_recorder: repair "record" button
parent
ce11e97ce3
commit
63fe1aa6f6
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, pyqtSignal
|
from PyQt5.QtCore import Qt, pyqtSignal
|
||||||
from PyQt5.QtWidgets import QPushButton, QGridLayout, QHBoxLayout, QToolButton, QVBoxLayout, \
|
from PyQt5.QtWidgets import QPushButton, QGridLayout, QHBoxLayout, QToolButton, QVBoxLayout, \
|
||||||
QTabWidget, QWidget, QLabel
|
QTabWidget, QWidget, QLabel, QMenu
|
||||||
|
|
||||||
from basic_editor import BasicEditor
|
from basic_editor import BasicEditor
|
||||||
from keycodes import find_keycode
|
from keycodes import find_keycode
|
||||||
from macro_action import ActionText, ActionSequence, ActionTap
|
from macro_action import ActionText, ActionTap, ActionDown, ActionUp
|
||||||
from macro_key import KeyString
|
from macro_key import KeyString, KeyDown, KeyUp, KeyTap
|
||||||
from macro_line import MacroLine
|
from macro_line import MacroLine
|
||||||
from macro_optimizer import macro_optimize
|
from macro_optimizer import macro_optimize
|
||||||
from macro_recorder_linux import LinuxRecorder
|
from macro_recorder_linux import LinuxRecorder
|
||||||
|
|
@ -18,6 +18,8 @@ from vial_device import VialKeyboard
|
||||||
class MacroTab(QVBoxLayout):
|
class MacroTab(QVBoxLayout):
|
||||||
|
|
||||||
changed = pyqtSignal()
|
changed = pyqtSignal()
|
||||||
|
record = pyqtSignal(object, bool)
|
||||||
|
record_stop = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
@ -26,30 +28,38 @@ class MacroTab(QVBoxLayout):
|
||||||
|
|
||||||
self.container = QGridLayout()
|
self.container = QGridLayout()
|
||||||
|
|
||||||
btn_record = QToolButton()
|
menu_record = QMenu()
|
||||||
btn_record.setText(tr("MacroRecorder", "Record macro"))
|
menu_record.addAction(tr("MacroRecorder", "Append to current"))\
|
||||||
btn_record.setToolButtonStyle(Qt.ToolButtonTextOnly)
|
.triggered.connect(lambda: self.record.emit(self, True))
|
||||||
# btn_record.clicked.connect(self.on_record)
|
menu_record.addAction(tr("MacroRecorder", "Replace everything"))\
|
||||||
|
.triggered.connect(lambda: self.record.emit(self, False))
|
||||||
|
|
||||||
btn_add = QToolButton()
|
self.btn_record = QPushButton(tr("MacroRecorder", "Record macro"))
|
||||||
btn_add.setText(tr("MacroRecorder", "Add action"))
|
self.btn_record.setMenu(menu_record)
|
||||||
btn_add.setToolButtonStyle(Qt.ToolButtonTextOnly)
|
|
||||||
btn_add.clicked.connect(self.on_add)
|
|
||||||
|
|
||||||
btn_tap_enter = QToolButton()
|
self.btn_record_stop = QPushButton(tr("MacroRecorder", "Stop recording"))
|
||||||
btn_tap_enter.setText(tr("MacroRecorder", "Tap Enter"))
|
self.btn_record_stop.clicked.connect(lambda: self.record_stop.emit())
|
||||||
btn_tap_enter.setToolButtonStyle(Qt.ToolButtonTextOnly)
|
self.btn_record_stop.hide()
|
||||||
btn_tap_enter.clicked.connect(self.on_tap_enter)
|
|
||||||
|
self.btn_add = QToolButton()
|
||||||
|
self.btn_add.setText(tr("MacroRecorder", "Add action"))
|
||||||
|
self.btn_add.setToolButtonStyle(Qt.ToolButtonTextOnly)
|
||||||
|
self.btn_add.clicked.connect(self.on_add)
|
||||||
|
|
||||||
|
self.btn_tap_enter = QToolButton()
|
||||||
|
self.btn_tap_enter.setText(tr("MacroRecorder", "Tap Enter"))
|
||||||
|
self.btn_tap_enter.setToolButtonStyle(Qt.ToolButtonTextOnly)
|
||||||
|
self.btn_tap_enter.clicked.connect(self.on_tap_enter)
|
||||||
|
|
||||||
layout_buttons = QHBoxLayout()
|
layout_buttons = QHBoxLayout()
|
||||||
layout_buttons.addStretch()
|
layout_buttons.addStretch()
|
||||||
layout_buttons.addWidget(btn_add)
|
layout_buttons.addWidget(self.btn_add)
|
||||||
layout_buttons.addWidget(btn_tap_enter)
|
layout_buttons.addWidget(self.btn_tap_enter)
|
||||||
layout_buttons.addWidget(btn_record)
|
layout_buttons.addWidget(self.btn_record)
|
||||||
|
layout_buttons.addWidget(self.btn_record_stop)
|
||||||
|
|
||||||
self.addLayout(self.container)
|
self.addLayout(self.container)
|
||||||
self.addLayout(layout_buttons)
|
self.addLayout(layout_buttons)
|
||||||
self.addWidget(btn_add)
|
|
||||||
self.addStretch()
|
self.addStretch()
|
||||||
|
|
||||||
def add_action(self, act):
|
def add_action(self, act):
|
||||||
|
|
@ -74,6 +84,10 @@ class MacroTab(QVBoxLayout):
|
||||||
line.insert(x)
|
line.insert(x)
|
||||||
self.changed.emit()
|
self.changed.emit()
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
for line in self.lines[:]:
|
||||||
|
self.on_remove(line)
|
||||||
|
|
||||||
def on_move(self, obj, offset):
|
def on_move(self, obj, offset):
|
||||||
if offset == 0:
|
if offset == 0:
|
||||||
return
|
return
|
||||||
|
|
@ -100,6 +114,18 @@ class MacroTab(QVBoxLayout):
|
||||||
def on_tap_enter(self):
|
def on_tap_enter(self):
|
||||||
self.add_action(ActionTap(self.container, [find_keycode(0x28)]))
|
self.add_action(ActionTap(self.container, [find_keycode(0x28)]))
|
||||||
|
|
||||||
|
def pre_record(self):
|
||||||
|
self.btn_record.hide()
|
||||||
|
self.btn_add.hide()
|
||||||
|
self.btn_tap_enter.hide()
|
||||||
|
self.btn_record_stop.show()
|
||||||
|
|
||||||
|
def post_record(self):
|
||||||
|
self.btn_record.show()
|
||||||
|
self.btn_add.show()
|
||||||
|
self.btn_tap_enter.show()
|
||||||
|
self.btn_record_stop.hide()
|
||||||
|
|
||||||
|
|
||||||
class MacroRecorder(BasicEditor):
|
class MacroRecorder(BasicEditor):
|
||||||
|
|
||||||
|
|
@ -114,10 +140,15 @@ class MacroRecorder(BasicEditor):
|
||||||
self.recorder.stopped.connect(self.on_stop)
|
self.recorder.stopped.connect(self.on_stop)
|
||||||
self.recording = False
|
self.recording = False
|
||||||
|
|
||||||
|
self.recording_tab = None
|
||||||
|
self.recording_append = False
|
||||||
|
|
||||||
self.tabs = QTabWidget()
|
self.tabs = QTabWidget()
|
||||||
for x in range(32):
|
for x in range(32):
|
||||||
tab = MacroTab()
|
tab = MacroTab()
|
||||||
tab.changed.connect(self.on_change)
|
tab.changed.connect(self.on_change)
|
||||||
|
tab.record.connect(self.on_record)
|
||||||
|
tab.record_stop.connect(self.on_tab_stop)
|
||||||
self.macro_tabs.append(tab)
|
self.macro_tabs.append(tab)
|
||||||
w = QWidget()
|
w = QWidget()
|
||||||
w.setLayout(tab)
|
w.setLayout(tab)
|
||||||
|
|
@ -144,26 +175,39 @@ class MacroRecorder(BasicEditor):
|
||||||
if not self.valid():
|
if not self.valid():
|
||||||
return
|
return
|
||||||
|
|
||||||
def on_record(self):
|
def on_record(self, tab, append):
|
||||||
if not self.recording:
|
self.recording_tab = tab
|
||||||
self.recording = True
|
self.recording_append = append
|
||||||
self.keystrokes = []
|
|
||||||
self.recorder.start()
|
self.recording_tab.pre_record()
|
||||||
else:
|
|
||||||
self.recording = False
|
for x, w in enumerate(self.macro_tabs):
|
||||||
self.recorder.stop()
|
if tab != w:
|
||||||
|
self.tabs.tabBar().setTabEnabled(x, False)
|
||||||
|
|
||||||
|
self.recording = True
|
||||||
|
self.keystrokes = []
|
||||||
|
self.recorder.start()
|
||||||
|
|
||||||
|
def on_tab_stop(self):
|
||||||
|
self.recorder.stop()
|
||||||
|
|
||||||
def on_stop(self):
|
def on_stop(self):
|
||||||
|
for x in range(len(self.macro_tabs)):
|
||||||
|
self.tabs.tabBar().setTabEnabled(x, True)
|
||||||
|
|
||||||
|
if not self.recording_append:
|
||||||
|
self.recording_tab.clear()
|
||||||
|
|
||||||
|
self.recording_tab.post_record()
|
||||||
|
|
||||||
self.keystrokes = macro_optimize(self.keystrokes)
|
self.keystrokes = macro_optimize(self.keystrokes)
|
||||||
for k in self.keystrokes:
|
for k in self.keystrokes:
|
||||||
if isinstance(k, KeyString):
|
if isinstance(k, KeyString):
|
||||||
self.lines.append(MacroLine(self, ActionText(self.container, k.string)))
|
self.recording_tab.add_action(ActionText(self.recording_tab.container, k.string))
|
||||||
else:
|
else:
|
||||||
self.lines.append(MacroLine(self, ActionSequence(self.container, [k])))
|
cls = {KeyDown: ActionDown, KeyUp: ActionUp, KeyTap: ActionTap}[type(k)]
|
||||||
|
self.recording_tab.add_action(cls(self.recording_tab.container, [k.keycode]))
|
||||||
for x, line in enumerate(self.lines):
|
|
||||||
line.insert(x)
|
|
||||||
print(self.keystrokes)
|
|
||||||
|
|
||||||
def on_keystroke(self, keystroke):
|
def on_keystroke(self, keystroke):
|
||||||
self.keystrokes.append(keystroke)
|
self.keystrokes.append(keystroke)
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,7 @@ class LinuxRecorder(QWidget):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
self.process = QProcess()
|
self.process = QProcess()
|
||||||
|
self.process.readyReadStandardOutput.connect(self.on_output)
|
||||||
|
|
||||||
self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.X11BypassWindowManagerHint)
|
self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.X11BypassWindowManagerHint)
|
||||||
|
|
||||||
|
|
@ -132,7 +133,6 @@ class LinuxRecorder(QWidget):
|
||||||
args += sys.argv
|
args += sys.argv
|
||||||
args += ["--linux-recorder"]
|
args += ["--linux-recorder"]
|
||||||
|
|
||||||
self.process.readyReadStandardOutput.connect(self.on_output)
|
|
||||||
self.process.start("pkexec", args, QProcess.Unbuffered | QProcess.ReadWrite)
|
self.process.start("pkexec", args, QProcess.Unbuffered | QProcess.ReadWrite)
|
||||||
|
|
||||||
def on_stop(self):
|
def on_stop(self):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue