/* * ACE/vis - Visualization of Flow and Transport * * Paul J. Turner and Antonio M. Baptista * * Copyright 1990-2003 Oregon Health and Science University * All Rights Reserved * */ /* * * set grid properties * */ #ifndef lint static char RCSid[] = "$Id: gridwin.c,v 1.3 2005/04/07 14:17:02 pturner Exp $"; #endif #include "motifinc.h" #include "defines.h" #include "globals.h" extern XmStringCharSet charset; static Widget grid_frame; static Widget grid_panel; void create_grid_frame(void); /* * Widget item declarations */ static Widget *grid_choice_item; static Widget grid_display_item; static Widget grid_bath_item; static Widget grid_bound_item; static Widget grid_nodes_item; static Widget grid_elements_item; static Widget grid_depths_item; static Widget grid_cour_item; static Widget grid_courn_item; /* static Widget grid_dimw_item; */ static Widget grid_filled_item; static Widget *grid_color_choice_item; static Widget *grid_fillcolor_choice_item; static Widget *grid_lines_choice_item; static Widget *grid_linew_choice_item; static Widget *grid_bcolor_choice_item; static Widget *grid_blines_choice_item; static Widget *grid_blinew_choice_item; static Widget *grid_fillbg_choice_item; static Widget *grid_bgcolor_choice_item; static Widget *grid_applyto_choice_item; /* * Event and Notify proc declarations */ static Widget gridio_frame; static Widget *gridio_item; static Widget gridio_swap_item; /* * Event and Notify proc declarations */ void gridio_done_proc(void); void gridio_accept_proc(void); static void grid_Done_notify_proc(void); static void grid_isolines_notify_proc(void); static void grid_define_notify_proc(void); void update_grid_items(int gno); /* * Create the grid Frame and the grid Panel */ extern Widget app_shell; void set_curgrid(Widget w, int cd) { g[cg].curgrid = cd; update_grid_items(cg); } void create_gridio_frame(void) { Widget wbut, rc; int i; setistop(); if (!gridio_frame) { gridio_frame = XmCreateFileSelectionDialog(app_shell, "Read data", NULL, 0); XtVaSetValues(gridio_frame, XmNdirMask, XmStringCreate("*.gr*", charset), NULL); rc = XmCreateRowColumn(gridio_frame, "rc", NULL, 0); gridio_item = CreatePanelChoice1(rc, "Read to grid: ", 6, "1", "2", "3", "4", "5", 0, 0); for (i = 0; i < MAXGRIDS; i++) { XtAddCallback(gridio_item[i + 2], XmNactivateCallback, (XtCallbackProc) set_curgrid, (XtPointer) i); } gridio_swap_item = XtVaCreateManagedWidget("Swap bytes", xmToggleButtonWidgetClass, rc, NULL); XtManageChild(rc); XtAddCallback(gridio_frame, XmNcancelCallback, (XtCallbackProc) gridio_done_proc, NULL); XtAddCallback(gridio_frame, XmNokCallback, (XtCallbackProc) gridio_accept_proc, NULL); } XtRaise(gridio_frame); XmToggleButtonSetState(gridio_swap_item, swapBytes, False); update_grid_items(cg); } void gridio_done_proc(void) { XtUnmanageChild(gridio_frame); } void gridio_accept_proc(void) { Arg args; XmString list_item; char *s, buf[256]; int gridno; Widget textw; XtSetArg(args, XmNtextString, &list_item); XtGetValues(gridio_frame, &args, 1); XmStringGetLtoR(list_item, charset, &s); swapBytes = XmToggleButtonGetState(gridio_swap_item); gridno = GetChoice(gridio_item); if (grid[gridno].active == ON) { if (!yesno("Grid is active, kill it ?", " ", " YES ", " NO ")) { return; } } set_wait_cursor(gridio_frame); if (!readgrid(gridno, s)) { sprintf(buf, "Error reading file %s", s); errwin(buf); } else { XtUnmanageChild(gridio_frame); compute_boundary(gridno); create_grid_frame(); } unset_wait_cursor(gridio_frame); } void update_grid_items(int gno) { int gd; int c = g[gno].curgrid; if (grid_frame) { SetChoice(grid_choice_item, c); XmToggleButtonSetState(grid_display_item, g[gno].grid[c].display == ON, False); XmToggleButtonSetState(grid_bath_item, g[gno].grid[c].display_bath == ON, False); XmToggleButtonSetState(grid_bound_item, g[gno].grid[c].display_boundary == ON, False); XmToggleButtonSetState(grid_nodes_item, g[gno].grid[c].display_nodes == ON, False); XmToggleButtonSetState(grid_elements_item, g[gno].grid[c].display_elements == ON, False); XmToggleButtonSetState(grid_depths_item, g[gno].grid[c].display_depths == ON, False); XmToggleButtonSetState(grid_filled_item, g[gno].grid[c].display_gridf == ON, False); XmToggleButtonSetState(grid_cour_item, g[gno].grid[gno].display_courant == ON, False); XmToggleButtonSetState(grid_courn_item, g[gno].grid[gno].display_courantn == ON, False); /* XmToggleButtonSetState(grid_dimw_item, g[gno].grid[curgrid].display_dimw == ON, False); */ SetChoice(grid_color_choice_item, g[gno].grid[c].p.color); SetChoice(grid_fillcolor_choice_item, g[gno].grid[c].p.fillcol); SetChoice(grid_linew_choice_item, g[gno].grid[c].p.linew - 1); SetChoice(grid_lines_choice_item, g[gno].grid[c].p.lines - 1); SetChoice(grid_bcolor_choice_item, g[gno].grid[c].bp.color); SetChoice(grid_blinew_choice_item, g[gno].grid[c].bp.linew - 1); SetChoice(grid_blines_choice_item, g[gno].grid[c].bp.lines - 1); SetChoice(grid_fillbg_choice_item, g[gno].grid[c].bp.fill == ON); SetChoice(grid_bgcolor_choice_item, g[gno].grid[c].bp.fillcol == ON); } } void compute_grid_boundary(void) { int gridno = GetChoice(grid_choice_item); if (grid[gridno].active == ON) { compute_boundary(gridno); } } /* * Create the frame Widget and the frame Widget */ void create_grid_frame(void) { extern Widget app_shell; Widget wbut, lab, rc, rc2, fr; if (grid_frame) { update_grid_items(cg); XtRaise(grid_frame); return; } grid_frame = XmCreateDialogShell(app_shell, "Grid setup", NULL, 0); handle_close(grid_frame); grid_panel = XmCreateRowColumn(grid_frame, "panel", NULL, 0); XtVaSetValues(grid_panel, XmNorientation, XmHORIZONTAL, NULL); rc2 = XmCreateRowColumn(grid_panel, "rc2", NULL, 0); grid_choice_item = CreatePanelChoice1(rc2, "Apply to grid:", 6, "1", "2", "3", "4", "5", NULL, NULL); fr = XmCreateFrame(rc2, "fr", NULL, 0); rc = XmCreateRowColumn(fr, "rc", NULL, 0); lab = XmCreateLabel(rc, "Display:", NULL, 0); XtManageChild(lab); grid_display_item = XmCreateToggleButton(rc, "Grid", NULL, 0); grid_bath_item = XmCreateToggleButton(rc, "Bathymetry", NULL, 0); grid_bound_item = XmCreateToggleButton(rc, "Grid boundary", NULL, 0); grid_nodes_item = XmCreateToggleButton(rc, "Grid node numbers", NULL, 0); grid_elements_item = XmCreateToggleButton(rc, "Grid element numbers", NULL, 0); grid_depths_item = XmCreateToggleButton(rc, "Grid nodal depths", NULL, 0); grid_filled_item = XmCreateToggleButton(rc, "Grid filled", NULL, 0); grid_cour_item = XmCreateToggleButton(rc, "Grid Courant graph", NULL, 0); grid_courn_item = XmCreateToggleButton(rc, "Grid Courant numbers", NULL, 0); /* grid_dimw_item = XmCreateToggleButton(rc, "Grid dimensionless wavelength", NULL, 0); */ XtManageChild(grid_display_item); XtManageChild(grid_bath_item); XtManageChild(grid_bound_item); XtManageChild(grid_nodes_item); XtManageChild(grid_elements_item); XtManageChild(grid_depths_item); XtManageChild(grid_cour_item); XtManageChild(grid_courn_item); /* XtManageChild(grid_dimw_item); */ XtManageChild(grid_filled_item); XtManageChild(rc); XtManageChild(fr); XtManageChild(rc2); rc2 = XmCreateRowColumn(grid_panel, "rc2", NULL, 0); fr = XmCreateFrame(rc2, "fr", NULL, 0); rc = XmCreateRowColumn(fr, "rc", NULL, 0); grid_color_choice_item = CreateColorChoice(rc, "Grid color:", 1); grid_fillcolor_choice_item = CreateColorChoice(rc, "Grid fill color:", 1); grid_linew_choice_item = CreatePanelChoice1(rc, "Line width:", 10, "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL, NULL); grid_lines_choice_item = CreatePanelChoice1(rc, "Line style:", 6, "Solid line", "Dotted line", "Dashed line", "Long Dashed", "Dot-dashed", NULL, NULL); XtManageChild(rc); XtManageChild(fr); fr = XmCreateFrame(rc2, "fr", NULL, 0); rc = XmCreateRowColumn(fr, "rc", NULL, 0); grid_bcolor_choice_item = CreateColorChoice(rc, "Grid boundary color:", 1); grid_blinew_choice_item = CreatePanelChoice1(rc, "Line width:", 10, "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL, NULL); grid_blines_choice_item = CreatePanelChoice1(rc, "Line style:", 6, "Solid line", "Dotted line", "Dashed line", "Long Dashed", "Dot-dashed", NULL, NULL); grid_fillbg_choice_item = CreatePanelChoice1(rc, "Fill for islands:", 3, "None", "Filled", NULL, NULL); grid_bgcolor_choice_item = CreateColorChoice(rc, "Island color:", 1); XtManageChild(rc); XtManageChild(fr); rc = XmCreateRowColumn(rc2, "rc", NULL, 0); XtVaSetValues(rc, XmNorientation, XmHORIZONTAL, NULL); wbut = XtVaCreateManagedWidget("Accept", xmPushButtonGadgetClass, rc, NULL); XtAddCallback(wbut, XmNactivateCallback, (XtCallbackProc) grid_define_notify_proc, 0); wbut = XtVaCreateManagedWidget("Isolines of bathymetry...", xmPushButtonGadgetClass, rc, NULL); XtAddCallback(wbut, XmNactivateCallback, (XtCallbackProc) grid_isolines_notify_proc, 0); wbut = XtVaCreateManagedWidget("Compute boundary", xmPushButtonGadgetClass, rc, NULL); XtAddCallback(wbut, XmNactivateCallback, (XtCallbackProc) compute_grid_boundary, 0); wbut = XtVaCreateManagedWidget("Done", xmPushButtonGadgetClass, rc, NULL); XtAddCallback(wbut, XmNactivateCallback, (XtCallbackProc) grid_Done_notify_proc, 0); XtManageChild(rc); XtManageChild(rc2); update_grid_items(cg); XtManageChild(grid_panel); XtRaise(grid_frame); } /* * Notify and event procs */ static void grid_Done_notify_proc(void) { XtUnmanageChild(grid_frame); } static void grid_isolines_notify_proc(void) { int a = GetChoice(grid_choice_item); g[cg].grid[a].ip.cmin = grid[a].dmin; g[cg].grid[a].ip.cmax = grid[a].dmax; create_isolines_popup("Grid bathymetry", &g[cg].grid[a].ip, 0); } static void grid_define_notify_proc(void) { int i, ming, maxg; int a; int c; a = GetChoice(grid_choice_item); if (a == 0) { ming = maxg = cg; } else { ming = 0; g[cg].curgrid = maxg = maxgraph - 1; } if (a < MAXGRIDS) { g[cg].curgrid = a; ming = maxg = cg; } else if (a == MAXGRIDS) { ming = maxg = cg; } else { ming = 0; maxg = maxgraph - 1; } for (i = ming; i <= maxg; i++) { if (isactive_graph(i)) { c = g[i].curgrid; g[i].grid[c].display = XmToggleButtonGetState(grid_display_item) ? ON : OFF; g[i].grid[c].display_bath = XmToggleButtonGetState(grid_bath_item) ? ON : OFF; g[i].grid[c].display_boundary = XmToggleButtonGetState(grid_bound_item) ? ON : OFF; g[i].grid[c].display_nodes = XmToggleButtonGetState(grid_nodes_item) ? ON : OFF; g[i].grid[c].display_elements = XmToggleButtonGetState(grid_elements_item) ? ON : OFF; g[i].grid[c].display_depths = XmToggleButtonGetState(grid_depths_item) ? ON : OFF; g[i].grid[c].display_courant = XmToggleButtonGetState(grid_cour_item) ? ON : OFF; g[i].grid[c].display_courantn = XmToggleButtonGetState(grid_courn_item) ? ON : OFF; /* g[i].grid[c].display_dimw = XmToggleButtonGetState(grid_dimw_item) ? ON : OFF; */ g[i].grid[c].display_gridf = XmToggleButtonGetState(grid_filled_item) ? ON : OFF; g[i].grid[c].p.color = GetChoice(grid_color_choice_item); g[i].grid[c].p.fillcol = GetChoice(grid_fillcolor_choice_item); g[i].grid[c].p.linew = GetChoice(grid_linew_choice_item) + 1; g[i].grid[c].p.lines = GetChoice(grid_lines_choice_item) + 1; g[i].grid[c].bp.color = GetChoice(grid_bcolor_choice_item); g[i].grid[c].bp.linew = GetChoice(grid_blinew_choice_item) + 1; g[i].grid[c].bp.lines = GetChoice(grid_blines_choice_item) + 1; g[i].grid[c].bp.fill = GetChoice(grid_fillbg_choice_item) ? ON : OFF; g[i].grid[c].bp.fillcol = GetChoice(grid_bgcolor_choice_item); } } }