1 /*
2  *
3  * XASTIR, Amateur Station Tracking and Information Reporting
4  * Copyright (C) 1999,2000  Frank Giannandrea
5  * Copyright (C) 2000-2019 The Xastir Group
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20  *
21  * Look at the README for more information on the program.
22  */
23 
24 #ifdef HAVE_CONFIG_H
25   #include "config.h"
26 #endif  // HAVE_CONFIG_H
27 
28 #include "snprintf.h"
29 
30 #include <stdio.h>
31 
32 #include <Xm/XmAll.h>
33 #ifdef HAVE_XBAE_MATRIX_H
34   #include <Xbae/Matrix.h>
35 #endif  // HAVE_XBAE_MATRIX_H
36 
37 #include "xastir.h"
38 #include "main.h"
39 #include "lang.h"
40 #include "maps.h"
41 
42 // Must be last include file
43 #include "leak_detection.h"
44 
45 extern XmFontList fontlist1;    // Menu/System fontlist
46 
47 Widget locate_station_dialog = (Widget)NULL;
48 Widget locate_station_data = (Widget)NULL;
49 
50 char locate_station_call[30];
51 static xastir_mutex locate_station_dialog_lock;
52 
53 Widget locate_place_dialog = (Widget)NULL;
54 Widget locate_place_data = (Widget)NULL;
55 Widget locate_state_data = (Widget)NULL;
56 Widget locate_county_data = (Widget)NULL;
57 Widget locate_quad_data = (Widget)NULL;
58 Widget locate_type_data = (Widget)NULL;
59 Widget locate_gnis_file_data = (Widget)NULL;
60 char locate_place_name[50];
61 char locate_state_name[50];
62 char locate_county_name[50];
63 char locate_quad_name[50];
64 char locate_type_name[50];
65 char locate_gnis_filename[200];
66 static xastir_mutex locate_place_dialog_lock;
67 
68 
69 /* locate station values */
70 Widget locate_case_data, locate_match_data;
71 
72 /* locate place values */
73 Widget locate_place_case_data, locate_place_match_data;
74 Widget locate_place_list;
75 Widget  locate_place_chooser = (Widget)NULL;
76 static xastir_mutex locate_place_chooser_lock;
77 char match_array_name[50][200];
78 long match_array_lat[50];
79 long match_array_long[50];
80 int match_quantity = 0;
81 
82 
83 
84 
85 
locate_gui_init(void)86 void locate_gui_init(void)
87 {
88   init_critical_section( &locate_station_dialog_lock );
89   init_critical_section( &locate_place_dialog_lock );
90   init_critical_section( &locate_place_chooser_lock );
91   locate_station_call[0] = '\0';
92   locate_place_name[0] = '\0';
93   locate_state_name[0] = '\0';
94   locate_county_name[0] = '\0';
95   locate_quad_name[0] = '\0';
96   locate_type_name[0] = '\0';
97 }
98 
99 
100 
101 
102 
103 /**** LOCATE STATION ******/
104 
Locate_station_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))105 void Locate_station_destroy_shell(Widget UNUSED(widget), XtPointer clientData, XtPointer UNUSED(callData) )
106 {
107   Widget shell = (Widget) clientData;
108   XtPopdown(shell);
109 
110   begin_critical_section(&locate_station_dialog_lock, "locate_gui.c:Locate_station_destroy_shell" );
111 
112   XtDestroyWidget(shell);
113   locate_station_dialog = (Widget)NULL;
114 
115   end_critical_section(&locate_station_dialog_lock, "locate_gui.c:Locate_station_destroy_shell" );
116 
117 }
118 
119 
120 
121 
122 
123 /*
124  * Look up detailed FCC/RAC info about the station
125  */
126 
127 // Determine whether it is a U.S. or Canadian callsign then search
128 // through the appropriate database and present the results.
129 
fcc_rac_lookup(Widget UNUSED (w),XtPointer UNUSED (clientData),XtPointer UNUSED (callData))130 void fcc_rac_lookup(Widget UNUSED(w), XtPointer UNUSED(clientData), XtPointer UNUSED(callData) )
131 {
132   char station_call[200];
133   char temp[1000];
134   char temp2[300];
135   char *temp_ptr;
136   FccAppl my_fcc_data;
137   rac_record my_rac_data;
138 
139 
140   // Snag station call
141   temp_ptr = XmTextFieldGetString(locate_station_data);
142   xastir_snprintf(station_call,
143                   sizeof(station_call),
144                   "%s",
145                   temp_ptr);
146   XtFree(temp_ptr);
147 
148   (void)remove_trailing_spaces(station_call);
149   (void)remove_trailing_dash_zero(station_call);
150 
151   to_upper(station_call);
152 
153   switch (station_call[0])
154   {
155     case 'A':
156     case 'K':
157     case 'N':
158     case 'W':
159       if (search_fcc_data_appl(station_call, &my_fcc_data) == 1)
160       {
161 
162         xastir_snprintf(temp,
163                         sizeof(temp),
164                         "%s\n%s %s\n%s %s %s\n%s %s, %s %s, %s %s\n\n",
165                         langcode("STIFCC0001"),
166                         langcode("STIFCC0003"),
167                         my_fcc_data.name_licensee,
168                         langcode("STIFCC0004"),
169                         my_fcc_data.text_street,
170                         my_fcc_data.text_pobox,
171                         langcode("STIFCC0005"),
172                         my_fcc_data.city,
173                         langcode("STIFCC0006"),
174                         my_fcc_data.state,
175                         langcode("STIFCC0007"),
176                         my_fcc_data.zipcode);
177 
178         popup_message_always(langcode("WPUPLSP007"),temp);
179       }
180       else
181       {
182         xastir_snprintf(temp2,
183                         sizeof(temp2),
184                         "Callsign Not Found!\n");
185         popup_message_always(langcode("POPEM00001"),temp2);
186       }
187       break;
188     case 'V':
189       if (search_rac_data(station_call, &my_rac_data) == 1)
190       {
191 
192         xastir_snprintf(temp,
193                         sizeof(temp),
194                         "%s\n%s %s\n%s\n%s, %s\n%s\n",
195                         langcode("STIFCC0002"),
196                         my_rac_data.first_name,
197                         my_rac_data.last_name,
198                         my_rac_data.address,
199                         my_rac_data.city,
200                         my_rac_data.province,
201                         my_rac_data.postal_code);
202 
203         if (my_rac_data.qual_a[0] == 'A')
204           strncat(temp,
205                   langcode("STIFCC0008"),
206                   sizeof(temp) - 1 - strlen(temp));
207 
208         if (my_rac_data.qual_d[0] == 'D')
209           strncat(temp,
210                   langcode("STIFCC0009"),
211                   sizeof(temp) - 1 - strlen(temp));
212 
213         if (my_rac_data.qual_b[0] == 'B' && my_rac_data.qual_c[0] != 'C')
214           strncat(temp,
215                   langcode("STIFCC0010"),
216                   sizeof(temp) - 1 - strlen(temp));
217 
218         if (my_rac_data.qual_c[0] == 'C')
219           strncat(temp,
220                   langcode("STIFCC0011"),
221                   sizeof(temp) - 1 - strlen(temp));
222 
223         strncat(temp,
224                 "\n",
225                 sizeof(temp) - 1 - strlen(temp));
226 
227         if (strlen(my_rac_data.club_name) > 1)
228         {
229           xastir_snprintf(temp2,
230                           sizeof(temp2),
231                           "%s\n%s\n%s, %s\n%s\n",
232                           my_rac_data.club_name,
233                           my_rac_data.club_address,
234                           my_rac_data.club_city,
235                           my_rac_data.club_province,
236                           my_rac_data.club_postal_code);
237           strncat(temp,
238                   temp2,
239                   sizeof(temp) - 1 - strlen(temp));
240         }
241 
242 
243         popup_message_always(langcode("WPUPLSP007"),temp);
244       }
245       else
246       {
247         // RAC code does its own popup in this case?
248         //fprintf(stderr, "Callsign not found\n");
249       }
250       break;
251     default:
252       xastir_snprintf(temp2,
253                       sizeof(temp2),
254                       "Not an FCC or RAC callsign!\n");
255       popup_message_always(langcode("POPEM00001"),temp2);
256       break;
257   }
258 
259   // Don't enable this as then we can't click on the Locate button
260   // later.
261   //Locate_station_destroy_shell(w, clientData, callData);
262 }
263 
264 
265 
266 
267 
268 /*
269  *  Locate a station by centering the map at its position
270  */
Locate_station_now(Widget UNUSED (w),XtPointer UNUSED (clientData),XtPointer UNUSED (callData))271 void Locate_station_now(Widget UNUSED(w), XtPointer UNUSED(clientData), XtPointer UNUSED(callData) )
272 {
273   char temp2[200];
274   char *temp_ptr;
275 
276 
277   /* find station and go there */
278   temp_ptr = XmTextFieldGetString(locate_station_data);
279   xastir_snprintf(locate_station_call,
280                   sizeof(locate_station_call),
281                   "%s",
282                   temp_ptr);
283   XtFree(temp_ptr);
284 
285   (void)remove_trailing_spaces(locate_station_call);
286   (void)remove_trailing_dash_zero(locate_station_call);
287 
288   /*fprintf(stderr,"looking for %s\n",locate_station_call);*/
289   if (locate_station(da, locate_station_call, (int)XmToggleButtonGetState(locate_case_data),
290                      (int)XmToggleButtonGetState(locate_match_data),1) ==0)
291   {
292     xastir_snprintf(temp2, sizeof(temp2), langcode("POPEM00002"), locate_station_call);
293     popup_message_always(langcode("POPEM00001"),temp2);
294   }
295 
296   // Don't enable this as then we can't click on the FCC/RAC
297   // button later, and we'll lose the callsign info if we want to
298   // see it again.
299   //Locate_station_destroy_shell(w, clientData, callData);
300 }
301 
302 
303 
304 
305 
306 // Here we pass in a 1 in callData if it's an emergency locate,
307 // for when we've received a Mic-E emergency packet.
308 //
Locate_station(Widget UNUSED (w),XtPointer UNUSED (clientData),XtPointer callData)309 void Locate_station(Widget UNUSED(w), XtPointer UNUSED(clientData), XtPointer callData)
310 {
311   static Widget pane, scrollwindow, form, button_locate, button_cancel, call,
312          button_lookup, sep;
313   Atom delw;
314   int emergency_flag = XTPOINTER_TO_INT(callData);
315 
316 
317   if (!locate_station_dialog)
318   {
319 
320     begin_critical_section(&locate_station_dialog_lock, "locate_gui.c:Locate_station" );
321 
322     // Check whether it is an emergency locate function
323     if (emergency_flag == 1)
324     {
325       locate_station_dialog = XtVaCreatePopupShell(langcode("WPUPLSP006"),
326                               xmDialogShellWidgetClass, appshell,
327                               XmNdeleteResponse, XmDESTROY,
328                               XmNdefaultPosition, FALSE,
329                               XmNfontList, fontlist1,
330                               NULL);
331     }
332     else    // Non-emergency locate
333     {
334       locate_station_dialog = XtVaCreatePopupShell(langcode("WPUPLSP001"),
335                               xmDialogShellWidgetClass, appshell,
336                               XmNdeleteResponse, XmDESTROY,
337                               XmNdefaultPosition, FALSE,
338                               XmNfontList, fontlist1,
339                               NULL);
340     }
341 
342 
343     pane = XtVaCreateWidget("Locate_station pane",xmPanedWindowWidgetClass, locate_station_dialog,
344                             XmNbackground, colors[0xff],
345                             NULL);
346 
347     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
348                                            xmScrolledWindowWidgetClass,
349                                            pane,
350                                            XmNscrollingPolicy, XmAUTOMATIC,
351                                            NULL);
352 
353     form =  XtVaCreateWidget("Locate_station form",
354                              xmFormWidgetClass,
355                              scrollwindow,
356                              XmNfractionBase, 3,
357                              XmNbackground, colors[0xff],
358                              XmNautoUnmanage, FALSE,
359                              XmNshadowThickness, 1,
360                              NULL);
361 
362     call = XtVaCreateManagedWidget(langcode("WPUPLSP002"),xmLabelWidgetClass, form,
363                                    XmNtopAttachment, XmATTACH_FORM,
364                                    XmNtopOffset, 10,
365                                    XmNbottomAttachment, XmATTACH_NONE,
366                                    XmNleftAttachment, XmATTACH_FORM,
367                                    XmNleftOffset, 10,
368                                    XmNrightAttachment, XmATTACH_NONE,
369                                    XmNbackground, colors[0xff],
370                                    XmNfontList, fontlist1,
371                                    NULL);
372 
373     locate_station_data = XtVaCreateManagedWidget("Locate_station data", xmTextFieldWidgetClass, form,
374                           XmNeditable,   TRUE,
375                           XmNcursorPositionVisible, TRUE,
376                           XmNsensitive, TRUE,
377                           XmNshadowThickness,    1,
378                           XmNcolumns, 15,
379                           XmNwidth, ((15*7)+2),
380                           XmNmaxLength, 15,
381                           XmNbackground, colors[0x0f],
382                           XmNtopAttachment,XmATTACH_FORM,
383                           XmNtopOffset, 5,
384                           XmNbottomAttachment,XmATTACH_NONE,
385                           XmNleftAttachment, XmATTACH_WIDGET,
386                           XmNleftWidget, call,
387                           XmNleftOffset, 10,
388                           XmNrightAttachment,XmATTACH_FORM,
389                           XmNrightOffset, 10,
390                           XmNnavigationType, XmTAB_GROUP,
391                           XmNtraversalOn, TRUE,
392                           XmNfontList, fontlist1,
393                           NULL);
394 
395     locate_case_data  = XtVaCreateManagedWidget(langcode("WPUPLSP003"),xmToggleButtonWidgetClass,form,
396                         XmNtopAttachment, XmATTACH_WIDGET,
397                         XmNtopWidget, call,
398                         XmNtopOffset, 20,
399                         XmNbottomAttachment, XmATTACH_NONE,
400                         XmNleftAttachment, XmATTACH_FORM,
401                         XmNleftOffset,10,
402                         XmNrightAttachment, XmATTACH_NONE,
403                         XmNbackground, colors[0xff],
404                         XmNnavigationType, XmTAB_GROUP,
405                         XmNtraversalOn, TRUE,
406                         XmNfontList, fontlist1,
407                         NULL);
408 
409     locate_match_data  = XtVaCreateManagedWidget(langcode("WPUPLSP004"),xmToggleButtonWidgetClass,form,
410                          XmNtopAttachment, XmATTACH_WIDGET,
411                          XmNtopWidget, call,
412                          XmNtopOffset, 20,
413                          XmNbottomAttachment, XmATTACH_NONE,
414                          XmNleftAttachment, XmATTACH_WIDGET,
415                          XmNleftWidget,locate_case_data,
416                          XmNleftOffset,20,
417                          XmNrightAttachment, XmATTACH_NONE,
418                          XmNbackground, colors[0xff],
419                          XmNnavigationType, XmTAB_GROUP,
420                          XmNtraversalOn, TRUE,
421                          XmNfontList, fontlist1,
422                          NULL);
423 
424     sep = XtVaCreateManagedWidget("Locate_station sep", xmSeparatorGadgetClass,form,
425                                   XmNorientation, XmHORIZONTAL,
426                                   XmNtopAttachment,XmATTACH_WIDGET,
427                                   XmNtopWidget,locate_case_data,
428                                   XmNtopOffset, 10,
429                                   XmNbottomAttachment,XmATTACH_NONE,
430                                   XmNleftAttachment, XmATTACH_FORM,
431                                   XmNrightAttachment,XmATTACH_FORM,
432                                   XmNbackground, colors[0xff],
433                                   XmNfontList, fontlist1,
434                                   NULL);
435 
436     button_lookup = XtVaCreateManagedWidget(langcode("WPUPLSP007"),xmPushButtonGadgetClass, form,
437                                             XmNtopAttachment, XmATTACH_WIDGET,
438                                             XmNtopWidget, sep,
439                                             XmNtopOffset, 5,
440                                             XmNbottomAttachment, XmATTACH_FORM,
441                                             XmNbottomOffset, 5,
442                                             XmNleftAttachment, XmATTACH_POSITION,
443                                             XmNleftPosition, 0,
444                                             XmNleftOffset, 5,
445                                             XmNrightAttachment, XmATTACH_POSITION,
446                                             XmNrightPosition, 1,
447                                             XmNbackground, colors[0xff],
448                                             XmNnavigationType, XmTAB_GROUP,
449                                             XmNtraversalOn, TRUE,
450                                             XmNfontList, fontlist1,
451                                             NULL);
452 
453     button_locate = XtVaCreateManagedWidget(langcode("WPUPLSP005"),xmPushButtonGadgetClass, form,
454                                             XmNtopAttachment, XmATTACH_WIDGET,
455                                             XmNtopWidget, sep,
456                                             XmNtopOffset, 5,
457                                             XmNbottomAttachment, XmATTACH_FORM,
458                                             XmNbottomOffset, 5,
459                                             XmNleftAttachment, XmATTACH_POSITION,
460                                             XmNleftPosition, 1,
461                                             XmNleftOffset, 5,
462                                             XmNrightAttachment, XmATTACH_POSITION,
463                                             XmNrightPosition, 2,
464                                             XmNbackground, colors[0xff],
465                                             XmNnavigationType, XmTAB_GROUP,
466                                             XmNtraversalOn, TRUE,
467                                             XmNfontList, fontlist1,
468                                             NULL);
469 
470     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
471                                             XmNtopAttachment, XmATTACH_WIDGET,
472                                             XmNtopWidget, sep,
473                                             XmNtopOffset, 5,
474                                             XmNbottomAttachment, XmATTACH_FORM,
475                                             XmNbottomOffset, 5,
476                                             XmNleftAttachment, XmATTACH_POSITION,
477                                             XmNleftPosition, 2,
478                                             XmNrightAttachment, XmATTACH_POSITION,
479                                             XmNrightPosition, 3,
480                                             XmNrightOffset, 5,
481                                             XmNbackground, colors[0xff],
482                                             XmNnavigationType, XmTAB_GROUP,
483                                             XmNtraversalOn, TRUE,
484                                             XmNfontList, fontlist1,
485                                             NULL);
486 
487     XtAddCallback(button_lookup, XmNactivateCallback, fcc_rac_lookup, locate_station_dialog);
488     XtAddCallback(button_locate, XmNactivateCallback, Locate_station_now, locate_station_dialog);
489     XtAddCallback(button_cancel, XmNactivateCallback, Locate_station_destroy_shell, locate_station_dialog);
490 
491     XmToggleButtonSetState(locate_case_data,FALSE,FALSE);
492     XmToggleButtonSetState(locate_match_data,TRUE,FALSE);
493 
494     XmTextFieldSetString(locate_station_data,locate_station_call);
495 
496     pos_dialog(locate_station_dialog);
497 
498     delw = XmInternAtom(XtDisplay(locate_station_dialog),"WM_DELETE_WINDOW", FALSE);
499     XmAddWMProtocolCallback(locate_station_dialog, delw, Locate_station_destroy_shell, (XtPointer)locate_station_dialog);
500 
501     XtManageChild(form);
502     XtManageChild(pane);
503 
504     resize_dialog(form, locate_station_dialog);
505 
506     end_critical_section(&locate_station_dialog_lock, "locate_gui.c:Locate_station" );
507 
508     XtPopup(locate_station_dialog,XtGrabNone);
509 
510     // Move focus to the Cancel button.  This appears to highlight the
511     // button fine, but we're not able to hit the <Enter> key to
512     // have that default function happen.  Note:  We _can_ hit the
513     // <SPACE> key, and that activates the option.
514 //        XmUpdateDisplay(locate_station_dialog);
515     XmProcessTraversal(button_cancel, XmTRAVERSE_CURRENT);
516 
517   }
518   else
519   {
520     (void)XRaiseWindow(XtDisplay(locate_station_dialog), XtWindow(locate_station_dialog));
521   }
522 }
523 
524 
525 
526 
527 
528 /*******************************************************************/
529 /* Locate Place Chooser routines */
530 
531 
532 
533 /*
534  *  Locate Place Chooser PopUp window: Cancelled
535  */
Locate_place_chooser_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))536 void Locate_place_chooser_destroy_shell(Widget UNUSED(widget), XtPointer clientData, XtPointer UNUSED(callData) )
537 {
538   Widget shell = (Widget) clientData;
539 
540   begin_critical_section(&locate_place_chooser_lock, "locate_gui.c:Locate_place_chooser_destroy_shell" );
541 
542   XtDestroyWidget(shell);
543   locate_place_chooser = (Widget)NULL;
544 
545   end_critical_section(&locate_place_chooser_lock, "locate_gui.c:Locate_place_chooser_destroy_shell" );
546 
547 }
548 
549 
550 
551 
552 
553 /*
554  *  Locate Place Selection PopUp window: Map selected place
555  */
Locate_place_chooser_select(Widget widget,XtPointer UNUSED (clientData),XtPointer UNUSED (callData))556 void Locate_place_chooser_select(Widget widget,
557                                  XtPointer UNUSED(clientData),
558                                  XtPointer UNUSED(callData) )
559 {
560 
561   int ii, xx;
562   char *temp;
563   XmString *list;
564   int found = 0;
565   int index = 0;
566 
567   begin_critical_section(&locate_place_chooser_lock, "locate_gui.c:Locate_place_chooser_select" );
568 
569   if (locate_place_chooser)
570   {
571     XtVaGetValues(locate_place_list,
572                   XmNitemCount,
573                   &ii,
574                   XmNitems,
575                   &list,
576                   NULL);
577 
578     for (xx=1; xx<=ii; xx++)
579     {
580       if (XmListPosSelected(locate_place_list, xx))
581       {
582         found = 1;
583         index = xx;
584         if (XmStringGetLtoR(list[(xx-1)], XmFONTLIST_DEFAULT_TAG, &temp))
585         {
586           xx=ii+1;
587         }
588       }
589     }
590 
591     if (found)
592     {
593 
594       // Center the map at the chosen location
595       set_map_position(widget,
596                        match_array_lat[index-1],
597                        match_array_long[index-1]);
598 
599       XtFree(temp);
600     }
601   }
602 
603   end_critical_section(&locate_place_chooser_lock, "locate_gui.c:Locate_place_chooser_select" );
604 
605 }
606 
607 
608 
609 
610 
Locate_place_chooser(Widget UNUSED (widget),XtPointer UNUSED (clientData),XtPointer UNUSED (callData))611 void Locate_place_chooser(Widget UNUSED(widget),
612                           XtPointer UNUSED(clientData),
613                           XtPointer UNUSED(callData) )
614 {
615 
616   Widget pane, form, button_ok, button_cancel;
617   Arg al[50];
618   register unsigned int ac = 0;
619   int ii, nn;
620   XmString str_ptr;
621   Atom delw;
622 
623 
624   if (locate_place_chooser != NULL)
625   {
626     Locate_place_chooser_destroy_shell(locate_place_chooser, locate_place_chooser, NULL);
627   }
628 
629   begin_critical_section(&locate_place_chooser_lock, "locate_gui.c:Locate_place_chooser");
630 
631   if (locate_place_chooser == NULL)
632   {
633 
634     // Set up a selection box:
635     locate_place_chooser = XtVaCreatePopupShell(langcode("WPUPCFS028"),
636                            xmDialogShellWidgetClass, appshell,
637                            XmNdeleteResponse, XmDESTROY,
638                            XmNdefaultPosition, FALSE,
639                            XmNbackground, colors[0xff],
640                            XmNfontList, fontlist1,
641                            NULL);
642 
643     pane = XtVaCreateWidget("Locate_place_chooser pane",xmPanedWindowWidgetClass, locate_place_chooser,
644                             XmNbackground, colors[0xff],
645                             NULL);
646 
647     form =  XtVaCreateWidget("Locate_place_chooser form",xmFormWidgetClass, pane,
648                              XmNfractionBase, 5,
649                              XmNbackground, colors[0xff],
650                              XmNautoUnmanage, FALSE,
651                              XmNshadowThickness, 1,
652                              NULL);
653 
654 
655     // Attach buttons first to the bottom of the form,
656     // so that we'll be able to stretch this thing
657     // vertically to see all of the entries.
658     //
659     button_ok = XtVaCreateManagedWidget(langcode("WPUPCFS028"),xmPushButtonGadgetClass, form,
660                                         XmNtopAttachment, XmATTACH_NONE,
661                                         XmNbottomAttachment, XmATTACH_FORM,
662                                         XmNbottomOffset, 5,
663                                         XmNleftAttachment, XmATTACH_POSITION,
664                                         XmNleftPosition, 1,
665                                         XmNrightAttachment, XmATTACH_POSITION,
666                                         XmNrightPosition, 2,
667                                         XmNnavigationType, XmTAB_GROUP,
668                                         XmNfontList, fontlist1,
669                                         NULL);
670 
671     XtAddCallback(button_ok,
672                   XmNactivateCallback,
673                   Locate_place_chooser_select,
674                   locate_place_chooser);
675 
676     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00003"),xmPushButtonGadgetClass, form,
677                                             XmNtopAttachment, XmATTACH_NONE,
678                                             XmNbottomAttachment, XmATTACH_FORM,
679                                             XmNbottomOffset, 5,
680                                             XmNleftAttachment, XmATTACH_POSITION,
681                                             XmNleftPosition, 3,
682                                             XmNrightAttachment, XmATTACH_POSITION,
683                                             XmNrightPosition, 4,
684                                             XmNnavigationType, XmTAB_GROUP,
685                                             XmNfontList, fontlist1,
686                                             NULL);
687 
688     XtAddCallback(button_cancel,
689                   XmNactivateCallback,
690                   Locate_place_chooser_destroy_shell,
691                   locate_place_chooser);
692 
693     // set args for color
694     ac = 0;
695     XtSetArg(al[ac], XmNbackground, colors[0xff]);
696     ac++;
697     XtSetArg(al[ac], XmNvisibleItemCount, 6);
698     ac++;
699     XtSetArg(al[ac], XmNtraversalOn, TRUE);
700     ac++;
701     XtSetArg(al[ac], XmNshadowThickness, 3);
702     ac++;
703     XtSetArg(al[ac], XmNselectionPolicy, XmSINGLE_SELECT);
704     ac++;
705     XtSetArg(al[ac], XmNscrollBarPlacement, XmBOTTOM_RIGHT);
706     ac++;
707     XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM);
708     ac++;
709     XtSetArg(al[ac], XmNtopOffset, 5);
710     ac++;
711     XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET);
712     ac++;
713     XtSetArg(al[ac], XmNbottomWidget, button_ok);
714     ac++;
715     XtSetArg(al[ac], XmNbottomOffset, 5);
716     ac++;
717     XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM);
718     ac++;
719     XtSetArg(al[ac], XmNrightOffset, 5);
720     ac++;
721     XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM);
722     ac++;
723     XtSetArg(al[ac], XmNleftOffset, 5);
724     ac++;
725     XtSetArg(al[ac], XmNfontList, fontlist1);
726     ac++;
727 
728     locate_place_list = XmCreateScrolledList(form,"Locate_place_chooser list",al,ac);
729 
730     nn = 1;
731     for (ii = 0; ii < match_quantity; ii++)
732     {
733       XmListAddItem(locate_place_list,
734                     str_ptr = XmStringCreateLtoR(match_array_name[ii],
735                               XmFONTLIST_DEFAULT_TAG),
736                     (int)nn++);
737       XmStringFree(str_ptr);
738     }
739 
740     pos_dialog(locate_place_chooser);
741 
742     delw = XmInternAtom(XtDisplay(locate_place_chooser),
743                         "WM_DELETE_WINDOW",
744                         FALSE);
745 
746     XmAddWMProtocolCallback(locate_place_chooser,
747                             delw,
748                             Locate_place_chooser_destroy_shell,
749                             (XtPointer)locate_place_chooser);
750 
751     XtManageChild(form);
752     XtManageChild(locate_place_list);
753     XtVaSetValues(locate_place_list, XmNbackground, colors[0x0f], NULL);
754     XtManageChild(pane);
755 
756     XtPopup(locate_place_chooser,XtGrabNone);
757 
758     // Move focus to the Cancel button.  This appears to
759     // highlight t
760     // button fine, but we're not able to hit the
761     // <Enter> key to
762     // have that default function happen.  Note:  We
763     // _can_ hit the
764     // <SPACE> key, and that activates the option.
765     XmProcessTraversal(button_cancel, XmTRAVERSE_CURRENT);
766   }
767 
768   end_critical_section(&locate_place_chooser_lock, "locate_gui.c:Locate_place_chooser" );
769 
770 }
771 /*******************************************************************/
772 
773 
774 
775 
776 
777 /**** LOCATE PLACE ******/
778 
Locate_place_destroy_shell(Widget UNUSED (widget),XtPointer clientData,XtPointer UNUSED (callData))779 void Locate_place_destroy_shell(Widget UNUSED(widget), XtPointer clientData, XtPointer UNUSED(callData) )
780 {
781   Widget shell = (Widget) clientData;
782   XtPopdown(shell);
783 
784   begin_critical_section(&locate_place_dialog_lock, "locate_gui.c:Locate_place_destroy_shell" );
785 
786   XtDestroyWidget(shell);
787   locate_place_dialog = (Widget)NULL;
788 
789   end_critical_section(&locate_place_dialog_lock, "locate_gui.c:Locate_place_destroy_shell" );
790 
791 }
792 
793 
794 
795 
796 
797 /*
798  *  Locate a place by centering the map at its position
799  */
Locate_place_now(Widget w,XtPointer clientData,XtPointer callData)800 void Locate_place_now(Widget w, XtPointer clientData, XtPointer callData)
801 {
802   char *temp_ptr;
803 //    int ii;
804 
805 
806   /* find place and go there */
807   temp_ptr = XmTextFieldGetString(locate_place_data);
808   xastir_snprintf(locate_place_name,
809                   sizeof(locate_place_name),
810                   "%s",
811                   temp_ptr);
812   XtFree(temp_ptr);
813 
814   temp_ptr = XmTextFieldGetString(locate_state_data);
815   xastir_snprintf(locate_state_name,
816                   sizeof(locate_state_name),
817                   "%s",
818                   temp_ptr);
819   XtFree(temp_ptr);
820 
821   temp_ptr = XmTextFieldGetString(locate_county_data);
822   xastir_snprintf(locate_county_name,
823                   sizeof(locate_county_name),
824                   "%s",
825                   temp_ptr);
826   XtFree(temp_ptr);
827 
828   temp_ptr = XmTextFieldGetString(locate_quad_data);
829   xastir_snprintf(locate_quad_name,
830                   sizeof(locate_quad_name),
831                   "%s",
832                   temp_ptr);
833   XtFree(temp_ptr);
834 
835   temp_ptr = XmTextFieldGetString(locate_type_data);
836   xastir_snprintf(locate_type_name,
837                   sizeof(locate_type_name),
838                   "%s",
839                   temp_ptr);
840   XtFree(temp_ptr);
841 
842   temp_ptr = XmTextFieldGetString(locate_gnis_file_data);
843   xastir_snprintf(locate_gnis_filename,
844                   sizeof(locate_gnis_filename),
845                   "%s",
846                   temp_ptr);
847   XtFree(temp_ptr);
848 
849   (void)remove_trailing_spaces(locate_place_name);
850   (void)remove_trailing_spaces(locate_state_name);
851   (void)remove_trailing_spaces(locate_county_name);
852   (void)remove_trailing_spaces(locate_quad_name);
853   (void)remove_trailing_spaces(locate_type_name);
854 
855   /*fprintf(stderr,"looking for %s\n",locate_place_name);*/
856 
857   match_quantity = gnis_locate_place(da, locate_place_name,
858                                      locate_state_name, locate_county_name, locate_quad_name,
859                                      locate_type_name, locate_gnis_filename,
860                                      (int)XmToggleButtonGetState(locate_place_case_data),
861                                      (int)XmToggleButtonGetState(locate_place_match_data),
862                                      match_array_name, match_array_lat, match_array_long);
863 
864   if (0 == match_quantity) // Try population centers.
865     match_quantity = pop_locate_place(da, locate_place_name,
866                                       locate_state_name, locate_county_name, locate_quad_name,
867                                       locate_type_name, locate_gnis_filename,
868                                       (int)XmToggleButtonGetState(locate_place_case_data),
869                                       (int)XmToggleButtonGetState(locate_place_match_data),
870                                       match_array_name, match_array_lat, match_array_long);
871 
872   if (match_quantity)
873   {
874     // Found some matches!
875 
876     // Have a Chooser dialog if more than one match is found,
877     // plus the associated callbacks.  Don't center the map
878     // unless the user chooses one of the matches.  Leave the
879     // chooser dialog up so that the user can click on the
880     // matches one at a time until the correct one is found,
881     // then he/she can hit the Close button on that dialog to
882     // make it go away.
883 
884     // Bring up a chooser dialog with the results from the
885     // match_array and a close button.  Allow the user to choose
886     // which one to center the map to.  Could also allow the
887     // user to find out more about each match if we fill the
888     // array with more data from the GNIS file.
889 
890 // Debug:  Print out the contents of the match arrays.
891 //fprintf(stderr,"Found %d matches!\n", match_quantity);
892 
893     /*
894     set_dangerous("printing");
895     for (ii = 0; ii < match_quantity; ii++) {
896         fprintf(stderr,
897             "%d, %s, %ld, %ld\n",
898             ii,
899             match_array_name[ii],
900             match_array_lat[ii],
901             match_array_long[ii]);
902     }
903     clear_dangerous();
904     */
905 
906     // This one pops up the names of whatever we found.
907     // "Found It!"
908     //popup_message_always( langcode("POPEM00029"), match_array_name[0]);
909 
910     // Bring up the new Chooser dialog
911     (void)Locate_place_chooser(w, clientData, callData);
912   }
913   else
914   {
915     // No matches found.
916     popup_message_always(langcode("POPEM00025"),locate_place_name);
917   }
918 
919   Locate_place_destroy_shell(w, clientData, callData);
920 }
921 
922 
923 
924 
925 
Locate_place(Widget UNUSED (w),XtPointer UNUSED (clientData),XtPointer UNUSED (callData))926 void Locate_place(Widget UNUSED(w), XtPointer UNUSED(clientData), XtPointer UNUSED(callData) )
927 {
928   static Widget pane, scrollwindow, form, button_ok, button_cancel, sep,
929          place, state, county, quad, place_type, gnis_file;
930   Atom delw;
931 
932   if (!locate_place_dialog)
933   {
934 
935     begin_critical_section(&locate_place_dialog_lock, "locate_gui.c:Locate_place" );
936 
937     locate_place_dialog = XtVaCreatePopupShell(langcode("PULDNMP014"),
938                           xmDialogShellWidgetClass, appshell,
939                           XmNdeleteResponse, XmDESTROY,
940                           XmNdefaultPosition, FALSE,
941                           XmNfontList, fontlist1,
942                           NULL);
943 
944     pane = XtVaCreateWidget("Locate_place pane",xmPanedWindowWidgetClass, locate_place_dialog,
945                             XmNbackground, colors[0xff],
946                             NULL);
947 
948     scrollwindow = XtVaCreateManagedWidget("scrollwindow",
949                                            xmScrolledWindowWidgetClass,
950                                            pane,
951                                            XmNscrollingPolicy, XmAUTOMATIC,
952                                            NULL);
953 
954     form =  XtVaCreateWidget("Locate_place form",
955                              xmFormWidgetClass,
956                              scrollwindow,
957                              XmNfractionBase, 2,
958                              XmNbackground, colors[0xff],
959                              XmNautoUnmanage, FALSE,
960                              XmNshadowThickness, 1,
961                              NULL);
962 
963     place = XtVaCreateManagedWidget(langcode("FEATURE001"),xmLabelWidgetClass, form,
964                                     XmNtopAttachment, XmATTACH_FORM,
965                                     XmNtopOffset, 10,
966                                     XmNbottomAttachment, XmATTACH_NONE,
967                                     XmNleftAttachment, XmATTACH_FORM,
968                                     XmNleftOffset, 10,
969                                     XmNrightAttachment, XmATTACH_NONE,
970                                     XmNbackground, colors[0xff],
971                                     XmNfontList, fontlist1,
972                                     NULL);
973 
974     locate_place_data = XtVaCreateManagedWidget("Locate_place_data", xmTextFieldWidgetClass, form,
975                         XmNeditable,   TRUE,
976                         XmNcursorPositionVisible, TRUE,
977                         XmNsensitive, TRUE,
978                         XmNshadowThickness,    1,
979                         XmNcolumns, 32,
980                         XmNwidth, ((32*7)+2),
981                         XmNmaxLength, 30,
982                         XmNbackground, colors[0x0f],
983                         XmNtopAttachment,XmATTACH_FORM,
984                         XmNtopOffset, 5,
985                         XmNbottomAttachment,XmATTACH_NONE,
986                         XmNleftAttachment, XmATTACH_WIDGET,
987                         XmNleftWidget, place,
988                         XmNleftOffset, 10,
989                         XmNrightAttachment,XmATTACH_FORM,
990                         XmNrightOffset, 10,
991                         XmNnavigationType, XmTAB_GROUP,
992                         XmNtraversalOn, TRUE,
993                         XmNfontList, fontlist1,
994                         NULL);
995 
996     state = XtVaCreateManagedWidget(langcode("FEATURE002"),xmLabelWidgetClass, form,
997                                     XmNtopAttachment, XmATTACH_WIDGET,
998                                     XmNtopWidget, place,
999                                     XmNtopOffset, 10,
1000                                     XmNbottomAttachment, XmATTACH_NONE,
1001                                     XmNleftAttachment, XmATTACH_FORM,
1002                                     XmNleftOffset, 10,
1003                                     XmNrightAttachment, XmATTACH_NONE,
1004                                     XmNbackground, colors[0xff],
1005                                     XmNfontList, fontlist1,
1006                                     NULL);
1007 
1008     locate_state_data = XtVaCreateManagedWidget("Locate_state_data", xmTextFieldWidgetClass, form,
1009                         XmNeditable,   TRUE,
1010                         XmNcursorPositionVisible, TRUE,
1011                         XmNsensitive, TRUE,
1012                         XmNshadowThickness,    1,
1013                         XmNcolumns, 4,
1014                         XmNwidth, ((4*7)+2),
1015                         XmNmaxLength, 2,
1016                         XmNbackground, colors[0x0f],
1017                         XmNtopAttachment,XmATTACH_WIDGET,
1018                         XmNtopWidget, place,
1019                         XmNtopOffset, 5,
1020                         XmNbottomAttachment,XmATTACH_NONE,
1021                         XmNleftAttachment, XmATTACH_WIDGET,
1022                         XmNleftWidget, state,
1023                         XmNleftOffset, 10,
1024                         XmNrightAttachment,XmATTACH_NONE,
1025                         XmNrightOffset, 10,
1026                         XmNnavigationType, XmTAB_GROUP,
1027                         XmNtraversalOn, TRUE,
1028                         XmNfontList, fontlist1,
1029                         NULL);
1030 
1031     county = XtVaCreateManagedWidget(langcode("FEATURE003"),xmLabelWidgetClass, form,
1032                                      XmNtopAttachment, XmATTACH_WIDGET,
1033                                      XmNtopWidget, state,
1034                                      XmNtopOffset, 10,
1035                                      XmNbottomAttachment, XmATTACH_NONE,
1036                                      XmNleftAttachment, XmATTACH_FORM,
1037                                      XmNleftOffset, 10,
1038                                      XmNrightAttachment, XmATTACH_NONE,
1039                                      XmNbackground, colors[0xff],
1040                                      XmNfontList, fontlist1,
1041                                      NULL);
1042 
1043     locate_county_data = XtVaCreateManagedWidget("Locate_county_data", xmTextFieldWidgetClass, form,
1044                          XmNeditable,   TRUE,
1045                          XmNcursorPositionVisible, TRUE,
1046                          XmNsensitive, TRUE,
1047                          XmNshadowThickness,    1,
1048                          XmNcolumns, 32,
1049                          XmNwidth, ((32*7)+2),
1050                          XmNmaxLength, 30,
1051                          XmNbackground, colors[0x0f],
1052                          XmNtopAttachment,XmATTACH_WIDGET,
1053                          XmNtopWidget, state,
1054                          XmNtopOffset, 5,
1055                          XmNbottomAttachment,XmATTACH_NONE,
1056                          XmNleftAttachment, XmATTACH_WIDGET,
1057                          XmNleftWidget, county,
1058                          XmNleftOffset, 10,
1059                          XmNrightAttachment,XmATTACH_FORM,
1060                          XmNrightOffset, 10,
1061                          XmNnavigationType, XmTAB_GROUP,
1062                          XmNtraversalOn, TRUE,
1063                          XmNfontList, fontlist1,
1064                          NULL);
1065 
1066     quad = XtVaCreateManagedWidget(langcode("FEATURE004"),xmLabelWidgetClass, form,
1067                                    XmNtopAttachment, XmATTACH_WIDGET,
1068                                    XmNtopWidget, county,
1069                                    XmNtopOffset, 10,
1070                                    XmNbottomAttachment, XmATTACH_NONE,
1071                                    XmNleftAttachment, XmATTACH_FORM,
1072                                    XmNleftOffset, 10,
1073                                    XmNrightAttachment, XmATTACH_NONE,
1074                                    XmNbackground, colors[0xff],
1075                                    XmNfontList, fontlist1,
1076                                    NULL);
1077 
1078     locate_quad_data = XtVaCreateManagedWidget("Locate_quad_data", xmTextFieldWidgetClass, form,
1079                        XmNeditable,   TRUE,
1080                        XmNcursorPositionVisible, TRUE,
1081                        XmNsensitive, TRUE,
1082                        XmNshadowThickness,    1,
1083                        XmNcolumns, 32,
1084                        XmNwidth, ((32*7)+2),
1085                        XmNmaxLength, 30,
1086                        XmNbackground, colors[0x0f],
1087                        XmNtopAttachment,XmATTACH_WIDGET,
1088                        XmNtopWidget, county,
1089                        XmNtopOffset, 5,
1090                        XmNbottomAttachment,XmATTACH_NONE,
1091                        XmNleftAttachment, XmATTACH_WIDGET,
1092                        XmNleftWidget, quad,
1093                        XmNleftOffset, 10,
1094                        XmNrightAttachment,XmATTACH_FORM,
1095                        XmNrightOffset, 10,
1096                        XmNnavigationType, XmTAB_GROUP,
1097                        XmNtraversalOn, TRUE,
1098                        XmNfontList, fontlist1,
1099                        NULL);
1100 
1101     place_type = XtVaCreateManagedWidget(langcode("FEATURE005"),xmLabelWidgetClass, form,
1102                                          XmNtopAttachment, XmATTACH_WIDGET,
1103                                          XmNtopWidget, quad,
1104                                          XmNtopOffset, 10,
1105                                          XmNbottomAttachment, XmATTACH_NONE,
1106                                          XmNleftAttachment, XmATTACH_FORM,
1107                                          XmNleftOffset, 10,
1108                                          XmNrightAttachment, XmATTACH_NONE,
1109                                          XmNbackground, colors[0xff],
1110                                          XmNfontList, fontlist1,
1111                                          NULL);
1112 
1113     locate_type_data = XtVaCreateManagedWidget("Locate_type_data", xmTextFieldWidgetClass, form,
1114                        XmNeditable,   TRUE,
1115                        XmNcursorPositionVisible, TRUE,
1116                        XmNsensitive, TRUE,
1117                        XmNshadowThickness,    1,
1118                        XmNcolumns, 32,
1119                        XmNwidth, ((32*7)+2),
1120                        XmNmaxLength, 30,
1121                        XmNbackground, colors[0x0f],
1122                        XmNtopAttachment,XmATTACH_WIDGET,
1123                        XmNtopWidget, quad,
1124                        XmNtopOffset, 5,
1125                        XmNbottomAttachment,XmATTACH_NONE,
1126                        XmNleftAttachment, XmATTACH_WIDGET,
1127                        XmNleftWidget, place_type,
1128                        XmNleftOffset, 10,
1129                        XmNrightAttachment,XmATTACH_FORM,
1130                        XmNrightOffset, 10,
1131                        XmNnavigationType, XmTAB_GROUP,
1132                        XmNtraversalOn, TRUE,
1133                        XmNfontList, fontlist1,
1134                        NULL);
1135 
1136     gnis_file = XtVaCreateManagedWidget(langcode("FEATURE006"),xmLabelWidgetClass, form,
1137                                         XmNtopAttachment, XmATTACH_WIDGET,
1138                                         XmNtopWidget, place_type,
1139                                         XmNtopOffset, 10,
1140                                         XmNbottomAttachment, XmATTACH_NONE,
1141                                         XmNleftAttachment, XmATTACH_FORM,
1142                                         XmNleftOffset, 10,
1143                                         XmNrightAttachment, XmATTACH_NONE,
1144                                         XmNbackground, colors[0xff],
1145                                         XmNfontList, fontlist1,
1146                                         NULL);
1147 
1148     locate_gnis_file_data = XtVaCreateManagedWidget("locate_gnis_file_data", xmTextFieldWidgetClass, form,
1149                             XmNeditable,   TRUE,
1150                             XmNcursorPositionVisible, TRUE,
1151                             XmNsensitive, TRUE,
1152                             XmNshadowThickness,    1,
1153                             XmNcolumns, 40,
1154                             XmNwidth, ((40*7)+2),
1155                             XmNmaxLength, 199,
1156                             XmNbackground, colors[0x0f],
1157                             XmNtopAttachment,XmATTACH_WIDGET,
1158                             XmNtopWidget, place_type,
1159                             XmNtopOffset, 5,
1160                             XmNbottomAttachment,XmATTACH_NONE,
1161                             XmNleftAttachment, XmATTACH_WIDGET,
1162                             XmNleftWidget, gnis_file,
1163                             XmNleftOffset, 10,
1164                             XmNrightAttachment,XmATTACH_FORM,
1165                             XmNrightOffset, 10,
1166                             XmNnavigationType, XmTAB_GROUP,
1167                             XmNtraversalOn, TRUE,
1168                             XmNfontList, fontlist1,
1169                             NULL);
1170 
1171 
1172     locate_place_case_data  = XtVaCreateManagedWidget(langcode("WPUPLSP003"),xmToggleButtonWidgetClass,form,
1173                               XmNtopAttachment, XmATTACH_WIDGET,
1174                               XmNtopWidget, gnis_file,
1175                               XmNtopOffset, 20,
1176                               XmNbottomAttachment, XmATTACH_NONE,
1177                               XmNleftAttachment, XmATTACH_FORM,
1178                               XmNleftOffset,10,
1179                               XmNrightAttachment, XmATTACH_NONE,
1180                               XmNbackground, colors[0xff],
1181                               XmNnavigationType, XmTAB_GROUP,
1182                               XmNtraversalOn, TRUE,
1183                               XmNfontList, fontlist1,
1184                               NULL);
1185 
1186     locate_place_match_data  = XtVaCreateManagedWidget(langcode("WPUPLSP004"),xmToggleButtonWidgetClass,form,
1187                                XmNtopAttachment, XmATTACH_WIDGET,
1188                                XmNtopWidget, gnis_file,
1189                                XmNtopOffset, 20,
1190                                XmNbottomAttachment, XmATTACH_NONE,
1191                                XmNleftAttachment, XmATTACH_WIDGET,
1192                                XmNleftWidget,locate_place_case_data,
1193                                XmNleftOffset,20,
1194                                XmNrightAttachment, XmATTACH_NONE,
1195                                XmNbackground, colors[0xff],
1196                                XmNnavigationType, XmTAB_GROUP,
1197                                XmNtraversalOn, TRUE,
1198                                XmNfontList, fontlist1,
1199                                NULL);
1200 
1201     sep = XtVaCreateManagedWidget("Locate_place sep", xmSeparatorGadgetClass,form,
1202                                   XmNorientation, XmHORIZONTAL,
1203                                   XmNtopAttachment,XmATTACH_WIDGET,
1204                                   XmNtopWidget,locate_place_case_data,
1205                                   XmNtopOffset, 10,
1206                                   XmNbottomAttachment,XmATTACH_NONE,
1207                                   XmNleftAttachment, XmATTACH_FORM,
1208                                   XmNrightAttachment,XmATTACH_FORM,
1209                                   XmNbackground, colors[0xff],
1210                                   XmNfontList, fontlist1,
1211                                   NULL);
1212 
1213     button_ok = XtVaCreateManagedWidget(langcode("WPUPLSP005"),xmPushButtonGadgetClass, form,
1214                                         XmNtopAttachment, XmATTACH_WIDGET,
1215                                         XmNtopWidget, sep,
1216                                         XmNtopOffset, 5,
1217                                         XmNbottomAttachment, XmATTACH_FORM,
1218                                         XmNbottomOffset, 5,
1219                                         XmNleftAttachment, XmATTACH_POSITION,
1220                                         XmNleftPosition, 0,
1221                                         XmNleftOffset, 5,
1222                                         XmNrightAttachment, XmATTACH_POSITION,
1223                                         XmNrightPosition, 1,
1224                                         XmNbackground, colors[0xff],
1225                                         XmNnavigationType, XmTAB_GROUP,
1226                                         XmNtraversalOn, TRUE,
1227                                         XmNfontList, fontlist1,
1228                                         NULL);
1229 
1230     button_cancel = XtVaCreateManagedWidget(langcode("UNIOP00002"),xmPushButtonGadgetClass, form,
1231                                             XmNtopAttachment, XmATTACH_WIDGET,
1232                                             XmNtopWidget, sep,
1233                                             XmNtopOffset, 5,
1234                                             XmNbottomAttachment, XmATTACH_FORM,
1235                                             XmNbottomOffset, 5,
1236                                             XmNleftAttachment, XmATTACH_POSITION,
1237                                             XmNleftPosition, 1,
1238                                             XmNrightAttachment, XmATTACH_POSITION,
1239                                             XmNrightPosition, 2,
1240                                             XmNrightOffset, 5,
1241                                             XmNbackground, colors[0xff],
1242                                             XmNnavigationType, XmTAB_GROUP,
1243                                             XmNtraversalOn, TRUE,
1244                                             XmNfontList, fontlist1,
1245                                             NULL);
1246 
1247     XtAddCallback(button_ok, XmNactivateCallback, Locate_place_now, locate_place_dialog);
1248     XtAddCallback(button_cancel, XmNactivateCallback, Locate_place_destroy_shell, locate_place_dialog);
1249 
1250     XmToggleButtonSetState(locate_place_case_data,FALSE,FALSE);
1251     XmToggleButtonSetState(locate_place_match_data,FALSE,FALSE);
1252 //        XtSetSensitive(locate_place_match_data,FALSE);
1253 
1254     XmTextFieldSetString(locate_place_data,locate_place_name);
1255     XmTextFieldSetString(locate_state_data,locate_state_name);
1256     XmTextFieldSetString(locate_county_data,locate_county_name);
1257     XmTextFieldSetString(locate_quad_data,locate_quad_name);
1258     XmTextFieldSetString(locate_type_data,locate_type_name);
1259     XmTextFieldSetString(locate_gnis_file_data,locate_gnis_filename);
1260 
1261     pos_dialog(locate_place_dialog);
1262 
1263     delw = XmInternAtom(XtDisplay(locate_place_dialog),"WM_DELETE_WINDOW", FALSE);
1264     XmAddWMProtocolCallback(locate_place_dialog, delw, Locate_place_destroy_shell, (XtPointer)locate_place_dialog);
1265 
1266     XtManageChild(form);
1267     XtManageChild(pane);
1268 
1269     resize_dialog(form, locate_place_dialog);
1270 
1271     end_critical_section(&locate_place_dialog_lock, "locate_gui.c:Locate_place" );
1272 
1273     XtPopup(locate_place_dialog,XtGrabNone);
1274 
1275     // Move focus to the Locate Now! button.  This appears to highlight the
1276     // button fine, but we're not able to hit the <Enter> key to
1277     // have that default function happen.  Note:  We _can_ hit the
1278     // <SPACE> key, and that activates the option.
1279 //        XmUpdateDisplay(locate_place_dialog);
1280     XmProcessTraversal(button_ok, XmTRAVERSE_CURRENT);
1281 
1282   }
1283   else
1284   {
1285     (void)XRaiseWindow(XtDisplay(locate_place_dialog), XtWindow(locate_place_dialog));
1286   }
1287 }
1288 
1289 
1290