프로젝트

일반

사용자정보

개정판 f70c69e8

IDf70c69e865435360abc210bec8dce1f0f75a50fb
상위 436fcd01
하위 311c0f13

백흠경이(가) 약 5년 전에 추가함

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

클립보드 이미지 추가 (최대 크기: 500 MB)