def _create_temporary_connection(self): """Creates a placeholder connection view :return: New placeholder connection :rtype: rafcon.gui.mygaphas.items.connection.ConnectionPlaceholderView """ if self._is_transition: self._connection_v = TransitionPlaceholderView(self._parent_state_v.hierarchy_level) else: self._connection_v = DataFlowPlaceholderView(self._parent_state_v.hierarchy_level) self.view.canvas.add(self._connection_v, self._parent_state_v)
class ConnectionTool(gaphas.tool.ConnectHandleTool): def __init__(self): super(ConnectionTool, self).__init__() self._connection_v = None self._start_port_v = None self._parent_state_v = None self._is_transition = False self._current_sink = None def on_button_release(self, event): self._is_transition = False self._connection_v = None self._start_port_v = None self._parent_state_v = None self._current_sink = None self.grabbed_item = None self.grabbed_handle = None def _set_motion_handle(self, event): """Sets motion handle to currently grabbed handle """ item = self.grabbed_item handle = self.grabbed_handle pos = event.x, event.y self.motion_handle = HandleInMotion(item, handle, self.view) self.motion_handle.GLUE_DISTANCE = self._parent_state_v.border_width self.motion_handle.start_move(pos) def _create_temporary_connection(self): """Creates a placeholder connection view :return: New placeholder connection :rtype: rafcon.gui.mygaphas.items.connection.ConnectionPlaceholderView """ if self._is_transition: self._connection_v = TransitionPlaceholderView( self._parent_state_v.hierarchy_level) else: self._connection_v = DataFlowPlaceholderView( self._parent_state_v.hierarchy_level) self.view.canvas.add(self._connection_v, self._parent_state_v) def _handle_temporary_connection(self, old_sink, new_sink, of_target=True): """Connect connection to new_sink If new_sink is set, the connection origin or target will be set to new_sink. The connection to old_sink is being removed. :param gaphas.aspect.ConnectionSink old_sink: Old sink (if existing) :param gaphas.aspect.ConnectionSink new_sink: New sink (if existing) :param bool of_target: Whether the origin or target will be reconnected :return: """ def sink_set_and_differs(sink_a, sink_b): if not sink_a: return False if not sink_b: return True if sink_a.port != sink_b.port: return True return False if sink_set_and_differs(old_sink, new_sink): sink_port_v = old_sink.port.port_v self._disconnect_temporarily(sink_port_v, target=of_target) if sink_set_and_differs(new_sink, old_sink): sink_port_v = new_sink.port.port_v self._connect_temporarily(sink_port_v, target=of_target) def _connect_temporarily(self, port_v, target=True): """Set a connection between the current connection and the given port :param rafcon.gui.mygaphas.items.ports.PortView port_v: The port to be connected :param bool target: Whether the connection origin or target should be connected """ if target: handle = self._connection_v.to_handle() else: handle = self._connection_v.from_handle() port_v.add_connected_handle(handle, self._connection_v, moving=True) port_v.tmp_connect(handle, self._connection_v) self._connection_v.set_port_for_handle(port_v, handle) # Redraw state of port to make hover state visible self._redraw_port(port_v) def _disconnect_temporarily(self, port_v, target=True): """Removes a connection between the current connection and the given port :param rafcon.gui.mygaphas.items.ports.PortView port_v: The port that was connected :param bool target: Whether the connection origin or target should be disconnected """ if target: handle = self._connection_v.to_handle() else: handle = self._connection_v.from_handle() port_v.remove_connected_handle(handle) port_v.tmp_disconnect() self._connection_v.reset_port_for_handle(handle) # Redraw state of port to make hover state visible self._redraw_port(port_v) def _redraw_port(self, port_v): self.view.queue_draw_area(*port_v.get_port_area(self.view))