Skip to content
This repository has been archived by the owner on Jun 8, 2021. It is now read-only.

Add List/TreeStore::set #241

Merged
merged 3 commits into from Jan 30, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/lib.rs
Expand Up @@ -22,11 +22,16 @@ pub use gdk::pixbuf as gdk_pixbuf;

pub use glib::{
Cast,
Continue,
Error,
IsA,
Object,
StaticType,
ToValue,
Type,
TypedValue,
Value,
};
pub use glib::Value;

pub use ffi::GtkAccelFlags as AccelFlags;
pub use ffi::GtkAlign as Align;
Expand Down
21 changes: 20 additions & 1 deletion src/list_store.rs
Expand Up @@ -4,7 +4,7 @@

use ffi;
use glib::translate::*;
use glib::{Type, Value};
use glib::{Type, ToValue, Value};
use libc::c_int;
use std::ptr;
use ListStore;
Expand Down Expand Up @@ -48,6 +48,25 @@ impl ListStore {
}
}

pub fn set(&self, iter: &TreeIter, columns: &[u32], values: &[&ToValue]) {
unsafe {
let n_columns = ffi::gtk_tree_model_get_n_columns(self.to_glib_none().0) as u32;
assert!(columns.len() == values.len());
assert!(columns.len() <= n_columns as usize);
for &column in columns {
assert!(column < n_columns);
let type_ = from_glib(
ffi::gtk_tree_model_get_column_type(self.to_glib_none().0, column as c_int));
assert!(Value::type_transformable(values[column as usize].to_value_type(), type_));
}
ffi::gtk_list_store_set_valuesv(self.to_glib_none().0,
mut_override(iter.to_glib_none().0),
mut_override(columns.as_ptr() as *const c_int),
values.to_glib_none().0,
columns.len() as c_int);
}
}

pub fn set_value(&self, iter: &TreeIter, column: u32, value: &Value) {
unsafe {
let columns = ffi::gtk_tree_model_get_n_columns(self.to_glib_none().0);
Expand Down
3 changes: 3 additions & 0 deletions src/prelude.rs
Expand Up @@ -4,6 +4,9 @@

pub use {
Cast,
Continue,
StaticType,
ToValue,
};

#[cfg(gtk_3_4)]
Expand Down
3 changes: 1 addition & 2 deletions src/signal.rs
Expand Up @@ -33,6 +33,7 @@ use cairo::{Context, RectangleInt};

use {
Adjustment,
Continue,
DeleteType,
DirectionType,
MovementStep,
Expand Down Expand Up @@ -61,8 +62,6 @@ impl ToGlib for Inhibit {
}
}

pub use glib::source::Continue;

struct CallbackGuard;

impl Drop for CallbackGuard {
Expand Down
21 changes: 20 additions & 1 deletion src/tree_store.rs
Expand Up @@ -4,7 +4,7 @@

use ffi;
use glib::translate::*;
use glib::{Type, Value};
use glib::{Type, ToValue, Value};
use libc::c_int;
use TreeIter;
use TreeStore;
Expand Down Expand Up @@ -49,6 +49,25 @@ impl TreeStore {
}
}

pub fn set(&self, iter: &TreeIter, columns: &[u32], values: &[&ToValue]) {
unsafe {
let n_columns = ffi::gtk_tree_model_get_n_columns(self.to_glib_none().0) as u32;
assert!(columns.len() == values.len());
assert!(columns.len() <= n_columns as usize);
for &column in columns {
assert!(column < n_columns);
let type_ = from_glib(
ffi::gtk_tree_model_get_column_type(self.to_glib_none().0, column as c_int));
assert!(Value::type_transformable(values[column as usize].to_value_type(), type_));
}
ffi::gtk_tree_store_set_valuesv(self.to_glib_none().0,
mut_override(iter.to_glib_none().0),
mut_override(columns.as_ptr() as *const c_int),
values.to_glib_none().0,
columns.len() as c_int);
}
}

pub fn set_value(&self, iter: &TreeIter, column: u32, value: &Value) {
unsafe {
let columns = ffi::gtk_tree_model_get_n_columns(self.to_glib_none().0);
Expand Down