//
// 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>
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;
return id != a.id && distance < a.distance;
}
bool operator==(const atcdata& a) const {
- return distance == a.distance && id == a.id;
+ return id == a.id && distance == a.distance;
}
string id;
string name;
_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);
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();