diff options
| author | Pietro Gagliardi <[email protected]> | 2018-08-11 18:39:18 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2018-08-11 18:39:18 -0400 |
| commit | 485c946ad8961f836edb191eed60248f2ca6b617 (patch) | |
| tree | 05da1a286c8dc8dfd0adc57f154de57c8fe7128b /AAA_GOFILES/datetimepicker.go | |
| parent | 6700b2ec544d813c91e5493e43e6b8c973aaf236 (diff) | |
Moved all the Go files back out of the way. There needs to be a better way.
Diffstat (limited to 'AAA_GOFILES/datetimepicker.go')
| -rw-r--r-- | AAA_GOFILES/datetimepicker.go | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/AAA_GOFILES/datetimepicker.go b/AAA_GOFILES/datetimepicker.go new file mode 100644 index 0000000..ff98ced --- /dev/null +++ b/AAA_GOFILES/datetimepicker.go @@ -0,0 +1,160 @@ +// 12 december 2015 + +package ui + +import ( + "time" + "unsafe" +) + +// #include <time.h> +// #include "ui.h" +// static inline struct tm *allocTimeStruct(void) +// { +// /* TODO handle error */ +// return (struct tm *) malloc(sizeof (struct tm)); +// } +// extern void doDateTimePickerChanged(uiDateTimePicker *, void *); +// static inline void realuiDateTimePickerOnChanged(uiDateTimePicker *d) +// { +// uiDateTimePickerOnChanged(d, doDateTimePickerOnChanged, NULL); +// } +import "C" + +// DateTimePicker is a Control that represents a field where the user +// can enter a date and/or a time. +type DateTimePicker struct { + c *C.uiControl + d *C.uiDateTimePicker + + onChanged func(*DateTimePicker) +} + +// NewDateTimePicker creates a new DateTimePicker that shows +// both a date and a time. +func NewDateTimePicker() *DateTimePicker { + d := new(DateTimePicker) + + d.d = C.uiNewDateTimePicker() + d.c = (*C.uiControl)(unsafe.Pointer(d.d)) + + C.realuiDateTimePickerOnChanged(d.d) + + return d +} + +// NewDatePicker creates a new DateTimePicker that shows +// only a date. +func NewDatePicker() *DateTimePicker { + d := new(DateTimePicker) + + d.d = C.uiNewDatePicker() + d.c = (*C.uiControl)(unsafe.Pointer(d.d)) + + C.realuiDateTimePickerOnChanged(d.d) + + return d +} + +// NewTimePicker creates a new DateTimePicker that shows +// only a time. +func NewTimePicker() *DateTimePicker { + d := new(DateTimePicker) + + d.d = C.uiNewTimePicker() + d.c = (*C.uiControl)(unsafe.Pointer(d.d)) + + C.realuiDateTimePickerOnChanged(d.d) + + return d +} + +// Destroy destroys the DateTimePicker. +func (d *DateTimePicker) Destroy() { + C.uiControlDestroy(d.c) +} + +// LibuiControl returns the libui uiControl pointer that backs +// the Window. This is only used by package ui itself and should +// not be called by programs. +func (d *DateTimePicker) LibuiControl() uintptr { + return uintptr(unsafe.Pointer(d.c)) +} + +// Handle returns the OS-level handle associated with this DateTimePicker. +// On Windows this is an HWND of a standard Windows API +// DATETIMEPICK_CLASS class (as provided by Common Controls +// version 6). +// On GTK+ this is a pointer to a libui-internal class. +// On OS X this is a pointer to a NSDatePicker. +func (d *DateTimePicker) Handle() uintptr { + return uintptr(C.uiControlHandle(d.c)) +} + +// Show shows the DateTimePicker. +func (d *DateTimePicker) Show() { + C.uiControlShow(d.c) +} + +// Hide hides the DateTimePicker. +func (d *DateTimePicker) Hide() { + C.uiControlHide(d.c) +} + +// Enable enables the DateTimePicker. +func (d *DateTimePicker) Enable() { + C.uiControlEnable(d.c) +} + +// Disable disables the DateTimePicker. +func (d *DateTimePicker) Disable() { + C.uiControlDisable(d.c) +} + +// 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; 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.Time() + 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 := dateTimePickers[dd] + if d.onChanged != nil { + d.onChanged(d) + } +} |
