|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +""" |
| 3 | +激活窗口数据模型 - 用于QML数据绑定 |
| 4 | +""" |
| 5 | + |
| 6 | +from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty |
| 7 | + |
| 8 | + |
| 9 | +class ActivationModel(QObject): |
| 10 | + """ |
| 11 | + 激活窗口的数据模型,用于Python和QML之间的数据绑定. |
| 12 | + """ |
| 13 | + |
| 14 | + # 属性变化信号 |
| 15 | + serialNumberChanged = pyqtSignal() |
| 16 | + macAddressChanged = pyqtSignal() |
| 17 | + activationStatusChanged = pyqtSignal() |
| 18 | + activationCodeChanged = pyqtSignal() |
| 19 | + statusColorChanged = pyqtSignal() |
| 20 | + |
| 21 | + # 用户操作信号 |
| 22 | + copyCodeClicked = pyqtSignal() |
| 23 | + retryClicked = pyqtSignal() |
| 24 | + closeClicked = pyqtSignal() |
| 25 | + |
| 26 | + def __init__(self, parent=None): |
| 27 | + super().__init__(parent) |
| 28 | + |
| 29 | + # 私有属性 |
| 30 | + self._serial_number = "--" |
| 31 | + self._mac_address = "--" |
| 32 | + self._activation_status = "检查中..." |
| 33 | + self._activation_code = "--" |
| 34 | + self._status_color = "#6c757d" |
| 35 | + |
| 36 | + # 序列号属性 |
| 37 | + @pyqtProperty(str, notify=serialNumberChanged) |
| 38 | + def serialNumber(self): |
| 39 | + return self._serial_number |
| 40 | + |
| 41 | + @serialNumber.setter |
| 42 | + def serialNumber(self, value): |
| 43 | + if self._serial_number != value: |
| 44 | + self._serial_number = value |
| 45 | + self.serialNumberChanged.emit() |
| 46 | + |
| 47 | + # MAC地址属性 |
| 48 | + @pyqtProperty(str, notify=macAddressChanged) |
| 49 | + def macAddress(self): |
| 50 | + return self._mac_address |
| 51 | + |
| 52 | + @macAddress.setter |
| 53 | + def macAddress(self, value): |
| 54 | + if self._mac_address != value: |
| 55 | + self._mac_address = value |
| 56 | + self.macAddressChanged.emit() |
| 57 | + |
| 58 | + # 激活状态属性 |
| 59 | + @pyqtProperty(str, notify=activationStatusChanged) |
| 60 | + def activationStatus(self): |
| 61 | + return self._activation_status |
| 62 | + |
| 63 | + @activationStatus.setter |
| 64 | + def activationStatus(self, value): |
| 65 | + if self._activation_status != value: |
| 66 | + self._activation_status = value |
| 67 | + self.activationStatusChanged.emit() |
| 68 | + |
| 69 | + # 激活码属性 |
| 70 | + @pyqtProperty(str, notify=activationCodeChanged) |
| 71 | + def activationCode(self): |
| 72 | + return self._activation_code |
| 73 | + |
| 74 | + @activationCode.setter |
| 75 | + def activationCode(self, value): |
| 76 | + if self._activation_code != value: |
| 77 | + self._activation_code = value |
| 78 | + self.activationCodeChanged.emit() |
| 79 | + |
| 80 | + # 状态颜色属性 |
| 81 | + @pyqtProperty(str, notify=statusColorChanged) |
| 82 | + def statusColor(self): |
| 83 | + return self._status_color |
| 84 | + |
| 85 | + @statusColor.setter |
| 86 | + def statusColor(self, value): |
| 87 | + if self._status_color != value: |
| 88 | + self._status_color = value |
| 89 | + self.statusColorChanged.emit() |
| 90 | + |
| 91 | + # 便捷方法 |
| 92 | + def update_device_info(self, serial_number=None, mac_address=None): |
| 93 | + """更新设备信息""" |
| 94 | + if serial_number is not None: |
| 95 | + self.serialNumber = serial_number |
| 96 | + if mac_address is not None: |
| 97 | + self.macAddress = mac_address |
| 98 | + |
| 99 | + def update_activation_status(self, status, color="#6c757d"): |
| 100 | + """更新激活状态""" |
| 101 | + self.activationStatus = status |
| 102 | + self.statusColor = color |
| 103 | + |
| 104 | + def update_activation_code(self, code): |
| 105 | + """更新激活码""" |
| 106 | + self.activationCode = code |
| 107 | + |
| 108 | + def reset_activation_code(self): |
| 109 | + """重置激活码""" |
| 110 | + self.activationCode = "--" |
| 111 | + |
| 112 | + def set_status_activated(self): |
| 113 | + """设置为已激活状态""" |
| 114 | + self.update_activation_status("已激活", "#28a745") |
| 115 | + self.reset_activation_code() |
| 116 | + |
| 117 | + def set_status_not_activated(self): |
| 118 | + """设置为未激活状态""" |
| 119 | + self.update_activation_status("未激活", "#dc3545") |
| 120 | + |
| 121 | + def set_status_inconsistent(self, local_activated=False, server_activated=False): |
| 122 | + """设置状态不一致""" |
| 123 | + if local_activated and not server_activated: |
| 124 | + self.update_activation_status("状态不一致(需重新激活)", "#ff9900") |
| 125 | + else: |
| 126 | + self.update_activation_status("状态不一致(已修复)", "#28a745") |
0 commit comments