from __future__ import annotations
from typing import Any, overload, TYPE_CHECKING
from ooo.dyn.awt.message_box_type import MessageBoxType
from ooo.dyn.awt.message_box_buttons import MessageBoxButtonsEnum
from ooo.dyn.awt.message_box_results import MessageBoxResultsEnum
from ooodev.mock import mock_g
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.loader import lo as mLo
from ooodev.utils.context.lo_context import LoContext
from ooodev.utils.partial.gui_partial import GuiPartial
from ooodev.dialog.msgbox import MsgBox
if TYPE_CHECKING:
from ooodev.loader.inst.lo_inst import LoInst
from ooodev.dialog.dialog import Dialog
from ooodev.events.args.cancel_event_args import CancelEventArgs
[docs]class CreateDialogPartial:
"""Partial for working with dialogs."""
[docs] def __init__(self, lo_inst: LoInst | None = None) -> None:
"""
CreateDialogPartial Constructor.
Args:
lo_inst (LoInst, optional): Lo Instance. Use when creating multiple documents. Defaults to None.
"""
if lo_inst is None:
lo_inst = mLo.Lo.current_lo
self.__lo_inst = lo_inst
[docs] def create_dialog(self, x: int, y: int, width: int, height: int, title: str) -> Dialog:
"""
Creates a dialog.
Args:
x (int): X coordinate. If ``-1``, the dialog Position is not set.
y (int): Y coordinate. If ``-1``, the dialog Position is not set.
width (int): Width. If ``-1``, the dialog Size is not set.
height (int): Height. If ``-1``, the dialog Size is not set.
title (str): Dialog title.
Returns:
Dialog: An empty dialog. The dialog contains methods for adding controls.
"""
# pylint: disable=import-outside-toplevel
from ooodev.dialog.dialog import Dialog
dlg = Dialog(x=x, y=y, width=width, height=height, title=title, lo_inst=self.__lo_inst)
return dlg
# region msgbox
@overload
def msgbox(self, msg: str) -> MessageBoxResultsEnum:
"""
Simple message box. With a title of "Message" and buttons of ``Buttons.BUTTONS_OK``.
Args:
msg (str): the message for display.
Returns:
Results: MessageBoxResultsEnum.
"""
...
@overload
def msgbox(self, msg: str, title: str) -> MessageBoxResultsEnum:
"""
Simple message box. With buttons of ``Buttons.BUTTONS_OK``.
Args:
msg (str): the message for display.
title (str): the title of the message box.
Returns:
Results: MessageBoxResultsEnum.
"""
...
@overload
def msgbox(self, msg: str, title: str, *, buttons: MessageBoxButtonsEnum | int) -> MessageBoxResultsEnum:
"""
Simple message box.
Args:
msg (str): the message for display.
title (str, optional): the title of the message box. Defaults to "Message".
buttons (MessageBoxButtonsEnum, int, optional): determines what buttons to display.
Returns:
Results: MessageBoxResultsEnum.
"""
...
@overload
def msgbox(self, msg: str, title: str, boxtype: MessageBoxType | int) -> MessageBoxResultsEnum:
"""
Simple message box.
Args:
msg (str): the message for display.
title (str): the title of the message box.
boxtype (MessageBoxType): determines the type of message box to display.
Returns:
Results: MessageBoxResultsEnum.
Note:
If BoxType is an integer, the following values are valid:
- 0: ``MESSAGEBOX``
- 1: ``INFOBOX``
- 2: ``WARNINGBOX``
- 3: ``ERRORBOX``
- 4: ``QUERYBOX``
"""
...
@overload
def msgbox(
self, msg: str, title: str, boxtype: MessageBoxType | int, buttons: MessageBoxButtonsEnum | int
) -> MessageBoxResultsEnum:
"""
Simple message box.
Args:
msg (str): the message for display.
title (str): the title of the message box.
boxtype (MessageBoxType): determines the type of message box to display.
buttons (MessageBoxButtonsEnum, int): determines what buttons to display.
Returns:
Results: MessageBoxResultsEnum.
Note:
If BoxType is an integer, the following values are valid:
- 0: ``MESSAGEBOX``
- 1: ``INFOBOX``
- 2: ``WARNINGBOX``
- 3: ``ERRORBOX``
- 4: ``QUERYBOX``
"""
...
[docs] def msgbox(
self,
msg: str,
title: str = "Message",
boxtype: MessageBoxType | int = MessageBoxType.MESSAGEBOX,
buttons: MessageBoxButtonsEnum | int = MessageBoxButtonsEnum.BUTTONS_OK,
) -> MessageBoxResultsEnum:
"""
Simple message box.
Args:
msg (str): the message for display.
title (str, optional): the title of the message box. Defaults to "Message".
boxtype (MessageBoxType, optional): determines the type of message box to display. Defaults to ``Type.MESSAGEBOX``.
buttons (MessageBoxButtonsEnum, int, optional): determines what buttons to display. Defaults to ``Buttons.BUTTONS_OK``.
Returns:
Results: MessageBoxResultsEnum
Note:
If BoxType is an integer, the following values are valid:
- 0: ``MESSAGEBOX``
- 1: ``INFOBOX``
- 2: ``WARNINGBOX``
- 3: ``ERRORBOX``
- 4: ``QUERYBOX``
Note:
- Button press ``Abort`` return ``MessageBoxResultsEnum.CANCEL``
- Button press ``Cancel`` return ``MessageBoxResultsEnum.CANCEL``
- Button press ``Ignore`` returns ``MessageBoxResultsEnum.IGNORE``
- Button press ``No`` returns ``MessageBoxResultsEnum.NO``
- Button press ``OK`` returns ``MessageBoxResultsEnum.OK``
- Button press ``Retry`` returns ``MessageBoxResultsEnum.RETRY``
- Button press ``Yes`` returns ``MessageBoxResultsEnum.YES``
Note:
Raises a global event ``GblNamedEvent.MSG_BOX_CREATING`` before creating the dialog.
The event args are of type ``CancelEventArgs``.
The ``event_data`` is a dictionary that contains the following key:
- ``msg``: The message to display.
- ``title``: The title of the dialog.
- ``boxtype``: The type of message box to display.
- ``buttons``: The buttons to display.
If the event is cancelled, the ``result`` value of ``event_data` if set will be returned.
Otherwise if the event is not handled, a ``CancelEventError`` is raised.
"""
def on_dialog_creating(source: Any, event_args: CancelEventArgs, *args, **kwargs) -> None:
if isinstance(self, EventsPartial):
self.trigger_event(GblNamedEvent.MSG_BOX_CREATING, event_args)
with LoContext(inst=self.__lo_inst):
with event_ctx((GblNamedEvent.MSG_BOX_CREATING, on_dialog_creating), source=self, lo_observe=True):
result = MsgBox.msgbox(msg=msg, title=title, boxtype=boxtype, buttons=buttons)
return result
# endregion msgbox
# region input
# endregion input
if mock_g.FULL_IMPORT:
from ooodev.dialog.dialog import Dialog