o
    j3                     @  s  d Z ddlmZ ddl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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mZmZ erZddlmZ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Z#G dd deZ$dS )zBlxml custom element class for CT_GraphicalObjectFrame XML element.    )annotations)TYPE_CHECKINGcast)	parse_xml)CT_Chart)nsdecls)BaseShapeElement)
XsdBoolean	XsdString)CT_Table)BaseOxmlElementOneAndOnlyOneOptionalAttributeRequiredAttribute	ZeroOrOne)GRAPHIC_DATA_URI_CHARTGRAPHIC_DATA_URI_OLEOBJGRAPHIC_DATA_URI_TABLE)#CT_ApplicationNonVisualDrawingPropsCT_NonVisualDrawingPropsCT_Transform2Dc                   @  s0   e Zd ZU dZedZded< ed
ddZd	S )CT_GraphicalObjectz`a:graphic` element.

    The container for the reference to or definition of the framed graphical object (table, chart,
    etc.).
    za:graphicDataCT_GraphicalObjectDatagraphicDatareturnCT_Chart | Nonec                 C     | j jS )z;The `c:chart` grandchild element, or |None| if not present.)r   chartself r    Y/home/air/Certificate/back/venv/lib/python3.10/site-packages/pptx/oxml/shapes/graphfrm.pyr   -      zCT_GraphicalObject.chartNr   r   )	__name__
__module____qualname____doc__r   r   __annotations__propertyr   r    r    r    r!   r   "   s   
 r   c                   @  s   e Zd ZU dZedZded< edZded< ede	Z
d	ed< edddZedddZedddZedddZedddZdS )r   zj`p:graphicData` element.

    The direct container for a table, a chart, or another graphical object.
    zc:chartr   r   za:tblzCT_Table | Nonetbluristrr   
str | Nonec                 C     | j du rdS | j jS )a  Optional `r:id` attribute value of `p:oleObj` descendent element.

        This value is `None` when this `p:graphicData` element does not enclose an OLE object.
        This value could also be `None` if an enclosed OLE object does not specify this attribute
        (it is specified optional in the schema) but so far, all OLE objects we've encountered
        specify this value.
        N)_oleObjrIdr   r    r    r!   blob_rId=   s   	zCT_GraphicalObjectData.blob_rIdbool | Nonec                 C  r.   )zOptional boolean indicating an embedded OLE object.

        Returns `None` when this `p:graphicData` element does not enclose an OLE object. `True`
        indicates an embedded OLE object and `False` indicates a linked OLE object.
        N)r/   is_embeddedr   r    r    r!   is_embedded_ole_objH      z*CT_GraphicalObjectData.is_embedded_ole_objc                 C  r.   )a  Optional str value of "progId" attribute of `p:oleObj` descendent.

        This value identifies the "type" of the embedded object in terms of the application used
        to open it.

        This value is `None` when this `p:graphicData` element does not enclose an OLE object.
        This could also be `None` if an enclosed OLE object does not specify this attribute (it is
        specified optional in the schema) but so far, all OLE objects we've encountered specify
        this value.
        N)r/   progIdr   r    r    r!   r6   Q   s   zCT_GraphicalObjectData.progIdc                 C  r.   )a  Optional value of "showAsIcon" attribute value of `p:oleObj` descendent.

        This value is `None` when this `p:graphicData` element does not enclose an OLE object. It
        is False when the `showAsIcon` attribute is omitted on the `p:oleObj` element.
        N)r/   
