//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
#include <simgear/compiler.h>
#include <Airports/simple.hxx>
#include <sstream>
-#include <map>
SG_USING_STD(ostringstream);
-SG_USING_STD(map);
FGATCDialog *current_atcdialog;
if ((p = getNamedNode(prop->getChild(i), name)))
return p;
-
if (!strcmp(prop->getStringValue("name"), name))
return prop;
// Display the ATC popup dialog box with options relevant to the users current situation.
void FGATCDialog::PopupDialog() {
const char *dialog_name = "atc-dialog";
- SGPropertyNode_ptr dlg = _gui->getDialog(dialog_name);
+ SGPropertyNode_ptr dlg = _gui->getDialogProperties(dialog_name);
if (!dlg)
return;
copyProperties(button_group->getNode("button-template", true), entry);
entry->removeChildren("hide", false);
entry->setStringValue("property", buf);
+ entry->setIntValue("keynum", '1' + n);
if (n == 0)
entry->setBoolValue("default", true);
//cout << "TOWER " << endl;
//cout << "ident is " << atcptr->get_ident() << endl;
atcmentry_vec_type atcmlist = (available_dialog[TOWER])[atcptr->get_ident()];
- if(atcmlist.size()) {
+ unsigned int size = atcmlist.size();
+ if(size && num < size) {
//cout << "Doing callback...\n";
ATCMenuEntry a = atcmlist[num];
atcptr->SetFreqInUse();
+ string pilot = atcptr->GenText(a.transmission, a.callback_code);
+ fgSetString("/sim/messages/pilot", pilot.c_str());
// This is the user's speech getting displayed.
- globals->get_ATC_display()->RegisterSingleMessage(atcptr->GenText(a.transmission, a.callback_code));
+ globals->get_ATC_display()->RegisterSingleMessage(pilot);
_callbackPending = true;
_callbackTimer = 0.0;
_callbackWait = 5.0;
id = i, name = n, distance = d;
}
bool operator<(const atcdata& a) const {
- return a.id != id && a.distance > distance;
+ return id != a.id && distance < a.distance;
}
bool operator==(const atcdata& a) const {
- return a.distance == distance && a.id == id;
+ return id == a.id && distance == a.distance;
}
string id;
string name;
void FGATCDialog::FreqDialog() {
const char *dialog_name = "atc-freq-search";
- SGPropertyNode_ptr dlg = _gui->getDialog(dialog_name);
+ SGPropertyNode_ptr dlg = _gui->getDialogProperties(dialog_name);
if (!dlg)
return;
_gui->closeDialog(dialog_name);
SGPropertyNode_ptr button_group = getNamedNode(dlg, "quick-buttons");
- // remove all dynamic ATC buttons
+ // remove all dynamic airport/ATC buttons
button_group->removeChildren("button", false);
// Find the ATC stations within a reasonable range (about 40 miles?)
int num_stat = current_commlist->FindByPos(lon, lat, elev, 40.0, &atc_stations);
if (num_stat != 0) {
map<atcdata, bool> uniq;
- // fill map (sorts by distance)
+ // fill map (sorts by distance and removes duplicates)
comm_list_iterator itr = atc_stations.begin();
for (; itr != atc_stations.end(); ++itr) {
Point3D station = Point3D(itr->x, itr->y, itr->z);
void FGATCDialog::FreqDisplay(string& ident) {
const char *dialog_name = "atc-freq-display";
- SGPropertyNode_ptr dlg = _gui->getDialog(dialog_name);
+ SGPropertyNode_ptr dlg = _gui->getDialogProperties(dialog_name);
if (!dlg)
return;
atcUppercase(ident);
string label;
- FGAirport a;
- if (!dclFindAirportID(ident, &a)) {
+ const FGAirport *a = fgFindAirportID(ident);
+ if (!a) {
label = "Airport " + ident + " not found in database.";
mkDialog(label.c_str());
return;
int n = 0; // Number of ATC frequencies at this airport
comm_list_type stations;
- int found = current_commlist->FindByPos(a.getLongitude(), a.getLatitude(), a.getElevation(), 20.0, &stations);
+ int found = current_commlist->FindByPos(a->getLongitude(), a->getLatitude(), a->getElevation(), 20.0, &stations);
if(found) {
ostringstream ostr;
comm_list_iterator itr = stations.begin();