개정판 f70c69e8
issue #581: allow to input delimiter character to line no configuration
Change-Id: Ida2a3f6eaeed7426360227f20e3d5e58d6c1833d
DTI_PID/DTI_PID/Configs.py | ||
---|---|---|
6 | 6 |
from AppDocData import AppDocData |
7 | 7 |
from CodeTables import CodeTable |
8 | 8 |
|
9 |
|
|
9 | 10 |
class LineNoConfig: |
10 | 11 |
DELIMITER = '"' |
12 |
ESCAPE_CHAR = '^' |
|
11 | 13 |
|
12 | 14 |
def __init__(self, unit, delimiter, value): |
13 | 15 |
self.unit = unit |
... | ... | |
17 | 19 |
def parse(self, text): |
18 | 20 |
""" return true if successfully parse given text else return false """ |
19 | 21 |
import re |
22 |
import csv |
|
20 | 23 |
|
21 | 24 |
try: |
22 | 25 |
appDocData = AppDocData.instance() |
23 |
configs = self.value.split(LineNoConfig.DELIMITER) |
|
26 |
configs = list(csv.reader([self.value], delimiter=LineNoConfig.DELIMITER, |
|
27 |
escapechar=LineNoConfig.ESCAPE_CHAR))[0] |
|
24 | 28 |
|
25 | 29 |
res = [] |
26 | 30 |
|
27 |
_text = text.replace(' ','') |
|
31 |
_text = text.replace(' ', '')
|
|
28 | 32 |
|
29 | 33 |
index = sorted(list(set([_text.find('\n', i) for i in range(len(_text)) if _text.find('\n', i) != -1])), reverse=True) |
30 | 34 |
if index: |
... | ... | |
117 | 121 |
appDocData.getConfigs('Tag No', 'Delimiter') |
118 | 122 |
if 1 == len(configs): |
119 | 123 |
lineInsideDelimiters = configs[0].value.split(delimiter) |
120 |
else: return None |
|
124 |
else: |
|
125 |
return None |
|
126 |
|
|
121 | 127 |
configs = appDocData.getConfigs('Line No', 'Configuration') if not tag else \ |
122 | 128 |
appDocData.getConfigs('Tag No', 'Configuration') |
123 | 129 |
if len(configs) == 1 and configs[0].value is not None: |
124 | 130 |
lineConfigs = configs[0].value.split(delimiter) |
125 |
else: return None |
|
131 |
else: |
|
132 |
return None |
|
126 | 133 |
|
127 | 134 |
if len(sizeUnits) == len(lineInsideDelimiters) and len(sizeUnits) == len(lineConfigs): |
128 | 135 |
for i in range(len(sizeUnits)): |
... | ... | |
131 | 138 |
|
132 | 139 |
return res |
133 | 140 |
|
141 |
|
|
134 | 142 |
class TagNoConfig(LineNoConfig): |
135 | 143 |
def __init__(self, unit, delimiter, value): |
136 | 144 |
LineNoConfig.__init__(self, unit, delimiter, value) |
DTI_PID/DTI_PID/ConfigurationDialog.py | ||
---|---|---|
1 | 1 |
# coding: utf-8 |
2 |
""" This is Configuratio dialog module """ |
|
2 |
""" This is Configuration dialog module """
|
|
3 | 3 |
|
4 |
import io |
|
4 | 5 |
import os |
5 | 6 |
import sys |
6 | 7 |
from PyQt5.QtCore import * |
... | ... | |
22 | 23 |
|
23 | 24 |
|
24 | 25 |
class QConfigurationDialog(QDialog): |
26 |
ESCAPE_CHAR = '^' |
|
27 |
|
|
25 | 28 |
""" |
26 | 29 |
@history humkyung 2018.05.05 read configuration for instrument and opc tag no rule |
27 | 30 |
humkyung 2018.05.09 read line no tag rule configuration |
... | ... | |
34 | 37 |
""" |
35 | 38 |
|
36 | 39 |
def __init__(self, parent): |
40 |
import csv |
|
37 | 41 |
from LineTypeConditions import LineTypeConditions |
38 | 42 |
|
39 | 43 |
QDialog.__init__(self, parent) |
... | ... | |
107 | 111 |
configs) else self.ui.spinBoxFlowMarkLength.setValue(200) |
108 | 112 |
|
109 | 113 |
configs = docData.getConfigs('Filter', 'MinimumSize') |
110 |
self.ui.spinBoxMinimumSize.setValue(int(configs[0].value)) if 1 == len( |
|
111 |
configs) else self.ui.spinBoxMinimumSize.setValue(30)
|
|
114 |
self.ui.spinBoxMinimumSize.setValue(int(configs[0].value)) if 1 == len(configs) else \
|
|
115 |
self.ui.spinBoxMinimumSize.setValue(30) |
|
112 | 116 |
configs = docData.getConfigs('Filter', 'ErodeSize') |
113 |
self.ui.spinBoxUnrecognitionIgnoreStep.setValue(int(configs[0].value)) if 1 == len( |
|
114 |
configs) else self.ui.spinBoxUnrecognitionIgnoreStep.setValue(3)
|
|
117 |
self.ui.spinBoxUnrecognitionIgnoreStep.setValue(int(configs[0].value)) if 1 == len(configs) else \
|
|
118 |
self.ui.spinBoxUnrecognitionIgnoreStep.setValue(3) |
|
115 | 119 |
configs = docData.getConfigs('Filter', 'DilateSize') |
116 | 120 |
self.ui.spinBoxDilateSize.setValue(int(configs[0].value)) if 1 == len( |
117 | 121 |
configs) else self.ui.spinBoxDilateSize.setValue(0) |
... | ... | |
232 | 236 |
index = 0 |
233 | 237 |
for lineNo in configs[0].value.split(self.lineNoDelimiter): |
234 | 238 |
displayLineNo = '' |
235 |
for value in lineNo.split(self.delimiter): |
|
239 |
|
|
240 |
values = list(csv.reader([lineNo], delimiter=self.delimiter, |
|
241 |
escapechar=QConfigurationDialog.ESCAPE_CHAR))[0] |
|
242 |
for value in values: |
|
236 | 243 |
lineProp = docData.getLinePropertiesByUID(value) |
237 | 244 |
if lineProp: |
238 | 245 |
displayLineNo = displayLineNo + lineProp[0].DisplayAttribute |
... | ... | |
1049 | 1056 |
|
1050 | 1057 |
# Line No Configuration |
1051 | 1058 |
sizeUnit = None |
1052 |
configuration = None
|
|
1059 |
configuration = []
|
|
1053 | 1060 |
lineInsideDelimiter = None |
1054 | 1061 |
for i in range(self.ui.listWidgetLineNo.count()): |
1055 | 1062 |
item = self.ui.listWidgetLineNo.item(i) |
1056 |
if configuration is None:
|
|
1063 |
if not configuration:
|
|
1057 | 1064 |
sizeUnit = item.tag[0] |
1058 | 1065 |
configuration = item.tag[1] |
1059 | 1066 |
lineInsideDelimiter = item.tag[2] |
DTI_PID/DTI_PID/ConfigurationLineNoDialog.py | ||
---|---|---|
1 | 1 |
# -*- coding: utf-8 -*- |
2 | 2 |
|
3 |
# Form implementation generated from reading ui file 'ProjectDialog.ui' |
|
4 |
# |
|
5 |
# Created by: PyQt5 UI code generator 5.6 |
|
6 |
# |
|
7 |
# WARNING! All changes made in this file will be lost! |
|
8 |
|
|
3 |
import io |
|
9 | 4 |
from PyQt5 import QtCore, QtGui, QtWidgets |
10 | 5 |
from PyQt5.QtWidgets import * |
11 | 6 |
import os |
... | ... | |
13 | 8 |
from AppDocData import AppDocData |
14 | 9 |
import Configuration_LineNo_UI |
15 | 10 |
|
11 |
|
|
16 | 12 |
class QConfigurationLineNoDialog(QDialog): |
13 |
ESCAPE_CHAR = '^' |
|
14 |
|
|
17 | 15 |
def __init__(self, parent, isAdd, delimiter, lineNo=None, tag=False): |
16 |
import csv |
|
17 |
|
|
18 | 18 |
QDialog.__init__(self, parent) |
19 | 19 |
|
20 | 20 |
self.ui = Configuration_LineNo_UI.Ui_Dialog() |
... | ... | |
41 | 41 |
if self.lineNo is not None: |
42 | 42 |
self.ui.lineEdit.setText(lineNo.tag[2]) |
43 | 43 |
self.ui.radioButtonMetric.setChecked(True) if 'Metric' == lineNo.tag[0] else self.ui.radioButtonInch.setChecked(True) |
44 |
for value in self.lineNo.tag[1].split(self.delimiter): |
|
44 |
|
|
45 |
tokens = list(csv.reader([self.lineNo.tag[1]], delimiter=self.delimiter, |
|
46 |
escapechar=QConfigurationLineNoDialog.ESCAPE_CHAR, quoting=csv.QUOTE_NONE))[0] |
|
47 |
for value in tokens: |
|
45 | 48 |
lineProp = docData.getLinePropertiesByUID(value) |
46 | 49 |
if lineProp: |
47 | 50 |
item = QListWidgetItem(lineProp[0].DisplayAttribute) |
... | ... | |
65 | 68 |
self.ui.pushButtonAddDelimiter.clicked.connect(self.addDelimiter) |
66 | 69 |
|
67 | 70 |
def accept(self): |
71 |
import csv |
|
72 |
|
|
68 | 73 |
text = self.ui.lineEdit.text() |
69 | 74 |
if text == self.delimiter and text == '': |
70 | 75 |
QMessageBox.warning(self, self.tr('Information'), self.tr('Please check delimiter')) |
... | ... | |
73 | 78 |
QMessageBox.warning(self, self.tr('Information'), self.tr('Please check line number')) |
74 | 79 |
return |
75 | 80 |
|
76 |
configuration = None
|
|
81 |
tokens = []
|
|
77 | 82 |
displayLineNo = '' |
78 | 83 |
for i in range(self.ui.listWidget.count()): |
79 | 84 |
item = self.ui.listWidget.item(i) |
80 |
if configuration is None: |
|
81 |
configuration = item.tag |
|
82 |
displayLineNo = displayLineNo + item.text() |
|
83 |
else: |
|
84 |
configuration += self.delimiter + item.tag |
|
85 |
displayLineNo = displayLineNo + item.text() |
|
85 |
tokens.append(item.tag) |
|
86 |
displayLineNo = displayLineNo + item.text() |
|
87 |
|
|
88 |
stream = io.StringIO() |
|
89 |
csv.writer(stream, delimiter=self.delimiter, escapechar=QConfigurationLineNoDialog.ESCAPE_CHAR, |
|
90 |
quoting=csv.QUOTE_NONE).writerow(tokens) |
|
91 |
configuration = stream.getvalue() |
|
86 | 92 |
|
87 | 93 |
self.newLineNo = ['Metric' if self.ui.radioButtonMetric.isChecked() else 'Inch', configuration, text] |
88 | 94 |
self.newItem = QListWidgetItem(displayLineNo) |
... | ... | |
106 | 112 |
self.ui.listWidget.insertItem(sel_index, item) if sel_index is not -1 and sel_index is not self.ui.listWidget.count() -1 else self.ui.listWidget.addItem(item) |
107 | 113 |
|
108 | 114 |
def addDelimiter(self): |
115 |
"""add a delimiter character""" |
|
109 | 116 |
text = self.ui.lineEdit.text() |
110 |
|
|
111 |
if text != self.delimiter and text != '': |
|
117 |
if text: |
|
112 | 118 |
item = QListWidgetItem(text) |
113 | 119 |
item.tag = text |
114 | 120 |
|
115 | 121 |
sel_index = self.ui.listWidget.currentRow() |
116 | 122 |
self.ui.listWidget.insertItem(sel_index, item) if sel_index is not -1 and sel_index is not self.ui.listWidget.count() -1 else self.ui.listWidget.addItem(item) |
117 |
else: |
|
118 |
pass |
|
119 | 123 |
|
120 | 124 |
def showDialog(self): |
121 | 125 |
self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowContextHelpButtonHint) |
내보내기 Unified diff