From 6ced56fc089bfd1968eefb4c8141f1fd769503b6 Mon Sep 17 00:00:00 2001 From: laffra Date: Tue, 23 Apr 2024 11:17:54 +0200 Subject: [PATCH] Avoid countless layout calls --- ltk/widgets.py | 25 ++++++++++++++----------- pyproject.toml | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/ltk/widgets.py b/ltk/widgets.py index 81b5e6a..e93853e 100644 --- a/ltk/widgets.py +++ b/ltk/widgets.py @@ -574,6 +574,7 @@ def __init__(self, *tabs): self.add_tab(tab) self._handle_css(tabs) self.tabs() + self.on("tabsactivate", proxy(lambda *args: self.find(".ltk-split-pane").trigger("layout"))) def add_tab(self, tab): tab_id = f"{self.name}-{self.labels.children().length}" @@ -692,23 +693,22 @@ class SplitPane(Div): def resize(self): position = self.get_position(self.middle) - self.get_position(self) - self.layout(position / self.get_size(self)) + self.ratio = position / self.get_size(self) + self.layout() def restore(self): try: - ratio = float(window.localStorage.getItem(self.key)) + self.ratio = float(window.localStorage.getItem(self.key)) except: - ratio = 0.5 - self.layout(ratio) + self.ratio = 0.5 + self.layout() - def layout(self, ratio): + def layout(self): size = self.get_size(self) - self.set_size(self.first, f"{ratio * size}") - self.set_size(self.last, f"{(1.0 - ratio) * size}") + self.set_size(self.first, f"{self.ratio * size}") + self.set_size(self.last, f"{(1.0 - self.ratio) * size}") self.set_position(self.middle, 0) - window.localStorage.setItem(self.key, f"{ratio}") - if size <= 1: - schedule(lambda: self.layout(ratio), f"layout-{self.key}") + window.localStorage.setItem(self.key, f"{self.ratio}") def __init__(self, first, last, key): """ @@ -730,8 +730,11 @@ def __init__(self, first, last, key): self.last .addClass(f"ltk-{self.direction}-split-pane-last") ) + self.addClass(f"ltk-split-pane") self.restore() - window.addEventListener("resize", proxy(lambda *args: self.resize())) + self.on("layout", proxy(lambda *args: self.layout())) + schedule(self.layout, f"layout-{self.key}") + window.addEventListener("resize", proxy(lambda *args: self.layout())) class HorizontalSplitPane(SplitPane): diff --git a/pyproject.toml b/pyproject.toml index 74d198d..b1a2310 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta" [project] name = "pyscript-ltk" -version = "0.1.27" +version = "0.1.28" description = "A little toolkit for writing UIs in PyScript" readme = "README.md" authors = [{ name = "Chris Laffra", email = "chris@chrislaffra.com" }]