Skip to content

Commit

Permalink
Get stack from model via stackid and simplify setting of properties i…
Browse files Browse the repository at this point in the history
…n the presenter
  • Loading branch information
MikeSullivan7 committed Feb 18, 2025
1 parent cde85ef commit 624db20
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 34 deletions.
4 changes: 2 additions & 2 deletions mantidimaging/gui/windows/main/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -767,5 +767,5 @@ def show_move_stack_dialog(self, origin_dataset_id: uuid.UUID, stack_id: uuid.UU
self.move_stack_dialog.show()

def show_stack_properties_dialog(self, stack_id: uuid.UUID, origin_dataset: Dataset, stack_data_type: str) -> None:
self.stack_properties_dialog = StackPropertiesDialog(self, stack_id, origin_dataset, stack_data_type)
self.stack_properties_dialog.show()
stack_properties_dialog = StackPropertiesDialog(self, stack_id, origin_dataset, stack_data_type)
stack_properties_dialog.show()
30 changes: 13 additions & 17 deletions mantidimaging/gui/windows/stack_properties_dialog/presenter.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# SPDX - License - Identifier: GPL-3.0-or-later
from __future__ import annotations

from pathlib import Path
from typing import TYPE_CHECKING

from mantidimaging.core.utility.size_calculator import full_size_MB
Expand All @@ -16,25 +17,20 @@ class StackPropertiesPresenter(BasePresenter):
def __init__(self, view: StackPropertiesDialog):
super().__init__(view)

def set_stack_from_data_type(self, origin_data_type) -> None:
if origin_data_type == "Sample":
self.view.stack = self.view.origin_dataset.sample
elif origin_data_type == "Flat Before":
self.view.stack = self.view.origin_dataset.flat_before
elif origin_data_type == "Flat After":
self.view.stack = self.view.origin_dataset.flat_after
elif origin_data_type == "Dark Before":
self.view.stack = self.view.origin_dataset.dark_before
elif origin_data_type == "Dark After":
self.view.stack = self.view.origin_dataset.dark_after

def set_stack_data(self):
def set_stack_data(self) -> None:
if self.view.stack is not None:
if self.view.stack.filenames is not None:
self.view.directory = self.view.stack.filenames[0].replace(self.view.stack.filenames[0].split("\\")[-1],
'')
self.view.stack_shape = self.view.stack.data.shape
self.view.stack_size_MB = self.get_stack_size_MB()

def get_stack_size_MB(self):
def set_stack_directory(self):
if self.view.stack.filenames is not None:
self.view.directory = Path(self.view.stack.filenames[0]).parent

def get_stack_size_MB(self) -> float:
return full_size_MB(self.view.stack.data.shape, self.view.stack.data.dtype)

def get_log_filename(self) -> str:
if 'log_file' in self.view.stack.metadata:
return self.view.stack.metadata['log_file']
else:
return "N/A"
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
# SPDX - License - Identifier: GPL-3.0-or-later
from __future__ import annotations
import unittest
from pathlib import Path
from unittest import mock

import numpy as np

from mantidimaging.core.data import ImageStack
from mantidimaging.gui.windows.stack_properties_dialog.presenter import StackPropertiesPresenter
from mantidimaging.gui.windows.stack_properties_dialog.view import StackPropertiesDialog

Expand All @@ -21,13 +21,15 @@ def setUp(self):
self.view.originDatasetName = mock.Mock()
self.view.destinationTypeComboBox = mock.Mock()
self.view.originDataType = mock.Mock()
self.view.stack = mock.Mock()

def test_WHEN_set_stack_data_THEN_stack_data_set_correctly(self):
self.view.stack = ImageStack(np.ones([3, 11, 12]))
self.view.stack.data = np.ones([3, 11, 12])
self.view.stack.filenames = ["test\\filename\\a.tif", "test\\filename\\b.tif", "test\\filename\\c.tif"]
self.presenter.get_stack_size_MB = mock.Mock()
self.presenter.get_stack_size_MB.return_value = 10
self.presenter.set_stack_data()
self.presenter.set_stack_directory()

self.assertEqual(self.view.directory, "test\\filename\\")
self.assertEqual(self.view.directory, Path("test\\filename\\"))
self.assertEqual(self.view.stack_shape, (3, 11, 12))
17 changes: 5 additions & 12 deletions mantidimaging/gui/windows/stack_properties_dialog/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,16 @@ class StackPropertiesDialog(BaseDialogView):

def __init__(self, parent, stack_id: uuid.UUID, origin_dataset: Dataset, origin_data_type: str):
super().__init__(parent)
self.parent_view = parent
self.origin_dataset = origin_dataset

self.presenter = StackPropertiesPresenter(self)

self._stack_id = stack_id
self.stack = self.parent_view.presenter.model.get_images_by_uuid(stack_id)

self.presenter.set_stack_from_data_type(origin_data_type)
self.presenter.set_stack_data()
self.parent_view = parent
self.presenter.set_stack_directory()
self.log_filename = self.presenter.get_log_filename()

self.setWindowTitle(f"Stack Properties: {origin_dataset.name}")
self.layout = QGridLayout()
Expand All @@ -44,18 +45,10 @@ def __init__(self, parent, stack_id: uuid.UUID, origin_dataset: Dataset, origin_
self.layout.addWidget(QLabel(f"{origin_data_type}"), 3, 2)
self.layout.addWidget(QLabel(f"{round(self.stack_size_MB, 4)} MB"), 4, 2)
self.layout.addWidget(QLabel(f"{self.stack_shape}"), 5, 2)
self.layout.addWidget(QLabel(f"{self.stack.metadata['log_file']}"), 6, 2)
self.layout.addWidget(QLabel(f"{self.log_filename}"), 6, 2)

self.setLayout(self.layout)

def accept(self) -> None:
self.presenter.notify(Notification.ACCEPTED)
self.close()

@property
def origin_dataset_id(self) -> uuid.UUID:
return self._origin_dataset_id

@property
def stack_id(self) -> uuid.UUID:
return self._stack_id

0 comments on commit 624db20

Please sign in to comment.