Moved refresh and multi select buttons

This commit is contained in:
Aleh Khantsevich
2024-08-29 00:19:24 +02:00
parent f002ccfa3a
commit 552fca8df7
4 changed files with 138 additions and 158 deletions

View File

@@ -11,6 +11,8 @@
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ms-appx:///CommunityToolkit.WinUI.Controls.Segmented/Segmented/Segmented.xaml" />
<ResourceDictionary Source="/Styles/Converters.xaml" /> <ResourceDictionary Source="/Styles/Converters.xaml" />
<ResourceDictionary Source="/Styles/FontIcons.xaml" /> <ResourceDictionary Source="/Styles/FontIcons.xaml" />
<ResourceDictionary Source="/Styles/Colors.xaml" /> <ResourceDictionary Source="/Styles/Colors.xaml" />

View File

@@ -1,18 +0,0 @@
using System.Collections;
namespace Wino.Extensions
{
public static class EnumerableExtensions
{
public static IEnumerable OfType<T1, T2>(this IEnumerable source)
{
foreach (object item in source)
{
if (item is T1 || item is T2)
{
yield return item;
}
}
}
}
}

View File

@@ -48,7 +48,7 @@
<!-- Header Templates --> <!-- Header Templates -->
<DataTemplate x:Key="MailGroupHeaderDefaultTemplate" x:DataType="collections:IReadOnlyObservableGroup"> <DataTemplate x:Key="MailGroupHeaderDefaultTemplate" x:DataType="collections:IReadOnlyObservableGroup">
<Grid <Grid
Margin="2,2,16,2" Margin="2,2,6,2"
AllowFocusOnInteraction="False" AllowFocusOnInteraction="False"
Background="{ThemeResource MailListHeaderBackgroundColor}" Background="{ThemeResource MailListHeaderBackgroundColor}"
CornerRadius="6"> CornerRadius="6">
@@ -272,10 +272,7 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<!-- Top Area --> <!-- Top Area -->
<Grid <Grid CornerRadius="8" RowSpacing="4">
Padding="2,6,4,6"
CornerRadius="8"
RowSpacing="4">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
@@ -284,150 +281,122 @@
<!-- Top Commands --> <!-- Top Commands -->
<Grid <Grid
Grid.Row="0" Grid.Row="0"
Padding="2,0" Margin="0,5,5,0"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
CornerRadius="8"> CornerRadius="8"
<!-- Commands --> Visibility="Collapsed">
<Grid> <CommandBar
<Grid.ColumnDefinitions> HorizontalAlignment="Left"
<ColumnDefinition Width="*" /> DefaultLabelPosition="Collapsed"
<ColumnDefinition Width="*" /> OverflowButtonVisibility="Auto">
<ColumnDefinition Width="Auto" /> <AppBarButton
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button
Command="{x:Bind ViewModel.SyncFolderCommand}"
IsEnabled="{x:Bind ViewModel.CanSynchronize, Mode=OneWay}"
Style="{StaticResource TopCommandBarButtonStyle}">
<Button.Content>
<controls:WinoFontIcon FontSize="16" Icon="Sync" />
</Button.Content>
</Button>
<ToggleButton
x:Name="SelectionModeToggle"
Grid.Column="1"
Checked="SelectionModeToggleChecked"
IsChecked="{x:Bind ViewModel.IsMultiSelectionModeEnabled, Mode=TwoWay}"
Style="{StaticResource TopCommandBarToggleButtonStyle}"
Unchecked="SelectionModeToggleUnchecked">
<ToggleButton.Content>
<controls:WinoFontIcon FontSize="18" Icon="MultiSelect" />
</ToggleButton.Content>
</ToggleButton>
<AppBarSeparator Grid.Column="2" Margin="2,0" />
<Button
x:Name="ArchiveAppBarButton" x:Name="ArchiveAppBarButton"
Grid.Column="3"
x:Load="{x:Bind helpers:XamlHelpers.ReverseBoolConverter(ViewModel.IsArchiveSpecialFolder), Mode=OneWay}" x:Load="{x:Bind helpers:XamlHelpers.ReverseBoolConverter(ViewModel.IsArchiveSpecialFolder), Mode=OneWay}"
Command="{x:Bind ViewModel.MailOperationCommand}" Command="{x:Bind ViewModel.MailOperationCommand}"
IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}" IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}"
Style="{StaticResource TopCommandBarButtonStyle}" Label="{x:Bind domain:Translator.MailOperation_Archive}"
ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_Archive}"> ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_Archive}">
<Button.Content> <AppBarButton.Icon>
<controls:WinoFontIcon FontSize="18" Icon="Archive" /> <controls:WinoFontIcon FontSize="18" Icon="Archive" />
</Button.Content> </AppBarButton.Icon>
<Button.CommandParameter> <AppBarButton.CommandParameter>
<enums:MailOperation>Archive</enums:MailOperation> <enums:MailOperation>Archive</enums:MailOperation>
</Button.CommandParameter> </AppBarButton.CommandParameter>
</Button> </AppBarButton>
<Button <AppBarButton
x:Name="UnarchiveAppBarButton" x:Name="UnarchiveAppBarButton"
Grid.Column="3"
x:Load="{x:Bind ViewModel.IsArchiveSpecialFolder, Mode=OneWay}" x:Load="{x:Bind ViewModel.IsArchiveSpecialFolder, Mode=OneWay}"
Command="{x:Bind ViewModel.MailOperationCommand}" Command="{x:Bind ViewModel.MailOperationCommand}"
IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}" IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}"
Style="{StaticResource TopCommandBarButtonStyle}" Label="{x:Bind domain:Translator.MailOperation_Unarchive}"
ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_Unarchive}"> ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_Unarchive}">
<Button.Content> <AppBarButton.Icon>
<controls:WinoFontIcon FontSize="18" Icon="UnArchive" /> <controls:WinoFontIcon FontSize="18" Icon="UnArchive" />
</Button.Content> </AppBarButton.Icon>
<Button.CommandParameter> <AppBarButton.CommandParameter>
<enums:MailOperation>UnArchive</enums:MailOperation> <enums:MailOperation>UnArchive</enums:MailOperation>
</Button.CommandParameter> </AppBarButton.CommandParameter>
</Button> </AppBarButton>
<Button <AppBarButton
Grid.Column="4"
Command="{x:Bind ViewModel.MailOperationCommand}" Command="{x:Bind ViewModel.MailOperationCommand}"
IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}" IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}"
Style="{StaticResource TopCommandBarButtonStyle}" Label="{x:Bind domain:Translator.MailOperation_Delete}"
ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_Delete}"> ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_Delete}">
<Button.CommandParameter> <AppBarButton.CommandParameter>
<enums:MailOperation>SoftDelete</enums:MailOperation> <enums:MailOperation>SoftDelete</enums:MailOperation>
</Button.CommandParameter> </AppBarButton.CommandParameter>
<Button.Content> <AppBarButton.Icon>
<controls:WinoFontIcon FontSize="18" Icon="Delete" /> <controls:WinoFontIcon FontSize="18" Icon="Delete" />
</Button.Content> </AppBarButton.Icon>
</Button> </AppBarButton>
<Button <AppBarButton
x:Name="MoveButtonAppBarButton"
Grid.Column="5"
Command="{x:Bind ViewModel.MailOperationCommand}" Command="{x:Bind ViewModel.MailOperationCommand}"
IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}" IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}"
Style="{StaticResource TopCommandBarButtonStyle}" Label="{x:Bind domain:Translator.MailOperation_Move}"
ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_Move}"> ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_Move}">
<Button.CommandParameter> <AppBarButton.CommandParameter>
<enums:MailOperation>Move</enums:MailOperation> <enums:MailOperation>Move</enums:MailOperation>
</Button.CommandParameter> </AppBarButton.CommandParameter>
<Button.Content> <AppBarButton.Icon>
<controls:WinoFontIcon FontSize="18" Icon="Move" /> <controls:WinoFontIcon FontSize="18" Icon="Move" />
</Button.Content> </AppBarButton.Icon>
</Button> </AppBarButton>
<Button <AppBarButton
Grid.Column="6" Command="{x:Bind ViewModel.MailOperationCommand}"
IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}" IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}"
Style="{StaticResource TopCommandBarButtonStyle}"> Label="{x:Bind domain:Translator.MailOperation_SetFlag}"
<Button.Content> ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_SetFlag}">
<controls:WinoFontIcon FontSize="20" Icon="More" /> <AppBarButton.CommandParameter>
</Button.Content> <enums:MailOperation>SetFlag</enums:MailOperation>
<Button.Flyout> </AppBarButton.CommandParameter>
<MenuFlyout AreOpenCloseAnimationsEnabled="False" Placement="BottomEdgeAlignedLeft"> <AppBarButton.Icon>
<MenuFlyoutItem Command="{x:Bind ViewModel.MailOperationCommand}" Text="{x:Bind domain:Translator.MailOperation_SetFlag}"> <controls:WinoFontIcon FontSize="18" Icon="Flag" />
<MenuFlyoutItem.CommandParameter> </AppBarButton.Icon>
<enums:MailOperation>SetFlag</enums:MailOperation> </AppBarButton>
</MenuFlyoutItem.CommandParameter>
<MenuFlyoutItem.Icon> <AppBarButton
<controls:WinoFontIcon Icon="Flag" /> Command="{x:Bind ViewModel.MailOperationCommand}"
</MenuFlyoutItem.Icon> IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}"
</MenuFlyoutItem> Label="{x:Bind domain:Translator.MailOperation_ClearFlag}"
<MenuFlyoutItem Command="{x:Bind ViewModel.MailOperationCommand}" Text="{x:Bind domain:Translator.MailOperation_ClearFlag}"> ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_ClearFlag}">
<MenuFlyoutItem.CommandParameter> <AppBarButton.CommandParameter>
<enums:MailOperation>ClearFlag</enums:MailOperation> <enums:MailOperation>ClearFlag</enums:MailOperation>
</MenuFlyoutItem.CommandParameter> </AppBarButton.CommandParameter>
<MenuFlyoutItem.Icon> <AppBarButton.Icon>
<controls:WinoFontIcon Icon="ClearFlag" /> <controls:WinoFontIcon FontSize="18" Icon="ClearFlag" />
</MenuFlyoutItem.Icon> </AppBarButton.Icon>
</MenuFlyoutItem> </AppBarButton>
<MenuFlyoutItem Command="{x:Bind ViewModel.MailOperationCommand}" Text="{x:Bind domain:Translator.MailOperation_MarkAsRead}">
<MenuFlyoutItem.CommandParameter> <AppBarButton
<enums:MailOperation>MarkAsRead</enums:MailOperation> Command="{x:Bind ViewModel.MailOperationCommand}"
</MenuFlyoutItem.CommandParameter> IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}"
<MenuFlyoutItem.Icon> Label="{x:Bind domain:Translator.MailOperation_MarkAsRead}"
<controls:WinoFontIcon Icon="MarkRead" /> ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_MarkAsRead}">
</MenuFlyoutItem.Icon> <AppBarButton.CommandParameter>
</MenuFlyoutItem> <enums:MailOperation>MarkAsRead</enums:MailOperation>
<MenuFlyoutItem Command="{x:Bind ViewModel.MailOperationCommand}" Text="{x:Bind domain:Translator.MailOperation_MarkAsUnread}"> </AppBarButton.CommandParameter>
<MenuFlyoutItem.CommandParameter> <AppBarButton.Icon>
<enums:MailOperation>MarkAsUnread</enums:MailOperation> <controls:WinoFontIcon FontSize="18" Icon="MarkRead" />
</MenuFlyoutItem.CommandParameter> </AppBarButton.Icon>
<MenuFlyoutItem.Icon> </AppBarButton>
<controls:WinoFontIcon Icon="MarkUnread" />
</MenuFlyoutItem.Icon> <AppBarButton
</MenuFlyoutItem> Command="{x:Bind ViewModel.MailOperationCommand}"
</MenuFlyout> IsEnabled="{x:Bind ViewModel.HasSelectedItems, Mode=OneWay}"
</Button.Flyout> Label="{x:Bind domain:Translator.MailOperation_MarkAsUnread}"
</Button> ToolTipService.ToolTip="{x:Bind domain:Translator.MailOperation_MarkAsUnread}">
</Grid> <AppBarButton.CommandParameter>
<enums:MailOperation>MarkAsUnread</enums:MailOperation>
</AppBarButton.CommandParameter>
<AppBarButton.Icon>
<controls:WinoFontIcon FontSize="18" Icon="MarkUnread" />
</AppBarButton.Icon>
</AppBarButton>
</CommandBar>
</Grid> </Grid>
<!-- Pivot + Sync + Multi Select --> <!-- Pivot + Sync + Multi Select -->
@@ -479,30 +448,58 @@
</StackPanel> </StackPanel>
</DataTemplate> </DataTemplate>
</toolkit:Segmented.ItemTemplate> </toolkit:Segmented.ItemTemplate>
<toolkit:Segmented.Resources>
<ResourceDictionary Source="ms-appx:///CommunityToolkit.WinUI.Controls.Segmented/Segmented/Segmented.xaml" />
</toolkit:Segmented.Resources>
</toolkit:Segmented> </toolkit:Segmented>
<!-- Filtering --> <!-- Sync + Multi Select + Filtering -->
<muxc:DropDownButton <StackPanel
Grid.Row="1" Grid.Row="1"
Grid.Column="2" Grid.Column="2"
Content="{x:Bind ViewModel.SelectedFilterOption.Title, Mode=OneWay}" Orientation="Horizontal">
ToolTipService.ToolTip="Filter"> <Button
<muxc:DropDownButton.Flyout> Background="Transparent"
<menuflyouts:FilterMenuFlyout BorderThickness="0"
x:Name="FilterMenuFlyout" Command="{x:Bind ViewModel.SyncFolderCommand}"
AreOpenCloseAnimationsEnabled="True" IsEnabled="{x:Bind ViewModel.CanSynchronize, Mode=OneWay}">
FilterOptions="{x:Bind ViewModel.FilterOptions, Mode=OneTime}" <Button.Content>
Placement="Bottom" <FontIcon
SelectedFilterChangedCommand="{x:Bind ViewModel.SelectedFilterChangedCommand}" FontFamily="Segoe Fluent Icons"
SelectedFilterOption="{x:Bind ViewModel.SelectedFilterOption, Mode=TwoWay}" FontSize="16"
SelectedSortingOption="{x:Bind ViewModel.SelectedSortingOption, Mode=TwoWay}" Glyph="&#xE895;" />
SelectedSortingOptionChangedCommand="{x:Bind ViewModel.SelectedSortingChangedCommand}" </Button.Content>
SortingOptions="{x:Bind ViewModel.SortingOptions, Mode=OneTime}" /> </Button>
</muxc:DropDownButton.Flyout> <ToggleButton
</muxc:DropDownButton> x:Name="SelectionModeToggle"
Background="Transparent"
BorderThickness="0"
Checked="SelectionModeToggleChecked"
IsChecked="{x:Bind ViewModel.IsMultiSelectionModeEnabled, Mode=TwoWay}"
Unchecked="SelectionModeToggleUnchecked">
<ToggleButton.Content>
<FontIcon
FontFamily="Segoe Fluent Icons"
FontSize="16"
Glyph="&#xE762;" />
</ToggleButton.Content>
</ToggleButton>
<muxc:DropDownButton
Background="Transparent"
BorderThickness="0"
Content="{x:Bind ViewModel.SelectedFilterOption.Title, Mode=OneWay}"
ToolTipService.ToolTip="Filter">
<muxc:DropDownButton.Flyout>
<menuflyouts:FilterMenuFlyout
x:Name="FilterMenuFlyout"
AreOpenCloseAnimationsEnabled="True"
FilterOptions="{x:Bind ViewModel.FilterOptions, Mode=OneTime}"
Placement="Bottom"
SelectedFilterChangedCommand="{x:Bind ViewModel.SelectedFilterChangedCommand}"
SelectedFilterOption="{x:Bind ViewModel.SelectedFilterOption, Mode=TwoWay}"
SelectedSortingOption="{x:Bind ViewModel.SelectedSortingOption, Mode=TwoWay}"
SelectedSortingOptionChangedCommand="{x:Bind ViewModel.SelectedSortingChangedCommand}"
SortingOptions="{x:Bind ViewModel.SortingOptions, Mode=OneTime}" />
</muxc:DropDownButton.Flyout>
</muxc:DropDownButton>
</StackPanel>
<muxc:InfoBar <muxc:InfoBar
Title="{x:Bind domain:Translator.InfoBarTitle_SynchronizationDisabledFolder}" Title="{x:Bind domain:Translator.InfoBarTitle_SynchronizationDisabledFolder}"

View File

@@ -276,7 +276,6 @@
<Compile Include="Extensions\CompositionExtensions.Implicit.cs" /> <Compile Include="Extensions\CompositionExtensions.Implicit.cs" />
<Compile Include="Extensions\CompositionExtensions.Size.cs" /> <Compile Include="Extensions\CompositionExtensions.Size.cs" />
<Compile Include="Extensions\CompositionEnums.cs" /> <Compile Include="Extensions\CompositionEnums.cs" />
<Compile Include="Extensions\EnumerableExtensions.cs" />
<Compile Include="Extensions\UtilExtensions.cs" /> <Compile Include="Extensions\UtilExtensions.cs" />
<Compile Include="MenuFlyouts\FilterMenuFlyout.cs" /> <Compile Include="MenuFlyouts\FilterMenuFlyout.cs" />
<Compile Include="Controls\ImagePreviewControl.cs" /> <Compile Include="Controls\ImagePreviewControl.cs" />