From 00051072445d4bf843c513e600b0a32f4b7b36ab Mon Sep 17 00:00:00 2001 From: David Lang Date: Tue, 28 Nov 2023 06:17:33 +1100 Subject: [PATCH 1/8] Click photo to toggle --- Desktop/Windows/ApplicantDetailsWindow.xaml | 2 +- Desktop/Windows/ApplicantDetailsWindow.xaml.cs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Desktop/Windows/ApplicantDetailsWindow.xaml b/Desktop/Windows/ApplicantDetailsWindow.xaml index 7fab2dc1..a9cb9b85 100644 --- a/Desktop/Windows/ApplicantDetailsWindow.xaml +++ b/Desktop/Windows/ApplicantDetailsWindow.xaml @@ -161,6 +161,6 @@ - + diff --git a/Desktop/Windows/ApplicantDetailsWindow.xaml.cs b/Desktop/Windows/ApplicantDetailsWindow.xaml.cs index c5a516e1..688d69e5 100644 --- a/Desktop/Windows/ApplicantDetailsWindow.xaml.cs +++ b/Desktop/Windows/ApplicantDetailsWindow.xaml.cs @@ -79,5 +79,13 @@ private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) Close(); } } + + private void ImageControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) + { + if (DataContext is ApplicantForRole afr) + { + afr.IsSelected = !afr.IsSelected; + } + } } } From 880cb63ac1d934f7e427f72432d1c4faee242a0a Mon Sep 17 00:00:00 2001 From: David Lang Date: Tue, 28 Nov 2023 06:36:19 +1100 Subject: [PATCH 2/8] Grey image when not selected --- Desktop/Windows/ApplicantDetailsWindow.xaml | 8 +++++++- Desktop/Windows/ApplicantDetailsWindow.xaml.cs | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Desktop/Windows/ApplicantDetailsWindow.xaml b/Desktop/Windows/ApplicantDetailsWindow.xaml index a9cb9b85..2deae823 100644 --- a/Desktop/Windows/ApplicantDetailsWindow.xaml +++ b/Desktop/Windows/ApplicantDetailsWindow.xaml @@ -19,6 +19,11 @@ + + + + + @@ -161,6 +166,7 @@ - + + diff --git a/Desktop/Windows/ApplicantDetailsWindow.xaml.cs b/Desktop/Windows/ApplicantDetailsWindow.xaml.cs index 688d69e5..409c1977 100644 --- a/Desktop/Windows/ApplicantDetailsWindow.xaml.cs +++ b/Desktop/Windows/ApplicantDetailsWindow.xaml.cs @@ -10,6 +10,8 @@ using System.Windows; using System.Windows.Data; using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; namespace Carmen.Desktop.Windows { @@ -59,9 +61,21 @@ private void Window_Closed(object sender, EventArgs e) private async void Window_Loaded(object sender, RoutedEventArgs e) { if (applicant.PhotoImageId is int photo_id) - ImageControl.Source = await ApplicantImage.CachedImage(applicant.PhotoImageId.Value, applicant.ShowRoot, LoadApplicantImage); + { + var source = await ApplicantImage.CachedImage(applicant.PhotoImageId.Value, applicant.ShowRoot, LoadApplicantImage); + ImageControl.Source = source; + var grey = new FormatConvertedBitmap(); + grey.BeginInit(); + grey.Source = (BitmapSource)source; + grey.DestinationFormat = PixelFormats.Gray32Float; + grey.EndInit(); + ImageControlGrey.Source = grey; + } else + { ImageControl.Source = null; + ImageControlGrey.Source = null; + } } /// Loads the applicant's photo in a dedicated db context to avoid concurrency issues From 609bfa402f0198b2c935c20f87aa45978bc9fbc6 Mon Sep 17 00:00:00 2001 From: David Lang Date: Tue, 28 Nov 2023 06:53:06 +1100 Subject: [PATCH 3/8] Refactor ApplicantDetailsWindow to take interface --- Desktop/ViewModels/ApplicantForRole.cs | 4 +++- Desktop/ViewModels/ISelectableApplicant.cs | 23 +++++++++++++++++++ Desktop/Windows/ApplicantDetailsWindow.xaml | 5 +--- .../Windows/ApplicantDetailsWindow.xaml.cs | 10 ++++---- 4 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 Desktop/ViewModels/ISelectableApplicant.cs diff --git a/Desktop/ViewModels/ApplicantForRole.cs b/Desktop/ViewModels/ApplicantForRole.cs index a491afb1..406eecd1 100644 --- a/Desktop/ViewModels/ApplicantForRole.cs +++ b/Desktop/ViewModels/ApplicantForRole.cs @@ -14,7 +14,7 @@ namespace Carmen.Desktop.ViewModels { - public class ApplicantForRole : INotifyPropertyChanged + public class ApplicantForRole : ISelectableApplicant, INotifyPropertyChanged { public Applicant Applicant { get; init; } public Criteria[] PrimaryCriterias { get; init; } @@ -97,6 +97,8 @@ public IEnumerable UnavailabilityReasons public string CommaSeparatedIneligibilityReason => string.Join(", ", IneligibilityReasons); + public string SelectionText => $"Allocate {RoleName} to {FirstName}"; + public ApplicantForRole(IAllocationEngine engine, Applicant applicant, Role role, Criteria[] primary_criterias) { this.Applicant = applicant; diff --git a/Desktop/ViewModels/ISelectableApplicant.cs b/Desktop/ViewModels/ISelectableApplicant.cs new file mode 100644 index 00000000..096657f7 --- /dev/null +++ b/Desktop/ViewModels/ISelectableApplicant.cs @@ -0,0 +1,23 @@ +using Carmen.ShowModel.Applicants; +using Carmen.ShowModel.Criterias; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Carmen.Desktop.ViewModels +{ + public interface ISelectableApplicant + { + Applicant Applicant { get; } + Criteria[] PrimaryCriterias { get; } + bool IsSelected { get; set; } + string FirstName { get; } + string LastName { get; } + string SelectionText { get; } + IEnumerable ExistingRoles { get; } + IEnumerable UnavailabilityReasons { get; } + IEnumerable IneligibilityReasons { get; } + } +} diff --git a/Desktop/Windows/ApplicantDetailsWindow.xaml b/Desktop/Windows/ApplicantDetailsWindow.xaml index 2deae823..a1c86395 100644 --- a/Desktop/Windows/ApplicantDetailsWindow.xaml +++ b/Desktop/Windows/ApplicantDetailsWindow.xaml @@ -159,10 +159,7 @@ - - - - + diff --git a/Desktop/Windows/ApplicantDetailsWindow.xaml.cs b/Desktop/Windows/ApplicantDetailsWindow.xaml.cs index 409c1977..ff3b6b88 100644 --- a/Desktop/Windows/ApplicantDetailsWindow.xaml.cs +++ b/Desktop/Windows/ApplicantDetailsWindow.xaml.cs @@ -28,17 +28,17 @@ public partial class ApplicantDetailsWindow : Window public bool IsClosed { get; private set; } = false; - public ApplicantDetailsWindow(ShowConnection connection, Criteria[] criterias, IAuditionEngine audition_engine, ApplicantForRole applicant_for_role) + public ApplicantDetailsWindow(ShowConnection connection, Criteria[] criterias, IAuditionEngine audition_engine, ISelectableApplicant selectable_applicant) { this.connection = connection; - this.applicant = applicant_for_role.Applicant; + this.applicant = selectable_applicant.Applicant; Title = WindowTitleFor(applicant); InitializeComponent(); criteriasViewSource = (CollectionViewSource)FindResource(nameof(criteriasViewSource)); criteriasViewSource.Source = criterias; overallAbilityCalculator = (OverallAbilityCalculator)FindResource(nameof(overallAbilityCalculator)); overallAbilityCalculator.AuditionEngine = audition_engine; - DataContext = applicant_for_role; // must be done after setting up overallAbilityCalculator + DataContext = selectable_applicant; // must be done after setting up overallAbilityCalculator } private static string WindowTitleFor(Applicant a) @@ -96,9 +96,9 @@ private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) private void ImageControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { - if (DataContext is ApplicantForRole afr) + if (DataContext is ISelectableApplicant sa) { - afr.IsSelected = !afr.IsSelected; + sa.IsSelected = !sa.IsSelected; } } } From 703e4842b0fe4d356afc817cb005f4a2e54fadc2 Mon Sep 17 00:00:00 2001 From: David Lang Date: Tue, 28 Nov 2023 07:11:36 +1100 Subject: [PATCH 4/8] Change double click to show details --- Desktop/Pages/SelectCast.xaml | 8 +++--- Desktop/Pages/SelectCast.xaml.cs | 44 ++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/Desktop/Pages/SelectCast.xaml b/Desktop/Pages/SelectCast.xaml index 75abe3f4..6e086233 100644 --- a/Desktop/Pages/SelectCast.xaml +++ b/Desktop/Pages/SelectCast.xaml @@ -251,7 +251,7 @@ @@ -345,7 +345,7 @@ @@ -476,7 +476,7 @@