diff --git a/ApplicationLibCode/Application/Tools/RiaStdStringTools.cpp b/ApplicationLibCode/Application/Tools/RiaStdStringTools.cpp index dd0178f1cd..154fa1c662 100644 --- a/ApplicationLibCode/Application/Tools/RiaStdStringTools.cpp +++ b/ApplicationLibCode/Application/Tools/RiaStdStringTools.cpp @@ -419,3 +419,51 @@ std::set RiaStdStringTools::valuesFromRangeSelection( const std::string& s, return {}; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::string RiaStdStringTools::formatRangeSelection( const std::vector& values ) +{ + if ( values.empty() ) return ""; + + std::vector sortedNums = values; + std::sort( sortedNums.begin(), sortedNums.end() ); + + std::ostringstream result; + int start = sortedNums[0]; + int end = sortedNums[0]; + + for ( size_t i = 1; i < sortedNums.size(); ++i ) + { + if ( sortedNums[i] == end + 1 ) + { + end = sortedNums[i]; + } + else + { + if ( start == end ) + { + result << start; + } + else + { + result << start << "-" << end; + } + result << ", "; + start = sortedNums[i]; + end = sortedNums[i]; + } + } + + if ( start == end ) + { + result << start; + } + else + { + result << start << "-" << end; + } + + return result.str(); +} diff --git a/ApplicationLibCode/Application/Tools/RiaStdStringTools.h b/ApplicationLibCode/Application/Tools/RiaStdStringTools.h index 1cf32eb457..5ef8aecc0c 100644 --- a/ApplicationLibCode/Application/Tools/RiaStdStringTools.h +++ b/ApplicationLibCode/Application/Tools/RiaStdStringTools.h @@ -68,6 +68,9 @@ public: // The input "-3,5-8,10-", min:1, max:12 will produce {1, 2, 3, 5, 6, 7, 8, 10, 11, 12} static std::set valuesFromRangeSelection( const std::string& s, int minimumValue, int maximumValue ); + // Create a string from a set of values. {1, 2, 3, 5, 6, 7, 8, 10, 11, 12} will be converted to "1, 2, 3, 5-8, 10-12" + static std::string formatRangeSelection( const std::vector& values ); + private: template static void splitByDelimiter( const std::string& str, Container& cont, char delimiter = ' ' );