163 lines
11 KiB
C#
163 lines
11 KiB
C#
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 CereFlow.ViewModels;
|
|
|
|
public class CereFlowControlViewModel : ObservableRecipient, ILiviaControlViewModel, IRecipient<DataLoadedMessage>, IRecipient<PerfusionDataGridChangeParameterMessage>
|
|
{
|
|
public ImageRotationViewerControlViewModel BrainLobesImageRotationViewerControlViewModel { get; }
|
|
public ImageRotationViewerControlViewModel LimbicSystemImageRotationViewerControlViewModel { get; }
|
|
public PerfusionDataGridGroupControlViewModel PerfusionDataGridGroupViewModel { 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; }
|
|
//TODO::temp fix I do not like this
|
|
public bool AttTabVisible { get => _attTabVisible; set => SetProperty(ref _attTabVisible, value); }
|
|
public IDataBlockLoader DataBlockLoader { get; }
|
|
public int RoiTabSelectedIndex { get => _roiTabSelectedIndex; set => SetProperty(ref _roiTabSelectedIndex, value); }
|
|
|
|
private int _roiTabSelectedIndex;
|
|
private bool _attTabVisible = true;
|
|
|
|
public CereFlowControlViewModel(IDataBlockLoader dataBlockLoader)
|
|
{
|
|
WeakReferenceMessenger.Default.RegisterAll(this);
|
|
DataBlockLoader = dataBlockLoader;
|
|
|
|
BrainLobesImageRotationViewerControlViewModel = ActivatorUtilities.CreateInstance<ImageRotationViewerControlViewModel>(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);
|
|
|
|
LimbicSystemImageRotationViewerControlViewModel = ActivatorUtilities.CreateInstance<ImageRotationViewerControlViewModel>(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);
|
|
|
|
PerfusionDataGridControlViewModel cerebrumCerebellumPerfusionDataGridControlViewModel = ActivatorUtilities.CreateInstance<PerfusionDataGridControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
cerebrumCerebellumPerfusionDataGridControlViewModel.LoadPath = Path.Combine("atlas", "AnImage_CerebrumCerebellum");
|
|
cerebrumCerebellumPerfusionDataGridControlViewModel.GridTabName = (string)Application.Current.TryFindResource("CerebrumCerebellumPerfusionDataGridName");
|
|
|
|
PerfusionDataGridControlViewModel brainLobesPerfusionDataGridControlViewModel = ActivatorUtilities.CreateInstance<PerfusionDataGridControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
brainLobesPerfusionDataGridControlViewModel.LoadPath = Path.Combine("atlas", "AnImage_BrainLobes");
|
|
brainLobesPerfusionDataGridControlViewModel.GridTabName = (string)Application.Current.TryFindResource("BrainLobesPerfusionDataGridName");
|
|
|
|
PerfusionDataGridControlViewModel limbicSystemPerfusionDataGridControlViewModel = ActivatorUtilities.CreateInstance<PerfusionDataGridControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
limbicSystemPerfusionDataGridControlViewModel.LoadPath = Path.Combine("atlas", "LimbicSystem");
|
|
limbicSystemPerfusionDataGridControlViewModel.GridTabName = (string)Application.Current.TryFindResource("LimbicSystemPerfusionDataGridName");
|
|
|
|
PerfusionDataGridGroupViewModel = ActivatorUtilities.CreateInstance<PerfusionDataGridGroupControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
PerfusionDataGridGroupViewModel.PerfusionDataGridViewModelCollection.Add(cerebrumCerebellumPerfusionDataGridControlViewModel);
|
|
PerfusionDataGridGroupViewModel.PerfusionDataGridViewModelCollection.Add(brainLobesPerfusionDataGridControlViewModel);
|
|
PerfusionDataGridGroupViewModel.PerfusionDataGridViewModelCollection.Add(limbicSystemPerfusionDataGridControlViewModel);
|
|
dataBlockLoader.AddViewModel(PerfusionDataGridGroupViewModel);
|
|
|
|
LeftAnteriorRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance<RoiSummaryControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
LeftAnteriorRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "cbf_location_l.json");
|
|
LeftAnteriorRoiSummaryControlViewModel.RoiTabId = "cbf";
|
|
dataBlockLoader.AddViewModel(LeftAnteriorRoiSummaryControlViewModel);
|
|
|
|
RightAnteriorRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance<RoiSummaryControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
RightAnteriorRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "cbf_location_r.json");
|
|
RightAnteriorRoiSummaryControlViewModel.RoiTabId = "cbf";
|
|
dataBlockLoader.AddViewModel(RightAnteriorRoiSummaryControlViewModel);
|
|
|
|
LeftAttRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance<RoiSummaryControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
LeftAttRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "att_location_l.json");
|
|
LeftAttRoiSummaryControlViewModel.RoiTabId = "att";
|
|
dataBlockLoader.AddViewModel(LeftAttRoiSummaryControlViewModel);
|
|
|
|
RightAttRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance<RoiSummaryControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
RightAttRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "att_location_r.json");
|
|
RightAttRoiSummaryControlViewModel.RoiTabId = "att";
|
|
dataBlockLoader.AddViewModel(RightAttRoiSummaryControlViewModel);
|
|
|
|
LeftAcbvRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance<RoiSummaryControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
LeftAcbvRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "acbv_location_l.json");
|
|
LeftAcbvRoiSummaryControlViewModel.RoiTabId = "acbv";
|
|
dataBlockLoader.AddViewModel(LeftAcbvRoiSummaryControlViewModel);
|
|
|
|
RightAcbvRoiSummaryControlViewModel = ActivatorUtilities.CreateInstance<RoiSummaryControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
RightAcbvRoiSummaryControlViewModel.LoadPath = Path.Combine("roi", "acbv_location_r.json");
|
|
RightAcbvRoiSummaryControlViewModel.RoiTabId = "acbv";
|
|
dataBlockLoader.AddViewModel(RightAcbvRoiSummaryControlViewModel);
|
|
|
|
MosaicImageGroupViewModel = ActivatorUtilities.CreateInstance<MosaicImageGroupControlViewModel>(ServiceProviderFactory.ServiceProvider);
|
|
dataBlockLoader.AddDeferredLoadingModuleViewModel(MosaicImageGroupViewModel);
|
|
|
|
dataBlockLoader.Init();
|
|
|
|
RoiSummaryControlViewModel.RoiTabIdToTabIndexDictionary = new Dictionary<string, int>
|
|
{
|
|
{ "cbf", 1 }, { "att", 2 }, { "acbv", 3 }
|
|
};
|
|
}
|
|
|
|
public List<ReportModuleExpanderViewModel> GenerateReportModuleGroups()
|
|
{
|
|
List<ReportModuleItemViewModel> 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("LimbicSystemRotationViewerName"),
|
|
"LimbicSystem")
|
|
];
|
|
|
|
//TODO::maybe cache it when loading data is better. No need to check colorMap
|
|
List<ReportModuleItemViewModel> colorImageItems = (from viewModel in MosaicImageGroupViewModel.MosaicImageCollection where viewModel.UseColorBar select new ReportModuleItemViewModel(viewModel.DisplayName, viewModel.DisplayName)).ToList();
|
|
|
|
List<ReportModuleExpanderViewModel> result =
|
|
[
|
|
new ReportModuleExpanderViewModel((string)Application.Current.TryFindResource("ReportModuleAtlas"),
|
|
"regional_perfusion", atlasItems),
|
|
new ReportModuleExpanderViewModel((string)Application.Current.TryFindResource("ReportModuleColorImage"),
|
|
"param_color_img", colorImageItems),
|
|
new ReportModuleExpanderViewModel("CBF", "cbf",
|
|
LeftAnteriorRoiSummaryControlViewModel.GenerateReportModuleList()
|
|
.Concat(RightAnteriorRoiSummaryControlViewModel.GenerateReportModuleList())),
|
|
new ReportModuleExpanderViewModel("ATT", "att",
|
|
LeftAttRoiSummaryControlViewModel.GenerateReportModuleList()
|
|
.Concat(RightAttRoiSummaryControlViewModel.GenerateReportModuleList())),
|
|
new ReportModuleExpanderViewModel("aCBV", "acbv",
|
|
LeftAcbvRoiSummaryControlViewModel.GenerateReportModuleList()
|
|
.Concat(RightAcbvRoiSummaryControlViewModel.GenerateReportModuleList()))
|
|
];
|
|
return result;
|
|
}
|
|
|
|
public void Receive(DataLoadedMessage message)
|
|
{
|
|
RoiTabSelectedIndex = 1;
|
|
WeakReferenceMessenger.Default.Send(new RoiTabChangedMessage(RoiTabSelectedIndex));
|
|
AttTabVisible = LeftAttRoiSummaryControlViewModel.Visible || RightAttRoiSummaryControlViewModel.Visible;
|
|
}
|
|
|
|
public void Receive(PerfusionDataGridChangeParameterMessage message)
|
|
{
|
|
if (message.Value.Item2)
|
|
RoiTabSelectedIndex = 0;
|
|
}
|
|
} |