pygui: fix redrawing edge labels for multiple canvases, updated edit menu to account for multiple canvases, fixed issue with not setting menubar state when joining a session, starting point for hide/show nodes and related edges

This commit is contained in:
Blake Harnden 2021-01-08 10:10:46 -08:00
parent bc540e0669
commit 35cc8fab65
8 changed files with 83 additions and 23 deletions

View file

@ -634,10 +634,10 @@ class CanvasEdge(Edge):
if not self.linked_wireless:
return
if self.id:
# self.src.canvas.itemconfig(self.id, state=tk.HIDDEN)
self.src.canvas.itemconfig(self.id, state=tk.HIDDEN)
self.src.canvas.dtag(self.id, tags.EDGE)
if self.id2:
# self.dst.canvas.itemconfig(self.id2, state=tk.HIDDEN)
self.dst.canvas.itemconfig(self.id2, state=tk.HIDDEN)
self.dst.canvas.dtag(self.id2, tags.EDGE)
# add antenna to node
if self.src.is_wireless() and not self.dst.is_wireless():

View file

@ -306,6 +306,32 @@ class CanvasGraph(tk.Canvas):
self.selection.clear()
self.core.deleted_canvas_nodes(nodes)
def hide_selected_objects(self) -> None:
edges = set()
for object_id in self.selection:
# delete selection box
selection_id = self.selection[object_id]
self.delete(selection_id)
# hide node and related edges
if object_id in self.nodes:
canvas_node = self.nodes[object_id]
canvas_node.hide()
# hide related edges
for edge in canvas_node.edges:
if edge in edges:
continue
edges.add(edge)
def show_hidden(self) -> None:
edges = set()
for node in self.nodes.values():
node.show()
for edge in node.edges:
if edge in edges:
continue
edges.add(edge)
def zoom(self, event: tk.Event, factor: float = None) -> None:
if not factor:
factor = ZOOM_IN if event.delta > 0 else ZOOM_OUT

View file

@ -165,8 +165,16 @@ class CanvasManager:
unique_id = self.notebook.select()
self.notebook.forget(unique_id)
canvas_id = self.canvas_ids.pop(unique_id)
self.canvases.pop(canvas_id)
# TODO: handle clearing out canvas related nodes and links from core client
canvas = self.canvases.pop(canvas_id)
edges = set()
for node in canvas.nodes.values():
node.delete()
while node.edges:
edge = node.edges.pop()
if edge in edges:
continue
edges.add(edge)
edge.delete()
def join(self, session: Session) -> None:
# clear out all canvas

View file

@ -63,6 +63,7 @@ class CanvasNode:
self.wireless_edges: Set[CanvasWirelessEdge] = set()
self.antennas: List[int] = []
self.antenna_images: Dict[int, PhotoImage] = {}
self.hidden: bool = False
self.setup_bindings()
self.context: tk.Menu = tk.Menu(self.canvas)
themes.style_menu(self.context)
@ -409,3 +410,13 @@ class CanvasNode:
def is_wireless(self) -> bool:
return NodeUtils.is_wireless_node(self.core_node.type)
def hide(self) -> None:
self.hidden = True
self.canvas.itemconfig(self.id, state=tk.HIDDEN)
self.canvas.itemconfig(self.text_id, state=tk.HIDDEN)
def show(self) -> None:
self.hidden = False
self.canvas.itemconfig(self.id, state=tk.NORMAL)
self.canvas.itemconfig(self.text_id, state=tk.NORMAL)

View file

@ -14,6 +14,7 @@ NODE: str = "node"
WALLPAPER: str = "wallpaper"
SELECTION: str = "selectednodes"
MARKER: str = "marker"
HIDDEN: str = "hidden"
ORGANIZE_TAGS: List[str] = [
WALLPAPER,
GRIDLINE,