summaryrefslogtreecommitdiff
path: root/sysdata_unix.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-02-16 15:55:51 -0500
committerPietro Gagliardi <[email protected]>2014-02-16 15:55:51 -0500
commit21c1ec6f83fb2d5cb80c02c0cd7ed51bb4e06e3a (patch)
tree754d4e8e6cffb459b1eed11a9acd46b676f6a090 /sysdata_unix.go
parent3a99ee65697ba39397b437c5545530b0b948ce4e (diff)
Added the beginning of the Unix (GTK+) implementation.
Diffstat (limited to 'sysdata_unix.go')
-rw-r--r--sysdata_unix.go168
1 files changed, 168 insertions, 0 deletions
diff --git a/sysdata_unix.go b/sysdata_unix.go
new file mode 100644
index 0000000..363e3c8
--- /dev/null
+++ b/sysdata_unix.go
@@ -0,0 +1,168 @@
+// +build !windows,!darwin,!plan9
+
+// 16 february 2014
+//package ui
+package main
+
+import (
+ "fmt"
+)
+
+type sysData struct {
+ cSysData
+
+ widget *gtkWidget
+ container *gtkWidget // for moving
+}
+
+type classData struct {
+ make func() *gtkWidget
+ setText func(widget *gtkWidget, text string)
+}
+
+var classTypes = [nctypes]*classData{
+ c_window: &classData{
+ make: gtk_window_new,
+ setText: gtk_window_set_title,
+ },
+ c_button: &classData{
+// make: gtk_button_new,
+ },
+ c_checkbox: &classData{
+ },
+ c_combobox: &classData{
+ },
+ c_lineedit: &classData{
+ },
+ c_label: &classData{
+ },
+ c_listbox: &classData{
+ },
+}
+
+func (s *sysData) make(initText string, window *sysData) error {
+ ct := classTypes[s.ctype]
+ if ct.make == nil { // not yet implemented
+ println(s.ctype, "not implemented")
+ return nil
+ }
+ ret := make(chan *gtkWidget)
+ defer close(ret)
+ uitask <- func() {
+ ret <- ct.make()
+ }
+ s.widget = <-ret
+println(s.widget)
+ if window == nil {
+ uitask <- func() {
+ fixed := gtk_fixed_new()
+ gtk_container_add(s.widget, fixed)
+ ret <- fixed
+ }
+ s.container = <-ret
+ } else {
+ s.container = window.container
+ }
+ err := s.setText(initText)
+ if err != nil {
+ return fmt.Errorf("error setting initial text of new window/control: %v", err)
+ }
+ return nil
+}
+
+func (s *sysData) show() error {
+ ret := make(chan struct{})
+ defer close(ret)
+ uitask <- func() {
+ gtk_widget_show(s.widget)
+ ret <- struct{}{}
+ }
+ <-ret
+ return nil
+}
+
+func (s *sysData) hide() error {
+ ret := make(chan struct{})
+ defer close(ret)
+ uitask <- func() {
+ gtk_widget_hide(s.widget)
+ ret <- struct{}{}
+ }
+ <-ret
+ return nil
+}
+
+func (s *sysData) setText(text string) error {
+if classTypes[s.ctype] == nil || classTypes[s.ctype].setText == nil { return nil }
+ ret := make(chan struct{})
+ defer close(ret)
+ uitask <- func() {
+ classTypes[s.ctype].setText(s.widget, text)
+ ret <- struct{}{}
+ }
+ <-ret
+ return nil
+}
+
+func (s *sysData) setRect(x int, y int, width int, height int) error {
+ ret := make(chan struct{})
+ defer close(ret)
+ uitask <- func() {
+ gtk_fixed_put(s.container, s.widget, x, y)
+ gtk_widget_set_size_request(s.widget, width, height)
+ ret <- struct{}{}
+ }
+ <-ret
+ return nil
+}
+
+func (s *sysData) isChecked() bool {
+ // TODO
+ return false
+}
+
+func (s *sysData) text() string {
+ // TODO
+ return ""
+}
+
+func (s *sysData) append(what string) error {
+ // TODO
+ return nil
+}
+
+func (s *sysData) insertBefore(what string, before int) error {
+ // TODO
+ return nil
+}
+
+func (s *sysData) selectedIndex() int {
+ // TODO
+ return -1
+}
+
+func (s *sysData) selectedIndices() []int {
+ // TODO
+ return nil
+}
+
+func (s *sysData) selectedTexts() []string {
+ // TODO
+ return nil
+}
+
+func (s *sysData) setWindowSize(width int, height int) error {
+ ret := make(chan struct{})
+ defer close(ret)
+ uitask <- func() {
+ gtk_window_resize(s.widget, width, height)
+ ret <- struct{}{}
+ }
+ <-ret
+ return nil
+}
+
+func (s *sysData) delete(index int) error {
+ // TODO
+ return nil
+}