Source code for ooodev.format.inner.direct.write.page.page.paper_format
"""
Module for Fill Transparency.
.. versionadded:: 0.9.0
"""
from __future__ import annotations
from typing import Any, Tuple, cast, Type, TypeVar, overload
from ooo.dyn.awt.size import Size
from ooodev.events.args.cancel_event_args import CancelEventArgs
from ooodev.exceptions import ex as mEx
from ooodev.format.inner.kind.format_kind import FormatKind
from ooodev.format.inner.preset.preset_paper_format import PaperFormatKind
from ooodev.format.inner.style_base import StyleBase
from ooodev.loader import lo as mLo
from ooodev.utils import props as mProps
from ooodev.utils.data_type.size_mm import SizeMM
_TPaperFormat = TypeVar("_TPaperFormat", bound="PaperFormat")
[docs]class PaperFormat(StyleBase):
"""
Fill Transparency
.. versionadded:: 0.9.0
"""
[docs] def __init__(self, size: SizeMM = SizeMM(215.9, 279.4)) -> None:
"""
Constructor
Args:
size (SizeMM, optional): Width and height in ``mm`` units. Defaults to Letter size in Portrait mode.
"""
super().__init__()
self.prop_size = size
# region Overrides
def _supported_services(self) -> Tuple[str, ...]:
try:
return self._supported_services_values
except AttributeError:
self._supported_services_values = ("com.sun.star.style.PageProperties", "com.sun.star.style.PageStyle")
return self._supported_services_values
def _on_modifying(self, source: Any, event: CancelEventArgs) -> None:
if self._is_default_inst:
raise ValueError("Modifying a default instance is not allowed")
return super()._on_modifying(source, event)
def _props_set(self, obj: Any, **kwargs: Any) -> None:
try:
return super()._props_set(obj, **kwargs)
except mEx.MultiError as e:
mLo.Lo.print(f"{self.__class__.__name__}.apply(): Unable to set Property")
for err in e.errors:
mLo.Lo.print(f" {err}")
# endregion Overrides
# region internal methods
# endregion internal methods
# region Static Methods
# region from_obj()
@overload
@classmethod
def from_obj(cls: Type[_TPaperFormat], obj: Any) -> _TPaperFormat: ...
@overload
@classmethod
def from_obj(cls: Type[_TPaperFormat], obj: Any, **kwargs) -> _TPaperFormat: ...
[docs] @classmethod
def from_obj(cls: Type[_TPaperFormat], obj: Any, **kwargs) -> _TPaperFormat:
"""
Gets instance from object
Args:
obj (object): UNO object.
Returns:
Margins: Instance that represents object margins.
"""
# this nu is only used to get Property Name
inst = cls(**kwargs)
if not inst._is_valid_obj(obj):
raise mEx.NotSupportedError(f'Object is not supported for conversion to "{cls.__name__}"')
def set_prop(key: str, clazz: PaperFormat):
nonlocal obj
val = mProps.Props.get(obj, key, None)
if val is not None:
clazz._set(key, val)
set_prop("Width", inst)
set_prop("Height", inst)
set_prop("Size", inst)
set_prop("IsLandscape", inst)
return inst
# endregion from_obj()
# region from_preset()
@overload
@classmethod
def from_preset(cls: Type[_TPaperFormat], preset: PaperFormatKind, landscape: bool = False) -> _TPaperFormat: ...
@overload
@classmethod
def from_preset(
cls: Type[_TPaperFormat], preset: PaperFormatKind, landscape: bool = False, **kwargs
) -> _TPaperFormat: ...
[docs] @classmethod
def from_preset(
cls: Type[_TPaperFormat], preset: PaperFormatKind, landscape: bool = False, **kwargs
) -> _TPaperFormat:
"""
Gets instance from preset
Args:
preset (PaperFormatKind): Preset kind
landscape (bool, optional): Specifies if the preset is in landscape mode. Defaults to ``False``.
Returns:
PaperFormat: Format from preset
"""
sz = preset.get_size()
if landscape:
sz = sz.swap()
return cls(SizeMM.from_size_mm100(sz), **kwargs)
# endregion from_preset()
# endregion Static Methods
@property
def prop_format_kind(self) -> FormatKind:
"""Gets the kind of style"""
try:
return self._format_kind_prop
except AttributeError:
self._format_kind_prop = FormatKind.PAGE | FormatKind.STYLE
return self._format_kind_prop
@property
def prop_size(self) -> SizeMM:
"""Gets/Sets Size value"""
width = cast(int, self._get("Width"))
height = cast(int, self._get("Height"))
return SizeMM.from_mm100(width, height)
@prop_size.setter
def prop_size(self, value: SizeMM) -> None:
size = value.get_size_mm100()
self._set("Width", size.width)
self._set("Height", size.height)
self._set("Size", Size(Width=size.width, Height=size.height))
if size.width > size.height:
self._set("IsLandscape", True)
else:
self._set("IsLandscape", False)
@property
def prop_landscape(self) -> bool:
"""Gets Landscape value"""
return cast(bool, self._get("IsLandscape"))