Close #13622: Refactor SORT into strong enum

This commit is contained in:
Tulio Leao 2020-12-22 21:18:11 -03:00
parent eeacb85310
commit f7c6e04658
3 changed files with 30 additions and 22 deletions

View File

@ -477,13 +477,13 @@ static void window_loadsave_mouseup(rct_window* w, rct_widgetindex widgetIndex)
break;
case WIDX_SORT_NAME:
if (gConfigGeneral.load_save_sort == SORT_NAME_ASCENDING)
if (gConfigGeneral.load_save_sort == Sort::NameAscending)
{
gConfigGeneral.load_save_sort = SORT_NAME_DESCENDING;
gConfigGeneral.load_save_sort = Sort::NameDescending;
}
else
{
gConfigGeneral.load_save_sort = SORT_NAME_ASCENDING;
gConfigGeneral.load_save_sort = Sort::NameAscending;
}
config_save_default();
window_loadsave_sort_list();
@ -491,13 +491,13 @@ static void window_loadsave_mouseup(rct_window* w, rct_widgetindex widgetIndex)
break;
case WIDX_SORT_DATE:
if (gConfigGeneral.load_save_sort == SORT_DATE_DESCENDING)
if (gConfigGeneral.load_save_sort == Sort::DateDescending)
{
gConfigGeneral.load_save_sort = SORT_DATE_ASCENDING;
gConfigGeneral.load_save_sort = Sort::DateAscending;
}
else
{
gConfigGeneral.load_save_sort = SORT_DATE_DESCENDING;
gConfigGeneral.load_save_sort = Sort::DateDescending;
}
config_save_default();
window_loadsave_sort_list();
@ -710,9 +710,9 @@ static void window_loadsave_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Name button text
rct_string_id id = STR_NONE;
if (gConfigGeneral.load_save_sort == SORT_NAME_ASCENDING)
if (gConfigGeneral.load_save_sort == Sort::NameAscending)
id = STR_UP;
else if (gConfigGeneral.load_save_sort == SORT_NAME_DESCENDING)
else if (gConfigGeneral.load_save_sort == Sort::NameDescending)
id = STR_DOWN;
// Draw name button indicator.
@ -721,9 +721,9 @@ static void window_loadsave_paint(rct_window* w, rct_drawpixelinfo* dpi)
dpi, STR_NAME, &id, COLOUR_GREY, w->windowPos + ScreenCoordsXY{ sort_name_widget.left + 11, sort_name_widget.top + 1 });
// Date button text
if (gConfigGeneral.load_save_sort == SORT_DATE_ASCENDING)
if (gConfigGeneral.load_save_sort == Sort::DateAscending)
id = STR_UP;
else if (gConfigGeneral.load_save_sort == SORT_DATE_DESCENDING)
else if (gConfigGeneral.load_save_sort == Sort::DateDescending)
id = STR_DOWN;
else
id = STR_NONE;
@ -797,13 +797,13 @@ static bool list_item_sort(LoadSaveListItem& a, LoadSaveListItem& b)
switch (gConfigGeneral.load_save_sort)
{
case SORT_NAME_ASCENDING:
case Sort::NameAscending:
return strlogicalcmp(a.name.c_str(), b.name.c_str()) < 0;
case SORT_NAME_DESCENDING:
case Sort::NameDescending:
return -strlogicalcmp(a.name.c_str(), b.name.c_str()) < 0;
case SORT_DATE_DESCENDING:
case Sort::DateDescending:
return -difftime(a.date_modified, b.date_modified) < 0;
case SORT_DATE_ASCENDING:
case Sort::DateAscending:
return difftime(a.date_modified, b.date_modified) < 0;
default:
return strlogicalcmp(a.name.c_str(), b.name.c_str()) < 0;

View File

@ -101,6 +101,13 @@ namespace Config
ConfigEnumEntry<ScaleQuality>("SMOOTH_NEAREST_NEIGHBOUR", ScaleQuality::SmoothNearestNeighbour),
});
static const auto Enum_Sort = ConfigEnum<Sort>({
ConfigEnumEntry<Sort>("NAME_ASCENDING", Sort::NameAscending),
ConfigEnumEntry<Sort>("NAME_DESCENDING", Sort::NameDescending),
ConfigEnumEntry<Sort>("DATE_ASCENDING", Sort::DateAscending),
ConfigEnumEntry<Sort>("DATE_DESCENDING", Sort::DateDescending),
});
static const auto Enum_VirtualFloorStyle = ConfigEnum<VirtualFloorStyles>({
ConfigEnumEntry<VirtualFloorStyles>("OFF", VirtualFloorStyles::Off),
ConfigEnumEntry<VirtualFloorStyles>("CLEAR", VirtualFloorStyles::Clear),
@ -183,7 +190,7 @@ namespace Config
model->default_inspection_interval = reader->GetInt32("default_inspection_interval", 2);
model->last_run_version = reader->GetCString("last_run_version", nullptr);
model->invert_viewport_drag = reader->GetBoolean("invert_viewport_drag", false);
model->load_save_sort = reader->GetInt32("load_save_sort", SORT_NAME_ASCENDING);
model->load_save_sort = reader->GetEnum<Sort>("load_save_sort", Sort::NameAscending, Enum_Sort);
model->minimize_fullscreen_focus_loss = reader->GetBoolean("minimize_fullscreen_focus_loss", true);
model->disable_screensaver = reader->GetBoolean("disable_screensaver", true);
@ -263,7 +270,7 @@ namespace Config
writer->WriteInt32("default_inspection_interval", model->default_inspection_interval);
writer->WriteString("last_run_version", model->last_run_version);
writer->WriteBoolean("invert_viewport_drag", model->invert_viewport_drag);
writer->WriteInt32("load_save_sort", model->load_save_sort);
writer->WriteEnum<Sort>("load_save_sort", model->load_save_sort, Enum_Sort);
writer->WriteBoolean("minimize_fullscreen_focus_loss", model->minimize_fullscreen_focus_loss);
writer->WriteBoolean("disable_screensaver", model->disable_screensaver);
writer->WriteBoolean("day_night_cycle", model->day_night_cycle);

View File

@ -18,6 +18,7 @@
enum class MeasurementFormat : int32_t;
enum class TemperatureUnit : int32_t;
enum class ScaleQuality : int32_t;
enum class Sort : int32_t;
enum class VirtualFloorStyles : int32_t;
enum class DrawingEngine : int32_t;
@ -98,7 +99,7 @@ struct GeneralConfiguration
// Loading and saving
bool confirmation_prompt;
int32_t load_save_sort;
Sort load_save_sort;
utf8* last_save_game_directory;
utf8* last_save_landscape_directory;
utf8* last_save_scenario_directory;
@ -207,12 +208,12 @@ struct PluginConfiguration
std::string allowed_hosts;
};
enum SORT
enum class Sort : int32_t
{
SORT_NAME_ASCENDING,
SORT_NAME_DESCENDING,
SORT_DATE_ASCENDING,
SORT_DATE_DESCENDING,
NameAscending,
NameDescending,
DateAscending,
DateDescending,
};
enum class TemperatureUnit : int32_t