Source code for ooodev.format.inner.partial.draw.borders.line_properties

from __future__ import annotations
from typing import Any, Dict, TYPE_CHECKING

from ooodev.events.args.cancel_event_args import CancelEventArgs
from ooodev.events.args.event_args import EventArgs
from ooodev.events.gbl_named_event import GblNamedEvent
from ooodev.events.partial.events_partial import EventsPartial
from ooodev.exceptions import ex as mEx
from ooodev.format.inner.preset.preset_border_line import BorderLineKind
from ooodev.format.inner.style_factory import draw_border_line_factory
from ooodev.events.style_named_event import StyleNameEvent
from ooodev.utils import color as mColor
from ooodev.utils.context.lo_context import LoContext
from ooodev.format.inner.partial.factory_name_base import FactoryNameBase

if TYPE_CHECKING:
    from ooodev.loader.inst.lo_inst import LoInst
    from ooodev.format.proto.borders.line_properties_t import LinePropertiesT
    from ooodev.units.unit_obj import UnitT
    from ooodev.utils.data_type.intensity import Intensity
else:
    LoInst = Any
    LinePropertiesT = Any
    UnitT = Any
    Intensity = Any


[docs]class LineProperties(FactoryNameBase): """ Class for Line Properties. """
[docs] def __init__(self, factory_name: str, component: Any, lo_inst: LoInst | None = None) -> None: super().__init__(factory_name, component, lo_inst) self.before_event_name = "before_style_border_line" self.after_event_name = "after_style_border_line"
[docs] def style( self, color: mColor.Color = mColor.Color(0), width: float | UnitT = 0, transparency: int | Intensity = 0, style: BorderLineKind = BorderLineKind.CONTINUOUS, ) -> LinePropertiesT | None: """ Style Font. Args: 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``. style (BorderLineKind, optional): Line style. Defaults to ``BorderLineKind.CONTINUOUS``. Raises: CancelEventError: If the event ``before_style_border_line`` is cancelled and not handled. Returns: LinePropertiesT | None: Font Only instance or ``None`` if cancelled. Hint: - ``BorderLineKind`` can be imported from ``ooodev.format.inner.preset.preset_border_line`` - ``Intensity`` can be imported from ``ooodev.utils.data_type.intensity`` """ comp = self._component factory_name = self._factory_name has_events = False cargs = None if isinstance(self, EventsPartial): has_events = True cargs = CancelEventArgs(self.style.__qualname__) event_data: Dict[str, Any] = { "style": style, "color": color, "width": width, "transparency": transparency, "factory_name": factory_name, "this_component": comp, } cargs.event_data = event_data self.trigger_event(StyleNameEvent.STYLE_APPLYING, cargs) self.trigger_event(self.before_event_name, cargs) if cargs.cancel is True: if cargs.handled is not False: return None cargs.set("initial_event", self.before_event_name) self.trigger_event(GblNamedEvent.EVENT_CANCELED, cargs) if cargs.handled is False: raise mEx.CancelEventError(cargs, "Style Font Effects has been cancelled.") else: return None style = cargs.event_data.get("style", style) color = cargs.event_data.get("color", color) width = cargs.event_data.get("width", width) transparency = cargs.event_data.get("transparency", transparency) comp = cargs.event_data.get("this_component", comp) factory_name = cargs.event_data.get("factory_name", factory_name) styler = draw_border_line_factory(factory_name) fe = styler( style=style, color=color, width=width, transparency=transparency, ) # fe.factory_name = factory_name if has_events: fe.add_event_observer(self.event_observer) # type: ignore with LoContext(self._lo_inst): fe.apply(comp) fe.set_update_obj(comp) if cargs is not None: # pylint: disable=no-member event_args = EventArgs.from_args(cargs) event_args.event_data["styler_object"] = fe self.trigger_event(self.after_event_name, EventArgs.from_args(cargs)) # type: ignore self.trigger_event(StyleNameEvent.STYLE_APPLIED, event_args) # type: ignore return fe
[docs] def style_get(self) -> LinePropertiesT | None: """ Gets the Style. Raises: CancelEventError: If the event is cancelled and not handled. Returns: LinePropertiesT | None: Line style or ``None`` if cancelled. """ comp = self._component factory_name = self._factory_name cargs = None event_name = f"{self.before_event_name}_get" if isinstance(self, EventsPartial): cargs = CancelEventArgs(self.style_get.__qualname__) event_data: Dict[str, Any] = { "factory_name": factory_name, "this_component": comp, } cargs.event_data = event_data self.trigger_event(event_name, cargs) if cargs.cancel is True: if cargs.handled is not False: return None cargs.set("initial_event", event_name) self.trigger_event(GblNamedEvent.EVENT_CANCELED, cargs) if cargs.handled is False: raise mEx.CancelEventError(cargs, "Style get has been cancelled.") else: return None factory_name = cargs.event_data.get("factory_name", factory_name) comp = cargs.event_data.get("this_component", comp) styler = draw_border_line_factory(factory_name) try: style = styler.from_obj(comp) except mEx.DisabledMethodError: return None style.set_update_obj(comp) return style