This commit is contained in:
Burak Kaan Köse
2024-09-03 01:39:57 +02:00
7 changed files with 10 additions and 328 deletions

View File

@@ -17,10 +17,6 @@ namespace Wino.Behaviors
"PrimaryCommands", typeof(object), typeof(BindableCommandBarBehavior),
new PropertyMetadata(null, UpdateCommands));
public static readonly DependencyProperty ItemTemplateSelectorProperty = DependencyProperty.Register(
"ItemTemplateSelector", typeof(DataTemplateSelector), typeof(BindableCommandBarBehavior),
new PropertyMetadata(null, null));
public ICommand ItemClickedCommand
{
get { return (ICommand)GetValue(ItemClickedCommandProperty); }
@@ -29,12 +25,6 @@ namespace Wino.Behaviors
public static readonly DependencyProperty ItemClickedCommandProperty = DependencyProperty.Register(nameof(ItemClickedCommand), typeof(ICommand), typeof(BindableCommandBarBehavior), new PropertyMetadata(null));
public DataTemplateSelector ItemTemplateSelector
{
get { return (DataTemplateSelector)GetValue(ItemTemplateSelectorProperty); }
set { SetValue(ItemTemplateSelectorProperty, value); }
}
public object PrimaryCommands
{
get { return GetValue(PrimaryCommandsProperty); }
@@ -115,6 +105,12 @@ namespace Wino.Behaviors
DataContext = mailOperationMenuItem,
};
ToolTip toolTip = new ToolTip
{
Content = label
};
ToolTipService.SetToolTip((DependencyObject)menuItem, toolTip);
((AppBarButton)menuItem).Click -= Button_Click;
((AppBarButton)menuItem).Click += Button_Click;
}

View File

@@ -1,136 +0,0 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows.Input;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Menus;
using Wino.Helpers;
using Wino.MenuFlyouts;
namespace Wino.Controls
{
public class RendererCommandBar : CommandBar, IDisposable
{
public static readonly DependencyProperty MenuItemsProperty = DependencyProperty.Register(nameof(MenuItemsProperty), typeof(ObservableCollection<MailOperationMenuItem>), typeof(RendererCommandBar), new PropertyMetadata(null, OnMenuItemsChanged));
public static readonly DependencyProperty OperationClickedCommandProperty = DependencyProperty.Register(nameof(OperationClickedCommand), typeof(ICommand), typeof(RendererCommandBar), new PropertyMetadata(null));
public ICommand OperationClickedCommand
{
get { return (ICommand)GetValue(OperationClickedCommandProperty); }
set { SetValue(OperationClickedCommandProperty, value); }
}
public ObservableCollection<MailOperationMenuItem> MenuItems
{
get { return (ObservableCollection<MailOperationMenuItem>)GetValue(MenuItemsProperty); }
set { SetValue(MenuItemsProperty, value); }
}
public RendererCommandBar()
{
this.DefaultStyleKey = typeof(CommandBar);
}
private static void OnMenuItemsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
if (obj is RendererCommandBar commandBar)
{
if (args.OldValue != null)
commandBar.UnregisterButtonCollection(args.NewValue as ObservableCollection<MailOperationMenuItem>);
if (args.NewValue != null)
commandBar.RegisterButtonCollection(args.NewValue as ObservableCollection<MailOperationMenuItem>);
}
}
private void RegisterButtonCollection(ObservableCollection<MailOperationMenuItem> collection)
{
collection.CollectionChanged -= ButtonCollectionChanged;
collection.CollectionChanged += ButtonCollectionChanged;
InitItems(collection);
}
private void UnregisterButtonCollection(ObservableCollection<MailOperationMenuItem> collection)
{
collection.CollectionChanged -= ButtonCollectionChanged;
}
// One time initializer on registration.
private void InitItems(IEnumerable<MailOperationMenuItem> items)
{
foreach (var item in items)
{
var operationText = XamlHelpers.GetOperationString(item.Operation);
var operationAppBarItem = new AppBarButton()
{
Label = operationText
};
ToolTipService.SetToolTip(operationAppBarItem, operationText);
PrimaryCommands.Add(operationAppBarItem);
}
}
private void ButtonCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Reset)
{
PrimaryCommands.Clear();
SecondaryCommands.Clear();
}
if (e.NewItems != null)
{
foreach (var newItem in e.NewItems)
{
if (newItem is MailOperationMenuItem item)
{
var button = new RendererCommandBarItem(item.Operation, Clicked)
{
IsEnabled = item.IsEnabled
};
if (!item.IsSecondaryMenuPreferred)
PrimaryCommands.Add(button);
else
SecondaryCommands.Add(button);
}
}
}
}
private void Clicked(MailOperation operation)
{
OperationClickedCommand?.Execute(operation);
}
private void DisposeMenuItems()
{
foreach (var item in this.PrimaryCommands)
{
if (item is RendererCommandBarItem rendererCommandBarItem)
{
rendererCommandBarItem.Dispose();
}
}
foreach (var item in this.SecondaryCommands)
{
if (item is RendererCommandBarItem rendererCommandBarItem)
{
rendererCommandBarItem.Dispose();
}
}
}
public void Dispose()
{
DisposeMenuItems();
}
}
}

