pub enum DirectoryTreeEvent {
Toggled(PathBuf),
Selected(PathBuf, bool, SelectionMode),
Drag(DragMsg),
DragCompleted {
sources: Vec<PathBuf>,
destination: PathBuf,
},
Loaded(LoadPayload),
}Expand description
A message emitted by or consumed by the DirectoryTree widget.
§For parent applications
Wrap this in one of your own Message variants:
enum MyMessage {
Tree(iced_swdir_tree::DirectoryTreeEvent),
// ...
}Route every Tree(event) to DirectoryTree::update and map its
returned Task back. Pattern-match on Toggled / Selected before
forwarding if you want app-level side effects (e.g. previewing the
selected file):
fn update(&mut self, msg: MyMessage) -> Task<MyMessage> {
match msg {
MyMessage::Tree(event) => {
if let DirectoryTreeEvent::Selected(path, _, _) = &event {
self.preview(path);
}
self.tree.update(event).map(MyMessage::Tree)
}
}
}Variants§
Toggled(PathBuf)
A folder was toggled open/closed by the user.
On first expansion the widget issues an async scan whose result
arrives later as DirectoryTreeEvent::Loaded. Subsequent
toggles of the same folder are instant — children stay in the
internal cache.
Selected(PathBuf, bool, SelectionMode)
A row was selected.
The bool indicates whether the path is a directory (true)
or a file (false). The SelectionMode controls how the
click composes with any existing selection — see its docs for
the full matrix.
The built-in view always emits this with
SelectionMode::Replace because iced 0.14’s button
callbacks cannot observe modifier keys at press time.
Applications that want multi-select track modifier state
themselves (see examples/multi_select.rs) and rewrite the
mode before forwarding the event — SelectionMode::from_modifiers
makes that a one-liner.
Drag(DragMsg)
Internal drag-machinery event.
Emitted by the widget’s built-in view as the user presses a
row, moves across others, and releases. Applications should
treat these as opaque and always route them back to
DirectoryTree::update —
just like Loaded.
The widget’s internal state machine may produce a
Selected or a DragCompleted
as the downstream effect of a Drag message.
Apps observe those downstream events via the usual
.map(MyMessage::Tree) routing — no extra plumbing needed.
DragCompleted
The user completed a drag gesture with intent to move (or
otherwise transplant) sources into destination.
The widget performs no filesystem operation on its own.
Applications observe this event, perform whatever action
they wish (move, copy, symlink, upload, ignore), and
re-scan affected folders by emitting Toggled events
(collapse then re-expand) to refresh the tree view.
destination is guaranteed to be a directory that is not
itself in sources nor a descendant of any source — see
DragMsg for the validity rules.
sources is non-empty.
Fields
sources: Vec<PathBuf>One or more paths the user started dragging. This is the selected set at drag start if the pressed row was in the selection, otherwise just the pressed row.
Loaded(LoadPayload)
Internal: an asynchronous scan completed.
Parent applications should not construct this variant themselves;
it is produced by iced::Tasks that DirectoryTree::update
returns and is routed back to update through the app’s message
plumbing. Treat it as opaque.
Trait Implementations§
Source§impl Clone for DirectoryTreeEvent
impl Clone for DirectoryTreeEvent
Source§fn clone(&self) -> DirectoryTreeEvent
fn clone(&self) -> DirectoryTreeEvent
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for DirectoryTreeEvent
impl RefUnwindSafe for DirectoryTreeEvent
impl Send for DirectoryTreeEvent
impl Sync for DirectoryTreeEvent
impl Unpin for DirectoryTreeEvent
impl UnsafeUnpin for DirectoryTreeEvent
impl UnwindSafe for DirectoryTreeEvent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<State, Message> IntoBoot<State, Message> for State
impl<State, Message> IntoBoot<State, Message> for State
Source§fn into_boot(self) -> (State, Task<Message>)
fn into_boot(self) -> (State, Task<Message>)
Application.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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