]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/prop_picker.cxx
Some follow up patches from Norman Vine.
[flightgear.git] / src / GUI / prop_picker.cxx
index 1024e617df66aa7821e6cd1bde1e55eee63eba11..e38342fd74aaca393949777a0da3996d5c728d89 100755 (executable)
@@ -239,7 +239,6 @@ void fgPropPicker::handle_select ( puObject* list_box )
       return ;
     } 
 
-    printf("select got here 2\n");
     if ( strcmp ( src, ".." ) == 0 )
     {
       /* Do back up one level - so refresh. */
@@ -333,7 +332,7 @@ fgPropPicker::fgPropPicker ( int x, int y, int w, int h, int arrows,
   num_files = 0 ;
 
   strcpy ( startDir, dir ) ;
-  printf ( "StartDirLEN=%i", strlen(startDir));
+  // printf ( "StartDirLEN=%i", strlen(startDir));
   if ( arrows > 2 ) arrows = 2 ;
   if ( arrows < 0 ) arrows = 0 ;
   arrow_count = arrows ;
@@ -359,14 +358,6 @@ fgPropPicker::fgPropPicker ( int x, int y, int w, int h, int arrows,
   list_box -> setCallback ( handle_select ) ;
   list_box -> setValue ( 0 ) ;
 
-  find_props () ;
-
-//  printf("after Props files[1]=%s\n",files[1]);
-//  printf("num items %i", list_box -> getNumItems ());
-
-  slider -> setUserData ( list_box ) ;
-  slider -> setCallback ( fgPropPickerHandleSlider ) ;
-
   ok_button = new puOneShot ( 10, 10, (w<170)?(w/2-5):80, 30 ) ;
   ok_button -> setLegend ( "Ok" ) ;
   ok_button -> setUserData ( this ) ;
@@ -374,26 +365,35 @@ fgPropPicker::fgPropPicker ( int x, int y, int w, int h, int arrows,
 
   if ( arrows > 0 )
   {
-    puArrowButton *down_arrow = new puArrowButton ( w-30, 20+20*arrows, w-10, 40+20*arrows, PUARROW_DOWN ) ;
+    down_arrow = new puArrowButton ( w-30, 20+20*arrows, w-10, 40+20*arrows, PUARROW_DOWN ) ;
     down_arrow->setUserData ( slider ) ;
     down_arrow->setCallback ( fgPropPickerHandleArrow ) ;
 
-    puArrowButton *up_arrow = new puArrowButton ( w-30, h-30-20*arrows, w-10, h-10-20*arrows, PUARROW_UP ) ;
+    up_arrow = new puArrowButton ( w-30, h-60-20*arrows, w-10, h-40-20*arrows, PUARROW_UP ) ;
     up_arrow->setUserData ( slider ) ;
     up_arrow->setCallback ( fgPropPickerHandleArrow ) ;
   }
 
   if ( arrows == 2 )
   {
-    puArrowButton *down_arrow = new puArrowButton ( w-30, 40, w-10, 60, PUARROW_FASTDOWN ) ;
+    down_arrow = new puArrowButton ( w-30, 40, w-10, 60, PUARROW_FASTDOWN ) ;
     down_arrow->setUserData ( slider ) ;
     down_arrow->setCallback ( fgPropPickerHandleArrow ) ;
 
-    puArrowButton *up_arrow = new puArrowButton ( w-30, h-50, w-10, h-30, PUARROW_FASTUP ) ;
+    up_arrow = new puArrowButton ( w-30, h-80, w-10, h-60, PUARROW_FASTUP ) ;
     up_arrow->setUserData ( slider ) ;
     up_arrow->setCallback ( fgPropPickerHandleArrow ) ;
   }
 
+  // after picker is built, load the list box with data...
+  find_props () ;
+
+//  printf("after Props files[1]=%s\n",files[1]);
+//  printf("num items %i", list_box -> getNumItems ());
+
+  slider -> setUserData ( list_box ) ;
+  slider -> setCallback ( fgPropPickerHandleSlider ) ;
+
   FG_FINALIZE_PUI_DIALOG( this );
   printf("fgPropPicker - End of Init\n");
 }
@@ -432,12 +432,8 @@ void fgPropPicker::find_props ()
 //  printf("len of dir=%i",strlen(dir));
   SGPropertyNode * node = globals->get_props()->getNode(dir);
 
-  printf("find_props: allocation of node\n");
   num_files = (int)node->nChildren();
 
-  // take off one for the trailing "null" in each SGProperty list
-  num_files = num_files -1;
-
   // instantiate string objects and add [.] and [..] for subdirs
   if (strcmp(dir,"/") == 0) {
     files = new char* [ num_files+1 ] ;
@@ -447,12 +443,12 @@ void fgPropPicker::find_props ()
     pi = 0;
   } else {
     // add two for the .. and .
-    num_files = num_files +2;
+    num_files = num_files + 2;
     // make room for .. and .
-    files = new char* [ num_files+3 ] ;
-    names = new char* [ num_files+3 ] ;
-    values = new char* [ num_files+3 ] ;
-    dflag = new char  [ num_files+3 ] ;
+    files = new char* [ num_files+1 ] ;
+    names = new char* [ num_files+1 ] ;
+    values = new char* [ num_files+1 ] ;
+    dflag = new char  [ num_files+1 ] ;
     line = ".";
     files [ 0 ] = new char[ strlen(line.c_str())+2 ];
     strcpy ( files [ 0 ], line.c_str() );
@@ -462,7 +458,7 @@ void fgPropPicker::find_props ()
     dflag[ 0 ] = 1;
     files [ 1 ] = new char[ strlen(line.c_str())+2 ];
     strcpy ( files [ 1 ], line.c_str() );
-    names [ 1 ] = new char[ 2 ];
+    names [ 1 ] = new char[ strlen(line.c_str())+2 ];
     values[ 1 ] = new char[ 2 ] ;
     strcpy ( names [ 1 ], line.c_str() );
 
@@ -471,7 +467,7 @@ void fgPropPicker::find_props ()
   };
 
 
-  for (int i = 0; i < (int)node->nChildren()-1; i++) {
+  for (i = 0; i < (int)node->nChildren(); i++) {
            SGPropertyNode * child = node->getChild(i);
            name = child->getName();
            line = name;
@@ -483,9 +479,12 @@ void fgPropPicker::find_props ()
                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 ], "]/" ) ;
+               if ( node->getChild(name, 1) != 0 ) {
+                   strcat ( files [ pi ], "[" ) ;
+                    strcat ( files [ pi ], sindex ) ;
+                   strcat ( files [ pi ], "]" ) ;
+               }
+               strcat ( files [ pi ], "/" ) ;
                values[ pi ] = new char[ 2 ] ;
            } else {
                 dflag[ pi ] = 0 ;
@@ -498,15 +497,33 @@ void fgPropPicker::find_props ()
                 files[ pi ] = new char[ strlen(line.c_str())+2 ] ;
                strcpy ( files [ pi ], line.c_str() ) ;
            }
-            printf("files->%i %s\n",pi, files [pi]);
+            // printf("files->%i of %i %s\n",pi, node->nChildren(), files [pi]);
             ++pi;
   }
 
   files [ num_files ] = NULL ;
 
-  printf("files pointer=%i\n", files);
+  // printf("files pointer=%i/%i\n", files, num_files);
+
   proppath ->    setLabel          (startDir);
+
   list_box -> newList ( files ) ;
+
+  // if non-empty list, adjust the size of the slider...
+  if (num_files > 1) {
+    if ((11.0f/(num_files-1)) < 1) {
+      slider->setSliderFraction (11.0f/(num_files-1)) ;
+      slider->reveal();
+      up_arrow->reveal();
+      down_arrow->reveal();
+      }
+    else {
+      slider->setSliderFraction (0.9999f) ;
+      slider->hide();
+      up_arrow->hide();
+      down_arrow->hide();      
+      }
+  }
   
 }
 
@@ -571,5 +588,3 @@ fgPropEdit::fgPropEdit ( char *name, char *value, char *proppath ) : puDialogBox
         
     FG_FINALIZE_PUI_DIALOG( this );
 }
-
-