#gtk #gnome #glade #macro-derive

gtk_liststore_item_derive

Rust 的 gtk::ListStore 结构体自动推导(derive 宏)

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日

#6 in #glade

每月50次 下载
用于 gtk_liststore_item

MIT/Apache 协议

8KB
69

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 了!

通过定义以下结构

#[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 许可证 2.0 版MIT 许可证 下许可。

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在此项目中的任何贡献,均应如上所述双重许可,而无需任何额外的条款或条件。

依赖项

~1.5MB
~36K SLoC