Source code for cmp.bidsappmanager.gui.principal

# Copyright (C) 2009-2022, Ecole Polytechnique Federale de Lausanne (EPFL) and
# Hospital Center and University of Lausanne (UNIL-CHUV), Switzerland, and CMP3 contributors
# All rights reserved.
#
#  This software is distributed under the open-source license Modified BSD.

"""Connectome Mapper Main Window."""

# General imports
import os
import pkg_resources

from pyface.api import ImageResource
from traitsui.qt4.extra.qt_view import QtView
from traitsui.api import *
from traits.api import *

from bids import BIDSLayout

# Own imports
import cmp.project
from cmp.info import __version__

from cmtklib.util import (
    return_button_style_sheet, print_blue
)

import cmp.bidsappmanager.gui.config
import cmp.bidsappmanager.gui.bidsapp
import cmp.bidsappmanager.gui.qc
import cmp.bidsappmanager.gui.handlers
from cmp.bidsappmanager.gui.globals import (
    style_sheet, get_icon
)


[docs]class MainWindow(HasTraits): """Class that defines the Main window of the Connectome Mapper 3 GUI. Attributes ---------- project_info : cmp.bidsappmanager.project.ProjectInfoUI Instance of :class:`CMP_Project_InfoUI` that represents the processing project anat_pipeline : Instance(HasTraits) Instance of anatomical MRI pipeline UI dmri_pipeline : Instance(HasTraits) Instance of diffusion MRI pipeline UI fmri_pipeline : Instance(HasTraits) Instance of functional MRI pipeline UI configurator_ui : `PipelineConfiguratorWindow` Instance of :class:`PipelineConfiguratorWindow` bidsapp_ui : `BIDSAppInterfaceWindow` Instance of :class:`BIDSAppInterfaceWindow` quality_control_ui : `QualityInspectorWindow` Instance of :class:`QualityInspectorWindow` load_dataset : traits.ui.Action TraitsUI Action to load a BIDS dataset bidsapp : traits.ui.Button Button that displays the BIDS App Interface window configurator : traits.ui.Button Button thats displays the pipeline Configurator window quality_control : traits.ui.Button Button that displays the pipeline Quality Control / Inspector window manager_group : traits.ui.View TraitsUI View that describes the content of the main window traits_view : QtView TraitsUI QtView that includes ``manager_group`` and parameterize the window with menu """ project_info = Instance(cmp.project.ProjectInfo) anat_pipeline = Instance(HasTraits) dmri_pipeline = Instance(HasTraits) fmri_pipeline = Instance(HasTraits) configurator_ui = Instance(cmp.bidsappmanager.gui.config.PipelineConfiguratorWindow) bidsapp_ui = Instance(cmp.bidsappmanager.gui.bidsapp.BIDSAppInterfaceWindow) quality_control_ui = Instance(cmp.bidsappmanager.gui.qc.QualityInspectorWindow) load_dataset = Action(name="Load BIDS Dataset...", action="load_dataset") project_info.style_sheet = style_sheet configurator = Button("") bidsapp = Button("") quality_control = Button("") view_mode = 1 manager_group = VGroup( spring, HGroup( spring, HGroup( Item( "configurator", style="custom", width=200, height=200, resizable=False, label="", show_label=False, style_sheet=return_button_style_sheet( ImageResource( pkg_resources.resource_filename( "cmp", os.path.join( "bidsappmanager/images", "configurator_200x200.png" ), ) ).absolute_path ), ), show_labels=False, label="", ), spring, HGroup( Item( "bidsapp", style="custom", width=200, height=200, resizable=False, style_sheet=return_button_style_sheet( ImageResource( pkg_resources.resource_filename( "cmp", os.path.join( "bidsappmanager/images", "bidsapp_200x200.png" ), ) ).absolute_path ), ), show_labels=False, label="", ), spring, HGroup( Item( "quality_control", style="custom", width=200, height=200, resizable=False, style_sheet=return_button_style_sheet( ImageResource( pkg_resources.resource_filename( "cmp", os.path.join( "bidsappmanager/images", "qualitycontrol_200x200.png", ), ) ).absolute_path ), ), show_labels=False, label="", ), spring, springy=True, visible_when="handler.project_loaded==True", ), spring, springy=True, ) traits_view = QtView( HGroup( Include("manager_group"), ), title="Connectome Mapper {} - BIDS App Manager".format(__version__), menubar=MenuBar( Menu( ActionGroup( load_dataset, ), ActionGroup( Action(name="Quit", action="_on_close"), ), name="File", ), ), handler=cmp.bidsappmanager.gui.handlers.MainWindowHandler(), style_sheet=style_sheet, width=0.5, height=0.8, resizable=True, # , scrollable=True , resizable=True # icon=get_icon("cmp.png") ) def _bidsapp_fired(self): """ Callback of the "bidsapp" button. This displays the BIDS App Interface window.""" print_blue("[Open BIDS App Window]") bids_layout = BIDSLayout(self.project_info.base_directory) subjects = bids_layout.get_subjects() anat_config = os.path.join( self.project_info.base_directory, "code/", "ref_anatomical_config.json" ) dmri_config = os.path.join( self.project_info.base_directory, "code/", "ref_diffusion_config.json" ) fmri_config = os.path.join( self.project_info.base_directory, "code/", "ref_fMRI_config.json" ) self.bidsapp_ui = cmp.bidsappmanager.gui.bidsapp.BIDSAppInterfaceWindow( project_info=self.project_info, bids_root=self.project_info.base_directory, subjects=sorted(subjects), anat_config=anat_config, dmri_config=dmri_config, fmri_config=fmri_config, ) self.bidsapp_ui.configure_traits() def _configurator_fired(self): """Callback of the "configurator" button. This displays the Configurator Window.""" print_blue("[Open Pipeline Configurator Window]") if self.project_info.t1_available: if os.path.isfile(self.project_info.anat_config_file): print( " .. Anatomical config file : %s" % self.project_info.anat_config_file ) if self.project_info.dmri_available: if os.path.isfile(self.project_info.dmri_config_file): print( " .. Diffusion config file : %s" % self.project_info.dmri_config_file ) if self.project_info.fmri_available: if os.path.isfile(self.project_info.fmri_config_file): print(" .. fMRI config file : %s" % self.project_info.fmri_config_file) self.configurator_ui = cmp.bidsappmanager.gui.config.PipelineConfiguratorWindow( project_info=self.project_info, anat_pipeline=self.anat_pipeline, dmri_pipeline=self.dmri_pipeline, fmri_pipeline=self.fmri_pipeline, anat_inputs_checked=self.project_info.t1_available, dmri_inputs_checked=self.project_info.dmri_available, fmri_inputs_checked=self.project_info.fmri_available, ) self.configurator_ui.configure_traits() def _quality_control_fired(self): """Callback of the "Inspector" button. This displays the Quality Control (Inspector) Window.""" print_blue("[Open Quality Inspector Window]") if self.project_info.t1_available: if os.path.isfile(self.project_info.anat_config_file): print( " .. Anatomical config file : %s" % self.project_info.anat_config_file ) if self.project_info.dmri_available: if os.path.isfile(self.project_info.dmri_config_file): print( " .. Diffusion config file : %s" % self.project_info.dmri_config_file ) if self.project_info.fmri_available: if os.path.isfile(self.project_info.fmri_config_file): print(" .. fMRI config file : %s" % self.project_info.fmri_config_file) try: self.quality_control_ui = cmp.bidsappmanager.gui.qc.QualityInspectorWindow( project_info=self.project_info, anat_inputs_checked=self.project_info.t1_available, dmri_inputs_checked=self.project_info.dmri_available, fmri_inputs_checked=self.project_info.fmri_available, ) self.quality_control_ui.configure_traits() except Exception as e: print(e)