updates to support multiple links between nodes in pygui, initially handling multiple wireless links

This commit is contained in:
Blake Harnden 2020-04-14 15:51:28 -07:00
parent cd8157eff7
commit 3c4a908fd5
6 changed files with 97 additions and 20 deletions

View file

@ -11,6 +11,7 @@ from core.gui.graph.edges import (
EDGE_WIDTH,
CanvasEdge,
CanvasWirelessEdge,
arc_edges,
create_edge_token,
)
from core.gui.graph.enums import GraphMode, ScaleOption
@ -198,11 +199,13 @@ class CanvasGraph(tk.Canvas):
self.tag_lower(tags.GRIDLINE)
self.tag_lower(self.grid)
def add_wireless_edge(self, src: CanvasNode, dst: CanvasNode):
def add_wireless_edge(
self, src: CanvasNode, dst: CanvasNode, network_id: int = None
):
"""
add a wireless edge between 2 canvas nodes
"""
token = create_edge_token(src.id, dst.id)
token = create_edge_token(src.id, dst.id, network_id)
src_pos = self.coords(src.id)
dst_pos = self.coords(dst.id)
edge = CanvasWirelessEdge(self, src.id, dst.id, src_pos, dst_pos, token)
@ -211,13 +214,21 @@ class CanvasGraph(tk.Canvas):
dst.wireless_edges.add(edge)
self.tag_raise(src.id)
self.tag_raise(dst.id)
# update arcs when there are multiple links
common_edges = list(src.wireless_edges & dst.wireless_edges)
arc_edges(common_edges)
def delete_wireless_edge(self, src: CanvasNode, dst: CanvasNode):
token = create_edge_token(src.id, dst.id)
def delete_wireless_edge(
self, src: CanvasNode, dst: CanvasNode, network_id: int = None
):
token = create_edge_token(src.id, dst.id, network_id)
edge = self.wireless_edges.pop(token)
edge.delete()
src.wireless_edges.remove(edge)
dst.wireless_edges.remove(edge)
# update arcs when there are multiple links
common_edges = list(src.wireless_edges & dst.wireless_edges)
arc_edges(common_edges)
def draw_session(self, session: core_pb2.Session):
"""