프로젝트

일반

사용자정보

개정판 6a2a7457

ID6a2a74579fb7b233265cd6e2692ff3ec6983e0b1
상위 e7cd3f58
하위 5c306d67, b0034990

humkyung 이(가) 6년 이상 전에 추가함

implementing issue #640:
- Add AttrEditor dialog

차이점 보기:

DTI_PID/DTI_PID/AttrEditorDialog.py
1
# coding: utf-8
2
import os
3
import sys
4
from PyQt5.QtCore import *
5
from PyQt5.QtGui import *
6
from PyQt5.QtWidgets import *
7
import sqlite3
8
from AppDocData import AppDocData
9
from AppDocData import Config
10
import AttrEditor_UI
11

  
12
class QAttrEditorDialog(QDialog):
13
    def __init__(self, parent):
14
        QDialog.__init__(self, parent)
15

  
16
        self.ui = AttrEditor_UI.Ui_AttrEditorDialog()
17
        self.ui.setupUi(self)
18

  
19
        self.ui.pushButtonAddAttr.clicked.connect(self.onAddAttr)
20
        self.ui.pushButtonDelAttr.clicked.connect(self.onDelAttr)
21

  
22
        self.ui.tableWidgetAttr.setHorizontalHeaderLabels(['Name', 'Type'])
23
        self.ui.tableWidgetAttr.horizontalHeaderItem(0).setSizeHint(QSize(25, 25))
24

  
25
    '''
26
        @brief  add a attribute
27
        @author humkyung
28
        @date   2018.08.13
29
    '''
30
    def onAddAttr(self):
31
        rows = self.ui.tableWidgetAttr.rowCount()
32
        self.ui.tableWidgetAttr.setRowCount(rows + 1)
33

  
34
        attrTypeComboBox = QComboBox()
35
        attrTypeComboBox.addItem('Symbol Item')
36
        attrTypeComboBox.addItem('Text Item')
37
        attrTypeComboBox.addItem('Int')
38
        attrTypeComboBox.addItem('String')
39
        self.ui.tableWidgetAttr.setCellWidget(rows, 1, attrTypeComboBox)
40

  
41
    '''
42
        @brief  delete selected attribute 
43
        @author humkyung
44
        @date   2018.08.13
45
    '''
46
    def onDelAttr(self):
47
        model = self.ui.tableWidgetAttr.model()
48

  
49
        row = self.ui.tableWidgetAttr.currentRow()
50
        if row != -1:
51
            model.removeRow(row)
52

  
53
    '''
54
        @brief      save attributes
55
        @author     humkyung
56
        @date       2018.08.13
57
    '''
58
    def accept(self):
59
        QDialog.accept(self)
DTI_PID/DTI_PID/AttrEditor_UI.py
1
# -*- coding: utf-8 -*-
2

  
3
# Form implementation generated from reading ui file '.\ui\AttrEditor.ui'
4
#
5
# Created by: PyQt5 UI code generator 5.10.1
6
#
7
# WARNING! All changes made in this file will be lost!
8

  
9
from PyQt5 import QtCore, QtGui, QtWidgets
10

  
11
class Ui_AttrEditorDialog(object):
12
    def setupUi(self, AttrEditorDialog):
13
        AttrEditorDialog.setObjectName("AttrEditorDialog")
14
        AttrEditorDialog.resize(769, 300)
15
        font = QtGui.QFont()
16
        font.setFamily("맑은 고딕")
17
        font.setBold(True)
18
        font.setWeight(75)
19
        AttrEditorDialog.setFont(font)
20
        self.gridLayout = QtWidgets.QGridLayout(AttrEditorDialog)
21
        self.gridLayout.setObjectName("gridLayout")
22
        self.groupBox = QtWidgets.QGroupBox(AttrEditorDialog)
23
        self.groupBox.setObjectName("groupBox")
24
        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)
25
        self.gridLayout_2.setObjectName("gridLayout_2")
26
        self.verticalLayout = QtWidgets.QVBoxLayout()
27
        self.verticalLayout.setObjectName("verticalLayout")
28
        self.horizontalLayout = QtWidgets.QHBoxLayout()
29
        self.horizontalLayout.setObjectName("horizontalLayout")
30
        self.labelSelectedSymbolType = QtWidgets.QLabel(self.groupBox)
31
        self.labelSelectedSymbolType.setObjectName("labelSelectedSymbolType")
32
        self.horizontalLayout.addWidget(self.labelSelectedSymbolType)
33
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
34
        self.horizontalLayout.addItem(spacerItem)
35
        self.pushButtonAddAttr = QtWidgets.QPushButton(self.groupBox)
36
        self.pushButtonAddAttr.setMaximumSize(QtCore.QSize(24, 16777215))
37
        self.pushButtonAddAttr.setObjectName("pushButtonAddAttr")
38
        self.horizontalLayout.addWidget(self.pushButtonAddAttr, 0, QtCore.Qt.AlignRight)
39
        self.pushButtonDelAttr = QtWidgets.QPushButton(self.groupBox)
40
        self.pushButtonDelAttr.setMaximumSize(QtCore.QSize(24, 16777215))
41
        self.pushButtonDelAttr.setObjectName("pushButtonDelAttr")
42
        self.horizontalLayout.addWidget(self.pushButtonDelAttr, 0, QtCore.Qt.AlignRight)
43
        self.verticalLayout.addLayout(self.horizontalLayout)
44
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
45
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
46
        self.tableWidgetAttr = QtWidgets.QTableWidget(self.groupBox)
47
        self.tableWidgetAttr.setColumnCount(2)
48
        self.tableWidgetAttr.setObjectName("tableWidgetAttr")
49
        self.tableWidgetAttr.setRowCount(0)
50
        self.tableWidgetAttr.verticalHeader().setVisible(False)
51
        self.horizontalLayout_2.addWidget(self.tableWidgetAttr)
52
        self.verticalLayout.addLayout(self.horizontalLayout_2)
53
        self.gridLayout_2.addLayout(self.verticalLayout, 0, 0, 1, 1)
54
        self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1)
55
        self.buttonBox = QtWidgets.QDialogButtonBox(AttrEditorDialog)
56
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
57
        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
58
        self.buttonBox.setObjectName("buttonBox")
59
        self.gridLayout.addWidget(self.buttonBox, 1, 0, 1, 1)
60

  
61
        self.retranslateUi(AttrEditorDialog)
62
        self.buttonBox.accepted.connect(AttrEditorDialog.accept)
63
        self.buttonBox.rejected.connect(AttrEditorDialog.reject)
64
        QtCore.QMetaObject.connectSlotsByName(AttrEditorDialog)
65

  
66
    def retranslateUi(self, AttrEditorDialog):
67
        _translate = QtCore.QCoreApplication.translate
68
        AttrEditorDialog.setWindowTitle(_translate("AttrEditorDialog", "속성 편집"))
69
        self.groupBox.setTitle(_translate("AttrEditorDialog", "속성"))
70
        self.labelSelectedSymbolType.setText(_translate("AttrEditorDialog", "Selected Symbol Type"))
71
        self.pushButtonAddAttr.setText(_translate("AttrEditorDialog", "+"))
72
        self.pushButtonDelAttr.setText(_translate("AttrEditorDialog", "-"))
73

  
74

  
75
if __name__ == "__main__":
76
    import sys
77
    app = QtWidgets.QApplication(sys.argv)
78
    AttrEditorDialog = QtWidgets.QDialog()
79
    ui = Ui_AttrEditorDialog()
80
    ui.setupUi(AttrEditorDialog)
81
    AttrEditorDialog.show()
82
    sys.exit(app.exec_())
83

  
DTI_PID/DTI_PID/DTI_PID.pyproj
73 73
    <Compile Include="QInstrumentDataListDialog.py" />
74 74
    <Compile Include="QLineDataListDialog.py" />
75 75
    <Compile Include="OcrResultDialog.py" />
76
    <Compile Include="PropertyTableWidget.py" />
76
    <Compile Include="SymbolPropertyTableWidget.py" />
77 77
    <Compile Include="QRecognitionDialog.py" />
78 78
    <Compile Include="ItemPropertyTableWidget.py" />
79 79
    <Compile Include="ItemTreeWidget.py" />
DTI_PID/DTI_PID/MainWindow.py
37 37
from QEngineeringSizeTextItem import QEngineeringSizeTextItem
38 38
from EngineeringUnknownItem import QEngineeringUnknownItem
39 39
from AppDocData import *
40
import SymbolTreeWidget, PropertyTableWidget
40
import SymbolTreeWidget, SymbolPropertyTableWidget
41 41
import SymbolEditorDialog
42 42
import ItemTreeWidget
43 43
import ItemPropertyTableWidget
......
88 88
        self.symbolTabVerticalLayout.addWidget(self.dirTreeWidget)
89 89

  
90 90
        # Add Custom Property TableWidget
91
        self.propertyTableWidget = PropertyTableWidget.QPropertyTableWidget()
91
        self.propertyTableWidget = SymbolPropertyTableWidget.QSymbolPropertyTableWidget()
92 92
        self.symbolTabVerticalLayout.addWidget(self.propertyTableWidget)
93 93
        self.dirTreeWidget.singleClicked.connect(self.propertyTableWidget.getClickedSymbol)
94 94
        # add splitter widget
DTI_PID/DTI_PID/PropertyTableWidget.py
1
try:
2
    from PyQt5.QtCore import *
3
    from PyQt5.QtGui import *
4
    from PyQt5.QtWidgets import *
5
except ImportError:
6
    try:
7
        from PyQt4.QtCore import *
8
        from PyQt4.QtGui import *
9
    except ImportError:
10
        raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.")
11
from AppDocData import AppDocData
12
import os
13
import SymbolBase
14
import symbol
15

  
16
class QPropertyTableWidget(QTableWidget):
17
    def __init__(self):
18
        QTableWidget.__init__(self)
19
        self.project = AppDocData.instance().getCurrentProject()
20
        self.initPropertyTableWidget()
21
        self.symData = None
22

  
23
    '''
24
        @auther     Yecheol
25
        @date       2018-07-04
26
        @history    Add Instrument Label YN Column
27
                    humkyung 2018.07.08 show column header
28
    '''
29

  
30
    def initPropertyTableWidget(self):
31
        self.setColumnCount(2)
32
        self.setHorizontalHeaderLabels(['Name', 'Value'])
33
        self.horizontalHeaderItem(0).setSizeHint(QSize(25, 25))
34
        self.setRowCount(12)
35
        self.verticalHeader().hide()
36
        self.horizontalHeader().setStretchLastSection(True)
37
        self.initTitleCell()
38

  
39
        ### Rotation Count SpinBox Init
40
        rotationCountSpinBox = QSpinBox()
41
        rotationCountSpinBox.setRange(0, 3)
42
        rotationCountSpinBox.setSingleStep(1)
43
        rotationCountSpinBox.setValue(0)
44
        rotationCountSpinBox.setEnabled(False)
45
        self.setCellWidget(3, 1, rotationCountSpinBox)
46

  
47
        ### IsContainChild CheckBox Init
48
        isContainChildCheckBox = QCheckBox()
49
        isContainChildCheckBox.setEnabled(False)
50
        self.setCellWidget(4, 1, isContainChildCheckBox)
51

  
52
        ### Symbol Type ComboBox Init
53
        symbolTypeComboBox = QComboBox()
54
        for name in AppDocData.instance().getSymbolTypeComboBoxItems():
55
            symbolTypeComboBox.addItem(name)
56
        symbolTypeComboBox.setEnabled(False)
57
        self.setCellWidget(5, 1, symbolTypeComboBox)
58

  
59
        ### Base Symbol ComboBox Init
60
        baseSymbolComboBox = QComboBox()
61
        for name in AppDocData.instance().getBaseSymbolComboBoxItems():
62
            baseSymbolComboBox.addItem(name)
63
        baseSymbolComboBox.setEnabled(False)
64
        self.setCellWidget(6, 1, baseSymbolComboBox)
65

  
66
        ### IsExceptDetect CheckBox Init
67
        isExceptDetectCheckBox = QCheckBox()
68
        isExceptDetectCheckBox.setEnabled(False)
69
        self.setCellWidget(10, 1, isExceptDetectCheckBox)
70

  
71
        ### hasInstrumentLabel CheckBox Init
72
        hasInstrumentLabelCheckBox = QCheckBox()
73
        hasInstrumentLabelCheckBox.setEnabled(False)
74
        self.setCellWidget(11, 1, hasInstrumentLabelCheckBox)
75

  
76
    '''
77
        @brief  Init contents and background color in Title cell
78
    '''
79
    def initTitleCell(self):
80
        #self.setItem(0, 0, QTableWidgetItem("심볼ID"))
81
        #self.setItem(0, 0, QTableWidgetItem("심볼명"))
82
        #self.setItem(1, 0, QTableWidgetItem("임계값(%)"))
83
        #self.setItem(2, 0, QTableWidgetItem("최소 특징점 수"))
84
        #self.setItem(3, 0, QTableWidgetItem("검출 시 심볼 회전 수"))
85
        #self.setItem(4, 0, QTableWidgetItem("자식 심볼 포함 여부"))
86
        #self.setItem(5, 0, QTableWidgetItem("심볼 타입"))
87
        #self.setItem(6, 0, QTableWidgetItem("기초 심볼"))
88
        #self.setItem(7, 0, QTableWidgetItem("부가 심볼"))
89
        #self.setItem(8, 0, QTableWidgetItem("Original Point"))
90
        #self.setItem(9, 0, QTableWidgetItem("Connection Point"))
91
        #self.setItem(10, 0, QTableWidgetItem("검출 시 미포함 여부"))
92
        #self.setItem(11, 0, QTableWidgetItem("Instrument Label 여부"))
93

  
94
        item1 = QTableWidgetItem("심볼명")
95
        item1.setFlags(Qt.ItemIsEnabled)
96
        self.setItem(0, 0, item1)
97

  
98
        item2 = QTableWidgetItem("임계값(%)")
99
        item2.setFlags(Qt.ItemIsEnabled)
100
        self.setItem(1, 0, item2)
101

  
102
        item3 = QTableWidgetItem("최소 특징점 수")
103
        item3.setFlags(Qt.ItemIsEnabled)
104
        self.setItem(2, 0, item3)
105

  
106
        item4 = QTableWidgetItem("검출 시 심볼 회전 수")
107
        item4.setFlags(Qt.ItemIsEnabled)
108
        self.setItem(3, 0, item4)
109

  
110
        item5 = QTableWidgetItem("자식 심볼 포함 여부")
111
        item5.setFlags(Qt.ItemIsEnabled)
112
        self.setItem(4, 0, item5)
113

  
114
        item6 = QTableWidgetItem("심볼 타입")
115
        item6.setFlags(Qt.ItemIsEnabled)
116
        self.setItem(5, 0, item6)
117

  
118
        item7 = QTableWidgetItem("기초 심볼")
119
        item7.setFlags(Qt.ItemIsEnabled)
120
        self.setItem(6, 0, item7)
121

  
122
        item8 = QTableWidgetItem("부가 심볼")
123
        item8.setFlags(Qt.ItemIsEnabled)
124
        self.setItem(7, 0, item8)
125

  
126
        item9 = QTableWidgetItem("Original Point")
127
        item9.setFlags(Qt.ItemIsEnabled)
128
        self.setItem(8, 0, item9)
129

  
130
        item10 = QTableWidgetItem("Connection Point")
131
        item10.setFlags(Qt.ItemIsEnabled)
132
        self.setItem(9, 0, item10)
133

  
134
        item11 = QTableWidgetItem("검출 시 미포함 여부")
135
        item11.setFlags(Qt.ItemIsEnabled)
136
        self.setItem(10, 0, item11)
137

  
138
        item12 = QTableWidgetItem("Ins't 라벨 포함 여부")
139
        item12.setFlags(Qt.ItemIsEnabled)
140
        self.setItem(11, 0, item12)
141

  
142
        for index in range(self.rowCount()):
143
            self.item(index, 0).setBackground(QColor(220, 220, 220))
144

  
145
    def makeConnection(self, dirTreeWidget):
146
        dirTreeWidget.singleClicked.connect(self.getClickedSymbol)
147

  
148
    '''
149
        @history    18.04.24    Jeongwoo    If symbol.getId == -1: symData = None
150
    '''
151
    @pyqtSlot(SymbolBase.SymbolBase)
152
    def getClickedSymbol(self, symbol):
153
        if self.symData != symbol:
154
            self.symData = symbol #if symbol.getId() != -1 else None
155
            self.symbolChanged()
156

  
157
    '''
158
        @brief      Set symbol data on TableWidget
159
                    TableWidgetItem handles only string value
160
        @history    18.04.24    Jeongwoo    Add 14th row(isExceptDetect CheckBox)
161
    '''
162
    def symbolChanged(self):
163
        if self.symData.baseSymbol is not None:
164
            #self.setItem(0, 1, QTableWidgetItem(str(self.symData.getId())))
165
            #self.setItem(0, 1, QTableWidgetItem(self.symData.getName()))
166
            #self.setItem(1, 1, QTableWidgetItem(str(int(self.symData.getThreshold() * 100))))
167
            #self.setItem(2, 1, QTableWidgetItem(str(self.symData.getMinMatchCount())))
168

  
169
            Symboldata = QTableWidgetItem(self.symData.getName())
170
            Symboldata.setFlags(Qt.ItemIsEnabled)
171
            self.setItem(0, 1, Symboldata)
172

  
173
            SymbolThreshold = QTableWidgetItem(str(self.symData.getThreshold() *100))
174
            SymbolThreshold.setFlags(Qt.ItemIsEnabled)
175
            self.setItem(1, 1, SymbolThreshold)
176

  
177
            SymbolMinMatchCount = QTableWidgetItem(str(self.symData.getMinMatchCount()))
178
            SymbolMinMatchCount.setFlags(Qt.ItemIsEnabled)
179
            self.setItem(2, 1, SymbolMinMatchCount)
180

  
181
            rotationCountSpinBox = self.cellWidget(3, 1)
