Source code for ooodev.adapter.awt.item_list_events

from __future__ import annotations

from typing import Any, cast, 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.awt.item_list_listener import ItemListListener

if TYPE_CHECKING:
    from com.sun.star.awt import XItemList
    from ooodev.utils.type_var import EventArgsCallbackT, ListenerEventCallbackT


[docs]class ItemListEvents: """ Class for managing Change Events. """
[docs] def __init__( self, trigger_args: GenericArgs | None = None, cb: ListenerEventCallbackT | None = None, listener: ItemListListener | None = None, subscriber: XItemList | 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 (ItemListListener | None, optional): Listener that is used to manage events. subscriber (XItemList, optional): An UNO object that implements the ``com.sun.star.form.XItemList`` interface. If passed in then this instance listener is automatically added to it. """ self.__callback = cb if listener: self.__listener = listener if subscriber: subscriber.addItemListListener(self.__listener) else: self.__listener = ItemListListener(trigger_args=trigger_args, subscriber=subscriber) self.__name = gUtil.Util.generate_random_string(10)
# region Manage Events
[docs] def add_event_all_items_removed(self, cb: EventArgsCallbackT) -> None: """ Adds a listener for an event. Event is invoked when the list has been completely cleared, i.e. after an invocation of ``XItemList.removeAllItems()`` 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="allItemsRemoved") self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.on("allItemsRemoved", cb)
[docs] def add_event_item_list_changed(self, cb: EventArgsCallbackT) -> None: """ Adds a listener for an event. Event is invoked when the changes to the item list which occurred are too complex to be notified in single events. Consumers of this event should discard their cached information about the current item list, and completely refresh it from the XItemList's current state. 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="itemListChanged") self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.on("itemListChanged", cb)
[docs] def add_event_list_item_inserted(self, cb: EventArgsCallbackT) -> None: """ Adds a listener for an event. Event is invoked when an item is inserted into the list. The callback ``EventArgs.event_data`` will contain a UNO ``com.sun.star.awt.ItemListEvent`` struct. """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="listItemInserted") self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.on("listItemInserted", cb)
[docs] def add_event_list_item_modified(self, cb: EventArgsCallbackT) -> None: """ Adds a listener for an event. Event is invoked when an item in the list is modified, i.e. its text or image changed. The callback ``EventArgs.event_data`` will contain a UNO ``com.sun.star.awt.ItemListEvent`` struct. """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="listItemModified") self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.on("listItemModified", cb)
[docs] def add_event_list_item_removed(self, cb: EventArgsCallbackT) -> None: """ Adds a listener for an event. Event is invoked when an item is removed from the list. The callback ``EventArgs.event_data`` will contain a UNO ``com.sun.star.awt.ItemListEvent`` struct. """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="listItemRemoved") self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.on("listItemRemoved", cb)
[docs] def add_event_item_list_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_all_items_removed(self, cb: EventArgsCallbackT) -> None: """ Removes a listener for an event """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="allItemsRemoved", is_add=False) self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.off("allItemsRemoved", cb)
[docs] def remove_event_item_list_changed(self, cb: EventArgsCallbackT) -> None: """ Removes a listener for an event """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="itemListChanged", is_add=False) self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.off("itemListChanged", cb)
[docs] def remove_event_list_item_inserted(self, cb: EventArgsCallbackT) -> None: """ Removes a listener for an event """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="listItemInserted", is_add=False) self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.off("listItemInserted", cb)
[docs] def remove_event_list_item_modified(self, cb: EventArgsCallbackT) -> None: """ Removes a listener for an event """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="listItemModified", is_add=False) self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.off("listItemModified", cb)
[docs] def remove_event_list_item_removed(self, cb: EventArgsCallbackT) -> None: """ Removes a listener for an event """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="listItemRemoved", is_add=False) self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.off("listItemRemoved", cb)
[docs] def remove_event_item_list_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)
@property def events_listener_item_list(self) -> ItemListListener: """ Returns listener """ return self.__listener
# endregion Manage Events
[docs]def on_lazy_cb(source: Any, event: ListenerEventArgs) -> None: """ Callback that is invoked when an event is added or removed. This method is generally used to add the listener to the component in a lazy manner. This means this callback will only be called once in the lifetime of the component. Args: source (Any): Expected to be an instance of ItemListEvents that is a partial class of a component based class. event (ListenerEventArgs): Event arguments. Returns: None: Warning: This method is intended for internal use only. """ # will only ever fire once if not isinstance(source, ItemListEvents): return if not hasattr(source, "component"): return comp = cast("XItemList", source.component) # type: ignore comp.addItemListListener(source.events_listener_item_list) event.remove_callback = True