image thumbnails
This commit is contained in:
@@ -17,8 +17,8 @@
|
|||||||
<vm:MainWindowViewModel/>
|
<vm:MainWindowViewModel/>
|
||||||
</Design.DataContext>
|
</Design.DataContext>
|
||||||
|
|
||||||
<ScrollViewer>
|
<ScrollViewer DragDrop.AllowDrop="True">
|
||||||
<StackPanel Margin="20" Spacing="10">
|
<StackPanel Margin="20" Spacing="10" DragDrop.AllowDrop="True">
|
||||||
<Label Content="Provider:"/>
|
<Label Content="Provider:"/>
|
||||||
<Grid ColumnDefinitions="*,Auto">
|
<Grid ColumnDefinitions="*,Auto">
|
||||||
<ComboBox Grid.Column="0" HorizontalAlignment="Stretch"
|
<ComboBox Grid.Column="0" HorizontalAlignment="Stretch"
|
||||||
|
|||||||
+64
-19
@@ -1,12 +1,14 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.IO;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Input;
|
using Avalonia.Input;
|
||||||
using Avalonia.Input.Platform;
|
using Avalonia.Input.Platform;
|
||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Avalonia.Platform.Storage;
|
using Avalonia.Platform.Storage;
|
||||||
|
using Avalonia.Media.Imaging;
|
||||||
using Finder2eFoundryConverterCS.ViewModels;
|
using Finder2eFoundryConverterCS.ViewModels;
|
||||||
|
|
||||||
namespace Finder2eFoundryConverterCS.Views
|
namespace Finder2eFoundryConverterCS.Views
|
||||||
@@ -17,7 +19,20 @@ namespace Finder2eFoundryConverterCS.Views
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
AddHandler(DragDrop.DropEvent, Drop);
|
AddHandler(DragDrop.DropEvent, Drop);
|
||||||
KeyDown += OnKeyDown;
|
AddHandler(DragDrop.DragOverEvent, DragOver);
|
||||||
|
AddHandler(KeyDownEvent, OnKeyDown, RoutingStrategies.Bubble, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DragOver(object? sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.DataTransfer.TryGetFiles() != null || e.DataTransfer.TryGetBitmap() != null)
|
||||||
|
{
|
||||||
|
e.DragEffects = DragDropEffects.Copy;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e.DragEffects = DragDropEffects.None;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void OnKeyDown(object? sender, KeyEventArgs e)
|
private async void OnKeyDown(object? sender, KeyEventArgs e)
|
||||||
@@ -34,10 +49,24 @@ namespace Finder2eFoundryConverterCS.Views
|
|||||||
var text = await topLevel.Clipboard.TryGetTextAsync();
|
var text = await topLevel.Clipboard.TryGetTextAsync();
|
||||||
if (!string.IsNullOrWhiteSpace(text))
|
if (!string.IsNullOrWhiteSpace(text))
|
||||||
{
|
{
|
||||||
var path = text.Replace("file://", "").Trim();
|
// Handle multiple lines (multiple files)
|
||||||
if (System.IO.File.Exists(path))
|
var lines = text.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
foreach (var line in lines)
|
||||||
{
|
{
|
||||||
var ext = System.IO.Path.GetExtension(path).ToLower();
|
var path = line.Trim();
|
||||||
|
if (path.StartsWith("file://"))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var uri = new Uri(path);
|
||||||
|
path = uri.LocalPath;
|
||||||
|
}
|
||||||
|
catch { path = path.Replace("file://", ""); }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (File.Exists(path))
|
||||||
|
{
|
||||||
|
var ext = Path.GetExtension(path).ToLower();
|
||||||
if (new[] { ".png", ".jpg", ".jpeg", ".webp" }.Contains(ext))
|
if (new[] { ".png", ".jpg", ".jpeg", ".webp" }.Contains(ext))
|
||||||
{
|
{
|
||||||
vm.AddImagePathCommand.Execute(path);
|
vm.AddImagePathCommand.Execute(path);
|
||||||
@@ -45,19 +74,29 @@ namespace Finder2eFoundryConverterCS.Views
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Try to get bitmap directly
|
// Try to get bitmap directly
|
||||||
var bitmap = await topLevel.Clipboard.TryGetBitmapAsync();
|
var bitmap = await topLevel.Clipboard.TryGetBitmapAsync();
|
||||||
if (bitmap != null)
|
if (bitmap != null)
|
||||||
{
|
{
|
||||||
// Save bitmap to temp file
|
try
|
||||||
var tempDir = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Finder2eFoundryConverter");
|
{
|
||||||
if (!System.IO.Directory.Exists(tempDir)) System.IO.Directory.CreateDirectory(tempDir);
|
var tempDir = Path.Combine(Path.GetTempPath(), "Finder2eFoundryConverter");
|
||||||
|
if (!Directory.Exists(tempDir)) Directory.CreateDirectory(tempDir);
|
||||||
|
|
||||||
var tempPath = System.IO.Path.Combine(tempDir, $"pasted_image_{DateTime.Now.Ticks}.png");
|
var tempPath = Path.Combine(tempDir, $"pasted_image_{DateTime.Now.Ticks}.png");
|
||||||
bitmap.Save(tempPath);
|
using (var stream = File.Create(tempPath))
|
||||||
|
{
|
||||||
|
bitmap.Save(stream);
|
||||||
|
}
|
||||||
vm.AddImagePathCommand.Execute(tempPath);
|
vm.AddImagePathCommand.Execute(tempPath);
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
vm.StatusMessage = $"Error saving pasted image: {ex.Message}";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,19 +132,19 @@ namespace Finder2eFoundryConverterCS.Views
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async void Drop(object? sender, DragEventArgs e)
|
private async void Drop(object? sender, DragEventArgs e)
|
||||||
{
|
|
||||||
var files = e.DataTransfer.TryGetFiles();
|
|
||||||
if (files != null)
|
|
||||||
{
|
{
|
||||||
var vm = DataContext as MainWindowViewModel;
|
var vm = DataContext as MainWindowViewModel;
|
||||||
if (vm == null) return;
|
if (vm == null) return;
|
||||||
|
|
||||||
|
var files = e.DataTransfer.TryGetFiles();
|
||||||
|
if (files != null)
|
||||||
|
{
|
||||||
foreach (var file in files)
|
foreach (var file in files)
|
||||||
{
|
{
|
||||||
var path = file.Path.LocalPath;
|
var path = file.Path.LocalPath;
|
||||||
if (path == null) continue;
|
if (path == null) continue;
|
||||||
|
|
||||||
var ext = System.IO.Path.GetExtension(path).ToLower();
|
var ext = Path.GetExtension(path).ToLower();
|
||||||
if (new[] { ".png", ".jpg", ".jpeg", ".webp" }.Contains(ext))
|
if (new[] { ".png", ".jpg", ".jpeg", ".webp" }.Contains(ext))
|
||||||
{
|
{
|
||||||
vm.AddImagePathCommand.Execute(path);
|
vm.AddImagePathCommand.Execute(path);
|
||||||
@@ -117,16 +156,22 @@ namespace Finder2eFoundryConverterCS.Views
|
|||||||
var bitmap = e.DataTransfer.TryGetBitmap();
|
var bitmap = e.DataTransfer.TryGetBitmap();
|
||||||
if (bitmap != null)
|
if (bitmap != null)
|
||||||
{
|
{
|
||||||
var vm = DataContext as MainWindowViewModel;
|
try
|
||||||
if (vm != null)
|
|
||||||
{
|
{
|
||||||
var tempDir = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Finder2eFoundryConverter");
|
var tempDir = Path.Combine(Path.GetTempPath(), "Finder2eFoundryConverter");
|
||||||
if (!System.IO.Directory.Exists(tempDir)) System.IO.Directory.CreateDirectory(tempDir);
|
if (!Directory.Exists(tempDir)) Directory.CreateDirectory(tempDir);
|
||||||
|
|
||||||
var tempPath = System.IO.Path.Combine(tempDir, $"dropped_image_{DateTime.Now.Ticks}.png");
|
var tempPath = Path.Combine(tempDir, $"dropped_image_{DateTime.Now.Ticks}.png");
|
||||||
bitmap.Save(tempPath);
|
using (var stream = File.Create(tempPath))
|
||||||
|
{
|
||||||
|
bitmap.Save(stream);
|
||||||
|
}
|
||||||
vm.AddImagePathCommand.Execute(tempPath);
|
vm.AddImagePathCommand.Execute(tempPath);
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
vm.StatusMessage = $"Error saving dropped image: {ex.Message}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user