From 2e71edaf7a7bacb2c6b0ad184f5186725ef53ed7 Mon Sep 17 00:00:00 2001 From: louisnw Date: Mon, 2 Oct 2023 17:31:24 +0100 Subject: [PATCH] SwitcherWidget.set implementation --- lightweight_charts/js/callback.js | 12 ++++++------ lightweight_charts/topbar.py | 8 +++++++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lightweight_charts/js/callback.js b/lightweight_charts/js/callback.js index be7d0ed..7f50d60 100644 --- a/lightweight_charts/js/callback.js +++ b/lightweight_charts/js/callback.js @@ -31,8 +31,10 @@ if (!window.TopBar) { let widget = { elem: switcherElement, callbackName: callbackName, + intervalElements: null, + onItemClicked: null, } - let intervalElements = items.map((item)=> { + widget.intervalElements = items.map((item)=> { let itemEl = document.createElement('button'); itemEl.style.border = 'none' itemEl.style.padding = '2px 5px' @@ -50,16 +52,14 @@ if (!window.TopBar) { itemEl.addEventListener('mouseleave', () => itemEl.style.backgroundColor = item === activeItem ? pane.activeBackgroundColor : 'transparent') itemEl.addEventListener('mousedown', () => itemEl.style.backgroundColor = item === activeItem ? pane.activeBackgroundColor : pane.clickBackgroundColor) itemEl.addEventListener('mouseup', () => itemEl.style.backgroundColor = item === activeItem ? pane.activeBackgroundColor : pane.hoverBackgroundColor) - itemEl.addEventListener('click', () => onItemClicked(item)) + itemEl.addEventListener('click', () => widget.onItemClicked(item)) switcherElement.appendChild(itemEl); return itemEl; }); - widget.intervalElements = intervalElements - - let onItemClicked = (item)=> { + widget.onItemClicked = (item)=> { if (item === activeItem) return - intervalElements.forEach((element, index) => { + widget.intervalElements.forEach((element, index) => { element.style.backgroundColor = items[index] === item ? pane.activeBackgroundColor : 'transparent' element.style.color = items[index] === item ? pane.activeColor : pane.color element.style.fontWeight = items[index] === item ? '500' : 'normal' diff --git a/lightweight_charts/topbar.py b/lightweight_charts/topbar.py index 084c624..acdfd4e 100644 --- a/lightweight_charts/topbar.py +++ b/lightweight_charts/topbar.py @@ -36,7 +36,13 @@ class TextWidget(Widget): class SwitcherWidget(Widget): def __init__(self, topbar, options, default, align, func): super().__init__(topbar, value=default, func=func) - self.run_script(f'{self.id} = {topbar.id}.makeSwitcher({list(options)}, "{default}", "{self.id}", "{align}")') + self.options = list(options) + self.run_script(f'{self.id} = {topbar.id}.makeSwitcher({self.options}, "{default}", "{self.id}", "{align}")') + + def set(self, option): + if option not in self.options: + raise ValueError(f"option '{option}' does not exist within {self.options}.") + self.run_script(f'{self.id}.onItemClicked("{option}")') class MenuWidget(Widget):