using System.Windows; using System.Windows.Controls; using System.Windows.Input; using DicomViewer.ViewModels; using FellowOakDicom; using FellowOakDicom.Imaging; using Ookii.Dialogs.Wpf; namespace DicomViewer.Views; /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow { private readonly MainWindowViewModel _viewModel = new(); public MainWindow() { //TODO::move this somewhere new DicomSetupBuilder() .RegisterServices(s => s.AddFellowOakDicom().AddImageManager()) .Build(); InitializeComponent(); DataContext = _viewModel; } private void OnPreviewMouseWheel(object sender, MouseWheelEventArgs e) { if (e.Delta < 0) { ((MainWindowViewModel)DataContext).PrevImage(); } else { ((MainWindowViewModel)DataContext).NextImage(); } e.Handled = true; } private void OnImageMouseUp(object sender, MouseButtonEventArgs e) { (int x, int y) = GetPixelIndex(e.GetPosition(Image)); _viewModel.UpdateCbfPlot(x, y); } private void OnImageMouseMove(object sender, MouseEventArgs e) { (int x, int y) = GetPixelIndex(e.GetPosition(Image)); _viewModel.CursorPosition = $"{x}, {y}"; } private (int x, int y) GetPixelIndex(Point pos) { if (_viewModel.CurrentImage == null) return (0, 0); int x = (int)Math.Floor(pos.X * _viewModel.CurrentImage.Image.PixelWidth / Image.ActualWidth); int y = (int)Math.Floor(pos.Y * _viewModel.CurrentImage.Image.PixelHeight / Image.ActualHeight); return (x, y); } private void OpenButtonOnClick(object sender, RoutedEventArgs e) { VistaFolderBrowserDialog dialog = new(); if (!(dialog.ShowDialog() ?? false)) return; _viewModel.LoadData(dialog.SelectedPath); } private void ToggleButtonOnChecked(object sender, RoutedEventArgs e) { _viewModel.CurrentImageName = (string)((RadioButton)sender).DataContext; } }