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