pub struct AsyncFactoryVecDequeGuard<'a, C: AsyncFactoryComponent>{ /* private fields */ }Expand description
Provides methods to edit the underlying AsyncFactoryVecDeque.
The changes will be rendered on the widgets after the guard goes out of scope.
Implementations§
Source§impl<'a, C: AsyncFactoryComponent> AsyncFactoryVecDequeGuard<'a, C>
impl<'a, C: AsyncFactoryComponent> AsyncFactoryVecDequeGuard<'a, C>
Sourcepub fn drop(self)
pub fn drop(self)
Drops the guard and renders all changes.
Use this to transfer full ownership back to the AsyncFactoryVecDeque.
Sourcepub fn get_mut(&mut self, index: usize) -> Option<&mut C>
pub fn get_mut(&mut self, index: usize) -> Option<&mut C>
Tries to get a mutable reference to the model of one element.
Returns None if index is invalid or the async init_model() method
hasn’t returned yet.
Sourcepub fn back_mut(&mut self) -> Option<&mut C>
pub fn back_mut(&mut self) -> Option<&mut C>
Provides a mutable reference to the model of the back element.
Returns None if the deque is empty or the async init_model() method
of the last element hasn’t returned yet.
Sourcepub fn front_mut(&mut self) -> Option<&mut C>
pub fn front_mut(&mut self) -> Option<&mut C>
Provides a mutable reference to the model of the front element.
Returns None if the deque is empty or the async init_model() method
of the first element hasn’t returned yet.
Sourcepub fn pop_back(&mut self) -> Option<C>
pub fn pop_back(&mut self) -> Option<C>
Removes the last element from the AsyncFactoryVecDeque and returns it,
or None if it is empty or the async init_model() method
of the element hasn’t returned yet.
Examples found in repository?
213 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
214 let mut counters_guard = self.counters.guard();
215 match msg {
216 AppMsg::AddCounter => {
217 counters_guard.push_back(self.created_widgets);
218 self.created_widgets = self.created_widgets.wrapping_add(1);
219 }
220 AppMsg::RemoveCounter => {
221 counters_guard.pop_back();
222 }
223 AppMsg::SendFront(index) => {
224 counters_guard.move_front(index.current_index());
225 }
226 AppMsg::MoveDown(index) => {
227 let index = index.current_index();
228 let new_index = index + 1;
229 // Already at the end?
230 if new_index < counters_guard.len() {
231 counters_guard.move_to(index, new_index);
232 }
233 }
234 AppMsg::MoveUp(index) => {
235 let index = index.current_index();
236 // Already at the start?
237 if index != 0 {
238 counters_guard.move_to(index, index - 1);
239 }
240 }
241 AppMsg::Remove(index) => {
242 counters_guard.remove(index.current_index());
243 }
244 }
245 }Sourcepub fn pop_front(&mut self) -> Option<C>
pub fn pop_front(&mut self) -> Option<C>
Removes the first element from the AsyncFactoryVecDeque and returns it,
or None if it is empty or the async init_model() method
of the element hasn’t returned yet.
Sourcepub fn remove(&mut self, index: usize) -> Option<C>
pub fn remove(&mut self, index: usize) -> Option<C>
Removes and returns the element at index from the AsyncFactoryVecDeque.
or None if it is empty or the async init_model() method
of the element hasn’t returned yet.
Element at index 0 is the front of the queue.
Examples found in repository?
213 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
214 let mut counters_guard = self.counters.guard();
215 match msg {
216 AppMsg::AddCounter => {
217 counters_guard.push_back(self.created_widgets);
218 self.created_widgets = self.created_widgets.wrapping_add(1);
219 }
220 AppMsg::RemoveCounter => {
221 counters_guard.pop_back();
222 }
223 AppMsg::SendFront(index) => {
224 counters_guard.move_front(index.current_index());
225 }
226 AppMsg::MoveDown(index) => {
227 let index = index.current_index();
228 let new_index = index + 1;
229 // Already at the end?
230 if new_index < counters_guard.len() {
231 counters_guard.move_to(index, new_index);
232 }
233 }
234 AppMsg::MoveUp(index) => {
235 let index = index.current_index();
236 // Already at the start?
237 if index != 0 {
238 counters_guard.move_to(index, index - 1);
239 }
240 }
241 AppMsg::Remove(index) => {
242 counters_guard.remove(index.current_index());
243 }
244 }
245 }Sourcepub fn push_back(&mut self, init: C::Init) -> DynamicIndex
pub fn push_back(&mut self, init: C::Init) -> DynamicIndex
Appends an element at the end of the AsyncFactoryVecDeque.
Examples found in repository?
213 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
214 let mut counters_guard = self.counters.guard();
215 match msg {
216 AppMsg::AddCounter => {
217 counters_guard.push_back(self.created_widgets);
218 self.created_widgets = self.created_widgets.wrapping_add(1);
219 }
220 AppMsg::RemoveCounter => {
221 counters_guard.pop_back();
222 }
223 AppMsg::SendFront(index) => {
224 counters_guard.move_front(index.current_index());
225 }
226 AppMsg::MoveDown(index) => {
227 let index = index.current_index();
228 let new_index = index + 1;
229 // Already at the end?
230 if new_index < counters_guard.len() {
231 counters_guard.move_to(index, new_index);
232 }
233 }
234 AppMsg::MoveUp(index) => {
235 let index = index.current_index();
236 // Already at the start?
237 if index != 0 {
238 counters_guard.move_to(index, index - 1);
239 }
240 }
241 AppMsg::Remove(index) => {
242 counters_guard.remove(index.current_index());
243 }
244 }
245 }Sourcepub fn push_front(&mut self, init: C::Init) -> DynamicIndex
pub fn push_front(&mut self, init: C::Init) -> DynamicIndex
Prepends an element to the AsyncFactoryVecDeque.
Sourcepub fn insert(&mut self, index: usize, init: C::Init) -> DynamicIndex
pub fn insert(&mut self, index: usize, init: C::Init) -> DynamicIndex
Inserts an element at index within the AsyncFactoryVecDeque,
shifting all elements with indices greater than or equal
to index towards the back.
Element at index 0 is the front of the queue.
§Panics
Panics if index is greater than AsyncFactoryVecDeque’s length.
Sourcepub fn swap(&mut self, first: usize, second: usize)
pub fn swap(&mut self, first: usize, second: usize)
Swaps elements at indices first and second.
first and second may be equal.
Element at index 0 is the front of the queue.
§Panics
Panics if either index is out of bounds.
Sourcepub fn move_to(&mut self, current_position: usize, target: usize)
pub fn move_to(&mut self, current_position: usize, target: usize)
Moves an element at index current_position to target,
shifting all elements between these positions.
current_position and target may be equal.
Element at index 0 is the front of the queue.
§Panics
Panics if either index is out of bounds.
Examples found in repository?
213 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
214 let mut counters_guard = self.counters.guard();
215 match msg {
216 AppMsg::AddCounter => {
217 counters_guard.push_back(self.created_widgets);
218 self.created_widgets = self.created_widgets.wrapping_add(1);
219 }
220 AppMsg::RemoveCounter => {
221 counters_guard.pop_back();
222 }
223 AppMsg::SendFront(index) => {
224 counters_guard.move_front(index.current_index());
225 }
226 AppMsg::MoveDown(index) => {
227 let index = index.current_index();
228 let new_index = index + 1;
229 // Already at the end?
230 if new_index < counters_guard.len() {
231 counters_guard.move_to(index, new_index);
232 }
233 }
234 AppMsg::MoveUp(index) => {
235 let index = index.current_index();
236 // Already at the start?
237 if index != 0 {
238 counters_guard.move_to(index, index - 1);
239 }
240 }
241 AppMsg::Remove(index) => {
242 counters_guard.remove(index.current_index());
243 }
244 }
245 }Sourcepub fn move_front(&mut self, current_position: usize)
pub fn move_front(&mut self, current_position: usize)
Moves an element at index current_position to the front,
shifting all elements between these positions.
§Panics
Panics if index is out of bounds.
Examples found in repository?
213 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
214 let mut counters_guard = self.counters.guard();
215 match msg {
216 AppMsg::AddCounter => {
217 counters_guard.push_back(self.created_widgets);
218 self.created_widgets = self.created_widgets.wrapping_add(1);
219 }
220 AppMsg::RemoveCounter => {
221 counters_guard.pop_back();
222 }
223 AppMsg::SendFront(index) => {
224 counters_guard.move_front(index.current_index());
225 }
226 AppMsg::MoveDown(index) => {
227 let index = index.current_index();
228 let new_index = index + 1;
229 // Already at the end?
230 if new_index < counters_guard.len() {
231 counters_guard.move_to(index, new_index);
232 }
233 }
234 AppMsg::MoveUp(index) => {
235 let index = index.current_index();
236 // Already at the start?
237 if index != 0 {
238 counters_guard.move_to(index, index - 1);
239 }
240 }
241 AppMsg::Remove(index) => {
242 counters_guard.remove(index.current_index());
243 }
244 }
245 }Sourcepub fn move_back(&mut self, current_position: usize)
pub fn move_back(&mut self, current_position: usize)
Moves an element at index current_position to the back,
shifting all elements between these positions.
§Panics
Panics if index is out of bounds.
Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Remove all components from the AsyncFactoryVecDeque.
Sourcepub fn iter_mut(
&mut self,
) -> impl DoubleEndedIterator<Item = Option<&mut C>> + ExactSizeIterator + FusedIterator
pub fn iter_mut( &mut self, ) -> impl DoubleEndedIterator<Item = Option<&mut C>> + ExactSizeIterator + FusedIterator
Returns an iterator over the components that returns mutable references.
Each item will be Some if the async init_model() method
of the item returned and otherwise None.
Methods from Deref<Target = AsyncFactoryVecDeque<C>>§
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of elements in the AsyncFactoryVecDeque.
Examples found in repository?
213 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
214 let mut counters_guard = self.counters.guard();
215 match msg {
216 AppMsg::AddCounter => {
217 counters_guard.push_back(self.created_widgets);
218 self.created_widgets = self.created_widgets.wrapping_add(1);
219 }
220 AppMsg::RemoveCounter => {
221 counters_guard.pop_back();
222 }
223 AppMsg::SendFront(index) => {
224 counters_guard.move_front(index.current_index());
225 }
226 AppMsg::MoveDown(index) => {
227 let index = index.current_index();
228 let new_index = index + 1;
229 // Already at the end?
230 if new_index < counters_guard.len() {
231 counters_guard.move_to(index, new_index);
232 }
233 }
234 AppMsg::MoveUp(index) => {
235 let index = index.current_index();
236 // Already at the start?
237 if index != 0 {
238 counters_guard.move_to(index, index - 1);
239 }
240 }
241 AppMsg::Remove(index) => {
242 counters_guard.remove(index.current_index());
243 }
244 }
245 }Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the AsyncFactoryVecDeque is empty.
Sourcepub fn get(&self, index: usize) -> Option<&C>
pub fn get(&self, index: usize) -> Option<&C>
Tries to get an immutable reference to the model of one element.
Returns None if index is invalid or the async init_model() method
hasn’t returned yet.
Sourcepub fn back(&self) -> Option<&C>
pub fn back(&self) -> Option<&C>
Provides a reference to the model of the back element.
Returns None if index is invalid or the async init_model() method
of the last element hasn’t returned yet.
Sourcepub fn front(&self) -> Option<&C>
pub fn front(&self) -> Option<&C>
Provides a reference to the model of the front element.
Returns None if index is invalid or the async init_model() method
of the first element hasn’t returned yet.
Sourcepub fn widget(&self) -> &C::ParentWidget
pub fn widget(&self) -> &C::ParentWidget
Returns the widget all components are attached to.
Examples found in repository?
187 fn init(
188 counter: Self::Init,
189 root: Self::Root,
190 sender: ComponentSender<Self>,
191 ) -> ComponentParts<Self> {
192 let counters = AsyncFactoryVecDeque::builder().launch_default().forward(
193 sender.input_sender(),
194 |output| match output {
195 CounterOutput::SendFront(index) => AppMsg::SendFront(index),
196 CounterOutput::MoveUp(index) => AppMsg::MoveUp(index),
197 CounterOutput::MoveDown(index) => AppMsg::MoveDown(index),
198 CounterOutput::Remove(index) => AppMsg::Remove(index),
199 },
200 );
201
202 let model = App {
203 created_widgets: counter,
204 counters,
205 };
206
207 let counter_box = model.counters.widget();
208 let widgets = view_output!();
209
210 ComponentParts { model, widgets }
211 }Sourcepub fn iter(
&self,
) -> impl DoubleEndedIterator<Item = Option<&C>> + ExactSizeIterator + FusedIterator
pub fn iter( &self, ) -> impl DoubleEndedIterator<Item = Option<&C>> + ExactSizeIterator + FusedIterator
Returns an iterator over the components.
Each item will be Some if the async init_model() method
of the item returned and otherwise None.