pygui improved edge context by properly using tk_popup

This commit is contained in:
Blake Harnden 2020-05-02 08:41:10 -07:00
parent 491f2a8e93
commit 65466909d3

View file

@ -268,9 +268,16 @@ class CanvasEdge(Edge):
self.throughput = None self.throughput = None
self.draw(src_pos, dst_pos) self.draw(src_pos, dst_pos)
self.set_binding() self.set_binding()
self.context = tk.Menu(self.canvas)
self.create_context()
def create_context(self):
themes.style_menu(self.context)
self.context.add_command(label="Configure", command=self.click_configure)
self.context.add_command(label="Delete", command=self.click_delete)
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.show_context)
def set_link(self, link) -> None: def set_link(self, link) -> None:
self.link = link self.link = link
@ -373,18 +380,14 @@ class CanvasEdge(Edge):
self.middle_label = None self.middle_label = None
self.canvas.itemconfig(self.id, fill=self.color, width=self.scaled_width()) self.canvas.itemconfig(self.id, fill=self.color, width=self.scaled_width())
def create_context(self, event: tk.Event) -> None: def show_context(self, event: tk.Event) -> None:
context = tk.Menu(self.canvas) state = tk.DISABLED if self.canvas.core.is_runtime() else tk.NORMAL
themes.style_menu(context) self.context.entryconfigure(1, state=state)
context.add_command(label="Configure", command=self.configure) self.context.tk_popup(event.x_root, event.y_root)
context.add_command(label="Delete", command=self.click_delete)
if self.canvas.app.core.is_runtime():
context.entryconfigure(1, state="disabled")
context.post(event.x_root, event.y_root)
def click_delete(self): def click_delete(self):
self.canvas.delete_edge(self) self.canvas.delete_edge(self)
def configure(self) -> None: def click_configure(self) -> None:
dialog = LinkConfigurationDialog(self.canvas, self.canvas.app, self) dialog = LinkConfigurationDialog(self.canvas, self.canvas.app, self)
dialog.show() dialog.show()