o
    7 h*                     @  s\  d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z ddl	mZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZm Z m!Z! ddl"m#Z# er|ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, G dd deZ-G dd de-Z.G dd de-Z/G dd de-Z0G dd de-Z1G dd de-Z2dS ) zSlide and related objects.    )annotations)IOTYPE_CHECKINGcast)PROG_ID)CONTENT_TYPE)RELATIONSHIP_TYPE)XmlPart)PackURI)CT_NotesMasterCT_NotesSlideCT_Slide)CT_OfficeStyleSheet)	ChartPart)EmbeddedPackagePart)NotesMaster
NotesSlideSlideSlideLayoutSlideMaster)lazyproperty)	ChartData)XL_CHART_TYPE)Video)Image	ImagePartc                   @  s<   e Zd ZU dZded< ddd	ZdddZedddZdS )BaseSlidePartzBase class for slide parts.

    This includes slide, slide-layout, and slide-master parts, but also notes-slide,
    notes-master, and handout-master parts.
    r   _elementrIdstrreturnr   c                 C  s   t d| |jS )zReturn an |Image| object containing the image related to this slide by *rId*.

        Raises |KeyError| if no image is related by that id, which would generally indicate a
        corrupted .pptx file.
        r   )r   related_partimageselfr    r%   X/var/www/html/figdemos/bartoux_crm/venv/lib/python3.10/site-packages/pptx/parts/slide.py	get_image#   s   zBaseSlidePart.get_image
image_filestr | IO[bytes]c                 C  s"   | j |}| |tj}||fS )a@  Return `(image_part, rId)` pair corresponding to `image_file`.

        The returned |ImagePart| object contains the image in `image_file` and is
        related to this slide with the key `rId`. If either the image part or
        relationship already exists, they are reused, otherwise they are newly created.
        )_packageget_or_add_image_part	relate_toRTIMAGE)r$   r(   
image_partr   r%   r%   r&   r+   +   s   z#BaseSlidePart.get_or_add_image_partc                 C  s
   | j jjS )zInternal name of this slide.)r   cSldnamer$   r%   r%   r&   r1   6   s   
zBaseSlidePart.nameN)r   r   r    r   )r(   r)   )r    r   )	__name__
__module____qualname____doc____annotations__r'   r+   propertyr1   r%   r%   r%   r&   r      s   
 

r   c                   @  s@   e Zd ZdZedd Zedd Zedd Zedd	 Z	d
S )NotesMasterPartz]Notes master part.

    Corresponds to package file `ppt/notesMasters/notesMaster1.xml`.
    c                 C  s&   |  |}| |}||tj |S )zv
        Create and return a default notes master part, including creating the
        new theme it requires.
        )_new_new_theme_partr,   r-   THEME)clspackagenotes_master_partZ
theme_partr%   r%   r&   create_defaultB   s   

zNotesMasterPart.create_defaultc                 C     t | j| S )zV
        Return the |NotesMaster| object that proxies this notes master part.
        )r   r   r2   r%   r%   r&   notes_masterM      zNotesMasterPart.notes_masterc                 C  s   t tdtj|t S )z
        Create and return a standalone, default notes master part based on
        the built-in template (without any related parts, such as theme).
        z"/ppt/notesMasters/notesMaster1.xml)r9   r
   CTPML_NOTES_MASTERr   new_defaultr=   r>   r%   r%   r&   r:   T   s   zNotesMasterPart._newc                 C  s   t |dtj|t S )zCReturn new default theme-part suitable for use with a notes master.z/ppt/theme/theme%d.xml)r	   next_partnamerD   	OFC_THEMEr   rF   rG   r%   r%   r&   r;   a   s   zNotesMasterPart._new_theme_partN)
r3   r4   r5   r6   classmethodr@   r   rB   r:   r;   r%   r%   r%   r&   r9   <   s    



