159 } |
159 } |
160 |
160 |
161 uint Width() const |
161 uint Width() const |
162 { |
162 { |
163 char buffer[512]; |
163 char buffer[512]; |
164 PlayerID player = (PlayerID)result; |
164 CompanyID company = (CompanyID)result; |
165 SetDParam(0, player); |
165 SetDParam(0, company); |
166 SetDParam(1, player); |
166 SetDParam(1, company); |
167 GetString(buffer, STR_7021, lastof(buffer)); |
167 GetString(buffer, STR_7021, lastof(buffer)); |
168 return GetStringBoundingBox(buffer).width + 19; |
168 return GetStringBoundingBox(buffer).width + 19; |
169 } |
169 } |
170 |
170 |
171 void Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const |
171 void Draw(int x, int y, uint width, uint height, bool sel, int bg_colour) const |
172 { |
172 { |
173 PlayerID player = (PlayerID)result; |
173 CompanyID company = (CompanyID)result; |
174 DrawPlayerIcon(player, x + 2, y + 1); |
174 DrawCompanyIcon(company, x + 2, y + 1); |
175 |
175 |
176 SetDParam(0, player); |
176 SetDParam(0, company); |
177 SetDParam(1, player); |
177 SetDParam(1, company); |
178 int col; |
178 int col; |
179 if (this->greyed) { |
179 if (this->greyed) { |
180 col = TC_GREY; |
180 col = TC_GREY; |
181 } else { |
181 } else { |
182 col = sel ? TC_WHITE : TC_BLACK; |
182 col = sel ? TC_WHITE : TC_BLACK; |
199 } |
199 } |
200 |
200 |
201 /** |
201 /** |
202 * Pop up a generic company list menu. |
202 * Pop up a generic company list menu. |
203 */ |
203 */ |
204 static void PopupMainPlayerToolbMenu(Window *w, int widget, int grey = 0) |
204 static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) |
205 { |
205 { |
206 DropDownList *list = new DropDownList(); |
206 DropDownList *list = new DropDownList(); |
207 |
207 |
208 if (widget == TBN_PLAYERS && _networking) { |
208 if (widget == TBN_COMPANIES && _networking) { |
209 /* Add the client list button for the Players menu */ |
209 /* Add the client list button for the companies menu */ |
210 list->push_back(new DropDownListStringItem(STR_NETWORK_CLIENT_LIST, -1, false)); |
210 list->push_back(new DropDownListStringItem(STR_NETWORK_CLIENT_LIST, -1, false)); |
211 } |
211 } |
212 |
212 |
213 for (PlayerID p = PLAYER_FIRST; p < MAX_PLAYERS; p++) { |
213 for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { |
214 if (!IsValidPlayerID(p)) continue; |
214 if (!IsValidCompanyID(c)) continue; |
215 list->push_back(new DropDownListCompanyItem(p, false, HasBit(grey, p))); |
215 list->push_back(new DropDownListCompanyItem(c, false, HasBit(grey, c))); |
216 } |
216 } |
217 |
217 |
218 ShowDropDownList(w, list, _local_player == PLAYER_SPECTATOR ? -1 : _local_player, widget, 240, true, true); |
218 ShowDropDownList(w, list, _local_company == COMPANY_SPECTATOR ? -1 : _local_company, widget, 240, true, true); |
219 SndPlayFx(SND_15_BEEP); |
219 SndPlayFx(SND_15_BEEP); |
220 } |
220 } |
221 |
221 |
222 |
222 |
223 static ToolbarMode _toolbar_mode; |
223 static ToolbarMode _toolbar_mode; |
416 |
416 |
417 /* --- Stations button menu --- */ |
417 /* --- Stations button menu --- */ |
418 |
418 |
419 static void ToolbarStationsClick(Window *w) |
419 static void ToolbarStationsClick(Window *w) |
420 { |
420 { |
421 PopupMainPlayerToolbMenu(w, TBN_STATIONS); |
421 PopupMainCompanyToolbMenu(w, TBN_STATIONS); |
422 } |
422 } |
423 |
423 |
424 static void MenuClickStations(int index) |
424 static void MenuClickStations(int index) |
425 { |
425 { |
426 ShowPlayerStations((PlayerID)index); |
426 ShowCompanyStations((CompanyID)index); |
427 } |
427 } |
428 |
428 |
429 /* --- Finances button menu --- */ |
429 /* --- Finances button menu --- */ |
430 |
430 |
431 static void ToolbarFinancesClick(Window *w) |
431 static void ToolbarFinancesClick(Window *w) |
432 { |
432 { |
433 PopupMainPlayerToolbMenu(w, TBN_FINANCES); |
433 PopupMainCompanyToolbMenu(w, TBN_FINANCES); |
434 } |
434 } |
435 |
435 |
436 static void MenuClickFinances(int index) |
436 static void MenuClickFinances(int index) |
437 { |
437 { |
438 ShowPlayerFinances((PlayerID)index); |
438 ShowCompanyFinances((CompanyID)index); |
439 } |
439 } |
440 |
440 |
441 /* --- Company's button menu --- */ |
441 /* --- Company's button menu --- */ |
442 |
442 |
443 static void ToolbarPlayersClick(Window *w) |
443 static void ToolbarCompaniesClick(Window *w) |
444 { |
444 { |
445 PopupMainPlayerToolbMenu(w, TBN_PLAYERS); |
445 PopupMainCompanyToolbMenu(w, TBN_COMPANIES); |
446 } |
446 } |
447 |
447 |
448 static void MenuClickCompany(int index) |
448 static void MenuClickCompany(int index) |
449 { |
449 { |
450 if (_networking && index == -1) { |
450 if (_networking && index == -1) { |
451 ShowClientList(); |
451 ShowClientList(); |
452 } else { |
452 } else { |
453 ShowPlayerCompany((PlayerID)index); |
453 ShowCompany((CompanyID)index); |
454 } |
454 } |
455 } |
455 } |
456 |
456 |
457 /* --- Graphs button menu --- */ |
457 /* --- Graphs button menu --- */ |
458 |
458 |
515 int dis = ~0; |
515 int dis = ~0; |
516 |
516 |
517 FOR_ALL_VEHICLES(v) { |
517 FOR_ALL_VEHICLES(v) { |
518 if (v->type == veh && v->IsPrimaryVehicle()) ClrBit(dis, v->owner); |
518 if (v->type == veh && v->IsPrimaryVehicle()) ClrBit(dis, v->owner); |
519 } |
519 } |
520 PopupMainPlayerToolbMenu(w, TBN_VEHICLESTART + veh, dis); |
520 PopupMainCompanyToolbMenu(w, TBN_VEHICLESTART + veh, dis); |
521 } |
521 } |
522 |
522 |
523 |
523 |
524 static void ToolbarTrainClick(Window *w) |
524 static void ToolbarTrainClick(Window *w) |
525 { |
525 { |
526 ToolbarVehicleClick(w, VEH_TRAIN); |
526 ToolbarVehicleClick(w, VEH_TRAIN); |
527 } |
527 } |
528 |
528 |
529 static void MenuClickShowTrains(int index) |
529 static void MenuClickShowTrains(int index) |
530 { |
530 { |
531 ShowVehicleListWindow((PlayerID)index, VEH_TRAIN); |
531 ShowVehicleListWindow((CompanyID)index, VEH_TRAIN); |
532 } |
532 } |
533 |
533 |
534 /* --- Road vehicle button menu --- */ |
534 /* --- Road vehicle button menu --- */ |
535 |
535 |
536 static void ToolbarRoadClick(Window *w) |
536 static void ToolbarRoadClick(Window *w) |
589 |
589 |
590 /* --- Rail button menu --- */ |
590 /* --- Rail button menu --- */ |
591 |
591 |
592 static void ToolbarBuildRailClick(Window *w) |
592 static void ToolbarBuildRailClick(Window *w) |
593 { |
593 { |
594 const Player *p = GetPlayer(_local_player); |
594 const Company *c = GetCompany(_local_company); |
595 DropDownList *list = new DropDownList(); |
595 DropDownList *list = new DropDownList(); |
596 for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) { |
596 for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) { |
597 const RailtypeInfo *rti = GetRailTypeInfo(rt); |
597 const RailtypeInfo *rti = GetRailTypeInfo(rt); |
598 list->push_back(new DropDownListStringItem(rti->strings.menu_text, rt, !HasBit(p->avail_railtypes, rt))); |
598 list->push_back(new DropDownListStringItem(rti->strings.menu_text, rt, !HasBit(c->avail_railtypes, rt))); |
599 } |
599 } |
600 ShowDropDownList(w, list, _last_built_railtype, TBN_RAILS, 140, true, true); |
600 ShowDropDownList(w, list, _last_built_railtype, TBN_RAILS, 140, true, true); |
601 SndPlayFx(SND_15_BEEP); |
601 SndPlayFx(SND_15_BEEP); |
602 } |
602 } |
603 |
603 |
609 |
609 |
610 /* --- Road button menu --- */ |
610 /* --- Road button menu --- */ |
611 |
611 |
612 static void ToolbarBuildRoadClick(Window *w) |
612 static void ToolbarBuildRoadClick(Window *w) |
613 { |
613 { |
614 const Player *p = GetPlayer(_local_player); |
614 const Company *c = GetCompany(_local_company); |
615 DropDownList *list = new DropDownList(); |
615 DropDownList *list = new DropDownList(); |
616 for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) { |
616 for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) { |
617 /* Highways don't exist */ |
617 /* Highways don't exist */ |
618 if (rt == ROADTYPE_HWAY) continue; |
618 if (rt == ROADTYPE_HWAY) continue; |
619 |
619 |
620 /* The standard road button is *always* available */ |
620 /* The standard road button is *always* available */ |
621 list->push_back(new DropDownListStringItem(STR_180A_ROAD_CONSTRUCTION + rt, rt, !(HasBit(p->avail_roadtypes, rt) || rt == ROADTYPE_ROAD))); |
621 list->push_back(new DropDownListStringItem(STR_180A_ROAD_CONSTRUCTION + rt, rt, !(HasBit(c->avail_roadtypes, rt) || rt == ROADTYPE_ROAD))); |
622 } |
622 } |
623 ShowDropDownList(w, list, _last_built_roadtype, TBN_ROADS, 140, true, true); |
623 ShowDropDownList(w, list, _last_built_roadtype, TBN_ROADS, 140, true, true); |
624 SndPlayFx(SND_15_BEEP); |
624 SndPlayFx(SND_15_BEEP); |
625 } |
625 } |
626 |
626 |
999 GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB4, FILLRECT_CHECKER); |
999 GfxFillRect(0, 0, this->width - 1, this->height - 1, 0xB4, FILLRECT_CHECKER); |
1000 |
1000 |
1001 /* If spectator, disable all construction buttons |
1001 /* If spectator, disable all construction buttons |
1002 * ie : Build road, rail, ships, airports and landscaping |
1002 * ie : Build road, rail, ships, airports and landscaping |
1003 * Since enabled state is the default, just disable when needed */ |
1003 * Since enabled state is the default, just disable when needed */ |
1004 this->SetWidgetsDisabledState(_current_player == PLAYER_SPECTATOR, TBN_RAILS, TBN_ROADS, TBN_WATER, TBN_AIR, TBN_LANDSCAPE, WIDGET_LIST_END); |
1004 this->SetWidgetsDisabledState(_current_company == COMPANY_SPECTATOR, TBN_RAILS, TBN_ROADS, TBN_WATER, TBN_AIR, TBN_LANDSCAPE, WIDGET_LIST_END); |
1005 /* disable company list drop downs, if there are no companies */ |
1005 /* disable company list drop downs, if there are no companies */ |
1006 this->SetWidgetsDisabledState(ActivePlayerCount() == TBN_PAUSE, TBN_STATIONS, TBN_FINANCES, TBN_TRAINS, TBN_ROADVEHS, TBN_SHIPS, TBN_AIRCRAFTS, WIDGET_LIST_END); |
1006 this->SetWidgetsDisabledState(ActiveCompanyCount() == TBN_PAUSE, TBN_STATIONS, TBN_FINANCES, TBN_TRAINS, TBN_ROADVEHS, TBN_SHIPS, TBN_AIRCRAFTS, WIDGET_LIST_END); |
1007 |
1007 |
1008 this->SetWidgetDisabledState(TBN_RAILS, !CanBuildVehicleInfrastructure(VEH_TRAIN)); |
1008 this->SetWidgetDisabledState(TBN_RAILS, !CanBuildVehicleInfrastructure(VEH_TRAIN)); |
1009 this->SetWidgetDisabledState(TBN_AIR, !CanBuildVehicleInfrastructure(VEH_AIRCRAFT)); |
1009 this->SetWidgetDisabledState(TBN_AIR, !CanBuildVehicleInfrastructure(VEH_AIRCRAFT)); |
1010 |
1010 |
1011 this->DrawWidgets(); |
1011 this->DrawWidgets(); |
1028 case WKC_F2: ShowGameOptions(); break; |
1028 case WKC_F2: ShowGameOptions(); break; |
1029 case WKC_F3: MenuClickSaveLoad(); break; |
1029 case WKC_F3: MenuClickSaveLoad(); break; |
1030 case WKC_F4: ShowSmallMap(); break; |
1030 case WKC_F4: ShowSmallMap(); break; |
1031 case WKC_F5: ShowTownDirectory(); break; |
1031 case WKC_F5: ShowTownDirectory(); break; |
1032 case WKC_F6: ShowSubsidiesList(); break; |
1032 case WKC_F6: ShowSubsidiesList(); break; |
1033 case WKC_F7: ShowPlayerStations(_local_player); break; |
1033 case WKC_F7: ShowCompanyStations(_local_company); break; |
1034 case WKC_F8: ShowPlayerFinances(_local_player); break; |
1034 case WKC_F8: ShowCompanyFinances(_local_company); break; |
1035 case WKC_F9: ShowPlayerCompany(_local_player); break; |
1035 case WKC_F9: ShowCompany(_local_company); break; |
1036 case WKC_F10: ShowOperatingProfitGraph(); break; |
1036 case WKC_F10: ShowOperatingProfitGraph(); break; |
1037 case WKC_F11: ShowCompanyLeagueTable(); break; |
1037 case WKC_F11: ShowCompanyLeagueTable(); break; |
1038 case WKC_F12: ShowBuildIndustryWindow(); break; |
1038 case WKC_F12: ShowBuildIndustryWindow(); break; |
1039 case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, VEH_TRAIN); break; |
1039 case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_company, VEH_TRAIN); break; |
1040 case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(_local_player, VEH_ROAD); break; |
1040 case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(_local_company, VEH_ROAD); break; |
1041 case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, VEH_SHIP); break; |
1041 case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_company, VEH_SHIP); break; |
1042 case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, VEH_AIRCRAFT); break; |
1042 case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_company, VEH_AIRCRAFT); break; |
1043 case WKC_NUM_PLUS: // Fall through |
1043 case WKC_NUM_PLUS: // Fall through |
1044 case WKC_EQUALS: // Fall through |
1044 case WKC_EQUALS: // Fall through |
1045 case WKC_SHIFT | WKC_EQUALS: // Fall through |
1045 case WKC_SHIFT | WKC_EQUALS: // Fall through |
1046 case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(this); break; |
1046 case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(this); break; |
1047 case WKC_NUM_MINUS: // Fall through |
1047 case WKC_NUM_MINUS: // Fall through |
1119 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_TOWN, STR_0176_DISPLAY_TOWN_DIRECTORY}, // TBN_TOWNDIRECTORY |
1119 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_TOWN, STR_0176_DISPLAY_TOWN_DIRECTORY}, // TBN_TOWNDIRECTORY |
1120 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_SUBSIDIES, STR_02DC_DISPLAY_SUBSIDIES}, // TBN_SUBSIDIES |
1120 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_SUBSIDIES, STR_02DC_DISPLAY_SUBSIDIES}, // TBN_SUBSIDIES |
1121 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_COMPANY_LIST, STR_0173_DISPLAY_LIST_OF_COMPANY}, // TBN_STATIONS |
1121 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_COMPANY_LIST, STR_0173_DISPLAY_LIST_OF_COMPANY}, // TBN_STATIONS |
1122 |
1122 |
1123 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_COMPANY_FINANCE, STR_0177_DISPLAY_COMPANY_FINANCES}, // TBN_FINANCES |
1123 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_COMPANY_FINANCE, STR_0177_DISPLAY_COMPANY_FINANCES}, // TBN_FINANCES |
1124 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_COMPANY_GENERAL, STR_0178_DISPLAY_COMPANY_GENERAL}, // TBN_PLAYERS |
1124 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_COMPANY_GENERAL, STR_0178_DISPLAY_COMPANY_GENERAL}, // TBN_COMPANIES |
1125 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_GRAPHS, STR_0179_DISPLAY_GRAPHS}, // TBN_GRAPHICS |
1125 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_GRAPHS, STR_0179_DISPLAY_GRAPHS}, // TBN_GRAPHICS |
1126 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_COMPANY_LEAGUE, STR_017A_DISPLAY_COMPANY_LEAGUE}, // TBN_LEAGUE |
1126 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_COMPANY_LEAGUE, STR_017A_DISPLAY_COMPANY_LEAGUE}, // TBN_LEAGUE |
1127 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_INDUSTRY, STR_0312_FUND_CONSTRUCTION_OF_NEW}, // TBN_INDUSTRIES |
1127 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_INDUSTRY, STR_0312_FUND_CONSTRUCTION_OF_NEW}, // TBN_INDUSTRIES |
1128 |
1128 |
1129 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_TRAINLIST, STR_017B_DISPLAY_LIST_OF_COMPANY}, // TBN_TRAINS |
1129 { WWT_IMGBTN, RESIZE_NONE, COLOUR_GREY, 0, 0, 0, 21, SPR_IMG_TRAINLIST, STR_017B_DISPLAY_LIST_OF_COMPANY}, // TBN_TRAINS |