summaryrefslogtreecommitdiff
path: root/src/group_gui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/group_gui.cpp')
-rw-r--r--src/group_gui.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index 361ab53e5..d3e1eafbb 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -55,6 +55,7 @@ static const NWidgetPart _nested_group_widgets[] = {
SetFill(1, 0), SetResize(0, 1), SetScrollbar(WID_GL_LIST_GROUP_SCROLLBAR),
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_GL_LIST_GROUP_SCROLLBAR),
EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_INFO), SetFill(1, 0), EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_CREATE_GROUP), SetFill(0, 1),
SetDataTip(SPR_GROUP_CREATE_TRAIN, STR_GROUP_CREATE_TOOLTIP),
@@ -371,6 +372,9 @@ public:
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_DELETE_GROUP)->widget_data).height);
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_REPLACE_PROTECTION)->widget_data).height);
+ /* ... minus the height of the group info ... */
+ max_icon_height += (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
+
/* Get a multiple of tiny_step_height of that amount */
size->height = Ceil(size->height - max_icon_height, tiny_step_height);
break;
@@ -403,6 +407,11 @@ public:
*size = maxdim(*size, d);
break;
}
+
+ case WID_GL_INFO: {
+ size->height = (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
+ break;
+ }
}
}
@@ -527,6 +536,44 @@ public:
DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, DEFAULT_GROUP);
break;
+ case WID_GL_INFO: {
+ Money this_year = 0;
+ Money last_year = 0;
+ uint32 occupancy = 0;
+ uint32 vehicle_count = this->vehicles.Length();
+
+ for (uint i = 0; i < vehicle_count; i++) {
+ const Vehicle *v = this->vehicles[i];
+ assert(v->owner == this->owner);
+
+ this_year += v->GetDisplayProfitThisYear();
+ last_year += v->GetDisplayProfitLastYear();
+ occupancy += v->trip_occupancy;
+ }
+
+ const int left = r.left + WD_FRAMERECT_LEFT + 8;
+ const int right = r.right - WD_FRAMERECT_RIGHT - 8;
+
+ int y = r.top + WD_FRAMERECT_TOP;
+ DrawString(left, right, y, STR_GROUP_PROFIT_THIS_YEAR, TC_BLACK);
+ SetDParam(0, this_year);
+ DrawString(left, right, y, STR_JUST_CURRENCY_LONG, TC_BLACK, SA_RIGHT);
+
+ y += FONT_HEIGHT_NORMAL;
+ DrawString(left, right, y, STR_GROUP_PROFIT_LAST_YEAR, TC_BLACK);
+ SetDParam(0, last_year);
+ DrawString(left, right, y, STR_JUST_CURRENCY_LONG, TC_BLACK, SA_RIGHT);
+
+ y += FONT_HEIGHT_NORMAL;
+ DrawString(left, right, y, STR_GROUP_OCCUPANCY, TC_BLACK);
+ if (vehicle_count > 0) {
+ SetDParam(0, occupancy / vehicle_count);
+ DrawString(left, right, y, STR_GROUP_OCCUPANCY_VALUE, TC_BLACK, SA_RIGHT);
+ }
+
+ break;
+ }
+
case WID_GL_LIST_GROUP: {
int y1 = r.top + WD_FRAMERECT_TOP;
int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.Length());