Implemented likewise on Windows.
This commit is contained in:
parent
8ede507d36
commit
9a5bc738c5
|
@ -12,6 +12,8 @@ struct uiRadioButtons {
|
||||||
uiWindowsControl c;
|
uiWindowsControl c;
|
||||||
HWND hwnd; // of the container
|
HWND hwnd; // of the container
|
||||||
std::vector<HWND> *hwnds; // of the buttons
|
std::vector<HWND> *hwnds; // of the buttons
|
||||||
|
void (*onSelected)(uiRadioButtons *, void *);
|
||||||
|
void *onSelectedData;
|
||||||
};
|
};
|
||||||
|
|
||||||
static BOOL onWM_COMMAND(uiControl *c, HWND clicked, WORD code, LRESULT *lResult)
|
static BOOL onWM_COMMAND(uiControl *c, HWND clicked, WORD code, LRESULT *lResult)
|
||||||
|
@ -28,10 +30,16 @@ static BOOL onWM_COMMAND(uiControl *c, HWND clicked, WORD code, LRESULT *lResult
|
||||||
check = BST_CHECKED;
|
check = BST_CHECKED;
|
||||||
SendMessage(hwnd, BM_SETCHECK, check, 0);
|
SendMessage(hwnd, BM_SETCHECK, check, 0);
|
||||||
}
|
}
|
||||||
|
(*(r->onSelected))(r, r->onSelectedData);
|
||||||
*lResult = 0;
|
*lResult = 0;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void defaultOnSelected(uiRadioButtons *r, void *data)
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
static void uiRadioButtonsDestroy(uiControl *c)
|
static void uiRadioButtonsDestroy(uiControl *c)
|
||||||
{
|
{
|
||||||
uiRadioButtons *r = uiRadioButtons(c);
|
uiRadioButtons *r = uiRadioButtons(c);
|
||||||
|
@ -141,6 +149,33 @@ void uiRadioButtonsAppend(uiRadioButtons *r, const char *text)
|
||||||
uiWindowsControlMinimumSizeChanged(uiWindowsControl(r));
|
uiWindowsControlMinimumSizeChanged(uiWindowsControl(r));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
intmax_t uiRadioButtonsSelected(uiRadioButtons *r)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < r->hwnds->size(); i++)
|
||||||
|
if (SendMessage((*(r->hwnds))[i], BM_GETCHECK, 0, 0) == BST_CHECKED)
|
||||||
|
return i;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiRadioButtonsSetSelected(uiRadioButtons *r, intmax_t n)
|
||||||
|
{
|
||||||
|
intmax_t m;
|
||||||
|
|
||||||
|
m = uiRadioButtonsSelected(r);
|
||||||
|
if (m != -1)
|
||||||
|
SendMessage((*(r->hwnds))[m], BM_SETCHECK, BST_UNCHECKED, 0);
|
||||||
|
if (n != -1)
|
||||||
|
SendMessage((*(r->hwnds))[n], BM_SETCHECK, BST_CHECKED, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiRadioButtonsOnSelected(uiRadioButtons *r, void (*f)(uiRadioButtons *, void *), void *data)
|
||||||
|
{
|
||||||
|
r->onSelected = f;
|
||||||
|
r->onSelectedData = data;
|
||||||
|
}
|
||||||
|
|
||||||
static void onResize(uiWindowsControl *c)
|
static void onResize(uiWindowsControl *c)
|
||||||
{
|
{
|
||||||
radiobuttonsRelayout(uiRadioButtons(c));
|
radiobuttonsRelayout(uiRadioButtons(c));
|
||||||
|
@ -156,5 +191,7 @@ uiRadioButtons *uiNewRadioButtons(void)
|
||||||
|
|
||||||
r->hwnds = new std::vector<HWND>;
|
r->hwnds = new std::vector<HWND>;
|
||||||
|
|
||||||
|
uiRadioButtonsOnSelected(r, defaultOnSelected, NULL);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue