using System.IO; using System.Windows; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; using Livia.Models; using Livia.Utility; using Livia.Utility.DependencyInjection; using Livia.ViewModels; using Microsoft.Extensions.DependencyInjection; namespace MdpC6.ViewModels; public class MdpC6ControlViewModel : ObservableRecipient, ILiviaControlViewModel, IRecipient { public ImageRotationViewerControlViewModel BrainLobesImageRotationViewerControlViewModel { get; } public ImageRotationViewerControlViewModel ArterialTerritoriesImageRotationViewerControlViewModel { get; } public ImageRotationViewerControlViewModel LimbicSystemImageRotationViewerControlViewModel { get; } public PerfusionDataGridControlViewModel CerebrumCerebellumPerfusionDataGridControlViewModel { get; } public PerfusionDataGridControlViewModel BrainLobesPerfusionDataGridControlViewModel { get; } public PerfusionDataGridControlViewModel ArterialTerritoriesPerfusionDataGridControlViewModel { get; } public PerfusionDataGridControlViewModel LimbicSystemPerfusionDataGridControlViewModel { get; } //public RoiSummaryControlViewModel LeftAnteriorRoiSummaryControlViewModel { get; } //public RoiSummaryControlViewModel RightAnteriorRoiSummaryControlViewModel { get; } //public RoiSummaryControlViewModel LeftAttRoiSummaryControlViewModel { get; } //public RoiSummaryControlViewModel RightAttRoiSummaryControlViewModel { get; } //public RoiSummaryControlViewModel LeftAcbvRoiSummaryControlViewModel { get; } //public RoiSummaryControlViewModel RightAcbvRoiSummaryControlViewModel { get; } public MosaicImageGroupControlViewModel MosaicImageGroupViewModel { get; } public IDataBlockLoader DataBlockLoader { get; } public int RoiTabSelectedIndex { get => _roiTabSelectedIndex; set => SetProperty(ref _roiTabSelectedIndex, value); } private int _roiTabSelectedIndex; public MdpC6ControlViewModel(IDataBlockLoader dataBlockLoader) { WeakReferenceMessenger.Default.RegisterAll(this); DataBlockLoader = dataBlockLoader; BrainLobesImageRotationViewerControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); BrainLobesImageRotationViewerControlViewModel.DisplayName = (string)Application.Current.TryFindResource("BrainLobesRotationViewerName"); BrainLobesImageRotationViewerControlViewModel.AtlasMaskLoadPath = @"atlas\AnImage_BrainLobes\mask"; BrainLobesImageRotationViewerControlViewModel.StructLoadPath = "structure"; BrainLobesImageRotationViewerControlViewModel.StructDataType = ImageRotationViewerDataType.Dicom2D; BrainLobesImageRotationViewerControlViewModel.AtlasId = "AnImage_BrainLobes"; BrainLobesImageRotationViewerControlViewModel.ImageIndexSyncKey = "structure"; dataBlockLoader.AddViewModel(BrainLobesImageRotationViewerControlViewModel); ArterialTerritoriesImageRotationViewerControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); ArterialTerritoriesImageRotationViewerControlViewModel.DisplayName = (string)Application.Current.TryFindResource("ArterialTerritoriesRotationViewerName"); ArterialTerritoriesImageRotationViewerControlViewModel.AtlasMaskLoadPath = @"atlas\AnImage_ArterialTerritories\mask"; ArterialTerritoriesImageRotationViewerControlViewModel.StructLoadPath = "structure"; ArterialTerritoriesImageRotationViewerControlViewModel.StructDataType = ImageRotationViewerDataType.Dicom2D; ArterialTerritoriesImageRotationViewerControlViewModel.AtlasId = "AnImage_ArterialTerritories"; ArterialTerritoriesImageRotationViewerControlViewModel.ImageIndexSyncKey = "structure"; dataBlockLoader.AddViewModel(ArterialTerritoriesImageRotationViewerControlViewModel); LimbicSystemImageRotationViewerControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); LimbicSystemImageRotationViewerControlViewModel.DisplayName = (string)Application.Current.TryFindResource("LimbicSystemRotationViewerName"); LimbicSystemImageRotationViewerControlViewModel.AtlasMaskLoadPath = @"atlas\LimbicSystem\mask"; LimbicSystemImageRotationViewerControlViewModel.StructLoadPath = "structure"; LimbicSystemImageRotationViewerControlViewModel.StructDataType = ImageRotationViewerDataType.Dicom2D; LimbicSystemImageRotationViewerControlViewModel.AtlasId = "LimbicSystem"; LimbicSystemImageRotationViewerControlViewModel.ImageIndexSyncKey = "structure"; dataBlockLoader.AddViewModel(LimbicSystemImageRotationViewerControlViewModel); CerebrumCerebellumPerfusionDataGridControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); CerebrumCerebellumPerfusionDataGridControlViewModel.LoadPath = Path.Combine("atlas", "AnImage_CerebrumCerebellum", "cbf.json"); dataBlockLoader.AddViewModel(CerebrumCerebellumPerfusionDataGridControlViewModel); BrainLobesPerfusionDataGridControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); BrainLobesPerfusionDataGridControlViewModel.LoadPath = Path.Combine("atlas", "AnImage_BrainLobes", "cbf.json"); dataBlockLoader.AddViewModel(BrainLobesPerfusionDataGridControlViewModel); ArterialTerritoriesPerfusionDataGridControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); ArterialTerritoriesPerfusionDataGridControlViewModel.LoadPath = Path.Combine("atlas", "AnImage_ArterialTerritories", "cbf.json"); dataBlockLoader.AddViewModel(ArterialTerritoriesPerfusionDataGridControlViewModel); LimbicSystemPerfusionDataGridControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); LimbicSystemPerfusionDataGridControlViewModel.LoadPath = Path.Combine("atlas", "LimbicSystem", "cbf.json"); dataBlockLoader.AddViewModel(LimbicSystemPerfusionDataGridControlViewModel); //LeftAnteriorRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); //LeftAnteriorRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "cbf_location_l.json"); //LeftAnteriorRoiSummaryControlViewModel.RoiTabId = "cbf"; //dataBlockLoader.AddViewModel(LeftAnteriorRoiSummaryControlViewModel); //RightAnteriorRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); //RightAnteriorRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "cbf_location_r.json"); //RightAnteriorRoiSummaryControlViewModel.RoiTabId = "cbf"; //dataBlockLoader.AddViewModel(RightAnteriorRoiSummaryControlViewModel); //LeftAttRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); //LeftAttRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "att_location_l.json"); //LeftAttRoiSummaryControlViewModel.RoiTabId = "att"; //dataBlockLoader.AddViewModel(LeftAttRoiSummaryControlViewModel); //RightAttRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); //RightAttRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "att_location_r.json"); //RightAttRoiSummaryControlViewModel.RoiTabId = "att"; //dataBlockLoader.AddViewModel(RightAttRoiSummaryControlViewModel); //LeftAcbvRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); //LeftAcbvRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "acbv_location_l.json"); //LeftAcbvRoiSummaryControlViewModel.RoiTabId = "acbv"; //dataBlockLoader.AddViewModel(LeftAcbvRoiSummaryControlViewModel); //RightAcbvRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); //RightAcbvRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "acbv_location_r.json"); //RightAcbvRoiSummaryControlViewModel.RoiTabId = "acbv"; //dataBlockLoader.AddViewModel(RightAcbvRoiSummaryControlViewModel); MosaicImageGroupViewModel = ActivatorUtilities.CreateInstance(ServiceProviderFactory.ServiceProvider); dataBlockLoader.AddDeferredLoadingModuleViewModel(MosaicImageGroupViewModel); dataBlockLoader.Init(); RoiSummaryControlViewModel.RoiTabIdToTabIndexDictionary = new Dictionary { { "cbf", 0 }, { "att", 1 }, { "acbv", 2 } }; } public List GenerateReportModuleGroups() { List atlasItems = [ new ReportModuleItemViewModel( (string)Application.Current.TryFindResource("CerebrumCerebellumPerfusionDataGridName"), "AnImage_CerebrumCerebellum"), new ReportModuleItemViewModel((string)Application.Current.TryFindResource("BrainLobesRotationViewerName"), "AnImage_BrainLobes"), new ReportModuleItemViewModel( (string)Application.Current.TryFindResource("ArterialTerritoriesRotationViewerName"), "AnImage_ArterialTerritories"), new ReportModuleItemViewModel((string)Application.Current.TryFindResource("LimbicSystemRotationViewerName"), "LimbicSystem") ]; //TODO::maybe cache it when loading data is better. No need to check colorMap List colorImageItems = (from viewModel in MosaicImageGroupViewModel.MosaicImageCollection where viewModel.UseColorBar select new ReportModuleItemViewModel(viewModel.DisplayName, viewModel.DisplayName)).ToList(); List result = [ new ReportModuleExpanderViewModel((string)Application.Current.TryFindResource("ReportModuleAtlas"), "regional_perfusion", atlasItems), new ReportModuleExpanderViewModel((string)Application.Current.TryFindResource("ReportModuleColorImage"), "param_color_img", colorImageItems) ]; return result; } public void Receive(DataLoadedMessage message) { WeakReferenceMessenger.Default.Send(new RoiTabChangedMessage(RoiTabSelectedIndex)); } }