117 lines
3.8 KiB
Python
117 lines
3.8 KiB
Python
|
|
import logging
|
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
|
from PyQt5.QtCore import Qt,QModelIndex
|
|
from PyQt5.QtGui import QStandardItemModel, QStandardItem, QCursor, QIcon
|
|
from PyQt5.QtWidgets import (QTreeView, QTreeWidgetItem, QAbstractItemView, QHeaderView, QStyleFactory)
|
|
from rscder.gui.actions import get_action_manager
|
|
from rscder.utils.icons import IconInstance
|
|
|
|
from rscder.utils.project import PairLayer, Project
|
|
|
|
class LayerTree(QtWidgets.QWidget):
|
|
|
|
LAYER_TOOT = 0
|
|
SUB_LAYERS = 1
|
|
RESULT = 2
|
|
LEFT_RASTER = 0
|
|
RIGHT_RASTER = 1
|
|
GRID = 3
|
|
|
|
tree_changed = QtCore.pyqtSignal()
|
|
zoom_to_layer_signal = QtCore.pyqtSignal(str)
|
|
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
# self.tree_view = QTreeView(self)
|
|
self.tree = QtWidgets.QTreeWidget(self)
|
|
|
|
self.tree.setColumnCount(1)
|
|
self.setContextMenuPolicy(Qt.CustomContextMenu)
|
|
self.tree.setContextMenuPolicy(Qt.CustomContextMenu)
|
|
self.tree.customContextMenuRequested.connect(self.right_menu_show)
|
|
self.root=QTreeWidgetItem(self.tree)
|
|
self.tree.setHeaderHidden(True)
|
|
|
|
# self.tree.setHeaderLabels(['图层'])
|
|
self.root.setText(0,'图层')
|
|
self.root.setIcon(0,IconInstance().LAYER)
|
|
|
|
self.tree.expandAll()
|
|
|
|
self.tree.addTopLevelItem(self.root)
|
|
|
|
self.tree.itemChanged.connect(self.onItemChanged)
|
|
self.tree.itemExpanded.connect(self.onItemExpanded)
|
|
|
|
self._expand = True
|
|
self.root.setExpanded(self._expand)
|
|
|
|
layout = QtWidgets.QGridLayout()
|
|
layout.addWidget(self.tree)
|
|
self.setLayout(layout)
|
|
self.setLayoutDirection(Qt.LeftToRight)
|
|
self.is_update_layer = False
|
|
self.current_item = None
|
|
|
|
def onItemExpanded(self, item:QtWidgets.QTreeWidgetItem):
|
|
if item == self.root:
|
|
self._expand = item.isExpanded()
|
|
return
|
|
|
|
if hasattr(item, 'item_update'):
|
|
item.item_update(item)
|
|
|
|
def onItemChanged(self, item:QtWidgets.QTreeWidgetItem, column):
|
|
if self.is_update_layer:
|
|
return
|
|
if item == self.root:
|
|
self._expand = item.isExpanded()
|
|
return
|
|
|
|
if hasattr(item, 'item_update'):
|
|
item.item_update(item)
|
|
|
|
def update_layer(self):
|
|
self.is_update_layer = True
|
|
self.clear()
|
|
for layer_group in Project().layers.values():
|
|
item_root = layer_group.get_item(self.root)
|
|
# self.root.addChild(item_root)
|
|
layer_group.grid.get_item(item_root)
|
|
for _, sub in enumerate(layer_group.layers):
|
|
sub.get_item(item_root)
|
|
# item_root.addChild(item)
|
|
self.is_update_layer = False
|
|
|
|
def clear(self):
|
|
self.tree.clear()
|
|
self.root = QTreeWidgetItem(self.tree)
|
|
self.tree.addTopLevelItem(self.root)
|
|
self.tree.expandAll()
|
|
self.root.setText(0,'图层')
|
|
self.root.setIcon(0,IconInstance().LAYER)
|
|
self.root.setExpanded(self._expand)
|
|
|
|
def right_menu_show(self, position):
|
|
rightMenu = QtWidgets.QMenu(self)
|
|
|
|
item = self.tree.itemAt(position)
|
|
self.current_item = item
|
|
action_manager = get_action_manager()
|
|
actions = []
|
|
data_load_action = action_manager.get_action('&数据加载', 'File')
|
|
actions.append(data_load_action)
|
|
|
|
if item is None:
|
|
logging.info('nothing')
|
|
else:
|
|
if item == self.root:
|
|
pass
|
|
else:
|
|
actions.extend(item.get_actions())
|
|
|
|
for action in actions:
|
|
rightMenu.addAction(action)
|
|
|
|
rightMenu.exec_(QCursor.pos()) |