reactos/rosapps/dflat32/combobox.c
Eric Kohl 79d0e047eb Added D-Flat/32 library
svn path=/trunk/; revision=1032
2000-03-05 19:58:08 +00:00

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 */