|
OpenTTD Source
14.0-beta3
|
Go to the documentation of this file.
26 #include "table/strings.h"
32 static const StringID _performance_titles[] = {
33 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER,
34 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER,
35 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER,
36 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER,
37 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR,
38 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR,
39 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR,
40 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR,
41 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR,
42 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR,
43 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE,
44 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE,
45 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN,
46 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN,
47 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT,
48 STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON,
51 static inline StringID GetPerformanceTitleFromValue(uint value)
53 return _performance_titles[std::min(value, 1000u) >> 6];
71 this->companies.clear();
74 this->companies.push_back(c);
77 this->companies.shrink_to_fit();
103 void DrawWidget(
const Rect &r,
WidgetID widget)
const override
108 int icon_y_offset = (this->line_height - this->icon.height) / 2;
113 uint icon_left = ir.
Indent(rtl ? this->text_width : this->ordinal_width, rtl).left;
116 for (uint i = 0; i != this->companies.size(); i++) {
117 const Company *c = this->companies[i];
119 DrawString(ordinal.left, ordinal.right, ir.top + text_y_offset, STR_COMPANY_LEAGUE_COMPANY_RANK);
126 DrawString(text.left, text.right, ir.top + text_y_offset, STR_COMPANY_LEAGUE_COMPANY_NAME);
135 this->ordinal_width = 0;
142 uint widest_width = 0;
143 uint widest_title = 0;
144 for (uint i = 0; i <
lengthof(_performance_titles); i++) {
146 if (
width > widest_width) {
148 widest_width =
width;
158 SetDParam(2, _performance_titles[widest_title]);
180 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override
191 static constexpr
NWidgetPart _nested_performance_league_widgets[] = {
202 static WindowDesc _performance_league_desc(__FILE__, __LINE__,
203 WDP_AUTO,
"performance_league", 0, 0,
206 std::begin(_nested_performance_league_widgets), std::end(_nested_performance_league_widgets)
209 void ShowPerformanceLeagueTable()
211 AllocateWindowDescFront<PerformanceLeagueWindow>(&_performance_league_desc, 0);
214 static void HandleLinkClick(
Link link)
246 default: NOT_REACHED();
260 std::vector<std::pair<uint, const LeagueTableElement *>> rows;
275 this->title = std::string{};
277 if (lt ==
nullptr)
return;
280 this->title = lt->title;
282 std::vector<const LeagueTableElement *> elements;
284 if (lte->table == this->table) {
285 elements.push_back(lte);
288 std::sort(elements.begin(), elements.end(), [](
auto a,
auto b) { return a->rating > b->rating; });
292 for (uint i = 0; i != elements.size(); i++) {
293 auto *lte = elements[i];
294 if (i > 0 && elements[i - 1]->rating != lte->rating) rank = i;
295 this->rows.emplace_back(std::make_pair(rank, lte));
307 void SetStringParameters(
WidgetID widget)
const override
318 void DrawWidget(
const Rect &r,
WidgetID widget)
const override
323 if (lt ==
nullptr)
return;
327 if (!lt->header.empty()) {
332 int icon_y_offset = (this->line_height - this->icon_size.height) / 2;
339 Rect icon_rect = ir.
Indent(this->rank_width + (rtl ? 0 : spacer), rtl).WithWidth(this->icon_size.width, rtl);
340 Rect text_rect = ir.
Indent(this->rank_width + spacer + this->icon_size.width, rtl).
WithWidth(this->text_width, rtl);
341 Rect score_rect = ir.
Indent(this->rank_width + 2 * spacer + this->icon_size.width + this->text_width, rtl).
WithWidth(this->score_width, rtl);
343 for (
auto [rank, lte] : this->rows) {
345 DrawString(rank_rect.left, rank_rect.right, ir.top + text_y_offset, STR_COMPANY_LEAGUE_COMPANY_RANK);
348 DrawString(text_rect.left, text_rect.right, ir.top + text_y_offset, STR_JUST_RAW_STRING, TC_BLACK);
350 DrawString(score_rect.left, score_rect.right, ir.top + text_y_offset, STR_JUST_RAW_STRING, TC_BLACK,
SA_RIGHT);
354 if (!lt->footer.empty()) {
357 ir.top =
DrawStringMultiLine(ir.left, ir.right, ir.top, UINT16_MAX, STR_JUST_RAW_STRING, TC_BLACK);
366 if (lt ==
nullptr)
return;
372 this->rank_width = this->text_width = this->score_width = 0;
373 bool show_icon_column =
false;
374 for (
auto [rank, lte] : this->rows) {
384 if (!show_icon_column) this->icon_size.width = 0;
390 if (!lt->header.empty()) {
394 }
else this->header_height = 0;
396 if (!lt->footer.empty()) {
402 void OnClick([[maybe_unused]]
Point pt,
WidgetID widget, [[maybe_unused]]
int click_count)
override
408 if (index >= 0 && (uint)index < this->rows.size()) {
409 auto lte = this->rows[index].second;
410 HandleLinkClick(lte->link);
419 void OnInvalidateData([[maybe_unused]]
int data = 0, [[maybe_unused]]
bool gui_scope =
true)
override
426 static constexpr
NWidgetPart _nested_script_league_widgets[] = {
437 static WindowDesc _script_league_desc(__FILE__, __LINE__,
441 std::begin(_nested_script_league_widgets), std::end(_nested_script_league_widgets)
447 AllocateWindowDescFront<ScriptLeagueWindow>(&_script_league_desc, table);
450 void ShowFirstLeagueTable()
454 ShowScriptLeagueTable((*it.begin())->index);
456 ShowPerformanceLeagueTable();
static Titem * Get(size_t index)
Returns Titem with given index.
bool ScrollMainWindowToTile(TileIndex tile, bool instant)
Scrolls the viewport of the main window to a given location.
Struct about league table elements.
void ShowExtraViewportWindow(TileIndex tile=INVALID_TILE)
Show a new Extra Viewport window.
Dimensions (a width and height) of a rectangle in 2D.
static Titem * GetIfValid(size_t index)
Returns Titem with given index.
Rect Shrink(int s) const
Copy and shrink Rect by s pixels.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
void OnPaint() override
The window must be repainted.
Tindex index
Index of this pool item.
void OnInvalidateData([[maybe_unused]] int data=0, [[maybe_unused]] bool gui_scope=true) override
Some data on this window has become invalid.
bool _ctrl_pressed
Is Ctrl pressed?
uint rank_width
The width of the rank ordinal.
constexpr uint Vertical() const
Get total vertical padding of RectPadding.
@ SA_RIGHT
Right align the text (must be a single bit).
Owner
Enum for all companies/owners.
@ WC_COMPANY_LEAGUE
Company league window; Window numbers:
bool NeedRebuild() const
Check if a rebuild is needed.
@ LT_INDUSTRY
Link an industry.
High level window description.
constexpr uint Horizontal() const
Get total horizontal padding of RectPadding.
Dimension icon_size
Dimenion of the company icon.
@ LT_STORY_PAGE
Link a story page.
bool NeedResort()
Check if a resort is needed next loop If used the resort timer will decrease every call till 0.
@ WDP_AUTO
Find a place automatically.
ResizeInfo resize
Resize information.
int32_t WindowNumber
Number to differentiate different windows of the same class.
@ FS_NORMAL
Index of the normal font in the font tables.
void InitNested(WindowNumber number=0)
Perform complete initialization of the Window with nested widgets, to allow use.
void SetDirty() const
Mark entire window as dirty (in need of re-paint)
void ForceResort()
Force a resort next Sort call Reset the resort timer if used too.
void ReInit(int rx=0, int ry=0, bool reposition=false)
Re-initialize a window, and optionally change its size.
@ MAX_COMPANIES
Maximum number of companies.
Rect Indent(int indent, bool end) const
Copy Rect and indent it from its position.
int GetStringHeight(std::string_view str, int maxw, FontSize fontsize)
Calculates height of string (in pixels).
int line_height
Height of the text lines.
Rect WithWidth(int width, bool end) const
Copy Rect and set its width.
uint8_t LeagueTableID
ID of a league table.
Coordinates of a point in 2D.
WindowNumber window_number
Window number within the window class.
@ WC_NONE
No window, redirects to WC_MAIN_WINDOW.
void DrawCompanyIcon(CompanyID c, int x, int y)
Draw the icon of a company.
bool IsValidTile(Tile tile)
Checks if a tile is valid.
Dimension GetSpriteSize(SpriteID sprid, Point *offset, ZoomLevel zoom)
Get the size of a sprite.
void ForceRebuild()
Force that a rebuild is needed.
int DrawStringMultiLine(int left, int right, int top, int bottom, std::string_view str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly over multiple lines.
static Pool::IterateWrapper< Titem > Iterate(size_t from=0)
Returns an iterable ensemble of all valid Titem.
int32_t performance_history
Company score (scale 0-1000)
uint score_width
The width of the score text.
void SetDParam(size_t n, uint64_t v)
Set a string parameter v at index n in the global string parameter array.
uint text_width
The width of the actual text.
void SetDParamStr(size_t n, const char *str)
This function is used to "bind" a C string to a OpenTTD dparam slot.
void ShowStoryBook(CompanyID company, uint16_t page_id=INVALID_STORY_PAGE, bool centered=false)
Raise or create the story book window for company, at page page_id.
int GetCharacterHeight(FontSize size)
Get height of a character for a given font size.
#define lengthof(x)
Return the length of an fixed size array.
int width
width of the window (number of pixels to the right in x direction)
void RebuildDone()
Notify the sortlist that the rebuild is done.
int DrawString(int left, int right, int top, std::string_view str, TextColour colour, StringAlignment align, bool underline, FontSize fontsize)
Draw string, possibly truncated to make it fit in its allocated space.
@ INVALID_COMPANY
An invalid company.
Data structure for an opened window.
static bool IsValidID(size_t index)
Tests whether given index can be used to get valid (non-nullptr) Titem.
uint header_height
Height of the table header.
void DrawWidgets() const
Paint all widgets of a window.
void BuildTable()
Rebuild the company league list.
void ShowCompany(CompanyID company)
Show the window with the overview of the company.
Specification of a rectangle with absolute coordinates of all edges.
bool Sort(Comp compare)
Sort the list.
CompanyEconomyEntry old_economy[MAX_HISTORY_QUARTERS]
Economic data of the company of the last MAX_HISTORY_QUARTERS quarters.
@ TD_RTL
Text is written right-to-left by default.
TextDirection _current_text_dir
Text direction of the currently selected language.
@ LT_COMPANY
Link a company.
Dimension GetStringBoundingBox(std::string_view str, FontSize start_fontsize)
Return the string dimension in pixels.