
Layout Placeholders
===================


Candidate protocol
------------------

::

    >>> slide_layout = prs.slide_layouts[0]
    >>> slide_layout
    <pptx.parts.slidelayout.SlideLayout object at 0x10a5d42d0>
    >>> slide_layout.shapes
    <pptx.shapes.shapetree.LayoutShapes object at 0x104e60000>
    >>> slide_layout.shapes[0]
    <pptx.shapes.placeholder.LayoutPlaceholder object at 0x104e60020>
    >>> layout_placeholders = slide_layout.placeholders
    >>> layout_placeholders
    <pptx.shapes.shapetree.LayoutPlaceholders object at 0x104e60040>
    >>> len(layout_placeholders)
    5
    >>> layout_placeholders[1].type
    'body'
    >>> layout_placeholders[2].idx
    10
    >>> layout_placeholders.get(idx=0)
    <pptx.shapes.placeholder.MasterPlaceholder object at 0x104e60020>
    >>> layout_placeholders.get(idx=666)
    None
    >>> layout_placeholders[1]._sp.spPr.xfrm
    None
    >>> layout_placeholders[1].width  # should inherit from master placehldr
    8229600


Example XML
-----------

Slide layout placeholder::

    <p:sp>
      <p:nvSpPr>
        <p:cNvPr id="3" name="Content Placeholder 2"/>
        <p:cNvSpPr>
          <a:spLocks noGrp="1"/>
        </p:cNvSpPr>
        <p:nvPr>
          <p:ph idx="1"/>
        </p:nvPr>
      </p:nvSpPr>
      <p:spPr/>
      <p:txBody>
        <a:bodyPr/>
        <a:lstStyle/>
        <a:p>
          <a:pPr lvl="0"/>
          <a:r>
            <a:rPr lang="en-US" smtClean="0"/>
            <a:t>Click to edit Master text styles</a:t>
          </a:r>
        </a:p>
        <a:p>
          ... and others through lvl="4", five total
        </a:p>
      </p:txBody>
    </p:sp>


Behaviors
---------

* Hypothesis:

  + Layout inherits properties from master based only on type (e.g. body,
    dt), with no bearing on idx value.
  + Slide inherits from layout strictly on idx value.

  + Need to experiment to see if position and size are inherited on body
    placeholder by type or if idx has any effect

    - expanded/repackaged, change body ph idx on layout and see if still
      inherits position.
    - result: slide layout still appears with the proper position and size,
      however the slide placeholder appears at (0, 0) and apparently with
      size of (0, 0).

  + What behavior is exhibited when a slide layout contains two body
    placeholders, neither of which has a matching idx value and neither of
    which has a specified size or position?

    - result: both placeholders are present, directly superimposed upon each
      other. They both inherit position and fill.


Layout placeholder inheritance
------------------------------

Objective: determine layout placeholder inheritee for each ph type

Observations:

Layout placeholder with *lyt-ph-type* inherits color from master placeholder
with *mst-ph-type*, noting idx value match.

===========  ===========  ===================================================
lyt-ph-type  mst-ph-type  notes
===========  ===========  ===================================================
ctrTitle     title        title layout - idx value matches (None, => 0)
subTitle     body         title layout - idx value matches (1)
dt           dt           title layout - idx 10 != 2
ftr          ftr          title layout - idx 11 != 3
sldNum       sldNum       title layout - idx 12 != 4
title        title        bullet layout - idx value matches (None, => 0)
None (obj)   body         bullet layout - idx value matches (1)
body         body         sect hdr - idx value matches (1)
None (obj)   body         two content - idx 2 != 1
body         body         comparison - idx 3 != 1
pic          body         picture - idx value matches (1)
chart        body         manual - idx 9 != 1
clipArt      body         manual - idx 9 != 1
dgm          body         manual - idx 9 != 1
media        body         manual - idx 9 != 1
tbl          body         manual - idx 9 != 1

hdr          repair err   valid only in Notes and Handout Slide
sldImg       repair err   valid only in Notes and Handout Slide
===========  ===========  ===================================================
