Just to confirm, forms.alert() doesnt use an xaml UI, correct? The source code seems to calls the default revit api UI.Taskdialog, so no way of changing the xaml. Thanks
def alert(msg, title=None, sub_msg=None, expanded=None, footer='',
ok=True, cancel=False, yes=False, no=False, retry=False,
warn_icon=True, options=None, exitscript=False):
r"""Show a task dialog with given message.
Args:
msg (str): message to be displayed
title (str, optional): task dialog title
sub_msg (str, optional): sub message, use html to create clickable links
expanded (str, optional): expanded area message
footer (str, optional): footer text
ok (bool, optional): show OK button, defaults to True
cancel (bool, optional): show Cancel button, defaults to False
yes (bool, optional): show Yes button, defaults to False
no (bool, optional): show NO button, defaults to False
retry (bool, optional): show Retry button, defaults to False
warn_icon (bool, optional): show warning icon
options (list[str], optional): list of command link titles in order
exitscript (bool, optional): exit if cancel or no, defaults to False
Returns:
(bool): True if okay, yes, or retry, otherwise False
Examples:
```python
from pyrevit import forms
forms.alert('Are you sure?',
sub_msg='<a href=\"https://discourse.pyrevitlabs.io/ \">Click here if you are not sure and want to go to the pyRevit Forum</a>',
ok=False, yes=True, no=True, exitscript=True)
```
"""
# BUILD DIALOG
cmd_name = EXEC_PARAMS.command_name
if not title:
title = cmd_name if cmd_name else 'pyRevit'
tdlg = UI.TaskDialog(title)
# process input types
just_ok = ok and not any([cancel, yes, no, retry])
options = options or []
# add command links if any
if options:
clinks = coreutils.get_enum_values(UI.TaskDialogCommandLinkId)
max_clinks = len(clinks)
for idx, cmd in enumerate(options):
if idx < max_clinks:
tdlg.AddCommandLink(clinks[idx], cmd)
# otherwise add buttons
else:
buttons = coreutils.get_enum_none(UI.TaskDialogCommonButtons)
if yes:
buttons |= UI.TaskDialogCommonButtons.Yes
elif ok:
buttons |= UI.TaskDialogCommonButtons.Ok
if cancel:
buttons |= UI.TaskDialogCommonButtons.Cancel
if no:
buttons |= UI.TaskDialogCommonButtons.No
if retry:
buttons |= UI.TaskDialogCommonButtons.Retry
tdlg.CommonButtons = buttons
# set texts
tdlg.MainInstruction = msg
tdlg.MainContent = sub_msg
tdlg.ExpandedContent = expanded
if footer:
footer = footer.strip() + '\n'
tdlg.FooterText = footer + 'pyRevit {}'.format(
versionmgr.get_pyrevit_version().get_formatted()
)
tdlg.TitleAutoPrefix = False
# set icon
tdlg.MainIcon = \
UI.TaskDialogIcon.TaskDialogIconWarning \
if warn_icon else UI.TaskDialogIcon.TaskDialogIconNone
# tdlg.VerificationText = 'verif'
# SHOW DIALOG
res = tdlg.Show()
# PROCESS REPONSES
# positive response
mlogger.debug('alert result: %s', res)
if res == UI.TaskDialogResult.Ok \
or res == UI.TaskDialogResult.Yes \
or res == UI.TaskDialogResult.Retry:
if just_ok and exitscript:
sys.exit()
return True
# negative response
elif res == coreutils.get_enum_none(UI.TaskDialogResult) \
or res == UI.TaskDialogResult.Cancel \
or res == UI.TaskDialogResult.No:
if exitscript:
sys.exit()
else:
return False
# command link response
elif 'CommandLink' in str(res):
tdresults = sorted(
[x for x in coreutils.get_enum_values(UI.TaskDialogResult)
if 'CommandLink' in str(x)]
)
residx = tdresults.index(res)
return options[residx]
elif exitscript:
sys.exit()
else:
return False