프로젝트

일반

사용자정보

개정판 434162c1

ID434162c1480f1d76432eed21074fad68cb55bb11
상위 5924b566
하위 66062705

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

update size symbol, line no from to context

Change-Id: I1c3af217358bc318b99707fc959633470622e08c

차이점 보기:

DTI_PID/DTI_PID/CodeTableDialog.py
676 676
    def import_code_table(self):
677 677
        """import code table excel file"""
678 678

  
679
        app_doc_data = AppDocData.instance()
680
        project = app_doc_data.getCurrentProject()
681

  
679 682
        options = QFileDialog.Options()
680 683
        options |= QFileDialog.DontUseNativeDialog
681
        file_name, _ = QFileDialog.getOpenFileName(self, "Import code table", os.getcwd(), "xlsx files(*.xlsx)",
684
        file_name, _ = QFileDialog.getOpenFileName(self, "Import code table", project.path, "xlsx files(*.xlsx)",
682 685
                                                   options=options)
683 686
        if file_name:
684 687
            QApplication.setOverrideCursor(Qt.WaitCursor)
685 688
            try:
686
                app_doc_data = AppDocData.instance()
687 689
                book = load_workbook(file_name)
688 690
                for sheet in book.worksheets:
689 691
                    matches = [index for index in range(self.ui.tabWidget.count())
DTI_PID/DTI_PID/ConfigurationDialog.py
103 103

  
104 104
            configs = docData.getConfigs('Size', 'Delimiter')
105 105
            self.ui.lineEditSizeDelimiter.setText(configs[0].value if 1 == len(configs) else 'X')
106
            configs = docData.getConfigs('Size', 'Symbol')
107
            self.ui.lineEditInchSymbol.setText(configs[0].value if 1 == len(configs) else '"')
106 108
            configs = docData.getConfigs('Range', 'Detection Ratio')
107 109
            self.ui.doubleSpinBoxDetectionRange.setValue(float(configs[0].value)) if 1 == len(
108 110
                configs) else self.ui.doubleSpinBoxDetectionRange.setValue(2.5)
......
1196 1198

  
1197 1199
            configs.append(Config('Project', 'Unit', 'Imperial' if self.ui.radioButtonSizeUnitImaperial.isChecked() else 'Metric'))
1198 1200
            configs.append(Config('Size', 'Delimiter', self.ui.lineEditSizeDelimiter.text()))
1201
            configs.append(Config('Size', 'Symbol', self.ui.lineEditInchSymbol.text()))
1199 1202
            configs.append(Config('Range', 'Detection Ratio', self.ui.doubleSpinBoxDetectionRange.value()))
1200 1203
            configs.append(Config('Flow Mark', 'Position', self.ui.spinBoxFlowMarkPosition.value()))
1201 1204
            configs.append(Config('Flow Mark', 'Length', self.ui.spinBoxFlowMarkLength.value()))
DTI_PID/DTI_PID/Configuration_UI.py
229 229
        self.gridLayout_6.setObjectName("gridLayout_6")
230 230
        self.gridLayout_26 = QtWidgets.QGridLayout()
231 231
        self.gridLayout_26.setObjectName("gridLayout_26")
232
        self.spinBoxFlowMarkLength = QtWidgets.QSpinBox(self.groupBoxAttribute)
233
        self.spinBoxFlowMarkLength.setMinimum(1)
234
        self.spinBoxFlowMarkLength.setMaximum(99999)
235
        self.spinBoxFlowMarkLength.setObjectName("spinBoxFlowMarkLength")
236
        self.gridLayout_26.addWidget(self.spinBoxFlowMarkLength, 5, 1, 1, 1)
237
        self.spinBoxFlowMarkPosition = QtWidgets.QSpinBox(self.groupBoxAttribute)
238
        self.spinBoxFlowMarkPosition.setMaximum(100)
239
        self.spinBoxFlowMarkPosition.setObjectName("spinBoxFlowMarkPosition")
240
        self.gridLayout_26.addWidget(self.spinBoxFlowMarkPosition, 4, 1, 1, 1)
241
        self.lineEditSizeDelimiter = QtWidgets.QLineEdit(self.groupBoxAttribute)
242
        self.lineEditSizeDelimiter.setObjectName("lineEditSizeDelimiter")
243
        self.gridLayout_26.addWidget(self.lineEditSizeDelimiter, 1, 1, 1, 1)
232 244
        self.label_26 = QtWidgets.QLabel(self.groupBoxAttribute)
233 245
        self.label_26.setMaximumSize(QtCore.QSize(220, 16777215))
234 246
        self.label_26.setObjectName("label_26")
235
        self.gridLayout_26.addWidget(self.label_26, 4, 0, 1, 1)
247
        self.gridLayout_26.addWidget(self.label_26, 5, 0, 1, 1)
236 248
        self.label_54 = QtWidgets.QLabel(self.groupBoxAttribute)
237 249
        self.label_54.setObjectName("label_54")
238 250
        self.gridLayout_26.addWidget(self.label_54, 0, 0, 1, 1)
......
240 252
        self.doubleSpinBoxDetectionRange.setSingleStep(0.1)
241 253
        self.doubleSpinBoxDetectionRange.setProperty("value", 1.0)
242 254
        self.doubleSpinBoxDetectionRange.setObjectName("doubleSpinBoxDetectionRange")
243
        self.gridLayout_26.addWidget(self.doubleSpinBoxDetectionRange, 2, 1, 1, 1)
255
        self.gridLayout_26.addWidget(self.doubleSpinBoxDetectionRange, 3, 1, 1, 1)
244 256
        self.label_24 = QtWidgets.QLabel(self.groupBoxAttribute)
245 257
        self.label_24.setMaximumSize(QtCore.QSize(190, 16777215))
246 258
        self.label_24.setObjectName("label_24")
247
        self.gridLayout_26.addWidget(self.label_24, 3, 0, 1, 1)
259
        self.gridLayout_26.addWidget(self.label_24, 4, 0, 1, 1)
248 260
        self.label_15 = QtWidgets.QLabel(self.groupBoxAttribute)
249 261
        self.label_15.setMaximumSize(QtCore.QSize(190, 16777215))
250 262
        self.label_15.setObjectName("label_15")
251
        self.gridLayout_26.addWidget(self.label_15, 2, 0, 1, 1)
252
        self.spinBoxFlowMarkLength = QtWidgets.QSpinBox(self.groupBoxAttribute)
253
        self.spinBoxFlowMarkLength.setMinimum(1)
254
        self.spinBoxFlowMarkLength.setMaximum(99999)
255
        self.spinBoxFlowMarkLength.setObjectName("spinBoxFlowMarkLength")
256
        self.gridLayout_26.addWidget(self.spinBoxFlowMarkLength, 4, 1, 1, 1)
257
        self.spinBoxFlowMarkPosition = QtWidgets.QSpinBox(self.groupBoxAttribute)
258
        self.spinBoxFlowMarkPosition.setMaximum(100)
259
        self.spinBoxFlowMarkPosition.setObjectName("spinBoxFlowMarkPosition")
260
        self.gridLayout_26.addWidget(self.spinBoxFlowMarkPosition, 3, 1, 1, 1)
261
        self.lineEditSizeDelimiter = QtWidgets.QLineEdit(self.groupBoxAttribute)
262
        self.lineEditSizeDelimiter.setObjectName("lineEditSizeDelimiter")
263
        self.gridLayout_26.addWidget(self.lineEditSizeDelimiter, 1, 1, 1, 1)
263
        self.gridLayout_26.addWidget(self.label_15, 3, 0, 1, 1)
264
        self.label_60 = QtWidgets.QLabel(self.groupBoxAttribute)
265
        self.label_60.setObjectName("label_60")
266
        self.gridLayout_26.addWidget(self.label_60, 6, 0, 1, 1)
264 267
        self.label_6 = QtWidgets.QLabel(self.groupBoxAttribute)
265 268
        self.label_6.setObjectName("label_6")
266 269
        self.gridLayout_26.addWidget(self.label_6, 1, 0, 1, 1)
270
        self.horizontalLayout_16 = QtWidgets.QHBoxLayout()
271
        self.horizontalLayout_16.setObjectName("horizontalLayout_16")
272
        self.radioButtonSpecNoneYes = QtWidgets.QRadioButton(self.groupBoxAttribute)
273
        self.radioButtonSpecNoneYes.setObjectName("radioButtonSpecNoneYes")
274
        self.buttonGroup_13 = QtWidgets.QButtonGroup(ConfigurationDialog)
275
        self.buttonGroup_13.setObjectName("buttonGroup_13")
276
        self.buttonGroup_13.addButton(self.radioButtonSpecNoneYes)
277
        self.horizontalLayout_16.addWidget(self.radioButtonSpecNoneYes)
278
        self.radioButtonSpecNoneNo = QtWidgets.QRadioButton(self.groupBoxAttribute)
279
        self.radioButtonSpecNoneNo.setObjectName("radioButtonSpecNoneNo")
280
        self.buttonGroup_13.addButton(self.radioButtonSpecNoneNo)
281
        self.horizontalLayout_16.addWidget(self.radioButtonSpecNoneNo)
282
        self.gridLayout_26.addLayout(self.horizontalLayout_16, 6, 1, 1, 1)
267 283
        self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
268 284
        self.horizontalLayout_11.setObjectName("horizontalLayout_11")
269 285
        self.radioButtonSizeUnitImaperial = QtWidgets.QRadioButton(self.groupBoxAttribute)
......
277 293
        self.buttonGroup_9.addButton(self.radioButtonSizeUnitMetric)
278 294
        self.horizontalLayout_11.addWidget(self.radioButtonSizeUnitMetric)
279 295
        self.gridLayout_26.addLayout(self.horizontalLayout_11, 0, 1, 1, 1)
280
        self.label_60 = QtWidgets.QLabel(self.groupBoxAttribute)
281
        self.label_60.setObjectName("label_60")
282
        self.gridLayout_26.addWidget(self.label_60, 5, 0, 1, 1)
283
        self.horizontalLayout_16 = QtWidgets.QHBoxLayout()
284
        self.horizontalLayout_16.setObjectName("horizontalLayout_16")
285
        self.radioButtonSpecNoneYes = QtWidgets.QRadioButton(self.groupBoxAttribute)
286
        self.radioButtonSpecNoneYes.setObjectName("radioButtonSpecNoneYes")
287
        self.buttonGroup_13 = QtWidgets.QButtonGroup(ConfigurationDialog)
288
        self.buttonGroup_13.setObjectName("buttonGroup_13")
289
        self.buttonGroup_13.addButton(self.radioButtonSpecNoneYes)
290
        self.horizontalLayout_16.addWidget(self.radioButtonSpecNoneYes)
291
        self.radioButtonSpecNoneNo = QtWidgets.QRadioButton(self.groupBoxAttribute)
292
        self.radioButtonSpecNoneNo.setObjectName("radioButtonSpecNoneNo")
293
        self.buttonGroup_13.addButton(self.radioButtonSpecNoneNo)
294
        self.horizontalLayout_16.addWidget(self.radioButtonSpecNoneNo)
295
        self.gridLayout_26.addLayout(self.horizontalLayout_16, 5, 1, 1, 1)
296
        self.label_63 = QtWidgets.QLabel(self.groupBoxAttribute)
297
        self.label_63.setObjectName("label_63")
298
        self.gridLayout_26.addWidget(self.label_63, 2, 0, 1, 1)
299
        self.lineEditInchSymbol = QtWidgets.QLineEdit(self.groupBoxAttribute)
300
        self.lineEditInchSymbol.setObjectName("lineEditInchSymbol")
301
        self.gridLayout_26.addWidget(self.lineEditInchSymbol, 2, 1, 1, 1)
296 302
        self.gridLayout_6.addLayout(self.gridLayout_26, 0, 0, 1, 1)
297 303
        self.gridLayout_2.addWidget(self.groupBoxAttribute, 1, 1, 1, 1)
298 304
        self.tabWidget.addTab(self.Recognition, "")
......
1101 1107
        self.label_54.setText(_translate("ConfigurationDialog", "Size Unit : "))
1102 1108
        self.label_24.setText(_translate("ConfigurationDialog", "Line Flow Mark Position(Percent) : "))
1103 1109
        self.label_15.setText(_translate("ConfigurationDialog", "Attribute Detection Range(Ratio) : "))
1104
        self.label_6.setText(_translate("ConfigurationDialog", "Size Delimiter : "))
1105
        self.radioButtonSizeUnitImaperial.setText(_translate("ConfigurationDialog", "Imperial"))
1106
        self.radioButtonSizeUnitMetric.setText(_translate("ConfigurationDialog", "Metric"))
1107 1110
        self.label_60.setText(_translate("ConfigurationDialog", "Make Spec Break with None : "))
1111
        self.label_6.setText(_translate("ConfigurationDialog", "Size Delimiter : "))
1108 1112
        self.radioButtonSpecNoneYes.setText(_translate("ConfigurationDialog", "Yes"))
1109 1113
        self.radioButtonSpecNoneNo.setText(_translate("ConfigurationDialog", "No"))
1114
        self.radioButtonSizeUnitImaperial.setText(_translate("ConfigurationDialog", "Imperial"))
1115
        self.radioButtonSizeUnitMetric.setText(_translate("ConfigurationDialog", "Metric"))
1116
        self.label_63.setText(_translate("ConfigurationDialog", "Size Symbol : "))
1110 1117
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.Recognition), _translate("ConfigurationDialog", "Recognition"))
1111 1118
        self.groupBoxLineNo.setTitle(_translate("ConfigurationDialog", "Line No"))
