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