add export

This commit is contained in:
2026-02-14 15:07:20 +01:00
parent 73711b9342
commit 541135e063
2 changed files with 62 additions and 0 deletions

View File

@@ -120,6 +120,14 @@ Padding="16,8"
Command="{Binding ClearHistoryCommand}"
Padding="8,4"
VerticalAlignment="Center" />
<ui:Button DockPanel.Dock="Right"
Content="Exportieren"
Appearance="Secondary"
Icon="{ui:SymbolIcon ArrowExportUp24}"
Command="{Binding ExportHistoryCommand}"
Padding="8,4"
Margin="0,0,8,0"
VerticalAlignment="Center" />
<StackPanel>
<TextBlock Text="Farbverlauf"
Style="{StaticResource HeaderText}" />

View File

@@ -1,6 +1,7 @@
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Text;
using System.Windows.Input;
using System.Windows.Media;
using MaxSlurper.Models;
@@ -42,6 +43,7 @@ namespace MaxSlurper.ViewModels
public ICommand CopyHexCommand { get; }
public ICommand OpenColorPickerCommand { get; }
public ICommand OpenSettingsCommand { get; }
public ICommand ExportHistoryCommand { get; }
public MainViewModel(IColorPickerService colorPicker, IAudioPlayer audioPlayer, ISettingsService settingsService)
{
@@ -57,6 +59,7 @@ namespace MaxSlurper.ViewModels
CopyHexCommand = new RelayCommand(CopyHex, _ => Selected != null || _ is ColorItem);
OpenColorPickerCommand = new RelayCommand(_ => OpenColorPicker());
OpenSettingsCommand = new RelayCommand(_ => OpenSettings());
ExportHistoryCommand = new RelayCommand(_ => ExportHistory(), _ => History.Count > 0);
// Restore persisted history
foreach (var item in _settingsService.LoadHistory())
@@ -90,6 +93,7 @@ namespace MaxSlurper.ViewModels
System.Windows.Clipboard.SetText(item.Hex);
_settingsService.SaveHistory(History);
((RelayCommand)ClearHistoryCommand).RaiseCanExecuteChanged();
((RelayCommand)ExportHistoryCommand).RaiseCanExecuteChanged();
}
private void OpenColorPicker()
@@ -117,6 +121,7 @@ namespace MaxSlurper.ViewModels
System.Windows.Clipboard.SetText(item.Hex);
_settingsService.SaveHistory(History);
((RelayCommand)ClearHistoryCommand).RaiseCanExecuteChanged();
((RelayCommand)ExportHistoryCommand).RaiseCanExecuteChanged();
}
}
@@ -135,6 +140,7 @@ namespace MaxSlurper.ViewModels
Selected = null;
_settingsService.SaveHistory(History);
((RelayCommand)ClearHistoryCommand).RaiseCanExecuteChanged();
((RelayCommand)ExportHistoryCommand).RaiseCanExecuteChanged();
}
private void RemoveColor(object? parameter)
@@ -149,6 +155,7 @@ namespace MaxSlurper.ViewModels
_settingsService.SaveHistory(History);
((RelayCommand)ClearHistoryCommand).RaiseCanExecuteChanged();
((RelayCommand)ExportHistoryCommand).RaiseCanExecuteChanged();
}
private void CopyHex(object? parameter)
@@ -164,6 +171,53 @@ namespace MaxSlurper.ViewModels
// Show a notification (optional - can add UI feedback)
}
private void ExportHistory()
{
var dialog = new Microsoft.Win32.SaveFileDialog
{
Title = "Farbpalette exportieren",
Filter = "CSS-Datei (*.css)|*.css|JSON-Datei (*.json)|*.json|Textdatei (*.txt)|*.txt",
DefaultExt = ".css",
FileName = "palette"
};
if (dialog.ShowDialog() != true) return;
var sb = new StringBuilder();
var ext = System.IO.Path.GetExtension(dialog.FileName).ToLowerInvariant();
switch (ext)
{
case ".css":
sb.AppendLine(":root {");
for (int i = 0; i < History.Count; i++)
{
var c = History[i];
sb.AppendLine($" --color-{i + 1}: {c.Hex};");
}
sb.AppendLine("}");
break;
case ".json":
sb.AppendLine("[");
for (int i = 0; i < History.Count; i++)
{
var c = History[i];
var comma = i < History.Count - 1 ? "," : "";
sb.AppendLine($" {{ \"hex\": \"{c.Hex}\", \"rgb\": \"{c.Rgb}\" }}{comma}");
}
sb.AppendLine("]");
break;
default: // .txt
foreach (var c in History)
sb.AppendLine(c.Hex);
break;
}
System.IO.File.WriteAllText(dialog.FileName, sb.ToString());
}
private void UpdateSelected()
{
if (Selected == null)