12 个版本 (稳定)
1.2.0 | 2022年5月31日 |
---|---|
1.1.3 | 2022年2月2日 |
1.1.2 | 2021年8月31日 |
1.0.1 | 2021年7月5日 |
0.1.2 | 2020年7月29日 |
#749 in GUI
每月99次下载
18KB
gtk_liststore_item
为Rust的gtk::ListStore结构体自动派生。
用法
为了使用此crate,您必须在项目的Cargo.toml
文件中添加以下依赖项
[dependencies]
gtk_liststore_item = "1.2.0"
示例
安装crate后,您就可以使用ListStoreItem
派生了!
通过定义以下结构
#[derive(ListStoreItem)]
struct Item {
name: String,
value: u32,
progress: u32,
is_cool: bool,
}
您可以直接创建并添加项目到gtk::ListStore
模型
let mut list_store: gtk::ListStore = Item::new_liststore();
for i in 0..10 {
let item = Item {
name: format!("foobar{}", i),
value: rand::random(),
progress: rand::random::<u32>() % 100,
is_cool: rand::random(),
};
item.insert_into_liststore(&mut list_store);
}
并可以直接在GtkTreeView
小部件中看到结果
如果没有这个crate,您将不得不手动将结构体中的每个条目及其类型和位置序列化
fn new_liststore() -> gtk::ListStore {
gtk::ListStore::new(&[
String::static_type(),
u32::static_type(),
u32::static_type(),
bool::static_type(),
])
}
fn get_item(liststore: >k::ListStore, iter: >k::TreeIter) -> Item {
Some(Item {
name: list_store.value(&iter, 0).get::<String>().ok()?,
value: list_store.value(&iter, 1).get::<u32>().ok()?,
progress: list_store.value(&iter, 2).get::<u32>().ok()?,
is_cool: list_store.value(&iter, 3).get::<bool>().ok()?,
})
}
fn insert_item(item: &Item, list_store: &mut gtk::ListStore) -> gtk::TreeIter {
list_store.insert_with_values(
None,
&[
(0, &self.name),
(1, &self.value),
(2, &self.progress),
(3, &self.is_cool)
]
)
}
这可能会变得相当繁琐,因此这个crate可以简化这个过程。
许可证
根据您的选择,在Apache License,版本2.0或MIT许可证下许可。
除非您明确说明,否则根据Apache-2.0许可证定义的,您提交的旨在包含在此项目中的任何贡献,都应如上所述双重许可,不得添加任何额外条款或条件。
依赖关系
~18MB
~410K SLoC