WIP memory iconstorage
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
namespace TheXamlGuy.TaskbarGroup.Core
|
||||||
|
{
|
||||||
|
public static class Class1
|
||||||
|
{
|
||||||
|
public static void Test(Stream s)
|
||||||
|
{
|
||||||
|
using (FileStream outputFileStream = new(@"C:\Users\Daniel Clark\Pictures\trst.png", FileMode.Create))
|
||||||
|
{
|
||||||
|
s.CopyTo(outputFileStream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
namespace TheXamlGuy.TaskbarGroup.Core
|
||||||
|
{
|
||||||
|
public record IconStorage(string Path, Stream IconStream);
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.TaskbarGroup.Core
|
||||||
|
{
|
||||||
|
public class IconStorageHandler : IMessageHandler<IconStorage>
|
||||||
|
{
|
||||||
|
public void Handle(IconStorage message)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Store icon");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,8 +2,5 @@
|
|||||||
|
|
||||||
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
||||||
{
|
{
|
||||||
public record class Drag<TTarget>(DragEventArgs DragEventArgs) where TTarget : UIElement
|
public record class Drag<TTarget>(DragEventArgs DragEventArgs) where TTarget : UIElement;
|
||||||
{
|
|
||||||
public TTarget Target { get; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,5 @@
|
|||||||
|
|
||||||
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
||||||
{
|
{
|
||||||
public record class Drop<TTarget>(DragEventArgs DropEventArgs) where TTarget : UIElement
|
public record class Drop<TTarget>(DragEventArgs DropEventArgs) where TTarget : UIElement;
|
||||||
{
|
|
||||||
public TTarget Target { get; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using Microsoft.Xaml.Interactivity;
|
using Microsoft.Xaml.Interactivity;
|
||||||
using System;
|
using System;
|
||||||
using TheXamlGuy.TaskbarGroup.Core;
|
using TheXamlGuy.TaskbarGroup.Core;
|
||||||
using Windows.ApplicationModel.DataTransfer;
|
|
||||||
using Windows.UI.Xaml;
|
using Windows.UI.Xaml;
|
||||||
|
|
||||||
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
||||||
@@ -30,24 +29,19 @@ namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
|||||||
base.OnAttached();
|
base.OnAttached();
|
||||||
}
|
}
|
||||||
|
|
||||||
private object CreateDragMessage(object sender, DragEventArgs args)
|
protected override void OnDetaching()
|
||||||
{
|
{
|
||||||
var dropMessageType = typeof(Drag<>).MakeGenericType(sender.GetType());
|
AssociatedObject.DragOver -= OnDragOver;
|
||||||
return Activator.CreateInstance(dropMessageType, args);
|
AssociatedObject.Drop -= OnDrop;
|
||||||
}
|
|
||||||
|
|
||||||
private object CreateDropMessage(object sender, DragEventArgs args)
|
base.OnDetaching();
|
||||||
{
|
|
||||||
var dropMessageType = typeof(Drop<>).MakeGenericType(sender.GetType());
|
|
||||||
return Activator.CreateInstance(dropMessageType, args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDragOver(object sender, DragEventArgs args)
|
private void OnDragOver(object sender, DragEventArgs args)
|
||||||
{
|
{
|
||||||
if (Mediator is not null)
|
if (Mediator is not null)
|
||||||
{
|
{
|
||||||
var message = CreateDragMessage(sender, args);
|
Mediator.Handle(Activator.CreateInstance(typeof(Drag<>).MakeGenericType(sender.GetType()), args));
|
||||||
Mediator.HandleAsync(message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,8 +49,7 @@ namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
|||||||
{
|
{
|
||||||
if (Mediator is not null)
|
if (Mediator is not null)
|
||||||
{
|
{
|
||||||
var message = CreateDropMessage(sender, args);
|
Mediator.Handle(Activator.CreateInstance(typeof(Drop<>).MakeGenericType(sender.GetType()), args));
|
||||||
Mediator.HandleAsync(message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Windows.UI.Xaml;
|
|||||||
|
|
||||||
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
||||||
{
|
{
|
||||||
public interface IDragHandler<TTarget> : IAsyncMessageHandler<Drag<TTarget>> where TTarget : UIElement
|
public interface IDragHandler<TTarget> : IMessageHandler<Drag<TTarget>> where TTarget : UIElement
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ using Windows.UI.Xaml;
|
|||||||
|
|
||||||
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
||||||
{
|
{
|
||||||
public interface IDropHandler<TTarget> : IAsyncMessageHandler<Drop<TTarget>> where TTarget : UIElement
|
public interface IDropHandler<TTarget> : IMessageHandler<Drop<TTarget>> where TTarget : UIElement
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Windows.Storage;
|
||||||
|
|
||||||
|
namespace TheXamlGuy.TaskbarGroup.Flyout.Foundation
|
||||||
|
{
|
||||||
|
public static class IStorageItemExtensions
|
||||||
|
{
|
||||||
|
public static async Task<IDictionary<string, object>> RetrievePropertiesAsync(this IStorageItem storageFile, params string[] paramaters)
|
||||||
|
{
|
||||||
|
return await (await storageFile.GetBasicPropertiesAsync()).RetrievePropertiesAsync(paramaters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
@@ -130,6 +130,7 @@
|
|||||||
<Compile Include="IDragHandler.cs" />
|
<Compile Include="IDragHandler.cs" />
|
||||||
<Compile Include="IDropHandler.cs" />
|
<Compile Include="IDropHandler.cs" />
|
||||||
<Compile Include="IServiceCollectionExtensions.cs" />
|
<Compile Include="IServiceCollectionExtensions.cs" />
|
||||||
|
<Compile Include="IStorageItemExtensions.cs" />
|
||||||
<Compile Include="IWindowPrivate.cs" />
|
<Compile Include="IWindowPrivate.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="TemplateSelector.cs" />
|
<Compile Include="TemplateSelector.cs" />
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ namespace TheXamlGuy.TaskbarGroup.Flyout
|
|||||||
{
|
{
|
||||||
public class TaskbarButtonGroupDragHandler : IDragHandler<TaskbarButtonGroupView>
|
public class TaskbarButtonGroupDragHandler : IDragHandler<TaskbarButtonGroupView>
|
||||||
{
|
{
|
||||||
public Task Handle(Drag<TaskbarButtonGroupView> message, CancellationToken canellationToken = default)
|
public void Handle(Drag<TaskbarButtonGroupView> message)
|
||||||
{
|
{
|
||||||
message.DragEventArgs.AcceptedOperation = DataPackageOperation.Link;
|
message.DragEventArgs.AcceptedOperation = DataPackageOperation.Link;
|
||||||
|
|
||||||
@@ -17,8 +17,6 @@ namespace TheXamlGuy.TaskbarGroup.Flyout
|
|||||||
message.DragEventArgs.DragUIOverride.IsGlyphVisible = false;
|
message.DragEventArgs.DragUIOverride.IsGlyphVisible = false;
|
||||||
message.DragEventArgs.DragUIOverride.IsCaptionVisible = false;
|
message.DragEventArgs.DragUIOverride.IsCaptionVisible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,46 +1,41 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.IO;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using TheXamlGuy.TaskbarGroup.Core;
|
||||||
using TheXamlGuy.TaskbarGroup.Flyout.Foundation;
|
using TheXamlGuy.TaskbarGroup.Flyout.Foundation;
|
||||||
using Windows.ApplicationModel.DataTransfer;
|
using Windows.ApplicationModel.DataTransfer;
|
||||||
using Windows.Storage;
|
using Windows.Storage;
|
||||||
|
using Windows.Storage.FileProperties;
|
||||||
|
|
||||||
namespace TheXamlGuy.TaskbarGroup.Flyout
|
namespace TheXamlGuy.TaskbarGroup.Flyout
|
||||||
{
|
{
|
||||||
public class TaskbarButtonGroupDropHandler : IDropHandler<TaskbarButtonGroupView>
|
public class TaskbarButtonGroupDropHandler : IDropHandler<TaskbarButtonGroupView>
|
||||||
{
|
{
|
||||||
public async Task Handle(Drop<TaskbarButtonGroupView> message, CancellationToken canellationToken = default)
|
private readonly IMediator mediator;
|
||||||
|
|
||||||
|
public TaskbarButtonGroupDropHandler(IMediator mediator)
|
||||||
|
{
|
||||||
|
this.mediator = mediator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async void Handle(Drop<TaskbarButtonGroupView> message)
|
||||||
{
|
{
|
||||||
if (message.DropEventArgs.DataView.Contains(StandardDataFormats.StorageItems))
|
if (message.DropEventArgs.DataView.Contains(StandardDataFormats.StorageItems))
|
||||||
{
|
{
|
||||||
var items = await message.DropEventArgs.DataView.GetStorageItemsAsync();
|
var items = await message.DropEventArgs.DataView.GetStorageItemsAsync();
|
||||||
foreach (var storageItem in items)
|
foreach (IStorageItem storageItem in items)
|
||||||
{
|
{
|
||||||
if (storageItem is StorageFile storageFile)
|
if ((await storageItem.RetrievePropertiesAsync("System.AppUserModel.ID"))
|
||||||
|
.TryGetValue("System.AppUserModel.ID", out var appUserModelId)
|
||||||
|
|| File.Exists(storageItem.Path))
|
||||||
{
|
{
|
||||||
if (storageFile.Path is { Length: > 0 })
|
if (storageItem is IStorageItemProperties storageItemProperties)
|
||||||
{
|
{
|
||||||
|
using var thumbnail = await storageItemProperties.GetThumbnailAsync(ThumbnailMode.SingleItem, 94);
|
||||||
|
using var stream = thumbnail.AsStreamForWrite();
|
||||||
|
mediator.Handle(new IconStorage(appUserModelId is not null ? $"{appUserModelId}" : storageItem.Path, stream));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
var properties = await storageFile.Properties.RetrievePropertiesAsync(new List<string>
|
|
||||||
{
|
|
||||||
"System.AppUserModel.ID"
|
|
||||||
});
|
|
||||||
|
|
||||||
var appUserModelId = properties["System.AppUserModel.ID"];
|
|
||||||
if (appUserModelId is not null)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (storageItem is StorageFolder storageFolder)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,9 +41,10 @@ namespace TheXamlGuy.TaskbarGroup
|
|||||||
.AddTransient<TaskbarButtonView>()
|
.AddTransient<TaskbarButtonView>()
|
||||||
.AddTransient<TaskbarButtonViewModel>()
|
.AddTransient<TaskbarButtonViewModel>()
|
||||||
.AddTransient<TaskbarButtonGroupView>()
|
.AddTransient<TaskbarButtonGroupView>()
|
||||||
.AddAsyncHandler<TaskbarButtonGroupDragHandler>()
|
.AddHandler<TaskbarButtonGroupDragHandler>()
|
||||||
.AddAsyncHandler<TaskbarButtonGroupDropHandler>()
|
.AddHandler<TaskbarButtonGroupDropHandler>()
|
||||||
.AddTransient<TaskbarButtonGroupViewModel>();
|
.AddTransient<TaskbarButtonGroupViewModel>()
|
||||||
|
.AddHandler<IconStorageHandler>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ namespace TheXamlGuy.TaskbarGroup
|
|||||||
{
|
{
|
||||||
public class TaskbarButtonFlyoutWindow : TransparentXamlWindow<TaskbarButtonFlyout>
|
public class TaskbarButtonFlyoutWindow : TransparentXamlWindow<TaskbarButtonFlyout>
|
||||||
{
|
{
|
||||||
|
|
||||||
public TaskbarButtonFlyoutWindow()
|
public TaskbarButtonFlyoutWindow()
|
||||||
{
|
{
|
||||||
Deactivated += OnDeactivated;
|
Deactivated += OnDeactivated;
|
||||||
|
|||||||
Reference in New Issue
Block a user