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
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 |