diff --git a/rscder/gui/layertree.py b/rscder/gui/layertree.py index 760f4d7..87dbdfd 100644 --- a/rscder/gui/layertree.py +++ b/rscder/gui/layertree.py @@ -18,9 +18,9 @@ class LayerTree(QtWidgets.QWidget): RIGHT_RASTER = 1 GRID = 3 - tree_changed = QtCore.pyqtSignal(str) + tree_changed = QtCore.pyqtSignal() zoom_to_layer_signal = QtCore.pyqtSignal(str) - result_clicked = QtCore.pyqtSignal(str, int) + def __init__(self, parent=None): super().__init__(parent) # self.tree_view = QTreeView(self) @@ -36,17 +36,11 @@ class LayerTree(QtWidgets.QWidget): self.root.setText(0,'图层') self.root.setIcon(0,QtGui.QIcon(':/icons/layer.png')) - # child1=QTreeWidgetItem() - # child1.setText(0,'child1') - # child1.setCheckState(0,Qt.Checked) - # self.root.addChild(child1) self.tree.expandAll() self.tree.addTopLevelItem(self.root) - # self.tree.clicked.connect(self.onClicked) - self.tree.itemClicked.connect(self.onItemClicked) self.tree.itemChanged.connect(self.onItemChanged) layout = QtWidgets.QGridLayout() @@ -54,22 +48,7 @@ class LayerTree(QtWidgets.QWidget): self.setLayout(layout) self.setLayoutDirection(Qt.LeftToRight) self.is_in_add_layer = False - self.current_item = None - - def onItemClicked(self, item:QtWidgets.QTreeWidgetItem, column): - if item == self.root: - return - root = item - if item.data(0, Qt.UserRole) != LayerTree.LAYER_TOOT: - root = item.parent() - if item.data(0, Qt.UserRole) == LayerTree.LAYER_TOOT: - return - layer = Project().layers[root.data(0, Qt.UserRole + 1)] - Project().current_layer = layer - if item.data(0, Qt.UserRole) == LayerTree.RESULT: - # result = layer.results[item.data(0, Qt.UserRole + 1)] - self.result_clicked.emit(layer.id, item.data(0, Qt.UserRole + 1)) - + self.current_item = None def onItemChanged(self, item:QtWidgets.QTreeWidgetItem, column): if self.is_in_add_layer: @@ -94,7 +73,7 @@ class LayerTree(QtWidgets.QWidget): if item.data(0, Qt.UserRole) == LayerTree.GRID: layer.grid_enable = item.checkState(0) == Qt.Checked - self.tree_changed.emit(layer.id) + self.tree_changed.emit() def add_layer(self, layer:str): # self.tree.it diff --git a/rscder/gui/mapcanvas.py b/rscder/gui/mapcanvas.py index ce611dc..fe9f0ad 100644 --- a/rscder/gui/mapcanvas.py +++ b/rscder/gui/mapcanvas.py @@ -100,6 +100,28 @@ class DoubleCanvas(QWidget): self.mapcanva1.setMapTool(QgsMapToolZoom(self.mapcanva1, True)) self.mapcanva2.setMapTool(QgsMapToolZoom(self.mapcanva2, True)) + def update_layer(self): + layers = Project().layers + layer_list_1 = [] + layer_list_2 = [] + for layer in layers.values(): + if layer.enable: + if layer.grid_enable and self.grid_show: + layer_list_1.append(layer.grid_layer.grid_layer) + layer_list_2.append(layer.grid_layer.grid_layer) + if layer.l1_enable: + layer_list_1.append(layer.l1) + if layer.l2_enable: + layer_list_2.append(layer.l2) + + for result in layer.results: + if result.enable: + layer_list_1.append(result.layer) + layer_list_2.append(result.layer) + + self.mapcanva1.setLayers(layer_list_1) + self.mapcanva2.setLayers(layer_list_2) + def add_layer(self, layer:str): if not layer in Project().layers: self.clear() diff --git a/rscder/utils/project.py b/rscder/utils/project.py index 8466341..4f28cfb 100644 --- a/rscder/utils/project.py +++ b/rscder/utils/project.py @@ -1,6 +1,8 @@ from collections import OrderedDict import os from pathlib import Path +from threading import Thread +from time import sleep, time from typing import Dict, List import uuid import numpy as np @@ -24,6 +26,21 @@ class Project(QObject): ABSOLUTE_MODE = 'absolute' RELATIVE_MODE = 'relative' + def run_auto_save(self): + + t = Thread(target=self.auto_save) + t.run() + + def auto_save(self): + # pre = time() + while True: + if Settings.General().auto_save and self.is_init: + self.save() + if self.is_closed: + break + sleep(Settings.General().auto_save_intervel) + + def __init__(self, parent=None): super().__init__(parent) @@ -35,6 +52,8 @@ class Project(QObject): self.file_mode = Project.ABSOLUTE_MODE self.layers:Dict[str, PairLayer] = OrderedDict() self.current_layer = None + self.is_closed = False + self.run_auto_save() def connect(self, pair_canvas, layer_tree, @@ -47,8 +66,7 @@ class Project(QObject): self.layer_load.connect(layer_tree.add_layer) self.layer_load.connect(pair_canvas.add_layer) - # self.layer_load.connect(message_box.add_layer) - # + def change_result(self, layer_id, result_id, data): if layer_id in self.layers: result = self.layers[layer_id].results[result_id] @@ -73,7 +91,7 @@ class Project(QObject): pass else: self.load() - self.cmi_dir = str(Path(self.root)/'cmi') + # self.cmi_dir = str(Path(self.root)/'cmi') # self.project_created.emit() self.project_init.emit(True) diff --git a/rscder/utils/setting.py b/rscder/utils/setting.py index 36cabea..8ecd3d4 100644 --- a/rscder/utils/setting.py +++ b/rscder/utils/setting.py @@ -145,4 +145,34 @@ class Settings(QSettings): def root(self): with Settings(Settings.General.PRE) as s: return s.value('root', './') - \ No newline at end of file + + @property + def auto_save(self): + with Settings(Settings.General.PRE) as s: + return s.value('auto_save', True) + + @property.setter + def auto_save(self, value): + if isinstance(value, bool): + pass + else: + if isinstance(value, (int,float)): + value = value != 0 + else: + value = value is not None + with Settings(Settings.General.PRE) as s: + s.setValue('auto_save', value) + + @property + def auto_save_intervel(self): + with Settings(Settings.General.PRE) as s: + return s.value('auto_save_intervel', 30) + + @property.setter + def auto_save_intervel(self, value): + if isinstance(value, int) and value > 0: + pass + else: + return + with Settings(Settings.General.PRE) as s: + s.setValue('auto_save_intervel', value) \ No newline at end of file