SYSTEM_TIME_ZONE_INFORMATION added.
[reactos.git] / rosapps / dflat32 / combobox.c
1 /* -------------- combobox.c -------------- */
2
3 #include "dflat.h"
4
5 int ListProc(DFWINDOW, DFMESSAGE, PARAM, PARAM);
6
7 int ComboProc(DFWINDOW wnd, DFMESSAGE msg, PARAM p1, PARAM p2)
8 {
9 switch (msg) {
10 case CREATE_WINDOW:
11 wnd->extension = DfCreateWindow(
12 LISTBOX,
13 NULL,
14 wnd->rc.lf,wnd->rc.tp+1,
15 wnd->ht-1, wnd->wd+1,
16 NULL,
17 wnd,
18 ListProc,
19 HASBORDER | NOCLIP | SAVESELF);
20 ((DFWINDOW)(wnd->extension))->ct->command =
21 wnd->ct->command;
22 wnd->ht = 1;
23 wnd->rc.bt = wnd->rc.tp;
24 break;
25 case PAINT:
26 foreground = WndBackground(wnd);
27 background = WndForeground(wnd);
28 wputch(wnd, DOWNSCROLLBOX, WindowWidth(wnd), 0);
29 break;
30 case KEYBOARD:
31 if ((int)p1 == DN) {
32 DfSendMessage(wnd->extension, SETFOCUS, TRUE, 0);
33 return TRUE;
34 }
35 break;
36 case LEFT_BUTTON:
37 if ((int)p1 == GetRight(wnd) + 1)
38 DfSendMessage(wnd->extension, SETFOCUS, TRUE, 0);
39 break;
40 case CLOSE_WINDOW:
41 DfSendMessage(wnd->extension, CLOSE_WINDOW, 0, 0);
42 break;
43 default:
44 break;
45 }
46 return BaseWndProc(COMBOBOX, wnd, msg, p1, p2);
47 }
48
49 int ListProc(DFWINDOW wnd, DFMESSAGE msg, PARAM p1, PARAM p2)
50 {
51 DFWINDOW pwnd = GetParent(GetParent(wnd));
52 DBOX *db = pwnd->extension;
53 DFWINDOW cwnd;
54 char text[130];
55 int rtn;
56 DFWINDOW currFocus;
57
58 switch (msg)
59 {
60 case CREATE_WINDOW:
61 wnd->ct = DFmalloc(sizeof(CTLWINDOW));
62 wnd->ct->setting = OFF;
63 wnd->WindowColors[FRAME_COLOR][FG] =
64 wnd->WindowColors[STD_COLOR][FG];
65 wnd->WindowColors[FRAME_COLOR][BG] =
66 wnd->WindowColors[STD_COLOR][BG];
67 rtn = DefaultWndProc(wnd, msg, p1, p2);
68 return rtn;
69
70 case SETFOCUS:
71 if ((int)p1 == FALSE)
72 {
73 if (!wnd->isHelping)
74 {
75 DfSendMessage(wnd, DFM_HIDE_WINDOW, 0, 0);
76 wnd->ct->setting = OFF;
77 }
78 }
79 else
80 wnd->ct->setting = ON;
81 break;
82
83 case SHOW_WINDOW:
84 if (wnd->ct->setting == OFF)
85 return TRUE;
86 break;
87
88 case BORDER:
89 currFocus = inFocus;
90 inFocus = NULL;
91 rtn = DefaultWndProc(wnd, msg, p1, p2);
92 inFocus = currFocus;
93 return rtn;
94
95 case LB_SELECTION:
96 rtn = DefaultWndProc(wnd, msg, p1, p2);
97 DfSendMessage(wnd, DFM_LB_GETTEXT,
98 (PARAM) text, wnd->selection);
99 PutItemText(pwnd, wnd->ct->command, text);
100 cwnd = ControlWindow(db, wnd->ct->command);
101 DfSendMessage(cwnd, PAINT, 0, 0);
102 cwnd->TextChanged = TRUE;
103 return rtn;
104
105 case KEYBOARD:
106 switch ((int) p1)
107 {
108 case ESC:
109 case FWD:
110 case BS:
111 cwnd = ControlWindow(db, wnd->ct->command);
112 DfSendMessage(cwnd, SETFOCUS, TRUE, 0);
113 return TRUE;
114
115 default:
116 break;
117 }
118 break;
119
120 case LB_CHOOSE:
121 cwnd = ControlWindow(db, wnd->ct->command);
122 DfSendMessage(cwnd, SETFOCUS, TRUE, 0);
123 return TRUE;
124
125 case CLOSE_WINDOW:
126 if (wnd->ct != NULL)
127 free(wnd->ct);
128 wnd->ct = NULL;
129 break;
130
131 default:
132 break;
133 }
134
135 return DefaultWndProc(wnd, msg, p1, p2);
136 }
137
138 void PutComboListText(DFWINDOW wnd, enum commands cmd, char *text)
139 {
140 CTLWINDOW *ct = FindCommand(wnd->extension, cmd, COMBOBOX);
141
142 if (ct != NULL)
143 {
144 DFWINDOW lwnd = ((DFWINDOW)(ct->wnd))->extension;
145 DfSendMessage(lwnd, ADDTEXT, (PARAM) text, 0);
146 }
147 }
148
149 /* EOF */