Limit number of warnings whon in timetable window
This commit is contained in:
@@ -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_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_WARNING_SCHEDULE_ID :{BLACK}Schedule {NUM}: {STRING}
|
||||||
|
|
||||||
|
STR_TIMETABLE_WARNINGS_OMITTED :{BLACK}{NUM} further warnings omitted...
|
||||||
|
|
||||||
# Date window (for timetable)
|
# Date window (for timetable)
|
||||||
STR_DATE_CAPTION :{WHITE}Set date
|
STR_DATE_CAPTION :{WHITE}Set date
|
||||||
STR_DATE_SET_DATE :{BLACK}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
|
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
|
int summary_warnings = 0; ///< NUmber of summary warnings shown
|
||||||
|
|
||||||
|
enum {
|
||||||
|
MAX_SUMMARY_WARNINGS = 10,
|
||||||
|
};
|
||||||
|
|
||||||
TimetableWindow(WindowDesc *desc, WindowNumber window_number) :
|
TimetableWindow(WindowDesc *desc, WindowNumber window_number) :
|
||||||
Window(desc),
|
Window(desc),
|
||||||
sel_index(-1),
|
sel_index(-1),
|
||||||
@@ -345,7 +349,7 @@ struct TimetableWindow : Window {
|
|||||||
|
|
||||||
case WID_VT_SUMMARY_PANEL: {
|
case WID_VT_SUMMARY_PANEL: {
|
||||||
Dimension d = GetSpriteSize(SPR_WARNING_SIGN);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -743,9 +747,7 @@ struct TimetableWindow : Window {
|
|||||||
const int warning_offset_y = (step_height - warning_dimensions.height) / 2;
|
const int warning_offset_y = (step_height - warning_dimensions.height) / 2;
|
||||||
const bool rtl = _current_text_dir == TD_RTL;
|
const bool rtl = _current_text_dir == TD_RTL;
|
||||||
|
|
||||||
int warning_count = 0;
|
auto draw_warning = [&](StringID text, bool warning) {
|
||||||
|
|
||||||
ProcessTimetableWarnings(v, [&](StringID text, bool warning) {
|
|
||||||
int left = r.left + WD_FRAMERECT_LEFT;
|
int left = r.left + WD_FRAMERECT_LEFT;
|
||||||
int right = r.right - WD_FRAMERECT_RIGHT;
|
int right = r.right - WD_FRAMERECT_RIGHT;
|
||||||
if (warning) {
|
if (warning) {
|
||||||
@@ -758,8 +760,19 @@ struct TimetableWindow : Window {
|
|||||||
}
|
}
|
||||||
DrawString(left, right, y + text_offset_y, text);
|
DrawString(left, right, y + text_offset_y, text);
|
||||||
y += step_height;
|
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++;
|
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) {
|
if (warning_count != this->summary_warnings) {
|
||||||
TimetableWindow *mutable_this = const_cast<TimetableWindow *>(this);
|
TimetableWindow *mutable_this = const_cast<TimetableWindow *>(this);
|
||||||
|
Reference in New Issue
Block a user