1
1
mirror of https://github.com/KenanZhu/AutoLibrary.git synced 2026-06-17 23:13:03 +08:00

refactor(gui): 统一 Qt 控件变量命名风格为 PascalCase

将所有 self.xxx 形式的 Qt 控件属性名以及 Qt 对象局部变量由 snake_case
重命名为 PascalCase,提升代码可读性和一致性。涉及 14 个文件,涵盖:
- AutoScript 编排/编辑对话框子模块
- 配置/主窗口/用户树/座位图等核心界面组件
- 定时任务管理相关界面
- 状态标签/浏览器驱动下载对话框

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-28 19:35:03 +08:00
parent 3ebebe015f
commit bb63ee6f03
14 changed files with 780 additions and 792 deletions
+237 -237
View File
@@ -74,54 +74,54 @@ class ALScriptHighlighter(QSyntaxHighlighter):
super().__init__(parent) super().__init__(parent)
self._rules = [] self._rules = []
keywordFmt = QTextCharFormat() KeywordFmt = QTextCharFormat()
keywordFmt.setForeground(QColor("#569CD6")) KeywordFmt.setForeground(QColor("#569CD6"))
keywordFmt.setFontWeight(QFont.Weight.Bold) KeywordFmt.setFontWeight(QFont.Weight.Bold)
for kw in [ for kw in [
"if", "elseif", "else", "end", "then", "if", "elseif", "else", "end", "then",
"and", "or", "not", "and", "or", "not",
"local", "function", "return", "nil", "local", "function", "return", "nil",
]: ]:
self._rules.append((r"\b" + kw + r"\b", keywordFmt)) self._rules.append((r"\b" + kw + r"\b", KeywordFmt))
boolFmt = QTextCharFormat() BoolFmt = QTextCharFormat()
boolFmt.setForeground(QColor("#4FC1FF")) BoolFmt.setForeground(QColor("#4FC1FF"))
boolFmt.setFontWeight(QFont.Weight.Bold) BoolFmt.setFontWeight(QFont.Weight.Bold)
self._rules.append((r"\btrue\b", boolFmt)) self._rules.append((r"\btrue\b", BoolFmt))
self._rules.append((r"\bfalse\b", boolFmt)) self._rules.append((r"\bfalse\b", BoolFmt))
cmpFmt = QTextCharFormat() CmpFmt = QTextCharFormat()
cmpFmt.setForeground(QColor("#C586C0")) CmpFmt.setForeground(QColor("#C586C0"))
cmpFmt.setFontWeight(QFont.Weight.Normal) CmpFmt.setFontWeight(QFont.Weight.Normal)
for op in [r"==", r"~=", r">=", r"<=", r">", r"<"]: for op in [r"==", r"~=", r">=", r"<=", r">", r"<"]:
self._rules.append((op, cmpFmt)) self._rules.append((op, CmpFmt))
arithFmt = QTextCharFormat() ArithFmt = QTextCharFormat()
arithFmt.setForeground(QColor("#C586C0")) ArithFmt.setForeground(QColor("#C586C0"))
arithFmt.setFontWeight(QFont.Weight.Normal) ArithFmt.setFontWeight(QFont.Weight.Normal)
for op in [r"\+", r"-", r"\*", r"/", r"\.\."]: for op in [r"\+", r"-", r"\*", r"/", r"\.\."]:
self._rules.append((op, arithFmt)) self._rules.append((op, ArithFmt))
funcFmt = QTextCharFormat() FuncFmt = QTextCharFormat()
funcFmt.setForeground(QColor("#DCDCAA")) FuncFmt.setForeground(QColor("#DCDCAA"))
funcFmt.setFontWeight(QFont.Weight.Normal) FuncFmt.setFontWeight(QFont.Weight.Normal)
for fn in [ "time", "date", "datenow", "timenow", "dateadd", "timeadd"]: for fn in [ "time", "date", "datenow", "timenow", "dateadd", "timeadd"]:
self._rules.append((r"\b" + fn + r"\b", funcFmt)) self._rules.append((r"\b" + fn + r"\b", FuncFmt))
varFmt = QTextCharFormat() VarFmt = QTextCharFormat()
varFmt.setForeground(QColor("#9CDCFE")) VarFmt.setForeground(QColor("#9CDCFE"))
varFmt.setFontWeight(QFont.Weight.Normal) VarFmt.setFontWeight(QFont.Weight.Normal)
var_names = [name for _, (name, _) in createAllVariablesTable().items()] var_names = [name for _, (name, _) in createAllVariablesTable().items()]
for var in var_names: for var in var_names:
self._rules.append((r"\b" + var + r"\b", varFmt)) self._rules.append((r"\b" + var + r"\b", VarFmt))
strFmt = QTextCharFormat() StrFmt = QTextCharFormat()
strFmt.setForeground(QColor("#CE9178")) StrFmt.setForeground(QColor("#CE9178"))
strFmt.setFontWeight(QFont.Weight.Normal) StrFmt.setFontWeight(QFont.Weight.Normal)
self._rules.append((r'"[^"]*"', strFmt)) self._rules.append((r'"[^"]*"', StrFmt))
self._rules.append((r"'[^']*'", strFmt)) self._rules.append((r"'[^']*'", StrFmt))
numFmt = QTextCharFormat() NumFmt = QTextCharFormat()
numFmt.setForeground(QColor("#B5CEA8")) NumFmt.setForeground(QColor("#B5CEA8"))
numFmt.setFontWeight(QFont.Weight.Normal) NumFmt.setFontWeight(QFont.Weight.Normal)
self._rules.append((r"\b\d+(?:\.\d+)?\b", numFmt)) self._rules.append((r"\b\d+(?:\.\d+)?\b", NumFmt))
commentFmt = QTextCharFormat() CommentFmt = QTextCharFormat()
commentFmt.setForeground(QColor("#6A9955")) CommentFmt.setForeground(QColor("#6A9955"))
commentFmt.setFontItalic(True) CommentFmt.setFontItalic(True)
self._rules.append((r"--[^\n]*", commentFmt)) self._rules.append((r"--[^\n]*", CommentFmt))
def highlightBlock( def highlightBlock(
self, self,
@@ -147,22 +147,22 @@ class _DebugResultDialog(QDialog):
super().__init__(parent) super().__init__(parent)
self.setWindowTitle("调试运行结果 - AutoLibrary") self.setWindowTitle("调试运行结果 - AutoLibrary")
self.setMinimumSize(600, 200) self.setMinimumSize(600, 200)
layout = QVBoxLayout(self) DbgLayout = QVBoxLayout(self)
table = QTableWidget(len(changes), 3) DbgTable = QTableWidget(len(changes), 3)
table.setHorizontalHeaderLabels(["目标变量", "原始数据", "运行后数据"]) DbgTable.setHorizontalHeaderLabels(["目标变量", "原始数据", "运行后数据"])
table.horizontalHeader().setStretchLastSection(True) DbgTable.horizontalHeader().setStretchLastSection(True)
table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) DbgTable.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
table.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers) DbgTable.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers)
for row, (display_name, name, var_type, before_val, after_val) in enumerate(changes): for row, (display_name, name, var_type, before_val, after_val) in enumerate(changes):
label = f"{display_name}: {name}({var_type})" label = f"{display_name}: {name}({var_type})"
table.setItem(row, 0, QTableWidgetItem(label)) DbgTable.setItem(row, 0, QTableWidgetItem(label))
table.setItem(row, 1, QTableWidgetItem(str(before_val))) DbgTable.setItem(row, 1, QTableWidgetItem(str(before_val)))
table.setItem(row, 2, QTableWidgetItem(str(after_val))) DbgTable.setItem(row, 2, QTableWidgetItem(str(after_val)))
layout.addWidget(table) DbgLayout.addWidget(DbgTable)
btnBox = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok) DbgBtnBox = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok)
btnBox.button(QDialogButtonBox.StandardButton.Ok).setText("确定") DbgBtnBox.button(QDialogButtonBox.StandardButton.Ok).setText("确定")
btnBox.accepted.connect(self.accept) DbgBtnBox.accepted.connect(self.accept)
layout.addWidget(btnBox) DbgLayout.addWidget(DbgBtnBox)
class _TabToSpacesEditor(QPlainTextEdit): class _TabToSpacesEditor(QPlainTextEdit):
@@ -193,9 +193,9 @@ class ALAutoScriptEditDialog(QDialog):
self.setupUi() self.setupUi()
self.connectSignals() self.connectSignals()
self.textEdit.setPlainText(script) self.TextEdit.setPlainText(script)
self._highlighter = ALScriptHighlighter( self._Highlighter = ALScriptHighlighter(
self.textEdit.document() self.TextEdit.document()
) )
if mockData: if mockData:
self.setMockData(mockData) self.setMockData(mockData)
@@ -206,80 +206,80 @@ class ALAutoScriptEditDialog(QDialog):
self.setWindowTitle("AutoScript 编辑 - AutoLibrary") self.setWindowTitle("AutoScript 编辑 - AutoLibrary")
self.setMinimumSize(660, 600) self.setMinimumSize(660, 600)
layout = QVBoxLayout(self) Layout = QVBoxLayout(self)
layout.setSpacing(3) Layout.setSpacing(3)
layout.setContentsMargins(3, 3, 3, 3) Layout.setContentsMargins(3, 3, 3, 3)
toolbarLayout = QHBoxLayout() ToolbarLayout = QHBoxLayout()
self.zoomInBtn = QPushButton("") self.ZoomInBtn = QPushButton("")
self.zoomInBtn.setFixedSize(25, 25) self.ZoomInBtn.setFixedSize(25, 25)
self.zoomOutBtn = QPushButton("") self.ZoomOutBtn = QPushButton("")
self.zoomOutBtn.setFixedSize(25, 25) self.ZoomOutBtn.setFixedSize(25, 25)
self.zoomResetBtn = QPushButton("") self.ZoomResetBtn = QPushButton("")
self.zoomResetBtn.setIcon(QIcon(":/res/icons/Reset.svg")) self.ZoomResetBtn.setIcon(QIcon(":/res/icons/Reset.svg"))
self.zoomResetBtn.setIconSize(QSize(20, 20)) self.ZoomResetBtn.setIconSize(QSize(20, 20))
self.zoomResetBtn.setFixedSize(25, 25) self.ZoomResetBtn.setFixedSize(25, 25)
self.zoomResetBtn.setToolTip("重置缩放") self.ZoomResetBtn.setToolTip("重置缩放")
self.zoomLabel = QLabel(f"{self._fontSize}px") self.ZoomLabel = QLabel(f"{self._fontSize}px")
self.zoomLabel.setFixedHeight(25) self.ZoomLabel.setFixedHeight(25)
self.orchBtn = QPushButton("编排") self.OrchBtn = QPushButton("编排")
self.orchBtn.setFixedHeight(25) self.OrchBtn.setFixedHeight(25)
self.orchBtn.setToolTip("可视化生成 AutoScript 代码并插入到光标位置") self.OrchBtn.setToolTip("可视化生成 AutoScript 代码并插入到光标位置")
toolbarLayout.addWidget(self.orchBtn) ToolbarLayout.addWidget(self.OrchBtn)
self.debugBtn = QPushButton("▶ 调试运行") self.DebugBtn = QPushButton("▶ 调试运行")
self.debugBtn.setFixedHeight(25) self.DebugBtn.setFixedHeight(25)
self.debugBtn.setToolTip("使用右侧模拟数据执行脚本,查看目标变量变化") self.DebugBtn.setToolTip("使用右侧模拟数据执行脚本,查看目标变量变化")
toolbarLayout.addWidget(self.debugBtn) ToolbarLayout.addWidget(self.DebugBtn)
sep = QFrame() Sep = QFrame()
sep.setFrameShape(QFrame.Shape.VLine) Sep.setFrameShape(QFrame.Shape.VLine)
sep.setFrameShadow(QFrame.Shadow.Sunken) Sep.setFrameShadow(QFrame.Shadow.Sunken)
sep.setFixedWidth(1) Sep.setFixedWidth(1)
toolbarLayout.addWidget(sep) ToolbarLayout.addWidget(Sep)
toolbarLayout.addWidget(self.zoomInBtn) ToolbarLayout.addWidget(self.ZoomInBtn)
toolbarLayout.addWidget(self.zoomOutBtn) ToolbarLayout.addWidget(self.ZoomOutBtn)
toolbarLayout.addWidget(self.zoomResetBtn) ToolbarLayout.addWidget(self.ZoomResetBtn)
toolbarLayout.addWidget(self.zoomLabel) ToolbarLayout.addWidget(self.ZoomLabel)
toolbarLayout.addStretch() ToolbarLayout.addStretch()
self.copyBtn = QPushButton("") self.CopyBtn = QPushButton("")
self.copyBtn.setIcon(QIcon(":/res/icons/Copy.svg")) self.CopyBtn.setIcon(QIcon(":/res/icons/Copy.svg"))
self.copyBtn.setIconSize(QSize(20, 20)) self.CopyBtn.setIconSize(QSize(20, 20))
self.copyBtn.setFixedSize(25, 25) self.CopyBtn.setFixedSize(25, 25)
self.copyBtn.setToolTip("复制脚本") self.CopyBtn.setToolTip("复制脚本")
toolbarLayout.addWidget(self.copyBtn) ToolbarLayout.addWidget(self.CopyBtn)
layout.addLayout(toolbarLayout) Layout.addLayout(ToolbarLayout)
self.textEdit = _TabToSpacesEditor(self) self.TextEdit = _TabToSpacesEditor(self)
self.textEdit.setTabStopDistance(40) self.TextEdit.setTabStopDistance(40)
self.textEdit.setLineWrapMode( self.TextEdit.setLineWrapMode(
QPlainTextEdit.LineWrapMode.NoWrap QPlainTextEdit.LineWrapMode.NoWrap
) )
self.textEdit.setStyleSheet( self.TextEdit.setStyleSheet(
"QPlainTextEdit {" "QPlainTextEdit {"
" font-family: 'Courier New', 'Consolas', monospace;" " font-family: 'Courier New', 'Consolas', monospace;"
f" font-size: {self._fontSize}px;" f" font-size: {self._fontSize}px;"
"}" "}"
) )
layout.addWidget(self.textEdit) Layout.addWidget(self.TextEdit)
self.createButtonPanel(layout) self.createButtonPanel(Layout)
self.btnBox = QDialogButtonBox( self.BtnBox = QDialogButtonBox(
QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Ok |
QDialogButtonBox.StandardButton.Cancel QDialogButtonBox.StandardButton.Cancel
) )
self.btnBox.button(QDialogButtonBox.StandardButton.Ok).setText("确定") self.BtnBox.button(QDialogButtonBox.StandardButton.Ok).setText("确定")
self.btnBox.button(QDialogButtonBox.StandardButton.Cancel).setText("取消") self.BtnBox.button(QDialogButtonBox.StandardButton.Cancel).setText("取消")
layout.addWidget(self.btnBox) Layout.addWidget(self.BtnBox)
def createButtonPanel( def createButtonPanel(
self, self,
parent_layout ParentLayout
): ):
splitter = QSplitter(Qt.Orientation.Horizontal) Splitter = QSplitter(Qt.Orientation.Horizontal)
tabWidget = QTabWidget() TabWidget = QTabWidget()
tabWidget.setMaximumHeight(150) TabWidget.setMaximumHeight(150)
basicWidget = QWidget() BasicWidget = QWidget()
basicLayout = QGridLayout(basicWidget) BasicLayout = QGridLayout(BasicWidget)
basicLayout.setSpacing(4) BasicLayout.setSpacing(4)
basicLayout.setContentsMargins(4, 4, 4, 4) BasicLayout.setContentsMargins(4, 4, 4, 4)
basicLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) BasicLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
controlButtons = [ controlButtons = [
("如果 (if...)", "if then\n \nend"), ("如果 (if...)", "if then\n \nend"),
("再如果 (elseif...)", "elseif then\n "), ("再如果 (elseif...)", "elseif then\n "),
@@ -287,22 +287,22 @@ class ALAutoScriptEditDialog(QDialog):
("结束 (end)", "end"), ("结束 (end)", "end"),
("跳过 (pass)", "-- pass"), ("跳过 (pass)", "-- pass"),
] ]
self.addButtonsToGrid(basicLayout, controlButtons, 0, 0, 3) self.addButtonsToGrid(BasicLayout, controlButtons, 0, 0, 3)
assignButtons = [ assignButtons = [
("赋值 (=)", " = "), ("赋值 (=)", " = "),
] ]
self.addButtonsToGrid(basicLayout, assignButtons, 1, 2, 3) self.addButtonsToGrid(BasicLayout, assignButtons, 1, 2, 3)
tabWidget.addTab(basicWidget, "基本语法") TabWidget.addTab(BasicWidget, "基本语法")
operatorWidget = QWidget() OperatorWidget = QWidget()
operatorLayout = QGridLayout(operatorWidget) OperatorLayout = QGridLayout(OperatorWidget)
operatorLayout.setSpacing(4) OperatorLayout.setSpacing(4)
operatorLayout.setContentsMargins(4, 4, 4, 4) OperatorLayout.setContentsMargins(4, 4, 4, 4)
operatorLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) OperatorLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
arithmeticButtons = [ arithmeticButtons = [
("加 (+)", " + "), ("加 (+)", " + "),
("减 (-)", " - "), ("减 (-)", " - "),
] ]
self.addButtonsToGrid(operatorLayout, arithmeticButtons, 0, 0, 3) self.addButtonsToGrid(OperatorLayout, arithmeticButtons, 0, 0, 3)
compareButtons = [ compareButtons = [
("等于 (==)", " == "), ("等于 (==)", " == "),
("不等于 (~=)", " ~= "), ("不等于 (~=)", " ~= "),
@@ -311,50 +311,50 @@ class ALAutoScriptEditDialog(QDialog):
("大于等于 (>=)", " >= "), ("大于等于 (>=)", " >= "),
("小于等于 (<=)", " <= "), ("小于等于 (<=)", " <= "),
] ]
self.addButtonsToGrid(operatorLayout, compareButtons, 1, 0, 3) self.addButtonsToGrid(OperatorLayout, compareButtons, 1, 0, 3)
logic_buttons = [ logic_buttons = [
("且 (and)", " and "), ("且 (and)", " and "),
("或 (or)", " or "), ("或 (or)", " or "),
] ]
self.addButtonsToGrid(operatorLayout, logic_buttons, 2, 0, 3) self.addButtonsToGrid(OperatorLayout, logic_buttons, 2, 0, 3)
tabWidget.addTab(operatorWidget, "运算符") TabWidget.addTab(OperatorWidget, "运算符")
literalWidget = QWidget() LiteralWidget = QWidget()
literalLayout = QGridLayout(literalWidget) LiteralLayout = QGridLayout(LiteralWidget)
literalLayout.setSpacing(4) LiteralLayout.setSpacing(4)
literalLayout.setContentsMargins(4, 4, 4, 4) LiteralLayout.setContentsMargins(4, 4, 4, 4)
literalLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) LiteralLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
bool_buttons = [ bool_buttons = [
("真 (true)", "true"), ("真 (true)", "true"),
("假 (false)", "false"), ("假 (false)", "false"),
] ]
self.addButtonsToGrid(literalLayout, bool_buttons, 0, 0, 3) self.addButtonsToGrid(LiteralLayout, bool_buttons, 0, 0, 3)
dateTimeButtons = [ dateTimeButtons = [
("日期", 'date(2026, 1, 1)'), ("日期", 'date(2026, 1, 1)'),
("时间", 'time(0, 0)'), ("时间", 'time(0, 0)'),
] ]
self.addButtonsToGrid(literalLayout, dateTimeButtons, 1, 0, 3) self.addButtonsToGrid(LiteralLayout, dateTimeButtons, 1, 0, 3)
hintButtons = [ hintButtons = [
("字符串", '"请输入文本"'), ("字符串", '"请输入文本"'),
("数字", "123"), ("数字", "123"),
("注释", "-- 请输入注释"), ("注释", "-- 请输入注释"),
] ]
self.addButtonsToGrid(literalLayout, hintButtons, 2, 0, 3) self.addButtonsToGrid(LiteralLayout, hintButtons, 2, 0, 3)
tabWidget.addTab(literalWidget, "字面量") TabWidget.addTab(LiteralWidget, "字面量")
varWidget = QWidget() VarWidget = QWidget()
varLayout = QGridLayout(varWidget) VarLayout = QGridLayout(VarWidget)
varLayout.setSpacing(4) VarLayout.setSpacing(4)
varLayout.setContentsMargins(4, 4, 4, 4) VarLayout.setContentsMargins(4, 4, 4, 4)
varLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) VarLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
varButtons = [ varButtons = [
(display_name, name) for display_name, (name, _) in createAllVariablesTable().items() (display_name, name) for display_name, (name, _) in createAllVariablesTable().items()
] ]
self.addButtonsToGrid(varLayout, varButtons, 0, 0, 3) self.addButtonsToGrid(VarLayout, varButtons, 0, 0, 3)
tabWidget.addTab(varWidget, "变量") TabWidget.addTab(VarWidget, "变量")
funcWidget = QWidget() FuncWidget = QWidget()
funcLayout = QGridLayout(funcWidget) FuncLayout = QGridLayout(FuncWidget)
funcLayout.setSpacing(4) FuncLayout.setSpacing(4)
funcLayout.setContentsMargins(4, 4, 4, 4) FuncLayout.setContentsMargins(4, 4, 4, 4)
funcLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop) FuncLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
funcButtons = [ funcButtons = [
("datenow()", "datenow()", "返回当前日期的 Unix 时间戳"), ("datenow()", "datenow()", "返回当前日期的 Unix 时间戳"),
("timenow()", "timenow()", "返回当前时间在一天中的分钟数"), ("timenow()", "timenow()", "返回当前时间在一天中的分钟数"),
@@ -362,22 +362,22 @@ class ALAutoScriptEditDialog(QDialog):
("timeadd(time, n)", "timeadd(, )", "时间偏移: timeadd(分钟数, 分钟数)"), ("timeadd(time, n)", "timeadd(, )", "时间偏移: timeadd(分钟数, 分钟数)"),
] ]
for i, (text, template, tooltip) in enumerate(funcButtons): for i, (text, template, tooltip) in enumerate(funcButtons):
btn = QPushButton(text) Btn = QPushButton(text)
btn.setProperty("template", template) Btn.setProperty("template", template)
btn.clicked.connect(self.insertTemplate) Btn.clicked.connect(self.insertTemplate)
btn.setFixedWidth(100) Btn.setFixedWidth(100)
btn.setFixedHeight(25) Btn.setFixedHeight(25)
btn.setToolTip(tooltip) Btn.setToolTip(tooltip)
funcLayout.addWidget(btn, i // 2, i % 2) FuncLayout.addWidget(Btn, i // 2, i % 2)
tabWidget.addTab(funcWidget, "工具函数") TabWidget.addTab(FuncWidget, "工具函数")
mockPanel = self.createMockPanel() MockPanel = self.createMockPanel()
mockPanel.setMinimumWidth(260) MockPanel.setMinimumWidth(260)
splitter.addWidget(tabWidget) Splitter.addWidget(TabWidget)
splitter.addWidget(mockPanel) Splitter.addWidget(MockPanel)
splitter.setStretchFactor(0, 1) Splitter.setStretchFactor(0, 1)
splitter.setStretchFactor(1, 1) Splitter.setStretchFactor(1, 1)
splitter.setSizes([530, 530]) Splitter.setSizes([530, 530])
parent_layout.addWidget(splitter) ParentLayout.addWidget(Splitter)
def addButtonsToGrid( def addButtonsToGrid(
self, self,
@@ -392,13 +392,13 @@ class ALAutoScriptEditDialog(QDialog):
row = start_row row = start_row
for btn_text, template in buttons: for btn_text, template in buttons:
btn = QPushButton(btn_text) Btn = QPushButton(btn_text)
btn.setProperty("template", template) Btn.setProperty("template", template)
btn.clicked.connect(self.insertTemplate) Btn.clicked.connect(self.insertTemplate)
btn.setFixedWidth(100) Btn.setFixedWidth(100)
btn.setFixedHeight(25) Btn.setFixedHeight(25)
btn.setToolTip(f"插入: {template}") Btn.setToolTip(f"插入: {template}")
grid_layout.addWidget(btn, row, col) grid_layout.addWidget(Btn, row, col)
col += 1 col += 1
if col >= start_col + max_columns: if col >= start_col + max_columns:
col = start_col col = start_col
@@ -408,10 +408,10 @@ class ALAutoScriptEditDialog(QDialog):
self self
) -> QGroupBox: ) -> QGroupBox:
group = QGroupBox("模拟目标数据") Group = QGroupBox("模拟目标数据")
form = QFormLayout(group) Form = QFormLayout(Group)
form.setSpacing(4) Form.setSpacing(4)
form.setContentsMargins(5, 10, 5, 5) Form.setContentsMargins(5, 10, 5, 5)
self._mockWidgets = {} self._mockWidgets = {}
mockData = createMockTargetData() mockData = createMockTargetData()
for name, var_type, key_path, display_name in createTargetVarDefs(): for name, var_type, key_path, display_name in createTargetVarDefs():
@@ -419,11 +419,11 @@ class ALAutoScriptEditDialog(QDialog):
for key in key_path: for key in key_path:
d = d[key] d = d[key]
default = d default = d
widget = self.makeMockInput(var_type, default) Widget = self.makeMockInput(var_type, default)
label = QLabel(f"{display_name}: {name}({var_type})") Label = QLabel(f"{display_name}: {name}({var_type})")
form.addRow(label, widget) Form.addRow(Label, Widget)
self._mockWidgets[name] = (widget, var_type, key_path) self._mockWidgets[name] = (Widget, var_type, key_path)
return group return Group
def makeMockInput( def makeMockInput(
self, self,
@@ -432,41 +432,41 @@ class ALAutoScriptEditDialog(QDialog):
) -> QWidget: ) -> QWidget:
if var_type == "String": if var_type == "String":
w = QLineEdit() W = QLineEdit()
w.setText(str(default)) W.setText(str(default))
return w return W
if var_type == "Boolean": if var_type == "Boolean":
w = QComboBox() W = QComboBox()
w.addItems(["", ""]) W.addItems(["", ""])
w.setCurrentIndex(0 if default else 1) W.setCurrentIndex(0 if default else 1)
return w return W
if var_type == "Date": if var_type == "Date":
w = QDateEdit() W = QDateEdit()
w.setCalendarPopup(True) W.setCalendarPopup(True)
w.setDisplayFormat("yyyy-MM-dd") W.setDisplayFormat("yyyy-MM-dd")
w.setDate(QDate.fromString(str(default), "yyyy-MM-dd")) W.setDate(QDate.fromString(str(default), "yyyy-MM-dd"))
return w return W
if var_type == "Time": if var_type == "Time":
w = QTimeEdit() W = QTimeEdit()
w.setDisplayFormat("HH:mm") W.setDisplayFormat("HH:mm")
w.setTime(QTime.fromString(str(default), "HH:mm")) W.setTime(QTime.fromString(str(default), "HH:mm"))
return w return W
if var_type == "Int": if var_type == "Int":
w = QSpinBox() W = QSpinBox()
w.setMinimum(-999999) W.setMinimum(-999999)
w.setMaximum(999999) W.setMaximum(999999)
w.setValue(int(default) if default else 0) W.setValue(int(default) if default else 0)
return w return W
if var_type == "Float": if var_type == "Float":
w = QDoubleSpinBox() W = QDoubleSpinBox()
w.setMinimum(-999999.0) W.setMinimum(-999999.0)
w.setMaximum(999999.0) W.setMaximum(999999.0)
w.setDecimals(2) W.setDecimals(2)
w.setValue(float(default) if default else 0.0) W.setValue(float(default) if default else 0.0)
return w return W
w = QLineEdit() W = QLineEdit()
w.setText(str(default)) W.setText(str(default))
return w return W
def getMockData( def getMockData(
self self
@@ -541,45 +541,45 @@ class ALAutoScriptEditDialog(QDialog):
self self
): ):
self.btnBox.accepted.connect(self.accept) self.BtnBox.accepted.connect(self.accept)
self.btnBox.rejected.connect(self.reject) self.BtnBox.rejected.connect(self.reject)
self.orchBtn.clicked.connect(self.onOpenOrchDialog) self.OrchBtn.clicked.connect(self.onOpenOrchDialog)
self.debugBtn.clicked.connect(self.onDebugRun) self.DebugBtn.clicked.connect(self.onDebugRun)
self.zoomInBtn.clicked.connect(self.onZoomIn) self.ZoomInBtn.clicked.connect(self.onZoomIn)
self.zoomOutBtn.clicked.connect(self.onZoomOut) self.ZoomOutBtn.clicked.connect(self.onZoomOut)
self.zoomResetBtn.clicked.connect(self.onZoomReset) self.ZoomResetBtn.clicked.connect(self.onZoomReset)
self.copyBtn.clicked.connect(self.onCopy) self.CopyBtn.clicked.connect(self.onCopy)
def getScript( def getScript(
self self
) -> str: ) -> str:
return self.textEdit.toPlainText() return self.TextEdit.toPlainText()
def updateFontSize( def updateFontSize(
self self
): ):
self.textEdit.setStyleSheet( self.TextEdit.setStyleSheet(
"QPlainTextEdit {" "QPlainTextEdit {"
" font-family: 'Courier New', 'Consolas', monospace;" " font-family: 'Courier New', 'Consolas', monospace;"
f" font-size: {self._fontSize}px;" f" font-size: {self._fontSize}px;"
"}" "}"
) )
self.zoomLabel.setText(f"{self._fontSize}px") self.ZoomLabel.setText(f"{self._fontSize}px")
@Slot() @Slot()
def insertTemplate( def insertTemplate(
self self
): ):
btn = self.sender() Btn = self.sender()
if not isinstance(btn, QPushButton): if not isinstance(Btn, QPushButton):
return return
template = btn.property("template") template = Btn.property("template")
if not template: if not template:
return return
cursor = self.textEdit.textCursor() cursor = self.TextEdit.textCursor()
cursor.insertText(template) cursor.insertText(template)
@Slot() @Slot()
@@ -611,11 +611,11 @@ class ALAutoScriptEditDialog(QDialog):
self self
): ):
clipboard = QApplication.clipboard() Clipboard = QApplication.clipboard()
clipboard.setText(self.textEdit.toPlainText()) Clipboard.setText(self.TextEdit.toPlainText())
self.copyBtn.setEnabled(False) self.CopyBtn.setEnabled(False)
QTimer.singleShot(2000, lambda: ( QTimer.singleShot(2000, lambda: (
self.copyBtn.setEnabled(True) self.CopyBtn.setEnabled(True)
)) ))
@Slot() @Slot()
@@ -624,20 +624,20 @@ class ALAutoScriptEditDialog(QDialog):
): ):
from gui.ALAutoScriptOrchDialog import ALAutoScriptOrchDialog from gui.ALAutoScriptOrchDialog import ALAutoScriptOrchDialog
dlg = ALAutoScriptOrchDialog(self) Dlg = ALAutoScriptOrchDialog(self)
if dlg.exec() == QDialog.DialogCode.Accepted: if Dlg.exec() == QDialog.DialogCode.Accepted:
script = dlg.getScript() script = Dlg.getScript()
if script: if script:
cursor = self.textEdit.textCursor() cursor = self.TextEdit.textCursor()
cursor.insertText(script) cursor.insertText(script)
dlg.deleteLater() Dlg.deleteLater()
@Slot() @Slot()
def onDebugRun( def onDebugRun(
self self
): ):
script = self.textEdit.toPlainText().strip() script = self.TextEdit.toPlainText().strip()
if not script: if not script:
QMessageBox.warning(self, "提示", "脚本内容为空。") QMessageBox.warning(self, "提示", "脚本内容为空。")
return return
@@ -664,6 +664,6 @@ class ALAutoScriptEditDialog(QDialog):
if not changes: if not changes:
QMessageBox.information(self, "调试运行", "目标变量未发生变化。") QMessageBox.information(self, "调试运行", "目标变量未发生变化。")
return return
dlg = _DebugResultDialog(changes, self) Dlg = _DebugResultDialog(changes, self)
dlg.exec() Dlg.exec()
dlg.deleteLater() Dlg.deleteLater()
+64 -64
View File
@@ -57,81 +57,81 @@ class ConditionalBlock(QGroupBox):
"margin-top: 5px; padding-top: 5px; }" "margin-top: 5px; padding-top: 5px; }"
) )
self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed) self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
mainLayout = QVBoxLayout(self) MainLayout = QVBoxLayout(self)
mainLayout.setSpacing(6) MainLayout.setSpacing(6)
mainLayout.setContentsMargins(8, 8, 8, 8) MainLayout.setContentsMargins(8, 8, 8, 8)
headerLayout = QHBoxLayout() HeaderLayout = QHBoxLayout()
headerLayout.setSpacing(8) HeaderLayout.setSpacing(8)
self.typeCombo = QComboBox(self) self.TypeCombo = QComboBox(self)
self.typeCombo.addItem("IF", "IF") self.TypeCombo.addItem("IF", "IF")
self.typeCombo.addItem("ELSE IF", "ELSE IF") self.TypeCombo.addItem("ELSE IF", "ELSE IF")
self.typeCombo.addItem("ELSE", "ELSE") self.TypeCombo.addItem("ELSE", "ELSE")
self.typeCombo.setFixedHeight(25) self.TypeCombo.setFixedHeight(25)
if self.blockIndex == 0: if self.blockIndex == 0:
self.typeCombo.setEnabled(False) self.TypeCombo.setEnabled(False)
headerLayout.addWidget(QLabel("类型:", self)) HeaderLayout.addWidget(QLabel("类型:", self))
headerLayout.addWidget(self.typeCombo) HeaderLayout.addWidget(self.TypeCombo)
headerLayout.addStretch() HeaderLayout.addStretch()
self.deleteBlockBtn = QPushButton("删除此块", self) self.DeleteBlockBtn = QPushButton("删除此块", self)
self.deleteBlockBtn.setStyleSheet("color: red;") self.DeleteBlockBtn.setStyleSheet("color: red;")
self.deleteBlockBtn.setFixedHeight(25) self.DeleteBlockBtn.setFixedHeight(25)
headerLayout.addWidget(self.deleteBlockBtn) HeaderLayout.addWidget(self.DeleteBlockBtn)
mainLayout.addLayout(headerLayout) MainLayout.addLayout(HeaderLayout)
self.conditionWidget = QWidget(self) self.ConditionWidget = QWidget(self)
self.conditionWidget.setSizePolicy( self.ConditionWidget.setSizePolicy(
QSizePolicy.Preferred, QSizePolicy.Preferred QSizePolicy.Preferred, QSizePolicy.Preferred
) )
condLayout = QVBoxLayout(self.conditionWidget) CondLayout = QVBoxLayout(self.ConditionWidget)
condLayout.setContentsMargins(4, 4, 4, 4) CondLayout.setContentsMargins(4, 4, 4, 4)
condLayout.setSpacing(6) CondLayout.setSpacing(6)
self.condRowsLayout = QVBoxLayout() self.CondRowsLayout = QVBoxLayout()
self.condRowsLayout.setSpacing(4) self.CondRowsLayout.setSpacing(4)
condLayout.addLayout(self.condRowsLayout) CondLayout.addLayout(self.CondRowsLayout)
self.addCondBtn = QPushButton("+ 添加条件", self.conditionWidget) self.AddCondBtn = QPushButton("+ 添加条件", self.ConditionWidget)
self.addCondBtn.setFixedHeight(25) self.AddCondBtn.setFixedHeight(25)
condLayout.addWidget(self.addCondBtn) CondLayout.addWidget(self.AddCondBtn)
mainLayout.addWidget(self.conditionWidget) MainLayout.addWidget(self.ConditionWidget)
self.actionLabel = QLabel("执行步骤:", self) self.ActionLabel = QLabel("执行步骤:", self)
self.actionLabel.setFixedHeight(25) self.ActionLabel.setFixedHeight(25)
mainLayout.addWidget(self.actionLabel) MainLayout.addWidget(self.ActionLabel)
self.actionsLayout = QVBoxLayout() self.ActionsLayout = QVBoxLayout()
self.actionsLayout.setSpacing(4) self.ActionsLayout.setSpacing(4)
mainLayout.addLayout(self.actionsLayout) MainLayout.addLayout(self.ActionsLayout)
self.addActionBtn = QPushButton("+ 添加执行步骤", self) self.AddActionBtn = QPushButton("+ 添加执行步骤", self)
self.addActionBtn.setFixedHeight(25) self.AddActionBtn.setFixedHeight(25)
mainLayout.addWidget(self.addActionBtn) MainLayout.addWidget(self.AddActionBtn)
self.setUpdatesEnabled(True) self.setUpdatesEnabled(True)
def connectSignals( def connectSignals(
self self
): ):
self.typeCombo.currentIndexChanged.connect(self.onTypeChanged) self.TypeCombo.currentIndexChanged.connect(self.onTypeChanged)
self.addCondBtn.clicked.connect(self.addConditionRow) self.AddCondBtn.clicked.connect(self.addConditionRow)
self.addActionBtn.clicked.connect(self.addActionStep) self.AddActionBtn.clicked.connect(self.addActionStep)
def addInitialConditionRow( def addInitialConditionRow(
self self
): ):
row = ConditionRowFrame( Row = ConditionRowFrame(
self._varMgr, self.blockIndex, self._varMgr, self.blockIndex,
isFirst=True, parent=self isFirst=True, parent=self
) )
self._conditionRows.append(row) self._conditionRows.append(Row)
self.condRowsLayout.addWidget(row) self.CondRowsLayout.addWidget(Row)
def addConditionRow( def addConditionRow(
self self
): ):
row = ConditionRowFrame( Row = ConditionRowFrame(
self._varMgr, self.blockIndex, self._varMgr, self.blockIndex,
isFirst=False, parent=self isFirst=False, parent=self
) )
row.deleteBtn.clicked.connect(lambda: self.removeConditionRow(row)) Row.DeleteBtn.clicked.connect(lambda: self.removeConditionRow(Row))
self._conditionRows.append(row) self._conditionRows.append(Row)
self.condRowsLayout.addWidget(row) self.CondRowsLayout.addWidget(Row)
def removeConditionRow( def removeConditionRow(
self, self,
@@ -140,7 +140,7 @@ class ConditionalBlock(QGroupBox):
if row in self._conditionRows and len(self._conditionRows) > 1: if row in self._conditionRows and len(self._conditionRows) > 1:
self._conditionRows.remove(row) self._conditionRows.remove(row)
self.condRowsLayout.removeWidget(row) self.CondRowsLayout.removeWidget(row)
row.hide() row.hide()
row.deleteLater() row.deleteLater()
@@ -148,10 +148,10 @@ class ConditionalBlock(QGroupBox):
self self
): ):
step = ActionStepFrame(self._varMgr, self.blockIndex, parent=self) Step = ActionStepFrame(self._varMgr, self.blockIndex, parent=self)
step.deleteBtn.clicked.connect(lambda: self.removeActionStep(step)) Step.DeleteBtn.clicked.connect(lambda: self.removeActionStep(Step))
self._actionWidgets.append(step) self._actionWidgets.append(Step)
self.actionsLayout.addWidget(step) self.ActionsLayout.addWidget(Step)
def removeActionStep( def removeActionStep(
self, self,
@@ -160,7 +160,7 @@ class ConditionalBlock(QGroupBox):
if step in self._actionWidgets: if step in self._actionWidgets:
self._actionWidgets.remove(step) self._actionWidgets.remove(step)
self.actionsLayout.removeWidget(step) self.ActionsLayout.removeWidget(step)
step.hide() step.hide()
step.deleteLater() step.deleteLater()
@@ -168,7 +168,7 @@ class ConditionalBlock(QGroupBox):
self self
) -> str: ) -> str:
return self.typeCombo.currentData() return self.TypeCombo.currentData()
def getConditionRows( def getConditionRows(
self self
@@ -239,18 +239,18 @@ class ConditionalBlock(QGroupBox):
prevType: str | None prevType: str | None
): ):
model = self.typeCombo.model() model = self.TypeCombo.model()
if model is None: if model is None:
return return
for data in ("ELSE IF", "ELSE"): for data in ("ELSE IF", "ELSE"):
idx = self.typeCombo.findData(data) idx = self.TypeCombo.findData(data)
if idx < 0: if idx < 0:
continue continue
item = model.item(idx) item = model.item(idx)
shouldEnable = prevType != "ELSE" shouldEnable = prevType != "ELSE"
item.setEnabled(shouldEnable) item.setEnabled(shouldEnable)
if prevType == "ELSE" and self.typeCombo.currentData() in ("ELSE IF", "ELSE"): if prevType == "ELSE" and self.TypeCombo.currentData() in ("ELSE IF", "ELSE"):
self.typeCombo.setCurrentIndex(0) self.TypeCombo.setCurrentIndex(0)
@Slot(int) @Slot(int)
def onTypeChanged( def onTypeChanged(
@@ -258,8 +258,8 @@ class ConditionalBlock(QGroupBox):
_idx _idx
): ):
isCond = self.typeCombo.currentData() in ("IF", "ELSE IF") isCond = self.TypeCombo.currentData() in ("IF", "ELSE IF")
self.conditionWidget.setVisible(isCond) self.ConditionWidget.setVisible(isCond)
self.actionLabel.setText( self.ActionLabel.setText(
"执行步骤:" if isCond else "ELSE 执行步骤:" "执行步骤:" if isCond else "ELSE 执行步骤:"
) )
+35 -35
View File
@@ -40,7 +40,7 @@ class ALAutoScriptOrchDialog(QDialog):
self.setupUi() self.setupUi()
self.connectSignals() self.connectSignals()
self.addBlock() self.addBlock()
self.scrollLayout.addStretch() self.ScrollLayout.addStretch()
def setupUi( def setupUi(
self self
@@ -49,33 +49,33 @@ class ALAutoScriptOrchDialog(QDialog):
self.setWindowTitle("AutoScript 指令编排 - AutoLibrary") self.setWindowTitle("AutoScript 指令编排 - AutoLibrary")
self.setMinimumSize(640, 600) self.setMinimumSize(640, 600)
self.setModal(True) self.setModal(True)
mainLayout = QVBoxLayout(self) MainLayout = QVBoxLayout(self)
scroll = QScrollArea() Scroll = QScrollArea()
scroll.setWidgetResizable(True) Scroll.setWidgetResizable(True)
scroll.setFrameShape(QFrame.NoFrame) Scroll.setFrameShape(QFrame.NoFrame)
scrollContent = QWidget() ScrollContent = QWidget()
self.scrollLayout = QVBoxLayout(scrollContent) self.ScrollLayout = QVBoxLayout(ScrollContent)
self.scrollLayout.setSpacing(5) self.ScrollLayout.setSpacing(5)
scroll.setWidget(scrollContent) Scroll.setWidget(ScrollContent)
mainLayout.addWidget(scroll) MainLayout.addWidget(Scroll)
self.addBlockBtn = QPushButton("+ 添加判断块") self.AddBlockBtn = QPushButton("+ 添加判断块")
self.addBlockBtn.setFixedHeight(25) self.AddBlockBtn.setFixedHeight(25)
mainLayout.addWidget(self.addBlockBtn) MainLayout.addWidget(self.AddBlockBtn)
self.btnBox = QDialogButtonBox( self.BtnBox = QDialogButtonBox(
QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Ok |
QDialogButtonBox.StandardButton.Cancel QDialogButtonBox.StandardButton.Cancel
) )
self.btnBox.button(QDialogButtonBox.StandardButton.Ok).setText("确定") self.BtnBox.button(QDialogButtonBox.StandardButton.Ok).setText("确定")
self.btnBox.button(QDialogButtonBox.StandardButton.Cancel).setText("取消") self.BtnBox.button(QDialogButtonBox.StandardButton.Cancel).setText("取消")
mainLayout.addWidget(self.btnBox) MainLayout.addWidget(self.BtnBox)
def connectSignals( def connectSignals(
self self
): ):
self.btnBox.accepted.connect(self.onAccept) self.BtnBox.accepted.connect(self.onAccept)
self.btnBox.rejected.connect(self.reject) self.BtnBox.rejected.connect(self.reject)
self.addBlockBtn.clicked.connect(self.addBlock) self.AddBlockBtn.clicked.connect(self.addBlock)
def updateBlockTypeRestrictions( def updateBlockTypeRestrictions(
self self
@@ -90,24 +90,24 @@ class ALAutoScriptOrchDialog(QDialog):
self self
): ):
block = ConditionalBlock( Block = ConditionalBlock(
len(self._blocks), self._varMgr, parent=self len(self._blocks), self._varMgr, parent=self
) )
block.deleteBlockBtn.clicked.connect(lambda: self.removeBlock(block)) Block.DeleteBlockBtn.clicked.connect(lambda: self.removeBlock(Block))
block.typeCombo.currentIndexChanged.connect(self.updateBlockTypeRestrictions) Block.TypeCombo.currentIndexChanged.connect(self.updateBlockTypeRestrictions)
block.addActionStep() Block.addActionStep()
self._blocks.append(block) self._blocks.append(Block)
self.updateBlockTypeRestrictions() self.updateBlockTypeRestrictions()
if self.scrollLayout.count() > 0: if self.ScrollLayout.count() > 0:
lastItem = self.scrollLayout.itemAt( lastItem = self.ScrollLayout.itemAt(
self.scrollLayout.count() - 1 self.ScrollLayout.count() - 1
) )
if lastItem and lastItem.spacerItem(): if lastItem and lastItem.spacerItem():
self.scrollLayout.insertWidget( self.ScrollLayout.insertWidget(
self.scrollLayout.count() - 1, block self.ScrollLayout.count() - 1, Block
) )
return return
self.scrollLayout.addWidget(block) self.ScrollLayout.addWidget(Block)
def removeBlock( def removeBlock(
self, self,
@@ -119,16 +119,16 @@ class ALAutoScriptOrchDialog(QDialog):
return return
if block in self._blocks: if block in self._blocks:
self._blocks.remove(block) self._blocks.remove(block)
self.scrollLayout.removeWidget(block) self.ScrollLayout.removeWidget(block)
block.hide() block.hide()
block.deleteLater() block.deleteLater()
for i, blk in enumerate(self._blocks): for i, blk in enumerate(self._blocks):
blk.blockIndex = i blk.blockIndex = i
if i == 0: if i == 0:
blk.typeCombo.setEnabled(False) blk.TypeCombo.setEnabled(False)
blk.typeCombo.setCurrentIndex(0) blk.TypeCombo.setCurrentIndex(0)
else: else:
blk.typeCombo.setEnabled(True) blk.TypeCombo.setEnabled(True)
blk.refreshVarCombos() blk.refreshVarCombos()
self.updateBlockTypeRestrictions() self.updateBlockTypeRestrictions()
+68 -68
View File
@@ -110,39 +110,39 @@ class _DateInputContainer(QWidget):
self self
): ):
layout = QHBoxLayout(self) Layout = QHBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0) Layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(4) Layout.setSpacing(4)
self._modeCombo = QComboBox(self) self._ModeCombo = QComboBox(self)
self._modeCombo.addItem("相对日期", "relative") self._ModeCombo.addItem("相对日期", "relative")
self._modeCombo.addItem("绝对日期", "absolute") self._ModeCombo.addItem("绝对日期", "absolute")
self._modeCombo.setFixedHeight(25) self._ModeCombo.setFixedHeight(25)
self._stack = QStackedWidget(self) self._Stack = QStackedWidget(self)
self._relCombo = QComboBox(self) self._RelCombo = QComboBox(self)
for display, data in DATE_OPTIONS: for display, data in DATE_OPTIONS:
self._relCombo.addItem(display, data) self._RelCombo.addItem(display, data)
self._relCombo.setFixedHeight(25) self._RelCombo.setFixedHeight(25)
self._stack.addWidget(self._relCombo) self._Stack.addWidget(self._RelCombo)
self._dateEdit = QDateEdit(self) self._DateEdit = QDateEdit(self)
self._dateEdit.setDisplayFormat("yyyy-MM-dd") self._DateEdit.setDisplayFormat("yyyy-MM-dd")
self._dateEdit.setCalendarPopup(True) self._DateEdit.setCalendarPopup(True)
self._dateEdit.setFixedHeight(25) self._DateEdit.setFixedHeight(25)
self._stack.addWidget(self._dateEdit) self._Stack.addWidget(self._DateEdit)
self._modeCombo.currentIndexChanged.connect( self._ModeCombo.currentIndexChanged.connect(
lambda i: self._stack.setCurrentIndex(i) lambda i: self._Stack.setCurrentIndex(i)
) )
layout.addWidget(self._modeCombo) Layout.addWidget(self._ModeCombo)
layout.addWidget(self._stack) Layout.addWidget(self._Stack)
layout.addStretch() Layout.addStretch()
def getValue( def getValue(
self self
) -> str: ) -> str:
mode = self._modeCombo.currentData() mode = self._ModeCombo.currentData()
if mode == "relative": if mode == "relative":
return self._relCombo.currentText() return self._RelCombo.currentText()
return self._dateEdit.date().toString("yyyy-MM-dd") return self._DateEdit.date().toString("yyyy-MM-dd")
class _TimeInputContainer(QWidget): class _TimeInputContainer(QWidget):
@@ -153,19 +153,19 @@ class _TimeInputContainer(QWidget):
): ):
super().__init__(parent) super().__init__(parent)
self._timeEdit = QTimeEdit(self) self._TimeEdit = QTimeEdit(self)
self._timeEdit.setDisplayFormat("HH:mm") self._TimeEdit.setDisplayFormat("HH:mm")
self._timeEdit.setFixedHeight(25) self._TimeEdit.setFixedHeight(25)
layout = QHBoxLayout(self) Layout = QHBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0) Layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self._timeEdit) Layout.addWidget(self._TimeEdit)
def getValue( def getValue(
self self
) -> str: ) -> str:
return self._timeEdit.time().toString("HH:mm") return self._TimeEdit.time().toString("HH:mm")
class _DateOffsetContainer(QWidget): class _DateOffsetContainer(QWidget):
@@ -176,20 +176,20 @@ class _DateOffsetContainer(QWidget):
): ):
super().__init__(parent) super().__init__(parent)
self._spinBox = QSpinBox(self) self._SpinBox = QSpinBox(self)
self._spinBox.setRange(0, 99999) self._SpinBox.setRange(0, 99999)
self._spinBox.setFixedHeight(25) self._SpinBox.setFixedHeight(25)
self._unitCombo = QComboBox(self) self._UnitCombo = QComboBox(self)
for display, data in DATE_OFFSET_OPTIONS: for display, data in DATE_OFFSET_OPTIONS:
self._unitCombo.addItem(display, data) self._UnitCombo.addItem(display, data)
self._unitCombo.setFixedHeight(25) self._UnitCombo.setFixedHeight(25)
layout = QHBoxLayout(self) Layout = QHBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0) Layout.setContentsMargins(0, 0, 0, 0)
layout.setSpacing(4) Layout.setSpacing(4)
layout.addWidget(self._spinBox) Layout.addWidget(self._SpinBox)
layout.addWidget(self._unitCombo) Layout.addWidget(self._UnitCombo)
layout.addStretch() Layout.addStretch()
def getValue( def getValue(
self self
@@ -201,8 +201,8 @@ class _DateOffsetContainer(QWidget):
self self
) -> int: ) -> int:
val = self._spinBox.value() val = self._SpinBox.value()
unit = self._unitCombo.currentData() unit = self._UnitCombo.currentData()
if unit == "weeks": if unit == "weeks":
return val*7 return val*7
if unit == "months": if unit == "months":
@@ -220,14 +220,14 @@ class _TimeOffsetContainer(QWidget):
): ):
super().__init__(parent) super().__init__(parent)
self._spinBox = QSpinBox(self) self._SpinBox = QSpinBox(self)
self._spinBox.setRange(0, 99999) self._SpinBox.setRange(0, 99999)
self._spinBox.setSuffix(" 小时") self._SpinBox.setSuffix(" 小时")
self._spinBox.setFixedHeight(25) self._SpinBox.setFixedHeight(25)
layout = QHBoxLayout(self) Layout = QHBoxLayout(self)
layout.setContentsMargins(0, 0, 0, 0) Layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self._spinBox) Layout.addWidget(self._SpinBox)
def getValue( def getValue(
self self
@@ -239,7 +239,7 @@ class _TimeOffsetContainer(QWidget):
self self
) -> int: ) -> int:
return self._spinBox.value() return self._SpinBox.value()
class VariableManager(QObject): class VariableManager(QObject):
@@ -364,11 +364,11 @@ def makeVarRefCombo(
parent: QWidget = None parent: QWidget = None
) -> QComboBox: ) -> QComboBox:
cb = QComboBox(parent) Cb = QComboBox(parent)
cb.setFixedHeight(25) Cb.setFixedHeight(25)
cb.setMinimumWidth(120) Cb.setMinimumWidth(120)
cb.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) Cb.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
return cb return Cb
def makeComboWidget( def makeComboWidget(
items, items,
@@ -376,12 +376,12 @@ def makeComboWidget(
parent: QWidget = None parent: QWidget = None
) -> QComboBox: ) -> QComboBox:
cb = QComboBox(parent) Cb = QComboBox(parent)
for display, data in items: for display, data in items:
cb.addItem(display, data) Cb.addItem(display, data)
cb.setFixedHeight(25) Cb.setFixedHeight(25)
cb.setMinimumWidth(min_width) Cb.setMinimumWidth(min_width)
return cb return Cb
def makeLabel( def makeLabel(
text: str, text: str,
@@ -389,11 +389,11 @@ def makeLabel(
width: int = None width: int = None
) -> QLabel: ) -> QLabel:
lbl = QLabel(text, parent) Lbl = QLabel(text, parent)
lbl.setFixedHeight(25) Lbl.setFixedHeight(25)
if width: if width:
lbl.setFixedWidth(width) Lbl.setFixedWidth(width)
return lbl return Lbl
def getValueFromWidget( def getValueFromWidget(
w: QWidget w: QWidget
+124 -124
View File
@@ -66,42 +66,42 @@ class ConditionRowFrame(QFrame):
self.setFrameShape(QFrame.StyledPanel) self.setFrameShape(QFrame.StyledPanel)
self.setFrameShadow(QFrame.Raised) self.setFrameShadow(QFrame.Raised)
self.setFixedHeight(32) self.setFixedHeight(32)
layout = QHBoxLayout(self) Layout = QHBoxLayout(self)
layout.setContentsMargins(2, 2, 2, 2) Layout.setContentsMargins(2, 2, 2, 2)
layout.setSpacing(4) Layout.setSpacing(4)
if self._isFirst: if self._isFirst:
self.logicCombo = None self.LogicCombo = None
else: else:
self.logicCombo = makeComboWidget(LOGIC_OPTIONS, min_width=110, parent=self) self.LogicCombo = makeComboWidget(LOGIC_OPTIONS, min_width=110, parent=self)
layout.addWidget(self.logicCombo) Layout.addWidget(self.LogicCombo)
self.leftVarCombo = QComboBox(self) self.LeftVarCombo = QComboBox(self)
self.leftVarCombo.setFixedHeight(25) self.LeftVarCombo.setFixedHeight(25)
self.leftVarCombo.setMinimumWidth(120) self.LeftVarCombo.setMinimumWidth(120)
self.leftVarCombo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.LeftVarCombo.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.populateLeftVarCombo() self.populateLeftVarCombo()
layout.addWidget(self.leftVarCombo) Layout.addWidget(self.LeftVarCombo)
self.opCombo = makeComboWidget(COMPARE_OPTIONS, min_width=80, parent=self) self.OpCombo = makeComboWidget(COMPARE_OPTIONS, min_width=80, parent=self)
layout.addWidget(self.opCombo) Layout.addWidget(self.OpCombo)
self._compTypeCombo = makeComboWidget([ self._CompTypeCombo = makeComboWidget([
("特定值", "literal"), ("特定值", "literal"),
("变量", "variable"), ("变量", "variable"),
], min_width=70, parent=self) ], min_width=70, parent=self)
layout.addWidget(self._compTypeCombo) Layout.addWidget(self._CompTypeCombo)
self.rhsStack = QStackedWidget(self) self.RhsStack = QStackedWidget(self)
self.rhsStack.setFixedHeight(25) self.RhsStack.setFixedHeight(25)
self.initLiteralStack() self.initLiteralStack()
self.rhsVarCombo = makeVarRefCombo(self) self.RhsVarCombo = makeVarRefCombo(self)
self.rhsStack.addWidget(self.rhsVarCombo) self.RhsStack.addWidget(self.RhsVarCombo)
self.rhsStack.setCurrentIndex(0) self.RhsStack.setCurrentIndex(0)
layout.addWidget(self.rhsStack) Layout.addWidget(self.RhsStack)
if not self._isFirst: if not self._isFirst:
self.deleteBtn = QPushButton("×", self) self.DeleteBtn = QPushButton("×", self)
self.deleteBtn.setFixedSize(25, 25) self.DeleteBtn.setFixedSize(25, 25)
self.deleteBtn.setStyleSheet("color: red; font-weight: bold;") self.DeleteBtn.setStyleSheet("color: red; font-weight: bold;")
layout.addWidget(self.deleteBtn) Layout.addWidget(self.DeleteBtn)
else: else:
self.deleteBtn = None self.DeleteBtn = None
layout.addStretch() Layout.addStretch()
self.setUpdatesEnabled(True) self.setUpdatesEnabled(True)
def populateLeftVarCombo( def populateLeftVarCombo(
@@ -111,53 +111,53 @@ class ConditionRowFrame(QFrame):
wasBool = self._isBoolMode wasBool = self._isBoolMode
boolName = None boolName = None
if wasBool: if wasBool:
data = self.leftVarCombo.currentData() data = self.LeftVarCombo.currentData()
if data: if data:
boolName = data[0] boolName = data[0]
self._varMgr.populateCombo(self.leftVarCombo) self._varMgr.populateCombo(self.LeftVarCombo)
# Append boolean literal sentinels at the end # Append boolean literal sentinels at the end
self.leftVarCombo.insertSeparator(self.leftVarCombo.count()) self.LeftVarCombo.insertSeparator(self.LeftVarCombo.count())
self.leftVarCombo.addItem("true", ("true", "Boolean")) self.LeftVarCombo.addItem("true", ("true", "Boolean"))
self.leftVarCombo.addItem("false", ("false", "Boolean")) self.LeftVarCombo.addItem("false", ("false", "Boolean"))
if wasBool and boolName: if wasBool and boolName:
for ci in range(self.leftVarCombo.count()): for ci in range(self.LeftVarCombo.count()):
d = self.leftVarCombo.itemData(ci) d = self.LeftVarCombo.itemData(ci)
if d and d[0] == boolName: if d and d[0] == boolName:
self.leftVarCombo.setCurrentIndex(ci) self.LeftVarCombo.setCurrentIndex(ci)
break break
def populateRHSVarCombo( def populateRHSVarCombo(
self self
): ):
self._varMgr.populateCombo(self.rhsVarCombo) self._varMgr.populateCombo(self.RhsVarCombo)
def initLiteralStack( def initLiteralStack(
self self
): ):
self.literalStack = QStackedWidget(self) self.LiteralStack = QStackedWidget(self)
self.literalStack.setFixedHeight(25) self.LiteralStack.setFixedHeight(25)
self._literalWidgets = {} self._literalWidgets = {}
for vt in getTypeOrder(): for vt in getTypeOrder():
w = makeValueWidget(vt, self.literalStack) W = makeValueWidget(vt, self.LiteralStack)
self._literalWidgets[vt] = w self._literalWidgets[vt] = W
self.literalStack.addWidget(w) self.LiteralStack.addWidget(W)
self.literalStack.setCurrentWidget(self._literalWidgets.get("String")) self.LiteralStack.setCurrentWidget(self._literalWidgets.get("String"))
self.rhsStack.addWidget(self.literalStack) self.RhsStack.addWidget(self.LiteralStack)
def connectSignals( def connectSignals(
self self
): ):
self.leftVarCombo.currentIndexChanged.connect(self.onLeftVarChanged) self.LeftVarCombo.currentIndexChanged.connect(self.onLeftVarChanged)
self._compTypeCombo.currentIndexChanged.connect(self.onCompTypeChanged) self._CompTypeCombo.currentIndexChanged.connect(self.onCompTypeChanged)
def getLogic( def getLogic(
self self
) -> str: ) -> str:
return self.logicCombo.currentData() if self.logicCombo else "" return self.LogicCombo.currentData() if self.LogicCombo else ""
def updateRHSLiteralWidget( def updateRHSLiteralWidget(
self, self,
@@ -166,13 +166,13 @@ class ConditionRowFrame(QFrame):
if vartype not in self._literalWidgets: if vartype not in self._literalWidgets:
vartype = "String" vartype = "String"
self.literalStack.setCurrentWidget(self._literalWidgets[vartype]) self.LiteralStack.setCurrentWidget(self._literalWidgets[vartype])
def toScript( def toScript(
self self
) -> str: ) -> str:
data = self.leftVarCombo.currentData() data = self.LeftVarCombo.currentData()
if self._isBoolMode and data: if self._isBoolMode and data:
return data[0] return data[0]
if not data: if not data:
@@ -183,12 +183,12 @@ class ConditionRowFrame(QFrame):
name = "datenow()" name = "datenow()"
elif name == "CURRENT_TIME": elif name == "CURRENT_TIME":
name = "timenow()" name = "timenow()"
opSym = self.opCombo.currentData() opSym = self.OpCombo.currentData()
if self._rawRhsExpr: if self._rawRhsExpr:
return f"{name} {opSym} {self._rawRhsExpr}" return f"{name} {opSym} {self._rawRhsExpr}"
isVarRef = (self._compTypeCombo.currentData() == "variable") isVarRef = (self._CompTypeCombo.currentData() == "variable")
if isVarRef: if isVarRef:
rd = self.rhsVarCombo.currentData() rd = self.RhsVarCombo.currentData()
if rd: if rd:
rhsName = rd[0] rhsName = rd[0]
if rhsName == "CURRENT_DATE": if rhsName == "CURRENT_DATE":
@@ -196,7 +196,7 @@ class ConditionRowFrame(QFrame):
elif rhsName == "CURRENT_TIME": elif rhsName == "CURRENT_TIME":
rhsName = "timenow()" rhsName = "timenow()"
return f"{name} {opSym} {rhsName}" return f"{name} {opSym} {rhsName}"
rhsText = self.rhsVarCombo.currentText().strip() rhsText = self.RhsVarCombo.currentText().strip()
if rhsText: if rhsText:
return f"{name} {opSym} {rhsText}" return f"{name} {opSym} {rhsText}"
return "" return ""
@@ -223,15 +223,15 @@ class ConditionRowFrame(QFrame):
self._rawRhsExpr = "" self._rawRhsExpr = ""
if idx < 0: if idx < 0:
return return
data = self.leftVarCombo.itemData(idx) data = self.LeftVarCombo.itemData(idx)
if not data: if not data:
return return
name, vartype = data name, vartype = data
isBool = name in ("true", "false") isBool = name in ("true", "false")
self._isBoolMode = isBool self._isBoolMode = isBool
self.opCombo.setVisible(not isBool) self.OpCombo.setVisible(not isBool)
self._compTypeCombo.setVisible(not isBool) self._CompTypeCombo.setVisible(not isBool)
self.rhsStack.setVisible(not isBool) self.RhsStack.setVisible(not isBool)
if not isBool: if not isBool:
self.updateRHSLiteralWidget(vartype) self.updateRHSLiteralWidget(vartype)
@@ -242,8 +242,8 @@ class ConditionRowFrame(QFrame):
): ):
self._rawRhsExpr = "" self._rawRhsExpr = ""
isVar = (self._compTypeCombo.currentData() == "variable") isVar = (self._CompTypeCombo.currentData() == "variable")
self.rhsStack.setCurrentIndex(1 if isVar else 0) self.RhsStack.setCurrentIndex(1 if isVar else 0)
if isVar: if isVar:
self.populateRHSVarCombo() self.populateRHSVarCombo()
@@ -273,52 +273,52 @@ class ActionStepFrame(QFrame):
self.setFrameShape(QFrame.StyledPanel) self.setFrameShape(QFrame.StyledPanel)
self.setFrameShadow(QFrame.Raised) self.setFrameShadow(QFrame.Raised)
self.setFixedHeight(35) self.setFixedHeight(35)
layout = QHBoxLayout(self) Layout = QHBoxLayout(self)
layout.setContentsMargins(2, 2, 2, 2) Layout.setContentsMargins(2, 2, 2, 2)
layout.setSpacing(4) Layout.setSpacing(4)
self.opTypeCombo = makeComboWidget(ACTION_OPTIONS, min_width=70, parent=self) self.OpTypeCombo = makeComboWidget(ACTION_OPTIONS, min_width=70, parent=self)
layout.addWidget(self.opTypeCombo) Layout.addWidget(self.OpTypeCombo)
layout.addWidget(makeLabel("设置", self)) Layout.addWidget(makeLabel("设置", self))
self.targetCombo = QComboBox(self) self.TargetCombo = QComboBox(self)
self.targetCombo.setFixedHeight(25) self.TargetCombo.setFixedHeight(25)
self.targetCombo.setMinimumWidth(120) self.TargetCombo.setMinimumWidth(120)
self.populateTargetCombo() self.populateTargetCombo()
layout.addWidget(self.targetCombo) Layout.addWidget(self.TargetCombo)
layout.addWidget(makeLabel("", self)) Layout.addWidget(makeLabel("", self))
self.valueSrcCombo = makeComboWidget([ self.ValueSrcCombo = makeComboWidget([
("特定值", "literal"), ("特定值", "literal"),
("变量", "variable"), ("变量", "variable"),
], min_width=70, parent=self) ], min_width=70, parent=self)
layout.addWidget(self.valueSrcCombo) Layout.addWidget(self.ValueSrcCombo)
self.valueStack = QStackedWidget(self) self.ValueStack = QStackedWidget(self)
self.valueStack.setFixedHeight(25) self.ValueStack.setFixedHeight(25)
self.initValueStacks() self.initValueStacks()
layout.addWidget(self.valueStack) Layout.addWidget(self.ValueStack)
self.existingVarCombo = makeVarRefCombo(self) self.ExistingVarCombo = makeVarRefCombo(self)
self.existingVarCombo.setVisible(False) self.ExistingVarCombo.setVisible(False)
layout.addWidget(self.existingVarCombo) Layout.addWidget(self.ExistingVarCombo)
self.deleteBtn = QPushButton("×", self) self.DeleteBtn = QPushButton("×", self)
self.deleteBtn.setFixedSize(25, 25) self.DeleteBtn.setFixedSize(25, 25)
self.deleteBtn.setStyleSheet("color: red; font-weight: bold;") self.DeleteBtn.setStyleSheet("color: red; font-weight: bold;")
layout.addWidget(self.deleteBtn) Layout.addWidget(self.DeleteBtn)
self.setUpdatesEnabled(True) self.setUpdatesEnabled(True)
def populateTargetCombo( def populateTargetCombo(
self self
): ):
self.targetCombo.blockSignals(True) self.TargetCombo.blockSignals(True)
self.targetCombo.clear() self.TargetCombo.clear()
for p in getPresetVars(): for p in getPresetVars():
if p["name"] in ("CURRENT_TIME", "CURRENT_DATE"): if p["name"] in ("CURRENT_TIME", "CURRENT_DATE"):
continue continue
info = self._varMgr.getInfoByName(p["name"]) info = self._varMgr.getInfoByName(p["name"])
if info: if info:
self.targetCombo.addItem( self.TargetCombo.addItem(
info["display"], info["display"],
(info["name"], info["type"]) (info["name"], info["type"])
) )
self.targetCombo.blockSignals(False) self.TargetCombo.blockSignals(False)
def initValueStacks( def initValueStacks(
self self
@@ -327,45 +327,45 @@ class ActionStepFrame(QFrame):
self._literalWidgets = {} self._literalWidgets = {}
self._offsetWidgets = {} self._offsetWidgets = {}
for vt in getTypeOrder(): for vt in getTypeOrder():
self._literalWidgets[vt] = makeValueWidget(vt, self.valueStack) self._literalWidgets[vt] = makeValueWidget(vt, self.ValueStack)
self.valueStack.addWidget(self._literalWidgets[vt]) self.ValueStack.addWidget(self._literalWidgets[vt])
if getArithType(vt): if getArithType(vt):
self._offsetWidgets[vt] = makeOffsetWidget(vt, self.valueStack) self._offsetWidgets[vt] = makeOffsetWidget(vt, self.ValueStack)
self.valueStack.addWidget(self._offsetWidgets[vt]) self.ValueStack.addWidget(self._offsetWidgets[vt])
else: else:
lbl = QLabel("(不支持该操作)", self.valueStack) Lbl = QLabel("(不支持该操作)", self.ValueStack)
lbl.setFixedHeight(25) Lbl.setFixedHeight(25)
self._offsetWidgets[vt] = lbl self._offsetWidgets[vt] = Lbl
self.valueStack.addWidget(lbl) self.ValueStack.addWidget(Lbl)
def connectSignals( def connectSignals(
self self
): ):
self.opTypeCombo.currentIndexChanged.connect(self.onOpTypeChanged) self.OpTypeCombo.currentIndexChanged.connect(self.onOpTypeChanged)
self.targetCombo.currentIndexChanged.connect(self.onTargetChanged) self.TargetCombo.currentIndexChanged.connect(self.onTargetChanged)
self.valueSrcCombo.currentIndexChanged.connect(self.onValueSrcChanged) self.ValueSrcCombo.currentIndexChanged.connect(self.onValueSrcChanged)
def getTargetName( def getTargetName(
self self
) -> str: ) -> str:
data = self.targetCombo.currentData() data = self.TargetCombo.currentData()
return data[0] if data else "" return data[0] if data else ""
def updateValueWidget( def updateValueWidget(
self self
): ):
op = self.opTypeCombo.currentData() op = self.OpTypeCombo.currentData()
isArith = (op in ("add", "sub")) isArith = (op in ("add", "sub"))
actualType = self._currentTargetType actualType = self._currentTargetType
if isArith and actualType in self._offsetWidgets: if isArith and actualType in self._offsetWidgets:
self.valueStack.setCurrentWidget(self._offsetWidgets[actualType]) self.ValueStack.setCurrentWidget(self._offsetWidgets[actualType])
elif actualType in self._literalWidgets: elif actualType in self._literalWidgets:
self.valueStack.setCurrentWidget(self._literalWidgets[actualType]) self.ValueStack.setCurrentWidget(self._literalWidgets[actualType])
else: else:
self.valueStack.setCurrentWidget(self._literalWidgets.get("String")) self.ValueStack.setCurrentWidget(self._literalWidgets.get("String"))
def toScript( def toScript(
self self
@@ -375,7 +375,7 @@ class ActionStepFrame(QFrame):
""" """
target = self.getTargetName() target = self.getTargetName()
op = self.opTypeCombo.currentData() op = self.OpTypeCombo.currentData()
if op == "pass": if op == "pass":
return " -- pass" return " -- pass"
if not target: if not target:
@@ -386,19 +386,19 @@ class ActionStepFrame(QFrame):
encoded = encodeValueStr(rawVal, vartype) encoded = encodeValueStr(rawVal, vartype)
return f" {target} = {encoded}" return f" {target} = {encoded}"
elif op == "add": elif op == "add":
if vartype == "Date" and hasattr(self.valueStack.currentWidget(), "getOffsetDays"): if vartype == "Date" and hasattr(self.ValueStack.currentWidget(), "getOffsetDays"):
days = self.valueStack.currentWidget().getOffsetDays() days = self.ValueStack.currentWidget().getOffsetDays()
return f" {target} = dateadd({target}, {days})" return f" {target} = dateadd({target}, {days})"
if vartype == "Time" and hasattr(self.valueStack.currentWidget(), "getOffsetHours"): if vartype == "Time" and hasattr(self.ValueStack.currentWidget(), "getOffsetHours"):
hours = self.valueStack.currentWidget().getOffsetHours() hours = self.ValueStack.currentWidget().getOffsetHours()
return f" {target} = timeadd({target}, {hours})" return f" {target} = timeadd({target}, {hours})"
return f" {target} = {target} + {rawVal}" return f" {target} = {target} + {rawVal}"
elif op == "sub": elif op == "sub":
if vartype == "Date" and hasattr(self.valueStack.currentWidget(), "getOffsetDays"): if vartype == "Date" and hasattr(self.ValueStack.currentWidget(), "getOffsetDays"):
days = self.valueStack.currentWidget().getOffsetDays() days = self.ValueStack.currentWidget().getOffsetDays()
return f" {target} = dateadd({target}, -{days})" return f" {target} = dateadd({target}, -{days})"
if vartype == "Time" and hasattr(self.valueStack.currentWidget(), "getOffsetHours"): if vartype == "Time" and hasattr(self.ValueStack.currentWidget(), "getOffsetHours"):
hours = self.valueStack.currentWidget().getOffsetHours() hours = self.ValueStack.currentWidget().getOffsetHours()
return f" {target} = timeadd({target}, -{hours})" return f" {target} = timeadd({target}, -{hours})"
return f" {target} = {target} - {rawVal}" return f" {target} = {target} - {rawVal}"
return "" return ""
@@ -407,10 +407,10 @@ class ActionStepFrame(QFrame):
self self
) -> str: ) -> str:
if self.valueSrcCombo.currentData() == "variable": if self.ValueSrcCombo.currentData() == "variable":
data = self.existingVarCombo.currentData() data = self.ExistingVarCombo.currentData()
return data[0] if data else "" return data[0] if data else ""
w = self.valueStack.currentWidget() w = self.ValueStack.currentWidget()
if w: if w:
return getValueFromWidget(w) return getValueFromWidget(w)
return "" return ""
@@ -419,15 +419,15 @@ class ActionStepFrame(QFrame):
self self
): ):
currentData = self.targetCombo.currentData() currentData = self.TargetCombo.currentData()
self.populateTargetCombo() self.populateTargetCombo()
if currentData: if currentData:
for i in range(self.targetCombo.count()): for i in range(self.TargetCombo.count()):
d = self.targetCombo.itemData(i) d = self.TargetCombo.itemData(i)
if d and d[0] == currentData[0]: if d and d[0] == currentData[0]:
self.targetCombo.setCurrentIndex(i) self.TargetCombo.setCurrentIndex(i)
break break
self._varMgr.populateCombo(self.existingVarCombo) self._varMgr.populateCombo(self.ExistingVarCombo)
@Slot(int) @Slot(int)
def onTargetChanged( def onTargetChanged(
@@ -437,13 +437,13 @@ class ActionStepFrame(QFrame):
if idx < 0: if idx < 0:
return return
data = self.targetCombo.itemData(idx) data = self.TargetCombo.itemData(idx)
if not data: if not data:
return return
_, vartype = data _, vartype = data
self._currentTargetType = vartype self._currentTargetType = vartype
self.updateValueWidget() self.updateValueWidget()
self.onValueSrcChanged(self.valueSrcCombo.currentIndex()) self.onValueSrcChanged(self.ValueSrcCombo.currentIndex())
@Slot(int) @Slot(int)
def onOpTypeChanged( def onOpTypeChanged(
@@ -459,10 +459,10 @@ class ActionStepFrame(QFrame):
idx idx
): ):
isVar = (self.valueSrcCombo.currentData() == "variable") isVar = (self.ValueSrcCombo.currentData() == "variable")
self.valueStack.setVisible(not isVar) self.ValueStack.setVisible(not isVar)
self.existingVarCombo.setVisible(isVar) self.ExistingVarCombo.setVisible(isVar)
if isVar: if isVar:
self._varMgr.populateCombo(self.existingVarCombo) self._varMgr.populateCombo(self.ExistingVarCombo)
else: else:
self.updateValueWidget() self.updateValueWidget()
+100 -100
View File
@@ -386,18 +386,18 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
user_config = self.defaultUserConfig() user_config = self.defaultUserConfig()
for i in range(self.UserTreeWidget.topLevelItemCount()): for i in range(self.UserTreeWidget.topLevelItemCount()):
group_item = self.UserTreeWidget.topLevelItem(i) GroupItem = self.UserTreeWidget.topLevelItem(i)
group_config = { group_config = {
"name": group_item.text(0), "name": GroupItem.text(0),
"enabled": group_item.checkState(1) == Qt.CheckState.Checked, "enabled": GroupItem.checkState(1) == Qt.CheckState.Checked,
"users": [] "users": []
} }
for j in range(group_item.childCount()): for j in range(GroupItem.childCount()):
user_item = group_item.child(j) UserItem = GroupItem.child(j)
user = user_item.data(0, Qt.UserRole) user = UserItem.data(0, Qt.UserRole)
if not user: if not user:
continue continue
user["enabled"] = user_item.checkState(1) == Qt.CheckState.Checked user["enabled"] = UserItem.checkState(1) == Qt.CheckState.Checked
group_config["users"].append(user) group_config["users"].append(user)
user_config["groups"].append(group_config) user_config["groups"].append(group_config)
return user_config return user_config
@@ -453,18 +453,18 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
try: try:
if "groups" in users: if "groups" in users:
for group_config in users["groups"]: for group_config in users["groups"]:
group_item = QTreeWidgetItem(self.UserTreeWidget, ALUserTreeItemType.GROUP.value) GroupItem = QTreeWidgetItem(self.UserTreeWidget, ALUserTreeItemType.GROUP.value)
group_item.setText(0, group_config["name"]) GroupItem.setText(0, group_config["name"])
group_item.setFlags(group_item.flags() | Qt.ItemIsEditable) GroupItem.setFlags(GroupItem.flags() | Qt.ItemIsEditable)
group_item.setCheckState(1, Qt.Checked if group_config.get("enabled", True) else Qt.Unchecked) GroupItem.setCheckState(1, Qt.Checked if group_config.get("enabled", True) else Qt.Unchecked)
for user_config in group_config["users"]: for user_config in group_config["users"]:
user_item = QTreeWidgetItem(group_item, ALUserTreeItemType.USER.value) UserItem = QTreeWidgetItem(GroupItem, ALUserTreeItemType.USER.value)
user_item.setText(0, user_config["username"]) UserItem.setText(0, user_config["username"])
user_item.setText(1, "" if user_config.get("enabled", True) else "跳过") UserItem.setText(1, "" if user_config.get("enabled", True) else "跳过")
user_item.setData(0, Qt.UserRole, user_config) UserItem.setData(0, Qt.UserRole, user_config)
user_item.setCheckState(1, Qt.Checked if user_config.get("enabled", True) else Qt.Unchecked) UserItem.setCheckState(1, Qt.Checked if user_config.get("enabled", True) else Qt.Unchecked)
user_item.setDisabled(not group_config.get("enabled", True)) UserItem.setDisabled(not group_config.get("enabled", True))
group_item.setExpanded(True) GroupItem.setExpanded(True)
except KeyError as e: except KeyError as e:
QMessageBox.warning( QMessageBox.warning(
self, self,
@@ -638,43 +638,43 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
) -> QTreeWidgetItem: ) -> QTreeWidgetItem:
self.UserTreeWidget.itemChanged.disconnect(self.onUserTreeWidgetItemChanged) self.UserTreeWidget.itemChanged.disconnect(self.onUserTreeWidgetItemChanged)
group_item = QTreeWidgetItem(self.UserTreeWidget, ALUserTreeItemType.GROUP.value) GroupItem = QTreeWidgetItem(self.UserTreeWidget, ALUserTreeItemType.GROUP.value)
if not group_name: if not group_name:
group_name = f"新分组-{self.UserTreeWidget.topLevelItemCount()}" group_name = f"新分组-{self.UserTreeWidget.topLevelItemCount()}"
group_item.setText(0, group_name) GroupItem.setText(0, group_name)
group_item.setFlags(group_item.flags() | Qt.ItemIsEditable) GroupItem.setFlags(GroupItem.flags() | Qt.ItemIsEditable)
group_item.setCheckState(1, Qt.Checked) GroupItem.setCheckState(1, Qt.Checked)
self.UserTreeWidget.setCurrentItem(group_item) self.UserTreeWidget.setCurrentItem(GroupItem)
self.UserTreeWidget.itemChanged.connect(self.onUserTreeWidgetItemChanged) self.UserTreeWidget.itemChanged.connect(self.onUserTreeWidgetItemChanged)
return group_item return GroupItem
def delGroup( def delGroup(
self, self,
group_item: QTreeWidgetItem = None GroupItem: QTreeWidgetItem = None
): ):
if group_item is None: if GroupItem is None:
return return
if group_item.type() != ALUserTreeItemType.GROUP.value: if GroupItem.type() != ALUserTreeItemType.GROUP.value:
return return
index = self.UserTreeWidget.indexOfTopLevelItem(group_item) index = self.UserTreeWidget.indexOfTopLevelItem(GroupItem)
self.UserTreeWidget.takeTopLevelItem(index) self.UserTreeWidget.takeTopLevelItem(index)
def addUser( def addUser(
self, self,
group_item: QTreeWidgetItem = None GroupItem: QTreeWidgetItem = None
) -> QTreeWidgetItem: ) -> QTreeWidgetItem:
if group_item is None: if GroupItem is None:
current_item = self.UserTreeWidget.currentItem() CurrentItem = self.UserTreeWidget.currentItem()
if current_item is None: if CurrentItem is None:
group_item = self.addGroup() GroupItem = self.addGroup()
if group_item.type() == ALUserTreeItemType.USER.value: if GroupItem.type() == ALUserTreeItemType.USER.value:
group_item = group_item.parent() GroupItem = GroupItem.parent()
if group_item.checkState(1) == Qt.CheckState.Unchecked: if GroupItem.checkState(1) == Qt.CheckState.Unchecked:
return None return None
new_user = { new_user = {
"username": f"新用户-{group_item.childCount()}", "username": f"新用户-{GroupItem.childCount()}",
"password": "000000", "password": "000000",
"enabled": True, "enabled": True,
"reserve_info": { "reserve_info": {
@@ -703,30 +703,30 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
} }
} }
self.UserTreeWidget.itemChanged.disconnect(self.onUserTreeWidgetItemChanged) self.UserTreeWidget.itemChanged.disconnect(self.onUserTreeWidgetItemChanged)
user_item = QTreeWidgetItem(group_item, ALUserTreeItemType.USER.value) UserItem = QTreeWidgetItem(GroupItem, ALUserTreeItemType.USER.value)
user_item.setText(0, new_user["username"]) UserItem.setText(0, new_user["username"])
user_item.setText(1, "") UserItem.setText(1, "")
user_item.setData(0, Qt.UserRole, new_user) UserItem.setData(0, Qt.UserRole, new_user)
user_item.setCheckState(1, Qt.CheckState.Checked) UserItem.setCheckState(1, Qt.CheckState.Checked)
group_item.setExpanded(True) GroupItem.setExpanded(True)
self.UserTreeWidget.setCurrentItem(user_item) self.UserTreeWidget.setCurrentItem(UserItem)
self.setUserToWidget(new_user) self.setUserToWidget(new_user)
self.UserTreeWidget.itemChanged.connect(self.onUserTreeWidgetItemChanged) self.UserTreeWidget.itemChanged.connect(self.onUserTreeWidgetItemChanged)
return user_item return UserItem
def delUser( def delUser(
self, self,
user_item: QTreeWidgetItem = None UserItem: QTreeWidgetItem = None
): ):
if user_item is None: if UserItem is None:
return return
if user_item.type() != ALUserTreeItemType.USER.value: if UserItem.type() != ALUserTreeItemType.USER.value:
return return
parent_item = user_item.parent() ParentItem = UserItem.parent()
index = parent_item.indexOfChild(user_item) index = ParentItem.indexOfChild(UserItem)
parent_item.takeChild(index) ParentItem.takeChild(index)
if parent_item.childCount() == 0: if ParentItem.childCount() == 0:
self.UserTreeWidget.setCurrentItem(None) self.UserTreeWidget.setCurrentItem(None)
def renameItem( def renameItem(
@@ -787,19 +787,19 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
room = self.RoomComboBox.currentText() room = self.RoomComboBox.currentText()
floor_idx = self.__floor_rmap[floor] floor_idx = self.__floor_rmap[floor]
room_idx = self.__room_rmap[room] room_idx = self.__room_rmap[room]
dialog = ALSeatMapSelectDialog( Dialog = ALSeatMapSelectDialog(
self, self,
floor, floor,
room, room,
ALSeatMapTable[floor_idx][room_idx] ALSeatMapTable[floor_idx][room_idx]
) )
dialog.selectSeats(self.SeatIDEdit.text().split(",")) Dialog.selectSeats(self.SeatIDEdit.text().split(","))
if dialog.exec() == QDialog.DialogCode.Accepted: if Dialog.exec() == QDialog.DialogCode.Accepted:
selected_seats = dialog.getSelectedSeats() selected_seats = Dialog.getSelectedSeats()
if len(selected_seats) == 0: if len(selected_seats) == 0:
self.SeatIDEdit.clear() self.SeatIDEdit.clear()
return return
self.SeatIDEdit.setText(",".join(dialog.getSelectedSeats())) self.SeatIDEdit.setText(",".join(Dialog.getSelectedSeats()))
@Slot() @Slot()
def onUserTreeWidgetCurrentItemChanged( def onUserTreeWidgetCurrentItemChanged(
@@ -844,10 +844,10 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
if item.type() == ALUserTreeItemType.GROUP.value: if item.type() == ALUserTreeItemType.GROUP.value:
is_checked = item.checkState(1) == Qt.CheckState.Checked is_checked = item.checkState(1) == Qt.CheckState.Checked
for i in range(item.childCount()): for i in range(item.childCount()):
child = item.child(i) Child = item.child(i)
if self.UserTreeWidget.currentItem() == child: if self.UserTreeWidget.currentItem() == Child:
self.UserTreeWidget.setCurrentItem(item) self.UserTreeWidget.setCurrentItem(item)
child.setDisabled(not is_checked) Child.setDisabled(not is_checked)
else: else:
is_checked = item.checkState(1) == Qt.CheckState.Checked is_checked = item.checkState(1) == Qt.CheckState.Checked
item.setText(1, "" if is_checked else "跳过") item.setText(1, "" if is_checked else "跳过")
@@ -857,41 +857,41 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
menu: QMenu menu: QMenu
): ):
add_group_action = QAction("添加分组", menu) AddGroupAction = QAction("添加分组", menu)
add_group_action.triggered.connect(self.addGroup) AddGroupAction.triggered.connect(self.addGroup)
menu.addAction(add_group_action) menu.addAction(AddGroupAction)
def showGroupMenu( def showGroupMenu(
self, self,
menu: QMenu, menu: QMenu,
group_item: QTreeWidgetItem = None GroupItem: QTreeWidgetItem = None
): ):
add_user_action = QAction("添加用户", menu) AddUserAction = QAction("添加用户", menu)
rename_group_action = QAction("重命名分组", menu) RenameGroupAction = QAction("重命名分组", menu)
del_group_action = QAction("删除分组", menu) DelGroupAction = QAction("删除分组", menu)
add_user_action.triggered.connect(lambda: self.addUser(group_item)) AddUserAction.triggered.connect(lambda: self.addUser(GroupItem))
rename_group_action.triggered.connect(lambda: self.renameItem(group_item)) RenameGroupAction.triggered.connect(lambda: self.renameItem(GroupItem))
del_group_action.triggered.connect(lambda: self.delGroup(group_item)) DelGroupAction.triggered.connect(lambda: self.delGroup(GroupItem))
menu.addAction(add_user_action) menu.addAction(AddUserAction)
menu.addSeparator() menu.addSeparator()
menu.addAction(rename_group_action) menu.addAction(RenameGroupAction)
menu.addAction(del_group_action) menu.addAction(DelGroupAction)
if group_item.checkState(1) == Qt.CheckState.Unchecked: if GroupItem.checkState(1) == Qt.CheckState.Unchecked:
add_user_action.setEnabled(False) AddUserAction.setEnabled(False)
def showUserMenu( def showUserMenu(
self, self,
menu: QMenu, menu: QMenu,
user_item: QTreeWidgetItem = None UserItem: QTreeWidgetItem = None
): ):
rename_user_action = QAction("重命名用户", menu) RenameUserAction = QAction("重命名用户", menu)
del_user_action = QAction("删除用户", menu) DelUserAction = QAction("删除用户", menu)
rename_user_action.triggered.connect(lambda: self.renameItem(user_item)) RenameUserAction.triggered.connect(lambda: self.renameItem(UserItem))
del_user_action.triggered.connect(lambda: self.delUser(user_item)) DelUserAction.triggered.connect(lambda: self.delUser(UserItem))
menu.addAction(rename_user_action) menu.addAction(RenameUserAction)
menu.addAction(del_user_action) menu.addAction(DelUserAction)
@Slot() @Slot()
def onUserTreeWidgetContextMenu( def onUserTreeWidgetContextMenu(
@@ -899,31 +899,31 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
pos pos
): ):
current_item = self.UserTreeWidget.itemAt(pos) CurrentItem = self.UserTreeWidget.itemAt(pos)
menu = QMenu(self.UserTreeWidget) Menu = QMenu(self.UserTreeWidget)
if current_item is None: if CurrentItem is None:
self.showTreeMenu(menu) self.showTreeMenu(Menu)
elif current_item.type() == ALUserTreeItemType.GROUP.value: elif CurrentItem.type() == ALUserTreeItemType.GROUP.value:
self.showGroupMenu(menu, current_item) self.showGroupMenu(Menu, CurrentItem)
else: else:
self.showUserMenu(menu, current_item) self.showUserMenu(Menu, CurrentItem)
menu.exec_(self.UserTreeWidget.mapToGlobal(pos)) Menu.exec_(self.UserTreeWidget.mapToGlobal(pos))
@Slot() @Slot()
def onAddUserButtonClicked( def onAddUserButtonClicked(
self self
): ):
current_item = self.UserTreeWidget.currentItem() CurrentItem = self.UserTreeWidget.currentItem()
self.addUser(current_item) self.addUser(CurrentItem)
@Slot() @Slot()
def onDelUserButtonClicked( def onDelUserButtonClicked(
self self
): ):
current_item = self.UserTreeWidget.currentItem() CurrentItem = self.UserTreeWidget.currentItem()
self.delUser(current_item) self.delUser(CurrentItem)
@Slot() @Slot()
def onBrowseBrowserDriverButtonClicked( def onBrowseBrowserDriverButtonClicked(
@@ -944,10 +944,10 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
self self
): ):
dialog = ALWebDriverDownloadDialog(self) Dialog = ALWebDriverDownloadDialog(self)
dialog.show() Dialog.show()
dialog.exec_() Dialog.exec_()
selected_driver_info = dialog.getSelectedDriverInfo() selected_driver_info = Dialog.getSelectedDriverInfo()
if selected_driver_info and selected_driver_info.driver_path: if selected_driver_info and selected_driver_info.driver_path:
self.BrowserTypeComboBox.setCurrentText(selected_driver_info.driver_type.value) self.BrowserTypeComboBox.setCurrentText(selected_driver_info.driver_type.value)
self.BrowseBrowserDriverEdit.setText(QDir.toNativeSeparators(str(selected_driver_info.driver_path))) self.BrowseBrowserDriverEdit.setText(QDir.toNativeSeparators(str(selected_driver_info.driver_path)))
@@ -1133,8 +1133,8 @@ class ALConfigWidget(QWidget, Ui_ALConfigWidget):
self self
): ):
current_item = self.UserTreeWidget.currentItem() CurrentItem = self.UserTreeWidget.currentItem()
if current_item and current_item.type() == ALUserTreeItemType.USER.value: if CurrentItem and CurrentItem.type() == ALUserTreeItemType.USER.value:
self.UserTreeWidget.setCurrentItem(None) self.UserTreeWidget.setCurrentItem(None)
if self.saveConfigs( if self.saveConfigs(
self.__config_paths["run"], self.__config_paths["run"],
+7 -7
View File
@@ -76,8 +76,8 @@ class ALMainWindow(MsgBase, QMainWindow, Ui_ALMainWindow):
self self
): ):
self.icon = QIcon(":/res/icons/AutoLibrary_Logo_64.svg") self.Icon = QIcon(":/res/icons/AutoLibrary_Logo_64.svg")
self.setWindowIcon(self.icon) self.setWindowIcon(self.Icon)
self.MessageIOTextEdit.setFont(QFont("Courier New", 10)) self.MessageIOTextEdit.setFont(QFont("Courier New", 10))
self.ManualAction.triggered.connect(self.onManualActionTriggered) self.ManualAction.triggered.connect(self.onManualActionTriggered)
self.AboutAction.triggered.connect(self.onAboutActionTriggered) self.AboutAction.triggered.connect(self.onAboutActionTriggered)
@@ -106,15 +106,15 @@ class ALMainWindow(MsgBase, QMainWindow, Ui_ALMainWindow):
self self
): ):
about_dialog = ALAboutDialog(self) AboutDialog = ALAboutDialog(self)
about_dialog.exec() AboutDialog.exec()
def onManualActionTriggered( def onManualActionTriggered(
self self
): ):
url = QUrl("https://www.autolibrary.kenanzhu.com/manuals") Url = QUrl("https://www.autolibrary.kenanzhu.com/manuals")
QDesktopServices.openUrl(url) QDesktopServices.openUrl(Url)
def setupTray( def setupTray(
self self
@@ -123,7 +123,7 @@ class ALMainWindow(MsgBase, QMainWindow, Ui_ALMainWindow):
if not QSystemTrayIcon.isSystemTrayAvailable(): if not QSystemTrayIcon.isSystemTrayAvailable():
self._showTrace("操作系统不支持系统托盘功能, 无法创建系统托盘图标", self.TraceLevel.WARNING) self._showTrace("操作系统不支持系统托盘功能, 无法创建系统托盘图标", self.TraceLevel.WARNING)
return return
self.TrayIcon = QSystemTrayIcon(self.icon, self) self.TrayIcon = QSystemTrayIcon(self.Icon, self)
self.TrayIcon.setToolTip("AutoLibrary") self.TrayIcon.setToolTip("AutoLibrary")
self.TrayMenu = QMenu() self.TrayMenu = QMenu()
+8 -8
View File
@@ -103,15 +103,15 @@ class ALSeatMapView(QGraphicsView):
seats_number = [seat.strip() for seat in row.split(",")] seats_number = [seat.strip() for seat in row.split(",")]
for seat_number in seats_number: for seat_number in seats_number:
if seat_number: if seat_number:
seat_widget = ALSeatFrame(seat_number) SeatWidget = ALSeatFrame(seat_number)
seat_widget.clicked.connect(self.onSeatClicked) SeatWidget.clicked.connect(self.onSeatClicked)
self.SeatsContainerLayout.addWidget(seat_widget, row_idx, col_idx) self.SeatsContainerLayout.addWidget(SeatWidget, row_idx, col_idx)
self.__seat_frames[seat_number] = seat_widget self.__seat_frames[seat_number] = SeatWidget
else: else:
spacer = QFrame() Spacer = QFrame()
spacer.setFixedSize(20, 30) Spacer.setFixedSize(20, 30)
spacer.setStyleSheet("background-color: transparent; border: none;") Spacer.setStyleSheet("background-color: transparent; border: none;")
self.SeatsContainerLayout.addWidget(spacer, row_idx, col_idx) self.SeatsContainerLayout.addWidget(Spacer, row_idx, col_idx)
col_idx += 1 col_idx += 1
self.SeatsContainerLayout.setSpacing(20) self.SeatsContainerLayout.setSpacing(20)
self.SeatsContainerLayout.setContentsMargins(20, 20, 20, 20) self.SeatsContainerLayout.setContentsMargins(20, 20, 20, 20)
+67 -68
View File
@@ -56,7 +56,6 @@ class ALStatusLabel(QLabel):
self.setFixedSize(36, 36) self.setFixedSize(36, 36)
self.setAlignment(Qt.AlignmentFlag.AlignCenter) self.setAlignment(Qt.AlignmentFlag.AlignCenter)
self.RunningAnimation = QPropertyAnimation(self, b"iconAngle") self.RunningAnimation = QPropertyAnimation(self, b"iconAngle")
self.RunningAnimation.setDuration(1000) self.RunningAnimation.setDuration(1000)
self.RunningAnimation.setStartValue(0) self.RunningAnimation.setStartValue(0)
@@ -119,35 +118,35 @@ class ALStatusLabel(QLabel):
event event
): ):
painter = QPainter(self) Painter = QPainter(self)
painter.setRenderHint(QPainter.RenderHint.Antialiasing) Painter.setRenderHint(QPainter.RenderHint.Antialiasing)
center_x = self.width()/2 center_x = self.width()/2
center_y = self.height()/2 center_y = self.height()/2
radius = min(center_x, center_y) - 3 radius = min(center_x, center_y) - 3
match self.__status: match self.__status:
case self.Status.WAITING: case self.Status.WAITING:
pen = painter.pen() Pen = Painter.pen()
pen.setWidth(2) Pen.setWidth(2)
pen.setBrush(Qt.BrushStyle.NoBrush) Pen.setBrush(Qt.BrushStyle.NoBrush)
pen.setCapStyle(Qt.PenCapStyle.RoundCap) Pen.setCapStyle(Qt.PenCapStyle.RoundCap)
pen.setColor(QColor("#969696")) # grey Pen.setColor(QColor("#969696")) # grey
painter.setPen(pen) Painter.setPen(Pen)
painter.drawEllipse( Painter.drawEllipse(
int(center_x - radius), int(center_x - radius),
int(center_y - radius), int(center_y - radius),
int(radius*2), int(radius*2),
int(radius*2) int(radius*2)
) )
case self.Status.RUNNING: case self.Status.RUNNING:
gradient = QConicalGradient(center_x, center_y, self.__icon_angle) Gradient = QConicalGradient(center_x, center_y, self.__icon_angle)
gradient.setColorAt(0.0, QColor("#2294FF" if self.isDarkMode() else "#0094FF")) Gradient.setColorAt(0.0, QColor("#2294FF" if self.isDarkMode() else "#0094FF"))
gradient.setColorAt(1.0, QColor("#2294FF00")) Gradient.setColorAt(1.0, QColor("#2294FF00"))
pen = painter.pen() Pen = Painter.pen()
pen.setWidth(3) Pen.setWidth(3)
pen.setBrush(gradient) Pen.setBrush(Gradient)
pen.setCapStyle(Qt.PenCapStyle.RoundCap) Pen.setCapStyle(Qt.PenCapStyle.RoundCap)
painter.setPen(pen) Painter.setPen(Pen)
painter.drawEllipse( Painter.drawEllipse(
int(center_x - radius), int(center_x - radius),
int(center_y - radius), int(center_y - radius),
int(radius*2), int(radius*2),
@@ -155,102 +154,102 @@ class ALStatusLabel(QLabel):
) )
case self.Status.SUCCESS: case self.Status.SUCCESS:
# draw the success green circle # draw the success green circle
pen = painter.pen() Pen = Painter.pen()
pen.setWidth(2) Pen.setWidth(2)
pen.setBrush(Qt.BrushStyle.NoBrush) Pen.setBrush(Qt.BrushStyle.NoBrush)
pen.setCapStyle(Qt.PenCapStyle.RoundCap) Pen.setCapStyle(Qt.PenCapStyle.RoundCap)
pen.setColor(QColor("#4CAF50" if self.isDarkMode() else "#00AF50")) # green Pen.setColor(QColor("#4CAF50" if self.isDarkMode() else "#00AF50")) # green
painter.setPen(pen) Painter.setPen(Pen)
painter.drawEllipse( Painter.drawEllipse(
int(center_x - radius), int(center_x - radius),
int(center_y - radius), int(center_y - radius),
int(radius*2), int(radius*2),
int(radius*2) int(radius*2)
) )
# draw the success check mark '✓' # draw the success check mark '✓'
painter.setPen(Qt.PenStyle.SolidLine) Painter.setPen(Qt.PenStyle.SolidLine)
pen = painter.pen() Pen = Painter.pen()
pen.setWidth(3) Pen.setWidth(3)
pen.setBrush(Qt.BrushStyle.NoBrush) Pen.setBrush(Qt.BrushStyle.NoBrush)
pen.setCapStyle(Qt.PenCapStyle.RoundCap) Pen.setCapStyle(Qt.PenCapStyle.RoundCap)
# white when dark mode, black when light mode # white when dark mode, black when light mode
pen.setColor(self.getMarkColor()) Pen.setColor(self.getMarkColor())
painter.setPen(pen) Painter.setPen(Pen)
mark_size = radius/2 mark_size = radius/2
mark_path = [ mark_path = [
(center_x - mark_size, center_y), (center_x - mark_size, center_y),
(center_x - mark_size/3, center_y + mark_size/2), (center_x - mark_size/3, center_y + mark_size/2),
(center_x + mark_size, center_y - mark_size/2) (center_x + mark_size, center_y - mark_size/2)
] ]
painter.drawLine( Painter.drawLine(
int(mark_path[0][0]),int(mark_path[0][1]), int(mark_path[0][0]),int(mark_path[0][1]),
int(mark_path[1][0]),int(mark_path[1][1]) int(mark_path[1][0]),int(mark_path[1][1])
) )
painter.drawLine( Painter.drawLine(
int(mark_path[1][0]),int(mark_path[1][1]), int(mark_path[1][0]),int(mark_path[1][1]),
int(mark_path[2][0]),int(mark_path[2][1]) int(mark_path[2][0]),int(mark_path[2][1])
) )
case self.Status.WARNING: case self.Status.WARNING:
# draw the warning orange circle # draw the warning orange circle
pen = painter.pen() Pen = Painter.pen()
pen.setWidth(2) Pen.setWidth(2)
pen.setBrush(Qt.BrushStyle.NoBrush) Pen.setBrush(Qt.BrushStyle.NoBrush)
pen.setCapStyle(Qt.PenCapStyle.RoundCap) Pen.setCapStyle(Qt.PenCapStyle.RoundCap)
pen.setColor(QColor("#FF9800")) # orange Pen.setColor(QColor("#FF9800")) # orange
painter.setPen(pen) Painter.setPen(Pen)
painter.drawEllipse( Painter.drawEllipse(
int(center_x - radius), int(center_x - radius),
int(center_y - radius), int(center_y - radius),
int(radius*2), int(radius*2),
int(radius*2) int(radius*2)
) )
# draw the warning exclamation mark '!' # draw the warning exclamation mark '!'
painter.setPen(Qt.PenStyle.SolidLine) Painter.setPen(Qt.PenStyle.SolidLine)
pen = painter.pen() Pen = Painter.pen()
pen.setWidth(3) Pen.setWidth(3)
pen.setBrush(Qt.BrushStyle.NoBrush) Pen.setBrush(Qt.BrushStyle.NoBrush)
pen.setCapStyle(Qt.PenCapStyle.RoundCap) Pen.setCapStyle(Qt.PenCapStyle.RoundCap)
# white when dark mode, black when light mode # white when dark mode, black when light mode
pen.setColor(self.getMarkColor()) Pen.setColor(self.getMarkColor())
painter.setPen(pen) Painter.setPen(Pen)
painter.drawLine( Painter.drawLine(
int(center_x), int(center_y - radius/2), int(center_x), int(center_y - radius/2),
int(center_x), int(center_y + radius/6) int(center_x), int(center_y + radius/6)
) )
painter.drawPoint( Painter.drawPoint(
int(center_x), int(center_y + radius/2) int(center_x), int(center_y + radius/2)
) )
case self.Status.FAILURE: case self.Status.FAILURE:
# draw the failure red circle # draw the failure red circle
pen = painter.pen() Pen = Painter.pen()
pen.setWidth(2) Pen.setWidth(2)
pen.setBrush(Qt.BrushStyle.NoBrush) Pen.setBrush(Qt.BrushStyle.NoBrush)
pen.setCapStyle(Qt.PenCapStyle.RoundCap) Pen.setCapStyle(Qt.PenCapStyle.RoundCap)
pen.setColor(QColor("#DC0000")) # red Pen.setColor(QColor("#DC0000")) # red
painter.setPen(pen) Painter.setPen(Pen)
painter.drawEllipse( Painter.drawEllipse(
int(center_x - radius), int(center_x - radius),
int(center_y - radius), int(center_y - radius),
int(radius*2), int(radius*2),
int(radius*2) int(radius*2)
) )
# draw the failure cross mark '✗' # draw the failure cross mark '✗'
painter.setPen(Qt.PenStyle.SolidLine) Painter.setPen(Qt.PenStyle.SolidLine)
pen = painter.pen() Pen = Painter.pen()
pen.setWidth(3) Pen.setWidth(3)
pen.setBrush(Qt.BrushStyle.NoBrush) Pen.setBrush(Qt.BrushStyle.NoBrush)
pen.setCapStyle(Qt.PenCapStyle.RoundCap) Pen.setCapStyle(Qt.PenCapStyle.RoundCap)
# white when dark mode, black when light mode # white when dark mode, black when light mode
pen.setColor(self.getMarkColor()) Pen.setColor(self.getMarkColor())
painter.setPen(pen) Painter.setPen(Pen)
mark_size = radius/3 mark_size = radius/3
painter.drawLine( Painter.drawLine(
int(center_x - mark_size), int(center_y - mark_size), int(center_x - mark_size), int(center_y - mark_size),
int(center_x + mark_size), int(center_y + mark_size) int(center_x + mark_size), int(center_y + mark_size)
) )
painter.drawLine( Painter.drawLine(
int(center_x + mark_size), int(center_y - mark_size), int(center_x + mark_size), int(center_y - mark_size),
int(center_x - mark_size), int(center_y + mark_size) int(center_x - mark_size), int(center_y + mark_size)
) )
painter.end() Painter.end()
super().paintEvent(event) super().paintEvent(event)
+11 -13
View File
@@ -80,7 +80,6 @@ class ALTimerTaskAddDialog(QDialog, Ui_ALTimerTaskAddDialog):
self.SpecificDateTimeEdit.setDateTime(QDateTime.currentDateTime().addSecs(60)) self.SpecificDateTimeEdit.setDateTime(QDateTime.currentDateTime().addSecs(60))
self.SpecificTimerLayout.addWidget(self.SpecificDateTimeEdit) self.SpecificTimerLayout.addWidget(self.SpecificDateTimeEdit)
self.TimerConfigLayout.addWidget(self.SpecificTimerWidget) self.TimerConfigLayout.addWidget(self.SpecificTimerWidget)
self.RelativeTimerWidget = QWidget() self.RelativeTimerWidget = QWidget()
self.RelativeTimerLayout = QHBoxLayout(self.RelativeTimerWidget) self.RelativeTimerLayout = QHBoxLayout(self.RelativeTimerWidget)
self.RelativeTimerLayout.setContentsMargins(0, 0, 0, 0) self.RelativeTimerLayout.setContentsMargins(0, 0, 0, 0)
@@ -108,17 +107,16 @@ class ALTimerTaskAddDialog(QDialog, Ui_ALTimerTaskAddDialog):
self.RelativeTimerLayout.addWidget(self.RelativeSecondSpinBox) self.RelativeTimerLayout.addWidget(self.RelativeSecondSpinBox)
self.TimerConfigLayout.addWidget(self.RelativeTimerWidget) self.TimerConfigLayout.addWidget(self.RelativeTimerWidget)
self.RelativeTimerWidget.setVisible(False) self.RelativeTimerWidget.setVisible(False)
self.AutoScriptGroupBox = QGroupBox("AutoScript 指令") self.AutoScriptGroupBox = QGroupBox("AutoScript 指令")
self.AutoScriptLayout = QVBoxLayout(self.AutoScriptGroupBox) self.AutoScriptLayout = QVBoxLayout(self.AutoScriptGroupBox)
self.AutoScriptLayout.setContentsMargins(3, 3, 3, 3) self.AutoScriptLayout.setContentsMargins(3, 3, 3, 3)
self.AutoScriptLayout.setSpacing(3) self.AutoScriptLayout.setSpacing(3)
autoScriptBtnLayout = QHBoxLayout() AutoScriptBtnLayout = QHBoxLayout()
self.AutoScriptEditButton = QPushButton("编辑") self.AutoScriptEditButton = QPushButton("编辑")
self.AutoScriptEditButton.setMinimumHeight(25) self.AutoScriptEditButton.setMinimumHeight(25)
self.AutoScriptEditButton.setFixedWidth(80) self.AutoScriptEditButton.setFixedWidth(80)
autoScriptBtnLayout.addWidget(self.AutoScriptEditButton) AutoScriptBtnLayout.addWidget(self.AutoScriptEditButton)
autoScriptBtnLayout.addStretch() AutoScriptBtnLayout.addStretch()
self.AutoScriptHelpButton = QPushButton("?") self.AutoScriptHelpButton = QPushButton("?")
self.AutoScriptHelpButton.setFixedSize(20, 20) self.AutoScriptHelpButton.setFixedSize(20, 20)
self.AutoScriptHelpButton.setToolTip( self.AutoScriptHelpButton.setToolTip(
@@ -132,12 +130,12 @@ class ALTimerTaskAddDialog(QDialog, Ui_ALTimerTaskAddDialog):
"font-weight: bold; color: #555; }" "font-weight: bold; color: #555; }"
"QPushButton:hover { background-color: #E0E0E0; }" "QPushButton:hover { background-color: #E0E0E0; }"
) )
autoScriptBtnLayout.addWidget(self.AutoScriptHelpButton) AutoScriptBtnLayout.addWidget(self.AutoScriptHelpButton)
self.AutoScriptStatusLabel = QLabel("未设置") self.AutoScriptStatusLabel = QLabel("未设置")
self.AutoScriptStatusLabel.setStyleSheet("color: #969696;") self.AutoScriptStatusLabel.setStyleSheet("color: #969696;")
self.AutoScriptStatusLabel.setFixedHeight(25) self.AutoScriptStatusLabel.setFixedHeight(25)
autoScriptBtnLayout.addWidget(self.AutoScriptStatusLabel) AutoScriptBtnLayout.addWidget(self.AutoScriptStatusLabel)
self.AutoScriptLayout.addLayout(autoScriptBtnLayout) self.AutoScriptLayout.addLayout(AutoScriptBtnLayout)
self.ALAddTimerTaskLayout.insertWidget( self.ALAddTimerTaskLayout.insertWidget(
self.ALAddTimerTaskLayout.indexOf(self.TaskConfigGroupBox) + 1, self.ALAddTimerTaskLayout.indexOf(self.TaskConfigGroupBox) + 1,
self.AutoScriptGroupBox self.AutoScriptGroupBox
@@ -305,18 +303,18 @@ class ALTimerTaskAddDialog(QDialog, Ui_ALTimerTaskAddDialog):
@Slot() @Slot()
def onPreviewAutoScript(self): def onPreviewAutoScript(self):
from gui.ALAutoScriptEditDialog import ALAutoScriptEditDialog from gui.ALAutoScriptEditDialog import ALAutoScriptEditDialog
dlg = ALAutoScriptEditDialog(self, self.__auto_script, self.__mock_target_data) Dlg = ALAutoScriptEditDialog(self, self.__auto_script, self.__mock_target_data)
if dlg.exec() == QDialog.DialogCode.Accepted: if Dlg.exec() == QDialog.DialogCode.Accepted:
script = dlg.getScript() script = Dlg.getScript()
self.__auto_script = script self.__auto_script = script
self.__mock_target_data = dlg.getMockData() self.__mock_target_data = Dlg.getMockData()
if script: if script:
self.AutoScriptStatusLabel.setText("已设置") self.AutoScriptStatusLabel.setText("已设置")
self.AutoScriptStatusLabel.setStyleSheet("color: #4CAF50;") self.AutoScriptStatusLabel.setStyleSheet("color: #4CAF50;")
else: else:
self.AutoScriptStatusLabel.setText("未设置") self.AutoScriptStatusLabel.setText("未设置")
self.AutoScriptStatusLabel.setStyleSheet("color: #969696;") self.AutoScriptStatusLabel.setStyleSheet("color: #969696;")
dlg.deleteLater() Dlg.deleteLater()
@Slot() @Slot()
def onAutoScriptHelp( def onAutoScriptHelp(
-3
View File
@@ -41,7 +41,6 @@ class ALTimerTaskHistoryDialog(QDialog):
self.setWindowTitle("定时任务执行历史 - AutoLibrary") self.setWindowTitle("定时任务执行历史 - AutoLibrary")
self.setMinimumSize(300, 300) self.setMinimumSize(300, 300)
self.setMaximumSize(500, 400) self.setMaximumSize(500, 400)
MainLayout = QVBoxLayout(self) MainLayout = QVBoxLayout(self)
InfoLayout = QGridLayout() InfoLayout = QGridLayout()
TaskNameLabel = QLabel(f"任务: {self.__task_data.get('name', '未命名')}") TaskNameLabel = QLabel(f"任务: {self.__task_data.get('name', '未命名')}")
@@ -51,7 +50,6 @@ class ALTimerTaskHistoryDialog(QDialog):
TaskUUIDLabel.setStyleSheet("color: #969696; font-size: 11px;") TaskUUIDLabel.setStyleSheet("color: #969696; font-size: 11px;")
InfoLayout.addWidget(TaskUUIDLabel, 1, 0) InfoLayout.addWidget(TaskUUIDLabel, 1, 0)
InfoLayout.setColumnStretch(0, 1) InfoLayout.setColumnStretch(0, 1)
if self.__task_data.get("repeat", False): if self.__task_data.get("repeat", False):
RepeatLabel = QLabel("可重复性任务") RepeatLabel = QLabel("可重复性任务")
RepeatLabel.setStyleSheet("color: #2294FF; font-size: 12px;") RepeatLabel.setStyleSheet("color: #2294FF; font-size: 12px;")
@@ -68,7 +66,6 @@ class ALTimerTaskHistoryDialog(QDialog):
self.HistoryTableWidget.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows) self.HistoryTableWidget.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)
self.loadHistory() self.loadHistory()
MainLayout.addWidget(self.HistoryTableWidget) MainLayout.addWidget(self.HistoryTableWidget)
ButtonLayout = QHBoxLayout() ButtonLayout = QHBoxLayout()
ButtonLayout.addStretch() ButtonLayout.addStretch()
self.CloseButton = QPushButton("关闭") self.CloseButton = QPushButton("关闭")
+44 -44
View File
@@ -173,20 +173,20 @@ class ALTimerTaskItemWidget(QWidget):
pos pos
): ):
menu = QMenu(self) Menu = QMenu(self)
edit_action = QAction("编辑", self) EditAction = QAction("编辑", self)
edit_action.triggered.connect( EditAction.triggered.connect(
lambda: self.editRequested.emit(self.__timer_task) lambda: self.editRequested.emit(self.__timer_task)
) )
menu.addAction(edit_action) Menu.addAction(EditAction)
if self.__timer_task["status"] != ALTimerTaskStatus.RUNNING\ if self.__timer_task["status"] != ALTimerTaskStatus.RUNNING\
and self.__timer_task["status"] != ALTimerTaskStatus.READY: and self.__timer_task["status"] != ALTimerTaskStatus.READY:
delete_action = QAction("删除", self) DeleteAction = QAction("删除", self)
delete_action.triggered.connect( DeleteAction.triggered.connect(
lambda: self.__manage_widget.deleteTask(self.__timer_task) lambda: self.__manage_widget.deleteTask(self.__timer_task)
) )
menu.addAction(delete_action) Menu.addAction(DeleteAction)
menu.exec(self.mapToGlobal(pos)) Menu.exec(self.mapToGlobal(pos))
class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget): class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
@@ -209,7 +209,7 @@ class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
super().__init__(parent) super().__init__(parent)
self.__cfg_mgr: ConfigProvider = ConfigManager.instance() self.__cfg_mgr: ConfigProvider = ConfigManager.instance()
self.__timer_tasks = [] self.__timer_tasks = []
self.__check_timer = None self.__CheckTimer = None
self.__sort_policy = self.SortPolicy.BY_EXECUTE_TIME self.__sort_policy = self.SortPolicy.BY_EXECUTE_TIME
self.__sort_order = Qt.SortOrder.AscendingOrder self.__sort_order = Qt.SortOrder.AscendingOrder
@@ -233,9 +233,9 @@ class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
self self
): ):
self.__check_timer = QTimer(self) self.__CheckTimer = QTimer(self)
self.__check_timer.timeout.connect(self.checkTasks) self.__CheckTimer.timeout.connect(self.checkTasks)
self.__check_timer.start(500) self.__CheckTimer.start(500)
def initializeTimerTasks( def initializeTimerTasks(
self self
@@ -386,28 +386,28 @@ class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
self.TimerTasksListWidget.clear() self.TimerTasksListWidget.clear()
self.sortTimerTasks(self.__sort_policy, self.__sort_order) self.sortTimerTasks(self.__sort_policy, self.__sort_order)
for timer_task in self.__timer_tasks: for timer_task in self.__timer_tasks:
item = QListWidgetItem() Item = QListWidgetItem()
item.setData(Qt.UserRole, timer_task) Item.setData(Qt.UserRole, timer_task)
widget = ALTimerTaskItemWidget(self, timer_task) Widget = ALTimerTaskItemWidget(self, timer_task)
widget.DeleteButton.clicked.connect( Widget.DeleteButton.clicked.connect(
lambda _, task = timer_task: self.deleteTask(task) lambda _, task = timer_task: self.deleteTask(task)
) )
if timer_task.get("repeat", False) and hasattr(widget, "HistoryButton"): if timer_task.get("repeat", False) and hasattr(Widget, "HistoryButton"):
widget.HistoryButton.clicked.connect( Widget.HistoryButton.clicked.connect(
lambda _, task = timer_task: self.showTaskHistory(task) lambda _, task = timer_task: self.showTaskHistory(task)
) )
widget.editRequested.connect(self.editTask) Widget.editRequested.connect(self.editTask)
item.setSizeHint(widget.size()) Item.setSizeHint(Widget.size())
self.TimerTasksListWidget.addItem(item) self.TimerTasksListWidget.addItem(Item)
self.TimerTasksListWidget.setItemWidget(item, widget) self.TimerTasksListWidget.setItemWidget(Item, Widget)
def addTask( def addTask(
self self
): ):
dialog = ALTimerTaskAddDialog(self) Dialog = ALTimerTaskAddDialog(self)
if dialog.exec() == QDialog.DialogCode.Accepted: if Dialog.exec() == QDialog.DialogCode.Accepted:
timer_task = dialog.getTimerTask() timer_task = Dialog.getTimerTask()
self.__timer_tasks.append(timer_task) self.__timer_tasks.append(timer_task)
self.timerTasksChanged.emit() self.timerTasksChanged.emit()
@@ -416,9 +416,9 @@ class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
timer_task: dict timer_task: dict
): ):
dialog = ALTimerTaskAddDialog(self, timer_task) Dialog = ALTimerTaskAddDialog(self, timer_task)
if dialog.exec() == QDialog.DialogCode.Accepted: if Dialog.exec() == QDialog.DialogCode.Accepted:
updated = dialog.getTimerTask() updated = Dialog.getTimerTask()
for i, task in enumerate(self.__timer_tasks): for i, task in enumerate(self.__timer_tasks):
if task["uuid"] == updated["uuid"]: if task["uuid"] == updated["uuid"]:
self.__timer_tasks[i] = updated self.__timer_tasks[i] = updated
@@ -449,19 +449,19 @@ class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
): ):
if timer_task["repeat"]: # when delete a repeat task if timer_task["repeat"]: # when delete a repeat task
msgbox = QMessageBox(self) MsgBox = QMessageBox(self)
msgbox.setIcon(QMessageBox.Icon.Question) MsgBox.setIcon(QMessageBox.Icon.Question)
msgbox.setWindowTitle("警告 - AutoLibrary") MsgBox.setWindowTitle("警告 - AutoLibrary")
msgbox.setStandardButtons( MsgBox.setStandardButtons(
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No
) )
msgbox.setText("删除可重复性任务将同时删除所有已执行的记录 !\n是否继续 ?") MsgBox.setText("删除可重复性任务将同时删除所有已执行的记录 !\n是否继续 ?")
msgbox.setDetailedText( MsgBox.setDetailedText(
"以下可重复性任务将被删除:\n"\ "以下可重复性任务将被删除:\n"\
"\n" "\n"
f"{self.getTimerTaskDetailMessage(timer_task)}" f"{self.getTimerTaskDetailMessage(timer_task)}"
) )
result = msgbox.exec() result = MsgBox.exec()
if result != QMessageBox.StandardButton.Yes: if result != QMessageBox.StandardButton.Yes:
return return
task_uuid = timer_task["uuid"] task_uuid = timer_task["uuid"]
@@ -506,13 +506,13 @@ class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
] ]
repeat_tasks_count = len(repeat_tasks) repeat_tasks_count = len(repeat_tasks)
if repeat_tasks_count > 0: if repeat_tasks_count > 0:
msgbox = QMessageBox(self) MsgBox = QMessageBox(self)
msgbox.setIcon(QMessageBox.Icon.Question) MsgBox.setIcon(QMessageBox.Icon.Question)
msgbox.setWindowTitle("警告 - AutoLibrary") MsgBox.setWindowTitle("警告 - AutoLibrary")
msgbox.setStandardButtons( MsgBox.setStandardButtons(
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No
) )
msgbox.setText( MsgBox.setText(
f"存在 {repeat_tasks_count} 个可重复性任务,\n" f"存在 {repeat_tasks_count} 个可重复性任务,\n"
"删除可重复性任务将同时删除所有已执行的记录 !\n" "删除可重复性任务将同时删除所有已执行的记录 !\n"
"是否继续 ?" "是否继续 ?"
@@ -520,12 +520,12 @@ class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
delete_msgs = [ delete_msgs = [
self.getTimerTaskDetailMessage(x) for x in repeat_tasks self.getTimerTaskDetailMessage(x) for x in repeat_tasks
] ]
msgbox.setDetailedText( MsgBox.setDetailedText(
"以下可重复性任务将被删除:\n"\ "以下可重复性任务将被删除:\n"\
"\n" "\n"
f"{"\n\n".join(delete_msgs)}" f"{"\n\n".join(delete_msgs)}"
) )
result = msgbox.exec() result = MsgBox.exec()
if result != QMessageBox.StandardButton.Yes: if result != QMessageBox.StandardButton.Yes:
return return
# clear all tasks # clear all tasks
@@ -537,8 +537,8 @@ class ALTimerTaskManageWidget(QWidget, Ui_ALTimerTaskManageWidget):
task: dict task: dict
): ):
dialog = ALTimerTaskHistoryDialog(self, task) Dialog = ALTimerTaskHistoryDialog(self, task)
if dialog.exec() == QDialog.DialogCode.Accepted: if Dialog.exec() == QDialog.DialogCode.Accepted:
self.timerTasksChanged.emit() self.timerTasksChanged.emit()
def checkTasks( def checkTasks(
+15 -15
View File
@@ -51,9 +51,9 @@ class ALUserTreeWidget(QTreeWidget):
self self
): ):
__qtreewidgetitem = QTreeWidgetItem() __QTreeWidgetItem = QTreeWidgetItem()
__qtreewidgetitem.setText(0, u"\u5206\u7ec4/\u7528\u6237"); __QTreeWidgetItem.setText(0, u"\u5206\u7ec4/\u7528\u6237");
self.setHeaderItem(__qtreewidgetitem) self.setHeaderItem(__QTreeWidgetItem)
self.setObjectName(u"UserTreeWidget") self.setObjectName(u"UserTreeWidget")
self.setMinimumSize(QSize(230, 0)) self.setMinimumSize(QSize(230, 0))
self.setMaximumSize(QSize(250, 16777215)) self.setMaximumSize(QSize(250, 16777215))
@@ -81,8 +81,8 @@ class ALUserTreeWidget(QTreeWidget):
self self
): ):
___qtreewidgetitem = self.headerItem() ___QTreeWidgetItem = self.headerItem()
___qtreewidgetitem.setText(1, QCoreApplication.translate("ALConfigWidget", u"\u72b6\u6001", None)); ___QTreeWidgetItem.setText(1, QCoreApplication.translate("ALConfigWidget", u"\u72b6\u6001", None));
@staticmethod @staticmethod
def isDragPositionValid( def isDragPositionValid(
@@ -109,27 +109,27 @@ class ALUserTreeWidget(QTreeWidget):
super().dragMoveEvent(event) super().dragMoveEvent(event)
source_item = self.currentItem() SourceItem = self.currentItem()
target_item = self.itemAt(event.position().toPoint()) TargetItem = self.itemAt(event.position().toPoint())
if source_item is None: if SourceItem is None:
event.ignore() event.ignore()
return return
if source_item.type() == ALUserTreeItemType.GROUP.value: if SourceItem.type() == ALUserTreeItemType.GROUP.value:
if target_item is not None: if TargetItem is not None:
event.ignore() event.ignore()
return return
elif source_item.type() == ALUserTreeItemType.USER.value: elif SourceItem.type() == ALUserTreeItemType.USER.value:
if target_item is None: if TargetItem is None:
event.ignore() event.ignore()
return return
if target_item.type() != ALUserTreeItemType.GROUP.value: if TargetItem.type() != ALUserTreeItemType.GROUP.value:
event.ignore() event.ignore()
return return
if target_item.checkState(1) == Qt.CheckState.Unchecked: if TargetItem.checkState(1) == Qt.CheckState.Unchecked:
event.ignore() event.ignore()
return return
if not self.isDragPositionValid( if not self.isDragPositionValid(
self.visualItemRect(target_item), self.visualItemRect(TargetItem),
event.position().toPoint() event.position().toPoint()
): ):
event.ignore() event.ignore()
-6
View File
@@ -182,14 +182,11 @@ class ALWebDriverDownloadDialog(QDialog):
self.setMaximumHeight(240) self.setMaximumHeight(240)
self.setMinimumHeight(240) self.setMinimumHeight(240)
self.setWindowTitle("浏览器驱动下载 - AutoLibrary") self.setWindowTitle("浏览器驱动下载 - AutoLibrary")
self.MainLayout = QVBoxLayout(self) self.MainLayout = QVBoxLayout(self)
self.MainLayout.setContentsMargins(5, 5, 5, 5) self.MainLayout.setContentsMargins(5, 5, 5, 5)
self.MainLayout.setSpacing(5) self.MainLayout.setSpacing(5)
self.BrowserCountLabel = QLabel("检测到 0 个可用浏览器:") self.BrowserCountLabel = QLabel("检测到 0 个可用浏览器:")
self.MainLayout.addWidget(self.BrowserCountLabel) self.MainLayout.addWidget(self.BrowserCountLabel)
self.DriverInfoLayout = QHBoxLayout() self.DriverInfoLayout = QHBoxLayout()
self.DriverInfoLayout.setSpacing(5) self.DriverInfoLayout.setSpacing(5)
self.DriverComboBox = QComboBox() self.DriverComboBox = QComboBox()
@@ -198,7 +195,6 @@ class ALWebDriverDownloadDialog(QDialog):
self.StatusLabel.setFixedSize(32, 32) self.StatusLabel.setFixedSize(32, 32)
self.DriverInfoLayout.addWidget(self.StatusLabel) self.DriverInfoLayout.addWidget(self.StatusLabel)
self.MainLayout.addLayout(self.DriverInfoLayout) self.MainLayout.addLayout(self.DriverInfoLayout)
self.DetailLayout = QVBoxLayout() self.DetailLayout = QVBoxLayout()
self.DetailLayout.setSpacing(5) self.DetailLayout.setSpacing(5)
self.DetailLayout.setContentsMargins(5, 5, 5, 5) self.DetailLayout.setContentsMargins(5, 5, 5, 5)
@@ -211,7 +207,6 @@ class ALWebDriverDownloadDialog(QDialog):
self.PathLabel.setText("路径:未安装") self.PathLabel.setText("路径:未安装")
self.DetailLayout.addWidget(self.PathLabel) self.DetailLayout.addWidget(self.PathLabel)
self.MainLayout.addLayout(self.DetailLayout) self.MainLayout.addLayout(self.DetailLayout)
self.Line = QFrame() self.Line = QFrame()
self.Line.setFrameShape(QFrame.Shape.HLine) self.Line.setFrameShape(QFrame.Shape.HLine)
self.Line.setFrameShadow(QFrame.Shadow.Sunken) self.Line.setFrameShadow(QFrame.Shadow.Sunken)
@@ -237,7 +232,6 @@ class ALWebDriverDownloadDialog(QDialog):
self.ConfirmButton = QPushButton("确认") self.ConfirmButton = QPushButton("确认")
self.ConfirmButton.setFixedSize(80, 25) self.ConfirmButton.setFixedSize(80, 25)
self.ConfirmButton.setEnabled(False) self.ConfirmButton.setEnabled(False)
self.ControlLayout.addWidget(self.RefreshButton) self.ControlLayout.addWidget(self.RefreshButton)
self.ControlLayout.addWidget(self.DownloadButton) self.ControlLayout.addWidget(self.DownloadButton)
self.ControlLayout.addWidget(self.DeleteButton) self.ControlLayout.addWidget(self.DeleteButton)