SplitState

Struct SplitState 

Source
pub struct SplitState {
Show 13 fields pub area: Rect, pub inner: Rect, pub widget_areas: Vec<Rect>, pub splitline_areas: Vec<Rect>, pub splitline_mark_position: Vec<Position>, pub mark_offset: u16, pub direction: Direction, pub split_type: SplitType, pub resize: SplitResize, pub focus: FocusFlag, pub focus_marker: Option<usize>, pub mouse: MouseFlagsN, pub non_exhaustive: NonExhaustive, /* private fields */
}
Expand description

State & event handling.

Fields§

§area: Rect

Total area. readonly. renewed for each render.

§inner: Rect

Area inside the border. readonly. renewed for each render.

§widget_areas: Vec<Rect>

The widget areas. Use this after calling layout() to render your widgets. readonly renewed for each render.

§splitline_areas: Vec<Rect>

Area used by the splitter. This is area is used for moving the splitter. It might overlap with the widget area. readonly renewed for each render.

§splitline_mark_position: Vec<Position>

Start position for drawing the mark. readonly renewed for each render.

§mark_offset: u16

Offset of the mark from top/left. readonly renewed for each render.

§direction: Direction

Direction of the split. readonly renewed for each render.

§split_type: SplitType

readonly renewed for each render.

§resize: SplitResize

readonly renewed for each render.

§focus: FocusFlag

Focus. read+write

§focus_marker: Option<usize>

If the splitter has the focus you can navigate between the split-markers. This is the currently active split-marker. read+write

§mouse: MouseFlagsN

Mouseflags. read+write

§non_exhaustive: NonExhaustive

Implementations§

Source§

impl SplitState

Source

pub fn new() -> Self

New state.

Source

pub fn named(name: &str) -> Self

New state with a focus-name.

Source

pub fn set_screen_split_pos(&mut self, n: usize, pos: (u16, u16)) -> bool

Set the position for the nth splitter.

The position is limited the combined area of the two adjacent areas. The position is further limited to leave space for rendering the splitter.

Source

pub fn move_split_left(&mut self, n: usize, delta: u16) -> bool

Move the nth split position. If delta is greater than the area length it sets the length to 0.

Source

pub fn move_split_right(&mut self, n: usize, delta: u16) -> bool

Move the nth split position. Does nothing if the change is bigger than the length of the split.

Source

pub fn move_split_up(&mut self, n: usize, delta: u16) -> bool

Move the nth split position. Does nothing if the change is bigger than the length of the split.

Source

pub fn move_split_down(&mut self, n: usize, delta: u16) -> bool

Move the nth split position. Does nothing if the change is bigger than the length of the split.

Source

pub fn select_next_split(&mut self) -> bool

Select the next splitter for manual adjustment.

Source

pub fn select_prev_split(&mut self) -> bool

Select the previous splitter for manual adjustment.

Source

pub fn len(&self) -> usize

Number of split-areas

Source

pub fn area_lengths(&self) -> &[u16]

Get all area lengths.

Source

pub fn set_area_lengths(&mut self, lengths: Vec<u16>)

Set all area lengths.

This will adjust the list of the hidden splits too.

Caution If the sum of the lengths doesn’t match the display-width this will trigger a layout and will use the given lenghts as Constraint::Fill().

Caution

If a length is 0 it will not display the split at all.

Source

pub fn hidden_lengths(&self) -> &[u16]

Get the value of the hidden lengths.

Source

pub fn set_hidden_lengths(&mut self, hidden: Vec<u16>)

Set the value of the hidden lengths.

This will take at most area_length.len() items of this Vec. And it will fill missing items as 0.

Source

pub fn area_len(&self, n: usize) -> u16

Length of the nth split.

Caution

This length includes the width of the split itself. Which may or may not take some space. Except for the last. So it will be better to use widget_areas for anything rendering related.

Source

pub fn total_area_len(&self) -> u16

Sum of all area lengths.

Source

pub fn set_area_len(&mut self, n: usize, len: u16)

Set the length of the nth split.

This resets any hidden state of the nth split.

Caution The sum of all lengths must be equal with the width/height of the splitter. If it is not this operation doesn’t set the absolute width of the nth split. Instead, it triggers a layout of the widget, takes all the lengths as Constraint::Fill() values and redistributes the size.

You can either ensure to change some other len to accommodate for your changes. Or use set_split_pos or set_screen_split_pos

Caution

This length includes the width of the split itself. Which may or may not take some space. Except for the last area. Which doesn’t have a split.

So:

  • If you set the length to 0 the area will be hidden completely and no split will be shown.
  • A value of 1 is fine.
  • The last area can have a length 0 and that’s fine too.

Caution

Before the first render this will do nothing. Use set_area_lengths to initialize the areas.

Source

pub fn split_pos(&self, n: usize) -> u16

Returns the position of the nth split.

Caution

The numbering for the splitters goes from 0 to len-1 exclusive. Split n marks the gap between area n and n+1.

Caution

This returns the position of the gap between two adjacent split-areas. Use splitline_areas for anything rendering related.

Source

pub fn set_split_pos(&mut self, n: usize, pos: u16)

Sets the position of the nth split.

Depending on the resize strategy this can limit the allowed positions for the split.

Caution

The numbering for the splitters goes from 0 to len-1 exclusive. Split n marks the gap between area n and n+1.

Caution

This marks the position of the gap between two adjacent split-areas. If you start from screen-coordinates it might be easier to use set_screen_split_pos

Source

pub fn is_hidden(&self, n: usize) -> bool

Is the split hidden?

Source

pub fn hide_split(&mut self, n: usize) -> bool

Hide the split and adds its area to the following split. If there is no following split it will go left/up. Leaves enough space to render the splitter.

Source

pub fn show_split(&mut self, n: usize) -> bool

Show a hidden split. It will first try to reduce the areas to the right, and then the areas to the left to make space.

Trait Implementations§

Source§

impl Clone for SplitState

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SplitState

Source§

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

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

impl Default for SplitState

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl HandleEvent<Event, MouseOnly, Outcome> for SplitState

Source§

fn handle(&mut self, event: &Event, _qualifier: MouseOnly) -> Outcome

Handle an event. Read more
Source§

impl HandleEvent<Event, Regular, Outcome> for SplitState

Source§

fn handle(&mut self, event: &Event, _qualifier: Regular) -> Outcome

Handle an event. Read more
Source§

impl HasFocus for SplitState

Source§

fn build(&self, builder: &mut FocusBuilder)

Build the focus-structure for the container.
Source§

fn focus(&self) -> FocusFlag

Access to the flag for the rest.
Source§

fn area(&self) -> Rect

Area for mouse focus. Read more
Source§

fn navigable(&self) -> Navigation

Declares how the widget interacts with focus. Read more
Source§

fn id(&self) -> usize

Provide a unique id for the widget.
Source§

fn area_z(&self) -> u16

Z value for the area. Read more
Source§

fn is_focused(&self) -> bool

Focused?
Source§

fn lost_focus(&self) -> bool

Just lost focus.
Source§

fn gained_focus(&self) -> bool

Just gained focus.
Source§

impl RelocatableState for SplitState

Source§

fn relocate(&mut self, shift: (i16, i16), clip: Rect)

Relocate the areas in this widgets state. Read more
Source§

fn relocate_hidden(&mut self)

Relocate all areas to a clip-rect (0,0+0x0).

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
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, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
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
Source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
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> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
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<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.