2026-08-06 12:01:38 +08:00
|
|
|
"""设置页的事件绑定。
|
|
|
|
|
|
2026-08-06 15:31:05 +08:00
|
|
|
本文件把界面操作转换为轻量信号,不直接执行 ADB、SQLite 或硬件信息读取。
|
|
|
|
|
后续应用服务应在后台线程处理阻塞操作,再通过页面更新方法返回结果。
|
2026-08-06 12:01:38 +08:00
|
|
|
"""
|
2026-08-06 15:31:05 +08:00
|
|
|
|
|
|
|
|
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SettingsPageEventBinder(QObject):
|
|
|
|
|
"""绑定设备管理控件,并向应用层发出稳定事件。"""
|
|
|
|
|
|
|
|
|
|
searchRequested = pyqtSignal()
|
|
|
|
|
connectRequested = pyqtSignal(str)
|
|
|
|
|
saveRequested = pyqtSignal(str, str)
|
|
|
|
|
deleteRequested = pyqtSignal(str)
|
|
|
|
|
|
|
|
|
|
def __init__(self, page):
|
|
|
|
|
super().__init__(page)
|
|
|
|
|
self._page = page
|
|
|
|
|
self._busy = False
|
|
|
|
|
|
|
|
|
|
page.searchButton.clicked.connect(self._request_search)
|
|
|
|
|
page.connectButton.clicked.connect(self._request_connect)
|
|
|
|
|
page.saveButton.clicked.connect(self._request_save)
|
|
|
|
|
page.deleteButton.clicked.connect(self._request_delete)
|
|
|
|
|
page.addressInput.textChanged.connect(self._sync_button_state)
|
|
|
|
|
page.deviceTableModel.checkedDeviceChanged.connect(self._sync_button_state)
|
|
|
|
|
self._sync_button_state()
|
|
|
|
|
|
|
|
|
|
@pyqtSlot()
|
|
|
|
|
def _request_search(self) -> None:
|
|
|
|
|
if self._busy:
|
|
|
|
|
return
|
|
|
|
|
self.searchRequested.emit()
|
|
|
|
|
|
|
|
|
|
@pyqtSlot()
|
|
|
|
|
def _request_connect(self) -> None:
|
|
|
|
|
if self._busy:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
address = self._page.addressInput.text().strip()
|
|
|
|
|
if not address:
|
|
|
|
|
self._page.deviceStatusLabel.setText(
|
|
|
|
|
"连接失败:请先填写无线调试地址,例如 192.168.0.173:5555"
|
|
|
|
|
)
|
|
|
|
|
self._page.addressInput.setFocus()
|
|
|
|
|
return
|
|
|
|
|
self.connectRequested.emit(address)
|
|
|
|
|
|
|
|
|
|
@pyqtSlot()
|
|
|
|
|
def _request_save(self) -> None:
|
|
|
|
|
if self._busy:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
serial = self._page.deviceTableModel.checked_serial
|
|
|
|
|
if not serial:
|
|
|
|
|
self._page.deviceStatusLabel.setText("保存失败:请先勾选一台已连接设备")
|
|
|
|
|
self._page.deviceTable.setFocus()
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
device_name = self._page.deviceNameInput.text().strip()
|
|
|
|
|
self.saveRequested.emit(device_name, serial)
|
|
|
|
|
|
|
|
|
|
@pyqtSlot()
|
|
|
|
|
def _request_delete(self) -> None:
|
|
|
|
|
if self._busy:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
serial = self._page.deviceTableModel.checked_serial
|
|
|
|
|
if not serial:
|
|
|
|
|
self._page.deviceStatusLabel.setText("删除失败:请先勾选一台设备")
|
|
|
|
|
self._page.deviceTable.setFocus()
|
|
|
|
|
return
|
|
|
|
|
self.deleteRequested.emit(serial)
|
|
|
|
|
|
|
|
|
|
@pyqtSlot()
|
|
|
|
|
def _sync_button_state(self, *_args) -> None:
|
|
|
|
|
serial = self._page.deviceTableModel.checked_serial
|
|
|
|
|
has_address = bool(self._page.addressInput.text().strip())
|
|
|
|
|
self._page.searchButton.setEnabled(not self._busy)
|
|
|
|
|
self._page.connectButton.setEnabled(not self._busy and has_address)
|
|
|
|
|
self._page.saveButton.setEnabled(not self._busy and bool(serial))
|
|
|
|
|
self._page.deleteButton.setEnabled(not self._busy and bool(serial))
|
|
|
|
|
|
|
|
|
|
def set_busy(self, busy: bool, message: str = "") -> None:
|
|
|
|
|
"""切换界面忙碌状态,防止用户重复提交设备命令。"""
|
|
|
|
|
|
|
|
|
|
self._busy = busy
|
|
|
|
|
self._sync_button_state()
|
|
|
|
|
if message:
|
|
|
|
|
self._page.deviceStatusLabel.setText(message)
|