개정판 a52b2a4c
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