2020#include " creature.h"
2121#include " debug.h"
2222#include " enums.h"
23+ #include " enum_traits.h"
2324#include " game.h"
2425#include " game_constants.h"
2526#include " game_inventory.h"
@@ -230,6 +231,7 @@ void item_tab_data::init( const Character &you, map &m )
230231 if ( uistate.list_item_downvote_active ) {
231232 filter_priority_minus = uistate.list_item_downvote ;
232233 }
234+ sort_flags = static_cast <surroundings_menu_sort_flags>( uistate.vmenu_item_sort );
233235 apply_filter ();
234236 if ( !filtered_list.empty () ) {
235237 selected_entry = filtered_list.front ();
@@ -306,6 +308,7 @@ void item_tab_data::apply_filter()
306308 uistate.list_item_filter = filter;
307309 uistate.list_item_priority = filter_priority_plus;
308310 uistate.list_item_downvote = filter_priority_minus;
311+ uistate.vmenu_item_sort = static_cast <int >( sort_flags );
309312
310313 auto filter_function = item_filter_from_string ( uistate.list_item_filter );
311314
@@ -318,7 +321,7 @@ void item_tab_data::apply_filter()
318321 // then apply regular sorting
319322 std::sort ( filtered_list.begin (), filtered_list.end (),
320323 [&]( const map_entity_stack<item> *lhs, const map_entity_stack<item> *rhs ) {
321- return lhs->compare ( *rhs, draw_categories );
324+ return lhs->compare ( *rhs, sort_flags );
322325 } );
323326
324327 // then apply priorities
@@ -421,6 +424,7 @@ void monster_tab_data::init( const Character &you )
421424 if ( uistate.list_monster_filter_active ) {
422425 filter = uistate.monster_filter ;
423426 }
427+ sort_flags = static_cast <surroundings_menu_sort_flags>( uistate.vmenu_item_sort );
424428 apply_filter ();
425429 if ( !filtered_list.empty () ) {
426430 selected_entry = filtered_list.front ();
@@ -459,6 +463,7 @@ void monster_tab_data::apply_filter()
459463{
460464 filtered_list.clear ();
461465 uistate.monster_filter = filter;
466+ uistate.vmenu_monster_sort = static_cast <int >( sort_flags );
462467
463468 // todo: filter_from_string<Creature>
464469 // for now just matching creature name
@@ -474,7 +479,7 @@ void monster_tab_data::apply_filter()
474479 // then apply regular sorting
475480 std::sort ( filtered_list.begin (), filtered_list.end (),
476481 [&]( const map_entity_stack<Creature> *lhs, const map_entity_stack<Creature> *rhs ) {
477- return lhs->compare ( *rhs, draw_categories );
482+ return lhs->compare ( *rhs, sort_flags );
478483 } );
479484}
480485
@@ -573,6 +578,7 @@ void terfurn_tab_data::init( const Character &you, map &m )
573578 if ( uistate.list_terfurn_filter_active ) {
574579 filter = uistate.terfurn_filter ;
575580 }
581+ sort_flags = static_cast <surroundings_menu_sort_flags>( uistate.vmenu_item_sort );
576582 apply_filter ();
577583 if ( !filtered_list.empty () ) {
578584 selected_entry = filtered_list.front ();
@@ -647,6 +653,7 @@ void terfurn_tab_data::apply_filter()
647653{
648654 filtered_list.clear ();
649655 uistate.terfurn_filter = filter;
656+ uistate.vmenu_terfurn_sort = static_cast <int >( sort_flags );
650657
651658 // todo: filter_from_string<map_data_common_t>
652659 // for now just matching creature name
@@ -662,7 +669,7 @@ void terfurn_tab_data::apply_filter()
662669 std::sort ( filtered_list.begin (), filtered_list.end (),
663670 [&]( const map_entity_stack<map_data_common_t > *lhs,
664671 const map_entity_stack<map_data_common_t > *rhs ) {
665- return lhs->compare ( *rhs, draw_categories );
672+ return lhs->compare ( *rhs, sort_flags );
666673 } );
667674}
668675
@@ -850,7 +857,7 @@ void surroundings_menu::draw_item_tab()
850857 for ( map_entity_stack<item> *it : item_data.filtered_list ) {
851858 bool prio_plus = entry_no <= item_data.priority_plus_end ;
852859 bool prio_minus = entry_no >= item_data.priority_minus_start ;
853- if ( item_data.draw_categories ) {
860+ if ( item_data.sort_flags & surroundings_menu_sort_flags::CATEGORY ) {
854861 std::string cat = prio_plus ? _ ( " HIGH PRIORITY" ) : prio_minus ? _ ( " LOW PRIORITY" ) :
855862 it->get_category ();
856863 draw_category_separator ( cat, last_category, 0 );
@@ -995,7 +1002,7 @@ void surroundings_menu::draw_monster_tab()
9951002 std::string last_category;
9961003 int entry_no = 0 ;
9971004 for ( map_entity_stack<Creature> *it : monster_data.filtered_list ) {
998- if ( monster_data.draw_categories ) {
1005+ if ( monster_data.sort_flags & surroundings_menu_sort_flags::CATEGORY ) {
9991006 draw_category_separator ( it->get_category (), last_category, 1 );
10001007 }
10011008 bool is_selected = it == monster_data.selected_entry ;
@@ -1119,7 +1126,7 @@ void surroundings_menu::draw_terfurn_tab()
11191126 std::string last_category;
11201127 int entry_no = 0 ;
11211128 for ( map_entity_stack<map_data_common_t > *it : terfurn_data.filtered_list ) {
1122- if ( terfurn_data.draw_categories ) {
1129+ if ( terfurn_data.sort_flags & surroundings_menu_sort_flags::CATEGORY ) {
11231130 draw_category_separator ( it->get_category (), last_category, 0 );
11241131 }
11251132 bool is_selected = it == terfurn_data.selected_entry ;
@@ -1441,7 +1448,7 @@ void surroundings_menu::change_selected_tab_sorting()
14411448{
14421449 auto_scroll = true ;
14431450 tab_data *data = get_selected_data ();
1444- data->draw_categories = !data-> draw_categories ;
1451+ ++ data->sort_flags ;
14451452 data->apply_filter ();
14461453}
14471454
0 commit comments