프로젝트

일반

사용자정보

개정판 e1d8a5de

IDe1d8a5de4acee7e718da7caac8ec7491a6bea530
상위 991b9d10
하위 e57e94c3

함의성이(가) 약 5년 전에 추가함

issue #538: add symbol replace preset test

Change-Id: Ic810d0e6d0ff3cc288919133a3add5885a58c117

차이점 보기:

DTI_PID/DTI_PID/AppDocData.py
602 602
            if not all:
603 603
                sql = """SELECT a.UID,a.Name,b.Type,a.Threshold,a.MinMatchPoint,a.IsDetectOrigin,a.RotationCount,
604 604
                a.OCROption,a.IsContainChild,a.OriginalPoint,a.ConnectionPoint,a.BaseSymbol,a.AdditionalSymbol,
605
                a.IsExceptDetect,a.HasInstrumentLabel,a.flip,a.TextArea,b.UID DB_UID FROM Symbol a inner join SymbolType b on 
605
                a.IsExceptDetect,a.HasInstrumentLabel,a.flip,a.TextArea,b.UID as DB_UID FROM Symbol a inner join SymbolType b on 
606 606
                a.SymbolType_UID=b.UID WHERE a.IsExceptDetect = 0 order by width * height desc"""
607 607
            else:
608 608
                sql = """SELECT a.UID,a.Name,b.Type,a.Threshold,a.MinMatchPoint,a.IsDetectOrigin,a.RotationCount,
609 609
                a.OCROption,a.IsContainChild,a.OriginalPoint,a.ConnectionPoint,a.BaseSymbol,a.AdditionalSymbol,
610
                a.IsExceptDetect,a.HasInstrumentLabel,a.flip,a.TextArea,b.UID FROM Symbol a inner join SymbolType b on 
610
                a.IsExceptDetect,a.HasInstrumentLabel,a.flip,a.TextArea,b.UID as DB_UID FROM Symbol a inner join SymbolType b on 
611 611
                a.SymbolType_UID=b.UID order by width * height desc"""
612 612
            try:
613 613
                cursor.execute(sql)
......
1595 1595
                    cursor.execute(sql, (type,))
1596 1596
                    rows = cursor.fetchall()
1597 1597
                    for row in rows:
1598
                        symbolNametList.append(row[4])  # Name String
1598
                        symbolNametList.append(row['Name'])  # Name String
1599 1599
                except Exception as ex:
1600 1600
                    print('error occurred({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename,
1601 1601
                                                              sys.exc_info()[-1].tb_lineno))
DTI_PID/DTI_PID/ReplaceSymbolDialog.py
11 11
from EngineeringTextItem import QEngineeringTextItem
12 12
from SymbolSvgItem import SymbolSvgItem
13 13
from EngineeringLineItem import QEngineeringLineItem
14

  
14
from EngineeringVendorItem import QEngineeringVendorItem
15 15

  
16 16
class QReplaceSymbolDialog(QDialog):
17 17
    """ This is symbol item replace and insert dialog class """
18 18

  
19
    CONDITION_REPLACE = {'radioButtonHasCon':['item.has_connection'], 'radioButtonHasNoCon':['not item.has_connection'], 'radioButtonConLine':['False'], 'radioButtonAll':['True']}
20
    CONDITION_INSERT = {'radioButtonHasCon':['conn.connetionItem'], 'radioButtonHasNoCon':['not conn.connectedItem'], 'radioButtonConLine':['conn.connectedItem and type(conn.connectedItem) is QEngineeringLineItem'], 'radioButtonAll':['True']}
21

  
19 22
    def __init__(self, parent):
20 23
        QDialog.__init__(self, parent)
21 24

  
......
43 46
        find_symbol = self.ui.comboBoxFind.currentText()
44 47
        replace_symbol = self.ui.comboBoxReplace.currentText()
45 48

  
46
        conditions = [text for text in self.ui.plainTextEdit.toPlainText().split('\n')]
49
        condition = self.ui.buttonGroup_2.checkedButton().objectName()
50
        if condition == 'radioButtonCustom':
51
            conditions = [text for text in self.ui.plainTextEdit.toPlainText().split('\n')]
52
        else:
