+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
#include <Main/globals.hxx>
#include <Airports/simple.hxx>
#include "AirportList.hxx"
-
-AirportList::AirportList (int x, int y, int width, int height)
- : puaList(x, y, width, height),
- GUI_ID(FGCLASS_AIRPORTLIST),
- _airports(globals->get_airports()),
- _content(0)
+AirportList::AirportList(int x, int y, int width, int height) :
+ puaList(x, y, width, height),
+ GUI_ID(FGCLASS_AIRPORTLIST),
+ _content(0)
{
create_list();
}
-AirportList::~AirportList ()
+
+AirportList::~AirportList()
{
destroy_list();
}
+
void
-AirportList::create_list ()
+AirportList::create_list()
{
- int num_apt = _airports->size();
- char **content = new char *[num_apt + 1];
-
- int n = 0;
- for (int i = 0; i < num_apt; i++) {
- const FGAirport *apt = _airports->getAirport(i);
- STD::string entry(apt->getName() + " (" + apt->getId() + ')');
-
- if (!_filter.empty() && entry.find(_filter) == STD::string::npos)
- continue;
-
- content[n] = new char[entry.size() + 1];
- strcpy(content[n], entry.c_str());
- n++;
- }
- content[n] = 0;
+ char **content = FGAirport::searchNamesAndIdents(_filter);
+ int n = (content[0] != NULL) ? 1 : 0;
+
// work around plib 2006/04/18 bug: lists with no entries cause crash on arrow-up
newList(n > 0 ? content : 0);
_content = content;
}
+
void
-AirportList::destroy_list ()
+AirportList::destroy_list()
{
for (char **c = _content; *c; c++) {
- delete *c;
+ free(*c);
*c = 0;
}
- delete [] _content;
+
+ free(_content);
}
+
void
-AirportList::setValue (const char *s)
+AirportList::setValue(const char *s)
{
- STD::string filter(s);
+ std::string filter(s);
+ const std::ctype<char> &ct = std::use_facet<std::ctype<char> >(std::locale());
+ ct.toupper((char *)filter.data(), (char *)filter.data() + filter.size());
+
if (filter != _filter) {
_filter = filter;
create_list();
}
}
-// end of AirportList.cxx