from __future__ import annotations
from typing import TYPE_CHECKING
from ooodev.events.args.generic_args import GenericArgs
from ooodev.events.args.listener_event_args import ListenerEventArgs
from ooodev.utils import gen_util as gUtil
from ooodev.adapter.beans.vetoable_change_listener import VetoableChangeListener
if TYPE_CHECKING:
from ooodev.utils.type_var import EventArgsCallbackT, ListenerEventCallbackT
[docs]class VetoableChangeEvents:
"""Class for managing Vetoable Change Events."""
[docs] def __init__(
self,
trigger_args: GenericArgs | None = None,
cb: ListenerEventCallbackT | None = None,
listener: VetoableChangeListener | None = None,
) -> None:
"""
Constructor
Args:
trigger_args (GenericArgs, optional): Args that are passed to events when they are triggered.
This only applies if the listener is not passed.
cb (ListenerEventCallbackT | None, optional): Callback that is invoked when an event is added or removed.
listener (VetoableChangeListener | None, optional): Listener that is used to manage events.
"""
self.__callback = cb
if listener:
self.__listener = listener
else:
self.__listener = VetoableChangeListener(trigger_args=trigger_args)
self.__name = gUtil.Util.generate_random_string(10)
# region Manage Events
[docs] def add_event_vetoable_change(self, cb: EventArgsCallbackT) -> None:
"""
Adds a listener for an event.
Event is invoked when bound properties are changed.
The callback ``EventArgs.event_data`` will contain a ``com.sun.star.beans.PropertyChangeEvent`` struct.
"""
if self.__callback:
args = ListenerEventArgs(source=self.__name, trigger_name="vetoableChange")
self.__callback(self, args)
if args.remove_callback:
self.__callback = None
self.__listener.on("vetoableChange", cb)
[docs] def add_event_vetoable_change_events_disposing(self, cb: EventArgsCallbackT) -> None:
"""
Adds a listener for an event.
Event is invoked when the broadcaster is about to be disposed.
The callback ``EventArgs.event_data`` will contain a UNO ``com.sun.star.lang.EventObject`` struct.
"""
if self.__callback:
args = ListenerEventArgs(source=self.__name, trigger_name="disposing")
self.__callback(self, args)
if args.remove_callback:
self.__callback = None
self.__listener.on("disposing", cb)
[docs] def remove_event_vetoable_change(self, cb: EventArgsCallbackT) -> None:
"""
Removes a listener for an event
"""
if self.__callback:
args = ListenerEventArgs(source=self.__name, trigger_name="vetoableChange", is_add=False)
self.__callback(self, args)
if args.remove_callback:
self.__callback = None
self.__listener.off("vetoableChange", cb)
[docs] def remove_event_vetoable_change_events_disposing(self, cb: EventArgsCallbackT) -> None:
"""
Removes a listener for an event
"""
if self.__callback:
args = ListenerEventArgs(source=self.__name, trigger_name="disposing", is_add=False)
self.__callback(self, args)
if args.remove_callback:
self.__callback = None
self.__listener.off("disposing", cb)
# endregion Manage Events
@property
def events_listener_vetoable_change(self) -> VetoableChangeListener:
"""
Returns listener
"""
return self.__listener