55 |
57 |
56 DrawString(15, 82, STR_NETWORK_GAME_NAME, 2); |
58 DrawString(15, 82, STR_NETWORK_GAME_NAME, 2); |
57 DrawString(238, 82, STR_NETWORK_PLAYERS, 2); |
59 DrawString(238, 82, STR_NETWORK_PLAYERS, 2); |
58 DrawString(288, 82, STR_NETWORK_MAP_SIZE, 2); |
60 DrawString(288, 82, STR_NETWORK_MAP_SIZE, 2); |
59 |
61 |
|
62 { // draw list of games |
|
63 uint16 y = NET_PRC__OFFSET_TOP_WIDGET + 3; |
|
64 int32 n = 0; |
|
65 NetworkGameList *cur_item = _network_game_list; |
|
66 while (cur_item != NULL) { |
|
67 if (cur_item == selected_item) |
|
68 GfxFillRect(11, y - 2, 380, y + 9, 10); // show highlighted item with a different colour |
|
69 |
|
70 DoDrawString(cur_item->item.server_name, 15, y, 16); // server name |
|
71 |
|
72 SET_DPARAM8(0, cur_item->item.players_on); |
|
73 SET_DPARAM8(1, cur_item->item.players_max); |
|
74 DrawString(238, y, STR_NETWORK_PLAYERS_VAL, 2); // #/# |
|
75 |
|
76 DoDrawString(cur_item->item.map_name, 288, y, 16); // map size |
|
77 cur_item = cur_item->_next; |
|
78 y += NET_PRC__SIZE_OF_ROW; |
|
79 if (++n == w->vscroll.cap) { break;} // max number of games in the window |
|
80 } |
|
81 } |
60 } break; |
82 } break; |
61 |
83 |
62 case WE_CLICK: |
84 case WE_CLICK: |
63 _selected_field = e->click.widget; |
85 _selected_field = e->click.widget; |
64 switch(e->click.widget) { |
86 switch(e->click.widget) { |
86 ShowNetworkStartServerWindow(); |
108 ShowNetworkStartServerWindow(); |
87 break; |
109 break; |
88 case 7: case 8: /* Connection type */ |
110 case 7: case 8: /* Connection type */ |
89 ShowDropDownMenu(w, _connection_types_dropdown, _network_connection, 8, 0); // do it for widget 8 |
111 ShowDropDownMenu(w, _connection_types_dropdown, _network_connection, 8, 0); // do it for widget 8 |
90 return; |
112 return; |
|
113 case 14: { /* Matrix to show networkgames */ |
|
114 uint32 id_v = (e->click.pt.y - NET_PRC__OFFSET_TOP_WIDGET) / NET_PRC__SIZE_OF_ROW; |
|
115 |
|
116 if (id_v >= w->vscroll.cap) { return;} // click out of bounds |
|
117 |
|
118 id_v += w->vscroll.pos; |
|
119 |
|
120 { |
|
121 NetworkGameList *cur_item = _network_game_list; |
|
122 int32 n = 0; |
|
123 while (cur_item != NULL) { |
|
124 if (n++ == id_v) { break;} // found clicked item |
|
125 |
|
126 cur_item = cur_item->_next; |
|
127 } |
|
128 |
|
129 if (cur_item == NULL) { return;} // click out of vehicle bounds |
|
130 |
|
131 selected_item = cur_item; |
|
132 } |
|
133 } break; |
|
134 case 16: /* Join Game */ |
|
135 if (selected_item != NULL) |
|
136 NetworkCoreConnectGameStruct(selected_item); |
|
137 break; |
91 } |
138 } |
92 break; |
139 break; |
93 |
140 |
94 case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */ |
141 case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */ |
95 _network_connection = e->dropdown.index; |
142 _network_connection = e->dropdown.index; |
96 switch (_network_connection) { |
143 switch (_network_connection) { |
97 case 0: |
144 case 0: /* LAN */ |
98 NetworkGameListFromLAN(); |
145 NetworkGameListFromLAN(); |
99 _network_game_count_last = _network_game_count; |
146 break; |
100 SetWindowDirty(w); |
147 case 1: /* Internet */ |
101 break; |
|
102 case 1: |
|
103 NetworkGameListFromInternet(); |
148 NetworkGameListFromInternet(); |
104 _network_game_count_last = _network_game_count; |
149 break; |
105 SetWindowDirty(w); |
150 } |
106 break; |
151 |
107 } |
152 _network_game_count_last = _network_game_count; |
|
153 SetWindowDirty(w); |
|
154 |
108 break; |
155 break; |
109 |
156 |
110 case WE_MOUSELOOP: |
157 case WE_MOUSELOOP: |
111 if (_selected_field == 6) |
158 if (_selected_field == 6) |
112 HandleEditBox(w, 6); |
159 HandleEditBox(w, 6); |
124 } |
171 } |
125 break; |
172 break; |
126 |
173 |
127 case WE_ON_EDIT_TEXT: { |
174 case WE_ON_EDIT_TEXT: { |
128 const byte *b = e->edittext.str; |
175 const byte *b = e->edittext.str; |
129 if (*b == 0) |
176 if (*b != 0) |
130 return; |
177 NetworkCoreConnectGame(b, _network_server_port); |
131 NetworkCoreConnectGame(b,_network_server_port); |
|
132 } break; |
178 } break; |
133 |
179 |
|
180 case WE_TICK: { |
|
181 if (_network_game_count_last != _network_game_count) |
|
182 SetWindowDirty(w); |
|
183 } break; |
|
184 |
134 } |
185 } |
135 } |
186 } |
136 |
187 |
137 static const Widget _network_game_window_widgets[] = { |
188 static const Widget _network_game_window_widgets[] = { |
138 { WWT_PUSHTXTBTN, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
189 { WWT_CLOSEBOX, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
139 { WWT_CAPTION, BGC, 10, 399, 0, 13, STR_NETWORK_MULTIPLAYER, STR_NULL}, |
190 { WWT_CAPTION, BGC, 10, 399, 0, 13, STR_NETWORK_MULTIPLAYER, STR_NULL}, |
140 { WWT_IMGBTN, BGC, 0, 399, 14, 199, 0x0, STR_NULL}, |
191 { WWT_IMGBTN, BGC, 0, 399, 14, 199, 0x0, STR_NULL}, |
141 |
192 |
142 { WWT_PUSHTXTBTN, BTC, 20, 130, 22, 33, STR_NETWORK_FIND_SERVER, STR_NETWORK_FIND_SERVER_TIP}, |
193 { WWT_PUSHTXTBTN, BTC, 20, 130, 22, 33, STR_NETWORK_FIND_SERVER, STR_NETWORK_FIND_SERVER_TIP}, |
143 { WWT_PUSHTXTBTN, BTC, 145, 255, 22, 33, STR_NETWORK_DIRECT_CONNECT, STR_NETWORK_DIRECT_CONNECT_TIP}, |
194 { WWT_PUSHTXTBTN, BTC, 145, 255, 22, 33, STR_NETWORK_DIRECT_CONNECT, STR_NETWORK_DIRECT_CONNECT_TIP}, |
146 { WWT_IMGBTN, BGC, 250, 394, 42, 53, 0x0, STR_NETWORK_ENTER_NAME_TIP}, |
197 { WWT_IMGBTN, BGC, 250, 394, 42, 53, 0x0, STR_NETWORK_ENTER_NAME_TIP}, |
147 |
198 |
148 { WWT_6, BGC, 250, 393, 62, 73, STR_NETWORK_COMBO1, STR_NETWORK_CONNECTION_TYPE_TIP}, |
199 { WWT_6, BGC, 250, 393, 62, 73, STR_NETWORK_COMBO1, STR_NETWORK_CONNECTION_TYPE_TIP}, |
149 { WWT_CLOSEBOX, BGC, 382, 392, 63, 72, STR_0225, STR_NETWORK_CONNECTION_TYPE_TIP}, |
200 { WWT_CLOSEBOX, BGC, 382, 392, 63, 72, STR_0225, STR_NETWORK_CONNECTION_TYPE_TIP}, |
150 |
201 |
151 { WWT_SCROLLBAR, BGC, 382, 392, 81, 175, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
202 { WWT_SCROLLBAR, BGC, 382, 392, 81, 176, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
152 |
203 |
153 { WWT_IMGBTN, BTC, 10, 231, 81, 92, 0x0, STR_NETWORK_GAME_NAME_TIP }, |
204 { WWT_IMGBTN, BTC, 10, 231, 81, 92, 0x0, STR_NETWORK_GAME_NAME_TIP }, |
154 { WWT_IMGBTN, BTC, 232, 281, 81, 92, 0x0, STR_NETWORK_PLAYERS_TIP }, |
205 { WWT_IMGBTN, BTC, 232, 281, 81, 92, 0x0, STR_NETWORK_PLAYERS_TIP }, |
155 { WWT_IMGBTN, BTC, 282, 331, 81, 92, 0x0, STR_NETWORK_MAP_SIZE_TIP }, |
206 { WWT_IMGBTN, BTC, 282, 331, 81, 92, 0x0, STR_NETWORK_MAP_SIZE_TIP }, |
156 { WWT_IMGBTN, BTC, 332, 381, 81, 92, 0x0, STR_NETWORK_INFO_ICONS_TIP }, |
207 { WWT_IMGBTN, BTC, 332, 381, 81, 92, 0x0, STR_NETWORK_INFO_ICONS_TIP }, |
157 |
208 |
158 { WWT_MATRIX, BGC, 10, 381, 93, 175, 0x601, STR_NETWORK_CLICK_GAME_TO_SELECT}, |
209 { WWT_MATRIX, BGC, 10, 381, 93, 176, 0x601, STR_NETWORK_CLICK_GAME_TO_SELECT}, |
159 |
210 |
160 { WWT_PUSHTXTBTN, BTC, 145, 255, 180, 191, STR_012E_CANCEL, STR_NULL}, |
211 { WWT_PUSHTXTBTN, BTC, 145, 255, 180, 191, STR_012E_CANCEL, STR_NULL}, |
161 { WWT_PUSHTXTBTN, BTC, 270, 392, 180, 191, STR_NETWORK_JOIN_GAME, STR_NULL}, |
212 { WWT_PUSHTXTBTN, BTC, 270, 392, 180, 191, STR_NETWORK_JOIN_GAME, STR_NULL}, |
162 { WIDGETS_END}, |
213 { WIDGETS_END}, |
163 }; |
214 }; |
230 case 7: case 8: /* Number of Players */ |
284 case 7: case 8: /* Number of Players */ |
231 ShowDropDownMenu(w, _players_dropdown, _players_max, 8, 0); // do it for widget 8 |
285 ShowDropDownMenu(w, _players_dropdown, _players_max, 8, 0); // do it for widget 8 |
232 return; |
286 return; |
233 case 9: /* Start game */ |
287 case 9: /* Start game */ |
234 NetworkCoreStartGame(); |
288 NetworkCoreStartGame(); |
|
289 strcpy(_network_game.server_name, WP(w,querystr_d).buf); |
235 //ShowNetworkLobbyWindow(); |
290 //ShowNetworkLobbyWindow(); |
236 DoCommandP(0, 0, 0, NULL, CMD_START_NEW_GAME); |
291 DoCommandP(0, 0, 0, NULL, CMD_START_NEW_GAME); |
237 break; |
292 break; |
238 case 10: /* Load game */ |
293 case 10: /* Load game */ |
239 NetworkCoreStartGame(); |
294 NetworkCoreStartGame(); |
|
295 strcpy(_network_game.server_name, WP(w,querystr_d).buf); |
240 //ShowNetworkLobbyWindow(); |
296 //ShowNetworkLobbyWindow(); |
241 ShowSaveLoadDialog(SLD_LOAD_GAME); |
297 ShowSaveLoadDialog(SLD_LOAD_GAME); |
242 break; |
298 break; |
243 case 11: /* Load scenario */ |
299 case 11: /* Load scenario */ |
244 NetworkCoreStartGame(); |
300 NetworkCoreStartGame(); |
|
301 strcpy(_network_game.server_name, WP(w,querystr_d).buf); |
245 //ShowNetworkLobbyWindow(); |
302 //ShowNetworkLobbyWindow(); |
246 ShowSaveLoadDialog(SLD_LOAD_SCENARIO);; |
303 ShowSaveLoadDialog(SLD_LOAD_SCENARIO); |
247 break; |
304 break; |
248 } |
305 } |
249 break; |
306 break; |
250 |
307 |
251 case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */ |
308 case WE_DROPDOWN_SELECT: /* we have selected a dropdown item in the list */ |
285 { WWT_SCROLLBAR, BGC, 241, 251, 62, 170, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
342 { WWT_SCROLLBAR, BGC, 241, 251, 62, 170, 0x0, STR_0190_SCROLL_BAR_SCROLLS_LIST}, |
286 |
343 |
287 { WWT_6, BGC, 260, 390, 81, 92, STR_NETWORK_COMBO2, STR_NETWORK_NUMBER_OF_PLAYERS_TIP}, |
344 { WWT_6, BGC, 260, 390, 81, 92, STR_NETWORK_COMBO2, STR_NETWORK_NUMBER_OF_PLAYERS_TIP}, |
288 { WWT_CLOSEBOX, BGC, 379, 389, 82, 91, STR_0225, STR_NETWORK_NUMBER_OF_PLAYERS_TIP}, |
345 { WWT_CLOSEBOX, BGC, 379, 389, 82, 91, STR_0225, STR_NETWORK_NUMBER_OF_PLAYERS_TIP}, |
289 |
346 |
290 { WWT_PUSHTXTBTN, BTC, 10, 100, 180, 191, STR_NETWORK_START_GAME, STR_NULL}, |
347 { WWT_PUSHTXTBTN, BTC, 10, 100, 180, 191, STR_NETWORK_START_GAME, STR_NETWORK_START_GAME_TIP}, |
291 { WWT_PUSHTXTBTN, BTC, 110, 200, 180, 191, STR_NETWORK_LOAD_GAME, STR_NULL}, |
348 { WWT_PUSHTXTBTN, BTC, 110, 200, 180, 191, STR_NETWORK_LOAD_GAME, STR_NETWORK_LOAD_GAME_TIP}, |
292 { WWT_PUSHTXTBTN, BTC, 210, 300, 180, 191, STR_NETWORK_LOAD_SCENARIO, STR_NULL}, |
349 { WWT_PUSHTXTBTN, BTC, 210, 300, 180, 191, STR_NETWORK_LOAD_SCENARIO, STR_NETWORK_LOAD_SCENARIO_TIP}, |
293 { WWT_PUSHTXTBTN, BTC, 310, 390, 180, 191, STR_012E_CANCEL, STR_NULL}, |
350 { WWT_PUSHTXTBTN, BTC, 310, 390, 180, 191, STR_012E_CANCEL, STR_NULL}, |
294 { WIDGETS_END}, |
351 { WIDGETS_END}, |
295 }; |
352 }; |
296 |
353 |
297 static const WindowDesc _network_start_server_window_desc = { |
354 static const WindowDesc _network_start_server_window_desc = { |
307 Window *w; |
364 Window *w; |
308 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
365 DeleteWindowById(WC_NETWORK_WINDOW, 0); |
309 |
366 |
310 w = AllocateWindowDesc(&_network_start_server_window_desc); |
367 w = AllocateWindowDesc(&_network_start_server_window_desc); |
311 strcpy(_edit_str_buf, ""); |
368 strcpy(_edit_str_buf, ""); |
|
369 w->disabled_state = (1<<4) | (1<<5) | (1<<6) | (1<<7) | (1<<8); // disable buttons not yet working |
312 |
370 |
313 WP(w,querystr_d).caret = 1; |
371 WP(w,querystr_d).caret = 1; |
314 WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN; |
372 WP(w,querystr_d).maxlen = MAX_QUERYSTR_LEN; |
315 WP(w,querystr_d).maxwidth = 240; |
373 WP(w,querystr_d).maxwidth = 240; |
316 WP(w,querystr_d).buf = _edit_str_buf; |
374 WP(w,querystr_d).buf = _edit_str_buf; |
373 |
431 |
374 } |
432 } |
375 } |
433 } |
376 |
434 |
377 static const Widget _network_lobby_window_widgets[] = { |
435 static const Widget _network_lobby_window_widgets[] = { |
378 { WWT_PUSHTXTBTN, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, |
436 { WWT_CLOSEBOX, BGC, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW }, |
379 { WWT_CAPTION, BGC, 10, 399, 0, 13, STR_NETWORK_GAME_LOBBY, STR_NULL}, |
437 { WWT_CAPTION, BGC, 10, 399, 0, 13, STR_NETWORK_GAME_LOBBY, STR_NULL}, |
380 { WWT_IMGBTN, BGC, 0, 399, 14, 299, 0x0, STR_NULL}, |
438 { WWT_IMGBTN, BGC, 0, 399, 14, 299, 0x0, STR_NULL}, |
381 |
439 |
382 // chat widget |
440 // chat widget |
383 { WWT_IMGBTN, BGC, 10, 240, 30, 240, 0x0, STR_NULL}, |
441 { WWT_IMGBTN, BGC, 10, 240, 30, 240, 0x0, STR_NULL}, |