diff --git a/src/Files.App/Actions/Content/ImageManipulation/BaseRotateAction.cs b/src/Files.App/Actions/Content/ImageManipulation/BaseRotateAction.cs index 1c54b986cb36..14443b5824d2 100644 --- a/src/Files.App/Actions/Content/ImageManipulation/BaseRotateAction.cs +++ b/src/Files.App/Actions/Content/ImageManipulation/BaseRotateAction.cs @@ -9,7 +9,7 @@ internal abstract class BaseRotateAction : ObservableObject, IAction { private readonly IContentPageContext context; - private readonly PreviewPaneViewModel _previewPaneViewModel; + private readonly InfoPaneViewModel _infoPaneViewModel; public abstract string Label { get; } @@ -26,7 +26,7 @@ internal abstract class BaseRotateAction : ObservableObject, IAction public BaseRotateAction() { context = Ioc.Default.GetRequiredService(); - _previewPaneViewModel = Ioc.Default.GetRequiredService(); + _infoPaneViewModel = Ioc.Default.GetRequiredService(); context.PropertyChanged += Context_PropertyChanged; } @@ -38,7 +38,7 @@ public async Task ExecuteAsync() context.ShellPage?.SlimContentPage?.ItemManipulationModel?.RefreshItemsThumbnail(); - await _previewPaneViewModel.UpdateSelectedItemPreviewAsync(); + await _infoPaneViewModel.UpdateSelectedItemPreviewAsync(); } private bool IsContextPageTypeAdaptedToCommand() diff --git a/src/Files.App/Actions/Show/ToggleDetailsPaneAction.cs b/src/Files.App/Actions/Show/ToggleDetailsPaneAction.cs index 2ca4ce018aaa..d2ada14b71ea 100644 --- a/src/Files.App/Actions/Show/ToggleDetailsPaneAction.cs +++ b/src/Files.App/Actions/Show/ToggleDetailsPaneAction.cs @@ -5,8 +5,8 @@ namespace Files.App.Actions { internal class ToggleDetailsPaneAction : ObservableObject, IToggleAction { - private readonly PreviewPaneViewModel viewModel; - private readonly IPreviewPaneSettingsService previewSettingsService = Ioc.Default.GetRequiredService(); + private readonly InfoPaneViewModel viewModel; + private readonly IInfoPaneSettingsService infoPaneSettingsService = Ioc.Default.GetRequiredService(); public string Label => "ToggleDetailsPane".GetLocalizedResource(); @@ -25,21 +25,21 @@ public bool IsOn public ToggleDetailsPaneAction() { - viewModel = Ioc.Default.GetRequiredService(); + viewModel = Ioc.Default.GetRequiredService(); viewModel.PropertyChanged += ViewModel_PropertyChanged; } public Task ExecuteAsync() { viewModel.IsEnabled = true; - previewSettingsService.ShowPreviewOnly = false; + infoPaneSettingsService.SelectedTab = InfoPaneTabs.Details; return Task.CompletedTask; } private void ViewModel_PropertyChanged(object? sender, PropertyChangedEventArgs e) { - if (e.PropertyName is nameof(PreviewPaneViewModel.IsEnabled)) + if (e.PropertyName is nameof(InfoPaneViewModel.IsEnabled)) OnPropertyChanged(nameof(IsOn)); } } diff --git a/src/Files.App/Actions/Show/ToggleInfoPaneAction.cs b/src/Files.App/Actions/Show/ToggleInfoPaneAction.cs index f8dccf7f9bdf..42a661a2b2db 100644 --- a/src/Files.App/Actions/Show/ToggleInfoPaneAction.cs +++ b/src/Files.App/Actions/Show/ToggleInfoPaneAction.cs @@ -5,7 +5,7 @@ namespace Files.App.Actions { internal class ToggleInfoPaneAction : ObservableObject, IToggleAction { - private readonly PreviewPaneViewModel viewModel; + private readonly InfoPaneViewModel viewModel; public string Label => "ToggleInfoPane".GetLocalizedResource(); @@ -16,12 +16,15 @@ public string Description public RichGlyph Glyph => new(opacityStyle: "ColorIconRightPane"); + public HotKey HotKey + => new(Keys.I, KeyModifiers.MenuCtrl); + public bool IsOn => viewModel.IsEnabled; public ToggleInfoPaneAction() { - viewModel = Ioc.Default.GetRequiredService(); + viewModel = Ioc.Default.GetRequiredService(); viewModel.PropertyChanged += ViewModel_PropertyChanged; } @@ -34,7 +37,7 @@ public Task ExecuteAsync() private void ViewModel_PropertyChanged(object? sender, PropertyChangedEventArgs e) { - if (e.PropertyName is nameof(PreviewPaneViewModel.IsEnabled)) + if (e.PropertyName is nameof(InfoPaneViewModel.IsEnabled)) OnPropertyChanged(nameof(IsOn)); } } diff --git a/src/Files.App/Actions/Show/TogglePreviewPaneAction.cs b/src/Files.App/Actions/Show/TogglePreviewPaneAction.cs index d2cebb85bdce..9fb1e5ab3407 100644 --- a/src/Files.App/Actions/Show/TogglePreviewPaneAction.cs +++ b/src/Files.App/Actions/Show/TogglePreviewPaneAction.cs @@ -5,8 +5,8 @@ namespace Files.App.Actions { internal class TogglePreviewPaneAction : ObservableObject, IToggleAction { - private readonly PreviewPaneViewModel viewModel; - private readonly IPreviewPaneSettingsService previewSettingsService = Ioc.Default.GetRequiredService(); + private readonly InfoPaneViewModel viewModel; + private readonly IInfoPaneSettingsService infoPaneSettingsService = Ioc.Default.GetRequiredService(); public string Label => "TogglePreviewPane".GetLocalizedResource(); @@ -25,21 +25,21 @@ public bool IsOn public TogglePreviewPaneAction() { - viewModel = Ioc.Default.GetRequiredService(); + viewModel = Ioc.Default.GetRequiredService(); viewModel.PropertyChanged += ViewModel_PropertyChanged; } public Task ExecuteAsync() { viewModel.IsEnabled = true; - previewSettingsService.ShowPreviewOnly = true; + infoPaneSettingsService.SelectedTab = InfoPaneTabs.Preview; return Task.CompletedTask; } private void ViewModel_PropertyChanged(object? sender, PropertyChangedEventArgs e) { - if (e.PropertyName is nameof(PreviewPaneViewModel.IsEnabled)) + if (e.PropertyName is nameof(InfoPaneViewModel.IsEnabled)) OnPropertyChanged(nameof(IsOn)); } } diff --git a/src/Files.App/App.xaml.cs b/src/Files.App/App.xaml.cs index 3e7e8b3e6e75..b6640bd090ae 100644 --- a/src/Files.App/App.xaml.cs +++ b/src/Files.App/App.xaml.cs @@ -94,7 +94,7 @@ private IHost ConfigureHost() .AddSingleton(sp => new GeneralSettingsService((sp.GetService() as UserSettingsService).GetSharingContext())) .AddSingleton(sp => new FoldersSettingsService((sp.GetService() as UserSettingsService).GetSharingContext())) .AddSingleton(sp => new ApplicationSettingsService((sp.GetService() as UserSettingsService).GetSharingContext())) - .AddSingleton(sp => new PreviewPaneSettingsService((sp.GetService() as UserSettingsService).GetSharingContext())) + .AddSingleton(sp => new InfoPaneSettingsService((sp.GetService() as UserSettingsService).GetSharingContext())) .AddSingleton(sp => new LayoutSettingsService((sp.GetService() as UserSettingsService).GetSharingContext())) .AddSingleton(sp => new AppSettingsService((sp.GetService() as UserSettingsService).GetSharingContext())) .AddSingleton() @@ -137,7 +137,7 @@ private IHost ConfigureHost() .AddSingleton() .AddSingleton() .AddSingleton() - .AddSingleton() + .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() diff --git a/src/Files.App/Converters/EnumToBoolConverter.cs b/src/Files.App/Converters/EnumToBoolConverter.cs new file mode 100644 index 000000000000..2e1fb16f7c22 --- /dev/null +++ b/src/Files.App/Converters/EnumToBoolConverter.cs @@ -0,0 +1,23 @@ +// Copyright (c) 2023 Files Community +// Licensed under the MIT License. See the LICENSE. + +using Microsoft.UI.Xaml.Data; + +namespace Files.App.Converters +{ + internal sealed class EnumToBoolConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, string language) + { + if (value == null) + return false; + + return value.ToString() == parameter.ToString(); + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/Files.App/Data/Commands/Manager/ICommandManager.cs b/src/Files.App/Data/Commands/Manager/ICommandManager.cs index d457d19ed219..7debbf5c659f 100644 --- a/src/Files.App/Data/Commands/Manager/ICommandManager.cs +++ b/src/Files.App/Data/Commands/Manager/ICommandManager.cs @@ -25,6 +25,7 @@ public interface ICommandManager : IEnumerable IRichCommand ToggleShowHiddenItems { get; } IRichCommand ToggleShowFileExtensions { get; } IRichCommand TogglePreviewPane { get; } + IRichCommand ToggleDetailsPane { get; } IRichCommand ToggleInfoPane { get; } IRichCommand CopyItem { get; } diff --git a/src/Files.App/Services/Settings/PreviewPaneSettingsService.cs b/src/Files.App/Services/Settings/InfoPaneSettingsService.cs similarity index 77% rename from src/Files.App/Services/Settings/PreviewPaneSettingsService.cs rename to src/Files.App/Services/Settings/InfoPaneSettingsService.cs index 088f0bb201b6..da7f9be03053 100644 --- a/src/Files.App/Services/Settings/PreviewPaneSettingsService.cs +++ b/src/Files.App/Services/Settings/InfoPaneSettingsService.cs @@ -8,7 +8,7 @@ namespace Files.App.Services.Settings { - internal sealed class PreviewPaneSettingsService : BaseObservableJsonSettings, IPreviewPaneSettingsService + internal sealed class InfoPaneSettingsService : BaseObservableJsonSettings, IInfoPaneSettingsService { public bool IsEnabled { @@ -34,20 +34,20 @@ public double MediaVolume set => Set(Math.Max(0d, Math.Min(value, 1d))); } - public bool ShowPreviewOnly + public InfoPaneTabs SelectedTab { - get => Get(false); + get => Get(InfoPaneTabs.Details); set => Set(value); } - public PreviewPaneSettingsService(ISettingsSharingContext settingsSharingContext) + public InfoPaneSettingsService(ISettingsSharingContext settingsSharingContext) { RegisterSettingsContext(settingsSharingContext); } protected override void RaiseOnSettingChangedEvent(object sender, SettingChangedEventArgs e) { - if (e.SettingName is nameof(ShowPreviewOnly)) + if (e.SettingName is nameof(SelectedTab)) { Analytics.TrackEvent($"Set {e.SettingName} to {e.NewValue}"); } diff --git a/src/Files.App/Services/Settings/UserSettingsService.cs b/src/Files.App/Services/Settings/UserSettingsService.cs index 4f2445c25c0d..8a5d22ae8ac5 100644 --- a/src/Files.App/Services/Settings/UserSettingsService.cs +++ b/src/Files.App/Services/Settings/UserSettingsService.cs @@ -32,10 +32,10 @@ public IAppearanceSettingsService AppearanceSettingsService get => GetSettingsService(ref _AppearanceSettingsService); } - private IPreviewPaneSettingsService _PreviewPaneSettingsService; - public IPreviewPaneSettingsService PreviewPaneSettingsService + private IInfoPaneSettingsService _InfoPaneSettingsService; + public IInfoPaneSettingsService InfoPaneSettingsService { - get => GetSettingsService(ref _PreviewPaneSettingsService); + get => GetSettingsService(ref _InfoPaneSettingsService); } private ILayoutSettingsService _LayoutSettingsService; diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index ddb3791ccaf6..b5e6a587c812 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -1056,11 +1056,14 @@ Toggle the details pane + + Toggle the details pane to view basic file properties + - Toggle the details/preview pane + Toggle the info pane - Toggles the details/preview pane + Toggle the info pane to view the detail\preview panes No preview available @@ -2404,10 +2407,7 @@ Toggle whether to show file extensions - Toggle whether to show preview pane - - - Toggle the details pane + Toggle the preview pane to view file previews Toggle whether to show sidebar diff --git a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs index a79930ed51bc..12fae7a720be 100644 --- a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs +++ b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs @@ -26,16 +26,16 @@ public MediaPreview(MediaPreviewViewModel model) private void PlayerContext_Loaded(object sender, RoutedEventArgs e) { - PlayerContext.MediaPlayer.Volume = UserSettingsService.PreviewPaneSettingsService.MediaVolume; + PlayerContext.MediaPlayer.Volume = UserSettingsService.InfoPaneSettingsService.MediaVolume; PlayerContext.MediaPlayer.VolumeChanged += MediaPlayer_VolumeChanged; ViewModel.TogglePlaybackRequested += TogglePlaybackRequestInvoked; } private void MediaPlayer_VolumeChanged(MediaPlayer sender, object args) { - if (sender.Volume != UserSettingsService.PreviewPaneSettingsService.MediaVolume) + if (sender.Volume != UserSettingsService.InfoPaneSettingsService.MediaVolume) { - UserSettingsService.PreviewPaneSettingsService.MediaVolume = sender.Volume; + UserSettingsService.InfoPaneSettingsService.MediaVolume = sender.Volume; } } diff --git a/src/Files.App/UserControls/InnerNavigationToolbar.xaml.cs b/src/Files.App/UserControls/InnerNavigationToolbar.xaml.cs index 5ebe82375b27..52a1d1f4f4ac 100644 --- a/src/Files.App/UserControls/InnerNavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/InnerNavigationToolbar.xaml.cs @@ -17,7 +17,6 @@ public sealed partial class InnerNavigationToolbar : UserControl public InnerNavigationToolbar() { InitializeComponent(); - PreviewPaneViewModel = Ioc.Default.GetRequiredService(); } public IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); @@ -28,8 +27,6 @@ public InnerNavigationToolbar() public AppModel AppModel => App.AppModel; - public readonly PreviewPaneViewModel PreviewPaneViewModel; - public ToolbarViewModel ViewModel { get => (ToolbarViewModel)GetValue(ViewModelProperty); diff --git a/src/Files.App/UserControls/Pane/PreviewPane.xaml b/src/Files.App/UserControls/Pane/InfoPane.xaml similarity index 96% rename from src/Files.App/UserControls/Pane/PreviewPane.xaml rename to src/Files.App/UserControls/Pane/InfoPane.xaml index 0b0c2eba7b85..28a2291e50aa 100644 --- a/src/Files.App/UserControls/Pane/PreviewPane.xaml +++ b/src/Files.App/UserControls/Pane/InfoPane.xaml @@ -1,6 +1,6 @@  +