From d0fe74d60382dd27dec59d286ca5098ee5dceb6c Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Sun, 26 Aug 2018 13:48:13 -0400 Subject: Migrated datetimepicker.go and brought stddialogs.go back again. --- BBB_GOFILES/datetimepicker.go | 107 ------------------------------------------ BBB_GOFILES/stddialogs.go | 41 ---------------- datetimepicker.go | 97 ++++++++++++++++++++++++++++++++++++++ pkgui.c | 15 ++++++ pkgui.h | 6 +++ stddialogs.go | 41 ++++++++++++++++ 6 files changed, 159 insertions(+), 148 deletions(-) delete mode 100644 BBB_GOFILES/datetimepicker.go delete mode 100644 BBB_GOFILES/stddialogs.go create mode 100644 datetimepicker.go create mode 100644 stddialogs.go diff --git a/BBB_GOFILES/datetimepicker.go b/BBB_GOFILES/datetimepicker.go deleted file mode 100644 index 3436b3c..0000000 --- a/BBB_GOFILES/datetimepicker.go +++ /dev/null @@ -1,107 +0,0 @@ -// 12 december 2015 - -package ui - -import ( - "time" - "unsafe" -) - -// #include -// #include -// #include "ui.h" -// #include "util.h" -// static inline struct tm *allocTimeStruct(void) -// { -// return (struct tm *) pkguiAlloc(sizeof (struct tm)); -// } -// extern void doDateTimePickerOnChanged(uiDateTimePicker *, void *); -// // see golang/go#19835 -// typedef void (*dtpCallback)(uiDateTimePicker *, void *); -import "C" - -// DateTimePicker is a Control that represents a field where the user -// can enter a date and/or a time. -type DateTimePicker struct { - ControlBase - d *C.uiDateTimePicker - onChanged func(*DateTimePicker) -} - -func finishNewDateTimePicker(dd *C.uiDateTimePicker) *DateTimePicker { - d := new(DateTimePicker) - - d.d = dd - - C.uiDateTimePickerOnChanged(d.d, C.dtpCallback(C.doDateTimePickerOnChanged), nil) - - d.ControlBase = NewControlBase(d, uintptr(unsafe.Pointer(d.d))) - return d -} - -// NewDateTimePicker creates a new DateTimePicker that shows -// both a date and a time. -func NewDateTimePicker() *DateTimePicker { - return finishNewDateTimePicker(C.uiNewDateTimePicker()) -} - -// NewDatePicker creates a new DateTimePicker that shows -// only a date. -func NewDatePicker() *DateTimePicker { - return finishNewDateTimePicker(C.uiNewDatePicker()) -} - -// NewTimePicker creates a new DateTimePicker that shows -// only a time. -func NewTimePicker() *DateTimePicker { - return finishNewDateTimePicker(C.uiNewTimePicker()) -} - -// Time returns the time stored in the uiDateTimePicker. -// The time is assumed to be local time. -func (d *DateTimePicker) Time() time.Time { - tm := C.allocTimeStruct() - defer C.free(unsafe.Pointer(tm)) - C.uiDateTimePickerTime(d.d, tm) - return time.Date( - int(tm.tm_year + 1900), - time.Month(tm.tm_mon + 1), - int(tm.tm_mday), - int(tm.tm_hour), - int(tm.tm_min), - int(tm.tm_sec), - 0, time.Local) -} - -// SetTime sets the time in the DateTimePicker to t. -// t's components are read as-is via t.Date() and t.Clock(); -// no time zone manipulations are done. -func (d *DateTimePicker) SetTime(t time.Time) { - tm := C.allocTimeStruct() - defer C.free(unsafe.Pointer(tm)) - year, mon, mday := t.Date() - tm.tm_year = C.int(year - 1900) - tm.tm_mon = C.int(mon - 1) - tm.tm_mday = C.int(mday) - hour, min, sec := t.Clock() - tm.tm_hour = C.int(hour) - tm.tm_min = C.int(min) - tm.tm_sec = C.int(sec) - tm.tm_isdst = -1 - C.uiDateTimePickerSetTime(d.d, tm) -} - -// OnChanged registers f to be run when the user changes the time -// in the DateTimePicker. Only one function can be registered at a -// time. -func (d *DateTimePicker) OnChanged(f func(*DateTimePicker)) { - d.onChanged = f -} - -//export doDateTimePickerOnChanged -func doDateTimePickerOnChanged(dd *C.uiDateTimePicker, data unsafe.Pointer) { - d := ControlFromLibui(uintptr(unsafe.Pointer(dd))).(*DateTimePicker) - if d.onChanged != nil { - d.onChanged(d) - } -} diff --git a/BBB_GOFILES/stddialogs.go b/BBB_GOFILES/stddialogs.go deleted file mode 100644 index 0ff8a01..0000000 --- a/BBB_GOFILES/stddialogs.go +++ /dev/null @@ -1,41 +0,0 @@ -// 20 december 2015 - -package ui - -// #include "ui.h" -import "C" - -// TODO -func MsgBoxError(w *Window, title string, description string) { - ctitle := C.CString(title) - defer freestr(ctitle) - cdescription := C.CString(description) - defer freestr(cdescription) - C.uiMsgBoxError(w.w, ctitle, cdescription) -} - -func OpenFile(w *Window) string { - cname := C.uiOpenFile(w.w) - if cname == nil { - return "" - } - defer C.uiFreeText(cname) - return C.GoString(cname) -} - -func SaveFile(w *Window) string { - cname := C.uiSaveFile(w.w) - if cname == nil { - return "" - } - defer C.uiFreeText(cname) - return C.GoString(cname) -} - -func MsgBox(w *Window, title string, description string) { - ctitle := C.CString(title) - defer freestr(ctitle) - cdescription := C.CString(description) - defer freestr(cdescription) - C.uiMsgBox(w.w, ctitle, cdescription) -} diff --git a/datetimepicker.go b/datetimepicker.go new file mode 100644 index 0000000..986b43f --- /dev/null +++ b/datetimepicker.go @@ -0,0 +1,97 @@ +// 12 december 2015 + +package ui + +import ( + "time" + "unsafe" +) + +// #include "pkgui.h" +import "C" + +// DateTimePicker is a Control that represents a field where the user +// can enter a date and/or a time. +type DateTimePicker struct { + ControlBase + d *C.uiDateTimePicker + onChanged func(*DateTimePicker) +} + +func finishNewDateTimePicker(dd *C.uiDateTimePicker) *DateTimePicker { + d := new(DateTimePicker) + + d.d = dd + + C.pkguiDateTimePickerOnChanged(d.d) + + d.ControlBase = NewControlBase(d, uintptr(unsafe.Pointer(d.d))) + return d +} + +// NewDateTimePicker creates a new DateTimePicker that shows +// both a date and a time. +func NewDateTimePicker() *DateTimePicker { + return finishNewDateTimePicker(C.uiNewDateTimePicker()) +} + +// NewDatePicker creates a new DateTimePicker that shows +// only a date. +func NewDatePicker() *DateTimePicker { + return finishNewDateTimePicker(C.uiNewDatePicker()) +} + +// NewTimePicker creates a new DateTimePicker that shows +// only a time. +func NewTimePicker() *DateTimePicker { + return finishNewDateTimePicker(C.uiNewTimePicker()) +} + +// Time returns the time stored in the uiDateTimePicker. +// The time is assumed to be local time. +func (d *DateTimePicker) Time() time.Time { + tm := C.pkguiAllocTime() + defer C.pkguiFreeTime(tm) + C.uiDateTimePickerTime(d.d, tm) + return time.Date( + int(tm.tm_year + 1900), + time.Month(tm.tm_mon + 1), + int(tm.tm_mday), + int(tm.tm_hour), + int(tm.tm_min), + int(tm.tm_sec), + 0, time.Local) +} + +// SetTime sets the time in the DateTimePicker to t. +// t's components are read as-is via t.Date() and t.Clock(); +// no time zone manipulations are done. +func (d *DateTimePicker) SetTime(t time.Time) { + tm := C.pkguiAllocTime() + defer C.pkguiFreeTime(tm) + year, mon, mday := t.Date() + tm.tm_year = C.int(year - 1900) + tm.tm_mon = C.int(mon - 1) + tm.tm_mday = C.int(mday) + hour, min, sec := t.Clock() + tm.tm_hour = C.int(hour) + tm.tm_min = C.int(min) + tm.tm_sec = C.int(sec) + tm.tm_isdst = -1 + C.uiDateTimePickerSetTime(d.d, tm) +} + +// OnChanged registers f to be run when the user changes the time +// in the DateTimePicker. Only one function can be registered at a +// time. +func (d *DateTimePicker) OnChanged(f func(*DateTimePicker)) { + d.onChanged = f +} + +//export pkguiDoDateTimePickerOnChanged +func pkguiDoDateTimePickerOnChanged(dd *C.uiDateTimePicker, data unsafe.Pointer) { + d := ControlFromLibui(uintptr(unsafe.Pointer(dd))).(*DateTimePicker) + if d.onChanged != nil { + d.onChanged(d) + } +} diff --git a/pkgui.c b/pkgui.c index cdc2a3f..18f1a5b 100644 --- a/pkgui.c +++ b/pkgui.c @@ -42,6 +42,21 @@ void pkguiComboboxOnSelected(uiCombobox *c) uiComboboxOnSelected(c, pkguiDoComboboxOnSelected, NULL); } +void pkguiDateTimePickerOnChanged(uiDateTimePicker *d) +{ + uiDateTimePickerOnChanged(d, pkguiDoDateTimePickerOnChanged, NULL); +} + +struct tm *pkguiAllocTime(void) +{ + return (struct tm *) pkguiAlloc(sizeof (struct tm)); +} + +void pkguiFreeTime(struct tm *t) +{ + free(t); +} + void pkguiEditableComboboxOnChanged(uiEditableCombobox *c) { uiEditableComboboxOnChanged(c, pkguiDoEditableComboboxOnChanged, NULL); diff --git a/pkgui.h b/pkgui.h index 418f781..e9739a8 100644 --- a/pkgui.h +++ b/pkgui.h @@ -3,6 +3,7 @@ #define pkguiHFileIncluded #include +#include #include "ui.h" // main.go @@ -23,6 +24,11 @@ extern void pkguiCheckboxOnToggled(uiCheckbox *c); // combobox.go extern void pkguiComboboxOnSelected(uiCombobox *c); +// datetimepicker.go +extern void pkguiDateTimePickerOnChanged(uiDateTimePicker *d); +extern struct tm *pkguiAllocTime(void); +extern void pkguiFreeTime(struct tm *t); + // editablecombobox.go extern void pkguiEditableComboboxOnChanged(uiEditableCombobox *c); diff --git a/stddialogs.go b/stddialogs.go new file mode 100644 index 0000000..7767dd7 --- /dev/null +++ b/stddialogs.go @@ -0,0 +1,41 @@ +// 20 december 2015 + +package ui + +// #include "pkgui.h" +import "C" + +// TODO +func MsgBoxError(w *Window, title string, description string) { + ctitle := C.CString(title) + defer freestr(ctitle) + cdescription := C.CString(description) + defer freestr(cdescription) + C.uiMsgBoxError(w.w, ctitle, cdescription) +} + +func OpenFile(w *Window) string { + cname := C.uiOpenFile(w.w) + if cname == nil { + return "" + } + defer C.uiFreeText(cname) + return C.GoString(cname) +} + +func SaveFile(w *Window) string { + cname := C.uiSaveFile(w.w) + if cname == nil { + return "" + } + defer C.uiFreeText(cname) + return C.GoString(cname) +} + +func MsgBox(w *Window, title string, description string) { + ctitle := C.CString(title) + defer freestr(ctitle) + cdescription := C.CString(description) + defer freestr(cdescription) + C.uiMsgBox(w.w, ctitle, cdescription) +} -- cgit v1.2.3