Skip to content

Commit 7bd98bc

Browse files
committed
refactor: reorganize UI components and clean up unused code
- Extract ControlPanel to pan3d.ui.control_panel module - Extract RenderingSettingsBasic to pan3d.ui.rendering_settings module - Create SummaryToolbar widget from common.py code - Remove duplicate imports and unused properties - Add defauly ctx_name property to widgets - Remove vtk_view file and Pan3DView is moved to widgets
1 parent 5be65c0 commit 7bd98bc

29 files changed

Lines changed: 766 additions & 1297 deletions

src/pan3d/custom/contour.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
)
2626

2727
from pan3d.ui.css import base, preview
28-
from pan3d.ui.vtk_view import Pan3DView
2928
from pan3d.utils.convert import to_float, to_image
3029
from pan3d.utils.presets import PRESETS, set_preset
30+
from pan3d.widgets.pan3d_view import Pan3DView
3131
from trame.app import get_server
3232
from trame.decorators import TrameApp, change
3333
from trame.ui.vuetify3 import VAppLayout

src/pan3d/explorers/analytics.py

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@
2323
plot_options,
2424
zonal_axes,
2525
)
26+
from pan3d.ui.layouts import StandardExplorerLayout
2627
from pan3d.ui.preview import RenderingSettings
27-
from pan3d.ui.vtk_view import Pan3DView
2828
from pan3d.utils.common import Explorer
2929
from pan3d.utils.convert import to_float
30+
from pan3d.widgets.pan3d_view import Pan3DView
3031
from pan3d.xarray.algorithm import vtkXArrayRectilinearSource
3132
from trame.decorators import change
3233
from trame.widgets import html
@@ -371,22 +372,23 @@ def _build_ui(self, **kwargs):
371372
self.state.setdefault("time_groups", 0)
372373
self.state.setdefault("figure_height", 50)
373374

374-
# Use the standard UI creation method
375-
layout = self._create_standard_ui(
376-
panel_label="Analytics Explorer",
377-
view_class=Pan3dAnalyticsView,
378-
rendering_settings_class=RenderingSettings,
379-
view_kwargs={
380-
"render_window": self.render_window,
381-
"local_rendering": self.local_rendering,
382-
"widgets": [self.widget],
383-
},
384-
save_path_default="",
385-
error_style="position:absolute;bottom:1rem;right:1rem;",
386-
)
375+
## New way to build UI
376+
with StandardExplorerLayout(
377+
explorer=self, title="Analytics Explorer"
378+
) as self.ui:
379+
with self.ui.canvas:
380+
Pan3dAnalyticsView(
381+
render_window=self.render_window,
382+
local_rendering=self.local_rendering,
383+
widget=[self.widget],
384+
)
385+
with self.ui.control_panel:
386+
RenderingSettings(
387+
ctx_name="rendering",
388+
source=self.source,
389+
update_rendering=self.update_rendering,
390+
)
387391

388-
# Add navigation drawer within the VAppLayout
389-
with layout:
390392
with v3.VNavigationDrawer(
391393
disable_resize_watcher=True,
392394
disable_route_watcher=True,
@@ -397,7 +399,13 @@ def _build_ui(self, **kwargs):
397399
):
398400
self.plotting = Plotting(source=self.source, toggle="chart_expanded")
399401

400-
return layout
402+
self.ctx.save_dialog.save_callback = self._save_dataset
403+
if (
404+
self.source
405+
and hasattr(self.source, "input")
406+
and self.source.input is not None
407+
):
408+
self.ctx.rendering.update_from_source(self.source)
401409

402410
# -----------------------------------------------------
403411
# State change callbacks

src/pan3d/explorers/contour.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424
)
2525

2626
from pan3d.ui.contour import ContourRenderingSettings
27-
from pan3d.ui.vtk_view import Pan3DView
27+
from pan3d.ui.layouts import StandardExplorerLayout
2828
from pan3d.utils.common import Explorer
2929
from pan3d.utils.convert import to_float
30+
from pan3d.widgets.pan3d_view import Pan3DView
3031
from pan3d.xarray.algorithm import vtkXArrayRectilinearSource
3132
from trame.decorators import change
3233

