initial classes to help support creating layers for toggling visibility on the canvas for associated items
This commit is contained in:
parent
5e2ca0f549
commit
f72d0d8a69
5 changed files with 176 additions and 0 deletions
|
@ -25,6 +25,7 @@ from core.gui.graph.edges import (
|
|||
create_edge_token,
|
||||
)
|
||||
from core.gui.graph.enums import GraphMode, ScaleOption
|
||||
from core.gui.graph.layers import CanvasLayers
|
||||
from core.gui.graph.node import CanvasNode
|
||||
from core.gui.graph.shape import Shape
|
||||
from core.gui.graph.shapeutils import ShapeType, is_draw_shape, is_marker
|
||||
|
@ -62,6 +63,7 @@ class CanvasGraph(tk.Canvas):
|
|||
super().__init__(master, highlightthickness=0, background="#cccccc")
|
||||
self.app: "Application" = app
|
||||
self.core: "CoreClient" = core
|
||||
self.layers = CanvasLayers(self)
|
||||
self.mode: GraphMode = GraphMode.SELECT
|
||||
self.annotation_type: Optional[ShapeType] = None
|
||||
self.selection: Dict[int, int] = {}
|
||||
|
|
58
daemon/core/gui/graph/layers.py
Normal file
58
daemon/core/gui/graph/layers.py
Normal file
|
@ -0,0 +1,58 @@
|
|||
import tkinter as tk
|
||||
from typing import TYPE_CHECKING, Dict, Iterable, Set
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from core.gui.graph.graph import CanvasGraph
|
||||
|
||||
|
||||
class CanvasLayers:
|
||||
def __init__(self, canvas: "CanvasGraph"):
|
||||
self.canvas: "CanvasGraph" = canvas
|
||||
self.layers: Dict[str, Set[int]] = {}
|
||||
self.hidden: Set[str] = set()
|
||||
|
||||
def names(self) -> Iterable[str]:
|
||||
return self.layers.keys()
|
||||
|
||||
def add_layer(self, name: str) -> bool:
|
||||
if name in self.layers:
|
||||
return False
|
||||
else:
|
||||
self.layers[name] = set()
|
||||
return True
|
||||
|
||||
def delete_layer(self, name: str) -> None:
|
||||
items = self.layers.pop(name, set())
|
||||
hidden_items = self.all_hidden()
|
||||
items -= hidden_items
|
||||
self.canvas.config(items, state=tk.NORMAL)
|
||||
|
||||
def add_item(self, name: str, item: int) -> None:
|
||||
if name in self.layers:
|
||||
self.layers[name].add(item)
|
||||
if name in self.hidden:
|
||||
self.canvas.config(item, state=tk.HIDDEN)
|
||||
|
||||
def delete_item(self, name: str, item: int) -> None:
|
||||
if name in self.layers:
|
||||
self.layers[name].remove(item)
|
||||
hidden_items = self.all_hidden()
|
||||
if item not in hidden_items:
|
||||
self.canvas.config(item, state=tk.NORMAL)
|
||||
|
||||
def toggle_layer(self, name: str) -> None:
|
||||
items = self.layers[name]
|
||||
if name in self.hidden:
|
||||
self.hidden.remove(name)
|
||||
hidden_items = self.all_hidden()
|
||||
items -= hidden_items
|
||||
self.canvas.config(items, state=tk.NORMAL)
|
||||
else:
|
||||
self.hidden.add(name)
|
||||
self.canvas.config(items, state=tk.HIDDEN)
|
||||
|
||||
def all_hidden(self) -> Set[int]:
|
||||
items = set()
|
||||
for name in self.hidden:
|
||||
items |= self.layers[name]
|
||||
return items
|
Loading…
Add table
Add a link
Reference in a new issue