diff --git a/src/modules/Projects/ProjectsEditor/Models/AppListDataTemplateSelector.cs b/src/modules/Projects/ProjectsEditor/Models/AppListDataTemplateSelector.cs index e712d88c0e..33f84dc7b5 100644 --- a/src/modules/Projects/ProjectsEditor/Models/AppListDataTemplateSelector.cs +++ b/src/modules/Projects/ProjectsEditor/Models/AppListDataTemplateSelector.cs @@ -18,7 +18,7 @@ namespace ProjectsEditor.Models public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container) { - if (item is string) + if (item is MonitorHeaderRow) { return HeaderTemplate; } diff --git a/src/modules/Projects/ProjectsEditor/Models/Application.cs b/src/modules/Projects/ProjectsEditor/Models/Application.cs index 52d41ef05c..1e1fc3aabb 100644 --- a/src/modules/Projects/ProjectsEditor/Models/Application.cs +++ b/src/modules/Projects/ProjectsEditor/Models/Application.cs @@ -71,8 +71,21 @@ namespace ProjectsEditor.Models } } + private bool _isSelected; + [JsonIgnore] - public bool IsSelected { get; set; } + public bool IsSelected + { + get => _isSelected; + set + { + if (_isSelected != value) + { + _isSelected = value; + OnPropertyChanged(new PropertyChangedEventArgs(nameof(IsSelected))); + } + } + } [JsonIgnore] public bool IsHighlighted { get; set; } diff --git a/src/modules/Projects/ProjectsEditor/Models/MonitorHeaderRow.cs b/src/modules/Projects/ProjectsEditor/Models/MonitorHeaderRow.cs new file mode 100644 index 0000000000..3ce9e62740 --- /dev/null +++ b/src/modules/Projects/ProjectsEditor/Models/MonitorHeaderRow.cs @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectsEditor.Models +{ + internal sealed class MonitorHeaderRow + { + public string MonitorName { get; set; } + + public string SelectString { get; set; } + } +} diff --git a/src/modules/Projects/ProjectsEditor/Models/Project.cs b/src/modules/Projects/ProjectsEditor/Models/Project.cs index aca89d99ca..8eb773c592 100644 --- a/src/modules/Projects/ProjectsEditor/Models/Project.cs +++ b/src/modules/Projects/ProjectsEditor/Models/Project.cs @@ -121,7 +121,7 @@ namespace ProjectsEditor.Models public bool CanBeSaved { - get => Name.Length > 0 && Applications.Where(x => x.IsSelected).Any(); + get => Name.Length > 0 && Applications.Count > 0; } private bool _isPopupVisible; @@ -151,7 +151,8 @@ namespace ProjectsEditor.Models ILookup apps = Applications.Where(x => !x.Minimized).ToLookup(x => x.MonitorSetup); foreach (var appItem in apps.OrderBy(x => x.Key.MonitorDpiUnawareBounds.Left).ThenBy(x => x.Key.MonitorDpiUnawareBounds.Top)) { - applicationsListed.Add(appItem.Key.MonitorInfo); + MonitorHeaderRow headerRow = new MonitorHeaderRow { MonitorName = appItem.Key.MonitorInfo, SelectString = Properties.Resources.SelectAllAppsOnMonitor + " " + appItem.Key.MonitorInfo }; + applicationsListed.Add(headerRow); foreach (Application app in appItem) { applicationsListed.Add(app); @@ -161,7 +162,8 @@ namespace ProjectsEditor.Models var minimizedApps = Applications.Where(x => x.Minimized); if (minimizedApps.Any()) { - applicationsListed.Add("Minimized Apps"); + MonitorHeaderRow headerRow = new MonitorHeaderRow { MonitorName = Properties.Resources.Minimized_Apps, SelectString = Properties.Resources.SelectAllMinimizedApps }; + applicationsListed.Add(headerRow); foreach (Application app in minimizedApps) { applicationsListed.Add(app); @@ -177,11 +179,13 @@ namespace ProjectsEditor.Models { get { - int count = Applications.Where(x => x.IsSelected).Count(); + int count = Applications.Count; return count.ToString(CultureInfo.InvariantCulture) + " " + (count == 1 ? Properties.Resources.App : Properties.Resources.Apps); } } + public bool IsAnySelected { get => Applications?.Any(x => x.IsSelected) == true; } + public List Monitors { get; set; } private BitmapImage _previewIcons; @@ -216,7 +220,7 @@ namespace ProjectsEditor.Models PackageFullName = item.PackageFullName, Minimized = item.Minimized, Maximized = item.Maximized, - IsSelected = item.IsSelected, + IsSelected = false, MonitorNumber = item.MonitorNumber, IsNotFound = item.IsNotFound, Position = new Application.WindowPosition() { X = item.Position.X, Y = item.Position.Y, Height = item.Position.Height, Width = item.Position.Width }, diff --git a/src/modules/Projects/ProjectsEditor/ProjectEditorPage.xaml b/src/modules/Projects/ProjectsEditor/ProjectEditorPage.xaml index e52aefe5cc..30e971409c 100644 --- a/src/modules/Projects/ProjectsEditor/ProjectEditorPage.xaml +++ b/src/modules/Projects/ProjectsEditor/ProjectEditorPage.xaml @@ -13,14 +13,30 @@ - - + + + + + @@ -103,7 +119,7 @@ @@ -151,21 +167,41 @@ Foreground="{DynamicResource PrimaryForegroundBrush}" VerticalAlignment="Center"/> - - - - + + +