66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
// 30 july 2014
|
|
|
|
package ui
|
|
|
|
// #include "winapi_windows.h"
|
|
import "C"
|
|
|
|
type controlPrivate interface {
|
|
// TODO
|
|
Control
|
|
}
|
|
|
|
type controlbase struct {
|
|
hwnd C.HWND
|
|
parent C.HWND // for Tab and Group
|
|
textlen C.LONG
|
|
}
|
|
|
|
type controlParent struct {
|
|
hwnd C.HWND
|
|
}
|
|
|
|
func newControl(class C.LPWSTR, style C.DWORD, extstyle C.DWORD) *controlbase {
|
|
c := new(controlbase)
|
|
// TODO rename to newWidget
|
|
c.hwnd = C.newWidget(class, style, extstyle)
|
|
return c
|
|
}
|
|
|
|
// TODO for maximum correctness these shouldn't take controlbases... but then the amount of duplicated code would skyrocket
|
|
|
|
func basesetParent(c *controlbase, p *controlParent) {
|
|
C.controlSetParent(c.hwnd, p.hwnd)
|
|
c.parent = p.hwnd
|
|
}
|
|
|
|
func basecontainerShow(c *controlbase) {
|
|
C.ShowWindow(c.hwnd, C.SW_SHOW)
|
|
}
|
|
|
|
func basecontainerHide(c *controlbase) {
|
|
C.ShowWindow(c.hwnd, C.SW_HIDE)
|
|
}
|
|
|
|
// don't specify basepreferredSize; it is custom on ALL controls
|
|
|
|
func basecommitResize(c *controlbase, a *allocation, d *sizing) {
|
|
C.moveWindow(c.hwnd, C.int(a.x), C.int(a.y), C.int(a.width), C.int(a.height))
|
|
}
|
|
|
|
func basegetAuxResizeInfo(c controlPrivate, d *sizing) {
|
|
// do nothing
|
|
}
|
|
|
|
// these are provided for convenience
|
|
|
|
func (c *controlbase) text() string {
|
|
return getWindowText(c.hwnd)
|
|
}
|
|
|
|
func (c *controlbase) setText(text string) {
|
|
t := toUTF16(text)
|
|
C.setWindowText(c.hwnd, t)
|
|
c.textlen = C.controlTextLength(c.hwnd, t)
|
|
}
|