1112 1119
        self.pushButtonLineNoAttribute.setText(_translate("ConfigurationDialog", "Attribute"))
DTI_PID/DTI_PID/Shapes/EngineeringAbstractItem.py
1181 1181
        return self.sceneBoundingRect().center()
1182 1182
    
1183 1183
    def inch_to_number(self, inch_str):
1184
        app_doc_data = AppDocData.instance()
1185
        configs = app_doc_data.getConfigs('Size', 'Symbol')
1186
        size_symbols = configs[0].value.replace(' ', '').split(',') if 1 == len(configs) else ['"']
1187

  
1184 1188
        inch_str = str(inch_str)
1185
        inchs = inch_str.replace('"', '').split('-')
1189
        for symbol in size_symbols:
1190
            inchs = inch_str.replace(symbol, '')
1191
        inchs = inchs.replace('"', '').split('-')
1192

  
1186 1193
        number = 0
1187 1194
        for inch in inchs:
1188 1195
            if '/' not in inch:
DTI_PID/DTI_PID/Shapes/EngineeringLineNoTextItem.py
160 160
            menu.addAction(explodeKeepAction)
161 161
            '''
162 162

  
163
            reverseAction = QAction('Reverse Flow', None)
164
            reverseAction.triggered.connect(self.contextReverse)
165
            menu.addAction(reverseAction)
163
            fromAction = QAction('Set From', None)
164
            fromAction.triggered.connect(self.contextFrom)
165
            menu.addAction(fromAction)
166

  
167
            toAction = QAction('Set To', None)
168
            toAction.triggered.connect(self.contextTo)
169
            menu.addAction(toAction)
166 170

  
167 171
            highlightAction = QAction('Highlight', None)
168 172
            highlightAction.triggered.connect(lambda: self.contextHighlight(self))
......
192 196

  
193 197
            menu.exec_(event.screenPos())
194 198

  
199
    def contextFrom(self):
200
        from App import App
201
        import SelectAttributeCommand
202
        _from = None
203
        for prop, value in self.properties.items():
204
            if prop.Attribute == 'From':
205
                _from = prop
206
                break
207
        cmd = SelectAttributeCommand.SelectAttributeCommand(self, _from, App.mainWnd().graphicsView)
208
        cmd.onSuccess.connect(App.mainWnd().resultPropertyTableWidget.onSuccessSelectAttribute)
209
        App.mainWnd().graphicsView.command = cmd
210

  
211
    def contextTo(self):
212
        from App import App
213
        import SelectAttributeCommand
214
        _to = None
215
        for prop, value in self.properties.items():
216
            if prop.Attribute == 'To':
217
                _to = prop
218
                break
219
        cmd = SelectAttributeCommand.SelectAttributeCommand(self, _to, App.mainWnd().graphicsView)
220
        cmd.onSuccess.connect(App.mainWnd().resultPropertyTableWidget.onSuccessSelectAttribute)
221
        App.mainWnd().graphicsView.command = cmd
222

  
195 223
    def contextHighlight(self, item):
196 224
        from App import App
197 225
        from HighlightCommand import HighlightCommand
DTI_PID/DTI_PID/TextItemFactory.py
402 402
        return [delimiter.join(tokens), tokens, delimiter]
403 403

  
404 404
    def inch_to_number(self, inch_str):
405
        inchs = inch_str.replace('"', '').split('-')
405
        app_doc_data = AppDocData.instance()
406
        configs = app_doc_data.getConfigs('Size', 'Symbol')
407
        size_symbols = configs[0].value.replace(' ', '').split(',') if 1 == len(configs) else ['"']
408

  
409
        inch_str = str(inch_str)
410
        for symbol in size_symbols:
411
            inchs = inch_str.replace(symbol, '')
412
        inchs = inchs.replace('"', '').split('-')
413

  
406 414
        number = 0
407 415
        for inch in inchs:
408 416
            if '/' not in inch:
DTI_PID/DTI_PID/UI/Configuration.ui
453 453
         <layout class="QGridLayout" name="gridLayout_6">
454 454
          <item row="0" column="0">
455 455
           <layout class="QGridLayout" name="gridLayout_26">
456
            <item row="4" column="0">
456
            <item row="5" column="1">
457
             <widget class="QSpinBox" name="spinBoxFlowMarkLength">
458
              <property name="minimum">
459
               <number>1</number>
460
              </property>
461
              <property name="maximum">
462
               <number>99999</number>
463
              </property>
464
             </widget>
465
            </item>
466
            <item row="4" column="1">
467
             <widget class="QSpinBox" name="spinBoxFlowMarkPosition">
468
              <property name="maximum">
469
               <number>100</number>
470
              </property>
471
             </widget>
472
            </item>
473
            <item row="1" column="1">
474
             <widget class="QLineEdit" name="lineEditSizeDelimiter"/>
475
            </item>
476
            <item row="5" column="0">
457 477
             <widget class="QLabel" name="label_26">
458 478
              <property name="maximumSize">
459 479
               <size>
......
473 493
              </property>
474 494
             </widget>
475 495
            </item>
476
            <item row="2" column="1">
496
            <item row="3" column="1">
477 497
             <widget class="QDoubleSpinBox" name="doubleSpinBoxDetectionRange">
478 498
              <property name="singleStep">
479 499
               <double>0.100000000000000</double>
......
483 503
              </property>
484 504
             </widget>
485 505
            </item>
486
            <item row="3" column="0">
506
            <item row="4" column="0">
487 507
             <widget class="QLabel" name="label_24">
488 508
              <property name="maximumSize">
489 509
               <size>
......
496 516
              </property>
497 517
             </widget>
498 518
            </item>
499
            <item row="2" column="0">
519
            <item row="3" column="0">
500 520
             <widget class="QLabel" name="label_15">
501 521
              <property name="maximumSize">
502 522
               <size>
......
509 529
              </property>
510 530
             </widget>
511 531
            </item>
512
            <item row="4" column="1">
513
             <widget class="QSpinBox" name="spinBoxFlowMarkLength">
514
              <property name="minimum">
515
               <number>1</number>
516
              </property>
517
              <property name="maximum">
518
               <number>99999</number>
519
              </property>
520
             </widget>
521
            </item>
522
            <item row="3" column="1">
523
             <widget class="QSpinBox" name="spinBoxFlowMarkPosition">
524
              <property name="maximum">
525
               <number>100</number>
532
            <item row="6" column="0">
533
             <widget class="QLabel" name="label_60">
534
              <property name="text">
535
               <string>Make Spec Break with None : </string>
526 536
              </property>
527 537
             </widget>
528 538
            </item>
529
            <item row="1" column="1">
530
             <widget class="QLineEdit" name="lineEditSizeDelimiter"/>
531
            </item>
532 539
            <item row="1" column="0">
533 540
             <widget class="QLabel" name="label_6">
534 541
              <property name="text">
......
536 543
              </property>
537 544
             </widget>
538 545
            </item>
539
            <item row="0" column="1">
540
             <layout class="QHBoxLayout" name="horizontalLayout_11">
546
            <item row="6" column="1">
547
             <layout class="QHBoxLayout" name="horizontalLayout_16">
541 548
              <item>
542
               <widget class="QRadioButton" name="radioButtonSizeUnitImaperial">
549
               <widget class="QRadioButton" name="radioButtonSpecNoneYes">
543 550
                <property name="text">
544
                 <string>Imperial</string>
551
                 <string>Yes</string>
545 552
                </property>
546 553
                <attribute name="buttonGroup">
547
                 <string notr="true">buttonGroup_9</string>
554
                 <string notr="true">buttonGroup_13</string>
548 555
                </attribute>
549 556
               </widget>
550 557
              </item>
551 558
              <item>
552
               <widget class="QRadioButton" name="radioButtonSizeUnitMetric">
559
               <widget class="QRadioButton" name="radioButtonSpecNoneNo">
553 560
                <property name="text">
554
                 <string>Metric</string>
561
                 <string>No</string>
555 562
                </property>
556 563
                <attribute name="buttonGroup">
557
                 <string notr="true">buttonGroup_9</string>
564
                 <string notr="true">buttonGroup_13</string>
558 565
                </attribute>
559 566
               </widget>
560 567
              </item>
561 568
             </layout>
562 569
            </item>
563
            <item row="5" column="0">
564
             <widget class="QLabel" name="label_60">
565
              <property name="text">
566
               <string>Make Spec Break with None : </string>
567
              </property>
568
             </widget>
569
            </item>
570
            <item row="5" column="1">
571
             <layout class="QHBoxLayout" name="horizontalLayout_16">
570
            <item row="0" column="1">
571
             <layout class="QHBoxLayout" name="horizontalLayout_11">
572 572
              <item>
573
               <widget class="QRadioButton" name="radioButtonSpecNoneYes">
573
               <widget class="QRadioButton" name="radioButtonSizeUnitImaperial">
574 574
                <property name="text">
575
                 <string>Yes</string>
575
                 <string>Imperial</string>
576 576
                </property>
577 577
                <attribute name="buttonGroup">
578
                 <string notr="true">buttonGroup_13</string>
578
                 <string notr="true">buttonGroup_9</string>
579 579
                </attribute>
580 580
               </widget>
581 581
              </item>
582 582
              <item>
583
               <widget class="QRadioButton" name="radioButtonSpecNoneNo">
583
               <widget class="QRadioButton" name="radioButtonSizeUnitMetric">
584 584
                <property name="text">
585
                 <string>No</string>
585
                 <string>Metric</string>
586 586
                </property>
587 587
                <attribute name="buttonGroup">
588
                 <string notr="true">buttonGroup_13</string>
588
                 <string notr="true">buttonGroup_9</string>
589 589
                </attribute>
590 590
               </widget>
591 591
              </item>
592 592
             </layout>
593 593
            </item>
594
            <item row="2" column="0">
595
             <widget class="QLabel" name="label_63">
596
              <property name="text">
597
               <string>Size Symbol : </string>
598
              </property>
599
             </widget>
600
            </item>
601
            <item row="2" column="1">
602
             <widget class="QLineEdit" name="lineEditInchSymbol"/>
603
            </item>
594 604
           </layout>
595 605
          </item>
596 606
         </layout>
......
2186 2196
 </connections>
2187 2197
 <buttongroups>
2188 2198
  <buttongroup name="buttonGroup_14"/>
2189
  <buttongroup name="buttonGroup_9"/>
2190 2199
  <buttongroup name="buttonGroup_4"/>
2191
  <buttongroup name="buttonGroup_13"/>
2192
  <buttongroup name="buttonGroup_11"/>
2193 2200
  <buttongroup name="buttonGroup"/>
2201
  <buttongroup name="buttonGroup_6"/>
2202
  <buttongroup name="buttonGroup_11"/>
2194 2203
  <buttongroup name="buttonGroup_12"/>
2195 2204
  <buttongroup name="buttonGroup_7"/>
2205
  <buttongroup name="buttonGroup_5"/>
2206
  <buttongroup name="buttonGroup_9"/>
2196 2207
  <buttongroup name="buttonGroup_8"/>
2197 2208
  <buttongroup name="buttonGroup_3"/>
2198 2209
  <buttongroup name="buttonGroup_2"/>
2199
  <buttongroup name="buttonGroup_5"/>
2200
  <buttongroup name="buttonGroup_6"/>
2201 2210
  <buttongroup name="buttonGroup_10"/>
2211
  <buttongroup name="buttonGroup_13"/>
2202 2212
 </buttongroups>
2203 2213
</ui>

내보내기 Unified diff