# region imports
from __future__ import annotations
from typing import Any, cast, TYPE_CHECKING
from ooodev.adapter.container.container_events import ContainerEvents
from ooodev.events.args.listener_event_args import ListenerEventArgs
from ooodev.utils import info as mInfo
from ooodev.utils.kind.dialog_control_kind import DialogControlKind
from ooodev.utils.kind.dialog_control_named_kind import DialogControlNamedKind
from ooodev.dialog.dl_control.ctl_base import DialogControlBase, _create_control
if TYPE_CHECKING:
from com.sun.star.awt.tab import UnoControlTabPage # service
from com.sun.star.awt.tab import UnoControlTabPageModel # service
from com.sun.star.awt import XWindowPeer
# endregion imports
[docs]class CtlTabPage(DialogControlBase, ContainerEvents):
"""Class for Tab Page Control"""
# pylint: disable=unused-argument
# region init
[docs] def __init__(self, ctl: UnoControlTabPage) -> None:
"""
Constructor
Args:
ctl (UnoControlTabPage): Tab Page Control
"""
# generally speaking EventArgs.event_data will contain the Event object for the UNO event raised.
DialogControlBase.__init__(self, ctl)
generic_args = self._get_generic_args()
# EventArgs.event_data will contain the ActionEvent
ContainerEvents.__init__(self, trigger_args=generic_args, cb=self._on_container_listener_add_remove)
# endregion init
# region Lazy Listeners
def _on_container_listener_add_remove(self, source: Any, event: ListenerEventArgs) -> None:
# will only ever fire once
self.view.addContainerListener(self.events_listener_container)
event.remove_callback = True
# endregion Lazy Listeners
def __repr__(self) -> str:
if hasattr(self, "name"):
return f"CtlTabPage({self.name})"
return "CtlTabPage"
# region Overrides
[docs] def get_view_ctl(self) -> UnoControlTabPage:
return cast("UnoControlTabPage", super().get_view_ctl())
[docs] def get_uno_srv_name(self) -> str:
"""Returns ``com.sun.star.awt.UnoControlTabPage``"""
return "com.sun.star.awt.UnoControlTabPage"
[docs] def get_model(self) -> UnoControlTabPageModel:
"""Gets the Model for the control"""
return cast("UnoControlTabPageModel", self.get_view_ctl().getModel())
[docs] def get_control_kind(self) -> DialogControlKind:
"""Gets the control kind. Returns ``DialogControlKind.TAB_PAGE``"""
return DialogControlKind.TAB_PAGE
[docs] def get_control_named_kind(self) -> DialogControlNamedKind:
"""Gets the control named kind. Returns ``DialogControlNamedKind.TAB_PAGE``"""
return DialogControlNamedKind.TAB_PAGE
# endregion Overrides
# region Methods
# endregion Methods
# region Static Methods
[docs] @staticmethod
def create(win: XWindowPeer, **kwargs: Any) -> "CtlTabPage":
"""
Creates a new instance of the control.
Keyword arguments are optional.
Extra Keyword args are passed to the control as property values.
Args:
win (XWindowPeer): Parent Window
Keyword Args:
x (int, UnitT, optional): X Position in Pixels or UnitT.
y (int, UnitT, optional): Y Position in Pixels or UnitT.
width (int, UnitT, optional): Width in Pixels or UnitT.
height (int, UnitT, optional): Height in Pixels or UnitT.
Returns:
CtlTabPage: New instance of the control.
Note:
The `UnoControlDialogElement <https://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1awt_1_1UnoControlDialogElement.html>`__
interface is not included when creating the control with a window peer.
"""
ctrl = _create_control("com.sun.star.awt.UnoControlTabPageModel", win, **kwargs)
return CtlTabPage(ctl=ctrl)
# endregion Static Methods
# region Properties
@property
def model(self) -> UnoControlTabPageModel:
# pylint: disable=no-member
return cast("UnoControlTabPageModel", super().model)
@property
def view(self) -> UnoControlTabPage:
# pylint: disable=no-member
return cast("UnoControlTabPage", super().view)
@property
def horizontal_scrollbar(self) -> bool:
"""
Gets or sets if a horizontal scrollbar should be added to the dialog.
Returns ``False`` if LibreOffice version is less than ``7.1``
**since**
LibreOffice ``7.1``
"""
return False if mInfo.Info.version_info < (7, 1) else self.model.HScroll
@horizontal_scrollbar.setter
def horizontal_scrollbar(self, value: bool) -> None:
"""Sets the horizontal scrollbar"""
if mInfo.Info.version_info < (7, 1):
return
self.model.HScroll = value
@property
def vertical_scrollbar(self) -> bool:
"""
Gets or sets if a vertical scrollbar should be added to the dialog.
Returns ``False`` if LibreOffice version is less than ``7.1``
**since**
LibreOffice ``7.1``
"""
return False if mInfo.Info.version_info < (7, 1) else self.model.VScroll
@vertical_scrollbar.setter
def vertical_scrollbar(self, value: bool) -> None:
if mInfo.Info.version_info < (7, 1):
return
self.model.VScroll = value
@property
def scroll_height(self) -> int:
"""
Gets or sets the total height of the scrollable dialog content
Returns ``-1`` if LibreOffice version is less than ``7.1``
**since**
LibreOffice ``7.1``
"""
return -1 if mInfo.Info.version_info < (7, 1) else self.model.ScrollHeight
@scroll_height.setter
def scroll_height(self, value: int) -> None:
"""Sets the scroll height"""
if mInfo.Info.version_info < (7, 1):
return
self.model.ScrollHeight = value
@property
def scroll_left(self) -> int:
"""
Gets or sets the horizontal position of the scrolled dialog content
Returns ``-1`` if LibreOffice version is less than ``7.1``
**since**
LibreOffice ``7.1``
"""
return -1 if mInfo.Info.version_info < (7, 1) else self.model.ScrollLeft
@scroll_left.setter
def scroll_left(self, value: int) -> None:
"""Sets the scroll left"""
if mInfo.Info.version_info < (7, 1):
return
self.model.ScrollLeft = value
@property
def scroll_top(self) -> int:
"""
Gets or sets the vertical position of the scrolled dialog content
Returns ``-1`` if LibreOffice version is less than ``7.1``
**since**
LibreOffice ``7.1``
"""
return -1 if mInfo.Info.version_info < (7, 1) else self.model.ScrollTop
@scroll_top.setter
def scroll_top(self, value: int) -> None:
"""Sets the scroll top"""
if mInfo.Info.version_info < (7, 1):
return
self.model.ScrollTop = value
@property
def scroll_width(self) -> int:
"""
Gets or sets the total width of the scrollable dialog content
Returns ``-1`` if LibreOffice version is less than ``7.1``
**since**
LibreOffice ``7.1``
"""
return -1 if mInfo.Info.version_info < (7, 1) else self.model.ScrollWidth
@scroll_width.setter
def scroll_width(self, value: int) -> None:
"""Sets the scroll width"""
if mInfo.Info.version_info < (7, 1):
return
self.model.ScrollWidth = value
@property
def title(self) -> str:
"""Gets or sets the title of the tab page"""
return self.model.Title
@title.setter
def title(self, value: str) -> None:
"""Sets the title of the tab page"""
self.model.Title = value
# endregion Properties