913 lines
47 KiB
Python
913 lines
47 KiB
Python
import json
|
||
import os
|
||
import base64
|
||
import uuid
|
||
from PyQt6 import *
|
||
from PyQt6.QtCore import *
|
||
from PyQt6.QtGui import *
|
||
from PyQt6.QtWidgets import *
|
||
from PyQt6.QtQuick import *
|
||
from PyQt6.QtQml import *
|
||
from createModelDlg import CreateModelDlg
|
||
from createInstructionDlg import CreateInstructionDlg
|
||
from ui.Ui_devModelForm import Ui_devModelForm
|
||
from show_editor import CodeDialog
|
||
from interfaceSession.interfaceManager import interfaceManager
|
||
from instructionModel.instructionManager import instructionManager
|
||
from dmGroupModel.dmGroupManager import dmGroupManager
|
||
from common import common
|
||
from common import DragDropInfo
|
||
from common import AlignDelegate
|
||
from common import AlignNoDelegate
|
||
from devmodelModel.devModelManager import devModelManager
|
||
class CustomHeader(QHeaderView):
|
||
def __init__(self, parent=None):
|
||
super().__init__(Qt.Orientation.Horizontal, parent)
|
||
self.config = None
|
||
self.combo = QComboBox(self)
|
||
self.combo.currentIndexChanged.connect(self.handleComboChange)
|
||
|
||
def setConfig(self, config):
|
||
self.config = config
|
||
self.combo.addItems(self.config["type"])
|
||
def paintSection(self, painter, rect, logicalIndex):
|
||
painter.save()
|
||
super().paintSection(painter, rect, logicalIndex)
|
||
if logicalIndex == 0:
|
||
comboRect = rect.adjusted(4, 4, -4, -4)
|
||
self.combo.setGeometry(comboRect)
|
||
self.combo.show()
|
||
painter.restore()
|
||
|
||
def handleComboChange(self, index):
|
||
print("Selected:", self.combo.currentText())
|
||
|
||
class DevModelForm(QWidget):
|
||
|
||
def __init__(self, parent=None):
|
||
super().__init__(parent)
|
||
self.ui = Ui_devModelForm()
|
||
self.ui.setupUi(self)
|
||
self.devModelModel = QStandardItemModel()
|
||
self.createModelDlg = CreateModelDlg()
|
||
self.codeDialog = CodeDialog("脚本编辑")
|
||
self.supportedTypes = instructionManager.getSupportedType()
|
||
self.createInstructionDlg = CreateInstructionDlg()
|
||
self.instructionModel = QStandardItemModel()
|
||
self.interFaceTypeModel = QStandardItemModel()
|
||
self.interfaceTypeCombModel = QStandardItemModel()
|
||
self.propertyModel = QStandardItemModel()
|
||
self.dmGroupModel = QStandardItemModel()
|
||
self.ui.tableViewCmd.setModel(self.instructionModel)
|
||
self.ui.tableViewModel.setModel(self.devModelModel)
|
||
self.ui.tableViewInterFaceType.setModel(self.interFaceTypeModel)
|
||
self.ui.tableViewProperty.setModel(self.propertyModel)
|
||
self.ui.tableViewDmGroup.setModel(self.dmGroupModel)
|
||
self.current_groupId = None
|
||
self.topWidget = None
|
||
self.interfaceTypes = []
|
||
self.createInstructionDlg.createFinished.connect(self.handleDevModelSelection)
|
||
self.createInstructionDlg.editFinished.connect(self.handleDevModelSelection)
|
||
self.createModelDlg.editFinished.connect(self.editDeviceFinished)
|
||
self.createModelDlg.createFinished.connect(self.createDeviceFinished)
|
||
self.ui.tableViewCmd.selectionModel().selectionChanged.connect(self.handleCmdSelection)
|
||
self.ui.tableViewDmGroup.selectionModel().selectionChanged.connect(self.handleGroupSelection)
|
||
self.ui.tableViewDmGroup.dropEvent = self.dmGroupDropEvent
|
||
self.ui.tableViewModel.dropEvent = self.dropEvent
|
||
self.ui.pbDeleteModel.clicked.connect(self.deleteModelBtnClick)
|
||
# self.ui.pbImportModel.clicked.connect(self.overWriteModelBtnClick)
|
||
self.ui.pbExportModel.clicked.connect(self.exportModel)
|
||
self.ui.pbCreateModel.clicked.connect(self.showCreateModelDlg)
|
||
self.ui.tableViewModel.doubleClicked.connect(self.editModel)
|
||
self.ui.pbEditModel.clicked.connect(self.editModel)
|
||
self.ui.pbCreateCmd.clicked.connect(self.createInstruction)
|
||
self.ui.pbDeleteCmd.clicked.connect(self.deleteInstruction)
|
||
self.ui.tableViewCmd.doubleClicked.connect(self.editInstruction)
|
||
self.ui.pbCreateModelGroup.clicked.connect(self.createGroup)
|
||
self.ui.pbDeleteModelGroup.clicked.connect(self.deleteGroup)
|
||
self.ui.pbEditCmd.clicked.connect(self.editInstruction)
|
||
self.ui.pbEditScript.clicked.connect(self.editScript)
|
||
self.ui.pbAddInterfaceType.clicked.connect(self.addInterfaceType)
|
||
self.ui.pbDeleteInterfaceType.clicked.connect(self.deleteInterfaceType)
|
||
self.ui.pbAddProperty.clicked.connect(self.addProperty)
|
||
self.ui.pbDeleteProperty.clicked.connect(self.deleteProperty)
|
||
self.ui.tableViewModel.selectionModel().selectionChanged.connect(self.handleDevModelSelection)
|
||
self.ui.pbCopyInstruction.clicked.connect(self.copyInstruction)
|
||
self.ui.pbEditDescription.clicked.connect(self.onEditDescription)
|
||
self.ui.pbSaveDescription.clicked.connect(self.saveDescription)
|
||
self.ui.pbCopyModel.clicked.connect(self.copyModel)
|
||
self.ui.lbDevModelImage.mouseDoubleClickEvent = self.handleImageClick
|
||
# 关联信号和槽函数
|
||
self.dmGroupModel.itemChanged.connect(self.updateDmGroup)
|
||
self.interFaceTypeModel.itemChanged.connect(self.updateProperty)
|
||
self.propertyModel.itemChanged.connect(self.updateProperty)
|
||
self.batchSetItemDelegate()
|
||
self.setSplitterStretchFactor()
|
||
self.loadInterFaceTypes()
|
||
|
||
def onEditDescription(self):
|
||
self.ui.textEditDescription.setEnabled(True)
|
||
self.ui.textEditDescription.setFocus()
|
||
|
||
def saveDescription(self):
|
||
self.ui.textEditDescription.setEnabled(False)
|
||
|
||
if len(self.ui.tableViewCmd.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewCmd.selectionModel().selectedRows()[0].row()
|
||
row_index = self.instructionModel.index(row, 0, QModelIndex())
|
||
row_description =self.instructionModel.index(row, 5, QModelIndex())
|
||
instructionId = self.instructionModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
instruction = instructionManager.getInfo(instructionId)
|
||
if "attr" in instruction.keys():
|
||
attr = instruction["attr"]
|
||
attr["description"] = self.ui.textEditDescription.toPlainText()
|
||
if instructionManager.update(instructionId, instruction):
|
||
self.instructionModel.setData(row_description, attr["description"])
|
||
|
||
def batchSetItemDelegate(self):
|
||
self.ui.tableViewModel.verticalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignHCenter|Qt.AlignmentFlag.AlignVCenter)
|
||
self.ui.tableViewCmd.verticalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignHCenter|Qt.AlignmentFlag.AlignVCenter)
|
||
self.ui.tableViewModel.horizontalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
|
||
self.ui.tableViewCmd.horizontalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
|
||
self.ui.tableViewInterFaceType.horizontalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
|
||
self.ui.tableViewProperty.horizontalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
|
||
self.ui.tableViewModel.setItemDelegate(AlignNoDelegate(self.ui.tableViewModel))
|
||
self.ui.tableViewInterFaceType.setItemDelegate(AlignDelegate(self.ui.tableViewInterFaceType))
|
||
self.ui.tableViewProperty.setItemDelegate(AlignDelegate(self.ui.tableViewProperty))
|
||
self.ui.tableViewCmd.setItemDelegate(AlignNoDelegate(self.ui.tableViewCmd))
|
||
self.ui.tableViewDmGroup.setItemDelegate(AlignDelegate(self.ui.tableViewDmGroup))
|
||
|
||
def dmGroupDropEvent(self, event: QDropEvent):
|
||
if event.source() != self:
|
||
mime_data = event.mimeData()
|
||
source_index = mime_data.data('application/x-qabstractitemmodeldatalist')
|
||
target_index = self.ui.tableViewDmGroup.indexAt(event.position().toPoint())
|
||
drag_drop_info = DragDropInfo(source_index, target_index)
|
||
self.handleGroupDrop(drag_drop_info)
|
||
event.accept()
|
||
else:
|
||
event.ignore()
|
||
|
||
def dropEvent(self, event: QDropEvent):
|
||
if event.source() != self:
|
||
mime_data = event.mimeData()
|
||
source_index = mime_data.data('application/x-qabstractitemmodeldatalist')
|
||
target_index = self.ui.tableViewModel.indexAt(event.position().toPoint())
|
||
drag_drop_info = DragDropInfo(source_index, target_index)
|
||
self.handleDrop(drag_drop_info)
|
||
event.accept()
|
||
else:
|
||
event.ignore()
|
||
|
||
def handleGroupDrop(self, drag_drop_info):
|
||
target_row = drag_drop_info.target_index.row()
|
||
if target_row > -1:
|
||
row_id_index = self.dmGroupModel.index(target_row, 0, QModelIndex())
|
||
groupId = self.dmGroupModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
rows = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
for row in rows:
|
||
row_id_index = self.devModelModel.index(row.row(), 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
# devModelManager.createCopy(devModelId, groupId)
|
||
param = {
|
||
"group_id": groupId
|
||
}
|
||
result = devModelManager.update(devModelId, param)
|
||
self.refreshSelect()
|
||
|
||
def handleDrop(self, drag_drop_info):
|
||
target_row = drag_drop_info.target_index.row()
|
||
if target_row > -1:
|
||
row_id_index = self.devModelModel.index(target_row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
rows = self.ui.tableViewCmd.selectionModel().selectedRows()
|
||
for row in rows:
|
||
row_id_index = self.instructionModel.index(row.row(), 0, QModelIndex())
|
||
instructionId = self.instructionModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
instructionManager.createCrossCopy(instructionId, devModelId)
|
||
|
||
self.refreshSelect()
|
||
|
||
def editDeviceFinished(self):
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewModel.selectionModel().selectedRows()[0].row()
|
||
self.loadDevModel()
|
||
if self.devModelModel.rowCount() > 0:
|
||
self.ui.tableViewModel.selectRow(row)
|
||
|
||
def createDeviceFinished(self):
|
||
self.loadDevModel()
|
||
if self.devModelModel.rowCount() > 0:
|
||
self.ui.tableViewModel.selectRow(self.devModelModel.rowCount()-1)
|
||
|
||
def clearChildrenModel(self):
|
||
self.instructionModel.clear()
|
||
self.propertyModel.clear()
|
||
self.interFaceTypeModel.clear()
|
||
self.ui.lbDevModelImage.clear()
|
||
self.ui.lbDevModelImage.setText("封面")
|
||
|
||
def showCreateModelDlg(self):
|
||
if self.current_groupId != None:
|
||
self.createModelDlg.showCreateDlg(self.current_groupId)
|
||
|
||
def handleImageClick(self, event):
|
||
if event.button() == Qt.MouseButton.LeftButton:
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewModel.selectionModel().selectedRows()[0].row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
data = devModelManager.getInfo(devModelId)
|
||
modelnumber = ""
|
||
extendedProperty = ""
|
||
interfaceType = ""
|
||
file_dialog = QFileDialog(self)
|
||
file_dialog.setWindowTitle('选择图片')
|
||
file_dialog.setNameFilter('Supported file formats (*.png *.jpg)') # 设置文件过滤器
|
||
if file_dialog.exec():
|
||
file_path = file_dialog.selectedFiles()[0]
|
||
pixmap = QPixmap(file_path)
|
||
self.ui.lbDevModelImage.setPixmap(pixmap)
|
||
self.ui.lbDevModelImage.setScaledContents(True)
|
||
self.ui.lbDevModelImage.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||
base64_data = common.base64Data(pixmap.toImage())
|
||
|
||
if 'attr' in data:
|
||
attr_json_dict = data['attr']
|
||
if 'modelnumber' in attr_json_dict:
|
||
modelnumber = attr_json_dict['modelnumber']
|
||
if 'extendedProperty' in attr_json_dict:
|
||
extendedProperty = attr_json_dict['extendedProperty']
|
||
if 'interfaceType' in attr_json_dict:
|
||
interfaceType = attr_json_dict['interfaceType']
|
||
attr = {
|
||
"modelnumber": modelnumber,
|
||
"image": base64_data,
|
||
"extendedProperty" : extendedProperty,
|
||
"interfaceType" : interfaceType
|
||
}
|
||
param = {
|
||
"attr" : attr
|
||
}
|
||
result = devModelManager.update(devModelId, param)
|
||
|
||
def copyModel(self):
|
||
indexs = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
if len(indexs) == 1:
|
||
row = indexs[0].row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index)
|
||
if devModelManager.createCopy(devModelId):
|
||
self.createDeviceFinished()
|
||
|
||
def copyInstruction(self):
|
||
indexs = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
if len(indexs) == 1:
|
||
row = indexs[0].row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
instructionIndexs = self.ui.tableViewCmd.selectionModel().selectedRows()
|
||
for instructionIndex in instructionIndexs:
|
||
row = instructionIndex.row()
|
||
row_index = self.instructionModel.index(row, 0, QModelIndex())
|
||
instructionId = self.instructionModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
instructionManager.createCopy(instructionId)
|
||
self.loadInstruction(devModelId)
|
||
|
||
#加载接口类型
|
||
def loadInterFaceTypes(self):
|
||
self.interfaceTypes = []
|
||
supportedType = interfaceManager.getSupportedType()
|
||
for type in supportedType:
|
||
self.interfaceTypes.append(supportedType[type])
|
||
self.interfaceTypeCombModel.clear()
|
||
for interfaceType in self.interfaceTypes:
|
||
index = self.interfaceTypeCombModel.rowCount()
|
||
self.interfaceTypeCombModel.setItem(index, 0 , QStandardItem(interfaceType))
|
||
self.batchOperation()
|
||
|
||
#添加接口类型
|
||
def addInterfaceType(self):
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
# 列表末位名称为空不允许创建
|
||
if self.interFaceTypeModel.rowCount() > 0:
|
||
lastIndex = self.interFaceTypeModel.rowCount() - 1
|
||
if self.interFaceTypeModel.item(lastIndex, 0).text().strip() == "":
|
||
self.ui.tableViewInterFaceType.edit(self.interFaceTypeModel.index(lastIndex, 0))
|
||
return
|
||
index = self.interFaceTypeModel.rowCount()
|
||
if len(self.interfaceTypes) > 0:
|
||
self.interFaceTypeModel.appendRow([QStandardItem(), QStandardItem(self.interfaceTypes[0])]) # 赋默认值
|
||
cmb = QComboBox()
|
||
cmb.setModel(self.interfaceTypeCombModel)
|
||
cmb.currentIndexChanged.connect(self.changeInterfaceType)
|
||
self.ui.tableViewInterFaceType.setIndexWidget(self.interFaceTypeModel.index(index, 1), cmb)
|
||
self.ui.tableViewInterFaceType.setCurrentIndex(self.interFaceTypeModel.index(index, 0) )
|
||
self.ui.tableViewInterFaceType.edit(self.interFaceTypeModel.index(index, 0))
|
||
|
||
#接口类型切换
|
||
def changeInterfaceType(self, index):
|
||
if len(self.ui.tableViewInterFaceType.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewInterFaceType.selectionModel().selectedRows()[0].row()
|
||
self.interFaceTypeModel.setItem(row, 1, QStandardItem(self.interfaceTypes[index]))
|
||
|
||
#删除接口类型
|
||
def deleteInterfaceType(self):
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
if len(self.ui.tableViewInterFaceType.selectionModel().selectedRows()) == 1:
|
||
row = self.ui.tableViewInterFaceType.selectionModel().selectedRows()[0].row()
|
||
self.interFaceTypeModel.removeRow(row)
|
||
self.updateProperty()
|
||
#编辑模型
|
||
def editModel(self):
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewModel.selectionModel().selectedRows()[0].row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
data = devModelManager.getInfo(devModelId)
|
||
if data:
|
||
self.createModelDlg.showEditDlg(data)
|
||
|
||
def setSplitterStretchFactor(self):
|
||
self.ui.splitter.setStretchFactor(0, 30)
|
||
self.ui.splitter.setStretchFactor(1, 30)
|
||
self.ui.splitter.setStretchFactor(2, 40)
|
||
|
||
def updateCmdBtnState(self):
|
||
if len(self.ui.tableViewCmd.selectionModel().selectedRows())== 1:
|
||
self.ui.pbEditCmd.setEnabled(True)
|
||
self.ui.pbEditScript.setEnabled(True)
|
||
else:
|
||
self.ui.pbEditCmd.setEnabled(False)
|
||
self.ui.pbEditScript.setEnabled(False)
|
||
|
||
# 指令列表选中
|
||
def handleCmdSelection(self):
|
||
indexs = self.ui.tableViewCmd.selectionModel().selectedRows()
|
||
if len(indexs) == 1:
|
||
row = indexs[0].row()
|
||
row_index = self.instructionModel.index(row, 5, QModelIndex())
|
||
description = self.instructionModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
self.ui.textEditDescription.setEnabled(False)
|
||
if description:
|
||
self.ui.textEditDescription.setText(description)
|
||
else:
|
||
self.ui.textEditDescription.clear()
|
||
self.updateCmdBtnState()
|
||
# 创建指令
|
||
def createInstruction(self):
|
||
indexs = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
if len(indexs) == 1:
|
||
row = indexs[0].row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
self.createInstructionDlg.showCreateDlg(devModelId)
|
||
|
||
def deleteInstruction(self):
|
||
indexs = self.ui.tableViewCmd.selectionModel().selectedRows()
|
||
if len(indexs) == 1:
|
||
row = indexs[0].row()
|
||
row_id_index = self.instructionModel.index(row, 0, QModelIndex())
|
||
row_name_index = self.instructionModel.index(row, 2, QModelIndex())
|
||
instructionName = self.instructionModel.data(row_name_index, Qt.ItemDataRole.DisplayRole)
|
||
if self.topWidget == None:
|
||
self.topWidget = self.findTopLevelParent(self)
|
||
if self.topWidget != None:#必须这样写,不能写else
|
||
if self.topWidget.removeDialog(instructionName):
|
||
row_id_index = self.instructionModel.index(row, 0, QModelIndex())
|
||
instructionId = self.instructionModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
if instructionManager.delete(instructionId):
|
||
self.instructionModel.removeRow(row)
|
||
elif len(indexs) > 1:
|
||
if self.topWidget == None:
|
||
self.topWidget = self.findTopLevelParent(self)
|
||
if self.topWidget != None: #必须这样写,不能写else
|
||
if self.topWidget.removeDialog(f"{len(indexs)}个模型指令"):
|
||
for index in indexs:
|
||
row = index.row()
|
||
row_id_index = self.instructionModel.index(row, 0, QModelIndex())
|
||
instructionId = self.instructionModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
instructionManager.delete(instructionId)
|
||
self.refreshSelect()
|
||
|
||
def findTopLevelParent(self, widget):
|
||
parent = widget.parent()
|
||
while parent and not isinstance(parent, QMainWindow): # 假设顶层窗口是 QMainWindow
|
||
widget = parent
|
||
parent = widget.parent()
|
||
return parent
|
||
|
||
#编辑指令
|
||
def editInstruction(self):
|
||
indexs = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
if len(indexs) == 1:
|
||
row = indexs[0].row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
if len(self.ui.tableViewCmd.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewCmd.selectionModel().selectedRows()[0].row()
|
||
row_index = self.instructionModel.index(row, 0, QModelIndex())
|
||
instructionId = self.instructionModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
instruction = instructionManager.getInfo(instructionId)
|
||
if instruction != None:
|
||
self.createInstructionDlg.showEditDlg(devModelId, instruction)
|
||
|
||
def editScript(self):
|
||
indexs = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
if len(indexs) == 1:
|
||
if len(self.ui.tableViewCmd.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewCmd.selectionModel().selectedRows()[0].row()
|
||
row_index = self.instructionModel.index(row, 0, QModelIndex())
|
||
instructionId = self.instructionModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
instruction = instructionManager.getInfo(instructionId)
|
||
if instruction != None:
|
||
dataAttr = instruction.get('attr')
|
||
if dataAttr != None:
|
||
if dataAttr.get('script') != None:
|
||
base64_encoded_str = dataAttr.get('script')
|
||
result = self.codeDialog.showEditDlg(str(base64.b64decode(base64_encoded_str).decode('utf-8')))
|
||
if result == "":
|
||
return
|
||
script = base64.b64encode(result.encode("utf-8")).decode('utf-8')
|
||
dataAttr['script'] = script
|
||
instructionManager.update(instructionId, {"attr": dataAttr})
|
||
script = base64.b64encode(result.encode("utf-8")).decode('utf-8')
|
||
dataAttr['script'] = script
|
||
instructionManager.update(instructionId, {"attr": dataAttr})
|
||
|
||
# 导入设备模型
|
||
def importModelBtnClick(self):
|
||
file_dialog = QFileDialog(self)
|
||
file_dialog.setWindowTitle("选择JSON")
|
||
file_dialog.setNameFilter("Supported file formats (*.json)")
|
||
file_dialog.setFileMode(QFileDialog.FileMode.ExistingFile)
|
||
if file_dialog.exec():
|
||
file_path = file_dialog.selectedFiles()[0]
|
||
with open(file_path, "r", encoding="utf-8") as f: # 指定以utf-8编码打开文件
|
||
devModelInfo = json.load(f)
|
||
devModels = devModelInfo.get("devModels",[])
|
||
instructions = devModelInfo.get("instructions",[])
|
||
for devModel in devModels:
|
||
devModelId = devModelManager.create_from_json(devModel)
|
||
for instruction in instructions:
|
||
devModelOldId = devModel["id"]
|
||
if instruction["dev_model_id"] == devModelOldId:
|
||
instruction["dev_model_id"] = devModelId
|
||
instructionManager.create_from_json(instruction)
|
||
self.refreshSelect()
|
||
|
||
# 覆盖方式导入设备模型
|
||
def overWriteModelBtnClick(self):
|
||
file_dialog = QFileDialog(self)
|
||
file_dialog.setWindowTitle("选择JSON")
|
||
file_dialog.setNameFilter("Supported file formats (*.json)")
|
||
file_dialog.setFileMode(QFileDialog.FileMode.ExistingFile)
|
||
if file_dialog.exec():
|
||
file_path = file_dialog.selectedFiles()[0]
|
||
with open(file_path, "r", encoding="utf-8") as f: # 指定以utf-8编码打开文件
|
||
devModelInfo = json.load(f)
|
||
devModels = devModelInfo.get("devModels",[])
|
||
instructions = devModelInfo.get("instructions",[])
|
||
for devModel in devModels:
|
||
devModelId = devModel['id']
|
||
if devModelManager.getInfo(devModelId) != None:
|
||
devModelManager.update(devModelId, devModel)
|
||
else:
|
||
devModelId = devModelManager.create_from_json(devModel)
|
||
|
||
for instruction in instructions:
|
||
instructionId = instruction['id']
|
||
if instruction["dev_model_id"] == devModelId:
|
||
if instructionManager.getInfo(instructionId) != None:
|
||
instructionManager.update(instructionId, instruction)
|
||
else:
|
||
instructionManager.create_from_json(instruction)
|
||
self.refreshSelect()
|
||
|
||
def exportModel(self):
|
||
try:
|
||
filename = "data.zip"
|
||
packeagePath = filename
|
||
fname = QFileDialog.getSaveFileName(self, '保存文件', packeagePath, 'JSON files (*.zip)')
|
||
if fname[0]:
|
||
packeagePath = fname[0]
|
||
exportPath = os.path.join(os.path.dirname(__file__),"export")
|
||
#清空exportPath目录
|
||
common.clearDir(exportPath)
|
||
#创建exportPath目录
|
||
common.createDir(exportPath)
|
||
indexs = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
for index in indexs:
|
||
row = index.row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
devmodelInfo = devModelManager.getOriginalInfo(devModelId)
|
||
|
||
#判断modelInfo 中的Id 长度是否小于10,如果是则改为uuid
|
||
newdevModelId = str(uuid.uuid4())
|
||
if len(str(devModelId)) < 10:
|
||
devmodelInfo["id"] = newdevModelId
|
||
common.writeJson(os.path.join(os.path.dirname(__file__),"export"),"dev_model", devmodelInfo)
|
||
groupInfo = dmGroupManager.getInfo(devmodelInfo["group_id"])
|
||
common.writeJson(os.path.join(os.path.dirname(__file__),"export"),"device_model_group", groupInfo)
|
||
instructionInfos = instructionManager.getOriginalDevmodelInstructions(devModelId)
|
||
for instructionInfo in instructionInfos:
|
||
if len(str(instructionInfo["id"])) < 10:
|
||
instructionInfo["id"] = str(uuid.uuid4())
|
||
if len(devModelId) < 10:
|
||
instructionInfo["dev_model_id"] = newdevModelId
|
||
common.writeJson(os.path.join(os.path.dirname(__file__),"export"),"instruction", instructionInfo)
|
||
common.writeZip(packeagePath, exportPath)
|
||
except Exception as e:
|
||
if self.topWidget == None:
|
||
self.topWidget = self.findTopLevelParent(self)
|
||
if self.topWidget != None:
|
||
self.topWidget.alertDialog(e,"导出文件异常")
|
||
|
||
def exportModelBtnClick(self):
|
||
indexs = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
modelInfos = []
|
||
instructionInfos = []
|
||
for index in indexs:
|
||
row = index.row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
modelInfo = devModelManager.getOriginalInfo(devModelId)
|
||
|
||
#判断modelInfo 中的Id 长度是否小于10,如果是则改为uuid
|
||
newdevModelId = str(uuid.uuid4())
|
||
if len(str(devModelId)) < 10:
|
||
modelInfo["id"] = newdevModelId
|
||
modelInfos.append(modelInfo)
|
||
instructionInfo = instructionManager.getOriginalDevmodelInstructions(devModelId)
|
||
for info in instructionInfo:
|
||
if len(str(info["id"])) < 10:
|
||
info["id"] = str(uuid.uuid4())
|
||
if len(devModelId) < 10:
|
||
info["dev_model_id"] = newdevModelId
|
||
instructionInfos = instructionInfos + instructionInfo
|
||
devModelInfo = {
|
||
"devModels": modelInfos,
|
||
"instructions": instructionInfos
|
||
}
|
||
filename = "devModelInfo.json"
|
||
packeagePath = filename
|
||
fname = QFileDialog.getSaveFileName(self, '保存文件', packeagePath, 'JSON files (*.json)')
|
||
if fname[0]:
|
||
packeagePath = fname[0]
|
||
with open(packeagePath, "w") as f:
|
||
f.write(json.dumps(devModelInfo))
|
||
|
||
def exportAllModelBtnClick(self):
|
||
modelInfo = devModelManager.getInfo()
|
||
instructionInfo = instructionManager.getInfo("all")
|
||
devModelInfo = {
|
||
"devModels": modelInfo,
|
||
"instructions": instructionInfo
|
||
}
|
||
filename = "devModelInfo.json"
|
||
packeagePath = filename
|
||
fname = QFileDialog.getSaveFileName(self, '保存文件', packeagePath, 'JSON files (*.json)')
|
||
if fname[0]:
|
||
packeagePath = fname[0]
|
||
with open(packeagePath, "w") as f:
|
||
f.write(json.dumps(devModelInfo))
|
||
|
||
# 删除设备模型
|
||
def deleteModelBtnClick(self):
|
||
indexs = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
if len(indexs) == 1:
|
||
row = indexs[0].row()
|
||
row_devModelName_index = self.devModelModel.index(row, 2, QModelIndex())
|
||
devModelName = self.devModelModel.data(row_devModelName_index, Qt.ItemDataRole.DisplayRole)
|
||
if self.topWidget == None:
|
||
self.topWidget = self.findTopLevelParent(self)
|
||
if self.topWidget != None: #必须这样写,不能写else
|
||
if self.topWidget.removeDialog(devModelName):
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
if devModelManager.delete(devModelId):
|
||
self.clearChildrenModel()
|
||
self.devModelModel.removeRow(row)
|
||
elif len(indexs) > 1:
|
||
if self.topWidget == None:
|
||
self.topWidget = self.findTopLevelParent(self)
|
||
if self.topWidget != None: #必须这样写,不能写else
|
||
if self.topWidget.removeDialog(f"{len(indexs)}个设备模型"):
|
||
for index in indexs:
|
||
row = index.row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
devModelManager.delete(devModelId)
|
||
self.refreshSelect()
|
||
|
||
# def resizeEvent(self, event):
|
||
# # 在窗口或控件的尺寸发生变化时调用
|
||
# super().resizeEvent(event)
|
||
# self.setAllColumnWidth()
|
||
|
||
# 批量操作
|
||
def batchOperation(self):
|
||
self.setAllHorizontalHeaderLabels()
|
||
self.hideAllColumn()
|
||
self.setAllColumnWidth()
|
||
|
||
# 批量隐藏指定列
|
||
def hideAllColumn(self):
|
||
self.ui.tableViewModel.setColumnHidden(0, True)
|
||
self.ui.tableViewCmd.setColumnHidden(0, True)
|
||
self.ui.tableViewDmGroup.setColumnHidden(0, True)
|
||
self.ui.tableViewModel.setColumnHidden(1, True)
|
||
self.ui.tableViewCmd.setColumnHidden(1, True)
|
||
self.ui.tableViewCmd.setColumnHidden(5, True)
|
||
|
||
# 批量设置列宽
|
||
def setAllColumnWidth(self):
|
||
try:
|
||
if self.devModelModel.rowCount() > 0:
|
||
# 对水平表头的所有行设置为自动调整大小以适应内容
|
||
self.ui.tableViewModel.horizontalHeader().setSectionResizeMode(2,QHeaderView.ResizeMode.Stretch)
|
||
self.ui.tableViewModel.horizontalHeader().setSectionResizeMode(3,QHeaderView.ResizeMode.Stretch)
|
||
|
||
self.ui.tableViewProperty.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
|
||
self.ui.tableViewInterFaceType.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
|
||
if self.instructionModel.rowCount() > 0:
|
||
self.ui.tableViewCmd.horizontalHeader().setSectionResizeMode(2,QHeaderView.ResizeMode.ResizeToContents)
|
||
self.ui.tableViewCmd.horizontalHeader().setSectionResizeMode(3,QHeaderView.ResizeMode.Stretch)
|
||
self.ui.tableViewCmd.horizontalHeader().setSectionResizeMode(4,QHeaderView.ResizeMode.Stretch)
|
||
if self.dmGroupModel.rowCount() > 0:
|
||
self.ui.tableViewDmGroup.horizontalHeader().setSectionResizeMode(1,QHeaderView.ResizeMode.Stretch)
|
||
except Exception as e:
|
||
print(e)
|
||
# common.resizeNumberTableView(self.ui.tableViewModel, [2,3])
|
||
# common.resizeNumberTableView(self.ui.tableViewCmd, [2,3,4])
|
||
# common.resizeTableView(self.ui.tableViewProperty, [0,1])
|
||
# common.resizeTableView(self.ui.tableViewInterFaceType, [0,1])
|
||
|
||
# 批量设置标题
|
||
def setAllHorizontalHeaderLabels(self):
|
||
self.dmGroupModel.setHorizontalHeaderLabels(["ID", "名称"])
|
||
self.propertyModel.setHorizontalHeaderLabels([" 属性", " 值"])
|
||
self.interFaceTypeModel.setHorizontalHeaderLabels([" 名称","类型"])
|
||
self.devModelModel.setHorizontalHeaderLabels(["ID", "", "名称", "分类"])
|
||
self.instructionModel.setHorizontalHeaderLabels(["ID", "", "名称", "摘要", "备注", "描述"])
|
||
|
||
# def refreshSelect(self):
|
||
# selectedRows = self.ui.tableViewModel.selectionModel().selectedRows()
|
||
# self.loadDevModel()
|
||
# if len(selectedRows) < 1:
|
||
# self.ui.tableViewModel.selectRow(0)
|
||
# if len(selectedRows)== 1:
|
||
# row = selectedRows[0].row()
|
||
# self.ui.tableViewModel.selectRow(row)
|
||
|
||
def refreshSelect(self):
|
||
selectedRows = self.ui.tableViewDmGroup.selectionModel().selectedRows()
|
||
self.loadDmGroup()
|
||
if len(selectedRows) < 1:
|
||
self.ui.tableViewDmGroup.selectRow(0)
|
||
if len(selectedRows) == 1:
|
||
row = selectedRows[0].row()
|
||
self.ui.tableViewDmGroup.selectRow(row)
|
||
|
||
def updateDevModelBtnState(self):
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
self.ui.pbEditModel.setEnabled(True)
|
||
self.ui.pbCopyModel.setEnabled(True)
|
||
else:
|
||
self.ui.pbEditModel.setEnabled(False)
|
||
self.ui.pbCopyModel.setEnabled(False)
|
||
|
||
# 设备模型列表选中
|
||
def handleDevModelSelection(self):
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewModel.selectionModel().selectedRows()[0].row()
|
||
row_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_index, Qt.ItemDataRole.DisplayRole)
|
||
self.loadDevModelProperty(devModelId)
|
||
self.loadInstruction(devModelId)
|
||
self.updateDevModelBtnState()
|
||
|
||
# 任务分组选中
|
||
def handleGroupSelection(self, index):
|
||
if len(self.ui.tableViewDmGroup.selectionModel().selectedRows()) == 1:
|
||
row = self.ui.tableViewDmGroup.selectionModel().selectedRows()[0].row()
|
||
row_id_index = self.dmGroupModel.index(row, 0, QModelIndex())
|
||
group_id = self.dmGroupModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
self.current_groupId = group_id
|
||
self.loadDevModel()
|
||
self.clearChildrenModel()
|
||
|
||
# 加载队列组
|
||
def loadDmGroup(self):
|
||
self.dmGroupModel.clear()
|
||
self.ui.textEditDescription.clear()
|
||
groups = dmGroupManager.getInfo()
|
||
self.dmGroupModelBlockSignals = True
|
||
if len(groups) > 0:
|
||
for group in groups:
|
||
index = self.dmGroupModel.rowCount()
|
||
self.dmGroupModel.setItem(index, 0, QStandardItem(str(group["id"])))
|
||
self.dmGroupModel.setItem(index, 1, QStandardItem(group["name"]))
|
||
self.dmGroupModelBlockSignals = False
|
||
self.batchOperation()
|
||
|
||
# 加载设备模型
|
||
def loadDevModel(self):
|
||
devModels = devModelManager.getGroupDm(self.current_groupId)
|
||
self.devModelModel.clear()
|
||
self.ui.textEditDescription.clear()
|
||
if len(devModels) > 0:
|
||
for data in devModels:
|
||
index = self.devModelModel.rowCount()
|
||
self.devModelModel.setItem(index, 0, QStandardItem(str(data["id"])))
|
||
self.devModelModel.setItem(index, 1, QStandardItem(str(index+1)))
|
||
self.devModelModel.setItem(index, 2, QStandardItem(data["name"]))
|
||
self.devModelModel.setItem(index, 3, QStandardItem(data["category"]))
|
||
self.ui.tableViewModel.sortByColumn(2, Qt.SortOrder.AscendingOrder)
|
||
self.batchOperation()
|
||
|
||
# 更新属性
|
||
def updateProperty(self):
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewModel.selectionModel().selectedRows()[0].row()
|
||
row_id_index = self.devModelModel.index(row, 0, QModelIndex())
|
||
devModelId = self.devModelModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
#固定属性
|
||
interfaceType = {}
|
||
extendedProperty = {}
|
||
modelnumber = ""
|
||
for row in range(self.interFaceTypeModel.rowCount()):
|
||
keyIndex = self.interFaceTypeModel.index(row, 0)
|
||
valueIndex = self.interFaceTypeModel.index(row, 1)
|
||
key = self.interFaceTypeModel.data(keyIndex)
|
||
value = self.interFaceTypeModel.data(valueIndex)
|
||
self.interFaceTypeModel.item(row, 1)
|
||
interfaceType[key] = value
|
||
|
||
for row in range(self.propertyModel.rowCount()):
|
||
if self.propertyModel.item(row, 0).text() == "设备型号":
|
||
modelnumber = self.propertyModel.item(row, 1).text()
|
||
else:
|
||
if self.propertyModel.item(row, 0).text() != "":
|
||
extendedProperty[self.propertyModel.item(row, 0).text()] = self.propertyModel.item(row, 1).text()
|
||
|
||
image = common.base64Data(self.ui.lbDevModelImage.pixmap().toImage())
|
||
attr = {
|
||
"modelnumber": modelnumber,
|
||
"image": image,
|
||
"extendedProperty" : extendedProperty,
|
||
"interfaceType" : interfaceType
|
||
}
|
||
param = {
|
||
"attr": attr
|
||
}
|
||
devModelManager.update(devModelId, param)
|
||
|
||
# 添加属性
|
||
def addProperty(self):
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
# 列表末位名称为空不允许创建
|
||
if self.propertyModel.rowCount() > 0:
|
||
lastIndex = self.propertyModel.rowCount() - 1
|
||
if self.propertyModel.item(lastIndex, 0).text().strip() == "":
|
||
self.ui.tableViewProperty.edit(self.propertyModel.index(lastIndex, 0))
|
||
return
|
||
index = self.propertyModel.rowCount()
|
||
self.propertyModel.appendRow([QStandardItem(), QStandardItem()])
|
||
self.ui.tableViewProperty.setCurrentIndex(self.propertyModel.index(index, 0) )
|
||
self.ui.tableViewProperty.edit(self.propertyModel.index(index, 0))
|
||
|
||
# 删除属性
|
||
def deleteProperty(self):
|
||
if len(self.ui.tableViewModel.selectionModel().selectedRows())== 1:
|
||
if len(self.ui.tableViewProperty.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewProperty.selectionModel().selectedRows()[0].row()
|
||
if row > 0:
|
||
self.propertyModel.removeRow(row)
|
||
self.updateProperty()
|
||
|
||
#加载模型属性
|
||
def loadDevModelProperty(self,devModelId):
|
||
if devModelId:
|
||
data = devModelManager.getInfo(devModelId)
|
||
if data:
|
||
pixmap = QPixmap()
|
||
if "attr" in data:
|
||
#加载属性参数
|
||
attr_json_dict = data["attr"]
|
||
modelnumber = ""
|
||
if "modelnumber" in attr_json_dict:
|
||
modelnumber = attr_json_dict["modelnumber"]
|
||
if "image" in attr_json_dict:
|
||
pixmap = common.base64ToPixmap(attr_json_dict["image"])
|
||
devmodelInterfacetype = {}
|
||
devmodelextendedProperty= {}
|
||
if "interfaceType" in attr_json_dict:
|
||
devmodelInterfacetype = attr_json_dict["interfaceType"]
|
||
if "extendedProperty" in attr_json_dict:
|
||
devmodelextendedProperty = attr_json_dict["extendedProperty"]
|
||
|
||
#阻塞propertyModel信号
|
||
self.propertyModel.blockSignals(True)
|
||
self.propertyModel.clear()
|
||
#设备型号设置
|
||
self.propertyModel.setItem(0, 0, QStandardItem("设备型号"))
|
||
self.propertyModel.item(0, 0).setEditable(False)
|
||
self.propertyModel.setItem(0, 1, QStandardItem(modelnumber))
|
||
#扩展属性添加
|
||
for key in devmodelextendedProperty:
|
||
index = self.propertyModel.rowCount()
|
||
self.propertyModel.setItem(index, 0, QStandardItem(key))
|
||
self.propertyModel.setItem(index, 1, QStandardItem(devmodelextendedProperty[key]))
|
||
#解除propertyModel阻塞
|
||
self.propertyModel.blockSignals(False)
|
||
#阻塞interFaceTypeModel信号
|
||
self.interFaceTypeModel.blockSignals(True)
|
||
self.interFaceTypeModel.clear()
|
||
for interFaceType in devmodelInterfacetype:
|
||
index = self.interFaceTypeModel.rowCount()
|
||
self.interFaceTypeModel.setItem(index, 0, QStandardItem(interFaceType))
|
||
self.interFaceTypeModel.setItem(index, 1,QStandardItem(devmodelInterfacetype[interFaceType]))
|
||
cmb = QComboBox()
|
||
cmb.setModel(self.interfaceTypeCombModel)
|
||
cmb.setCurrentIndex(cmb.findText(devmodelInterfacetype[interFaceType]))
|
||
cmb.currentIndexChanged.connect(self.changeInterfaceType)
|
||
self.ui.tableViewInterFaceType.setIndexWidget(self.interFaceTypeModel.index(index, 1), cmb)
|
||
#解除interFaceTypeModel阻塞
|
||
self.interFaceTypeModel.blockSignals(False)
|
||
|
||
#设置封面
|
||
self.ui.lbDevModelImage.setPixmap(pixmap)
|
||
self.ui.lbDevModelImage.setScaledContents(True)
|
||
self.ui.lbDevModelImage.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
||
self.batchOperation()
|
||
|
||
# 加载指令
|
||
def loadInstruction(self,devModelId):
|
||
try:
|
||
result = instructionManager.getDevmodelInstructions(devModelId)
|
||
self.instructionModel.clear()
|
||
self.ui.textEditDescription.setText("")
|
||
instructions = result
|
||
for data in instructions:
|
||
index = self.instructionModel.rowCount()
|
||
self.instructionModel.setItem(index, 0, QStandardItem(str(data["id"])))
|
||
self.instructionModel.setItem(index, 1, QStandardItem(str(index+1)))
|
||
self.instructionModel.setItem(index, 2, QStandardItem(data["name"]))
|
||
attr = data["attr"]
|
||
if data["type"] is not None and data["type"] in self.supportedTypes:
|
||
self.instructionModel.setItem(index, 3, QStandardItem(attr[self.supportedTypes[data["type"]]["digestAttr"]]))
|
||
else:
|
||
self.instructionModel.setItem(index, 3, QStandardItem(""))
|
||
if "remark" not in attr:
|
||
attr["remark"] = ""
|
||
self.instructionModel.setItem(index, 4, QStandardItem(attr["remark"]))
|
||
if "description" not in attr:
|
||
attr["description"] = ""
|
||
self.instructionModel.setItem(index, 5, QStandardItem(attr["description"]))
|
||
self.ui.tableViewCmd.sortByColumn(2, Qt.SortOrder.AscendingOrder)
|
||
self.batchOperation()
|
||
except Exception as e:
|
||
print(e)
|
||
|
||
def createGroup(self):
|
||
index = self.dmGroupModel.rowCount()
|
||
self.dmGroupModel.appendRow([ QStandardItem(), QStandardItem()])
|
||
self.ui.tableViewDmGroup.setCurrentIndex(self.dmGroupModel.index(index, 0) )
|
||
self.ui.tableViewDmGroup.edit(self.dmGroupModel.index(index, 1))
|
||
|
||
def deleteGroup(self):
|
||
if len(self.ui.tableViewDmGroup.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewDmGroup.selectionModel().selectedRows()[0].row()
|
||
row_id_index = self.dmGroupModel.index(row, 0, QModelIndex())
|
||
groupId = self.dmGroupModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
if groupId == common.defaultGroupId:
|
||
return
|
||
row_groupName_index = self.dmGroupModel.index(row, 1, QModelIndex())
|
||
groupName = self.dmGroupModel.data(row_groupName_index, Qt.ItemDataRole.DisplayRole)
|
||
if self.topWidget == None:
|
||
self.topWidget = self.findTopLevelParent(self)
|
||
if self.topWidget != None:
|
||
if self.devModelModel.rowCount() > 0:
|
||
self.topWidget.alertDialog("分组下存在设备模型,不能删除分组", "警告")
|
||
return
|
||
if self.topWidget.removeDialog(groupName,"删除分组"):
|
||
result = dmGroupManager.delete(groupId)
|
||
if result == True:
|
||
self.clearChildrenModel()
|
||
self.dmGroupModel.removeRow(row)
|
||
|
||
def updateDmGroup(self):
|
||
if len(self.ui.tableViewDmGroup.selectionModel().selectedRows())== 1:
|
||
row = self.ui.tableViewDmGroup.selectionModel().selectedRows()[0].row()
|
||
row_id_index = self.dmGroupModel.index(row, 0, QModelIndex())
|
||
groupId = self.dmGroupModel.data(row_id_index, Qt.ItemDataRole.DisplayRole)
|
||
row_nane_index = self.dmGroupModel.index(row, 1, QModelIndex())
|
||
groupName = self.dmGroupModel.data(row_nane_index, Qt.ItemDataRole.DisplayRole)
|
||
if groupId == None and groupName.strip() != "":
|
||
groupId = dmGroupManager.create({"name":groupName})
|
||
self.dmGroupModel.setData(row_id_index, groupId)
|
||
else:
|
||
if groupName.strip() != "":
|
||
dmGroupManager.update(groupId, {"name":groupName}) |