Added GTK+ implementation of ProgressBar and added a ProgressBar to the test program.

This commit is contained in:
Pietro Gagliardi 2014-02-25 00:48:23 -05:00
parent 23a40cae26
commit d8c0df7993
5 changed files with 88 additions and 42 deletions

View File

@ -189,3 +189,12 @@ func gtk_widget_get_preferred_size(w *gtkWidget) (minWidth int, minHeight int, n
return int(minimum.width), int(minimum.height), return int(minimum.width), int(minimum.height),
int(natural.width), int(natural.height) int(natural.width), int(natural.height)
} }
func gtk_progress_bar_new() *gtkWidget {
return fromgtkwidget(C.gtk_progress_bar_new())
}
func gtk_progress_bar_set_fraction(w *gtkWidget, percent int) {
p := C.gdouble(percent) / 100
C.gtk_progress_bar_set_fraction(togtkprogressbar(w), p)
}

View File

@ -107,3 +107,11 @@ func fromgtklabel(x *C.GtkLabel) *gtkWidget {
func togtklabel(what *gtkWidget) *C.GtkLabel { func togtklabel(what *gtkWidget) *C.GtkLabel {
return (*C.GtkLabel)(unsafe.Pointer(what)) return (*C.GtkLabel)(unsafe.Pointer(what))
} }
func fromgtkprogressbar(x *C.GtkProgressBar) *gtkWidget {
return (*gtkWidget)(unsafe.Pointer(x))
}
func togtkprogressbar(what *gtkWidget) *C.GtkProgressBar {
return (*C.GtkProgressBar)(unsafe.Pointer(what))
}

View File

@ -21,7 +21,12 @@ func TestMain(t *testing.T) {
s3 := NewStack(Horizontal, l, b3) s3 := NewStack(Horizontal, l, b3)
s3.SetStretchy(0) s3.SetStretchy(0)
// s3.SetStretchy(1) // s3.SetStretchy(1)
s0 := NewStack(Vertical, s2, c, cb1, cb2, e, s3) pbar := NewProgressBar()
prog := 0
incButton := NewButton("Inc")
decButton := NewButton("Dec")
sincdec := NewStack(Horizontal, incButton, decButton)
s0 := NewStack(Vertical, s2, c, cb1, cb2, e, s3, pbar, sincdec)
lb1 := NewListbox(true, "Select One", "Or More", "To Continue") lb1 := NewListbox(true, "Select One", "Or More", "To Continue")
lb2 := NewListbox(false, "Select", "Only", "One", "Please") lb2 := NewListbox(false, "Select", "Only", "One", "Please")
i := 0 i := 0
@ -71,8 +76,19 @@ mainloop:
cb2.SelectedIndex(), cb2.Selection(), cb2.SelectedIndex(), cb2.Selection(),
lb1.SelectedIndices(), lb1.Selection(), lb1.SelectedIndices(), lb1.Selection(),
lb2.SelectedIndices(), lb2.Selection()) lb2.SelectedIndices(), lb2.Selection())
case <-incButton.Clicked:
prog++
if prog > 100 {
prog = 100
}
pbar.SetProgress(prog)
case <-decButton.Clicked:
prog--
if prog < 0 {
prog = 0
}
pbar.SetProgress(prog)
} }
} }
w.Hide() w.Hide()
} }

View File

@ -2,7 +2,7 @@
package ui package ui
import ( import (
// ... "sync"
) )
// A ProgressBar is a horizontal rectangle that fills up from left to right to indicate the progress of a long-running task. // A ProgressBar is a horizontal rectangle that fills up from left to right to indicate the progress of a long-running task.

View File

@ -30,11 +30,11 @@ type classData struct {
} }
var classTypes = [nctypes]*classData{ var classTypes = [nctypes]*classData{
c_window: &classData{ c_window: &classData{
make: gtk_window_new, make: gtk_window_new,
setText: gtk_window_set_title, setText: gtk_window_set_title,
text: gtk_window_get_title, text: gtk_window_get_title,
signals: map[string]func(*sysData) func() bool{ signals: map[string]func(*sysData) func() bool{
"delete-event": func(s *sysData) func() bool { "delete-event": func(s *sysData) func() bool {
return func() bool { return func() bool {
s.signal() s.signal()
@ -57,11 +57,11 @@ var classTypes = [nctypes]*classData{
}, },
}, },
}, },
c_button: &classData{ c_button: &classData{
make: gtk_button_new, make: gtk_button_new,
setText: gtk_button_set_label, setText: gtk_button_set_label,
text: gtk_button_get_label, text: gtk_button_get_label,
signals: map[string]func(*sysData) func() bool{ signals: map[string]func(*sysData) func() bool{
"clicked": func(s *sysData) func() bool { "clicked": func(s *sysData) func() bool {
return func() bool { return func() bool {
s.signal() s.signal()
@ -70,41 +70,44 @@ var classTypes = [nctypes]*classData{
}, },
}, },
}, },
c_checkbox: &classData{ c_checkbox: &classData{
make: gtk_check_button_new, make: gtk_check_button_new,
setText: gtk_button_set_label, setText: gtk_button_set_label,
}, },
c_combobox: &classData{ c_combobox: &classData{
make: gtk_combo_box_text_new, make: gtk_combo_box_text_new,
makeAlt: gtk_combo_box_text_new_with_entry, makeAlt: gtk_combo_box_text_new_with_entry,
// TODO setText // TODO setText
text: gtk_combo_box_text_get_active_text, text: gtk_combo_box_text_get_active_text,
append: gtk_combo_box_text_append_text, append: gtk_combo_box_text_append_text,
insert: gtk_combo_box_text_insert_text, insert: gtk_combo_box_text_insert_text,
selected: gtk_combo_box_get_active, selected: gtk_combo_box_get_active,
delete: gtk_combo_box_text_remove, delete: gtk_combo_box_text_remove,
}, },
c_lineedit: &classData{ c_lineedit: &classData{
make: gtk_entry_new, make: gtk_entry_new,
setText: gtk_entry_set_text, setText: gtk_entry_set_text,
text: gtk_entry_get_text, text: gtk_entry_get_text,
}, },
c_label: &classData{ c_label: &classData{
make: gtk_label_new, make: gtk_label_new,
setText: gtk_label_set_text, setText: gtk_label_set_text,
text: gtk_label_get_text, text: gtk_label_get_text,
}, },
c_listbox: &classData{ c_listbox: &classData{
make: gListboxNewSingle, make: gListboxNewSingle,
makeAlt: gListboxNewMulti, makeAlt: gListboxNewMulti,
// TODO setText // TODO setText
text: gListboxText, text: gListboxText,
append: gListboxAppend, append: gListboxAppend,
insert: gListboxInsert, insert: gListboxInsert,
selected: gListboxSelected, selected: gListboxSelected,
selMulti: gListboxSelectedMulti, selMulti: gListboxSelectedMulti,
smtexts: gListboxSelMultiTexts, smtexts: gListboxSelMultiTexts,
delete: gListboxDelete, delete: gListboxDelete,
},
c_progressbar: &classData{
make: gtk_progress_bar_new,
}, },
} }
@ -287,3 +290,13 @@ func (s *sysData) delete(index int) error {
<-ret <-ret
return nil return nil
} }
func (s *sysData) setProgress(percent int) {
ret := make(chan struct{})
defer close(ret)
uitask <- func() {
gtk_progress_bar_set_fraction(s.widget, percent)
ret <- struct{}{}
}
<-ret
}