5#include <core/tui/Screen.hpp>
9#include "../attributes.hpp"
31 using Clock = std::function<std::chrono::steady_clock::time_point()>;
36 explicit Backend(::core::tui::Screen& screen MORPH_LIFETIMEBOUND,
Clock now = {});
65 int offsetMinutes)
override;
112 std::unique_ptr<Impl> _impl;
std::unique_ptr< ui::BusyWidget > createBusy(ui::ContainerWidget *parent) override
Makes a progress indicator.
std::unique_ptr< ui::DialogWidget > createDialog(ui::ContainerWidget *parent) override
Makes a modal overlay.
std::unique_ptr< ui::TableWidget > createTable(ui::ContainerWidget *parent) override
Makes a table.
std::unique_ptr< ui::ScrollWidget > createScroll(ui::ContainerWidget *parent, ui::Axis axis) override
Makes a scroll area.
std::unique_ptr< ui::SpacerWidget > createSpacer(ui::ContainerWidget *parent) override
Makes empty space.
void fit()
Sizes every root widget to the screen's viewport and centres every open dialog; call before each Scre...
std::unique_ptr< ui::BadgeWidget > createBadge(ui::ContainerWidget *parent) override
Makes a badge.
std::unique_ptr< ui::DrawerWidget > createDrawer(ui::ContainerWidget *parent, ui::Side side) override
Makes a drawer.
std::unique_ptr< ui::PanelWidget > createPanel(ui::ContainerWidget *parent) override
Makes a titled frame.
std::unique_ptr< ui::StepsWidget > createSteps(ui::ContainerWidget *parent) override
Makes a steps indicator.
std::unique_ptr< ui::SliderWidget > createSlider(ui::ContainerWidget *parent) override
Makes a slider.
bool animating() const noexcept
Whether any Busy widget is spinning, so the frontend should keep advancing the animation.
bool endDrag()
Ends the drag-and-drop gesture in progress, if any, with no drop, as Esc does.
std::unique_ptr< ui::SplitterWidget > createSplitter(ui::ContainerWidget *parent, ui::Axis axis) override
Makes a splitter.
void advanceAnimation() noexcept
Moves every spinning Busy to its next frame; the next draw shows it.
std::unique_ptr< ui::FilePickerWidget > createFilePicker(ui::ContainerWidget *parent, ui::FilePickerMode mode) override
Makes a file path field.
std::unique_ptr< ui::ProgressWidget > createProgress(ui::ContainerWidget *parent) override
Makes a progress bar.
std::unique_ptr< ui::TextWidget > createText(ui::ContainerWidget *parent) override
Makes read-only text.
void focusNext()
Moves keyboard focus to the next focusable widget — inside the innermost open dialog when one is open...
std::unique_ptr< ui::TabsWidget > createTabs(ui::ContainerWidget *parent) override
Makes a tab bar.
std::unique_ptr< ui::SelectWidget > createSelect(ui::ContainerWidget *parent, ui::SelectStyle style) override
Makes a choice of one option.
~Backend() override
Destroys the backend; every widget it made must already be gone.
void focusFirst()
Focuses the first focusable widget when nothing has focus yet, or when the focus is on an open dialog...
std::unique_ptr< ui::ButtonWidget > createButton(ui::ContainerWidget *parent) override
Makes a push button.
std::unique_ptr< ui::CollapsibleWidget > createCollapsible(ui::ContainerWidget *parent) override
Makes a collapsible section.
std::unique_ptr< ui::GridWidget > createGrid(ui::ContainerWidget *parent) override
Makes a grid.
std::unique_ptr< ui::KeyValueWidget > createKeyValue(ui::ContainerWidget *parent) override
Makes a key-value list.
Backend(::core::tui::Screen &screen, Clock now={})
std::unique_ptr< ui::DropZoneWidget > createDropZone(ui::ContainerWidget *parent) override
Makes a drop zone.
std::unique_ptr< ui::EmptyStateWidget > createEmptyState(ui::ContainerWidget *parent) override
Makes an empty state.
std::function< std::chrono::steady_clock::time_point()> Clock
Reads the current time.
std::unique_ptr< ui::SlotWidget > createSlot(ui::ContainerWidget *parent) override
Makes a slot.
std::unique_ptr< ui::DateTimeInputWidget > createDateTimeInput(ui::ContainerWidget *parent, ui::DateMode mode, int offsetMinutes) override
Makes a date or date-and-time field.
void focusPrev()
Moves keyboard focus to the previous focusable widget, with focusNext's dialog rule.
std::unique_ptr< ui::ToastWidget > createToast(ui::ContainerWidget *parent) override
Makes a transient message.
std::unique_ptr< ui::TextInputWidget > createTextInput(ui::ContainerWidget *parent, ui::TextInputMode mode) override
Makes a text field.
std::unique_ptr< ui::MenuWidget > createMenu(ui::ContainerWidget *parent) override
Makes a command list.
std::unique_ptr< ui::StackWidget > createStack(ui::ContainerWidget *parent, ui::Axis axis) override
Makes a stack.
std::unique_ptr< ui::CheckboxWidget > createCheckbox(ui::ContainerWidget *parent) override
Makes a check box.
std::unique_ptr< ui::BannerWidget > createBanner(ui::ContainerWidget *parent) override
Makes a banner.
Makes widgets. Each factory appends the new widget to parent, or makes a root when it is null,...
The backend contract: the retained widgets a mount drives, and the factory that makes them.
TextInputMode
How a TextInput edits.
DateMode
What a DateTimeInput edits.
Side
The edge a Drawer slides in from, in reading direction.
FilePickerMode
Whether a FilePicker chooses an existing file or a file to write.
SelectStyle
How a Select presents its options.
Axis
The direction a stack arranges, or a scroll area scrolls, its content.