showAsIconr   r    r    r!   r7   _   r5   z!CT_GraphicalObjectData.showAsIconCT_OleObject | Nonec                 C  s    t d| d}|r|d S dS )a?  Optional `p:oleObj` element contained in this `p:graphicData' element.

        Returns `None` when this graphic-data element does not enclose an OLE object. Note that
        this returns the last `p:oleObj` element found. There can be more than one `p:oleObj`
        element because an `mc.AlternateContent` element may appear as the child of
        `p:graphicData` and that alternate-content subtree can contain multiple compatibility
        choices. The last one should suit best for reading purposes because it contains the lowest
        common denominator.
        zlist[CT_OleObject]z.//p:oleObjN)r   xpath)r   oleObjsr    r    r!   r/   h   s   zCT_GraphicalObjectData._oleObjNr   r-   r   r2   )r   r8   )r$   r%   r&   r'   r   r   r(   r*   r   r
   r+   r)   r1   r4   r6   r7   r/   r    r    r    r!   r   3   s   
 
r   c                   @  s   e Zd ZU dZedZded< edZded< edZd	ed
< e	d8ddZ
e	d9ddZd:ddZe	d;ddZe	d<ddZe	d=ddZe	d>ddZed?d(d)Zed@d*d+ZedAd1d2ZedBd5d6Zd7S )CCT_GraphicalObjectFramezb`p:graphicFrame` element.

    A container for a table, a chart, or another graphical object.
    zp:nvGraphicFramePr CT_GraphicalObjectFrameNonVisualnvGraphicFramePrzp:xfrmr   xfrmz	a:graphicr   graphicr   r   c                 C  r   )zAThe `c:chart` great-grandchild element, or |None| if not present.)rB   r   r   r    r    r!   r      r"   zCT_GraphicalObjectFrame.chartr-   c                 C  s   | j }|du r	dS |jS )zgThe `rId` attribute of the `c:chart` great-grandchild element.

        |None| if not present.
        N)r   r0   )r   r   r    r    r!   	chart_rId   s   z!CT_GraphicalObjectFrame.chart_rIdc                 C  s   | j S )zdReturn the required `p:xfrm` child element.

        Overrides version on BaseShapeElement.
        )rA   r   r    r    r!   get_or_add_xfrm   s   z'CT_GraphicalObjectFrame.get_or_add_xfrmr   c                 C  r   )z9`a:graphicData` grandchild of this graphic-frame element.)rB   r   r   r    r    r!   r      r"   z#CT_GraphicalObjectFrame.graphicDatar,   c                 C  s
   | j jjS )z;str value of `uri` attribute of `a:graphicData` grandchild.)rB   r   r+   r   r    r    r!   graphicData_uri   s   
z'CT_GraphicalObjectFrame.graphicData_uriboolc                 C  s   | j jtkS )zD`True` for graphicFrame containing an OLE object, `False` otherwise.)r   r+   r   r   r    r    r!   
has_oleobj   s   z"CT_GraphicalObjectFrame.has_oleobjr2   c                 C  r   )zOptional boolean indicating an embedded OLE object.

        Returns `None` when this `p:graphicFrame` element does not enclose an OLE object. `True`
        indicates an embedded OLE object and `False` indicates a linked OLE object.
        )r   r4   r   r    r    r!   r4      s   z+CT_GraphicalObjectFrame.is_embedded_ole_objid_intnamer0   xycxcyc           
      C  s6   t ||||||}|jj}	t|	_|	t| |S )zFReturn a `p:graphicFrame` element tree populated with a chart element.)	r>   new_graphicFramerB   r   r   r+   appendr   	new_chart)
clsrH   rJ   r0   rK   rL   rM   rN   graphicFramer   r    r    r!   new_chart_graphicFrame   s
   z.CT_GraphicalObjectFrame.new_chart_graphicFramec                 C  s@   t ttdtdd d| d| d| d| d| d	| d
S )zReturn a new `p:graphicFrame` element tree suitable for containing a table or chart.

        Note that a graphicFrame element is not a valid shape until it contains a graphical object
        such as a table.
        <p:graphicFrame ap*>
  <p:nvGraphicFramePr>
    <p:cNvPr id="" name=""/>
    <p:cNvGraphicFramePr>
      <a:graphicFrameLocks noGrp="1"/>
    </p:cNvGraphicFramePr>
    <p:nvPr/>
  </p:nvGraphicFramePr>
  <p:xfrm>
    <a:off x="" y=""/>
    <a:ext cx="" cy="zS"/>
  </p:xfrm>
  <a:graphic>
    <a:graphicData/>
  </a:graphic>
</p:graphicFrame>)r   r>   r   r   )rR   rH   rJ   rK   rL   rM   rN   r    r    r!   rO      s$   			

z(CT_GraphicalObjectFrame.new_graphicFrameole_object_rIdr6   icon_rIdimgWimgHc              
   C  s   t ttdg dtddd d| d| d| d	| d
| d|	 d| d|
 d| d| d| d| d	| d| d|	 dS )a  Return newly-created `p:graphicFrame` for embedded OLE-object.

        `ole_object_rId` identifies the relationship to the OLE-object part.

        `progId` is a str identifying the object-type in terms of the application (program) used
        to open it. This becomes an attribute of the same name in the `p:oleObj` element.

        `icon_rId` identifies the relationship to an image part used to display the OLE-object as
        an icon (vs. a preview).
         rU   rV   rW   rrX   rY   rZ   r[   r\   r]   z"/>
  </p:xfrm>
  <a:graphic>
    <a:graphicData        uri="http://schemas.openxmlformats.org/presentationml/2006/ole">
      <p:oleObj showAsIcon="1"                r:id="z"                imgW="z"                imgH="z"                progId="z">
        <p:embed/>
        <p:pic>
          <p:nvPicPr>
            <p:cNvPr id="0" name=""/>
            <p:cNvPicPr/>
            <p:nvPr/>
          </p:nvPicPr>
          <p:blipFill>
            <a:blip r:embed="z"/>
            <a:stretch>
              <a:fillRect/>
            </a:stretch>
          </p:blipFill>
          <p:spPr>
            <a:xfrm>
              <a:off x="z"/>
              <a:ext cx="z"/>
            </a:xfrm>
            <a:prstGeom prst="rect">
              <a:avLst/>
            </a:prstGeom>
          </p:spPr>
        </p:pic>
      </p:oleObj>
    </a:graphicData>
  </a:graphic>
</p:graphicFrame>)r   r>   r   joinr   )rR   rH   rJ   r^   r6   r_   rK   rL   rM   rN   r`   ra   r    r    r!   new_ole_object_graphicFrame   sH   		

