Skip to content

Commit 83132c9

Browse files
authored
Feature: Added tooltips to Layout Picker (#14852)
1 parent 2f0714c commit 83132c9

File tree

9 files changed

+316
-4
lines changed

9 files changed

+316
-4
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Copyright (c) 2023 Files Community
2+
// Licensed under the MIT License. See the LICENSE.
3+
4+
using Microsoft.UI.Xaml.Data;
5+
6+
namespace Files.App.Converters
7+
{
8+
internal sealed class EnumToHumanizedConverter : IValueConverter
9+
{
10+
public string EnumTypeName { get; set; } = string.Empty;
11+
12+
public object Convert(object value, Type targetType, object parameter, string language)
13+
{
14+
var stringValue = value.ToString() ?? string.Empty;
15+
16+
return EnumTypeName switch
17+
{
18+
"DetailsViewSizeKind"
19+
=> LocalizedEnumDescriptionFactory.Get(Enum.Parse<DetailsViewSizeKind>(stringValue)),
20+
"ListViewSizeKind"
21+
=> LocalizedEnumDescriptionFactory.Get(Enum.Parse<ListViewSizeKind>(stringValue)),
22+
"TilesViewSizeKind"
23+
=> LocalizedEnumDescriptionFactory.Get(Enum.Parse<TilesViewSizeKind>(stringValue)),
24+
"GridViewSizeKind"
25+
=> LocalizedEnumDescriptionFactory.Get(Enum.Parse<GridViewSizeKind>(stringValue)),
26+
"ColumnsViewSizeKind"
27+
=> LocalizedEnumDescriptionFactory.Get(Enum.Parse<ColumnsViewSizeKind>(stringValue)),
28+
_ => string.Empty,
29+
};
30+
}
31+
32+
public object ConvertBack(object value, Type targetType, object parameter, string language)
33+
{
34+
throw new NotImplementedException();
35+
}
36+
}
37+
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
// Copyright (c) 2023 Files Community
2+
// Licensed under the MIT License. See the LICENSE.
3+
4+
namespace Files.App.Data.Factories
5+
{
6+
/// <summary>
7+
/// Generates localization description for an enum value.
8+
/// </summary>
9+
internal static class LocalizedEnumDescriptionFactory
10+
{
11+
private static Dictionary<DetailsViewSizeKind, string> DetailsViewSizeKinds { get; } = [];
12+
private static Dictionary<ListViewSizeKind, string> ListViewSizeKinds { get; } = [];
13+
private static Dictionary<TilesViewSizeKind, string> TilesViewSizeKinds { get; } = [];
14+
private static Dictionary<GridViewSizeKind, string> GridViewSizeKinds { get; } = [];
15+
private static Dictionary<ColumnsViewSizeKind, string> ColumnsViewSizeKinds { get; } = [];
16+
17+
public static string Get(DetailsViewSizeKind value)
18+
{
19+
if (DetailsViewSizeKinds.Count == 0)
20+
{
21+
DetailsViewSizeKinds.Add(DetailsViewSizeKind.Compact, "Compact".GetLocalizedResource());
22+
DetailsViewSizeKinds.Add(DetailsViewSizeKind.Small, "Small".GetLocalizedResource());
23+
DetailsViewSizeKinds.Add(DetailsViewSizeKind.Medium, "Medium".GetLocalizedResource());
24+
DetailsViewSizeKinds.Add(DetailsViewSizeKind.Large, "Large".GetLocalizedResource());
25+
DetailsViewSizeKinds.Add(DetailsViewSizeKind.ExtraLarge, "ExtraLarge".GetLocalizedResource());
26+
}
27+
28+
var stringValue = DetailsViewSizeKinds.GetValueOrDefault(value)!;
29+
return stringValue;
30+
}
31+
32+
public static string Get(ListViewSizeKind value)
33+
{
34+
if (ListViewSizeKinds.Count == 0)
35+
{
36+
ListViewSizeKinds.Add(ListViewSizeKind.Compact, "Compact".GetLocalizedResource());
37+
ListViewSizeKinds.Add(ListViewSizeKind.Small, "Small".GetLocalizedResource());
38+
ListViewSizeKinds.Add(ListViewSizeKind.Medium, "Medium".GetLocalizedResource());
39+
ListViewSizeKinds.Add(ListViewSizeKind.Large, "Large".GetLocalizedResource());
40+
ListViewSizeKinds.Add(ListViewSizeKind.ExtraLarge, "ExtraLarge".GetLocalizedResource());
41+
}
42+
43+
var stringValue = ListViewSizeKinds.GetValueOrDefault(value)!;
44+
return stringValue;
45+
}
46+
47+
public static string Get(TilesViewSizeKind value)
48+
{
49+
if (TilesViewSizeKinds.Count == 0)
50+
{
51+
TilesViewSizeKinds.Add(TilesViewSizeKind.Small, "Small".GetLocalizedResource());
52+
}
53+
54+
var stringValue = TilesViewSizeKinds.GetValueOrDefault(value)!;
55+
return stringValue;
56+
}
57+
58+
public static string Get(GridViewSizeKind value)
59+
{
60+
if (GridViewSizeKinds.Count == 0)
61+
{
62+
GridViewSizeKinds.Add(GridViewSizeKind.Small, "Small".GetLocalizedResource());
63+
GridViewSizeKinds.Add(GridViewSizeKind.Medium, "Medium".GetLocalizedResource());
64+
GridViewSizeKinds.Add(GridViewSizeKind.Three, "Medium+".GetLocalizedResource());
65+
GridViewSizeKinds.Add(GridViewSizeKind.Four, "Medium++".GetLocalizedResource());
66+
GridViewSizeKinds.Add(GridViewSizeKind.Five, "Medium+++".GetLocalizedResource());
67+
GridViewSizeKinds.Add(GridViewSizeKind.Six, "Medium++++".GetLocalizedResource());
68+
GridViewSizeKinds.Add(GridViewSizeKind.Seven, "Medium+++++".GetLocalizedResource());
69+
GridViewSizeKinds.Add(GridViewSizeKind.Large, "Large".GetLocalizedResource());
70+
GridViewSizeKinds.Add(GridViewSizeKind.Nine, "Large+".GetLocalizedResource());
71+
GridViewSizeKinds.Add(GridViewSizeKind.Ten, "Large++".GetLocalizedResource());
72+
GridViewSizeKinds.Add(GridViewSizeKind.Eleven, "Large+++".GetLocalizedResource());
73+
GridViewSizeKinds.Add(GridViewSizeKind.ExtraLarge, "ExtraLarge".GetLocalizedResource());
74+
}
75+
76+
var stringValue = GridViewSizeKinds.GetValueOrDefault(value)!;
77+
return stringValue;
78+
}
79+
80+
public static string Get(ColumnsViewSizeKind value)
81+
{
82+
if (ColumnsViewSizeKinds.Count == 0)
83+
{
84+
ColumnsViewSizeKinds.Add(ColumnsViewSizeKind.Compact, "Compact".GetLocalizedResource());
85+
ColumnsViewSizeKinds.Add(ColumnsViewSizeKind.Small, "Small".GetLocalizedResource());
86+
ColumnsViewSizeKinds.Add(ColumnsViewSizeKind.Medium, "Medium".GetLocalizedResource());
87+
ColumnsViewSizeKinds.Add(ColumnsViewSizeKind.Large, "Large".GetLocalizedResource());
88+
ColumnsViewSizeKinds.Add(ColumnsViewSizeKind.ExtraLarge, "ExtraLarge".GetLocalizedResource());
89+
}
90+
91+
var stringValue = ColumnsViewSizeKinds.GetValueOrDefault(value)!;
92+
return stringValue;
93+
}
94+
}
95+
}

src/Files.App/Strings/en-US/Resources.resw

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3670,4 +3670,56 @@
36703670
<data name="TilesViewSizeInfo" xml:space="preserve">
36713671
<value>Additional sizes are not yet available for the Tiles View.</value>
36723672
</data>
3673+
<data name="Compact" xml:space="preserve">
3674+
<value>Compact</value>
3675+
<comment>Used to describe layout sizes</comment>
3676+
</data>
3677+
<data name="Small" xml:space="preserve">
3678+
<value>Small</value>
3679+
<comment>Used to describe layout sizes</comment>
3680+
</data>
3681+
<data name="Medium" xml:space="preserve">
3682+
<value>Medium</value>
3683+
<comment>Used to describe layout sizes</comment>
3684+
</data>
3685+
<data name="Medium+" xml:space="preserve">
3686+
<value>Medium +</value>
3687+
<comment>Used to describe layout sizes</comment>
3688+
</data>
3689+
<data name="Medium++" xml:space="preserve">
3690+
<value>Medium ++</value>
3691+
<comment>Used to describe layout sizes</comment>
3692+
</data>
3693+
<data name="Medium+++" xml:space="preserve">
3694+
<value>Medium +++</value>
3695+
<comment>Used to describe layout sizes</comment>
3696+
</data>
3697+
<data name="Medium++++" xml:space="preserve">
3698+
<value>Medium ++++</value>
3699+
<comment>Used to describe layout sizes</comment>
3700+
</data>
3701+
<data name="Medium+++++" xml:space="preserve">
3702+
<value>Medium +++++</value>
3703+
<comment>Used to describe layout sizes</comment>
3704+
</data>
3705+
<data name="Large" xml:space="preserve">
3706+
<value>Large</value>
3707+
<comment>Used to describe layout sizes</comment>
3708+
</data>
3709+
<data name="Large+" xml:space="preserve">
3710+
<value>Large +</value>
3711+
<comment>Used to describe layout sizes</comment>
3712+
</data>
3713+
<data name="Large++" xml:space="preserve">
3714+
<value>Large ++</value>
3715+
<comment>Used to describe layout sizes</comment>
3716+
</data>
3717+
<data name="Large+++" xml:space="preserve">
3718+
<value>Large +++</value>
3719+
<comment>Used to describe layout sizes</comment>
3720+
</data>
3721+
<data name="ExtraLarge" xml:space="preserve">
3722+
<value>Extra large</value>
3723+
<comment>Used to describe layout sizes</comment>
3724+
</data>
36733725
</root>

src/Files.App/UserControls/InnerNavigationToolbar.xaml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@
2626
<SolidColorBrush x:Key="CommandBarBorderBrushOpen" Color="Transparent" />
2727

2828
<converters:GenericEnumConverter x:Key="GenericEnumConverter" />
29+
<converters:EnumToHumanizedConverter x:Key="DetailsViewSizeKindEnumToHumanizedConverter" EnumTypeName="DetailsViewSizeKind" />
30+
<converters:EnumToHumanizedConverter x:Key="ListViewSizeKindEnumToHumanizedConverter" EnumTypeName="ListViewSizeKind" />
31+
<converters:EnumToHumanizedConverter x:Key="TilesViewSizeKindEnumToHumanizedConverter" EnumTypeName="TilesViewSizeKind" />
32+
<converters:EnumToHumanizedConverter x:Key="GridViewSizeKindEnumToHumanizedConverter" EnumTypeName="GridViewSizeKind" />
33+
<converters:EnumToHumanizedConverter x:Key="ColumnsViewSizeKindEnumToHumanizedConverter" EnumTypeName="ColumnsViewSizeKind" />
2934
<wctconverters:BoolNegationConverter x:Key="BoolNegationConverter" />
3035
<wctconverters:BoolToVisibilityConverter
3136
x:Key="NegatedBoolToVisibilityConverter"
@@ -770,6 +775,7 @@
770775
<!-- Sizes -->
771776
<TextBlock FontWeight="Medium" Text="{helpers:ResourceString Name=Size}" />
772777
<Grid>
778+
773779
<!-- Details -->
774780
<StackPanel
775781
x:Name="DetailsView"
@@ -778,10 +784,10 @@
778784
<Slider
779785
x:Name="DetailsViewSlider"
780786
Padding="4,0,4,0"
781-
IsThumbToolTipEnabled="False"
782787
Maximum="5"
783788
Minimum="1"
784789
SnapsTo="Ticks"
790+
ThumbToolTipValueConverter="{StaticResource DetailsViewSizeKindEnumToHumanizedConverter}"
785791
TickFrequency="1"
786792
TickPlacement="BottomRight"
787793
Value="{x:Bind UserSettingsService.LayoutSettingsService.DetailsViewSize, Mode=TwoWay, Converter={StaticResource GenericEnumConverter}, ConverterParameter='1-1,2-2,3-3,4-4,5-5'}" />
@@ -844,10 +850,10 @@
844850
<Slider
845851
x:Name="ListViewSlider"
846852
Padding="4,0,4,0"
847-
IsThumbToolTipEnabled="False"
848853
Maximum="5"
849854
Minimum="1"
850855
SnapsTo="Ticks"
856+
ThumbToolTipValueConverter="{StaticResource ListViewSizeKindEnumToHumanizedConverter}"
851857
TickFrequency="1"
852858
TickPlacement="BottomRight"
853859
Value="{x:Bind UserSettingsService.LayoutSettingsService.ListViewSize, Mode=TwoWay, Converter={StaticResource GenericEnumConverter}, ConverterParameter='1-1,2-2,3-3,4-4,5-5'}" />
@@ -927,10 +933,10 @@
927933
<Slider
928934
x:Name="GridViewSlider"
929935
Padding="4,0,4,0"
930-
IsThumbToolTipEnabled="False"
931936
Maximum="12"
932937
Minimum="1"
933938
SnapsTo="Ticks"
939+
ThumbToolTipValueConverter="{StaticResource GridViewSizeKindEnumToHumanizedConverter}"
934940
TickFrequency="1"
935941
TickPlacement="BottomRight"
936942
Value="{x:Bind UserSettingsService.LayoutSettingsService.GridViewSize, Mode=TwoWay, Converter={StaticResource GenericEnumConverter}, ConverterParameter='1-1,2-2,3-3,4-4,5-5,6-6,7-7,8-8,9-9,10-10,11-11,12-12'}" />
@@ -1000,10 +1006,10 @@
10001006
<Slider
10011007
x:Name="ColumnViewSlider"
10021008
Padding="4,0,4,0"
1003-
IsThumbToolTipEnabled="False"
10041009
Maximum="5"
10051010
Minimum="1"
10061011
SnapsTo="Ticks"
1012+
ThumbToolTipValueConverter="{StaticResource ColumnsViewSizeKindEnumToHumanizedConverter}"
10071013
TickFrequency="1"
10081014
TickPlacement="BottomRight"
10091015
Value="{x:Bind UserSettingsService.LayoutSettingsService.ColumnsViewSize, Mode=TwoWay, Converter={StaticResource GenericEnumConverter}, ConverterParameter='1-1,2-2,3-3,4-4,5-5'}" />

src/Files.Core/Data/Enums/ColumnsViewSizeKind.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,34 @@
33

44
namespace Files.Core.Data.Enums
55
{
6+
/// <summary>
7+
/// Defines constants that specify the size in the Columns View layout.
8+
/// </summary>
69
public enum ColumnsViewSizeKind
710
{
11+
/// <summary>
12+
/// The size is compact.
13+
/// </summary>
814
Compact = 1,
15+
16+
/// <summary>
17+
/// The size is small.
18+
/// </summary>
919
Small = 2,
20+
21+
/// <summary>
22+
/// The size is medium.
23+
/// </summary>
1024
Medium = 3,
25+
26+
/// <summary>
27+
/// The size is large.
28+
/// </summary>
1129
Large = 4,
30+
31+
/// <summary>
32+
/// The size is extra large.
33+
/// </summary>
1234
ExtraLarge = 5,
1335
}
1436
}

src/Files.Core/Data/Enums/DetailsViewSizeKind.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,34 @@
33

44
namespace Files.Core.Data.Enums
55
{
6+
/// <summary>
7+
/// Defines constants that specify the size in the Details View layout.
8+
/// </summary>
69
public enum DetailsViewSizeKind
710
{
11+
/// <summary>
12+
/// The size is compact.
13+
/// </summary>
814
Compact = 1,
15+
16+
/// <summary>
17+
/// The size is small.
18+
/// </summary>
919
Small = 2,
20+
21+
/// <summary>
22+
/// The size is medium.
23+
/// </summary>
1024
Medium = 3,
25+
26+
/// <summary>
27+
/// The size is large.
28+
/// </summary>
1129
Large = 4,
30+
31+
/// <summary>
32+
/// The size is extra large.
33+
/// </summary>
1234
ExtraLarge = 5,
1335
}
1436
}

src/Files.Core/Data/Enums/GridViewSizeKind.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,69 @@
33

44
namespace Files.Core.Data.Enums
55
{
6+
/// <summary>
7+
/// Defines constants that specify the size in the Grid View layout.
8+
/// </summary>
69
public enum GridViewSizeKind
710
{
11+
/// <summary>
12+
/// The size is small.
13+
/// </summary>
814
Small = 1,
15+
16+
/// <summary>
17+
/// The size is medium.
18+
/// </summary>
919
Medium = 2,
20+
21+
/// <summary>
22+
/// The size is medium+.
23+
/// </summary>
1024
Three = 3,
25+
26+
/// <summary>
27+
/// The size is medium++.
28+
/// </summary>
1129
Four = 4,
30+
31+
/// <summary>
32+
/// The size is medium+++.
33+
/// </summary>
1234
Five = 5,
35+
36+
/// <summary>
37+
/// The size is medium++++.
38+
/// </summary>
1339
Six = 6,
40+
41+
/// <summary>
42+
/// The size is medium+++++.
43+
/// </summary>
1444
Seven = 7,
45+
46+
/// <summary>
47+
/// The size is large.
48+
/// </summary>
1549
Large = 8,
50+
51+
/// <summary>
52+
/// The size is large+.
53+
/// </summary>
1654
Nine = 9,
55+
56+
/// <summary>
57+
/// The size is large++.
58+
/// </summary>
1759
Ten = 10,
60+
61+
/// <summary>
62+
/// The size is large+++.
63+
/// </summary>
1864
Eleven = 11,
65+
66+
/// <summary>
67+
/// The size is extra large.
68+
/// </summary>
1969
ExtraLarge = 12,
2070
}
2171
}

0 commit comments

Comments
 (0)