1 // This file was generated by gir (https://github.com/gtk-rs/gir) 2 // from gir-files (https://github.com/gtk-rs/gir-files) 3 // DO NOT EDIT 4 5 use crate::SelectionMode; 6 use crate::TreeIter; 7 use crate::TreeModel; 8 use crate::TreePath; 9 use crate::TreeView; 10 use glib::object::Cast; 11 use glib::object::IsA; 12 use glib::signal::connect_raw; 13 use glib::signal::SignalHandlerId; 14 use glib::translate::*; 15 use std::boxed::Box as Box_; 16 use std::fmt; 17 use std::mem::transmute; 18 use std::ptr; 19 20 glib::wrapper! { 21 #[doc(alias = "GtkTreeSelection")] 22 pub struct TreeSelection(Object<ffi::GtkTreeSelection, ffi::GtkTreeSelectionClass>); 23 24 match fn { 25 type_ => || ffi::gtk_tree_selection_get_type(), 26 } 27 } 28 29 pub const NONE_TREE_SELECTION: Option<&TreeSelection> = None; 30 31 pub trait TreeSelectionExt: 'static { 32 #[doc(alias = "gtk_tree_selection_count_selected_rows")] count_selected_rows(&self) -> i3233 fn count_selected_rows(&self) -> i32; 34 35 #[doc(alias = "gtk_tree_selection_get_mode")] 36 #[doc(alias = "get_mode")] mode(&self) -> SelectionMode37 fn mode(&self) -> SelectionMode; 38 39 //#[doc(alias = "gtk_tree_selection_get_select_function")] 40 //#[doc(alias = "get_select_function")] 41 //fn select_function(&self) -> Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>; 42 43 #[doc(alias = "gtk_tree_selection_get_selected")] 44 #[doc(alias = "get_selected")] selected(&self) -> Option<(TreeModel, TreeIter)>45 fn selected(&self) -> Option<(TreeModel, TreeIter)>; 46 47 #[doc(alias = "gtk_tree_selection_get_selected_rows")] 48 #[doc(alias = "get_selected_rows")] selected_rows(&self) -> (Vec<TreePath>, TreeModel)49 fn selected_rows(&self) -> (Vec<TreePath>, TreeModel); 50 51 #[doc(alias = "gtk_tree_selection_get_tree_view")] 52 #[doc(alias = "get_tree_view")] tree_view(&self) -> Option<TreeView>53 fn tree_view(&self) -> Option<TreeView>; 54 55 //#[doc(alias = "gtk_tree_selection_get_user_data")] 56 //#[doc(alias = "get_user_data")] 57 //fn user_data(&self) -> /*Unimplemented*/Option<Fundamental: Pointer>; 58 59 #[doc(alias = "gtk_tree_selection_iter_is_selected")] iter_is_selected(&self, iter: &TreeIter) -> bool60 fn iter_is_selected(&self, iter: &TreeIter) -> bool; 61 62 #[doc(alias = "gtk_tree_selection_path_is_selected")] path_is_selected(&self, path: &TreePath) -> bool63 fn path_is_selected(&self, path: &TreePath) -> bool; 64 65 #[doc(alias = "gtk_tree_selection_select_all")] select_all(&self)66 fn select_all(&self); 67 68 #[doc(alias = "gtk_tree_selection_select_iter")] select_iter(&self, iter: &TreeIter)69 fn select_iter(&self, iter: &TreeIter); 70 71 #[doc(alias = "gtk_tree_selection_select_path")] select_path(&self, path: &TreePath)72 fn select_path(&self, path: &TreePath); 73 74 #[doc(alias = "gtk_tree_selection_select_range")] select_range(&self, start_path: &TreePath, end_path: &TreePath)75 fn select_range(&self, start_path: &TreePath, end_path: &TreePath); 76 77 #[doc(alias = "gtk_tree_selection_selected_foreach")] selected_foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(&self, func: P)78 fn selected_foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(&self, func: P); 79 80 #[doc(alias = "gtk_tree_selection_set_mode")] set_mode(&self, type_: SelectionMode)81 fn set_mode(&self, type_: SelectionMode); 82 83 #[doc(alias = "gtk_tree_selection_set_select_function")] set_select_function( &self, func: Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>, )84 fn set_select_function( 85 &self, 86 func: Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>, 87 ); 88 89 #[doc(alias = "gtk_tree_selection_unselect_all")] unselect_all(&self)90 fn unselect_all(&self); 91 92 #[doc(alias = "gtk_tree_selection_unselect_iter")] unselect_iter(&self, iter: &TreeIter)93 fn unselect_iter(&self, iter: &TreeIter); 94 95 #[doc(alias = "gtk_tree_selection_unselect_path")] unselect_path(&self, path: &TreePath)96 fn unselect_path(&self, path: &TreePath); 97 98 #[doc(alias = "gtk_tree_selection_unselect_range")] unselect_range(&self, start_path: &TreePath, end_path: &TreePath)99 fn unselect_range(&self, start_path: &TreePath, end_path: &TreePath); 100 101 #[doc(alias = "changed")] connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId102 fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId; 103 104 #[doc(alias = "mode")] connect_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId105 fn connect_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId; 106 } 107 108 impl<O: IsA<TreeSelection>> TreeSelectionExt for O { count_selected_rows(&self) -> i32109 fn count_selected_rows(&self) -> i32 { 110 unsafe { ffi::gtk_tree_selection_count_selected_rows(self.as_ref().to_glib_none().0) } 111 } 112 mode(&self) -> SelectionMode113 fn mode(&self) -> SelectionMode { 114 unsafe { 115 from_glib(ffi::gtk_tree_selection_get_mode( 116 self.as_ref().to_glib_none().0, 117 )) 118 } 119 } 120 121 //fn select_function(&self) -> Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>> { 122 // unsafe { TODO: call ffi:gtk_tree_selection_get_select_function() } 123 //} 124 selected(&self) -> Option<(TreeModel, TreeIter)>125 fn selected(&self) -> Option<(TreeModel, TreeIter)> { 126 unsafe { 127 let mut model = ptr::null_mut(); 128 let mut iter = TreeIter::uninitialized(); 129 let ret = from_glib(ffi::gtk_tree_selection_get_selected( 130 self.as_ref().to_glib_none().0, 131 &mut model, 132 iter.to_glib_none_mut().0, 133 )); 134 if ret { 135 Some((from_glib_none(model), iter)) 136 } else { 137 None 138 } 139 } 140 } 141 selected_rows(&self) -> (Vec<TreePath>, TreeModel)142 fn selected_rows(&self) -> (Vec<TreePath>, TreeModel) { 143 unsafe { 144 let mut model = ptr::null_mut(); 145 let ret = 146 FromGlibPtrContainer::from_glib_full(ffi::gtk_tree_selection_get_selected_rows( 147 self.as_ref().to_glib_none().0, 148 &mut model, 149 )); 150 (ret, from_glib_none(model)) 151 } 152 } 153 tree_view(&self) -> Option<TreeView>154 fn tree_view(&self) -> Option<TreeView> { 155 unsafe { 156 from_glib_none(ffi::gtk_tree_selection_get_tree_view( 157 self.as_ref().to_glib_none().0, 158 )) 159 } 160 } 161 162 //fn user_data(&self) -> /*Unimplemented*/Option<Fundamental: Pointer> { 163 // unsafe { TODO: call ffi:gtk_tree_selection_get_user_data() } 164 //} 165 iter_is_selected(&self, iter: &TreeIter) -> bool166 fn iter_is_selected(&self, iter: &TreeIter) -> bool { 167 unsafe { 168 from_glib(ffi::gtk_tree_selection_iter_is_selected( 169 self.as_ref().to_glib_none().0, 170 mut_override(iter.to_glib_none().0), 171 )) 172 } 173 } 174 path_is_selected(&self, path: &TreePath) -> bool175 fn path_is_selected(&self, path: &TreePath) -> bool { 176 unsafe { 177 from_glib(ffi::gtk_tree_selection_path_is_selected( 178 self.as_ref().to_glib_none().0, 179 mut_override(path.to_glib_none().0), 180 )) 181 } 182 } 183 select_all(&self)184 fn select_all(&self) { 185 unsafe { 186 ffi::gtk_tree_selection_select_all(self.as_ref().to_glib_none().0); 187 } 188 } 189 select_iter(&self, iter: &TreeIter)190 fn select_iter(&self, iter: &TreeIter) { 191 unsafe { 192 ffi::gtk_tree_selection_select_iter( 193 self.as_ref().to_glib_none().0, 194 mut_override(iter.to_glib_none().0), 195 ); 196 } 197 } 198 select_path(&self, path: &TreePath)199 fn select_path(&self, path: &TreePath) { 200 unsafe { 201 ffi::gtk_tree_selection_select_path( 202 self.as_ref().to_glib_none().0, 203 mut_override(path.to_glib_none().0), 204 ); 205 } 206 } 207 select_range(&self, start_path: &TreePath, end_path: &TreePath)208 fn select_range(&self, start_path: &TreePath, end_path: &TreePath) { 209 unsafe { 210 ffi::gtk_tree_selection_select_range( 211 self.as_ref().to_glib_none().0, 212 mut_override(start_path.to_glib_none().0), 213 mut_override(end_path.to_glib_none().0), 214 ); 215 } 216 } 217 selected_foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(&self, func: P)218 fn selected_foreach<P: FnMut(&TreeModel, &TreePath, &TreeIter)>(&self, func: P) { 219 let func_data: P = func; 220 unsafe extern "C" fn func_func<P: FnMut(&TreeModel, &TreePath, &TreeIter)>( 221 model: *mut ffi::GtkTreeModel, 222 path: *mut ffi::GtkTreePath, 223 iter: *mut ffi::GtkTreeIter, 224 data: glib::ffi::gpointer, 225 ) { 226 let model = from_glib_borrow(model); 227 let path = from_glib_borrow(path); 228 let iter = from_glib_borrow(iter); 229 let callback: *mut P = data as *const _ as usize as *mut P; 230 (*callback)(&model, &path, &iter); 231 } 232 let func = Some(func_func::<P> as _); 233 let super_callback0: &P = &func_data; 234 unsafe { 235 ffi::gtk_tree_selection_selected_foreach( 236 self.as_ref().to_glib_none().0, 237 func, 238 super_callback0 as *const _ as usize as *mut _, 239 ); 240 } 241 } 242 set_mode(&self, type_: SelectionMode)243 fn set_mode(&self, type_: SelectionMode) { 244 unsafe { 245 ffi::gtk_tree_selection_set_mode(self.as_ref().to_glib_none().0, type_.into_glib()); 246 } 247 } 248 set_select_function( &self, func: Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>, )249 fn set_select_function( 250 &self, 251 func: Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>, 252 ) { 253 let func_data: Box_< 254 Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>, 255 > = Box_::new(func); 256 unsafe extern "C" fn func_func( 257 selection: *mut ffi::GtkTreeSelection, 258 model: *mut ffi::GtkTreeModel, 259 path: *mut ffi::GtkTreePath, 260 path_currently_selected: glib::ffi::gboolean, 261 data: glib::ffi::gpointer, 262 ) -> glib::ffi::gboolean { 263 let selection = from_glib_borrow(selection); 264 let model = from_glib_borrow(model); 265 let path = from_glib_borrow(path); 266 let path_currently_selected = from_glib(path_currently_selected); 267 let callback: &Option< 268 Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>, 269 > = &*(data as *mut _); 270 let res = if let Some(ref callback) = *callback { 271 callback(&selection, &model, &path, path_currently_selected) 272 } else { 273 panic!("cannot get closure...") 274 }; 275 res.into_glib() 276 } 277 let func = if func_data.is_some() { 278 Some(func_func as _) 279 } else { 280 None 281 }; 282 unsafe extern "C" fn destroy_func(data: glib::ffi::gpointer) { 283 let _callback: Box_< 284 Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>, 285 > = Box_::from_raw(data as *mut _); 286 } 287 let destroy_call3 = Some(destroy_func as _); 288 let super_callback0: Box_< 289 Option<Box_<dyn Fn(&TreeSelection, &TreeModel, &TreePath, bool) -> bool + 'static>>, 290 > = func_data; 291 unsafe { 292 ffi::gtk_tree_selection_set_select_function( 293 self.as_ref().to_glib_none().0, 294 func, 295 Box_::into_raw(super_callback0) as *mut _, 296 destroy_call3, 297 ); 298 } 299 } 300 unselect_all(&self)301 fn unselect_all(&self) { 302 unsafe { 303 ffi::gtk_tree_selection_unselect_all(self.as_ref().to_glib_none().0); 304 } 305 } 306 unselect_iter(&self, iter: &TreeIter)307 fn unselect_iter(&self, iter: &TreeIter) { 308 unsafe { 309 ffi::gtk_tree_selection_unselect_iter( 310 self.as_ref().to_glib_none().0, 311 mut_override(iter.to_glib_none().0), 312 ); 313 } 314 } 315 unselect_path(&self, path: &TreePath)316 fn unselect_path(&self, path: &TreePath) { 317 unsafe { 318 ffi::gtk_tree_selection_unselect_path( 319 self.as_ref().to_glib_none().0, 320 mut_override(path.to_glib_none().0), 321 ); 322 } 323 } 324 unselect_range(&self, start_path: &TreePath, end_path: &TreePath)325 fn unselect_range(&self, start_path: &TreePath, end_path: &TreePath) { 326 unsafe { 327 ffi::gtk_tree_selection_unselect_range( 328 self.as_ref().to_glib_none().0, 329 mut_override(start_path.to_glib_none().0), 330 mut_override(end_path.to_glib_none().0), 331 ); 332 } 333 } 334 connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId335 fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId { 336 unsafe extern "C" fn changed_trampoline<P: IsA<TreeSelection>, F: Fn(&P) + 'static>( 337 this: *mut ffi::GtkTreeSelection, 338 f: glib::ffi::gpointer, 339 ) { 340 let f: &F = &*(f as *const F); 341 f(TreeSelection::from_glib_borrow(this).unsafe_cast_ref()) 342 } 343 unsafe { 344 let f: Box_<F> = Box_::new(f); 345 connect_raw( 346 self.as_ptr() as *mut _, 347 b"changed\0".as_ptr() as *const _, 348 Some(transmute::<_, unsafe extern "C" fn()>( 349 changed_trampoline::<Self, F> as *const (), 350 )), 351 Box_::into_raw(f), 352 ) 353 } 354 } 355 connect_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId356 fn connect_mode_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId { 357 unsafe extern "C" fn notify_mode_trampoline<P: IsA<TreeSelection>, F: Fn(&P) + 'static>( 358 this: *mut ffi::GtkTreeSelection, 359 _param_spec: glib::ffi::gpointer, 360 f: glib::ffi::gpointer, 361 ) { 362 let f: &F = &*(f as *const F); 363 f(TreeSelection::from_glib_borrow(this).unsafe_cast_ref()) 364 } 365 unsafe { 366 let f: Box_<F> = Box_::new(f); 367 connect_raw( 368 self.as_ptr() as *mut _, 369 b"notify::mode\0".as_ptr() as *const _, 370 Some(transmute::<_, unsafe extern "C" fn()>( 371 notify_mode_trampoline::<Self, F> as *const (), 372 )), 373 Box_::into_raw(f), 374 ) 375 } 376 } 377 } 378 379 impl fmt::Display for TreeSelection { fmt(&self, f: &mut fmt::Formatter) -> fmt::Result380 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 381 f.write_str("TreeSelection") 382 } 383 } 384