r9   c                   @  s@   e Zd ZdZedd Zedd Zedd Zedd	 Z	d
S )NotesSlidePartzNotes slide part.

    Contains the slide notes content and the layout for the slide handout page.
    Corresponds to package file `ppt/notesSlides/notesSlide[1-9][0-9]*.xml`.
    c                 C  s,   |j j}| |||}|j}||j |S )a'  Return new |NotesSlidePart| for the slide in `slide_part`.

        The new notes-slide part is based on the (singleton) notes master and related to
        both the notes-master part and `slide_part`. If no notes-master is present,
        one is created based on the default template.
        )presentation_partr?   _add_notes_slide_partnotes_slideZclone_master_placeholdersrB   )r=   r>   
slide_partr?   notes_slide_partrN   r%   r%   r&   news   s
   zNotesSlidePart.newc                 C     |  tj}|jS )z?Return the |NotesMaster| object this notes slide inherits from.)part_related_byr-   NOTES_MASTERrB   )r$   r?   r%   r%   r&   rB         zNotesSlidePart.notes_masterc                 C  rA   )zBReturn the |NotesSlide| object that proxies this notes slide part.)r   r   r2   r%   r%   r&   rN      s   zNotesSlidePart.notes_slidec                 C  s:   t |dtj|t }||tj ||tj	 |S )zCreate and return a new notes-slide part.

        The return part is fully related, but has no shape content (i.e. placeholders
        not cloned).
        z!/ppt/notesSlides/notesSlide%d.xml)
rK   rH   rD   PML_NOTES_SLIDEr   rQ   r,   r-   rT   SLIDE)r=   r>   rO   r?   rP   r%   r%   r&   rM      s   z$NotesSlidePart._add_notes_slide_partN)
r3   r4   r5   r6   rJ   rQ   r   rB   rN   rM   r%   r%   r%   r&   rK   l   s    


rK   c                   @  s   e Zd ZdZedd Zd&dd	Zd'ddZd(ddZe	dd Z
ed)ddZedd Ze	d*ddZe	d+d!d"Zd#d$ Zd%S ),	SlidePartzISlide part. Corresponds to package files ppt/slides/slide[1-9][0-9]*.xml.c                 C  s&   | |t j|t }||tj |S )zReturn newly-created blank slide part.

        The new slide-part has `partname` and a relationship to `slide_layout_part`.
        )rD   	PML_SLIDEr   rQ   r,   r-   SLIDE_LAYOUT)r=   partnamer>   slide_layout_partrO   r%   r%   r&   rQ      s   zSlidePart.new
chart_typer   
chart_datar   c                 C  s   |  t||| jtjS )zReturn str rId of new |ChartPart| object containing chart of `chart_type`.

        The chart depicts `chart_data` and is related to the slide contained in this
        part by `rId`.
        )r,   r   rQ   r*   r-   CHART)r$   r]   r^   r%   r%   r&   add_chart_part   s   zSlidePart.add_chart_partprog_idPROG_ID | strole_object_filer)   c                 C  s4   t |trtjntj}| t|| || j	|S )zHReturn rId of newly-added OLE-object part formed from `ole_object_file`.)

isinstancer   r-   PACKAGE
OLE_OBJECTr,   r   factory_blob_from_filer*   )r$   ra   rc   Zrelationship_typer%   r%   r&   add_embedded_ole_object_part   s   z&SlidePart.add_embedded_ole_object_partvideor   r    tuple[str, str]c                 C  s0   | j |}| |tj}| |tj}||fS )a  Return rIds for media and video relationships to media part.

        A new |MediaPart| object is created if it does not already exist
        (such as would occur if the same video appeared more than once in
         a presentation). Two relationships to the media part are created,
        one each with MEDIA and VIDEO relationship types. The need for two
        appears to be for legacy support for an earlier (pre-Office 2010)
        PowerPoint media embedding strategy.
        )r*   get_or_add_media_partr,   r-   MEDIAVIDEO)r$   rj   
