212 VpStartPlaceSizing(tile, VPM_SIGNALDIRS); |
212 VpStartPlaceSizing(tile, VPM_SIGNALDIRS); |
213 } |
213 } |
214 |
214 |
215 static void BuildRailClick_N(Window *w) |
215 static void BuildRailClick_N(Window *w) |
216 { |
216 { |
217 HandlePlacePushButton(w, 3, _cur_railtype*4 + 0x4EF, 1, PlaceRail_N); |
217 HandlePlacePushButton(w, 4, _cur_railtype*4 + 0x4EF, 1, PlaceRail_N); |
218 } |
218 } |
219 |
219 |
220 static void BuildRailClick_NE(Window *w) |
220 static void BuildRailClick_NE(Window *w) |
221 { |
221 { |
222 HandlePlacePushButton(w, 4, _cur_railtype*4 + 0x4F0, 1, PlaceRail_NE); |
222 HandlePlacePushButton(w, 5, _cur_railtype*4 + 0x4F0, 1, PlaceRail_NE); |
223 } |
223 } |
224 |
224 |
225 static void BuildRailClick_E(Window *w) |
225 static void BuildRailClick_E(Window *w) |
226 { |
226 { |
227 HandlePlacePushButton(w, 5, _cur_railtype*4 + 0x4F1, 1, PlaceRail_E); |
227 HandlePlacePushButton(w, 6, _cur_railtype*4 + 0x4F1, 1, PlaceRail_E); |
228 } |
228 } |
229 |
229 |
230 static void BuildRailClick_NW(Window *w) |
230 static void BuildRailClick_NW(Window *w) |
231 { |
231 { |
232 HandlePlacePushButton(w, 6, _cur_railtype*4 + 0x4F2, 1, PlaceRail_NW); |
232 HandlePlacePushButton(w, 7, _cur_railtype*4 + 0x4F2, 1, PlaceRail_NW); |
233 } |
233 } |
234 |
234 |
235 static void BuildRailClick_AutoRail(Window *w) |
235 static void BuildRailClick_AutoRail(Window *w) |
236 { |
236 { |
237 HandlePlacePushButton(w, 7, _cur_railtype + SPR_OPENTTD_BASE + 4, 1, PlaceRail_AutoRail); |
237 HandlePlacePushButton(w, 8, _cur_railtype + SPR_OPENTTD_BASE + 4, 1, PlaceRail_AutoRail); |
238 } |
238 } |
239 |
239 |
240 static void BuildRailClick_Demolish(Window *w) |
240 static void BuildRailClick_Demolish(Window *w) |
241 { |
241 { |
242 HandlePlacePushButton(w, 8, ANIMCURSOR_DEMOLISH, 1, PlaceProc_DemolishArea); |
242 HandlePlacePushButton(w, 9, ANIMCURSOR_DEMOLISH, 1, PlaceProc_DemolishArea); |
243 } |
243 } |
244 |
244 |
245 static const SpriteID _depot_cursors[] = { |
245 static const SpriteID _depot_cursors[] = { |
246 0x510, |
246 0x510, |
247 SPR_OPENTTD_BASE + 14, |
247 SPR_OPENTTD_BASE + 14, |
248 SPR_OPENTTD_BASE + 15, |
248 SPR_OPENTTD_BASE + 15, |
249 }; |
249 }; |
250 |
250 |
251 static void BuildRailClick_Depot(Window *w) |
251 static void BuildRailClick_Depot(Window *w) |
252 { |
252 { |
253 if (HandlePlacePushButton(w, 9, _depot_cursors[_cur_railtype], 1, PlaceRail_Depot)) ShowBuildTrainDepotPicker(); |
253 if (HandlePlacePushButton(w, 10, _depot_cursors[_cur_railtype], 1, PlaceRail_Depot)) ShowBuildTrainDepotPicker(); |
254 } |
254 } |
255 |
255 |
256 static void BuildRailClick_Waypoint(Window *w) |
256 static void BuildRailClick_Waypoint(Window *w) |
257 { |
257 { |
258 _waypoint_count = GetCustomStationsCount(STAT_CLASS_WAYP); |
258 _waypoint_count = GetCustomStationsCount(STAT_CLASS_WAYP); |
259 if (HandlePlacePushButton(w, 10, SPR_OPENTTD_BASE + 7, 1, PlaceRail_Waypoint) |
259 if (HandlePlacePushButton(w, 11, SPR_OPENTTD_BASE + 7, 1, PlaceRail_Waypoint) |
260 && _waypoint_count > 1) |
260 && _waypoint_count > 1) |
261 ShowBuildWaypointPicker(); |
261 ShowBuildWaypointPicker(); |
262 } |
262 } |
263 |
263 |
264 static void BuildRailClick_Station(Window *w) |
264 static void BuildRailClick_Station(Window *w) |
265 { |
265 { |
266 if (HandlePlacePushButton(w, 11, 0x514, 1, PlaceRail_Station)) ShowStationBuilder(); |
266 if (HandlePlacePushButton(w, 12, 0x514, 1, PlaceRail_Station)) ShowStationBuilder(); |
267 } |
267 } |
268 |
268 |
269 static void BuildRailClick_AutoSignals(Window *w) |
269 static void BuildRailClick_AutoSignals(Window *w) |
270 { |
270 { |
271 HandlePlacePushButton(w, 12, ANIMCURSOR_BUILDSIGNALS , 1, PlaceRail_AutoSignals); |
271 HandlePlacePushButton(w, 13, ANIMCURSOR_BUILDSIGNALS , 1, PlaceRail_AutoSignals); |
272 } |
272 } |
273 |
273 |
274 static void BuildRailClick_Bridge(Window *w) |
274 static void BuildRailClick_Bridge(Window *w) |
275 { |
275 { |
276 HandlePlacePushButton(w, 13, 0xA21, 1, PlaceRail_Bridge); |
276 HandlePlacePushButton(w, 14, 0xA21, 1, PlaceRail_Bridge); |
277 } |
277 } |
278 |
278 |
279 static void BuildRailClick_Tunnel(Window *w) |
279 static void BuildRailClick_Tunnel(Window *w) |
280 { |
280 { |
281 HandlePlacePushButton(w, 14, 0x982 + _cur_railtype, 3, PlaceRail_Tunnel); |
281 HandlePlacePushButton(w, 15, 0x982 + _cur_railtype, 3, PlaceRail_Tunnel); |
282 } |
282 } |
283 |
283 |
284 static void BuildRailClick_Remove(Window *w) |
284 static void BuildRailClick_Remove(Window *w) |
285 { |
285 { |
286 if (w->disabled_state & (1<<15)) |
286 if (w->disabled_state & (1<<16)) |
287 return; |
287 return; |
288 SetWindowDirty(w); |
288 SetWindowDirty(w); |
289 SndPlayFx(SND_15_BEEP); |
289 SndPlayFx(SND_15_BEEP); |
290 |
290 |
291 _thd.make_square_red = !!((w->click_state ^= (1 << 15)) & (1<<15)); |
291 _thd.make_square_red = !!((w->click_state ^= (1 << 16)) & (1<<16)); |
292 MarkTileDirty(_thd.pos.x, _thd.pos.y); |
292 MarkTileDirty(_thd.pos.x, _thd.pos.y); |
293 _remove_button_clicked = (w->click_state & (1 << 15)) != 0; |
293 _remove_button_clicked = (w->click_state & (1 << 16)) != 0; |
294 |
294 |
295 // handle station builder |
295 // handle station builder |
296 if( w->click_state & (1 << 15) ) |
296 if( w->click_state & (1 << 16) ) |
297 { |
297 { |
298 if(_remove_button_clicked) |
298 if(_remove_button_clicked) |
299 SetTileSelectSize(1, 1); |
299 SetTileSelectSize(1, 1); |
300 else |
300 else |
301 BringWindowToFrontById(WC_BUILD_STATION, 0); |
301 BringWindowToFrontById(WC_BUILD_STATION, 0); |
302 } |
302 } |
303 } |
303 } |
304 |
304 |
305 static void BuildRailClick_Convert(Window *w) |
305 static void BuildRailClick_Convert(Window *w) |
306 { |
306 { |
307 HandlePlacePushButton(w, 16, (SPR_OPENTTD_BASE + 26) + _cur_railtype * 2, 1, PlaceRail_ConvertRail); |
307 HandlePlacePushButton(w, 17, (SPR_OPENTTD_BASE + 26) + _cur_railtype * 2, 1, PlaceRail_ConvertRail); |
308 } |
308 } |
309 |
309 |
310 static void BuildRailClick_Landscaping(Window *w) |
310 static void BuildRailClick_Landscaping(Window *w) |
311 { |
311 { |
312 ShowTerraformToolbar(); |
312 ShowTerraformToolbar(); |
594 |
594 |
595 static void BuildRailToolbWndProc(Window *w, WindowEvent *e) |
595 static void BuildRailToolbWndProc(Window *w, WindowEvent *e) |
596 { |
596 { |
597 switch(e->event) { |
597 switch(e->event) { |
598 case WE_PAINT: |
598 case WE_PAINT: |
599 w->disabled_state &= ~(1 << 15); |
599 w->disabled_state &= ~(1 << 16); |
600 if (!(w->click_state & ((1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<10)|(1<<11)|(1<<12)))) { |
600 if (!(w->click_state & ((1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<11)|(1<<12)|(1<<13)))) { |
601 w->disabled_state |= (1 << 15); |
601 w->disabled_state |= (1 << 16); |
602 w->click_state &= ~(1<<15); |
602 w->click_state &= ~(1<<16); |
603 } |
603 } |
604 DrawWindowWidgets(w); |
604 DrawWindowWidgets(w); |
605 break; |
605 break; |
606 |
606 |
607 case WE_CLICK: |
607 case WE_CLICK: |
608 if (e->click.widget >= 3) { |
608 if (e->click.widget >= 4) { |
609 _remove_button_clicked = false; |
609 _remove_button_clicked = false; |
610 _build_railroad_button_proc[e->click.widget - 3](w); |
610 _build_railroad_button_proc[e->click.widget - 4](w); |
611 } |
611 } |
612 break; |
612 break; |
613 |
613 |
614 case WE_KEYPRESS: { |
614 case WE_KEYPRESS: { |
615 int i; |
615 int i; |
616 |
616 |
617 for(i=0; i!=lengthof(_rail_keycodes); i++) |
617 for(i=0; i!=lengthof(_rail_keycodes); i++) { |
618 if (e->keypress.keycode == _rail_keycodes[i]) { |
618 if (e->keypress.keycode == _rail_keycodes[i]) { |
619 e->keypress.cont = false; |
619 e->keypress.cont = false; |
620 _remove_button_clicked = false; |
620 _remove_button_clicked = false; |
621 _build_railroad_button_proc[i](w); |
621 _build_railroad_button_proc[i](w); |
622 break; |
622 break; |
623 } |
623 } |
|
624 } |
|
625 MarkTileDirty(_thd.pos.x, _thd.pos.y); // redraw tile selection |
624 break; |
626 break; |
625 } |
627 } |
626 |
628 |
627 case WE_PLACE_OBJ: |
629 case WE_PLACE_OBJ: |
628 _place_proc(e->place.tile); |
630 _place_proc(e->place.tile); |
681 } |
683 } |
682 |
684 |
683 |
685 |
684 static const Widget _build_railroad_widgets[] = { |
686 static const Widget _build_railroad_widgets[] = { |
685 { WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW}, |
687 { WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW}, |
686 { WWT_CAPTION, 7, 11, 371, 0, 13, STR_100A_RAILROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
688 { WWT_CAPTION, 7, 11, 359, 0, 13, STR_100A_RAILROAD_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
|
689 { WWT_STICKYBOX, 7, 360, 371, 0, 13, 0x0, STR_STICKY_BUTTON}, |
687 |
690 |
688 { WWT_PANEL, 7, 110, 113, 14, 35, 0x0, STR_NULL}, |
691 { WWT_PANEL, 7, 110, 113, 14, 35, 0x0, STR_NULL}, |
689 |
692 |
690 { WWT_PANEL, 7, 0, 21, 14, 35, 0x4E3, STR_1018_BUILD_RAILROAD_TRACK}, |
693 { WWT_PANEL, 7, 0, 21, 14, 35, 0x4E3, STR_1018_BUILD_RAILROAD_TRACK}, |
691 { WWT_PANEL, 7, 22, 43, 14, 35, 0x4E4, STR_1018_BUILD_RAILROAD_TRACK}, |
694 { WWT_PANEL, 7, 22, 43, 14, 35, 0x4E4, STR_1018_BUILD_RAILROAD_TRACK}, |
710 }; |
713 }; |
711 |
714 |
712 static const WindowDesc _build_railroad_desc = { |
715 static const WindowDesc _build_railroad_desc = { |
713 640-372, 22, 372, 36, |
716 640-372, 22, 372, 36, |
714 WC_BUILD_TOOLBAR,0, |
717 WC_BUILD_TOOLBAR,0, |
715 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, |
718 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON, |
716 _build_railroad_widgets, |
719 _build_railroad_widgets, |
717 BuildRailToolbWndProc |
720 BuildRailToolbWndProc |
718 }; |
721 }; |
719 |
722 |
720 static const Widget _build_monorail_widgets[] = { |
723 static const Widget _build_monorail_widgets[] = { |
721 { WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW}, |
724 { WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW}, |
722 { WWT_CAPTION, 7, 11, 371, 0, 13, STR_100B_MONORAIL_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
725 { WWT_CAPTION, 7, 11, 359, 0, 13, STR_100B_MONORAIL_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
|
726 { WWT_STICKYBOX, 7, 360, 371, 0, 13, 0x0, STR_STICKY_BUTTON}, |
723 |
727 |
724 { WWT_PANEL, 7, 110, 113, 14, 35, 0x0, STR_NULL}, |
728 { WWT_PANEL, 7, 110, 113, 14, 35, 0x0, STR_NULL}, |
725 |
729 |
726 { WWT_PANEL, 7, 0, 21, 14, 35, 0x4E7, STR_1018_BUILD_RAILROAD_TRACK}, |
730 { WWT_PANEL, 7, 0, 21, 14, 35, 0x4E7, STR_1018_BUILD_RAILROAD_TRACK}, |
727 { WWT_PANEL, 7, 22, 43, 14, 35, 0x4E8, STR_1018_BUILD_RAILROAD_TRACK}, |
731 { WWT_PANEL, 7, 22, 43, 14, 35, 0x4E8, STR_1018_BUILD_RAILROAD_TRACK}, |
746 }; |
750 }; |
747 |
751 |
748 static const WindowDesc _build_monorail_desc = { |
752 static const WindowDesc _build_monorail_desc = { |
749 640-372, 22, 372, 36, |
753 640-372, 22, 372, 36, |
750 WC_BUILD_TOOLBAR,0, |
754 WC_BUILD_TOOLBAR,0, |
751 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET, |
755 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON, |
752 _build_monorail_widgets, |
756 _build_monorail_widgets, |
753 BuildRailToolbWndProc |
757 BuildRailToolbWndProc |
754 }; |
758 }; |
755 |
759 |
756 static const Widget _build_maglev_widgets[] = { |
760 static const Widget _build_maglev_widgets[] = { |
757 { WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW}, |
761 { WWT_CLOSEBOX, 7, 0, 10, 0, 13, STR_00C5,STR_018B_CLOSE_WINDOW}, |
758 { WWT_CAPTION, 7, 11, 371, 0, 13, STR_100C_MAGLEV_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
762 { WWT_CAPTION, 7, 11, 359, 0, 13, STR_100C_MAGLEV_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
|
763 { WWT_STICKYBOX, 7, 360, 371, 0, 13, 0x0, STR_STICKY_BUTTON}, |
759 |
764 |
760 { WWT_PANEL, 7, 110, 113, 14, 35, 0x0, STR_NULL}, |
765 { WWT_PANEL, 7, 110, 113, 14, 35, 0x0, STR_NULL}, |
761 |
766 |
762 { WWT_PANEL, 7, 0, 21, 14, 35, 0x4EB, STR_1018_BUILD_RAILROAD_TRACK}, |
767 { WWT_PANEL, 7, 0, 21, 14, 35, 0x4EB, STR_1018_BUILD_RAILROAD_TRACK}, |
763 { WWT_PANEL, 7, 22, 43, 14, 35, 0x4EC, STR_1018_BUILD_RAILROAD_TRACK}, |
768 { WWT_PANEL, 7, 22, 43, 14, 35, 0x4EC, STR_1018_BUILD_RAILROAD_TRACK}, |