182
            rotationCountSpinBox.setValue(self.symData.getRotationCount())
183

  
184
            isContainChildCheckBox = self.cellWidget(4, 1)
185
            isContainChildCheckBox.setChecked(True if self.symData.getIsContainChild() == 1 else False)
186

  
187
            symbolTypeComboBox = self.cellWidget(5, 1)
188
            symbolTypeComboBox.setCurrentIndex(symbolTypeComboBox.findText(self.symData.getType())) ##### USED FIND TEXT
189
            
190
            baseSymbolComboBox = self.cellWidget(6, 1)
191
            baseSymbolComboBox.clear()
192
            for name in AppDocData.instance().getBaseSymbolComboBoxItems(self.symData.getType()):
193
                baseSymbolComboBox.addItem(name)
194
            baseSymbolComboBox.setCurrentIndex(baseSymbolComboBox.findText(self.symData.getBaseSymbol())) ##### USED FIND TEXT
195

  
196
            additionalSymbolItem = QTableWidgetItem(self.symData.getAdditionalSymbol())
197
            additionalSymbolItem.setFlags(Qt.ItemIsEnabled)
198
            self.setItem(7, 1, additionalSymbolItem)
199

  
200
            originalPointItem = QTableWidgetItem(self.symData.getOriginalPoint())
201
            originalPointItem.setFlags(Qt.ItemIsEnabled)
202
            self.setItem(8, 1, originalPointItem)
203

  
204
            connectionPointItem = QTableWidgetItem(self.symData.getConnectionPoint())
205
            connectionPointItem.setFlags(Qt.ItemIsEnabled)
206
            self.setItem(9, 1, connectionPointItem)
207
            
208
            isExceptDetectCheckBox = self.cellWidget(10, 1)
209
            isExceptDetectCheckBox.setChecked(True if self.symData.getIsExceptDetect() == 1 else False)
210

  
211
            hasInstrumentLabelCheckBox = self.cellWidget(11, 1)
212
            hasInstrumentLabelCheckBox.setChecked(True if self.symData.getHasInstrumentLabel() == 1 else False)
213

  
214
        else:
215
            #self.setItem(0,     1,   QTableWidgetItem(""))
216
            #self.setItem(0,     1,   QTableWidgetItem(""))
217
            #self.setItem(1,     1,   QTableWidgetItem(""))
218
            #self.setItem(2,     1,   QTableWidgetItem(""))
219

  
220
            item1 = QTableWidgetItem("")
221
            item1.setFlags(Qt.ItemIsEnabled)
222
            self.setItem(0, 1, item1)
223

  
224
            item2 = QTableWidgetItem("")
225
            item2.setFlags(Qt.ItemIsEnabled)
226
            self.setItem(1, 1, item2)
227

  
228
            item3 = QTableWidgetItem("")
229
            item3.setFlags(Qt.ItemIsEnabled)
230
            self.setItem(2, 1, item3)
231

  
232

  
233
            rotationCountSpinBox = self.cellWidget(3, 1)
234
            rotationCountSpinBox.setValue(0)
235

  
236
            isContainChildCheckBox = self.cellWidget(4, 1)
237
            isContainChildCheckBox.setChecked(False)
238

  
239
            symbolTypeComboBox = self.cellWidget(5, 1)
240
            symbolTypeComboBox.setCurrentIndex(0)
241

  
242
            baseSymbolComboBox = self.cellWidget(6, 1)
243
            baseSymbolComboBox.setCurrentIndex(0)
244

  
245
            additionalSymbolItem = QTableWidgetItem("")
246
            additionalSymbolItem.setFlags(Qt.ItemIsEnabled)
247
            self.setItem(7, 1, additionalSymbolItem)
248

  
249
            originalPointItem = QTableWidgetItem("")
250
            originalPointItem.setFlags(Qt.ItemIsEnabled)
251
            self.setItem(8, 1, originalPointItem)
252

  
253
            connectionPointItem = QTableWidgetItem("")
254
            connectionPointItem.setFlags(Qt.ItemIsEnabled)
255
            self.setItem(9, 1, connectionPointItem)
256
            
257
            isExceptDetectCheckBox = self.cellWidget(10, 1)
258
            isExceptDetectCheckBox.setChecked(False)
259

  
260
            hasInstrumentLabelCheckBox = self.cellWidget(11, 1)
261
            hasInstrumentLabelCheckBox.setChecked(False)
DTI_PID/DTI_PID/READ ME.txt
99 99
- �ɺ��� ������� ���콺 ���� Ŭ���� ��� [����, ũ�Ժ���, ����] �� ������ Context Menu ǥ��
100 100
- ��µǴ� �ɺ� �̹����� Symbol Type �� ���� Tree ����
101 101
- �ɺ��� ������� ���� Ŭ�� �� SymbolEditorDialog ǥ��
102
- �ɺ��� ������� Ŭ�� �� �ϴ� QPropertyTableWidget �� �ɺ� ���� ���
102
- �ɺ��� ������� Ŭ�� �� �ϴ� QSymbolPropertyTableWidget �� �ɺ� ���� ���
103 103
- �ɺ� �巡��, ��� �� QtImageViewer �� �ɺ� ����
104 104

  
105 105
12) OcrResultDialog.py
......
108 108
- 90�� ���� ȸ���� �����ϸ�, ������ �ؽ�Ʈ�� ���������� ȸ���Ͽ� ��ġ�� �� Re-Detect ��ư�� Ŭ���� �� �ؽ�Ʈ ����
109 109
- Ȯ�� ��ư Ŭ�� �� ����� �ؽ�Ʈ�� ����, ȸ�� ������ ������ TextInfo ��ȯ
110 110

  
111
13) QPropertyTableWidget.py
111
13) QSymbolPropertyTableWidget.py
112 112
- SymbolTreeWidget ���� ���õ� �ɺ��� ������ ���
113 113
- TableWidget���� ���� �� Database�� ��� �ݿ��ϴ� ��ȹ�� �־�����, ��� �����Ƿ� ���� ���� ������
114 114

  
DTI_PID/DTI_PID/Shapes/EngineeringLineItem.py
818 818
    def hoverEnterEvent(self, event):
