프로젝트

일반

사용자정보

개정판 a52b2a4c

IDa52b2a4c5f1550f60f105f7453cbd9d538abe156
상위 3a9d8155
하위 98db97f5

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

issue #567: user can freeze line no in graphics view

Change-Id: I47b639726acb6a8547166cbc9cf911e8a33527da

차이점 보기:

DTI_PID/DTI_PID/ItemTreeWidget.py
147 147
                    pickColorAction.triggered.connect(lambda : self.pickColorClickEvent(item))
148 148
                    menu.addAction(pickColorAction)
149 149
                    explode_action = QAction(self.tr("Explode"))
150
                    freeze = data.get_property('Freeze')
150
                    freeze = data.prop('Freeze')
151 151
                    explode_action.setEnabled(not freeze)
152 152
                    explode_action.triggered.connect(lambda : self.explode_line_no(item))
153 153
                    menu.addAction(explode_action)
......
162 162
                    lineTypeAction.triggered.connect(lambda : self.lineTypeClickEvent(item))
163 163
                    menu.addAction(lineTypeAction)
164 164
                    line_no = item.parent().data(0, self.TREE_DATA_ROLE)
165
                    freeze = line_no.get_property('Freeze')
165
                    freeze = line_no.prop('Freeze')
166 166
                    explode_action.setEnabled(not freeze)
167 167
                    explode_action = QAction(self.tr("Explode"))
168 168
                    explode_action.triggered.connect(lambda : self.explode_line_run(item))
......
217 217
                self.explode_line_no(self.LineNoTreeItem.child(i))
218 218
        finally:
219 219
            for item in [item for item in self.scene.items() if hasattr(item, '_owner') and item.owner is not None]:
220
                if type(item.owner) is QEngineeringLineNoTextItem and 'False' == str(item.owner.get_property('Freeze')):
220
                if type(item.owner) is QEngineeringLineNoTextItem and 'False' == str(item.owner.property('Freeze')):
221 221
                    item.owner = None
222 222

  
223 223
    def reverse_line_flow(self, lineNoTreeWidgetItem):
DTI_PID/DTI_PID/LineNoTracer.py
58 58

  
59 59
        connected_items = []
60 60
        
61
        _from = lineno.get_property('From')
62
        _to = lineno.get_property('To')
61
        _from = lineno.prop('From')
62
        _to = lineno.prop('To')
63 63
        if _from and _to and lineno.empty():
64 64
            connected_items = self.find_connected_objects(_from, to=_to)
65 65
            if _from in connected_items and _to in connected_items:
......
156 156
                configs = docData.getConfigs('Line No', 'Configuration')
157 157

  
158 158
                for lineno in self._lineNos:
159
                    _from = lineno.get_property('From')
160
                    _to = lineno.get_property('To')
159
                    _from = lineno.prop('From')
160
                    _to = lineno.prop('To')
161 161
                    if _from and _to:
162 162
                        _from.owner = lineno
163 163
                        _to.owner = lineno
......
275 275

  
276 276
                # find primary lines
277 277
                # sort line no with from,to value
278
                self._lineNos.sort(key=lambda line_no:(1 if line_no.get_property('From') else 0)+(1 if line_no.get_property('To') else 0),reverse=True)
278
                self._lineNos.sort(key=lambda line_no:(1 if line_no.prop('From') else 0)+(1 if line_no.prop('To') else 0),reverse=True)
279 279
                for lineno in self._lineNos:
280 280
                    if displayMessage: displayMessage.emit('{} {}'.format(lineno.text(), 'Topology Construction'))
281 281
                    self.find_primary_lines(lineno)
DTI_PID/DTI_PID/Shapes/EngineeringFreezeItem.py
1
# coding: utf-8
2
""" This is engineering freeze item module """
3

  
4
import os.path
5
import copy, sys
6
try:
7
    from PyQt5.QtCore import *
8
    from PyQt5.QtGui import *
9
    from PyQt5.QtWidgets import *
10
except ImportError:
11
    try:
12
        from PyQt4.QtCore import Qt, QRectF, pyqtSignal, QT_VERSION_STR
13
        from PyQt4.QtGui import QGraphicsView, QGraphicsScene, QImage, QPixmap, QPainterPath, QFileDialog
14
    except ImportError:
15
        raise ImportError("ImageViewerQt: Requires PyQt5 or PyQt4.")
16

  
17
"""
18
    A {FreezeItem} is the graphical representation of a {LineNo.Freeze}.
19
"""
20
class QEngineeringFreezeItem(QGraphicsRectItem):
21
    """ This is engineering freeze item class """
22
    FREEZE_SIZE = 16
23

  
24
    def __init__(self, x, y, width, height):
