You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
4.2 KiB
Python

2 years ago
import typing
from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QDockWidget, QTreeView
from DcsUi.DockCLass import NewDockWidget
from utils.WorkModels import PointGroup
from procedure.run_procedure.RunProceduree import ProcedureThread
from static.Png import *
class VarTreeDockWidget(NewDockWidget):
def __init__(self, title, parent = None):
NewDockWidget.__init__(self, title, parent=parent)
self.parent = parent
tree = QTreeView(self)
# 隐藏标题栏
tree.setHeaderHidden(True)
self.model = VarTreeDockModel(self.parent)
tree.setModel(self.model)
self.setWidget(tree)
tree.expandAll()
tree.doubleClicked.connect(self.onTreeClicked)
def onTreeClicked(self, index: QModelIndex):
groupName = index.data()
if groupName not in ['强制变量组', None]:
groupId = PointGroup.get_all().where(PointGroup.group_name == index.data())[0].id
self.parent.group = groupName
self.parent.dockTop.addVar([groupId, groupName])
def refreshTree(self):
self.model.updateData()
class TreeItem(object):
# 重写树item类
def __init__(self):
self.children = []
def appendChild(self, child: 'TreeItem') -> None:
child.parent = self
self.children.append(child)
class VarTreeDockModel(QAbstractItemModel):
def __init__(self, MainWindow):
QAbstractItemModel.__init__(self)
self.rootItem = None
self.MainWindow = MainWindow
self.updateData()
def data(self, index=QModelIndex(), role=Qt.DisplayRole):
if not index.isValid():
return None
# 显示图标
# if role == Qt.DecorationRole and index.column() == 0:
# return QIcon()
# 显示数据
if role == Qt.DisplayRole:
item: TreeItem = index.internalPointer()
item.data = index.internalPointer().data
return item.data
return None
def updateData(self):
# 添加规程, 用例等节点
if self.rootItem:
self.rootItem = None
self.rootItem = TreeItem()
self.rootItem.data = 'Root'
# self.projectRoot = TreeItem()
# self.projectRoot.data = self.MainWindow.projectName
# self.rootItem.appendChild(self.projectRoot)
primary = TreeItem()
primary.data = '强制变量组'
primary.parent = self.rootItem
self.rootItem.appendChild(primary)
self.addChild('强制变量组', primary)
self.layoutChanged.emit()
def addChild(self, tabelName, parent):
# 添加子节点
allList = PointGroup.get_all()
if allList:
for childData in allList:
child = TreeItem()
child.data = childData.group_name
child.parent = parent
parent.appendChild(child)
def flags(self, index: QModelIndex) -> Qt.ItemFlags:
if not index.isValid():
return Qt.ItemIsAutoTristate
return Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsAutoTristate
def index(self, row: int, column: int, parent=QModelIndex()) -> QModelIndex:
if not self.hasIndex(row, column, parent):
return QModelIndex()
if not parent.isValid():
parentItem: TreeItem = self.rootItem
else:
parentItem: TreeItem = parent.internalPointer()
if row < len(parentItem.children):
childItem = parentItem.children[row]
return self.createIndex(row, column, childItem)
else:
return QModelIndex()
def parent(self, index: QModelIndex) -> QModelIndex:
if not index.isValid():
return QModelIndex()
child = index.internalPointer()
parent = child.parent
# if not index.isValid():
# parent.index = QModelIndex()
if parent == self.rootItem:
return QModelIndex()
return self.createIndex(index.row(), 0, parent)
def columnCount(self, parent=QModelIndex()) -> int:
return 1
def rowCount(self, parent=QModelIndex()) -> int:
return 999