#include "Gmsh.h" #include "GmshUI.h" #include "Mesh.h" #include "Draw.h" #include "Views.h" #include "Context.h" #include "XContext.h" #include "Widgets.h" extern Context_T CTX; extern XContext_T XCTX; extern Widgets_T WID; extern List_T *Post_ViewList; extern void GetStatistics(double s[50]); static char label[32]; /* ------------------------------------------------------------------------ E x i t C b ------------------------------------------------------------------------ */ void ExitCb(Widget w, XtPointer cd, XtPointer cb){ exit(0); } /* ------------------------------------------------------------------------ M a n a g e C b ------------------------------------------------------------------------ */ void ManageCb (Widget w, XtPointer client_data, XtPointer call_data){ XtIsManaged((Widget)client_data) ? XtUnmanageChild((Widget)client_data) : XtManageChild((Widget)client_data) ; } /* ------------------------------------------------------------------------ P o p u p H a n d l e r ------------------------------------------------------------------------ */ void PopupHandler (Widget w, Widget pw, XEvent *event, Boolean *ctd ){ if(((XButtonEvent *)event)->button != Button3) return; /* force the pointer to be slightly over the remove button */ ((XButtonEvent *)event)->x_root -= 7 ; ((XButtonEvent *)event)->y_root -= 7 ; XmMenuPosition(pw, (XButtonEvent *)event); XtManageChild(pw); } /* ------------------------------------------------------------------------ CurrentInfoCb ------------------------------------------------------------------------ */ void CurrentInfoCb (Widget w, XtPointer client_data, XtPointer call_data){ double s[50]; int i; Post_View *v ; if((long int)client_data && XtIsManaged(WID.OD.infoDialog)){ XtUnmanageChild(WID.OD.infoDialog); } else{ GetStatistics(s); #define VLAB(caca) WID.OD.infoValueLabel[(caca)], XmNlabelString, \ XmStringCreateSimple(label), NULL /* info geom */ sprintf(label, "%g", s[0]); XtVaSetValues(VLAB(0)); sprintf(label, "%g", s[1]/2); XtVaSetValues(VLAB(1)); sprintf(label, "%g", s[2]); XtVaSetValues(VLAB(2)); sprintf(label, "%g", s[3]); XtVaSetValues(VLAB(3)); /* info mesh */ sprintf(label, "%g", s[4]); XtVaSetValues(VLAB(4)); sprintf(label, "%g", s[5]); XtVaSetValues(VLAB(5)); sprintf(label, "%g", s[6]); XtVaSetValues(VLAB(6)); sprintf(label, "%g", s[7]); XtVaSetValues(VLAB(7)); sprintf(label, "%g", s[8]); XtVaSetValues(VLAB(8)); sprintf(label, "%g", s[9]); XtVaSetValues(VLAB(9)); sprintf(label, "%g", s[10]); XtVaSetValues(VLAB(10)); sprintf(label, "%g", s[11]); XtVaSetValues(VLAB(11)); sprintf(label, "%g", s[12]); XtVaSetValues(VLAB(12)); sprintf(label, "%g", s[13]); XtVaSetValues(VLAB(13)); sprintf(label, "%g", s[14]); XtVaSetValues(VLAB(14)); sprintf(label, "%.4g (%.4g->%.4g)", s[17], s[19], s[18]); XtVaSetValues(VLAB(15)); sprintf(label, "%.4g (%.4g->%.4g)", s[20], s[22], s[21]); XtVaSetValues(VLAB(16)); sprintf(label, "%.4g (%.4g->%.4g)", s[23], s[25], s[24]); XtVaSetValues(VLAB(17)); /* info post */ s[15] = Post_ViewList ? List_Nbr(Post_ViewList) : 0 ; sprintf(label, "%g", s[15]); XtVaSetValues(VLAB(18)); s[16] = s[17] = s[18] = s[19] = 0 ; if(Post_ViewList){ for(i=0 ; i<List_Nbr(Post_ViewList) ; i++){ v = (Post_View*)List_Pointer(Post_ViewList, i); if(v->Visible){ s[16] += List_Nbr(v->Points); s[17] += List_Nbr(v->Lines); s[18] += List_Nbr(v->Triangles); s[19] += List_Nbr(v->Simplices); } } } sprintf(label, "%g", s[16]); XtVaSetValues(VLAB(19)); sprintf(label, "%g", s[17]); XtVaSetValues(VLAB(20)); sprintf(label, "%g", s[18]); XtVaSetValues(VLAB(21)); sprintf(label, "%g", s[19]); XtVaSetValues(VLAB(22)); #undef VLAB if((long int)client_data) XtManageChild(WID.OD.infoDialog) ; else XmUpdateDisplay(WID.OD.infoDialog); } } /* ------------------------------------------------------------------------ set_XXX ------------------------------------------------------------------------ */ void set_r(int i, double val){ if(!CTX.rlock[i]){ CTX.r[i] = val; if(XtIsManaged(WID.OD.viewportDialog)){ sprintf(label, "%.5g", CTX.r[i]); XtVaSetValues(WID.OD.viewportText[0][i], XmNvalue, label, NULL); XmUpdateDisplay(WID.OD.viewportText[0][i]); } } } void set_t(int i, double val){ if(!CTX.tlock[i]){ CTX.t[i] = val; if(XtIsManaged(WID.OD.viewportDialog)){ sprintf(label, "%.5g", CTX.t[i]); XtVaSetValues(WID.OD.viewportText[1][i], XmNvalue, label, NULL); XmUpdateDisplay(WID.OD.viewportText[1][i]); } } } void set_s(int i, double val){ if(!CTX.slock[i]){ CTX.s[i] = val; if(XtIsManaged(WID.OD.viewportDialog)){ sprintf(label, "%.5g", CTX.s[i]); XtVaSetValues(WID.OD.viewportText[2][i], XmNvalue, label, NULL); XmUpdateDisplay(WID.OD.viewportText[2][i]); } } } /* ------------------------------------------------------------------------ CurrentViewportCb ------------------------------------------------------------------------ */ void CurrentViewportCb (Widget w, XtPointer client_data, XtPointer call_data){ int i; if(XtIsManaged(WID.OD.viewportDialog)){ XtUnmanageChild(WID.OD.viewportDialog); } else{ for(i=0 ; i<3 ; i++){ sprintf(label, "%.5g", CTX.r[i]); XtVaSetValues(WID.OD.viewportText[0][i], XmNvalue, label, NULL); sprintf(label, "%.5g", CTX.t[i]); XtVaSetValues(WID.OD.viewportText[1][i], XmNvalue, label, NULL); sprintf(label, "%.5g", CTX.s[i]); XtVaSetValues(WID.OD.viewportText[2][i], XmNvalue, label, NULL); } XtManageChild(WID.OD.viewportDialog) ; } }