Fixed up the freqency search dialogs properly - this should eliminate crashing and memory leakage
This commit is contained in:
parent
2454446233
commit
3d104940e9
2 changed files with 139 additions and 109 deletions
|
@ -36,6 +36,12 @@
|
||||||
|
|
||||||
SG_USING_STD(ostringstream);
|
SG_USING_STD(ostringstream);
|
||||||
|
|
||||||
|
static void atcUppercase(string &s) {
|
||||||
|
for(unsigned int i=0; i<s.size(); ++i) {
|
||||||
|
s[i] = toupper(s[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FGATCDialog *current_atcdialog;
|
FGATCDialog *current_atcdialog;
|
||||||
|
|
||||||
// For the command manager - maybe eventually this should go in the built in command list
|
// For the command manager - maybe eventually this should go in the built in command list
|
||||||
|
@ -75,6 +81,43 @@ static puOneShot* atcDialogCancelButton;
|
||||||
static puButtonBox* atcDialogCommunicationOptions;
|
static puButtonBox* atcDialogCommunicationOptions;
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// STUFF FOR THE FREQUENCY SEARCH DIALOG
|
||||||
|
//
|
||||||
|
//////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static const int ATC_MAX_FREQ_DISPLAY = 20; // Maximum number of frequencies that can be displayed for any one airport
|
||||||
|
|
||||||
|
static puDialogBox* atcFreqDialog;
|
||||||
|
static puFrame* atcFreqDialogFrame;
|
||||||
|
static puText* atcFreqDialogMessage;
|
||||||
|
static puInput* atcFreqDialogInput;
|
||||||
|
static puOneShot* atcFreqDialogOkButton;
|
||||||
|
static puOneShot* atcFreqDialogCancelButton;
|
||||||
|
|
||||||
|
static puDialogBox* atcFreqDisplay;
|
||||||
|
static puFrame* atcFreqDisplayFrame;
|
||||||
|
static puText* atcFreqDisplayMessage;
|
||||||
|
static puOneShot* atcFreqDisplayOkButton;
|
||||||
|
static puText* atcFreqDisplayText[ATC_MAX_FREQ_DISPLAY];
|
||||||
|
|
||||||
|
static void FreqDialogCancel(puObject*) {
|
||||||
|
FG_POP_PUI_DIALOG(atcFreqDialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void FreqDialogOK(puObject*) {
|
||||||
|
string tmp = atcFreqDialogInput->getStringValue();
|
||||||
|
FG_POP_PUI_DIALOG(atcFreqDialog);
|
||||||
|
current_atcdialog->FreqDisplay(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void FreqDisplayOK(puObject*) {
|
||||||
|
FG_POP_PUI_DIALOG(atcFreqDisplay);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////// end freq search statics ///////////////
|
||||||
|
|
||||||
// ------------------------ AK ------------------------------------------
|
// ------------------------ AK ------------------------------------------
|
||||||
static puDialogBox *ATCMenuBox = 0;
|
static puDialogBox *ATCMenuBox = 0;
|
||||||
static puFrame *ATCMenuFrame = 0;
|
static puFrame *ATCMenuFrame = 0;
|
||||||
|
@ -256,9 +299,70 @@ void ATCDoDialog(atc_type type) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FGATCDialog::FGATCDialog() {
|
||||||
|
}
|
||||||
|
|
||||||
|
FGATCDialog::~FGATCDialog() {
|
||||||
|
if(atcFreqDialog) delete atcFreqDialog;
|
||||||
|
if(atcFreqDisplay) delete atcFreqDisplay;
|
||||||
|
}
|
||||||
|
|
||||||
void FGATCDialog::Init() {
|
void FGATCDialog::Init() {
|
||||||
// Add ATC-freq-search to the command list
|
// Add ATC-freq-search to the command list
|
||||||
globals->get_commands()->addCommand("ATC-freq-search", do_ATC_freq_search);
|
globals->get_commands()->addCommand("ATC-freq-search", do_ATC_freq_search);
|
||||||
|
|
||||||
|
// Init the freq-search dialog
|
||||||
|
char *s;
|
||||||
|
int hsize = 150;
|
||||||
|
atcFreqDialog = new puDialogBox (150, 50);
|
||||||
|
{
|
||||||
|
atcFreqDialogFrame = new puFrame (0, 0, 300, hsize);
|
||||||
|
atcFreqDialogMessage = new puText (40, (hsize - 30));
|
||||||
|
atcFreqDialogMessage->setDefaultValue ("Enter airport identifier:");
|
||||||
|
atcFreqDialogMessage->getDefaultValue (&s);
|
||||||
|
atcFreqDialogMessage->setLabel(s);
|
||||||
|
|
||||||
|
atcFreqDialogInput = new puInput (50, (hsize - 75), 150, (hsize - 45));
|
||||||
|
|
||||||
|
atcFreqDialogOkButton = new puOneShot (50, 10, 110, 50);
|
||||||
|
atcFreqDialogOkButton -> setLegend (gui_msg_OK);
|
||||||
|
atcFreqDialogOkButton -> makeReturnDefault (TRUE);
|
||||||
|
atcFreqDialogOkButton -> setCallback (FreqDialogOK);
|
||||||
|
|
||||||
|
atcFreqDialogCancelButton = new puOneShot (140, 10, 210, 50);
|
||||||
|
atcFreqDialogCancelButton -> setLegend (gui_msg_CANCEL);
|
||||||
|
atcFreqDialogCancelButton -> setCallback (FreqDialogCancel);
|
||||||
|
|
||||||
|
atcFreqDialogInput->acceptInput();
|
||||||
|
}
|
||||||
|
|
||||||
|
FG_FINALIZE_PUI_DIALOG(atcFreqDialog);
|
||||||
|
|
||||||
|
// Init the freq-display dialog
|
||||||
|
hsize = 100;
|
||||||
|
atcFreqDisplay = new puDialogBox (250, 50);
|
||||||
|
{
|
||||||
|
atcFreqDisplayFrame = new puFrame (0, 0, 400, hsize);
|
||||||
|
|
||||||
|
atcFreqDisplayMessage = new puText (40, (hsize - 30));
|
||||||
|
atcFreqDisplayMessage -> setDefaultValue ("No freqencies found");
|
||||||
|
atcFreqDisplayMessage -> getDefaultValue (&s);
|
||||||
|
atcFreqDisplayMessage -> setLabel (s);
|
||||||
|
|
||||||
|
for(int i=0; i<ATC_MAX_FREQ_DISPLAY; ++i) {
|
||||||
|
atcFreqDisplayText[i] = new puText(40, hsize - 65 - (30 * i));
|
||||||
|
atcFreqDisplayText[i]->setDefaultValue("");
|
||||||
|
atcFreqDisplayText[i]-> getDefaultValue (&s);
|
||||||
|
atcFreqDisplayText[i]-> setLabel (s);
|
||||||
|
atcFreqDisplayText[i]->hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
atcFreqDisplayOkButton = new puOneShot (50, 10, 110, 50);
|
||||||
|
atcFreqDisplayOkButton -> setLegend (gui_msg_OK);
|
||||||
|
atcFreqDisplayOkButton -> makeReturnDefault (TRUE);
|
||||||
|
atcFreqDisplayOkButton -> setCallback (FreqDisplayOK);
|
||||||
|
}
|
||||||
|
FG_FINALIZE_PUI_DIALOG(atcFreqDisplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
// AK
|
// AK
|
||||||
|
@ -407,43 +511,7 @@ void FGATCDialog::DoDialog() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// STUFF FOR THE FREQUENCY SEARCH DIALOG
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
static puDialogBox* atcFreqDialog;
|
|
||||||
static puFrame* atcFreqDialogFrame;
|
|
||||||
static puText* atcFreqDialogMessage;
|
|
||||||
static puInput* atcFreqDialogInput;
|
|
||||||
static puOneShot* atcFreqDialogOkButton;
|
|
||||||
static puOneShot* atcFreqDialogCancelButton;
|
|
||||||
|
|
||||||
static puDialogBox* atcFreqDisplay;
|
|
||||||
static puFrame* atcFreqDisplayFrame;
|
|
||||||
static puText* atcFreqDisplayMessage;
|
|
||||||
static puOneShot* atcFreqDisplayOkButton;
|
|
||||||
static puOneShot* atcFreqDisplayCancelButton;
|
|
||||||
static puText* atcFreqDisplayText[20];
|
|
||||||
|
|
||||||
static void FreqDialogCancel(puObject*) {
|
|
||||||
FG_POP_PUI_DIALOG(atcFreqDialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void FreqDialogOK(puObject*) {
|
|
||||||
string tmp = atcFreqDialogInput->getStringValue();
|
|
||||||
FG_POP_PUI_DIALOG(atcFreqDialog);
|
|
||||||
current_atcdialog->FreqDisplay(tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void FreqDisplayOK(puObject*) {
|
|
||||||
FG_POP_PUI_DIALOG(atcFreqDisplay);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void FreqDisplayCancel(puObject*) {
|
|
||||||
FG_POP_PUI_DIALOG(atcFreqDisplay);
|
|
||||||
}
|
|
||||||
|
|
||||||
void FGATCDialog::FreqDialog() {
|
void FGATCDialog::FreqDialog() {
|
||||||
|
|
||||||
|
@ -464,57 +532,23 @@ void FGATCDialog::FreqDialog() {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//char defaultATCLabel[] = "Enter desired option to communicate with ATC:";
|
// TODO - it would be nice to display a drop-down list of airports within the general vicinity of the user
|
||||||
char *s;
|
// in addition to the general input box (started above).
|
||||||
|
|
||||||
int hsize = 150;
|
|
||||||
atcFreqDialog = new puDialogBox (150, 50);
|
|
||||||
{
|
|
||||||
atcFreqDialogFrame = new puFrame (0, 0, 300, hsize);
|
|
||||||
|
|
||||||
atcFreqDialogMessage = new puText (40, (hsize - 30));
|
|
||||||
atcFreqDialogMessage -> setDefaultValue ("Enter airport identifier:");
|
|
||||||
atcFreqDialogMessage -> getDefaultValue (&s);
|
|
||||||
atcFreqDialogMessage -> setLabel (s);
|
|
||||||
|
|
||||||
atcFreqDialogInput = new puInput (50, (hsize - 75), 150, (hsize - 45));
|
|
||||||
atcFreqDialogInput->acceptInput();
|
|
||||||
|
|
||||||
atcFreqDialogOkButton = new puOneShot (50, 10, 110, 50);
|
|
||||||
atcFreqDialogOkButton -> setLegend (gui_msg_OK);
|
|
||||||
atcFreqDialogOkButton -> makeReturnDefault (TRUE);
|
|
||||||
atcFreqDialogOkButton -> setCallback (FreqDialogOK);
|
|
||||||
|
|
||||||
atcFreqDialogCancelButton = new puOneShot (140, 10, 210, 50);
|
|
||||||
atcFreqDialogCancelButton -> setLegend (gui_msg_CANCEL);
|
|
||||||
atcFreqDialogCancelButton -> setCallback (FreqDialogCancel);
|
|
||||||
|
|
||||||
}
|
|
||||||
FG_FINALIZE_PUI_DIALOG(atcFreqDialog);
|
|
||||||
|
|
||||||
|
atcFreqDialogInput->setValue("");
|
||||||
|
atcFreqDialogInput->acceptInput();
|
||||||
FG_PUSH_PUI_DIALOG(atcFreqDialog);
|
FG_PUSH_PUI_DIALOG(atcFreqDialog);
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static void atcUppercase(string &s)
|
|
||||||
{
|
|
||||||
for(unsigned int i=0; i<s.size(); ++i) {
|
|
||||||
s[i] = toupper(s[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FGATCDialog::FreqDisplay(string ident) {
|
void FGATCDialog::FreqDisplay(string ident) {
|
||||||
|
|
||||||
atcUppercase(ident);
|
atcUppercase(ident);
|
||||||
|
|
||||||
//char defaultATCLabel[] = "Enter desired option to communicate with ATC:";
|
string label;
|
||||||
string label = "Frequencies for airport ";
|
|
||||||
label += ident;
|
|
||||||
label += ":";
|
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
int n = 0; // Number of ATC frequencies at this airport
|
int n = 0; // Number of ATC frequencies at this airport
|
||||||
string freqs[20];
|
string freqs[ATC_MAX_FREQ_DISPLAY];
|
||||||
char buf[8];
|
char buf[8];
|
||||||
|
|
||||||
FGAirport a;
|
FGAirport a;
|
||||||
|
@ -542,46 +576,39 @@ void FGATCDialog::FreqDisplay(string ident) {
|
||||||
++itr;
|
++itr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(n == 0) {
|
||||||
|
label = "No frequencies found for airport ";
|
||||||
|
label += ident;
|
||||||
|
} else {
|
||||||
|
label = "Frequencies for airport ";
|
||||||
|
label += ident;
|
||||||
|
label += ":";
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
label = "Airport ";
|
label = "Airport ";
|
||||||
label += ident;
|
label += ident;
|
||||||
label += " not found in database.";
|
label += " not found in database.";
|
||||||
n = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(n == 0) {
|
|
||||||
label = "No frequencies found for airport ";
|
|
||||||
label += ident;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int hsize = (n < 0 ? 100 : 105 + (n * 30));
|
int hsize = 105 + (n * 30);
|
||||||
atcFreqDisplay = new puDialogBox (250, 50);
|
|
||||||
{
|
atcFreqDisplayFrame->setSize(400, hsize);
|
||||||
atcFreqDisplayFrame = new puFrame (0, 0, 400, hsize);
|
|
||||||
|
atcFreqDisplayMessage -> setPosition (40, (hsize - 30));
|
||||||
atcFreqDisplayMessage = new puText (40, (hsize - 30));
|
atcFreqDisplayMessage -> setValue (label.c_str());
|
||||||
atcFreqDisplayMessage -> setDefaultValue (label.c_str());
|
atcFreqDisplayMessage -> getValue (&s);
|
||||||
atcFreqDisplayMessage -> getDefaultValue (&s);
|
atcFreqDisplayMessage -> setLabel (s);
|
||||||
atcFreqDisplayMessage -> setLabel (s);
|
|
||||||
|
for(int i=0; i<n; ++i) {
|
||||||
for(int i=0; i<n; ++i) {
|
atcFreqDisplayText[i] -> setPosition(40, hsize - 65 - (30 * i));
|
||||||
atcFreqDisplayText[i] = new puText(40, hsize - 65 - (30 * i));
|
atcFreqDisplayText[i] -> setValue(freqs[i].c_str());
|
||||||
atcFreqDisplayText[i]->setDefaultValue(freqs[i].c_str());
|
atcFreqDisplayText[i] -> getValue (&s);
|
||||||
atcFreqDisplayText[i]-> getDefaultValue (&s);
|
atcFreqDisplayText[i] -> setLabel (s);
|
||||||
atcFreqDisplayText[i]-> setLabel (s);
|
atcFreqDisplayText[i] -> reveal();
|
||||||
}
|
}
|
||||||
|
for(int j=n; j<ATC_MAX_FREQ_DISPLAY; ++j) {
|
||||||
atcFreqDisplayOkButton = new puOneShot (50, 10, 110, 50);
|
atcFreqDisplayText[j] -> hide();
|
||||||
atcFreqDisplayOkButton -> setLegend (gui_msg_OK);
|
|
||||||
atcFreqDisplayOkButton -> makeReturnDefault (TRUE);
|
|
||||||
atcFreqDisplayOkButton -> setCallback (FreqDisplayOK);
|
|
||||||
|
|
||||||
atcFreqDisplayCancelButton = new puOneShot (140, 10, 210, 50);
|
|
||||||
atcFreqDisplayCancelButton -> setLegend (gui_msg_CANCEL);
|
|
||||||
atcFreqDisplayCancelButton -> setCallback (FreqDisplayCancel);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
FG_FINALIZE_PUI_DIALOG(atcFreqDisplay);
|
|
||||||
|
|
||||||
FG_PUSH_PUI_DIALOG(atcFreqDisplay);
|
FG_PUSH_PUI_DIALOG(atcFreqDisplay);
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,9 @@ class FGATCDialog {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
FGATCDialog();
|
||||||
|
~FGATCDialog();
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
void DoDialog();
|
void DoDialog();
|
||||||
|
|
Loading…
Reference in a new issue