mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-11-04 14:47:21 +00:00
Co-authored-by: Thorsten Sommer <SommerEngineering@users.noreply.github.com>
69 lines
3.4 KiB
C#
69 lines
3.4 KiB
C#
namespace AIStudio.Tools.PowerPoint;
|
|
|
|
internal sealed partial class PresentationTemplate
|
|
{
|
|
/// <summary>
|
|
/// Creates the catalog the Slide Assistant works with when no template was chosen.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Without a template, the Slide Assistant writes an outline only. It still asks the model for the
|
|
/// same JSON, against these few layouts of a plain 16:9 presentation, so that one prompt and one
|
|
/// check serve both cases. Places and font sizes are those of a new presentation in PowerPoint.
|
|
/// </remarks>
|
|
/// <returns>The catalog.</returns>
|
|
public static PresentationTemplate CreateDefault()
|
|
{
|
|
var title = new SlotBounds(838_200, 365_125, 10_515_600, 1_325_563);
|
|
var body = new SlotBounds(838_200, 1_825_625, 10_515_600, 4_351_338);
|
|
var left = new SlotBounds(838_200, 1_825_625, 5_181_600, 4_351_338);
|
|
var right = new SlotBounds(6_172_200, 1_825_625, 5_181_600, 4_351_338);
|
|
|
|
TemplateLayout[] layouts =
|
|
[
|
|
DefaultLayout(1, "Title Slide", "title",
|
|
(PlaceholderRole.TITLE, new SlotBounds(1_524_000, 1_122_363, 9_144_000, 2_387_600), 6000),
|
|
(PlaceholderRole.SUBTITLE, new SlotBounds(1_524_000, 3_602_038, 9_144_000, 1_655_762), 2400)),
|
|
|
|
DefaultLayout(2, "Section Header", "secHead",
|
|
(PlaceholderRole.TITLE, new SlotBounds(831_850, 1_709_738, 10_515_600, 2_852_737), 6000),
|
|
(PlaceholderRole.SUBTITLE, new SlotBounds(831_850, 4_589_463, 10_515_600, 1_500_187), 2400)),
|
|
|
|
DefaultLayout(3, "Title and Content", "obj",
|
|
(PlaceholderRole.TITLE, title, 4400),
|
|
(PlaceholderRole.TEXT, body, 2800)),
|
|
|
|
DefaultLayout(4, "Two Content", "twoObj",
|
|
(PlaceholderRole.TITLE, title, 4400),
|
|
(PlaceholderRole.TEXT, left, 2800),
|
|
(PlaceholderRole.TEXT, right, 2800)),
|
|
|
|
DefaultLayout(5, "Content with Picture", "cust",
|
|
(PlaceholderRole.TITLE, title, 4400),
|
|
(PlaceholderRole.TEXT, left, 2800),
|
|
(PlaceholderRole.PICTURE, right, DEFAULT_FONT_SIZE)),
|
|
|
|
DefaultLayout(6, "Table", "tbl",
|
|
(PlaceholderRole.TITLE, title, 4400),
|
|
(PlaceholderRole.TABLE, body, DEFAULT_FONT_SIZE)),
|
|
];
|
|
|
|
var families = layouts.Select((layout, index) => new LayoutFamily($"L{index + 1}", layout.Name, [new LayoutVariant(null, layout)])).ToList();
|
|
return new PresentationTemplate(DEFAULT_SLIDE_WIDTH, DEFAULT_SLIDE_HEIGHT, families, [], []);
|
|
}
|
|
|
|
private static TemplateLayout DefaultLayout(int number, string name, string layoutType, params (PlaceholderRole Role, SlotBounds Bounds, int FontSize)[] slots)
|
|
{
|
|
var templateSlots = slots.Select(slot => new TemplateSlot(slot.Role, 0, slot.Bounds, DefaultPlaceholderTypeOf(slot.Role), null, CapacityOf(slot.Role, slot.Bounds, slot.FontSize, InsetsOf(null))));
|
|
return new TemplateLayout(name, new Uri($"/ppt/slideLayouts/slideLayout{number}.xml", UriKind.Relative), layoutType, InReadingOrder(templateSlots, DEFAULT_SLIDE_HEIGHT));
|
|
}
|
|
|
|
private static string DefaultPlaceholderTypeOf(PlaceholderRole role) => role switch
|
|
{
|
|
PlaceholderRole.TITLE => "title",
|
|
PlaceholderRole.SUBTITLE => "subTitle",
|
|
PlaceholderRole.PICTURE => "pic",
|
|
PlaceholderRole.TABLE => "tbl",
|
|
|
|
_ => "body",
|
|
};
|
|
} |