Skip to content

Commit 6ac5414

Browse files
yaira2Copilot
andauthored
Feature: Auto size columns (#17407)
Signed-off-by: Yair <[email protected]> Co-authored-by: Copilot <[email protected]>
1 parent 23a5282 commit 6ac5414

File tree

7 files changed

+40
-14
lines changed

7 files changed

+40
-14
lines changed

src/Files.App.Controls/BladeView/BladeItem.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace Files.App.Controls
1717
public partial class BladeItem : ContentControl
1818
{
1919
private const double MINIMUM_WIDTH = 150;
20-
private const double DEFAULT_WIDTH = 300; // Default width for the blade item
20+
private const double DEFAULT_WIDTH = 200; // Default width for the blade item
2121

2222
private Button _closeButton;
2323
private Border _bladeResizer;
@@ -113,6 +113,12 @@ private void BladeResizer_ManipulationCompleted(object sender, ManipulationCompl
113113
}
114114

115115
private void BladeResizer_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
116+
{
117+
SetWidth();
118+
e.Handled = true;
119+
}
120+
121+
public void SetWidth()
116122
{
117123
var optimalWidth = CalculateOptimalWidth();
118124
if (optimalWidth > 0)
@@ -124,8 +130,6 @@ private void BladeResizer_DoubleTapped(object sender, DoubleTappedRoutedEventArg
124130
// Fallback to default width if calculation fails
125131
Width = DEFAULT_WIDTH;
126132
}
127-
128-
e.Handled = true;
129133
}
130134

131135
private double CalculateOptimalWidth()
@@ -201,7 +205,7 @@ private double MeasureContentWidth(ListView listView)
201205
catch (Exception)
202206
{
203207
// Fallback calculation
204-
return 200; // Default reasonable width
208+
return DEFAULT_WIDTH; // Default reasonable width
205209
}
206210
}
207211

src/Files.App.Controls/BladeView/BladeView.xaml

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,11 @@
2121
<Setter Property="ScrollViewer.IsHorizontalRailEnabled" Value="True" />
2222
<Setter Property="ScrollViewer.ZoomMode" Value="Disabled" />
2323
<Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" />
24-
<Setter Property="ScrollViewer.BringIntoViewOnFocusChange" Value="True" />
24+
<Setter Property="ScrollViewer.BringIntoViewOnFocusChange" Value="False" />
2525
<Setter Property="UseSystemFocusVisuals" Value="True" />
2626
<Setter Property="ItemContainerTransitions">
2727
<Setter.Value>
28-
<TransitionCollection>
29-
<AddDeleteThemeTransition />
30-
<ContentThemeTransition />
31-
<ReorderThemeTransition />
32-
<EntranceThemeTransition IsStaggeringEnabled="False" />
33-
</TransitionCollection>
28+
<TransitionCollection />
3429
</Setter.Value>
3530
</Setter>
3631
<Setter Property="ItemsPanel">
@@ -96,12 +91,10 @@
9691
<Setter Property="HorizontalAlignment" Value="Stretch" />
9792
<Setter Property="VerticalAlignment" Value="Stretch" />
9893
<Setter Property="Margin" Value="0" />
99-
<Setter Property="MinWidth" Value="{ThemeResource GridViewItemMinWidth}" />
10094
<Setter Property="MinHeight" Value="{ThemeResource GridViewItemMinHeight}" />
10195
<Setter Property="BorderBrush" Value="{ThemeResource CardStrokeColorDefaultBrush}" />
10296
<Setter Property="BorderThickness" Value="1" />
10397
<Setter Property="IsTabStop" Value="False" />
104-
<Setter Property="Width" Value="320" />
10598
<Setter Property="Template">
10699
<Setter.Value>
107100
<ControlTemplate TargetType="controls:BladeItem">

src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,20 @@ public ColumnLayoutPage() : base()
8080

8181
// Methods
8282

83+
private void OnItemLoadStatusChanged(object sender, ItemLoadStatusChangedEventArgs args)
84+
{
85+
if (args.Status is ItemLoadStatusChangedEventArgs.ItemLoadStatus.Complete)
86+
{
87+
var currentBladeIndex = (ParentShellPageInstance is ColumnShellPage associatedColumnShellPage) ? associatedColumnShellPage.ColumnParams?.Column ?? 0 : 0;
88+
this.FindAscendant<ColumnsLayoutPage>()?.SetWidth(currentBladeIndex);
89+
}
90+
}
91+
92+
8393
private void FileList_Loaded(object sender, RoutedEventArgs e)
8494
{
8595
ContentScroller = FileList.FindDescendant<ScrollViewer>(x => x.Name == "ScrollViewer");
96+
ParentShellPageInstance.ShellViewModel.ItemLoadStatusChanged += OnItemLoadStatusChanged;
8697
}
8798

8899
private void ColumnViewBase_GotFocus(object sender, RoutedEventArgs e)
@@ -186,6 +197,7 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
186197
{
187198
base.OnNavigatingFrom(e);
188199
UserSettingsService.LayoutSettingsService.PropertyChanged -= LayoutSettingsService_PropertyChanged;
200+
ParentShellPageInstance.ShellViewModel.ItemLoadStatusChanged -= OnItemLoadStatusChanged;
189201
}
190202

191203
private void LayoutSettingsService_PropertyChanged(object? sender, PropertyChangedEventArgs e)

src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<Setter Property="CloseButtonVisibility" Value="Collapsed" />
2525
<Setter Property="BorderThickness" Value="0,0,1,0" />
2626
<Setter Property="BorderBrush" Value="{ThemeResource DividerStrokeColorDefaultBrush}" />
27-
<Setter Property="Width" Value="300" />
27+
<Setter Property="Width" Value="200" />
2828
</Style>
2929
</local:BaseLayoutPage.Resources>
3030

src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ private void ColumnViewBase_ItemInvoked(object? sender, EventArgs e)
8181
}
8282
}
8383