View File

@@ -1,39 +0,0 @@
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Wino.Controls;
using Wino.Core.Domain.Enums;
using Wino.Helpers;
namespace Wino.MenuFlyouts
{
public class RendererCommandBarItem : AppBarButton, IDisposable
{
public MailOperation Operation { get; set; }
Action<MailOperation> Clicked { get; set; }
public RendererCommandBarItem(MailOperation operation, Action<MailOperation> clicked)
{
Margin = new Thickness(6, 0, 6, 0);
CornerRadius = new CornerRadius(6);
Operation = operation;
Clicked = clicked;
Label = XamlHelpers.GetOperationString(operation);
Icon = new WinoFontIcon() { Icon = WinoIconGlyph.Archive };
Click += MenuClicked;
}
private void MenuClicked(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
Clicked(Operation);
}
public void Dispose()
{
Click -= MenuClicked;
}
}
}

View File

@@ -1,84 +0,0 @@
using Windows.Graphics.Printing.OptionDetails;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Menus;
namespace Wino.Selectors
{
public class RendererCommandBarItemTemplateSelector : DataTemplateSelector
{
public DataTemplate Reply { get; set; }
public DataTemplate ReplyAll { get; set; }
public DataTemplate Archive { get; set; }
public DataTemplate Unarchive { get; set; }
public DataTemplate SetFlag { get; set; }
public DataTemplate ClearFlag { get; set; }
public DataTemplate MarkAsRead { get; set; }
public DataTemplate MarkAsUnread { get; set; }
public DataTemplate Delete { get; set; }
public DataTemplate Move { get; set; }
public DataTemplate MoveToJunk { get; set; }
public DataTemplate SaveAs { get; set; }
public DataTemplate Zoom { get; set; }
public DataTemplate Forward { get; set; }
public DataTemplate DarkEditor { get; set; }
public DataTemplate LightEditor { get; set; }
public DataTemplate SeperatorTemplate { get; set; }
public DataTemplate Find { get; set; }
public DataTemplate Print { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
if (item is MailOperationMenuItem mailOperationItem)
{
switch (mailOperationItem.Operation)
{
case MailOperation.None:
break;
case MailOperation.Archive:
return Archive;
case MailOperation.UnArchive:
return Unarchive;
case MailOperation.SoftDelete:
return Delete;
case MailOperation.Move:
return Move;
case MailOperation.MoveToJunk:
return MoveToJunk;
case MailOperation.SetFlag:
return SetFlag;
case MailOperation.ClearFlag:
return ClearFlag;
case MailOperation.MarkAsRead:
return MarkAsRead;
case MailOperation.MarkAsUnread:
return MarkAsUnread;
case MailOperation.Reply:
return Reply;
case MailOperation.ReplyAll:
return ReplyAll;
case MailOperation.Zoom:
return Zoom;
case MailOperation.SaveAs:
return SaveAs;
case MailOperation.Find:
return Find;
case MailOperation.Forward:
return Forward;
case MailOperation.DarkEditor:
return DarkEditor;
case MailOperation.LightEditor:
return LightEditor;
case MailOperation.Seperator:
return SeperatorTemplate;
case MailOperation.Print:
return Print;
default:
break;
}
}
return base.SelectTemplateCore(item, container);
}
}
}

