diff --git a/gui/halt_detail.cc b/gui/halt_detail.cc index aca7a9c7c..0d14c5641 100644 --- a/gui/halt_detail.cc +++ b/gui/halt_detail.cc @@ -5,6 +5,8 @@ * (see licence.txt) */ +#include + #include "../simworld.h" #include "../display/simimg.h" #include "../display/viewport.h" @@ -198,7 +200,33 @@ void halt_detail_t::halt_detail_info() offset_y += LINESPACE; if( !halt->registered_lines.empty() ) { - for (unsigned int i = 0; iregistered_lines.get_count(); i++) { + sint16 previous_linetype = -1; + vector_tpl sorted_lines; + for (uint16 i = 0; i < halt->registered_lines.get_count(); i++) { + sorted_lines.append(i); + } + std::sort(sorted_lines.begin(), sorted_lines.end(), + [&](uint16 ai, uint16 bi) { + linehandle_t a = halt->registered_lines[ai]; + linehandle_t b = halt->registered_lines[bi]; + return a->get_linetype() == b->get_linetype() ? + strcmp(a->get_name(), b->get_name()) <= 0 + : strcmp(a->get_linetype_name(a->get_linetype()), b->get_linetype_name(b->get_linetype())) <= 0; + } + ); + + FOR(vector_tpl, i, sorted_lines) { + // Linetype if it is the first + if (halt->registered_lines[i]->get_linetype() != previous_linetype) { + previous_linetype = halt->registered_lines[i]->get_linetype(); + buf.append("\n"); + offset_y += LINESPACE; + buf.append(" ·"); + buf.append(halt->registered_lines[i]->get_linetype_name(halt->registered_lines[i]->get_linetype())); + buf.append(":\n"); + offset_y += LINESPACE; + } + // Line buttons only if owner ... if (welt->get_active_player()==halt->registered_lines[i]->get_owner()) { button_t *b = new button_t();