media_part	media_rId	video_rIdr%   r%   r&   get_or_add_video_media_part   s   
z%SlidePart.get_or_add_video_media_partc                 C  s(   z	|  tj W dS  ty   Y dS w )a  
        Return True if this slide has a notes slide, False otherwise. A notes
        slide is created by the :attr:`notes_slide` property when one doesn't
        exist; use this property to test for a notes slide without the
        possible side-effect of creating one.
        FT)rS   r-   NOTES_SLIDEKeyErrorr2   r%   r%   r&   has_notes_slide   s   zSlidePart.has_notes_slider   c                 C  s4   z
|  tj}W |jS  ty   |  }Y |jS w )zThe |NotesSlide| instance associated with this slide.

        If the slide does not have a notes slide, a new one is created. The same single instance
        is returned on each call.
        )rS   r-   rs   rt   rM   rN   r$   rP   r%   r%   r&   rN      s   
zSlidePart.notes_slidec                 C  rA   )zB
        The |Slide| object representing this slide part.
        )r   r   r2   r%   r%   r&   slide   rC   zSlidePart.slideintc                 C  s   | j j}|| S )zPReturn the slide identifier stored in the presentation part for this slide part.)r>   rL   slide_id)r$   rL   r%   r%   r&   ry      s   
zSlidePart.slide_idr   c                 C  rR   )zE|SlideLayout| object the slide in this part inherits appearance from.)rS   r-   rZ   slide_layout)r$   r\   r%   r%   r&   rz      rU   zSlidePart.slide_layoutc                 C  s    t | j| }| |tj |S )z
        Return a newly created |NotesSlidePart| object related to this slide
        part. Caller is responsible for ensuring this slide doesn't already
        have a notes slide part.
        )rK   rQ   r>   r,   r-   rs   rv   r%   r%   r&   rM      s   zSlidePart._add_notes_slide_partN)r]   r   r^   r   )ra   rb   rc   r)   )rj   r   r    rk   )r    r   )r    rx   )r    r   )r3   r4   r5   r6   rJ   rQ   r`   ri   rr   r8   ru   r   rN   rw   ry   rz   rM   r%   r%   r%   r&   rX      s$    

	



rX   c                   @  s*   e Zd ZdZedd Zed	ddZdS )
SlideLayoutPartzjSlide layout part.

    Corresponds to package files ``ppt/slideLayouts/slideLayout[1-9][0-9]*.xml``.
    c                 C  rA   )zB
        The |SlideLayout| object representing this part.
        )r   r   r2   r%   r%   r&   rz     rC   zSlideLayoutPart.slide_layoutr    r   c                 C  s   |  tjjS )z>Slide master from which this slide layout inherits properties.)rS   r-   SLIDE_MASTERslide_masterr2   r%   r%   r&   r}     s   zSlideLayoutPart.slide_masterN)r    r   )r3   r4   r5   r6   r   rz   r8   r}   r%   r%   r%   r&   r{     s    
r{   c                   @  s&   e Zd ZdZdddZedd	 Zd
S )SlideMasterPartzfSlide master part.

    Corresponds to package files ppt/slideMasters/slideMaster[1-9][0-9]*.xml.
    r   r   r    r   c                 C  s   |  |jS )z?Return |SlideLayout| related to this slide-master by key `rId`.)r!   rz   r#   r%   r%   r&   related_slide_layout   s   z$SlideMasterPart.related_slide_layoutc                 C  rA   )zB
        The |SlideMaster| object representing this part.
        )r   r   r2   r%   r%   r&   r}   $  rC   zSlideMasterPart.slide_masterN)r   r   r    r   )r3   r4   r5   r6   r   r   r}   r%   r%   r%   r&   r~     s
    
r~   N)3r6   
__future__r   typingr   r   r   pptx.enum.shapesr   pptx.opc.constantsr   rD   r   r-   pptx.opc.packager	   pptx.opc.packurir
   pptx.oxml.slider   r   r   pptx.oxml.themer   pptx.parts.chartr   pptx.parts.embeddedpackager   
pptx.slider   r   r   r   r   	pptx.utilr   Zpptx.chart.datar   pptx.enum.chartr   Z
pptx.mediar   pptx.parts.imager   r   r   r9   rK   rX   r{   r~   r%   r%   r%   r&   <module>   s2    "02i