Source code for ooodev.format.inner.direct.chart2.series.data_labels.data_labels.orientation

from __future__ import annotations
import contextlib
from typing import Any, cast, Tuple
from ooodev.events.args.key_val_cancel_args import KeyValCancelArgs

from ooodev.format.inner.direct.chart2.title.alignment.direction import DirectionModeKind
from ooodev.format.inner.kind.format_kind import FormatKind
from ooodev.format.inner.style_base import StyleBase
from ooodev.units.angle import Angle


[docs]class Orientation(StyleBase): """ Series data points Text orientation. .. seealso:: - :ref:`help_chart2_format_direct_series_labels_data_labels` .. versionadded:: 0.9.4 """
[docs] def __init__( self, angle: int | Angle | None = None, mode: DirectionModeKind | None = None, leaders: bool | None = None ) -> None: """ Constructor Args: angle (int, Angle, optional): Rotation in degrees of the text. mode (DirectionModeKind, optional): Specifies the writing direction. leaders (bool, optional): Leader Lines. Connect displaced data points to data points. Returns: None: Note: When setting a data point ``leaders`` is ignored. To set ``leaders`` set it on the data series. See Also: - :ref:`help_chart2_format_direct_series_labels_data_labels` """ super().__init__() if angle is not None: self.prop_angle = angle if mode is not None: self.prop_mode = mode if leaders is not None: self.prop_leaders = leaders
# region overrides def _supported_services(self) -> Tuple[str, ...]: try: return self._supported_services_values except AttributeError: self._supported_services_values = ( "com.sun.star.chart2.DataSeries", "com.sun.star.chart2.DataPointProperties", ) return self._supported_services_values # endregion overrides # region on events
[docs] def on_property_set_error(self, source: Any, event_args: KeyValCancelArgs) -> None: if event_args.key == "ShowCustomLeaderLines": # ShowCustomLeaderLines must be set on data series and not data point with contextlib.suppress(Exception): if event_args.event_data.getImplementationName() == "com.sun.star.comp.chart.DataPoint": event_args.handled = True super().on_property_set_error(source, event_args)
# endregion on events # region Properties @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.UNKNOWN return self._format_kind_prop @property def prop_angle(self) -> Angle | None: """Gets/Sets the rotation of the text.""" # angle is stored as float but the dialog only allows integer values pv = cast(float, self._get("TextRotation")) return None if pv is None else Angle(int(pv)) @prop_angle.setter def prop_angle(self, value: int | Angle | None) -> None: if value is None: self._remove("TextRotation") return val = Angle(int(value)) # angle is stored as float but the dialog only allows integer values self._set("TextRotation", float(val.value)) @property def prop_mode(self) -> DirectionModeKind | None: """Gets/Sets writing mode.""" pv = cast(int, self._get("WritingMode")) return None if pv is None else DirectionModeKind(pv) @prop_mode.setter def prop_mode(self, value: DirectionModeKind | None): if value is None: self._remove("WritingMode") return self._set("WritingMode", value.value) @property def prop_leaders(self) -> bool | None: """Gets/Sets whether to show leaders.""" return cast(bool, self._get("ShowCustomLeaderLines")) @prop_leaders.setter def prop_leaders(self, value: bool | None) -> None: if value is None: self._remove("ShowCustomLeaderLines") return self._set("ShowCustomLeaderLines", value)
# endregion Properties