From 8c0fd1976a37d6ad5d126098078f5cc0aa9eb339 Mon Sep 17 00:00:00 2001 From: hreintke Date: Fri, 7 Dec 2018 15:24:47 +0100 Subject: [PATCH] Haltdetail lineinfo --- gui/halt_detail.cc | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/gui/halt_detail.cc b/gui/halt_detail.cc index aca7a9c7c..17fe1a063 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,32 @@ 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++) { + int previous_linetype = -1; + vector_tpl sorted_lines; + for (unsigned int i = 0; i < halt->registered_lines.get_count(); i++) { + sorted_lines.append(i); + } + std::sort(sorted_lines.begin(), sorted_lines.end(), + [&](int ai, int 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(); -- 2.13.2.windows.1