Source code for ooodev.format.inner.direct.chart2.series.data_labels.borders.line_properties

from __future__ import annotations
import contextlib
from typing import Any
import uno
from ooodev.events.args.key_val_cancel_args import KeyValCancelArgs

from ooodev.format.inner.direct.chart2.series.data_series.borders.line_properties import (
    LineProperties as DataSeriesLineProperties,
    _LinePropertiesProps,
)
from ooodev.format.inner.preset.preset_border_line import BorderLineKind, get_preset_series_border_line_props
from ooodev.units.unit_obj import UnitT
from ooodev.utils import props as mProps
from ooodev.utils.color import Color
from ooodev.utils.data_type.intensity import Intensity


[docs]class LineProperties(DataSeriesLineProperties): """ This class represents the line properties of a chart data series labels borders line properties. .. seealso:: - :ref:`help_chart2_format_direct_series_labels_borders` """
[docs] def __init__( self, style: BorderLineKind = BorderLineKind.CONTINUOUS, color: Color = Color(0), width: float | UnitT = 0, transparency: int | Intensity = 0, ) -> None: """ Constructor. Args: style (BorderLineKind): Line style. Defaults to ``BorderLineKind.CONTINUOUS``. color (Color, optional): Line Color. Defaults to ``Color(0)``. width (float, UnitT, optional): Line Width (in ``mm`` units) or :ref:`proto_unit_obj`. Defaults to ``0``. transparency (int, Intensity, optional): Line transparency from ``0`` to ``100``. Defaults to ``0``. Returns: None: See Also: - :ref:`help_chart2_format_direct_series_labels_borders` """ super().__init__(style=style, color=color, width=width, transparency=transparency)
# region overrides def _set_line_style(self, style: BorderLineKind): props = get_preset_series_border_line_props(kind=style) label_border_dash = mProps.Props.make_props(Name=props.border_name, LineDash=props.line_dash) self._set("LabelBorderDashName", props.border_name) self._set("LabelBorderStyle", props.border_style) self._set("LabelBorderDash", label_border_dash) # endregion overrides # region event methods
[docs] def on_property_set_error(self, source: Any, event_args: KeyValCancelArgs) -> None: if event_args.key == "LabelBorderDash": # there is a bug, API DataPoint does not properly implement XPropertySet. # This may lead to an exception when trying to setting the LabelBorderDash property. # Even though the property is set, the border appears on the chart data point label. # Opening the data point properties dialog shows the border line is not set to anything. # However, because it display correctly, we will ignore the exception. with contextlib.suppress(Exception): if event_args.event_data.getImplementationName() == "com.sun.star.comp.chart.DataPoint": event_args.handled = True # attempting to set via invoke does not work, setPropertyValue is missing due to bad implementation. # # tpl = self._get("LabelBorderDash") # uno_any = uno.Any("[]com.sun.star.beans.XPropertySet", tpl) # props = mLo.Lo.qi(XPropertySet, event_args.event_data) # uno.invoke(props, "setPropertyValue", ("LabelBorderDash", uno_any)) # event_args.handled = True return super().on_property_set_error(source, event_args)
# endregion event methods # region Properties @property def _props(self) -> _LinePropertiesProps: try: return self._props_internal_attributes except AttributeError: self._props_internal_attributes = _LinePropertiesProps( color1="LabelBorderColor", color2="", width="LabelBorderWidth", transparency1="LabelBorderTransparency", transparency2="", ) return self._props_internal_attributes
# endregion Properties