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;