819 819
        self._savedColor = self.getColor()
820 820
        self.setColor(QEngineeringLineItem.HIGHLIGHT)
821
        self.update()
821

  
822
        rect = self.sceneBoundingRect()
823
        rect.setRect(rect.left() - QEngineeringLineItem.ARROW_SIZE, rect.top() - QEngineeringLineItem.ARROW_SIZE, 
824
            rect.width() + QEngineeringLineItem.ARROW_SIZE*2, rect.height() + QEngineeringLineItem.ARROW_SIZE*2)
825
        self.scene().invalidate(rect)
822 826

  
823 827
    def hoverLeaveEvent(self, event):
824 828
        self.setColor(self._savedColor)
825
        self.update()
829

  
830
        rect = self.sceneBoundingRect()
831
        rect.setRect(rect.left() - QEngineeringLineItem.ARROW_SIZE, rect.top() - QEngineeringLineItem.ARROW_SIZE, 
832
            rect.width() + QEngineeringLineItem.ARROW_SIZE*2, rect.height() + QEngineeringLineItem.ARROW_SIZE*2)
833
        self.scene().invalidate(rect)
834

  
826 835

  
827 836
    def hoverMoveEvent(self, event):
828 837
        pass
DTI_PID/DTI_PID/SmartFEED.nsi
3709 3709
  Delete "$INSTDIR\PyQt5\Qt\plugins\iconengines\qsvgicon.dll"
3710 3710
  Delete "$INSTDIR\PyQt5\Qt\bin\qt.conf"
3711 3711
  Delete "$INSTDIR\pyexpat.pyd"
3712
  Delete "$INSTDIR\PropertyTableWidget.py"
3712
  Delete "$INSTDIR\SymbolPropertyTableWidget.py"
3713 3713
  Delete "$INSTDIR\Project_UI.py"
3714 3714
  Delete "$INSTDIR\ProjectDialog.py"
3715 3715
  Delete "$INSTDIR\Project.py"
DTI_PID/DTI_PID/SymbolPropertyTableWidget.py
1
try:
2
    from PyQt5.QtCore import *
3
    from PyQt5.QtGui import *
4
    from PyQt5.QtWidgets import *
5
except ImportError:
6
    try:
7
        from PyQt4.QtCore import *
8
        from PyQt4.QtGui import *
9
    except ImportError:
10
        raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.")
11
from AppDocData import AppDocData
12
import os
13
import SymbolBase
14
import symbol
15

  
16
class QSymbolPropertyTableWidget(QTableWidget):
17
    def __init__(self):
18
        QTableWidget.__init__(self)
19
        self.project = AppDocData.instance().getCurrentProject()
20
        self.initPropertyTableWidget()
21
        self.symData = None
22

  
23
    '''
24
        @auther     Yecheol
25
        @date       2018-07-04
26
        @history    Add Instrument Label YN Column
27
                    humkyung 2018.07.08 show column header
28
    '''
29

  
30
    def initPropertyTableWidget(self):
31
        self.setColumnCount(2)
32
        self.setHorizontalHeaderLabels(['Name', 'Value'])
33
        self.horizontalHeaderItem(0).setSizeHint(QSize(25, 25))
34
        self.setRowCount(12)
35
        self.verticalHeader().hide()
36
        self.horizontalHeader().setStretchLastSection(True)
37
        self.initTitleCell()
38

  
39
        ### Rotation Count SpinBox Init
40
        rotationCountSpinBox = QSpinBox()
41
        rotationCountSpinBox.setRange(0, 3)
42
        rotationCountSpinBox.setSingleStep(1)
43
        rotationCountSpinBox.setValue(0)
44
        rotationCountSpinBox.setEnabled(False)
45
        self.setCellWidget(3, 1, rotationCountSpinBox)
46

  
47
        ### IsContainChild CheckBox Init
48
        isContainChildCheckBox = QCheckBox()
49
        isContainChildCheckBox.setEnabled(False)
50
        self.setCellWidget(4, 1, isContainChildCheckBox)
51

  
52
        ### Symbol Type ComboBox Init
53
        symbolTypeComboBox = QComboBox()
54
        for name in AppDocData.instance().getSymbolTypeComboBoxItems():
55
            symbolTypeComboBox.addItem(name)
56
        symbolTypeComboBox.setEnabled(False)
57
        self.setCellWidget(5, 1, symbolTypeComboBox)
58

  
59
        ### Base Symbol ComboBox Init
60
        baseSymbolComboBox = QComboBox()
61
        for name in AppDocData.instance().getBaseSymbolComboBoxItems():
62
            baseSymbolComboBox.addItem(name)
63
        baseSymbolComboBox.setEnabled(False)
64
        self.setCellWidget(6, 1, baseSymbolComboBox)
65

  
66
        ### IsExceptDetect CheckBox Init
67
        isExceptDetectCheckBox = QCheckBox()
68
        isExceptDetectCheckBox.setEnabled(False)
69
        self.setCellWidget(10, 1, isExceptDetectCheckBox)
70

  
71
        ### hasInstrumentLabel CheckBox Init
72
        hasInstrumentLabelCheckBox = QCheckBox()
73
        hasInstrumentLabelCheckBox.setEnabled(False)
74
        self.setCellWidget(11, 1, hasInstrumentLabelCheckBox)
75

  
76
    '''
77
        @brief  Init contents and background color in Title cell
78
    '''
79
    def initTitleCell(self):
80
        #self.setItem(0, 0, QTableWidgetItem("심볼ID"))
81
        #self.setItem(0, 0, QTableWidgetItem("심볼명"))
82
        #self.setItem(1, 0, QTableWidgetItem("임계값(%)"))
83
        #self.setItem(2, 0, QTableWidgetItem("최소 특징점 수"))
84
        #self.setItem(3, 0, QTableWidgetItem("검출 시 심볼 회전 수"))
85
        #self.setItem(4, 0, QTableWidgetItem("자식 심볼 포함 여부"))
86
        #self.setItem(5, 0, QTableWidgetItem("심볼 타입"))
