|
|
|
import qtawesome
|
|
|
|
from PyQt5 import QtGui
|
|
|
|
from PyQt5.QtCore import Qt, QVariant
|
|
|
|
from PyQt5.QtWidgets import QHBoxLayout, QWidget, QMessageBox
|
|
|
|
from model.ProjectModel.VarManage import *
|
|
|
|
from UI.VarManages.ModbusModel import *
|
|
|
|
from utils import Globals
|
|
|
|
from UI.VarManages.BaseButtonDelegate import BaseButtonDelegate
|
|
|
|
|
|
|
|
class HartModel(VarTableModel):
|
|
|
|
def __init__(self, header, data: list, table = None):
|
|
|
|
'''
|
|
|
|
header : 表头变量
|
|
|
|
data : 表格内容
|
|
|
|
table : 缺省参数
|
|
|
|
'''
|
|
|
|
VarTableModel.__init__(self, header, data, table = table)
|
|
|
|
|
|
|
|
def initTable(self):
|
|
|
|
self.datas = []
|
|
|
|
varDatas = HartVarManage.getAllVar()
|
|
|
|
|
|
|
|
if not varDatas:
|
|
|
|
# self.layoutChanged.emit()
|
|
|
|
self.table.proxy.invalidate()
|
|
|
|
return
|
|
|
|
for x in varDatas:
|
|
|
|
for i in range(3, 8):
|
|
|
|
x.insert(i, '')
|
|
|
|
x.append('')
|
|
|
|
self.datas.append(x)
|
|
|
|
self.checkList = ['Unchecked'] * len(self.datas)
|
|
|
|
# self.layoutChanged.emit()
|
|
|
|
self.table.proxy.invalidate()
|
|
|
|
|
|
|
|
def data(self, QModelIndex, role=None):
|
|
|
|
# print(Qt.__dict__.items())
|
|
|
|
if role == Qt.TextAlignmentRole:
|
|
|
|
return Qt.AlignCenter
|
|
|
|
if not QModelIndex.isValid():
|
|
|
|
print("行或者列有问题")
|
|
|
|
return QVariant()
|
|
|
|
if role == Qt.BackgroundColorRole:
|
|
|
|
if QModelIndex.row() % 2 == 0 and self.datas[QModelIndex.row()][1] not in Globals.getValue('forceVars'):
|
|
|
|
return QtGui.QColor('#EFEFEF')
|
|
|
|
if self.datas[QModelIndex.row()][3] in Globals.getValue('forceVars'):
|
|
|
|
return QtGui.QColor('#00FF7F')
|
|
|
|
if role == Qt.TextColorRole:
|
|
|
|
return QtGui.QColor('#1A1A1A')
|
|
|
|
if role == Qt.CheckStateRole:
|
|
|
|
if QModelIndex.column() == 0:
|
|
|
|
return Qt.Checked if self.checkList[QModelIndex.row()] == 'Checked' else Qt.Unchecked
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
if role == Qt.ToolTipRole:
|
|
|
|
if QModelIndex.column() == 0:
|
|
|
|
return self.checkList[QModelIndex.row()]
|
|
|
|
if role == Qt.DisplayRole or role == Qt.EditRole:
|
|
|
|
if QModelIndex.row() in self.editableList:
|
|
|
|
return self.datas[QModelIndex.row()][QModelIndex.column()]
|
|
|
|
if role != Qt.DisplayRole:
|
|
|
|
return QVariant()
|
|
|
|
|
|
|
|
# 获取变量值并插入表格
|
|
|
|
if QModelIndex.column() in [3, 4, 5, 6, 7]:
|
|
|
|
# varName = self.datas[QModelIndex.row()][1]
|
|
|
|
# if varName != '':
|
|
|
|
# # print(uid)
|
|
|
|
try:
|
|
|
|
uid = MBTCPMApp.backend.get('HART').decode('utf-8')
|
|
|
|
res = AsyncResult(uid) # 参数为task id
|
|
|
|
if res.result:
|
|
|
|
result = res.result[QModelIndex.column() - 3]
|
|
|
|
if result or result in [0, '0']:
|
|
|
|
self.datas[QModelIndex.row()][QModelIndex.column()] = result
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
return QVariant(self.datas[QModelIndex.row()][QModelIndex.column()])
|
|
|
|
|
|
|
|
def flags(self, index):
|
|
|
|
if index.column() == 0:
|
|
|
|
return Qt.ItemIsEnabled | Qt.ItemIsUserCheckable
|
|
|
|
if index.row() in self.editableList and index.column():
|
|
|
|
return Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsEditable
|
|
|
|
return Qt.ItemIsEnabled
|
|
|
|
|
|
|
|
|
|
|
|
class HartButtonDelegate(BaseButtonDelegate):
|
|
|
|
"""该类用于向单元格中添加按钮 任务表格"""
|
|
|
|
|
|
|
|
def __init__(self, parent=None):
|
|
|
|
super(HartButtonDelegate, self).__init__(parent)
|
|
|
|
|
|
|
|
def paint(self, painter, option, index):
|
|
|
|
if not self.parent().indexWidget(index):
|
|
|
|
button2 = QPushButton(
|
|
|
|
qtawesome.icon('fa.pencil', color='#4c8cf2'),
|
|
|
|
"",
|
|
|
|
self.parent(),
|
|
|
|
clicked=self.edit_action
|
|
|
|
)
|
|
|
|
button2.clicked.connect(self.edit_action)
|
|
|
|
button2.oldName = False
|
|
|
|
button2.isEdit = True
|
|
|
|
button2.index = [index.row(), index.column()]
|
|
|
|
|
|
|
|
|
|
|
|
data = self.parent().model.datas[index.row()]
|
|
|
|
for x in data[:-1]:
|
|
|
|
if x != '':
|
|
|
|
break
|
|
|
|
else:
|
|
|
|
button2.isEdit = False
|
|
|
|
button2.setIcon(qtawesome.icon('fa.save', color='#1fbb6f'))
|
|
|
|
self.parent().model.editableList.append(button2.index[0])
|
|
|
|
h_box_layout = QHBoxLayout()
|
|
|
|
h_box_layout.addWidget(button2)
|
|
|
|
h_box_layout.setContentsMargins(2, 0, 0, 2)
|
|
|
|
h_box_layout.setAlignment(Qt.AlignCenter)
|
|
|
|
widget = QWidget()
|
|
|
|
widget.setLayout(h_box_layout)
|
|
|
|
self.parent().setIndexWidget(
|
|
|
|
index,
|
|
|
|
widget
|
|
|
|
)
|
|
|
|
|
|
|
|
def edit_action(self):
|
|
|
|
sender = self.sender()
|
|
|
|
model = self.parent().model
|
|
|
|
|
|
|
|
# 使用基类的验证方法获取行索引
|
|
|
|
view_row, source_row = self._validate_button_indices(sender)
|
|
|
|
if view_row is None:
|
|
|
|
return
|
|
|
|
|
|
|
|
if sender.isEdit:
|
|
|
|
sender.setIcon(qtawesome.icon('fa.save', color='#1fbb6f'))
|
|
|
|
sender.isEdit = False
|
|
|
|
sender.oldName = model.datas[source_row][1]
|
|
|
|
model.editableList.append(source_row)
|
|
|
|
else:
|
|
|
|
varMes = model.datas[source_row]
|
|
|
|
name, des = str(varMes[1]), str(varMes[2])
|
|
|
|
if not name :
|
|
|
|
reply = QMessageBox.question(self.parent(),
|
|
|
|
'警告',
|
|
|
|
"有字段为空",
|
|
|
|
QMessageBox.Yes)
|
|
|
|
return
|
|
|
|
sender.isEdit = True
|
|
|
|
model.editableList.remove(source_row)
|
|
|
|
if sender.oldName:
|
|
|
|
HartVarManage.editVar(name = sender.oldName, Nname = name, des = des)
|
|
|
|
else:
|
|
|
|
HartVarManage.createVar(varName = name, des = des)
|
|
|
|
sender.setIcon(qtawesome.icon('fa.pencil', color='#4c8cf2'))
|
|
|
|
varMes = HartVarManage.getByName(name)
|
|
|
|
model.insert_data(varMes, source_row)
|
|
|
|
model.remove_row(source_row + 1)
|