Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions hexrdgui/image_series_toolbar.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,6 @@ def create_widget(self) -> None:
self.omega_label = QLabel(self._parent_widget())
self.omega_label.setVisible(False)

# Compute the text width for the maximum size label we will have
# with the current font, and set the label width to be fixed at
# this width. This will prevent the slider from shifting around
# while we are sliding.
example_label_text = omega_label_text(359.999, 359.999)
text_width = self.text_width(example_label_text)
self.omega_label.setFixedWidth(text_width)
self.frame.setAlignment(Qt.AlignmentFlag.AlignCenter)

self.layout = QGridLayout(self.widget)
Expand Down Expand Up @@ -164,10 +157,6 @@ def set_range(self, current_tab: bool = False) -> None:
elif size and not self._show and current_tab:
self._show = True
self.widget.setVisible(self._show)
if not self.slider.minimumWidth():
parent = self._parent_widget()
if parent is not None:
self.slider.setMinimumWidth(parent.width() // 2)
if not size == self.slider.maximum():
self.slider.setMaximum(size)
self.frame.setToolTip(f'Max: {size}')
Expand All @@ -180,6 +169,7 @@ def set_range(self, current_tab: bool = False) -> None:
self.widget.setVisible(self._show)

self.update_omega_label_text()
self.update_omega_label_minimum_width()

def update_range(self, current_tab: bool) -> None:
self.set_range(current_tab)
Expand Down Expand Up @@ -218,6 +208,23 @@ def update_omega_label_text(self) -> None:

self.omega_label.setText(omega_label_text(*ome_range)) # type: ignore[misc]

def update_omega_label_minimum_width(self) -> None:
"""Set a minimum width based on the actual omega data so the
slider does not shift around while sliding. Find the pair
that produces the longest formatted string."""
assert self.omega_label is not None
imsd = HexrdConfig().omega_imageseries_dict
if imsd is None:
return

first_ims = next(iter(imsd.values()))
longest_text = ''
for pair in first_ims.omega:
text = omega_label_text(round(pair[0], 3), round(pair[1], 3))
if len(text) > len(longest_text):
longest_text = text
self.omega_label.setMinimumWidth(self.text_width(longest_text))

def update_back_forward_buttons(self, val: int) -> None:
assert self.back_button is not None
assert self.forward_button is not None
Expand Down
16 changes: 15 additions & 1 deletion hexrdgui/image_tab_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,13 @@ def load_images(self) -> None:

def change_ims_image(self, pos: int) -> None:
HexrdConfig().current_imageseries_idx = pos
self.update_needed.emit()

if HexrdConfig().image_mode == ViewType.raw:
# Update image data on existing canvases without clearing
# and rebuilding tabs, which causes a render flash.
self._update_raw_images()
else:
self.update_needed.emit()

is_aggregated = HexrdConfig().is_aggregated
has_omegas = HexrdConfig().has_omegas
Expand All @@ -178,6 +184,14 @@ def change_ims_image(self, pos: int) -> None:
for canvas in self.active_canvases:
canvas.redraw_overlay(overlay)

def _update_raw_images(self) -> None:
"""Update raw image data on existing canvases without rebuilding tabs."""
if HexrdConfig().tab_images:
for i, name in enumerate(self.image_names):
self.image_canvases[i].load_images(image_names=[name])
else:
self.image_canvases[0].load_images(image_names=self.image_names)

@Slot(bool)
def show_toolbar(self, b: bool) -> None:
self.toolbar_visible = b
Expand Down
3 changes: 3 additions & 0 deletions hexrdgui/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,9 @@ def images_loaded(self, enabled: bool = True) -> None:
self.color_map_editor.reset_range()
self.update_image_mode_enable_states()

for overlay in HexrdConfig().overlays:
overlay.on_new_images_loaded()

def on_action_open_materials_triggered(self) -> None:
selected_file, selected_filter = QFileDialog.getOpenFileName(
self.ui,
Expand Down
4 changes: 1 addition & 3 deletions hexrdgui/overlays/overlay.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,7 @@ def __init__(
self.setup_connections()

def setup_connections(self) -> None:
from hexrdgui.image_load_manager import ImageLoadManager

ImageLoadManager().new_images_loaded.connect(self.on_new_images_loaded)
pass

@property
def plot_data_keys(self) -> tuple[str, ...]:
Expand Down
Loading