From adc48c1714a661411d37f1e644083f937db73975 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 31 Dec 2024 21:07:35 -0500 Subject: [PATCH 1/2] Added control for shelf pane --- .../Data/Contracts/IGeneralSettingsService.cs | 5 +++++ .../Settings/GeneralSettingsService.cs | 6 +++++ src/Files.App/Strings/en-US/Resources.resw | 3 +++ .../UserControls/Pane/ShelfPane.xaml | 22 +++++++++++++++++++ .../UserControls/Pane/ShelfPane.xaml.cs | 15 +++++++++++++ src/Files.App/ViewModels/MainPageViewModel.cs | 14 ++++++++++++ .../ViewModels/Settings/AdvancedViewModel.cs | 16 +++++++++++++- src/Files.App/Views/MainPage.xaml | 8 +++++++ .../Views/Settings/AdvancedPage.xaml | 17 +++++++++++++- 9 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 src/Files.App/UserControls/Pane/ShelfPane.xaml create mode 100644 src/Files.App/UserControls/Pane/ShelfPane.xaml.cs diff --git a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs index 768555466a39..5fa487fb73e0 100644 --- a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs +++ b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs @@ -289,5 +289,10 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty /// Gets or sets a value indicating the default arrangement for Dual Pane. /// ShellPaneArrangement ShellPaneArrangementOption { get; set; } + + /// + /// Gets or sets a value indicating whether or not to show the shelf pane. + /// + bool ShowShelfPane { get; set; } } } diff --git a/src/Files.App/Services/Settings/GeneralSettingsService.cs b/src/Files.App/Services/Settings/GeneralSettingsService.cs index 2a17789e5be4..73506896cb6f 100644 --- a/src/Files.App/Services/Settings/GeneralSettingsService.cs +++ b/src/Files.App/Services/Settings/GeneralSettingsService.cs @@ -357,6 +357,12 @@ public ShellPaneArrangement ShellPaneArrangementOption set => Set((long)value); } + public bool ShowShelfPane + { + get => Get(false); + set => Set(value); + } + protected override void RaiseOnSettingChangedEvent(object sender, SettingChangedEventArgs e) { base.RaiseOnSettingChangedEvent(sender, e); diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index fee1a86428e1..02dbe67ff39d 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -4019,4 +4019,7 @@ Always switch focus to newly created tab + + Show Shelf Pane + \ No newline at end of file diff --git a/src/Files.App/UserControls/Pane/ShelfPane.xaml b/src/Files.App/UserControls/Pane/ShelfPane.xaml new file mode 100644 index 000000000000..1804873e84d6 --- /dev/null +++ b/src/Files.App/UserControls/Pane/ShelfPane.xaml @@ -0,0 +1,22 @@ + + + + + diff --git a/src/Files.App/UserControls/Pane/ShelfPane.xaml.cs b/src/Files.App/UserControls/Pane/ShelfPane.xaml.cs new file mode 100644 index 000000000000..25946f599056 --- /dev/null +++ b/src/Files.App/UserControls/Pane/ShelfPane.xaml.cs @@ -0,0 +1,15 @@ +// Copyright (c) Files Community +// Licensed under the MIT License. + +using Microsoft.UI.Xaml.Controls; + +namespace Files.App.UserControls +{ + public sealed partial class ShelfPane : UserControl + { + public ShelfPane() + { + InitializeComponent(); + } + } +} diff --git a/src/Files.App/ViewModels/MainPageViewModel.cs b/src/Files.App/ViewModels/MainPageViewModel.cs index 8437f9c2795d..d1b6fc5b58d2 100644 --- a/src/Files.App/ViewModels/MainPageViewModel.cs +++ b/src/Files.App/ViewModels/MainPageViewModel.cs @@ -20,6 +20,7 @@ public sealed class MainPageViewModel : ObservableObject // Dependency injections private IAppearanceSettingsService AppearanceSettingsService { get; } = Ioc.Default.GetRequiredService(); + private IGeneralSettingsService GeneralSettingsService { get; } = Ioc.Default.GetRequiredService(); private INetworkService NetworkService { get; } = Ioc.Default.GetRequiredService(); private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService(); private IResourcesService ResourcesService { get; } = Ioc.Default.GetRequiredService(); @@ -75,6 +76,9 @@ public bool ShouldPreviewPaneBeDisplayed set => SetProperty(ref shouldPreviewPaneBeDisplayed, value); } + public bool ShowShelfPane + => GeneralSettingsService.ShowShelfPane; + public Stretch AppThemeBackgroundImageFit => AppearanceSettingsService.AppThemeBackgroundImageFit; @@ -130,6 +134,16 @@ public MainPageViewModel() break; } }; + + GeneralSettingsService.PropertyChanged += (s, e) => + { + switch (e.PropertyName) + { + case nameof(GeneralSettingsService.ShowShelfPane): + OnPropertyChanged(nameof(ShowShelfPane)); + break; + } + }; } // Methods diff --git a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs index 9d9df3c5a061..2f086a111db6 100644 --- a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs @@ -292,7 +292,7 @@ public bool IsSetAsOpenFileDialog set => SetProperty(ref isSetAsOpenFileDialog, value); } - public bool CanShowSetAsOpenFileDialog + public bool IsAppEnvironmentDev { get => AppLifecycleHelper.AppEnvironment is AppEnvironment.Dev; } @@ -366,6 +366,20 @@ public bool ShowFlattenOptions OnPropertyChanged(); } } + + // TODO remove when feature is marked as stable + public bool ShowShelfPane + { + get => UserSettingsService.GeneralSettingsService.ShowShelfPane; + set + { + if (value == UserSettingsService.GeneralSettingsService.ShowShelfPane) + return; + + UserSettingsService.GeneralSettingsService.ShowShelfPane = value; + OnPropertyChanged(); + } + } public async Task OpenFilesOnWindowsStartupAsync() { diff --git a/src/Files.App/Views/MainPage.xaml b/src/Files.App/Views/MainPage.xaml index a184693957aa..0c9da874c568 100644 --- a/src/Files.App/Views/MainPage.xaml +++ b/src/Files.App/Views/MainPage.xaml @@ -193,6 +193,7 @@ MinWidth="208" /> + @@ -247,6 +248,13 @@ ShowInfoText="{x:Bind SidebarAdaptiveViewModel.PaneHolder.ActivePaneOrColumn.InstanceViewModel.IsPageTypeNotHome, Mode=OneWay}" Visibility="{x:Bind SidebarAdaptiveViewModel.PaneHolder.ActivePaneOrColumn.InstanceViewModel.IsPageTypeNotHome, Mode=OneWay}" /> + diff --git a/src/Files.App/Views/Settings/AdvancedPage.xaml b/src/Files.App/Views/Settings/AdvancedPage.xaml index d28346429f6f..dec8ffbc0d80 100644 --- a/src/Files.App/Views/Settings/AdvancedPage.xaml +++ b/src/Files.App/Views/Settings/AdvancedPage.xaml @@ -169,7 +169,7 @@ x:Name="ReplaceOpenFileDialogSetting" Title="{helpers:ResourceString Name=SettingsSetAsOpenDialog}" HorizontalAlignment="Stretch" - x:Load="{x:Bind ViewModel.CanShowSetAsOpenFileDialog}"> + x:Load="{x:Bind ViewModel.IsAppEnvironmentDev}"> @@ -185,6 +185,21 @@ + + + + + + + + Date: Wed, 1 Jan 2025 10:59:15 -0500 Subject: [PATCH 2/2] Update MainPageViewModel.cs --- src/Files.App/ViewModels/MainPageViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App/ViewModels/MainPageViewModel.cs b/src/Files.App/ViewModels/MainPageViewModel.cs index d1b6fc5b58d2..90839027107d 100644 --- a/src/Files.App/ViewModels/MainPageViewModel.cs +++ b/src/Files.App/ViewModels/MainPageViewModel.cs @@ -77,7 +77,7 @@ public bool ShouldPreviewPaneBeDisplayed } public bool ShowShelfPane - => GeneralSettingsService.ShowShelfPane; + => GeneralSettingsService.ShowShelfPane && AppLifecycleHelper.AppEnvironment is AppEnvironment.Dev; public Stretch AppThemeBackgroundImageFit => AppearanceSettingsService.AppThemeBackgroundImageFit;