src/dock_gui.cpp
changeset 11071 91ac7664ad1e
parent 10937 6577ed0fbb7f
child 11161 7d0fac8f14cd
equal deleted inserted replaced
11069:706083d7f44b 11071:91ac7664ad1e
    59 	DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_BUOY | CMD_MSG(STR_9835_CAN_T_POSITION_BUOY_HERE));
    59 	DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_BUOY | CMD_MSG(STR_9835_CAN_T_POSITION_BUOY_HERE));
    60 }
    60 }
    61 
    61 
    62 static void PlaceDocks_BuildCanal(TileIndex tile)
    62 static void PlaceDocks_BuildCanal(TileIndex tile)
    63 {
    63 {
    64 	VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_CREATE_WATER);
    64 	VpStartPlaceSizing(tile, (_game_mode == GM_EDITOR) ? VPM_X_AND_Y : VPM_X_OR_Y, DDSP_CREATE_WATER);
    65 }
    65 }
    66 
    66 
    67 static void PlaceDocks_BuildLock(TileIndex tile)
    67 static void PlaceDocks_BuildLock(TileIndex tile)
    68 {
    68 {
    69 	DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_LOCK | CMD_MSG(STR_CANT_BUILD_LOCKS));
    69 	DoCommandP(tile, 0, 0, CcBuildDocks, CMD_BUILD_LOCK | CMD_MSG(STR_CANT_BUILD_LOCKS));
       
    70 }
       
    71 
       
    72 static void PlaceDocks_BuildRiver(TileIndex tile)
       
    73 {
       
    74 	VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_CREATE_RIVER);
    70 }
    75 }
    71 
    76 
    72 static void PlaceDocks_Aqueduct(TileIndex tile)
    77 static void PlaceDocks_Aqueduct(TileIndex tile)
    73 {
    78 {
    74 	VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE);
    79 	VpStartPlaceSizing(tile, VPM_X_OR_Y, DDSP_BUILD_BRIDGE);
    87 	DTW_SEPERATOR,                 ///< Seperating panel between lock and demolish
    92 	DTW_SEPERATOR,                 ///< Seperating panel between lock and demolish
    88 	DTW_DEMOLISH,                  ///< Demolish aka dynamite button
    93 	DTW_DEMOLISH,                  ///< Demolish aka dynamite button
    89 	DTW_DEPOT,                     ///< Build depot button
    94 	DTW_DEPOT,                     ///< Build depot button
    90 	DTW_STATION,                   ///< Build station button
    95 	DTW_STATION,                   ///< Build station button
    91 	DTW_BUOY,                      ///< Build buoy button
    96 	DTW_BUOY,                      ///< Build buoy button
       
    97 	DTW_RIVER,                     ///< Build river button (in scenario editor)
    92 	DTW_BUILD_AQUEDUCT,            ///< Build aqueduct button
    98 	DTW_BUILD_AQUEDUCT,            ///< Build aqueduct button
    93 	DTW_END,                       ///< End of toolbar widgets
    99 	DTW_END,                       ///< End of toolbar widgets
    94 };
   100 };
    95 
   101 
    96 
   102 
    97 static void BuildDocksClick_Canal(Window *w)
   103 static void BuildDocksClick_Canal(Window *w)
    98 {
   104 {
       
   105 
    99 	HandlePlacePushButton(w, DTW_CANAL, SPR_CURSOR_CANAL, VHM_RECT, PlaceDocks_BuildCanal);
   106 	HandlePlacePushButton(w, DTW_CANAL, SPR_CURSOR_CANAL, VHM_RECT, PlaceDocks_BuildCanal);
   100 }
   107 }
   101 
   108 
   102 static void BuildDocksClick_Lock(Window *w)
   109 static void BuildDocksClick_Lock(Window *w)
   103 {
   110 {
   123 
   130 
   124 static void BuildDocksClick_Buoy(Window *w)
   131 static void BuildDocksClick_Buoy(Window *w)
   125 {
   132 {
   126 	if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
   133 	if (!CanBuildVehicleInfrastructure(VEH_SHIP)) return;
   127 	HandlePlacePushButton(w, DTW_BUOY, SPR_CURSOR_BOUY, VHM_RECT, PlaceDocks_Buoy);
   134 	HandlePlacePushButton(w, DTW_BUOY, SPR_CURSOR_BOUY, VHM_RECT, PlaceDocks_Buoy);
       
   135 }
       
   136 
       
   137 static void BuildDocksClick_River(Window *w)
       
   138 {
       
   139 	if (_game_mode != GM_EDITOR) return;
       
   140 	HandlePlacePushButton(w, DTW_RIVER, SPR_CURSOR_RIVER, VHM_RECT, PlaceDocks_BuildRiver);
   128 }
   141 }
   129 
   142 
   130 static void BuildDocksClick_Aqueduct(Window *w)
   143 static void BuildDocksClick_Aqueduct(Window *w)
   131 {
   144 {
   132 	HandlePlacePushButton(w, DTW_BUILD_AQUEDUCT, SPR_CURSOR_AQUEDUCT, VHM_RECT, PlaceDocks_Aqueduct);
   145 	HandlePlacePushButton(w, DTW_BUILD_AQUEDUCT, SPR_CURSOR_AQUEDUCT, VHM_RECT, PlaceDocks_Aqueduct);
   140 	NULL,
   153 	NULL,
   141 	BuildDocksClick_Demolish,
   154 	BuildDocksClick_Demolish,
   142 	BuildDocksClick_Depot,
   155 	BuildDocksClick_Depot,
   143 	BuildDocksClick_Dock,
   156 	BuildDocksClick_Dock,
   144 	BuildDocksClick_Buoy,
   157 	BuildDocksClick_Buoy,
       
   158 	BuildDocksClick_River,
   145 	BuildDocksClick_Aqueduct
   159 	BuildDocksClick_Aqueduct
   146 };
   160 };
   147 
   161 
   148 struct BuildDocksToolbarWindow : Window {
   162 struct BuildDocksToolbarWindow : Window {
   149 	BuildDocksToolbarWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
   163 	BuildDocksToolbarWindow(const WindowDesc *desc, WindowNumber window_number) : Window(desc, window_number)
   175 			case '2': BuildDocksClick_Lock(this); break;
   189 			case '2': BuildDocksClick_Lock(this); break;
   176 			case '3': BuildDocksClick_Demolish(this); break;
   190 			case '3': BuildDocksClick_Demolish(this); break;
   177 			case '4': BuildDocksClick_Depot(this); break;
   191 			case '4': BuildDocksClick_Depot(this); break;
   178 			case '5': BuildDocksClick_Dock(this); break;
   192 			case '5': BuildDocksClick_Dock(this); break;
   179 			case '6': BuildDocksClick_Buoy(this); break;
   193 			case '6': BuildDocksClick_Buoy(this); break;
       
   194 			case '7': BuildDocksClick_River(this); break;
   180 			case 'B':
   195 			case 'B':
   181 			case '7': BuildDocksClick_Aqueduct(this); break;
   196 			case '8': BuildDocksClick_Aqueduct(this); break;
   182 			default:  return ES_NOT_HANDLED;
   197 			default:  return ES_NOT_HANDLED;
   183 		}
   198 		}
   184 		return ES_HANDLED;
   199 		return ES_HANDLED;
   185 	}
   200 	}
   186 
   201 
   205 
   220 
   206 				case DDSP_DEMOLISH_AREA:
   221 				case DDSP_DEMOLISH_AREA:
   207 					GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
   222 					GUIPlaceProcDragXY(select_proc, start_tile, end_tile);
   208 					break;
   223 					break;
   209 				case DDSP_CREATE_WATER:
   224 				case DDSP_CREATE_WATER:
   210 					DoCommandP(end_tile, start_tile, 0, CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_BUILD_CANALS));
   225 					DoCommandP(end_tile, start_tile, (_game_mode == GM_EDITOR ? _ctrl_pressed : 0), CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_BUILD_CANALS));
       
   226 					break;
       
   227 				case DDSP_CREATE_RIVER:
       
   228 					DoCommandP(end_tile, start_tile, 2, CcBuildCanal, CMD_BUILD_CANAL | CMD_MSG(STR_CANT_PLACE_RIVERS));
   211 					break;
   229 					break;
   212 
   230 
   213 				default: break;
   231 				default: break;
   214 			}
   232 			}
   215 		}
   233 		}
   231 		VpSetPresizeRange(tile_from, tile_to);
   249 		VpSetPresizeRange(tile_from, tile_to);
   232 	}
   250 	}
   233 };
   251 };
   234 
   252 
   235 static const Widget _build_docks_toolb_widgets[] = {
   253 static const Widget _build_docks_toolb_widgets[] = {
   236 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                   STR_018B_CLOSE_WINDOW},                   // DTW_CLOSEBOX
   254 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                        STR_018B_CLOSE_WINDOW},                  // DTW_CLOSEBOX
   237 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   145,     0,    13, STR_9801_DOCK_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},         // DTW_CAPTION
   255 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   147,     0,    13, STR_9801_WATERWAYS_CONSTRUCTION, STR_018C_WINDOW_TITLE_DRAG_THIS},        // DTW_CAPTION
   238 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   146,   157,     0,    13, 0x0,                        STR_STICKY_BUTTON},                       // DTW_STICKY
   256 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   148,   159,     0,    13, 0x0,                             STR_STICKY_BUTTON},                      // DTW_STICKY
   239 {     WWT_IMGBTN,   RESIZE_NONE,     7,     0,    21,    14,    35, SPR_IMG_BUILD_CANAL,        STR_BUILD_CANALS_TIP},                    // DTW_CANAL
   257 {     WWT_IMGBTN,   RESIZE_NONE,     7,     0,    21,    14,    35, SPR_IMG_BUILD_CANAL,             STR_BUILD_CANALS_TIP},                   // DTW_CANAL
   240 {     WWT_IMGBTN,   RESIZE_NONE,     7,    22,    43,    14,    35, SPR_IMG_BUILD_LOCK,         STR_BUILD_LOCKS_TIP},                     // DTW_LOCK
   258 {     WWT_IMGBTN,   RESIZE_NONE,     7,    22,    43,    14,    35, SPR_IMG_BUILD_LOCK,              STR_BUILD_LOCKS_TIP},                    // DTW_LOCK
   241 
   259 
   242 {      WWT_PANEL,   RESIZE_NONE,     7,    44,    47,    14,    35, 0x0,                        STR_NULL},                                // DTW_SEPERATOR
   260 {      WWT_PANEL,   RESIZE_NONE,     7,    44,    48,    14,    35, 0x0,                             STR_NULL},                               // DTW_SEPERATOR
   243 
   261 
   244 {     WWT_IMGBTN,   RESIZE_NONE,     7,    48,    69,    14,    35, SPR_IMG_DYNAMITE,           STR_018D_DEMOLISH_BUILDINGS_ETC},         // DTW_DEMOLISH
   262 {     WWT_IMGBTN,   RESIZE_NONE,     7,    49,    70,    14,    35, SPR_IMG_DYNAMITE,                STR_018D_DEMOLISH_BUILDINGS_ETC},        // DTW_DEMOLISH
   245 {     WWT_IMGBTN,   RESIZE_NONE,     7,    70,    91,    14,    35, SPR_IMG_SHIP_DEPOT,         STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING},  // DTW_DEPOT
   263 {     WWT_IMGBTN,   RESIZE_NONE,     7,    71,    92,    14,    35, SPR_IMG_SHIP_DEPOT,              STR_981E_BUILD_SHIP_DEPOT_FOR_BUILDING}, // DTW_DEPOT
   246 {     WWT_IMGBTN,   RESIZE_NONE,     7,    92,   113,    14,    35, SPR_IMG_SHIP_DOCK,          STR_981D_BUILD_SHIP_DOCK},                // DTW_STATION
   264 {     WWT_IMGBTN,   RESIZE_NONE,     7,    93,   114,    14,    35, SPR_IMG_SHIP_DOCK,               STR_981D_BUILD_SHIP_DOCK},               // DTW_STATION
   247 {     WWT_IMGBTN,   RESIZE_NONE,     7,   114,   135,    14,    35, SPR_IMG_BOUY,               STR_9834_POSITION_BUOY_WHICH_CAN},        // DTW_BUOY
   265 {     WWT_IMGBTN,   RESIZE_NONE,     7,   115,   136,    14,    35, SPR_IMG_BOUY,                    STR_9834_POSITION_BUOY_WHICH_CAN},       // DTW_BUOY
   248 {     WWT_IMGBTN,   RESIZE_NONE,     7,   136,   157,    14,    35, SPR_IMG_AQUEDUCT,           STR_BUILD_AQUEDUCT},                      // DTW_BUILD_AQUEDUCT
   266 {     WWT_EMPTY,    RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,                             STR_NULL},                               // DTW_RIVER
       
   267 {     WWT_IMGBTN,   RESIZE_NONE,     7,   137,   159,    14,    35, SPR_IMG_AQUEDUCT,                STR_BUILD_AQUEDUCT},                     // DTW_BUILD_AQUEDUCT
   249 {   WIDGETS_END},
   268 {   WIDGETS_END},
   250 };
   269 };
   251 
   270 
   252 static const WindowDesc _build_docks_toolbar_desc = {
   271 static const WindowDesc _build_docks_toolbar_desc = {
   253 	WDP_ALIGN_TBR, 22, 158, 36, 158, 36,
   272 	WDP_ALIGN_TBR, 22, 160, 36, 160, 36,
   254 	WC_BUILD_TOOLBAR, WC_NONE,
   273 	WC_BUILD_TOOLBAR, WC_NONE,
   255 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
   274 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
   256 	_build_docks_toolb_widgets,
   275 	_build_docks_toolb_widgets,
   257 };
   276 };
   258 
   277 
   260 {
   279 {
   261 	if (!IsValidPlayer(_current_player)) return;
   280 	if (!IsValidPlayer(_current_player)) return;
   262 
   281 
   263 	DeleteWindowByClass(WC_BUILD_TOOLBAR);
   282 	DeleteWindowByClass(WC_BUILD_TOOLBAR);
   264 	AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_toolbar_desc, TRANSPORT_WATER);
   283 	AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_toolbar_desc, TRANSPORT_WATER);
       
   284 }
       
   285 
       
   286 /* Widget definition for the build docks in scenario editor window */
       
   287 static const Widget _build_docks_scen_toolb_widgets[] = {
       
   288 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                           STR_018B_CLOSE_WINDOW},           // DTW_CLOSEBOX
       
   289 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   102,     0,    13, STR_9801_WATERWAYS_CONSTRUCTION_SE, STR_018C_WINDOW_TITLE_DRAG_THIS}, // DTW_CAPTION
       
   290 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   103,   114,     0,    13, 0x0,                                STR_STICKY_BUTTON},               // DTW_STICKY
       
   291 {     WWT_IMGBTN,   RESIZE_NONE,     7,     0,    21,    14,    35, SPR_IMG_BUILD_CANAL,                STR_CREATE_LAKE},                 // DTW_CANAL
       
   292 {     WWT_IMGBTN,   RESIZE_NONE,     7,    22,    43,    14,    35, SPR_IMG_BUILD_LOCK,                 STR_BUILD_LOCKS_TIP},             // DTW_LOCK
       
   293 
       
   294 {      WWT_PANEL,   RESIZE_NONE,     7,    44,    48,    14,    35, 0x0,                                STR_NULL},                        // DTW_SEPERATOR
       
   295 
       
   296 {     WWT_IMGBTN,   RESIZE_NONE,     7,    49,    70,    14,    35, SPR_IMG_DYNAMITE,                   STR_018D_DEMOLISH_BUILDINGS_ETC}, // DTW_DEMOLISH
       
   297 {     WWT_EMPTY,    RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,                                STR_NULL},                        // DTW_DEPOT
       
   298 {     WWT_EMPTY,    RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,                                STR_NULL},                        // DTW_STATION
       
   299 {     WWT_EMPTY,    RESIZE_NONE,     0,     0,     0,     0,     0, 0x0,                                STR_NULL},                        // DTW_BUOY
       
   300 {     WWT_IMGBTN,   RESIZE_NONE,     7,    71,    92,    14,    35, SPR_IMG_BUILD_RIVER,                STR_CREATE_RIVER},                // DTW_RIVER
       
   301 {     WWT_IMGBTN,   RESIZE_NONE,     7,    93,   114,    14,    35, SPR_IMG_AQUEDUCT,                   STR_BUILD_AQUEDUCT},              // DTW_BUILD_AQUEDUCT
       
   302 {   WIDGETS_END},
       
   303 };
       
   304 
       
   305 /* Window definition for the build docks in scenario editor window */
       
   306 static const WindowDesc _build_docks_scen_toolbar_desc = {
       
   307 	WDP_AUTO, WDP_AUTO, 115, 36, 115, 36,
       
   308 	WC_SCEN_BUILD_TOOLBAR, WC_NONE,
       
   309 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
       
   310 	_build_docks_scen_toolb_widgets,
       
   311 };
       
   312 
       
   313 void ShowBuildDocksScenToolbar()
       
   314 {
       
   315 	AllocateWindowDescFront<BuildDocksToolbarWindow>(&_build_docks_scen_toolbar_desc, TRANSPORT_WATER);
   265 }
   316 }
   266 
   317 
   267 struct BuildDocksStationWindow : public PickerWindowBase {
   318 struct BuildDocksStationWindow : public PickerWindowBase {
   268 private:
   319 private:
   269 	enum BuildDockStationWidgets {
   320 	enum BuildDockStationWidgets {