View File

@@ -33,28 +33,6 @@
IsSourceGrouped="True"
Source="{x:Bind ViewModel.MailCollection.MailItems, Mode=OneWay}" />
<selectors:RendererCommandBarItemTemplateSelector
x:Key="RendererCommandBarItemTemplateSelector"
Archive="{StaticResource CommandBarItemArchiveTemplate}"
ClearFlag="{StaticResource CommandBarItemClearFlagTemplate}"
DarkEditor="{StaticResource CommandBarItemDarkEditorTemplate}"
Delete="{StaticResource CommandBarItemDeleteTemplate}"
Find="{StaticResource CommandBarItemFindTemplate}"
Forward="{StaticResource CommandBarItemForwardTemplate}"
LightEditor="{StaticResource CommandBarItemLightEditorTemplate}"
MarkAsRead="{StaticResource CommandBarItemMarkReadTemplate}"
MarkAsUnread="{StaticResource CommandBarItemMarkUnreadTemplate}"
Move="{StaticResource CommandBarItemMoveTemplate}"
MoveToJunk="{StaticResource CommandBarItemMoveToJunkTemplate}"
Print="{StaticResource CommandBarItemPrintTemplate}"
Reply="{StaticResource CommandBarItemReplyTemplate}"
ReplyAll="{StaticResource CommandBarItemReplyAllTemplate}"
SaveAs="{StaticResource CommandBarItemSaveTemplate}"
SeperatorTemplate="{StaticResource CommandBarItemSeperatorTemplate}"
SetFlag="{StaticResource CommandBarItemSetFlagTemplate}"
Unarchive="{StaticResource CommandBarItemUnarchiveTemplate}"
Zoom="{StaticResource CommandBarItemZoomTemplate}" />
<Thickness x:Key="ExpanderHeaderPadding">0,0,0,0</Thickness>
<Thickness x:Key="ExpanderChevronMargin">0,0,12,0</Thickness>
<Thickness x:Key="ExpanderHeaderBorderThickness">0,0,0,0</Thickness>
@@ -284,10 +262,7 @@
IsEnabled="{x:Bind helpers:XamlHelpers.CountToBooleanConverter(ViewModel.SelectedItemCount), Mode=OneWay}"
OverflowButtonVisibility="Auto">
<interactivity:Interaction.Behaviors>
<local:BindableCommandBarBehavior
ItemClickedCommand="{x:Bind ViewModel.ExecuteTopBarActionCommand}"
ItemTemplateSelector="{StaticResource RendererCommandBarItemTemplateSelector}"
PrimaryCommands="{x:Bind ViewModel.ActionItems, Mode=OneWay}" />
<local:BindableCommandBarBehavior ItemClickedCommand="{x:Bind ViewModel.ExecuteTopBarActionCommand}" PrimaryCommands="{x:Bind ViewModel.ActionItems, Mode=OneWay}" />
</interactivity:Interaction.Behaviors>
</CommandBar>
</Grid>
@@ -326,11 +301,10 @@
Style="{StaticResource PivotSegmentedStyle}">
<toolkit:Segmented.ItemTemplate>
<DataTemplate x:DataType="viewModelData:FolderPivotViewModel">
<StackPanel Orientation="Horizontal" Spacing="4">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{x:Bind FolderTitle}" />
<TextBlock
x:Name="CountTextBlock"
VerticalAlignment="Center"
Margin="4,0,0,0"
FontWeight="SemiBold"
Visibility="{x:Bind ShouldDisplaySelectedItemCount, Mode=OneWay}">
<Run Text="(" /><Run Text="{x:Bind SelectedItemCount, Mode=OneWay}" /><Run Text=")" />
@@ -566,7 +540,6 @@
<controls:WinoFontIcon FontSize="80" Icon="Mail" />
<TextBlock
x:Name="CountTextBlock"
HorizontalAlignment="Center"
FontSize="31"
Style="{StaticResource SubheaderTextBlockStyle}"

View File