@@ -42,10 +43,6 @@ def __init__(
4243
input=self.xarray
4344
) # To initialize the pipeline
4445

45-
# setup
46-
self.last_field = None
47-
self.last_preset = None
48-
4946
self._setup_vtk(pipeline)
5047
self._build_ui()
5148

@@ -131,18 +128,21 @@ def _build_ui(self, **_):
131128
"scale_z": 0.01,
132129
}
133130
)
131+
134132
# Use the standard UI creation method
135-
return self._create_standard_ui(
136-
panel_label="Contour Explorer",
137-
view_class=Pan3DView,
138-
rendering_settings_class=ContourRenderingSettings,
139-
view_kwargs={
140-
"render_window": self.render_window,
141-
"local_rendering": self.local_rendering,
142-
"widgets": [self.widget],
143-
},
144-
save_path_default="output.nc",
145-
)
133+
with StandardExplorerLayout(explorer=self, title="Contour Explorer") as self.ui:
134+
with self.ui.canvas:
135+
Pan3DView(
136+
render_window=self.render_window,
137+
local_rendering=self.local_rendering,
138+
widget=[self.widget],
139+
)
140+
with self.ui.control_panel:
141+
ContourRenderingSettings(
142+
ctx_name="rendering",
143+
source=self.source,
144+
update_rendering=self.update_rendering,
145+
)
146146

147147
def update_rendering(self, reset_camera=False):
148148
self.state.dirty_data = False

src/pan3d/explorers/globe.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@
1919

2020
from pan3d.filters.globe import ProjectToSphere
2121
from pan3d.ui.globe import GlobeRenderingSettings
22-
from pan3d.ui.vtk_view import Pan3DView
22+
from pan3d.ui.layouts import StandardExplorerLayout
2323
from pan3d.utils.common import Explorer
2424
from pan3d.utils.globe import get_continent_outlines, get_globe, get_globe_textures
25+
from pan3d.widgets.pan3d_view import Pan3DView
2526
from pan3d.xarray.algorithm import vtkXArrayRectilinearSource
2627
from trame.decorators import change
2728

@@ -118,20 +119,19 @@ def _build_ui(self, **kwargs):
118119
}
119120
)
120121
# Use the standard UI creation method
121-
return self._create_standard_ui(
122-
panel_label="Globe Explorer",
123-
view_class=Pan3DView,
124-
rendering_settings_class=GlobeRenderingSettings,
125-
view_kwargs={
126-
"render_window": self.render_window,
127-
"local_rendering": self.local_rendering,
128-
"widgets": [self.widget],
129-
"disable_style_toggle": True,
130-
"disable_roll": True,
131-
"disable_axis_align": True,
132-
},
133-
error_max_width=700,
134-
)
122+
with StandardExplorerLayout(explorer=self, title="Globe Explorer") as self.ui:
123+
with self.ui.canvas:
124+
Pan3DView(
125+
render_window=self.render_window,
126+
local_rendering=self.local_rendering,
127+
widget=[self.widget],
128+
)
129+
with self.ui.control_panel:
130+
GlobeRenderingSettings(
131+
ctx_name="rendering",
132+
source=self.source,
133+
update_rendering=self.update_rendering,
134+
)
135135

136136
# -----------------------------------------------------
137137
# State change callbacks

src/pan3d/explorers/slicer.py

Lines changed: 19 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424
vtkRenderWindowInteractor,
2525
)
2626

27+
from pan3d.ui.layouts import StandardExplorerLayout
2728
from pan3d.ui.slicer import SliceRenderingSettings
28-
from pan3d.ui.vtk_view import Pan3DView
2929
from pan3d.utils.common import Explorer
30+
from pan3d.widgets.pan3d_view import Pan3DView
3031
from pan3d.xarray.algorithm import vtkXArrayRectilinearSource
3132
from trame.decorators import change
3233
from trame.widgets import html
@@ -265,25 +266,24 @@ def _build_ui(self, *args, **kwargs):
265266
}
266267
)
267268

268-
# Add SliceSummary as an additional component
269-
def add_slice_summary():
270-
SliceSummary(
271-
v_show="!control_expended",
272-
style="position: absolute; right: 1rem; top: 50%; transform: translateY(-50%); z-index: 2;",
273-
)
274-
275269
# Use the standard UI creation method
276-
return self._create_standard_ui(
277-
panel_label="Slice Explorer",
278-
view_class=Pan3DSlicerView,
279-
rendering_settings_class=SliceRenderingSettings,
280-
view_kwargs={
281-
"render_window": self.render_window,
282-
"local_rendering": self.local_rendering,
283-
"widgets": [self.widget],
284-
},
285-
additional_components=add_slice_summary,
286-
)
270+
with StandardExplorerLayout(explorer=self, title="Slice Explorer") as self.ui:
271+
with self.ui.canvas:
272+
Pan3DSlicerView(
273+
render_window=self.render_window,
274+
local_rendering=self.local_rendering,
275+
widget=[self.widget],
276+
)
277+
SliceSummary(
278+
v_show="!control_expended",
279+
style="position: absolute; right: 1rem; top: 50%; transform: translateY(-50%); z-index: 2;",
280+
)
281+
with self.ui.control_panel:
282+
SliceRenderingSettings(
283+
ctx_name="rendering",
284+
source=self.source,
285+
update_rendering=self.update_rendering,
286+
)
287287

288288
def update_rendering(self, reset_camera=False):
289289
self.state.dirty_data = False
@@ -320,27 +320,6 @@ def slice_axis(self, axis: str) -> None:
320320
with self.state:
321321
self.state.slice_axis = axis
322322

323-
@property
324-
def slice_value(self):
325-
"""
326-
Returns the value(origin) for the dimension along which the slice
327-
is performed
328-
"""
329-
s = self.state
330-
axis = "xyz"[s.slice_axes.index(s.slice_axis)]
331-
return s[f"cut_{axis}"]
332-
333-
@slice_value.setter
334-
def slice_value(self, value: float) -> None:
335-
"""
336-
Sets the value(origin) for the dimension along which the slice
337-
is performed
338-
"""
339-
with self.state:
340-
s = self.state
341-
axis = "xyz"[s.slice_axes.index(s.slice_axis)]
342-
s[f"cut_{axis}"] = value
343-
344323
@property
345324
def view_mode(self):
346325
"""
@@ -357,22 +336,6 @@ def view_mode(self, mode):
357336
with self.state:
358337
self.state.view_mode = mode
359338

360-
@property
361-
def scale_axis(self):
362-
s = self.state
363-
return [s.x_scale, s.y_scale, s.z_scale]
364-
365-
@scale_axis.setter
366-
def scale_axis(self, sfac):
367-
s = self.state
368-
s.x_scale = float(sfac[0])
369-
s.y_scale = float(sfac[1])
370-
s.z_scale = float(sfac[2])
371-
self.slice_actor.SetScale(*sfac)
372-
self.data_actor.SetScale(*sfac)
373-
self.outline_actor.SetScale(*sfac)
374-
self.on_view_mode_change(s.view_mode)
375-
376339
# -------------------------------------------------------------------------
377340
# UI triggers
378341
# -------------------------------------------------------------------------

src/pan3d/ui/contour.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pan3d.utils.common import RenderingSettingsBasic
1+
from pan3d.ui.rendering_settings import RenderingSettingsBasic
22
from pan3d.widgets.time_navigation import TimeNavigation
33
from pan3d.widgets.vector_property_control import VectorPropertyControl
44
from trame.widgets import html
@@ -85,6 +85,5 @@ def update_from_source(self, source=None):
8585
state.slice_extents = source.slice_extents
8686

8787
# Update TimeNavigation widget through context
88-
if hasattr(self.ctx, "time_nav"):
89-
self.ctx.time_nav.labels = source.t_labels
90-
self.ctx.time_nav.index = source.t_index
88+
self.ctx.time_nav.labels = source.t_labels
89+
self.ctx.time_nav.index = source.t_index

0 commit comments

Comments
 (0)