53
            conditions = QReplaceSymbolDialog.CONDITION_REPLACE[condition] if self.ui.radioButtonReplace.isChecked() else QReplaceSymbolDialog.CONDITION_INSERT[condition]
47 54

  
48 55
        symbol_items = [item for item in self.view.scene().items()
49
                            if issubclass(type(item), SymbolSvgItem) and find_symbol == item.name]
50

  
51
        for item in reversed(symbol_items):
52
            for condition in conditions:
53
                if condition and not eval(condition):
54
                    symbol_items.remove(item)
55
                    break
56

  
57
        if not symbol_items:
58
                return
56
                            if issubclass(type(item), SymbolSvgItem) and find_symbol == item.name] if find_symbol != 'Equipment Package'
57
                        else [item for item in self.view.scene().items()
58
                            if issubclass(type(item), QEngineeringVendorItem) and item.pack_type == 'Equipment Package']
59 59

  
60 60
        new_symbols = []
61
        if self.ui.radioButtonReplace.isChecked():
61
        if self.ui.radioButtonReplace.isChecked() and find_symbol != 'Equipment Package':
62 62
            # replace
63

  
63
            for item in reversed(symbol_items):
64
                for condition in conditions:
65
                    if condition and not eval(condition):
66
                        symbol_items.remove(item)
67
                        break
68

  
69
            if not symbol_items:
70
                    return
71
                    
64 72
            for item in symbol_items:
65 73
                scenePos = item.mapToScene(item.transformOriginPoint())
66 74
                item.transfer.onRemoved.emit(item)
......
72 80
                self.view.matchSymbolToLine(item[0], item[1], angle=item[2], flip=item[3])
73 81
                item[0].bind_close_items()
74 82

  
75
        else:
83
        elif not self.ui.radioButtonReplace.isChecked() and find_symbol != 'Equipment Package':
76 84
            # insert
85
            if not symbol_items:
86
                return
87

  
77 88
            for item in symbol_items:
78 89
                for conn in item.connectors:
79
                    if conn.connectedItem and type(conn.connectedItem) is QEngineeringLineItem:
80
                        scenePos = conn.sceneBoundingRect().center()
81
                        svg = self.view.createSymbolObject(replace_symbol)
82
                        new_symbols.append([svg, scenePos])
90
                    for condition in conditions:
91
                        if condition and eval(condition):
92
                            scenePos = conn.sceneBoundingRect().center()
93
                            svg = self.view.createSymbolObject(replace_symbol)
94
                            new_symbols.append([svg, scenePos])
83 95

  
84 96
            for item in new_symbols:
85 97
                self.view.matchSymbolToLine(item[0], item[1])
98
        elif not self.ui.radioButtonReplace.isChecked() and find_symbol == 'Equipment Package':
99
            pass
100

  
86 101

  
87 102
    def reject(self):
88 103
        """close a dialog"""
DTI_PID/DTI_PID/ReplaceSymbol_UI.py
34 34
        self.gridLayout_2.setObjectName("gridLayout_2")
35 35
        self.gridLayout = QtWidgets.QGridLayout()
36 36
        self.gridLayout.setObjectName("gridLayout")
37
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.widget)
38
        self.plainTextEdit.setObjectName("plainTextEdit")
39
        self.gridLayout.addWidget(self.plainTextEdit, 2, 1, 1, 2)
40
        self.label = QtWidgets.QLabel(self.widget)
41
        font = QtGui.QFont()
42
        font.setBold(False)
43
        font.setWeight(50)
44
        self.label.setFont(font)
45
        self.label.setObjectName("label")
46
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
37
        self.comboBoxReplace = QtWidgets.QComboBox(self.widget)
38
        self.comboBoxReplace.setObjectName("comboBoxReplace")
39
        self.gridLayout.addWidget(self.comboBoxReplace, 1, 1, 1, 2)
47 40
        self.label_3 = QtWidgets.QLabel(self.widget)
48 41
        font = QtGui.QFont()
49 42
        font.setBold(False)
50 43
        font.setWeight(50)
51 44
        self.label_3.setFont(font)
52 45
        self.label_3.setObjectName("label_3")
53
        self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1)
54
        self.labelReplace = QtWidgets.QLabel(self.widget)
55
        font = QtGui.QFont()
