diff options
| author | trustable-code <krauter.simon@arcor.de> | 2019-09-23 23:07:18 +0200 |
|---|---|---|
| committer | trustable-code <krauter.simon@arcor.de> | 2019-09-23 23:07:18 +0200 |
| commit | 9d9babe7491f791545ddb7730a573e9b21cd3fa6 (patch) | |
| tree | 75d42e1e10eccb196127b48c43e455678f690578 /src/nigui/private/windows | |
| parent | 20b7e0cdcbcf571c4bed1dc0460feff73be110e0 (diff) | |
| download | NiGui-9d9babe7491f791545ddb7730a573e9b21cd3fa6.tar.gz NiGui-9d9babe7491f791545ddb7730a573e9b21cd3fa6.zip | |
Extend Checkbox and add Gtk implementation
- Add `checked=` to set the status
- Add `onToggle` event to react on toggle by the user
- Toggling works also by Space and Enter
Diffstat (limited to 'src/nigui/private/windows')
| -rwxr-xr-x | src/nigui/private/windows/platform_impl.nim | 21 | ||||
| -rwxr-xr-x | src/nigui/private/windows/windows.nim | 10 |
2 files changed, 27 insertions, 4 deletions
diff --git a/src/nigui/private/windows/platform_impl.nim b/src/nigui/private/windows/platform_impl.nim index c94224e..d7372f4 100755 --- a/src/nigui/private/windows/platform_impl.nim +++ b/src/nigui/private/windows/platform_impl.nim @@ -1406,11 +1406,25 @@ method `enabled=`(button: NativeButton, enabled: bool) = var pCheckboxOrigWndProc: pointer proc pCheckboxWndProc(hWnd: pointer, uMsg: int32, wParam, lParam: pointer): pointer {.cdecl.} = + let checkbox = cast[Checkbox](pGetWindowLongPtr(hWnd, GWLP_USERDATA)) + + if uMsg == WM_LBUTTONDOWN: + checkbox.checked = not checkbox.checked # let the event see the new status + var evt = new ToggleEvent + evt.control = checkbox + checkbox.handleToggleEvent(evt) + checkbox.checked = not checkbox.checked + let comProcRes = pCommonControlWndProc(hWnd, uMsg, wParam, lParam) if comProcRes == PWndProcResult_False: return cast[pointer](false) if comProcRes == PWndProcResult_True: return cast[pointer](true) + + # Avoid toggling the checkbox twice + if uMsg == WM_KEYDOWN and pWMParamsToKey(wParam, lParam) == Key_Space: + return + result = CallWindowProcW(pCheckboxOrigWndProc, hWnd, uMsg, wParam, lParam) proc init(checkbox: NativeCheckbox) = @@ -1429,6 +1443,13 @@ method `enabled=`(checkbox: NativeCheckbox, enabled: bool) = method checked(checkbox: NativeCheckbox): bool = result = cast[int](SendMessageA(checkbox.fHandle, BM_GETCHECK, nil, nil)) == BST_CHECKED +method `checked=`(checkbox: NativeCheckbox, checked: bool) = + if checked: + discard SendMessageA(checkbox.fHandle, BM_SETCHECK, cast[pointer](BST_CHECKED), nil) + else: + discard SendMessageA(checkbox.fHandle, BM_SETCHECK, cast[pointer](BST_UNCHECKED), nil) + # app.processEvents + # ---------------------------------------------------------------------------------------- # Label diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim index d271cac..df9e75a 100755 --- a/src/nigui/private/windows/windows.nim +++ b/src/nigui/private/windows/windows.nim @@ -37,12 +37,14 @@ const BN_CLICKED* = 0 BM_SETSTYLE* = 244 BM_SETIMAGE* = 247 - BM_GETCHECK* = 0x00F0 + BM_GETCHECK* = 240 + BM_SETCHECK* = 241 + BM_GETSTATE* = 242 BS_DEFPUSHBUTTON* = 0x00000001 BS_AUTOCHECKBOX* = 0x00000003 BS_GROUPBOX* = 0x00000007 - BST_UNCHECKED* = 0x0000 - BST_CHECKED* = 0x0001 + BST_UNCHECKED* = 0 + BST_CHECKED* = 1 CF_TEXT* = 1 COLOR_BTNFACE* = 15 COLOR_WINDOW* = 5 @@ -548,4 +550,4 @@ proc GetSaveFileNameW*(lpofn: var OpenFileName): bool {.importc: "GetSaveFileNam # Shcore Procs # ---------------------------------------------------------------------------------------- -type SetProcessDpiAwarenessType* = proc(value: int32): int32 {.gcsafe, stdcall.} # not available on Windows 7
\ No newline at end of file +type SetProcessDpiAwarenessType* = proc(value: int32): int32 {.gcsafe, stdcall.} # not available on Windows 7 |