87
        #self.setItem(6, 0, QTableWidgetItem("기초 심볼"))
88
        #self.setItem(7, 0, QTableWidgetItem("부가 심볼"))
89
        #self.setItem(8, 0, QTableWidgetItem("Original Point"))
90
        #self.setItem(9, 0, QTableWidgetItem("Connection Point"))
91
        #self.setItem(10, 0, QTableWidgetItem("검출 시 미포함 여부"))
92
        #self.setItem(11, 0, QTableWidgetItem("Instrument Label 여부"))
93

  
94
        item1 = QTableWidgetItem("심볼명")
95
        item1.setFlags(Qt.ItemIsEnabled)
96
        self.setItem(0, 0, item1)
97

  
98
        item2 = QTableWidgetItem("임계값(%)")
99
        item2.setFlags(Qt.ItemIsEnabled)
100
        self.setItem(1, 0, item2)
101

  
102
        item3 = QTableWidgetItem("최소 특징점 수")
103
        item3.setFlags(Qt.ItemIsEnabled)
104
        self.setItem(2, 0, item3)
105

  
106
        item4 = QTableWidgetItem("검출 시 심볼 회전 수")
107
        item4.setFlags(Qt.ItemIsEnabled)
108
        self.setItem(3, 0, item4)
109

  
110
        item5 = QTableWidgetItem("자식 심볼 포함 여부")
111
        item5.setFlags(Qt.ItemIsEnabled)
112
        self.setItem(4, 0, item5)
113

  
114
        item6 = QTableWidgetItem("심볼 타입")
115
        item6.setFlags(Qt.ItemIsEnabled)
116
        self.setItem(5, 0, item6)
117

  
118
        item7 = QTableWidgetItem("기초 심볼")
119
        item7.setFlags(Qt.ItemIsEnabled)
120
        self.setItem(6, 0, item7)
121

  
122
        item8 = QTableWidgetItem("부가 심볼")
123
        item8.setFlags(Qt.ItemIsEnabled)
124
        self.setItem(7, 0, item8)
125

  
126
        item9 = QTableWidgetItem("Original Point")
127
        item9.setFlags(Qt.ItemIsEnabled)
128
        self.setItem(8, 0, item9)
129

  
130
        item10 = QTableWidgetItem("Connection Point")
131
        item10.setFlags(Qt.ItemIsEnabled)
132
        self.setItem(9, 0, item10)
133

  
134
        item11 = QTableWidgetItem("검출 시 미포함 여부")
135
        item11.setFlags(Qt.ItemIsEnabled)
136
        self.setItem(10, 0, item11)
137

  
138
        item12 = QTableWidgetItem("Ins't 라벨 포함 여부")
139
        item12.setFlags(Qt.ItemIsEnabled)
140
        self.setItem(11, 0, item12)
141

  
142
        for index in range(self.rowCount()):
143
            self.item(index, 0).setBackground(QColor(220, 220, 220))
144

  
145
    def makeConnection(self, dirTreeWidget):
146
        dirTreeWidget.singleClicked.connect(self.getClickedSymbol)
147

  
148
    '''
149
        @history    18.04.24    Jeongwoo    If symbol.getId == -1: symData = None
150
    '''
151
    @pyqtSlot(SymbolBase.SymbolBase)
152
    def getClickedSymbol(self, symbol):
153
        if self.symData != symbol:
154
            self.symData = symbol #if symbol.getId() != -1 else None
155
            self.symbolChanged()
156

  
157
    '''
158
        @brief      Set symbol data on TableWidget
159
                    TableWidgetItem handles only string value
160
        @history    18.04.24    Jeongwoo    Add 14th row(isExceptDetect CheckBox)
161
    '''
162
    def symbolChanged(self):
163
        if self.symData.baseSymbol is not None:
164
            #self.setItem(0, 1, QTableWidgetItem(str(self.symData.getId())))
165
            #self.setItem(0, 1, QTableWidgetItem(self.symData.getName()))
166
            #self.setItem(1, 1, QTableWidgetItem(str(int(self.symData.getThreshold() * 100))))
167
            #self.setItem(2, 1, QTableWidgetItem(str(self.symData.getMinMatchCount())))
168

  
169
            Symboldata = QTableWidgetItem(self.symData.getName())
170
            Symboldata.setFlags(Qt.ItemIsEnabled)
171
            self.setItem(0, 1, Symboldata)
172

  
173
            SymbolThreshold = QTableWidgetItem(str(self.symData.getThreshold() *100))
174
            SymbolThreshold.setFlags(Qt.ItemIsEnabled)
175
            self.setItem(1, 1, SymbolThreshold)
176

  
177
            SymbolMinMatchCount = QTableWidgetItem(str(self.symData.getMinMatchCount()))
178
            SymbolMinMatchCount.setFlags(Qt.ItemIsEnabled)
179
            self.setItem(2, 1, SymbolMinMatchCount)
180

  
181
            rotationCountSpinBox = self.cellWidget(3, 1)
182
            rotationCountSpinBox.setValue(self.symData.getRotationCount())
183

  
184
            isContainChildCheckBox = self.cellWidget(4, 1)
185
            isContainChildCheckBox.setChecked(True if self.symData.getIsContainChild() == 1 else False)
186

  
187
            symbolTypeComboBox = self.cellWidget(5, 1)
188
            symbolTypeComboBox.setCurrentIndex(symbolTypeComboBox.findText(self.symData.getType())) ##### USED FIND TEXT
189
            
190
            baseSymbolComboBox = self.cellWidget(6, 1)
191
            baseSymbolComboBox.clear()
192
            for name in AppDocData.instance().getBaseSymbolComboBoxItems(self.symData.getType()):
193
                baseSymbolComboBox.addItem(name)
194
            baseSymbolComboBox.setCurrentIndex(baseSymbolComboBox.findText(self.symData.getBaseSymbol())) ##### USED FIND TEXT
195

  
196
            additionalSymbolItem = QTableWidgetItem(self.symData.getAdditionalSymbol())
197
            additionalSymbolItem.setFlags(Qt.ItemIsEnabled)
198
            self.setItem(7, 1, additionalSymbolItem)
