Added LineEdit.

This commit is contained in:
Pietro Gagliardi 2014-02-14 15:00:59 -05:00
parent fbba8a581c
commit 681afdf0ad
6 changed files with 144 additions and 73 deletions

View File

@ -200,94 +200,94 @@ const (
_CBN_SELENDCANCEL = 10 _CBN_SELENDCANCEL = 10
) )
/*
// Edit control styles. // Edit control styles.
const ( const (
// from winuser.h // from winuser.h
ES_LEFT = 0x0000 _ES_LEFT = 0x0000
ES_CENTER = 0x0001 _ES_CENTER = 0x0001
ES_RIGHT = 0x0002 _ES_RIGHT = 0x0002
ES_MULTILINE = 0x0004 _ES_MULTILINE = 0x0004
ES_UPPERCASE = 0x0008 _ES_UPPERCASE = 0x0008
ES_LOWERCASE = 0x0010 _ES_LOWERCASE = 0x0010
ES_PASSWORD = 0x0020 _ES_PASSWORD = 0x0020
ES_AUTOVSCROLL = 0x0040 _ES_AUTOVSCROLL = 0x0040
ES_AUTOHSCROLL = 0x0080 _ES_AUTOHSCROLL = 0x0080
ES_NOHIDESEL = 0x0100 _ES_NOHIDESEL = 0x0100
ES_OEMCONVERT = 0x0400 _ES_OEMCONVERT = 0x0400
ES_READONLY = 0x0800 _ES_READONLY = 0x0800
ES_WANTRETURN = 0x1000 _ES_WANTRETURN = 0x1000
ES_NUMBER = 0x2000 _ES_NUMBER = 0x2000
) )
// Edit control messages. // Edit control messages.
// TODO filter out messages not provided in windows 2000 // TODO filter out messages not provided in windows 2000
const ( const (
// from winuser.h // from winuser.h
EM_GETSEL = 0x00B0 _EM_GETSEL = 0x00B0
EM_SETSEL = 0x00B1 _EM_SETSEL = 0x00B1
EM_GETRECT = 0x00B2 _EM_GETRECT = 0x00B2
EM_SETRECT = 0x00B3 _EM_SETRECT = 0x00B3
EM_SETRECTNP = 0x00B4 _EM_SETRECTNP = 0x00B4
EM_SCROLL = 0x00B5 _EM_SCROLL = 0x00B5
EM_LINESCROLL = 0x00B6 _EM_LINESCROLL = 0x00B6
EM_SCROLLCARET = 0x00B7 _EM_SCROLLCARET = 0x00B7
EM_GETMODIFY = 0x00B8 _EM_GETMODIFY = 0x00B8
EM_SETMODIFY = 0x00B9 _EM_SETMODIFY = 0x00B9
EM_GETLINECOUNT = 0x00BA _EM_GETLINECOUNT = 0x00BA
EM_LINEINDEX = 0x00BB _EM_LINEINDEX = 0x00BB
EM_SETHANDLE = 0x00BC _EM_SETHANDLE = 0x00BC
EM_GETHANDLE = 0x00BD _EM_GETHANDLE = 0x00BD
EM_GETTHUMB = 0x00BE _EM_GETTHUMB = 0x00BE
EM_LINELENGTH = 0x00C1 _EM_LINELENGTH = 0x00C1
EM_REPLACESEL = 0x00C2 _EM_REPLACESEL = 0x00C2
EM_GETLINE = 0x00C4 _EM_GETLINE = 0x00C4
EM_LIMITTEXT = 0x00C5 _EM_LIMITTEXT = 0x00C5
EM_CANUNDO = 0x00C6 _EM_CANUNDO = 0x00C6
EM_UNDO = 0x00C7 _EM_UNDO = 0x00C7
EM_FMTLINES = 0x00C8 _EM_FMTLINES = 0x00C8
EM_LINEFROMCHAR = 0x00C9 _EM_LINEFROMCHAR = 0x00C9
EM_SETTABSTOPS = 0x00CB _EM_SETTABSTOPS = 0x00CB
EM_SETPASSWORDCHAR = 0x00CC _EM_SETPASSWORDCHAR = 0x00CC
EM_EMPTYUNDOBUFFER = 0x00CD _EM_EMPTYUNDOBUFFER = 0x00CD
EM_GETFIRSTVISIBLELINE = 0x00CE _EM_GETFIRSTVISIBLELINE = 0x00CE
EM_SETREADONLY = 0x00CF _EM_SETREADONLY = 0x00CF
EM_SETWORDBREAKPROC = 0x00D0 _EM_SETWORDBREAKPROC = 0x00D0
EM_GETWORDBREAKPROC = 0x00D1 _EM_GETWORDBREAKPROC = 0x00D1
EM_GETPASSWORDCHAR = 0x00D2 _EM_GETPASSWORDCHAR = 0x00D2
EM_SETMARGINS = 0x00D3 _EM_SETMARGINS = 0x00D3
EM_GETMARGINS = 0x00D4 _EM_GETMARGINS = 0x00D4
EM_SETLIMITTEXT = EM_LIMITTEXT // [;win40 Name change] _EM_SETLIMITTEXT = _EM_LIMITTEXT // [;win40 Name change]
EM_GETLIMITTEXT = 0x00D5 _EM_GETLIMITTEXT = 0x00D5
EM_POSFROMCHAR = 0x00D6 _EM_POSFROMCHAR = 0x00D6
EM_CHARFROMPOS = 0x00D7 _EM_CHARFROMPOS = 0x00D7
EM_SETIMESTATUS = 0x00D8 _EM_SETIMESTATUS = 0x00D8
EM_GETIMESTATUS = 0x00D9 _EM_GETIMESTATUS = 0x00D9
) )
// Edit control WM_COMMAND notifications. // Edit control WM_COMMAND notifications.
// TODO filter out notifications not provided in windows 2000 // TODO filter out notifications not provided in windows 2000
const ( const (
// from winuser.h // from winuser.h
EN_SETFOCUS = 0x0100 _EN_SETFOCUS = 0x0100
EN_KILLFOCUS = 0x0200 _EN_KILLFOCUS = 0x0200
EN_CHANGE = 0x0300 _EN_CHANGE = 0x0300
EN_UPDATE = 0x0400 _EN_UPDATE = 0x0400
EN_ERRSPACE = 0x0500 _EN_ERRSPACE = 0x0500
EN_MAXTEXT = 0x0501 _EN_MAXTEXT = 0x0501
EN_HSCROLL = 0x0601 _EN_HSCROLL = 0x0601
EN_VSCROLL = 0x0602 _EN_VSCROLL = 0x0602
EN_ALIGN_LTR_EC = 0x0700 _EN_ALIGN_LTR_EC = 0x0700
EN_ALIGN_RTL_EC = 0x0701 _EN_ALIGN_RTL_EC = 0x0701
EC_LEFTMARGIN = 0x0001 _EC_LEFTMARGIN = 0x0001
EC_RIGHTMARGIN = 0x0002 _EC_RIGHTMARGIN = 0x0002
EC_USEFONTINFO = 0xFFFF _EC_USEFONTINFO = 0xFFFF
EMSIS_COMPOSITIONSTRING = 0x0001 _EMSIS_COMPOSITIONSTRING = 0x0001
EIMES_GETCOMPSTRATONCE = 0x0001 _EIMES_GETCOMPSTRATONCE = 0x0001
EIMES_CANCELCOMPSTRINFOCUS = 0x0002 _EIMES_CANCELCOMPSTRINFOCUS = 0x0002
EIMES_COMPLETECOMPSTRKILLFOCUS = 0x0004 _EIMES_COMPLETECOMPSTRKILLFOCUS = 0x0004
) )
/*
// Listbox styles. // Listbox styles.
const ( const (
// from winuser.h // from winuser.h

58
lineedit.go Normal file
View File

@ -0,0 +1,58 @@
// 14 february 2014
//package ui
package main
import (
"sync"
)
// A LineEdit is a control which allows you to enter a single line of text.
type LineEdit struct {
// TODO Typing event
lock sync.Mutex
created bool
sysData *sysData
initText string
}
// NewLineEdit makes a new LineEdit with the specified text.
func NewLineEdit(text string) *LineEdit {
return &LineEdit{
sysData: mksysdata(c_lineedit),
initText: text,
}
}
// TODO SetText
// Text returns the LineEdit's text.
func (l *LineEdit) Text() (string, error) {
l.lock.Lock()
defer l.lock.Unlock()
if l.created {
return l.sysData.text()
}
return l.initText, nil
}
// TODO adorn errors with what failed
func (l *LineEdit) make(window *sysData) error {
l.lock.Lock()
defer l.lock.Unlock()
err := l.sysData.make(l.initText, 300, 300, window)
if err != nil {
return err
}
l.created = true
return nil
}
func (l *LineEdit) setRect(x int, y int, width int, height int) error {
l.lock.Lock()
defer l.lock.Unlock()
return l.sysData.setRect(x, y, width, height)
}

View File

@ -12,7 +12,8 @@ func main() {
c := NewCheckbox("Check Me") c := NewCheckbox("Check Me")
cb1 := NewCombobox(true, "You can edit me!", "Yes you can!", "Yes you will!") cb1 := NewCombobox(true, "You can edit me!", "Yes you can!", "Yes you will!")
cb2 := NewCombobox(false, "You can't edit me!", "No you can't!", "No you won't!") cb2 := NewCombobox(false, "You can't edit me!", "No you can't!", "No you won't!")
s := NewStack(Vertical, b, c, cb1, cb2) e := NewLineEdit("Enter text here too")
s := NewStack(Vertical, b, c, cb1, cb2, e)
err := w.Open(s) err := w.Open(s)
if err != nil { if err != nil {
panic(err) panic(err)
@ -32,7 +33,11 @@ mainloop:
if err != nil { if err != nil {
panic(err) panic(err)
} }
err = w.SetTitle(fmt.Sprintf("%v | %s | %s", c.Checked(), cs1, cs2)) et, err := e.Text()
if err != nil {
panic(err)
}
err = w.SetTitle(fmt.Sprintf("%v | %s | %s | %s", c.Checked(), cs1, cs2, et))
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -43,6 +43,7 @@ const (
c_button c_button
c_checkbox c_checkbox
c_combobox c_combobox
c_lineedit
nctypes nctypes
) )

View File

@ -56,6 +56,11 @@ var classTypes = [nctypes]*classData{
insertAfterMsg: _CB_INSERTSTRING, insertAfterMsg: _CB_INSERTSTRING,
deleteMsg: _CB_DELETESTRING, deleteMsg: _CB_DELETESTRING,
}, },
c_lineedit: &classData{
name: "EDIT",
style: _ES_AUTOHSCROLL | _WS_BORDER | controlstyle,
xstyle: 0 | controlxstyle,
},
} }
func (s *sysData) addChild(child *sysData) _HMENU { func (s *sysData) addChild(child *sysData) _HMENU {

View File

@ -6,6 +6,8 @@ so I don't forget:
- determine if a selection in a non-editable combobox has been made - determine if a selection in a non-editable combobox has been made
- see if we really need to track errors on Combobox.Selection() - see if we really need to track errors on Combobox.Selection()
- in fact, see if we really need to track errors on a lot of things... - in fact, see if we really need to track errors on a lot of things...
- password entry fields, character-limited entry fields, numeric entry fields, multiline entry fields
- possible rename of LineEdit?
super ultra important things: super ultra important things:
- the windows build appears to be unstable: - the windows build appears to be unstable: