diff options
| author | Pietro Gagliardi <[email protected]> | 2014-02-25 00:48:23 -0500 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-02-25 00:49:08 -0500 |
| commit | d8c0df79939c93bbe008049b84ea6f8ff85afe8b (patch) | |
| tree | 79fa3aab8f14366b2cd571ea8c9d7c2f5e1dd4e1 | |
| parent | 23a40cae26552a381a25cd862af98cd0e9aa23bf (diff) | |
Added GTK+ implementation of ProgressBar and added a ProgressBar to the test program.
| -rw-r--r-- | gtkcalls_unix.go | 9 | ||||
| -rw-r--r-- | gtkcasts_unix.go | 8 | ||||
| -rw-r--r-- | main_test.go | 20 | ||||
| -rw-r--r-- | progressbar.go | 2 | ||||
| -rw-r--r-- | sysdata_unix.go | 91 |
5 files changed, 88 insertions, 42 deletions
diff --git a/gtkcalls_unix.go b/gtkcalls_unix.go index 7731212..14bcdfc 100644 --- a/gtkcalls_unix.go +++ b/gtkcalls_unix.go @@ -189,3 +189,12 @@ func gtk_widget_get_preferred_size(w *gtkWidget) (minWidth int, minHeight int, n return int(minimum.width), int(minimum.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) +} diff --git a/gtkcasts_unix.go b/gtkcasts_unix.go index 5d88e1e..75f2d96 100644 --- a/gtkcasts_unix.go +++ b/gtkcasts_unix.go @@ -107,3 +107,11 @@ func fromgtklabel(x *C.GtkLabel) *gtkWidget { func togtklabel(what *gtkWidget) *C.GtkLabel { 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)) +} diff --git a/main_test.go b/main_test.go index 3917fef..c778d2a 100644 --- a/main_test.go +++ b/main_test.go @@ -21,7 +21,12 @@ func TestMain(t *testing.T) { s3 := NewStack(Horizontal, l, b3) s3.SetStretchy(0) // 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") lb2 := NewListbox(false, "Select", "Only", "One", "Please") i := 0 @@ -71,8 +76,19 @@ mainloop: cb2.SelectedIndex(), cb2.Selection(), lb1.SelectedIndices(), lb1.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() } - diff --git a/progressbar.go b/progressbar.go index cad08e3..c8b2bbf 100644 --- a/progressbar.go +++ b/progressbar.go @@ -2,7 +2,7 @@ package ui import ( - // ... + "sync" ) // A ProgressBar is a horizontal rectangle that fills up from left to right to indicate the progress of a long-running task. diff --git a/sysdata_unix.go b/sysdata_unix.go index 650acc6..e45ddec 100644 --- a/sysdata_unix.go +++ b/sysdata_unix.go @@ -30,11 +30,11 @@ type classData struct { } var classTypes = [nctypes]*classData{ - c_window: &classData{ - make: gtk_window_new, - setText: gtk_window_set_title, - text: gtk_window_get_title, - signals: map[string]func(*sysData) func() bool{ + c_window: &classData{ + make: gtk_window_new, + setText: gtk_window_set_title, + text: gtk_window_get_title, + signals: map[string]func(*sysData) func() bool{ "delete-event": func(s *sysData) func() bool { return func() bool { s.signal() @@ -57,11 +57,11 @@ var classTypes = [nctypes]*classData{ }, }, }, - c_button: &classData{ - make: gtk_button_new, - setText: gtk_button_set_label, - text: gtk_button_get_label, - signals: map[string]func(*sysData) func() bool{ + c_button: &classData{ + make: gtk_button_new, + setText: gtk_button_set_label, + text: gtk_button_get_label, + signals: map[string]func(*sysData) func() bool{ "clicked": func(s *sysData) func() bool { return func() bool { s.signal() @@ -70,41 +70,44 @@ var classTypes = [nctypes]*classData{ }, }, }, - c_checkbox: &classData{ - make: gtk_check_button_new, - setText: gtk_button_set_label, + c_checkbox: &classData{ + make: gtk_check_button_new, + setText: gtk_button_set_label, }, - c_combobox: &classData{ - make: gtk_combo_box_text_new, - makeAlt: gtk_combo_box_text_new_with_entry, + c_combobox: &classData{ + make: gtk_combo_box_text_new, + makeAlt: gtk_combo_box_text_new_with_entry, // TODO setText - text: gtk_combo_box_text_get_active_text, - append: gtk_combo_box_text_append_text, - insert: gtk_combo_box_text_insert_text, - selected: gtk_combo_box_get_active, - delete: gtk_combo_box_text_remove, + text: gtk_combo_box_text_get_active_text, + append: gtk_combo_box_text_append_text, + insert: gtk_combo_box_text_insert_text, + selected: gtk_combo_box_get_active, + delete: gtk_combo_box_text_remove, }, - c_lineedit: &classData{ - make: gtk_entry_new, - setText: gtk_entry_set_text, - text: gtk_entry_get_text, + c_lineedit: &classData{ + make: gtk_entry_new, + setText: gtk_entry_set_text, + text: gtk_entry_get_text, }, - c_label: &classData{ - make: gtk_label_new, - setText: gtk_label_set_text, - text: gtk_label_get_text, + c_label: &classData{ + make: gtk_label_new, + setText: gtk_label_set_text, + text: gtk_label_get_text, }, - c_listbox: &classData{ - make: gListboxNewSingle, - makeAlt: gListboxNewMulti, + c_listbox: &classData{ + make: gListboxNewSingle, + makeAlt: gListboxNewMulti, // TODO setText - text: gListboxText, - append: gListboxAppend, - insert: gListboxInsert, - selected: gListboxSelected, - selMulti: gListboxSelectedMulti, - smtexts: gListboxSelMultiTexts, - delete: gListboxDelete, + text: gListboxText, + append: gListboxAppend, + insert: gListboxInsert, + selected: gListboxSelected, + selMulti: gListboxSelectedMulti, + smtexts: gListboxSelMultiTexts, + delete: gListboxDelete, + }, + c_progressbar: &classData{ + make: gtk_progress_bar_new, }, } @@ -287,3 +290,13 @@ func (s *sysData) delete(index int) error { <-ret 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 +} |