199

  
200
            originalPointItem = QTableWidgetItem(self.symData.getOriginalPoint())
201
            originalPointItem.setFlags(Qt.ItemIsEnabled)
202
            self.setItem(8, 1, originalPointItem)
203

  
204
            connectionPointItem = QTableWidgetItem(self.symData.getConnectionPoint())
205
            connectionPointItem.setFlags(Qt.ItemIsEnabled)
206
            self.setItem(9, 1, connectionPointItem)
207
            
208
            isExceptDetectCheckBox = self.cellWidget(10, 1)
209
            isExceptDetectCheckBox.setChecked(True if self.symData.getIsExceptDetect() == 1 else False)
210

  
211
            hasInstrumentLabelCheckBox = self.cellWidget(11, 1)
212
            hasInstrumentLabelCheckBox.setChecked(True if self.symData.getHasInstrumentLabel() == 1 else False)
213

  
214
        else:
215
            #self.setItem(0,     1,   QTableWidgetItem(""))
216
            #self.setItem(0,     1,   QTableWidgetItem(""))
217
            #self.setItem(1,     1,   QTableWidgetItem(""))
218
            #self.setItem(2,     1,   QTableWidgetItem(""))
219

  
220
            item1 = QTableWidgetItem("")
221
            item1.setFlags(Qt.ItemIsEnabled)
222
            self.setItem(0, 1, item1)
223

  
224
            item2 = QTableWidgetItem("")
225
            item2.setFlags(Qt.ItemIsEnabled)
226
            self.setItem(1, 1, item2)
227

  
228
            item3 = QTableWidgetItem("")
229
            item3.setFlags(Qt.ItemIsEnabled)
230
            self.setItem(2, 1, item3)
231

  
232

  
233
            rotationCountSpinBox = self.cellWidget(3, 1)
234
            rotationCountSpinBox.setValue(0)
235

  
236
            isContainChildCheckBox = self.cellWidget(4, 1)
237
            isContainChildCheckBox.setChecked(False)
238

  
239
            symbolTypeComboBox = self.cellWidget(5, 1)
240
            symbolTypeComboBox.setCurrentIndex(0)
241

  
242
            baseSymbolComboBox = self.cellWidget(6, 1)
243
            baseSymbolComboBox.setCurrentIndex(0)
244

  
245
            additionalSymbolItem = QTableWidgetItem("")
246
            additionalSymbolItem.setFlags(Qt.ItemIsEnabled)
247
            self.setItem(7, 1, additionalSymbolItem)
248

  
249
            originalPointItem = QTableWidgetItem("")
250
            originalPointItem.setFlags(Qt.ItemIsEnabled)
251
            self.setItem(8, 1, originalPointItem)
252

  
253
            connectionPointItem = QTableWidgetItem("")
254
            connectionPointItem.setFlags(Qt.ItemIsEnabled)
255
            self.setItem(9, 1, connectionPointItem)
256
            
257
            isExceptDetectCheckBox = self.cellWidget(10, 1)
258
            isExceptDetectCheckBox.setChecked(False)
259

  
260
            hasInstrumentLabelCheckBox = self.cellWidget(11, 1)
261
            hasInstrumentLabelCheckBox.setChecked(False)
DTI_PID/DTI_PID/SymbolTreeWidget.py
8 8
        from PyQt4.QtGui import *
9 9
    except ImportError:
10 10
        raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.")
11
from AppDocData import AppDocData
11
from AppDocData import *
12 12
import os
13 13
import sys
14 14
import SymbolBase
......
35 35
        @brief      Show Context Menu
36 36
        @author     Jeongwoo
37 37
        @date       18.04.??
38
        @history    18.04.23    Jeongwoo    Symbol object Null Check when show context menu
38
        @history    Jeongwoo 2018.04.23 Symbol object Null Check when show context menu
39
                    humkyung 2018.08.14 add menu for symbol type
39 40
    '''
40 41
    def openContextMenu(self, position):
41 42
        indexes = self.selectedIndexes()
42 43
        itemPosition = self.mapTo(self, position)
43 44
        item = self.itemAt(itemPosition)
44
        sym = self.getSymbolByItemName(item, 0)
45
        text = item.text(0)
46
        if len(indexes) > 0:
47
            level = 0
48
            index = indexes[0]
49
            while index.parent().isValid():
50
                index = index.parent()
51
                level += 1
52
        if sym is not None:
45
        data = item.data(0, self.TREE_DATA_ROLE)
46
        if data is not None:
47
            sym = self.getSymbolByItemName(item, 0)
48
            text = item.text(0)
49
            if len(indexes) > 0:
50
                level = 0
51
                index = indexes[0]
52
                while index.parent().isValid():
53
                    index = index.parent()
54
                    level += 1
55
            if sym is not None:
56
                menu = QMenu()
57
                editSymbolAction = QAction(self.tr("Edit Symbol"))
58
                editSymbolAction.triggered.connect(lambda: self.editSymbolActionClickEvent(item, 0))
59
                menu.addAction(editSymbolAction)
60
                displaySymbolAction = QAction(self.tr("Display Symbol"))
61
                displaySymbolAction.triggered.connect(lambda: self.displaySymbolActionClickEvent(sym.getType(), text))
62
                menu.addAction(displaySymbolAction)
63
                deleteSymbolAction = QAction(self.tr("Delete Symbol"))
64
                deleteSymbolAction.triggered.connect(lambda: self.deleteSymbolActionClickEvent(sym.getType(), text))
65
                menu.addAction(deleteSymbolAction)
66
                menu.exec_(self.viewport().mapToGlobal(position))
67
        else:
53 68
            menu = QMenu()
54
            editSymbolAction = QAction(self.tr("Edit Symbol"))
55
            editSymbolAction.triggered.connect(lambda: self.editSymbolActionClickEvent(item, 0))
56
            menu.addAction(editSymbolAction)
57
            displaySymbolAction = QAction(self.tr("Display Symbol"))
58
            displaySymbolAction.triggered.connect(lambda: self.displaySymbolActionClickEvent(sym.getType(), text))
59
            menu.addAction(displaySymbolAction)
60
            deleteSymbolAction = QAction(self.tr("Delete Symbol"))
61
            deleteSymbolAction.triggered.connect(lambda: self.deleteSymbolActionClickEvent(sym.getType(), text))
62
            menu.addAction(deleteSymbolAction)
69
            editAttrAction = QAction(self.tr("속성 편집"))
70
            editAttrAction.triggered.connect(lambda: self.onEditAttrClicked(item, 0))
71
            menu.addAction(editAttrAction)
63 72
            menu.exec_(self.viewport().mapToGlobal(position))
64 73

  
65 74
    def editSymbolActionClickEvent(self, item, columNo):
66 75
        self.showSymbolEditorDialog(item, columNo)
67 76

  
77
    '''
78
        @brief      popup attribute editor dialog
79
        @author     humkyung
80
        @date       2018.08.13
81
    '''
82
    def onEditAttrClicked(self, item, columnNo):
83
        from AttrEditorDialog import QAttrEditorDialog
84

  
85
        try:
86
                dlg = QAttrEditorDialog(self)
87
                dlg.exec_()
88
        except Exception as ex:
89
            from App import App
90

  
91
            message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)
92
            App.mainWnd().addMessage.emit(MessageType.Error, message)
93

  
68 94
    def displaySymbolActionClickEvent(self, itemType, itemName):
69 95
        project = AppDocData.instance().getCurrentProject()
70 96
        image = QImage(os.path.join(project.getImageFilePath(), itemType, itemName, "PNG")) #itemName includes ".png"
DTI_PID/DTI_PID/UI/AttrEditor.ui
1
<?xml version="1.0" encoding="UTF-8"?>
2
<ui version="4.0">
3
 <class>AttrEditorDialog</class>
4
 <widget class="QDialog" name="AttrEditorDialog">
5
  <property name="geometry">
6
   <rect>
7
    <x>0</x>
8
    <y>0</y>
9
    <width>769</width>
10
    <height>300</height>
11
   </rect>
12
  </property>
13
  <property name="font">
14
   <font>
15
    <family>맑은 고딕</family>
16
    <weight>75</weight>
17
    <bold>true</bold>
18
   </font>
19
  </property>
20
  <property name="windowTitle">
21
   <string>속성 편집</string>
22
  </property>
23
  <layout class="QGridLayout" name="gridLayout">
24
   <item row="0" column="0">
25
    <widget class="QGroupBox" name="groupBox">
26
     <property name="title">
27
      <string>속성</string>
28
     </property>
29
     <layout class="QGridLayout" name="gridLayout_2">
30
      <item row="0" column="0">
31
       <layout class="QVBoxLayout" name="verticalLayout">
32
        <item>
33
         <layout class="QHBoxLayout" name="horizontalLayout">
34
          <item>
35
           <widget class="QLabel" name="labelSelectedSymbolType">
36
            <property name="text">
37
             <string>Selected Symbol Type</string>
38
            </property>
39
           </widget>
40
          </item>
41
          <item>
42
           <spacer name="horizontalSpacer">
43
            <property name="orientation">
44
             <enum>Qt::Horizontal</enum>
45
            </property>
46
            <property name="sizeHint" stdset="0">
47
             <size>
48
              <width>40</width>
49
              <height>20</height>
50
             </size>
51
            </property>
52
           </spacer>
53
          </item>
54
          <item alignment="Qt::AlignRight">
55
           <widget class="QPushButton" name="pushButtonAddAttr">
56
            <property name="maximumSize">
57
             <size>
58
              <width>24</width>
59
              <height>16777215</height>
60
             </size>
61
            </property>
62
            <property name="text">
63
             <string>+</string>
64
            </property>
65
           </widget>
66
          </item>
67
          <item alignment="Qt::AlignRight">
68
           <widget class="QPushButton" name="pushButtonDelAttr">
69
            <property name="maximumSize">
70
             <size>
71
              <width>24</width>
72
              <height>16777215</height>
73
             </size>
74
            </property>
75
            <property name="text">
76
             <string>-</string>
77
            </property>
78
           </widget>
79
          </item>
80
         </layout>
81
        </item>
82
        <item>
83
         <layout class="QHBoxLayout" name="horizontalLayout_2">
84
          <item>
85
           <widget class="QTableWidget" name="tableWidgetAttr">
86
            <property name="columnCount">
87
             <number>2</number>
88
            </property>
89
            <attribute name="verticalHeaderVisible">
90
             <bool>false</bool>
91
            </attribute>
92
            <column/>
93
            <column/>
94
           </widget>
95
          </item>
96
         </layout>
97
        </item>
98
       </layout>
99
      </item>
100
     </layout>
101
    </widget>
102
   </item>
103
   <item row="1" column="0">
104
    <widget class="QDialogButtonBox" name="buttonBox">
105
     <property name="orientation">
106
      <enum>Qt::Horizontal</enum>
107
     </property>
108
     <property name="standardButtons">
109
      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
110
     </property>
111
    </widget>
112
   </item>
113
  </layout>
114
 </widget>
115
 <resources/>
116
 <connections>
117
  <connection>
118
   <sender>buttonBox</sender>
119
   <signal>accepted()</signal>
120
   <receiver>AttrEditorDialog</receiver>
121
   <slot>accept()</slot>
122
   <hints>
123
    <hint type="sourcelabel">
124
     <x>248</x>
125
     <y>254</y>
126
    </hint>
127
    <hint type="destinationlabel">
128
     <x>157</x>
129
     <y>274</y>
130
    </hint>
131
   </hints>
132
  </connection>
133
  <connection>
134
   <sender>buttonBox</sender>
135
   <signal>rejected()</signal>
136
   <receiver>AttrEditorDialog</receiver>
137
   <slot>reject()</slot>
138
   <hints>
139
    <hint type="sourcelabel">
140
     <x>316</x>
141
     <y>260</y>
142
    </hint>
143
    <hint type="destinationlabel">
144
     <x>286</x>
145
     <y>274</y>
146
    </hint>
147
   </hints>
148
  </connection>
149
 </connections>
150
</ui>

내보내기 Unified diff