Source code for fastpyxl.chart.title
# Copyright (c) 2010-2024 fastpyxl
from __future__ import annotations
from fastpyxl.typed_serialisable.base import Serialisable
from fastpyxl.typed_serialisable.fields import AliasField, Field
from fastpyxl.descriptors.excel import ExtensionList
from .text import Text, RichText
from .layout import Layout
from .shapes import GraphicalProperties
from fastpyxl.drawing.text import (
Paragraph,
RegularTextRun,
ParagraphProperties,
CharacterProperties,
)
[docs]
class Title(Serialisable):
tagname = "title"
tx: Text | None = Field.element(expected_type=Text, allow_none=True, default=None)
text = AliasField("tx", default=None)
layout: Layout | None = Field.element(expected_type=Layout, allow_none=True, default=None)
overlay: bool | None = Field.nested_bool(allow_none=True, default=None)
spPr: GraphicalProperties | None = Field.element(
expected_type=GraphicalProperties, allow_none=True, default=None
)
graphicalProperties = AliasField("spPr", default=None)
txPr: RichText | None = Field.element(expected_type=RichText, allow_none=True, default=None)
body = AliasField("txPr", default=None)
extLst: ExtensionList | None = Field.element(
expected_type=ExtensionList, allow_none=True, serialize=False, default=None
)
xml_order = ("tx", "layout", "overlay", "spPr", "txPr")
def __init__(
self,
tx=None,
layout=None,
overlay=None,
spPr=None,
txPr=None,
extLst=None,
):
if tx is None:
tx = Text()
self.tx = tx
self.layout = layout
self.overlay = overlay
self.spPr = spPr
self.txPr = txPr
self.extLst = extLst
[docs]
def title_maker(text):
title = Title()
paraprops = ParagraphProperties()
paraprops.defRPr = CharacterProperties()
paras = [Paragraph(r=[RegularTextRun(t=s)], pPr=paraprops) for s in text.split("\n")]
tx = title.tx
assert tx is not None
body = tx.rich
assert body is not None
body.paragraphs = paras
return title
[docs]
def title_from_value(value):
if value is None:
return None
if isinstance(value, str):
return title_maker(value)
return value