/// We want the timestamps to be sorted in ascending order to get the latest save /// first, but we want the directories to /// a) always be first /// b) be sorted alphabetically /// This custom comparer achieves these goals. static bool DirectoryAwareCmp(const Row& row1, const Row& row2, int column_int) { std::string key1(row1.SortKey(0)); std::string key2(row2.SortKey(0)); const bool row1_is_directory = dynamic_cast<const SaveFileDirectoryRow*>(&row1); const bool row2_is_directory = dynamic_cast<const SaveFileDirectoryRow*>(&row2); if (!row1_is_directory && !row2_is_directory) { return key1.compare(key2) <= 0; } else if ( row1_is_directory && row2_is_directory ) { // Directories always return directory name as sort key return key1.compare(key2) >= 0; } else { return ( !row1_is_directory && row2_is_directory ); } }