pub struct TypedColumnView<T, S> {
pub view: ColumnView,
pub selection_model: S,
/* private fields */
}Expand description
A high-level wrapper around gio::ListStore,
gtk::SignalListItemFactory and gtk::ColumnView.
TypedColumnView aims at keeping nearly the same functionality and
flexibility of the raw bindings while introducing a more idiomatic
and type-safe interface.
Fields§
§view: ColumnViewThe internal list view.
selection_model: SThe internal selection model.
Implementations§
Source§impl<T, S> TypedColumnView<T, S>where
T: Any,
S: RelmSelectionExt,
impl<T, S> TypedColumnView<T, S>where
T: Any,
S: RelmSelectionExt,
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new, empty TypedColumnView.
Examples found in repository?
143 fn init(
144 counter: Self::Init,
145 root: Self::Root,
146 sender: ComponentSender<Self>,
147 ) -> ComponentParts<Self> {
148 // Initialize the ListView wrapper
149 let mut view_wrapper = TypedColumnView::<MyListItem, gtk::SingleSelection>::new();
150 view_wrapper.append_column::<Label1Column>();
151 view_wrapper.append_column::<Label2Column>();
152 view_wrapper.append_column::<ButtonColumn>();
153
154 // Add a filter and disable it
155 view_wrapper.add_filter(|item| item.value % 2 == 0);
156 view_wrapper.set_filter_status(0, false);
157
158 let model = App {
159 counter,
160 view_wrapper,
161 };
162
163 let my_view = &model.view_wrapper.view;
164
165 let widgets = view_output!();
166
167 ComponentParts { model, widgets }
168 }Sourcepub fn append_column<C>(&mut self)where
C: RelmColumn<Item = T>,
pub fn append_column<C>(&mut self)where
C: RelmColumn<Item = T>,
Append column to this typed view
Examples found in repository?
143 fn init(
144 counter: Self::Init,
145 root: Self::Root,
146 sender: ComponentSender<Self>,
147 ) -> ComponentParts<Self> {
148 // Initialize the ListView wrapper
149 let mut view_wrapper = TypedColumnView::<MyListItem, gtk::SingleSelection>::new();
150 view_wrapper.append_column::<Label1Column>();
151 view_wrapper.append_column::<Label2Column>();
152 view_wrapper.append_column::<ButtonColumn>();
153
154 // Add a filter and disable it
155 view_wrapper.add_filter(|item| item.value % 2 == 0);
156 view_wrapper.set_filter_status(0, false);
157
158 let model = App {
159 counter,
160 view_wrapper,
161 };
162
163 let my_view = &model.view_wrapper.view;
164
165 let widgets = view_output!();
166
167 ComponentParts { model, widgets }
168 }Sourcepub fn add_filter<F: Fn(&T) -> bool + 'static>(&mut self, f: F)
pub fn add_filter<F: Fn(&T) -> bool + 'static>(&mut self, f: F)
Add a function to filter the stored items.
Returning false will simply hide the item.
Note that several filters can be added on top of each other.
Examples found in repository?
143 fn init(
144 counter: Self::Init,
145 root: Self::Root,
146 sender: ComponentSender<Self>,
147 ) -> ComponentParts<Self> {
148 // Initialize the ListView wrapper
149 let mut view_wrapper = TypedColumnView::<MyListItem, gtk::SingleSelection>::new();
150 view_wrapper.append_column::<Label1Column>();
151 view_wrapper.append_column::<Label2Column>();
152 view_wrapper.append_column::<ButtonColumn>();
153
154 // Add a filter and disable it
155 view_wrapper.add_filter(|item| item.value % 2 == 0);
156 view_wrapper.set_filter_status(0, false);
157
158 let model = App {
159 counter,
160 view_wrapper,
161 };
162
163 let my_view = &model.view_wrapper.view;
164
165 let widgets = view_output!();
166
167 ComponentParts { model, widgets }
168 }Sourcepub fn get_columns(&self) -> &HashMap<&'static str, ColumnViewColumn>
pub fn get_columns(&self) -> &HashMap<&'static str, ColumnViewColumn>
Get columns currently associated with this view.
Sourcepub fn filters_len(&self) -> usize
pub fn filters_len(&self) -> usize
Returns the amount of filters that were added.
Sourcepub fn set_filter_status(&mut self, idx: usize, active: bool) -> bool
pub fn set_filter_status(&mut self, idx: usize, active: bool) -> bool
Set a certain filter as active or inactive.
Examples found in repository?
143 fn init(
144 counter: Self::Init,
145 root: Self::Root,
146 sender: ComponentSender<Self>,
147 ) -> ComponentParts<Self> {
148 // Initialize the ListView wrapper
149 let mut view_wrapper = TypedColumnView::<MyListItem, gtk::SingleSelection>::new();
150 view_wrapper.append_column::<Label1Column>();
151 view_wrapper.append_column::<Label2Column>();
152 view_wrapper.append_column::<ButtonColumn>();
153
154 // Add a filter and disable it
155 view_wrapper.add_filter(|item| item.value % 2 == 0);
156 view_wrapper.set_filter_status(0, false);
157
158 let model = App {
159 counter,
160 view_wrapper,
161 };
162
163 let my_view = &model.view_wrapper.view;
164
165 let widgets = view_output!();
166
167 ComponentParts { model, widgets }
168 }
169
170 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
171 match msg {
172 Msg::Append => {
173 // Add 10 items
174 for _ in 0..10 {
175 self.counter = self.counter.wrapping_add(1);
176 self.view_wrapper.append(MyListItem::new(self.counter));
177 }
178
179 self.view_wrapper
180 .iter()
181 .for_each(|row| println!("item {}", row.borrow().value));
182
183 // Count up the first item
184 let first_item = self.view_wrapper.get(0).unwrap();
185 let first_binding = &mut first_item.borrow_mut().binding;
186 let mut guard = first_binding.guard();
187 *guard += 1;
188 }
189 Msg::Remove => {
190 // Remove the second item
191 self.view_wrapper.remove(1);
192 }
193 Msg::OnlyShowEven(show_only_even) => {
194 // Disable or enable the first filter
195 self.view_wrapper.set_filter_status(0, show_only_even);
196 }
197 }
198 }Sourcepub fn notify_filter_changed(&self, idx: usize) -> bool
pub fn notify_filter_changed(&self, idx: usize) -> bool
Notify that a certain filter has changed. This causes the filter expression to be re-evaluated.
Returns true if a filter was notified.
Sourcepub fn pop_filter(&mut self)
pub fn pop_filter(&mut self)
Remove the last filter.
Sourcepub fn clear_filters(&mut self)
pub fn clear_filters(&mut self)
Remove all filters.
Sourcepub fn append(&mut self, value: T)
pub fn append(&mut self, value: T)
Add a new item at the end of the list.
Examples found in repository?
170 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
171 match msg {
172 Msg::Append => {
173 // Add 10 items
174 for _ in 0..10 {
175 self.counter = self.counter.wrapping_add(1);
176 self.view_wrapper.append(MyListItem::new(self.counter));
177 }
178
179 self.view_wrapper
180 .iter()
181 .for_each(|row| println!("item {}", row.borrow().value));
182
183 // Count up the first item
184 let first_item = self.view_wrapper.get(0).unwrap();
185 let first_binding = &mut first_item.borrow_mut().binding;
186 let mut guard = first_binding.guard();
187 *guard += 1;
188 }
189 Msg::Remove => {
190 // Remove the second item
191 self.view_wrapper.remove(1);
192 }
193 Msg::OnlyShowEven(show_only_even) => {
194 // Disable or enable the first filter
195 self.view_wrapper.set_filter_status(0, show_only_even);
196 }
197 }
198 }Sourcepub fn extend_from_iter<I: IntoIterator<Item = T>>(&mut self, init: I)
pub fn extend_from_iter<I: IntoIterator<Item = T>>(&mut self, init: I)
Add new items from an iterator the the end of the list.
Sourcepub fn find<F: FnMut(&T) -> bool>(&self, equal_func: F) -> Option<u32>
Available on crate feature gnome_43 only.
pub fn find<F: FnMut(&T) -> bool>(&self, equal_func: F) -> Option<u32>
gnome_43 only.Find the index of the first item that matches a certain function.
Sourcepub fn get(&self, position: u32) -> Option<TypedListItem<T>>
pub fn get(&self, position: u32) -> Option<TypedListItem<T>>
Get the TypedListItem at the specified position.
Returns None if the position is invalid.
Examples found in repository?
170 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
171 match msg {
172 Msg::Append => {
173 // Add 10 items
174 for _ in 0..10 {
175 self.counter = self.counter.wrapping_add(1);
176 self.view_wrapper.append(MyListItem::new(self.counter));
177 }
178
179 self.view_wrapper
180 .iter()
181 .for_each(|row| println!("item {}", row.borrow().value));
182
183 // Count up the first item
184 let first_item = self.view_wrapper.get(0).unwrap();
185 let first_binding = &mut first_item.borrow_mut().binding;
186 let mut guard = first_binding.guard();
187 *guard += 1;
188 }
189 Msg::Remove => {
190 // Remove the second item
191 self.view_wrapper.remove(1);
192 }
193 Msg::OnlyShowEven(show_only_even) => {
194 // Disable or enable the first filter
195 self.view_wrapper.set_filter_status(0, show_only_even);
196 }
197 }
198 }Sourcepub fn get_visible(&self, position: u32) -> Option<TypedListItem<T>>
pub fn get_visible(&self, position: u32) -> Option<TypedListItem<T>>
Get the visible TypedListItem at the specified position,
(the item at the given position after filtering and sorting).
Returns None if the position is invalid.
Sourcepub fn insert_sorted<F>(&self, value: T, compare_func: F) -> u32
pub fn insert_sorted<F>(&self, value: T, compare_func: F) -> u32
Insert an item into the list and calculate its position from a sorting function.
Sourcepub fn remove(&mut self, position: u32)
pub fn remove(&mut self, position: u32)
Remove an item at a specific position.
Examples found in repository?
170 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
171 match msg {
172 Msg::Append => {
173 // Add 10 items
174 for _ in 0..10 {
175 self.counter = self.counter.wrapping_add(1);
176 self.view_wrapper.append(MyListItem::new(self.counter));
177 }
178
179 self.view_wrapper
180 .iter()
181 .for_each(|row| println!("item {}", row.borrow().value));
182
183 // Count up the first item
184 let first_item = self.view_wrapper.get(0).unwrap();
185 let first_binding = &mut first_item.borrow_mut().binding;
186 let mut guard = first_binding.guard();
187 *guard += 1;
188 }
189 Msg::Remove => {
190 // Remove the second item
191 self.view_wrapper.remove(1);
192 }
193 Msg::OnlyShowEven(show_only_even) => {
194 // Disable or enable the first filter
195 self.view_wrapper.set_filter_status(0, show_only_even);
196 }
197 }
198 }Sourcepub fn iter(&self) -> TypedIterator<'_, TypedColumnView<T, S>> ⓘ
pub fn iter(&self) -> TypedIterator<'_, TypedColumnView<T, S>> ⓘ
Returns an iterator that allows modifying each TypedListItem.
Examples found in repository?
170 fn update(&mut self, msg: Self::Input, _sender: ComponentSender<Self>) {
171 match msg {
172 Msg::Append => {
173 // Add 10 items
174 for _ in 0..10 {
175 self.counter = self.counter.wrapping_add(1);
176 self.view_wrapper.append(MyListItem::new(self.counter));
177 }
178
179 self.view_wrapper
180 .iter()
181 .for_each(|row| println!("item {}", row.borrow().value));
182
183 // Count up the first item
184 let first_item = self.view_wrapper.get(0).unwrap();
185 let first_binding = &mut first_item.borrow_mut().binding;
186 let mut guard = first_binding.guard();
187 *guard += 1;
188 }
189 Msg::Remove => {
190 // Remove the second item
191 self.view_wrapper.remove(1);
192 }
193 Msg::OnlyShowEven(show_only_even) => {
194 // Disable or enable the first filter
195 self.view_wrapper.set_filter_status(0, show_only_even);
196 }
197 }
198 }