Skip to main content

DockArea

Struct DockArea 

Source
pub struct DockArea { /* private fields */ }
Expand description

Panels in a tree of splits and groups of tabs, at the left, the right, the bottom and the center of a space. Bars between them resize with the pointer or the keyboard, docks collapse from the strips on their edges, and panels close and come back.

A tab goes anywhere with a drag, with the target marked: to another group, to one side of a group, or to a border that has no dock showing. Without a pointer, the arrows walk between tabs, Alt with an arrow moves one within its group, Alt and Shift with an arrow send it to a dock, the menu of a tab or of the button at the end of the strip has “Move to…”, and Delete closes.

The arrangement is a DockLayout in a Binding, which holds ids alone and can be saved as text. What a panel shows is asked from the app, by id, for the panel at the front of each group: that is all a change of tab builds, and what a panel must remember while behind others belongs in the app. An id in the arrangement with no DockPanel is left out.

use ravenrs_reactive::State;
use ravenrs_widgets::{AnyView, DockArea, DockLayout, DockNode, DockPanel, Text, Ui};

let saved = None::<String>; // What the app kept the last time.
let start = DockLayout::new()
    .center(DockNode::tabs(["photo"]))
    .left(DockNode::tabs(["folders", "search"]), 240.0);
let layout = State::new(saved.and_then(|text| DockLayout::parse(&text).ok()).unwrap_or(start));

let area = DockArea::new(
    layout.binding(),
    vec![
        DockPanel::new("photo", "Photo").closable(false),
        DockPanel::new("folders", "Folders"),
        DockPanel::new("search", "Search"),
    ],
    |id| -> AnyView { Box::new(Text::new(format!("Panel {id}"))) },
)
.on_end(|now| println!("{}", now.to_text()));
let mut ui = Ui::new(area, ravenrs_style::Theme::raven_dark());
ui.update();

Implementations§

Source§

impl DockArea

Source

pub fn new( layout: Binding<DockLayout>, panels: Vec<DockPanel>, content: impl Fn(&str) -> AnyView + 'static, ) -> Self

These panels in the arrangement of layout, each showing what content makes for its id.

Source

pub fn height(self, height: f32) -> Self

Its height, in logical pixels. Without it, it takes the room its parent has.

Source

pub fn dock_limits(self, side: DockSide, min: f32, max: f32) -> Self

The smallest and the largest a dock gets, in logical pixels.

Source

pub fn center_min(self, width: f32, height: f32) -> Self

The width and the height the center keeps, which the docks do not take from it.

Source

pub fn pane_min(self, min: f32) -> Self

The smallest a group gets when a bar inside a split moves.

Source

pub fn movable(self, movable: bool) -> Self

Whether panels change places (they do by default). Without it the tabs stay where the app put them, and only the sizes, the docks and closing are left.

Source

pub fn tab_bar(self, tab_bar: DockTabBar) -> Self

When a group shows its tabs (DockTabBar::Always by default).

Source

pub fn edge_toggles(self, on: bool) -> Self

Whether the strips that collapse the docks show (they do by default). Without them, the app does it with DockLayout::set_open.

Source

pub fn on_end(self, handler: impl Fn(&DockLayout) + 'static) -> Self

Runs when the arrangement settles: after a drop, a bar let go, a key, a tab, a dock or a panel. It is the moment to save.

Source

pub fn label(self, label: impl Into<String>) -> Self

What screen readers call the area, instead of the name in Labels.

Trait Implementations§

Source§

impl Debug for DockArea

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl View for DockArea

Source§

fn build(&self, cx: &mut BuildCx<'_>) -> NodeId

Creates this view’s node for the current build.
Source§

fn type_name(&self) -> &'static str

The name the diagnostics panel shows this view’s cost under.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V> ViewExt for V
where V: View,

Source§

fn padding(self, padding: impl Into<Insets>) -> Styled<Self>

Adds padding inside the box, in logical pixels.
Source§

fn background(self, fill: impl Into<Fill>) -> Styled<Self>

Paints a background behind the content.
Source§

fn frame(self, width: Option<f32>, height: Option<f32>) -> Styled<Self>

Fixes the width and/or height in logical pixels; None keeps the content size.
Source§

fn width(self, width: f32) -> Styled<Self>

Fixes the width in logical pixels.
Source§

fn height(self, height: f32) -> Styled<Self>

Fixes the height in logical pixels.
Source§

fn grow(self, grow: f32) -> Styled<Self>

Takes a share of the free space in the parent stack.
Source§

fn stretch(self) -> Styled<Self>

Stretches across the parent stack’s cross axis.
Source§

fn centered(self) -> Styled<Self>

Centers the content inside the box.
Source§

fn tooltip(self, text: impl Into<String>) -> Tooltip<Self>

Shows text above the view while the pointer is over it; see Tooltip.
Source§

fn opacity(self, opacity: f32) -> Faded<Self>

Draws the view and everything in it at this opacity, from 0.0 to 1.0, easing to it when it changes. Layout and input stay as they are; see Faded.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more