@@ -942,17 +942,21 @@ void faction_manager::display() const
942
942
// entries_per_page * page number
943
943
const size_t top_of_page = entries_per_page * ( selection / entries_per_page );
944
944
945
+ const auto draw_list = [&]( const std::function<const std::string ( size_t )> &text ) {
946
+ draw_scrollbar ( w_missions, selection, entries_per_page, active_vec_size, point ( 0 , 3 ) );
947
+ for ( size_t i = top_of_page; i < active_vec_size && i < top_of_page + entries_per_page; i++ ) {
948
+ const int y = i - top_of_page + 3 ;
949
+ trim_and_print ( w_missions, point ( 1 , y ), 28 , selection == i ? hilite ( col ) : col, text ( i ) );
950
+ }
951
+ };
952
+
945
953
switch ( tab ) {
946
954
case tab_mode::TAB_MYFACTION: {
947
955
const std::string no_camp = _ ( " You have no camps" );
948
956
if ( active_vec_size > 0 ) {
949
- draw_scrollbar ( w_missions, selection, entries_per_page, active_vec_size,
950
- point ( 0 , 3 ) );
951
- for ( size_t i = top_of_page; i < active_vec_size && i < top_of_page + entries_per_page; i++ ) {
952
- const int y = i - top_of_page + 3 ;
953
- trim_and_print ( w_missions, point ( 1 , y ), 28 , selection == i ? hilite ( col ) : col,
954
- camps[i]->camp_name () );
955
- }
957
+ draw_list ( std::function ( [&camps]( size_t i ) {
958
+ return camps[i]->camp_name ();
959
+ } ) );
956
960
if ( camp ) {
957
961
camp->faction_display ( w_missions, 31 );
958
962
} else {
@@ -967,13 +971,9 @@ void faction_manager::display() const
967
971
case tab_mode::TAB_FOLLOWERS: {
968
972
const std::string no_ally = _ ( " You have no followers" );
969
973
if ( !followers.empty () ) {
970
- draw_scrollbar ( w_missions, selection, entries_per_page, active_vec_size,
971
- point ( 0 , 3 ) );
972
- for ( size_t i = top_of_page; i < active_vec_size && i < top_of_page + entries_per_page; i++ ) {
973
- const int y = i - top_of_page + 3 ;
974
- trim_and_print ( w_missions, point ( 1 , y ), 28 , selection == i ? hilite ( col ) : col,
975
- followers[i]->disp_name () );
976
- }
974
+ draw_list ( std::function ( [&followers]( size_t i ) {
975
+ return followers[i]->disp_name ();
976
+ } ) );
977
977
if ( guy ) {
978
978
int retval = guy->faction_display ( w_missions, 31 );
979
979
if ( retval == 2 ) {
@@ -993,13 +993,9 @@ void faction_manager::display() const
993
993
case tab_mode::TAB_OTHERFACTIONS: {
994
994
const std::string no_fac = _ ( " You don't know of any factions." );
995
995
if ( active_vec_size > 0 ) {
996
- draw_scrollbar ( w_missions, selection, entries_per_page, active_vec_size,
997
- point ( 0 , 3 ) );
998
- for ( size_t i = top_of_page; i < active_vec_size && i < top_of_page + entries_per_page; i++ ) {
999
- const int y = i - top_of_page + 3 ;
1000
- trim_and_print ( w_missions, point ( 1 , y ), 28 , selection == i ? hilite ( col ) : col,
1001
- _ ( valfac[i]->name ) );
1002
- }
996
+ draw_list ( std::function ( [&valfac]( size_t i ) {
997
+ return _ ( valfac[i]->name );
998
+ } ) );
1003
999
if ( cur_fac ) {
1004
1000
cur_fac->faction_display ( w_missions, 31 );
1005
1001
} else {
@@ -1014,13 +1010,9 @@ void faction_manager::display() const
1014
1010
case tab_mode::TAB_LORE: {
1015
1011
const std::string no_lore = _ ( " You haven't learned anything about the world." );
1016
1012
if ( active_vec_size > 0 ) {
1017
- draw_scrollbar ( w_missions, selection, entries_per_page, active_vec_size,
1018
- point ( 0 , 3 ) );
1019
- for ( size_t i = top_of_page; i < active_vec_size && i < top_of_page + entries_per_page; i++ ) {
1020
- const int y = i - top_of_page + 3 ;
1021
- trim_and_print ( w_missions, point ( 1 , y ), 28 , selection == i ? hilite ( col ) : col,
1022
- _ ( lore[i].second ) );
1023
- }
1013
+ draw_list ( std::function ( [&lore]( size_t i ) {
1014
+ return _ ( lore[i].second );
1015
+ } ) );
1024
1016
if ( snippet != nullptr ) {
1025
1017
int y = 2 ;
1026
1018
fold_and_print ( w_missions, point ( 31 , ++y ), getmaxx ( w_missions ) - 31 - 2 , c_light_gray,
@@ -1039,15 +1031,13 @@ void faction_manager::display() const
1039
1031
_ ( " You haven't recorded sightings of any creatures. Taking photos can be a good way to keep track of them." );
1040
1032
const int w = getmaxx ( w_missions ) - 31 - 2 ;
1041
1033
if ( active_vec_size > 0 ) {
1042
- draw_scrollbar ( w_missions, selection, entries_per_page, active_vec_size,
1043
- point ( 0 , 3 ) );
1044
- for ( size_t i = top_of_page; i < active_vec_size && i < top_of_page + entries_per_page; i++ ) {
1045
- const int y = i - top_of_page + 3 ;
1046
- trim_and_print ( w_missions, point ( 1 , y ), 28 , selection == i ? hilite ( col ) : col,
1047
- string_format ( " %s %s" , colorize ( creatures[i]->sym ,
1048
- selection == i ? hilite ( creatures[i]->color ) : creatures[i]->color ),
1049
- creatures[i]->nname () ) );
1050
- }
1034
+ draw_list ( std::function ( [&creatures, &selection]( size_t i ) {
1035
+ return string_format ( " %s %s" ,
1036
+ colorize ( creatures[i]->sym , selection == i ?
1037
+ hilite ( creatures[i]->color ) :
1038
+ creatures[i]->color ),
1039
+ creatures[i]->nname () );
1040
+ } ) );
1051
1041
if ( !cur_creature.is_null () ) {
1052
1042
cur_creature->faction_display ( w_missions, point ( 31 , 3 ), w );
1053
1043
} else {
0 commit comments