mirror of
https://github.com/reactos/reactos.git
synced 2024-08-18 09:28:36 +00:00
117 lines
3.1 KiB
C
117 lines
3.1 KiB
C
/* -------- radio.c -------- */
|
|
|
|
#include "dflat.h"
|
|
|
|
static DF_CTLWINDOW *rct[DF_MAXRADIOS];
|
|
|
|
int DfRadioButtonProc(DFWINDOW wnd, DFMESSAGE msg, DF_PARAM p1, DF_PARAM p2)
|
|
{
|
|
int rtn;
|
|
DF_DBOX *db = DfGetParent(wnd)->extension;
|
|
DF_CTLWINDOW *ct = DfGetControl(wnd);
|
|
if (ct != NULL) {
|
|
switch (msg) {
|
|
case DFM_SETFOCUS:
|
|
if (!(int)p1)
|
|
DfSendMessage(NULL, DFM_HIDE_CURSOR, 0, 0);
|
|
case DFM_MOVE:
|
|
rtn = DfBaseWndProc(DF_RADIOBUTTON,wnd,msg,p1,p2);
|
|
DfSetFocusCursor(wnd);
|
|
return rtn;
|
|
case DFM_PAINT: {
|
|
char rb[] = "( )";
|
|
if (ct->setting)
|
|
rb[1] = 7;
|
|
DfSendMessage(wnd, DFM_CLEARTEXT, 0, 0);
|
|
DfSendMessage(wnd, DFM_ADDTEXT, (DF_PARAM) rb, 0);
|
|
DfSetFocusCursor(wnd);
|
|
break;
|
|
}
|
|
case DFM_KEYBOARD:
|
|
if ((int)p1 != ' ')
|
|
break;
|
|
case DFM_LEFT_BUTTON:
|
|
DfSetRadioButton(db, ct);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
return DfBaseWndProc(DF_RADIOBUTTON, wnd, msg, p1, p2);
|
|
}
|
|
|
|
static BOOL Setting = TRUE;
|
|
|
|
void DfSetRadioButton(DF_DBOX *db, DF_CTLWINDOW *ct)
|
|
{
|
|
Setting = FALSE;
|
|
DfPushRadioButton(db, ct->command);
|
|
Setting = TRUE;
|
|
}
|
|
|
|
void DfPushRadioButton(DF_DBOX *db, enum DfCommands cmd)
|
|
{
|
|
DF_CTLWINDOW *ctt = db->ctl;
|
|
DF_CTLWINDOW *ct = DfFindCommand(db, cmd, DF_RADIOBUTTON);
|
|
int i;
|
|
|
|
if (ct == NULL)
|
|
return;
|
|
|
|
/* --- clear all the radio buttons
|
|
in this group on the dialog box --- */
|
|
|
|
/* -------- build a table of all radio buttons at the
|
|
same x vector ---------- */
|
|
for (i = 0; i < DF_MAXRADIOS; i++)
|
|
rct[i] = NULL;
|
|
while (ctt->class) {
|
|
if (ctt->class == DF_RADIOBUTTON)
|
|
if (ct->dwnd.x == ctt->dwnd.x)
|
|
rct[ctt->dwnd.y] = ctt;
|
|
ctt++;
|
|
}
|
|
|
|
/* ----- find the start of the radiobutton group ---- */
|
|
i = ct->dwnd.y;
|
|
while (i >= 0 && rct[i] != NULL)
|
|
--i;
|
|
/* ---- ignore everthing before the group ------ */
|
|
while (i >= 0)
|
|
rct[i--] = NULL;
|
|
|
|
/* ----- find the end of the radiobutton group ---- */
|
|
i = ct->dwnd.y;
|
|
while (i < DF_MAXRADIOS && rct[i] != NULL)
|
|
i++;
|
|
/* ---- ignore everthing past the group ------ */
|
|
while (i < DF_MAXRADIOS)
|
|
rct[i++] = NULL;
|
|
|
|
for (i = 0; i < DF_MAXRADIOS; i++) {
|
|
if (rct[i] != NULL) {
|
|
int wason = rct[i]->setting;
|
|
rct[i]->setting = DF_OFF;
|
|
if (Setting)
|
|
rct[i]->isetting = DF_OFF;
|
|
if (wason)
|
|
DfSendMessage(rct[i]->wnd, DFM_PAINT, 0, 0);
|
|
}
|
|
}
|
|
/* ----- set the specified radio button on ----- */
|
|
ct->setting = DF_ON;
|
|
if (Setting)
|
|
ct->isetting = DF_ON;
|
|
DfSendMessage(ct->wnd, DFM_PAINT, 0, 0);
|
|
}
|
|
|
|
BOOL DfRadioButtonSetting(DF_DBOX *db, enum DfCommands cmd)
|
|
{
|
|
DF_CTLWINDOW *ct = DfFindCommand(db, cmd, DF_RADIOBUTTON);
|
|
if (ct != NULL)
|
|
return (ct->setting == DF_ON);
|
|
return FALSE;
|
|
}
|
|
|
|
/* EOF */
|