Merge branch 'main' of https://github.com/bkaankose/Wino-Mail
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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}"
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user