Sun, 07 Dec 2025 15:50:20 +0100
rename tree.h to list.h
|
665
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | /* |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | * |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | * Copyright 2025 Olaf Wintermann. All rights reserved. |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | * |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
8 | * |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
11 | * |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
15 | * |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
27 | */ |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | |
|
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
29 | #include "button.h" |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
30 | #include "widget.h" |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
31 | |
|
825
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
32 | #include <stdio.h> |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
33 | #include <stdlib.h> |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
34 | |
|
896
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
35 | #include <cx/array_list.h> |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
36 | |
|
841
651cf2c59dd9
implement ui_grid_create (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
825
diff
changeset
|
37 | #include <commctrl.h> |
|
651cf2c59dd9
implement ui_grid_create (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
825
diff
changeset
|
38 | |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
39 | static W32WidgetClass button_widget_class = { |
|
825
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
40 | .eventproc = ui_button_eventproc, |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
41 | .enable = w32_widget_default_enable, |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
42 | .show = w32_widget_default_show, |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
43 | .get_preferred_size = ui_button_get_preferred_size, |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
44 | .destroy = w32_widget_default_destroy |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
45 | }; |
|
665
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
46 | |
|
895
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
47 | static W32WidgetClass togglebutton_widget_class = { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
48 | .eventproc = ui_togglebutton_eventproc, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
49 | .enable = w32_widget_default_enable, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
50 | .show = w32_widget_default_show, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
51 | .get_preferred_size = ui_button_get_preferred_size, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
52 | .destroy = w32_widget_default_destroy |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
53 | }; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
54 | |
|
896
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
55 | static W32WidgetClass radiobutton_widget_class = { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
56 | .eventproc = ui_radiobutton_eventproc, |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
57 | .enable = w32_widget_default_enable, |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
58 | .show = w32_widget_default_show, |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
59 | .get_preferred_size = ui_button_get_preferred_size, |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
60 | .destroy = w32_widget_default_destroy |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
61 | }; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
62 | |
|
665
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs *args) { |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
64 | HINSTANCE hInstance = GetModuleHandle(NULL); |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
65 | UiContainerPrivate *container = ui_obj_container(obj); |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
66 | HWND parent = ui_container_get_parent(container); |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
67 | UiLayout layout = UI_ARGS2LAYOUT(args); |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
68 | |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
69 | HWND hwnd = CreateWindow( |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
70 | "BUTTON", |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
71 | args->label, |
|
880
9c99ff36513f
add container event proc (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
841
diff
changeset
|
72 | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
73 | 0, 0, 100, 30, |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
74 | parent, |
|
880
9c99ff36513f
add container event proc (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
841
diff
changeset
|
75 | (HMENU)1, |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
76 | hInstance, |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
77 | NULL); |
|
817
d09817e6e6a4
use a modern font (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
815
diff
changeset
|
78 | ui_win32_set_ui_font(hwnd); |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
79 | |
|
825
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
80 | W32Widget *widget = w32_widget_create(&button_widget_class, hwnd, sizeof(UiWidget)); |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
81 | ui_container_add(container, widget, &layout); |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
82 | |
|
825
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
83 | UiWidget *btn = (UiWidget*)widget; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
84 | btn->obj = obj; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
85 | btn->callback = args->onclick; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
86 | btn->callbackdata = args->onclickdata; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
87 | |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
88 | return widget; |
|
665
73689d24080c
add missing include
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
89 | } |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
90 | |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
91 | W32Size ui_button_get_preferred_size(W32Widget *widget) { |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
92 | W32Size size; |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
93 | size.width = 100; |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
94 | size.height = 30; |
|
841
651cf2c59dd9
implement ui_grid_create (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
825
diff
changeset
|
95 | SIZE sz; |
|
651cf2c59dd9
implement ui_grid_create (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
825
diff
changeset
|
96 | if (Button_GetIdealSize(widget->hwnd, &sz)) { |
|
651cf2c59dd9
implement ui_grid_create (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
825
diff
changeset
|
97 | size.width = sz.cx; |
|
651cf2c59dd9
implement ui_grid_create (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
825
diff
changeset
|
98 | size.height = sz.cy; |
|
651cf2c59dd9
implement ui_grid_create (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
825
diff
changeset
|
99 | } |
|
814
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
100 | return size; |
|
bcb3c7d486f3
add container base (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
665
diff
changeset
|
101 | } |
|
825
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
102 | |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
103 | int ui_button_eventproc(W32Widget *widget, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { |
|
825
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
104 | UiWidget *w = (UiWidget*)widget; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
105 | |
|
895
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
106 | if (uMsg != WM_COMMAND) { |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
107 | return 0; |
|
895
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
108 | } |
|
880
9c99ff36513f
add container event proc (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
841
diff
changeset
|
109 | |
|
825
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
110 | UiEvent e; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
111 | e.obj = w->obj; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
112 | e.document = e.obj->ctx->document; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
113 | e.window = e.obj->window; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
114 | e.eventdata = NULL; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
115 | e.eventdatatype = 0; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
116 | e.intval = 0; |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
117 | e.set = ui_get_setop(); |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
118 | |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
119 | if (w->callback) { |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
120 | w->callback(&e, w->callbackdata); |
|
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
121 | } |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
122 | |
|
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
123 | return 0; |
|
825
1bac7e45712b
implement button onclick event (win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
817
diff
changeset
|
124 | } |
|
895
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
125 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
126 | static UIWIDGET create_togglebutton(UiObject *obj, UiToggleArgs *args, unsigned long type) { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
127 | HINSTANCE hInstance = GetModuleHandle(NULL); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
128 | UiContainerPrivate *container = ui_obj_container(obj); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
129 | HWND parent = ui_container_get_parent(container); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
130 | UiLayout layout = UI_ARGS2LAYOUT(args); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
131 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
132 | HWND hwnd = CreateWindow( |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
133 | "BUTTON", |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
134 | args->label, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
135 | WS_VISIBLE | WS_CHILD | type, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
136 | 0, 0, 100, 30, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
137 | parent, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
138 | (HMENU)1, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
139 | hInstance, |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
140 | NULL); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
141 | ui_win32_set_ui_font(hwnd); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
142 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
143 | W32Widget *widget = w32_widget_create(&togglebutton_widget_class, hwnd, sizeof(UiWidget)); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
144 | ui_container_add(container, widget, &layout); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
145 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
146 | UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
147 | if (var) { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
148 | UiInteger *i = var->value; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
149 | i->obj = widget; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
150 | i->get = ui_togglebutton_get; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
151 | i->set = ui_togglebutton_set; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
152 | if (i->value != 0) { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
153 | SendMessage(hwnd, BM_SETCHECK, BST_CHECKED, 0); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
154 | } |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
155 | } |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
156 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
157 | UiWidget *btn = (UiWidget*)widget; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
158 | btn->obj = obj; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
159 | btn->var = var; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
160 | btn->callback = args->onchange; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
161 | btn->callbackdata = args->onchangedata; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
162 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
163 | return widget; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
164 | } |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
165 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
166 | UIWIDGET ui_togglebutton_create(UiObject *obj, UiToggleArgs *args) { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
167 | return create_togglebutton(obj, args, BS_AUTOCHECKBOX | BS_PUSHLIKE); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
168 | } |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
169 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
170 | UIWIDGET ui_checkbox_create(UiObject *obj, UiToggleArgs *args) { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
171 | return create_togglebutton(obj, args, BS_AUTOCHECKBOX); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
172 | } |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
173 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
174 | UIWIDGET ui_switch_create(UiObject *obj, UiToggleArgs *args) { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
175 | return create_togglebutton(obj, args, BS_AUTOCHECKBOX); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
176 | } |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
177 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
178 | int64_t ui_togglebutton_get(UiInteger *i) { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
179 | UiWidget *btn = (UiWidget*)i->obj; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
180 | LRESULT state = SendMessage(btn->widget.hwnd, BM_GETCHECK, 0, 0); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
181 | i->value = state; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
182 | return state; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
183 | } |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
184 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
185 | void ui_togglebutton_set(UiInteger *i, int64_t v) { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
186 | UiWidget *btn = (UiWidget*)i->obj; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
187 | WPARAM state = v ? BST_CHECKED : BST_UNCHECKED; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
188 | SendMessage(btn->widget.hwnd, BM_SETCHECK, state, 0); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
189 | i->value = v; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
190 | } |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
191 | |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
192 | int ui_togglebutton_eventproc(W32Widget *widget, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { |
|
895
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
193 | if (uMsg != WM_COMMAND) { |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
194 | return 0; |
|
895
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
195 | } |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
196 | UiWidget *w = (UiWidget*)widget; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
197 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
198 | UiEvent e; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
199 | e.obj = w->obj; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
200 | e.document = e.obj->ctx->document; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
201 | e.window = e.obj->window; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
202 | e.eventdata = NULL; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
203 | e.eventdatatype = 0; |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
204 | e.intval = SendMessage(w->widget.hwnd, BM_GETCHECK, 0, 0); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
205 | e.set = ui_get_setop(); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
206 | |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
207 | if (w->callback) { |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
208 | w->callback(&e, w->callbackdata); |
|
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
209 | } |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
210 | |
|
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
211 | return 0; |
|
895
f24d07479843
add togglebutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
880
diff
changeset
|
212 | } |
|
896
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
213 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
214 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
215 | UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs *args) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
216 | HINSTANCE hInstance = GetModuleHandle(NULL); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
217 | UiContainerPrivate *container = ui_obj_container(obj); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
218 | HWND parent = ui_container_get_parent(container); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
219 | UiLayout layout = UI_ARGS2LAYOUT(args); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
220 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
221 | HWND hwnd = CreateWindow( |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
222 | "BUTTON", |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
223 | args->label, |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
224 | WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | WS_GROUP , |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
225 | 0, 0, 100, 30, |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
226 | parent, |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
227 | (HMENU)1, |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
228 | hInstance, |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
229 | NULL); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
230 | ui_win32_set_ui_font(hwnd); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
231 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
232 | W32Widget *widget = w32_widget_create(&radiobutton_widget_class, hwnd, sizeof(UiWidget)); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
233 | ui_container_add(container, widget, &layout); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
234 | UiWidget *btn = (UiWidget*)widget; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
235 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
236 | UiVar *var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
237 | if (var) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
238 | UiInteger *i = var->value; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
239 | // Use a CxList as binding object (i->obj) and add all radiobuttons to it |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
240 | // The first radiobutton, which binds to this var, creates the CxList |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
241 | CxList *group = NULL; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
242 | if (i->obj) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
243 | group = i->obj; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
244 | } else { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
245 | group = cxArrayListCreate(obj->ctx->allocator, NULL, CX_STORE_POINTERS, 8); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
246 | i->obj = group; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
247 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
248 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
249 | cxListAdd(group, btn); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
250 | if (i->value == cxListSize(group)) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
251 | // TODO: select |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
252 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
253 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
254 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
255 | btn->obj = obj; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
256 | btn->var = var; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
257 | btn->callback = args->onchange; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
258 | btn->callbackdata = args->onchangedata; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
259 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
260 | return widget; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
261 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
262 | |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
263 | int ui_radiobutton_eventproc(W32Widget *widget, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { |
|
896
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
264 | if (uMsg != WM_COMMAND) { |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
265 | return 0; |
|
896
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
266 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
267 | UiWidget *w = (UiWidget*)widget; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
268 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
269 | int checked = SendMessage(w->widget.hwnd, BM_GETCHECK, 0, 0); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
270 | if (!checked) { |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
271 | return 0; // ignore uncheck events |
|
896
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
272 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
273 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
274 | int b = 0; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
275 | if (w->var) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
276 | UiInteger *i = w->var->value; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
277 | CxList *group = i->obj; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
278 | // Find selected index and uncheck all radiobuttons in this group |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
279 | // that are not this event widget |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
280 | CxIterator iter = cxListIterator(group); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
281 | cx_foreach(UiWidget *, radiobutton, iter) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
282 | if (radiobutton == w) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
283 | i->value = iter.index+1; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
284 | b = i->value; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
285 | } else { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
286 | SendMessage(radiobutton->widget.hwnd, BM_SETCHECK, BST_UNCHECKED, 0); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
287 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
288 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
289 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
290 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
291 | UiEvent e; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
292 | e.obj = w->obj; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
293 | e.document = e.obj->ctx->document; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
294 | e.window = e.obj->window; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
295 | e.eventdata = NULL; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
296 | e.eventdatatype = 0; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
297 | e.intval = b; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
298 | e.set = ui_get_setop(); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
299 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
300 | if (w->callback) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
301 | w->callback(&e, w->callbackdata); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
302 | } |
|
938
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
303 | |
|
be4c88ded783
change w32 eventproc signature + fix grid repaint bug (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
896
diff
changeset
|
304 | return 0; |
|
896
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
305 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
306 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
307 | int64_t ui_radiobutton_get(UiInteger *i) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
308 | return i->value; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
309 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
310 | |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
311 | void ui_radiobutton_set(UiInteger *i, int64_t v) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
312 | CxList *group = i->obj; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
313 | CxIterator iter = cxListIterator(group); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
314 | cx_foreach(UiWidget *, radiobutton, iter) { |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
315 | SendMessage(radiobutton->widget.hwnd, BM_SETCHECK, iter.index+1 == v ? BST_CHECKED : BST_UNCHECKED, 0); |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
316 | } |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
317 | i->value = v; |
|
ae0ad20122cc
add radiobutton (Win32)
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
895
diff
changeset
|
318 | } |