This commit is contained in:
@@ -28,6 +28,7 @@ public partial class DesignerViewModel : ObservableObject
|
||||
[ObservableProperty] private string _statusColor = "#475569";
|
||||
[ObservableProperty] private bool _canExport;
|
||||
[ObservableProperty] private DesignerPlaceholder? _selectedPlaceholder;
|
||||
[ObservableProperty] private DesignerMetadata? _selectedMetadata;
|
||||
[ObservableProperty] private DesignerAsset? _selectedAsset;
|
||||
[ObservableProperty] private StarterTemplateItem? _selectedStarterTemplate;
|
||||
[ObservableProperty] private OverlayEditorMode _overlayMode = OverlayEditorMode.Measure;
|
||||
@@ -50,6 +51,11 @@ public partial class DesignerViewModel : ObservableObject
|
||||
new("Brieftext", PlaceholderType.Multiline, true, "hiermit informieren wir Sie über einen wichtigen Termin.\n\nMit freundlichen Grüßen"),
|
||||
new("LehrerName", PlaceholderType.Text, true, "M. Mustermann"),
|
||||
];
|
||||
public ObservableCollection<DesignerMetadata> MetadataItems { get; } =
|
||||
[
|
||||
new(TemplateMetadataKeys.Language, "de-DE"),
|
||||
new(TemplateMetadataKeys.ReportType, "letter"),
|
||||
];
|
||||
public Dictionary<string, byte[]> Assets { get; } = new(StringComparer.OrdinalIgnoreCase);
|
||||
public ObservableCollection<DesignerAsset> AssetItems { get; } = [];
|
||||
public ObservableCollection<StarterTemplateItem> StarterTemplates { get; } = [];
|
||||
@@ -58,8 +64,16 @@ public partial class DesignerViewModel : ObservableObject
|
||||
{
|
||||
TemplateId = "neue-vorlage"; TemplateName = "Neue Vorlage"; Description = "";
|
||||
PageWidth = 210; PageHeight = 297; Unit = "mm"; LayoutSource = "PAGE 210 297 mm\n";
|
||||
Placeholders.Clear(); Assets.Clear(); AssetItems.Clear(); SelectedAsset = null;
|
||||
PreviewImage = null; CanExport = false;
|
||||
Placeholders.Clear(); SelectedPlaceholder = null;
|
||||
MetadataItems.Clear(); MetadataItems.Add(new(TemplateMetadataKeys.Language, "de-DE"));
|
||||
MetadataItems.Add(new(TemplateMetadataKeys.ReportType, "letter"));
|
||||
SelectedMetadata = null;
|
||||
Assets.Clear(); AssetItems.Clear(); SelectedAsset = null;
|
||||
NewElementType = "TEXT"; NewX = "20"; NewY = "50"; NewWidth = "170"; NewHeight = "30";
|
||||
NewImageScale = "100"; NewContent = "$Brieftext"; NewAttributes = "size=11";
|
||||
PreviewImage?.Dispose(); PreviewImage = null; CanExport = false;
|
||||
OverlayMode = OverlayEditorMode.Measure; OverlayCoordinates = "x=– · y=–";
|
||||
SelectedOverlayElement = "Kein Element ausgewählt";
|
||||
SetStatus("Neues Projekt angelegt.", false);
|
||||
}
|
||||
|
||||
@@ -68,6 +82,7 @@ public partial class DesignerViewModel : ObservableObject
|
||||
SchemaVersion = TemplateLoader.CurrentSchemaVersion,
|
||||
Id = TemplateId.Trim(), Name = TemplateName.Trim(), Description = Description.Trim(),
|
||||
PageSize = new((float)PageWidth, (float)PageHeight, Unit), LayoutFile = "layout.tpl",
|
||||
Metadata = BuildMetadata(),
|
||||
Placeholders = Placeholders.Select(x => new PlaceholderDefinition(x.Name.Trim(), x.Type, x.Required)).ToList(),
|
||||
};
|
||||
|
||||
@@ -96,6 +111,10 @@ public partial class DesignerViewModel : ObservableObject
|
||||
TemplateId = template.Manifest.Id; TemplateName = template.Manifest.Name; Description = template.Manifest.Description;
|
||||
PageWidth = (decimal)template.Manifest.PageSize.Width; PageHeight = (decimal)template.Manifest.PageSize.Height;
|
||||
Unit = template.Manifest.PageSize.Unit; LayoutSource = layoutSource;
|
||||
MetadataItems.Clear();
|
||||
foreach (var item in template.Manifest.Metadata.OrderBy(x => x.Key, StringComparer.OrdinalIgnoreCase))
|
||||
MetadataItems.Add(new(item.Key, item.Value));
|
||||
SelectedMetadata = null;
|
||||
Placeholders.Clear();
|
||||
foreach (var placeholder in template.Manifest.Placeholders)
|
||||
Placeholders.Add(new(placeholder.Name, placeholder.Type, placeholder.Required, DesignerPlaceholder.SampleFor(placeholder.Type)));
|
||||
@@ -131,6 +150,19 @@ public partial class DesignerViewModel : ObservableObject
|
||||
?? StarterTemplates.FirstOrDefault();
|
||||
}
|
||||
|
||||
private Dictionary<string, string> BuildMetadata()
|
||||
{
|
||||
var result = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||
foreach (var item in MetadataItems)
|
||||
{
|
||||
var key = item.Name.Trim(); var value = item.Value.Trim();
|
||||
if (!result.TryAdd(key, value))
|
||||
throw new InvalidDataException($"Metadatenschlüssel „{key}“ ist mehrfach vorhanden.");
|
||||
}
|
||||
TemplateMetadataText.Serialize(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static ITemplateDataProvider BuildSampleDataProvider(TemplateManifest manifest) =>
|
||||
new DesignerDataProvider(manifest.Placeholders.ToDictionary(x => x.Name,
|
||||
x => new DesignerPlaceholder(x.Name, x.Type, x.Required, DesignerPlaceholder.SampleFor(x.Type)).ToValue(),
|
||||
@@ -337,6 +369,12 @@ public partial class DesignerViewModel : ObservableObject
|
||||
""";
|
||||
}
|
||||
|
||||
public partial class DesignerMetadata(string name, string value) : ObservableObject
|
||||
{
|
||||
[ObservableProperty] private string _name = name;
|
||||
[ObservableProperty] private string _value = value;
|
||||
}
|
||||
|
||||
public partial class DesignerAsset(string name, int pixelWidth, int pixelHeight, long byteCount) : ObservableObject
|
||||
{
|
||||
[ObservableProperty] private int _usageCount;
|
||||
|
||||
Reference in New Issue
Block a user