src/main_gui.cpp
branchcpp_gui
changeset 6308 646711c5feaa
parent 6307 f40e88cff863
equal deleted inserted replaced
6307:f40e88cff863 6308:646711c5feaa
    49 static int _rename_id = 1;
    49 static int _rename_id = 1;
    50 static int _rename_what = -1;
    50 static int _rename_what = -1;
    51 
    51 
    52 static byte _terraform_size = 1;
    52 static byte _terraform_size = 1;
    53 RailType _last_built_railtype;
    53 RailType _last_built_railtype;
    54 static int _scengen_town_size = 2; // depress medium-sized towns per default
    54 static int _scengen_town_size = 1; // depress medium-sized towns per default
    55 
    55 
    56 extern void GenerateIndustries();
    56 extern void GenerateIndustries();
    57 extern bool GenerateTowns();
    57 extern bool GenerateTowns();
    58 
    58 
    59 
    59 
    87 		if (!_network_server) {
    87 		if (!_network_server) {
    88 			SEND_COMMAND(PACKET_CLIENT_CHAT)(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg);
    88 			SEND_COMMAND(PACKET_CLIENT_CHAT)(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg);
    89 		} else {
    89 		} else {
    90 			NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg, NETWORK_SERVER_INDEX);
    90 			NetworkServer_HandleChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, id, msg, NETWORK_SERVER_INDEX);
    91 		}
    91 		}
    92 	}	break;
    92 	} break;
    93 #endif /* ENABLE_NETWORK */
    93 #endif /* ENABLE_NETWORK */
    94 		default: NOT_REACHED();
    94 		default: NOT_REACHED();
    95 	}
    95 	}
    96 
    96 
    97 	_rename_id = _rename_what = -1;
    97 	_rename_id = _rename_what = -1;
   145 	_fast_forward ^= true;
   145 	_fast_forward ^= true;
   146 	SndPlayFx(SND_15_BEEP);
   146 	SndPlayFx(SND_15_BEEP);
   147 }
   147 }
   148 
   148 
   149 
   149 
       
   150 /** Toggle all transparency options, except for signs */
       
   151 static void ToggleTransparency()
       
   152 {
       
   153 	static byte trans_opt = ~0;
       
   154 
       
   155 	if (GB(_transparent_opt, 1, 7) == 0) {
       
   156 		SB(_transparent_opt, 1, 7, GB(trans_opt, 1, 7));
       
   157 	} else {
       
   158 		trans_opt = _transparent_opt;
       
   159 		SB(_transparent_opt, 1, 7, 0);
       
   160 	}
       
   161 
       
   162 	MarkWholeScreenDirty();
       
   163 }
       
   164 
       
   165 
   150 static void MenuClickSettings(int index)
   166 static void MenuClickSettings(int index)
   151 {
   167 {
   152 	switch (index) {
   168 	switch (index) {
   153 		case 0: ShowGameOptions();      return;
   169 		case 0: ShowGameOptions();      return;
   154 		case 1: ShowGameDifficulty();   return;
   170 		case 1: ShowGameDifficulty();   return;
   159 		case  6: _display_opt ^= DO_SHOW_STATION_NAMES; break;
   175 		case  6: _display_opt ^= DO_SHOW_STATION_NAMES; break;
   160 		case  7: _display_opt ^= DO_SHOW_SIGNS;         break;
   176 		case  7: _display_opt ^= DO_SHOW_SIGNS;         break;
   161 		case  8: _display_opt ^= DO_WAYPOINTS;          break;
   177 		case  8: _display_opt ^= DO_WAYPOINTS;          break;
   162 		case  9: _display_opt ^= DO_FULL_ANIMATION;     break;
   178 		case  9: _display_opt ^= DO_FULL_ANIMATION;     break;
   163 		case 10: _display_opt ^= DO_FULL_DETAIL;        break;
   179 		case 10: _display_opt ^= DO_FULL_DETAIL;        break;
   164 		case 11: TOGGLEBIT(_transparent_opt, TO_BUILDINGS); break;
   180 		case 11: ToggleTransparency(); break;
   165 		case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS);     break;
   181 		case 12: TOGGLEBIT(_transparent_opt, TO_SIGNS); break;
   166 	}
   182 	}
   167 	MarkWholeScreenDirty();
   183 	MarkWholeScreenDirty();
   168 }
   184 }
   169 
   185 
   170 static void MenuClickSaveLoad(int index)
   186 static void MenuClickSaveLoad(int index)
   962 	if (_display_opt & DO_SHOW_STATION_NAMES) SETBIT(x,  6);
   978 	if (_display_opt & DO_SHOW_STATION_NAMES) SETBIT(x,  6);
   963 	if (_display_opt & DO_SHOW_SIGNS)         SETBIT(x,  7);
   979 	if (_display_opt & DO_SHOW_SIGNS)         SETBIT(x,  7);
   964 	if (_display_opt & DO_WAYPOINTS)          SETBIT(x,  8);
   980 	if (_display_opt & DO_WAYPOINTS)          SETBIT(x,  8);
   965 	if (_display_opt & DO_FULL_ANIMATION)     SETBIT(x,  9);
   981 	if (_display_opt & DO_FULL_ANIMATION)     SETBIT(x,  9);
   966 	if (_display_opt & DO_FULL_DETAIL)        SETBIT(x, 10);
   982 	if (_display_opt & DO_FULL_DETAIL)        SETBIT(x, 10);
   967 	if (HASBIT(_transparent_opt, TO_BUILDINGS)) SETBIT(x, 11);
   983 	if (GB(_transparent_opt, 1, 7) != 0)      SETBIT(x, 11);
   968 	if (HASBIT(_transparent_opt, TO_SIGNS))     SETBIT(x, 12);
   984 	if (HASBIT(_transparent_opt, TO_SIGNS))   SETBIT(x, 12);
   969 	WP(w,menu_d).checked_items = x;
   985 	WP(w,menu_d).checked_items = x;
   970 }
   986 }
   971 
   987 
   972 
   988 
   973 static void ToolbarScenSaveOrLoad(BaseWindow *w)
   989 static void ToolbarScenSaveOrLoad(BaseWindow *w)
  1245 	EditorTerraformClick_Transmitter
  1261 	EditorTerraformClick_Transmitter
  1246 };
  1262 };
  1247 
  1263 
  1248 
  1264 
  1249 /** Callback function for the scenario editor 'reset landscape' confirmation window
  1265 /** Callback function for the scenario editor 'reset landscape' confirmation window
  1250  * @param yes_clicked boolean value, true when yes was clicked, false otherwise */
  1266  * @param w Window unused
       
  1267  * @param confirmed boolean value, true when yes was clicked, false otherwise */
  1251 static void ResetLandscapeConfirmationCallback(BaseWindow *w, bool confirmed)
  1268 static void ResetLandscapeConfirmationCallback(BaseWindow *w, bool confirmed)
  1252 {
  1269 {
  1253 	if (confirmed) {
  1270 	if (confirmed) {
  1254 		Player *p;
  1271 		Player *p;
  1255 
  1272 
  1403 	}
  1420 	}
  1404 }
  1421 }
  1405 
  1422 
  1406 static void PlaceProc_Town(TileIndex tile)
  1423 static void PlaceProc_Town(TileIndex tile)
  1407 {
  1424 {
  1408 	DoCommandP(tile, _scengen_town_size, 0, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE));
  1425 	uint32 size = min(_scengen_town_size, (int)TSM_CITY);
       
  1426 	uint32 mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED;
       
  1427 	DoCommandP(tile, size, mode, CcBuildTown, CMD_BUILD_TOWN | CMD_MSG(STR_0236_CAN_T_BUILD_TOWN_HERE));
  1409 }
  1428 }
  1410 
  1429 
  1411 
  1430 
  1412 static const OldWidget _scen_edit_town_gen_widgets[] = {
  1431 static const OldWidget _scen_edit_town_gen_widgets[] = {
  1413 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
  1432 {   WWT_CLOSEBOX,   RESIZE_NONE,     7,     0,    10,     0,    13, STR_00C5,                 STR_018B_CLOSE_WINDOW},
  1414 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   147,     0,    13, STR_0233_TOWN_GENERATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
  1433 {    WWT_CAPTION,   RESIZE_NONE,     7,    11,   147,     0,    13, STR_0233_TOWN_GENERATION, STR_018C_WINDOW_TITLE_DRAG_THIS},
  1415 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   148,   159,     0,    13, 0x0,                      STR_STICKY_BUTTON},
  1434 {  WWT_STICKYBOX,   RESIZE_NONE,     7,   148,   159,     0,    13, 0x0,                      STR_STICKY_BUTTON},
  1416 {      WWT_PANEL,   RESIZE_NONE,     7,     0,   159,    14,    81, 0x0,                      STR_NULL},
  1435 {      WWT_PANEL,   RESIZE_NONE,     7,     0,   159,    14,    94, 0x0,                      STR_NULL},
  1417 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    16,    27, STR_0234_NEW_TOWN,        STR_0235_CONSTRUCT_NEW_TOWN},
  1436 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    16,    27, STR_0234_NEW_TOWN,        STR_0235_CONSTRUCT_NEW_TOWN},
  1418 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    29,    40, STR_023D_RANDOM_TOWN,     STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION},
  1437 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    29,    40, STR_023D_RANDOM_TOWN,     STR_023E_BUILD_TOWN_IN_RANDOM_LOCATION},
  1419 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    42,    53, STR_MANY_RANDOM_TOWNS,    STR_RANDOM_TOWNS_TIP},
  1438 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    42,    53, STR_MANY_RANDOM_TOWNS,    STR_RANDOM_TOWNS_TIP},
  1420 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,    53,    68,    79, STR_02A1_SMALL,           STR_02A4_SELECT_TOWN_SIZE},
  1439 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,    53,    68,    79, STR_02A1_SMALL,           STR_02A4_SELECT_TOWN_SIZE},
  1421 {    WWT_TEXTBTN,   RESIZE_NONE,    14,    54,   105,    68,    79, STR_02A2_MEDIUM,          STR_02A4_SELECT_TOWN_SIZE},
  1440 {    WWT_TEXTBTN,   RESIZE_NONE,    14,    54,   105,    68,    79, STR_02A2_MEDIUM,          STR_02A4_SELECT_TOWN_SIZE},
  1422 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   106,   157,    68,    79, STR_02A3_LARGE,           STR_02A4_SELECT_TOWN_SIZE},
  1441 {    WWT_TEXTBTN,   RESIZE_NONE,    14,   106,   157,    68,    79, STR_02A3_LARGE,           STR_02A4_SELECT_TOWN_SIZE},
       
  1442 {    WWT_TEXTBTN,   RESIZE_NONE,    14,     2,   157,    81,    92, STR_SCENARIO_EDITOR_CITY, STR_02A4_SELECT_TOWN_SIZE},
  1423 {      WWT_LABEL,   RESIZE_NONE,     7,     0,   147,    54,    67, STR_02A5_TOWN_SIZE,       STR_NULL},
  1443 {      WWT_LABEL,   RESIZE_NONE,     7,     0,   147,    54,    67, STR_02A5_TOWN_SIZE,       STR_NULL},
  1424 {   WIDGETS_END},
  1444 {   WIDGETS_END},
  1425 };
  1445 };
  1426 
  1446 
  1427 static void ScenEditTownGenWndProc(BaseWindow *w, WindowEvent *e)
  1447 static void ScenEditTownGenWndProc(BaseWindow *w, WindowEvent *e)
  1430 	case WE_PAINT:
  1450 	case WE_PAINT:
  1431 		w->DrawWidgets();
  1451 		w->DrawWidgets();
  1432 		break;
  1452 		break;
  1433 
  1453 
  1434 	case WE_CREATE:
  1454 	case WE_CREATE:
  1435 		w->LowerWidget((_scengen_town_size - 1)+ 7);
  1455 		w->LowerWidget(_scengen_town_size + 7);
  1436 		break;
  1456 		break;
  1437 
  1457 
  1438 	case WE_CLICK:
  1458 	case WE_CLICK:
  1439 		switch (e->we.click.widget) {
  1459 		switch (e->we.click.widget) {
  1440 		case 4: // new town
  1460 		case 4: // new town
  1441 			HandlePlacePushButton(w, 4, SPR_CURSOR_TOWN, 1, PlaceProc_Town);
  1461 			HandlePlacePushButton(w, 4, SPR_CURSOR_TOWN, 1, PlaceProc_Town);
  1442 			break;
  1462 			break;
  1443 		case 5: {// random town
  1463 		case 5: {// random town
  1444 			Town *t;
  1464 			Town *t;
       
  1465 			uint size = min(_scengen_town_size, (int)TSM_CITY);
       
  1466 			TownSizeMode mode = _scengen_town_size > TSM_CITY ? TSM_CITY : TSM_FIXED;
  1445 
  1467 
  1446 			w->HandleButtonClick(5);
  1468 			w->HandleButtonClick(5);
  1447 			_generating_world = true;
  1469 			_generating_world = true;
  1448 			t = CreateRandomTown(20, _scengen_town_size);
  1470 			t = CreateRandomTown(20, mode, size);
  1449 			_generating_world = false;
  1471 			_generating_world = false;
  1450 
  1472 
  1451 			if (t == NULL) {
  1473 			if (t == NULL) {
  1452 				ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1474 				ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1453 			} else {
  1475 			} else {
  1463 			if (!GenerateTowns()) ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1485 			if (!GenerateTowns()) ShowErrorMessage(STR_NO_SPACE_FOR_TOWN, STR_CANNOT_GENERATE_TOWN, 0, 0);
  1464 			_generating_world = false;
  1486 			_generating_world = false;
  1465 			break;
  1487 			break;
  1466 		}
  1488 		}
  1467 
  1489 
  1468 		case 7: case 8: case 9:
  1490 		case 7: case 8: case 9: case 10:
  1469 			w->RaiseWidget((_scengen_town_size - 1) + 7);
  1491 			w->RaiseWidget(_scengen_town_size + 7);
  1470 			_scengen_town_size = (e->we.click.widget - 7) + 1;
  1492 			_scengen_town_size = e->we.click.widget - 7;
  1471 			w->LowerWidget((_scengen_town_size - 1) + 7);
  1493 			w->LowerWidget(_scengen_town_size + 7);
  1472 			w->SetDirty();
  1494 			w->SetDirty();
  1473 			break;
  1495 			break;
  1474 		}
  1496 		}
  1475 		break;
  1497 		break;
  1476 
  1498 
  1482 	case WE_PLACE_OBJ:
  1504 	case WE_PLACE_OBJ:
  1483 		_place_proc(e->we.place.tile);
  1505 		_place_proc(e->we.place.tile);
  1484 		break;
  1506 		break;
  1485 	case WE_ABORT_PLACE_OBJ:
  1507 	case WE_ABORT_PLACE_OBJ:
  1486 		w->RaiseButtons();
  1508 		w->RaiseButtons();
  1487 		w->LowerWidget((_scengen_town_size - 1) + 7);
  1509 		w->LowerWidget(_scengen_town_size + 7);
  1488 		w->SetDirty();
  1510 		w->SetDirty();
  1489 		break;
  1511 		break;
  1490 	}
  1512 	}
  1491 }
  1513 }
  1492 
  1514 
  1493 static const WindowDesc _scen_edit_town_gen_desc = {
  1515 static const WindowDesc _scen_edit_town_gen_desc = {
  1494 	WDP_AUTO, WDP_AUTO, 160, 82,
  1516 	WDP_AUTO, WDP_AUTO, 160, 95,
  1495 	WC_SCEN_TOWN_GEN, WC_NONE,
  1517 	WC_SCEN_TOWN_GEN, WC_NONE,
  1496 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1518 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON,
  1497 	_scen_edit_town_gen_widgets,
  1519 	_scen_edit_town_gen_widgets,
  1498 	ScenEditTownGenWndProc,
  1520 	ScenEditTownGenWndProc,
  1499 };
  1521 };
  2347 
  2369 
  2348 			case 'X' | WKC_CTRL:
  2370 			case 'X' | WKC_CTRL:
  2349 				ShowTransparencyToolbar();
  2371 				ShowTransparencyToolbar();
  2350 				break;
  2372 				break;
  2351 
  2373 
  2352 			case 'X': {
  2374 			case 'X':
  2353 				/* Toggle all transparency options except for signs */
  2375 				ToggleTransparency();
  2354 				static byte trans_opt = ~0;
       
  2355 				if (GB(_transparent_opt, 1, 7) == 0) {
       
  2356 					SB(_transparent_opt, 1, 7, GB(trans_opt, 1, 7));
       
  2357 				} else {
       
  2358 					trans_opt = _transparent_opt;
       
  2359 					SB(_transparent_opt, 1, 7, 0);
       
  2360 				}
       
  2361 				MarkWholeScreenDirty();
       
  2362 				break;
  2376 				break;
  2363 			}
       
  2364 
  2377 
  2365 #ifdef ENABLE_NETWORK
  2378 #ifdef ENABLE_NETWORK
  2366 			case WKC_RETURN: case 'T': // smart chat; send to team if any, otherwise to all
  2379 			case WKC_RETURN: case 'T': // smart chat; send to team if any, otherwise to all
  2367 				if (_networking) {
  2380 				if (_networking) {
  2368 					const NetworkClientInfo *cio = NetworkFindClientInfoFromIndex(_network_own_client_index);
  2381 					const NetworkClientInfo *cio = NetworkFindClientInfoFromIndex(_network_own_client_index);