84+
public void SetWidth(int index)
85+
{
86+
var blade = ColumnHost.ActiveBlades[index];
87+
blade?.SetWidth();
88+
}
89+
8490
private void ContentChanged(IShellPage p)
8591
{
8692
(ParentShellPageInstance as ModernShellPage)?.RaiseContentChanged(p, p.TabBarItemParameter);

src/Files.App/Views/Shells/ColumnShellPage.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
x:Name="RootPage"
1111
KeyboardAcceleratorPlacementMode="Hidden"
1212
Loaded="Page_Loaded"
13+
Unloaded="Page_Unloaded"
1314
mc:Ignorable="d">
1415

1516
<local:BaseShellPage.Resources>

src/Files.App/Views/Shells/ColumnShellPage.xaml.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,16 @@ protected override void Page_Loaded(object sender, RoutedEventArgs e)
9393
NotifyPropertyChanged(nameof(ShellViewModel));
9494
}
9595

96+
private void Page_Unloaded(object sender, RoutedEventArgs e)
97+
{
98+
ShellViewModel.WorkingDirectoryModified -= ViewModel_WorkingDirectoryModified;
99+
ShellViewModel.ItemLoadStatusChanged -= FilesystemViewModel_ItemLoadStatusChanged;
100+
ShellViewModel.DirectoryInfoUpdated -= FilesystemViewModel_DirectoryInfoUpdated;
101+
ShellViewModel.PageTypeUpdated -= FilesystemViewModel_PageTypeUpdated;
102+
ShellViewModel.OnSelectionRequestedEvent -= FilesystemViewModel_OnSelectionRequestedEvent;
103+
ShellViewModel.GitDirectoryUpdated -= FilesystemViewModel_GitDirectoryUpdated;
104+
}
105+
96106
protected override async void ViewModel_WorkingDirectoryModified(object sender, WorkingDirectoryModifiedEventArgs e)
97107
{
98108
string value = e.Path;

0 commit comments

Comments
 (0)