mirror of
https://github.com/reactos/reactos.git
synced 2024-08-28 22:28:36 +00:00
150 lines
3.7 KiB
C
150 lines
3.7 KiB
C
/* -------------- combobox.c -------------- */
|
|
|
|
#include "dflat.h"
|
|
|
|
int ListProc(DFWINDOW, DFMESSAGE, DF_PARAM, DF_PARAM);
|
|
|
|
int DfComboProc(DFWINDOW wnd, DFMESSAGE msg, DF_PARAM p1, DF_PARAM p2)
|
|
{
|
|
switch (msg) {
|
|
case DFM_CREATE_WINDOW:
|
|
wnd->extension = DfDfCreateWindow(
|
|
DF_LISTBOX,
|
|
NULL,
|
|
wnd->rc.lf,wnd->rc.tp+1,
|
|
wnd->ht-1, wnd->wd+1,
|
|
NULL,
|
|
wnd,
|
|
ListProc,
|
|
DF_HASBORDER | DF_NOCLIP | DF_SAVESELF);
|
|
((DFWINDOW)(wnd->extension))->ct->command =
|
|
wnd->ct->command;
|
|
wnd->ht = 1;
|
|
wnd->rc.bt = wnd->rc.tp;
|
|
break;
|
|
case DFM_PAINT:
|
|
DfForeground = DfWndBackground(wnd);
|
|
DfBackground = DfWndForeground(wnd);
|
|
DfWPutch(wnd, DF_DOWNSCROLLBOX, DfWindowWidth(wnd), 0);
|
|
break;
|
|
case DFM_KEYBOARD:
|
|
if ((int)p1 == DF_DN) {
|
|
DfSendMessage(wnd->extension, DFM_SETFOCUS, TRUE, 0);
|
|
return TRUE;
|
|
}
|
|
break;
|
|
case DFM_LEFT_BUTTON:
|
|
if ((int)p1 == DfGetRight(wnd) + 1)
|
|
DfSendMessage(wnd->extension, DFM_SETFOCUS, TRUE, 0);
|
|
break;
|
|
case DFM_CLOSE_WINDOW:
|
|
DfSendMessage(wnd->extension, DFM_CLOSE_WINDOW, 0, 0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return DfBaseWndProc(DF_COMBOBOX, wnd, msg, p1, p2);
|
|
}
|
|
|
|
int ListProc(DFWINDOW wnd, DFMESSAGE msg, DF_PARAM p1, DF_PARAM p2)
|
|
{
|
|
DFWINDOW pwnd = DfGetParent(DfGetParent(wnd));
|
|
DF_DBOX *db = pwnd->extension;
|
|
DFWINDOW cwnd;
|
|
char text[130];
|
|
int rtn;
|
|
DFWINDOW currFocus;
|
|
|
|
switch (msg)
|
|
{
|
|
case DFM_CREATE_WINDOW:
|
|
wnd->ct = DfMalloc(sizeof(DF_CTLWINDOW));
|
|
wnd->ct->setting = DF_OFF;
|
|
wnd->WindowColors[DF_FRAME_COLOR][DF_FG] =
|
|
wnd->WindowColors[DF_STD_COLOR][DF_FG];
|
|
wnd->WindowColors[DF_FRAME_COLOR][DF_BG] =
|
|
wnd->WindowColors[DF_STD_COLOR][DF_BG];
|
|
rtn = DfDefaultWndProc(wnd, msg, p1, p2);
|
|
return rtn;
|
|
|
|
case DFM_SETFOCUS:
|
|
if ((int)p1 == FALSE)
|
|
{
|
|
if (!wnd->isHelping)
|
|
{
|
|
DfSendMessage(wnd, DFM_HIDE_WINDOW, 0, 0);
|
|
wnd->ct->setting = DF_OFF;
|
|
}
|
|
}
|
|
else
|
|
wnd->ct->setting = DF_ON;
|
|
break;
|
|
|
|
case DFM_SHOW_WINDOW:
|
|
if (wnd->ct->setting == DF_OFF)
|
|
return TRUE;
|
|
break;
|
|
|
|
case DFM_BORDER:
|
|
currFocus = DfInFocus;
|
|
DfInFocus = NULL;
|
|
rtn = DfDefaultWndProc(wnd, msg, p1, p2);
|
|
DfInFocus = currFocus;
|
|
return rtn;
|
|
|
|
case DFM_LB_SELECTION:
|
|
rtn = DfDefaultWndProc(wnd, msg, p1, p2);
|
|
DfSendMessage(wnd, DFM_LB_GETTEXT,
|
|
(DF_PARAM) text, wnd->selection);
|
|
DfPutItemText(pwnd, wnd->ct->command, text);
|
|
cwnd = DfControlWindow(db, wnd->ct->command);
|
|
DfSendMessage(cwnd, DFM_PAINT, 0, 0);
|
|
cwnd->TextChanged = TRUE;
|
|
return rtn;
|
|
|
|
case DFM_KEYBOARD:
|
|
switch ((int) p1)
|
|
{
|
|
case DF_ESC:
|
|
case DF_FWD:
|
|
case DF_BS:
|
|
cwnd = DfControlWindow(db, wnd->ct->command);
|
|
DfSendMessage(cwnd, DFM_SETFOCUS, TRUE, 0);
|
|
return TRUE;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case DFM_LB_CHOOSE:
|
|
cwnd = DfControlWindow(db, wnd->ct->command);
|
|
DfSendMessage(cwnd, DFM_SETFOCUS, TRUE, 0);
|
|
return TRUE;
|
|
|
|
case DFM_CLOSE_WINDOW:
|
|
if (wnd->ct != NULL)
|
|
free(wnd->ct);
|
|
wnd->ct = NULL;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return DfDefaultWndProc(wnd, msg, p1, p2);
|
|
}
|
|
|
|
void DfPutComboListText(DFWINDOW wnd, enum DfCommands cmd, char *text)
|
|
{
|
|
DF_CTLWINDOW *ct = DfFindCommand(wnd->extension, cmd, DF_COMBOBOX);
|
|
|
|
if (ct != NULL)
|
|
{
|
|
DFWINDOW lwnd = ((DFWINDOW)(ct->wnd))->extension;
|
|
DfSendMessage(lwnd, DFM_ADDTEXT, (DF_PARAM) text, 0);
|
|
}
|
|
}
|
|
|
|
/* EOF */
|