draft tutorial revisions
This commit is contained in:
parent
838da4571d
commit
48359b5a48
70 changed files with 6216 additions and 28 deletions
78
docs/cookbook/ui/ui_modal_dialog_enhanced.py
Normal file
78
docs/cookbook/ui/ui_modal_dialog_enhanced.py
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
"""McRogueFace - Modal Dialog Widget (enhanced)
|
||||
|
||||
Documentation: https://mcrogueface.github.io/cookbook/ui_modal_dialog
|
||||
Repository: https://github.com/jmccardle/McRogueFace/blob/master/docs/cookbook/ui/ui_modal_dialog_enhanced.py
|
||||
|
||||
This code is extracted from the McRogueFace documentation and can be
|
||||
run directly with: ./mcrogueface path/to/this/file.py
|
||||
"""
|
||||
|
||||
import mcrfpy
|
||||
|
||||
class DialogManager:
|
||||
"""Manages a queue of dialogs."""
|
||||
|
||||
def __init__(self, ui):
|
||||
self.ui = ui
|
||||
self.queue = []
|
||||
self.current = None
|
||||
|
||||
def show(self, title, message, buttons=None, style=None, callback=None):
|
||||
"""
|
||||
Queue a dialog to show.
|
||||
|
||||
If no dialog is active, shows immediately.
|
||||
Otherwise, queues for later.
|
||||
"""
|
||||
dialog_data = {
|
||||
'title': title,
|
||||
'message': message,
|
||||
'buttons': buttons or ["OK"],
|
||||
'style': style or DialogStyle.INFO,
|
||||
'callback': callback
|
||||
}
|
||||
|
||||
if self.current is None:
|
||||
self._show_dialog(dialog_data)
|
||||
else:
|
||||
self.queue.append(dialog_data)
|
||||
|
||||
def _show_dialog(self, data):
|
||||
"""Actually display a dialog."""
|
||||
def on_close(index, label):
|
||||
if data['callback']:
|
||||
data['callback'](index, label)
|
||||
self._on_dialog_closed()
|
||||
|
||||
self.current = EnhancedDialog(
|
||||
data['title'],
|
||||
data['message'],
|
||||
data['buttons'],
|
||||
data['style'],
|
||||
on_close
|
||||
)
|
||||
self.current.add_to_scene(self.ui)
|
||||
self.current.show()
|
||||
|
||||
def _on_dialog_closed(self):
|
||||
"""Handle dialog close, show next if queued."""
|
||||
self.current = None
|
||||
|
||||
if self.queue:
|
||||
next_dialog = self.queue.pop(0)
|
||||
self._show_dialog(next_dialog)
|
||||
|
||||
def handle_key(self, key):
|
||||
"""Forward key events to current dialog."""
|
||||
if self.current:
|
||||
return self.current.handle_key(key)
|
||||
return False
|
||||
|
||||
|
||||
# Usage
|
||||
manager = DialogManager(ui)
|
||||
|
||||
# Queue multiple dialogs
|
||||
manager.show("First", "This is the first message")
|
||||
manager.show("Second", "This appears after closing the first")
|
||||
manager.show("Third", "And this is last", ["Done"])
|
||||
Loading…
Add table
Add a link
Reference in a new issue