small rewrite to impose dry principles
This commit is contained in:
@@ -1,19 +1,22 @@
|
||||
"""
|
||||
Filename: viewerlauncher.py
|
||||
Description: Analysis options launcher for FLARES
|
||||
Description: Viewer launcher window
|
||||
|
||||
Author: Tyler de Zeeuw
|
||||
License: GPL-3.0
|
||||
"""
|
||||
|
||||
# External library imports
|
||||
from PySide6.QtWidgets import QPushButton, QWidget, QVBoxLayout
|
||||
from PySide6.QtCore import QTimer
|
||||
|
||||
from src.analysis.exportcsv import ExportDataAsCSVViewerWidget
|
||||
from src.analysis.group import GroupViewerWidget
|
||||
from src.analysis.groupbrain import GroupBrainViewerWidget
|
||||
from src.analysis.groupfunctionalconnectivity import GroupFunctionalConnectivityWidget
|
||||
from src.analysis.participant import ParticipantViewerWidget
|
||||
from src.analysis.exporttocsv import ExportToCSVWidget
|
||||
from src.analysis.intergroupbrainimage import InterGroupBrainImageWidget
|
||||
from src.analysis.crossgroupbrainimage import CrossGroupBrainImageWidget
|
||||
from src.analysis.intergroupfunctionalconnectivity import InterGroupFunctionalConnectivityWidget
|
||||
from src.analysis.intergroupstats import InterGroupStatsWidget
|
||||
from src.analysis.crossgroupstats import CrossGroupStatsWidget
|
||||
from src.analysis.participantimage import ParticipantImageViewerWidget
|
||||
from src.analysis.participantbrain import ParticipantBrainViewerWidget
|
||||
from src.analysis.participantfoldchannels import ParticipantFoldChannelsWidget
|
||||
from src.analysis.participantfunctionalconnectivity import ParticipantFunctionalConnectivityWidget
|
||||
@@ -21,92 +24,42 @@ from src.shared.shareddata import APP_NAME
|
||||
|
||||
|
||||
class ViewerLauncherWidget(QWidget):
|
||||
def __init__(self, haemo_dict, config_dict, fig_bytes_dict, cha_dict, contrast_results_dict, df_ind, design_matrix, epochs_dict, folding_bypass):
|
||||
def __init__(self, haemo_dict, epochs_dict, cha_dict, df_ind_dict, design_matrix_dict, config_dict, fig_bytes_dict, contrast_results_dict, folding_bypass):
|
||||
super().__init__()
|
||||
self.setWindowTitle(f"Viewer Launcher - {APP_NAME.upper()}")
|
||||
|
||||
group_dict = {
|
||||
file_path: config.get("GROUP", "Unknown")
|
||||
for file_path, config in config_dict.items()
|
||||
}
|
||||
|
||||
def launch(func, btn, *args):
|
||||
func(*args)
|
||||
self._trigger_success(btn)
|
||||
group_dict = {f: c.get("GROUP", "Unknown") for f, c in config_dict.items()}
|
||||
|
||||
btn_data = [
|
||||
("Participant Image Viewer", ParticipantImageViewerWidget, [haemo_dict, fig_bytes_dict], True),
|
||||
("Participant Brain Viewer", ParticipantBrainViewerWidget, [haemo_dict, cha_dict], True),
|
||||
("Participant Fold Channels Viewer", ParticipantFoldChannelsWidget, [haemo_dict, cha_dict], False),
|
||||
("Participant Functional Connectivity Viewer [BETA]", ParticipantFunctionalConnectivityWidget, [haemo_dict, epochs_dict], True),
|
||||
("Inter-Group Functional Connectivity Viewer [BETA]", InterGroupFunctionalConnectivityWidget, [haemo_dict, group_dict, config_dict], True),
|
||||
("Inter-Group Stats Viewer", InterGroupStatsWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict], True),
|
||||
("Cross-Group Stats Viewer", CrossGroupStatsWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict], True),
|
||||
("Inter-Group Brain & Image Viewer", InterGroupBrainImageWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict], True),
|
||||
("Cross-Group Brain & Image Viewer", CrossGroupBrainImageWidget, [haemo_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict], True),
|
||||
("Export To CSV Viewer", ExportToCSVWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, group_dict, contrast_results_dict], True)
|
||||
]
|
||||
|
||||
layout = QVBoxLayout(self)
|
||||
for label, widget_class, args, requires_bypass in btn_data:
|
||||
btn = QPushButton(f"Open {label}")
|
||||
# Connect directly to the generic opener
|
||||
btn.clicked.connect(lambda _, c=widget_class, b=btn, a=args: self._open_viewer(c, b, *a))
|
||||
btn.setEnabled(not (requires_bypass and folding_bypass))
|
||||
layout.addWidget(btn)
|
||||
|
||||
btn1 = QPushButton("Open Participant Viewer")
|
||||
btn1.clicked.connect(lambda: launch(self.open_participant_viewer, btn1, haemo_dict, fig_bytes_dict))
|
||||
btn1.setEnabled(not folding_bypass)
|
||||
def _open_viewer(self, widget_class, btn, *args):
|
||||
# Instantiate and show dynamically
|
||||
self.active_viewer = widget_class(*args)
|
||||
self.active_viewer.show()
|
||||
self._trigger_success(btn)
|
||||
|
||||
btn2 = QPushButton("Open Participant Brain Viewer")
|
||||
btn2.clicked.connect(lambda: launch(self.open_participant_brain_viewer, btn2, haemo_dict, cha_dict))
|
||||
btn2.setEnabled(not folding_bypass)
|
||||
|
||||
btn3 = QPushButton("Open Participant Fold Channels Viewer")
|
||||
btn3.clicked.connect(lambda: launch(self.open_participant_fold_channels_viewer, btn3, haemo_dict, cha_dict))
|
||||
|
||||
btn7 = QPushButton("Open Functional Connectivity Viewer [BETA]")
|
||||
btn7.clicked.connect(lambda: launch(self.open_participant_functional_connectivity_viewer, btn7, haemo_dict, epochs_dict))
|
||||
btn7.setEnabled(not folding_bypass)
|
||||
|
||||
btn8 = QPushButton("Open Group Functional Connectivity Viewer [BETA]")
|
||||
btn8.clicked.connect(lambda: launch(self.open_group_functional_connectivity_viewer, btn8, haemo_dict, group_dict, config_dict))
|
||||
btn8.setEnabled(not folding_bypass)
|
||||
|
||||
btn4 = QPushButton("Open Inter-Group Viewer")
|
||||
btn4.clicked.connect(lambda: launch(self.open_group_viewer, btn4, haemo_dict, cha_dict, df_ind, design_matrix, contrast_results_dict, group_dict))
|
||||
btn4.setEnabled(not folding_bypass)
|
||||
|
||||
btn5 = QPushButton("Open Cross Group Brain Viewer")
|
||||
btn5.clicked.connect(lambda: launch(self.open_group_brain_viewer, btn5, haemo_dict, df_ind, design_matrix, group_dict, contrast_results_dict))
|
||||
btn5.setEnabled(not folding_bypass)
|
||||
|
||||
btn6 = QPushButton("Open Export Data As CSV Viewer")
|
||||
btn6.clicked.connect(lambda: launch(self.open_export_data_as_csv_viewer, btn6, haemo_dict, cha_dict, df_ind, design_matrix, group_dict, contrast_results_dict))
|
||||
btn6.setEnabled(not folding_bypass)
|
||||
|
||||
layout.addWidget(btn1)
|
||||
layout.addWidget(btn2)
|
||||
layout.addWidget(btn3)
|
||||
layout.addWidget(btn7)
|
||||
layout.addWidget(btn8)
|
||||
layout.addWidget(btn4)
|
||||
layout.addWidget(btn5)
|
||||
layout.addWidget(btn6)
|
||||
|
||||
def open_participant_viewer(self, haemo_dict, fig_bytes_dict):
|
||||
self.participant_viewer = ParticipantViewerWidget(haemo_dict, fig_bytes_dict)
|
||||
self.participant_viewer.show()
|
||||
|
||||
def open_participant_brain_viewer(self, haemo_dict, cha_dict):
|
||||
self.participant_brain_viewer = ParticipantBrainViewerWidget(haemo_dict, cha_dict)
|
||||
self.participant_brain_viewer.show()
|
||||
|
||||
def open_participant_fold_channels_viewer(self, haemo_dict, cha_dict):
|
||||
self.participant_fold_channels_viewer = ParticipantFoldChannelsWidget(haemo_dict, cha_dict)
|
||||
self.participant_fold_channels_viewer.show()
|
||||
|
||||
def open_participant_functional_connectivity_viewer(self, haemo_dict, epochs_dict):
|
||||
self.participant_brain_viewer = ParticipantFunctionalConnectivityWidget(haemo_dict, epochs_dict)
|
||||
self.participant_brain_viewer.show()
|
||||
|
||||
def open_group_functional_connectivity_viewer(self, haemo_dict, group, config_dict):
|
||||
self.participant_brain_viewer = GroupFunctionalConnectivityWidget(haemo_dict, group, config_dict)
|
||||
self.participant_brain_viewer.show()
|
||||
|
||||
def open_group_viewer(self, haemo_dict, cha_dict, df_ind, design_matrix, contrast_results_dict, group):
|
||||
self.participant_brain_viewer = GroupViewerWidget(haemo_dict, cha_dict, df_ind, design_matrix, contrast_results_dict, group)
|
||||
self.participant_brain_viewer.show()
|
||||
|
||||
def open_group_brain_viewer(self, haemo_dict, df_ind, design_matrix, group, contrast_results_dict):
|
||||
self.participant_brain_viewer = GroupBrainViewerWidget(haemo_dict, df_ind, design_matrix, group, contrast_results_dict)
|
||||
self.participant_brain_viewer.show()
|
||||
|
||||
def open_export_data_as_csv_viewer(self, haemo_dict, cha_dict, df_ind, design_matrix, group, contrast_results_dict):
|
||||
self.export_data_as_csv_viewer = ExportDataAsCSVViewerWidget(haemo_dict, cha_dict, df_ind, design_matrix, group, contrast_results_dict)
|
||||
self.export_data_as_csv_viewer.show()
|
||||
def _launch(self, func, btn, *args):
|
||||
func(*args)
|
||||
self._trigger_success(btn)
|
||||
|
||||
def _trigger_success(self, button):
|
||||
"""Temporarily adds a green checkmark to the button text."""
|
||||
|
||||
Reference in New Issue
Block a user