Draw Modify Spacing

The ooodev.format.draw.modify.indent_space.Spacing, class is used to modify the values seen in Fig. 900 of a style.

Draw dialog Spacing default

Fig. 900 Draw dialog Spacing default

Setting the Spacing

from __future__ import annotations
import uno
from ooodev.draw import Draw, DrawDoc, ZoomKind
from ooodev.format.draw.modify import FamilyGraphics, DrawStyleFamilyKind
from ooodev.format.draw.modify.indent_space import Spacing
from ooodev.loader.lo import Lo


def main() -> int:
    with Lo.Loader(connector=Lo.ConnectSocket()):
        doc = DrawDoc(Draw.create_draw_doc())
        doc.set_visible()
        Lo.delay(700)
        doc.zoom(ZoomKind.ZOOM_75_PERCENT)

        slide = doc.get_slide()

        width = 100
        height = 50
        x = 10
        y = 10

        rect = slide.draw_rectangle(x=x, y=y, width=width, height=height)
        rect.set_string("Hello World!")

        style = Spacing(
            above=5,
            below=5.5,
            style_name=FamilyGraphics.DEFAULT_DRAWING_STYLE,
            style_family=DrawStyleFamilyKind.GRAPHICS,
        )
        doc.apply_styles(style)

        Lo.delay(1_000)
        doc.close_doc()
    return 0

if __name__ == "__main__":
    raise SystemExit(main())

Running the above code will produce the following results in the Draw dialog.

Draw dialog Spacing style changed

Fig. 901 Draw dialog Spacing style changed

Note

The style_no_space for the Spacing class constructor argument is suppose to set the styles ParaContextMargin property. The ParaContextMargin is suppose to be part of the com.sun.star.style.ParagraphProperties service; However, for some reason it is missing for Draw styles. Setting this style_no_space argument will result in a print warning message in verbose mode. It is better to not set this argument. It is left in just in case it starts working in the future.

There is a option in the Indent and Spacing dialog Do not add space between paragraphs of the same style as seen in Fig. 900. It seems to work, but it is not clear how it is implemented. It is not clear if it is a style property.

Getting spacing from a style

# ... other code

f_style = Spacing.from_style(
    doc=doc.component,
    style_name=style.prop_style_name,
    style_family=style.prop_style_family_name
)
assert f_style is not None
assert f_style.prop_style_name == str(FamilyGraphics.DEFAULT_DRAWING_STYLE)