56
        font.setBold(False)
57
        font.setWeight(50)
58
        self.labelReplace.setFont(font)
59
        self.labelReplace.setObjectName("labelReplace")
60
        self.gridLayout.addWidget(self.labelReplace, 1, 0, 1, 1)
46
        self.gridLayout.addWidget(self.label_3, 2, 0, 2, 1)
61 47
        self.pushButtonRun = QtWidgets.QPushButton(self.widget)
62 48
        font = QtGui.QFont()
63 49
        font.setBold(False)
64 50
        font.setWeight(50)
65 51
        self.pushButtonRun.setFont(font)
66 52
        self.pushButtonRun.setObjectName("pushButtonRun")
67
        self.gridLayout.addWidget(self.pushButtonRun, 1, 2, 1, 1)
53
        self.gridLayout.addWidget(self.pushButtonRun, 1, 3, 1, 1)
68 54
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
69 55
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
70 56
        self.radioButtonReplace = QtWidgets.QRadioButton(self.widget)
......
86 72
        self.radioButtonInsert.setObjectName("radioButtonInsert")
87 73
        self.buttonGroup.addButton(self.radioButtonInsert)
88 74
        self.horizontalLayout_2.addWidget(self.radioButtonInsert)
89
        self.gridLayout.addLayout(self.horizontalLayout_2, 0, 2, 1, 1)
75
        self.gridLayout.addLayout(self.horizontalLayout_2, 0, 3, 1, 1)
90 76
        self.comboBoxFind = QtWidgets.QComboBox(self.widget)
91 77
        self.comboBoxFind.setMinimumSize(QtCore.QSize(295, 0))
92 78
        self.comboBoxFind.setObjectName("comboBoxFind")
93 79
        self.gridLayout.addWidget(self.comboBoxFind, 0, 1, 1, 1)
94
        self.comboBoxReplace = QtWidgets.QComboBox(self.widget)
95
        self.comboBoxReplace.setObjectName("comboBoxReplace")
96
        self.gridLayout.addWidget(self.comboBoxReplace, 1, 1, 1, 1)
80
        self.label = QtWidgets.QLabel(self.widget)
81
        font = QtGui.QFont()
82
        font.setBold(False)
83
        font.setWeight(50)
84
        self.label.setFont(font)
85
        self.label.setObjectName("label")
86
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
87
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self.widget)
88
        self.plainTextEdit.setObjectName("plainTextEdit")
89
        self.gridLayout.addWidget(self.plainTextEdit, 3, 1, 1, 3)
90
        self.labelReplace = QtWidgets.QLabel(self.widget)
91
        font = QtGui.QFont()
92
        font.setBold(False)
93
        font.setWeight(50)
94
        self.labelReplace.setFont(font)
95
        self.labelReplace.setObjectName("labelReplace")
96
        self.gridLayout.addWidget(self.labelReplace, 1, 0, 1, 1)
97
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
98
        self.verticalLayout_2.setObjectName("verticalLayout_2")
99
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
100
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
101
        self.radioButtonHasCon = QtWidgets.QRadioButton(self.widget)
102
        self.radioButtonHasCon.setChecked(False)
103
        self.radioButtonHasCon.setObjectName("radioButtonHasCon")
104
        self.buttonGroup_2 = QtWidgets.QButtonGroup(ReplaceSymbolDialog)
105
        self.buttonGroup_2.setObjectName("buttonGroup_2")
106
        self.buttonGroup_2.addButton(self.radioButtonHasCon)
107
        self.horizontalLayout_3.addWidget(self.radioButtonHasCon)
108
        self.radioButtonHasNoCon = QtWidgets.QRadioButton(self.widget)
109
        self.radioButtonHasNoCon.setChecked(False)
110
        self.radioButtonHasNoCon.setObjectName("radioButtonHasNoCon")
111
        self.buttonGroup_2.addButton(self.radioButtonHasNoCon)
112
        self.horizontalLayout_3.addWidget(self.radioButtonHasNoCon)
113
        self.radioButtonConLine = QtWidgets.QRadioButton(self.widget)
114
        self.radioButtonConLine.setObjectName("radioButtonConLine")
115
        self.buttonGroup_2.addButton(self.radioButtonConLine)
