pygui implemented auto grid layout, to auto distance node icons with padding based on canvas size in rows and columns

This commit is contained in:
Blake Harnden 2020-04-18 09:02:15 -07:00
parent be332a2a29
commit f45a11076f
2 changed files with 19 additions and 2 deletions

View file

@ -47,7 +47,8 @@ class Images:
except KeyError: except KeyError:
messagebox.showwarning( messagebox.showwarning(
"Missing image file", "Missing image file",
f"{name}.png is missing at daemon/core/gui/data/icons, drop image file at daemon/core/gui/data/icons and restart the gui", f"{name}.png is missing at daemon/core/gui/data/icons, drop image "
f"file at daemon/core/gui/data/icons and restart the gui",
) )

View file

@ -19,6 +19,7 @@ from core.gui.dialogs.servers import ServersDialog
from core.gui.dialogs.sessionoptions import SessionOptionsDialog from core.gui.dialogs.sessionoptions import SessionOptionsDialog
from core.gui.dialogs.sessions import SessionsDialog from core.gui.dialogs.sessions import SessionsDialog
from core.gui.dialogs.throughput import ThroughputDialog from core.gui.dialogs.throughput import ThroughputDialog
from core.gui.nodeutils import ICON_SIZE
from core.gui.task import BackgroundTask from core.gui.task import BackgroundTask
if TYPE_CHECKING: if TYPE_CHECKING:
@ -144,7 +145,7 @@ class Menubar(tk.Menu):
Create tools menu Create tools menu
""" """
menu = tk.Menu(self) menu = tk.Menu(self)
menu.add_command(label="Auto Grid", state=tk.DISABLED) menu.add_command(label="Auto Grid", command=self.click_autogrid)
menu.add_command(label="IP Addresses", state=tk.DISABLED) menu.add_command(label="IP Addresses", state=tk.DISABLED)
menu.add_command(label="MAC Addresses", state=tk.DISABLED) menu.add_command(label="MAC Addresses", state=tk.DISABLED)
self.add_cascade(label="Tools", menu=menu) self.add_cascade(label="Tools", menu=menu)
@ -414,3 +415,18 @@ class Menubar(tk.Menu):
def click_edit_observer_widgets(self) -> None: def click_edit_observer_widgets(self) -> None:
dialog = ObserverDialog(self.app, self.app) dialog = ObserverDialog(self.app, self.app)
dialog.show() dialog.show()
def click_autogrid(self) -> None:
width, height = self.app.canvas.current_dimensions
padding = (ICON_SIZE / 2) + 10
layout_size = padding + ICON_SIZE
col_count = width // layout_size
logging.info(
"auto grid layout: dimens(%s, %s) col(%s)", width, height, col_count
)
for i, node in enumerate(self.app.canvas.nodes.values()):
col = i % col_count
row = i // col_count
x = (col * layout_size) + padding
y = (row * layout_size) + padding
node.move(x, y)