Don't keep overwriting the first address entry, give the others a chance too.
[reactos.git] / rosapps / dflat32 / combobox.c
1 /* -------------- combobox.c -------------- */
2
3 #include "dflat.h"
4
5 int ListProc(DFWINDOW, DFMESSAGE, DF_PARAM, DF_PARAM);
6
7 int DfComboProc(DFWINDOW wnd, DFMESSAGE msg, DF_PARAM p1, DF_PARAM p2)
8 {
9 switch (msg) {
10 case DFM_CREATE_WINDOW:
11 wnd->extension = DfDfCreateWindow(
12 DF_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 DF_HASBORDER | DF_NOCLIP | DF_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 DFM_PAINT:
26 DfForeground = DfWndBackground(wnd);
27 DfBackground = DfWndForeground(wnd);
28 DfWPutch(wnd, DF_DOWNSCROLLBOX, DfWindowWidth(wnd), 0);
29 break;
30 case DFM_KEYBOARD:
31 if ((int)p1 == DF_DN) {
32 DfSendMessage(wnd->extension, DFM_SETFOCUS, TRUE, 0);
33 return TRUE;
34 }
35 break;
36 case DFM_LEFT_BUTTON:
37 if ((int)p1 == DfGetRight(wnd) + 1)
38 DfSendMessage(wnd->extension, DFM_SETFOCUS, TRUE, 0);
39 break;
40 case DFM_CLOSE_WINDOW:
41 DfSendMessage(wnd->extension, DFM_CLOSE_WINDOW, 0, 0);
42 break;
43 default:
44 break;
45 }
46 return DfBaseWndProc(DF_COMBOBOX, wnd, msg, p1, p2);
47 }
48
49 int ListProc(DFWINDOW wnd, DFMESSAGE msg, DF_PARAM p1, DF_PARAM p2)
50 {
51 DFWINDOW pwnd = DfGetParent(DfGetParent(wnd));
52 DF_DBOX *db = pwnd->extension;
53 DFWINDOW cwnd;
54 char text[130];
55 int rtn;
56 DFWINDOW currFocus;
57
58 switch (msg)
59 {
60 case DFM_CREATE_WINDOW:
61 wnd->ct = DfMalloc(sizeof(DF_CTLWINDOW));
62 wnd->ct->setting = DF_OFF;
63 wnd->WindowColors[DF_FRAME_COLOR][DF_FG] =
64 wnd->WindowColors[DF_STD_COLOR][DF_FG];
65 wnd->WindowColors[DF_FRAME_COLOR][DF_BG] =
66 wnd->WindowColors[DF_STD_COLOR][DF_BG];
67 rtn = DfDefaultWndProc(wnd, msg, p1, p2);
68 return rtn;
69
70 case DFM_SETFOCUS:
71 if ((int)p1 == FALSE)
72 {
73 if (!wnd->isHelping)
74 {
75 DfSendMessage(wnd, DFM_HIDE_WINDOW, 0, 0);
76 wnd->ct->setting = DF_OFF;
77 }
78 }
79 else
80 wnd->ct->setting = DF_ON;
81 break;
82
83 case DFM_SHOW_WINDOW:
84 if (wnd->ct->setting == DF_OFF)
85 return TRUE;
86 break;
87
88 case DFM_BORDER:
89 currFocus = DfInFocus;
90 DfInFocus = NULL;
91 rtn = DfDefaultWndProc(wnd, msg, p1, p2);
92 DfInFocus = currFocus;
93 return rtn;
94
95 case DFM_LB_SELECTION:
96 rtn = DfDefaultWndProc(wnd, msg, p1, p2);
97 DfSendMessage(wnd, DFM_LB_GETTEXT,
98 (DF_PARAM) text, wnd->selection);
99 DfPutItemText(pwnd, wnd->ct->command, text);
100 cwnd = DfControlWindow(db, wnd->ct->command);
101 DfSendMessage(cwnd, DFM_PAINT, 0, 0);
102 cwnd->TextChanged = TRUE;
103 return rtn;
104
105 case DFM_KEYBOARD:
106 switch ((int) p1)
107 {
108 case DF_ESC:
109 case DF_FWD:
110 case DF_BS:
111 cwnd = DfControlWindow(db, wnd->ct->command);
112 DfSendMessage(cwnd, DFM_SETFOCUS, TRUE, 0);
113 return TRUE;
114
115 default:
116 break;
117 }
118 break;
119
120 case DFM_LB_CHOOSE:
121 cwnd = DfControlWindow(db, wnd->ct->command);
122 DfSendMessage(cwnd, DFM_SETFOCUS, TRUE, 0);
123 return TRUE;
124
125 case DFM_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 DfDefaultWndProc(wnd, msg, p1, p2);
136 }
137
138 void DfPutComboListText(DFWINDOW wnd, enum DfCommands cmd, char *text)
139 {
140 DF_CTLWINDOW *ct = DfFindCommand(wnd->extension, cmd, DF_COMBOBOX);
141
142 if (ct != NULL)
143 {
144 DFWINDOW lwnd = ((DFWINDOW)(ct->wnd))->extension;
145 DfSendMessage(lwnd, DFM_ADDTEXT, (DF_PARAM) text, 0);
146 }
147 }
148
149 /* EOF */