Source code for ooodev.format.inner.partial.style.style_property_partial

from __future__ import annotations
from typing import Any, Dict

from ooodev.events.args.cancel_event_args import CancelEventArgs
from ooodev.events.args.event_args import EventArgs
from ooodev.events.args.key_val_cancel_args import KeyValCancelArgs
from ooodev.events.gbl_named_event import GblNamedEvent
from ooodev.events.lo_events import event_ctx
from ooodev.events.partial.events_partial import EventsPartial
from ooodev.events.props_named_event import PropsNamedEvent
from ooodev.events.style_named_event import StyleNameEvent
from ooodev.exceptions import ex as mEx
from ooodev.utils import props as mProps


[docs]class StylePropertyPartial: """ Partial class for Applying a Style Name to a component. """
[docs] def __init__(self, component: Any, property_name: str, property_default="") -> None: self.__component = component self.__property_name = property_name self.__property_default = property_default
[docs] def style_by_name(self, name: str = "") -> None: """ Assign a style by name to the component. Args: name (str, optional): The name of the style to apply. If not provided, the default style is applied. Raises: CancelEventError: If the event ``before_style_by_name`` is cancelled and not handled. Returns: None: """ comp = self.__component prop_name = self.__property_name cancel_set_prop = False cargs = None prop_val = name prop_default = self.__property_default if isinstance(self, EventsPartial): cargs = CancelEventArgs(self.style_by_name.__qualname__) event_data: Dict[str, Any] = { "name": prop_val, "prop_name": prop_name, "this_component": comp, "cancel_set_prop": cancel_set_prop, } cargs.event_data = event_data self.trigger_event(StyleNameEvent.STYLE_NAME_APPLYING, cargs) self.trigger_event("before_style_by_name", cargs) if cargs.cancel is True: if cargs.handled is True: return None cargs.set("initial_event", "before_style_by_name") self.trigger_event(GblNamedEvent.EVENT_CANCELED, cargs) if cargs.handled is False: raise mEx.CancelEventError(cargs, "Style Position has been cancelled.") else: return None prop_val = cargs.event_data.get("name", prop_val) prop_name = cargs.event_data.get("prop_name", prop_name) cancel_set_prop = cargs.event_data.get("cancel_set_prop", cancel_set_prop) comp = cargs.event_data.get("this_component", comp) def _on_props_setting( source: Any, event_args: KeyValCancelArgs, *args, **kwargs # pylint: disable=unused-argument ) -> None: nonlocal prop_default # if the event property value is the default value, then trigger the default_style_by_name_prop_setting event. # this can bubble up to the default_style_by_name_prop_setting event and give an opportunity to change have the default property set by Props.set method. if event_args.value == prop_default and isinstance(self, EventsPartial): default_args = KeyValCancelArgs( self.style_by_name.__qualname__, key=event_args.key, value=prop_default ) # pylint: disable=no-member self.trigger_event("style_by_name_default_prop_setting", default_args) # type: ignore event_args.value = default_args.value event_args.cancel = default_args.cancel event_args.handled = default_args.handled event_args.key = default_args.key event_args.value = default_args.value event_args.default = default_args.default if cancel_set_prop is False: if not prop_name: return if not prop_val: prop_val = self.__property_default # Subscribe to property setting event while name is being set. with event_ctx( (PropsNamedEvent.PROP_SETTING, _on_props_setting), source=self, lo_observe=True, ): mProps.Props.set(comp, **{prop_name: name}) if cargs is not None: # pylint: disable=no-member event_args = EventArgs.from_args(cargs) self.trigger_event("after_style_by_name", event_args) # type: ignore self.trigger_event(StyleNameEvent.STYLE_NAME_APPLIED, event_args) # type: ignore
[docs] def style_by_name_get(self) -> str: """ Get the style name of the component. Returns: str: The name of the style. """ comp = self.__component prop_name = self.__property_name cancel_set_prop = False cargs = None if isinstance(self, EventsPartial): cargs = CancelEventArgs(self.style_by_name.__qualname__) event_data: Dict[str, Any] = { "prop_name": prop_name, "this_component": comp, "cancel_set_prop": cancel_set_prop, } cargs.event_data = event_data self.trigger_event("before_style_by_name_get", cargs) if cargs.cancel is True: if cargs.handled is True: return "" cargs.set("initial_event", "before_style_by_name_get") self.trigger_event(GblNamedEvent.EVENT_CANCELED, cargs) if cargs.handled is False: raise mEx.CancelEventError(cargs, "Style Position has been cancelled.") else: return "" prop_name = cargs.event_data.get("prop_name", prop_name) cancel_set_prop = cargs.event_data.get("cancel_set_prop", cancel_set_prop) comp = cargs.event_data.get("this_component", comp) return mProps.Props.get(comp, prop_name, "") if prop_name else ""