1// Same copyright and license as the rest of the files in this project 2// This file contains accelerator related functions and structures 3 4// +build !gtk_3_6,!gtk_3_8 5// not use this: go build -tags gtk_3_8'. Otherwise, if no build tags are used, GTK 3.10 6 7package gtk 8 9// #include <stdlib.h> 10// #include <gtk/gtk.h> 11// #include "gtk_since_3_10.go.h" 12import "C" 13import ( 14 "errors" 15 "unsafe" 16 17 "github.com/gotk3/gotk3/cairo" 18 "github.com/gotk3/gotk3/gdk" 19 "github.com/gotk3/gotk3/glib" 20 "github.com/gotk3/gotk3/internal/callback" 21 "github.com/gotk3/gotk3/pango" 22) 23 24func init() { 25 tm := []glib.TypeMarshaler{ 26 // Enums 27 {glib.Type(C.gtk_revealer_transition_type_get_type()), marshalRevealerTransitionType}, 28 {glib.Type(C.gtk_stack_transition_type_get_type()), marshalStackTransitionType}, 29 30 // Objects/Interfaces 31 {glib.Type(C.gtk_header_bar_get_type()), marshalHeaderBar}, 32 {glib.Type(C.gtk_list_box_get_type()), marshalListBox}, 33 {glib.Type(C.gtk_list_box_row_get_type()), marshalListBoxRow}, 34 {glib.Type(C.gtk_revealer_get_type()), marshalRevealer}, 35 {glib.Type(C.gtk_search_bar_get_type()), marshalSearchBar}, 36 {glib.Type(C.gtk_stack_get_type()), marshalStack}, 37 {glib.Type(C.gtk_stack_switcher_get_type()), marshalStackSwitcher}, 38 } 39 glib.RegisterGValueMarshalers(tm) 40 41 //Contribute to casting 42 for k, v := range map[string]WrapFn{ 43 "GtkHeaderBar": wrapHeaderBar, 44 "GtkListBox": wrapListBox, 45 "GtkListBoxRow": wrapListBoxRow, 46 "GtkRevealer": wrapRevealer, 47 "GtkSearchBar": wrapSearchBar, 48 "GtkStack": wrapStack, 49 } { 50 WrapMap[k] = v 51 } 52} 53 54/* 55 * Constants 56 */ 57 58const ( 59 ALIGN_BASELINE Align = C.GTK_ALIGN_BASELINE 60) 61 62// ImageType 63const ( 64 IMAGE_SURFACE ImageType = C.GTK_IMAGE_SURFACE 65) 66 67// RevealerTransitionType is a representation of GTK's GtkRevealerTransitionType. 68type RevealerTransitionType int 69 70const ( 71 REVEALER_TRANSITION_TYPE_NONE RevealerTransitionType = C.GTK_REVEALER_TRANSITION_TYPE_NONE 72 REVEALER_TRANSITION_TYPE_CROSSFADE RevealerTransitionType = C.GTK_REVEALER_TRANSITION_TYPE_CROSSFADE 73 REVEALER_TRANSITION_TYPE_SLIDE_RIGHT RevealerTransitionType = C.GTK_REVEALER_TRANSITION_TYPE_SLIDE_RIGHT 74 REVEALER_TRANSITION_TYPE_SLIDE_LEFT RevealerTransitionType = C.GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT 75 REVEALER_TRANSITION_TYPE_SLIDE_UP RevealerTransitionType = C.GTK_REVEALER_TRANSITION_TYPE_SLIDE_UP 76 REVEALER_TRANSITION_TYPE_SLIDE_DOWN RevealerTransitionType = C.GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN 77) 78 79func marshalRevealerTransitionType(p uintptr) (interface{}, error) { 80 c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p))) 81 return RevealerTransitionType(c), nil 82} 83 84// StackTransitionType is a representation of GTK's GtkStackTransitionType. 85type StackTransitionType int 86 87const ( 88 STACK_TRANSITION_TYPE_NONE StackTransitionType = C.GTK_STACK_TRANSITION_TYPE_NONE 89 STACK_TRANSITION_TYPE_CROSSFADE StackTransitionType = C.GTK_STACK_TRANSITION_TYPE_CROSSFADE 90 STACK_TRANSITION_TYPE_SLIDE_RIGHT StackTransitionType = C.GTK_STACK_TRANSITION_TYPE_SLIDE_RIGHT 91 STACK_TRANSITION_TYPE_SLIDE_LEFT StackTransitionType = C.GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT 92 STACK_TRANSITION_TYPE_SLIDE_UP StackTransitionType = C.GTK_STACK_TRANSITION_TYPE_SLIDE_UP 93 STACK_TRANSITION_TYPE_SLIDE_DOWN StackTransitionType = C.GTK_STACK_TRANSITION_TYPE_SLIDE_DOWN 94 STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT StackTransitionType = C.GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT 95 STACK_TRANSITION_TYPE_SLIDE_UP_DOWN StackTransitionType = C.GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN 96) 97 98func marshalStackTransitionType(p uintptr) (interface{}, error) { 99 c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p))) 100 return StackTransitionType(c), nil 101} 102 103/* 104 * GtkWidget 105 */ 106 107// TODO: 108// gtk_widget_get_composite_name(). 109 110/* 111 * GtkImage 112 */ 113 114// ImageNewFromSurface is a wrapper around gtk_image_new_from_surface(). 115func ImageNewFromSurface(surface *cairo.Surface) (*Image, error) { 116 c := C.gtk_image_new_from_surface((*C.cairo_surface_t)(surface.GetCSurface())) 117 if c == nil { 118 return nil, nilPtrErr 119 } 120 obj := glib.Take(unsafe.Pointer(c)) 121 return wrapImage(obj), nil 122} 123 124// SetFromSurface is a wrapper around gtk_image_set_from_surface(). 125func (v *Image) SetFromSurface(surface *cairo.Surface) { 126 csurface := (*C.cairo_surface_t)(surface.GetCSurface()) 127 C.gtk_image_set_from_surface(v.native(), csurface) 128} 129 130/* 131 * GtkIconTheme 132 */ 133 134// HasIcon is a wrapper around gtk_icon_theme_load_icon_for_scale(). 135func (v *IconTheme) LoadIconForScale(iconName string, size, scale int, flags IconLookupFlags) (*gdk.Pixbuf, error) { 136 cstr := C.CString(iconName) 137 defer C.free(unsafe.Pointer(cstr)) 138 139 var err *C.GError = nil 140 c := C.gtk_icon_theme_load_icon_for_scale(v.Theme, (*C.gchar)(cstr), C.gint(size), C.gint(scale), C.GtkIconLookupFlags(flags), &err) 141 if c == nil { 142 defer C.g_error_free(err) 143 return nil, errors.New(goString(err.message)) 144 } 145 return &gdk.Pixbuf{glib.Take(unsafe.Pointer(c))}, nil 146} 147 148/* 149 * GtkEntry 150 */ 151 152// GetTabs is a wrapper around gtk_entry_get_tabs(). 153func (v *Entry) GetTabs() (*pango.TabArray, error) { 154 c := C.gtk_entry_get_tabs(v.native()) 155 if c == nil { 156 return nil, nilPtrErr 157 } 158 return pango.WrapTabArray(uintptr(unsafe.Pointer(c))), nil 159} 160 161// SetTabs is a wrapper around gtk_entry_set_tabs(). 162func (v *Entry) SetTabs(tabs *pango.TabArray) { 163 C.gtk_entry_set_tabs(v.native(), (*C.PangoTabArray)(unsafe.Pointer(tabs.Native()))) 164} 165 166/* 167 * GtkButton 168 */ 169 170// ButtonNewFromIconName is a wrapper around gtk_button_new_from_icon_name(). 171func ButtonNewFromIconName(iconName string, size IconSize) (*Button, error) { 172 cstr := C.CString(iconName) 173 defer C.free(unsafe.Pointer(cstr)) 174 c := C.gtk_button_new_from_icon_name((*C.gchar)(cstr), 175 C.GtkIconSize(size)) 176 if c == nil { 177 return nil, nilPtrErr 178 } 179 return wrapButton(glib.Take(unsafe.Pointer(c))), nil 180} 181 182/* 183 * GtkBox 184 */ 185 186// TODO: 187// gtk_box_get_baseline_position(). 188// gtk_box_set_baseline_position(). 189 190/* 191 * GtkGrid 192 */ 193 194// RemoveRow is a wrapper around gtk_grid_remove_row(). 195func (v *Grid) RemoveRow(position int) { 196 C.gtk_grid_remove_row(v.native(), C.gint(position)) 197} 198 199// RemoveColumn is a wrapper around gtk_grid_remove_column(). 200func (v *Grid) RemoveColumn(position int) { 201 C.gtk_grid_remove_column(v.native(), C.gint(position)) 202} 203 204// TODO: 205// gtk_grid_get_baseline_row(). 206// gtk_grid_set_baseline_row(). 207// gtk_grid_get_row_baseline_position(). 208// gtk_grid_set_row_baseline_position(). 209 210/* 211 * GtkHeaderBar 212 */ 213 214// HeaderBar is a representation of GtkHeaderBar 215type HeaderBar struct { 216 Container 217} 218 219// native returns a pointer to the underlying GtkHeaderBar. 220func (v *HeaderBar) native() *C.GtkHeaderBar { 221 if v == nil || v.GObject == nil { 222 return nil 223 } 224 p := unsafe.Pointer(v.GObject) 225 return C.toGtkHeaderBar(p) 226} 227 228func marshalHeaderBar(p uintptr) (interface{}, error) { 229 c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p))) 230 obj := glib.Take(unsafe.Pointer(c)) 231 return wrapHeaderBar(obj), nil 232} 233 234func wrapHeaderBar(obj *glib.Object) *HeaderBar { 235 if obj == nil { 236 return nil 237 } 238 239 return &HeaderBar{Container{Widget{glib.InitiallyUnowned{obj}}}} 240} 241 242// HeaderBarNew is a wrapper around gtk_header_bar_new(). 243func HeaderBarNew() (*HeaderBar, error) { 244 c := C.gtk_header_bar_new() 245 if c == nil { 246 return nil, nilPtrErr 247 } 248 return wrapHeaderBar(glib.Take(unsafe.Pointer(c))), nil 249} 250 251// SetTitle is a wrapper around gtk_header_bar_set_title(). 252func (v *HeaderBar) SetTitle(title string) { 253 cstr := C.CString(title) 254 defer C.free(unsafe.Pointer(cstr)) 255 C.gtk_header_bar_set_title(v.native(), (*C.gchar)(cstr)) 256} 257 258// GetTitle is a wrapper around gtk_header_bar_get_title(). 259func (v *HeaderBar) GetTitle() string { 260 cstr := C.gtk_header_bar_get_title(v.native()) 261 return C.GoString((*C.char)(cstr)) 262} 263 264// SetSubtitle is a wrapper around gtk_header_bar_set_subtitle(). 265func (v *HeaderBar) SetSubtitle(subtitle string) { 266 cstr := C.CString(subtitle) 267 defer C.free(unsafe.Pointer(cstr)) 268 C.gtk_header_bar_set_subtitle(v.native(), (*C.gchar)(cstr)) 269} 270 271// GetSubtitle is a wrapper around gtk_header_bar_get_subtitle(). 272func (v *HeaderBar) GetSubtitle() string { 273 cstr := C.gtk_header_bar_get_subtitle(v.native()) 274 return C.GoString((*C.char)(cstr)) 275} 276 277// SetCustomTitle is a wrapper around gtk_header_bar_set_custom_title(). 278func (v *HeaderBar) SetCustomTitle(titleWidget IWidget) { 279 C.gtk_header_bar_set_custom_title(v.native(), titleWidget.toWidget()) 280} 281 282// GetCustomTitle is a wrapper around gtk_header_bar_get_custom_title(). 283func (v *HeaderBar) GetCustomTitle() (IWidget, error) { 284 c := C.gtk_header_bar_get_custom_title(v.native()) 285 if c == nil { 286 return nil, nil 287 } 288 return castWidget(c) 289} 290 291// PackStart is a wrapper around gtk_header_bar_pack_start(). 292func (v *HeaderBar) PackStart(child IWidget) { 293 C.gtk_header_bar_pack_start(v.native(), child.toWidget()) 294} 295 296// PackEnd is a wrapper around gtk_header_bar_pack_end(). 297func (v *HeaderBar) PackEnd(child IWidget) { 298 C.gtk_header_bar_pack_end(v.native(), child.toWidget()) 299} 300 301// SetShowCloseButton is a wrapper around gtk_header_bar_set_show_close_button(). 302func (v *HeaderBar) SetShowCloseButton(setting bool) { 303 C.gtk_header_bar_set_show_close_button(v.native(), gbool(setting)) 304} 305 306// GetShowCloseButton is a wrapper around gtk_header_bar_get_show_close_button(). 307func (v *HeaderBar) GetShowCloseButton() bool { 308 c := C.gtk_header_bar_get_show_close_button(v.native()) 309 return gobool(c) 310} 311 312/* 313 * GtkLabel 314 */ 315 316// GetLines is a wrapper around gtk_label_get_lines(). 317func (v *Label) GetLines() int { 318 c := C.gtk_label_get_lines(v.native()) 319 return int(c) 320} 321 322// SetLines is a wrapper around gtk_label_set_lines(). 323func (v *Label) SetLines(lines int) { 324 C.gtk_label_set_lines(v.native(), C.gint(lines)) 325} 326 327/* 328 * GtkListBox 329 */ 330 331// ListBox is a representation of GTK's GtkListBox. 332type ListBox struct { 333 Container 334} 335 336// native returns a pointer to the underlying GtkListBox. 337func (v *ListBox) native() *C.GtkListBox { 338 if v == nil || v.GObject == nil { 339 return nil 340 } 341 p := unsafe.Pointer(v.GObject) 342 return C.toGtkListBox(p) 343} 344 345func marshalListBox(p uintptr) (interface{}, error) { 346 c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p))) 347 obj := glib.Take(unsafe.Pointer(c)) 348 return wrapListBox(obj), nil 349} 350 351func wrapListBox(obj *glib.Object) *ListBox { 352 if obj == nil { 353 return nil 354 } 355 356 return &ListBox{Container{Widget{glib.InitiallyUnowned{obj}}}} 357} 358 359// ListBoxNew is a wrapper around gtk_list_box_new(). 360func ListBoxNew() (*ListBox, error) { 361 c := C.gtk_list_box_new() 362 if c == nil { 363 return nil, nilPtrErr 364 } 365 return wrapListBox(glib.Take(unsafe.Pointer(c))), nil 366} 367 368// Prepend is a wrapper around gtk_list_box_prepend(). 369func (v *ListBox) Prepend(child IWidget) { 370 C.gtk_list_box_prepend(v.native(), child.toWidget()) 371} 372 373// Insert is a wrapper around gtk_list_box_insert(). 374func (v *ListBox) Insert(child IWidget, position int) { 375 C.gtk_list_box_insert(v.native(), child.toWidget(), C.gint(position)) 376} 377 378// SelectRow is a wrapper around gtk_list_box_select_row(). 379func (v *ListBox) SelectRow(row *ListBoxRow) { 380 C.gtk_list_box_select_row(v.native(), row.native()) 381} 382 383// GetSelectedRow is a wrapper around gtk_list_box_get_selected_row(). 384func (v *ListBox) GetSelectedRow() *ListBoxRow { 385 c := C.gtk_list_box_get_selected_row(v.native()) 386 if c == nil { 387 return nil 388 } 389 return wrapListBoxRow(glib.Take(unsafe.Pointer(c))) 390} 391 392// SetSelectionMode is a wrapper around gtk_list_box_set_selection_mode(). 393func (v *ListBox) SetSelectionMode(mode SelectionMode) { 394 C.gtk_list_box_set_selection_mode(v.native(), C.GtkSelectionMode(mode)) 395} 396 397// GetSelectionMode is a wrapper around gtk_list_box_get_selection_mode() 398func (v *ListBox) GetSelectionMode() SelectionMode { 399 c := C.gtk_list_box_get_selection_mode(v.native()) 400 return SelectionMode(c) 401} 402 403// SetActivateOnSingleClick is a wrapper around gtk_list_box_set_activate_on_single_click(). 404func (v *ListBox) SetActivateOnSingleClick(single bool) { 405 C.gtk_list_box_set_activate_on_single_click(v.native(), gbool(single)) 406} 407 408// GetActivateOnSingleClick is a wrapper around gtk_list_box_get_activate_on_single_click(). 409func (v *ListBox) GetActivateOnSingleClick() bool { 410 c := C.gtk_list_box_get_activate_on_single_click(v.native()) 411 return gobool(c) 412} 413 414// GetAdjustment is a wrapper around gtk_list_box_get_adjustment(). 415func (v *ListBox) GetAdjustment() *Adjustment { 416 c := C.gtk_list_box_get_adjustment(v.native()) 417 obj := glib.Take(unsafe.Pointer(c)) 418 return &Adjustment{glib.InitiallyUnowned{obj}} 419} 420 421// SetAdjustment is a wrapper around gtk_list_box_set_adjustment(). 422func (v *ListBox) SetAdjustment(adjustment *Adjustment) { 423 C.gtk_list_box_set_adjustment(v.native(), adjustment.native()) 424} 425 426// SetPlaceholder is a wrapper around gtk_list_box_set_placeholder(). 427func (v *ListBox) SetPlaceholder(placeholder IWidget) { 428 C.gtk_list_box_set_placeholder(v.native(), placeholder.toWidget()) 429} 430 431// GetRowAtIndex is a wrapper around gtk_list_box_get_row_at_index(). 432func (v *ListBox) GetRowAtIndex(index int) *ListBoxRow { 433 c := C.gtk_list_box_get_row_at_index(v.native(), C.gint(index)) 434 if c == nil { 435 return nil 436 } 437 return wrapListBoxRow(glib.Take(unsafe.Pointer(c))) 438} 439 440// GetRowAtY is a wrapper around gtk_list_box_get_row_at_y(). 441func (v *ListBox) GetRowAtY(y int) *ListBoxRow { 442 c := C.gtk_list_box_get_row_at_y(v.native(), C.gint(y)) 443 if c == nil { 444 return nil 445 } 446 return wrapListBoxRow(glib.Take(unsafe.Pointer(c))) 447} 448 449// InvalidateFilter is a wrapper around gtk_list_box_invalidate_filter(). 450func (v *ListBox) InvalidateFilter() { 451 C.gtk_list_box_invalidate_filter(v.native()) 452} 453 454// InvalidateHeaders is a wrapper around gtk_list_box_invalidate_headers(). 455func (v *ListBox) InvalidateHeaders() { 456 C.gtk_list_box_invalidate_headers(v.native()) 457} 458 459// InvalidateSort is a wrapper around gtk_list_box_invalidate_sort(). 460func (v *ListBox) InvalidateSort() { 461 C.gtk_list_box_invalidate_sort(v.native()) 462} 463 464// ListBoxFilterFunc is a representation of GtkListBoxFilterFunc 465type ListBoxFilterFunc func(row *ListBoxRow) bool 466 467// SetFilterFunc is a wrapper around gtk_list_box_set_filter_func 468func (v *ListBox) SetFilterFunc(fn ListBoxFilterFunc) { 469 C._gtk_list_box_set_filter_func(v.native(), C.gpointer(callback.Assign(fn))) 470} 471 472// ListBoxHeaderFunc is a representation of GtkListBoxUpdateHeaderFunc 473type ListBoxHeaderFunc func(row *ListBoxRow, before *ListBoxRow) 474 475// SetHeaderFunc is a wrapper around gtk_list_box_set_header_func 476func (v *ListBox) SetHeaderFunc(fn ListBoxHeaderFunc) { 477 C._gtk_list_box_set_header_func(v.native(), C.gpointer(callback.Assign(fn))) 478} 479 480// ListBoxSortFunc is a representation of GtkListBoxSortFunc 481type ListBoxSortFunc func(row1 *ListBoxRow, row2 *ListBoxRow) int 482 483// SetSortFunc is a wrapper around gtk_list_box_set_sort_func 484func (v *ListBox) SetSortFunc(fn ListBoxSortFunc) { 485 C._gtk_list_box_set_sort_func(v.native(), C.gpointer(callback.Assign(fn))) 486} 487 488// DragHighlightRow is a wrapper around gtk_list_box_drag_highlight_row() 489func (v *ListBox) DragHighlightRow(row *ListBoxRow) { 490 C.gtk_list_box_drag_highlight_row(v.native(), row.native()) 491} 492 493// DragUnhighlightRow is a wrapper around gtk_list_box_drag_unhighlight_row(). 494func (v *ListBox) DragUnhighlightRow() { 495 C.gtk_list_box_drag_unhighlight_row(v.native()) 496} 497 498/* 499 * GtkListBoxRow 500 */ 501 502// ListBoxRow is a representation of GTK's GtkListBoxRow. 503type ListBoxRow struct { 504 Bin 505} 506 507// native returns a pointer to the underlying GtkListBoxRow. 508func (v *ListBoxRow) native() *C.GtkListBoxRow { 509 if v == nil || v.GObject == nil { 510 return nil 511 } 512 p := unsafe.Pointer(v.GObject) 513 return C.toGtkListBoxRow(p) 514} 515 516func marshalListBoxRow(p uintptr) (interface{}, error) { 517 c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p))) 518 obj := glib.Take(unsafe.Pointer(c)) 519 return wrapListBoxRow(obj), nil 520} 521 522func wrapListBoxRow(obj *glib.Object) *ListBoxRow { 523 if obj == nil { 524 return nil 525 } 526 527 return &ListBoxRow{Bin{Container{Widget{glib.InitiallyUnowned{obj}}}}} 528} 529 530// ListBoxRowNew is a wrapper around gtk_list_box_row_new(). 531func ListBoxRowNew() (*ListBoxRow, error) { 532 c := C.gtk_list_box_row_new() 533 if c == nil { 534 return nil, nilPtrErr 535 } 536 return wrapListBoxRow(glib.Take(unsafe.Pointer(c))), nil 537} 538 539// Changed is a wrapper around gtk_list_box_row_changed(). 540func (v *ListBoxRow) Changed() { 541 C.gtk_list_box_row_changed(v.native()) 542} 543 544// GetHeader is a wrapper around gtk_list_box_row_get_header(). 545func (v *ListBoxRow) GetHeader() (IWidget, error) { 546 c := C.gtk_list_box_row_get_header(v.native()) 547 if c == nil { 548 return nil, nil 549 } 550 return castWidget(c) 551} 552 553// SetHeader is a wrapper around gtk_list_box_row_set_header(). 554func (v *ListBoxRow) SetHeader(header IWidget) { 555 if header == nil { 556 C.gtk_list_box_row_set_header(v.native(), nil) 557 return 558 } 559 C.gtk_list_box_row_set_header(v.native(), header.toWidget()) 560} 561 562// GetIndex is a wrapper around gtk_list_box_row_get_index() 563func (v *ListBoxRow) GetIndex() int { 564 c := C.gtk_list_box_row_get_index(v.native()) 565 return int(c) 566} 567 568/* 569 * GtkPlacesSidebar 570 */ 571 572// TODO: 573// gtk_places_sidebar_new(). 574// gtk_places_sidebar_set_open_flags(). 575// gtk_places_sidebar_get_open_flags(). 576// gtk_places_sidebar_set_location(). 577// gtk_places_sidebar_get_location(). 578// gtk_places_sidebar_set_show_desktop(). 579// gtk_places_sidebar_get_show_desktop(). 580// gtk_places_sidebar_add_shortcut(). 581// gtk_places_sidebar_remove_shortcut(). 582// gtk_places_sidebar_list_shortcuts(). 583// gtk_places_sidebar_get_nth_bookmark(). 584// enum GtkPlacesOpenFlags 585 586/* 587 * GtkRevealer 588 */ 589 590// Revealer is a representation of GTK's GtkRevealer 591type Revealer struct { 592 Bin 593} 594 595// native returns a pointer to the underlying GtkRevealer. 596func (v *Revealer) native() *C.GtkRevealer { 597 if v == nil || v.GObject == nil { 598 return nil 599 } 600 p := unsafe.Pointer(v.GObject) 601 return C.toGtkRevealer(p) 602} 603 604func marshalRevealer(p uintptr) (interface{}, error) { 605 c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p))) 606 obj := glib.Take(unsafe.Pointer(c)) 607 return wrapRevealer(obj), nil 608} 609 610func wrapRevealer(obj *glib.Object) *Revealer { 611 if obj == nil { 612 return nil 613 } 614 615 return &Revealer{Bin{Container{Widget{glib.InitiallyUnowned{obj}}}}} 616} 617 618// RevealerNew is a wrapper around gtk_revealer_new() 619func RevealerNew() (*Revealer, error) { 620 c := C.gtk_revealer_new() 621 if c == nil { 622 return nil, nilPtrErr 623 } 624 return wrapRevealer(glib.Take(unsafe.Pointer(c))), nil 625} 626 627// GetRevealChild is a wrapper around gtk_revealer_get_reveal_child(). 628func (v *Revealer) GetRevealChild() bool { 629 c := C.gtk_revealer_get_reveal_child(v.native()) 630 return gobool(c) 631} 632 633// SetRevealChild is a wrapper around gtk_revealer_set_reveal_child(). 634func (v *Revealer) SetRevealChild(revealChild bool) { 635 C.gtk_revealer_set_reveal_child(v.native(), gbool(revealChild)) 636} 637 638// GetChildRevealed is a wrapper around gtk_revealer_get_child_revealed(). 639func (v *Revealer) GetChildRevealed() bool { 640 c := C.gtk_revealer_get_child_revealed(v.native()) 641 return gobool(c) 642} 643 644// GetTransitionDuration is a wrapper around gtk_revealer_get_transition_duration() 645func (v *Revealer) GetTransitionDuration() uint { 646 c := C.gtk_revealer_get_transition_duration(v.native()) 647 return uint(c) 648} 649 650// SetTransitionDuration is a wrapper around gtk_revealer_set_transition_duration(). 651func (v *Revealer) SetTransitionDuration(duration uint) { 652 C.gtk_revealer_set_transition_duration(v.native(), C.guint(duration)) 653} 654 655// GetTransitionType is a wrapper around gtk_revealer_get_transition_type() 656func (v *Revealer) GetTransitionType() RevealerTransitionType { 657 c := C.gtk_revealer_get_transition_type(v.native()) 658 return RevealerTransitionType(c) 659} 660 661// SetTransitionType is a wrapper around gtk_revealer_set_transition_type() 662func (v *Revealer) SetTransitionType(transition RevealerTransitionType) { 663 t := C.GtkRevealerTransitionType(transition) 664 C.gtk_revealer_set_transition_type(v.native(), t) 665} 666 667/* 668 * GtkSearchBar 669 */ 670 671// SearchBar is a representation of GTK's GtkSearchBar. 672type SearchBar struct { 673 Bin 674} 675 676// native returns a pointer to the underlying GtkSearchBar. 677func (v *SearchBar) native() *C.GtkSearchBar { 678 if v == nil || v.GObject == nil { 679 return nil 680 } 681 p := unsafe.Pointer(v.GObject) 682 return C.toGtkSearchBar(p) 683} 684 685func marshalSearchBar(p uintptr) (interface{}, error) { 686 c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p))) 687 obj := glib.Take(unsafe.Pointer(c)) 688 return wrapSearchBar(obj), nil 689} 690 691func wrapSearchBar(obj *glib.Object) *SearchBar { 692 if obj == nil { 693 return nil 694 } 695 696 return &SearchBar{Bin{Container{Widget{glib.InitiallyUnowned{obj}}}}} 697} 698 699// SearchBarNew is a wrapper around gtk_search_bar_new() 700func SearchBarNew() (*SearchBar, error) { 701 c := C.gtk_search_bar_new() 702 if c == nil { 703 return nil, nilPtrErr 704 } 705 return wrapSearchBar(glib.Take(unsafe.Pointer(c))), nil 706} 707 708// ConnectEntry is a wrapper around gtk_search_bar_connect_entry(). 709func (v *SearchBar) ConnectEntry(entry IEntry) { 710 C.gtk_search_bar_connect_entry(v.native(), entry.toEntry()) 711} 712 713// GetSearchMode is a wrapper around gtk_search_bar_get_search_mode(). 714func (v *SearchBar) GetSearchMode() bool { 715 c := C.gtk_search_bar_get_search_mode(v.native()) 716 return gobool(c) 717} 718 719// SetSearchMode is a wrapper around gtk_search_bar_set_search_mode(). 720func (v *SearchBar) SetSearchMode(searchMode bool) { 721 C.gtk_search_bar_set_search_mode(v.native(), gbool(searchMode)) 722} 723 724// GetShowCloseButton is a wrapper arounb gtk_search_bar_get_show_close_button(). 725func (v *SearchBar) GetShowCloseButton() bool { 726 c := C.gtk_search_bar_get_show_close_button(v.native()) 727 return gobool(c) 728} 729 730// SetShowCloseButton is a wrapper around gtk_search_bar_set_show_close_button() 731func (v *SearchBar) SetShowCloseButton(visible bool) { 732 C.gtk_search_bar_set_show_close_button(v.native(), gbool(visible)) 733} 734 735// HandleEvent is a wrapper around gtk_search_bar_handle_event() 736func (v *SearchBar) HandleEvent(event *gdk.Event) { 737 e := (*C.GdkEvent)(unsafe.Pointer(event.Native())) 738 C.gtk_search_bar_handle_event(v.native(), e) 739} 740 741/* 742 * GtkStack 743 */ 744 745// Stack is a representation of GTK's GtkStack. 746type Stack struct { 747 Container 748} 749 750// native returns a pointer to the underlying GtkStack. 751func (v *Stack) native() *C.GtkStack { 752 if v == nil || v.GObject == nil { 753 return nil 754 } 755 p := unsafe.Pointer(v.GObject) 756 return C.toGtkStack(p) 757} 758 759func marshalStack(p uintptr) (interface{}, error) { 760 c := C.g_value_get_object((*C.GValue)(unsafe.Pointer(p))) 761 obj := glib.Take(unsafe.Pointer(c)) 762 return wrapStack(obj), nil 763} 764 765func wrapStack(obj *glib.Object) *Stack { 766 if obj == nil { 767 return nil 768 } 769 770 return &Stack{Container{Widget{glib.InitiallyUnowned{obj}}}} 771} 772 773// StackNew is a wrapper around gtk_stack_new(). 774func StackNew() (*Stack, error) { 775 c := C.gtk_stack_new() 776 if c == nil { 777 return nil, nilPtrErr 778 } 779 return wrapStack(glib.Take(unsafe.Pointer(c))), nil 780} 781 782// AddNamed is a wrapper around gtk_stack_add_named(). 783func (v *Stack) AddNamed(child IWidget, name string) { 784 cstr := C.CString(name) 785 defer C.free(unsafe.Pointer(cstr)) 786 C.gtk_stack_add_named(v.native(), child.toWidget(), (*C.gchar)(cstr)) 787} 788 789// AddTitled is a wrapper around gtk_stack_add_titled(). 790func (v *Stack) AddTitled(child IWidget, name, title string) { 791 cName := C.CString(name) 792 defer C.free(unsafe.Pointer(cName)) 793 cTitle := C.CString(title) 794 defer C.free(unsafe.Pointer(cTitle)) 795 C.gtk_stack_add_titled(v.native(), child.toWidget(), (*C.gchar)(cName), 796 (*C.gchar)(cTitle)) 797} 798 799// SetVisibleChild is a wrapper around gtk_stack_set_visible_child(). 800func (v *Stack) SetVisibleChild(child IWidget) { 801 C.gtk_stack_set_visible_child(v.native(), child.toWidget()) 802} 803 804// GetVisibleChild is a wrapper around gtk_stack_get_visible_child(). 805func (v *Stack) GetVisibleChild() (IWidget, error) { 806 c := C.gtk_stack_get_visible_child(v.native()) 807 if c == nil { 808 return nil, nil 809 } 810 return castWidget(c) 811} 812 813// SetVisibleChildName is a wrapper around gtk_stack_set_visible_child_name(). 814func (v *Stack) SetVisibleChildName(name string) { 815 cstr := C.CString(name) 816 defer C.free(unsafe.Pointer(cstr)) 817 C.gtk_stack_set_visible_child_name(v.native(), (*C.gchar)(cstr)) 818} 819 820// GetVisibleChildName is a wrapper around gtk_stack_get_visible_child_name(). 821func (v *Stack) GetVisibleChildName() string { 822 c := C.gtk_stack_get_visible_child_name(v.native()) 823 return C.GoString((*C.char)(c)) 824} 825 826// SetVisibleChildFull is a wrapper around gtk_stack_set_visible_child_full(). 827func (v *Stack) SetVisibleChildFull(name string, transaction StackTransitionType) { 828 cstr := C.CString(name) 829 defer C.free(unsafe.Pointer(cstr)) 830 C.gtk_stack_set_visible_child_full(v.native(), (*C.gchar)(cstr), 831 C.GtkStackTransitionType(transaction)) 832} 833 834// SetHomogeneous is a wrapper around gtk_stack_set_homogeneous(). 835func (v *Stack) SetHomogeneous(homogeneous bool) { 836 C.gtk_stack_set_homogeneous(v.native(), gbool(homogeneous)) 837} 838 839// GetHomogeneous is a wrapper around gtk_stack_get_homogeneous(). 840func (v *Stack) GetHomogeneous() bool { 841 c := C.gtk_stack_get_homogeneous(v.native()) 842 return gobool(c) 843} 844 845// SetTransitionDuration is a wrapper around gtk_stack_set_transition_duration(). 846func (v *Stack) SetTransitionDuration(duration uint) { 847 C.gtk_stack_set_transition_duration(v.native(), C.guint(duration)) 848} 849 850// GetTransitionDuration is a wrapper around gtk_stack_get_transition_duration(). 851func (v *Stack) GetTransitionDuration() uint { 852 c := C.gtk_stack_get_transition_duration(v.native()) 853 return uint(c) 854} 855 856// SetTransitionType is a wrapper around gtk_stack_set_transition_type(). 857func (v *Stack) SetTransitionType(transition StackTransitionType) { 858 C.gtk_stack_set_transition_type(v.native(), C.GtkStackTransitionType(transition)) 859} 860 861// GetTransitionType is a wrapper around gtk_stack_get_transition_type(). 862func (v *Stack) GetTransitionType() StackTransitionType { 863 c := C.gtk_stack_get_transition_type(v.native()) 864 return StackTransitionType(c) 865} 866 867/* 868 * GtkBuilder 869 */ 870 871// BuilderNewFromFile is a wrapper around gtk_builder_new_from_file(). 872func BuilderNewFromFile(filePath string) (*Builder, error) { 873 cstr := C.CString(filePath) 874 defer C.free(unsafe.Pointer(cstr)) 875 876 c := C.gtk_builder_new_from_file((*C.gchar)(cstr)) 877 if c == nil { 878 return nil, nilPtrErr 879 } 880 881 obj := glib.Take(unsafe.Pointer(c)) 882 return &Builder{obj}, nil 883} 884 885// BuilderNewFromResource is a wrapper around gtk_builder_new_from_resource(). 886func BuilderNewFromResource(resourcePath string) (*Builder, error) { 887 cstr := C.CString(resourcePath) 888 defer C.free(unsafe.Pointer(cstr)) 889 890 c := C.gtk_builder_new_from_resource((*C.gchar)(cstr)) 891 if c == nil { 892 return nil, nilPtrErr 893 } 894 895 obj := glib.Take(unsafe.Pointer(c)) 896 return &Builder{obj}, nil 897} 898 899// BuilderNewFromString is a wrapper around gtk_builder_new_from_string(). 900func BuilderNewFromString(resource string) (*Builder, error) { 901 cstr := C.CString(resource) 902 defer C.free(unsafe.Pointer(cstr)) 903 904 c := C.gtk_builder_new_from_string((*C.gchar)(cstr), C.gssize(len(resource))) 905 if c == nil { 906 return nil, nilPtrErr 907 } 908 909 obj := glib.Take(unsafe.Pointer(c)) 910 return &Builder{obj}, nil 911} 912 913// TODO: 914// gtk_builder_add_callback_symbol 915// gtk_builder_add_callback_symbols 916// gtk_builder_lookup_callback_symbol 917// gtk_builder_set_application 918// gtk_builder_get_application 919