summaryrefslogtreecommitdiff
path: root/new/windows/checkbox.c
diff options
context:
space:
mode:
Diffstat (limited to 'new/windows/checkbox.c')
-rw-r--r--new/windows/checkbox.c102
1 files changed, 54 insertions, 48 deletions
diff --git a/new/windows/checkbox.c b/new/windows/checkbox.c
index 951eee9..65e7652 100644
--- a/new/windows/checkbox.c
+++ b/new/windows/checkbox.c
@@ -2,13 +2,14 @@
#include "uipriv_windows.h"
struct checkbox {
+ uiCheckbox c;
void (*onToggled)(uiControl *, void *);
void *onToggledData;
};
-static BOOL onWM_COMMAND(uiControl *c, WORD code, LRESULT *lResult)
+static BOOL onWM_COMMAND(uiControl *cc, WORD code, LRESULT *lResult)
{
- struct checkbox *cc = (struct checkbox *) (c->data);
+ struct checkbox *c = (struct checkbox *) cc;
HWND hwnd;
WPARAM check;
@@ -22,7 +23,7 @@ static BOOL onWM_COMMAND(uiControl *c, WORD code, LRESULT *lResult)
check = BST_UNCHECKED;
SendMessage(hwnd, BM_SETCHECK, check, 0);
- (*(cc->onToggled))(c, cc->onToggledData);
+ (*(c->onToggled))(uiCheckbox(c), c->onToggledData);
*lResult = 0;
return TRUE;
}
@@ -32,11 +33,11 @@ static BOOL onWM_NOTIFY(uiControl *c, NMHDR *nm, LRESULT *lResult)
return FALSE;
}
-static void onWM_DESTROY(uiControl *c)
+static void onWM_DESTROY(uiControl *cc)
{
- struct checkbox *cc = (struct checkbox *) (c->data);
+ struct checkbox *c = (struct checkbox *) cc;
- uiFree(cc);
+ uiFree(c);
}
// from http://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing
@@ -50,74 +51,79 @@ static void preferredSize(uiControl *c, uiSizing *d, intmax_t *width, intmax_t *
*height = uiDlgUnitsToY(checkboxHeight, d->sys->baseY);
}
-static void defaultOnToggled(uiControl *c, void *data)
+static void defaultOnToggled(uiCheckbox *c, void *data)
{
// do nothing
}
-uiControl *uiNewCheckbox(const char *text)
+static char *getText(uiCheckbox *c)
{
- uiControl *c;
- struct checkbox *cc;
- uiWindowsNewControlParams p;
- WCHAR *wtext;
-
- p.dwExStyle = 0;
- p.lpClassName = L"button";
- wtext = toUTF16(text);
- p.lpWindowName = wtext;
- p.dwStyle = BS_CHECKBOX | WS_TABSTOP;
- p.hInstance = hInstance;
- p.useStandardControlFont = TRUE;
- p.onWM_COMMAND = onWM_COMMAND;
- p.onWM_NOTIFY = onWM_NOTIFY;
- p.onWM_DESTROY = onWM_DESTROY;
- c = uiWindowsNewControl(&p);
- uiFree(wtext);
-
- c->preferredSize = preferredSize;
-
- cc = uiNew(struct checkbox);
- cc->onToggled = defaultOnToggled;
- c->data = cc;
-
- return c;
+ return uiWindowsControlText(uiControl(c));
}
-char *uiCheckboxText(uiControl *c)
+static void setText(uiCheckbox *c, const char *text)
{
- return uiWindowsControlText(c);
+ uiWindowsControlSetText(uiControl(c), text);
}
-void uiCheckboxSetText(uiControl *c, const char *text)
+static void setOnToggled(uiCheckbox *cc, void (*f)(uiCheckbox *, void *), void *data)
{
- uiWindowsControlSetText(c, text);
-}
-
-void uiCheckboxOnToggled(uiControl *c, void (*f)(uiControl *, void *), void *data)
-{
- struct checkbox *cc = (struct checkbox *) (c->data);
+ struct checkbox *c = (struct checkbox *) cc;
- cc->onToggled = f;
- cc->onToggledData = data;
+ c->onToggled = f;
+ c->onToggledData = data;
}
-int uiCheckboxChecked(uiControl *c)
+static int getChecked(uiChecckbox *c)
{
HWND hwnd;
- hwnd = uiControlHWND(c);
+ hwnd = uiControlHWND(uiControl(c));
return SendMessage(hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED;
}
-void uiCheckboxSetChecked(uiControl *c, int checked)
+static void setChecked(uiCheckbox *c, int checked)
{
HWND hwnd;
WPARAM check;
- hwnd = uiControlHWND(c);
+ hwnd = uiControlHWND(uiControl(c));
check = BST_CHECKED;
if (!checked)
check = BST_UNCHECKED;
SendMessage(hwnd, BM_SETCHECK, check, 0);
}
+
+uiControl *uiNewCheckbox(const char *text)
+{
+ struct checkbox *c;
+ uiWindowsNewControlParams p;
+ WCHAR *wtext;
+
+ c = uiNew(struct checkbox)
+
+ p.dwExStyle = 0;
+ p.lpClassName = L"button";
+ wtext = toUTF16(text);
+ p.lpWindowName = wtext;
+ p.dwStyle = BS_CHECKBOX | WS_TABSTOP;
+ p.hInstance = hInstance;
+ p.useStandardControlFont = TRUE;
+ p.onWM_COMMAND = onWM_COMMAND;
+ p.onWM_NOTIFY = onWM_NOTIFY;
+ p.onWM_DESTROY = onWM_DESTROY;
+ uiWindowsNewControl(uiControl(c), &p);
+ uiFree(wtext);
+
+ c->onToggled = defaultOnToggled;
+
+ uiControl(c)->PreferredSize = preferredSize;
+
+ uiCheckbox(c)->Text = getText;
+ uiCheckbox(c)->SetText = setText;
+ uiCheckbox(c)->OnToggled = setOnToggled;
+ uiCheckbox(c)->Checked = getChecked;
+ uiCheckbox(c)->SetChecked = setChecked;
+
+ return uiCheckbox(c);
+}