diff --git a/.gitignore b/.gitignore
index 5bf1196..b269498 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,5 +7,4 @@ fixed_wheels/
.vscode/
.DS_Store
*.so
-/**/*_ui.py
Visualization_Results/
diff --git a/engines/ceus b/engines/ceus
index 97d3d3a..b6021f2 160000
--- a/engines/ceus
+++ b/engines/ceus
@@ -1 +1 @@
-Subproject commit 97d3d3a8b03ee02bc5bda8dca2f1f316151d8210
+Subproject commit b6021f2729291f74a1183757229547ae27ae4cab
diff --git a/src/ceus/analysis_loading/analysis_loading_controller.py b/src/ceus/analysis_loading/analysis_loading_controller.py
index 8ddbc27..cbcac1d 100644
--- a/src/ceus/analysis_loading/analysis_loading_controller.py
+++ b/src/ceus/analysis_loading/analysis_loading_controller.py
@@ -10,7 +10,8 @@
from ..mvc.base_controller import BaseController
from .analysis_loading_view_coordinator import AnalysisLoadingViewCoordinator
-from engines.ceus.src.data_objs import UltrasoundImage, CeusSeg
+from engines.ceus.src.data_objs.image import UltrasoundImage
+from engines.ceus.src.data_objs.seg import CeusSeg
from engines.ceus.src.time_series_analysis.curves.framework import CurvesAnalysis
@@ -64,20 +65,30 @@ def _connect_signals(self) -> None:
def _setup_analysis_options(self) -> None:
"""Setup available analysis types and functions in the view."""
analysis_types, analysis_functions = self._model.get_analysis_types()
+ print(f"DEBUG: Available analysis types: {list(analysis_types.keys())}")
- # Automatically select "Paramap" as the analysis type
- paramap_type = "paramap"
- if paramap_type in analysis_types:
- self._selected_analysis_type = paramap_type
- if self._model.set_analysis_type(paramap_type):
- # Get available functions for Paramap analysis
- available_functions = self._model.get_analysis_functions(paramap_type)
+ # Automatically select the best available analysis type
+ # Prefer curves_paramap, then curves, or just the first available one
+ selected_type = None
+ for preferred in ["curves_paramap", "curves", "paramap"]:
+ if preferred in analysis_types:
+ selected_type = preferred
+ break
+
+ if not selected_type and analysis_types:
+ selected_type = list(analysis_types.keys())[0]
+
+ if selected_type:
+ self._selected_analysis_type = selected_type
+ if self._model.set_analysis_type(selected_type):
+ # Get available functions for selected analysis type
+ available_functions = self._model.get_analysis_functions(selected_type)
# Skip analysis type selection and go directly to function selection
self._view_coordinator.show_function_selection(available_functions)
else:
- self._view_coordinator.show_error("Failed to set Paramap analysis type")
+ self._view_coordinator.show_error(f"Failed to set {selected_type} analysis type")
else:
- self._view_coordinator.show_error("Paramap analysis type not available")
+ self._view_coordinator.show_error("No analysis types available")
def _on_user_action(self, action_name: str, action_data: Any) -> None:
"""
@@ -98,7 +109,7 @@ def _on_user_action(self, action_name: str, action_data: Any) -> None:
print(f"DEBUG: Controller received analysis_execution_started action")
print(f"DEBUG: action_data = {action_data}")
self._handle_analysis_execution(action_data)
- elif action_name == "analysis_completed":
+ elif action_name == "analysis_loading_completed":
self._handle_analysis_completion(action_data)
else:
# Forward unknown actions to application controller
diff --git a/src/ceus/analysis_loading/analysis_loading_view_coordinator.py b/src/ceus/analysis_loading/analysis_loading_view_coordinator.py
index a87ade9..a754541 100644
--- a/src/ceus/analysis_loading/analysis_loading_view_coordinator.py
+++ b/src/ceus/analysis_loading/analysis_loading_view_coordinator.py
@@ -10,12 +10,13 @@
from PyQt6.QtWidgets import QWidget, QStackedWidget
from PyQt6.QtCore import pyqtSignal
-from quantus.gui.mvc.base_view import BaseViewMixin
+from ..mvc.base_view import BaseViewMixin
from .views.analysis_function_selection_widget import AnalysisFunctionSelectionWidget
-from quantus.gui.config_loading.views.analysis_params_widget import AnalysisParamsWidget
+from .views.analysis_params_widget import AnalysisParamsWidget
from .views.analysis_execution_widget import AnalysisExecutionWidget
-from quantus.data_objs import UltrasoundRfImage, BmodeSeg, RfAnalysisConfig
-from quantus.analysis.paramap.framework import ParamapAnalysis
+from engines.ceus.src.data_objs.image import UltrasoundImage
+from engines.ceus.src.data_objs.seg import CeusSeg
+from engines.ceus.src.time_series_analysis.curves.framework import CurvesAnalysis
class AnalysisLoadingViewCoordinator(QStackedWidget, BaseViewMixin):
@@ -40,7 +41,7 @@ class AnalysisLoadingViewCoordinator(QStackedWidget, BaseViewMixin):
# ============================================================================
- def __init__(self, image_data: UltrasoundRfImage, seg_data: BmodeSeg, config_data: RfAnalysisConfig, parent: Optional[QWidget] = None):
+ def __init__(self, image_data: UltrasoundImage, seg_data: CeusSeg, config_data, parent: Optional[QWidget] = None):
super().__init__(parent)
self.__init_base_view__(parent)
self._image_data = image_data
@@ -48,11 +49,6 @@ def __init__(self, image_data: UltrasoundRfImage, seg_data: BmodeSeg, config_dat
self._config_data = config_data
print(f"DEBUG: AnalysisLoadingViewCoordinator - image_data = {image_data is not None}")
- if image_data is not None:
- print(f"DEBUG: AnalysisLoadingViewCoordinator - scan_name = {image_data.scan_name}")
- print(f"DEBUG: AnalysisLoadingViewCoordinator - phantom_name = {image_data.phantom_name}")
- else:
- print(f"DEBUG: AnalysisLoadingViewCoordinator - image_data is None!")
# Widget instances
self._function_selection_widget: Optional[AnalysisFunctionSelectionWidget] = None
@@ -63,7 +59,7 @@ def __init__(self, image_data: UltrasoundRfImage, seg_data: BmodeSeg, config_dat
self._selected_analysis_type: Optional[str] = None
self._selected_functions: List[str] = []
self._analysis_params: dict = {}
- self._analysis_data: Optional[ParamapAnalysis] = None
+ self._analysis_data: Optional[CurvesAnalysis] = None
# Note: Analysis type selection is now skipped - Paramap is automatically selected
# The controller will call show_function_selection directly
@@ -106,12 +102,16 @@ def show_error(self, error_message: str) -> None:
error_message: Error message to display
"""
current_widget: BaseViewMixin = self.currentWidget()
- current_widget.show_error(error_message)
+ if current_widget:
+ current_widget.show_error(error_message)
+ else:
+ print(f"ERROR (no active widget): {error_message}")
def clear_error(self) -> None:
"""Clear error message in the current widget."""
current_widget: BaseViewMixin = self.currentWidget()
- current_widget.clear_error()
+ if current_widget:
+ current_widget.clear_error()
# ============================================================================
# NAVIGATION METHODS - Methods to show different widgets
@@ -208,7 +208,7 @@ def show_analysis_execution(self, execution_summary: Dict) -> None:
self._execution_widget.clear_error()
print(f"DEBUG: show_analysis_execution completed - execution screen should be visible")
- def show_analysis_results(self, analysis_data: ParamapAnalysis) -> None:
+ def show_analysis_results(self, analysis_data: CurvesAnalysis) -> None:
"""
Show analysis results in the execution widget.
@@ -260,7 +260,7 @@ def _on_execution_started(self, execution_data: dict) -> None:
self._emit_user_action("analysis_execution_started", execution_data)
print(f"DEBUG: user_action signal emitted")
- def _on_analysis_confirmed(self, analysis_data: ParamapAnalysis) -> None:
+ def _on_analysis_confirmed(self, analysis_data: CurvesAnalysis) -> None:
"""
Handle analysis completion confirmation.
diff --git a/src/ceus/analysis_loading/ui/analysis_execution_ui.py b/src/ceus/analysis_loading/ui/analysis_execution_ui.py
new file mode 100644
index 0000000..02e2b23
--- /dev/null
+++ b/src/ceus/analysis_loading/ui/analysis_execution_ui.py
@@ -0,0 +1,295 @@
+# Form implementation generated from reading ui file 'src\ceus\analysis_loading\ui\analysis_execution.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_analysisExecution(object):
+ def setupUi(self, analysisExecution):
+ analysisExecution.setObjectName("analysisExecution")
+ analysisExecution.resize(1284, 803)
+ analysisExecution.setMinimumSize(QtCore.QSize(0, 0))
+ analysisExecution.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=analysisExecution)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(60, 20, 951, 731))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(200, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(200, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.analysis_execution_layout = QtWidgets.QVBoxLayout()
+ self.analysis_execution_layout.setContentsMargins(30, -1, 30, -1)
+ self.analysis_execution_layout.setSpacing(50)
+ self.analysis_execution_layout.setObjectName("analysis_execution_layout")
+ self.analysis_execution_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_execution_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_execution_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.analysis_execution_label.setScaledContents(False)
+ self.analysis_execution_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_execution_label.setWordWrap(True)
+ self.analysis_execution_label.setObjectName("analysis_execution_label")
+ self.analysis_execution_layout.addWidget(self.analysis_execution_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.progress_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.progress_label.setStyleSheet("QLabel {\n"
+" color: rgb(255, 255, 255);\n"
+" font-size: 14px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.progress_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.progress_label.setObjectName("progress_label")
+ self.analysis_execution_layout.addWidget(self.progress_label)
+ self.progress_bar = QtWidgets.QProgressBar(parent=self.horizontalLayoutWidget_4)
+ self.progress_bar.setProperty("value", 0)
+ self.progress_bar.setObjectName("progress_bar")
+ self.analysis_execution_layout.addWidget(self.progress_bar)
+ self.execute_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.execute_button.setMinimumSize(QtCore.QSize(200, 41))
+ self.execute_button.setMaximumSize(QtCore.QSize(200, 41))
+ self.execute_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(0, 150, 0);\n"
+" border-radius: 15px;\n"
+"}")
+ self.execute_button.setObjectName("execute_button")
+ self.analysis_execution_layout.addWidget(self.execute_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.finish_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.finish_button.setEnabled(False)
+ self.finish_button.setMinimumSize(QtCore.QSize(200, 41))
+ self.finish_button.setMaximumSize(QtCore.QSize(200, 41))
+ self.finish_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.finish_button.setObjectName("finish_button")
+ self.analysis_execution_layout.addWidget(self.finish_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.analysis_execution_layout.addItem(spacerItem2)
+ self.analysis_execution_layout.setStretch(0, 2)
+ self.analysis_execution_layout.setStretch(1, 2)
+ self.analysis_execution_layout.setStretch(2, 2)
+ self.analysis_execution_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.analysis_execution_layout)
+
+ self.retranslateUi(analysisExecution)
+ QtCore.QMetaObject.connectSlotsByName(analysisExecution)
+
+ def retranslateUi(self, analysisExecution):
+ _translate = QtCore.QCoreApplication.translate
+ analysisExecution.setWindowTitle(_translate("analysisExecution", "Analysis Execution"))
+ self.sidebar.setToolTip(_translate("analysisExecution", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("analysisExecution", "Image Selection:"))
+ self.imageLabel.setText(_translate("analysisExecution", "Image:"))
+ self.phantomLabel.setText(_translate("analysisExecution", "Phantom:"))
+ self.image_path_input.setText(_translate("analysisExecution", "Sample filename "))
+ self.phantom_path_input.setText(_translate("analysisExecution", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("analysisExecution", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("analysisExecution", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("analysisExecution", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("analysisExecution", "Visualization / Export"))
+ self.back_button.setText(_translate("analysisExecution", "Back"))
+ self.analysis_execution_label.setText(_translate("analysisExecution", "Analysis in Progress..."))
+ self.progress_label.setText(_translate("analysisExecution", "Ready to execute analysis"))
+ self.execute_button.setText(_translate("analysisExecution", "Execute Analysis"))
+ self.finish_button.setText(_translate("analysisExecution", "Finish"))
diff --git a/src/ceus/analysis_loading/ui/analysis_function_selection_ui.py b/src/ceus/analysis_loading/ui/analysis_function_selection_ui.py
new file mode 100644
index 0000000..94106ba
--- /dev/null
+++ b/src/ceus/analysis_loading/ui/analysis_function_selection_ui.py
@@ -0,0 +1,274 @@
+# Form implementation generated from reading ui file 'src\ceus\analysis_loading\ui\analysis_function_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_analysisFunctionSelection(object):
+ def setupUi(self, analysisFunctionSelection):
+ analysisFunctionSelection.setObjectName("analysisFunctionSelection")
+ analysisFunctionSelection.resize(1284, 803)
+ analysisFunctionSelection.setMinimumSize(QtCore.QSize(0, 0))
+ analysisFunctionSelection.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=analysisFunctionSelection)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(60, 20, 951, 731))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.analysis_function_layout = QtWidgets.QVBoxLayout()
+ self.analysis_function_layout.setContentsMargins(30, -1, 30, -1)
+ self.analysis_function_layout.setSpacing(20)
+ self.analysis_function_layout.setObjectName("analysis_function_layout")
+ self.analysis_function_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_function_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_function_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.analysis_function_label.setScaledContents(False)
+ self.analysis_function_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_function_label.setWordWrap(True)
+ self.analysis_function_label.setObjectName("analysis_function_label")
+ self.analysis_function_layout.addWidget(self.analysis_function_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.functions_content = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.functions_content.setGeometry(QtCore.QRect(0, 0, 69, 69))
+ self.functions_content.setObjectName("functions_content")
+ self.functions_layout = QtWidgets.QVBoxLayout(self.functions_content)
+ self.functions_layout.setObjectName("functions_layout")
+ self.analysis_function_layout.addWidget(self.functions_content)
+ self.next_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.next_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.next_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.next_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.next_button.setObjectName("next_button")
+ self.analysis_function_layout.addWidget(self.next_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.analysis_function_layout.addItem(spacerItem2)
+ self.analysis_function_layout.setStretch(0, 2)
+ self.analysis_function_layout.setStretch(1, 2)
+ self.analysis_function_layout.setStretch(2, 2)
+ self.analysis_function_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.analysis_function_layout)
+
+ self.retranslateUi(analysisFunctionSelection)
+ QtCore.QMetaObject.connectSlotsByName(analysisFunctionSelection)
+
+ def retranslateUi(self, analysisFunctionSelection):
+ _translate = QtCore.QCoreApplication.translate
+ analysisFunctionSelection.setWindowTitle(_translate("analysisFunctionSelection", "Analysis Function Selection"))
+ self.sidebar.setToolTip(_translate("analysisFunctionSelection", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("analysisFunctionSelection", "Image Selection:"))
+ self.imageLabel.setText(_translate("analysisFunctionSelection", "Image:"))
+ self.phantomLabel.setText(_translate("analysisFunctionSelection", "Phantom:"))
+ self.image_path_input.setText(_translate("analysisFunctionSelection", "Sample filename "))
+ self.phantom_path_input.setText(_translate("analysisFunctionSelection", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("analysisFunctionSelection", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("analysisFunctionSelection", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("analysisFunctionSelection", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("analysisFunctionSelection", "Visualization / Export"))
+ self.back_button.setText(_translate("analysisFunctionSelection", "Back"))
+ self.analysis_function_label.setText(_translate("analysisFunctionSelection", "Select Analysis Function:"))
+ self.next_button.setText(_translate("analysisFunctionSelection", "Next"))
diff --git a/src/ceus/analysis_loading/ui/analysis_params.ui b/src/ceus/analysis_loading/ui/analysis_params.ui
new file mode 100644
index 0000000..c373b58
--- /dev/null
+++ b/src/ceus/analysis_loading/ui/analysis_params.ui
@@ -0,0 +1,688 @@
+
+
+ analysisParams
+
+
+
+ 0
+ 0
+ 1284
+ 803
+
+
+
+
+ 0
+ 0
+
+
+
+ Analysis Parameters Configuration
+
+
+ QWidget {
+ background: rgb(42, 42, 42);
+}
+
+
+
+
+ 60
+ 20
+ 951
+ 731
+
+
+
+ -
+
+
+ 0
+
+
+ QLayout::SizeConstraint::SetMaximumSize
+
+
-
+
+
+
+ 341
+ 601
+
+
+
+
+ 241
+ 601
+
+
+
+ <html><head/><body><p><br/></p></body></html>
+
+
+ QWidget {
+ background-color: rgb(28, 0, 101);
+}
+
+
+
+
+ 0
+ 0
+ 341
+ 121
+
+
+
+
+ 341
+ 121
+
+
+
+
+ 341
+ 121
+
+
+
+ QFrame {
+ background-color: rgb(99, 0, 174);
+ border: 1px solid black;
+}
+
+
+ QFrame::Shape::StyledPanel
+
+
+ QFrame::Shadow::Raised
+
+
+
+
+ 70
+ 0
+ 191
+ 51
+
+
+
+ QLabel {
+ font-size: 21px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+ border: 0px;
+ font-weight: bold;
+}
+
+
+ Image Selection:
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+
+
+ -60
+ 40
+ 191
+ 51
+
+
+
+ QLabel {
+ font-size: 16px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+ border: 0px;
+ font-weight: bold;
+}
+
+
+ Image:
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+
+
+ -50
+ 70
+ 191
+ 51
+
+
+
+ QLabel {
+ font-size: 16px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+ border: 0px;
+ font-weight: bold
+}
+
+
+ Phantom:
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+
+
+ 100
+ 40
+ 241
+ 51
+
+
+
+ QLabel {
+ font-size: 14px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+ border: 0px;
+}
+
+
+ Sample filename
+
+
+ Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter
+
+
+
+
+
+ 100
+ 70
+ 241
+ 51
+
+
+
+ QLabel {
+ font-size: 14px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+ border: 0px;
+}
+
+
+ Sample filename
+
+
+ Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter
+
+
+
+
+
+
+ 0
+ 120
+ 341
+ 121
+
+
+
+
+ 341
+ 121
+
+
+
+ QFrame {
+ background-color: rgb(99, 0, 174);
+ border: 1px solid black;
+}
+
+
+ QFrame::Shape::StyledPanel
+
+
+ QFrame::Shadow::Raised
+
+
+
+
+ 0
+ 40
+ 341
+ 51
+
+
+
+ QLabel {
+ font-size: 21px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+ border: 0px;
+ font-weight: bold;
+}
+
+
+ Segmentation Selection
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+
+
+
+ 0
+ 240
+ 341
+ 121
+
+
+
+
+ 341
+ 121
+
+
+
+ QFrame {
+ background-color: rgb(99, 0, 174);
+ border: 1px solid black;
+}
+
+
+ QFrame::Shape::StyledPanel
+
+
+ QFrame::Shadow::Raised
+
+
+
+
+ 0
+ 30
+ 341
+ 51
+
+
+
+ QLabel {
+ font-size: 21px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+ border: 0px;
+ font-weight:bold;
+}
+
+
+ Analysis Parameter Selection
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+
+
+
+ 0
+ 360
+ 341
+ 121
+
+
+
+
+ 341
+ 121
+
+
+
+
+ 341
+ 121
+
+
+
+ QFrame {
+ background-color: rgb(99, 0, 174);
+ border: 1px solid black;
+}
+
+
+ QFrame::Shape::StyledPanel
+
+
+ QFrame::Shadow::Raised
+
+
+
+
+ 0
+ 30
+ 341
+ 51
+
+
+
+ QLabel {
+ font-size: 21px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+ border: 0px;
+ font-weight: bold;
+}
+
+
+ CEUS Analysis
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+
+
+
+ 0
+ 480
+ 341
+ 121
+
+
+
+
+ 341
+ 121
+
+
+
+
+ 341
+ 121
+
+
+
+ QFrame {
+ background-color: rgb(49, 0, 124);
+ border: 1px solid black;
+}
+
+
+ QFrame::Shape::StyledPanel
+
+
+ QFrame::Shadow::Raised
+
+
+
+
+ 20
+ 30
+ 301
+ 51
+
+
+
+ QLabel {
+ font-size: 21px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+ border: 0px;
+ font-weight: bold;
+}
+
+
+ Visualization / Export
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+
+
+ -
+
+
+
+ 341
+ 16777215
+
+
+
+ QFrame {
+ background-color: rgb(28, 0, 101);
+}
+
+
+
+ QLayout::SizeConstraint::SetMinAndMaxSize
+
+
+ 10
+
+
+ 10
+
+
+ 10
+
+
+ 10
+
+
-
+
+
+ Qt::Orientation::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Qt::Orientation::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 131
+ 41
+
+
+
+
+ 131
+ 41
+
+
+
+ QPushButton {
+ color: white;
+ font-size: 16px;
+ background: rgb(90, 37, 255);
+ border-radius: 15px;
+}
+
+
+ Back
+
+
+
+
+
+
+
+
+ -
+
+
+ 50
+
+
+ 30
+
+
+ 10
+
+
+ 30
+
+
+ 10
+
+
-
+
+
+ QLabel {
+ font-size: 29px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+}
+
+
+ Analysis in Progress...
+
+
+ Qt::TextFormat::AutoText
+
+
+ false
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+ true
+
+
+
+ -
+
+
+ QLabel {
+ font-size: 29px;
+ color: rgb(255, 255, 255);
+ background-color: rgba(255, 255, 255, 0);
+}
+
+
+ Configure Analysis Parameters:
+
+
+ Qt::TextFormat::AutoText
+
+
+ false
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+ true
+
+
+
+ -
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 409
+ 284
+
+
+
+
+
+
+ -
+
+
+ QLabel {
+ color: rgb(0, 255, 0);
+ font-size: 20px;
+ background-color: rgba(255, 255, 255, 0);
+}
+
+
+ Running Analysis....
+
+
+ Qt::AlignmentFlag::AlignCenter
+
+
+
+ -
+
+
+
+ 131
+ 41
+
+
+
+
+ 131
+ 41
+
+
+
+ QPushButton {
+ color: white;
+ font-size: 16px;
+ background: rgb(90, 37, 255);
+ border-radius: 15px;
+}
+
+
+ Run Analysis
+
+
+
+ -
+
+
+ Qt::Orientation::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ceus/analysis_loading/ui/analysis_params_ui.py b/src/ceus/analysis_loading/ui/analysis_params_ui.py
new file mode 100644
index 0000000..313a371
--- /dev/null
+++ b/src/ceus/analysis_loading/ui/analysis_params_ui.py
@@ -0,0 +1,292 @@
+# Form implementation generated from reading ui file 'src\ceus\analysis_loading\ui\analysis_params.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_analysisParams(object):
+ def setupUi(self, analysisParams):
+ analysisParams.setObjectName("analysisParams")
+ analysisParams.resize(1284, 803)
+ analysisParams.setMinimumSize(QtCore.QSize(0, 0))
+ analysisParams.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=analysisParams)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(60, 20, 951, 731))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.analysis_params_layout = QtWidgets.QVBoxLayout()
+ self.analysis_params_layout.setContentsMargins(30, 10, 30, 10)
+ self.analysis_params_layout.setSpacing(50)
+ self.analysis_params_layout.setObjectName("analysis_params_layout")
+ self.analysis_execution_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_execution_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_execution_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_execution_label.setWordWrap(True)
+ self.analysis_execution_label.setObjectName("analysis_execution_label")
+ self.analysis_params_layout.addWidget(self.analysis_execution_label)
+ self.analysis_params_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_params_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_params_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_params_label.setWordWrap(True)
+ self.analysis_params_label.setObjectName("analysis_params_label")
+ self.analysis_params_layout.addWidget(self.analysis_params_label)
+ self.params_scroll_area = QtWidgets.QScrollArea(parent=self.horizontalLayoutWidget_4)
+ self.params_scroll_area.setWidgetResizable(True)
+ self.params_scroll_area.setObjectName("params_scroll_area")
+ self.params_content = QtWidgets.QWidget()
+ self.params_content.setGeometry(QtCore.QRect(0, 0, 409, 284))
+ self.params_content.setObjectName("params_content")
+ self.params_layout = QtWidgets.QVBoxLayout(self.params_content)
+ self.params_layout.setObjectName("params_layout")
+ self.params_scroll_area.setWidget(self.params_content)
+ self.analysis_params_layout.addWidget(self.params_scroll_area)
+ self.analysis_running_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_running_label.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 0);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_running_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_running_label.setObjectName("analysis_running_label")
+ self.analysis_params_layout.addWidget(self.analysis_running_label)
+ self.run_analysis_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.run_analysis_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.run_analysis_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.run_analysis_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.run_analysis_button.setObjectName("run_analysis_button")
+ self.analysis_params_layout.addWidget(self.run_analysis_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.analysis_params_layout.addItem(spacerItem2)
+ self.full_screen_layout.addLayout(self.analysis_params_layout)
+
+ self.retranslateUi(analysisParams)
+ QtCore.QMetaObject.connectSlotsByName(analysisParams)
+
+ def retranslateUi(self, analysisParams):
+ _translate = QtCore.QCoreApplication.translate
+ analysisParams.setWindowTitle(_translate("analysisParams", "Analysis Parameters Configuration"))
+ self.imageSelectionLabelSidebar.setText(_translate("analysisParams", "Image Selection:"))
+ self.imageLabel.setText(_translate("analysisParams", "Image:"))
+ self.phantomLabel.setText(_translate("analysisParams", "Phantom:"))
+ self.image_path_input.setText(_translate("analysisParams", "Sample filename "))
+ self.phantom_path_input.setText(_translate("analysisParams", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("analysisParams", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("analysisParams", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("analysisParams", "CEUS Analysis"))
+ self.exportResultsLabel.setText(_translate("analysisParams", "Visualization / Export"))
+ self.back_button.setText(_translate("analysisParams", "Back"))
+ self.analysis_execution_label.setText(_translate("analysisParams", "Analysis in Progress..."))
+ self.analysis_params_label.setText(_translate("analysisParams", "Configure Analysis Parameters:"))
+ self.analysis_running_label.setText(_translate("analysisParams", "Running Analysis...."))
+ self.run_analysis_button.setText(_translate("analysisParams", "Run Analysis"))
diff --git a/src/ceus/analysis_loading/views/analysis_execution_widget.py b/src/ceus/analysis_loading/views/analysis_execution_widget.py
index 08d5b76..a302e51 100644
--- a/src/ceus/analysis_loading/views/analysis_execution_widget.py
+++ b/src/ceus/analysis_loading/views/analysis_execution_widget.py
@@ -10,10 +10,11 @@
from PyQt6.QtCore import pyqtSignal, Qt, QTimer
from PyQt6.QtGui import QFont
-from quantus.gui.mvc.base_view import BaseViewMixin
-from quantus.gui.analysis_loading.ui.analysis_execution_ui import Ui_analysisExecution
-from quantus.data_objs import UltrasoundRfImage, BmodeSeg, RfAnalysisConfig
-from quantus.analysis.paramap.framework import ParamapAnalysis
+from ...mvc.base_view import BaseViewMixin
+from ..ui.analysis_execution_ui import Ui_analysisExecution
+from engines.ceus.src.data_objs.image import UltrasoundImage
+from engines.ceus.src.data_objs.seg import CeusSeg
+from engines.ceus.src.time_series_analysis.curves.framework import CurvesAnalysis
class AnalysisExecutionWidget(QWidget, BaseViewMixin):
@@ -26,11 +27,11 @@ class AnalysisExecutionWidget(QWidget, BaseViewMixin):
# Signals for communicating with controller
execution_started = pyqtSignal(dict) # execution_data
- analysis_confirmed = pyqtSignal(object) # analysis_data (ParamapAnalysis)
+ analysis_confirmed = pyqtSignal(object) # analysis_data (CurvesAnalysis)
close_requested = pyqtSignal()
back_requested = pyqtSignal()
- def __init__(self, image_data: UltrasoundRfImage, seg_data: BmodeSeg, config_data: RfAnalysisConfig, parent: Optional[QWidget] = None):
+ def __init__(self, image_data: UltrasoundImage, seg_data: CeusSeg, config_data, parent: Optional[QWidget] = None):
QWidget.__init__(self, parent)
self.__init_base_view__(parent)
self._ui = Ui_analysisExecution()
@@ -40,7 +41,7 @@ def __init__(self, image_data: UltrasoundRfImage, seg_data: BmodeSeg, config_dat
# Current state
self._execution_summary: Dict = {}
- self._analysis_data: Optional[ParamapAnalysis] = None
+ self._analysis_data: Optional[CurvesAnalysis] = None
self._is_executing = False
self._results_shown = False # Track if results have been shown
@@ -78,8 +79,8 @@ def setup_ui(self) -> None:
# Update labels to reflect inputted image and phantom
if self._image_data is not None:
- self._ui.image_path_input.setText(self._image_data.scan_name or "No image loaded")
- self._ui.phantom_path_input.setText(self._image_data.phantom_name or "No phantom loaded")
+ self._ui.image_path_input.setText(getattr(self._image_data, 'scan_name', "No image loaded"))
+ self._ui.phantom_path_input.setText(getattr(self._image_data, 'phantom_name', "No phantom loaded"))
else:
self._ui.image_path_input.setText("No image loaded")
self._ui.phantom_path_input.setText("No phantom loaded")
@@ -219,7 +220,7 @@ def _clear_summary_layout(self) -> None:
if child.widget():
child.widget().deleteLater()
- def show_results(self, analysis_data: ParamapAnalysis) -> None:
+ def show_results(self, analysis_data: CurvesAnalysis) -> None:
"""
Show analysis results.
diff --git a/src/ceus/analysis_loading/views/analysis_function_selection_widget.py b/src/ceus/analysis_loading/views/analysis_function_selection_widget.py
index f36643d..318544a 100644
--- a/src/ceus/analysis_loading/views/analysis_function_selection_widget.py
+++ b/src/ceus/analysis_loading/views/analysis_function_selection_widget.py
@@ -9,9 +9,10 @@
from PyQt6.QtWidgets import QWidget, QComboBox, QVBoxLayout, QHBoxLayout, QLabel, QSizePolicy
from PyQt6.QtCore import pyqtSignal, Qt
-from quantus.gui.mvc.base_view import BaseViewMixin
-from quantus.gui.analysis_loading.ui.analysis_function_selection_ui import Ui_analysisFunctionSelection
-from quantus.data_objs import UltrasoundRfImage, BmodeSeg, RfAnalysisConfig
+from ...mvc.base_view import BaseViewMixin
+from ..ui.analysis_function_selection_ui import Ui_analysisFunctionSelection
+from engines.ceus.src.data_objs.image import UltrasoundImage
+from engines.ceus.src.data_objs.seg import CeusSeg
class AnalysisFunctionSelectionWidget(QWidget, BaseViewMixin):
@@ -27,7 +28,7 @@ class AnalysisFunctionSelectionWidget(QWidget, BaseViewMixin):
close_requested = pyqtSignal()
back_requested = pyqtSignal()
- def __init__(self, image_data: UltrasoundRfImage, seg_data: BmodeSeg, config_data: RfAnalysisConfig, parent: Optional[QWidget] = None):
+ def __init__(self, image_data: UltrasoundImage, seg_data: CeusSeg, config_data, parent: Optional[QWidget] = None):
QWidget.__init__(self, parent)
self.__init_base_view__(parent)
self._ui = Ui_analysisFunctionSelection()
@@ -56,8 +57,8 @@ def setup_ui(self) -> None:
# Update labels to reflect inputted image and phantom
if self._image_data is not None:
- self._ui.image_path_input.setText(self._image_data.scan_name or "No image loaded")
- self._ui.phantom_path_input.setText(self._image_data.phantom_name or "No phantom loaded")
+ self._ui.image_path_input.setText(getattr(self._image_data, 'scan_name', "No image loaded"))
+ self._ui.phantom_path_input.setText(getattr(self._image_data, 'phantom_name', "No phantom loaded"))
else:
self._ui.image_path_input.setText("No image loaded")
self._ui.phantom_path_input.setText("No phantom loaded")
diff --git a/src/ceus/analysis_loading/views/analysis_params_widget.py b/src/ceus/analysis_loading/views/analysis_params_widget.py
new file mode 100644
index 0000000..aea4c51
--- /dev/null
+++ b/src/ceus/analysis_loading/views/analysis_params_widget.py
@@ -0,0 +1,92 @@
+"""
+Analysis Parameters Widget for Analysis Loading
+
+This widget allows users to configure parameters required for the selected analysis functions.
+It dynamically creates input fields based on the required parameters.
+"""
+
+from typing import List, Optional, Dict, Any
+from PyQt6.QtWidgets import (QWidget, QLabel, QLineEdit, QDoubleSpinBox, QSpinBox,
+ QCheckBox, QComboBox, QFormLayout,
+ QGroupBox, QTextEdit)
+from PyQt6.QtCore import pyqtSignal, Qt, QTimer
+
+from ...mvc.base_view import BaseViewMixin
+from ..ui.analysis_params_ui import Ui_analysisParams
+from engines.ceus.src.data_objs.image import UltrasoundImage
+from engines.ceus.src.data_objs.seg import CeusSeg
+
+
+class AnalysisParamsWidget(QWidget, BaseViewMixin):
+ """
+ Widget for configuring analysis parameters.
+
+ This widget dynamically creates input fields based on the required parameters
+ for the selected analysis functions.
+ """
+
+ # Signals for communicating with controller
+ params_configured = pyqtSignal(dict) # analysis_params
+ close_requested = pyqtSignal()
+ back_requested = pyqtSignal()
+
+ def __init__(self, image_data: UltrasoundImage, seg_data: CeusSeg, config_data, parent: Optional[QWidget] = None):
+ QWidget.__init__(self, parent)
+ self.__init_base_view__(parent)
+ self._ui = Ui_analysisParams()
+ self._image_data = image_data
+ self._seg_data = seg_data
+ self._config_data = config_data
+
+ # Track parameter inputs
+ self._param_inputs: Dict[str, QWidget] = {}
+ self._required_params: List[str] = []
+ self._selected_functions: List[str] = []
+
+ def setup_ui(self) -> None:
+ """Setup the user interface."""
+ self._ui.setupUi(self)
+
+ # Configure layout for parameters configuration (assuming similar structure to QUS)
+ if hasattr(self._ui, 'full_screen_layout'):
+ self.setLayout(self._ui.full_screen_layout)
+
+ # Update labels to reflect inputted image
+ if hasattr(self._ui, 'image_path_input') and self._image_data:
+ scan_name = getattr(self._image_data, 'scan_name', 'Unknown')
+ self._ui.image_path_input.setText(scan_name)
+
+ def connect_signals(self) -> None:
+ """Connect UI signals to internal handlers."""
+ if hasattr(self._ui, 'run_analysis_button'):
+ self._ui.run_analysis_button.clicked.connect(self._on_run_analysis_clicked)
+ if hasattr(self._ui, 'back_button'):
+ self._ui.back_button.clicked.connect(self._on_back_clicked)
+
+ def set_required_params(self, required_params: List[str], selected_functions: List[str]) -> None:
+ """
+ Set required parameters and create input fields.
+
+ Args:
+ required_params: List of required parameter names
+ selected_functions: List of selected function names
+ """
+ self._required_params = required_params
+ self._selected_functions = selected_functions
+ self._create_parameter_inputs()
+
+ def _create_parameter_inputs(self) -> None:
+ """Create input fields for each required parameter."""
+ # This implementation is simplified compared to QUS for now
+ # Ideally would dynamically create inputs based on CEUS requirements
+ pass
+
+ def _on_run_analysis_clicked(self) -> None:
+ """Handle run analysis button click."""
+ # Collect parameters (simplified)
+ params = {}
+ self.params_configured.emit(params)
+
+ def _on_back_clicked(self) -> None:
+ """Handle back button click."""
+ self.back_requested.emit()
diff --git a/src/ceus/application_controller.py b/src/ceus/application_controller.py
index 86f6cbf..3456bf1 100644
--- a/src/ceus/application_controller.py
+++ b/src/ceus/application_controller.py
@@ -12,7 +12,9 @@
from .image_loading.image_loading_view_coordinator import ImageLoadingViewCoordinator
from .image_loading.image_loading_controller import ImageLoadingController
from .seg_loading.seg_loading_controller import SegmentationLoadingController
-from engines.ceus.src.data_objs import UltrasoundImage, CeusSeg
+from .analysis_loading.analysis_loading_controller import AnalysisLoadingController
+from engines.ceus.src.data_objs.image import UltrasoundImage
+from engines.ceus.src.data_objs.seg import CeusSeg
class ApplicationController(QObject):
@@ -37,9 +39,14 @@ def __init__(self, app: QApplication):
# Unified application model
self._model = ApplicationModel()
+ # Current data
+ self._image_data: Optional[UltrasoundImage] = None
+ self._seg_data: Optional[CeusSeg] = None
+
# Controllers for different screens (using the same model)
self._image_loading_controller: Optional[ImageLoadingController] = None
self._segmentation_controller: Optional[SegmentationLoadingController] = None
+ self._analysis_loading_controller: Optional[AnalysisLoadingController] = None
# Setup main widget
self._setup_main_widget()
@@ -82,6 +89,8 @@ def _initialize_segmentation_loading(self, image_data: UltrasoundImage) -> None:
Args:
image_data: Loaded image data from previous screen
"""
+ self._image_data = image_data
+
if self._segmentation_controller:
self._cleanup_segmentation_loading()
@@ -128,10 +137,58 @@ def _on_segmentation_action(self, action_name: str, action_data) -> None:
"""
if action_name == 'segmentation_confirmed':
self._seg_data = self._segmentation_controller.get_loaded_segmentation()
- # TODO: Navigate to analysis screen when implemented
- print("Analysis screen coming soon...")
- self._app.quit()
+
+ # Use model data as source of truth
+ image_data = self._model.image_data if self._model.image_data else self._image_data
+
+ self._initialize_analysis_loading(image_data, self._seg_data)
+ def _initialize_analysis_loading(self, image_data: UltrasoundImage, seg_data: CeusSeg) -> None:
+ """
+ Initialize the analysis loading screen.
+
+ Args:
+ image_data: Loaded image data
+ seg_data: Loaded segmentation data
+ """
+ if self._analysis_loading_controller:
+ self._cleanup_analysis_loading()
+
+ # Create controller with unified model
+ # Note: CEUS might need a config object, passing None for now if not available
+ self._analysis_loading_controller = AnalysisLoadingController(self._model, image_data, seg_data, None)
+
+ # Connect signals
+ self._analysis_loading_controller.view.user_action.connect(self._on_analysis_action)
+ self._analysis_loading_controller.view.back_requested.connect(self._navigate_to_segmentation_loading)
+
+ # Add to stack and show
+ self._widget_stack.addWidget(self._analysis_loading_controller.view)
+ self._widget_stack.setCurrentWidget(self._analysis_loading_controller.view)
+
+ def _on_analysis_action(self, action_name: str, action_data) -> None:
+ """
+ Handle actions from the analysis loading screen.
+
+ Args:
+ action_name: Name of the action
+ action_data: Data associated with the action
+ """
+ if action_name == 'analysis_loading_completed':
+ print("Analysis completed successfully!")
+ # Future: Navigate to visualization screen
+ self._app.quit()
+
+ def _navigate_to_segmentation_loading(self) -> None:
+ """Navigate back to segmentation loading."""
+ if self._analysis_loading_controller:
+ self._cleanup_analysis_loading()
+
+ if self._segmentation_controller:
+ self._widget_stack.setCurrentWidget(self._segmentation_controller.view)
+ else:
+ self._initialize_segmentation_loading(self._image_data)
+
def _navigate_to_image_loading(self) -> None:
"""Navigate to image loading screen."""
# Reset image loading controller to initial state
@@ -192,6 +249,15 @@ def _cleanup(self) -> None:
"""Clean up all resources before application exit."""
self._cleanup_image_loading()
self._cleanup_segmentation_loading()
+ self._cleanup_analysis_loading()
+
+ def _cleanup_analysis_loading(self) -> None:
+ """Clean up analysis loading controller resources."""
+ if self._analysis_loading_controller:
+ self._widget_stack.removeWidget(self._analysis_loading_controller.view)
+ self._analysis_loading_controller.cleanup()
+ self._analysis_loading_controller.view.deleteLater()
+ self._analysis_loading_controller = None
@property
def image_data(self) -> Optional[UltrasoundImage]:
diff --git a/src/ceus/application_model.py b/src/ceus/application_model.py
index 2ae47fc..4f6b8dc 100644
--- a/src/ceus/application_model.py
+++ b/src/ceus/application_model.py
@@ -12,8 +12,11 @@
from .mvc.base_model import BaseModel
from engines.ceus.src.image_loading.options import get_scan_loaders
from engines.ceus.src.seg_loading.options import get_seg_loaders
+from engines.ceus.src.time_series_analysis.options import get_analysis_types
from engines.ceus.src.entrypoints import scan_loading_step, seg_loading_step
-from engines.ceus.src.data_objs import UltrasoundImage, CeusSeg
+from engines.ceus.src.data_objs.image import UltrasoundImage
+from engines.ceus.src.data_objs.seg import CeusSeg
+from engines.ceus.src.time_series_analysis.curves.framework import CurvesAnalysis
class ScanLoadingWorker(QThread):
@@ -75,6 +78,56 @@ def run(self):
self.error_msg.emit(f"Error loading segmentation: {e}")
+class AnalysisWorker(QThread):
+ """Worker thread for time-consuming analysis operations."""
+ finished = pyqtSignal(object)
+ error_msg = pyqtSignal(str)
+
+ def __init__(self, analysis_type: str, image_data: UltrasoundImage,
+ config_data: Any, seg_data: CeusSeg,
+ selected_functions: List[str], analysis_kwargs: Dict[str, Any]):
+ super().__init__()
+ self.analysis_type = analysis_type
+ self.image_data = image_data
+ self.config_data = config_data
+ self.seg_data = seg_data
+ self.selected_functions = selected_functions
+ self.analysis_kwargs = analysis_kwargs
+
+ def run(self):
+ """Execute the analysis in background thread."""
+ try:
+ from engines.ceus.src.time_series_analysis.options import get_analysis_types
+ all_types, _ = get_analysis_types()
+
+ if self.analysis_type not in all_types:
+ self.error_msg.emit(f"Invalid analysis type: {self.analysis_type}")
+ return
+
+ analysis_cls = all_types[self.analysis_type]
+
+ # Initialize analysis
+ analysis_obj = analysis_cls(
+ self.image_data,
+ self.seg_data,
+ self.selected_functions,
+ **self.analysis_kwargs
+ )
+
+ # Execute analysis
+ # Note: For CEUS, execution might happen during init or via a specific method
+ # In time_series_analysis/curves/framework.py, init does some setup but maybe not full execution
+ if hasattr(analysis_obj, 'run'):
+ analysis_obj.run()
+
+ self.finished.emit(analysis_obj)
+
+ except Exception as e:
+ import traceback
+ traceback.print_exc()
+ self.error_msg.emit(f"Error during analysis: {e}")
+
+
class ApplicationModel(BaseModel):
"""
Unified application model that manages all data and business logic for the QuantUS GUI.
@@ -88,7 +141,9 @@ class ApplicationModel(BaseModel):
# Additional signals for application-specific events
image_loaded = pyqtSignal(UltrasoundImage)
+ preprocessing_complete = pyqtSignal(UltrasoundImage)
segmentation_loaded = pyqtSignal(CeusSeg)
+ analysis_completed = pyqtSignal(object) # Emits CurvesAnalysis
def __init__(self):
super().__init__()
@@ -105,9 +160,17 @@ def __init__(self):
self._seg_data: Optional[CeusSeg] = None
self._seg_worker: Optional[SegLoadingWorker] = None
+ # Analysis state
+ self._analysis_data: Optional[CurvesAnalysis] = None
+ self._analysis_types: Dict[str, Any] = {}
+ self._analysis_functions: Dict[str, Any] = {}
+ self._selected_analysis_type: Optional[str] = None
+ self._analysis_worker: Optional[AnalysisWorker] = None
+
# Initialize loaders
self._load_scan_loaders()
self._load_seg_loaders()
+ self._load_analysis_types()
def _load_scan_loaders(self) -> None:
"""Load available scan loaders from backend."""
@@ -122,6 +185,15 @@ def _load_seg_loaders(self) -> None:
self._seg_loaders = get_seg_loaders()
except Exception as e:
self._emit_error(f"Failed to load seg loaders: {e}")
+
+ def _load_analysis_types(self) -> None:
+ """Load available analysis types from backend."""
+ try:
+ self._analysis_types, self._analysis_functions = get_analysis_types()
+ except Exception as e:
+ print(f"Error loading analysis types: {e}")
+ self._analysis_types = {}
+ self._analysis_functions = {}
# Image Loading Properties and Methods
@property
@@ -279,6 +351,35 @@ def get_preprocessing_kwargs_requirements(self, func_names: list) -> list:
from engines.ceus.src.image_preprocessing.options import get_required_im_preproc_kwargs
return get_required_im_preproc_kwargs(func_names)
+ def apply_preprocessing(self, func_configs: List[Dict[str, Any]]) -> None:
+ """
+ Apply preprocessing to the model's current image.
+ This modifies the image data in the model.
+
+ Args:
+ func_configs: List of dicts with 'name' and 'kwargs' for each function
+ """
+ if not self._image_data:
+ self._emit_error("No image loaded to preprocess")
+ return
+
+ try:
+ funcs = self.get_preprocessing_options()
+ processed_image = self._image_data
+
+ for config in func_configs:
+ name = config['name']
+ kwargs = config.get('kwargs', {})
+ if name in funcs:
+ processed_image = funcs[name](processed_image, **kwargs)
+ else:
+ print(f"WARNING: Preprocessing function {name} not found")
+
+ self._image_data = processed_image
+ self.preprocessing_complete.emit(self._image_data)
+ except Exception as e:
+ self._emit_error(f"Error during preprocessing: {e}")
+
def apply_preprocessing_preview(self, func_configs: List[Dict[str, Any]], image_data: Optional[UltrasoundImage] = None) -> UltrasoundImage:
"""
Apply preprocessing to the given UltrasoundImage.
@@ -544,6 +645,19 @@ def _on_segmentation_loading_complete(self, seg_data: CeusSeg) -> None:
else:
print(f"DEBUG: Segmentation loading failed - invalid seg data")
self._emit_error("Failed to load segmentation data")
+
+ def set_manual_segmentation(self, seg_data: CeusSeg) -> None:
+ """
+ Set manually drawn segmentation data.
+
+ Args:
+ seg_data: Manually drawn segmentation data
+ """
+ if seg_data and hasattr(seg_data, 'seg_mask') and seg_data.seg_mask is not None:
+ self._seg_data = seg_data
+ self.segmentation_loaded.emit(seg_data)
+ else:
+ self._emit_error("Invalid manual segmentation data")
def cleanup(self) -> None:
"""Clean up resources."""
@@ -556,3 +670,83 @@ def cleanup(self) -> None:
self._seg_worker.quit()
self._seg_worker.wait()
self._seg_worker = None
+
+ # ============================================================================
+ # ANALYSIS METHODS
+ # ============================================================================
+
+ def get_analysis_types(self) -> tuple:
+ """Get available analysis types and functions."""
+ return self._analysis_types, self._analysis_functions
+
+ def set_analysis_type(self, analysis_type: str) -> bool:
+ """
+ Set the selected analysis type.
+
+ Args:
+ analysis_type: Analysis type to select
+
+ Returns:
+ bool: True if successful
+ """
+ if analysis_type in self._analysis_types:
+ self._selected_analysis_type = analysis_type
+ return True
+ else:
+ print(f"DEBUG: Invalid analysis type: {analysis_type}")
+ return False
+
+ def get_analysis_functions(self, analysis_type: str) -> dict:
+ """
+ Get available functions for an analysis type.
+
+ Args:
+ analysis_type: Analysis type
+
+ Returns:
+ dict: Available functions for the analysis type
+ """
+ # In CEUS engine, analysis_functions is a flat dict of all available curve functions
+ # that are applicable to both 'curves' and 'curves_paramap' analysis types.
+ if analysis_type in self._analysis_functions and isinstance(self._analysis_functions[analysis_type], dict):
+ return self._analysis_functions[analysis_type]
+
+ return self._analysis_functions
+
+ def set_analysis_data(self, analysis_data: CurvesAnalysis) -> None:
+ """
+ Store completed analysis data.
+
+ Args:
+ analysis_data: Completed analysis data
+ """
+ self._analysis_data = analysis_data
+ # Signal that analysis is complete
+ self.analysis_completed.emit(analysis_data)
+
+ def run_analysis(self, analysis_type: str, image_data: UltrasoundImage,
+ config_data: Any, seg_data: CeusSeg,
+ selected_functions: List[str], **kwargs) -> None:
+ """
+ Run the analysis in a background thread.
+ """
+ # Stop existing worker if running
+ if self._analysis_worker and self._analysis_worker.isRunning():
+ self._analysis_worker.quit()
+ self._analysis_worker.wait()
+
+ self._analysis_worker = AnalysisWorker(
+ analysis_type, image_data, config_data, seg_data, selected_functions, kwargs
+ )
+
+ self._analysis_worker.finished.connect(self._on_analysis_worker_finished)
+ self._analysis_worker.error_msg.connect(self._emit_error)
+
+ self._set_loading(True)
+ self._analysis_worker.start()
+
+ def _on_analysis_worker_finished(self, analysis_obj: Any) -> None:
+ """Handle analysis completion."""
+ self._set_loading(False)
+ self._analysis_data = analysis_obj
+ self.analysis_completed.emit(analysis_obj)
diff --git a/src/ceus/image_loading/ui/file_selection_ui.py b/src/ceus/image_loading/ui/file_selection_ui.py
new file mode 100644
index 0000000..644a7ba
--- /dev/null
+++ b/src/ceus/image_loading/ui/file_selection_ui.py
@@ -0,0 +1,339 @@
+# Form implementation generated from reading ui file 'src\ceus\image_loading\ui\file_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_select_scan_file(object):
+ def setupUi(self, select_scan_file):
+ select_scan_file.setObjectName("select_scan_file")
+ select_scan_file.resize(1418, 1539)
+ select_scan_file.setMinimumSize(QtCore.QSize(201, 31))
+ select_scan_file.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ select_scan_file.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget = QtWidgets.QWidget(parent=select_scan_file)
+ self.horizontalLayoutWidget.setGeometry(QtCore.QRect(70, 10, 1545, 1331))
+ self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.scanSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.scanSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.scanSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.scanSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.scanSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.scanSelectionSidebar.setObjectName("scanSelectionSidebar")
+ self.scanSelectionLabelSidebar = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.scanSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanSelectionLabelSidebar.setObjectName("scanSelectionLabelSidebar")
+ self.scanLabel = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanLabel.setGeometry(QtCore.QRect(-60, 50, 191, 51))
+ self.scanLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanLabel.setObjectName("scanLabel")
+ self.segSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segSidebar.setObjectName("segSidebar")
+ self.segSidebarLabel = QtWidgets.QLabel(parent=self.segSidebar)
+ self.segSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segSidebarLabel.setObjectName("segSidebarLabel")
+ self.resultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.resultsSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.resultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.resultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.resultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.resultsSidebar.setObjectName("resultsSidebar")
+ self.resultsLabel = QtWidgets.QLabel(parent=self.resultsSidebar)
+ self.resultsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.resultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.resultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.resultsLabel.setObjectName("resultsLabel")
+ self.visualizationsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.visualizationsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.visualizationsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.visualizationsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.visualizationsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.visualizationsSidebar.setObjectName("visualizationsSidebar")
+ self.visualizationsLabel = QtWidgets.QLabel(parent=self.visualizationsSidebar)
+ self.visualizationsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.visualizationsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.visualizationsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.visualizationsLabel.setObjectName("visualizationsLabel")
+ self.analysisConfigSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisConfigSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisConfigSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisConfigSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisConfigSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisConfigSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisConfigSidebar.setObjectName("analysisConfigSidebar")
+ self.analysisConfigLabel = QtWidgets.QLabel(parent=self.analysisConfigSidebar)
+ self.analysisConfigLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisConfigLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisConfigLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisConfigLabel.setObjectName("analysisConfigLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame_2 = QtWidgets.QFrame(parent=self.horizontalLayoutWidget)
+ self.gridFrame_2.setMinimumSize(QtCore.QSize(341, 0))
+ self.gridFrame_2.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame_2.setObjectName("gridFrame_2")
+ self.backButtonGrid_2 = QtWidgets.QGridLayout(self.gridFrame_2)
+ self.backButtonGrid_2.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid_2.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid_2.setObjectName("backButtonGrid_2")
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame_2)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid_2.addWidget(self.back_button, 1, 0, 1, 1)
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid_2.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid_2.addItem(spacerItem1, 1, 1, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame_2)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.img_selection_layout = QtWidgets.QVBoxLayout()
+ self.img_selection_layout.setContentsMargins(30, 30, 30, 30)
+ self.img_selection_layout.setSpacing(20)
+ self.img_selection_layout.setObjectName("img_selection_layout")
+ self.select_data_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.select_data_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_data_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_data_label.setScaledContents(False)
+ self.select_data_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_data_label.setWordWrap(True)
+ self.select_data_label.setObjectName("select_data_label")
+ self.img_selection_layout.addWidget(self.select_data_label)
+ self.chooseImgLayout = QtWidgets.QVBoxLayout()
+ self.chooseImgLayout.setContentsMargins(20, -1, 20, -1)
+ self.chooseImgLayout.setObjectName("chooseImgLayout")
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem2)
+ self.image_path_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.image_path_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.image_path_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.image_path_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.image_path_label.setObjectName("image_path_label")
+ self.chooseImgLayout.addWidget(self.image_path_label)
+ self.image_path_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget)
+ self.image_path_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.image_path_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.image_path_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.image_path_input.setObjectName("image_path_input")
+ self.chooseImgLayout.addWidget(self.image_path_input, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.chooseImageButtonsLayout = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout.setSpacing(6)
+ self.chooseImageButtonsLayout.setObjectName("chooseImageButtonsLayout")
+ self.choose_image_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.choose_image_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_image_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_image_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_image_path_button.setObjectName("choose_image_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.choose_image_path_button, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.clear_image_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.clear_image_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_image_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_image_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_image_path_button.setObjectName("clear_image_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.clear_image_path_button, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.chooseImgLayout.addLayout(self.chooseImageButtonsLayout)
+ spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem3)
+ self.img_selection_layout.addLayout(self.chooseImgLayout)
+ self.loading_options_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.loading_options_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_options_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.loading_options_label.setScaledContents(False)
+ self.loading_options_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_options_label.setWordWrap(True)
+ self.loading_options_label.setObjectName("loading_options_label")
+ self.img_selection_layout.addWidget(self.loading_options_label)
+ self.loading_options_table = QtWidgets.QTableWidget(parent=self.horizontalLayoutWidget)
+ self.loading_options_table.setStyleSheet("QTableWidget {\n"
+" background: rgb(108, 108, 108);\n"
+" color: white;\n"
+"}")
+ self.loading_options_table.setDragEnabled(False)
+ self.loading_options_table.setRowCount(0)
+ self.loading_options_table.setColumnCount(0)
+ self.loading_options_table.setObjectName("loading_options_table")
+ self.loading_options_table.horizontalHeader().setCascadingSectionResizes(False)
+ self.img_selection_layout.addWidget(self.loading_options_table)
+ self.generate_image_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.generate_image_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.generate_image_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.generate_image_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.generate_image_button.setObjectName("generate_image_button")
+ self.img_selection_layout.addWidget(self.generate_image_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.loading_screen_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.loading_screen_label.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 0);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_screen_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_screen_label.setObjectName("loading_screen_label")
+ self.img_selection_layout.addWidget(self.loading_screen_label)
+ self.select_image_error_msg = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.select_image_error_msg.setStyleSheet("QLabel {\n"
+" color: rgb(255, 0, 23);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_image_error_msg.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_image_error_msg.setObjectName("select_image_error_msg")
+ self.img_selection_layout.addWidget(self.select_image_error_msg)
+ self.img_selection_layout.setStretch(0, 2)
+ self.img_selection_layout.setStretch(4, 3)
+ self.img_selection_layout.setStretch(6, 2)
+ self.full_screen_layout.addLayout(self.img_selection_layout)
+ self.full_screen_layout.setStretch(1, 5)
+
+ self.retranslateUi(select_scan_file)
+ QtCore.QMetaObject.connectSlotsByName(select_scan_file)
+
+ def retranslateUi(self, select_scan_file):
+ _translate = QtCore.QCoreApplication.translate
+ select_scan_file.setWindowTitle(_translate("select_scan_file", "Select Ultrasound Image"))
+ self.sidebar.setToolTip(_translate("select_scan_file", "
"))
+ self.scanSelectionLabelSidebar.setText(_translate("select_scan_file", "Scan Selection:"))
+ self.scanLabel.setText(_translate("select_scan_file", "Scan:"))
+ self.segSidebarLabel.setText(_translate("select_scan_file", "Segmentation Selection"))
+ self.resultsLabel.setText(_translate("select_scan_file", "Results"))
+ self.visualizationsLabel.setText(_translate("select_scan_file", "Visualizations"))
+ self.analysisConfigLabel.setText(_translate("select_scan_file", "Analysis Configuration"))
+ self.back_button.setText(_translate("select_scan_file", "Back"))
+ self.select_data_label.setText(_translate("select_scan_file", "Select Files to Generate CEUS Scan:"))
+ self.image_path_label.setText(_translate("select_scan_file", "Input path to scan file\n"
+" (.rf, .rfd, .mat, .bin)"))
+ self.choose_image_path_button.setText(_translate("select_scan_file", "Choose File"))
+ self.clear_image_path_button.setText(_translate("select_scan_file", "Clear Path"))
+ self.loading_options_label.setText(_translate("select_scan_file", "\n"
+"Scan Loading Options:"))
+ self.loading_options_table.setSortingEnabled(False)
+ self.generate_image_button.setText(_translate("select_scan_file", "Generate Image"))
+ self.loading_screen_label.setText(_translate("select_scan_file", "LOADING...."))
+ self.select_image_error_msg.setText(_translate("select_scan_file", "ERROR: At least one dimension of phantom data\n"
+"smaller than corresponding dimension\n"
+"of image data"))
diff --git a/src/ceus/image_loading/ui/scan_type_ui.py b/src/ceus/image_loading/ui/scan_type_ui.py
new file mode 100644
index 0000000..3dcf3fd
--- /dev/null
+++ b/src/ceus/image_loading/ui/scan_type_ui.py
@@ -0,0 +1,235 @@
+# Form implementation generated from reading ui file 'src\ceus\image_loading\ui\scan_type.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_select_scan_type(object):
+ def setupUi(self, select_scan_type):
+ select_scan_type.setObjectName("select_scan_type")
+ select_scan_type.resize(1512, 893)
+ select_scan_type.setMinimumSize(QtCore.QSize(201, 31))
+ select_scan_type.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ select_scan_type.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget = QtWidgets.QWidget(parent=select_scan_type)
+ self.horizontalLayoutWidget.setGeometry(QtCore.QRect(70, 10, 1545, 844))
+ self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.scanSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.scanSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.scanSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.scanSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.scanSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.scanSelectionSidebar.setObjectName("scanSelectionSidebar")
+ self.scanSelectionLabelSidebar = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.scanSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanSelectionLabelSidebar.setObjectName("scanSelectionLabelSidebar")
+ self.scanLabel = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanLabel.setGeometry(QtCore.QRect(-60, 50, 191, 51))
+ self.scanLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanLabel.setObjectName("scanLabel")
+ self.segSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segSidebar.setObjectName("segSidebar")
+ self.segSidebarLabel = QtWidgets.QLabel(parent=self.segSidebar)
+ self.segSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segSidebarLabel.setObjectName("segSidebarLabel")
+ self.resultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.resultsSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.resultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.resultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.resultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.resultsSidebar.setObjectName("resultsSidebar")
+ self.resultsLabel = QtWidgets.QLabel(parent=self.resultsSidebar)
+ self.resultsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.resultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.resultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.resultsLabel.setObjectName("resultsLabel")
+ self.visualizationsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.visualizationsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.visualizationsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.visualizationsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.visualizationsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.visualizationsSidebar.setObjectName("visualizationsSidebar")
+ self.visualizationsLabel = QtWidgets.QLabel(parent=self.visualizationsSidebar)
+ self.visualizationsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.visualizationsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.visualizationsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.visualizationsLabel.setObjectName("visualizationsLabel")
+ self.analysisConfigSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisConfigSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisConfigSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisConfigSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisConfigSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisConfigSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisConfigSidebar.setObjectName("analysisConfigSidebar")
+ self.analysisConfigLabel = QtWidgets.QLabel(parent=self.analysisConfigSidebar)
+ self.analysisConfigLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisConfigLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisConfigLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisConfigLabel.setObjectName("analysisConfigLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget)
+ self.gridFrame.setMinimumSize(QtCore.QSize(341, 0))
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.select_type_layout = QtWidgets.QVBoxLayout()
+ self.select_type_layout.setContentsMargins(30, -1, 30, -1)
+ self.select_type_layout.setSpacing(50)
+ self.select_type_layout.setObjectName("select_type_layout")
+ self.select_type_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.select_type_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_type_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_type_label.setScaledContents(False)
+ self.select_type_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_type_label.setWordWrap(True)
+ self.select_type_label.setObjectName("select_type_label")
+ self.select_type_layout.addWidget(self.select_type_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.scan_type_dropdown = QtWidgets.QComboBox(parent=self.horizontalLayoutWidget)
+ self.scan_type_dropdown.setMinimumSize(QtCore.QSize(180, 41))
+ self.scan_type_dropdown.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ font = QtGui.QFont()
+ font.setPointSize(16)
+ self.scan_type_dropdown.setFont(font)
+ self.scan_type_dropdown.setStyleSheet("QComboBox {\n"
+" color: white;\n"
+"}")
+ self.scan_type_dropdown.setObjectName("scan_type_dropdown")
+ self.select_type_layout.addWidget(self.scan_type_dropdown)
+ self.accept_type_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.accept_type_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.accept_type_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.accept_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_type_button.setObjectName("accept_type_button")
+ self.select_type_layout.addWidget(self.accept_type_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.select_type_layout.addItem(spacerItem1)
+ self.select_type_layout.setStretch(0, 2)
+ self.select_type_layout.setStretch(1, 2)
+ self.select_type_layout.setStretch(2, 2)
+ self.select_type_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.select_type_layout)
+ self.full_screen_layout.setStretch(0, 1)
+ self.full_screen_layout.setStretch(1, 5)
+
+ self.retranslateUi(select_scan_type)
+ QtCore.QMetaObject.connectSlotsByName(select_scan_type)
+
+ def retranslateUi(self, select_scan_type):
+ _translate = QtCore.QCoreApplication.translate
+ select_scan_type.setWindowTitle(_translate("select_scan_type", "Select Ultrasound Scan"))
+ self.sidebar.setToolTip(_translate("select_scan_type", "
"))
+ self.scanSelectionLabelSidebar.setText(_translate("select_scan_type", "Scan Selection:"))
+ self.scanLabel.setText(_translate("select_scan_type", "Scan:"))
+ self.segSidebarLabel.setText(_translate("select_scan_type", "Segmentation Selection"))
+ self.resultsLabel.setText(_translate("select_scan_type", "Results"))
+ self.visualizationsLabel.setText(_translate("select_scan_type", "Visualizations"))
+ self.analysisConfigLabel.setText(_translate("select_scan_type", "Analysis Configuration"))
+ self.select_type_label.setText(_translate("select_scan_type", "Select Data Type:"))
+ self.accept_type_button.setText(_translate("select_scan_type", "Accept"))
diff --git a/src/ceus/image_loading/views/file_selection_widget.py b/src/ceus/image_loading/views/file_selection_widget.py
index 5b095c6..23f8d09 100644
--- a/src/ceus/image_loading/views/file_selection_widget.py
+++ b/src/ceus/image_loading/views/file_selection_widget.py
@@ -116,7 +116,8 @@ def _show_loading_message(self) -> None:
def _on_choose_image_path(self) -> None:
"""Handle image file selection."""
- if self._file_extensions == ["FOLDER"]:
+ is_folder = any(ext.upper() == "FOLDER" for ext in self._file_extensions)
+ if is_folder:
dir_name = QFileDialog.getExistingDirectory(self, "Select Directory")
if dir_name:
self._ui.image_path_input.setText(dir_name)
@@ -133,12 +134,16 @@ def _on_generate_image(self) -> None:
if not os.path.exists(image_path):
self.show_error(f"Image file does not exist: {os.path.basename(image_path)}")
return
- if not image_path.endswith(tuple(self._file_extensions)) and self._file_extensions != ['FOLDER']:
- self.show_error(f"Image file must have one of the following extensions: {', '.join(self._file_extensions)}")
- return
- if self._file_extensions == ["FOLDER"] and not os.path.isdir(image_path):
- self.show_error("Input path must be a folder!")
- return
+
+ is_folder = any(ext.upper() == "FOLDER" for ext in self._file_extensions)
+ if not is_folder:
+ if not image_path.endswith(tuple(self._file_extensions)):
+ self.show_error(f"Image file must have one of the following extensions: {', '.join(self._file_extensions)}")
+ return
+ else:
+ if not os.path.isdir(image_path):
+ self.show_error("Input path must be a folder!")
+ return
self.clear_error()
diff --git a/src/ceus/seg_loading/__init__.py b/src/ceus/seg_loading/__init__.py
index 9047816..120438d 100644
--- a/src/ceus/seg_loading/__init__.py
+++ b/src/ceus/seg_loading/__init__.py
@@ -8,6 +8,8 @@
# Individual widget components
from .views.seg_type_selection_widget import SegTypeSelectionWidget
from .views.seg_file_selection_widget import SegFileSelectionWidget
+from .views.seg_preview_widget import SegPreviewWidget
+from .views.draw_roi_widget import DrawROIWidget
__all__ = [
'SegmentationLoadingModel',
diff --git a/src/ceus/seg_loading/seg_loading_controller.py b/src/ceus/seg_loading/seg_loading_controller.py
index eab66f6..513dd3b 100644
--- a/src/ceus/seg_loading/seg_loading_controller.py
+++ b/src/ceus/seg_loading/seg_loading_controller.py
@@ -35,15 +35,15 @@ def __init__(self, model: Optional[ApplicationModel] = None, custom_view=None):
super().__init__(model, view)
- # # Connect to model signals for automatic view updates
- # self._connect_model_signals()
+ # Connect to model signals for automatic view updates
+ self._connect_model_signals()
# Initialize view with segmentation loaders
self._initialize_view()
- # def _connect_model_signals(self) -> None:
- # """Connect to model signals for automatic view updates."""
- # self.model.segmentation_loaded.connect(self.view.show_segmentation_preview)
+ def _connect_model_signals(self) -> None:
+ """Connect to model signals for automatic view updates."""
+ self.model.segmentation_loaded.connect(self.view.show_segmentation_preview)
def _initialize_view(self) -> None:
"""Initialize the view with data from the model."""
@@ -67,7 +67,10 @@ def handle_user_action(self, action_name: str, action_data: Any) -> None:
elif action_name == 'apply_preprocs_preview':
self._handle_preprocs_preview(action_data)
elif action_name == 'segmentation_confirmed':
- pass # Handle confirmation action in the application controller
+ # Ensure the model has the confirmed segmentation data
+ # This is especially important for manually drawn segmentations
+ if action_data:
+ self.model.set_manual_segmentation(action_data)
else:
raise ValueError(f"Unknown action: {action_name}")
diff --git a/src/ceus/seg_loading/seg_loading_view_coordinator.py b/src/ceus/seg_loading/seg_loading_view_coordinator.py
index 4f6d9d5..0656042 100644
--- a/src/ceus/seg_loading/seg_loading_view_coordinator.py
+++ b/src/ceus/seg_loading/seg_loading_view_coordinator.py
@@ -15,6 +15,7 @@
from .views.seg_file_selection_widget import SegFileSelectionWidget
from .views.draw_roi_widget import DrawROIWidget
from .views.draw_voi_widget import DrawVOIWidget
+from .views.seg_preview_widget import SegPreviewWidget
from engines.ceus.src.data_objs import UltrasoundImage, CeusSeg
@@ -48,6 +49,7 @@ def __init__(self, image_data: UltrasoundImage, parent: Optional[QWidget] = None
self._seg_type_widget: Optional[SegTypeSelectionWidget] = None
self._seg_file_widget: Optional[SegFileSelectionWidget] = None
self._voi_drawing_widget: Optional[DrawVOIWidget] = None
+ self._seg_preview_widget: Optional[SegPreviewWidget] = None
# Current state
self._selected_seg_type: Optional[str] = None
@@ -109,6 +111,7 @@ def reset_to_seg_type_selection(self) -> None:
widgets_to_remove = [
self._seg_file_widget,
self._voi_drawing_widget,
+ self._seg_preview_widget,
]
for widget in widgets_to_remove:
@@ -181,6 +184,7 @@ def show_voi_drawing(self) -> None:
self._voi_drawing_widget = DrawVOIWidget(self._image_data)
# Connect signals to handle user actions
+ self._voi_drawing_widget.segmentation_completed.connect(self.show_segmentation_preview)
self._voi_drawing_widget.back_requested.connect(self.reset_to_seg_type_selection)
self._voi_drawing_widget.close_requested.connect(self.close_requested.emit)
self._voi_drawing_widget.apply_preprocs_preview.connect(self._on_preprocs_preview_requested)
@@ -201,6 +205,7 @@ def show_roi_drawing(self) -> None:
self._roi_drawing_widget = DrawROIWidget(self._image_data)
# Connect signals to handle user actions
+ self._roi_drawing_widget.segmentation_completed.connect(self.show_segmentation_preview)
self._roi_drawing_widget.back_requested.connect(self.reset_to_seg_type_selection)
self._roi_drawing_widget.close_requested.connect(self.close_requested.emit)
@@ -208,6 +213,34 @@ def show_roi_drawing(self) -> None:
self.addWidget(self._roi_drawing_widget)
self.setCurrentWidget(self._roi_drawing_widget)
+ def show_segmentation_preview(self, seg_data: CeusSeg) -> None:
+ """
+ Show the segmentation preview widget.
+
+ Args:
+ seg_data: Loaded segmentation data
+ """
+ # Avoid redundant preview if already showing this data
+ if self._seg_preview_widget and self._seg_data is seg_data:
+ self.setCurrentWidget(self._seg_preview_widget)
+ return
+
+ self._seg_data = seg_data
+
+ # Create and setup segmentation preview widget
+ self._seg_preview_widget = SegPreviewWidget(self._image_data, seg_data)
+
+ # Connect signals to handle user actions
+ self._seg_preview_widget.segmentation_confirmed.connect(
+ lambda: self.user_action.emit('segmentation_confirmed', seg_data)
+ )
+ self._seg_preview_widget.back_requested.connect(self.reset_to_seg_type_selection)
+ self._seg_preview_widget.close_requested.connect(self.close_requested.emit)
+
+ # Add to stack and show
+ self.addWidget(self._seg_preview_widget)
+ self.setCurrentWidget(self._seg_preview_widget)
+
# ============================================================================
# USER ACTION HANDLING - Process user interactions and communicate with controller
# ============================================================================
diff --git a/src/ceus/seg_loading/ui/draw_roi_ui.py b/src/ceus/seg_loading/ui/draw_roi_ui.py
new file mode 100644
index 0000000..5725f26
--- /dev/null
+++ b/src/ceus/seg_loading/ui/draw_roi_ui.py
@@ -0,0 +1,571 @@
+# Form implementation generated from reading ui file 'src\ceus\seg_loading\ui\draw_roi.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_constructRoi(object):
+ def setupUi(self, constructRoi):
+ constructRoi.setObjectName("constructRoi")
+ constructRoi.resize(1422, 725)
+ constructRoi.setMinimumSize(QtCore.QSize(1400, 662))
+ constructRoi.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.main_layout = QtWidgets.QVBoxLayout(constructRoi)
+ self.main_layout.setContentsMargins(0, 0, 0, 0)
+ self.main_layout.setObjectName("main_layout")
+ self.full_screen_layout = QtWidgets.QHBoxLayout()
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=constructRoi)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.scanSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.scanSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.scanSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.scanSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.scanSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.scanSelectionSidebar.setObjectName("scanSelectionSidebar")
+ self.scanSelectionLabelSidebar = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.scanSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanSelectionLabelSidebar.setObjectName("scanSelectionLabelSidebar")
+ self.scanLabel = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanLabel.setGeometry(QtCore.QRect(-60, 50, 191, 51))
+ self.scanLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanLabel.setObjectName("scanLabel")
+ self.scan_name_input = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scan_name_input.setGeometry(QtCore.QRect(70, 50, 261, 51))
+ self.scan_name_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.scan_name_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.scan_name_input.setObjectName("scan_name_input")
+ self.segSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segSidebar.setObjectName("segSidebar")
+ self.segSidebarLabel = QtWidgets.QLabel(parent=self.segSidebar)
+ self.segSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segSidebarLabel.setObjectName("segSidebarLabel")
+ self.resultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.resultsSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.resultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.resultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.resultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.resultsSidebar.setObjectName("resultsSidebar")
+ self.resultsLabel = QtWidgets.QLabel(parent=self.resultsSidebar)
+ self.resultsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.resultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.resultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.resultsLabel.setObjectName("resultsLabel")
+ self.visualizationsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.visualizationsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.visualizationsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.visualizationsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.visualizationsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.visualizationsSidebar.setObjectName("visualizationsSidebar")
+ self.visualizationsLabel = QtWidgets.QLabel(parent=self.visualizationsSidebar)
+ self.visualizationsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.visualizationsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.visualizationsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.visualizationsLabel.setObjectName("visualizationsLabel")
+ self.analysisConfigSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisConfigSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisConfigSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisConfigSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisConfigSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisConfigSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisConfigSidebar.setObjectName("analysisConfigSidebar")
+ self.analysisConfigLabel = QtWidgets.QLabel(parent=self.analysisConfigSidebar)
+ self.analysisConfigLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisConfigLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisConfigLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisConfigLabel.setObjectName("analysisConfigLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame_2 = QtWidgets.QFrame(parent=constructRoi)
+ self.gridFrame_2.setMinimumSize(QtCore.QSize(341, 0))
+ self.gridFrame_2.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame_2.setObjectName("gridFrame_2")
+ self.backButtonGrid_3 = QtWidgets.QGridLayout(self.gridFrame_2)
+ self.backButtonGrid_3.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid_3.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid_3.setObjectName("backButtonGrid_3")
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame_2)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid_3.addWidget(self.back_button, 1, 0, 1, 1)
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid_3.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid_3.addItem(spacerItem1, 1, 1, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame_2)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.frame_preview_layout = QtWidgets.QVBoxLayout()
+ self.frame_preview_layout.setContentsMargins(30, 10, 30, 10)
+ self.frame_preview_layout.setSpacing(10)
+ self.frame_preview_layout.setObjectName("frame_preview_layout")
+ self.select_frame_label = QtWidgets.QLabel(parent=constructRoi)
+ self.select_frame_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_frame_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_frame_label.setScaledContents(False)
+ self.select_frame_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_frame_label.setWordWrap(True)
+ self.select_frame_label.setObjectName("select_frame_label")
+ self.frame_preview_layout.addWidget(self.select_frame_label)
+ self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+ self.back_from_drag_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.back_from_drag_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.back_from_drag_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.back_from_drag_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.back_from_drag_button.setCheckable(True)
+ self.back_from_drag_button.setChecked(False)
+ self.back_from_drag_button.setObjectName("back_from_drag_button")
+ self.horizontalLayout_4.addWidget(self.back_from_drag_button)
+ self.save_drag_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.save_drag_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.save_drag_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.save_drag_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.save_drag_button.setCheckable(True)
+ self.save_drag_button.setChecked(False)
+ self.save_drag_button.setObjectName("save_drag_button")
+ self.horizontalLayout_4.addWidget(self.save_drag_button)
+ self.frame_preview_layout.addLayout(self.horizontalLayout_4)
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.draw_pts_type_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.draw_pts_type_button.setMinimumSize(QtCore.QSize(221, 41))
+ self.draw_pts_type_button.setMaximumSize(QtCore.QSize(221, 41))
+ self.draw_pts_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.draw_pts_type_button.setCheckable(True)
+ self.draw_pts_type_button.setChecked(False)
+ self.draw_pts_type_button.setObjectName("draw_pts_type_button")
+ self.horizontalLayout.addWidget(self.draw_pts_type_button)
+ self.draw_freehand_drag_type_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.draw_freehand_drag_type_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.draw_freehand_drag_type_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.draw_freehand_drag_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"QPushButton:checked {\n"
+" color:white; \n"
+" font-size: 16px;\n"
+" background: rgb(45, 0, 110);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.draw_freehand_drag_type_button.setCheckable(False)
+ self.draw_freehand_drag_type_button.setChecked(False)
+ self.draw_freehand_drag_type_button.setObjectName("draw_freehand_drag_type_button")
+ self.horizontalLayout.addWidget(self.draw_freehand_drag_type_button)
+ self.draw_rect_drag_type_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.draw_rect_drag_type_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.draw_rect_drag_type_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.draw_rect_drag_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"QPushButton:checked {\n"
+" color:white; \n"
+" font-size: 16px;\n"
+" background: rgb(45, 0, 110);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.draw_rect_drag_type_button.setCheckable(False)
+ self.draw_rect_drag_type_button.setChecked(False)
+ self.draw_rect_drag_type_button.setObjectName("draw_rect_drag_type_button")
+ self.horizontalLayout.addWidget(self.draw_rect_drag_type_button)
+ self.frame_preview_layout.addLayout(self.horizontalLayout)
+ self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+ self.clear_roi_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.clear_roi_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.clear_roi_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.clear_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_roi_button.setCheckable(False)
+ self.clear_roi_button.setObjectName("clear_roi_button")
+ self.horizontalLayout_3.addWidget(self.clear_roi_button)
+ self.undo_last_pt_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.undo_last_pt_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.undo_last_pt_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.undo_last_pt_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.undo_last_pt_button.setCheckable(False)
+ self.undo_last_pt_button.setObjectName("undo_last_pt_button")
+ self.horizontalLayout_3.addWidget(self.undo_last_pt_button)
+ self.close_roi_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.close_roi_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.close_roi_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.close_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.close_roi_button.setCheckable(False)
+ self.close_roi_button.setObjectName("close_roi_button")
+ self.horizontalLayout_3.addWidget(self.close_roi_button)
+ self.back_from_pts_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.back_from_pts_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.back_from_pts_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.back_from_pts_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_from_pts_button.setCheckable(False)
+ self.back_from_pts_button.setObjectName("back_from_pts_button")
+ self.horizontalLayout_3.addWidget(self.back_from_pts_button)
+ self.save_pts_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.save_pts_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.save_pts_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.save_pts_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.save_pts_button.setCheckable(False)
+ self.save_pts_button.setObjectName("save_pts_button")
+ self.horizontalLayout_3.addWidget(self.save_pts_button)
+ self.frame_preview_layout.addLayout(self.horizontalLayout_3)
+ self.save_roi_layout = QtWidgets.QGridLayout()
+ self.save_roi_layout.setContentsMargins(-1, -1, -1, 10)
+ self.save_roi_layout.setSpacing(10)
+ self.save_roi_layout.setObjectName("save_roi_layout")
+ self.save_folder_input = QtWidgets.QLineEdit(parent=constructRoi)
+ self.save_folder_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_folder_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_folder_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_folder_input.setObjectName("save_folder_input")
+ self.save_roi_layout.addWidget(self.save_folder_input, 0, 1, 1, 1)
+ self.dest_folder_label = QtWidgets.QLabel(parent=constructRoi)
+ self.dest_folder_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.dest_folder_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.dest_folder_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.dest_folder_label.setObjectName("dest_folder_label")
+ self.save_roi_layout.addWidget(self.dest_folder_label, 0, 0, 1, 1, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.roi_name_label = QtWidgets.QLabel(parent=constructRoi)
+ self.roi_name_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.roi_name_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roi_name_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.roi_name_label.setObjectName("roi_name_label")
+ self.save_roi_layout.addWidget(self.roi_name_label, 2, 0, 1, 1, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.save_name_input = QtWidgets.QLineEdit(parent=constructRoi)
+ self.save_name_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_name_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_name_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_name_input.setObjectName("save_name_input")
+ self.save_roi_layout.addWidget(self.save_name_input, 2, 1, 1, 1)
+ self.chooseImageButtonsLayout_2 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_2.setSpacing(10)
+ self.chooseImageButtonsLayout_2.setObjectName("chooseImageButtonsLayout_2")
+ self.choose_save_folder_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.choose_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_save_folder_button.setObjectName("choose_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.choose_save_folder_button)
+ self.clear_save_folder_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.clear_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_save_folder_button.setObjectName("clear_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.clear_save_folder_button)
+ self.save_roi_layout.addLayout(self.chooseImageButtonsLayout_2, 0, 2, 1, 1)
+ self.chooseImageButtonsLayout_4 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_4.setObjectName("chooseImageButtonsLayout_4")
+ self.save_roi_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.save_roi_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.save_roi_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.save_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.save_roi_button.setObjectName("save_roi_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.save_roi_button)
+ self.back_from_save_button = QtWidgets.QPushButton(parent=constructRoi)
+ self.back_from_save_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_from_save_button.setObjectName("back_from_save_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.back_from_save_button)
+ self.save_roi_layout.addLayout(self.chooseImageButtonsLayout_4, 2, 2, 1, 1)
+ self.save_roi_layout.setColumnStretch(0, 1)
+ self.save_roi_layout.setColumnStretch(1, 10)
+ self.save_roi_layout.setColumnStretch(2, 10)
+ self.save_roi_layout.setRowStretch(0, 1)
+ self.save_roi_layout.setRowStretch(1, 10)
+ self.save_roi_layout.setRowStretch(2, 10)
+ self.frame_preview_layout.addLayout(self.save_roi_layout)
+ self.im_display_frame = QtWidgets.QFrame(parent=constructRoi)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+ sizePolicy.setHorizontalStretch(10)
+ sizePolicy.setVerticalStretch(10)
+ sizePolicy.setHeightForWidth(self.im_display_frame.sizePolicy().hasHeightForWidth())
+ self.im_display_frame.setSizePolicy(sizePolicy)
+ self.im_display_frame.setMinimumSize(QtCore.QSize(501, 321))
+ self.im_display_frame.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.im_display_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.im_display_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.im_display_frame.setObjectName("im_display_frame")
+ self.frame_preview_layout.addWidget(self.im_display_frame)
+ self.frameControlsLayout = QtWidgets.QHBoxLayout()
+ self.frameControlsLayout.setSpacing(10)
+ self.frameControlsLayout.setObjectName("frameControlsLayout")
+ self.frame_slider = QtWidgets.QSlider(parent=constructRoi)
+ self.frame_slider.setMinimumSize(QtCore.QSize(251, 41))
+ self.frame_slider.setMaximumSize(QtCore.QSize(251, 41))
+ self.frame_slider.setOrientation(QtCore.Qt.Orientation.Horizontal)
+ self.frame_slider.setObjectName("frame_slider")
+ self.frameControlsLayout.addWidget(self.frame_slider)
+ self.cur_frame_label = QtWidgets.QLabel(parent=constructRoi)
+ self.cur_frame_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_frame_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.cur_frame_label.setScaledContents(False)
+ self.cur_frame_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_frame_label.setWordWrap(True)
+ self.cur_frame_label.setObjectName("cur_frame_label")
+ self.frameControlsLayout.addWidget(self.cur_frame_label)
+ self.of_frames_label = QtWidgets.QLabel(parent=constructRoi)
+ self.of_frames_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.of_frames_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.of_frames_label.setScaledContents(False)
+ self.of_frames_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.of_frames_label.setWordWrap(True)
+ self.of_frames_label.setObjectName("of_frames_label")
+ self.frameControlsLayout.addWidget(self.of_frames_label)
+ self.total_frames_label = QtWidgets.QLabel(parent=constructRoi)
+ self.total_frames_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.total_frames_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.total_frames_label.setScaledContents(False)
+ self.total_frames_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.total_frames_label.setWordWrap(True)
+ self.total_frames_label.setObjectName("total_frames_label")
+ self.frameControlsLayout.addWidget(self.total_frames_label)
+ self.seconds_label = QtWidgets.QLabel(parent=constructRoi)
+ self.seconds_label.setStyleSheet("QLabel {\n"
+" font-size: 12px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.seconds_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.seconds_label.setScaledContents(False)
+ self.seconds_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.seconds_label.setWordWrap(True)
+ self.seconds_label.setObjectName("seconds_label")
+ self.frameControlsLayout.addWidget(self.seconds_label)
+ self.frame_preview_layout.addLayout(self.frameControlsLayout)
+ self.frame_preview_layout.setStretch(0, 1)
+ self.frame_preview_layout.setStretch(6, 1)
+ self.full_screen_layout.addLayout(self.frame_preview_layout)
+ self.main_layout.addLayout(self.full_screen_layout)
+
+ self.retranslateUi(constructRoi)
+ QtCore.QMetaObject.connectSlotsByName(constructRoi)
+
+ def retranslateUi(self, constructRoi):
+ _translate = QtCore.QCoreApplication.translate
+ constructRoi.setWindowTitle(_translate("constructRoi", "Select Region of Interest"))
+ self.sidebar.setToolTip(_translate("constructRoi", "
"))
+ self.scanSelectionLabelSidebar.setText(_translate("constructRoi", "Scan Selection:"))
+ self.scanLabel.setText(_translate("constructRoi", "Scan:"))
+ self.scan_name_input.setText(_translate("constructRoi", "Sample filename "))
+ self.segSidebarLabel.setText(_translate("constructRoi", "Segmentation Selection"))
+ self.resultsLabel.setText(_translate("constructRoi", "Results"))
+ self.visualizationsLabel.setText(_translate("constructRoi", "Visualizations"))
+ self.analysisConfigLabel.setText(_translate("constructRoi", "Analysis Configuration"))
+ self.back_button.setText(_translate("constructRoi", "Back"))
+ self.select_frame_label.setText(_translate("constructRoi", "Select Frame to Segment:"))
+ self.back_from_drag_button.setText(_translate("constructRoi", "Back"))
+ self.save_drag_button.setText(_translate("constructRoi", "Save ROI"))
+ self.draw_pts_type_button.setText(_translate("constructRoi", "Draw Freehand w Points"))
+ self.draw_freehand_drag_type_button.setText(_translate("constructRoi", "Draw Freehand by Dragging"))
+ self.draw_rect_drag_type_button.setText(_translate("constructRoi", "Draw Rectangle by Dragging"))
+ self.clear_roi_button.setText(_translate("constructRoi", "Clear ROI"))
+ self.undo_last_pt_button.setText(_translate("constructRoi", "Undo Last Point"))
+ self.close_roi_button.setText(_translate("constructRoi", "Close ROI"))
+ self.back_from_pts_button.setText(_translate("constructRoi", "Back"))
+ self.save_pts_button.setText(_translate("constructRoi", "Save ROI"))
+ self.dest_folder_label.setText(_translate("constructRoi", "Dest Folder"))
+ self.roi_name_label.setText(_translate("constructRoi", "ROI Name"))
+ self.choose_save_folder_button.setText(_translate("constructRoi", "Choose Folder"))
+ self.clear_save_folder_button.setText(_translate("constructRoi", "Clear Path"))
+ self.save_roi_button.setText(_translate("constructRoi", "Save"))
+ self.back_from_save_button.setText(_translate("constructRoi", "Back"))
+ self.cur_frame_label.setText(_translate("constructRoi", "0"))
+ self.of_frames_label.setText(_translate("constructRoi", "of"))
+ self.total_frames_label.setText(_translate("constructRoi", "0"))
+ self.seconds_label.setText(_translate("constructRoi", "seconds"))
diff --git a/src/ceus/seg_loading/ui/draw_voi_ui.py b/src/ceus/seg_loading/ui/draw_voi_ui.py
new file mode 100644
index 0000000..9f30e18
--- /dev/null
+++ b/src/ceus/seg_loading/ui/draw_voi_ui.py
@@ -0,0 +1,861 @@
+# Form implementation generated from reading ui file 'src\ceus\seg_loading\ui\draw_voi.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_voi_drawer(object):
+ def setupUi(self, voi_drawer):
+ voi_drawer.setObjectName("voi_drawer")
+ voi_drawer.resize(1512, 832)
+ voi_drawer.setMinimumSize(QtCore.QSize(0, 0))
+ voi_drawer.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=voi_drawer)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(10, -250, 1351, 951))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.scanSelectionSidebar_2 = QtWidgets.QFrame(parent=self.sidebar)
+ self.scanSelectionSidebar_2.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.scanSelectionSidebar_2.setMinimumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar_2.setMaximumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.scanSelectionSidebar_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.scanSelectionSidebar_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.scanSelectionSidebar_2.setObjectName("scanSelectionSidebar_2")
+ self.scanSelectionLabelSidebar_2 = QtWidgets.QLabel(parent=self.scanSelectionSidebar_2)
+ self.scanSelectionLabelSidebar_2.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.scanSelectionLabelSidebar_2.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanSelectionLabelSidebar_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanSelectionLabelSidebar_2.setObjectName("scanSelectionLabelSidebar_2")
+ self.scanLabel_2 = QtWidgets.QLabel(parent=self.scanSelectionSidebar_2)
+ self.scanLabel_2.setGeometry(QtCore.QRect(-60, 50, 191, 51))
+ self.scanLabel_2.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanLabel_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanLabel_2.setObjectName("scanLabel_2")
+ self.scan_name_input = QtWidgets.QLabel(parent=self.scanSelectionSidebar_2)
+ self.scan_name_input.setGeometry(QtCore.QRect(70, 50, 261, 51))
+ self.scan_name_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.scan_name_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.scan_name_input.setObjectName("scan_name_input")
+ self.segSidebar_2 = QtWidgets.QFrame(parent=self.sidebar)
+ self.segSidebar_2.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segSidebar_2.setMaximumSize(QtCore.QSize(341, 121))
+ self.segSidebar_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segSidebar_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segSidebar_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segSidebar_2.setObjectName("segSidebar_2")
+ self.segSidebarLabel_2 = QtWidgets.QLabel(parent=self.segSidebar_2)
+ self.segSidebarLabel_2.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segSidebarLabel_2.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segSidebarLabel_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segSidebarLabel_2.setObjectName("segSidebarLabel_2")
+ self.resultsSidebar_2 = QtWidgets.QFrame(parent=self.sidebar)
+ self.resultsSidebar_2.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.resultsSidebar_2.setMinimumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar_2.setMaximumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.resultsSidebar_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.resultsSidebar_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.resultsSidebar_2.setObjectName("resultsSidebar_2")
+ self.resultsLabel_2 = QtWidgets.QLabel(parent=self.resultsSidebar_2)
+ self.resultsLabel_2.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.resultsLabel_2.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.resultsLabel_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.resultsLabel_2.setObjectName("resultsLabel_2")
+ self.visualizationsSidebar_2 = QtWidgets.QFrame(parent=self.sidebar)
+ self.visualizationsSidebar_2.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.visualizationsSidebar_2.setMinimumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar_2.setMaximumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.visualizationsSidebar_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.visualizationsSidebar_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.visualizationsSidebar_2.setObjectName("visualizationsSidebar_2")
+ self.visualizationsLabel_2 = QtWidgets.QLabel(parent=self.visualizationsSidebar_2)
+ self.visualizationsLabel_2.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.visualizationsLabel_2.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.visualizationsLabel_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.visualizationsLabel_2.setObjectName("visualizationsLabel_2")
+ self.analysisConfigSidebar_2 = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisConfigSidebar_2.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisConfigSidebar_2.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisConfigSidebar_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisConfigSidebar_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisConfigSidebar_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisConfigSidebar_2.setObjectName("analysisConfigSidebar_2")
+ self.analysisConfigLabel_2 = QtWidgets.QLabel(parent=self.analysisConfigSidebar_2)
+ self.analysisConfigLabel_2.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisConfigLabel_2.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisConfigLabel_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisConfigLabel_2.setObjectName("analysisConfigLabel_2")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame_3 = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame_3.setMinimumSize(QtCore.QSize(341, 0))
+ self.gridFrame_3.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame_3.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame_3.setObjectName("gridFrame_3")
+ self.backButtonGrid_4 = QtWidgets.QGridLayout(self.gridFrame_3)
+ self.backButtonGrid_4.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid_4.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid_4.setObjectName("backButtonGrid_4")
+ self.observing_label = QtWidgets.QLabel(parent=self.gridFrame_3)
+ self.observing_label.setStyleSheet("QLabel { background-color : rgb(42, 42, 42); color : red; }")
+ self.observing_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.observing_label.setObjectName("observing_label")
+ self.backButtonGrid_4.addWidget(self.observing_label, 0, 0, 1, 1)
+ self.navigating_label = QtWidgets.QLabel(parent=self.gridFrame_3)
+ self.navigating_label.setStyleSheet("QLabel { background-color : rgb(42, 42, 42); color : green; }")
+ self.navigating_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.navigating_label.setObjectName("navigating_label")
+ self.backButtonGrid_4.addWidget(self.navigating_label, 1, 0, 1, 1)
+ spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid_4.addItem(spacerItem, 3, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame_3)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid_4.addWidget(self.back_button, 3, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid_4.addItem(spacerItem1, 2, 0, 1, 1)
+ self.toggle_crosshair_visibility_button = QtWidgets.QPushButton(parent=self.gridFrame_3)
+ self.toggle_crosshair_visibility_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.toggle_crosshair_visibility_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.toggle_crosshair_visibility_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.toggle_crosshair_visibility_button.setObjectName("toggle_crosshair_visibility_button")
+ self.backButtonGrid_4.addWidget(self.toggle_crosshair_visibility_button, 3, 2, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame_3)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.voi_layout = QtWidgets.QGridLayout()
+ self.voi_layout.setObjectName("voi_layout")
+ self.verticalLayout_6 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_6.setObjectName("verticalLayout_6")
+ self.sag_plane_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_plane_label.sizePolicy().hasHeightForWidth())
+ self.sag_plane_label.setSizePolicy(sizePolicy)
+ self.sag_plane_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_plane_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.sag_plane_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_plane_label.setObjectName("sag_plane_label")
+ self.verticalLayout_6.addWidget(self.sag_plane_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_plane = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(1)
+ sizePolicy.setVerticalStretch(1)
+ sizePolicy.setHeightForWidth(self.sag_plane.sizePolicy().hasHeightForWidth())
+ self.sag_plane.setSizePolicy(sizePolicy)
+ self.sag_plane.setMinimumSize(QtCore.QSize(321, 301))
+ self.sag_plane.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+ self.sag_plane.setMouseTracking(True)
+ self.sag_plane.setFrameShape(QtWidgets.QFrame.Shape.Box)
+ self.sag_plane.setText("")
+ self.sag_plane.setObjectName("sag_plane")
+ self.verticalLayout_6.addWidget(self.sag_plane)
+ self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_7.setSpacing(5)
+ self.horizontalLayout_7.setObjectName("horizontalLayout_7")
+ self.sag_frame_num = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_frame_num.sizePolicy().hasHeightForWidth())
+ self.sag_frame_num.setSizePolicy(sizePolicy)
+ self.sag_frame_num.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_frame_num.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.sag_frame_num.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_frame_num.setObjectName("sag_frame_num")
+ self.horizontalLayout_7.addWidget(self.sag_frame_num, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_of_label.sizePolicy().hasHeightForWidth())
+ self.sag_of_label.setSizePolicy(sizePolicy)
+ self.sag_of_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.sag_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_of_label.setObjectName("sag_of_label")
+ self.horizontalLayout_7.addWidget(self.sag_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_total_frames = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_total_frames.sizePolicy().hasHeightForWidth())
+ self.sag_total_frames.setSizePolicy(sizePolicy)
+ self.sag_total_frames.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_total_frames.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_total_frames.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_total_frames.setObjectName("sag_total_frames")
+ self.horizontalLayout_7.addWidget(self.sag_total_frames, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_7.setStretch(0, 1)
+ self.horizontalLayout_7.setStretch(2, 1)
+ self.verticalLayout_6.addLayout(self.horizontalLayout_7)
+ self.voi_layout.addLayout(self.verticalLayout_6, 0, 1, 1, 1)
+ self.verticalLayout_4 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_4.setObjectName("verticalLayout_4")
+ self.ax_plane_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_plane_label.sizePolicy().hasHeightForWidth())
+ self.ax_plane_label.setSizePolicy(sizePolicy)
+ self.ax_plane_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_plane_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.ax_plane_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_plane_label.setObjectName("ax_plane_label")
+ self.verticalLayout_4.addWidget(self.ax_plane_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_plane = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(1)
+ sizePolicy.setVerticalStretch(1)
+ sizePolicy.setHeightForWidth(self.ax_plane.sizePolicy().hasHeightForWidth())
+ self.ax_plane.setSizePolicy(sizePolicy)
+ self.ax_plane.setMinimumSize(QtCore.QSize(321, 301))
+ self.ax_plane.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+ self.ax_plane.setMouseTracking(True)
+ self.ax_plane.setFrameShape(QtWidgets.QFrame.Shape.Box)
+ self.ax_plane.setText("")
+ self.ax_plane.setObjectName("ax_plane")
+ self.verticalLayout_4.addWidget(self.ax_plane)
+ self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_6.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+ self.horizontalLayout_6.setSpacing(5)
+ self.horizontalLayout_6.setObjectName("horizontalLayout_6")
+ self.ax_frame_num = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_frame_num.sizePolicy().hasHeightForWidth())
+ self.ax_frame_num.setSizePolicy(sizePolicy)
+ self.ax_frame_num.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_frame_num.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.ax_frame_num.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_frame_num.setObjectName("ax_frame_num")
+ self.horizontalLayout_6.addWidget(self.ax_frame_num, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_of_label.sizePolicy().hasHeightForWidth())
+ self.ax_of_label.setSizePolicy(sizePolicy)
+ self.ax_of_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.ax_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_of_label.setObjectName("ax_of_label")
+ self.horizontalLayout_6.addWidget(self.ax_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_total_frames = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_total_frames.sizePolicy().hasHeightForWidth())
+ self.ax_total_frames.setSizePolicy(sizePolicy)
+ self.ax_total_frames.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_total_frames.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_total_frames.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_total_frames.setObjectName("ax_total_frames")
+ self.horizontalLayout_6.addWidget(self.ax_total_frames, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_6.setStretch(0, 1)
+ self.horizontalLayout_6.setStretch(2, 1)
+ self.verticalLayout_4.addLayout(self.horizontalLayout_6)
+ self.voi_layout.addLayout(self.verticalLayout_4, 0, 0, 1, 1)
+ self.verticalLayout_7 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_7.setObjectName("verticalLayout_7")
+ self.cor_plane_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_plane_label.sizePolicy().hasHeightForWidth())
+ self.cor_plane_label.setSizePolicy(sizePolicy)
+ self.cor_plane_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_plane_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cor_plane_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_plane_label.setObjectName("cor_plane_label")
+ self.verticalLayout_7.addWidget(self.cor_plane_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_plane = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(1)
+ sizePolicy.setVerticalStretch(1)
+ sizePolicy.setHeightForWidth(self.cor_plane.sizePolicy().hasHeightForWidth())
+ self.cor_plane.setSizePolicy(sizePolicy)
+ self.cor_plane.setMinimumSize(QtCore.QSize(321, 301))
+ self.cor_plane.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+ self.cor_plane.setMouseTracking(True)
+ self.cor_plane.setFrameShape(QtWidgets.QFrame.Shape.Box)
+ self.cor_plane.setText("")
+ self.cor_plane.setObjectName("cor_plane")
+ self.verticalLayout_7.addWidget(self.cor_plane)
+ self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_8.setSpacing(5)
+ self.horizontalLayout_8.setObjectName("horizontalLayout_8")
+ self.cor_frame_num = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_frame_num.sizePolicy().hasHeightForWidth())
+ self.cor_frame_num.setSizePolicy(sizePolicy)
+ self.cor_frame_num.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_frame_num.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cor_frame_num.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_frame_num.setObjectName("cor_frame_num")
+ self.horizontalLayout_8.addWidget(self.cor_frame_num, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_of_label.sizePolicy().hasHeightForWidth())
+ self.cor_of_label.setSizePolicy(sizePolicy)
+ self.cor_of_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cor_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_of_label.setObjectName("cor_of_label")
+ self.horizontalLayout_8.addWidget(self.cor_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_total_frames = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_total_frames.sizePolicy().hasHeightForWidth())
+ self.cor_total_frames.setSizePolicy(sizePolicy)
+ self.cor_total_frames.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_total_frames.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_total_frames.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_total_frames.setObjectName("cor_total_frames")
+ self.horizontalLayout_8.addWidget(self.cor_total_frames, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_8.setStretch(0, 1)
+ self.horizontalLayout_8.setStretch(2, 1)
+ self.verticalLayout_7.addLayout(self.horizontalLayout_8)
+ self.voi_layout.addLayout(self.verticalLayout_7, 1, 1, 1, 1)
+ self.verticalLayout_5 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_5.setContentsMargins(10, -1, 10, 20)
+ self.verticalLayout_5.setObjectName("verticalLayout_5")
+ self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_2.setObjectName("verticalLayout_2")
+ self.cur_slice_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_slice_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.cur_slice_label.setScaledContents(False)
+ self.cur_slice_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cur_slice_label.setWordWrap(True)
+ self.cur_slice_label.setObjectName("cur_slice_label")
+ self.verticalLayout_2.addWidget(self.cur_slice_label)
+ self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+ self.cur_slice_slider = QtWidgets.QSlider(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_slider.setMinimumSize(QtCore.QSize(285, 0))
+ self.cur_slice_slider.setMaximumSize(QtCore.QSize(285, 16777215))
+ self.cur_slice_slider.setStyleSheet("QSlider {\n"
+" color: white;\n"
+"}")
+ self.cur_slice_slider.setOrientation(QtCore.Qt.Orientation.Horizontal)
+ self.cur_slice_slider.setObjectName("cur_slice_slider")
+ self.horizontalLayout_5.addWidget(self.cur_slice_slider, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_spin_box = QtWidgets.QDoubleSpinBox(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_spin_box.setMaximumSize(QtCore.QSize(70, 16777215))
+ self.cur_slice_spin_box.setStyleSheet("QDoubleSpinBox {\n"
+" background: white;\n"
+" color: black;\n"
+"}")
+ self.cur_slice_spin_box.setObjectName("cur_slice_spin_box")
+ self.horizontalLayout_5.addWidget(self.cur_slice_spin_box, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_of_label.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_slice_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cur_slice_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cur_slice_of_label.setObjectName("cur_slice_of_label")
+ self.horizontalLayout_5.addWidget(self.cur_slice_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_total = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_total.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_slice_total.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_total.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cur_slice_total.setObjectName("cur_slice_total")
+ self.horizontalLayout_5.addWidget(self.cur_slice_total, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_5.setStretch(0, 1)
+ self.verticalLayout_2.addLayout(self.horizontalLayout_5)
+ self.verticalLayout_5.addLayout(self.verticalLayout_2)
+ self.voiAlphaLayout_2 = QtWidgets.QVBoxLayout()
+ self.voiAlphaLayout_2.setObjectName("voiAlphaLayout_2")
+ self.alpha_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.alpha_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.alpha_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.alpha_label.setScaledContents(False)
+ self.alpha_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.alpha_label.setWordWrap(True)
+ self.alpha_label.setObjectName("alpha_label")
+ self.voiAlphaLayout_2.addWidget(self.alpha_label)
+ self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+ self.alpha_status = QtWidgets.QProgressBar(parent=self.horizontalLayoutWidget_4)
+ self.alpha_status.setMinimumSize(QtCore.QSize(285, 0))
+ self.alpha_status.setMaximumSize(QtCore.QSize(285, 16777215))
+ self.alpha_status.setProperty("value", 24)
+ self.alpha_status.setObjectName("alpha_status")
+ self.horizontalLayout_4.addWidget(self.alpha_status, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_spin_box = QtWidgets.QSpinBox(parent=self.horizontalLayoutWidget_4)
+ font = QtGui.QFont()
+ font.setPointSize(13)
+ self.alpha_spin_box.setFont(font)
+ self.alpha_spin_box.setStyleSheet("QSpinBox{\n"
+" background-color: white,\n"
+"}")
+ self.alpha_spin_box.setObjectName("alpha_spin_box")
+ self.horizontalLayout_4.addWidget(self.alpha_spin_box, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.alpha_of_label.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.alpha_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.alpha_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.alpha_of_label.setObjectName("alpha_of_label")
+ self.horizontalLayout_4.addWidget(self.alpha_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_total = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.alpha_total.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.alpha_total.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_total.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.alpha_total.setObjectName("alpha_total")
+ self.horizontalLayout_4.addWidget(self.alpha_total, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_4.setStretch(0, 1)
+ self.horizontalLayout_4.setStretch(1, 1)
+ self.voiAlphaLayout_2.addLayout(self.horizontalLayout_4)
+ self.verticalLayout_5.addLayout(self.voiAlphaLayout_2)
+ self.construct_voi_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.construct_voi_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.construct_voi_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.construct_voi_label.setScaledContents(False)
+ self.construct_voi_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.construct_voi_label.setWordWrap(True)
+ self.construct_voi_label.setObjectName("construct_voi_label")
+ self.verticalLayout_5.addWidget(self.construct_voi_label)
+ self.drawVoiLayout_2 = QtWidgets.QGridLayout()
+ self.drawVoiLayout_2.setObjectName("drawVoiLayout_2")
+ self.undo_last_pt_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.undo_last_pt_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.undo_last_pt_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.undo_last_pt_button.setCheckable(False)
+ self.undo_last_pt_button.setObjectName("undo_last_pt_button")
+ self.drawVoiLayout_2.addWidget(self.undo_last_pt_button, 0, 1, 1, 1)
+ self.interpolate_voi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.interpolate_voi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.interpolate_voi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.interpolate_voi_button.setCheckable(False)
+ self.interpolate_voi_button.setObjectName("interpolate_voi_button")
+ self.drawVoiLayout_2.addWidget(self.interpolate_voi_button, 1, 1, 1, 1)
+ self.draw_roi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.draw_roi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.draw_roi_button.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.draw_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"QPushButton:checked {\n"
+" color:white; \n"
+" font-size: 16px;\n"
+" background: rgb(45, 0, 110);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.draw_roi_button.setCheckable(True)
+ self.draw_roi_button.setChecked(False)
+ self.draw_roi_button.setObjectName("draw_roi_button")
+ self.drawVoiLayout_2.addWidget(self.draw_roi_button, 0, 0, 1, 1)
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.undo_last_roi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.undo_last_roi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.undo_last_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.undo_last_roi_button.setCheckable(False)
+ self.undo_last_roi_button.setObjectName("undo_last_roi_button")
+ self.horizontalLayout.addWidget(self.undo_last_roi_button)
+ self.close_roi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.close_roi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.close_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.close_roi_button.setCheckable(False)
+ self.close_roi_button.setObjectName("close_roi_button")
+ self.horizontalLayout.addWidget(self.close_roi_button)
+ self.drawVoiLayout_2.addLayout(self.horizontalLayout, 1, 0, 1, 1)
+ self.verticalLayout_5.addLayout(self.drawVoiLayout_2)
+ self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_2.setContentsMargins(-1, -1, 0, 0)
+ self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+ self.restart_voi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.restart_voi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.restart_voi_button.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.restart_voi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.restart_voi_button.setCheckable(False)
+ self.restart_voi_button.setObjectName("restart_voi_button")
+ self.horizontalLayout_2.addWidget(self.restart_voi_button)
+ self.save_voi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.save_voi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.save_voi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.save_voi_button.setCheckable(False)
+ self.save_voi_button.setObjectName("save_voi_button")
+ self.horizontalLayout_2.addWidget(self.save_voi_button)
+ self.verticalLayout_5.addLayout(self.horizontalLayout_2)
+ self.interp_loading_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.interp_loading_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: green;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.interp_loading_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.interp_loading_label.setScaledContents(False)
+ self.interp_loading_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.interp_loading_label.setWordWrap(True)
+ self.interp_loading_label.setObjectName("interp_loading_label")
+ self.verticalLayout_5.addWidget(self.interp_loading_label)
+ self.saving_voi_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.saving_voi_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: green;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.saving_voi_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.saving_voi_label.setScaledContents(False)
+ self.saving_voi_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.saving_voi_label.setWordWrap(True)
+ self.saving_voi_label.setObjectName("saving_voi_label")
+ self.verticalLayout_5.addWidget(self.saving_voi_label)
+ self.gridLayout = QtWidgets.QGridLayout()
+ self.gridLayout.setObjectName("gridLayout")
+ self.save_folder_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.save_folder_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_folder_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_folder_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_folder_input.setObjectName("save_folder_input")
+ self.gridLayout.addWidget(self.save_folder_input, 0, 1, 1, 1)
+ self.dest_folder_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.dest_folder_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.dest_folder_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.dest_folder_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.dest_folder_label.setObjectName("dest_folder_label")
+ self.gridLayout.addWidget(self.dest_folder_label, 0, 0, 1, 1)
+ self.chooseImageButtonsLayout_2 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_2.setSpacing(10)
+ self.chooseImageButtonsLayout_2.setObjectName("chooseImageButtonsLayout_2")
+ self.choose_save_folder_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.choose_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_save_folder_button.setObjectName("choose_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.choose_save_folder_button)
+ self.clear_save_folder_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.clear_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_save_folder_button.setObjectName("clear_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.clear_save_folder_button)
+ self.gridLayout.addLayout(self.chooseImageButtonsLayout_2, 0, 2, 1, 1)
+ self.voi_name_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.voi_name_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.voi_name_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.voi_name_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.voi_name_label.setObjectName("voi_name_label")
+ self.gridLayout.addWidget(self.voi_name_label, 1, 0, 1, 1)
+ self.save_name_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.save_name_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_name_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_name_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_name_input.setObjectName("save_name_input")
+ self.gridLayout.addWidget(self.save_name_input, 1, 1, 1, 1)
+ self.chooseImageButtonsLayout_4 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_4.setObjectName("chooseImageButtonsLayout_4")
+ self.export_voi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.export_voi_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.export_voi_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.export_voi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.export_voi_button.setObjectName("export_voi_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.export_voi_button)
+ self.back_from_save_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.back_from_save_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_from_save_button.setObjectName("back_from_save_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.back_from_save_button)
+ self.gridLayout.addLayout(self.chooseImageButtonsLayout_4, 1, 2, 1, 1)
+ self.verticalLayout_5.addLayout(self.gridLayout)
+ self.voi_layout.addLayout(self.verticalLayout_5, 1, 0, 1, 1)
+ self.voi_layout.setColumnStretch(0, 1)
+ self.voi_layout.setColumnStretch(1, 1)
+ self.full_screen_layout.addLayout(self.voi_layout)
+
+ self.retranslateUi(voi_drawer)
+ QtCore.QMetaObject.connectSlotsByName(voi_drawer)
+
+ def retranslateUi(self, voi_drawer):
+ _translate = QtCore.QCoreApplication.translate
+ voi_drawer.setWindowTitle(_translate("voi_drawer", "Draw Volume of Interest"))
+ self.sidebar.setToolTip(_translate("voi_drawer", "
"))
+ self.scanSelectionLabelSidebar_2.setText(_translate("voi_drawer", "Scan Selection:"))
+ self.scanLabel_2.setText(_translate("voi_drawer", "Scan:"))
+ self.scan_name_input.setText(_translate("voi_drawer", "Sample filename "))
+ self.segSidebarLabel_2.setText(_translate("voi_drawer", "Segmentation Selection"))
+ self.resultsLabel_2.setText(_translate("voi_drawer", "Results"))
+ self.visualizationsLabel_2.setText(_translate("voi_drawer", "Visualizations"))
+ self.analysisConfigLabel_2.setText(_translate("voi_drawer", "Analysis Configuration"))
+ self.observing_label.setText(_translate("voi_drawer", "Observing!"))
+ self.navigating_label.setText(_translate("voi_drawer", "Navigating!"))
+ self.back_button.setText(_translate("voi_drawer", "Back"))
+ self.toggle_crosshair_visibility_button.setText(_translate("voi_drawer", "Show/Hide Cross"))
+ self.sag_plane_label.setText(_translate("voi_drawer", "Sagittal Plane"))
+ self.sag_frame_num.setText(_translate("voi_drawer", "0"))
+ self.sag_of_label.setText(_translate("voi_drawer", "of"))
+ self.sag_total_frames.setText(_translate("voi_drawer", "0"))
+ self.ax_plane_label.setText(_translate("voi_drawer", "Axial Plane"))
+ self.ax_frame_num.setText(_translate("voi_drawer", "0"))
+ self.ax_of_label.setText(_translate("voi_drawer", "of"))
+ self.ax_total_frames.setText(_translate("voi_drawer", "0"))
+ self.cor_plane_label.setText(_translate("voi_drawer", "Coronal Plane"))
+ self.cor_frame_num.setText(_translate("voi_drawer", "0"))
+ self.cor_of_label.setText(_translate("voi_drawer", "of"))
+ self.cor_total_frames.setText(_translate("voi_drawer", "0"))
+ self.cur_slice_label.setText(_translate("voi_drawer", "Current Slice (in seconds):"))
+ self.cur_slice_of_label.setText(_translate("voi_drawer", "of"))
+ self.cur_slice_total.setText(_translate("voi_drawer", "0"))
+ self.alpha_label.setText(_translate("voi_drawer", "VOI Alpha:"))
+ self.alpha_of_label.setText(_translate("voi_drawer", "of"))
+ self.alpha_total.setText(_translate("voi_drawer", "255"))
+ self.construct_voi_label.setText(_translate("voi_drawer", "Construct Volume of Interest (VOI):\n"
+"For best results, draw 1 ROI in each plane before interpolating"))
+ self.undo_last_pt_button.setText(_translate("voi_drawer", "Undo Last Point"))
+ self.interpolate_voi_button.setText(_translate("voi_drawer", "Interpolate VOI"))
+ self.draw_roi_button.setText(_translate("voi_drawer", "Draw ROI"))
+ self.undo_last_roi_button.setText(_translate("voi_drawer", "Undo Last ROI"))
+ self.close_roi_button.setText(_translate("voi_drawer", "Close ROI"))
+ self.restart_voi_button.setText(_translate("voi_drawer", "Restart VOI"))
+ self.save_voi_button.setText(_translate("voi_drawer", "Save VOI"))
+ self.interp_loading_label.setText(_translate("voi_drawer", "Interpolation Loading..."))
+ self.saving_voi_label.setText(_translate("voi_drawer", "Saving VOI..."))
+ self.dest_folder_label.setText(_translate("voi_drawer", "Dest Folder"))
+ self.choose_save_folder_button.setText(_translate("voi_drawer", "Choose Folder"))
+ self.clear_save_folder_button.setText(_translate("voi_drawer", "Clear Path"))
+ self.voi_name_label.setText(_translate("voi_drawer", "VOI Name"))
+ self.export_voi_button.setText(_translate("voi_drawer", "Save"))
+ self.back_from_save_button.setText(_translate("voi_drawer", "Back"))
diff --git a/src/ceus/seg_loading/ui/seg_file_selection_ui.py b/src/ceus/seg_loading/ui/seg_file_selection_ui.py
new file mode 100644
index 0000000..d401d5c
--- /dev/null
+++ b/src/ceus/seg_loading/ui/seg_file_selection_ui.py
@@ -0,0 +1,348 @@
+# Form implementation generated from reading ui file 'src\ceus\seg_loading\ui\seg_file_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_seg_file_selector(object):
+ def setupUi(self, seg_file_selector):
+ seg_file_selector.setObjectName("seg_file_selector")
+ seg_file_selector.resize(1512, 829)
+ seg_file_selector.setMinimumSize(QtCore.QSize(0, 0))
+ seg_file_selector.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=seg_file_selector)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(70, 30, 1198, 751))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar_2 = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar_2.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar_2.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar_2.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar_2.setObjectName("sidebar_2")
+ self.scanSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar_2)
+ self.scanSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.scanSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.scanSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.scanSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.scanSelectionSidebar.setObjectName("scanSelectionSidebar")
+ self.scanSelectionLabelSidebar = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.scanSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanSelectionLabelSidebar.setObjectName("scanSelectionLabelSidebar")
+ self.scanLabel = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanLabel.setGeometry(QtCore.QRect(-60, 50, 191, 51))
+ self.scanLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanLabel.setObjectName("scanLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(70, 50, 261, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.segSidebar = QtWidgets.QFrame(parent=self.sidebar_2)
+ self.segSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segSidebar.setObjectName("segSidebar")
+ self.segSidebarLabel = QtWidgets.QLabel(parent=self.segSidebar)
+ self.segSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segSidebarLabel.setObjectName("segSidebarLabel")
+ self.resultsSidebar = QtWidgets.QFrame(parent=self.sidebar_2)
+ self.resultsSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.resultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.resultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.resultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.resultsSidebar.setObjectName("resultsSidebar")
+ self.resultsLabel = QtWidgets.QLabel(parent=self.resultsSidebar)
+ self.resultsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.resultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.resultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.resultsLabel.setObjectName("resultsLabel")
+ self.visualizationsSidebar = QtWidgets.QFrame(parent=self.sidebar_2)
+ self.visualizationsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.visualizationsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.visualizationsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.visualizationsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.visualizationsSidebar.setObjectName("visualizationsSidebar")
+ self.visualizationsLabel = QtWidgets.QLabel(parent=self.visualizationsSidebar)
+ self.visualizationsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.visualizationsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.visualizationsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.visualizationsLabel.setObjectName("visualizationsLabel")
+ self.analysisConfigSidebar = QtWidgets.QFrame(parent=self.sidebar_2)
+ self.analysisConfigSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisConfigSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisConfigSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisConfigSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisConfigSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisConfigSidebar.setObjectName("analysisConfigSidebar")
+ self.analysisConfigLabel = QtWidgets.QLabel(parent=self.analysisConfigSidebar)
+ self.analysisConfigLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisConfigLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisConfigLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisConfigLabel.setObjectName("analysisConfigLabel")
+ self.side_bar_layout.addWidget(self.sidebar_2)
+ self.gridFrame_2 = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame_2.setMinimumSize(QtCore.QSize(341, 0))
+ self.gridFrame_2.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame_2.setObjectName("gridFrame_2")
+ self.backButtonGrid_3 = QtWidgets.QGridLayout(self.gridFrame_2)
+ self.backButtonGrid_3.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid_3.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid_3.setObjectName("backButtonGrid_3")
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame_2)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid_3.addWidget(self.back_button, 1, 0, 1, 1)
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid_3.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid_3.addItem(spacerItem1, 1, 1, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame_2)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.seg_loading_layout = QtWidgets.QVBoxLayout()
+ self.seg_loading_layout.setContentsMargins(30, 30, 30, 30)
+ self.seg_loading_layout.setSpacing(20)
+ self.seg_loading_layout.setObjectName("seg_loading_layout")
+ self.select_seg_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.select_seg_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_seg_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_seg_label.setScaledContents(False)
+ self.select_seg_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_seg_label.setWordWrap(True)
+ self.select_seg_label.setObjectName("select_seg_label")
+ self.seg_loading_layout.addWidget(self.select_seg_label)
+ self.chooseImgLayout = QtWidgets.QVBoxLayout()
+ self.chooseImgLayout.setContentsMargins(20, -1, 20, -1)
+ self.chooseImgLayout.setObjectName("chooseImgLayout")
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem2)
+ self.seg_path_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.seg_path_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.seg_path_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.seg_path_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.seg_path_label.setObjectName("seg_path_label")
+ self.chooseImgLayout.addWidget(self.seg_path_label)
+ self.seg_path_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.seg_path_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.seg_path_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.seg_path_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.seg_path_input.setObjectName("seg_path_input")
+ self.chooseImgLayout.addWidget(self.seg_path_input, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.chooseImageButtonsLayout = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout.setSpacing(1)
+ self.chooseImageButtonsLayout.setObjectName("chooseImageButtonsLayout")
+ self.choose_seg_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.choose_seg_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_seg_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_seg_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_seg_path_button.setObjectName("choose_seg_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.choose_seg_path_button, 0, QtCore.Qt.AlignmentFlag.AlignRight)
+ self.clear_seg_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.clear_seg_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_seg_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_seg_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_seg_path_button.setObjectName("clear_seg_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.clear_seg_path_button, 0, QtCore.Qt.AlignmentFlag.AlignLeft)
+ self.chooseImgLayout.addLayout(self.chooseImageButtonsLayout)
+ spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem3)
+ self.seg_loading_layout.addLayout(self.chooseImgLayout)
+ self.loading_options_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.loading_options_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_options_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.loading_options_label.setScaledContents(False)
+ self.loading_options_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_options_label.setWordWrap(True)
+ self.loading_options_label.setObjectName("loading_options_label")
+ self.seg_loading_layout.addWidget(self.loading_options_label)
+ self.loading_options_table = QtWidgets.QTableWidget(parent=self.horizontalLayoutWidget_4)
+ self.loading_options_table.setStyleSheet("QTableWidget {\n"
+" background: rgb(108, 108, 108);\n"
+" color: white;\n"
+"}")
+ self.loading_options_table.setDragEnabled(False)
+ self.loading_options_table.setRowCount(0)
+ self.loading_options_table.setColumnCount(0)
+ self.loading_options_table.setObjectName("loading_options_table")
+ self.loading_options_table.horizontalHeader().setCascadingSectionResizes(False)
+ self.seg_loading_layout.addWidget(self.loading_options_table)
+ self.accept_seg_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.accept_seg_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.accept_seg_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.accept_seg_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_seg_path_button.setObjectName("accept_seg_path_button")
+ self.seg_loading_layout.addWidget(self.accept_seg_path_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.loading_screen_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.loading_screen_label.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 0);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_screen_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_screen_label.setObjectName("loading_screen_label")
+ self.seg_loading_layout.addWidget(self.loading_screen_label)
+ self.select_seg_error_msg = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.select_seg_error_msg.setStyleSheet("QLabel {\n"
+" color: rgb(255, 0, 23);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_seg_error_msg.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_seg_error_msg.setObjectName("select_seg_error_msg")
+ self.seg_loading_layout.addWidget(self.select_seg_error_msg)
+ self.seg_loading_layout.setStretch(0, 2)
+ self.seg_loading_layout.setStretch(4, 3)
+ self.seg_loading_layout.setStretch(6, 2)
+ self.full_screen_layout.addLayout(self.seg_loading_layout)
+
+ self.retranslateUi(seg_file_selector)
+ QtCore.QMetaObject.connectSlotsByName(seg_file_selector)
+
+ def retranslateUi(self, seg_file_selector):
+ _translate = QtCore.QCoreApplication.translate
+ seg_file_selector.setWindowTitle(_translate("seg_file_selector", "Select Segmentation File"))
+ self.sidebar_2.setToolTip(_translate("seg_file_selector", "
"))
+ self.scanSelectionLabelSidebar.setText(_translate("seg_file_selector", "Scan Selection:"))
+ self.scanLabel.setText(_translate("seg_file_selector", "Scan:"))
+ self.image_path_input.setText(_translate("seg_file_selector", "Sample filename "))
+ self.segSidebarLabel.setText(_translate("seg_file_selector", "Segmentation Selection"))
+ self.resultsLabel.setText(_translate("seg_file_selector", "Results"))
+ self.visualizationsLabel.setText(_translate("seg_file_selector", "Visualizations"))
+ self.analysisConfigLabel.setText(_translate("seg_file_selector", "Analysis Configuration"))
+ self.back_button.setText(_translate("seg_file_selector", "Back"))
+ self.select_seg_label.setText(_translate("seg_file_selector", "Select Segmentation File to Load:"))
+ self.seg_path_label.setText(_translate("seg_file_selector", "Input Path to Image file\n"
+" (.rf, .rfd, .mat, .bin)"))
+ self.choose_seg_path_button.setText(_translate("seg_file_selector", "Choose File"))
+ self.clear_seg_path_button.setText(_translate("seg_file_selector", "Clear Path"))
+ self.loading_options_label.setText(_translate("seg_file_selector", "\n"
+"Segmentation Loading Options:"))
+ self.loading_options_table.setSortingEnabled(False)
+ self.accept_seg_path_button.setText(_translate("seg_file_selector", "Accept"))
+ self.loading_screen_label.setText(_translate("seg_file_selector", "LOADING...."))
+ self.select_seg_error_msg.setText(_translate("seg_file_selector", "ERROR: At least one dimension of phantom data\n"
+"smaller than corresponding dimension\n"
+"of image data"))
diff --git a/src/ceus/seg_loading/ui/seg_type_selection_ui.py b/src/ceus/seg_loading/ui/seg_type_selection_ui.py
new file mode 100644
index 0000000..0e7c5f7
--- /dev/null
+++ b/src/ceus/seg_loading/ui/seg_type_selection_ui.py
@@ -0,0 +1,257 @@
+# Form implementation generated from reading ui file 'src\ceus\seg_loading\ui\seg_type_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_seg_type_selector(object):
+ def setupUi(self, seg_type_selector):
+ seg_type_selector.setObjectName("seg_type_selector")
+ seg_type_selector.resize(1287, 806)
+ seg_type_selector.setMinimumSize(QtCore.QSize(0, 0))
+ seg_type_selector.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=seg_type_selector)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(0, 0, 1281, 801))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.scanSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.scanSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.scanSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.scanSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.scanSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.scanSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.scanSelectionSidebar.setObjectName("scanSelectionSidebar")
+ self.scanSelectionLabelSidebar = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.scanSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanSelectionLabelSidebar.setObjectName("scanSelectionLabelSidebar")
+ self.scanLabel = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scanLabel.setGeometry(QtCore.QRect(-60, 50, 191, 51))
+ self.scanLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.scanLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.scanLabel.setObjectName("scanLabel")
+ self.scan_name_input = QtWidgets.QLabel(parent=self.scanSelectionSidebar)
+ self.scan_name_input.setGeometry(QtCore.QRect(70, 50, 261, 51))
+ self.scan_name_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.scan_name_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.scan_name_input.setObjectName("scan_name_input")
+ self.segSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segSidebar.setObjectName("segSidebar")
+ self.segSidebarLabel = QtWidgets.QLabel(parent=self.segSidebar)
+ self.segSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segSidebarLabel.setObjectName("segSidebarLabel")
+ self.resultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.resultsSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.resultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.resultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.resultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.resultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.resultsSidebar.setObjectName("resultsSidebar")
+ self.resultsLabel = QtWidgets.QLabel(parent=self.resultsSidebar)
+ self.resultsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.resultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.resultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.resultsLabel.setObjectName("resultsLabel")
+ self.visualizationsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.visualizationsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.visualizationsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.visualizationsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.visualizationsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.visualizationsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.visualizationsSidebar.setObjectName("visualizationsSidebar")
+ self.visualizationsLabel = QtWidgets.QLabel(parent=self.visualizationsSidebar)
+ self.visualizationsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.visualizationsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.visualizationsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.visualizationsLabel.setObjectName("visualizationsLabel")
+ self.analysisConfigSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisConfigSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisConfigSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisConfigSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisConfigSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisConfigSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisConfigSidebar.setObjectName("analysisConfigSidebar")
+ self.analysisConfigLabel = QtWidgets.QLabel(parent=self.analysisConfigSidebar)
+ self.analysisConfigLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisConfigLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisConfigLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisConfigLabel.setObjectName("analysisConfigLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame_2 = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame_2.setMinimumSize(QtCore.QSize(341, 0))
+ self.gridFrame_2.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame_2.setObjectName("gridFrame_2")
+ self.backButtonGrid_3 = QtWidgets.QGridLayout(self.gridFrame_2)
+ self.backButtonGrid_3.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid_3.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid_3.setObjectName("backButtonGrid_3")
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame_2)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid_3.addWidget(self.back_button, 1, 0, 1, 1)
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid_3.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid_3.addItem(spacerItem1, 1, 1, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame_2)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.select_type_layout = QtWidgets.QVBoxLayout()
+ self.select_type_layout.setContentsMargins(30, -1, 30, -1)
+ self.select_type_layout.setSpacing(50)
+ self.select_type_layout.setObjectName("select_type_layout")
+ self.select_type_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.select_type_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_type_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_type_label.setScaledContents(False)
+ self.select_type_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_type_label.setWordWrap(True)
+ self.select_type_label.setObjectName("select_type_label")
+ self.select_type_layout.addWidget(self.select_type_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.seg_type_dropdown = QtWidgets.QComboBox(parent=self.horizontalLayoutWidget_4)
+ self.seg_type_dropdown.setMinimumSize(QtCore.QSize(180, 41))
+ self.seg_type_dropdown.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ font = QtGui.QFont()
+ font.setPointSize(16)
+ self.seg_type_dropdown.setFont(font)
+ self.seg_type_dropdown.setStyleSheet("QComboBox {\n"
+" color: white;\n"
+"}")
+ self.seg_type_dropdown.setObjectName("seg_type_dropdown")
+ self.select_type_layout.addWidget(self.seg_type_dropdown)
+ self.accept_type_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.accept_type_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.accept_type_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.accept_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_type_button.setObjectName("accept_type_button")
+ self.select_type_layout.addWidget(self.accept_type_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.select_type_layout.addItem(spacerItem2)
+ self.select_type_layout.setStretch(0, 2)
+ self.select_type_layout.setStretch(1, 2)
+ self.select_type_layout.setStretch(2, 2)
+ self.select_type_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.select_type_layout)
+
+ self.retranslateUi(seg_type_selector)
+ QtCore.QMetaObject.connectSlotsByName(seg_type_selector)
+
+ def retranslateUi(self, seg_type_selector):
+ _translate = QtCore.QCoreApplication.translate
+ seg_type_selector.setWindowTitle(_translate("seg_type_selector", "Select Segmentation Type"))
+ self.sidebar.setToolTip(_translate("seg_type_selector", "
"))
+ self.scanSelectionLabelSidebar.setText(_translate("seg_type_selector", "Scan Selection:"))
+ self.scanLabel.setText(_translate("seg_type_selector", "Scan:"))
+ self.scan_name_input.setText(_translate("seg_type_selector", "Sample filename "))
+ self.segSidebarLabel.setText(_translate("seg_type_selector", "Segmentation Selection"))
+ self.resultsLabel.setText(_translate("seg_type_selector", "Results"))
+ self.visualizationsLabel.setText(_translate("seg_type_selector", "Visualizations"))
+ self.analysisConfigLabel.setText(_translate("seg_type_selector", "Analysis Configuration"))
+ self.back_button.setText(_translate("seg_type_selector", "Back"))
+ self.select_type_label.setText(_translate("seg_type_selector", "Select Segmentation Type:"))
+ self.accept_type_button.setText(_translate("seg_type_selector", "Accept"))
diff --git a/src/ceus/seg_loading/views/draw_roi_widget.py b/src/ceus/seg_loading/views/draw_roi_widget.py
index f72738f..5c2d891 100644
--- a/src/ceus/seg_loading/views/draw_roi_widget.py
+++ b/src/ceus/seg_loading/views/draw_roi_widget.py
@@ -11,13 +11,25 @@
from scipy import interpolate
from PIL import Image, ImageDraw
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
+from matplotlib.colors import LinearSegmentedColormap
-from PyQt6.QtWidgets import QWidget, QHBoxLayout, QFileDialog
+from PyQt6.QtWidgets import QWidget, QHBoxLayout, QFileDialog, QSlider, QVBoxLayout, QFrame, QCheckBox, QLabel
from PyQt6.QtCore import pyqtSignal, Qt
from ...mvc.base_view import BaseViewMixin
from ..ui.draw_roi_ui import Ui_constructRoi
from engines.ceus.src.data_objs import UltrasoundImage
+from engines.ceus.src.image_preprocessing.functions import enhance_clahe, enhance_gamma
+from engines.ceus.src.data_objs.seg import CeusSeg
+
+# Philips CEUS Colormap: Grayscale -> Red -> Yellow
+philips_colors = [
+ (0.0, 0.0, 0.0), # 0% - Black
+ (0.4, 0.4, 0.4), # 40% - Gray
+ (0.8, 0.0, 0.0), # 80% - Red
+ (1.0, 1.0, 0.0) # 100% - Yellow
+]
+philips_cmap = LinearSegmentedColormap.from_list("philips_ceus", philips_colors)
class DrawROIWidget(QWidget, BaseViewMixin):
@@ -31,6 +43,7 @@ class DrawROIWidget(QWidget, BaseViewMixin):
# Signals for communicating with controller
segmentation_saved = pyqtSignal(str) # emit with saved file path
+ segmentation_completed = pyqtSignal(object) # CeusSeg object
back_requested = pyqtSignal()
close_requested = pyqtSignal()
@@ -59,8 +72,18 @@ def __init__(self, image_data: UltrasoundImage, parent: Optional[QWidget] = None
self._target_frame = 0 # Target frame for smooth transitions
self._frame_update_pending = False
+ # Enhancement parameters
+ self._clahe_clip_limit = 1.2
+ self._gamma = 1.5
self._width_scale = 1.0
+ # Enhancement parameters
+ self._clahe_clip_limit = 1.2
+ self._gamma = 1.5
+ self._use_philips_ceus = False
+ self._enhanced_cache = None # Cache for enhanced current frame
+ self._enhanced_cache_idx = -1
+
self._setup_ui()
self._connect_signals()
self._show_draw_type_selection()
@@ -96,6 +119,8 @@ def _setup_ui(self) -> None:
'roi_name_label', 'save_name_input',
'save_roi_button', 'back_from_save_button',
]
+ self._save_objects = self._save_seg_menu_objects
+
self._draw_types_objects = [
'draw_rect_drag_type_button', 'draw_freehand_drag_type_button', 'draw_pts_type_button',
]
@@ -112,6 +137,17 @@ def _setup_ui(self) -> None:
# Setup matplotlib canvas for frame preview
self._setup_matplotlib_canvas()
+
+ # Add a "Confirm & Review" button programmatically
+ from PyQt6.QtWidgets import QPushButton
+ self.confirm_review_button = QPushButton("Confirm && Review", parent=self)
+ self.confirm_review_button.setMinimumSize(self._ui.save_roi_button.minimumSize())
+ self.confirm_review_button.setMaximumSize(self._ui.save_roi_button.maximumSize())
+ self.confirm_review_button.setStyleSheet(self._ui.save_roi_button.styleSheet())
+ # Position it next to the save button in the layout
+ self._ui.chooseImageButtonsLayout_4.addWidget(self.confirm_review_button)
+ self.confirm_review_button.hide()
+
self._setup_enhancement_controls()
# Display frame preview
@@ -145,6 +181,7 @@ def _connect_signals(self) -> None:
self._ui.clear_save_folder_button.clicked.connect(self._ui.save_folder_input.clear)
self._ui.back_from_save_button.clicked.connect(self._show_draw_type_selection)
self._ui.save_roi_button.clicked.connect(self._on_save_roi)
+ self.confirm_review_button.clicked.connect(self._on_confirm_review_clicked)
def _initialize_frame_preview(self) -> None:
"""Initialize the frame preview with optimized matplotlib setup."""
@@ -256,52 +293,112 @@ def _update_aspect_ratio(self) -> None:
self._matplotlib_canvas.draw_idle()
def _setup_enhancement_controls(self) -> None:
- """Add enhancement sliders to the sidebar."""
- from PyQt6.QtWidgets import QVBoxLayout, QLabel, QSlider, QFrame
-
+ """Add enhancement sliders beside the frame slider in a single horizontal line."""
+ # Container frame for enhancement controls
enh_group = QFrame()
enh_group.setStyleSheet("background-color: rgba(255, 255, 255, 0); border: none;")
- container_layout = QVBoxLayout(enh_group)
- container_layout.setContentsMargins(0, 10, 0, 10)
+
+ # Main horizontal layout for the enhancement section
+ container_layout = QHBoxLayout(enh_group)
+ container_layout.setContentsMargins(0, 0, 15, 0)
container_layout.setSpacing(15)
- def create_enh_column(label_text, min_val, max_val, current_val, callback):
- col_widget = QWidget()
- col_layout = QVBoxLayout(col_widget)
- col_layout.setContentsMargins(0, 0, 0, 0)
- col_layout.setSpacing(5)
+ def create_compact_control(label_text, min_val, max_val, current_val, callback):
+ # Widget to hold label, slider, and value in ONE line
+ ctrl_widget = QWidget()
+ ctrl_layout = QHBoxLayout(ctrl_widget)
+ ctrl_layout.setContentsMargins(0, 0, 0, 0)
+ ctrl_layout.setSpacing(5)
lbl = QLabel(label_text)
- lbl.setStyleSheet("font-size: 14px; color: white; font-weight: bold;")
- lbl.setAlignment(Qt.AlignmentFlag.AlignCenter)
- col_layout.addWidget(lbl)
+ lbl.setStyleSheet("font-size: 10px; color: white; font-weight: bold;")
+ ctrl_layout.addWidget(lbl)
- row_layout = QHBoxLayout()
+ # Slider
slider = QSlider(Qt.Orientation.Horizontal)
slider.setRange(min_val, max_val)
slider.setValue(current_val)
- slider.setMinimumWidth(100)
- slider.setMaximumWidth(120)
+ slider.setStyleSheet(self._ui.frame_slider.styleSheet())
+ slider.setFixedWidth(70)
+ slider.setFixedHeight(12)
slider.valueChanged.connect(callback)
-
+ ctrl_layout.addWidget(slider)
+
val_lbl = QLabel(f"{current_val/10.0:.1f}")
- val_lbl.setMinimumWidth(40)
- val_lbl.setStyleSheet("color: #3498db; font-weight: bold; font-size: 14px;")
-
- row_layout.addWidget(slider)
- row_layout.addWidget(val_lbl)
- col_layout.addLayout(row_layout)
+ val_lbl.setStyleSheet("color: #3498db; font-weight: bold; font-size: 10px;")
+ val_lbl.setMinimumWidth(22)
+ val_lbl.setAlignment(Qt.AlignmentFlag.AlignLeft)
+ ctrl_layout.addWidget(val_lbl)
- return col_widget, slider, val_lbl
+ return ctrl_widget, slider, val_lbl
- width_col, self.width_slider, self.width_val_lbl = create_enh_column(
+ # Create controls
+ clahe_w, self.clahe_slider, self.clahe_val_lbl = create_compact_control(
+ "CLAHE", 1, 100, int(self._clahe_clip_limit * 10), self._on_clahe_changed
+ )
+ gamma_w, self.gamma_slider, self.gamma_val_lbl = create_compact_control(
+ "GAMMA", 1, 40, int(self._gamma * 10), self._on_gamma_changed
+ )
+ width_w, self.width_slider, self.width_val_lbl = create_compact_control(
"WIDTH", 1, 50, int(self._width_scale * 10), self._on_width_changed
)
- container_layout.addWidget(width_col)
+ # Pseudo colouring toggle nicely aligned
+ self.philips_check = QCheckBox("Pseudo colouring")
+ self.philips_check.setStyleSheet("color: white; font-weight: bold; font-size: 11px;")
+ self.philips_check.stateChanged.connect(self._on_philips_toggled)
+
+ # Add to horizontal layout
+ container_layout.addWidget(clahe_w)
+ container_layout.addWidget(gamma_w)
+ container_layout.addWidget(width_w)
+ container_layout.addWidget(self.philips_check)
+
+ # Add to the layout beside the frame slider (below the image)
+ self._ui.frameControlsLayout.insertWidget(0, enh_group)
+
+ def _on_clahe_changed(self, value: int) -> None:
+ """Handle CLAHE clip limit change."""
+ self._clahe_clip_limit = value / 10.0
+ if hasattr(self, 'clahe_val_lbl'):
+ self.clahe_val_lbl.setText(f"{self._clahe_clip_limit:.1f}")
+ self._invalidate_enhancement_cache()
+
+ def _on_gamma_changed(self, value: int) -> None:
+ """Handle gamma change."""
+ self._gamma = value / 10.0
+ if hasattr(self, 'gamma_val_lbl'):
+ self.gamma_val_lbl.setText(f"{self._gamma:.1f}")
+ self._invalidate_enhancement_cache()
+
+ def _on_philips_toggled(self, state: int) -> None:
+ """Handle Philips CEUS pseudocolor toggle."""
+ self._use_philips_ceus = state == Qt.CheckState.Checked.value
+ # Update colormap on artist
+ if self._im_artist:
+ new_cmap = philips_cmap if self._use_philips_ceus else 'gray'
+ self._im_artist.set_cmap(new_cmap)
+ self._matplotlib_canvas.draw_idle()
- # Add to the layout below the frame slider
- self._ui.side_bar_layout.addWidget(enh_group)
+ def _invalidate_enhancement_cache(self) -> None:
+ """Invalidate the enhancement cache and trigger display update."""
+ self._enhanced_cache = None
+ self._enhanced_cache_idx = -1
+ self._force_frame_update()
+
+ def _enhance_frame(self, frame_2d: np.ndarray) -> np.ndarray:
+ """Enhance a 2D image frame using backend engine functions."""
+ # Create a temporary UltrasoundImage for processing
+ temp_im = UltrasoundImage(self._image_data.scan_path)
+ temp_im.pixel_data = frame_2d
+ temp_im.pixdim = self._image_data.pixdim
+ temp_im.frame_rate = self._image_data.frame_rate
+
+ # Apply enhancements
+ temp_im = enhance_clahe(temp_im, clip_limit=self._clahe_clip_limit)
+ temp_im = enhance_gamma(temp_im, gamma=self._gamma)
+
+ return temp_im.pixel_data
def _on_frame_changed(self, value: int) -> None:
"""Handle frame slider change with optimized performance."""
@@ -312,8 +409,18 @@ def _on_frame_changed(self, value: int) -> None:
def _update_frame_display(self, frame_index: int) -> None:
"""Update the frame display with consistent parameters."""
if self._im_artist:
- self._displayed_im = self._all_frames[frame_index]
+ # Update cache if needed
+ if self._enhanced_cache is None or self._enhanced_cache_idx != frame_index:
+ self._enhanced_cache = self._enhance_frame(self._all_frames[frame_index])
+ self._enhanced_cache_idx = frame_index
+
+ self._displayed_im = self._enhanced_cache
self._im_artist.set_array(self._displayed_im)
+
+ # Ensure correct colormap is applied (e.g. after initialization)
+ new_cmap = philips_cmap if self._use_philips_ceus else 'gray'
+ self._im_artist.set_cmap(new_cmap)
+
self._ui.cur_frame_label.setText(str(np.round(frame_index*self._image_data.frame_rate, decimals=2)))
def _force_frame_update(self) -> None:
@@ -649,6 +756,7 @@ def _select_dest_folder(self) -> None:
def _hide_save_menu(self) -> None:
"""Hide the save menu."""
+ self.confirm_review_button.hide()
for obj_name in self._save_seg_menu_objects:
widget = getattr(self._ui, obj_name, None)
if widget:
@@ -689,6 +797,7 @@ def _show_save_menu(self) -> None:
widget.show()
else:
print(f"Warning: Widget '{obj_name}' not found in UI")
+ self.confirm_review_button.show()
def _hide_draw_type_selection(self) -> None:
"""Hide the draw type selection layout."""
@@ -847,3 +956,48 @@ def _on_save_roi(self) -> None:
self.segmentation_saved.emit(nii_path)
print(f"Segmentation saved to: {nii_path}")
+
+ def _on_confirm_review_clicked(self) -> None:
+ """Handle confirmation and transition to formal review screen."""
+
+ # Ensure there is a drawn ROI to confirm
+ if len(self._roi_plot_coords[0]) < 3:
+ self.show_error("Please draw a valid region of interest before confirming.")
+ return
+
+ # Create binary mask from drawn ROI
+ spline = [(self._roi_plot_coords[0][i], self._roi_plot_coords[1][i]) for i in range(len(self._roi_plot_coords[0]))]
+
+ # Note: self._all_frames shape is [t, y, x] (or similar)
+ # Based on _on_save_roi, it seems to be [t, y, x]
+ mask_2d = Image.new("L", (self._all_frames[self._frame].shape[1], self._all_frames[self._frame].shape[0]), 0)
+ ImageDraw.Draw(mask_2d).polygon(spline, outline=1, fill=1)
+ mask_2d = np.array(mask_2d, dtype=np.uint8)
+
+ # Create CeusSeg object
+ seg_data = CeusSeg()
+ seg_data.seg_name = f"Manual_{self._image_data.scan_name}"
+
+ # CEUS expects 3D mask (x, y, z)
+ # We need to create a 3D mask where this 2D ROI is on one slice or repeated.
+ # However, for consistency with DrawVOIWidget, we probably want a 3D volume.
+ # If DrawROIWidget is only for a single frame, z_len should match what is expected.
+ x_len, y_len, z_len = self._image_data.pixel_data.shape[:3]
+ seg_mask = np.zeros((x_len, y_len, z_len), dtype=np.uint8)
+
+ # Translate 2D mask [y, x] to [x, y, z] slice
+ # Assuming the ROI was drawn on a specific slice?
+ # Actually DrawROIWidget seems to be for 2D images or a specific frame.
+ # If the image is 4D [x, y, z, t], maybe it was drawn on the central slice?
+ # Let's assume it was for 2D or we put it on the middle slice of 3D.
+ mid_z = z_len // 2
+
+ # Handle shape mismatch if any
+ if mask_2d.shape[1] == x_len and mask_2d.shape[0] == y_len:
+ seg_mask[:, :, mid_z] = mask_2d.T
+
+ seg_data.seg_mask = seg_mask
+ seg_data.pixdim = self._image_data.pixdim[:3]
+
+ # Emit signal to coordinator
+ self.segmentation_completed.emit(seg_data)
diff --git a/src/ceus/seg_loading/views/draw_voi_widget.py b/src/ceus/seg_loading/views/draw_voi_widget.py
index 858a869..84503a8 100644
--- a/src/ceus/seg_loading/views/draw_voi_widget.py
+++ b/src/ceus/seg_loading/views/draw_voi_widget.py
@@ -4,23 +4,26 @@
from pathlib import Path
from typing import Optional, Tuple, List
+from scipy.ndimage import binary_fill_holes, binary_erosion
+from matplotlib.backends.backend_qtagg import FigureCanvas
+from matplotlib.path import Path as Mpl_Path
+from matplotlib.colors import LinearSegmentedColormap
+from PyQt6.QtWidgets import QWidget, QLabel, QHBoxLayout, QSizePolicy, QFileDialog, QSlider, QVBoxLayout, QFrame, QCheckBox, QPushButton
+from PyQt6.QtCore import QEvent, pyqtSignal, Qt, QThread
+
import numpy as np
import nibabel as nib
-from scipy.ndimage import binary_fill_holes
import matplotlib.pyplot as plt
import matplotlib.animation as anim
-from matplotlib.backends.backend_qtagg import FigureCanvas
-from matplotlib.path import Path as Mpl_Path
-from matplotlib.colors import LinearSegmentedColormap
import scipy.interpolate as interpolate
from scipy.spatial import ConvexHull
-from PyQt6.QtWidgets import QWidget, QLabel, QHBoxLayout, QSizePolicy, QFileDialog, QSlider, QVBoxLayout, QFrame, QCheckBox
-from PyQt6.QtCore import QEvent, pyqtSignal, Qt, QThread
+import traceback
from ...mvc.base_view import BaseViewMixin
from ..ui.draw_voi_ui import Ui_voi_drawer
-from engines.ceus.src.data_objs import UltrasoundImage
+from engines.ceus.src.data_objs import UltrasoundImage, CeusSeg
from .spline import calculateSpline3D, calculateSpline
+from engines.ceus.src.image_preprocessing.functions import enhance_clahe, enhance_gamma
# Philips CEUS Colormap: Grayscale -> Red -> Yellow
philips_colors = [
@@ -98,7 +101,6 @@ def run(self):
self.finished.emit(voi_mask)
except Exception as e:
- import traceback
traceback.print_exc()
self.error_msg.emit(f"Error interpolating VOI: {e}")
@@ -129,6 +131,7 @@ class DrawVOIWidget(QWidget, BaseViewMixin):
# Signals for communicating with controller
file_selected = pyqtSignal(dict) # {'seg_path': str, 'seg_type': str}
+ segmentation_completed = pyqtSignal(object) # CeusSeg object
back_requested = pyqtSignal()
close_requested = pyqtSignal()
apply_preprocs_preview = pyqtSignal(list) # List of dicts with 'name' and 'kwargs' keys
@@ -177,7 +180,7 @@ def __init__(self, image_data: UltrasoundImage, parent: Optional[QWidget] = None
# Per-plane resources (axial, sagittal, coronal)
self._ax_sag_cor_matplotlib_canvases = [None, None, None]
self._ax_sag_cor_planes = (None, None, None)
- self._ax_sag_cor_index_maps = ((0, 1), (2, 1), (2, 0)) # dims that vary per plane
+ self._ax_sag_cor_index_maps = ((0, 1), (2, 1), (0, 2)) # (horiz_dim, vert_dim)
self._ax_sag_cor_animations = [None, None, None]
self._ax_sag_cor_plane_artists = [None, None, None]
self._ax_sag_cor_crosshair_lines = [(None, None), (None, None), (None, None)]
@@ -196,8 +199,8 @@ def __init__(self, image_data: UltrasoundImage, parent: Optional[QWidget] = None
self._connect_signals()
self._connect_matplotlib_events()
self.setFocusPolicy(Qt.FocusPolicy.StrongFocus)
- self._update_scan_display() # Initial UI update
- self._refresh_frames() # Mark all planes for first update
+ self._update_scan_display() # Initial UI update
+ self._refresh_frames() # Mark all planes for first update
def update_enhancement_cache(self, enhanced_frame: np.ndarray, frame: int) -> None:
"""Update the displayed image data, e.g. after preprocessing."""
@@ -310,10 +313,23 @@ def _setup_ui(self) -> None:
self._ui.undo_last_roi_button,
self._ui.construct_voi_label,
]
+
+ # Add a "Confirm & Review" button programmatically
+ self.confirm_review_button = QPushButton("Confirm && Review")
+ self.confirm_review_button.setMinimumSize(self._ui.save_voi_button.minimumSize())
+ self.confirm_review_button.setMaximumSize(self._ui.save_voi_button.maximumSize())
+ self.confirm_review_button.setStyleSheet(self._ui.save_voi_button.styleSheet())
+ self.confirm_review_button.hide()
+
+ # Add to the layout formally
+ self._ui.verticalLayout_2.addWidget(self.confirm_review_button)
+
self._voi_decision_widgets = [
self._ui.restart_voi_button,
self._ui.save_voi_button,
+ self.confirm_review_button,
]
+
self._save_voi_widgets = [
self._ui.back_from_save_button,
self._ui.dest_folder_label,
@@ -492,29 +508,23 @@ def _update_aspect_ratios(self) -> None:
try:
pix = self._image_data.pixdim
- # Index 0: Axial (Plane 0)
+ # Index 0: Axial (Plane 0) -> (Y, X) -> Rows=Y, Cols=X -> dy / dx
if self._ax_sag_cor_matplotlib_canvases[0]:
dx, dy = pix[0], pix[1]
aspect = (dy / dx if dx != 0 else 1.0) * self._width_scale_axial
- fig0 = self._ax_sag_cor_matplotlib_canvases[0].figure
- if fig0.axes:
- fig0.axes[0].set_aspect(aspect)
+ self._ax_sag_cor_matplotlib_canvases[0].figure.gca().set_aspect(aspect)
- # Index 1: Sagittal (Plane 1)
+ # Index 1: Sagittal (Plane 1) -> 90 CW Rotation -> (Y, Z) -> Rows=Y, Cols=Z -> dy / dz
if self._ax_sag_cor_matplotlib_canvases[1]:
dy, dz = pix[1], pix[2]
aspect = (dy / dz if dz != 0 else 1.0) * self._width_scale_sagittal
- fig1 = self._ax_sag_cor_matplotlib_canvases[1].figure
- if fig1.axes:
- fig1.axes[0].set_aspect(aspect)
+ self._ax_sag_cor_matplotlib_canvases[1].figure.gca().set_aspect(aspect)
- # Index 2: Coronal (Plane 2)
+ # Index 2: Coronal (Plane 2) -> (Z, X) -> Rows=Z, Cols=X -> dz / dx
if self._ax_sag_cor_matplotlib_canvases[2]:
dx, dz = pix[0], pix[2]
- aspect = (dx / dz if dz != 0 else 1.0) * self._width_scale_coronal
- fig2 = self._ax_sag_cor_matplotlib_canvases[2].figure
- if fig2.axes:
- fig2.axes[0].set_aspect(aspect)
+ aspect = (dz / dx if dx != 0 else 1.0) * self._width_scale_coronal
+ self._ax_sag_cor_matplotlib_canvases[2].figure.gca().set_aspect(aspect)
for canvas in self._ax_sag_cor_matplotlib_canvases:
if canvas:
@@ -583,7 +593,7 @@ def _initialize_plane_displays(self) -> None:
ax = fig.add_subplot(111)
ax.axis('off')
# Get initial slice
- slice_arr = self._get_plane_slice(plane_ix, initializing=True)
+ slice_arr = self._get_plane_slice(plane_ix)
mask_arr = self._get_mask_slice(plane_ix)
current_cmap = philips_cmap if self._use_philips_ceus else 'gray'
@@ -605,21 +615,19 @@ def _initialize_plane_displays(self) -> None:
except Exception as e:
self.show_error(f"Error initializing plane display {plane_ix}: {e}")
- def _get_plane_slice(self, plane_ix: int, initializing=False):
+ def _get_plane_slice(self, plane_ix: int):
"""Return 2D numpy slice for given plane index based on current crosshair."""
idx = self._get_plane_indices(plane_ix)
current_t = self._crosshair_xyzt[3]
# Check if we need to enhance a new frame
- if not initializing and (self._enhanced_cache is None or self._enhanced_cache_frame != current_t):
+ if self._enhanced_cache is None or self._enhanced_cache_frame != current_t:
# Get the 3D volume for current time frame
current_frame_3d = self._pix_data[:, :, :, current_t]
# Enhance the entire 3D volume ONCE per frame
- self._enhance_volume(current_frame_3d) # performs enhancement SYNCHRONOUSLY
+ self._enhanced_cache = self._enhance_volume(current_frame_3d)
self._enhanced_cache_frame = current_t
- elif initializing:
- self._enhanced_cache = self._image_data.pixel_data[:, :, :, current_t] # Cache the initial frame without enhancement for faster startup
# Extract the 2D slice from cached enhanced volume
slice_idx = list(idx[:3]) # Remove time dimension
@@ -627,49 +635,41 @@ def _get_plane_slice(self, plane_ix: int, initializing=False):
if arr.ndim != 2:
arr = arr.squeeze()
- # Axial plane (index 0) needs transpose for correct orientation
- if plane_ix == 0:
- arr = arr.T
- return arr
+ # All planes need transpose to match (Vertical, Horizontal) orientation.
+ # Sagittal (plane 1) specifically needs a 90 deg clockwise rotation.
+ arr_t = arr.T
+ if plane_ix == 1:
+ return np.rot90(arr_t, k=-1)
+ return arr_t
- def _enhance_volume(self, volume_3d: np.ndarray) -> None:
+ def _enhance_volume(self, volume_3d: np.ndarray) -> np.ndarray:
"""Enhance a 3D image volume using predefined enhancement methods in the backend engine."""
# Create a temporary UltrasoundImage for the current frame
temp_im = UltrasoundImage(self._image_data.scan_path)
- temp_im.pixel_data = volume_3d.T[None].T.copy() # Add back time dimension for processing
+ temp_im.pixel_data = volume_3d
temp_im.pixdim = self._image_data.pixdim
temp_im.frame_rate = self._image_data.frame_rate
-
- clahe_preproc_dict = {
- 'name': 'enhance_clahe',
- 'image_data': temp_im,
- 'frame_ix': self._crosshair_xyzt[3],
- 'kwargs': {
- 'clip_limit': self._clahe_clip_limit,
- 'tile_grid_size': (8, 8),
- }
- }
-
- gamma_preproc_dict = {
- 'name': 'enhance_gamma',
- 'image_data': None, # signal to reuse the already CLAHE-enhanced image (all preprocs in the same batch share the same image input)
- 'frame_ix': self._crosshair_xyzt[3],
- 'kwargs': {
- 'gamma': self._gamma,
- }
- }
-
- preproc_dicts = [clahe_preproc_dict, gamma_preproc_dict]
- self.apply_preprocs_preview.emit(preproc_dicts) # synchronous call to apply the enhancements and update the cache via the connected slot
+
+ # Apply backend engine functions directly on the UltrasoundImage object
+ temp_im = enhance_clahe(temp_im, clip_limit=self._clahe_clip_limit)
+ temp_im = enhance_gamma(temp_im, gamma=self._gamma)
+
+ return temp_im.pixel_data
def _get_mask_slice(self, plane_ix: int):
"""Return RGBA numpy slice for the mask of the given plane index."""
idx = self._get_plane_indices(plane_ix)[:-1] # no time dimension
arr = self._roi_masks_overlap[idx]
- # Mask needs transpose for correct orientation to match the image slice
- if plane_ix == 0:
- arr = np.transpose(arr, (1, 0, 2)) # Transpose for axial plane
- return arr
+
+ # Consistent mapping for all planes as areas:
+ # Axial: (X, Y) slice -> want (Y, X) for imshow -> transpose (1, 0, 2)
+ # Sagittal: (Y, Z) slice -> want (Z, Y) then rot -> transpose (1, 0, 2) + rot90
+ # Coronal: (X, Z) slice -> want (Z, X) for imshow -> transpose (1, 0, 2)
+
+ arr_reg = np.transpose(arr, (1, 0, 2))
+ if plane_ix == 1:
+ return np.rot90(arr_reg, k=-1)
+ return arr_reg
def _get_plane_indices(self, plane_ix: int) -> Tuple[int]:
"""Return a list of indices for the given plane."""
@@ -837,6 +837,7 @@ def _connect_signals(self) -> None:
self._ui.back_from_save_button.clicked.connect(self._on_back_from_save)
self._ui.toggle_crosshair_visibility_button.clicked.connect(self._on_toggle_crosshair_visibility)
self._ui.save_voi_button.clicked.connect(self._on_save_voi_clicked)
+ self.confirm_review_button.clicked.connect(self._on_confirm_review_clicked)
# Configure slice/time controls
self._ui.cur_slice_slider.setMinimum(0)
@@ -948,9 +949,16 @@ def _on_roi_close(self):
if plane_ix == 0: # Axial
target_slice_mask[:, :, fixed_val] = mask_2d.T
elif plane_ix == 1: # Sagittal
- target_slice_mask[fixed_val, :, :] = mask_2d
+ # mask_2d from meshgrid (Y_len, X_len) where X_idx=z, Y_idx=y
+ # In sagittal plane_ix=1: vary_x=z(2), vary_y=y(1). fixed=x(0)
+ # mask_2d shape is (y_len, z_len).
+ # Meshgrid with 'xy' returns (rows=Y, cols=X), so mask_2d is (Y, Z).
+ # The display uses rot90(arr.T, k=-1) which is (Z, Y).
+ # To match the display, we must rot90 back: rot90(mask_2d, k=1).T
+ target_slice_mask[fixed_val, :, :] = np.rot90(mask_2d, k=1).T
elif plane_ix == 2: # Coronal
- target_slice_mask[:, fixed_val, :] = mask_2d
+ # mask_2d from meshgrid (Y_len, X_len) where X_idx=x, Y_idx=z
+ target_slice_mask[:, fixed_val, :] = mask_2d.T
# Apply colors to the RGBA mask where the 3D mask is true
current_roi_mask_rgba[target_slice_mask, 0] = 255 # Red
@@ -1030,6 +1038,27 @@ def _on_save_voi_clicked(self):
self._show_widget_lists([self._save_voi_widgets, self._voi_alpha_widgets])
self._refresh_frames()
+ def _on_confirm_review_clicked(self):
+ """Handle confirmation and transition to formal review screen."""
+
+ # Create CeusSeg object from current mask
+ seg_data = CeusSeg()
+ seg_data.seg_name = f"Manual_{self._image_data.scan_name}"
+ # Extract the binary mask from the overlap RGBA buffer (red channel > 0)
+ seg_data.seg_mask = (self._roi_masks_overlap[:, :, :, 0] > 0).astype(np.uint8)
+ seg_data.pixdim = self._image_data.pixdim[:3]
+
+ # Preserve current visualization parameters for the preview step
+ seg_data.clahe_clip_limit = self._clahe_clip_limit
+ seg_data.gamma = self._gamma
+ seg_data.width_scale_axial = self._width_scale_axial
+ seg_data.width_scale_sagittal = self._width_scale_sagittal
+ seg_data.width_scale_coronal = self._width_scale_coronal
+ seg_data.use_philips_ceus = self._use_philips_ceus
+
+ # Emit signal to coordinator
+ self.segmentation_completed.emit(seg_data)
+
def _on_export_voi_clicked(self):
# Show saving label, hide save widgets
self._ui.saving_voi_label.show()
@@ -1201,28 +1230,25 @@ def _remove_duplicates(self, points: List[List[float]]) -> List[List[float]]:
def _on_interpolate_voi(self):
"""Handle VOI interpolation from the drawn 2D ROIs."""
- if len(self._drawn_rois) == 2 or not len(self._drawn_rois):
- print("At least 3 ROIs on different planes or 1 ROI is required for 3D interpolation.")
+ if len(self._drawn_rois) < 1:
+ print("At least 1 ROI is required for 3D interpolation.")
return
# Combine all points from all drawn ROIs
all_points = []
- for _, pts, _ in self._drawn_rois:
- xyz_pts = np.array(pts)[:, :3].T
- x_interp, y_interp, z_interp = calculateSpline(*xyz_pts)
- all_points.extend(zip(x_interp, y_interp, z_interp))
+ for plane_num, pts, _ in self._drawn_rois:
+ all_points.extend(pts)
# Ensure no duplicate points are used for interpolation
unique_points = self._remove_duplicates(all_points)
- if len(unique_points) < 4:
+ if len(unique_points) < 3:
self.show_error("Interpolation Error", "Not enough unique points for 3D spline interpolation.")
return
# Perform 3D spline interpolation
- x_coords, y_coords, z_coords = zip(*unique_points)
- coords = np.transpose([x_coords, y_coords, z_coords])
+ coords = np.array(unique_points)
- if len(self._drawn_rois) > 2:
+ if len(self._drawn_rois) > 1:
# Stop any existing worker
if self._voi_interpolation_worker and self._voi_interpolation_worker.isRunning():
self._voi_interpolation_worker.quit()
@@ -1241,22 +1267,14 @@ def _on_interpolate_voi(self):
self._set_interp_loading(True)
self._voi_interpolation_worker.start()
else:
+ # Single ROI Case - just fill the area of that single mesh
voi_mask = np.zeros((self._x_len, self._y_len, self._z_len), dtype=bool)
- # For simplicity, we'll mark the voxels the spline passes through.
- # A more robust solution would involve filling the volume enclosed by the spline surface.
- interp_points = np.round(np.array(list(coords))).astype(int)
-
- # Clamp points to be within bounds
- interp_points[:, 0] = np.clip(interp_points[:, 0], 0, self._x_len - 1)
- interp_points[:, 1] = np.clip(interp_points[:, 1], 0, self._y_len - 1)
- interp_points[:, 2] = np.clip(interp_points[:, 2], 0, self._z_len - 1)
-
- voi_mask[interp_points[:, 0], interp_points[:, 1], interp_points[:, 2]] = True
+ # For a single ROI, we extract the boolean mask from the stored RGBA mask
+ # The red channel (index 0) is set to 255 for the drawn mask.
+ _, _, roi_mask_rgba = self._drawn_rois[0]
+ voi_mask = roi_mask_rgba[:, :, :, 0] > 0
- # Fill holes in the resulting mask to create a solid volume
- voi_mask = _smooth_3d_mask(voi_mask)
- self._hide_widget_lists([self._drawing_widgets])
self._on_interpolation_finished(voi_mask)
def _save_voi(self):
@@ -1273,13 +1291,18 @@ def _save_voi(self):
out_path = Path(self._ui.save_folder_input.text()) / out_name
+ # Construct affine matching standard NIfTI orientation
affine = np.eye(4)
for i, res in enumerate(self._image_data.pixdim[:3]):
affine[i, i] = res
- voi_mask = np.array(self._roi_masks_overlap[:, :, :, 0] / 255.0).astype(np.uint8)
- niiarray = nib.Nifti1Image(voi_mask, affine)
- niiarray.header["descrip"] = self._image_data.scan_name
- nib.save(niiarray, out_path)
+
+ # Ensure binary mask is correctly extracted from the overlay buffer
+ voi_mask = (self._roi_masks_overlap[:, :, :, 0] > 0).astype(np.uint8)
+
+ # Save as NIfTI image
+ nii_img = nib.Nifti1Image(voi_mask, affine)
+ nii_img.header["descrip"] = self._image_data.scan_name
+ nib.save(nii_img, out_path)
def _set_interp_loading(self, loading_state: bool) -> None:
"""Set the interpolation loading state."""
diff --git a/src/ceus/seg_loading/views/seg_preview_widget.py b/src/ceus/seg_loading/views/seg_preview_widget.py
new file mode 100644
index 0000000..98f8a8c
--- /dev/null
+++ b/src/ceus/seg_loading/views/seg_preview_widget.py
@@ -0,0 +1,837 @@
+"""
+Segmentation Preview Widget for CEUS
+"""
+
+from typing import Optional, Tuple, List, Dict, Any
+from pathlib import Path
+from matplotlib.backends.backend_qtagg import FigureCanvas
+from matplotlib.colors import LinearSegmentedColormap
+from PyQt6.QtWidgets import QWidget, QLabel, QHBoxLayout, QSizePolicy, QSlider, QVBoxLayout, QFrame, QCheckBox, QPushButton, QFileDialog
+from PyQt6.QtCore import QEvent, pyqtSignal, Qt
+
+import numpy as np
+import nibabel as nib
+import matplotlib.pyplot as plt
+import matplotlib.animation as anim
+
+from ...mvc.base_view import BaseViewMixin
+from ..ui.draw_voi_ui import Ui_voi_drawer
+from engines.ceus.src.data_objs import UltrasoundImage, CeusSeg
+from engines.ceus.src.image_preprocessing.functions import enhance_clahe, enhance_gamma
+
+# Philips CEUS Colormap: Grayscale -> Red -> Yellow
+philips_colors = [
+ (0.0, 0.0, 0.0), # 0% - Black
+ (0.4, 0.4, 0.4), # 40% - Gray
+ (0.8, 0.0, 0.0), # 80% - Red
+ (1.0, 1.0, 0.0) # 100% - Yellow
+]
+philips_cmap = LinearSegmentedColormap.from_list("philips_ceus", philips_colors)
+
+class SegPreviewWidget(QWidget, BaseViewMixin):
+ """
+ Widget for previewing and confirming segmentation for CEUS.
+ Reuses UI components from VOI drawer but in a read-only preview mode.
+ """
+
+ # Signals for communicating with controller
+ segmentation_confirmed = pyqtSignal()
+ back_requested = pyqtSignal()
+ close_requested = pyqtSignal()
+
+ def __init__(self, image_data: UltrasoundImage, seg_data: CeusSeg, parent: Optional[QWidget] = None):
+ QWidget.__init__(self, parent)
+ self.__init_base_view__(parent)
+ self._ui = Ui_voi_drawer()
+ self._image_data = image_data
+ self._seg_data = seg_data
+ self._pix_data = image_data.pixel_data
+
+ # Enhancement parameters (Inherited from seg_data)
+ self._clahe_clip_limit = getattr(seg_data, 'clahe_clip_limit', 1.2)
+ self._gamma = getattr(seg_data, 'gamma', 1.5)
+ self._width_scale_axial = getattr(seg_data, 'width_scale_axial', 1.0)
+ self._width_scale_sagittal = getattr(seg_data, 'width_scale_sagittal', 1.0)
+ self._width_scale_coronal = getattr(seg_data, 'width_scale_coronal', 1.0)
+ self._use_philips_ceus = getattr(seg_data, 'use_philips_ceus', False)
+ self._mask_alpha = 125 # Default alpha for mask overlay (0-255)
+
+ # Cache for enhanced volume
+ self._enhanced_cache = None
+ self._enhanced_cache_frame = -1
+
+ # Crosshair / navigation state
+ self._crosshair_active = False
+ self._crosshair_visible = True
+
+ # Dimensions: x, y, z, t
+ if self._pix_data.ndim == 4:
+ self._x_len, self._y_len, self._z_len, self._num_slices = self._pix_data.shape
+ else:
+ # Fallback if 3D
+ self._x_len, self._y_len, self._z_len = self._pix_data.shape
+ self._num_slices = 1
+ self._pix_data = self._pix_data.reshape((self._x_len, self._y_len, self._z_len, 1))
+
+ self._crosshair_xyzt = [self._x_len // 2, self._y_len // 2, self._z_len // 2, 0]
+
+ # Segmentation mask overlay
+ self._roi_masks_overlap = np.zeros((self._x_len, self._y_len, self._z_len, 4), dtype=np.uint8)
+ self._seg_mask_indices = None # Store binary mask indices for alpha updates
+ if hasattr(seg_data, 'seg_mask') and seg_data.seg_mask is not None:
+ # seg_mask should be same spatial shape (x, y, z)
+ mask = seg_data.seg_mask
+
+ # Ensure spatial alignment with image data if dimensions are flipped or permuted
+ # If the mask was saved from DrawVOIWidget, it should match the pixel_data shape
+ if mask.shape == (self._x_len, self._y_len, self._z_len):
+ self._seg_mask_indices = np.where(mask > 0)
+ elif mask.shape == (self._y_len, self._x_len, self._z_len):
+ # Handle common XY transpose if detected
+ self._seg_mask_indices = np.where(mask.transpose(1, 0, 2) > 0)
+ else:
+ # Log or handle shape mismatch more gracefully if needed
+ print(f"Warning: Mask shape {mask.shape} does not match image shape {(self._x_len, self._y_len, self._z_len)}")
+ # Try to fit the mask as much as possible if shapes match in 3D volume
+ try:
+ self._seg_mask_indices = np.where(mask[:self._x_len, :self._y_len, :self._z_len] > 0)
+ except Exception:
+ pass
+
+ if self._seg_mask_indices is not None and len(self._seg_mask_indices[0]) > 0:
+ self._roi_masks_overlap[self._seg_mask_indices[0], self._seg_mask_indices[1], self._seg_mask_indices[2]] = [255, 0, 0, 125]
+
+ # Jump crosshair to a point within the mask to show it immediately
+ mask_indices = np.where(self._roi_masks_overlap[..., 3] > 0)
+ if len(mask_indices[0]) > 0:
+ mid_idx = len(mask_indices[0]) // 2
+ self._crosshair_xyzt = [
+ mask_indices[0][mid_idx],
+ mask_indices[1][mid_idx],
+ mask_indices[2][mid_idx],
+ 0
+ ]
+ else:
+ self._crosshair_xyzt = [self._x_len // 2, self._y_len // 2, self._z_len // 2, 0]
+
+ # Per-plane resources (axial, sagittal, coronal)
+ self._ax_sag_cor_matplotlib_canvases = [None, None, None]
+ self._ax_sag_cor_planes = (None, None, None)
+ self._ax_sag_cor_index_maps = ((0, 1), (2, 1), (0, 2)) # (horiz_dim, vert_dim)
+ self._ax_sag_cor_animations = [None, None, None]
+ self._ax_sag_cor_plane_artists = [None, None, None]
+ self._ax_sag_cor_crosshair_lines = [(None, None), (None, None), (None, None)]
+ self._ax_sag_cor_pending = [False, False, False]
+ self._ax_sag_cor_seg_masks = [None, None, None]
+
+ # UI & visualization setup
+ self._setup_ui()
+ self._setup_matplotlib_canvases()
+ self._initialize_plane_displays()
+ self._setup_all_plane_animations()
+ self._connect_signals()
+ self._connect_matplotlib_events()
+ self.setFocusPolicy(Qt.FocusPolicy.StrongFocus)
+ self._update_scan_display()
+ self._refresh_frames()
+
+ def _setup_ui(self) -> None:
+ """Setup the user interface to match the segmentation menu style."""
+ self._ui.setupUi(self)
+
+ # Store QLabels as tags for layout mapping
+ self._ax_sag_cor_planes = (self._ui.ax_plane, self._ui.sag_plane, self._ui.cor_plane)
+
+ # Configure layout
+ self.setLayout(self._ui.full_screen_layout)
+ self._ui.full_screen_layout.setStretchFactor(self._ui.side_bar_layout, 1)
+ self._ui.full_screen_layout.setStretchFactor(self._ui.voi_layout, 10)
+
+ # Widget groups matching DrawVOIWidget for consistency
+ self._drawing_widgets = [
+ self._ui.draw_roi_button,
+ self._ui.interpolate_voi_button,
+ self._ui.undo_last_pt_button,
+ self._ui.close_roi_button,
+ self._ui.undo_last_roi_button,
+ self._ui.construct_voi_label,
+ ]
+
+ # Add a "Confirm & Analysis" button programmatically
+ self.confirm_review_button = QPushButton("Confirm && Analysis")
+ self.confirm_review_button.setMinimumSize(self._ui.save_voi_button.minimumSize())
+ self.confirm_review_button.setMaximumSize(self._ui.save_voi_button.maximumSize())
+ self.confirm_review_button.setStyleSheet(self._ui.save_voi_button.styleSheet())
+
+ # Insert it into the layout that has Restart and Save
+ self._ui.horizontalLayout_2.addWidget(self.confirm_review_button)
+
+ # Update existing button texts for clarity in preview mode
+ self._ui.restart_voi_button.setText("Review / Redraw")
+ self._ui.save_voi_button.setText("Save Setup")
+
+ self._voi_decision_widgets = [
+ self._ui.restart_voi_button,
+ self._ui.save_voi_button,
+ self.confirm_review_button
+ ]
+
+ self._save_voi_widgets = [
+ self._ui.back_from_save_button,
+ self._ui.dest_folder_label,
+ self._ui.voi_name_label,
+ self._ui.save_folder_input,
+ self._ui.save_name_input,
+ self._ui.choose_save_folder_button,
+ self._ui.clear_save_folder_button,
+ self._ui.export_voi_button,
+ ]
+
+ self._voi_alpha_widgets = [
+ self._ui.alpha_label,
+ self._ui.alpha_of_label,
+ self._ui.alpha_spin_box,
+ self._ui.alpha_status,
+ self._ui.alpha_total
+ ]
+
+ # Initial visibility
+ self._ui.scan_name_input.setText(self._image_data.scan_name)
+ self._ui.segSidebarLabel_2.setText("Segmentation Selection")
+ self._ui.toggle_crosshair_visibility_button.setText('Hide Crosshair')
+ self._ui.cur_slice_label.setText("Current Frame:")
+
+ self._hide_widget_lists([self._drawing_widgets, self._save_voi_widgets, self._voi_alpha_widgets])
+ self._show_widget_lists([self._voi_decision_widgets])
+
+ # Hide original plane labels (replaced by canvases)
+ # Note: We do NOT hide ax_plane, sag_plane, cor_plane here because they are needed as containers
+ for widget in [self._ui.interp_loading_label, self._ui.saving_voi_label]:
+ widget.hide()
+
+ self._ui.navigating_label.hide()
+ self._ui.observing_label.show()
+
+ # Setup enhancement controls
+ self._setup_enhancement_controls()
+
+ # Update slider for frames
+ self._ui.cur_slice_slider.setMinimum(0)
+ self._ui.cur_slice_slider.setMaximum(self._num_slices - 1)
+ self._ui.cur_slice_slider.setValue(0)
+ self._ui.cur_slice_total.setText(str(self._num_slices))
+ self._ui.cur_slice_spin_box.setRange(1, self._num_slices)
+ self._ui.cur_slice_spin_box.setValue(1)
+
+ self._ui.ax_total_frames.setText(str(self._z_len))
+ self._ui.sag_total_frames.setText(str(self._x_len))
+ self._ui.cor_total_frames.setText(str(self._y_len))
+
+ # Install event filters
+ for label in self._ax_sag_cor_planes:
+ if label:
+ label.installEventFilter(self)
+
+ def _cleanup_animations(self):
+ """Internal helper to stop animations safely."""
+ for i in range(3):
+ if i < len(self._ax_sag_cor_animations) and self._ax_sag_cor_animations[i]:
+ try:
+ self._ax_sag_cor_animations[i].event_source.stop()
+ except Exception:
+ pass
+ self._ax_sag_cor_animations[i] = None
+
+ # ============================================================================
+ # UI SETUP & HELPERS
+ # ============================================================================
+
+ def _show_widget_lists(self, widget_lists: List[List[QWidget]]) -> None:
+ """Helper to show groups of widgets."""
+ for widget_list in widget_lists:
+ for widget in widget_list:
+ widget.show()
+
+ def _hide_widget_lists(self, widget_lists: List[List[QWidget]]) -> None:
+ """Helper to hide groups of widgets."""
+ for widget_list in widget_lists:
+ for widget in widget_list:
+ widget.hide()
+
+ def _setup_enhancement_controls(self) -> None:
+ """Add enhancement sliders to the sidebar, mirroring DrawVOIWidget style."""
+ enh_group = QFrame()
+ enh_group.setStyleSheet("background-color: rgba(255, 255, 255, 0); border: none;")
+
+ container_layout = QVBoxLayout(enh_group)
+ container_layout.setContentsMargins(0, 10, 0, 10)
+ container_layout.setSpacing(15)
+
+ row1_layout = QHBoxLayout()
+ row2_layout = QHBoxLayout()
+ row1_layout.setSpacing(20)
+ row2_layout.setSpacing(20)
+
+ def create_enh_column(label_text, min_val, max_val, current_val, callback):
+ col_widget = QWidget()
+ col_layout = QVBoxLayout(col_widget)
+ col_layout.setContentsMargins(0, 0, 0, 0)
+ col_layout.setSpacing(5)
+
+ lbl = QLabel(label_text)
+ lbl.setStyleSheet("font-size: 14px; color: white; font-weight: bold;")
+ lbl.setAlignment(Qt.AlignmentFlag.AlignCenter)
+ col_layout.addWidget(lbl)
+
+ row_layout = QHBoxLayout()
+ slider = QSlider(Qt.Orientation.Horizontal)
+ slider.setRange(min_val, max_val)
+ slider.setValue(current_val)
+ slider.setStyleSheet(self._ui.cur_slice_slider.styleSheet())
+ slider.setMinimumWidth(80)
+ slider.setMaximumWidth(120)
+ slider.valueChanged.connect(callback)
+
+ val_lbl = QLabel(f"{current_val/10.0:.1f}")
+ val_lbl.setMinimumWidth(40)
+ val_lbl.setStyleSheet("color: #3498db; font-weight: bold; font-size: 14px;")
+
+ row_layout.addWidget(slider)
+ row_layout.addWidget(val_lbl)
+ col_layout.addLayout(row_layout)
+ return col_widget, slider, val_lbl
+
+ # Sliders
+ clahe_col, self.clahe_slider, self.clahe_val_lbl = create_enh_column(
+ "CLAHE", 1, 100, int(self._clahe_clip_limit * 10), self._on_clahe_changed
+ )
+ gamma_col, self.gamma_slider, self.gamma_val_lbl = create_enh_column(
+ "GAMMA", 1, 40, int(self._gamma * 10), self._on_gamma_changed
+ )
+ width_ax_col, self.width_ax_slider, self.width_ax_val_lbl = create_enh_column(
+ "WIDTH (AX)", 1, 50, int(self._width_scale_axial * 10), self._on_width_axial_changed
+ )
+ width_sag_col, self.width_sag_slider, self.width_sag_val_lbl = create_enh_column(
+ "WIDTH (SAG)", 1, 50, int(self._width_scale_sagittal * 10), self._on_width_sagittal_changed
+ )
+ width_cor_col, self.width_cor_slider, self.width_cor_val_lbl = create_enh_column(
+ "WIDTH (COR)", 1, 50, int(self._width_scale_coronal * 10), self._on_width_coronal_changed
+ )
+
+ # Add VOI Alpha slider
+ alpha_col, self.alpha_slider, self.alpha_val_lbl = create_enh_column(
+ "VOI ALPHA", 0, 2550, int(self._mask_alpha * 10), lambda v: self._on_alpha_changed(v // 10)
+ )
+ # Fix label to show integer for alpha
+ self.alpha_val_lbl.setText(str(self._mask_alpha))
+ self.alpha_slider.valueChanged.disconnect()
+ self.alpha_slider.valueChanged.connect(lambda v: (self._on_alpha_changed(v // 10), self.alpha_val_lbl.setText(str(v // 10))))
+
+ row1_layout.addWidget(clahe_col)
+ row1_layout.addWidget(gamma_col)
+
+ self.philips_check = QCheckBox("Pseudocoloring")
+ self.philips_check.setChecked(self._use_philips_ceus)
+ self.philips_check.setStyleSheet("color: white; font-weight: bold; font-size: 14px;")
+ self.philips_check.stateChanged.connect(self._on_philips_toggled)
+ row1_layout.addWidget(self.philips_check)
+ row1_layout.addWidget(alpha_col)
+
+ row2_layout.addWidget(width_ax_col)
+ row2_layout.addWidget(width_sag_col)
+ row2_layout.addWidget(width_cor_col)
+
+ container_layout.addLayout(row1_layout)
+ container_layout.addLayout(row2_layout)
+ self._ui.verticalLayout_2.addWidget(enh_group)
+
+ def _invalidate_enhancement_cache(self) -> None:
+ """Clear cache when processing parameters change."""
+ self._enhanced_cache = None
+ self._enhanced_cache_frame = -1
+ self._refresh_frames()
+
+ def _on_clahe_changed(self, value: int) -> None:
+ """Handle CLAHE change."""
+ self._clahe_clip_limit = value / 10.0
+ if hasattr(self, 'clahe_val_lbl'):
+ self.clahe_val_lbl.setText(f"{self._clahe_clip_limit:.1f}")
+ self._invalidate_enhancement_cache()
+
+ def _on_gamma_changed(self, value: int) -> None:
+ """Handle gamma change."""
+ self._gamma = value / 10.0
+ if hasattr(self, 'gamma_val_lbl'):
+ self.gamma_val_lbl.setText(f"{self._gamma:.1f}")
+ self._invalidate_enhancement_cache()
+
+ def _on_width_axial_changed(self, value: int) -> None:
+ """Handle axial aspect ratio."""
+ self._width_scale_axial = value / 10.0
+ if hasattr(self, 'width_ax_val_lbl'):
+ self.width_ax_val_lbl.setText(f"{self._width_scale_axial:.1f}")
+ self._update_aspect_ratios()
+
+ def _on_width_sagittal_changed(self, value: int) -> None:
+ """Handle sagittal aspect ratio."""
+ self._width_scale_sagittal = value / 10.0
+ if hasattr(self, 'width_sag_val_lbl'):
+ self.width_sag_val_lbl.setText(f"{self._width_scale_sagittal:.1f}")
+ self._update_aspect_ratios()
+
+ def _on_width_coronal_changed(self, value: int) -> None:
+ """Handle coronal aspect ratio."""
+ self._width_scale_coronal = value / 10.0
+ if hasattr(self, 'width_cor_val_lbl'):
+ self.width_cor_val_lbl.setText(f"{self._width_scale_coronal:.1f}")
+ self._update_aspect_ratios()
+
+ def _on_alpha_changed(self, value: int) -> None:
+ """Handle alpha transparency change for the VOI mask."""
+ self._mask_alpha = value
+ # Update the rgba mask transparency
+ # Use stored mask indices to ensure we can recover from alpha=0
+ if self._seg_mask_indices is not None and len(self._seg_mask_indices[0]) > 0:
+ # Re-apply color (Red) and new alpha to the relevant indices
+ self._roi_masks_overlap[self._seg_mask_indices[0], self._seg_mask_indices[1], self._seg_mask_indices[2]] = [255, 0, 0, self._mask_alpha]
+ self._refresh_frames()
+
+ def _update_aspect_ratios(self) -> None:
+ """Update artist aspect ratios based on physics (pixdim) and sliders."""
+ if not hasattr(self, '_image_data') or self._image_data is None:
+ return
+
+ try:
+ pix = self._image_data.pixdim
+
+ # Plane 0: Axial (XY) -> show (Y, X) -> Rows=Y, Cols=X -> dy / dx
+ if self._ax_sag_cor_matplotlib_canvases[0]:
+ dx, dy = pix[0], pix[1]
+ aspect_ax = (dy / dx if dx != 0 else 1.0) * self._width_scale_axial
+ self._ax_sag_cor_matplotlib_canvases[0].figure.gca().set_aspect(aspect_ax)
+
+ # Plane 1: Sagittal (YZ) -> 90 CW Rotation -> show (Y, Z) -> Rows=Y, Cols=Z -> dy / dz
+ if self._ax_sag_cor_matplotlib_canvases[1]:
+ dy, dz = pix[1], pix[2]
+ aspect_sag = (dy / dz if dz != 0 else 1.0) * self._width_scale_sagittal
+ self._ax_sag_cor_matplotlib_canvases[1].figure.gca().set_aspect(aspect_sag)
+
+ # Plane 2: Coronal (XZ) -> show (Z, X) -> Rows=Z, Cols=X -> dz / dx
+ if self._ax_sag_cor_matplotlib_canvases[2]:
+ dx, dz = pix[0], pix[2]
+ aspect_cor = (dz / dx if dx != 0 else 1.0) * self._width_scale_coronal
+ self._ax_sag_cor_matplotlib_canvases[2].figure.gca().set_aspect(aspect_cor)
+
+ for canvas in self._ax_sag_cor_matplotlib_canvases:
+ if canvas:
+ canvas.draw_idle()
+
+ self._refresh_frames()
+ except Exception as e:
+ print(f"Error updating aspect ratios: {e}")
+
+ def _on_philips_toggled(self, state: int) -> None:
+ """Handle Philips CEUS pseudocolor toggle."""
+ self._use_philips_ceus = state == Qt.CheckState.Checked.value
+ new_cmap = philips_cmap if self._use_philips_ceus else 'gray'
+ for artist in self._ax_sag_cor_plane_artists:
+ if artist:
+ artist.set_cmap(new_cmap)
+ self._refresh_frames()
+
+ def _setup_matplotlib_canvases(self) -> None:
+ """Initialize and embed matplotlib canvases into each plane's placeholder layout."""
+ # Use the axial, sagittal, coronal labels themselves as the parent for the canvases
+ # This ensures they are inside their respective QFrame boxes and aligned correctly
+ for i, parent_label in enumerate(self._ax_sag_cor_planes):
+ fig, ax = plt.subplots(facecolor='black')
+ fig.subplots_adjust(left=0, right=1, top=1, bottom=0)
+ ax.axis('off')
+ canvas = FigureCanvas(fig)
+ canvas.setParent(parent_label)
+
+ # Use Expanding policy
+ canvas.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
+
+ # Hide the label's text but keep the background/frame
+ parent_label.setText("")
+
+ self._ax_sag_cor_matplotlib_canvases[i] = canvas
+
+ def _initialize_plane_displays(self) -> None:
+ """Initial render of each orthogonal plane with fixed intensity scaling."""
+ for i, canvas in enumerate(self._ax_sag_cor_matplotlib_canvases):
+ if not canvas: continue
+ ax = canvas.figure.axes[0]
+
+ # Initial data slice
+ slice_data = self._get_plane_slice(i)
+ # Use fixed vmin/vmax to prevent auto-scaling contrast per slice
+ artist = ax.imshow(slice_data, cmap='gray', interpolation='nearest',
+ zorder=1, vmin=0, vmax=255)
+ self._ax_sag_cor_plane_artists[i] = artist
+
+ # Mask overlay
+ mask_slice = self._get_mask_slice(i)
+ # Match interpolation and zorder to DrawVOIWidget
+ mask_artist = ax.imshow(mask_slice, interpolation='nearest',
+ zorder=8)
+ self._ax_sag_cor_seg_masks[i] = mask_artist
+
+ # Crosshair lines
+ # Get actual coordinate indices for current plane from maps
+ idx_x, idx_y = self._ax_sag_cor_index_maps[i]
+ v_line = ax.axvline(x=self._crosshair_xyzt[idx_x], color='yellow', lw=0.8, animated=True, zorder=11)
+ h_line = ax.axhline(y=self._crosshair_xyzt[idx_y], color='yellow', lw=0.8, animated=True, zorder=11)
+ self._ax_sag_cor_crosshair_lines[i] = (v_line, h_line)
+
+ self._update_aspect_ratios()
+
+ def _get_plane_slice(self, plane_ix: int) -> np.ndarray:
+ """Extract a 2D image slice for the specified plane at current crosshair indices."""
+ x, y, z, t = self._crosshair_xyzt
+ vol = self._get_enhanced_volume(t)
+
+ if plane_ix == 0: # Axial (XY) at Z -> show (Y, X)
+ return vol[:, :, z].T
+ elif plane_ix == 1: # Sagittal (YZ) at X -> show (Z, Y) then rotate 90 CW -> (Y, Z)
+ # Match DrawVOIWidget approach: arr.T then rot90(k=-1)
+ arr = vol[x, :, :]
+ arr_t = arr.T
+ return np.rot90(arr_t, k=-1)
+ elif plane_ix == 2: # Coronal (XZ) at Y -> show (Y, X)
+ # Mirror Axial for Coronal to match DrawVOI behavior
+ return vol[:, y, :].T
+ return np.zeros((10, 10))
+
+ def _get_mask_slice(self, plane_ix: int) -> np.ndarray:
+ """Extract a 2D mask slice for overlay."""
+ x, y, z, _ = self._crosshair_xyzt
+ if plane_ix == 0: # Axial (XY) at Z -> show (Y, X)
+ # Match DrawVOIWidget approach: index mask then transpose (1, 0, 2)
+ arr = self._roi_masks_overlap[:, :, z, :]
+ return np.transpose(arr, (1, 0, 2))
+ elif plane_ix == 1: # Sagittal (YZ) at X -> show (Z, Y) then rotate 90 CW -> (Y, Z)
+ arr = self._roi_masks_overlap[x, :, :, :]
+ # Consistent with DrawVOIWidget: (1, 0, 2) then rot90(k=-1)
+ arr_t = np.transpose(arr, (1, 0, 2))
+ return np.rot90(arr_t, k=-1)
+ elif plane_ix == 2: # Coronal (XZ) at Y -> show (Y, X)
+ # Mirror Axial for Coronal to match DrawVOI behavior
+ arr = self._roi_masks_overlap[:, y, :, :]
+ return np.transpose(arr, (1, 0, 2))
+ return np.zeros((10, 10, 4), dtype=np.uint8)
+
+ def _get_enhanced_volume(self, t: int) -> np.ndarray:
+ """Apply image processing and return the 3D volume at frame t."""
+ if self._enhanced_cache is not None and self._enhanced_cache_frame == t:
+ return self._enhanced_cache
+
+ # Extract the 3D volume for current frame
+ vol_3d = self._pix_data[:, :, :, t]
+
+ # Create a temporary UltrasoundImage for the engine preprocessors
+ temp_im = UltrasoundImage(self._image_data.scan_path)
+ temp_im.pixel_data = vol_3d
+ temp_im.pixdim = self._image_data.pixdim
+ temp_im.frame_rate = self._image_data.frame_rate
+
+ # Apply backend engine functions
+ temp_im = enhance_clahe(temp_im, clip_limit=self._clahe_clip_limit)
+ temp_im = enhance_gamma(temp_im, gamma=self._gamma)
+
+ self._enhanced_cache = temp_im.pixel_data
+ self._enhanced_cache_frame = t
+ return self._enhanced_cache
+
+ def _setup_all_plane_animations(self) -> None:
+ """Setup refresh animations for each matplotlib canvas."""
+ for i in range(3):
+ canvas = self._ax_sag_cor_matplotlib_canvases[i]
+ self._ax_sag_cor_animations[i] = anim.FuncAnimation(
+ canvas.figure,
+ lambda frame, p_ix=i: self._update_plane(p_ix),
+ interval=33,
+ blit=True,
+ cache_frame_data=False
+ )
+
+ def _update_plane(self, plane_ix: int):
+ """Update artist data for a single plane."""
+ # Always return the list of artists for blitting
+ v_line, h_line = self._ax_sag_cor_crosshair_lines[plane_ix]
+ artist = self._ax_sag_cor_plane_artists[plane_ix]
+ mask_artist = self._ax_sag_cor_seg_masks[plane_ix]
+
+ artists = []
+ if artist: artists.append(artist)
+ if mask_artist: artists.append(mask_artist)
+ if v_line: artists.append(v_line)
+ if h_line: artists.append(h_line)
+
+ if not self._ax_sag_cor_pending[plane_ix]:
+ return artists
+
+ if artist:
+ artist.set_data(self._get_plane_slice(plane_ix))
+ if mask_artist:
+ mask_artist.set_data(self._get_mask_slice(plane_ix))
+
+ if v_line and h_line:
+ idx_x, idx_y = self._ax_sag_cor_index_maps[plane_ix]
+ # When refreshing (e.g. slice changed), snap back to stored indices
+ v_line.set_xdata([self._crosshair_xyzt[idx_x]])
+ h_line.set_ydata([self._crosshair_xyzt[idx_y]])
+ v_line.set_visible(self._crosshair_visible)
+ h_line.set_visible(self._crosshair_visible)
+
+ self._ax_sag_cor_pending[plane_ix] = False
+ return artists
+
+ def _connect_signals(self) -> None:
+ """Connect UI signals to internal handlers, matching DrawVOIWidget patterns."""
+ # Frame/Time Navigation
+ self._ui.cur_slice_slider.valueChanged.connect(self._on_slice_slider_changed)
+ self._ui.cur_slice_spin_box.valueChanged.connect(lambda v: self._ui.cur_slice_slider.setValue(int(v)-1))
+ self._ui.toggle_crosshair_visibility_button.clicked.connect(self._on_toggle_crosshair)
+ self._ui.back_button.clicked.connect(self._on_back_requested)
+
+ # Decision Buttons
+ self.confirm_review_button.clicked.connect(self._on_confirm_review)
+ self._ui.restart_voi_button.clicked.connect(self._on_back_requested)
+ self._ui.save_voi_button.clicked.connect(self._on_save_voi_clicked)
+
+ # Save Form Actions
+ self._ui.back_from_save_button.clicked.connect(self._on_back_from_save_clicked)
+ self._ui.choose_save_folder_button.clicked.connect(self._on_choose_save_folder)
+ self._ui.clear_save_folder_button.clicked.connect(lambda: self._ui.save_folder_input.clear())
+ self._ui.export_voi_button.clicked.connect(self._on_export_voi_clicked)
+
+ def _on_back_requested(self):
+ """Handle back request with cleanup."""
+ self._cleanup_animations()
+ self.back_requested.emit()
+
+ def _on_confirm_review(self):
+ """Handle confirmation with cleanup."""
+ self._cleanup_animations()
+ self.segmentation_confirmed.emit()
+
+ def _on_save_voi_clicked(self) -> None:
+ """Switch to the save file configuration menu."""
+ self._hide_widget_lists([self._voi_decision_widgets])
+ self._show_widget_lists([self._save_voi_widgets, self._voi_alpha_widgets])
+ # Default save name
+ self._ui.save_name_input.setText(f"{self._image_data.scan_name}_mask")
+
+ def _on_back_from_save_clicked(self) -> None:
+ """Switch back from save menu to decision menu."""
+ self._hide_widget_lists([self._save_voi_widgets, self._voi_alpha_widgets])
+ self._show_widget_lists([self._voi_decision_widgets])
+
+ def closeEvent(self, event):
+ """Clean up animations and canvases before the widget is destroyed."""
+ self._cleanup_animations()
+
+ for i in range(3):
+ canvas = self._ax_sag_cor_matplotlib_canvases[i]
+ if canvas:
+ try:
+ plt.close(canvas.figure)
+ except Exception:
+ pass
+ self._ax_sag_cor_matplotlib_canvases[i] = None
+
+ super().closeEvent(event)
+
+ def _on_choose_save_folder(self) -> None:
+ """Open directory dialog for saving."""
+ folder = QFileDialog.getExistingDirectory(self, "Select Save Directory")
+ if folder:
+ self._ui.save_folder_input.setText(folder)
+
+ def _on_export_voi_clicked(self) -> None:
+ """Export the current 3D mask to NIfTI."""
+ folder_path = self._ui.save_folder_input.text()
+ file_name = self._ui.save_name_input.text()
+
+ if not folder_path or not Path(folder_path).is_dir():
+ self.show_error("Please select a valid folder.")
+ return
+ if not file_name:
+ self.show_error("Please enter a file name.")
+ return
+
+ if not file_name.endswith('.nii.gz'):
+ file_name += '.nii.gz'
+
+ out_path = Path(folder_path) / file_name
+
+ try:
+ self.show_loading()
+ # Construct affine
+ affine = np.eye(4)
+ for i, res in enumerate(self._image_data.pixdim[:3]):
+ affine[i, i] = res
+
+ # The mask is stored in self._seg_data.seg_mask
+ mask = self._seg_data.seg_mask
+ nii_img = nib.Nifti1Image(mask, affine)
+ nii_img.header["descrip"] = self._image_data.scan_name
+ nib.save(nii_img, out_path)
+
+ self.hide_loading()
+ # After export, show decision again
+ self._on_back_from_save_clicked()
+ except Exception as e:
+ self.hide_loading()
+ self.show_error(f"Export failed: {str(e)}")
+
+ def _on_slice_slider_changed(self, value: int) -> None:
+ """Handle time-series frame change."""
+ self._crosshair_xyzt[3] = value
+ self._ui.cur_slice_spin_box.blockSignals(True)
+ self._ui.cur_slice_spin_box.setValue(value + 1)
+ self._ui.cur_slice_spin_box.blockSignals(False)
+ self._refresh_frames()
+
+ def _on_toggle_crosshair(self) -> None:
+ """Toggle crosshair visibility."""
+ self._crosshair_visible = not self._crosshair_visible
+ self._ui.toggle_crosshair_visibility_button.setText(
+ 'Show Crosshair' if not self._crosshair_visible else 'Hide Crosshair'
+ )
+ self._refresh_frames()
+
+ def _refresh_frames(self) -> None:
+ """Mark all planes for refresh."""
+ self._ax_sag_cor_pending = [True, True, True]
+
+ def _update_scan_display(self) -> None:
+ """Sync UI labels with current crosshair indices."""
+ self._ui.sag_frame_num.setText(str(self._crosshair_xyzt[0]))
+ self._ui.cor_frame_num.setText(str(self._crosshair_xyzt[1]))
+ self._ui.ax_frame_num.setText(str(self._crosshair_xyzt[2]))
+
+ # Update spinbox for t
+ self._ui.cur_slice_spin_box.blockSignals(True)
+ self._ui.cur_slice_spin_box.setValue(self._crosshair_xyzt[3] + 1)
+ self._ui.cur_slice_spin_box.blockSignals(False)
+
+ def set_crosshair(self, x=None, y=None, z=None, t=None):
+ """Update crosshair position and trigger refresh."""
+ changed = False
+ if x is not None and 0 <= x < self._x_len:
+ self._crosshair_xyzt[0] = x; changed = True
+ if y is not None and 0 <= y < self._y_len:
+ self._crosshair_xyzt[1] = y; changed = True
+ if z is not None and 0 <= z < self._z_len:
+ self._crosshair_xyzt[2] = z; changed = True
+ if t is not None and 0 <= t < self._num_slices:
+ self._crosshair_xyzt[3] = t; changed = True
+
+ if changed:
+ self._update_scan_display()
+ self._refresh_frames()
+
+ # ======================= Resize Handling =================================
+ def eventFilter(self, obj, event): # type: ignore
+ if event.type() == QEvent.Type.Resize and obj in self._ax_sag_cor_planes:
+ self._resize_canvas_for(obj)
+ return super().eventFilter(obj, event)
+
+ def _resize_canvas_for(self, label_widget: QLabel):
+ try:
+ idx = self._ax_sag_cor_planes.index(label_widget)
+ except ValueError:
+ return
+ canvas = self._ax_sag_cor_matplotlib_canvases[idx]
+ if not canvas:
+ return
+
+ # Match canvas size to the QLabel/placeholder size
+ # We ensure it fills the parent label precisely
+ canvas_width = label_widget.width()
+ canvas_height = label_widget.height()
+ canvas.setFixedSize(canvas_width, canvas_height)
+ canvas.move(0, 0)
+ canvas.draw_idle()
+
+ def _resize_all_canvases(self):
+ """Force a resize of all embedded matplotlib canvases."""
+ for label in self._ax_sag_cor_planes:
+ if label:
+ self._resize_canvas_for(label)
+
+ def showEvent(self, event):
+ # Ensure canvases sized properly when shown
+ self._resize_all_canvases()
+ return super().showEvent(event)
+
+ def _connect_matplotlib_events(self):
+ """Connect motion and click events on each plane's matplotlib canvas."""
+ for plane_ix, canvas in enumerate(self._ax_sag_cor_matplotlib_canvases):
+ if not canvas: continue
+ canvas.mpl_connect('motion_notify_event', lambda e, p=plane_ix: self._on_canvas_motion(e, p))
+ canvas.mpl_connect('button_press_event', lambda e, p=plane_ix: self._on_canvas_click(e, p))
+
+ def _on_canvas_click(self, event, plane_ix: int):
+ if event.inaxes is None: return
+ self._crosshair_active = not self._crosshair_active
+ if self._crosshair_active:
+ self._ui.navigating_label.show()
+ self._ui.observing_label.hide()
+ else:
+ self._ui.navigating_label.hide()
+ self._ui.observing_label.show()
+ self._on_canvas_motion(event, plane_ix)
+
+ def _on_canvas_motion(self, event, plane_ix: int):
+ """Handle mouse movement over a plane and update crosshair indices."""
+ # If no active navigation (locked), we just update the lines to follow mouse
+ if not self._crosshair_active:
+ if event.inaxes is not None and event.xdata is not None and event.ydata is not None:
+ self._update_hover_crosshair(event.xdata, event.ydata, plane_ix)
+ else:
+ # Snap back to current indices when mouse leaves the axes
+ idx_x, idx_y = self._ax_sag_cor_index_maps[plane_ix]
+ self._update_hover_crosshair(self._crosshair_xyzt[idx_x], self._crosshair_xyzt[idx_y], plane_ix)
+ return
+
+ # If crosshair is active (clicked), update global position
+ if event.inaxes is None or event.xdata is None or event.ydata is None:
+ return
+
+ vary_dims = self._ax_sag_cor_index_maps[plane_ix]
+ dim_x, dim_y = vary_dims[0], vary_dims[1]
+ dim_lengths = [self._x_len, self._y_len, self._z_len, self._num_slices]
+
+ new_xval = int(round(event.xdata))
+ new_yval = int(round(event.ydata))
+
+ if 0 <= new_xval < dim_lengths[dim_x] and 0 <= new_yval < dim_lengths[dim_y]:
+ params = {}
+ if self._crosshair_xyzt[dim_x] != new_xval:
+ key = ['x','y','z','t'][dim_x]
+ params[key] = new_xval
+ if self._crosshair_xyzt[dim_y] != new_yval:
+ key = ['x','y','z','t'][dim_y]
+ params[key] = new_yval
+
+ if params:
+ self.set_crosshair(**params)
+
+ # Also sync lines with the new global position
+ if self._crosshair_visible:
+ self._update_hover_crosshair(event.xdata, event.ydata, plane_ix)
+
+ def _update_hover_crosshair(self, x, y, plane_ix):
+ """Update crosshair lines to follow mouse hover."""
+ v_line, h_line = self._ax_sag_cor_crosshair_lines[plane_ix]
+ if v_line and h_line:
+ v_line.set_xdata([x, x])
+ h_line.set_ydata([y, y])
+ v_line.set_visible(self._crosshair_visible)
+ h_line.set_visible(self._crosshair_visible)
+ # Only update the background for this ONE canvas
+ self._ax_sag_cor_matplotlib_canvases[plane_ix].draw_idle()
diff --git a/src/ceus/seg_loading/views/spline.py b/src/ceus/seg_loading/views/spline.py
index 65bf06e..e65263a 100644
--- a/src/ceus/seg_loading/views/spline.py
+++ b/src/ceus/seg_loading/views/spline.py
@@ -17,10 +17,25 @@ def calculateSpline(xpts, ypts, zpts=None): # 2D spline interpolation
cv.append([xpts[i], ypts[i], zpts[i]])
else:
cv.append([xpts[i], ypts[i]])
+
+ # Remove duplicate points which cause "ValueError: Invalid inputs" in splprep
cv = np.array(cv)
- if len(xpts) == 2:
+ if len(cv) > 1:
+ # Calculate distances between consecutive points
+ diffs = np.diff(cv, axis=0)
+ dists = np.sqrt(np.sum(diffs**2, axis=1))
+ # Keep first point and points that are sufficiently far from the previous one
+ mask = np.concatenate(([True], dists > 1e-5))
+ cv = cv[mask]
+
+ if len(cv) < 2:
+ if zpts is not None:
+ return np.array([cv[0][0]]), np.array([cv[0][1]]), np.array([cv[0][2]])
+ return np.array([cv[0][0]]), np.array([cv[0][1]])
+
+ if len(cv) == 2:
tck, _ = interpolate.splprep(cv.T, s=0.0, k=1)
- elif len(xpts) == 3:
+ elif len(cv) == 3:
tck, _ = interpolate.splprep(cv.T, s=0.0, k=2)
else:
tck, _ = interpolate.splprep(cv.T, s=0.0, k=3)
@@ -54,6 +69,11 @@ def ellipsoidFitLS(pos):
def calculateSpline3D(points):
+ # If the points have a 4th dimension (time), we strip it as pyvista expects (x, y, z)
+ points = np.array(points)
+ if points.shape[1] == 4:
+ points = points[:, :3]
+
cloud = pv.PolyData(points, force_float=False)
volume = cloud.delaunay_3d(alpha=100)
shell = volume.extract_geometry() # type: ignore
diff --git a/src/qus/analysis_loading/ui/analysis_function_selection_ui.py b/src/qus/analysis_loading/ui/analysis_function_selection_ui.py
new file mode 100644
index 0000000..e9d8317
--- /dev/null
+++ b/src/qus/analysis_loading/ui/analysis_function_selection_ui.py
@@ -0,0 +1,270 @@
+# Form implementation generated from reading ui file 'src\qus\analysis_loading\ui\analysis_function_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_analysisFunctionSelection(object):
+ def setupUi(self, analysisFunctionSelection):
+ analysisFunctionSelection.setObjectName("analysisFunctionSelection")
+ analysisFunctionSelection.resize(1284, 803)
+ analysisFunctionSelection.setMinimumSize(QtCore.QSize(0, 0))
+ analysisFunctionSelection.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=analysisFunctionSelection)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(60, 10, 1081, 731))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.analysis_function_layout = QtWidgets.QVBoxLayout()
+ self.analysis_function_layout.setContentsMargins(30, 30, 10, 10)
+ self.analysis_function_layout.setSpacing(20)
+ self.analysis_function_layout.setObjectName("analysis_function_layout")
+ self.analysis_function_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_function_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_function_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.analysis_function_label.setScaledContents(False)
+ self.analysis_function_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_function_label.setWordWrap(True)
+ self.analysis_function_label.setObjectName("analysis_function_label")
+ self.analysis_function_layout.addWidget(self.analysis_function_label)
+ self.funcs_list = QtWidgets.QListWidget(parent=self.horizontalLayoutWidget_4)
+ self.funcs_list.setObjectName("funcs_list")
+ self.analysis_function_layout.addWidget(self.funcs_list)
+ self.next_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.next_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.next_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.next_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.next_button.setObjectName("next_button")
+ self.analysis_function_layout.addWidget(self.next_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.analysis_function_layout.addItem(spacerItem2)
+ self.analysis_function_layout.setStretch(1, 10)
+ self.analysis_function_layout.setStretch(2, 1)
+ self.analysis_function_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.analysis_function_layout)
+
+ self.retranslateUi(analysisFunctionSelection)
+ QtCore.QMetaObject.connectSlotsByName(analysisFunctionSelection)
+
+ def retranslateUi(self, analysisFunctionSelection):
+ _translate = QtCore.QCoreApplication.translate
+ analysisFunctionSelection.setWindowTitle(_translate("analysisFunctionSelection", "Analysis Function Selection"))
+ self.sidebar.setToolTip(_translate("analysisFunctionSelection", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("analysisFunctionSelection", "Image Selection:"))
+ self.imageLabel.setText(_translate("analysisFunctionSelection", "Image:"))
+ self.phantomLabel.setText(_translate("analysisFunctionSelection", "Phantom:"))
+ self.image_path_input.setText(_translate("analysisFunctionSelection", "Sample filename "))
+ self.phantom_path_input.setText(_translate("analysisFunctionSelection", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("analysisFunctionSelection", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("analysisFunctionSelection", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("analysisFunctionSelection", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("analysisFunctionSelection", "Visualization / Export"))
+ self.back_button.setText(_translate("analysisFunctionSelection", "Back"))
+ self.analysis_function_label.setText(_translate("analysisFunctionSelection", "Select analysis methods to run:"))
+ self.next_button.setText(_translate("analysisFunctionSelection", "Next"))
diff --git a/src/qus/analysis_loading/ui/analysis_params_ui.py b/src/qus/analysis_loading/ui/analysis_params_ui.py
new file mode 100644
index 0000000..c4dfc69
--- /dev/null
+++ b/src/qus/analysis_loading/ui/analysis_params_ui.py
@@ -0,0 +1,302 @@
+# Form implementation generated from reading ui file 'src\qus\analysis_loading\ui\analysis_params.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_analysisParams(object):
+ def setupUi(self, analysisParams):
+ analysisParams.setObjectName("analysisParams")
+ analysisParams.resize(1284, 803)
+ analysisParams.setMinimumSize(QtCore.QSize(0, 0))
+ analysisParams.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=analysisParams)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(60, 20, 951, 731))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.analysis_params_layout = QtWidgets.QVBoxLayout()
+ self.analysis_params_layout.setContentsMargins(30, 10, 30, 10)
+ self.analysis_params_layout.setSpacing(50)
+ self.analysis_params_layout.setObjectName("analysis_params_layout")
+ self.analysis_execution_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_execution_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_execution_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.analysis_execution_label.setScaledContents(False)
+ self.analysis_execution_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_execution_label.setWordWrap(True)
+ self.analysis_execution_label.setObjectName("analysis_execution_label")
+ self.analysis_params_layout.addWidget(self.analysis_execution_label)
+ self.analysis_params_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_params_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_params_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.analysis_params_label.setScaledContents(False)
+ self.analysis_params_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_params_label.setWordWrap(True)
+ self.analysis_params_label.setObjectName("analysis_params_label")
+ self.analysis_params_layout.addWidget(self.analysis_params_label)
+ self.params_scroll_area = QtWidgets.QScrollArea(parent=self.horizontalLayoutWidget_4)
+ self.params_scroll_area.setWidgetResizable(True)
+ self.params_scroll_area.setObjectName("params_scroll_area")
+ self.params_content = QtWidgets.QWidget()
+ self.params_content.setGeometry(QtCore.QRect(0, 0, 409, 295))
+ self.params_content.setObjectName("params_content")
+ self.params_layout = QtWidgets.QVBoxLayout(self.params_content)
+ self.params_layout.setObjectName("params_layout")
+ self.params_scroll_area.setWidget(self.params_content)
+ self.analysis_params_layout.addWidget(self.params_scroll_area)
+ self.analysis_running_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_running_label.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 0);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_running_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_running_label.setObjectName("analysis_running_label")
+ self.analysis_params_layout.addWidget(self.analysis_running_label)
+ self.run_analysis_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.run_analysis_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.run_analysis_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.run_analysis_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.run_analysis_button.setObjectName("run_analysis_button")
+ self.analysis_params_layout.addWidget(self.run_analysis_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.analysis_params_layout.addItem(spacerItem2)
+ self.analysis_params_layout.setStretch(0, 1)
+ self.analysis_params_layout.setStretch(1, 1)
+ self.analysis_params_layout.setStretch(2, 10)
+ self.analysis_params_layout.setStretch(4, 1)
+ self.analysis_params_layout.setStretch(5, 1)
+ self.full_screen_layout.addLayout(self.analysis_params_layout)
+
+ self.retranslateUi(analysisParams)
+ QtCore.QMetaObject.connectSlotsByName(analysisParams)
+
+ def retranslateUi(self, analysisParams):
+ _translate = QtCore.QCoreApplication.translate
+ analysisParams.setWindowTitle(_translate("analysisParams", "Analysis Parameters Configuration"))
+ self.sidebar.setToolTip(_translate("analysisParams", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("analysisParams", "Image Selection:"))
+ self.imageLabel.setText(_translate("analysisParams", "Image:"))
+ self.phantomLabel.setText(_translate("analysisParams", "Phantom:"))
+ self.image_path_input.setText(_translate("analysisParams", "Sample filename "))
+ self.phantom_path_input.setText(_translate("analysisParams", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("analysisParams", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("analysisParams", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("analysisParams", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("analysisParams", "Visualization / Export"))
+ self.back_button.setText(_translate("analysisParams", "Back"))
+ self.analysis_execution_label.setText(_translate("analysisParams", "Analysis in Progress..."))
+ self.analysis_params_label.setText(_translate("analysisParams", "Configure Analysis Parameters:"))
+ self.analysis_running_label.setText(_translate("analysisParams", "Running Analysis...."))
+ self.run_analysis_button.setText(_translate("analysisParams", "Run Analysis"))
diff --git a/src/qus/config_loading/ui/config_file_selection_ui.py b/src/qus/config_loading/ui/config_file_selection_ui.py
new file mode 100644
index 0000000..b860a49
--- /dev/null
+++ b/src/qus/config_loading/ui/config_file_selection_ui.py
@@ -0,0 +1,347 @@
+# Form implementation generated from reading ui file 'src\qus\config_loading\ui\config_file_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_configFileSelection(object):
+ def setupUi(self, configFileSelection):
+ configFileSelection.setObjectName("configFileSelection")
+ configFileSelection.resize(1284, 803)
+ configFileSelection.setMinimumSize(QtCore.QSize(0, 0))
+ configFileSelection.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=configFileSelection)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(60, 20, 1315, 731))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.config_loading_layout = QtWidgets.QVBoxLayout()
+ self.config_loading_layout.setContentsMargins(30, 30, 30, 30)
+ self.config_loading_layout.setSpacing(20)
+ self.config_loading_layout.setObjectName("config_loading_layout")
+ self.file_selection_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.file_selection_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.file_selection_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.file_selection_label.setScaledContents(False)
+ self.file_selection_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.file_selection_label.setWordWrap(True)
+ self.file_selection_label.setObjectName("file_selection_label")
+ self.config_loading_layout.addWidget(self.file_selection_label)
+ self.chooseImgLayout = QtWidgets.QVBoxLayout()
+ self.chooseImgLayout.setContentsMargins(20, -1, 20, -1)
+ self.chooseImgLayout.setObjectName("chooseImgLayout")
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem2)
+ self.config_path_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.config_path_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.config_path_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.config_path_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.config_path_label.setObjectName("config_path_label")
+ self.chooseImgLayout.addWidget(self.config_path_label)
+ self.config_path_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.config_path_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.config_path_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.config_path_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.config_path_input.setObjectName("config_path_input")
+ self.chooseImgLayout.addWidget(self.config_path_input, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.chooseImageButtonsLayout = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout.setSpacing(1)
+ self.chooseImageButtonsLayout.setObjectName("chooseImageButtonsLayout")
+ self.choose_config_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.choose_config_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_config_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_config_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_config_path_button.setObjectName("choose_config_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.choose_config_path_button, 0, QtCore.Qt.AlignmentFlag.AlignRight)
+ self.clear_config_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.clear_config_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_config_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_config_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_config_path_button.setObjectName("clear_config_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.clear_config_path_button, 0, QtCore.Qt.AlignmentFlag.AlignLeft)
+ self.chooseImgLayout.addLayout(self.chooseImageButtonsLayout)
+ spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem3)
+ self.config_loading_layout.addLayout(self.chooseImgLayout)
+ self.loading_options_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.loading_options_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_options_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.loading_options_label.setScaledContents(False)
+ self.loading_options_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_options_label.setWordWrap(True)
+ self.loading_options_label.setObjectName("loading_options_label")
+ self.config_loading_layout.addWidget(self.loading_options_label)
+ self.loading_options_table = QtWidgets.QTableWidget(parent=self.horizontalLayoutWidget_4)
+ self.loading_options_table.setStyleSheet("QTableWidget {\n"
+" background: rgb(108, 108, 108);\n"
+" color: white;\n"
+"}")
+ self.loading_options_table.setDragEnabled(False)
+ self.loading_options_table.setRowCount(0)
+ self.loading_options_table.setColumnCount(0)
+ self.loading_options_table.setObjectName("loading_options_table")
+ self.loading_options_table.horizontalHeader().setCascadingSectionResizes(False)
+ self.config_loading_layout.addWidget(self.loading_options_table)
+ self.accept_config_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.accept_config_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.accept_config_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.accept_config_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_config_path_button.setObjectName("accept_config_path_button")
+ self.config_loading_layout.addWidget(self.accept_config_path_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.config_loading_layout.setStretch(0, 2)
+ self.config_loading_layout.setStretch(4, 3)
+ self.full_screen_layout.addLayout(self.config_loading_layout)
+
+ self.retranslateUi(configFileSelection)
+ QtCore.QMetaObject.connectSlotsByName(configFileSelection)
+
+ def retranslateUi(self, configFileSelection):
+ _translate = QtCore.QCoreApplication.translate
+ configFileSelection.setWindowTitle(_translate("configFileSelection", "Config File Selection"))
+ self.sidebar.setToolTip(_translate("configFileSelection", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("configFileSelection", "Image Selection:"))
+ self.imageLabel.setText(_translate("configFileSelection", "Image:"))
+ self.phantomLabel.setText(_translate("configFileSelection", "Phantom:"))
+ self.image_path_input.setText(_translate("configFileSelection", "Sample filename "))
+ self.phantom_path_input.setText(_translate("configFileSelection", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("configFileSelection", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("configFileSelection", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("configFileSelection", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("configFileSelection", "Visualization / Export"))
+ self.back_button.setText(_translate("configFileSelection", "Back"))
+ self.file_selection_label.setText(_translate("configFileSelection", "Select Configuration File:"))
+ self.config_path_label.setText(_translate("configFileSelection", "Input path to config file\n"
+" (.rf, .rfd, .mat, .bin)"))
+ self.choose_config_path_button.setText(_translate("configFileSelection", "Choose File"))
+ self.clear_config_path_button.setText(_translate("configFileSelection", "Clear Path"))
+ self.loading_options_label.setText(_translate("configFileSelection", "\n"
+"Configuration Loading Options:"))
+ self.loading_options_table.setSortingEnabled(False)
+ self.accept_config_path_button.setText(_translate("configFileSelection", "Accept"))
diff --git a/src/qus/config_loading/ui/config_preview_ui.py b/src/qus/config_loading/ui/config_preview_ui.py
new file mode 100644
index 0000000..7574938
--- /dev/null
+++ b/src/qus/config_loading/ui/config_preview_ui.py
@@ -0,0 +1,684 @@
+# Form implementation generated from reading ui file 'src\qus\config_loading\ui\config_preview.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_configPreview(object):
+ def setupUi(self, configPreview):
+ configPreview.setObjectName("configPreview")
+ configPreview.resize(1284, 803)
+ configPreview.setMinimumSize(QtCore.QSize(0, 0))
+ configPreview.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=configPreview)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(60, 20, 1162, 735))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(90, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(90, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.config_confirm_layout = QtWidgets.QVBoxLayout()
+ self.config_confirm_layout.setContentsMargins(10, 30, 10, 30)
+ self.config_confirm_layout.setSpacing(30)
+ self.config_confirm_layout.setObjectName("config_confirm_layout")
+ self.config_preview_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.config_preview_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.config_preview_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.config_preview_label.setScaledContents(False)
+ self.config_preview_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.config_preview_label.setWordWrap(True)
+ self.config_preview_label.setObjectName("config_preview_label")
+ self.config_confirm_layout.addWidget(self.config_preview_label)
+ self.config_desc_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.config_desc_label.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 14px;\n"
+"}")
+ self.config_desc_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.config_desc_label.setWordWrap(True)
+ self.config_desc_label.setObjectName("config_desc_label")
+ self.config_confirm_layout.addWidget(self.config_desc_label)
+ self.configScrollArea = QtWidgets.QScrollArea(parent=self.horizontalLayoutWidget_4)
+ self.configScrollArea.setStyleSheet("QScrollArea {\n"
+" border: none;\n"
+" background-color: transparent;\n"
+"}\n"
+"\n"
+"QScrollBar:vertical {\n"
+" background-color: rgb(60, 60, 60);\n"
+" width: 12px;\n"
+" border-radius: 6px;\n"
+"}\n"
+"\n"
+"QScrollBar::handle:vertical {\n"
+" background-color: rgb(120, 120, 120);\n"
+" border-radius: 6px;\n"
+" min-height: 20px;\n"
+"}\n"
+"\n"
+"QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {\n"
+" height: 0px;\n"
+"}\n"
+"\n"
+"QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {\n"
+" background-color: transparent;\n"
+"}")
+ self.configScrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded)
+ self.configScrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAsNeeded)
+ self.configScrollArea.setWidgetResizable(True)
+ self.configScrollArea.setObjectName("configScrollArea")
+ self.configContainer = QtWidgets.QWidget()
+ self.configContainer.setGeometry(QtCore.QRect(0, 0, 586, 449))
+ self.configContainer.setObjectName("configContainer")
+ self.config_layout = QtWidgets.QVBoxLayout(self.configContainer)
+ self.config_layout.setSpacing(20)
+ self.config_layout.setObjectName("config_layout")
+ self.freqGroup = QtWidgets.QGroupBox(parent=self.configContainer)
+ self.freqGroup.setStyleSheet("QGroupBox {\n"
+" color: white;\n"
+" font-weight: bold;\n"
+" border: 2px solid rgb(99, 0, 174);\n"
+" border-radius: 5px;\n"
+" margin-top: 10px;\n"
+" padding-top: 10px;\n"
+"}\n"
+"\n"
+"QGroupBox::title {\n"
+" subcontrol-origin: margin;\n"
+" left: 10px;\n"
+" padding: 0 5px 0 5px;\n"
+"}")
+ self.freqGroup.setObjectName("freqGroup")
+ self.freq_layout = QtWidgets.QFormLayout(self.freqGroup)
+ self.freq_layout.setSpacing(10)
+ self.freq_layout.setObjectName("freq_layout")
+ self.transducerFreqLabel = QtWidgets.QLabel(parent=self.freqGroup)
+ self.transducerFreqLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.transducerFreqLabel.setObjectName("transducerFreqLabel")
+ self.freq_layout.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.transducerFreqLabel)
+ self.transducerFreqValue = QtWidgets.QLabel(parent=self.freqGroup)
+ self.transducerFreqValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.transducerFreqValue.setObjectName("transducerFreqValue")
+ self.freq_layout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.transducerFreqValue)
+ self.analysisFreqLabel = QtWidgets.QLabel(parent=self.freqGroup)
+ self.analysisFreqLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.analysisFreqLabel.setObjectName("analysisFreqLabel")
+ self.freq_layout.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.analysisFreqLabel)
+ self.analysisFreqValue = QtWidgets.QLabel(parent=self.freqGroup)
+ self.analysisFreqValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.analysisFreqValue.setObjectName("analysisFreqValue")
+ self.freq_layout.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.analysisFreqValue)
+ self.centerFreqLabel = QtWidgets.QLabel(parent=self.freqGroup)
+ self.centerFreqLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.centerFreqLabel.setObjectName("centerFreqLabel")
+ self.freq_layout.setWidget(2, QtWidgets.QFormLayout.ItemRole.LabelRole, self.centerFreqLabel)
+ self.centerFreqValue = QtWidgets.QLabel(parent=self.freqGroup)
+ self.centerFreqValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.centerFreqValue.setObjectName("centerFreqValue")
+ self.freq_layout.setWidget(2, QtWidgets.QFormLayout.ItemRole.FieldRole, self.centerFreqValue)
+ self.samplingFreqLabel = QtWidgets.QLabel(parent=self.freqGroup)
+ self.samplingFreqLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.samplingFreqLabel.setObjectName("samplingFreqLabel")
+ self.freq_layout.setWidget(3, QtWidgets.QFormLayout.ItemRole.LabelRole, self.samplingFreqLabel)
+ self.samplingFreqValue = QtWidgets.QLabel(parent=self.freqGroup)
+ self.samplingFreqValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.samplingFreqValue.setObjectName("samplingFreqValue")
+ self.freq_layout.setWidget(3, QtWidgets.QFormLayout.ItemRole.FieldRole, self.samplingFreqValue)
+ self.config_layout.addWidget(self.freqGroup)
+ self.windowGroup = QtWidgets.QGroupBox(parent=self.configContainer)
+ self.windowGroup.setStyleSheet("QGroupBox {\n"
+" color: white;\n"
+" font-weight: bold;\n"
+" border: 2px solid rgb(99, 0, 174);\n"
+" border-radius: 5px;\n"
+" margin-top: 10px;\n"
+" padding-top: 10px;\n"
+"}\n"
+"\n"
+"QGroupBox::title {\n"
+" subcontrol-origin: margin;\n"
+" left: 10px;\n"
+" padding: 0 5px 0 5px;\n"
+"}")
+ self.windowGroup.setObjectName("windowGroup")
+ self.window_layout = QtWidgets.QFormLayout(self.windowGroup)
+ self.window_layout.setSpacing(10)
+ self.window_layout.setObjectName("window_layout")
+ self.axWinSizeLabel = QtWidgets.QLabel(parent=self.windowGroup)
+ self.axWinSizeLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.axWinSizeLabel.setObjectName("axWinSizeLabel")
+ self.window_layout.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.axWinSizeLabel)
+ self.axWinSizeValue = QtWidgets.QLabel(parent=self.windowGroup)
+ self.axWinSizeValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.axWinSizeValue.setObjectName("axWinSizeValue")
+ self.window_layout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.axWinSizeValue)
+ self.latWinSizeLabel = QtWidgets.QLabel(parent=self.windowGroup)
+ self.latWinSizeLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.latWinSizeLabel.setObjectName("latWinSizeLabel")
+ self.window_layout.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.latWinSizeLabel)
+ self.latWinSizeValue = QtWidgets.QLabel(parent=self.windowGroup)
+ self.latWinSizeValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.latWinSizeValue.setObjectName("latWinSizeValue")
+ self.window_layout.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.latWinSizeValue)
+ self.windowThreshLabel = QtWidgets.QLabel(parent=self.windowGroup)
+ self.windowThreshLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.windowThreshLabel.setObjectName("windowThreshLabel")
+ self.window_layout.setWidget(2, QtWidgets.QFormLayout.ItemRole.LabelRole, self.windowThreshLabel)
+ self.windowThreshValue = QtWidgets.QLabel(parent=self.windowGroup)
+ self.windowThreshValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.windowThreshValue.setObjectName("windowThreshValue")
+ self.window_layout.setWidget(2, QtWidgets.QFormLayout.ItemRole.FieldRole, self.windowThreshValue)
+ self.axialOverlapLabel = QtWidgets.QLabel(parent=self.windowGroup)
+ self.axialOverlapLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.axialOverlapLabel.setObjectName("axialOverlapLabel")
+ self.window_layout.setWidget(3, QtWidgets.QFormLayout.ItemRole.LabelRole, self.axialOverlapLabel)
+ self.axialOverlapValue = QtWidgets.QLabel(parent=self.windowGroup)
+ self.axialOverlapValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.axialOverlapValue.setObjectName("axialOverlapValue")
+ self.window_layout.setWidget(3, QtWidgets.QFormLayout.ItemRole.FieldRole, self.axialOverlapValue)
+ self.lateralOverlapLabel = QtWidgets.QLabel(parent=self.windowGroup)
+ self.lateralOverlapLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.lateralOverlapLabel.setObjectName("lateralOverlapLabel")
+ self.window_layout.setWidget(4, QtWidgets.QFormLayout.ItemRole.LabelRole, self.lateralOverlapLabel)
+ self.lateralOverlapValue = QtWidgets.QLabel(parent=self.windowGroup)
+ self.lateralOverlapValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.lateralOverlapValue.setObjectName("lateralOverlapValue")
+ self.window_layout.setWidget(4, QtWidgets.QFormLayout.ItemRole.FieldRole, self.lateralOverlapValue)
+ self.config_layout.addWidget(self.windowGroup)
+ self.group3d = QtWidgets.QGroupBox(parent=self.configContainer)
+ self.group3d.setStyleSheet("QGroupBox {\n"
+" color: white;\n"
+" font-weight: bold;\n"
+" border: 2px solid rgb(99, 0, 174);\n"
+" border-radius: 5px;\n"
+" margin-top: 10px;\n"
+" padding-top: 10px;\n"
+"}\n"
+"\n"
+"QGroupBox::title {\n"
+" subcontrol-origin: margin;\n"
+" left: 10px;\n"
+" padding: 0 5px 0 5px;\n"
+"}")
+ self.group3d.setObjectName("group3d")
+ self.layout3d = QtWidgets.QFormLayout(self.group3d)
+ self.layout3d.setSpacing(10)
+ self.layout3d.setObjectName("layout3d")
+ self.corWinSizeLabel = QtWidgets.QLabel(parent=self.group3d)
+ self.corWinSizeLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.corWinSizeLabel.setObjectName("corWinSizeLabel")
+ self.layout3d.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.corWinSizeLabel)
+ self.corWinSizeValue = QtWidgets.QLabel(parent=self.group3d)
+ self.corWinSizeValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.corWinSizeValue.setObjectName("corWinSizeValue")
+ self.layout3d.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.corWinSizeValue)
+ self.coronalOverlapLabel = QtWidgets.QLabel(parent=self.group3d)
+ self.coronalOverlapLabel.setStyleSheet("QLabel {\n"
+" color: white;\n"
+" font-size: 12px;\n"
+"}")
+ self.coronalOverlapLabel.setObjectName("coronalOverlapLabel")
+ self.layout3d.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.coronalOverlapLabel)
+ self.coronalOverlapValue = QtWidgets.QLabel(parent=self.group3d)
+ self.coronalOverlapValue.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 127);\n"
+" font-size: 12px;\n"
+" font-weight: bold;\n"
+"}")
+ self.coronalOverlapValue.setObjectName("coronalOverlapValue")
+ self.layout3d.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.coronalOverlapValue)
+ self.config_layout.addWidget(self.group3d)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.config_layout.addItem(spacerItem2)
+ self.configScrollArea.setWidget(self.configContainer)
+ self.config_confirm_layout.addWidget(self.configScrollArea)
+ self.save_option_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.save_option_button.setMinimumSize(QtCore.QSize(191, 41))
+ self.save_option_button.setMaximumSize(QtCore.QSize(191, 41))
+ self.save_option_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.save_option_button.setObjectName("save_option_button")
+ self.config_confirm_layout.addWidget(self.save_option_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.save_config_layout = QtWidgets.QGridLayout()
+ self.save_config_layout.setContentsMargins(-1, -1, -1, 10)
+ self.save_config_layout.setSpacing(10)
+ self.save_config_layout.setObjectName("save_config_layout")
+ self.save_folder_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.save_folder_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_folder_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_folder_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_folder_input.setObjectName("save_folder_input")
+ self.save_config_layout.addWidget(self.save_folder_input, 0, 1, 1, 1)
+ self.dest_folder_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.dest_folder_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.dest_folder_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.dest_folder_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.dest_folder_label.setObjectName("dest_folder_label")
+ self.save_config_layout.addWidget(self.dest_folder_label, 0, 0, 1, 1, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.config_name_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.config_name_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.config_name_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.config_name_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.config_name_label.setObjectName("config_name_label")
+ self.save_config_layout.addWidget(self.config_name_label, 2, 0, 1, 1, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.save_name_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.save_name_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_name_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_name_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_name_input.setObjectName("save_name_input")
+ self.save_config_layout.addWidget(self.save_name_input, 2, 1, 1, 1)
+ self.chooseImageButtonsLayout_2 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_2.setSpacing(10)
+ self.chooseImageButtonsLayout_2.setObjectName("chooseImageButtonsLayout_2")
+ self.choose_save_folder_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.choose_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_save_folder_button.setObjectName("choose_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.choose_save_folder_button)
+ self.clear_save_folder_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.clear_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_save_folder_button.setObjectName("clear_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.clear_save_folder_button)
+ self.save_config_layout.addLayout(self.chooseImageButtonsLayout_2, 0, 2, 1, 1)
+ self.chooseImageButtonsLayout_4 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_4.setObjectName("chooseImageButtonsLayout_4")
+ self.save_config_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.save_config_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.save_config_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.save_config_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.save_config_button.setObjectName("save_config_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.save_config_button)
+ self.back_from_save_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.back_from_save_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_from_save_button.setObjectName("back_from_save_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.back_from_save_button)
+ self.save_config_layout.addLayout(self.chooseImageButtonsLayout_4, 2, 2, 1, 1)
+ self.save_config_layout.setColumnStretch(0, 1)
+ self.save_config_layout.setColumnStretch(1, 10)
+ self.save_config_layout.setColumnStretch(2, 10)
+ self.save_config_layout.setRowStretch(0, 1)
+ self.save_config_layout.setRowStretch(1, 10)
+ self.save_config_layout.setRowStretch(2, 10)
+ self.config_confirm_layout.addLayout(self.save_config_layout)
+ self.confirm_config_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.confirm_config_button.setMinimumSize(QtCore.QSize(191, 41))
+ self.confirm_config_button.setMaximumSize(QtCore.QSize(191, 41))
+ self.confirm_config_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.confirm_config_button.setObjectName("confirm_config_button")
+ self.config_confirm_layout.addWidget(self.confirm_config_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.config_confirm_layout.addItem(spacerItem3)
+ self.config_confirm_layout.setStretch(0, 1)
+ self.config_confirm_layout.setStretch(5, 1)
+ self.config_confirm_layout.setStretch(6, 1)
+ self.full_screen_layout.addLayout(self.config_confirm_layout)
+
+ self.retranslateUi(configPreview)
+ QtCore.QMetaObject.connectSlotsByName(configPreview)
+
+ def retranslateUi(self, configPreview):
+ _translate = QtCore.QCoreApplication.translate
+ configPreview.setWindowTitle(_translate("configPreview", "Configuration Preview"))
+ self.sidebar.setToolTip(_translate("configPreview", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("configPreview", "Image Selection:"))
+ self.imageLabel.setText(_translate("configPreview", "Image:"))
+ self.phantomLabel.setText(_translate("configPreview", "Phantom:"))
+ self.image_path_input.setText(_translate("configPreview", "Sample filename "))
+ self.phantom_path_input.setText(_translate("configPreview", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("configPreview", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("configPreview", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("configPreview", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("configPreview", "Visualization / Export"))
+ self.back_button.setText(_translate("configPreview", "Back"))
+ self.config_preview_label.setText(_translate("configPreview", "Configuration Preview"))
+ self.config_desc_label.setText(_translate("configPreview", "Review the analysis configuration parameters below. These settings will be used for the quantitative ultrasound analysis."))
+ self.freqGroup.setTitle(_translate("configPreview", "Frequency Parameters"))
+ self.transducerFreqLabel.setText(_translate("configPreview", "Transducer Frequency Band:"))
+ self.transducerFreqValue.setText(_translate("configPreview", "Not set"))
+ self.analysisFreqLabel.setText(_translate("configPreview", "Analysis Frequency Band:"))
+ self.analysisFreqValue.setText(_translate("configPreview", "Not set"))
+ self.centerFreqLabel.setText(_translate("configPreview", "Center Frequency:"))
+ self.centerFreqValue.setText(_translate("configPreview", "Not set"))
+ self.samplingFreqLabel.setText(_translate("configPreview", "Sampling Frequency:"))
+ self.samplingFreqValue.setText(_translate("configPreview", "Not set"))
+ self.windowGroup.setTitle(_translate("configPreview", "Windowing Parameters"))
+ self.axWinSizeLabel.setText(_translate("configPreview", "Axial Window Size:"))
+ self.axWinSizeValue.setText(_translate("configPreview", "Not set"))
+ self.latWinSizeLabel.setText(_translate("configPreview", "Lateral Window Size:"))
+ self.latWinSizeValue.setText(_translate("configPreview", "Not set"))
+ self.windowThreshLabel.setText(_translate("configPreview", "Window Threshold:"))
+ self.windowThreshValue.setText(_translate("configPreview", "Not set"))
+ self.axialOverlapLabel.setText(_translate("configPreview", "Axial Overlap:"))
+ self.axialOverlapValue.setText(_translate("configPreview", "Not set"))
+ self.lateralOverlapLabel.setText(_translate("configPreview", "Lateral Overlap:"))
+ self.lateralOverlapValue.setText(_translate("configPreview", "Not set"))
+ self.group3d.setTitle(_translate("configPreview", "3D Parameters"))
+ self.corWinSizeLabel.setText(_translate("configPreview", "Coronal Window Size:"))
+ self.corWinSizeValue.setText(_translate("configPreview", "Not used"))
+ self.coronalOverlapLabel.setText(_translate("configPreview", "Coronal Overlap:"))
+ self.coronalOverlapValue.setText(_translate("configPreview", "Not used"))
+ self.save_option_button.setText(_translate("configPreview", "Save Configuration"))
+ self.dest_folder_label.setText(_translate("configPreview", "Dest Folder"))
+ self.config_name_label.setText(_translate("configPreview", "Config Name"))
+ self.choose_save_folder_button.setText(_translate("configPreview", "Choose Folder"))
+ self.clear_save_folder_button.setText(_translate("configPreview", "Clear Path"))
+ self.save_config_button.setText(_translate("configPreview", "Save"))
+ self.back_from_save_button.setText(_translate("configPreview", "Back"))
+ self.confirm_config_button.setText(_translate("configPreview", "Confirm Configuration"))
diff --git a/src/qus/config_loading/ui/config_type_selection_ui.py b/src/qus/config_loading/ui/config_type_selection_ui.py
new file mode 100644
index 0000000..094d469
--- /dev/null
+++ b/src/qus/config_loading/ui/config_type_selection_ui.py
@@ -0,0 +1,279 @@
+# Form implementation generated from reading ui file 'src\qus\config_loading\ui\config_type_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_configTypeSelection(object):
+ def setupUi(self, configTypeSelection):
+ configTypeSelection.setObjectName("configTypeSelection")
+ configTypeSelection.resize(1284, 803)
+ configTypeSelection.setMinimumSize(QtCore.QSize(0, 0))
+ configTypeSelection.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=configTypeSelection)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(60, 20, 951, 731))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.config_type_layout = QtWidgets.QVBoxLayout()
+ self.config_type_layout.setContentsMargins(30, -1, 30, -1)
+ self.config_type_layout.setSpacing(50)
+ self.config_type_layout.setObjectName("config_type_layout")
+ self.config_type_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.config_type_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.config_type_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.config_type_label.setScaledContents(False)
+ self.config_type_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.config_type_label.setWordWrap(True)
+ self.config_type_label.setObjectName("config_type_label")
+ self.config_type_layout.addWidget(self.config_type_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.config_type_dropdown = QtWidgets.QComboBox(parent=self.horizontalLayoutWidget_4)
+ self.config_type_dropdown.setMinimumSize(QtCore.QSize(180, 41))
+ self.config_type_dropdown.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ font = QtGui.QFont()
+ font.setPointSize(16)
+ self.config_type_dropdown.setFont(font)
+ self.config_type_dropdown.setStyleSheet("QComboBox {\n"
+" color: white;\n"
+"}")
+ self.config_type_dropdown.setObjectName("config_type_dropdown")
+ self.config_type_layout.addWidget(self.config_type_dropdown)
+ self.accept_config_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.accept_config_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.accept_config_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.accept_config_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_config_button.setObjectName("accept_config_button")
+ self.config_type_layout.addWidget(self.accept_config_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.config_type_layout.addItem(spacerItem2)
+ self.config_type_layout.setStretch(0, 2)
+ self.config_type_layout.setStretch(1, 2)
+ self.config_type_layout.setStretch(2, 2)
+ self.config_type_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.config_type_layout)
+
+ self.retranslateUi(configTypeSelection)
+ QtCore.QMetaObject.connectSlotsByName(configTypeSelection)
+
+ def retranslateUi(self, configTypeSelection):
+ _translate = QtCore.QCoreApplication.translate
+ configTypeSelection.setWindowTitle(_translate("configTypeSelection", "Analysis Configuration Loading"))
+ self.sidebar.setToolTip(_translate("configTypeSelection", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("configTypeSelection", "Image Selection:"))
+ self.imageLabel.setText(_translate("configTypeSelection", "Image:"))
+ self.phantomLabel.setText(_translate("configTypeSelection", "Phantom:"))
+ self.image_path_input.setText(_translate("configTypeSelection", "Sample filename "))
+ self.phantom_path_input.setText(_translate("configTypeSelection", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("configTypeSelection", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("configTypeSelection", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("configTypeSelection", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("configTypeSelection", "Visualization / Export"))
+ self.back_button.setText(_translate("configTypeSelection", "Back"))
+ self.config_type_label.setText(_translate("configTypeSelection", "Select Configuration Type:"))
+ self.accept_config_button.setText(_translate("configTypeSelection", "Accept"))
diff --git a/src/qus/config_loading/ui/custom_params_ui.py b/src/qus/config_loading/ui/custom_params_ui.py
new file mode 100644
index 0000000..234c9bf
--- /dev/null
+++ b/src/qus/config_loading/ui/custom_params_ui.py
@@ -0,0 +1,352 @@
+# Form implementation generated from reading ui file 'src\qus\config_loading\ui\custom_params.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_customParams(object):
+ def setupUi(self, customParams):
+ customParams.setObjectName("customParams")
+ customParams.resize(1284, 803)
+ customParams.setMinimumSize(QtCore.QSize(0, 0))
+ customParams.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=customParams)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(60, 20, 951, 731))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.custom_params_layout = QtWidgets.QVBoxLayout()
+ self.custom_params_layout.setContentsMargins(10, 30, 10, 30)
+ self.custom_params_layout.setSpacing(30)
+ self.custom_params_layout.setObjectName("custom_params_layout")
+ self.custom_params_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.custom_params_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.custom_params_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.custom_params_label.setScaledContents(False)
+ self.custom_params_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.custom_params_label.setWordWrap(True)
+ self.custom_params_label.setObjectName("custom_params_label")
+ self.custom_params_layout.addWidget(self.custom_params_label)
+ self.scrollArea = QtWidgets.QScrollArea(parent=self.horizontalLayoutWidget_4)
+ self.scrollArea.setWidgetResizable(True)
+ self.scrollArea.setObjectName("scrollArea")
+ self.scrollAreaWidgetContents = QtWidgets.QWidget()
+ self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 449, 443))
+ self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
+ self.scrollAreaLayout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
+ self.scrollAreaLayout.setObjectName("scrollAreaLayout")
+ self.frequencyGroup = QtWidgets.QGroupBox(parent=self.scrollAreaWidgetContents)
+ self.frequencyGroup.setObjectName("frequencyGroup")
+ self.frequencyLayout = QtWidgets.QGridLayout(self.frequencyGroup)
+ self.frequencyLayout.setObjectName("frequencyLayout")
+ self.freq1Label = QtWidgets.QLabel(parent=self.frequencyGroup)
+ self.freq1Label.setObjectName("freq1Label")
+ self.frequencyLayout.addWidget(self.freq1Label, 0, 0, 1, 1)
+ self.freq1Start = QtWidgets.QLineEdit(parent=self.frequencyGroup)
+ self.freq1Start.setObjectName("freq1Start")
+ self.frequencyLayout.addWidget(self.freq1Start, 0, 1, 1, 1)
+ self.freq1End = QtWidgets.QLineEdit(parent=self.frequencyGroup)
+ self.freq1End.setObjectName("freq1End")
+ self.frequencyLayout.addWidget(self.freq1End, 0, 2, 1, 1)
+ self.freq2Label = QtWidgets.QLabel(parent=self.frequencyGroup)
+ self.freq2Label.setObjectName("freq2Label")
+ self.frequencyLayout.addWidget(self.freq2Label, 1, 0, 1, 1)
+ self.freq2Start = QtWidgets.QLineEdit(parent=self.frequencyGroup)
+ self.freq2Start.setObjectName("freq2Start")
+ self.frequencyLayout.addWidget(self.freq2Start, 1, 1, 1, 1)
+ self.freq2End = QtWidgets.QLineEdit(parent=self.frequencyGroup)
+ self.freq2End.setObjectName("freq2End")
+ self.frequencyLayout.addWidget(self.freq2End, 1, 2, 1, 1)
+ self.scrollAreaLayout.addWidget(self.frequencyGroup)
+ self.windowGroup = QtWidgets.QGroupBox(parent=self.scrollAreaWidgetContents)
+ self.windowGroup.setObjectName("windowGroup")
+ self.windowLayout = QtWidgets.QGridLayout(self.windowGroup)
+ self.windowLayout.setObjectName("windowLayout")
+ self.windowSizeLabel = QtWidgets.QLabel(parent=self.windowGroup)
+ self.windowSizeLabel.setObjectName("windowSizeLabel")
+ self.windowLayout.addWidget(self.windowSizeLabel, 0, 0, 1, 1)
+ self.windowSize = QtWidgets.QLineEdit(parent=self.windowGroup)
+ self.windowSize.setObjectName("windowSize")
+ self.windowLayout.addWidget(self.windowSize, 0, 1, 1, 1)
+ self.overlapLabel = QtWidgets.QLabel(parent=self.windowGroup)
+ self.overlapLabel.setObjectName("overlapLabel")
+ self.windowLayout.addWidget(self.overlapLabel, 1, 0, 1, 1)
+ self.overlap = QtWidgets.QLineEdit(parent=self.windowGroup)
+ self.overlap.setObjectName("overlap")
+ self.windowLayout.addWidget(self.overlap, 1, 1, 1, 1)
+ self.scrollAreaLayout.addWidget(self.windowGroup)
+ self.analysisGroup = QtWidgets.QGroupBox(parent=self.scrollAreaWidgetContents)
+ self.analysisGroup.setObjectName("analysisGroup")
+ self.analysisLayout = QtWidgets.QGridLayout(self.analysisGroup)
+ self.analysisLayout.setObjectName("analysisLayout")
+ self.samplingLabel = QtWidgets.QLabel(parent=self.analysisGroup)
+ self.samplingLabel.setObjectName("samplingLabel")
+ self.analysisLayout.addWidget(self.samplingLabel, 0, 0, 1, 1)
+ self.samplingRate = QtWidgets.QLineEdit(parent=self.analysisGroup)
+ self.samplingRate.setObjectName("samplingRate")
+ self.analysisLayout.addWidget(self.samplingRate, 0, 1, 1, 1)
+ self.depthLabel = QtWidgets.QLabel(parent=self.analysisGroup)
+ self.depthLabel.setObjectName("depthLabel")
+ self.analysisLayout.addWidget(self.depthLabel, 1, 0, 1, 1)
+ self.depth = QtWidgets.QLineEdit(parent=self.analysisGroup)
+ self.depth.setObjectName("depth")
+ self.analysisLayout.addWidget(self.depth, 1, 1, 1, 1)
+ self.scrollAreaLayout.addWidget(self.analysisGroup)
+ self.scrollArea.setWidget(self.scrollAreaWidgetContents)
+ self.custom_params_layout.addWidget(self.scrollArea)
+ self.accept_params_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.accept_params_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.accept_params_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.accept_params_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_params_button.setObjectName("accept_params_button")
+ self.custom_params_layout.addWidget(self.accept_params_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.custom_params_layout.addItem(spacerItem2)
+ self.custom_params_layout.setStretch(0, 1)
+ self.custom_params_layout.setStretch(1, 10)
+ self.custom_params_layout.setStretch(2, 1)
+ self.custom_params_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.custom_params_layout)
+
+ self.retranslateUi(customParams)
+ QtCore.QMetaObject.connectSlotsByName(customParams)
+
+ def retranslateUi(self, customParams):
+ _translate = QtCore.QCoreApplication.translate
+ customParams.setWindowTitle(_translate("customParams", "Custom Parameters Configuration"))
+ self.sidebar.setToolTip(_translate("customParams", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("customParams", "Image Selection:"))
+ self.imageLabel.setText(_translate("customParams", "Image:"))
+ self.phantomLabel.setText(_translate("customParams", "Phantom:"))
+ self.image_path_input.setText(_translate("customParams", "Sample filename "))
+ self.phantom_path_input.setText(_translate("customParams", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("customParams", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("customParams", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("customParams", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("customParams", "Visualization / Export"))
+ self.back_button.setText(_translate("customParams", "Back"))
+ self.custom_params_label.setText(_translate("customParams", "Custom Parameters Configuration"))
+ self.frequencyGroup.setTitle(_translate("customParams", "Frequency Bands"))
+ self.freq1Label.setText(_translate("customParams", "Band 1 (MHz):"))
+ self.freq1Start.setPlaceholderText(_translate("customParams", "Start"))
+ self.freq1End.setPlaceholderText(_translate("customParams", "End"))
+ self.freq2Label.setText(_translate("customParams", "Band 2 (MHz):"))
+ self.freq2Start.setPlaceholderText(_translate("customParams", "Start"))
+ self.freq2End.setPlaceholderText(_translate("customParams", "End"))
+ self.windowGroup.setTitle(_translate("customParams", "Window Parameters"))
+ self.windowSizeLabel.setText(_translate("customParams", "Window Size (pixels):"))
+ self.windowSize.setPlaceholderText(_translate("customParams", "e.g., 64"))
+ self.overlapLabel.setText(_translate("customParams", "Overlap (%):"))
+ self.overlap.setPlaceholderText(_translate("customParams", "e.g., 50"))
+ self.analysisGroup.setTitle(_translate("customParams", "Analysis Parameters"))
+ self.samplingLabel.setText(_translate("customParams", "Sampling Rate (MHz):"))
+ self.samplingRate.setPlaceholderText(_translate("customParams", "e.g., 40"))
+ self.depthLabel.setText(_translate("customParams", "Depth (mm):"))
+ self.depth.setPlaceholderText(_translate("customParams", "e.g., 30"))
+ self.accept_params_button.setText(_translate("customParams", "Accept"))
diff --git a/src/qus/export_loading/ui/export_loading_ui.py b/src/qus/export_loading/ui/export_loading_ui.py
new file mode 100644
index 0000000..34e66b2
--- /dev/null
+++ b/src/qus/export_loading/ui/export_loading_ui.py
@@ -0,0 +1,273 @@
+# Form implementation generated from reading ui file 'src\qus\export_loading\ui\export_loading.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_exportLoading(object):
+ def setupUi(self, exportLoading):
+ exportLoading.setObjectName("exportLoading")
+ exportLoading.setMinimumSize(QtCore.QSize(1400, 662))
+ exportLoading.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.main_layout = QtWidgets.QVBoxLayout(exportLoading)
+ self.main_layout.setContentsMargins(0, 0, 0, 0)
+ self.main_layout.setObjectName("main_layout")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=exportLoading)
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(200, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(200, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.export_loading_layout = QtWidgets.QVBoxLayout()
+ self.export_loading_layout.setContentsMargins(20, 20, 20, 20)
+ self.export_loading_layout.setSpacing(10)
+ self.export_loading_layout.setObjectName("export_loading_layout")
+ self.title_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.title_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.title_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.title_label.setScaledContents(False)
+ self.title_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.title_label.setWordWrap(False)
+ self.title_label.setObjectName("title_label")
+ self.export_loading_layout.addWidget(self.title_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.export_stack = QtWidgets.QStackedWidget(parent=self.horizontalLayoutWidget_4)
+ self.export_stack.setStyleSheet("QStackedWidget {\n"
+" background-color: transparent;\n"
+"}")
+ self.export_stack.setObjectName("export_stack")
+ self.export_loading_layout.addWidget(self.export_stack)
+ self.execute_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.execute_button.setMinimumSize(QtCore.QSize(250, 41))
+ self.execute_button.setMaximumSize(QtCore.QSize(250, 41))
+ self.execute_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(0, 150, 0);\n"
+" border-radius: 15px;\n"
+"}")
+ self.execute_button.setObjectName("execute_button")
+ self.export_loading_layout.addWidget(self.execute_button)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.export_loading_layout.addItem(spacerItem2)
+ self.export_loading_layout.setStretch(0, 1)
+ self.export_loading_layout.setStretch(1, 10)
+ self.export_loading_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.export_loading_layout)
+ self.main_layout.addWidget(self.horizontalLayoutWidget_4)
+
+ self.retranslateUi(exportLoading)
+ QtCore.QMetaObject.connectSlotsByName(exportLoading)
+
+ def retranslateUi(self, exportLoading):
+ _translate = QtCore.QCoreApplication.translate
+ exportLoading.setWindowTitle(_translate("exportLoading", "Data Export"))
+ self.sidebar.setToolTip(_translate("exportLoading", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("exportLoading", "Image Selection:"))
+ self.imageLabel.setText(_translate("exportLoading", "Image:"))
+ self.phantomLabel.setText(_translate("exportLoading", "Phantom:"))
+ self.image_path_input.setText(_translate("exportLoading", "Sample filename "))
+ self.phantom_path_input.setText(_translate("exportLoading", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("exportLoading", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("exportLoading", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("exportLoading", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("exportLoading", "Visualization / Export"))
+ self.back_button.setText(_translate("exportLoading", "Back"))
+ self.title_label.setText(_translate("exportLoading", "Data Export Configuration"))
+ self.execute_button.setText(_translate("exportLoading", "Execute Export"))
diff --git a/src/qus/image_loading/ui/file_selection_ui.py b/src/qus/image_loading/ui/file_selection_ui.py
new file mode 100644
index 0000000..2d4a308
--- /dev/null
+++ b/src/qus/image_loading/ui/file_selection_ui.py
@@ -0,0 +1,411 @@
+# Form implementation generated from reading ui file 'src\qus\image_loading\ui\file_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_selectImage(object):
+ def setupUi(self, selectImage):
+ selectImage.setObjectName("selectImage")
+ selectImage.resize(1418, 832)
+ selectImage.setMinimumSize(QtCore.QSize(201, 31))
+ selectImage.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ selectImage.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget = QtWidgets.QWidget(parent=selectImage)
+ self.horizontalLayoutWidget.setGeometry(QtCore.QRect(70, 10, 1545, 844))
+ self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget)
+ self.gridFrame.setMinimumSize(QtCore.QSize(341, 0))
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.img_selection_layout = QtWidgets.QVBoxLayout()
+ self.img_selection_layout.setContentsMargins(30, 30, 30, 30)
+ self.img_selection_layout.setSpacing(20)
+ self.img_selection_layout.setObjectName("img_selection_layout")
+ self.select_data_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.select_data_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_data_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_data_label.setScaledContents(False)
+ self.select_data_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_data_label.setWordWrap(True)
+ self.select_data_label.setObjectName("select_data_label")
+ self.img_selection_layout.addWidget(self.select_data_label)
+ self.chooseImgPhantLayout = QtWidgets.QHBoxLayout()
+ self.chooseImgPhantLayout.setObjectName("chooseImgPhantLayout")
+ self.chooseImgLayout = QtWidgets.QVBoxLayout()
+ self.chooseImgLayout.setContentsMargins(20, -1, 20, -1)
+ self.chooseImgLayout.setObjectName("chooseImgLayout")
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem2)
+ self.image_path_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.image_path_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.image_path_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.image_path_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.image_path_label.setObjectName("image_path_label")
+ self.chooseImgLayout.addWidget(self.image_path_label)
+ self.image_path_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget)
+ self.image_path_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.image_path_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.image_path_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.image_path_input.setObjectName("image_path_input")
+ self.chooseImgLayout.addWidget(self.image_path_input, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.chooseImageButtonsLayout = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout.setObjectName("chooseImageButtonsLayout")
+ self.choose_image_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.choose_image_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_image_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_image_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_image_path_button.setObjectName("choose_image_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.choose_image_path_button)
+ self.clear_image_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.clear_image_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_image_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_image_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_image_path_button.setObjectName("clear_image_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.clear_image_path_button)
+ self.chooseImgLayout.addLayout(self.chooseImageButtonsLayout)
+ spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem3)
+ self.chooseImgPhantLayout.addLayout(self.chooseImgLayout)
+ self.choosePhantomLayout = QtWidgets.QVBoxLayout()
+ self.choosePhantomLayout.setContentsMargins(20, -1, 20, -1)
+ self.choosePhantomLayout.setObjectName("choosePhantomLayout")
+ spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.choosePhantomLayout.addItem(spacerItem4)
+ self.phantom_path_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.phantom_path_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.phantom_path_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantom_path_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.phantom_path_label.setObjectName("phantom_path_label")
+ self.choosePhantomLayout.addWidget(self.phantom_path_label)
+ self.phantom_path_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget)
+ self.phantom_path_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.phantom_path_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.phantom_path_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.choosePhantomLayout.addWidget(self.phantom_path_input, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.choosePhantomButtonsLayout = QtWidgets.QHBoxLayout()
+ self.choosePhantomButtonsLayout.setObjectName("choosePhantomButtonsLayout")
+ self.choose_phantom_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.choose_phantom_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_phantom_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_phantom_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_phantom_path_button.setObjectName("choose_phantom_path_button")
+ self.choosePhantomButtonsLayout.addWidget(self.choose_phantom_path_button)
+ self.clear_phantom_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.clear_phantom_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_phantom_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_phantom_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_phantom_path_button.setObjectName("clear_phantom_path_button")
+ self.choosePhantomButtonsLayout.addWidget(self.clear_phantom_path_button)
+ self.choosePhantomLayout.addLayout(self.choosePhantomButtonsLayout)
+ spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.choosePhantomLayout.addItem(spacerItem5)
+ self.chooseImgPhantLayout.addLayout(self.choosePhantomLayout)
+ self.img_selection_layout.addLayout(self.chooseImgPhantLayout)
+ self.loading_options_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.loading_options_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_options_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.loading_options_label.setScaledContents(False)
+ self.loading_options_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_options_label.setWordWrap(True)
+ self.loading_options_label.setObjectName("loading_options_label")
+ self.img_selection_layout.addWidget(self.loading_options_label)
+ self.loading_options_table = QtWidgets.QTableWidget(parent=self.horizontalLayoutWidget)
+ self.loading_options_table.setStyleSheet("QTableWidget {\n"
+" background: rgb(108, 108, 108);\n"
+" color: white;\n"
+"}")
+ self.loading_options_table.setDragEnabled(False)
+ self.loading_options_table.setRowCount(0)
+ self.loading_options_table.setColumnCount(0)
+ self.loading_options_table.setObjectName("loading_options_table")
+ self.loading_options_table.horizontalHeader().setCascadingSectionResizes(False)
+ self.img_selection_layout.addWidget(self.loading_options_table)
+ self.generate_image_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.generate_image_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.generate_image_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.generate_image_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.generate_image_button.setObjectName("generate_image_button")
+ self.img_selection_layout.addWidget(self.generate_image_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.loading_screen_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.loading_screen_label.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 0);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_screen_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_screen_label.setObjectName("loading_screen_label")
+ self.img_selection_layout.addWidget(self.loading_screen_label)
+ self.select_image_error_msg = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.select_image_error_msg.setStyleSheet("QLabel {\n"
+" color: rgb(255, 0, 23);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_image_error_msg.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_image_error_msg.setObjectName("select_image_error_msg")
+ self.img_selection_layout.addWidget(self.select_image_error_msg)
+ self.img_selection_layout.setStretch(0, 2)
+ self.img_selection_layout.setStretch(1, 2)
+ self.img_selection_layout.setStretch(4, 3)
+ self.img_selection_layout.setStretch(6, 2)
+ self.full_screen_layout.addLayout(self.img_selection_layout)
+ self.full_screen_layout.setStretch(0, 1)
+ self.full_screen_layout.setStretch(1, 5)
+
+ self.retranslateUi(selectImage)
+ QtCore.QMetaObject.connectSlotsByName(selectImage)
+
+ def retranslateUi(self, selectImage):
+ _translate = QtCore.QCoreApplication.translate
+ selectImage.setWindowTitle(_translate("selectImage", "Select Ultrasound Image"))
+ self.sidebar.setToolTip(_translate("selectImage", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("selectImage", "Image Selection:"))
+ self.imageLabel.setText(_translate("selectImage", "Image:"))
+ self.phantomLabel.setText(_translate("selectImage", "Phantom:"))
+ self.roiSidebarLabel.setText(_translate("selectImage", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("selectImage", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("selectImage", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("selectImage", "Analysis Parameter Selection"))
+ self.back_button.setText(_translate("selectImage", "Back"))
+ self.select_data_label.setText(_translate("selectImage", "Select Data and Phantom Files to Generate Ultrasound Image:"))
+ self.image_path_label.setText(_translate("selectImage", "Input Path to Image file\n"
+" (.rf, .rfd, .mat, .bin)"))
+ self.choose_image_path_button.setText(_translate("selectImage", "Choose File"))
+ self.clear_image_path_button.setText(_translate("selectImage", "Clear Path"))
+ self.phantom_path_label.setText(_translate("selectImage", "Input Path to Phantom file\n"
+" (.rf, .rfd, .mat, .bin)"))
+ self.choose_phantom_path_button.setText(_translate("selectImage", "Choose File"))
+ self.clear_phantom_path_button.setText(_translate("selectImage", "Clear Path"))
+ self.loading_options_label.setText(_translate("selectImage", "\n"
+"Image Loading Options:"))
+ self.loading_options_table.setSortingEnabled(False)
+ self.generate_image_button.setText(_translate("selectImage", "Generate Image"))
+ self.loading_screen_label.setText(_translate("selectImage", "LOADING...."))
+ self.select_image_error_msg.setText(_translate("selectImage", "ERROR: At least one dimension of phantom data\n"
+"smaller than corresponding dimension\n"
+"of image data"))
diff --git a/src/qus/image_loading/ui/scan_type_ui.py b/src/qus/image_loading/ui/scan_type_ui.py
new file mode 100644
index 0000000..a67c1c1
--- /dev/null
+++ b/src/qus/image_loading/ui/scan_type_ui.py
@@ -0,0 +1,247 @@
+# Form implementation generated from reading ui file 'src\qus\image_loading\ui\scan_type.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_selectImage(object):
+ def setupUi(self, selectImage):
+ selectImage.setObjectName("selectImage")
+ selectImage.resize(1512, 832)
+ selectImage.setMinimumSize(QtCore.QSize(201, 31))
+ selectImage.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ selectImage.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget = QtWidgets.QWidget(parent=selectImage)
+ self.horizontalLayoutWidget.setGeometry(QtCore.QRect(70, 10, 1545, 844))
+ self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget)
+ self.gridFrame.setMinimumSize(QtCore.QSize(341, 0))
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.select_type_layout = QtWidgets.QVBoxLayout()
+ self.select_type_layout.setContentsMargins(30, -1, 30, -1)
+ self.select_type_layout.setSpacing(50)
+ self.select_type_layout.setObjectName("select_type_layout")
+ self.select_type_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget)
+ self.select_type_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_type_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_type_label.setScaledContents(False)
+ self.select_type_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_type_label.setWordWrap(True)
+ self.select_type_label.setObjectName("select_type_label")
+ self.select_type_layout.addWidget(self.select_type_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.scan_type_dropdown = QtWidgets.QComboBox(parent=self.horizontalLayoutWidget)
+ self.scan_type_dropdown.setMinimumSize(QtCore.QSize(180, 41))
+ self.scan_type_dropdown.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ font = QtGui.QFont()
+ font.setPointSize(16)
+ self.scan_type_dropdown.setFont(font)
+ self.scan_type_dropdown.setStyleSheet("QComboBox {\n"
+" color: white;\n"
+"}")
+ self.scan_type_dropdown.setObjectName("scan_type_dropdown")
+ self.select_type_layout.addWidget(self.scan_type_dropdown)
+ self.accept_type_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget)
+ self.accept_type_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.accept_type_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.accept_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_type_button.setObjectName("accept_type_button")
+ self.select_type_layout.addWidget(self.accept_type_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.select_type_layout.addItem(spacerItem1)
+ self.select_type_layout.setStretch(0, 2)
+ self.select_type_layout.setStretch(1, 2)
+ self.select_type_layout.setStretch(2, 2)
+ self.select_type_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.select_type_layout)
+ self.full_screen_layout.setStretch(0, 1)
+ self.full_screen_layout.setStretch(1, 5)
+
+ self.retranslateUi(selectImage)
+ QtCore.QMetaObject.connectSlotsByName(selectImage)
+
+ def retranslateUi(self, selectImage):
+ _translate = QtCore.QCoreApplication.translate
+ selectImage.setWindowTitle(_translate("selectImage", "Select Ultrasound Image"))
+ self.sidebar.setToolTip(_translate("selectImage", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("selectImage", "Image Selection:"))
+ self.imageLabel.setText(_translate("selectImage", "Image:"))
+ self.phantomLabel.setText(_translate("selectImage", "Phantom:"))
+ self.roiSidebarLabel.setText(_translate("selectImage", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("selectImage", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("selectImage", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("selectImage", "Analysis Parameter Selection"))
+ self.select_type_label.setText(_translate("selectImage", "Select Data Type:"))
+ self.accept_type_button.setText(_translate("selectImage", "Accept"))
diff --git a/src/qus/seg_loading/ui/frame_selection_ui.py b/src/qus/seg_loading/ui/frame_selection_ui.py
new file mode 100644
index 0000000..9c9a1cc
--- /dev/null
+++ b/src/qus/seg_loading/ui/frame_selection_ui.py
@@ -0,0 +1,326 @@
+# Form implementation generated from reading ui file 'src\qus\seg_loading\ui\frame_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_constructRoi(object):
+ def setupUi(self, constructRoi):
+ constructRoi.setObjectName("constructRoi")
+ constructRoi.setMinimumSize(QtCore.QSize(1400, 662))
+ constructRoi.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.main_layout = QtWidgets.QVBoxLayout(constructRoi)
+ self.main_layout.setContentsMargins(0, 0, 0, 0)
+ self.main_layout.setObjectName("main_layout")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=constructRoi)
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.frame_preview_layout = QtWidgets.QVBoxLayout()
+ self.frame_preview_layout.setContentsMargins(30, 30, 30, 30)
+ self.frame_preview_layout.setSpacing(10)
+ self.frame_preview_layout.setObjectName("frame_preview_layout")
+ self.select_frame_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.select_frame_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_frame_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_frame_label.setScaledContents(False)
+ self.select_frame_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_frame_label.setWordWrap(True)
+ self.select_frame_label.setObjectName("select_frame_label")
+ self.frame_preview_layout.addWidget(self.select_frame_label)
+ self.im_display_frame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+ sizePolicy.setHorizontalStretch(10)
+ sizePolicy.setVerticalStretch(10)
+ sizePolicy.setHeightForWidth(self.im_display_frame.sizePolicy().hasHeightForWidth())
+ self.im_display_frame.setSizePolicy(sizePolicy)
+ self.im_display_frame.setMinimumSize(QtCore.QSize(501, 321))
+ self.im_display_frame.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.im_display_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.im_display_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.im_display_frame.setObjectName("im_display_frame")
+ self.frame_preview_layout.addWidget(self.im_display_frame)
+ self.frameControlsLayout = QtWidgets.QHBoxLayout()
+ self.frameControlsLayout.setSpacing(10)
+ self.frameControlsLayout.setObjectName("frameControlsLayout")
+ self.frame_slider = QtWidgets.QSlider(parent=self.horizontalLayoutWidget_4)
+ self.frame_slider.setMinimumSize(QtCore.QSize(251, 41))
+ self.frame_slider.setMaximumSize(QtCore.QSize(251, 41))
+ self.frame_slider.setOrientation(QtCore.Qt.Orientation.Horizontal)
+ self.frame_slider.setObjectName("frame_slider")
+ self.frameControlsLayout.addWidget(self.frame_slider)
+ self.cur_frame_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_frame_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_frame_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.cur_frame_label.setScaledContents(False)
+ self.cur_frame_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_frame_label.setWordWrap(True)
+ self.cur_frame_label.setObjectName("cur_frame_label")
+ self.frameControlsLayout.addWidget(self.cur_frame_label)
+ self.of_frames_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.of_frames_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.of_frames_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.of_frames_label.setScaledContents(False)
+ self.of_frames_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.of_frames_label.setWordWrap(True)
+ self.of_frames_label.setObjectName("of_frames_label")
+ self.frameControlsLayout.addWidget(self.of_frames_label)
+ self.total_frames_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.total_frames_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.total_frames_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.total_frames_label.setScaledContents(False)
+ self.total_frames_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.total_frames_label.setWordWrap(True)
+ self.total_frames_label.setObjectName("total_frames_label")
+ self.frameControlsLayout.addWidget(self.total_frames_label)
+ self.accept_frame_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.accept_frame_button.setMinimumSize(QtCore.QSize(201, 41))
+ self.accept_frame_button.setMaximumSize(QtCore.QSize(201, 41))
+ self.accept_frame_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_frame_button.setObjectName("accept_frame_button")
+ self.frameControlsLayout.addWidget(self.accept_frame_button)
+ self.frame_preview_layout.addLayout(self.frameControlsLayout)
+ self.frame_preview_layout.setStretch(0, 1)
+ self.frame_preview_layout.setStretch(2, 1)
+ self.full_screen_layout.addLayout(self.frame_preview_layout)
+ self.main_layout.addWidget(self.horizontalLayoutWidget_4)
+
+ self.retranslateUi(constructRoi)
+ QtCore.QMetaObject.connectSlotsByName(constructRoi)
+
+ def retranslateUi(self, constructRoi):
+ _translate = QtCore.QCoreApplication.translate
+ constructRoi.setWindowTitle(_translate("constructRoi", "Select Region of Interest"))
+ self.sidebar.setToolTip(_translate("constructRoi", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("constructRoi", "Image Selection:"))
+ self.imageLabel.setText(_translate("constructRoi", "Image:"))
+ self.phantomLabel.setText(_translate("constructRoi", "Phantom:"))
+ self.image_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.phantom_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.roiSidebarLabel.setText(_translate("constructRoi", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("constructRoi", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("constructRoi", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("constructRoi", "Analysis Parameter Selection"))
+ self.back_button.setText(_translate("constructRoi", "Back"))
+ self.select_frame_label.setText(_translate("constructRoi", "Select Frame to Segment:"))
+ self.cur_frame_label.setText(_translate("constructRoi", "0"))
+ self.of_frames_label.setText(_translate("constructRoi", "of"))
+ self.total_frames_label.setText(_translate("constructRoi", "0"))
+ self.accept_frame_button.setText(_translate("constructRoi", "Accept Frame"))
diff --git a/src/qus/seg_loading/ui/roi_drawing_ui.py b/src/qus/seg_loading/ui/roi_drawing_ui.py
new file mode 100644
index 0000000..fe15aa0
--- /dev/null
+++ b/src/qus/seg_loading/ui/roi_drawing_ui.py
@@ -0,0 +1,916 @@
+# Form implementation generated from reading ui file 'src\qus\seg_loading\ui\roi_drawing.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_constructRoi(object):
+ def setupUi(self, constructRoi):
+ constructRoi.setObjectName("constructRoi")
+ constructRoi.setMinimumSize(QtCore.QSize(1400, 662))
+ constructRoi.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.main_layout = QtWidgets.QVBoxLayout(constructRoi)
+ self.main_layout.setContentsMargins(0, 0, 0, 0)
+ self.main_layout.setObjectName("main_layout")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=constructRoi)
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.loading_screen_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.loading_screen_label.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 0);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_screen_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_screen_label.setObjectName("loading_screen_label")
+ self.side_bar_layout.addWidget(self.loading_screen_label)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.draw_roi_layout = QtWidgets.QVBoxLayout()
+ self.draw_roi_layout.setContentsMargins(30, 10, 30, 10)
+ self.draw_roi_layout.setSpacing(10)
+ self.draw_roi_layout.setObjectName("draw_roi_layout")
+ self.draw_roi_heading_layout = QtWidgets.QVBoxLayout()
+ self.draw_roi_heading_layout.setSpacing(5)
+ self.draw_roi_heading_layout.setObjectName("draw_roi_heading_layout")
+ self.draw_roi_title_layout = QtWidgets.QHBoxLayout()
+ self.draw_roi_title_layout.setObjectName("draw_roi_title_layout")
+ self.pix_dim_layout_cm = QtWidgets.QVBoxLayout()
+ self.pix_dim_layout_cm.setObjectName("pix_dim_layout_cm")
+ self.physical_dims_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_dims_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_dims_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_dims_label.setScaledContents(False)
+ self.physical_dims_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.physical_dims_label.setWordWrap(True)
+ self.physical_dims_label.setObjectName("physical_dims_label")
+ self.pix_dim_layout_cm.addWidget(self.physical_dims_label)
+ self.pix_dim_grid_cm = QtWidgets.QGridLayout()
+ self.pix_dim_grid_cm.setObjectName("pix_dim_grid_cm")
+ self.physical_depth_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_depth_label.setMinimumSize(QtCore.QSize(129, 0))
+ self.physical_depth_label.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_depth_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_depth_label.setScaledContents(False)
+ self.physical_depth_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.physical_depth_label.setWordWrap(True)
+ self.physical_depth_label.setObjectName("physical_depth_label")
+ self.pix_dim_grid_cm.addWidget(self.physical_depth_label, 1, 0, 1, 1)
+ self.physical_width_val = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_width_val.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_width_val.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_width_val.setScaledContents(False)
+ self.physical_width_val.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.physical_width_val.setWordWrap(True)
+ self.physical_width_val.setObjectName("physical_width_val")
+ self.pix_dim_grid_cm.addWidget(self.physical_width_val, 0, 1, 1, 1)
+ self.physical_depth_val = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_depth_val.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_depth_val.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_depth_val.setScaledContents(False)
+ self.physical_depth_val.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.physical_depth_val.setWordWrap(True)
+ self.physical_depth_val.setObjectName("physical_depth_val")
+ self.pix_dim_grid_cm.addWidget(self.physical_depth_val, 1, 1, 1, 1)
+ self.physical_width_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_width_label.setMinimumSize(QtCore.QSize(129, 0))
+ self.physical_width_label.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_width_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_width_label.setScaledContents(False)
+ self.physical_width_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.physical_width_label.setWordWrap(True)
+ self.physical_width_label.setObjectName("physical_width_label")
+ self.pix_dim_grid_cm.addWidget(self.physical_width_label, 0, 0, 1, 1)
+ self.pix_dim_layout_cm.addLayout(self.pix_dim_grid_cm)
+ self.pix_dim_layout_cm.setStretch(0, 1)
+ self.pix_dim_layout_cm.setStretch(1, 2)
+ self.draw_roi_title_layout.addLayout(self.pix_dim_layout_cm)
+ self.construct_roi_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.construct_roi_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.construct_roi_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.construct_roi_label.setScaledContents(False)
+ self.construct_roi_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.construct_roi_label.setWordWrap(True)
+ self.construct_roi_label.setObjectName("construct_roi_label")
+ self.draw_roi_title_layout.addWidget(self.construct_roi_label)
+ self.pix_dim_layout = QtWidgets.QVBoxLayout()
+ self.pix_dim_layout.setObjectName("pix_dim_layout")
+ self.pixel_dims_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.pixel_dims_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.pixel_dims_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.pixel_dims_label.setScaledContents(False)
+ self.pixel_dims_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.pixel_dims_label.setWordWrap(True)
+ self.pixel_dims_label.setObjectName("pixel_dims_label")
+ self.pix_dim_layout.addWidget(self.pixel_dims_label)
+ self.pix_dim_grid = QtWidgets.QGridLayout()
+ self.pix_dim_grid.setObjectName("pix_dim_grid")
+ self.pixel_width_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.pixel_width_label.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.pixel_width_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.pixel_width_label.setScaledContents(False)
+ self.pixel_width_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.pixel_width_label.setWordWrap(True)
+ self.pixel_width_label.setObjectName("pixel_width_label")
+ self.pix_dim_grid.addWidget(self.pixel_width_label, 0, 0, 1, 1)
+ self.pixel_depth_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.pixel_depth_label.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.pixel_depth_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.pixel_depth_label.setScaledContents(False)
+ self.pixel_depth_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.pixel_depth_label.setWordWrap(True)
+ self.pixel_depth_label.setObjectName("pixel_depth_label")
+ self.pix_dim_grid.addWidget(self.pixel_depth_label, 1, 0, 1, 1)
+ self.pixel_width_val = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.pixel_width_val.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.pixel_width_val.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.pixel_width_val.setScaledContents(False)
+ self.pixel_width_val.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.pixel_width_val.setWordWrap(True)
+ self.pixel_width_val.setObjectName("pixel_width_val")
+ self.pix_dim_grid.addWidget(self.pixel_width_val, 0, 1, 1, 1)
+ self.pixel_depth_val = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.pixel_depth_val.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.pixel_depth_val.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.pixel_depth_val.setScaledContents(False)
+ self.pixel_depth_val.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.pixel_depth_val.setWordWrap(True)
+ self.pixel_depth_val.setObjectName("pixel_depth_val")
+ self.pix_dim_grid.addWidget(self.pixel_depth_val, 1, 1, 1, 1)
+ self.pix_dim_layout.addLayout(self.pix_dim_grid)
+ self.pix_dim_layout.setStretch(0, 1)
+ self.pix_dim_layout.setStretch(1, 2)
+ self.draw_roi_title_layout.addLayout(self.pix_dim_layout)
+ self.draw_roi_title_layout.setStretch(0, 1)
+ self.draw_roi_title_layout.setStretch(1, 2)
+ self.draw_roi_title_layout.setStretch(2, 1)
+ self.draw_roi_heading_layout.addLayout(self.draw_roi_title_layout)
+ self.draw_roi_layout.addLayout(self.draw_roi_heading_layout)
+ self.brightness_control_layout = QtWidgets.QHBoxLayout()
+ self.brightness_control_layout.setSpacing(10)
+ self.brightness_control_layout.setObjectName("brightness_control_layout")
+ self.brightness_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.brightness_label.setMinimumSize(QtCore.QSize(80, 41))
+ self.brightness_label.setMaximumSize(QtCore.QSize(80, 41))
+ self.brightness_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.brightness_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.brightness_label.setObjectName("brightness_label")
+ self.brightness_control_layout.addWidget(self.brightness_label)
+ self.brightness_slider = QtWidgets.QSlider(parent=self.horizontalLayoutWidget_4)
+ self.brightness_slider.setMinimumSize(QtCore.QSize(200, 41))
+ self.brightness_slider.setMaximumSize(QtCore.QSize(200, 41))
+ self.brightness_slider.setStyleSheet("QSlider::groove:horizontal {\n"
+" border: 1px solid #999999;\n"
+" height: 8px;\n"
+" background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #B1B1B1, stop:1 #c4c4c4);\n"
+" margin: 2px 0;\n"
+"}\n"
+"QSlider::handle:horizontal {\n"
+" background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);\n"
+" border: 1px solid #5c5c5c;\n"
+" width: 18px;\n"
+" margin: 2px 0;\n"
+" border-radius: 3px;\n"
+"}")
+ self.brightness_slider.setMinimum(0)
+ self.brightness_slider.setMaximum(100)
+ self.brightness_slider.setProperty("value", 0)
+ self.brightness_slider.setOrientation(QtCore.Qt.Orientation.Horizontal)
+ self.brightness_slider.setObjectName("brightness_slider")
+ self.brightness_control_layout.addWidget(self.brightness_slider)
+ self.brightness_value_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.brightness_value_label.setMinimumSize(QtCore.QSize(40, 41))
+ self.brightness_value_label.setMaximumSize(QtCore.QSize(40, 41))
+ self.brightness_value_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.brightness_value_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.brightness_value_label.setObjectName("brightness_value_label")
+ self.brightness_control_layout.addWidget(self.brightness_value_label)
+ self.draw_roi_layout.addLayout(self.brightness_control_layout)
+ self.overlay_control_layout = QtWidgets.QHBoxLayout()
+ self.overlay_control_layout.setSpacing(10)
+ self.overlay_control_layout.setObjectName("overlay_control_layout")
+ self.dicom_overlay_checkbox = QtWidgets.QCheckBox(parent=self.horizontalLayoutWidget_4)
+ self.dicom_overlay_checkbox.setMinimumSize(QtCore.QSize(200, 41))
+ self.dicom_overlay_checkbox.setMaximumSize(QtCore.QSize(200, 41))
+ self.dicom_overlay_checkbox.setStyleSheet("QCheckBox {\n"
+" color: rgb(255, 255, 255);\n"
+" font-size: 15px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}\n"
+"QCheckBox::indicator {\n"
+" width: 20px;\n"
+" height: 20px;\n"
+" border-radius: 10px;\n"
+" background-color: rgb(90, 37, 255);\n"
+" border: 2px solid rgb(255, 255, 255);\n"
+"}\n"
+"QCheckBox::indicator:checked {\n"
+" background-color: rgb(90, 37, 255);\n"
+" border: 2px solid rgb(255, 255, 255);\n"
+"}")
+ self.dicom_overlay_checkbox.setObjectName("dicom_overlay_checkbox")
+ self.overlay_control_layout.addWidget(self.dicom_overlay_checkbox)
+ self.transparency_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.transparency_label.setMinimumSize(QtCore.QSize(100, 41))
+ self.transparency_label.setMaximumSize(QtCore.QSize(100, 41))
+ self.transparency_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.transparency_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.transparency_label.setObjectName("transparency_label")
+ self.overlay_control_layout.addWidget(self.transparency_label)
+ self.transparency_slider = QtWidgets.QSlider(parent=self.horizontalLayoutWidget_4)
+ self.transparency_slider.setMinimumSize(QtCore.QSize(200, 41))
+ self.transparency_slider.setMaximumSize(QtCore.QSize(200, 41))
+ self.transparency_slider.setStyleSheet("QSlider::groove:horizontal {\n"
+" border: 1px solid #999999;\n"
+" height: 8px;\n"
+" background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #B1B1B1, stop:1 #c4c4c4);\n"
+" margin: 2px 0;\n"
+"}\n"
+"QSlider::handle:horizontal {\n"
+" background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #b4b4b4, stop:1 #8f8f8f);\n"
+" border: 1px solid #5c5c5c;\n"
+" width: 18px;\n"
+" margin: 2px 0;\n"
+" border-radius: 3px;\n"
+"}")
+ self.transparency_slider.setMinimum(0)
+ self.transparency_slider.setMaximum(100)
+ self.transparency_slider.setProperty("value", 50)
+ self.transparency_slider.setOrientation(QtCore.Qt.Orientation.Horizontal)
+ self.transparency_slider.setObjectName("transparency_slider")
+ self.overlay_control_layout.addWidget(self.transparency_slider)
+ self.transparency_value_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.transparency_value_label.setMinimumSize(QtCore.QSize(40, 41))
+ self.transparency_value_label.setMaximumSize(QtCore.QSize(40, 41))
+ self.transparency_value_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.transparency_value_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.transparency_value_label.setObjectName("transparency_value_label")
+ self.overlay_control_layout.addWidget(self.transparency_value_label)
+ self.draw_roi_layout.addLayout(self.overlay_control_layout)
+ self.load_dicom_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.load_dicom_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.load_dicom_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.load_dicom_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"QPushButton:hover {\n"
+" background-color: rgb(120, 67, 255);\n"
+"}\n"
+"QPushButton:pressed {\n"
+" background-color: rgb(60, 17, 195);\n"
+"}")
+ self.load_dicom_button.setObjectName("load_dicom_button")
+ self.draw_roi_layout.addWidget(self.load_dicom_button)
+ self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+ self.back_from_drag_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.back_from_drag_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.back_from_drag_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.back_from_drag_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.back_from_drag_button.setCheckable(True)
+ self.back_from_drag_button.setChecked(False)
+ self.back_from_drag_button.setObjectName("back_from_drag_button")
+ self.horizontalLayout_4.addWidget(self.back_from_drag_button)
+ self.save_drag_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.save_drag_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.save_drag_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.save_drag_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.save_drag_button.setCheckable(True)
+ self.save_drag_button.setChecked(False)
+ self.save_drag_button.setObjectName("save_drag_button")
+ self.horizontalLayout_4.addWidget(self.save_drag_button)
+ self.draw_roi_layout.addLayout(self.horizontalLayout_4)
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.draw_pts_type_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.draw_pts_type_button.setMinimumSize(QtCore.QSize(221, 41))
+ self.draw_pts_type_button.setMaximumSize(QtCore.QSize(221, 41))
+ self.draw_pts_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.draw_pts_type_button.setCheckable(True)
+ self.draw_pts_type_button.setChecked(False)
+ self.draw_pts_type_button.setObjectName("draw_pts_type_button")
+ self.horizontalLayout.addWidget(self.draw_pts_type_button)
+ self.draw_freehand_drag_type_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.draw_freehand_drag_type_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.draw_freehand_drag_type_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.draw_freehand_drag_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"QPushButton:checked {\n"
+" color:white; \n"
+" font-size: 16px;\n"
+" background: rgb(45, 0, 110);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.draw_freehand_drag_type_button.setCheckable(False)
+ self.draw_freehand_drag_type_button.setChecked(False)
+ self.draw_freehand_drag_type_button.setObjectName("draw_freehand_drag_type_button")
+ self.horizontalLayout.addWidget(self.draw_freehand_drag_type_button)
+ self.draw_rect_drag_type_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.draw_rect_drag_type_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.draw_rect_drag_type_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.draw_rect_drag_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"QPushButton:checked {\n"
+" color:white; \n"
+" font-size: 16px;\n"
+" background: rgb(45, 0, 110);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.draw_rect_drag_type_button.setCheckable(False)
+ self.draw_rect_drag_type_button.setChecked(False)
+ self.draw_rect_drag_type_button.setObjectName("draw_rect_drag_type_button")
+ self.horizontalLayout.addWidget(self.draw_rect_drag_type_button)
+ self.draw_roi_layout.addLayout(self.horizontalLayout)
+ self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+ self.clear_roi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.clear_roi_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.clear_roi_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.clear_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_roi_button.setCheckable(False)
+ self.clear_roi_button.setObjectName("clear_roi_button")
+ self.horizontalLayout_3.addWidget(self.clear_roi_button)
+ self.undo_last_pt_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.undo_last_pt_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.undo_last_pt_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.undo_last_pt_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.undo_last_pt_button.setCheckable(False)
+ self.undo_last_pt_button.setObjectName("undo_last_pt_button")
+ self.horizontalLayout_3.addWidget(self.undo_last_pt_button)
+ self.close_roi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.close_roi_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.close_roi_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.close_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.close_roi_button.setCheckable(False)
+ self.close_roi_button.setObjectName("close_roi_button")
+ self.horizontalLayout_3.addWidget(self.close_roi_button)
+ self.back_from_pts_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.back_from_pts_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.back_from_pts_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.back_from_pts_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_from_pts_button.setCheckable(False)
+ self.back_from_pts_button.setObjectName("back_from_pts_button")
+ self.horizontalLayout_3.addWidget(self.back_from_pts_button)
+ self.save_pts_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.save_pts_button.setMinimumSize(QtCore.QSize(141, 41))
+ self.save_pts_button.setMaximumSize(QtCore.QSize(141, 41))
+ self.save_pts_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.save_pts_button.setCheckable(False)
+ self.save_pts_button.setObjectName("save_pts_button")
+ self.horizontalLayout_3.addWidget(self.save_pts_button)
+ self.draw_roi_layout.addLayout(self.horizontalLayout_3)
+ self.save_roi_layout = QtWidgets.QGridLayout()
+ self.save_roi_layout.setContentsMargins(-1, -1, -1, 10)
+ self.save_roi_layout.setSpacing(10)
+ self.save_roi_layout.setObjectName("save_roi_layout")
+ self.save_folder_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.save_folder_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_folder_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_folder_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_folder_input.setObjectName("save_folder_input")
+ self.save_roi_layout.addWidget(self.save_folder_input, 0, 1, 1, 1)
+ self.dest_folder_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.dest_folder_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.dest_folder_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.dest_folder_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.dest_folder_label.setObjectName("dest_folder_label")
+ self.save_roi_layout.addWidget(self.dest_folder_label, 0, 0, 1, 1, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.roi_name_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.roi_name_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.roi_name_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roi_name_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.roi_name_label.setObjectName("roi_name_label")
+ self.save_roi_layout.addWidget(self.roi_name_label, 2, 0, 1, 1, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.save_name_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.save_name_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_name_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_name_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_name_input.setObjectName("save_name_input")
+ self.save_roi_layout.addWidget(self.save_name_input, 2, 1, 1, 1)
+ self.chooseImageButtonsLayout_2 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_2.setSpacing(10)
+ self.chooseImageButtonsLayout_2.setObjectName("chooseImageButtonsLayout_2")
+ self.choose_save_folder_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.choose_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_save_folder_button.setObjectName("choose_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.choose_save_folder_button)
+ self.clear_save_folder_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.clear_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_save_folder_button.setObjectName("clear_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.clear_save_folder_button)
+ self.save_roi_layout.addLayout(self.chooseImageButtonsLayout_2, 0, 2, 1, 1)
+ self.chooseImageButtonsLayout_4 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_4.setObjectName("chooseImageButtonsLayout_4")
+ self.save_roi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.save_roi_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.save_roi_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.save_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.save_roi_button.setObjectName("save_roi_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.save_roi_button)
+ self.back_from_save_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.back_from_save_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_from_save_button.setObjectName("back_from_save_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.back_from_save_button)
+ self.save_roi_layout.addLayout(self.chooseImageButtonsLayout_4, 2, 2, 1, 1)
+ self.save_roi_layout.setColumnStretch(0, 1)
+ self.save_roi_layout.setColumnStretch(1, 10)
+ self.save_roi_layout.setColumnStretch(2, 10)
+ self.save_roi_layout.setRowStretch(0, 1)
+ self.save_roi_layout.setRowStretch(1, 10)
+ self.save_roi_layout.setRowStretch(2, 10)
+ self.draw_roi_layout.addLayout(self.save_roi_layout)
+ self.im_display_frame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+ sizePolicy.setHorizontalStretch(10)
+ sizePolicy.setVerticalStretch(10)
+ sizePolicy.setHeightForWidth(self.im_display_frame.sizePolicy().hasHeightForWidth())
+ self.im_display_frame.setSizePolicy(sizePolicy)
+ self.im_display_frame.setMinimumSize(QtCore.QSize(501, 321))
+ self.im_display_frame.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.im_display_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.im_display_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.im_display_frame.setObjectName("im_display_frame")
+ self.draw_roi_layout.addWidget(self.im_display_frame)
+ self.rect_dims_layout = QtWidgets.QHBoxLayout()
+ self.rect_dims_layout.setObjectName("rect_dims_layout")
+ self.physical_roi_dims_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_roi_dims_label.setMinimumSize(QtCore.QSize(200, 0))
+ self.physical_roi_dims_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_roi_dims_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_roi_dims_label.setScaledContents(False)
+ self.physical_roi_dims_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.physical_roi_dims_label.setWordWrap(True)
+ self.physical_roi_dims_label.setObjectName("physical_roi_dims_label")
+ self.rect_dims_layout.addWidget(self.physical_roi_dims_label)
+ self.physical_roi_width_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_roi_width_label.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_roi_width_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_roi_width_label.setScaledContents(False)
+ self.physical_roi_width_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.physical_roi_width_label.setWordWrap(True)
+ self.physical_roi_width_label.setObjectName("physical_roi_width_label")
+ self.rect_dims_layout.addWidget(self.physical_roi_width_label, 0, QtCore.Qt.AlignmentFlag.AlignRight)
+ self.physical_roi_width_val = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_roi_width_val.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_roi_width_val.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_roi_width_val.setScaledContents(False)
+ self.physical_roi_width_val.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.physical_roi_width_val.setWordWrap(True)
+ self.physical_roi_width_val.setObjectName("physical_roi_width_val")
+ self.rect_dims_layout.addWidget(self.physical_roi_width_val)
+ self.physical_roi_height_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_roi_height_label.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_roi_height_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_roi_height_label.setScaledContents(False)
+ self.physical_roi_height_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.physical_roi_height_label.setWordWrap(True)
+ self.physical_roi_height_label.setObjectName("physical_roi_height_label")
+ self.rect_dims_layout.addWidget(self.physical_roi_height_label, 0, QtCore.Qt.AlignmentFlag.AlignRight)
+ self.physical_roi_height_val = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.physical_roi_height_val.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.physical_roi_height_val.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.physical_roi_height_val.setScaledContents(False)
+ self.physical_roi_height_val.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.physical_roi_height_val.setWordWrap(True)
+ self.physical_roi_height_val.setObjectName("physical_roi_height_val")
+ self.rect_dims_layout.addWidget(self.physical_roi_height_val)
+ spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.rect_dims_layout.addItem(spacerItem2)
+ self.rect_dims_layout.setStretch(0, 1)
+ self.rect_dims_layout.setStretch(1, 1)
+ self.rect_dims_layout.setStretch(2, 2)
+ self.rect_dims_layout.setStretch(3, 1)
+ self.rect_dims_layout.setStretch(4, 2)
+ self.draw_roi_layout.addLayout(self.rect_dims_layout)
+ self.draw_roi_layout.setStretch(0, 1)
+ self.full_screen_layout.addLayout(self.draw_roi_layout)
+ self.main_layout.addWidget(self.horizontalLayoutWidget_4)
+
+ self.retranslateUi(constructRoi)
+ QtCore.QMetaObject.connectSlotsByName(constructRoi)
+
+ def retranslateUi(self, constructRoi):
+ _translate = QtCore.QCoreApplication.translate
+ constructRoi.setWindowTitle(_translate("constructRoi", "Select Region of Interest"))
+ self.sidebar.setToolTip(_translate("constructRoi", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("constructRoi", "Image Selection:"))
+ self.imageLabel.setText(_translate("constructRoi", "Image:"))
+ self.phantomLabel.setText(_translate("constructRoi", "Phantom:"))
+ self.image_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.phantom_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.roiSidebarLabel.setText(_translate("constructRoi", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("constructRoi", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("constructRoi", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("constructRoi", "Analysis Parameter Selection"))
+ self.back_button.setText(_translate("constructRoi", "Back"))
+ self.loading_screen_label.setText(_translate("constructRoi", "LOADING...."))
+ self.physical_dims_label.setText(_translate("constructRoi", "Physical Dims (cm):"))
+ self.physical_depth_label.setText(_translate("constructRoi", "Depth:"))
+ self.physical_width_val.setText(_translate("constructRoi", "0"))
+ self.physical_depth_val.setText(_translate("constructRoi", "0"))
+ self.physical_width_label.setText(_translate("constructRoi", "Width:"))
+ self.construct_roi_label.setText(_translate("constructRoi", "Construct Region of Interest (ROI):"))
+ self.pixel_dims_label.setText(_translate("constructRoi", "Pixel Dims:"))
+ self.pixel_width_label.setText(_translate("constructRoi", "Width:"))
+ self.pixel_depth_label.setText(_translate("constructRoi", "Depth:"))
+ self.pixel_width_val.setText(_translate("constructRoi", "0"))
+ self.pixel_depth_val.setText(_translate("constructRoi", "0"))
+ self.brightness_label.setText(_translate("constructRoi", "Brightness:"))
+ self.brightness_value_label.setText(_translate("constructRoi", "0"))
+ self.dicom_overlay_checkbox.setText(_translate("constructRoi", "Show DICOM Overlay"))
+ self.transparency_label.setText(_translate("constructRoi", "Transparency:"))
+ self.transparency_value_label.setText(_translate("constructRoi", "50"))
+ self.load_dicom_button.setText(_translate("constructRoi", "Load DICOM File"))
+ self.back_from_drag_button.setText(_translate("constructRoi", "Back"))
+ self.save_drag_button.setText(_translate("constructRoi", "Save ROI"))
+ self.draw_pts_type_button.setText(_translate("constructRoi", "Draw Freehand w Points"))
+ self.draw_freehand_drag_type_button.setText(_translate("constructRoi", "Draw Freehand by Dragging"))
+ self.draw_rect_drag_type_button.setText(_translate("constructRoi", "Draw Rectangle by Dragging"))
+ self.clear_roi_button.setText(_translate("constructRoi", "Clear ROI"))
+ self.undo_last_pt_button.setText(_translate("constructRoi", "Undo Last Point"))
+ self.close_roi_button.setText(_translate("constructRoi", "Close ROI"))
+ self.back_from_pts_button.setText(_translate("constructRoi", "Back"))
+ self.save_pts_button.setText(_translate("constructRoi", "Save ROI"))
+ self.dest_folder_label.setText(_translate("constructRoi", "Dest Folder"))
+ self.roi_name_label.setText(_translate("constructRoi", "ROI Name"))
+ self.choose_save_folder_button.setText(_translate("constructRoi", "Choose Folder"))
+ self.clear_save_folder_button.setText(_translate("constructRoi", "Clear Path"))
+ self.save_roi_button.setText(_translate("constructRoi", "Save"))
+ self.back_from_save_button.setText(_translate("constructRoi", "Back"))
+ self.physical_roi_dims_label.setText(_translate("constructRoi", "Rect. Dims (cm):"))
+ self.physical_roi_width_label.setText(_translate("constructRoi", "Width:"))
+ self.physical_roi_width_val.setText(_translate("constructRoi", "0"))
+ self.physical_roi_height_label.setText(_translate("constructRoi", "Depth"))
+ self.physical_roi_height_val.setText(_translate("constructRoi", "0"))
diff --git a/src/qus/seg_loading/ui/roi_preview_ui.py b/src/qus/seg_loading/ui/roi_preview_ui.py
new file mode 100644
index 0000000..9b50e03
--- /dev/null
+++ b/src/qus/seg_loading/ui/roi_preview_ui.py
@@ -0,0 +1,339 @@
+# Form implementation generated from reading ui file 'src\qus\seg_loading\ui\roi_preview.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_constructRoi(object):
+ def setupUi(self, constructRoi):
+ constructRoi.setObjectName("constructRoi")
+ constructRoi.setMinimumSize(QtCore.QSize(1400, 662))
+ constructRoi.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.main_layout = QtWidgets.QVBoxLayout(constructRoi)
+ self.main_layout.setContentsMargins(0, 0, 0, 0)
+ self.main_layout.setObjectName("main_layout")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=constructRoi)
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.confirmation_layout = QtWidgets.QVBoxLayout()
+ self.confirmation_layout.setContentsMargins(30, 10, 30, 10)
+ self.confirmation_layout.setSpacing(10)
+ self.confirmation_layout.setObjectName("confirmation_layout")
+ self.segmentation_confirmation_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.segmentation_confirmation_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.segmentation_confirmation_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.segmentation_confirmation_label.setScaledContents(False)
+ self.segmentation_confirmation_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentation_confirmation_label.setWordWrap(True)
+ self.segmentation_confirmation_label.setObjectName("segmentation_confirmation_label")
+ self.confirmation_layout.addWidget(self.segmentation_confirmation_label)
+ self.seg_confirmation_info = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.seg_confirmation_info.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.seg_confirmation_info.setObjectName("seg_confirmation_info")
+ self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.seg_confirmation_info)
+ self.horizontalLayout_7.setObjectName("horizontalLayout_7")
+ self.segmentation_name_label = QtWidgets.QLabel(parent=self.seg_confirmation_info)
+ self.segmentation_name_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.segmentation_name_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.segmentation_name_label.setScaledContents(False)
+ self.segmentation_name_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentation_name_label.setWordWrap(False)
+ self.segmentation_name_label.setObjectName("segmentation_name_label")
+ self.horizontalLayout_7.addWidget(self.segmentation_name_label, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.segmentation_name_val = QtWidgets.QLabel(parent=self.seg_confirmation_info)
+ self.segmentation_name_val.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.segmentation_name_val.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.segmentation_name_val.setScaledContents(False)
+ self.segmentation_name_val.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentation_name_val.setWordWrap(True)
+ self.segmentation_name_val.setObjectName("segmentation_name_val")
+ self.horizontalLayout_7.addWidget(self.segmentation_name_val, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.confirmation_layout.addWidget(self.seg_confirmation_info, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.seg_options_buttons = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.seg_options_buttons.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.seg_options_buttons.setObjectName("seg_options_buttons")
+ self.horizontalLayout_10 = QtWidgets.QHBoxLayout(self.seg_options_buttons)
+ self.horizontalLayout_10.setObjectName("horizontalLayout_10")
+ self.confirm_seg_button = QtWidgets.QPushButton(parent=self.seg_options_buttons)
+ self.confirm_seg_button.setMinimumSize(QtCore.QSize(221, 41))
+ self.confirm_seg_button.setMaximumSize(QtCore.QSize(221, 41))
+ self.confirm_seg_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.confirm_seg_button.setCheckable(True)
+ self.confirm_seg_button.setChecked(False)
+ self.confirm_seg_button.setObjectName("confirm_seg_button")
+ self.horizontalLayout_10.addWidget(self.confirm_seg_button, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.back_from_confirm_button = QtWidgets.QPushButton(parent=self.seg_options_buttons)
+ self.back_from_confirm_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.back_from_confirm_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.back_from_confirm_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"QPushButton:checked {\n"
+" color:white; \n"
+" font-size: 16px;\n"
+" background: rgb(45, 0, 110);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.back_from_confirm_button.setCheckable(False)
+ self.back_from_confirm_button.setChecked(False)
+ self.back_from_confirm_button.setObjectName("back_from_confirm_button")
+ self.horizontalLayout_10.addWidget(self.back_from_confirm_button, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.confirmation_layout.addWidget(self.seg_options_buttons)
+ self.im_display_frame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+ sizePolicy.setHorizontalStretch(10)
+ sizePolicy.setVerticalStretch(10)
+ sizePolicy.setHeightForWidth(self.im_display_frame.sizePolicy().hasHeightForWidth())
+ self.im_display_frame.setSizePolicy(sizePolicy)
+ self.im_display_frame.setMinimumSize(QtCore.QSize(501, 321))
+ self.im_display_frame.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.im_display_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.im_display_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.im_display_frame.setObjectName("im_display_frame")
+ self.confirmation_layout.addWidget(self.im_display_frame)
+ self.confirmation_frame_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.confirmation_frame_label.setMinimumSize(QtCore.QSize(200, 0))
+ self.confirmation_frame_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.confirmation_frame_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.confirmation_frame_label.setScaledContents(False)
+ self.confirmation_frame_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.confirmation_frame_label.setWordWrap(True)
+ self.confirmation_frame_label.setObjectName("confirmation_frame_label")
+ self.confirmation_layout.addWidget(self.confirmation_frame_label, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.confirmation_layout.setStretch(0, 1)
+ self.confirmation_layout.setStretch(1, 1)
+ self.full_screen_layout.addLayout(self.confirmation_layout)
+ self.main_layout.addWidget(self.horizontalLayoutWidget_4)
+
+ self.retranslateUi(constructRoi)
+ QtCore.QMetaObject.connectSlotsByName(constructRoi)
+
+ def retranslateUi(self, constructRoi):
+ _translate = QtCore.QCoreApplication.translate
+ constructRoi.setWindowTitle(_translate("constructRoi", "Select Region of Interest"))
+ self.sidebar.setToolTip(_translate("constructRoi", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("constructRoi", "Image Selection:"))
+ self.imageLabel.setText(_translate("constructRoi", "Image:"))
+ self.phantomLabel.setText(_translate("constructRoi", "Phantom:"))
+ self.image_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.phantom_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.roiSidebarLabel.setText(_translate("constructRoi", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("constructRoi", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("constructRoi", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("constructRoi", "Analysis Parameter Selection"))
+ self.segmentation_confirmation_label.setText(_translate("constructRoi", "Segmentation:"))
+ self.segmentation_name_label.setText(_translate("constructRoi", "Segmentation Name: "))
+ self.segmentation_name_val.setText(_translate("constructRoi", "NAME"))
+ self.confirm_seg_button.setText(_translate("constructRoi", "Confirm"))
+ self.back_from_confirm_button.setText(_translate("constructRoi", "Back"))
+ self.confirmation_frame_label.setText(_translate("constructRoi", "Frame: 0"))
diff --git a/src/qus/seg_loading/ui/seg_file_selection_ui.py b/src/qus/seg_loading/ui/seg_file_selection_ui.py
new file mode 100644
index 0000000..c669a12
--- /dev/null
+++ b/src/qus/seg_loading/ui/seg_file_selection_ui.py
@@ -0,0 +1,371 @@
+# Form implementation generated from reading ui file 'src\qus\seg_loading\ui\seg_file_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_constructRoi(object):
+ def setupUi(self, constructRoi):
+ constructRoi.setObjectName("constructRoi")
+ constructRoi.setMinimumSize(QtCore.QSize(1400, 662))
+ constructRoi.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.main_layout = QtWidgets.QVBoxLayout(constructRoi)
+ self.main_layout.setContentsMargins(0, 0, 0, 0)
+ self.main_layout.setObjectName("main_layout")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=constructRoi)
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.seg_loading_layout = QtWidgets.QVBoxLayout()
+ self.seg_loading_layout.setContentsMargins(30, 30, 30, 30)
+ self.seg_loading_layout.setSpacing(20)
+ self.seg_loading_layout.setObjectName("seg_loading_layout")
+ self.select_seg_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.select_seg_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_seg_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_seg_label.setScaledContents(False)
+ self.select_seg_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_seg_label.setWordWrap(True)
+ self.select_seg_label.setObjectName("select_seg_label")
+ self.seg_loading_layout.addWidget(self.select_seg_label)
+ self.chooseImgLayout = QtWidgets.QVBoxLayout()
+ self.chooseImgLayout.setContentsMargins(20, -1, 20, -1)
+ self.chooseImgLayout.setObjectName("chooseImgLayout")
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem2)
+ self.seg_path_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.seg_path_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.seg_path_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.seg_path_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.seg_path_label.setObjectName("seg_path_label")
+ self.chooseImgLayout.addWidget(self.seg_path_label)
+ self.seg_path_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.seg_path_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.seg_path_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.seg_path_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.seg_path_input.setObjectName("seg_path_input")
+ self.chooseImgLayout.addWidget(self.seg_path_input, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.chooseImageButtonsLayout = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout.setSpacing(1)
+ self.chooseImageButtonsLayout.setObjectName("chooseImageButtonsLayout")
+ self.choose_seg_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.choose_seg_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_seg_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_seg_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_seg_path_button.setObjectName("choose_seg_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.choose_seg_path_button, 0, QtCore.Qt.AlignmentFlag.AlignRight)
+ self.clear_seg_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.clear_seg_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_seg_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_seg_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_seg_path_button.setObjectName("clear_seg_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.clear_seg_path_button, 0, QtCore.Qt.AlignmentFlag.AlignLeft)
+ self.chooseImgLayout.addLayout(self.chooseImageButtonsLayout)
+ spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem3)
+ self.seg_loading_layout.addLayout(self.chooseImgLayout)
+ self.loading_options_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.loading_options_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_options_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.loading_options_label.setScaledContents(False)
+ self.loading_options_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_options_label.setWordWrap(True)
+ self.loading_options_label.setObjectName("loading_options_label")
+ self.seg_loading_layout.addWidget(self.loading_options_label)
+ self.loading_options_table = QtWidgets.QTableWidget(parent=self.horizontalLayoutWidget_4)
+ self.loading_options_table.setStyleSheet("QTableWidget {\n"
+" background: rgb(108, 108, 108);\n"
+" color: white;\n"
+"}")
+ self.loading_options_table.setDragEnabled(False)
+ self.loading_options_table.setRowCount(0)
+ self.loading_options_table.setColumnCount(0)
+ self.loading_options_table.setObjectName("loading_options_table")
+ self.loading_options_table.horizontalHeader().setCascadingSectionResizes(False)
+ self.seg_loading_layout.addWidget(self.loading_options_table)
+ self.accept_seg_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.accept_seg_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.accept_seg_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.accept_seg_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_seg_path_button.setObjectName("accept_seg_path_button")
+ self.seg_loading_layout.addWidget(self.accept_seg_path_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.loading_screen_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.loading_screen_label.setStyleSheet("QLabel {\n"
+" color: rgb(0, 255, 0);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.loading_screen_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.loading_screen_label.setObjectName("loading_screen_label")
+ self.seg_loading_layout.addWidget(self.loading_screen_label)
+ self.select_seg_error_msg = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.select_seg_error_msg.setStyleSheet("QLabel {\n"
+" color: rgb(255, 0, 23);\n"
+" font-size: 20px;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_seg_error_msg.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_seg_error_msg.setObjectName("select_seg_error_msg")
+ self.seg_loading_layout.addWidget(self.select_seg_error_msg)
+ self.seg_loading_layout.setStretch(0, 2)
+ self.seg_loading_layout.setStretch(4, 3)
+ self.seg_loading_layout.setStretch(6, 2)
+ self.full_screen_layout.addLayout(self.seg_loading_layout)
+ self.main_layout.addWidget(self.horizontalLayoutWidget_4)
+
+ self.retranslateUi(constructRoi)
+ QtCore.QMetaObject.connectSlotsByName(constructRoi)
+
+ def retranslateUi(self, constructRoi):
+ _translate = QtCore.QCoreApplication.translate
+ constructRoi.setWindowTitle(_translate("constructRoi", "Select Region of Interest"))
+ self.sidebar.setToolTip(_translate("constructRoi", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("constructRoi", "Image Selection:"))
+ self.imageLabel.setText(_translate("constructRoi", "Image:"))
+ self.phantomLabel.setText(_translate("constructRoi", "Phantom:"))
+ self.image_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.phantom_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.roiSidebarLabel.setText(_translate("constructRoi", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("constructRoi", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("constructRoi", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("constructRoi", "Analysis Parameter Selection"))
+ self.back_button.setText(_translate("constructRoi", "Back"))
+ self.select_seg_label.setText(_translate("constructRoi", "Select Segmentation File to Load:"))
+ self.seg_path_label.setText(_translate("constructRoi", "Input Path to Image file\n"
+" (.rf, .rfd, .mat, .bin)"))
+ self.choose_seg_path_button.setText(_translate("constructRoi", "Choose File"))
+ self.clear_seg_path_button.setText(_translate("constructRoi", "Clear Path"))
+ self.loading_options_label.setText(_translate("constructRoi", "\n"
+"Segmentation Loading Options:"))
+ self.loading_options_table.setSortingEnabled(False)
+ self.accept_seg_path_button.setText(_translate("constructRoi", "Accept"))
+ self.loading_screen_label.setText(_translate("constructRoi", "LOADING...."))
+ self.select_seg_error_msg.setText(_translate("constructRoi", "ERROR: At least one dimension of phantom data\n"
+"smaller than corresponding dimension\n"
+"of image data"))
diff --git a/src/qus/seg_loading/ui/seg_type_selection_ui.py b/src/qus/seg_loading/ui/seg_type_selection_ui.py
new file mode 100644
index 0000000..c5e9a43
--- /dev/null
+++ b/src/qus/seg_loading/ui/seg_type_selection_ui.py
@@ -0,0 +1,280 @@
+# Form implementation generated from reading ui file 'src\qus\seg_loading\ui\seg_type_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_constructRoi(object):
+ def setupUi(self, constructRoi):
+ constructRoi.setObjectName("constructRoi")
+ constructRoi.setMinimumSize(QtCore.QSize(1400, 662))
+ constructRoi.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.main_layout = QtWidgets.QVBoxLayout(constructRoi)
+ self.main_layout.setContentsMargins(0, 0, 0, 0)
+ self.main_layout.setObjectName("main_layout")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=constructRoi)
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.select_type_layout = QtWidgets.QVBoxLayout()
+ self.select_type_layout.setContentsMargins(30, -1, 30, -1)
+ self.select_type_layout.setSpacing(50)
+ self.select_type_layout.setObjectName("select_type_layout")
+ self.select_type_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.select_type_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.select_type_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.select_type_label.setScaledContents(False)
+ self.select_type_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.select_type_label.setWordWrap(True)
+ self.select_type_label.setObjectName("select_type_label")
+ self.select_type_layout.addWidget(self.select_type_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.seg_type_dropdown = QtWidgets.QComboBox(parent=self.horizontalLayoutWidget_4)
+ self.seg_type_dropdown.setMinimumSize(QtCore.QSize(180, 41))
+ self.seg_type_dropdown.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ font = QtGui.QFont()
+ font.setPointSize(16)
+ self.seg_type_dropdown.setFont(font)
+ self.seg_type_dropdown.setStyleSheet("QComboBox {\n"
+" color: white;\n"
+"}")
+ self.seg_type_dropdown.setObjectName("seg_type_dropdown")
+ self.select_type_layout.addWidget(self.seg_type_dropdown)
+ self.accept_type_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.accept_type_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.accept_type_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.accept_type_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.accept_type_button.setObjectName("accept_type_button")
+ self.select_type_layout.addWidget(self.accept_type_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.select_type_layout.addItem(spacerItem2)
+ self.select_type_layout.setStretch(0, 2)
+ self.select_type_layout.setStretch(1, 2)
+ self.select_type_layout.setStretch(2, 2)
+ self.select_type_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.select_type_layout)
+ self.main_layout.addWidget(self.horizontalLayoutWidget_4)
+
+ self.retranslateUi(constructRoi)
+ QtCore.QMetaObject.connectSlotsByName(constructRoi)
+
+ def retranslateUi(self, constructRoi):
+ _translate = QtCore.QCoreApplication.translate
+ constructRoi.setWindowTitle(_translate("constructRoi", "Select Region of Interest"))
+ self.sidebar.setToolTip(_translate("constructRoi", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("constructRoi", "Image Selection:"))
+ self.imageLabel.setText(_translate("constructRoi", "Image:"))
+ self.phantomLabel.setText(_translate("constructRoi", "Phantom:"))
+ self.image_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.phantom_path_input.setText(_translate("constructRoi", "Sample filename "))
+ self.roiSidebarLabel.setText(_translate("constructRoi", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("constructRoi", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("constructRoi", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("constructRoi", "Analysis Parameter Selection"))
+ self.back_button.setText(_translate("constructRoi", "Back"))
+ self.select_type_label.setText(_translate("constructRoi", "Select Segmentation Type:"))
+ self.accept_type_button.setText(_translate("constructRoi", "Accept"))
diff --git a/src/qus/seg_loading/ui/voi_drawing_ui.py b/src/qus/seg_loading/ui/voi_drawing_ui.py
new file mode 100644
index 0000000..55f89c3
--- /dev/null
+++ b/src/qus/seg_loading/ui/voi_drawing_ui.py
@@ -0,0 +1,883 @@
+# Form implementation generated from reading ui file 'src\qus\seg_loading\ui\voi_drawing.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_voi_drawer(object):
+ def setupUi(self, voi_drawer):
+ voi_drawer.setObjectName("voi_drawer")
+ voi_drawer.resize(1512, 823)
+ voi_drawer.setMinimumSize(QtCore.QSize(0, 0))
+ voi_drawer.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=voi_drawer)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(10, -200, 1636, 951))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ self.observing_label = QtWidgets.QLabel(parent=self.gridFrame)
+ self.observing_label.setStyleSheet("QLabel { background-color : rgb(42, 42, 42); color : red; }")
+ self.observing_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.observing_label.setObjectName("observing_label")
+ self.backButtonGrid.addWidget(self.observing_label, 1, 0, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 4, 0, 1, 1)
+ spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem, 4, 1, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem1, 3, 0, 1, 1)
+ self.navigating_label = QtWidgets.QLabel(parent=self.gridFrame)
+ self.navigating_label.setStyleSheet("QLabel { background-color : rgb(42, 42, 42); color : green; }")
+ self.navigating_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.navigating_label.setObjectName("navigating_label")
+ self.backButtonGrid.addWidget(self.navigating_label, 0, 0, 1, 1)
+ self.toggle_crosshair_visibility_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.toggle_crosshair_visibility_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.toggle_crosshair_visibility_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.toggle_crosshair_visibility_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.toggle_crosshair_visibility_button.setObjectName("toggle_crosshair_visibility_button")
+ self.backButtonGrid.addWidget(self.toggle_crosshair_visibility_button, 4, 2, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.voi_layout = QtWidgets.QGridLayout()
+ self.voi_layout.setObjectName("voi_layout")
+ self.verticalLayout_6 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_6.setObjectName("verticalLayout_6")
+ self.sag_plane_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_plane_label.sizePolicy().hasHeightForWidth())
+ self.sag_plane_label.setSizePolicy(sizePolicy)
+ self.sag_plane_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_plane_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.sag_plane_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_plane_label.setObjectName("sag_plane_label")
+ self.verticalLayout_6.addWidget(self.sag_plane_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_plane = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(1)
+ sizePolicy.setVerticalStretch(1)
+ sizePolicy.setHeightForWidth(self.sag_plane.sizePolicy().hasHeightForWidth())
+ self.sag_plane.setSizePolicy(sizePolicy)
+ self.sag_plane.setMinimumSize(QtCore.QSize(321, 301))
+ self.sag_plane.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+ self.sag_plane.setMouseTracking(True)
+ self.sag_plane.setFrameShape(QtWidgets.QFrame.Shape.Box)
+ self.sag_plane.setText("")
+ self.sag_plane.setObjectName("sag_plane")
+ self.verticalLayout_6.addWidget(self.sag_plane)
+ self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_7.setSpacing(5)
+ self.horizontalLayout_7.setObjectName("horizontalLayout_7")
+ self.sag_frame_num = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_frame_num.sizePolicy().hasHeightForWidth())
+ self.sag_frame_num.setSizePolicy(sizePolicy)
+ self.sag_frame_num.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_frame_num.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.sag_frame_num.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_frame_num.setObjectName("sag_frame_num")
+ self.horizontalLayout_7.addWidget(self.sag_frame_num, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_of_label.sizePolicy().hasHeightForWidth())
+ self.sag_of_label.setSizePolicy(sizePolicy)
+ self.sag_of_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.sag_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_of_label.setObjectName("sag_of_label")
+ self.horizontalLayout_7.addWidget(self.sag_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_total_frames = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_total_frames.sizePolicy().hasHeightForWidth())
+ self.sag_total_frames.setSizePolicy(sizePolicy)
+ self.sag_total_frames.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_total_frames.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_total_frames.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_total_frames.setObjectName("sag_total_frames")
+ self.horizontalLayout_7.addWidget(self.sag_total_frames, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_7.setStretch(0, 1)
+ self.horizontalLayout_7.setStretch(2, 1)
+ self.verticalLayout_6.addLayout(self.horizontalLayout_7)
+ self.voi_layout.addLayout(self.verticalLayout_6, 0, 1, 1, 1)
+ self.verticalLayout_4 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_4.setObjectName("verticalLayout_4")
+ self.ax_plane_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_plane_label.sizePolicy().hasHeightForWidth())
+ self.ax_plane_label.setSizePolicy(sizePolicy)
+ self.ax_plane_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_plane_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.ax_plane_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_plane_label.setObjectName("ax_plane_label")
+ self.verticalLayout_4.addWidget(self.ax_plane_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_plane = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(1)
+ sizePolicy.setVerticalStretch(1)
+ sizePolicy.setHeightForWidth(self.ax_plane.sizePolicy().hasHeightForWidth())
+ self.ax_plane.setSizePolicy(sizePolicy)
+ self.ax_plane.setMinimumSize(QtCore.QSize(321, 301))
+ self.ax_plane.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+ self.ax_plane.setMouseTracking(True)
+ self.ax_plane.setFrameShape(QtWidgets.QFrame.Shape.Box)
+ self.ax_plane.setText("")
+ self.ax_plane.setObjectName("ax_plane")
+ self.verticalLayout_4.addWidget(self.ax_plane)
+ self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_6.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+ self.horizontalLayout_6.setSpacing(5)
+ self.horizontalLayout_6.setObjectName("horizontalLayout_6")
+ self.ax_frame_num = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_frame_num.sizePolicy().hasHeightForWidth())
+ self.ax_frame_num.setSizePolicy(sizePolicy)
+ self.ax_frame_num.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_frame_num.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.ax_frame_num.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_frame_num.setObjectName("ax_frame_num")
+ self.horizontalLayout_6.addWidget(self.ax_frame_num, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_of_label.sizePolicy().hasHeightForWidth())
+ self.ax_of_label.setSizePolicy(sizePolicy)
+ self.ax_of_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.ax_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_of_label.setObjectName("ax_of_label")
+ self.horizontalLayout_6.addWidget(self.ax_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_total_frames = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_total_frames.sizePolicy().hasHeightForWidth())
+ self.ax_total_frames.setSizePolicy(sizePolicy)
+ self.ax_total_frames.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_total_frames.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_total_frames.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_total_frames.setObjectName("ax_total_frames")
+ self.horizontalLayout_6.addWidget(self.ax_total_frames, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_6.setStretch(0, 1)
+ self.horizontalLayout_6.setStretch(2, 1)
+ self.verticalLayout_4.addLayout(self.horizontalLayout_6)
+ self.voi_layout.addLayout(self.verticalLayout_4, 0, 0, 1, 1)
+ self.verticalLayout_7 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_7.setObjectName("verticalLayout_7")
+ self.cor_plane_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_plane_label.sizePolicy().hasHeightForWidth())
+ self.cor_plane_label.setSizePolicy(sizePolicy)
+ self.cor_plane_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_plane_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cor_plane_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_plane_label.setObjectName("cor_plane_label")
+ self.verticalLayout_7.addWidget(self.cor_plane_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_plane = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(1)
+ sizePolicy.setVerticalStretch(1)
+ sizePolicy.setHeightForWidth(self.cor_plane.sizePolicy().hasHeightForWidth())
+ self.cor_plane.setSizePolicy(sizePolicy)
+ self.cor_plane.setMinimumSize(QtCore.QSize(321, 301))
+ self.cor_plane.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+ self.cor_plane.setMouseTracking(True)
+ self.cor_plane.setFrameShape(QtWidgets.QFrame.Shape.Box)
+ self.cor_plane.setText("")
+ self.cor_plane.setObjectName("cor_plane")
+ self.verticalLayout_7.addWidget(self.cor_plane)
+ self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_8.setSpacing(5)
+ self.horizontalLayout_8.setObjectName("horizontalLayout_8")
+ self.cor_frame_num = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_frame_num.sizePolicy().hasHeightForWidth())
+ self.cor_frame_num.setSizePolicy(sizePolicy)
+ self.cor_frame_num.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_frame_num.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cor_frame_num.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_frame_num.setObjectName("cor_frame_num")
+ self.horizontalLayout_8.addWidget(self.cor_frame_num, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_of_label.sizePolicy().hasHeightForWidth())
+ self.cor_of_label.setSizePolicy(sizePolicy)
+ self.cor_of_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cor_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_of_label.setObjectName("cor_of_label")
+ self.horizontalLayout_8.addWidget(self.cor_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_total_frames = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_total_frames.sizePolicy().hasHeightForWidth())
+ self.cor_total_frames.setSizePolicy(sizePolicy)
+ self.cor_total_frames.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_total_frames.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_total_frames.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_total_frames.setObjectName("cor_total_frames")
+ self.horizontalLayout_8.addWidget(self.cor_total_frames, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_8.setStretch(0, 1)
+ self.horizontalLayout_8.setStretch(2, 1)
+ self.verticalLayout_7.addLayout(self.horizontalLayout_8)
+ self.voi_layout.addLayout(self.verticalLayout_7, 1, 1, 1, 1)
+ self.verticalLayout_5 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_5.setContentsMargins(10, -1, 10, 20)
+ self.verticalLayout_5.setObjectName("verticalLayout_5")
+ self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_2.setObjectName("verticalLayout_2")
+ self.cur_slice_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_slice_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.cur_slice_label.setScaledContents(False)
+ self.cur_slice_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cur_slice_label.setWordWrap(True)
+ self.cur_slice_label.setObjectName("cur_slice_label")
+ self.verticalLayout_2.addWidget(self.cur_slice_label)
+ self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+ self.cur_slice_slider = QtWidgets.QSlider(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_slider.setMinimumSize(QtCore.QSize(285, 0))
+ self.cur_slice_slider.setMaximumSize(QtCore.QSize(285, 16777215))
+ self.cur_slice_slider.setStyleSheet("QSlider {\n"
+" color: white;\n"
+"}")
+ self.cur_slice_slider.setOrientation(QtCore.Qt.Orientation.Horizontal)
+ self.cur_slice_slider.setObjectName("cur_slice_slider")
+ self.horizontalLayout_5.addWidget(self.cur_slice_slider, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_spin_box = QtWidgets.QDoubleSpinBox(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_spin_box.setMaximumSize(QtCore.QSize(70, 16777215))
+ self.cur_slice_spin_box.setStyleSheet("QDoubleSpinBox {\n"
+" background: white;\n"
+" color: black;\n"
+"}")
+ self.cur_slice_spin_box.setObjectName("cur_slice_spin_box")
+ self.horizontalLayout_5.addWidget(self.cur_slice_spin_box, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_of_label.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_slice_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cur_slice_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cur_slice_of_label.setObjectName("cur_slice_of_label")
+ self.horizontalLayout_5.addWidget(self.cur_slice_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_total = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_total.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_slice_total.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_total.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cur_slice_total.setObjectName("cur_slice_total")
+ self.horizontalLayout_5.addWidget(self.cur_slice_total, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_5.setStretch(0, 1)
+ self.verticalLayout_2.addLayout(self.horizontalLayout_5)
+ self.verticalLayout_5.addLayout(self.verticalLayout_2)
+ self.voiAlphaLayout_2 = QtWidgets.QVBoxLayout()
+ self.voiAlphaLayout_2.setObjectName("voiAlphaLayout_2")
+ self.alpha_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.alpha_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.alpha_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.alpha_label.setScaledContents(False)
+ self.alpha_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.alpha_label.setWordWrap(True)
+ self.alpha_label.setObjectName("alpha_label")
+ self.voiAlphaLayout_2.addWidget(self.alpha_label)
+ self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+ self.alpha_status = QtWidgets.QProgressBar(parent=self.horizontalLayoutWidget_4)
+ self.alpha_status.setMinimumSize(QtCore.QSize(285, 0))
+ self.alpha_status.setMaximumSize(QtCore.QSize(285, 16777215))
+ self.alpha_status.setProperty("value", 24)
+ self.alpha_status.setObjectName("alpha_status")
+ self.horizontalLayout_4.addWidget(self.alpha_status, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_spin_box = QtWidgets.QSpinBox(parent=self.horizontalLayoutWidget_4)
+ font = QtGui.QFont()
+ font.setPointSize(13)
+ self.alpha_spin_box.setFont(font)
+ self.alpha_spin_box.setStyleSheet("QSpinBox{\n"
+" background-color: white,\n"
+"}")
+ self.alpha_spin_box.setObjectName("alpha_spin_box")
+ self.horizontalLayout_4.addWidget(self.alpha_spin_box, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.alpha_of_label.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.alpha_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.alpha_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.alpha_of_label.setObjectName("alpha_of_label")
+ self.horizontalLayout_4.addWidget(self.alpha_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_total = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.alpha_total.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.alpha_total.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_total.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.alpha_total.setObjectName("alpha_total")
+ self.horizontalLayout_4.addWidget(self.alpha_total, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_4.setStretch(0, 1)
+ self.horizontalLayout_4.setStretch(1, 1)
+ self.voiAlphaLayout_2.addLayout(self.horizontalLayout_4)
+ self.verticalLayout_5.addLayout(self.voiAlphaLayout_2)
+ self.construct_voi_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.construct_voi_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.construct_voi_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.construct_voi_label.setScaledContents(False)
+ self.construct_voi_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.construct_voi_label.setWordWrap(True)
+ self.construct_voi_label.setObjectName("construct_voi_label")
+ self.verticalLayout_5.addWidget(self.construct_voi_label)
+ self.drawVoiLayout_2 = QtWidgets.QGridLayout()
+ self.drawVoiLayout_2.setObjectName("drawVoiLayout_2")
+ self.undo_last_pt_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.undo_last_pt_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.undo_last_pt_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.undo_last_pt_button.setCheckable(False)
+ self.undo_last_pt_button.setObjectName("undo_last_pt_button")
+ self.drawVoiLayout_2.addWidget(self.undo_last_pt_button, 0, 1, 1, 1)
+ self.interpolate_voi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.interpolate_voi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.interpolate_voi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.interpolate_voi_button.setCheckable(False)
+ self.interpolate_voi_button.setObjectName("interpolate_voi_button")
+ self.drawVoiLayout_2.addWidget(self.interpolate_voi_button, 1, 1, 1, 1)
+ self.draw_roi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.draw_roi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.draw_roi_button.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.draw_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"QPushButton:checked {\n"
+" color:white; \n"
+" font-size: 16px;\n"
+" background: rgb(45, 0, 110);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.draw_roi_button.setCheckable(True)
+ self.draw_roi_button.setChecked(False)
+ self.draw_roi_button.setObjectName("draw_roi_button")
+ self.drawVoiLayout_2.addWidget(self.draw_roi_button, 0, 0, 1, 1)
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.undo_last_roi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.undo_last_roi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.undo_last_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.undo_last_roi_button.setCheckable(False)
+ self.undo_last_roi_button.setObjectName("undo_last_roi_button")
+ self.horizontalLayout.addWidget(self.undo_last_roi_button)
+ self.close_roi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.close_roi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.close_roi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.close_roi_button.setCheckable(False)
+ self.close_roi_button.setObjectName("close_roi_button")
+ self.horizontalLayout.addWidget(self.close_roi_button)
+ self.drawVoiLayout_2.addLayout(self.horizontalLayout, 1, 0, 1, 1)
+ self.verticalLayout_5.addLayout(self.drawVoiLayout_2)
+ self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_2.setContentsMargins(-1, -1, 0, 0)
+ self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+ self.restart_voi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.restart_voi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.restart_voi_button.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.restart_voi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.restart_voi_button.setCheckable(False)
+ self.restart_voi_button.setObjectName("restart_voi_button")
+ self.horizontalLayout_2.addWidget(self.restart_voi_button)
+ self.save_voi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.save_voi_button.setMinimumSize(QtCore.QSize(0, 36))
+ self.save_voi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.save_voi_button.setCheckable(False)
+ self.save_voi_button.setObjectName("save_voi_button")
+ self.horizontalLayout_2.addWidget(self.save_voi_button)
+ self.verticalLayout_5.addLayout(self.horizontalLayout_2)
+ self.interp_loading_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.interp_loading_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: green;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.interp_loading_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.interp_loading_label.setScaledContents(False)
+ self.interp_loading_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.interp_loading_label.setWordWrap(True)
+ self.interp_loading_label.setObjectName("interp_loading_label")
+ self.verticalLayout_5.addWidget(self.interp_loading_label)
+ self.saving_voi_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.saving_voi_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: green;\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.saving_voi_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.saving_voi_label.setScaledContents(False)
+ self.saving_voi_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.saving_voi_label.setWordWrap(True)
+ self.saving_voi_label.setObjectName("saving_voi_label")
+ self.verticalLayout_5.addWidget(self.saving_voi_label)
+ self.gridLayout = QtWidgets.QGridLayout()
+ self.gridLayout.setObjectName("gridLayout")
+ self.save_folder_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.save_folder_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_folder_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_folder_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_folder_input.setObjectName("save_folder_input")
+ self.gridLayout.addWidget(self.save_folder_input, 0, 1, 1, 1)
+ self.dest_folder_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.dest_folder_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.dest_folder_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.dest_folder_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.dest_folder_label.setObjectName("dest_folder_label")
+ self.gridLayout.addWidget(self.dest_folder_label, 0, 0, 1, 1)
+ self.chooseImageButtonsLayout_2 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_2.setSpacing(10)
+ self.chooseImageButtonsLayout_2.setObjectName("chooseImageButtonsLayout_2")
+ self.choose_save_folder_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.choose_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_save_folder_button.setObjectName("choose_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.choose_save_folder_button)
+ self.clear_save_folder_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.clear_save_folder_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_save_folder_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_save_folder_button.setObjectName("clear_save_folder_button")
+ self.chooseImageButtonsLayout_2.addWidget(self.clear_save_folder_button)
+ self.gridLayout.addLayout(self.chooseImageButtonsLayout_2, 0, 2, 1, 1)
+ self.voi_name_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.voi_name_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.voi_name_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.voi_name_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.voi_name_label.setObjectName("voi_name_label")
+ self.gridLayout.addWidget(self.voi_name_label, 1, 0, 1, 1)
+ self.save_name_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.save_name_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.save_name_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.save_name_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.save_name_input.setObjectName("save_name_input")
+ self.gridLayout.addWidget(self.save_name_input, 1, 1, 1, 1)
+ self.chooseImageButtonsLayout_4 = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout_4.setObjectName("chooseImageButtonsLayout_4")
+ self.export_voi_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.export_voi_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.export_voi_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.export_voi_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.export_voi_button.setObjectName("export_voi_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.export_voi_button)
+ self.back_from_save_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.back_from_save_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_from_save_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_from_save_button.setObjectName("back_from_save_button")
+ self.chooseImageButtonsLayout_4.addWidget(self.back_from_save_button)
+ self.gridLayout.addLayout(self.chooseImageButtonsLayout_4, 1, 2, 1, 1)
+ self.verticalLayout_5.addLayout(self.gridLayout)
+ self.voi_layout.addLayout(self.verticalLayout_5, 1, 0, 1, 1)
+ self.voi_layout.setColumnStretch(0, 1)
+ self.voi_layout.setColumnStretch(1, 1)
+ self.full_screen_layout.addLayout(self.voi_layout)
+
+ self.retranslateUi(voi_drawer)
+ QtCore.QMetaObject.connectSlotsByName(voi_drawer)
+
+ def retranslateUi(self, voi_drawer):
+ _translate = QtCore.QCoreApplication.translate
+ voi_drawer.setWindowTitle(_translate("voi_drawer", "Draw Volume of Interest"))
+ self.sidebar.setToolTip(_translate("voi_drawer", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("voi_drawer", "Image Selection:"))
+ self.imageLabel.setText(_translate("voi_drawer", "Image:"))
+ self.phantomLabel.setText(_translate("voi_drawer", "Phantom:"))
+ self.image_path_input.setText(_translate("voi_drawer", "Sample filename "))
+ self.phantom_path_input.setText(_translate("voi_drawer", "Sample filename "))
+ self.roiSidebarLabel.setText(_translate("voi_drawer", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("voi_drawer", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("voi_drawer", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("voi_drawer", "Analysis Parameter Selection"))
+ self.observing_label.setText(_translate("voi_drawer", "Observing!"))
+ self.back_button.setText(_translate("voi_drawer", "Back"))
+ self.navigating_label.setText(_translate("voi_drawer", "Navigating!"))
+ self.toggle_crosshair_visibility_button.setText(_translate("voi_drawer", "Show/Hide Cross"))
+ self.sag_plane_label.setText(_translate("voi_drawer", "Sagittal Plane"))
+ self.sag_frame_num.setText(_translate("voi_drawer", "0"))
+ self.sag_of_label.setText(_translate("voi_drawer", "of"))
+ self.sag_total_frames.setText(_translate("voi_drawer", "0"))
+ self.ax_plane_label.setText(_translate("voi_drawer", "Axial Plane"))
+ self.ax_frame_num.setText(_translate("voi_drawer", "0"))
+ self.ax_of_label.setText(_translate("voi_drawer", "of"))
+ self.ax_total_frames.setText(_translate("voi_drawer", "0"))
+ self.cor_plane_label.setText(_translate("voi_drawer", "Coronal Plane"))
+ self.cor_frame_num.setText(_translate("voi_drawer", "0"))
+ self.cor_of_label.setText(_translate("voi_drawer", "of"))
+ self.cor_total_frames.setText(_translate("voi_drawer", "0"))
+ self.cur_slice_label.setText(_translate("voi_drawer", "Current Slice (in seconds):"))
+ self.cur_slice_of_label.setText(_translate("voi_drawer", "of"))
+ self.cur_slice_total.setText(_translate("voi_drawer", "0"))
+ self.alpha_label.setText(_translate("voi_drawer", "VOI Alpha:"))
+ self.alpha_of_label.setText(_translate("voi_drawer", "of"))
+ self.alpha_total.setText(_translate("voi_drawer", "255"))
+ self.construct_voi_label.setText(_translate("voi_drawer", "Construct Volume of Interest (VOI):\n"
+"For best results, draw 1 ROI in each plane before interpolating"))
+ self.undo_last_pt_button.setText(_translate("voi_drawer", "Undo Last Point"))
+ self.interpolate_voi_button.setText(_translate("voi_drawer", "Interpolate VOI"))
+ self.draw_roi_button.setText(_translate("voi_drawer", "Draw ROI"))
+ self.undo_last_roi_button.setText(_translate("voi_drawer", "Undo Last ROI"))
+ self.close_roi_button.setText(_translate("voi_drawer", "Close ROI"))
+ self.restart_voi_button.setText(_translate("voi_drawer", "Restart VOI"))
+ self.save_voi_button.setText(_translate("voi_drawer", "Save VOI"))
+ self.interp_loading_label.setText(_translate("voi_drawer", "Interpolation Loading..."))
+ self.saving_voi_label.setText(_translate("voi_drawer", "Saving VOI..."))
+ self.dest_folder_label.setText(_translate("voi_drawer", "Dest Folder"))
+ self.choose_save_folder_button.setText(_translate("voi_drawer", "Choose Folder"))
+ self.clear_save_folder_button.setText(_translate("voi_drawer", "Clear Path"))
+ self.voi_name_label.setText(_translate("voi_drawer", "VOI Name"))
+ self.export_voi_button.setText(_translate("voi_drawer", "Save"))
+ self.back_from_save_button.setText(_translate("voi_drawer", "Back"))
diff --git a/src/qus/seg_loading/ui/voi_preview_ui.py b/src/qus/seg_loading/ui/voi_preview_ui.py
new file mode 100644
index 0000000..b21648a
--- /dev/null
+++ b/src/qus/seg_loading/ui/voi_preview_ui.py
@@ -0,0 +1,684 @@
+# Form implementation generated from reading ui file 'src\qus\seg_loading\ui\voi_preview.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_confirm_voi(object):
+ def setupUi(self, confirm_voi):
+ confirm_voi.setObjectName("confirm_voi")
+ confirm_voi.resize(1512, 823)
+ confirm_voi.setMinimumSize(QtCore.QSize(0, 0))
+ confirm_voi.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=confirm_voi)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(10, -200, 1636, 951))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(49, 0, 124);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ self.observing_label = QtWidgets.QLabel(parent=self.gridFrame)
+ self.observing_label.setStyleSheet("QLabel { background-color : rgb(42, 42, 42); color : red; }")
+ self.observing_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.observing_label.setObjectName("observing_label")
+ self.backButtonGrid.addWidget(self.observing_label, 1, 0, 1, 1)
+ spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem, 4, 1, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem1, 3, 0, 1, 1)
+ self.navigating_label = QtWidgets.QLabel(parent=self.gridFrame)
+ self.navigating_label.setStyleSheet("QLabel { background-color : rgb(42, 42, 42); color : green; }")
+ self.navigating_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.navigating_label.setObjectName("navigating_label")
+ self.backButtonGrid.addWidget(self.navigating_label, 0, 0, 1, 1)
+ self.toggle_crosshair_visibility_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.toggle_crosshair_visibility_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.toggle_crosshair_visibility_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.toggle_crosshair_visibility_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.toggle_crosshair_visibility_button.setObjectName("toggle_crosshair_visibility_button")
+ self.backButtonGrid.addWidget(self.toggle_crosshair_visibility_button, 4, 2, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.voi_layout = QtWidgets.QGridLayout()
+ self.voi_layout.setObjectName("voi_layout")
+ self.verticalLayout_6 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_6.setObjectName("verticalLayout_6")
+ self.sag_plane_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_plane_label.sizePolicy().hasHeightForWidth())
+ self.sag_plane_label.setSizePolicy(sizePolicy)
+ self.sag_plane_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_plane_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.sag_plane_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_plane_label.setObjectName("sag_plane_label")
+ self.verticalLayout_6.addWidget(self.sag_plane_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_plane = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(1)
+ sizePolicy.setVerticalStretch(1)
+ sizePolicy.setHeightForWidth(self.sag_plane.sizePolicy().hasHeightForWidth())
+ self.sag_plane.setSizePolicy(sizePolicy)
+ self.sag_plane.setMinimumSize(QtCore.QSize(321, 301))
+ self.sag_plane.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+ self.sag_plane.setMouseTracking(True)
+ self.sag_plane.setFrameShape(QtWidgets.QFrame.Shape.Box)
+ self.sag_plane.setText("")
+ self.sag_plane.setObjectName("sag_plane")
+ self.verticalLayout_6.addWidget(self.sag_plane)
+ self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_7.setSpacing(5)
+ self.horizontalLayout_7.setObjectName("horizontalLayout_7")
+ self.sag_frame_num = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_frame_num.sizePolicy().hasHeightForWidth())
+ self.sag_frame_num.setSizePolicy(sizePolicy)
+ self.sag_frame_num.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_frame_num.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.sag_frame_num.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_frame_num.setObjectName("sag_frame_num")
+ self.horizontalLayout_7.addWidget(self.sag_frame_num, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_of_label.sizePolicy().hasHeightForWidth())
+ self.sag_of_label.setSizePolicy(sizePolicy)
+ self.sag_of_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.sag_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_of_label.setObjectName("sag_of_label")
+ self.horizontalLayout_7.addWidget(self.sag_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_total_frames = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.sag_total_frames.sizePolicy().hasHeightForWidth())
+ self.sag_total_frames.setSizePolicy(sizePolicy)
+ self.sag_total_frames.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.sag_total_frames.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.sag_total_frames.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.sag_total_frames.setObjectName("sag_total_frames")
+ self.horizontalLayout_7.addWidget(self.sag_total_frames, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_7.setStretch(0, 1)
+ self.horizontalLayout_7.setStretch(2, 1)
+ self.verticalLayout_6.addLayout(self.horizontalLayout_7)
+ self.voi_layout.addLayout(self.verticalLayout_6, 0, 1, 1, 1)
+ self.verticalLayout_4 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_4.setObjectName("verticalLayout_4")
+ self.ax_plane_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_plane_label.sizePolicy().hasHeightForWidth())
+ self.ax_plane_label.setSizePolicy(sizePolicy)
+ self.ax_plane_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_plane_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.ax_plane_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_plane_label.setObjectName("ax_plane_label")
+ self.verticalLayout_4.addWidget(self.ax_plane_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_plane = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(1)
+ sizePolicy.setVerticalStretch(1)
+ sizePolicy.setHeightForWidth(self.ax_plane.sizePolicy().hasHeightForWidth())
+ self.ax_plane.setSizePolicy(sizePolicy)
+ self.ax_plane.setMinimumSize(QtCore.QSize(321, 301))
+ self.ax_plane.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+ self.ax_plane.setMouseTracking(True)
+ self.ax_plane.setFrameShape(QtWidgets.QFrame.Shape.Box)
+ self.ax_plane.setText("")
+ self.ax_plane.setObjectName("ax_plane")
+ self.verticalLayout_4.addWidget(self.ax_plane)
+ self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_6.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetDefaultConstraint)
+ self.horizontalLayout_6.setSpacing(5)
+ self.horizontalLayout_6.setObjectName("horizontalLayout_6")
+ self.ax_frame_num = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_frame_num.sizePolicy().hasHeightForWidth())
+ self.ax_frame_num.setSizePolicy(sizePolicy)
+ self.ax_frame_num.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_frame_num.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.ax_frame_num.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_frame_num.setObjectName("ax_frame_num")
+ self.horizontalLayout_6.addWidget(self.ax_frame_num, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_of_label.sizePolicy().hasHeightForWidth())
+ self.ax_of_label.setSizePolicy(sizePolicy)
+ self.ax_of_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.ax_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_of_label.setObjectName("ax_of_label")
+ self.horizontalLayout_6.addWidget(self.ax_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_total_frames = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.ax_total_frames.sizePolicy().hasHeightForWidth())
+ self.ax_total_frames.setSizePolicy(sizePolicy)
+ self.ax_total_frames.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.ax_total_frames.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.ax_total_frames.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.ax_total_frames.setObjectName("ax_total_frames")
+ self.horizontalLayout_6.addWidget(self.ax_total_frames, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_6.setStretch(0, 1)
+ self.horizontalLayout_6.setStretch(2, 1)
+ self.verticalLayout_4.addLayout(self.horizontalLayout_6)
+ self.voi_layout.addLayout(self.verticalLayout_4, 0, 0, 1, 1)
+ self.verticalLayout_7 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_7.setObjectName("verticalLayout_7")
+ self.cor_plane_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_plane_label.sizePolicy().hasHeightForWidth())
+ self.cor_plane_label.setSizePolicy(sizePolicy)
+ self.cor_plane_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_plane_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cor_plane_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_plane_label.setObjectName("cor_plane_label")
+ self.verticalLayout_7.addWidget(self.cor_plane_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_plane = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
+ sizePolicy.setHorizontalStretch(1)
+ sizePolicy.setVerticalStretch(1)
+ sizePolicy.setHeightForWidth(self.cor_plane.sizePolicy().hasHeightForWidth())
+ self.cor_plane.setSizePolicy(sizePolicy)
+ self.cor_plane.setMinimumSize(QtCore.QSize(321, 301))
+ self.cor_plane.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.ArrowCursor))
+ self.cor_plane.setMouseTracking(True)
+ self.cor_plane.setFrameShape(QtWidgets.QFrame.Shape.Box)
+ self.cor_plane.setText("")
+ self.cor_plane.setObjectName("cor_plane")
+ self.verticalLayout_7.addWidget(self.cor_plane)
+ self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_8.setSpacing(5)
+ self.horizontalLayout_8.setObjectName("horizontalLayout_8")
+ self.cor_frame_num = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_frame_num.sizePolicy().hasHeightForWidth())
+ self.cor_frame_num.setSizePolicy(sizePolicy)
+ self.cor_frame_num.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_frame_num.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cor_frame_num.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_frame_num.setObjectName("cor_frame_num")
+ self.horizontalLayout_8.addWidget(self.cor_frame_num, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_of_label.sizePolicy().hasHeightForWidth())
+ self.cor_of_label.setSizePolicy(sizePolicy)
+ self.cor_of_label.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cor_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_of_label.setObjectName("cor_of_label")
+ self.horizontalLayout_8.addWidget(self.cor_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_total_frames = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.cor_total_frames.sizePolicy().hasHeightForWidth())
+ self.cor_total_frames.setSizePolicy(sizePolicy)
+ self.cor_total_frames.setStyleSheet("QLabel {\n"
+" font-size: 15px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cor_total_frames.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cor_total_frames.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cor_total_frames.setObjectName("cor_total_frames")
+ self.horizontalLayout_8.addWidget(self.cor_total_frames, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_8.setStretch(0, 1)
+ self.horizontalLayout_8.setStretch(2, 1)
+ self.verticalLayout_7.addLayout(self.horizontalLayout_8)
+ self.voi_layout.addLayout(self.verticalLayout_7, 1, 1, 1, 1)
+ self.verticalLayout_5 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_5.setContentsMargins(10, -1, 10, 20)
+ self.verticalLayout_5.setObjectName("verticalLayout_5")
+ self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+ self.verticalLayout_2.setObjectName("verticalLayout_2")
+ self.cur_slice_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_slice_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.cur_slice_label.setScaledContents(False)
+ self.cur_slice_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cur_slice_label.setWordWrap(True)
+ self.cur_slice_label.setObjectName("cur_slice_label")
+ self.verticalLayout_2.addWidget(self.cur_slice_label)
+ self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_5.setObjectName("horizontalLayout_5")
+ self.cur_slice_slider = QtWidgets.QSlider(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_slider.setMinimumSize(QtCore.QSize(285, 0))
+ self.cur_slice_slider.setMaximumSize(QtCore.QSize(285, 16777215))
+ self.cur_slice_slider.setStyleSheet("QSlider {\n"
+" color: white;\n"
+"}")
+ self.cur_slice_slider.setOrientation(QtCore.Qt.Orientation.Horizontal)
+ self.cur_slice_slider.setObjectName("cur_slice_slider")
+ self.horizontalLayout_5.addWidget(self.cur_slice_slider, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_spin_box = QtWidgets.QDoubleSpinBox(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_spin_box.setMaximumSize(QtCore.QSize(70, 16777215))
+ self.cur_slice_spin_box.setStyleSheet("QDoubleSpinBox {\n"
+" background: white;\n"
+" color: black;\n"
+"}")
+ self.cur_slice_spin_box.setObjectName("cur_slice_spin_box")
+ self.horizontalLayout_5.addWidget(self.cur_slice_spin_box, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_of_label.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_slice_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.cur_slice_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cur_slice_of_label.setObjectName("cur_slice_of_label")
+ self.horizontalLayout_5.addWidget(self.cur_slice_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_total = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.cur_slice_total.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.cur_slice_total.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.cur_slice_total.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.cur_slice_total.setObjectName("cur_slice_total")
+ self.horizontalLayout_5.addWidget(self.cur_slice_total, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_5.setStretch(0, 1)
+ self.verticalLayout_2.addLayout(self.horizontalLayout_5)
+ self.verticalLayout_5.addLayout(self.verticalLayout_2)
+ self.voiAlphaLayout_2 = QtWidgets.QVBoxLayout()
+ self.voiAlphaLayout_2.setObjectName("voiAlphaLayout_2")
+ self.alpha_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.alpha_label.setStyleSheet("QLabel {\n"
+" font-size: 20px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.alpha_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.alpha_label.setScaledContents(False)
+ self.alpha_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.alpha_label.setWordWrap(True)
+ self.alpha_label.setObjectName("alpha_label")
+ self.voiAlphaLayout_2.addWidget(self.alpha_label)
+ self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+ self.alpha_status = QtWidgets.QProgressBar(parent=self.horizontalLayoutWidget_4)
+ self.alpha_status.setMinimumSize(QtCore.QSize(285, 0))
+ self.alpha_status.setMaximumSize(QtCore.QSize(285, 16777215))
+ self.alpha_status.setProperty("value", 24)
+ self.alpha_status.setObjectName("alpha_status")
+ self.horizontalLayout_4.addWidget(self.alpha_status, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_spin_box = QtWidgets.QSpinBox(parent=self.horizontalLayoutWidget_4)
+ font = QtGui.QFont()
+ font.setPointSize(13)
+ self.alpha_spin_box.setFont(font)
+ self.alpha_spin_box.setStyleSheet("QSpinBox{\n"
+" background-color: white,\n"
+"}")
+ self.alpha_spin_box.setObjectName("alpha_spin_box")
+ self.horizontalLayout_4.addWidget(self.alpha_spin_box, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_of_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.alpha_of_label.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.alpha_of_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.alpha_of_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.alpha_of_label.setObjectName("alpha_of_label")
+ self.horizontalLayout_4.addWidget(self.alpha_of_label, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_total = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.alpha_total.setStyleSheet("QLabel {\n"
+" font-size: 17px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.alpha_total.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.alpha_total.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.alpha_total.setObjectName("alpha_total")
+ self.horizontalLayout_4.addWidget(self.alpha_total, 0, QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.horizontalLayout_4.setStretch(0, 1)
+ self.horizontalLayout_4.setStretch(1, 1)
+ self.voiAlphaLayout_2.addLayout(self.horizontalLayout_4)
+ self.verticalLayout_5.addLayout(self.voiAlphaLayout_2)
+ self.confirmation_frame_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.confirmation_frame_label.setMinimumSize(QtCore.QSize(0, 0))
+ self.confirmation_frame_label.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.confirmation_frame_label.setStyleSheet("QLabel {\n"
+" font-size: 18px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.confirmation_frame_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.confirmation_frame_label.setScaledContents(False)
+ self.confirmation_frame_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.confirmation_frame_label.setWordWrap(True)
+ self.confirmation_frame_label.setObjectName("confirmation_frame_label")
+ self.verticalLayout_5.addWidget(self.confirmation_frame_label)
+ self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+ self.horizontalLayout_2.setContentsMargins(-1, -1, 0, 0)
+ self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+ self.confirm_seg_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.confirm_seg_button.setMinimumSize(QtCore.QSize(221, 41))
+ self.confirm_seg_button.setMaximumSize(QtCore.QSize(221, 41))
+ self.confirm_seg_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.confirm_seg_button.setCheckable(True)
+ self.confirm_seg_button.setChecked(False)
+ self.confirm_seg_button.setObjectName("confirm_seg_button")
+ self.horizontalLayout_2.addWidget(self.confirm_seg_button)
+ self.back_from_confirm_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.back_from_confirm_button.setMinimumSize(QtCore.QSize(241, 41))
+ self.back_from_confirm_button.setMaximumSize(QtCore.QSize(241, 41))
+ self.back_from_confirm_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}\n"
+"QPushButton:checked {\n"
+" color:white; \n"
+" font-size: 16px;\n"
+" background: rgb(45, 0, 110);\n"
+" border-radius: 15px;\n"
+"}\n"
+"")
+ self.back_from_confirm_button.setCheckable(False)
+ self.back_from_confirm_button.setChecked(False)
+ self.back_from_confirm_button.setObjectName("back_from_confirm_button")
+ self.horizontalLayout_2.addWidget(self.back_from_confirm_button)
+ self.verticalLayout_5.addLayout(self.horizontalLayout_2)
+ self.voi_layout.addLayout(self.verticalLayout_5, 1, 0, 1, 1)
+ self.voi_layout.setColumnStretch(0, 1)
+ self.voi_layout.setColumnStretch(1, 1)
+ self.full_screen_layout.addLayout(self.voi_layout)
+
+ self.retranslateUi(confirm_voi)
+ QtCore.QMetaObject.connectSlotsByName(confirm_voi)
+
+ def retranslateUi(self, confirm_voi):
+ _translate = QtCore.QCoreApplication.translate
+ confirm_voi.setWindowTitle(_translate("confirm_voi", "Draw Volume of Interest"))
+ self.sidebar.setToolTip(_translate("confirm_voi", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("confirm_voi", "Image Selection:"))
+ self.imageLabel.setText(_translate("confirm_voi", "Image:"))
+ self.phantomLabel.setText(_translate("confirm_voi", "Phantom:"))
+ self.image_path_input.setText(_translate("confirm_voi", "Sample filename "))
+ self.phantom_path_input.setText(_translate("confirm_voi", "Sample filename "))
+ self.roiSidebarLabel.setText(_translate("confirm_voi", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("confirm_voi", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("confirm_voi", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("confirm_voi", "Analysis Parameter Selection"))
+ self.observing_label.setText(_translate("confirm_voi", "Observing!"))
+ self.navigating_label.setText(_translate("confirm_voi", "Navigating!"))
+ self.toggle_crosshair_visibility_button.setText(_translate("confirm_voi", "Show/Hide Cross"))
+ self.sag_plane_label.setText(_translate("confirm_voi", "Sagittal Plane"))
+ self.sag_frame_num.setText(_translate("confirm_voi", "0"))
+ self.sag_of_label.setText(_translate("confirm_voi", "of"))
+ self.sag_total_frames.setText(_translate("confirm_voi", "0"))
+ self.ax_plane_label.setText(_translate("confirm_voi", "Axial Plane"))
+ self.ax_frame_num.setText(_translate("confirm_voi", "0"))
+ self.ax_of_label.setText(_translate("confirm_voi", "of"))
+ self.ax_total_frames.setText(_translate("confirm_voi", "0"))
+ self.cor_plane_label.setText(_translate("confirm_voi", "Coronal Plane"))
+ self.cor_frame_num.setText(_translate("confirm_voi", "0"))
+ self.cor_of_label.setText(_translate("confirm_voi", "of"))
+ self.cor_total_frames.setText(_translate("confirm_voi", "0"))
+ self.cur_slice_label.setText(_translate("confirm_voi", "Current Slice (in seconds):"))
+ self.cur_slice_of_label.setText(_translate("confirm_voi", "of"))
+ self.cur_slice_total.setText(_translate("confirm_voi", "0"))
+ self.alpha_label.setText(_translate("confirm_voi", "VOI Alpha:"))
+ self.alpha_of_label.setText(_translate("confirm_voi", "of"))
+ self.alpha_total.setText(_translate("confirm_voi", "255"))
+ self.confirmation_frame_label.setText(_translate("confirm_voi", "Frame: 0"))
+ self.confirm_seg_button.setText(_translate("confirm_voi", "Confirm"))
+ self.back_from_confirm_button.setText(_translate("confirm_voi", "Back"))
diff --git a/src/qus/visualization_loading/ui/visualization_function_selection_ui.py b/src/qus/visualization_loading/ui/visualization_function_selection_ui.py
new file mode 100644
index 0000000..44db660
--- /dev/null
+++ b/src/qus/visualization_loading/ui/visualization_function_selection_ui.py
@@ -0,0 +1,346 @@
+# Form implementation generated from reading ui file 'src\qus\visualization_loading\ui\visualization_function_selection.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_visualizationFunctionSelection(object):
+ def setupUi(self, visualizationFunctionSelection):
+ visualizationFunctionSelection.setObjectName("visualizationFunctionSelection")
+ visualizationFunctionSelection.resize(1400, 1070)
+ visualizationFunctionSelection.setMinimumSize(QtCore.QSize(1400, 662))
+ visualizationFunctionSelection.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.horizontalLayoutWidget_4 = QtWidgets.QWidget(parent=visualizationFunctionSelection)
+ self.horizontalLayoutWidget_4.setGeometry(QtCore.QRect(50, 10, 1151, 801))
+ self.horizontalLayoutWidget_4.setObjectName("horizontalLayoutWidget_4")
+ self.full_screen_layout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_4)
+ self.full_screen_layout.setContentsMargins(0, 0, 0, 0)
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=self.horizontalLayoutWidget_4)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.segmentationSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.segmentationSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.segmentationSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.segmentationSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.segmentationSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.segmentationSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.segmentationSidebar.setObjectName("segmentationSidebar")
+ self.segmentationSidebarLabel = QtWidgets.QLabel(parent=self.segmentationSidebar)
+ self.segmentationSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.segmentationSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.segmentationSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.segmentationSidebarLabel.setObjectName("segmentationSidebarLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=self.horizontalLayoutWidget_4)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid.addWidget(self.back_button, 1, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.visualization_function_layout = QtWidgets.QVBoxLayout()
+ self.visualization_function_layout.setContentsMargins(30, 30, 10, 10)
+ self.visualization_function_layout.setSpacing(20)
+ self.visualization_function_layout.setObjectName("visualization_function_layout")
+ self.analysis_function_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.analysis_function_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.analysis_function_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.analysis_function_label.setScaledContents(False)
+ self.analysis_function_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysis_function_label.setWordWrap(True)
+ self.analysis_function_label.setObjectName("analysis_function_label")
+ self.visualization_function_layout.addWidget(self.analysis_function_label)
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
+ self.funcs_list = QtWidgets.QListWidget(parent=self.horizontalLayoutWidget_4)
+ self.funcs_list.setObjectName("funcs_list")
+ self.horizontalLayout.addWidget(self.funcs_list)
+ self.chooseImgLayout = QtWidgets.QVBoxLayout()
+ self.chooseImgLayout.setContentsMargins(5, -1, 5, -1)
+ self.chooseImgLayout.setObjectName("chooseImgLayout")
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem2)
+ self.dest_path_label = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.dest_path_label.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.dest_path_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.dest_path_label.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.dest_path_label.setObjectName("dest_path_label")
+ self.chooseImgLayout.addWidget(self.dest_path_label)
+ self.dest_path_input = QtWidgets.QLineEdit(parent=self.horizontalLayoutWidget_4)
+ self.dest_path_input.setMinimumSize(QtCore.QSize(201, 31))
+ self.dest_path_input.setMaximumSize(QtCore.QSize(401, 31))
+ self.dest_path_input.setStyleSheet("QLineEdit {\n"
+" background-color: rgb(249, 249, 249);\n"
+" color: black;\n"
+"}")
+ self.dest_path_input.setObjectName("dest_path_input")
+ self.chooseImgLayout.addWidget(self.dest_path_input, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.chooseImageButtonsLayout = QtWidgets.QHBoxLayout()
+ self.chooseImageButtonsLayout.setSpacing(1)
+ self.chooseImageButtonsLayout.setObjectName("chooseImageButtonsLayout")
+ self.choose_dest_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.choose_dest_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.choose_dest_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.choose_dest_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.choose_dest_path_button.setObjectName("choose_dest_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.choose_dest_path_button, 0, QtCore.Qt.AlignmentFlag.AlignRight)
+ self.clear_dest_path_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.clear_dest_path_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.clear_dest_path_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.clear_dest_path_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.clear_dest_path_button.setObjectName("clear_dest_path_button")
+ self.chooseImageButtonsLayout.addWidget(self.clear_dest_path_button)
+ self.chooseImgLayout.addLayout(self.chooseImageButtonsLayout)
+ self.clear_dest_path_hint = QtWidgets.QLabel(parent=self.horizontalLayoutWidget_4)
+ self.clear_dest_path_hint.setStyleSheet("QLabel {\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" color: white;\n"
+" font-size: 17px;\n"
+"}")
+ self.clear_dest_path_hint.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.clear_dest_path_hint.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction)
+ self.clear_dest_path_hint.setObjectName("clear_dest_path_hint")
+ self.chooseImgLayout.addWidget(self.clear_dest_path_hint)
+ spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.chooseImgLayout.addItem(spacerItem3)
+ self.horizontalLayout.addLayout(self.chooseImgLayout)
+ self.horizontalLayout.setStretch(0, 10)
+ self.horizontalLayout.setStretch(1, 1)
+ self.visualization_function_layout.addLayout(self.horizontalLayout)
+ self.next_button = QtWidgets.QPushButton(parent=self.horizontalLayoutWidget_4)
+ self.next_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.next_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.next_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.next_button.setObjectName("next_button")
+ self.visualization_function_layout.addWidget(self.next_button, 0, QtCore.Qt.AlignmentFlag.AlignHCenter|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.visualization_function_layout.addItem(spacerItem4)
+ self.visualization_function_layout.setStretch(0, 1)
+ self.visualization_function_layout.setStretch(1, 10)
+ self.visualization_function_layout.setStretch(2, 1)
+ self.visualization_function_layout.setStretch(3, 1)
+ self.full_screen_layout.addLayout(self.visualization_function_layout)
+
+ self.retranslateUi(visualizationFunctionSelection)
+ QtCore.QMetaObject.connectSlotsByName(visualizationFunctionSelection)
+
+ def retranslateUi(self, visualizationFunctionSelection):
+ _translate = QtCore.QCoreApplication.translate
+ visualizationFunctionSelection.setWindowTitle(_translate("visualizationFunctionSelection", "Visualization Configuration Loading"))
+ self.sidebar.setToolTip(_translate("visualizationFunctionSelection", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("visualizationFunctionSelection", "Image Selection:"))
+ self.imageLabel.setText(_translate("visualizationFunctionSelection", "Image:"))
+ self.phantomLabel.setText(_translate("visualizationFunctionSelection", "Phantom:"))
+ self.image_path_input.setText(_translate("visualizationFunctionSelection", "Sample filename "))
+ self.phantom_path_input.setText(_translate("visualizationFunctionSelection", "Sample filename "))
+ self.segmentationSidebarLabel.setText(_translate("visualizationFunctionSelection", "Segmentation Selection"))
+ self.analysisParamsLabel.setText(_translate("visualizationFunctionSelection", "Analysis Parameter Selection"))
+ self.rfAnalysisLabel.setText(_translate("visualizationFunctionSelection", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("visualizationFunctionSelection", "Visualization / Export"))
+ self.back_button.setText(_translate("visualizationFunctionSelection", "Back"))
+ self.analysis_function_label.setText(_translate("visualizationFunctionSelection", "Select visualization functions to run:"))
+ self.dest_path_label.setText(_translate("visualizationFunctionSelection", "Destination folder:"))
+ self.choose_dest_path_button.setText(_translate("visualizationFunctionSelection", "Choose File"))
+ self.clear_dest_path_button.setText(_translate("visualizationFunctionSelection", "Clear Path"))
+ self.clear_dest_path_hint.setText(_translate("visualizationFunctionSelection", "\n"
+"Default destination folder\n"
+"saves results internally.\n"
+"Modify for persistent exporting."))
+ self.next_button.setText(_translate("visualizationFunctionSelection", "Next"))
diff --git a/src/qus/visualization_loading/ui/visualization_preview_2d_ui.py b/src/qus/visualization_loading/ui/visualization_preview_2d_ui.py
new file mode 100644
index 0000000..44a4431
--- /dev/null
+++ b/src/qus/visualization_loading/ui/visualization_preview_2d_ui.py
@@ -0,0 +1,298 @@
+# Form implementation generated from reading ui file 'src\qus\visualization_loading\ui\visualization_preview_2d.ui'
+#
+# Created by: PyQt6 UI code generator 6.9.1
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again. Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_visualization_preview_2d(object):
+ def setupUi(self, visualization_preview_2d):
+ visualization_preview_2d.setObjectName("visualization_preview_2d")
+ visualization_preview_2d.resize(1400, 764)
+ visualization_preview_2d.setMinimumSize(QtCore.QSize(1400, 662))
+ visualization_preview_2d.setStyleSheet("QWidget {\n"
+" background: rgb(42, 42, 42);\n"
+"}")
+ self.main_layout = QtWidgets.QVBoxLayout(visualization_preview_2d)
+ self.main_layout.setContentsMargins(0, 0, 0, 0)
+ self.main_layout.setObjectName("main_layout")
+ self.full_screen_layout = QtWidgets.QHBoxLayout()
+ self.full_screen_layout.setObjectName("full_screen_layout")
+ self.side_bar_layout = QtWidgets.QVBoxLayout()
+ self.side_bar_layout.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMaximumSize)
+ self.side_bar_layout.setSpacing(0)
+ self.side_bar_layout.setObjectName("side_bar_layout")
+ self.sidebar = QtWidgets.QWidget(parent=visualization_preview_2d)
+ self.sidebar.setMinimumSize(QtCore.QSize(341, 601))
+ self.sidebar.setMaximumSize(QtCore.QSize(241, 601))
+ self.sidebar.setStyleSheet("QWidget {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.sidebar.setObjectName("sidebar")
+ self.imageSelectionSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.imageSelectionSidebar.setGeometry(QtCore.QRect(0, 0, 341, 121))
+ self.imageSelectionSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.imageSelectionSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.imageSelectionSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.imageSelectionSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.imageSelectionSidebar.setObjectName("imageSelectionSidebar")
+ self.imageSelectionLabelSidebar = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageSelectionLabelSidebar.setGeometry(QtCore.QRect(70, 0, 191, 51))
+ self.imageSelectionLabelSidebar.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageSelectionLabelSidebar.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageSelectionLabelSidebar.setObjectName("imageSelectionLabelSidebar")
+ self.imageLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.imageLabel.setGeometry(QtCore.QRect(-60, 40, 191, 51))
+ self.imageLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.imageLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.imageLabel.setObjectName("imageLabel")
+ self.phantomLabel = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantomLabel.setGeometry(QtCore.QRect(-50, 70, 191, 51))
+ self.phantomLabel.setStyleSheet("QLabel {\n"
+" font-size: 16px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold\n"
+"}")
+ self.phantomLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.phantomLabel.setObjectName("phantomLabel")
+ self.image_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.image_path_input.setGeometry(QtCore.QRect(100, 40, 241, 51))
+ self.image_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.image_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.image_path_input.setObjectName("image_path_input")
+ self.phantom_path_input = QtWidgets.QLabel(parent=self.imageSelectionSidebar)
+ self.phantom_path_input.setGeometry(QtCore.QRect(100, 70, 241, 51))
+ self.phantom_path_input.setStyleSheet("QLabel {\n"
+" font-size: 14px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+"}")
+ self.phantom_path_input.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.phantom_path_input.setObjectName("phantom_path_input")
+ self.roiSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.roiSidebar.setGeometry(QtCore.QRect(0, 120, 341, 121))
+ self.roiSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.roiSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.roiSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.roiSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.roiSidebar.setObjectName("roiSidebar")
+ self.roiSidebarLabel = QtWidgets.QLabel(parent=self.roiSidebar)
+ self.roiSidebarLabel.setGeometry(QtCore.QRect(0, 40, 341, 51))
+ self.roiSidebarLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.roiSidebarLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.roiSidebarLabel.setObjectName("roiSidebarLabel")
+ self.rfAnalysisSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.rfAnalysisSidebar.setGeometry(QtCore.QRect(0, 360, 341, 121))
+ self.rfAnalysisSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.rfAnalysisSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.rfAnalysisSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.rfAnalysisSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.rfAnalysisSidebar.setObjectName("rfAnalysisSidebar")
+ self.rfAnalysisLabel = QtWidgets.QLabel(parent=self.rfAnalysisSidebar)
+ self.rfAnalysisLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.rfAnalysisLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.rfAnalysisLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.rfAnalysisLabel.setObjectName("rfAnalysisLabel")
+ self.exportResultsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.exportResultsSidebar.setGeometry(QtCore.QRect(0, 480, 341, 121))
+ self.exportResultsSidebar.setMinimumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.exportResultsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.exportResultsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.exportResultsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.exportResultsSidebar.setObjectName("exportResultsSidebar")
+ self.exportResultsLabel = QtWidgets.QLabel(parent=self.exportResultsSidebar)
+ self.exportResultsLabel.setGeometry(QtCore.QRect(20, 30, 301, 51))
+ self.exportResultsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight: bold;\n"
+"}")
+ self.exportResultsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.exportResultsLabel.setObjectName("exportResultsLabel")
+ self.analysisParamsSidebar = QtWidgets.QFrame(parent=self.sidebar)
+ self.analysisParamsSidebar.setGeometry(QtCore.QRect(0, 240, 341, 121))
+ self.analysisParamsSidebar.setMaximumSize(QtCore.QSize(341, 121))
+ self.analysisParamsSidebar.setStyleSheet("QFrame {\n"
+" background-color: rgb(99, 0, 174);\n"
+" border: 1px solid black;\n"
+"}")
+ self.analysisParamsSidebar.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.analysisParamsSidebar.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.analysisParamsSidebar.setObjectName("analysisParamsSidebar")
+ self.analysisParamsLabel = QtWidgets.QLabel(parent=self.analysisParamsSidebar)
+ self.analysisParamsLabel.setGeometry(QtCore.QRect(0, 30, 341, 51))
+ self.analysisParamsLabel.setStyleSheet("QLabel {\n"
+" font-size: 21px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+" border: 0px;\n"
+" font-weight:bold;\n"
+"}")
+ self.analysisParamsLabel.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.analysisParamsLabel.setObjectName("analysisParamsLabel")
+ self.side_bar_layout.addWidget(self.sidebar)
+ self.gridFrame = QtWidgets.QFrame(parent=visualization_preview_2d)
+ self.gridFrame.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame.setObjectName("gridFrame")
+ self.backButtonGrid = QtWidgets.QGridLayout(self.gridFrame)
+ self.backButtonGrid.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid.setObjectName("backButtonGrid")
+ self.gridFrame_2 = QtWidgets.QFrame(parent=self.gridFrame)
+ self.gridFrame_2.setMinimumSize(QtCore.QSize(341, 0))
+ self.gridFrame_2.setMaximumSize(QtCore.QSize(341, 16777215))
+ self.gridFrame_2.setStyleSheet("QFrame {\n"
+" background-color: rgb(28, 0, 101);\n"
+"}")
+ self.gridFrame_2.setObjectName("gridFrame_2")
+ self.backButtonGrid_2 = QtWidgets.QGridLayout(self.gridFrame_2)
+ self.backButtonGrid_2.setSizeConstraint(QtWidgets.QLayout.SizeConstraint.SetMinAndMaxSize)
+ self.backButtonGrid_2.setContentsMargins(10, 10, 10, 10)
+ self.backButtonGrid_2.setObjectName("backButtonGrid_2")
+ spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+ self.backButtonGrid_2.addItem(spacerItem, 0, 0, 1, 1)
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+ self.backButtonGrid_2.addItem(spacerItem1, 1, 1, 1, 1)
+ self.back_button = QtWidgets.QPushButton(parent=self.gridFrame_2)
+ self.back_button.setMinimumSize(QtCore.QSize(131, 41))
+ self.back_button.setMaximumSize(QtCore.QSize(131, 41))
+ self.back_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.back_button.setObjectName("back_button")
+ self.backButtonGrid_2.addWidget(self.back_button, 1, 0, 1, 1)
+ self.backButtonGrid.addWidget(self.gridFrame_2, 0, 0, 1, 1)
+ self.side_bar_layout.addWidget(self.gridFrame)
+ self.full_screen_layout.addLayout(self.side_bar_layout)
+ self.preview_layout = QtWidgets.QVBoxLayout()
+ self.preview_layout.setContentsMargins(30, 10, 30, 10)
+ self.preview_layout.setSpacing(10)
+ self.preview_layout.setObjectName("preview_layout")
+ self.visualization_preview_label = QtWidgets.QLabel(parent=visualization_preview_2d)
+ self.visualization_preview_label.setStyleSheet("QLabel {\n"
+" font-size: 29px;\n"
+" color: rgb(255, 255, 255);\n"
+" background-color: rgba(255, 255, 255, 0);\n"
+"}")
+ self.visualization_preview_label.setTextFormat(QtCore.Qt.TextFormat.AutoText)
+ self.visualization_preview_label.setScaledContents(False)
+ self.visualization_preview_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
+ self.visualization_preview_label.setWordWrap(True)
+ self.visualization_preview_label.setObjectName("visualization_preview_label")
+ self.preview_layout.addWidget(self.visualization_preview_label)
+ self.visualization_dropdown = QtWidgets.QComboBox(parent=visualization_preview_2d)
+ self.visualization_dropdown.setMinimumSize(QtCore.QSize(180, 41))
+ self.visualization_dropdown.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ font = QtGui.QFont()
+ font.setPointSize(16)
+ self.visualization_dropdown.setFont(font)
+ self.visualization_dropdown.setStyleSheet("QComboBox {\n"
+" color: white;\n"
+"}")
+ self.visualization_dropdown.setObjectName("visualization_dropdown")
+ self.preview_layout.addWidget(self.visualization_dropdown)
+ self.visualization_display_frame = QtWidgets.QFrame(parent=visualization_preview_2d)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+ sizePolicy.setHorizontalStretch(10)
+ sizePolicy.setVerticalStretch(10)
+ sizePolicy.setHeightForWidth(self.visualization_display_frame.sizePolicy().hasHeightForWidth())
+ self.visualization_display_frame.setSizePolicy(sizePolicy)
+ self.visualization_display_frame.setMinimumSize(QtCore.QSize(501, 321))
+ self.visualization_display_frame.setMaximumSize(QtCore.QSize(16777215, 16777215))
+ self.visualization_display_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
+ self.visualization_display_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
+ self.visualization_display_frame.setObjectName("visualization_display_frame")
+ self.preview_layout.addWidget(self.visualization_display_frame)
+ self.export_numerical_data_button = QtWidgets.QPushButton(parent=visualization_preview_2d)
+ self.export_numerical_data_button.setMinimumSize(QtCore.QSize(181, 41))
+ self.export_numerical_data_button.setMaximumSize(QtCore.QSize(181, 41))
+ self.export_numerical_data_button.setStyleSheet("QPushButton {\n"
+" color: white;\n"
+" font-size: 16px;\n"
+" background: rgb(90, 37, 255);\n"
+" border-radius: 15px;\n"
+"}")
+ self.export_numerical_data_button.setObjectName("export_numerical_data_button")
+ self.preview_layout.addWidget(self.export_numerical_data_button, 0, QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignVCenter)
+ self.preview_layout.setStretch(0, 1)
+ self.full_screen_layout.addLayout(self.preview_layout)
+ self.main_layout.addLayout(self.full_screen_layout)
+
+ self.retranslateUi(visualization_preview_2d)
+ QtCore.QMetaObject.connectSlotsByName(visualization_preview_2d)
+
+ def retranslateUi(self, visualization_preview_2d):
+ _translate = QtCore.QCoreApplication.translate
+ visualization_preview_2d.setWindowTitle(_translate("visualization_preview_2d", "Select Region of Interest"))
+ self.sidebar.setToolTip(_translate("visualization_preview_2d", "
"))
+ self.imageSelectionLabelSidebar.setText(_translate("visualization_preview_2d", "Image Selection:"))
+ self.imageLabel.setText(_translate("visualization_preview_2d", "Image:"))
+ self.phantomLabel.setText(_translate("visualization_preview_2d", "Phantom:"))
+ self.image_path_input.setText(_translate("visualization_preview_2d", "Sample filename "))
+ self.phantom_path_input.setText(_translate("visualization_preview_2d", "Sample filename "))
+ self.roiSidebarLabel.setText(_translate("visualization_preview_2d", "Segmentation Selection"))
+ self.rfAnalysisLabel.setText(_translate("visualization_preview_2d", "Radio Frequency Data Analysis"))
+ self.exportResultsLabel.setText(_translate("visualization_preview_2d", "Visualization / Export"))
+ self.analysisParamsLabel.setText(_translate("visualization_preview_2d", "Analysis Parameter Selection"))
+ self.back_button.setText(_translate("visualization_preview_2d", "Back"))
+ self.visualization_preview_label.setText(_translate("visualization_preview_2d", "Visualization Previews"))
+ self.export_numerical_data_button.setText(_translate("visualization_preview_2d", "Export Numerical Data"))