Coverage for grm\lib\Util.py: 33%
122 statements
« prev ^ index » next coverage.py v7.2.3, created at 2023-04-12 14:42 +0900
« prev ^ index » next coverage.py v7.2.3, created at 2023-04-12 14:42 +0900
1# -*- coding: utf-8 -*-
2import fnmatch
3import glob
4import os
5import xml.etree.ElementTree as ET
6from subprocess import Popen, call
8from qgis.core import QgsApplication, QgsProject
9from qgis.PyQt.QtWidgets import QFileDialog, QMessageBox
11from grm.lib.File_Class import GetFileDirectory_Path
14# 메시지 박스 타이틀 일괄 적용 하기
15# 미리 한번 호출해서 값 셋팅
16def MsTitle(name):
17 global title
18 title = name
21def MsInfo(mess, parent=None):
22 return QMessageBox.information(parent, title, str(mess))
25def MsError(mess, parent=None):
26 return QMessageBox.warning(parent, title, str(mess))
29def error_decorator(func):
30 def wrapper(*args, **kwargs):
31 try:
32 return func(*args, **kwargs)
33 except Exception as e:
34 MsError(e)
36 return wrapper
39# 파일 다이얼 로그는 각자 만들어 쓰는게 편할지도... 임시로 만들어 둠
40# def OpenFileDialog(txtbox, filetype):
41# fname = QFileDialog.getOpenFileName(None, "Open file-" + title, "", filetype)
42# txtbox.setText(str(fname[0]))
45# 파일 다이얼 로그는 각자 만들어 쓰는게 편할지도... 임시로 만들어 둠
46def OpenFileDialog(filetype):
47 fname = QFileDialog.getOpenFileName(None, "Open file-" + title, "", filetype)
48 return str(fname[0])
51# 파일 다이얼 로그는 각자 만들어 쓰는게 편할지도... 임시로 만들어 둠
52def OpenFilesDialog(filetype):
53 fnames = QFileDialog.getOpenFileNames(None, "Open file-" + title, "", filetype)
54 return fnames
57# New file 다이얼 로그
58def saveFileDialog(filetype):
59 fileName = QFileDialog.getSaveFileName(None, "New file-" + title, "", filetype)[0]
60 return fileName
63# 레지스트리에서 QGIS 3.6 install 경로 받아 오기
64def GetQGIS_Path():
65 try:
66 Pathname = QgsApplication.instance().applicationDirPath() + "/.."
67 return Pathname
69 except Exception as e:
70 MsError(e)
73def Execute(arg):
74 value = call(arg)
75 return value
78def Get_Folder_Files(path):
79 Folder_File_List = []
80 Folder_File_Dict = {}
81 Folder_Path = GetFileDirectory_Path(path)
82 Folder_File_List = sorted(
83 glob.glob(os.path.join(Folder_Path, "*.out")), key=os.path.getctime
84 )
85 for fname in Folder_File_List:
86 pass
88 pattern = "*.OUT"
89 for entry in Folder_File_List:
90 if fnmatch.fnmatch(entry, pattern):
91 name = os.path.basename(entry).upper().replace(".OUT", "")
92 Folder_File_Dict[name] = entry
93 return Folder_File_Dict
96# 2020-01-09 콤보박스 레이어 셋팅 하기(...)
97# 콤보박스 리스트 셋팅 type은( tif, shp , "" 일땐 모두다)
98def SetCommbox(layers, commbox, type):
99 layer_list = []
100 if type.upper() == "TIF" or type.upper() == "ASC":
101 for layer in layers:
102 layertype = layer.type()
103 if layertype == layer.RasterLayer:
104 layer_list.append(layer.name())
106 elif type.upper() == "SHP":
107 for layer in layers:
108 layertype = layer.type()
109 if layertype == layer.VectorLayer:
110 layer_list.append(layer.name())
111 else:
112 for layer in layers:
113 layer_list.append(layer.name())
115 commbox.clear()
116 combolist = ["select layer"]
117 combolist.extend(layer_list)
118 commbox.addItems(combolist)
121# 콤보 박스에 있는 목록중에 프로젝트 상에 있는 레이어 비교 하여 있으면 콤보박스에 선택
122def SetCommbox2(commboxs, layername, filepath):
123 try:
124 index = commboxs.findText(str(layername))
125 if GetTxtToLayerPath(layername).upper() == filepath.upper():
126 if index >= 0:
127 commboxs.setCurrentIndex(index)
128 except Exception as e:
129 MsError(e)
132# 레이어 명으로 경로 받아 오기
133def GetTxtToLayerPath(layernametxt):
134 try:
135 layername = layernametxt
136 layer = None
137 for lyr in QgsProject.instance().mapLayers().values():
138 if lyr.name() == layername:
139 layer = lyr
140 if layer is not None:
141 return layer.dataProvider().dataSourceUri()
142 else:
143 return "Null"
144 except Exception as e:
145 MsError(e)
148# 콤보 박스에서 선택된 레이어 경로 받아 오기
149def GetcomboSelectedLayerPath(commbox):
150 layername = commbox.currentText()
151 if layername == "select layer":
152 return ""
153 else:
154 layer = None
155 for lyr in QgsProject.instance().mapLayers().values():
156 if lyr.name() == layername:
157 layer = lyr
158 return layer.dataProvider().dataSourceUri()
161def FlowControlGrid_XmlCount(ProjectFile):
162 FlowNameCount = []
163 doc = ET.parse(ProjectFile)
164 root = doc.getroot()
165 for element in root.findall("{http://tempuri.org/GRMProject.xsd}FlowControlGrid"):
166 FlowNameCount.append(
167 element.findtext("{http://tempuri.org/GRMProject.xsd}Name")
168 )
169 return len(FlowNameCount)
172def Opewn_ViewFile(path):
173 _notpad = "C:/Windows/System32/notepad.exe"
174 Popen([_notpad, path])
177def indent(elem, level=0): # 입력 root
178 i = "\n" + level * " "
179 if len(elem):
180 if not elem.text or not elem.text.strip():
181 elem.text = i + " "
182 if not elem.tail or not elem.tail.strip():
183 elem.tail = i
184 for elem in elem:
185 indent(elem, level + 1)
186 if not elem.tail or not elem.tail.strip():
187 elem.tail = i
188 else:
189 if level and (not elem.tail or not elem.tail.strip()):
190 elem.tail = i