##$$
z3CT_GraphicalObjectFrame.new_ole_object_graphicFramerowscolsc	           
      C  s<   |  ||||||}	t|	jj_|	jjt|||| |	S )zFReturn a `p:graphicFrame` element tree populated with a table element.)rO   r   rB   r   r+   rP   r   new_tbl)
rR   rH   rJ   rf   rg   rK   rL   rM   rN   rS   r    r    r!   new_table_graphicFrame,  s   
z.CT_GraphicalObjectFrame.new_table_graphicFrameNr#   r<   )r   r   )r   r   )r   r,   r   rF   r=   )rH   rI   rJ   r,   r0   r,   rK   rI   rL   rI   rM   rI   rN   rI   r   r>   )rH   rI   rJ   r,   rK   rI   rL   rI   rM   rI   rN   rI   r   r>   )rH   rI   rJ   r,   r^   r,   r6   r,   r_   r,   rK   rI   rL   rI   rM   rI   rN   rI   r`   rI   ra   rI   r   r>   )rH   rI   rJ   r,   rf   rI   rg   rI   rK   rI   rL   rI   rM   rI   rN   rI   r   r>   )r$   r%   r&   r'   r   r@   r(   rA   rB   r)   r   rC   rD   r   rE   rG   r4   classmethodrT   rO   re   ri   r    r    r    r!   r>   w   s:   
 



Mr>   c                   @  s2   e Zd ZU dZedZded< edZded< dS )	r?   zz`p:nvGraphicFramePr` element.

    This contains the non-visual properties of a graphic frame, such as name, id, etc.
    zp:cNvPrr   cNvPrzp:nvPrr   nvPrN)r$   r%   r&   r'   r   rl   r(   rm   r    r    r    r!   r?   7  s   
 r?   c                   @  sZ   e Zd ZU dZedeZded< edeZded< ede	ddZ
d	ed< edddZdS )CT_OleObjectz`p:oleObj` element, container for an OLE object (e.g. Excel file).

    An OLE object can be either linked or embedded (hence the name).
    r6   r-   zr:idr0   r7   F)defaultrF   r   c                 C  s   t | ddkS )z?True when this OLE object is embedded, False when it is linked.z	./p:embedr   )lenr:   r   r    r    r!   r3   S  s   zCT_OleObject.is_embeddedNrj   )r$   r%   r&   r'   r   r
   r6   r(   r0   r	   r7   r)   r3   r    r    r    r!   rn   E  s   
 rn   N)%r'   
__future__r   typingr   r   	pptx.oxmlr   pptx.oxml.chart.chartr   pptx.oxml.nsr   pptx.oxml.shapes.sharedr   pptx.oxml.simpletypesr	   r
   pptx.oxml.tabler   pptx.oxml.xmlchemyr   r   r   r   r   	pptx.specr   r   r   r   r   r   r   r   r>   r?   rn   r    r    r    r!   <module>   s&    D A