pygui edge code cleanup for node label drawing
This commit is contained in:
parent
0203d4178d
commit
42979f1bb3
1 changed files with 57 additions and 52 deletions
|
@ -75,7 +75,9 @@ class Edge:
|
||||||
self.dst = dst
|
self.dst = dst
|
||||||
self.arc = 0
|
self.arc = 0
|
||||||
self.token = None
|
self.token = None
|
||||||
|
self.src_label = None
|
||||||
self.middle_label = None
|
self.middle_label = None
|
||||||
|
self.dst_label = None
|
||||||
self.color = EDGE_COLOR
|
self.color = EDGE_COLOR
|
||||||
self.width = EDGE_WIDTH
|
self.width = EDGE_WIDTH
|
||||||
|
|
||||||
|
@ -146,6 +148,44 @@ class Edge:
|
||||||
else:
|
else:
|
||||||
self.canvas.itemconfig(self.middle_label, text=text)
|
self.canvas.itemconfig(self.middle_label, text=text)
|
||||||
|
|
||||||
|
def node_label_positions(self) -> Tuple[Tuple[float, float], Tuple[float, float]]:
|
||||||
|
src_x, src_y, _, _, dst_x, dst_y = self.canvas.coords(self.id)
|
||||||
|
v1 = dst_x - src_x
|
||||||
|
v2 = dst_y - src_y
|
||||||
|
ux = TEXT_DISTANCE * v1
|
||||||
|
uy = TEXT_DISTANCE * v2
|
||||||
|
src_x = src_x + ux
|
||||||
|
src_y = src_y + uy
|
||||||
|
dst_x = dst_x - ux
|
||||||
|
dst_y = dst_y - uy
|
||||||
|
return (src_x, src_y), (dst_x, dst_y)
|
||||||
|
|
||||||
|
def src_label_text(self, text: str) -> None:
|
||||||
|
if self.src_label is None:
|
||||||
|
src_pos, _ = self.node_label_positions()
|
||||||
|
self.src_label = self.canvas.create_text(
|
||||||
|
*src_pos,
|
||||||
|
text=text,
|
||||||
|
justify=tk.CENTER,
|
||||||
|
font=self.canvas.app.edge_font,
|
||||||
|
tags=tags.LINK_INFO,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.canvas.itemconfig(self.src_label, text=text)
|
||||||
|
|
||||||
|
def dst_label_text(self, text: str) -> None:
|
||||||
|
if self.dst_label is None:
|
||||||
|
_, dst_pos = self.node_label_positions()
|
||||||
|
self.dst_label = self.canvas.create_text(
|
||||||
|
*dst_pos,
|
||||||
|
text=text,
|
||||||
|
justify=tk.CENTER,
|
||||||
|
font=self.canvas.app.edge_font,
|
||||||
|
tags=tags.LINK_INFO,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.canvas.itemconfig(self.dst_label, text=text)
|
||||||
|
|
||||||
def move_node(self, node_id: int, pos: Tuple[float, float]) -> None:
|
def move_node(self, node_id: int, pos: Tuple[float, float]) -> None:
|
||||||
if self.src == node_id:
|
if self.src == node_id:
|
||||||
self.move_src(pos)
|
self.move_src(pos)
|
||||||
|
@ -167,10 +207,22 @@ class Edge:
|
||||||
self.canvas.coords(self.id, *src_pos, *arc_pos, *dst_pos)
|
self.canvas.coords(self.id, *src_pos, *arc_pos, *dst_pos)
|
||||||
if self.middle_label:
|
if self.middle_label:
|
||||||
self.canvas.coords(self.middle_label, *arc_pos)
|
self.canvas.coords(self.middle_label, *arc_pos)
|
||||||
|
src_pos, dst_pos = self.node_label_positions()
|
||||||
|
if self.src_label:
|
||||||
|
self.canvas.coords(self.src_label, *src_pos)
|
||||||
|
if self.dst_label:
|
||||||
|
self.canvas.coords(self.dst_label, *dst_pos)
|
||||||
|
|
||||||
def delete(self) -> None:
|
def delete(self) -> None:
|
||||||
|
logging.debug("deleting canvas edge, id: %s", self.id)
|
||||||
self.canvas.delete(self.id)
|
self.canvas.delete(self.id)
|
||||||
|
self.canvas.delete(self.src_label)
|
||||||
self.canvas.delete(self.middle_label)
|
self.canvas.delete(self.middle_label)
|
||||||
|
self.canvas.delete(self.dst_label)
|
||||||
|
self.id = None
|
||||||
|
self.src_label = None
|
||||||
|
self.middle_label = None
|
||||||
|
self.dst_label = None
|
||||||
|
|
||||||
|
|
||||||
class CanvasWirelessEdge(Edge):
|
class CanvasWirelessEdge(Edge):
|
||||||
|
@ -219,10 +271,6 @@ class CanvasEdge(Edge):
|
||||||
self.draw(src_pos, dst_pos)
|
self.draw(src_pos, dst_pos)
|
||||||
self.set_binding()
|
self.set_binding()
|
||||||
|
|
||||||
def move_node(self, node_id: int, pos: Tuple[float, float]) -> None:
|
|
||||||
super().move_node(node_id, pos)
|
|
||||||
self.update_labels()
|
|
||||||
|
|
||||||
def set_binding(self) -> None:
|
def set_binding(self) -> None:
|
||||||
self.canvas.tag_bind(self.id, "<ButtonRelease-3>", self.create_context)
|
self.canvas.tag_bind(self.id, "<ButtonRelease-3>", self.create_context)
|
||||||
|
|
||||||
|
@ -230,19 +278,7 @@ class CanvasEdge(Edge):
|
||||||
self.link = link
|
self.link = link
|
||||||
self.draw_labels()
|
self.draw_labels()
|
||||||
|
|
||||||
def get_coordinates(self) -> [float, float, float, float]:
|
def create_node_labels(self) -> Tuple[str, str]:
|
||||||
x1, y1, _, _, x2, y2 = self.canvas.coords(self.id)
|
|
||||||
v1 = x2 - x1
|
|
||||||
v2 = y2 - y1
|
|
||||||
ux = TEXT_DISTANCE * v1
|
|
||||||
uy = TEXT_DISTANCE * v2
|
|
||||||
x1 = x1 + ux
|
|
||||||
y1 = y1 + uy
|
|
||||||
x2 = x2 - ux
|
|
||||||
y2 = y2 - uy
|
|
||||||
return x1, y1, x2, y2
|
|
||||||
|
|
||||||
def create_labels(self) -> Tuple[str, str]:
|
|
||||||
label_one = None
|
label_one = None
|
||||||
if self.link.HasField("interface_one"):
|
if self.link.HasField("interface_one"):
|
||||||
label_one = interface_label(self.link.interface_one)
|
label_one = interface_label(self.link.interface_one)
|
||||||
|
@ -252,38 +288,13 @@ class CanvasEdge(Edge):
|
||||||
return label_one, label_two
|
return label_one, label_two
|
||||||
|
|
||||||
def draw_labels(self) -> None:
|
def draw_labels(self) -> None:
|
||||||
x1, y1, x2, y2 = self.get_coordinates()
|
src_text, dst_text = self.create_node_labels()
|
||||||
label_one, label_two = self.create_labels()
|
self.src_label_text(src_text)
|
||||||
self.text_src = self.canvas.create_text(
|
self.dst_label_text(dst_text)
|
||||||
x1,
|
|
||||||
y1,
|
|
||||||
text=label_one,
|
|
||||||
justify=tk.CENTER,
|
|
||||||
font=self.canvas.app.edge_font,
|
|
||||||
tags=tags.LINK_INFO,
|
|
||||||
)
|
|
||||||
self.text_dst = self.canvas.create_text(
|
|
||||||
x2,
|
|
||||||
y2,
|
|
||||||
text=label_two,
|
|
||||||
justify=tk.CENTER,
|
|
||||||
font=self.canvas.app.edge_font,
|
|
||||||
tags=tags.LINK_INFO,
|
|
||||||
)
|
|
||||||
|
|
||||||
def redraw(self) -> None:
|
def redraw(self) -> None:
|
||||||
super().redraw()
|
super().redraw()
|
||||||
label_one, label_two = self.create_labels()
|
self.draw_labels()
|
||||||
self.canvas.itemconfig(self.text_src, text=label_one)
|
|
||||||
self.canvas.itemconfig(self.text_dst, text=label_two)
|
|
||||||
|
|
||||||
def update_labels(self) -> None:
|
|
||||||
"""
|
|
||||||
Move edge labels based on current position.
|
|
||||||
"""
|
|
||||||
x1, y1, x2, y2 = self.get_coordinates()
|
|
||||||
self.canvas.coords(self.text_src, x1, y1)
|
|
||||||
self.canvas.coords(self.text_dst, x2, y2)
|
|
||||||
|
|
||||||
def set_throughput(self, throughput: float) -> None:
|
def set_throughput(self, throughput: float) -> None:
|
||||||
throughput = 0.001 * throughput
|
throughput = 0.001 * throughput
|
||||||
|
@ -347,12 +358,6 @@ class CanvasEdge(Edge):
|
||||||
else:
|
else:
|
||||||
src_node.add_antenna()
|
src_node.add_antenna()
|
||||||
|
|
||||||
def delete(self) -> None:
|
|
||||||
logging.debug("Delete canvas edge, id: %s", self.id)
|
|
||||||
super().delete()
|
|
||||||
self.canvas.delete(self.text_src)
|
|
||||||
self.canvas.delete(self.text_dst)
|
|
||||||
|
|
||||||
def reset(self) -> None:
|
def reset(self) -> None:
|
||||||
self.canvas.delete(self.middle_label)
|
self.canvas.delete(self.middle_label)
|
||||||
self.middle_label = None
|
self.middle_label = None
|
||||||
|
|
Loading…
Reference in a new issue