* Melchior FRANZ -- Wednesday 22 December 2004 15:10:
> getString is only made virtual in puList() and AirportList(), but it's
> not virtual in puObject. copy_from_pui(), however, uses the getStringValue()
> method on a puObject, assuming that it will get AirportList()'s. Of course,
> this doesn't work and puValue()'s is used instead. One would have to make
> getStringValue virtual in puObject() or puValue() to make this work.

From the numerous responses I gather that this is an often used and appreciated
feature. If someone more familiar with C++ than I am wants to try an acceptable
fix that avoids the necessity to change plib's pu.h: I attached my version.

On the fgfs side:

- make get{Integer,String}Value return the value of sub-object _list_box (which
  contains the index/icao code of the selected list item), instead of the 
  itself (which is always zero)

On the plib side:

- make puValue::getStringValue() in pu.h:538 and puValue::getIntegerValue()
  in pu.h:535 virtual. Weirdly, the former would be enough ... at least until
  the next gcc is released.

To make the gui-airport list useful, one would have to add another button
"Scan Scenery" that would search all paths in fg_scenery() for airports and
store this list in $FG_HOME. Further runs would then only show actually
available airports. Unfortunately, the whole $FG_HOME idea was put down.

Index: puList.cxx
RCS file: /var/cvs/FlightGear-0.9/FlightGear/src/GUI/puList.cxx,v
retrieving revision 1.1
diff -u -p -r1.1 puList.cxx
--- puList.cxx	27 Nov 2003 23:41:00 -0000	1.1
+++ puList.cxx	23 Dec 2004 15:02:57 -0000
@@ -77,7 +77,13 @@ puList::newList (char ** contents)
 char *
 puList::getStringValue ()
-    return _contents[_list_box->getIntegerValue()];
+    return _contents[getIntegerValue()];
+puList::getIntegerValue ()
+    return _list_box->getIntegerValue();
Index: puList.hxx
RCS file: /var/cvs/FlightGear-0.9/FlightGear/src/GUI/puList.hxx,v
retrieving revision 1.4
diff -u -p -r1.4 puList.hxx
--- puList.hxx	30 Apr 2004 08:44:35 -0000	1.4
+++ puList.hxx	23 Dec 2004 15:02:57 -0000
@@ -25,6 +25,7 @@ class puList : public puGroup
     virtual void newList (char ** contents);
     // TODO: other string value funcs
     virtual char * getStringValue ();
+    virtual int getIntegerValue ();
     virtual void init (int w, int h);
Flightgear-devel mailing list

Reply via email to