Added the GTK+ implementation of Window, added the Window constructors, and rewrote the GTK+ Button constructor to use Requests.
This commit is contained in:
parent
7966d70230
commit
c0c38ac8f5
|
@ -24,13 +24,19 @@ type button struct {
|
|||
button *C.GtkButton
|
||||
}
|
||||
|
||||
func newButton(text string) Button {
|
||||
ctext := togstr(text)
|
||||
defer freegstr(ctext)
|
||||
widget := C.gtk_button_new_with_label(ctext)
|
||||
return &button{
|
||||
widget: newWidget(widget),
|
||||
button: (*C.GtkButton)(unsafe.Pointer(widget)),
|
||||
func newButton(text string) *Request {
|
||||
c := make(chan interface{})
|
||||
return &Request{
|
||||
op: func() {
|
||||
ctext := togstr(text)
|
||||
defer freegstr(ctext)
|
||||
widget := C.gtk_button_new_with_label(ctext)
|
||||
c <- &button{
|
||||
widget: newWidget(widget),
|
||||
button: (*C.GtkButton)(unsafe.Pointer(widget)),
|
||||
}
|
||||
},
|
||||
resp: c,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,3 +31,16 @@ type Window interface {
|
|||
// TODO SetSize (TODO remove?)
|
||||
// TODO Center
|
||||
}
|
||||
|
||||
// NewWindow returns a Request to create a new Window with the given title text and size.
|
||||
func NewWindow(title string, width int, height int) *Request {
|
||||
return newWindow(title, width, height)
|
||||
}
|
||||
|
||||
// GetNewWindow is like NewWindow but sends the Request along the given Doer and returns the resultant Window.
|
||||
// Example:
|
||||
// w := ui.GetNewWindow(ui.Do, "Main Window")
|
||||
func GetNewWindow(c Doer, title string, width int, height int) Window {
|
||||
c <- newWindow(title, width, height)
|
||||
return (<-c.resp).(Window)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
// 7 july 2014
|
||||
|
||||
package ui
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// #include "gtk_unix.h"
|
||||
import "C"
|
||||
|
||||
type window struct {
|
||||
widget *C.GtkWidget
|
||||
container *C.GtkContainer
|
||||
bin *C.GtkBin
|
||||
window *C.GtkWindow
|
||||
}
|
||||
|
||||
func newWindow(title string, width int, height int) *Request {
|
||||
c := make(chan interface{})
|
||||
return &Request{
|
||||
op: func() {
|
||||
widget := C.gtk_window_new(C.GTK_WINDOW_TOPLEVEL)
|
||||
ctext := togstr(text)
|
||||
defer freegstr(ctext)
|
||||
w := &window{
|
||||
widget: widget,
|
||||
container: (*C.GtkContainer)(unsafe.Pointer(widget)),
|
||||
bin: (*C.GtkBin)(unsafe.Pointer(widget)),
|
||||
window: (*C.GtkWindow)(unsafe.Pointer(widget)),
|
||||
}
|
||||
C.gtk_window_set_title(w.window, ctext)
|
||||
// TODO size
|
||||
// TODO content
|
||||
c <- w
|
||||
},
|
||||
resp: c,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *window) SetControl(c Control) *Request {
|
||||
c := make(chan interface{})
|
||||
return &Request{
|
||||
op: func() {
|
||||
// TODO unparent
|
||||
// TODO reparent
|
||||
c <- struct{}{}
|
||||
},
|
||||
done: c,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *window) Title() *Request {
|
||||
c := make(chan interface{})
|
||||
return &Request{
|
||||
op: func() {
|
||||
c <- fromgstr(C.gtk_window_get_title(w.window))
|
||||
},
|
||||
resp: c,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *window) SetTitle(title string) *Request {
|
||||
c := make(chan interface{})
|
||||
return &Request{
|
||||
op: func() {
|
||||
ctext := togstr(text)
|
||||
defer freegstr(ctext)
|
||||
C.gtk_window_set_title(w.window, ctext)
|
||||
c <- struct{}{}
|
||||
},
|
||||
resp: c,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (w *window) Show() *Request {
|
||||
c := make(chan interface{})
|
||||
return &Request{
|
||||
op: func() {
|
||||
C.gtk_widget_show_all(w.widget)
|
||||
c <- struct{}{}
|
||||
},
|
||||
resp: c,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *window) Hide() *Request {
|
||||
c := make(chan interface{})
|
||||
return &Request{
|
||||
op: func() {
|
||||
C.gtk_widget_hide(w.widget)
|
||||
c <- struct{}{}
|
||||
},
|
||||
resp: c,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *window) Close() *Request {
|
||||
c := make(chan interface{})
|
||||
return &Request{
|
||||
op: func() {
|
||||
C.gtk_widget_destroy(w.widget)
|
||||
c <- struct{}{}
|
||||
},
|
||||
resp: c,
|
||||
}
|
||||
}
|
||||
|
||||
// TODO OnClosing
|
Loading…
Reference in New Issue