|
@@ -33,22 +33,27 @@ class CustomScene(QGraphicsScene):
|
|
|
if event.button() == Qt.LeftButton and self._mode == Mode.SELECT:
|
|
|
# load attributes for selected node
|
|
|
item = self.itemAt(event.scenePos(), QTransform())
|
|
|
- if not item or not isinstance(item, GraphicsNodeItem):
|
|
|
+ if not item:
|
|
|
return
|
|
|
-
|
|
|
- self._parent.tableWidget.setRowCount(0)
|
|
|
- self._parent.tableWidget.blockSignals(True)
|
|
|
- self._parent.plainTextEdit.appendPlainText("Selected item of type {}".format(item.get_type()))
|
|
|
- attrs = commons.get_attributes_of_node(self._cur_model, item.node_id)
|
|
|
- for attr in attrs:
|
|
|
- table_item_key = QTableWidgetItem(attr.key)
|
|
|
- table_item_key.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
|
|
|
- table_item_val = QTableWidgetItem(attr.val)
|
|
|
- cur_row_cnt = self._parent.tableWidget.rowCount()
|
|
|
- self._parent.tableWidget.insertRow(cur_row_cnt)
|
|
|
- self._parent.tableWidget.setItem(cur_row_cnt, 0, table_item_key)
|
|
|
- self._parent.tableWidget.setItem(cur_row_cnt, 1, table_item_val)
|
|
|
- self._parent.tableWidget.blockSignals(False)
|
|
|
+ elif isinstance(item, GraphicsNodeItem):
|
|
|
+ self._parent.tableWidget.setRowCount(0)
|
|
|
+ self._parent.tableWidget.blockSignals(True)
|
|
|
+ self._parent.plainTextEdit.appendPlainText("Selected node of type {}".format(item.get_type()))
|
|
|
+ attrs = commons.get_attributes_of_node(self._cur_model, item.node_id)
|
|
|
+ for attr in attrs:
|
|
|
+ table_item_key = QTableWidgetItem(attr.key)
|
|
|
+ table_item_key.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
|
|
|
+ table_item_val = QTableWidgetItem(attr.val)
|
|
|
+ cur_row_cnt = self._parent.tableWidget.rowCount()
|
|
|
+ self._parent.tableWidget.insertRow(cur_row_cnt)
|
|
|
+ self._parent.tableWidget.setItem(cur_row_cnt, 0, table_item_key)
|
|
|
+ self._parent.tableWidget.setItem(cur_row_cnt, 1, table_item_val)
|
|
|
+ self._parent.tableWidget.blockSignals(False)
|
|
|
+
|
|
|
+ elif isinstance(item, GraphicsEdgeItem):
|
|
|
+ self._parent.plainTextEdit.appendPlainText("Selected edge")
|
|
|
+ else:
|
|
|
+ pass
|
|
|
|
|
|
QGraphicsScene.mousePressEvent(self, event)
|
|
|
|
|
@@ -89,8 +94,8 @@ class CustomScene(QGraphicsScene):
|
|
|
|
|
|
QGraphicsScene.keyPressEvent(self, event)
|
|
|
|
|
|
- def draw_edge(self, from_item, to_item, is_new):
|
|
|
- # type: (GraphicsNodeItem, GraphicsNodeItem, bool) -> None
|
|
|
+ def draw_edge(self, from_item, to_item, is_new, edge_id=None):
|
|
|
+ # type: (GraphicsNodeItem, GraphicsNodeItem, bool, str) -> None
|
|
|
"""
|
|
|
Draw edge on screen between the node items "from_item" and "to_item".
|
|
|
If is_new, additionally instantiate the edge in the model (if supported).
|
|
@@ -102,32 +107,42 @@ class CustomScene(QGraphicsScene):
|
|
|
self._parent.plainTextEdit.appendPlainText("Error: Edge not supported between types {} and {}".format(from_type, to_type))
|
|
|
return
|
|
|
|
|
|
- line = GraphicsEdgeItem(from_item, to_item)
|
|
|
+ line = GraphicsEdgeItem(from_item, to_item, edge_id)
|
|
|
line.setFlag(QGraphicsItem.ItemIsMovable, False)
|
|
|
line.setFlag(QGraphicsItem.ItemIsSelectable, False)
|
|
|
self.addItem(line)
|
|
|
line.redraw()
|
|
|
|
|
|
if is_new:
|
|
|
- mvops.add_edge(self._cur_model, from_item.node_id, to_item.node_id)
|
|
|
+ edge_id = mvops.add_edge(self._cur_model, from_item.node_id, to_item.node_id)
|
|
|
+ line.edge_id = edge_id
|
|
|
self._parent.plainTextEdit.appendPlainText("Added edge between {} and {} to model".format(from_type, to_type))
|
|
|
|
|
|
def _handle_keypress_delete(self, selected):
|
|
|
- for item in selected:
|
|
|
- # delete node in model (also deletes edges in model)
|
|
|
- if isinstance(item, GraphicsNodeItem):
|
|
|
- self._parent.plainTextEdit.appendPlainText("Deleting node of type {}".format(item.get_type()))
|
|
|
- mvops.delete_node(self._cur_model, item.node_id)
|
|
|
-
|
|
|
- # in view, delete edges that were connected to this node as well
|
|
|
- # modelverse does this on its own so do not delete edges explicitly here
|
|
|
- for edge in self.items():
|
|
|
- if not isinstance(edge, GraphicsEdgeItem):
|
|
|
- continue
|
|
|
- if edge.from_item.node_id == item.node_id or edge.to_item.node_id == item.node_id:
|
|
|
- self.removeItem(edge)
|
|
|
-
|
|
|
- self.removeItem(item)
|
|
|
+ if not len(selected) == 1:
|
|
|
+ return
|
|
|
+ item = selected[0]
|
|
|
+
|
|
|
+ if isinstance(item, GraphicsNodeItem):
|
|
|
+ # delete node in model (also deletes edges connected to it in model)
|
|
|
+ self._parent.plainTextEdit.appendPlainText("Deleting node of type {}".format(item.get_type()))
|
|
|
+ mvops.delete_node(self._cur_model, item.node_id)
|
|
|
+
|
|
|
+ # in view, delete edges that were connected to this node as well
|
|
|
+ # modelverse does this on its own so do not delete edges explicitly here
|
|
|
+ for edge in self.items():
|
|
|
+ if not isinstance(edge, GraphicsEdgeItem):
|
|
|
+ continue
|
|
|
+ if edge.from_item.node_id == item.node_id or edge.to_item.node_id == item.node_id:
|
|
|
+ self.removeItem(edge)
|
|
|
+
|
|
|
+ self.removeItem(item)
|
|
|
+
|
|
|
+ if isinstance(item, GraphicsEdgeItem):
|
|
|
+ self._parent.plainTextEdit.appendPlainText("Deleting edge")
|
|
|
+ mvops.delete_edge(self._cur_model, item.edge_id)
|
|
|
+ self.removeItem(item)
|
|
|
+
|
|
|
|
|
|
def _handle_keypress_attribute(self, selected):
|
|
|
if not len(selected) == 1:
|