116
        self.horizontalLayout_3.addWidget(self.radioButtonConLine)
117
        self.verticalLayout_2.addLayout(self.horizontalLayout_3)
118
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
119
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
120
        self.radioButtonAll = QtWidgets.QRadioButton(self.widget)
121
        self.radioButtonAll.setChecked(True)
122
        self.radioButtonAll.setObjectName("radioButtonAll")
123
        self.buttonGroup_2.addButton(self.radioButtonAll)
124
        self.horizontalLayout_4.addWidget(self.radioButtonAll)
125
        self.radioButtonCustom = QtWidgets.QRadioButton(self.widget)
126
        self.radioButtonCustom.setObjectName("radioButtonCustom")
127
        self.buttonGroup_2.addButton(self.radioButtonCustom)
128
        self.horizontalLayout_4.addWidget(self.radioButtonCustom)
129
        self.verticalLayout_2.addLayout(self.horizontalLayout_4)
130
        self.gridLayout.addLayout(self.verticalLayout_2, 2, 1, 1, 3)
97 131
        self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
98 132
        self.gridLayout_3.addWidget(self.widget, 0, 0, 1, 1)
99 133

  
......
103 137
    def retranslateUi(self, ReplaceSymbolDialog):
104 138
        _translate = QtCore.QCoreApplication.translate
105 139
        ReplaceSymbolDialog.setWindowTitle(_translate("ReplaceSymbolDialog", "Symbol Replace"))
106
        self.label.setText(_translate("ReplaceSymbolDialog", "Find : "))
107 140
        self.label_3.setText(_translate("ReplaceSymbolDialog", "Condition: "))
108
        self.labelReplace.setText(_translate("ReplaceSymbolDialog", "Replace :"))
109 141
        self.pushButtonRun.setText(_translate("ReplaceSymbolDialog", "Run"))
110 142
        self.radioButtonReplace.setText(_translate("ReplaceSymbolDialog", "Replace"))
111 143
        self.radioButtonInsert.setText(_translate("ReplaceSymbolDialog", "Insert"))
144
        self.label.setText(_translate("ReplaceSymbolDialog", "Find : "))
145
        self.labelReplace.setText(_translate("ReplaceSymbolDialog", "Replace :"))
146
        self.radioButtonHasCon.setText(_translate("ReplaceSymbolDialog", "has connection"))
147
        self.radioButtonHasNoCon.setText(_translate("ReplaceSymbolDialog", "has no connection"))
148
        self.radioButtonConLine.setText(_translate("ReplaceSymbolDialog", "connected with line"))
149
        self.radioButtonAll.setText(_translate("ReplaceSymbolDialog", "All"))
150
        self.radioButtonCustom.setText(_translate("ReplaceSymbolDialog", "Custom"))
112 151

  
113 152

  
114 153
if __name__ == "__main__":
DTI_PID/DTI_PID/UI/ReplaceSymbol.ui
49 49
     <layout class="QGridLayout" name="gridLayout_2">
50 50
      <item row="0" column="0">
51 51
       <layout class="QGridLayout" name="gridLayout">
52
        <item row="2" column="1" colspan="2">
53
         <widget class="QPlainTextEdit" name="plainTextEdit"/>
54
        </item>
55
        <item row="0" column="0">
56
         <widget class="QLabel" name="label">
57
          <property name="font">
58
           <font>
59
            <weight>50</weight>
60
            <bold>false</bold>
61
           </font>
62
          </property>
63
          <property name="text">
64
           <string>Find : </string>
65
          </property>
66
         </widget>
52
        <item row="1" column="1" colspan="2">
53
         <widget class="QComboBox" name="comboBoxReplace"/>
67 54
        </item>
68
        <item row="2" column="0">
55
        <item row="2" column="0" rowspan="2">
69 56
         <widget class="QLabel" name="label_3">
70 57
          <property name="font">
71 58
           <font>
......
78 65
          </property>
79 66
         </widget>
80 67
        </item>
81
        <item row="1" column="0">
82
         <widget class="QLabel" name="labelReplace">
83
          <property name="font">
84
           <font>
85
            <weight>50</weight>
86
            <bold>false</bold>
87
           </font>
88
          </property>
