src/road_gui.cpp
changeset 8493 3ab458f7cff4
parent 8452 93186e0f15cb
child 8523 b20d30c6ae9f
equal deleted inserted replaced
8492:d61f7a733d19 8493:3ab458f7cff4
   315  *
   315  *
   316  * @param w The current window
   316  * @param w The current window
   317  */
   317  */
   318 static void BuildRoadClick_OneWay(Window *w)
   318 static void BuildRoadClick_OneWay(Window *w)
   319 {
   319 {
   320 	if (IsWindowWidgetDisabled(w, RTW_ONE_WAY)) return;
   320 	if (w->IsWidgetDisabled(RTW_ONE_WAY)) return;
   321 	SetWindowDirty(w);
   321 	SetWindowDirty(w);
   322 	ToggleWidgetLoweredState(w, RTW_ONE_WAY);
   322 	w->ToggleWidgetLoweredState(RTW_ONE_WAY);
   323 	SetSelectionRed(false);
   323 	SetSelectionRed(false);
   324 }
   324 }
   325 
   325 
   326 static void BuildRoadClick_Bridge(Window *w)
   326 static void BuildRoadClick_Bridge(Window *w)
   327 {
   327 {
   333 	HandlePlacePushButton(w, RTW_BUILD_TUNNEL, SPR_CURSOR_ROAD_TUNNEL, VHM_SPECIAL, PlaceRoad_Tunnel);
   333 	HandlePlacePushButton(w, RTW_BUILD_TUNNEL, SPR_CURSOR_ROAD_TUNNEL, VHM_SPECIAL, PlaceRoad_Tunnel);
   334 }
   334 }
   335 
   335 
   336 static void BuildRoadClick_Remove(Window *w)
   336 static void BuildRoadClick_Remove(Window *w)
   337 {
   337 {
   338 	if (IsWindowWidgetDisabled(w, RTW_REMOVE)) return;
   338 	if (w->IsWidgetDisabled(RTW_REMOVE)) return;
   339 	SetWindowDirty(w);
   339 	SetWindowDirty(w);
   340 	SndPlayFx(SND_15_BEEP);
   340 	SndPlayFx(SND_15_BEEP);
   341 	ToggleWidgetLoweredState(w, RTW_REMOVE);
   341 	w->ToggleWidgetLoweredState(RTW_REMOVE);
   342 	SetSelectionRed(IsWindowWidgetLowered(w, RTW_REMOVE));
   342 	SetSelectionRed(w->IsWidgetLowered(RTW_REMOVE));
   343 }
   343 }
   344 
   344 
   345 /** Array with the handlers of the button-clicks for the road-toolbar */
   345 /** Array with the handlers of the button-clicks for the road-toolbar */
   346 static OnButtonClick* const _build_road_button_proc[] = {
   346 static OnButtonClick* const _build_road_button_proc[] = {
   347 	BuildRoadClick_X_Dir,
   347 	BuildRoadClick_X_Dir,
   383 	/* The remove and the one way button state is driven
   383 	/* The remove and the one way button state is driven
   384 	 * by the other buttons so they don't act on themselfs.
   384 	 * by the other buttons so they don't act on themselfs.
   385 	 * Both are only valid if they are able to apply as options. */
   385 	 * Both are only valid if they are able to apply as options. */
   386 	switch (clicked_widget) {
   386 	switch (clicked_widget) {
   387 		case RTW_REMOVE:
   387 		case RTW_REMOVE:
   388 			RaiseWindowWidget(w, RTW_ONE_WAY);
   388 			w->RaiseWidget(RTW_ONE_WAY);
   389 			break;
   389 			break;
   390 		case RTW_ONE_WAY:
   390 		case RTW_ONE_WAY:
   391 			RaiseWindowWidget(w, RTW_REMOVE);
   391 			w->RaiseWidget(RTW_REMOVE);
   392 			break;
   392 			break;
   393 		case RTW_BUS_STATION:
   393 		case RTW_BUS_STATION:
   394 		case RTW_TRUCK_STATION:
   394 		case RTW_TRUCK_STATION:
   395 			DisableWindowWidget(w, RTW_ONE_WAY);
   395 			w->DisableWidget(RTW_ONE_WAY);
   396 			SetWindowWidgetDisabledState(w, RTW_REMOVE, !IsWindowWidgetLowered(w, clicked_widget));
   396 			w->SetWidgetDisabledState(RTW_REMOVE, !w->IsWidgetLowered(clicked_widget));
   397 			break;
   397 			break;
   398 		case RTW_ROAD_X:
   398 		case RTW_ROAD_X:
   399 		case RTW_ROAD_Y:
   399 		case RTW_ROAD_Y:
   400 		case RTW_AUTOROAD:
   400 		case RTW_AUTOROAD:
   401 			SetWindowWidgetsDisabledState(w, !IsWindowWidgetLowered(w, clicked_widget),
   401 			w->SetWidgetsDisabledState(!w->IsWidgetLowered(clicked_widget),
   402 				RTW_REMOVE,
   402 				RTW_REMOVE,
   403 				RTW_ONE_WAY,
   403 				RTW_ONE_WAY,
   404 				WIDGET_LIST_END);
   404 				WIDGET_LIST_END);
   405 			break;
   405 			break;
   406 		default:
   406 		default:
   407 			/* When any other buttons than road/station, raise and
   407 			/* When any other buttons than road/station, raise and
   408 			 * disable the removal button */
   408 			 * disable the removal button */
   409 			SetWindowWidgetsDisabledState(w, true,
   409 			w->SetWidgetsDisabledState(true,
   410 				RTW_REMOVE,
   410 				RTW_REMOVE,
   411 				RTW_ONE_WAY,
   411 				RTW_ONE_WAY,
   412 				WIDGET_LIST_END);
   412 				WIDGET_LIST_END);
   413 			SetWindowWidgetsLoweredState (w, false,
   413 			w->SetWidgetsLoweredState (false,
   414 				RTW_REMOVE,
   414 				RTW_REMOVE,
   415 				RTW_ONE_WAY,
   415 				RTW_ONE_WAY,
   416 				WIDGET_LIST_END);
   416 				WIDGET_LIST_END);
   417 			break;
   417 			break;
   418 	}
   418 	}
   420 
   420 
   421 static void BuildRoadToolbWndProc(Window *w, WindowEvent *e)
   421 static void BuildRoadToolbWndProc(Window *w, WindowEvent *e)
   422 {
   422 {
   423 	switch (e->event) {
   423 	switch (e->event) {
   424 	case WE_CREATE:
   424 	case WE_CREATE:
   425 		SetWindowWidgetsDisabledState(w, true,
   425 		w->SetWidgetsDisabledState(true,
   426 			RTW_REMOVE,
   426 			RTW_REMOVE,
   427 			RTW_ONE_WAY,
   427 			RTW_ONE_WAY,
   428 			WIDGET_LIST_END);
   428 			WIDGET_LIST_END);
   429 		break;
   429 		break;
   430 
   430 
   431 	case WE_PAINT:
   431 	case WE_PAINT:
   432 		SetWindowWidgetsDisabledState(w, !CanBuildVehicleInfrastructure(VEH_ROAD),
   432 		w->SetWidgetsDisabledState(!CanBuildVehicleInfrastructure(VEH_ROAD),
   433 			RTW_DEPOT,
   433 			RTW_DEPOT,
   434 			RTW_BUS_STATION,
   434 			RTW_BUS_STATION,
   435 			RTW_TRUCK_STATION,
   435 			RTW_TRUCK_STATION,
   436 			WIDGET_LIST_END);
   436 			WIDGET_LIST_END);
   437 		DrawWindowWidgets(w);
   437 		DrawWindowWidgets(w);
   459 		}
   459 		}
   460 		MarkTileDirty(_thd.pos.x, _thd.pos.y); // redraw tile selection
   460 		MarkTileDirty(_thd.pos.x, _thd.pos.y); // redraw tile selection
   461 		break;
   461 		break;
   462 
   462 
   463 	case WE_PLACE_OBJ:
   463 	case WE_PLACE_OBJ:
   464 		_remove_button_clicked = IsWindowWidgetLowered(w, RTW_REMOVE);
   464 		_remove_button_clicked = w->IsWidgetLowered(RTW_REMOVE);
   465 		_one_way_button_clicked = IsWindowWidgetLowered(w, RTW_ONE_WAY);
   465 		_one_way_button_clicked = w->IsWidgetLowered(RTW_ONE_WAY);
   466 		_place_proc(e->we.place.tile);
   466 		_place_proc(e->we.place.tile);
   467 		break;
   467 		break;
   468 
   468 
   469 	case WE_ABORT_PLACE_OBJ:
   469 	case WE_ABORT_PLACE_OBJ:
   470 		RaiseWindowButtons(w);
   470 		RaiseWindowButtons(w);
   471 		DisableWindowWidget(w, RTW_REMOVE);
   471 		w->DisableWidget(RTW_REMOVE);
   472 		InvalidateWidget(w, RTW_REMOVE);
   472 		InvalidateWidget(w, RTW_REMOVE);
   473 
   473 
   474 		w = FindWindowById(WC_BUS_STATION, 0);
   474 		w = FindWindowById(WC_BUS_STATION, 0);
   475 		if (w != NULL) WP(w, def_d).close = true;
   475 		if (w != NULL) WP(w, def_d).close = true;
   476 		w = FindWindowById(WC_TRUCK_STATION, 0);
   476 		w = FindWindowById(WC_TRUCK_STATION, 0);
   679 };
   679 };
   680 
   680 
   681 static void BuildRoadDepotWndProc(Window *w, WindowEvent *e)
   681 static void BuildRoadDepotWndProc(Window *w, WindowEvent *e)
   682 {
   682 {
   683 	switch (e->event) {
   683 	switch (e->event) {
   684 	case WE_CREATE: LowerWindowWidget(w, _road_depot_orientation + BRDW_DEPOT_NE); break;
   684 	case WE_CREATE: w->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE); break;
   685 
   685 
   686 	case WE_PAINT:
   686 	case WE_PAINT:
   687 		DrawWindowWidgets(w);
   687 		DrawWindowWidgets(w);
   688 
   688 
   689 		DrawRoadDepotSprite(70, 17, DIAGDIR_NE, _cur_roadtype);
   689 		DrawRoadDepotSprite(70, 17, DIAGDIR_NE, _cur_roadtype);
   696 		switch (e->we.click.widget) {
   696 		switch (e->we.click.widget) {
   697 			case BRDW_DEPOT_NW:
   697 			case BRDW_DEPOT_NW:
   698 			case BRDW_DEPOT_NE:
   698 			case BRDW_DEPOT_NE:
   699 			case BRDW_DEPOT_SW:
   699 			case BRDW_DEPOT_SW:
   700 			case BRDW_DEPOT_SE:
   700 			case BRDW_DEPOT_SE:
   701 				RaiseWindowWidget(w, _road_depot_orientation + BRDW_DEPOT_NE);
   701 				w->RaiseWidget(_road_depot_orientation + BRDW_DEPOT_NE);
   702 				_road_depot_orientation = (DiagDirection)(e->we.click.widget - BRDW_DEPOT_NE);
   702 				_road_depot_orientation = (DiagDirection)(e->we.click.widget - BRDW_DEPOT_NE);
   703 				LowerWindowWidget(w, _road_depot_orientation + BRDW_DEPOT_NE);
   703 				w->LowerWidget(_road_depot_orientation + BRDW_DEPOT_NE);
   704 				SndPlayFx(SND_15_BEEP);
   704 				SndPlayFx(SND_15_BEEP);
   705 				SetWindowDirty(w);
   705 				SetWindowDirty(w);
   706 				break;
   706 				break;
   707 		}
   707 		}
   708 		break;
   708 		break;
   784 	case WE_CREATE:
   784 	case WE_CREATE:
   785 		/* Trams don't have non-drivethrough stations */
   785 		/* Trams don't have non-drivethrough stations */
   786 		if (_cur_roadtype == ROADTYPE_TRAM && _road_station_picker_orientation < DIAGDIR_END) {
   786 		if (_cur_roadtype == ROADTYPE_TRAM && _road_station_picker_orientation < DIAGDIR_END) {
   787 			_road_station_picker_orientation = DIAGDIR_END;
   787 			_road_station_picker_orientation = DIAGDIR_END;
   788 		}
   788 		}
   789 		SetWindowWidgetsDisabledState(w, _cur_roadtype == ROADTYPE_TRAM,
   789 		w->SetWidgetsDisabledState(_cur_roadtype == ROADTYPE_TRAM,
   790 			BRSW_STATION_NE,
   790 			BRSW_STATION_NE,
   791 			BRSW_STATION_SE,
   791 			BRSW_STATION_SE,
   792 			BRSW_STATION_SW,
   792 			BRSW_STATION_SW,
   793 			BRSW_STATION_NW,
   793 			BRSW_STATION_NW,
   794 			WIDGET_LIST_END);
   794 			WIDGET_LIST_END);
   795 
   795 
   796 		LowerWindowWidget(w, _road_station_picker_orientation + BRSW_STATION_NE);
   796 		w->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE);
   797 		LowerWindowWidget(w, _station_show_coverage + BRSW_LT_OFF);
   797 		w->LowerWidget(_station_show_coverage + BRSW_LT_OFF);
   798 		break;
   798 		break;
   799 
   799 
   800 	case WE_PAINT: {
   800 	case WE_PAINT: {
   801 		if (WP(w, def_d).close) return;
   801 		if (WP(w, def_d).close) return;
   802 
   802 
   831 			case BRSW_STATION_SE:
   831 			case BRSW_STATION_SE:
   832 			case BRSW_STATION_SW:
   832 			case BRSW_STATION_SW:
   833 			case BRSW_STATION_NW:
   833 			case BRSW_STATION_NW:
   834 			case BRSW_STATION_X:
   834 			case BRSW_STATION_X:
   835 			case BRSW_STATION_Y:
   835 			case BRSW_STATION_Y:
   836 				RaiseWindowWidget(w, _road_station_picker_orientation + BRSW_STATION_NE);
   836 				w->RaiseWidget(_road_station_picker_orientation + BRSW_STATION_NE);
   837 				_road_station_picker_orientation = (DiagDirection)(e->we.click.widget - BRSW_STATION_NE);
   837 				_road_station_picker_orientation = (DiagDirection)(e->we.click.widget - BRSW_STATION_NE);
   838 				LowerWindowWidget(w, _road_station_picker_orientation + BRSW_STATION_NE);
   838 				w->LowerWidget(_road_station_picker_orientation + BRSW_STATION_NE);
   839 				SndPlayFx(SND_15_BEEP);
   839 				SndPlayFx(SND_15_BEEP);
   840 				SetWindowDirty(w);
   840 				SetWindowDirty(w);
   841 				break;
   841 				break;
   842 
   842 
   843 			case BRSW_LT_OFF:
   843 			case BRSW_LT_OFF:
   844 			case BRSW_LT_ON:
   844 			case BRSW_LT_ON:
   845 				RaiseWindowWidget(w, _station_show_coverage + BRSW_LT_OFF);
   845 				w->RaiseWidget(_station_show_coverage + BRSW_LT_OFF);
   846 				_station_show_coverage = (e->we.click.widget != BRSW_LT_OFF);
   846 				_station_show_coverage = (e->we.click.widget != BRSW_LT_OFF);
   847 				LowerWindowWidget(w, _station_show_coverage + BRSW_LT_OFF);
   847 				w->LowerWidget(_station_show_coverage + BRSW_LT_OFF);
   848 				SndPlayFx(SND_15_BEEP);
   848 				SndPlayFx(SND_15_BEEP);
   849 				SetWindowDirty(w);
   849 				SetWindowDirty(w);
   850 				break;
   850 				break;
   851 		}
   851 		}
   852 	} break;
   852 	} break;