75 lines
4.1 KiB
Python
75 lines
4.1 KiB
Python
"""
|
|
Filename: viewerlauncher.py
|
|
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.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
|
|
from src.shared.shareddata import APP_NAME
|
|
|
|
|
|
class ViewerLauncherWidget(QWidget):
|
|
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, json_location):
|
|
super().__init__()
|
|
self.setWindowTitle(f"Viewer Launcher - {APP_NAME.upper()}")
|
|
|
|
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, json_location], True),
|
|
("Cross-Group Stats Viewer", CrossGroupStatsWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict, json_location], True),
|
|
("Inter-Group Brain and Image Viewer", InterGroupBrainImageWidget, [haemo_dict, cha_dict, df_ind_dict, design_matrix_dict, contrast_results_dict, group_dict], True),
|
|
("Cross-Group Brain and 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, contrast_results_dict, group_dict, config_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)
|
|
|
|
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)
|
|
|
|
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."""
|
|
original_text = button.text()
|
|
button.setText(f"{original_text} ✔")
|
|
button.setStyleSheet("color: green; font-weight: bold;")
|
|
|
|
# Revert after 1 second
|
|
QTimer.singleShot(1000, lambda: self._revert_button(button, original_text))
|
|
|
|
def _revert_button(self, button, original_text):
|
|
button.setText(original_text)
|
|
button.setStyleSheet("") |