]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/prop_picker.cxx
Patch from Andy Ross to sort properties in browser.
[flightgear.git] / src / GUI / prop_picker.cxx
index 86ce0d7343793cdfe598d9f4d9a004c29dcb295a..383581310700edae08ccfc3f7cfa6d07fb1ab545 100755 (executable)
@@ -470,18 +470,19 @@ void fgPropPicker::find_props ()
   for (i = 0; i < (int)node->nChildren(); i++) {
            SGPropertyNode * child = node->getChild(i);
            name = child->getName();
+           if ( node->getChild(name, 1) != 0 ) {
+               iindex = child->getIndex();
+               sprintf(sindex, "[%d]", iindex);
+               name += sindex;
+           }
            line = name;
            names[ pi ] = new char[ strlen(line.c_str())+2 ] ;
            strcpy ( names [ pi ], line.c_str() ) ;
            if ( child->nChildren() > 0 ) {
-                iindex = child->getIndex();
-               sprintf(sindex, "%d", iindex);
                dflag[ pi ] = 1 ;
                 files[ pi ] = new char[ strlen(line.c_str())+strlen(sindex)+4 ] ;
                strcpy ( files [ pi ], line.c_str() ) ;
-               strcat ( files [ pi ], "[" ) ;
-                strcat ( files [ pi ], sindex ) ;
-               strcat ( files [ pi ], "]/" ) ;
+               strcat ( files [ pi ], "/" ) ;
                values[ pi ] = new char[ 2 ] ;
            } else {
                 dflag[ pi ] = 0 ;
@@ -500,6 +501,23 @@ void fgPropPicker::find_props ()
 
   files [ num_files ] = NULL ;
 
+  // Sort the entries.  This is a simple N^2 extraction sort.  More
+  // elaborate algorithms aren't necessary for the few dozen
+  // properties we're going to sort.
+  for(i=0; i<num_files; i++) {
+    int j, min = i;
+    char df, *tmp;
+    for(j=i+1; j<num_files; j++)
+      if(strcmp(names[j], names[min]) < 0)
+       min = j;
+    if(i != min) {
+      tmp =  names[min];  names[min] =  names[i];  names[i] = tmp;
+      tmp =  files[min];  files[min] =  files[i];  files[i] = tmp;
+      tmp = values[min]; values[min] = values[i]; values[i] = tmp;
+      df  =  dflag[min];  dflag[min] =  dflag[i];  dflag[i] = df;
+    }
+  }
+
   // printf("files pointer=%i/%i\n", files, num_files);
 
   proppath ->    setLabel          (startDir);