changeset 1484:d82af64c94d2 nuklear_ui

Sort directory listing in Nuklear UI file browser
author Michael Pavone <pavone@retrodev.com>
date Sun, 26 Nov 2017 17:33:39 -0800
parents 001120e91fed
children 369da70ee2c2
files menu.c nuklear_ui/blastem_nuklear.c util.c util.h
diffstat 4 files changed, 22 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/menu.c	Sat Nov 25 20:43:20 2017 -0800
+++ b/menu.c	Sun Nov 26 17:33:39 2017 -0800
@@ -41,17 +41,6 @@
 	}
 }
 
-int menu_dir_sort(const void *a, const void *b)
-{
-	const dir_entry *da, *db;
-	da = a;
-	db = b;
-	if (da->is_dir != db->is_dir) {
-		return db->is_dir - da->is_dir;
-	}
-	return strcasecmp(((dir_entry *)a)->name, ((dir_entry *)b)->name);
-}
-
 void copy_string_from_guest(m68k_context *m68k, uint32_t guest_addr, char *buf, size_t maxchars)
 {
 	char *cur;
@@ -163,7 +152,7 @@
 			size_t num_entries;
 			dir_entry *entries = get_dir_list(menu->curpath, &num_entries);
 			if (entries) {
-				qsort(entries, num_entries, sizeof(dir_entry), menu_dir_sort);
+				sort_dir_list(entries, num_entries);
 			} else {
 				warning("Failed to open directory %s: %s\n", menu->curpath, strerror(errno));
 				entries = malloc(sizeof(dir_entry));
--- a/nuklear_ui/blastem_nuklear.c	Sat Nov 25 20:43:20 2017 -0800
+++ b/nuklear_ui/blastem_nuklear.c	Sun Nov 26 17:33:39 2017 -0800
@@ -33,6 +33,9 @@
 	}
 	if (!entries) {
 		entries = get_dir_list(current_path, &num_entries);
+		if (entries) {
+			sort_dir_list(entries, num_entries);
+		}
 	}
 	uint32_t width = render_width();
 	uint32_t height = render_height();
--- a/util.c	Sat Nov 25 20:43:20 2017 -0800
+++ b/util.c	Sun Nov 26 17:33:39 2017 -0800
@@ -680,6 +680,22 @@
 	free(list);
 }
 
+static int sort_dir_alpha(const void *a, const void *b)
+{
+	const dir_entry *da, *db;
+	da = a;
+	db = b;
+	if (da->is_dir != db->is_dir) {
+		return db->is_dir - da->is_dir;
+	}
+	return strcasecmp(((dir_entry *)a)->name, ((dir_entry *)b)->name);
+}
+
+void sort_dir_list(dir_entry *list, size_t num_entries)
+{
+	qsort(list, num_entries, sizeof(dir_entry), sort_dir_alpha);
+}
+
 #ifdef __ANDROID__
 
 #include <SDL.h>
--- a/util.h	Sat Nov 25 20:43:20 2017 -0800
+++ b/util.h	Sun Nov 26 17:33:39 2017 -0800
@@ -62,6 +62,8 @@
 dir_entry *get_dir_list(char *path, size_t *numret);
 //Frees a dir list returned by get_dir_list
 void free_dir_list(dir_entry *list, size_t numentries);
+//Performs a case-insensitive sort by file name on a dir list
+void sort_dir_list(dir_entry *list, size_t num_entries);
 //Gets the modification time of a file
 time_t get_modification_time(char *path);
 //Recusrively creates a directory if it does not exist