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

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