#gtk #gnome #glade

gtk_liststore_item

Rust的gtk::ListStore结构体自动派生

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

Download history 25/week @ 2024-07-04 74/week @ 2024-07-25

每月99次下载

MIT/Apache

18KB

gtk_liststore_item

Build Latest version Documentation License REUSE status

为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小部件中看到结果

Example screenshot with a table containing multiple entries

如果没有这个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: &gtk::ListStore, iter: &gtk::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.0MIT许可证下许可。

除非您明确说明,否则根据Apache-2.0许可证定义的,您提交的旨在包含在此项目中的任何贡献,都应如上所述双重许可,不得添加任何额外条款或条件。

依赖关系

~18MB
~410K SLoC