rail_gui.c
changeset 756 b76998029c12
parent 679 04ca2cd69420
child 787 b3639c660998
equal deleted inserted replaced
755:80091de50044 756:b76998029c12
   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);
   661 			}
   663 			}
   662 		}
   664 		}
   663 		break;
   665 		break;
   664 
   666 
   665 	case WE_ABORT_PLACE_OBJ:
   667 	case WE_ABORT_PLACE_OBJ:
   666 		w->click_state = 0;
   668 		UnclickWindowButtons(w);
   667 		SetWindowDirty(w);
   669 		SetWindowDirty(w);
   668 
   670 
   669 		w = FindWindowById(WC_BUILD_STATION, 0);
   671 		w = FindWindowById(WC_BUILD_STATION, 0);
   670 		if (w != NULL) WP(w,def_d).close=true;
   672 		if (w != NULL) WP(w,def_d).close=true;
   671 		w = FindWindowById(WC_BUILD_DEPOT, 0);
   673 		w = FindWindowById(WC_BUILD_DEPOT, 0);
   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},
   782 };
   787 };
   783 
   788 
   784 static const WindowDesc _build_maglev_desc = {
   789 static const WindowDesc _build_maglev_desc = {
   785 	640-372, 22, 372, 36,
   790 	640-372, 22, 372, 36,
   786 	WC_BUILD_TOOLBAR,0,
   791 	WC_BUILD_TOOLBAR,0,
   787 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET,
   792 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
   788 	_build_maglev_widgets,
   793 	_build_maglev_widgets,
   789 	BuildRailToolbWndProc
   794 	BuildRailToolbWndProc
   790 };
   795 };
   791 
   796 
   792 
   797