Source code for ooodev.adapter.awt.grid.grid_data_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.grid.grid_data_listener import GridDataListener

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


[docs]class GridDataEvents: """ Class for managing Grid Data Events. This class is usually inherited by control classes that implement ``com.sun.star.awt.grid.XGridDataListener``. """
[docs] def __init__( self, trigger_args: GenericArgs | None = None, cb: ListenerEventCallbackT | None = None, listener: GridDataListener | 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 (GridDataListener | None, optional): Listener that is used to manage events. """ self.__callback = cb if listener: self.__listener = listener else: self.__listener = GridDataListener(trigger_args=trigger_args) self.__name = gUtil.Util.generate_random_string(10)
# region Manage Events
[docs] def add_event_data_changed(self, cb: EventArgsCallbackT) -> None: """ Adds a listener for an event. Event is invoked when existing data in a grid control's data model has been modified. The callback ``EventArgs.event_data`` will contain a UNO ``com.sun.star.awt.grid.GridDataEvent`` struct. """ # sourcery skip: class-extract-method if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="dataChanged") self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.on("dataChanged", cb)
[docs] def add_event_row_heading_changed(self, cb: EventArgsCallbackT) -> None: """ Adds a listener for an event. EEvent is invoked when the title of one or more rows changed. The callback ``EventArgs.event_data`` will contain a UNO ``com.sun.star.awt.grid.GridDataEvent`` struct. """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="rowHeadingChanged") self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.on("rowHeadingChanged", cb)
[docs] def add_event_rows_inserted(self, cb: EventArgsCallbackT) -> None: """ Adds a listener for an event. Event is invoked when one or more rows of data have been inserted into a grid control's data model.is invoked when the title of one or more rows changed. The callback ``EventArgs.event_data`` will contain a UNO ``com.sun.star.awt.grid.GridDataEvent`` struct. """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="rowsInserted") self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.on("rowsInserted", cb)
[docs] def add_event_rows_removed(self, cb: EventArgsCallbackT) -> None: """ Adds a listener for an event. Event is is invoked when one or more rows of data have been removed from a grid control's data model. The callback ``EventArgs.event_data`` will contain a UNO ``com.sun.star.awt.grid.GridDataEvent`` struct. """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="rowsRemoved") self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.on("rowsRemoved", cb)
[docs] def add_event_grid_data_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_data_changed(self, cb: EventArgsCallbackT) -> None: """ Removes a listener for an event """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="dataChanged", is_add=False) self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.off("dataChanged", cb)
[docs] def remove_event_row_heading_changed(self, cb: EventArgsCallbackT) -> None: """ Removes a listener for an event """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="rowHeadingChanged", is_add=False) self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.off("rowHeadingChanged", cb)
[docs] def remove_event_rows_inserted(self, cb: EventArgsCallbackT) -> None: """ Removes a listener for an event """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="rowsInserted", is_add=False) self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.off("rowsInserted", cb)
[docs] def remove_event_rows_removed(self, cb: EventArgsCallbackT) -> None: """ Removes a listener for an event """ if self.__callback: args = ListenerEventArgs(source=self.__name, trigger_name="rowsRemoved", is_add=False) self.__callback(self, args) if args.remove_callback: self.__callback = None self.__listener.off("rowsRemoved", cb)
[docs] def remove_event_grid_data_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_grid_data(self) -> GridDataListener: """ 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 GridDataEvents 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, GridDataEvents): return if not hasattr(source, "component"): return comp = cast("XMutableGridDataModel", source.component) # type: ignore comp.addGridDataListener(source.events_listener_grid_data) event.remove_callback = True