mirror of
https://github.com/reactos/reactos.git
synced 2024-11-07 07:00:19 +00:00
150 lines
3.5 KiB
C
150 lines
3.5 KiB
C
|
/* -------------- combobox.c -------------- */
|
||
|
|
||
|
#include "dflat.h"
|
||
|
|
||
|
int ListProc(DFWINDOW, DFMESSAGE, PARAM, PARAM);
|
||
|
|
||
|
int ComboProc(DFWINDOW wnd, DFMESSAGE msg, PARAM p1, PARAM p2)
|
||
|
{
|
||
|
switch (msg) {
|
||
|
case CREATE_WINDOW:
|
||
|
wnd->extension = DfCreateWindow(
|
||
|
LISTBOX,
|
||
|
NULL,
|
||
|
wnd->rc.lf,wnd->rc.tp+1,
|
||
|
wnd->ht-1, wnd->wd+1,
|
||
|
NULL,
|
||
|
wnd,
|
||
|
ListProc,
|
||
|
HASBORDER | NOCLIP | SAVESELF);
|
||
|
((DFWINDOW)(wnd->extension))->ct->command =
|
||
|
wnd->ct->command;
|
||
|
wnd->ht = 1;
|
||
|
wnd->rc.bt = wnd->rc.tp;
|
||
|
break;
|
||
|
case PAINT:
|
||
|
foreground = WndBackground(wnd);
|
||
|
background = WndForeground(wnd);
|
||
|
wputch(wnd, DOWNSCROLLBOX, WindowWidth(wnd), 0);
|
||
|
break;
|
||
|
case KEYBOARD:
|
||
|
if ((int)p1 == DN) {
|
||
|
DfSendMessage(wnd->extension, SETFOCUS, TRUE, 0);
|
||
|
return TRUE;
|
||
|
}
|
||
|
break;
|
||
|
case LEFT_BUTTON:
|
||
|
if ((int)p1 == GetRight(wnd) + 1)
|
||
|
DfSendMessage(wnd->extension, SETFOCUS, TRUE, 0);
|
||
|
break;
|
||
|
case CLOSE_WINDOW:
|
||
|
DfSendMessage(wnd->extension, CLOSE_WINDOW, 0, 0);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
return BaseWndProc(COMBOBOX, wnd, msg, p1, p2);
|
||
|
}
|
||
|
|
||
|
int ListProc(DFWINDOW wnd, DFMESSAGE msg, PARAM p1, PARAM p2)
|
||
|
{
|
||
|
DFWINDOW pwnd = GetParent(GetParent(wnd));
|
||
|
DBOX *db = pwnd->extension;
|
||
|
DFWINDOW cwnd;
|
||
|
char text[130];
|
||
|
int rtn;
|
||
|
DFWINDOW currFocus;
|
||
|
|
||
|
switch (msg)
|
||
|
{
|
||
|
case CREATE_WINDOW:
|
||
|
wnd->ct = DFmalloc(sizeof(CTLWINDOW));
|
||
|
wnd->ct->setting = OFF;
|
||
|
wnd->WindowColors[FRAME_COLOR][FG] =
|
||
|
wnd->WindowColors[STD_COLOR][FG];
|
||
|
wnd->WindowColors[FRAME_COLOR][BG] =
|
||
|
wnd->WindowColors[STD_COLOR][BG];
|
||
|
rtn = DefaultWndProc(wnd, msg, p1, p2);
|
||
|
return rtn;
|
||
|
|
||
|
case SETFOCUS:
|
||
|
if ((int)p1 == FALSE)
|
||
|
{
|
||
|
if (!wnd->isHelping)
|
||
|
{
|
||
|
DfSendMessage(wnd, DFM_HIDE_WINDOW, 0, 0);
|
||
|
wnd->ct->setting = OFF;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
wnd->ct->setting = ON;
|
||
|
break;
|
||
|
|
||
|
case SHOW_WINDOW:
|
||
|
if (wnd->ct->setting == OFF)
|
||
|
return TRUE;
|
||
|
break;
|
||
|
|
||
|
case BORDER:
|
||
|
currFocus = inFocus;
|
||
|
inFocus = NULL;
|
||
|
rtn = DefaultWndProc(wnd, msg, p1, p2);
|
||
|
inFocus = currFocus;
|
||
|
return rtn;
|
||
|
|
||
|
case LB_SELECTION:
|
||
|
rtn = DefaultWndProc(wnd, msg, p1, p2);
|
||
|
DfSendMessage(wnd, DFM_LB_GETTEXT,
|
||
|
(PARAM) text, wnd->selection);
|
||
|
PutItemText(pwnd, wnd->ct->command, text);
|
||
|
cwnd = ControlWindow(db, wnd->ct->command);
|
||
|
DfSendMessage(cwnd, PAINT, 0, 0);
|
||
|
cwnd->TextChanged = TRUE;
|
||
|
return rtn;
|
||
|
|
||
|
case KEYBOARD:
|
||
|
switch ((int) p1)
|
||
|
{
|
||
|
case ESC:
|
||
|
case FWD:
|
||
|
case BS:
|
||
|
cwnd = ControlWindow(db, wnd->ct->command);
|
||
|
DfSendMessage(cwnd, SETFOCUS, TRUE, 0);
|
||
|
return TRUE;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case LB_CHOOSE:
|
||
|
cwnd = ControlWindow(db, wnd->ct->command);
|
||
|
DfSendMessage(cwnd, SETFOCUS, TRUE, 0);
|
||
|
return TRUE;
|
||
|
|
||
|
case CLOSE_WINDOW:
|
||
|
if (wnd->ct != NULL)
|
||
|
free(wnd->ct);
|
||
|
wnd->ct = NULL;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return DefaultWndProc(wnd, msg, p1, p2);
|
||
|
}
|
||
|
|
||
|
void PutComboListText(DFWINDOW wnd, enum commands cmd, char *text)
|
||
|
{
|
||
|
CTLWINDOW *ct = FindCommand(wnd->extension, cmd, COMBOBOX);
|
||
|
|
||
|
if (ct != NULL)
|
||
|
{
|
||
|
DFWINDOW lwnd = ((DFWINDOW)(ct->wnd))->extension;
|
||
|
DfSendMessage(lwnd, ADDTEXT, (PARAM) text, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* EOF */
|