25
        QGraphicsRectItem.__init__(self, x, y, width, height)
26
        self.setFlags(QGraphicsItem.ItemIsSelectable)
27
        self.setToolTip('Freeze')
28

  
29
    def mouseDoubleClickEvent(self, event, isDataList=False):
30
        """ toggle freeze value """
31

  
32
        line_no = self.parentItem()
33
        freeze = not line_no.prop('Freeze')
34
        line_no.set_property('Freeze', freeze)
35

  
36
        self.setBrush(Qt.gray) if freeze else self.setBrush(Qt.white)
37
        self.update()
DTI_PID/DTI_PID/Shapes/EngineeringLineNoTextItem.py
1 1
# coding: utf-8
2
""" This is engineering line no text item module """
3

  
2 4
import os.path
3 5
import sys
4 6
import copy
......
31 33
    '''
32 34
    def __init__(self, uid=None, parent=None):
33 35
        from SymbolAttr import SymbolProp
36
        from EngineeringFreezeItem import QEngineeringFreezeItem
34 37

  
35 38
        QEngineeringTextItem.__init__(self, uid, parent)
36 39

  
37 40
        self._properties = {SymbolProp(None, 'From', 'Comp Item'):None, SymbolProp(None, 'To', 'Comp Item'):None, SymbolProp(None, 'Freeze', 'Boolean'):False}
38 41
        self._runs = []
39 42

  
43
        """ create freeze control """
44
        self.freeze_item = QEngineeringFreezeItem(0, 0, QEngineeringFreezeItem.FREEZE_SIZE, QEngineeringFreezeItem.FREEZE_SIZE)
45
        self.freeze_item.setParentItem(self)
46
        self.freeze_item.setZValue(self.zValue() + 1)
47
        self.freeze_item.setPen(Qt.black)
48

  
40 49
    @property
41 50
    def properties(self):
42 51
        """ getter of properties """
......
54 63
        """ setter of properties """
55 64
        self._properties = value
56 65

  
57
    def get_property(self, property):
66
    def prop(self, property):
58 67
        """ return property with given value """
59 68
        matches = [prop for prop,_ in self.properties.items() if prop.Attribute == property]
60 69
        return self.properties[matches[0]] if matches else None
......
115 124
        if event.key() == Qt.Key_C:
116 125
            self.reverse()
117 126

  
127
    """
128
    def paint(self, painter, options=None, widget=None):
129
        QEngineeringTextItem.paint(self, painter, options, widget)
130
        if self.freeze_item is None:
131
            from EngineeringFreezeItem import QEngineeringFreezeItem
132

  
133
            self.freeze_item = QEngineeringFreezeItem(0, 0, QEngineeringFreezeItem.FREEZE_SIZE, QEngineeringFreezeItem.FREEZE_SIZE)
134
            self.freeze_item.setParentItem(self)
135
            self.freeze_item.setZValue(self.zValue() + 1)
136
            self.freeze_item.setPen(Qt.black)
137
    """
138

  
118 139
    def reverse(self):
119 140
        """ reverse line routine """
120 141
        
121 142
        if self.runs:
122 143
            self.runs[0].reverse()
123
            _from = self.get_property('From')
124
            _to = self.get_property('To')
144
            _from = self.prop('From')
145
            _to = self.prop('To')
125 146
            self.set_property('From', _to)
126 147
            self.set_property('To', _from)
127 148

  
......
356 377
            dataPath = docdata.getErrorItemSvgPath()
357 378
            origin = [int(pt) for pt in docdata.getAppConfigs('app', 'error origin point')[0].value.split(',')]
358 379

  
359
            line_from = self.get_property('From')
360
            line_to = self.get_property('To')
380
            line_from = self.prop('From')
381
            line_to = self.prop('To')
361 382

  
362 383
            end_break_names = docdata.getSymbolListByType('type', 'End Break')
363 384
            if len(end_break_names) is 0:
......
452 473
    def explode(self):
453 474
        """ explode line no """
454 475

  
455
        if False == self.get_property('Freeze'):
476
        if False == self.prop('Freeze'):
456 477
            try:
457 478
                for index in reversed(range(len(self.runs))):
458 479
                    self.runs[index].explode()
DTI_PID/DTI_PID/Shapes/SymbolSvgItem.py
139 139
        matches = [prop for prop,_ in self._properties.items() if prop.Attribute == property]
140 140
        if matches: self._properties[matches[0]] = value
141 141

  
142
    def property(self, name):
142
    def prop(self, name):
143 143
        """ return the value of given property with name """
144 144
        matches = [(prop,value) for prop,value in self.properties.items() if prop.Attribute == name]
145 145
        if matches: return matches[0][1]

내보내기 Unified diff

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