Skip to content

Commit

Permalink
use registry for defining viewer choices
Browse files Browse the repository at this point in the history
  • Loading branch information
kecnry authored and iisakkirotko committed Nov 12, 2024
1 parent c7c34ab commit 21c5e46
Showing 1 changed file with 26 additions and 11 deletions.
37 changes: 26 additions & 11 deletions glue_solara/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,16 @@
import glue_jupyter.registries
import solara
import solara.lab
from glue_jupyter.registries import viewer_registry
from glue.viewers.common.viewer import Viewer
from glue_jupyter.data import require_data
from solara import Reactive

import glue_jupyter.bqplot.histogram
import glue_jupyter.bqplot.image
import glue_jupyter.bqplot.scatter


from .hooks import ClosedMessage, use_glue_watch, use_glue_watch_close, use_layers_watch
from .linker import Linker
from .misc import Snackbar
Expand Down Expand Up @@ -43,6 +49,12 @@
"magenta",
]

VIEWER_TYPES = list(map(lambda k: k.title(), viewer_registry.members.keys()))

VIEWER_METHODS = {'Histogram': 'histogram1d',
'Scatter': 'scatter2d',
'Image': 'imshow'}

TITLE_TRANSLATIONS = {
"BqplotScatterView": "2d Scatter",
"BqplotHistogramView": "1d Histogram",
Expand Down Expand Up @@ -90,17 +102,20 @@ def GlueApp(app: gj.JupyterApplication):
mdi_header_size_index = solara.use_reactive(2)

def add_data_viewer(type: str, data: glue.core.Data):
if type == "Histogram":
app.histogram1d(data=data, show=False)
elif type == "Scatter":
app.scatter2d(data=data, show=False)
elif type == "2D Image":
if type in VIEWER_METHODS:
try:
app.imshow(data=data, show=False)
getattr(app, VIEWER_METHODS[type])(data=data, show=False)
except ValueError as error:
error_message.set(str(error))
show_error.set(True)
return
else:
# manual approach...
viewer_cls = viewer_registry.members[type.lower()]['cls']
viewer_state_obj = viewer_cls._state_cls()
# NOTE: some viewers should set x_att or have other checks which this skips
app.new_data_viewer(viewer_cls, data=data,
state=viewer_state_obj, show=False)
new_viewer_index = len(app.viewers) - 1
grid_layout.value = [
*grid_layout.value,
Expand All @@ -123,7 +138,7 @@ def add_data_viewer(type: str, data: glue.core.Data):

def request_viewer_for(data: glue.core.Data):
if data.ndim > 1:
default_type = "2D Image"
default_type = "Image"
else:
default_type = "Scatter"
requested_viewer_typename.value = default_type
Expand Down Expand Up @@ -155,7 +170,7 @@ def add_to_current_viewer(data: glue.core.Data):
on_ok=add_requested_data_viewer,
):
solara.Select(
"Data", value=requested_viewer_typename, values=["Histogram", "Scatter", "2D Image"]
"Data", value=requested_viewer_typename, values=VIEWER_TYPES
)

with solara.AppBarTitle():
Expand Down Expand Up @@ -268,15 +283,15 @@ def add_to_current_viewer(data: glue.core.Data):
"justify-content": "center",
}
):
solara.Text("What do you want to visualize", style={"font-size": "2em"})
solara.Text("What do you want to visualize?", style={"font-size": "2em"})
with solara.Column(style={"background-color": "transparent"}):
for viewer_type in ["Histogram", "Scatter", "2D Image"]:
for viewer_type in VIEWER_TYPES:

def add(viewer_type=viewer_type):
add_data_viewer(viewer_type, data_collection[0])

solara.Button(
f"A {viewer_type}",
f"{'An' if viewer_type[0] in ('AEOIU') else 'A'} {viewer_type}",
on_click=add,
block=True,
color=main_color,
Expand Down

0 comments on commit 21c5e46

Please sign in to comment.