89
          <property name="text">
90
           <string>Replace :</string>
91
          </property>
92
         </widget>
93
        </item>
94
        <item row="1" column="2">
68
        <item row="1" column="3">
95 69
         <widget class="QPushButton" name="pushButtonRun">
96 70
          <property name="font">
97 71
           <font>
......
104 78
          </property>
105 79
         </widget>
106 80
        </item>
107
        <item row="0" column="2">
81
        <item row="0" column="3">
108 82
         <layout class="QHBoxLayout" name="horizontalLayout_2">
109 83
          <item>
110 84
           <widget class="QRadioButton" name="radioButtonReplace">
......
153 127
          </property>
154 128
         </widget>
155 129
        </item>
156
        <item row="1" column="1">
157
         <widget class="QComboBox" name="comboBoxReplace"/>
130
        <item row="0" column="0">
131
         <widget class="QLabel" name="label">
132
          <property name="font">
133
           <font>
134
            <weight>50</weight>
135
            <bold>false</bold>
136
           </font>
137
          </property>
138
          <property name="text">
139
           <string>Find : </string>
140
          </property>
141
         </widget>
142
        </item>
143
        <item row="3" column="1" colspan="3">
144
         <widget class="QPlainTextEdit" name="plainTextEdit"/>
145
        </item>
146
        <item row="1" column="0">
147
         <widget class="QLabel" name="labelReplace">
148
          <property name="font">
149
           <font>
150
            <weight>50</weight>
151
            <bold>false</bold>
152
           </font>
153
          </property>
154
          <property name="text">
155
           <string>Replace :</string>
156
          </property>
157
         </widget>
158
        </item>
159
        <item row="2" column="1" colspan="3">
160
         <layout class="QVBoxLayout" name="verticalLayout_2">
161
          <item>
162
           <layout class="QHBoxLayout" name="horizontalLayout_3">
163
            <item>
164
             <widget class="QRadioButton" name="radioButtonHasCon">
165
              <property name="text">
166
               <string>has connection</string>
167
              </property>
168
              <property name="checked">
169
               <bool>false</bool>
170
              </property>
171
              <attribute name="buttonGroup">
172
               <string notr="true">buttonGroup_2</string>
173
              </attribute>
174
             </widget>
175
            </item>
176
            <item>
177
             <widget class="QRadioButton" name="radioButtonHasNoCon">
178
              <property name="text">
179
               <string>has no connection</string>
180
              </property>
181
              <property name="checked">
182
               <bool>false</bool>
183
              </property>
184
              <attribute name="buttonGroup">
185
               <string notr="true">buttonGroup_2</string>
186
              </attribute>
187
             </widget>
188
            </item>
189
            <item>
190
             <widget class="QRadioButton" name="radioButtonConLine">
191
              <property name="text">
192
               <string>connected with line</string>
193
              </property>
194
              <attribute name="buttonGroup">
195
               <string notr="true">buttonGroup_2</string>
196
              </attribute>
197
             </widget>
198
            </item>
199
           </layout>
200
          </item>
201
          <item>
202
           <layout class="QHBoxLayout" name="horizontalLayout_4">
203
            <item>
204
             <widget class="QRadioButton" name="radioButtonAll">
205
              <property name="text">
206
               <string>All</string>
207
              </property>
208
              <property name="checked">
209
               <bool>true</bool>
210
              </property>
211
              <attribute name="buttonGroup">
212
               <string notr="true">buttonGroup_2</string>
213
              </attribute>
214
             </widget>
215
            </item>
216
            <item>
217
             <widget class="QRadioButton" name="radioButtonCustom">
218
              <property name="text">
219
               <string>Custom</string>
220
              </property>
221
              <attribute name="buttonGroup">
222
               <string notr="true">buttonGroup_2</string>
223
              </attribute>
224
             </widget>
225
            </item>
226
           </layout>
227
          </item>
228
         </layout>
158 229
        </item>
159 230
       </layout>
160 231
      </item>
......
167 238
 <connections/>
168 239
 <buttongroups>
169 240
  <buttongroup name="buttonGroup"/>
241
  <buttongroup name="buttonGroup_2"/>
170 242
 </buttongroups>
171 243
</ui>

내보내기 Unified diff

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