Migrated windows/checkbox.c. Yes, this might work...
This commit is contained in:
parent
5e5df97642
commit
292ea9db7a
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
struct checkbox {
|
struct checkbox {
|
||||||
uiCheckbox c;
|
uiCheckbox c;
|
||||||
|
HWND hwnd;
|
||||||
void (*onToggled)(uiCheckbox *, void *);
|
void (*onToggled)(uiCheckbox *, void *);
|
||||||
void *onToggledData;
|
void *onToggledData;
|
||||||
};
|
};
|
||||||
|
@ -10,18 +11,16 @@ struct checkbox {
|
||||||
static BOOL onWM_COMMAND(uiControl *cc, WORD code, LRESULT *lResult)
|
static BOOL onWM_COMMAND(uiControl *cc, WORD code, LRESULT *lResult)
|
||||||
{
|
{
|
||||||
struct checkbox *c = (struct checkbox *) cc;
|
struct checkbox *c = (struct checkbox *) cc;
|
||||||
HWND hwnd;
|
|
||||||
WPARAM check;
|
WPARAM check;
|
||||||
|
|
||||||
if (code != BN_CLICKED)
|
if (code != BN_CLICKED)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// we didn't use BS_AUTOCHECKBOX (see controls_windows.go) so we have to manage the check state ourselves
|
// we didn't use BS_AUTOCHECKBOX (see controls_windows.go) so we have to manage the check state ourselves
|
||||||
hwnd = uiControlHWND(uiControl(c));
|
|
||||||
check = BST_CHECKED;
|
check = BST_CHECKED;
|
||||||
if (SendMessage(hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED)
|
if (SendMessage(c->hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED)
|
||||||
check = BST_UNCHECKED;
|
check = BST_UNCHECKED;
|
||||||
SendMessage(hwnd, BM_SETCHECK, check, 0);
|
SendMessage(c->hwnd, BM_SETCHECK, check, 0);
|
||||||
|
|
||||||
(*(c->onToggled))(uiCheckbox(c), c->onToggledData);
|
(*(c->onToggled))(uiCheckbox(c), c->onToggledData);
|
||||||
*lResult = 0;
|
*lResult = 0;
|
||||||
|
@ -45,9 +44,11 @@ static void onWM_DESTROY(uiControl *cc)
|
||||||
// from http://msdn.microsoft.com/en-us/library/windows/desktop/bb226818%28v=vs.85%29.aspx
|
// from http://msdn.microsoft.com/en-us/library/windows/desktop/bb226818%28v=vs.85%29.aspx
|
||||||
#define checkboxXFromLeftOfBoxToLeftOfLabel 12
|
#define checkboxXFromLeftOfBoxToLeftOfLabel 12
|
||||||
|
|
||||||
static void preferredSize(uiControl *c, uiSizing *d, intmax_t *width, intmax_t *height)
|
static void preferredSize(uiControl *cc, uiSizing *d, intmax_t *width, intmax_t *height)
|
||||||
{
|
{
|
||||||
*width = uiDlgUnitsToX(checkboxXFromLeftOfBoxToLeftOfLabel, d->sys->baseX) + uiWindowsWindowTextWidth(uiControlHWND(c));
|
struct checkbox *c = (struct checkbox *) cc;
|
||||||
|
|
||||||
|
*width = uiDlgUnitsToX(checkboxXFromLeftOfBoxToLeftOfLabel, d->sys->baseX) + uiWindowsWindowTextWidth(c->hwnd);
|
||||||
*height = uiDlgUnitsToY(checkboxHeight, d->sys->baseY);
|
*height = uiDlgUnitsToY(checkboxHeight, d->sys->baseY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,17 +57,17 @@ static void defaultOnToggled(uiCheckbox *c, void *data)
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *getText(uiCheckbox *c)
|
static char *checkboxText(uiCheckbox *c)
|
||||||
{
|
{
|
||||||
return uiWindowsControlText(uiControl(c));
|
return uiWindowsControlText(uiControl(c));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setText(uiCheckbox *c, const char *text)
|
static void checkboxSetText(uiCheckbox *c, const char *text)
|
||||||
{
|
{
|
||||||
uiWindowsControlSetText(uiControl(c), text);
|
uiWindowsControlSetText(uiControl(c), text);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setOnToggled(uiCheckbox *cc, void (*f)(uiCheckbox *, void *), void *data)
|
static void checkboxOnToggled(uiCheckbox *cc, void (*f)(uiCheckbox *, void *), void *data)
|
||||||
{
|
{
|
||||||
struct checkbox *c = (struct checkbox *) cc;
|
struct checkbox *c = (struct checkbox *) cc;
|
||||||
|
|
||||||
|
@ -74,24 +75,22 @@ static void setOnToggled(uiCheckbox *cc, void (*f)(uiCheckbox *, void *), void *
|
||||||
c->onToggledData = data;
|
c->onToggledData = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int getChecked(uiCheckbox *c)
|
static int checkboxChecked(uiCheckbox *cc)
|
||||||
{
|
{
|
||||||
HWND hwnd;
|
struct checkbox *c = (struct checkbox *) cc;
|
||||||
|
|
||||||
hwnd = uiControlHWND(uiControl(c));
|
return SendMessage(c->hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED;
|
||||||
return SendMessage(hwnd, BM_GETCHECK, 0, 0) == BST_CHECKED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setChecked(uiCheckbox *c, int checked)
|
static void checkboxSetChecked(uiCheckbox *cc, int checked)
|
||||||
{
|
{
|
||||||
HWND hwnd;
|
struct checkbox *c = (struct checkbox *) cc;
|
||||||
WPARAM check;
|
WPARAM check;
|
||||||
|
|
||||||
hwnd = uiControlHWND(uiControl(c));
|
|
||||||
check = BST_CHECKED;
|
check = BST_CHECKED;
|
||||||
if (!checked)
|
if (!checked)
|
||||||
check = BST_UNCHECKED;
|
check = BST_UNCHECKED;
|
||||||
SendMessage(hwnd, BM_SETCHECK, check, 0);
|
SendMessage(c->hwnd, BM_SETCHECK, check, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uiCheckbox *uiNewCheckbox(const char *text)
|
uiCheckbox *uiNewCheckbox(const char *text)
|
||||||
|
@ -115,15 +114,17 @@ uiCheckbox *uiNewCheckbox(const char *text)
|
||||||
uiWindowsNewControl(uiControl(c), &p);
|
uiWindowsNewControl(uiControl(c), &p);
|
||||||
uiFree(wtext);
|
uiFree(wtext);
|
||||||
|
|
||||||
|
c->hwnd = HWND(c);
|
||||||
|
|
||||||
c->onToggled = defaultOnToggled;
|
c->onToggled = defaultOnToggled;
|
||||||
|
|
||||||
uiControl(c)->PreferredSize = preferredSize;
|
uiControl(c)->PreferredSize = preferredSize;
|
||||||
|
|
||||||
uiCheckbox(c)->Text = getText;
|
uiCheckbox(c)->Text = checkboxText;
|
||||||
uiCheckbox(c)->SetText = setText;
|
uiCheckbox(c)->SetText = checkboxSetText;
|
||||||
uiCheckbox(c)->OnToggled = setOnToggled;
|
uiCheckbox(c)->OnToggled = checkboxOnToggled;
|
||||||
uiCheckbox(c)->Checked = getChecked;
|
uiCheckbox(c)->Checked = checkboxChecked;
|
||||||
uiCheckbox(c)->SetChecked = setChecked;
|
uiCheckbox(c)->SetChecked = checkboxSetChecked;
|
||||||
|
|
||||||
return uiCheckbox(c);
|
return uiCheckbox(c);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue