805 lines
24 KiB
C
805 lines
24 KiB
C
#include "gui.h"
|
|
#include "sharp95.h"
|
|
|
|
/*
|
|
* private functions
|
|
*/
|
|
void _mapzoommdl ( void );
|
|
void model_list_cb (Widget wdgt, XtPointer clnt, XtPointer call);
|
|
void model_select_cb (Widget wdgt, XtPointer clnt, XtPointer call);
|
|
void mtime_select_cb (Widget wdgt, XtPointer clnt, XtPointer call);
|
|
void mod_time_select_cb (Widget wdgt, XtPointer clnt, XtPointer call);
|
|
void mapprojmdl_cb (Widget wdgt, XtPointer clnt, XtPointer call);
|
|
void mapzoommdl_cb (Widget wdgt, XtPointer clnt, XtPointer call);
|
|
void mapunzoommdl_cb (Widget wdgt, XtPointer clnt, XtPointer call);
|
|
void set_mdlsta (Widget wdgt, XtPointer clnt, XtPointer call);
|
|
|
|
|
|
extern char mtime_list[500][20], mdlsoundtime[20], mdlsoundsta[12],
|
|
mdl_selected[12];
|
|
extern char mdlsoundfile[200];
|
|
extern mapstruct mod_map;
|
|
|
|
extern Widget mdl_statext;
|
|
extern Widget mdl_cursor_text;
|
|
extern Widget mdl_map;
|
|
extern Widget toplevel;
|
|
|
|
|
|
static _NXMmenuItem *modmenu;
|
|
|
|
Widget mdl_list = NULL;
|
|
Widget mdlfile_timelist;
|
|
|
|
static char map_winname[]="grid_map";
|
|
|
|
void model_sounding_cb (Widget wid)
|
|
/************************************************************************
|
|
* SHOW_MODEL_INFO *
|
|
** *
|
|
* log: *
|
|
* R. Tian/SAIC 02/03 Added CPF ratio button *
|
|
* T. Piper/SAIC 01/04 Removed NAWIPS_TABLES *
|
|
* T. Piper/SAIC 01/04 NxmWarn_show *
|
|
***********************************************************************/
|
|
{
|
|
static Widget mdl_dialog = NULL, mdlpane, mdlform, mdlmenuform, mdlform2, mdlform3,
|
|
mdlfile_ok, mdlfile_cancel, mdlfile_help,
|
|
mdllbl_time, mdlstn_opt, mdltxtframe;
|
|
static Widget mdl_selW;
|
|
XmString one, two, thr, str, mdl_title;
|
|
int ii, nmap;
|
|
int ier;
|
|
Arg args[10];
|
|
Cardinal argcnt;
|
|
static Widget menubar, maparea_zoom, maparea_unzoom, button;
|
|
static Widget rowcol, radio_box;
|
|
|
|
|
|
static _NXMmenuItem mapmenu[30];
|
|
|
|
if (!mdl_dialog)
|
|
{
|
|
mdl_title = XmStringCreateLocalized ("Model Sounding Selection");
|
|
mdl_dialog = XmCreateBulletinBoardDialog (toplevel, "mdl_panel",
|
|
NULL, 0);
|
|
XtVaSetValues (mdl_dialog, XmNdialogTitle, mdl_title, NULL);
|
|
XmStringFree (mdl_title);
|
|
|
|
mdlpane = XtVaCreateManagedWidget ("parcel_pane",
|
|
xmPanedWindowWidgetClass,
|
|
mdl_dialog,
|
|
XmNsashWidth, 1,
|
|
XmNsashHeight, 1, NULL);
|
|
|
|
/*
|
|
* Create forms for areas of popup dialog
|
|
*/
|
|
|
|
/* Menu bar form */
|
|
mdlmenuform = XtVaCreateWidget ("form", xmFormWidgetClass, mdlpane, NULL);
|
|
|
|
/* data contols */
|
|
mdlform2 = XtVaCreateWidget ("form", xmFormWidgetClass, mdlpane,
|
|
XmNwidth, 800, XmNfractionBase, 7, NULL);
|
|
|
|
/* File and map selection form */
|
|
mdlform = XtVaCreateWidget ("form", xmFormWidgetClass,
|
|
mdlpane, XmNwidth, 800, XmNfractionBase, 7,
|
|
NULL);
|
|
|
|
/* lat/lon text box form */
|
|
mdlform3 = XtVaCreateWidget ("form", xmFormWidgetClass, mdlpane, NULL);
|
|
|
|
str = XmStringCreateLocalized ("Available Grid files:");
|
|
mdl_selW = XtVaCreateManagedWidget ("mdlfile_label",
|
|
xmLabelWidgetClass, mdlform2,
|
|
XmNlabelString, str,
|
|
XmNleftAttachment,
|
|
XmATTACH_POSITION, XmNleftPosition,
|
|
0, XmNtopAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
XmStringFree (str);
|
|
|
|
|
|
mdl_list = XmCreateScrolledList (mdlform2, "mdl_times", NULL, 0);
|
|
XtVaSetValues (mdl_list, XmNvisibleItemCount, 3,
|
|
XmNselectionPolicy, XmEXTENDED_SELECT, NULL);
|
|
XtVaSetValues (XtParent (mdl_list),
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, mdl_selW,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 3, NULL);
|
|
XtAddCallback (mdl_list,
|
|
XmNextendedSelectionCallback, model_select_cb, NULL);
|
|
|
|
XtManageChild (mdl_list);
|
|
/*
|
|
* Create file and map selection widgets first. The
|
|
* map canvas events will be set for use by menubar later.
|
|
*/
|
|
mdl_statext = XtVaCreateManagedWidget ("mdl_statext",
|
|
xmTextWidgetClass, mdlform2,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNwidth, 250, NULL);
|
|
|
|
XtAddCallback (mdl_statext, XmNvalueChangedCallback, set_mdlsta, NULL);
|
|
XtAddCallback (mdl_statext, XmNactivateCallback, (XtCallbackProc) Load_mdl_sounding, mdl_list);
|
|
|
|
|
|
str = XmStringCreateLocalized ("Location:");
|
|
XtVaCreateManagedWidget ("mdlsta_label",
|
|
xmLabelWidgetClass, mdlform2,
|
|
XmNlabelString, str,
|
|
XmNrightAttachment, XmATTACH_WIDGET,
|
|
XmNrightWidget, mdl_statext,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
XmStringFree (str);
|
|
|
|
|
|
/*
|
|
* Create a RowColumn Widget for radio buttons
|
|
*/
|
|
rowcol = XtVaCreateManagedWidget ("Rc",
|
|
xmRowColumnWidgetClass, mdlform2,
|
|
XmNorientation, XmHORIZONTAL,
|
|
XmNnumColumns, 2,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
NULL);
|
|
|
|
one = XmStringCreateLocalized ("Lat/Lon");
|
|
two = XmStringCreateLocalized ("Station");
|
|
thr = XmStringCreateLocalized ("CPF");
|
|
|
|
radio_box = XmVaCreateSimpleRadioBox (rowcol,
|
|
"radio", 0,
|
|
(XtCallbackProc) mdl_cursor_fmt,
|
|
XmVaRADIOBUTTON, one, NULL, NULL,
|
|
NULL, XmVaRADIOBUTTON, two, NULL,
|
|
NULL, NULL, XmVaRADIOBUTTON, thr,
|
|
NULL, NULL, NULL, XmNorientation,
|
|
XmHORIZONTAL, NULL);
|
|
|
|
XmStringFree (one);
|
|
XmStringFree (two);
|
|
XmStringFree (thr);
|
|
|
|
XtManageChild (radio_box);
|
|
|
|
XtManageChild (mdlform2);
|
|
|
|
str = XmStringCreateLocalized ("Model times:");
|
|
mdllbl_time = XtVaCreateManagedWidget ("mdlfile_time",
|
|
xmLabelWidgetClass, mdlform,
|
|
XmNlabelString, str,
|
|
XmNleftAttachment,
|
|
XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNtopAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_POSITION,
|
|
XmNrightPosition, 2,
|
|
XmNalignment,
|
|
XmALIGNMENT_BEGINNING, NULL);
|
|
XmStringFree (str);
|
|
|
|
mdl_map = XtVaCreateManagedWidget ("map",
|
|
xmDrawingAreaWidgetClass, mdlform,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, mdllbl_time,
|
|
XmNrightAttachment, XmATTACH_FORM,
|
|
XmNwidth, 560,
|
|
XmNheight, 560,
|
|
XmNbackground, pixels[0], NULL);
|
|
|
|
argcnt = 0;
|
|
XtSetArg (args[argcnt], XmNlistSizePolicy, XmCONSTANT);
|
|
XtSetArg (args[argcnt], XmNselectionPolicy, XmEXTENDED_SELECT);
|
|
argcnt++;
|
|
|
|
mdlfile_timelist =
|
|
XmCreateScrolledList (mdlform, "times", args, argcnt);
|
|
|
|
/*XtVaSetValues (mdlfile_timelist, XmNvisibleItemCount, 10, NULL); */
|
|
|
|
|
|
XtVaSetValues (XtParent (mdlfile_timelist),
|
|
XmNleftAttachment, XmATTACH_POSITION,
|
|
XmNleftPosition, 0,
|
|
XmNtopAttachment, XmATTACH_WIDGET,
|
|
XmNtopWidget, mdllbl_time,
|
|
XmNbottomAttachment, XmATTACH_FORM,
|
|
XmNrightAttachment, XmATTACH_WIDGET,
|
|
XmNrightWidget, mdl_map, NULL);
|
|
|
|
XtAddCallback (mdlfile_timelist,
|
|
XmNextendedSelectionCallback,
|
|
mod_time_select_cb, (XtPointer) mdl_list);
|
|
|
|
XtManageChild (mdlfile_timelist);
|
|
|
|
|
|
/* ----- "mouse moved" event handler for cursor position----- */
|
|
XtAddEventHandler (mdl_map, PointerMotionMask, FALSE,
|
|
(XtEventHandler) mdl_pointer, (XtPointer) NULL);
|
|
|
|
XtAddCallback (mdl_map, XmNexposeCallback,
|
|
(XtCallbackProc) mapw_exposeCb, NULL);
|
|
plotData.mode = STNSELECT;
|
|
|
|
/* ----- "button pressed" event handler for cursor position----- */
|
|
XtAddEventHandler (mdl_map, ButtonPressMask,
|
|
FALSE, (XtEventHandler) modmap_selCb, NULL);
|
|
|
|
XtManageChild (mdlform);
|
|
|
|
/*
|
|
* create the menubar for top form
|
|
*/
|
|
argcnt = 0;
|
|
XtSetArg (args[argcnt], XmNtopAttachment, XmATTACH_FORM);
|
|
argcnt++;
|
|
XtSetArg (args[argcnt], XmNleftAttachment, XmATTACH_POSITION);
|
|
argcnt++;
|
|
XtSetArg (args[argcnt], XmNleftPosition, 0);
|
|
argcnt++;
|
|
XtSetArg (args[argcnt], XmNrightAttachment, XmATTACH_FORM);
|
|
argcnt++;
|
|
|
|
menubar = XmCreateMenuBar (mdlmenuform, "menubar", args, argcnt);
|
|
|
|
argcnt = 0;
|
|
XtSetArg (args[argcnt], XmNborderWidth, 1);
|
|
argcnt++;
|
|
|
|
modmenu = NULL;
|
|
file_selection_menu ("nsharp_models.tbl", "nsharp", &modmenu,
|
|
(XtCallbackProc)model_list_cb, &ier);
|
|
if (ier != 0)
|
|
{
|
|
NxmWarn_show (mdlform,
|
|
"NSHARP: ERROR opening $GEMTBL/nsharp/nsharp_models.tbl\nSee system admin istrator.");
|
|
mdl_dialog = NULL;
|
|
return;
|
|
}
|
|
|
|
mdlstn_opt = NxmMenuPulldownBuild (menubar, NULL, "Select Model",
|
|
0, modmenu);
|
|
XtSetValues (mdlstn_opt, args, argcnt);
|
|
|
|
/*
|
|
* Create Map pulldown menu
|
|
*
|
|
* Set the items for the menu bar for the map areas.
|
|
*/
|
|
nmap = nwxTable->nmap;
|
|
for (ii = 0; ii < nmap; ii++)
|
|
{
|
|
mapmenu[ii].label = (char *)
|
|
malloc (strlen (nwxTable->map_info[ii].name) + 1);
|
|
strcpy (mapmenu[ii].label, nwxTable->map_info[ii].name);
|
|
mapmenu[ii].class = &xmCascadeButtonGadgetClass;
|
|
mapmenu[ii].mnemonic = 0;
|
|
mapmenu[ii].accelerator = NULL;
|
|
mapmenu[ii].accel_text = NULL;
|
|
mapmenu[ii].callback = mapprojmdl_cb;
|
|
mapmenu[ii].which_widget = (long)ii;
|
|
mapmenu[ii].subitems = NULL;
|
|
mapmenu[ii].sub_buttons = NULL;
|
|
}
|
|
mapmenu[nmap].label = NULL;
|
|
mapmenu[nmap].class = &xmCascadeButtonGadgetClass;
|
|
mapmenu[nmap].mnemonic = 0;
|
|
mapmenu[nmap].accelerator = NULL;
|
|
mapmenu[nmap].accel_text = NULL;
|
|
mapmenu[nmap].callback = NULL;
|
|
mapmenu[nmap].which_widget = (long)nmap;
|
|
mapmenu[nmap].subitems = NULL;
|
|
mapmenu[nmap].sub_buttons = NULL;
|
|
|
|
NxmMenuPulldownBuild (menubar, NULL, "Area", 0, mapmenu);
|
|
for (ii = 0; ii < nmap; ii++)
|
|
free (mapmenu[ii].label);
|
|
|
|
if ((button = XtNameToWidget (menubar, "Area")))
|
|
XtSetValues (button, args, argcnt);
|
|
|
|
maparea_zoom = XmCreateCascadeButton (menubar, "Zoom", NULL, 0);
|
|
XtAddCallback (maparea_zoom, XmNactivateCallback,
|
|
(XtCallbackProc) mapzoommdl_cb, mdl_map);
|
|
XtSetValues (maparea_zoom, args, argcnt);
|
|
XtManageChild (maparea_zoom);
|
|
|
|
|
|
maparea_unzoom = XmCreateCascadeButton (menubar, "UnZoom", NULL, 0);
|
|
XtAddCallback (maparea_unzoom, XmNactivateCallback,
|
|
(XtCallbackProc) mapunzoommdl_cb, mdl_map);
|
|
XtSetValues (maparea_unzoom, args, argcnt);
|
|
XtManageChild (maparea_unzoom);
|
|
|
|
|
|
mdlfile_ok = XmCreateCascadeButton (menubar, "OK", NULL, 0);
|
|
XtAddCallback (mdlfile_ok, XmNactivateCallback,
|
|
(XtCallbackProc) popdown_cb, mdl_dialog);
|
|
XtAddCallback (mdlfile_ok, XmNactivateCallback,
|
|
(XtCallbackProc) Load_mdl_sounding, mdl_list);
|
|
XtSetValues (mdlfile_ok, args, argcnt);
|
|
XtManageChild (mdlfile_ok);
|
|
|
|
mdlfile_cancel = XmCreateCascadeButton (menubar, "Cancel", NULL, 0);
|
|
XtAddCallback (mdlfile_cancel, XmNactivateCallback,
|
|
(XtCallbackProc) popdown_cb, mdl_dialog);
|
|
XtSetValues (mdlfile_cancel, args, argcnt);
|
|
XtManageChild (mdlfile_cancel);
|
|
mdlfile_help = XmCreateCascadeButton (menubar, "Help", NULL, 0);
|
|
XtSetValues (mdlfile_help, args, argcnt);
|
|
XtAddCallback (mdlfile_help, XmNactivateCallback,
|
|
(XtCallbackProc) NxmHelp_helpBtnCb, (XtPointer) 4);
|
|
XtManageChild (mdlfile_help);
|
|
|
|
XtVaSetValues (menubar, XmNmenuHelpWidget, mdlfile_help, NULL);
|
|
XtManageChild (menubar);
|
|
|
|
XtManageChild (mdlmenuform);
|
|
|
|
/*
|
|
* create lat/lon cursor info widget
|
|
*/
|
|
mdltxtframe = XtVaCreateManagedWidget ("mdl_latlonFrame",
|
|
xmFrameWidgetClass, mdlform3,
|
|
XmNrightAttachment,
|
|
XmATTACH_FORM,
|
|
XmNbottomAttachment,
|
|
XmATTACH_FORM, XmNtopAttachment,
|
|
XmATTACH_FORM, XmNshadowType,
|
|
XmSHADOW_IN, NULL);
|
|
|
|
str = XmStringCreateLocalized ("------;-------");
|
|
mdl_cursor_text = XtVaCreateManagedWidget ("cursor_text",
|
|
xmLabelWidgetClass,
|
|
mdltxtframe, XmNlabelString,
|
|
str, XmNrecomputeSize, False,
|
|
XmNwidth, 85, NULL);
|
|
XmStringFree (str);
|
|
|
|
XtManageChild (mdlform3);
|
|
XtManageChild (mdlpane);
|
|
XtManageChild (mdl_dialog);
|
|
|
|
mod_map.mapindx = 0;
|
|
mod_map.zoomflg = 0;
|
|
ii = nsharp_mapw_rgstr (mdl_map, map_winname);
|
|
|
|
XtAddCallback (mdl_map, XmNresizeCallback,
|
|
(XtCallbackProc) mapw_resizeCb, NULL);
|
|
|
|
}
|
|
XtManageChild (mdl_dialog);
|
|
|
|
gslwin (map_winname, &ier, strlen (map_winname));
|
|
|
|
nsharp_draw_map (map_winname, &mod_map, &ier);
|
|
|
|
}
|
|
|
|
/*========================================================================*/
|
|
/* ARGSUSED */
|
|
void model_list_cb (Widget wdgt, XtPointer clnt, XtPointer call)
|
|
/*************************************************************
|
|
* MODELLIST_CB *
|
|
************************************************************/
|
|
{
|
|
int ii, ier, lens;
|
|
char tmp_str[80];
|
|
char path[256], tmpl[256];
|
|
/* static int only_f000 = 0; */
|
|
|
|
if (wdgt == NULL)
|
|
{
|
|
printf ("look wdgt is null\n");
|
|
return;
|
|
}
|
|
|
|
if (XtIsSubclass (wdgt, xmToggleButtonWidgetClass))
|
|
{
|
|
/* toggling f000 only on/of */
|
|
Boolean is_set;
|
|
|
|
XtVaGetValues (wdgt, XmNset, &is_set, NULL);
|
|
/* if (is_set)
|
|
only_f000 = 1;
|
|
else
|
|
only_f000 = 0; NOT used */
|
|
}
|
|
else if (!XtIsSubclass (wdgt, xmFileSelectionBoxWidgetClass))
|
|
{
|
|
/* Cascade menu entry */
|
|
char *choice;
|
|
XmString label_str;
|
|
|
|
XtVaGetValues (wdgt, XmNlabelString, &label_str, NULL);
|
|
choice = XmStringUnparse (label_str, NULL, XmCHARSET_TEXT,
|
|
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
|
|
XmStringFree (label_str);
|
|
|
|
if ((choice[0] == '\0') || (strcmp (choice, "BROWSE") == 0))
|
|
{
|
|
sprintf (tmpl, "*");
|
|
sprintf (path, ".");
|
|
}
|
|
else
|
|
{
|
|
int ncyc;
|
|
char sep[] = ";";
|
|
char *flist, *spos, *epos;
|
|
XmStringTable str_list;
|
|
#define SOMESIZE 200000
|
|
|
|
flist = (char *) malloc (SOMESIZE);
|
|
gd_gcyc (choice, sep, &ncyc, flist, &ier,
|
|
strlen(choice), strlen(sep), SOMESIZE);
|
|
if (ier == 0 && ncyc > 0) {
|
|
st_null(flist, flist, &lens, &ier, SOMESIZE, SOMESIZE);
|
|
|
|
str_list = (XmStringTable) XtMalloc ((size_t) ncyc *
|
|
sizeof (XmString *));
|
|
|
|
epos = flist;
|
|
ii = 0;
|
|
while (epos != NULL)
|
|
{
|
|
epos = strrchr (flist, sep[0]);
|
|
if (epos != NULL)
|
|
spos = epos + 1;
|
|
else
|
|
spos = flist;
|
|
if (epos != NULL)
|
|
epos[0] = '\0';
|
|
sprintf (tmp_str, "%s %s", choice, spos);
|
|
str_list[ii] = XmStringCreateLocalized (tmp_str);
|
|
ii++;
|
|
}
|
|
ncyc = ii;
|
|
XtVaSetValues (mdl_list, XmNitemCount, ncyc, XmNitems, str_list,
|
|
NULL);
|
|
XmListDeselectAllItems (mdl_list);
|
|
|
|
for (ii = 0; ii < ncyc; ii++)
|
|
XmStringFree ((XmString) str_list[ii]);
|
|
XtFree ((XtPointer) str_list);
|
|
XmListDeleteAllItems (mdlfile_timelist); /* clear all times in list */
|
|
}
|
|
|
|
free (flist);
|
|
|
|
strcpy (tmpl, choice);
|
|
}
|
|
XtFree (choice);
|
|
if (strcmp (tmpl, "*") == 0)
|
|
{
|
|
file_browse_popup (path, tmpl, toplevel, model_list_cb);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/* file selection dialog entry of a single file */
|
|
char *choice;
|
|
XmFileSelectionBoxCallbackStruct *cbs =
|
|
(XmFileSelectionBoxCallbackStruct *) call;
|
|
|
|
if (cbs)
|
|
{
|
|
XmStringTable str_list;
|
|
|
|
choice = XmStringUnparse (cbs->value, NULL, XmCHARSET_TEXT,
|
|
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
|
|
str_list = (XmStringTable) XtMalloc (1 * sizeof (XmString *));
|
|
str_list[0] = cbs->value;
|
|
XtVaSetValues (mdl_list, XmNitemCount, 1, XmNitems, str_list, NULL);
|
|
XmListDeselectAllItems (mdl_list);
|
|
XmListDeleteAllItems (mdlfile_timelist); /* clear all times in list */
|
|
XmListSelectPos (mdl_list, 1, True);
|
|
XtFree ((XtPointer) str_list);
|
|
XtFree (choice);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/*=====================================================================*/
|
|
/* ARGSUSED */
|
|
void model_select_cb (Widget wdgt, XtPointer clnt, XtPointer call)
|
|
/* Log: *
|
|
* T. Piper/SAIC 12/04 Added free(tarr) *
|
|
*******************************************************************************/
|
|
{
|
|
int ii, jj, ier, sumpos = 0;
|
|
char *choice;
|
|
XmListCallbackStruct *cbs = (XmListCallbackStruct *) call;
|
|
XmStringTable str_list;
|
|
XtPointer userdata;
|
|
struct mlist_struct *mlist;
|
|
int *tarr;
|
|
|
|
if (cbs->reason == XmCR_EXTENDED_SELECT)
|
|
{
|
|
if (cbs->selected_item_count == 0)
|
|
return;
|
|
XtVaGetValues (wdgt, XmNuserData, &userdata, NULL);
|
|
if (userdata == NULL)
|
|
{
|
|
mlist =
|
|
(struct mlist_struct *) malloc (sizeof (struct mlist_struct));
|
|
mlist->ftim = 0;
|
|
mlist->posindex = NULL;
|
|
mlist->nselect = 0;
|
|
XtVaSetValues (wdgt, XmNuserData, (XtPointer) mlist, NULL);
|
|
}
|
|
else
|
|
mlist = (struct mlist_struct *) userdata;
|
|
|
|
if (mlist->posindex != NULL)
|
|
{
|
|
free (mlist->posindex);
|
|
mlist->posindex = NULL;
|
|
mlist->ftim = 0;
|
|
}
|
|
|
|
tarr = (int *) malloc (cbs->selected_item_count * sizeof (int));
|
|
for (ii = cbs->selected_item_count - 1; ii >= 0; ii--)
|
|
{
|
|
int ngdftm, maxt = 500; /* maxt size of mtime_list */
|
|
char cycle[] = " ";
|
|
char gdfile[256], gdatim[256];
|
|
char *spos;
|
|
|
|
choice = XmStringUnparse (cbs->selected_items[ii], NULL, XmCHARSET_TEXT,
|
|
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
|
|
spos = strchr (choice, ' ');
|
|
if (spos != NULL)
|
|
{
|
|
gdfile[0] = '\0';
|
|
strncat (gdfile, choice, spos - choice);
|
|
spos++;
|
|
strcpy (gdatim, spos);
|
|
gd_gtmf (gdfile, gdatim, cycle, &maxt, &ngdftm, mtime_list,
|
|
&ier, strlen (gdfile), strlen (gdatim), strlen (cycle),
|
|
20 /* mtime_list size */ );
|
|
}
|
|
else
|
|
{
|
|
int nfiles = 1;
|
|
gd_fltm (choice, &nfiles, &maxt, &ngdftm, mtime_list, &ier,
|
|
strlen (choice), 20 /* mtime_list size */ );
|
|
}
|
|
if (ier == 0 && ngdftm > 0)
|
|
{
|
|
int jj;
|
|
str_list = (XmStringTable) XtMalloc ((size_t) ngdftm *
|
|
sizeof (XmString *));
|
|
for (jj = 0; jj < ngdftm; jj++)
|
|
{
|
|
int lens;
|
|
mtime_list[jj][19] = '\0';
|
|
lens = strcspn (mtime_list[jj], "\t \0");
|
|
mtime_list[jj][lens] = '\0';
|
|
str_list[jj] = XmStringCreateLocalized (mtime_list[jj]);
|
|
}
|
|
if (sumpos == 0)
|
|
XtVaSetValues (mdlfile_timelist, XmNitemCount, ngdftm,
|
|
XmNitems, str_list, NULL);
|
|
else
|
|
XmListAddItems (mdlfile_timelist, str_list, ngdftm,
|
|
sumpos + 1);
|
|
|
|
for (jj = 0; jj < ngdftm; jj++)
|
|
XmStringFree ((XmString) str_list[jj]);
|
|
XtFree ((XtPointer) str_list);
|
|
sumpos = sumpos + ngdftm;
|
|
tarr[ii] = sumpos;
|
|
}
|
|
else
|
|
tarr[ii] = -1;
|
|
|
|
XtFree (choice);
|
|
}
|
|
XmListDeselectAllItems (mdlfile_timelist);
|
|
|
|
mlist->posindex = (int *) malloc (sumpos * sizeof (int));
|
|
mlist->ftim = sumpos;
|
|
|
|
jj = 0;
|
|
ii = cbs->selected_item_count - 1;
|
|
while (jj < sumpos)
|
|
{
|
|
if (jj < tarr[ii])
|
|
{
|
|
mlist->posindex[jj] = cbs->selected_item_positions[ii];
|
|
jj++;
|
|
}
|
|
else
|
|
ii--;
|
|
}
|
|
free(tarr);
|
|
}
|
|
}
|
|
|
|
/*=====================================================================*/
|
|
/* ARGSUSED */
|
|
void mod_time_select_cb (Widget wdgt, XtPointer clnt, XtPointer call)
|
|
/*************************************************************/
|
|
/* MOD_TIME_SELECT_CB */
|
|
/*Log: *
|
|
* T. Piper/SAIC 12/04 Corrected free for model, cycle, & fhour*
|
|
* T. Piper/SAIC 12/04 Corrected malloc for cycle *
|
|
***********************************************************************/
|
|
{
|
|
XmListCallbackStruct *cbs = (XmListCallbackStruct *) call;
|
|
Widget cycles = (Widget)clnt;
|
|
char *choice;
|
|
XtPointer userdata;
|
|
XmStringTable item_list;
|
|
int ii, jj;
|
|
struct mlist_struct *mlist;
|
|
|
|
if (cbs->reason == XmCR_EXTENDED_SELECT)
|
|
{
|
|
if (cbs->selected_item_count == 0)
|
|
return;
|
|
|
|
XtVaGetValues (cycles, XmNuserData, &userdata, NULL);
|
|
if (userdata == NULL)
|
|
{
|
|
printf ("userdata is null\n");
|
|
return;
|
|
}
|
|
mlist = (struct mlist_struct *) userdata;
|
|
|
|
XtVaGetValues (cycles, XmNitems, &item_list, NULL);
|
|
if ( mlist->nselect > 0 )
|
|
{
|
|
for (ii = 0; ii < mlist->nselect; ii++)
|
|
{
|
|
free (mlist->modlist[ii].model);
|
|
free (mlist->modlist[ii].cycle);
|
|
free (mlist->modlist[ii].fhour);
|
|
}
|
|
free (mlist->modlist);
|
|
}
|
|
|
|
mlist->nselect = cbs->selected_item_count;
|
|
mlist->modlist =
|
|
(struct modfile_struct *) malloc (mlist->nselect *
|
|
sizeof (struct modfile_struct));
|
|
|
|
for (ii = 0; ii < cbs->selected_item_count; ii++)
|
|
{
|
|
char *spos;
|
|
choice = XmStringUnparse (cbs->selected_items[ii], NULL, XmCHARSET_TEXT,
|
|
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
|
|
mlist->modlist[ii].fhour = (char *) malloc (strlen (choice) + 1);
|
|
strcpy (mlist->modlist[ii].fhour, choice);
|
|
XtFree (choice);
|
|
|
|
|
|
jj = cbs->selected_item_positions[ii];
|
|
choice = XmStringUnparse (item_list[mlist->posindex[jj - 1] - 1],
|
|
NULL, XmCHARSET_TEXT, XmCHARSET_TEXT,
|
|
NULL, 0, XmOUTPUT_ALL);
|
|
|
|
if ((spos = strchr (choice, ' ')) != NULL)
|
|
{
|
|
mlist->modlist[ii].model = (char *) malloc ((spos - choice) + 1);
|
|
mlist->modlist[ii].model[0] = '\0';
|
|
strncat (mlist->modlist[ii].model, choice, spos - choice);
|
|
spos++;
|
|
mlist->modlist[ii].cycle = (char *) malloc (strlen (spos) + 1);
|
|
strcpy (mlist->modlist[ii].cycle, spos);
|
|
}
|
|
else
|
|
{
|
|
mlist->modlist[ii].model = (char *) malloc (strlen (choice) + 1);
|
|
strcpy (mlist->modlist[ii].model, choice);
|
|
mlist->modlist[ii].cycle = (char *) malloc (2);
|
|
strcpy (mlist->modlist[ii].cycle, "*");
|
|
}
|
|
XtFree (choice);
|
|
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
choice = XmStringUnparse (cbs->item, NULL, XmCHARSET_TEXT,
|
|
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
|
|
strcpy (mdlsoundtime, choice);
|
|
XtFree (choice);
|
|
}
|
|
|
|
}
|
|
|
|
/*========================================================================*/
|
|
/* ARGSUSED */
|
|
void mtime_select_cb ( Widget wdgt, XtPointer clnt, XtPointer call )
|
|
/*************************************************************/
|
|
/* MTIME_SELECT_CB */
|
|
/*************************************************************/
|
|
{
|
|
XmListCallbackStruct *cbs = (XmListCallbackStruct *)call;
|
|
char *choice;
|
|
|
|
choice = XmStringUnparse (cbs->item, NULL, XmCHARSET_TEXT,
|
|
XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL);
|
|
strcpy ( mdlsoundtime, choice );
|
|
XtFree (choice);
|
|
|
|
}
|
|
|
|
/*========================================================================*/
|
|
/* ARGSUSED */
|
|
void set_mdlsta ( Widget wdgt, XtPointer clnt, XtPointer call )
|
|
/*************************************************************/
|
|
/* SET_MDLSTA */
|
|
/*************************************************************/
|
|
{
|
|
char *text_sta;
|
|
|
|
text_sta = XmTextGetString (wdgt);
|
|
|
|
if ( text_sta != NULL )
|
|
strcpy ( mdlsoundsta, text_sta );
|
|
|
|
XtFree(text_sta);
|
|
}
|
|
|
|
|
|
/*========================================================================*/
|
|
/* ARGSUSED */
|
|
void mapprojmdl_cb ( Widget wdgt, XtPointer clnt, XtPointer call )
|
|
{
|
|
int item_no = (long)clnt;
|
|
int ier;
|
|
|
|
mod_map.mapindx = item_no;
|
|
mod_map.zoomflg = 0;
|
|
nsharp_draw_map ( map_winname, &mod_map, &ier);
|
|
}
|
|
|
|
/*========================================================================*/
|
|
/* ARGSUSED */
|
|
void mapunzoommdl_cb ( Widget wdgt, XtPointer clnt, XtPointer call )
|
|
{
|
|
int ier;
|
|
|
|
mod_map.zoomflg = 0;
|
|
|
|
nsharp_draw_map ( map_winname, &mod_map, &ier);
|
|
}
|
|
|
|
/*========================================================================*/
|
|
|
|
void _mapzoommdl ( void )
|
|
{
|
|
int ier;
|
|
nsharp_draw_map ( map_winname, &mod_map, &ier);
|
|
}
|
|
|
|
/*========================================================================*/
|
|
/* ARGSUSED */
|
|
void mapzoommdl_cb ( Widget wdgt, XtPointer clnt, XtPointer call )
|
|
{
|
|
Widget mapCanvW = (Widget) clnt;
|
|
|
|
XtRemoveEventHandler( mapCanvW, PointerMotionMask, FALSE,
|
|
(XtEventHandler)mdl_pointer, NULL );
|
|
|
|
_mapzoom_cb ( mapCanvW, NULL, &mod_map, _mapzoommdl );
|
|
|
|
XtAddEventHandler( mapCanvW, PointerMotionMask, FALSE,
|
|
(XtEventHandler)mdl_pointer, (XtPointer)NULL );
|
|
}
|