Limit number of warnings whon in timetable window

pull/362/head
Jonathan G Rennison 2 years ago
parent 4f7f8c5b63
commit 65cb4ccedf

@ -5742,6 +5742,8 @@ STR_TIMETABLE_WARNING_NO_SCHEDULED_DISPATCH_ORDER_ASSIGNED :{BLACK}The disp
STR_TIMETABLE_WARNING_SCHEDULED_DISPATCH_ORDER_NO_WAIT_TIME :{BLACK}The scheduled dispatch order should have a timetabled wait time
STR_TIMETABLE_WARNING_SCHEDULE_ID :{BLACK}Schedule {NUM}: {STRING}
STR_TIMETABLE_WARNINGS_OMITTED :{BLACK}{NUM} further warnings omitted...
# Date window (for timetable)
STR_DATE_CAPTION :{WHITE}Set date
STR_DATE_SET_DATE :{BLACK}Set date

@ -279,6 +279,10 @@ struct TimetableWindow : Window {
bool change_timetable_all; ///< Set wait time or speed for all timetable entries (ctrl-click) action
int summary_warnings = 0; ///< NUmber of summary warnings shown
enum {
MAX_SUMMARY_WARNINGS = 10,
};
TimetableWindow(WindowDesc *desc, WindowNumber window_number) :
Window(desc),
sel_index(-1),
@ -345,7 +349,7 @@ struct TimetableWindow : Window {
case WID_VT_SUMMARY_PANEL: {
Dimension d = GetSpriteSize(SPR_WARNING_SIGN);
size->height = WD_FRAMERECT_TOP + 2 * FONT_HEIGHT_NORMAL + this->summary_warnings * std::max<int>(d.height, FONT_HEIGHT_NORMAL) + WD_FRAMERECT_BOTTOM;
size->height = WD_FRAMERECT_TOP + 2 * FONT_HEIGHT_NORMAL + std::min<int>(MAX_SUMMARY_WARNINGS, this->summary_warnings) * std::max<int>(d.height, FONT_HEIGHT_NORMAL) + WD_FRAMERECT_BOTTOM;
break;
}
}
@ -743,9 +747,7 @@ struct TimetableWindow : Window {
const int warning_offset_y = (step_height - warning_dimensions.height) / 2;
const bool rtl = _current_text_dir == TD_RTL;
int warning_count = 0;
ProcessTimetableWarnings(v, [&](StringID text, bool warning) {
auto draw_warning = [&](StringID text, bool warning) {
int left = r.left + WD_FRAMERECT_LEFT;
int right = r.right - WD_FRAMERECT_RIGHT;
if (warning) {
@ -758,8 +760,19 @@ struct TimetableWindow : Window {
}
DrawString(left, right, y + text_offset_y, text);
y += step_height;
};
int warning_count = 0;
int warning_limit = this->summary_warnings > MAX_SUMMARY_WARNINGS ? MAX_SUMMARY_WARNINGS - 1 : std::min<int>(MAX_SUMMARY_WARNINGS, this->summary_warnings);
ProcessTimetableWarnings(v, [&](StringID text, bool warning) {
if (warning_count < warning_limit) draw_warning(text, warning);
warning_count++;
});
if (warning_count > warning_limit) {
SetDParam(0, warning_count - warning_limit);
draw_warning(STR_TIMETABLE_WARNINGS_OMITTED, true);
}
if (warning_count != this->summary_warnings) {
TimetableWindow *mutable_this = const_cast<TimetableWindow *>(this);

Loading…
Cancel
Save