diff options
| author | Pietro Gagliardi <[email protected]> | 2014-08-20 14:17:00 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-08-20 14:17:00 -0400 |
| commit | ac6d0429f1befcceb94bca7ad57b19bd11afd1b6 (patch) | |
| tree | 1461f3d8ee9b388c5a3c86bb08181982feba1d74 | |
| parent | e06e32715552764769e85c72a43bf5ee78e5f555 (diff) | |
Implemented TextField.Invalid() on Windows.
| -rw-r--r-- | redo/basicctrls_windows.c | 20 | ||||
| -rw-r--r-- | redo/textfield_unix.go | 1 | ||||
| -rw-r--r-- | redo/textfield_windows.go | 6 | ||||
| -rw-r--r-- | redo/winapi_windows.h | 2 |
4 files changed, 28 insertions, 1 deletions
diff --git a/redo/basicctrls_windows.c b/redo/basicctrls_windows.c index 1676776..c82c5d6 100644 --- a/redo/basicctrls_windows.c +++ b/redo/basicctrls_windows.c @@ -104,3 +104,23 @@ void setTextFieldSubclass(HWND hwnd, void *data) if ((*fv_SetWindowSubclass)(hwnd, textfieldSubProc, 0, (DWORD_PTR) data) == FALSE) xpanic("error subclassing TextField to give it its own event handler", GetLastError()); } + +void textfieldSetAndShowInvalidBalloonTip(HWND hwnd, WCHAR *text) +{ + EDITBALLOONTIP ti; + + ZeroMemory(&ti, sizeof (EDITBALLOONTIP)); + ti.cbStruct = sizeof (EDITBALLOONTIP); + ti.pszTitle = L"Invalid Input"; // TODO verify + ti.pszText = text; + ti.ttiIcon = TTI_ERROR; + if (SendMessageW(hwnd, EM_SHOWBALLOONTIP, 0, (LPARAM) (&ti)) == FALSE) + xpanic("error showing TextField.Invalid() balloon tip", GetLastError()); + MessageBeep(0xFFFFFFFF); // TODO can this return an error? +} + +void textfieldHideInvalidBalloonTip(HWND hwnd) +{ + if (SendMessageW(hwnd, EM_HIDEBALLOONTIP, 0, 0) == FALSE) + xpanic("error hiding TextField.Invalid() balloon tip", GetLastError()); +} diff --git a/redo/textfield_unix.go b/redo/textfield_unix.go index e9624ee..cef2765 100644 --- a/redo/textfield_unix.go +++ b/redo/textfield_unix.go @@ -71,6 +71,7 @@ func (t *textfield) Invalid(reason string) { creason := togstr(reason) defer freegstr(creason) C.gtk_entry_set_icon_tooltip_text(t.entry, C.GTK_ENTRY_ICON_SECONDARY, creason) + // TODO beep } //export textfieldChanged diff --git a/redo/textfield_windows.go b/redo/textfield_windows.go index 7345205..5f89691 100644 --- a/redo/textfield_windows.go +++ b/redo/textfield_windows.go @@ -51,7 +51,11 @@ func (t *textfield) OnChanged(f func()) { } func (t *textfield) Invalid(reason string) { - // TODO + if reason == "" { + C.textfieldHideInvalidBalloonTip(t._hwnd) + return + } + C.textfieldSetAndShowInvalidBalloonTip(t._hwnd, toUTF16(reason)) } //export textfieldChanged diff --git a/redo/winapi_windows.h b/redo/winapi_windows.h index ea9fe17..5787331 100644 --- a/redo/winapi_windows.h +++ b/redo/winapi_windows.h @@ -64,6 +64,8 @@ extern void setCheckboxSubclass(HWND, void *); extern BOOL checkboxChecked(HWND); extern void checkboxSetChecked(HWND, BOOL); extern void setTextFieldSubclass(HWND, void *); +extern void textfieldSetAndShowInvalidBalloonTip(HWND, WCHAR *); +extern void textfieldHideInvalidBalloonTip(HWND); // init_windows.c extern HINSTANCE hInstance; |
