File size: 1,823 Bytes
76684fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from data_structures import SlideContent, Slide
from layout_manager import LayoutManager

# SlideBuilder 类用于构建单张幻灯片并通过 LayoutManager 自动分配布局
class SlideBuilder:
    def __init__(self, layout_manager: LayoutManager):
        self.layout_manager = layout_manager  # 布局管理器实例
        self.title = ""  # 幻灯片标题
        self.bullet_points = []  # 幻灯片要点列表,支持多级结构
        self.image_path = None  # 幻灯片图片路径
        self.layout_id = None  # 布局ID
        self.layout_name = None  # 布局名称

    def set_title(self, title: str):
        self.title = title  # 设置幻灯片的标题

    def add_bullet_point(self, bullet: str, level: int = 0):
        """
        添加项目符号及其级别到 bullet_points 列表中。
        :param bullet: 要点文本
        :param level: 项目符号的层级,默认为 0(一级)
        """
        self.bullet_points.append({'text': bullet, 'level': level})  # 添加要点和层级

    def set_image(self, image_path: str):
        self.image_path = image_path  # 设置图片路径

    def finalize(self) -> Slide:
        """
        组装并返回最终的 Slide 对象,调用 LayoutManager 自动分配布局。
        """
        # 创建 SlideContent 对象,注意 bullet_points 现在是字典列表,包含 text 和 level 信息
        content = SlideContent(
            title=self.title,
            bullet_points=self.bullet_points,
            image_path=self.image_path
        )

        # 调用 LayoutManager 分配布局
        self.layout_id, self.layout_name = self.layout_manager.assign_layout(content)

        # 返回最终的 Slide 对象
        return Slide(layout_id=self.layout_id, layout_name=self.layout_name, content=content)