Added GTK+ implementation of ProgressBar and added a ProgressBar to the test program.
This commit is contained in:
parent
23a40cae26
commit
d8c0df7993
|
@ -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)
|
||||||
|
}
|
||||||
|
|
|
@ -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))
|
||||||
|
}
|
||||||
|
|
20
main_test.go
20
main_test.go
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue