summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtkcalls_unix.go9
-rw-r--r--gtkcasts_unix.go8
-rw-r--r--main_test.go20
-rw-r--r--progressbar.go2
-rw-r--r--sysdata_unix.go91
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
+}