1package gtk 2 3// #include <gtk/gtk.h> 4// #include "gtk.go.h" 5import "C" 6import ( 7 "runtime" 8 "unsafe" 9 10 "github.com/gotk3/gotk3/gdk" 11 "github.com/gotk3/gotk3/glib" 12) 13 14/* 15 * GtkIconView 16 */ 17 18// IconView is a representation of GTK's GtkIconView. 19type IconView struct { 20 Container 21} 22 23// native returns a pointer to the underlying GtkIconView. 24func (v *IconView) native() *C.GtkIconView { 25 if v == nil || v.GObject == nil { 26 return nil 27 } 28 p := unsafe.Pointer(v.GObject) 29 return C.toGtkIconView(p) 30} 31 32func marshalIconView(p uintptr) (interface{}, error) { 33 c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p))) 34 obj := glib.Take(unsafe.Pointer(c)) 35 return wrapIconView(obj), nil 36} 37 38func wrapIconView(obj *glib.Object) *IconView { 39 return &IconView{Container{Widget{glib.InitiallyUnowned{obj}}}} 40} 41 42// IconViewNew is a wrapper around gtk_icon_view_new(). 43func IconViewNew() (*IconView, error) { 44 c := C.gtk_icon_view_new() 45 if c == nil { 46 return nil, nilPtrErr 47 } 48 49 return wrapIconView(glib.Take(unsafe.Pointer(c))), nil 50} 51 52// IconViewNewWithModel is a wrapper around gtk_icon_view_new_with_model(). 53func IconViewNewWithModel(model ITreeModel) (*IconView, error) { 54 c := C.gtk_icon_view_new_with_model(model.toTreeModel()) 55 if c == nil { 56 return nil, nilPtrErr 57 } 58 obj := glib.Take(unsafe.Pointer(c)) 59 return wrapIconView(obj), nil 60} 61 62// SetModel is a wrapper around gtk_icon_view_set_model(). 63func (v *IconView) SetModel(model ITreeModel) { 64 C.gtk_icon_view_set_model(v.native(), model.toTreeModel()) 65} 66 67// GetModel is a wrapper around gtk_icon_view_get_model(). 68func (v *IconView) GetModel() (*TreeModel, error) { 69 c := C.gtk_icon_view_get_model(v.native()) 70 if c == nil { 71 return nil, nilPtrErr 72 } 73 obj := glib.Take(unsafe.Pointer(c)) 74 return wrapTreeModel(obj), nil 75} 76 77// SetTextColumn is a wrapper around gtk_icon_view_set_text_column(). 78func (v *IconView) SetTextColumn(column int) { 79 C.gtk_icon_view_set_text_column(v.native(), C.gint(column)) 80} 81 82// GetTextColumn is a wrapper around gtk_icon_view_get_text_column(). 83func (v *IconView) GetTextColumn() int { 84 return int(C.gtk_icon_view_get_text_column(v.native())) 85} 86 87// SetMarkupColumn is a wrapper around gtk_icon_view_set_markup_column(). 88func (v *IconView) SetMarkupColumn(column int) { 89 C.gtk_icon_view_set_markup_column(v.native(), C.gint(column)) 90} 91 92// GetMarkupColumn is a wrapper around gtk_icon_view_get_markup_column(). 93func (v *IconView) GetMarkupColumn() int { 94 return int(C.gtk_icon_view_get_markup_column(v.native())) 95} 96 97// SetPixbufColumn is a wrapper around gtk_icon_view_set_pixbuf_column(). 98func (v *IconView) SetPixbufColumn(column int) { 99 C.gtk_icon_view_set_pixbuf_column(v.native(), C.gint(column)) 100} 101 102// GetPixbufColumn is a wrapper around gtk_icon_view_get_pixbuf_column(). 103func (v *IconView) GetPixbufColumn() int { 104 return int(C.gtk_icon_view_get_pixbuf_column(v.native())) 105} 106 107// GetPathAtPos is a wrapper around gtk_icon_view_get_path_at_pos(). 108func (v *IconView) GetPathAtPos(x, y int) *TreePath { 109 var ( 110 cpath *C.GtkTreePath 111 path *TreePath 112 ) 113 114 cpath = C.gtk_icon_view_get_path_at_pos(v.native(), C.gint(x), C.gint(y)) 115 116 if cpath != nil { 117 path = &TreePath{cpath} 118 runtime.SetFinalizer(path, (*TreePath).free) 119 } 120 121 return path 122} 123 124// GetItemAtPos is a wrapper around gtk_icon_view_get_item_at_pos(). 125func (v *IconView) GetItemAtPos(x, y int) (*TreePath, *CellRenderer) { 126 var ( 127 cpath *C.GtkTreePath 128 ccell *C.GtkCellRenderer 129 path *TreePath 130 cell *CellRenderer 131 ) 132 133 C.gtk_icon_view_get_item_at_pos(v.native(), C.gint(x), C.gint(y), &cpath, &ccell) 134 135 if cpath != nil { 136 path = &TreePath{cpath} 137 runtime.SetFinalizer(path, (*TreePath).free) 138 } 139 140 if ccell != nil { 141 cell = wrapCellRenderer(glib.Take(unsafe.Pointer(ccell))) 142 } 143 144 return path, cell 145} 146 147// ConvertWidgetToBinWindowCoords is a wrapper around gtk_icon_view_convert_widget_to_bin_window_coords(). 148func (v *IconView) ConvertWidgetToBinWindowCoords(x, y int) (int, int) { 149 var bx, by C.gint 150 151 C.gtk_icon_view_convert_widget_to_bin_window_coords(v.native(), C.gint(x), C.gint(y), &bx, &by) 152 153 return int(bx), int(by) 154} 155 156// SetCursor is a wrapper around gtk_icon_view_set_selection_mode(). 157func (v *IconView) SetCursor(path *TreePath, cell *CellRenderer, startEditing bool) { 158 C.gtk_icon_view_set_cursor(v.native(), path.native(), cell.native(), gbool(startEditing)) 159} 160 161// GetCursor is a wrapper around gtk_icon_view_get_cursor(). 162func (v *IconView) GetCursor() (*TreePath, *CellRenderer) { 163 var ( 164 cpath *C.GtkTreePath 165 ccell *C.GtkCellRenderer 166 path *TreePath 167 cell *CellRenderer 168 ) 169 170 C.gtk_icon_view_get_cursor(v.native(), &cpath, &ccell) 171 172 if cpath != nil { 173 path = &TreePath{cpath} 174 runtime.SetFinalizer(path, (*TreePath).free) 175 } 176 177 if ccell != nil { 178 cell = wrapCellRenderer(glib.Take(unsafe.Pointer(ccell))) 179 } 180 181 return path, cell 182} 183 184// func (v *IconView) SelectedForeach() {} 185 186// SetSelectionMode is a wrapper around gtk_icon_view_set_selection_mode(). 187func (v *IconView) SetSelectionMode(mode SelectionMode) { 188 C.gtk_icon_view_set_selection_mode(v.native(), C.GtkSelectionMode(mode)) 189} 190 191// GetSelectionMode is a wrapper around gtk_icon_view_get_selection_mode(). 192func (v *IconView) GetSelectionMode() SelectionMode { 193 return SelectionMode(C.gtk_icon_view_get_selection_mode(v.native())) 194} 195 196// SetItemOrientation is a wrapper around gtk_icon_view_set_item_orientation(). 197func (v *IconView) SetItemOrientation(orientation Orientation) { 198 C.gtk_icon_view_set_item_orientation(v.native(), C.GtkOrientation(orientation)) 199} 200 201// GetItemOrientation is a wrapper around gtk_icon_view_get_item_orientation(). 202func (v *IconView) GetItemOrientation() Orientation { 203 return Orientation(C.gtk_icon_view_get_item_orientation(v.native())) 204} 205 206// SetColumns is a wrapper around gtk_icon_view_set_columns(). 207func (v *IconView) SetColumns(columns int) { 208 C.gtk_icon_view_set_columns(v.native(), C.gint(columns)) 209} 210 211// GetColumns is a wrapper around gtk_icon_view_get_columns(). 212func (v *IconView) GetColumns() int { 213 return int(C.gtk_icon_view_get_columns(v.native())) 214} 215 216// SetItemWidth is a wrapper around gtk_icon_view_set_item_width(). 217func (v *IconView) SetItemWidth(width int) { 218 C.gtk_icon_view_set_item_width(v.native(), C.gint(width)) 219} 220 221// GetItemWidth is a wrapper around gtk_icon_view_get_item_width(). 222func (v *IconView) GetItemWidth() int { 223 return int(C.gtk_icon_view_get_item_width(v.native())) 224} 225 226// SetSpacing is a wrapper around gtk_icon_view_set_spacing(). 227func (v *IconView) SetSpacing(spacing int) { 228 C.gtk_icon_view_set_spacing(v.native(), C.gint(spacing)) 229} 230 231// GetSpacing is a wrapper around gtk_icon_view_get_spacing(). 232func (v *IconView) GetSpacing() int { 233 return int(C.gtk_icon_view_get_spacing(v.native())) 234} 235 236// SetRowSpacing is a wrapper around gtk_icon_view_set_row_spacing(). 237func (v *IconView) SetRowSpacing(rowSpacing int) { 238 C.gtk_icon_view_set_row_spacing(v.native(), C.gint(rowSpacing)) 239} 240 241// GetRowSpacing is a wrapper around gtk_icon_view_get_row_spacing(). 242func (v *IconView) GetRowSpacing() int { 243 return int(C.gtk_icon_view_get_row_spacing(v.native())) 244} 245 246// SetColumnSpacing is a wrapper around gtk_icon_view_set_column_spacing(). 247func (v *IconView) SetColumnSpacing(columnSpacing int) { 248 C.gtk_icon_view_set_column_spacing(v.native(), C.gint(columnSpacing)) 249} 250 251// GetColumnSpacing is a wrapper around gtk_icon_view_get_column_spacing(). 252func (v *IconView) GetColumnSpacing() int { 253 return int(C.gtk_icon_view_get_column_spacing(v.native())) 254} 255 256// SetMargin is a wrapper around gtk_icon_view_set_margin(). 257func (v *IconView) SetMargin(margin int) { 258 C.gtk_icon_view_set_margin(v.native(), C.gint(margin)) 259} 260 261// GetMargin is a wrapper around gtk_icon_view_get_margin(). 262func (v *IconView) GetMargin() int { 263 return int(C.gtk_icon_view_get_margin(v.native())) 264} 265 266// SetItemPadding is a wrapper around gtk_icon_view_set_item_padding(). 267func (v *IconView) SetItemPadding(itemPadding int) { 268 C.gtk_icon_view_set_item_padding(v.native(), C.gint(itemPadding)) 269} 270 271// GetItemPadding is a wrapper around gtk_icon_view_get_item_padding(). 272func (v *IconView) GetItemPadding() int { 273 return int(C.gtk_icon_view_get_item_padding(v.native())) 274} 275 276// SetActivateOnSingleClick is a wrapper around gtk_icon_view_set_activate_on_single_click(). 277func (v *IconView) SetActivateOnSingleClick(single bool) { 278 C.gtk_icon_view_set_activate_on_single_click(v.native(), gbool(single)) 279} 280 281// ActivateOnSingleClick is a wrapper around gtk_icon_view_get_activate_on_single_click(). 282func (v *IconView) ActivateOnSingleClick() bool { 283 return gobool(C.gtk_icon_view_get_activate_on_single_click(v.native())) 284} 285 286// GetCellRect is a wrapper around gtk_icon_view_get_cell_rect(). 287func (v *IconView) GetCellRect(path *TreePath, cell *CellRenderer) *gdk.Rectangle { 288 var crect C.GdkRectangle 289 290 C.gtk_icon_view_get_cell_rect(v.native(), path.native(), cell.native(), &crect) 291 292 return gdk.WrapRectangle(uintptr(unsafe.Pointer(&crect))) 293} 294 295// SelectPath is a wrapper around gtk_icon_view_select_path(). 296func (v *IconView) SelectPath(path *TreePath) { 297 C.gtk_icon_view_select_path(v.native(), path.native()) 298} 299 300// UnselectPath is a wrapper around gtk_icon_view_unselect_path(). 301func (v *IconView) UnselectPath(path *TreePath) { 302 C.gtk_icon_view_unselect_path(v.native(), path.native()) 303} 304 305// PathIsSelected is a wrapper around gtk_icon_view_path_is_selected(). 306func (v *IconView) PathIsSelected(path *TreePath) bool { 307 return gobool(C.gtk_icon_view_path_is_selected(v.native(), path.native())) 308} 309 310// GetSelectedItems is a wrapper around gtk_icon_view_unselect_path(). 311func (v *IconView) GetSelectedItems() *glib.List { 312 clist := C.gtk_icon_view_get_selected_items(v.native()) 313 if clist == nil { 314 return nil 315 } 316 317 glist := glib.WrapList(uintptr(unsafe.Pointer(clist))) 318 glist.DataWrapper(func(ptr unsafe.Pointer) interface{} { 319 return &TreePath{(*C.GtkTreePath)(ptr)} 320 }) 321 runtime.SetFinalizer(glist, func(glist *glib.List) { 322 glist.FreeFull(func(item interface{}) { 323 path := item.(*TreePath) 324 C.gtk_tree_path_free(path.GtkTreePath) 325 }) 326 }) 327 328 return glist 329} 330 331// SelectAll is a wrapper around gtk_icon_view_select_all(). 332func (v *IconView) SelectAll() { 333 C.gtk_icon_view_select_all(v.native()) 334} 335 336// UnselectAll is a wrapper around gtk_icon_view_unselect_all(). 337func (v *IconView) UnselectAll() { 338 C.gtk_icon_view_unselect_all(v.native()) 339} 340 341// ItemActivated is a wrapper around gtk_icon_view_item_activated(). 342func (v *IconView) ItemActivated(path *TreePath) { 343 C.gtk_icon_view_item_activated(v.native(), path.native()) 344} 345 346// ScrollToPath is a wrapper around gtk_icon_view_scroll_to_path(). 347func (v *IconView) ScrollToPath(path *TreePath, useAlign bool, rowAlign, colAlign float64) { 348 C.gtk_icon_view_scroll_to_path(v.native(), path.native(), gbool(useAlign), 349 C.gfloat(rowAlign), C.gfloat(colAlign)) 350} 351 352// GetVisibleRange is a wrapper around gtk_icon_view_get_visible_range(). 353func (v *IconView) GetVisibleRange() (*TreePath, *TreePath) { 354 var ( 355 cpathStart, cpathEnd *C.GtkTreePath 356 pathStart, pathEnd *TreePath 357 ) 358 359 C.gtk_icon_view_get_visible_range(v.native(), &cpathStart, &cpathEnd) 360 361 if cpathStart != nil { 362 pathStart = &TreePath{cpathStart} 363 runtime.SetFinalizer(pathStart, (*TreePath).free) 364 } 365 366 if cpathEnd != nil { 367 pathEnd = &TreePath{cpathEnd} 368 runtime.SetFinalizer(pathEnd, (*TreePath).free) 369 } 370 371 return pathStart, pathEnd 372} 373 374// SetTooltipItem is a wrapper around gtk_icon_view_set_tooltip_item(). 375func (v *IconView) SetTooltipItem(tooltip *Tooltip, path *TreePath) { 376 C.gtk_icon_view_set_tooltip_item(v.native(), tooltip.native(), path.native()) 377} 378 379// SetTooltipCell is a wrapper around gtk_icon_view_set_tooltip_cell(). 380func (v *IconView) SetTooltipCell(tooltip *Tooltip, path *TreePath, cell *CellRenderer) { 381 C.gtk_icon_view_set_tooltip_cell(v.native(), tooltip.native(), path.native(), cell.native()) 382} 383 384// GetTooltipContext is a wrapper around gtk_icon_view_get_tooltip_context(). 385func (v *IconView) GetTooltipContext(x, y int, keyboardTip bool) (*TreeModel, *TreePath, *TreeIter) { 386 var ( 387 cmodel *C.GtkTreeModel 388 cpath *C.GtkTreePath 389 citer *C.GtkTreeIter 390 model *TreeModel 391 path *TreePath 392 iter *TreeIter 393 ) 394 395 px := C.gint(x) 396 py := C.gint(y) 397 if !gobool(C.gtk_icon_view_get_tooltip_context(v.native(), 398 &px, 399 &py, 400 gbool(keyboardTip), 401 &cmodel, 402 &cpath, 403 citer, 404 )) { 405 return nil, nil, nil 406 } 407 408 if cmodel != nil { 409 model = wrapTreeModel(glib.Take(unsafe.Pointer(cmodel))) 410 } 411 412 if cpath != nil { 413 path = &TreePath{cpath} 414 runtime.SetFinalizer(path, (*TreePath).free) 415 } 416 417 if citer != nil { 418 iter = &TreeIter{*citer} 419 runtime.SetFinalizer(iter, (*TreeIter).free) 420 } 421 422 return model, path, iter 423} 424 425// SetTooltipColumn is a wrapper around gtk_icon_view_set_tooltip_column(). 426func (v *IconView) SetTooltipColumn(column int) { 427 C.gtk_icon_view_set_tooltip_column(v.native(), C.gint(column)) 428} 429 430// GetTooltipColumn is a wrapper around gtk_icon_view_get_tooltip_column(). 431func (v *IconView) GetTooltipColumn() int { 432 return int(C.gtk_icon_view_get_tooltip_column(v.native())) 433} 434 435// GetItemRow is a wrapper around gtk_icon_view_get_item_row(). 436func (v *IconView) GetItemRow(path *TreePath) int { 437 return int(C.gtk_icon_view_get_item_row(v.native(), path.native())) 438} 439 440/* 441func (v *IconView) EnableModelDragSource() {} 442 443func (v *IconView) EnableModelDragDest() {} 444 445func (v *IconView) UnsetModelDragSource() {} 446 447func (v *IconView) UnsetModelDragDest() {} 448*/ 449 450// SetReorderable is a wrapper around gtk_icon_view_set_reorderable(). 451func (v *IconView) SetReorderable(reorderable bool) { 452 C.gtk_icon_view_set_reorderable(v.native(), gbool(reorderable)) 453} 454 455// GetReorderable is a wrapper around gtk_icon_view_get_reorderable(). 456func (v *IconView) GetReorderable() bool { 457 return gobool(C.gtk_icon_view_get_reorderable(v.native())) 458} 459 460/* 461func (v *IconView) SetDragDestItem() {} 462 463func (v *IconView) GetDragDestItem() {} 464 465func (v *IconView) GetDestItemAtPos() {} 466 467func (v *IconView) CreateDragIcon() {} 468*/ 469