@@ -38,28 +38,6 @@
Content="{x:Bind DisplayName}" />
</DataTemplate>
<selectors:RendererCommandBarItemTemplateSelector
x:Key="RendererCommandBarItemTemplateSelector"
Archive="{StaticResource CommandBarItemArchiveTemplate}"
ClearFlag="{StaticResource CommandBarItemClearFlagTemplate}"
DarkEditor="{StaticResource CommandBarItemDarkEditorTemplate}"
Delete="{StaticResource CommandBarItemDeleteTemplate}"
Find="{StaticResource CommandBarItemFindTemplate}"
Forward="{StaticResource CommandBarItemForwardTemplate}"
LightEditor="{StaticResource CommandBarItemLightEditorTemplate}"
MarkAsRead="{StaticResource CommandBarItemMarkReadTemplate}"
MarkAsUnread="{StaticResource CommandBarItemMarkUnreadTemplate}"
Move="{StaticResource CommandBarItemMoveTemplate}"
MoveToJunk="{StaticResource CommandBarItemMoveToJunkTemplate}"
Print="{StaticResource CommandBarItemPrintTemplate}"
Reply="{StaticResource CommandBarItemReplyTemplate}"
ReplyAll="{StaticResource CommandBarItemReplyAllTemplate}"
SaveAs="{StaticResource CommandBarItemSaveTemplate}"
SeperatorTemplate="{StaticResource CommandBarItemSeperatorTemplate}"
SetFlag="{StaticResource CommandBarItemSetFlagTemplate}"
Unarchive="{StaticResource CommandBarItemUnarchiveTemplate}"
Zoom="{StaticResource CommandBarItemZoomTemplate}" />
<!-- Attachment Template -->
<!-- Margin -8 0 is used to remove the padding from the ListViewItem -->
<DataTemplate x:Key="FileAttachmentTemplate" x:DataType="viewModelData:MailAttachmentViewModel">
@@ -208,10 +186,7 @@
IsDynamicOverflowEnabled="True"
OverflowButtonVisibility="Auto">
<interactivity:Interaction.Behaviors>
<local:BindableCommandBarBehavior
ItemClickedCommand="{x:Bind ViewModel.OperationClickedCommand}"
ItemTemplateSelector="{StaticResource RendererCommandBarItemTemplateSelector}"
PrimaryCommands="{x:Bind ViewModel.MenuItems, Mode=OneWay}" />
<local:BindableCommandBarBehavior ItemClickedCommand="{x:Bind ViewModel.OperationClickedCommand}" PrimaryCommands="{x:Bind ViewModel.MenuItems, Mode=OneWay}" />
</interactivity:Interaction.Behaviors>
<CommandBar.Content>
<Grid Padding="0,5">

View File

@@ -267,7 +267,6 @@
<Compile Include="MenuFlyouts\MailOperationMenuFlyoutItem.cs" />
<Compile Include="MenuFlyouts\WinoOperationFlyout.cs" />
<Compile Include="MenuFlyouts\WinoOperationFlyoutItem.cs" />
<Compile Include="Controls\RendererCommandBar.cs" />
<Compile Include="Converters\ReverseBooleanConverter.cs" />
<Compile Include="Dialogs\AccountCreationDialog.xaml.cs">
<DependentUpon>AccountCreationDialog.xaml</DependentUpon>
@@ -289,7 +288,6 @@
<Compile Include="Dialogs\NewAccountDialog.xaml.cs">
<DependentUpon>NewAccountDialog.xaml</DependentUpon>
</Compile>
<Compile Include="MenuFlyouts\RendererCommandBarItem.cs" />
<Compile Include="Helpers\WinoVisualTreeHelper.cs" />
<Compile Include="Helpers\XamlHelpers.cs" />
<Compile Include="Selectors\AccountProviderViewModelTemplateSelector.cs" />
@@ -301,7 +299,6 @@
<Compile Include="Selectors\MailItemDisplayModePreviewTemplateSelector.cs" />
<Compile Include="Selectors\MailItemDisplaySelector.cs" />
<Compile Include="Selectors\NavigationMenuTemplateSelector.cs" />
<Compile Include="Selectors\RendererCommandBarItemTemplateSelector.cs" />
<Compile Include="Services\ApplicationResourceManager.cs" />
<Compile Include="Services\DialogService.cs" />
<Compile Include="Services\WinoNavigationService.cs" />