Module userland.scripts.messages.save_modal

Save confirmation screen

Classes

class SaveModal (*args,
reply_to: Message | None = None,
**kwargs)
Expand source code
class SaveModal(ModalScreen):
    """Save confirmation screen"""

    BINDINGS = [("escape", "app.pop_screen", "")]

    CSS = """
        SaveModal {
            align: center middle;
            background: rgba(0, 0, 0, 0.5);
        }

        Button {
            margin: 1;
            width: 33%;
        }

        #save {
            margin-left: 0;
            margin-top: 1;
        }

        #wrapper {
            background: $primary-background;
            height: 7;
            padding: 1;
            width: 60;
        }
    """

    reply_to: Message | None

    def __init__(self, *args, reply_to: Message | None = None, **kwargs):
        super(SaveModal, self).__init__(*args, **kwargs)
        self.reply_to = reply_to

    def compose(self):
        with Vertical(id="wrapper"):
            yield Label("Do you want to save your message?")

            with Horizontal():
                yield Button("Save", variant="success", id="save")
                yield Button("Continue", variant="primary", id="continue")
                yield Button("Discard", variant="error", id="discard")

    async def on_button_pressed(self, event: Button.Pressed) -> None:
        assert event.button.id

        if event.button.id == "continue":
            self.app.pop_screen()  # pop this modal
            return

        if event.button.id == "save":
            self.app.pop_screen()
            await self.app.push_screen(DetailsModal(reply_to=self.reply_to))
            return

        self.app.pop_screen()  # pop this modal
        self.app.pop_screen()  # pop the editor

Save confirmation screen

Initialize the screen.

Args
-----=
name
The name of the screen.
id
The ID of the screen in the DOM.
classes
The CSS classes for the screen.

Ancestors

  • textual.screen.ModalScreen
  • textual.screen.Screen
  • typing.Generic
  • textual.widget.Widget
  • textual.dom.DOMNode
  • textual.message_pump.MessagePump

Class variables

var BINDINGS
var CSS
var can_focus
var can_focus_children
var reply_toMessage | None

Methods

def compose(self)
Expand source code
def compose(self):
    with Vertical(id="wrapper"):
        yield Label("Do you want to save your message?")

        with Horizontal():
            yield Button("Save", variant="success", id="save")
            yield Button("Continue", variant="primary", id="continue")
            yield Button("Discard", variant="error", id="discard")

Called by Textual to create child widgets.

This method is called when a widget is mounted or by setting recompose=True when calling [refresh()][textual.widget.Widget.refresh].

Note that you don't typically need to explicitly call this method.

Example -----=

def compose(self) -> ComposeResult:
    yield Header()
    yield Label("Press the button below:")
    yield Button()
    yield Footer()
async def on_button_pressed(self, event: textual.widgets._button.Button.Pressed) ‑> None
Expand source code
async def on_button_pressed(self, event: Button.Pressed) -> None:
    assert event.button.id

    if event.button.id == "continue":
        self.app.pop_screen()  # pop this modal
        return

    if event.button.id == "save":
        self.app.pop_screen()
        await self.app.push_screen(DetailsModal(reply_to=self.reply_to))
        return

    self.app.pop_screen()  # pop this modal
    self.app.pop_screen()  # pop the editor