#include "xcddraw.h" #include #include #include #include #include static args_t *classes; static args_t *args; static args_t *parts; static order_t *arg_orders; static order_t *part_orders; static order_t *class_orders; static int num_args; static int num_parts; static int num_classes; void toggled(Widget w,int *change_primary,XmToggleButtonCallbackStruct *state) { static XmString pxmstr = XmStringCreateSimple("Primary"); static XmString npxmstr = XmStringCreateSimple("Non-primary"); if (state->set) { XtVaSetValues(w,XmNlabelString,pxmstr,NULL); *change_primary = 1; } else { XtVaSetValues(w,XmNlabelString,npxmstr,NULL); *change_primary = 0; } } int isLegalLabel(char * r) { int i=0; int has_alphabet = 0; if ( (r[i] != '_') && ((r[i] > 'Z') || (r[i] < 'A')) && ((r[i] > 'z') || (r[i] < 'a'))) { sprintf(message,"Change edge: %s is not a legal edge label.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } if (r[i] != '_') has_alphabet = 1; i++; while (r[i] != '\0') { if (((r[i] > 'Z') || (r[i] < 'A')) && ((r[i] > 'z') || (r[i] < 'a')) && ((r[i] > '9') || (r[i] < '0')) && (r[i] != '_')) { sprintf(message,"Change edge: %s is not a legal edge label.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } if (((r[i] <= 'Z') && (r[i] >= 'A')) || ((r[i] <= 'z') && (r[i] >= 'a'))) has_alphabet = 1; i++; } if (has_alphabet) { if ((strcmp(r,"DemString") == 0) || (strcmp(r,"DemText") == 0) || (strcmp(r,"DemNumber") == 0) || (strcmp(r,"DemReal") == 0) || (strcmp(r,"DemIdent") == 0)) { sprintf(message,"Change edge: %s is a terminal vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } else return 1; } else { sprintf(message,"Change edge: %s is not a legal edge label.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } } int isLegalExtName(char *r) { int i = 0; int has_alphabet = 0; if (r[i] == '$') i++; if ( (r[i] != '_') && ((r[i] > 'Z') || (r[i] < 'A')) && ((r[i] > 'z') || (r[i] < 'a'))) { sprintf(message,"Change vertex: %s is not a legal external vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } if (r[i] != '_') has_alphabet = 1; i++; while ((r[i] != '\0') && (r[i] != '@')) { if (((r[i] > 'Z') || (r[i] < 'A')) && ((r[i] > 'z') || (r[i] < 'a')) && ((r[i] > '9') || (r[i] < '0')) && (r[i] != '_')) { sprintf(message,"Change vertex: %s is not a legal external vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } if (((r[i] <= 'Z') && (r[i] >= 'A')) || ((r[i] <= 'z') && (r[i] >= 'a'))) has_alphabet = 1; i++; } if (r[i] == '\0') { if (has_alphabet) { if (r[0] != '$') { sprintf(message,"Change vertex: %s is not a legal external vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } else return 1; } else { sprintf(message,"Change vertex: %s is not a legal external vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } } i++; if (r[i] == '@') i++; if (r[i] == '\0') { sprintf(message,"Change vertex: %s is not a legal external vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } has_alphabet = 0; while (r[i] != '\0') { if (((r[i] > 'Z') || (r[i] < 'A')) && ((r[i] > 'z') || (r[i] < 'a')) && ((r[i] > '9') || (r[i] < '0')) && (r[i] != '_')) { sprintf(message,"Change vertex: %s is not a legal external vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } if (((r[i] <= 'Z') && (r[i] >= 'A')) || ((r[i] <= 'z') && (r[i] >= 'a'))) has_alphabet = 1; i++; } if (has_alphabet) return 1; else { sprintf(message,"Change vertex: %s is not a legal external vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } } int isLegalParName(char *r) { int i=0; int has_alphabet = 0; if ( (r[i] != '_') && ((r[i] > 'Z') || (r[i] < 'A')) && ((r[i] > 'z') || (r[i] < 'a'))) { sprintf(message,"Change vertex: %s is not a legal parameter vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } if (r[i] != '_') has_alphabet = 1; i++; while (r[i] != '\0') { if (((r[i] > 'Z') || (r[i] < 'A')) && ((r[i] > 'z') || (r[i] < 'a')) && ((r[i] > '9') || (r[i] < '0')) && (r[i] != '_')) { sprintf(message,"Change vertex: %s is not a legal parameter vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } if (((r[i] <= 'Z') && (r[i] >= 'A')) || ((r[i] <= 'z') && (r[i] >= 'a'))) has_alphabet = 1; i++; } if (has_alphabet) { if ((strcmp(r,"DemString") == 0) || (strcmp(r,"DemText") == 0) || (strcmp(r,"DemNumber") == 0) || (strcmp(r,"DemReal") == 0) || (strcmp(r,"DemIdent") == 0)) { sprintf(message,"Change vertex: %s is a terminal vertex name\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } else return 1; } else { sprintf(message,"Change vertex: %s is not a legal parameter vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } } int isLegalLocalName(char *r) { int i=0; int has_alphabet = 0; if ( (r[i] != '_') && ((r[i] > 'Z') || (r[i] < 'A')) && ((r[i] > 'z') || (r[i] < 'a'))) { sprintf(message,"Change vertex: %s is not a legal vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } if (r[i] != '_') has_alphabet = 1; i++; while (r[i] != '\0') { if (((r[i] > 'Z') || (r[i] < 'A')) && ((r[i] > 'z') || (r[i] < 'a')) && ((r[i] > '9') || (r[i] < '0')) && (r[i] != '_')) { sprintf(message,"Change vertex: %s is not a legal vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } if (((r[i] <= 'Z') && (r[i] >= 'A')) || ((r[i] <= 'z') && (r[i] >= 'a'))) has_alphabet = 1; i++; } if (has_alphabet) { if ((strcmp(r,"DemString") == 0) || (strcmp(r,"DemText") == 0) || (strcmp(r,"DemNumber") == 0) || (strcmp(r,"DemReal") == 0) || (strcmp(r,"DemIdent") == 0)) { sprintf(message,"Change vertex: %s is a terminal vertex name\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } else return 1; } else { sprintf(message,"Change vertex: %s is not a legal vertex name.\n",r); xm_print_message(message); XBell(XtDisplay(draw_area),0); return 0; } } void NameSensitiveVertex::reorder_args() { tempinststore->reorder_args(); vertices->reorder_args(); } void TemplateInstStore::reorder_args() { instances->reorder_args(); } void ObjectStore::reorder_args() { if (objects) objects->reorder_args(); } void GraphicsObjectList::reorder_args() { elm->reorder_args(); if (next) next->reorder_args(); } void GraphicsObject::reorder_args() { } void VertexObject::reorder_args() { parassignstore->reorder_args(); } typedef ParameterAssignmentList * ParameterAssignmentListPtr; void ParameterAssignmentStore::reorder_args() { ParameterAssignmentList **patbl = new ParameterAssignmentListPtr[num_args]; ParameterAssignmentList *p; if (assignments) assignments->reorder_args(patbl,0); int i,j; for (i = 0; i < num_args; i++) { for (j = 0; j < num_args; j++) { if (args[j].j == i) { if (i == 0) { p = assignments = patbl[args[j].i]; p->set_next(NULL); p->set_prev(NULL); } else { p->set_next(patbl[args[j].i]); p->get_next()->set_next(NULL); p->get_next()->set_prev(p); p = p->get_next(); } } } } } void ParameterAssignmentList::reorder_args(ParameterAssignmentList **tbl,int i) { tbl[i] = this; if (next) next->reorder_args(tbl,i+1); } void attach_widgets(args_t* pas, int l) { if (l <= 1) return; XtVaSetValues(pas[0].w, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); pas[0].j = 0; /* tell the position */ int i = 1; while ( i <= l - 1) { XtVaSetValues(pas[i].w, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, pas[i - 1].w, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); pas[i].j = i; i++; } } void finishInfo( Widget w, int *done, XmSelectionBoxCallbackStruct *cbs) { dialog_done = 1; *done = 1; } void cancelInfo( Widget w, int *done, XmSelectionBoxCallbackStruct *cbs) { dialog_done = 1; *done = 0; } void ConstructionVertex::doubleClickPopup() { Widget dialog; int unbound = 0; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Class_Info", wargs,n); n = 0; XtSetArg(wargs[n], XmNwidth, 400); n++; XtSetArg(wargs[n], XmNheight,500); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget mainwin = XtCreateManagedWidget ("Args_Window", xmScrolledWindowWidgetClass, dialog, wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,mainwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget classlabel= XtCreateManagedWidget( "Construction Class Name: ",xmLabelGadgetClass,form,wargs,n); Widget cname; if (this->get_is_template()) { cname = XtCreateManagedWidget("Class_Name",xmTextWidgetClass,form,NULL,0); XmTextSetString(cname,this->get_name()->get_vertex_name()); } else { char pname[1024]; pname[0] = '\0'; if (this->get_template_name()) /* template instance */ { this->get_template_name()-> get_parameterized_name(this->get_parassignstore(),pname); if (this->no_parameters()) pname[strlen(pname)-2] = '\0'; n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; cname = XtCreateManagedWidget(pname,xmLabelGadgetClass,form,wargs,n); } else { unbound = 1; cname = XtCreateManagedWidget("",xmLabelGadgetClass,form,wargs,n); } } n = 0; Widget tbutton; int change_primary = 0; if (this->get_primary_flag() != PRIMARY && this->get_primary_flag() != PRIMARY_OF && this->get_is_template()) { tbutton = XmCreateToggleButton(form,"Non-primary",wargs,n); XtAddCallback(tbutton, XmNvalueChangedCallback, (XtCallbackProc)toggled,(XtPointer)&change_primary); } else if (!this->get_is_template()) { n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; tbutton = XmCreateLabel(form,"Template Instance",wargs,1); } else { n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; tbutton = XmCreateLabel(form,"Primary",wargs,1); } XtManageChild(tbutton); XtVaSetValues(tbutton, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, tbutton, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, NULL); XtVaSetValues(cname, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, tbutton, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, classlabel, XmNrightAttachment, XmATTACH_FORM, NULL); Widget pwin = XmCreatePanedWindow(form,"Vertex_Paned_Win",NULL,0); args = NULL; arg_orders = NULL; if (this->get_is_template()) { num_args = this->get_parassignstore()->length(); args = new args_t[num_args]; arg_orders = new order_t[num_args]; } if (this->get_is_template() && num_args) { n = 0; Widget argform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget arglabel = XmCreateLabel(argform,"Arguments:",wargs,n); XtManageChild(arglabel); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget argwin = XtCreateManagedWidget ("Args_Window", xmScrolledWindowWidgetClass, argform, wargs,n); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; Widget argsform = XtCreateManagedWidget("Form",xmFormWidgetClass,argwin,wargs,n); this->get_parassignstore()->assign_args(argsform); attach_widgets(args,num_args); XtVaSetValues(arglabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(argwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, arglabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); } parts = NULL; part_orders = NULL; if (this->get_is_template()) { num_parts = this->get_subhome()->get_outgoing_consedge_store()->length(); parts = new args_t[num_parts]; part_orders = new order_t[num_parts]; } if (this->get_is_template() && num_parts) { n = 0; Widget partform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget partlabel = XmCreateLabel(partform,"Immediate Parts:",wargs,n); XtManageChild(partlabel); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget partwin = XtCreateManagedWidget ("Parts_Window", xmScrolledWindowWidgetClass, partform, wargs,n); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; Widget partsform = XtCreateManagedWidget("Form",xmFormWidgetClass,partwin,wargs,n); this->get_subhome()->get_outgoing_consedge_store()->assign_parts(partsform); attach_widgets(parts,num_parts); XtVaSetValues(partlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(partwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, partlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); } Widget bform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget blabel = XmCreateLabel(bform,"Syntax Before All The Parts:",wargs,n); XtManageChild(blabel); Widget bwin = XmCreateFrame(bform,"Defore_Frame",NULL,0); XtManageChild(bwin); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget btext = XmCreateScrolledText(bwin,"Before_Content",wargs,n); XtManageChild(btext); if (!unbound) { if (this->get_subhome()->get_before()) XmTextSetString(btext,this->get_subhome()->get_before()); } XtVaSetValues(blabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(bwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, blabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget aform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget alabel = XmCreateLabel(aform,"Syntax After All The Parts:",wargs,1); XtManageChild(alabel); n = 0; Widget awin = XmCreateFrame(aform,"After_Frame",NULL,0); XtManageChild(awin); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (this->get_kind() == EXT_VERTEX || unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget atext = XmCreateScrolledText(awin,"After_Content",wargs,n); XtManageChild(atext); if (!unbound) { if (this->get_subhome()->get_after()); XmTextSetString(atext,this->get_subhome()->get_after()); } XtVaSetValues(alabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(awin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, alabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget cform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget comlabel = XmCreateLabel(cform,"Comments:",wargs,1); XtManageChild(comlabel); n = 0; Widget cwin = XmCreateFrame(cform,"After_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (!unbound) { if (this->get_subhome()->get_comments()->get_comments()) XmTextSetString(ctext,this->get_subhome()->get_comments()->get_comments()); } XtVaSetValues(comlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, comlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(pwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, cname, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtManageChild(pwin); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if (done && !unbound) { /* check whether is is a legal name */ if (this->get_is_template()) { char *newname = XmTextGetString(cname); if (strcmp(newname,this->get_name()->get_vertex_name())!=0) { if (isLegalLocalName(newname)) if (vertex_store->IsNotUsedLocalName(newname,this->get_kind())) { free(this->get_name()->get_vertex_name()); this->get_name()->set_vertex_name(newname); } check_update_flag(); } else free(newname); } char *b = XmTextGetString(btext); if (strlen(b)!= 0) { if (this->get_subhome()->get_before() == NULL || strcmp(this->get_subhome()->get_before(),b)!=0) { if (this->get_subhome()->get_before()) free(this->get_subhome()->get_before()); this->get_subhome()->set_before(b); check_update_flag(); } else free(b); } else { if (this->get_subhome()->get_before()) { free(this->get_subhome()->get_before()); this->get_subhome()->set_before(NULL); check_update_flag(); } free(b); } char *a = XmTextGetString(atext); if (strlen(a)!= 0) { if (this->get_subhome()->get_after() == NULL || strcmp(this->get_subhome()->get_after(),a)!=0) { if (this->get_subhome()->get_after()) free(this->get_subhome()->get_after()); this->get_subhome()->set_after(a); check_update_flag(); } else free(a); } else { if (this->get_subhome()->get_after()) { free(this->get_subhome()->get_after()); this->get_subhome()->set_after(NULL); check_update_flag(); } free(a); } char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_subhome()->get_comments()->get_comments() == NULL || strcmp(this->get_subhome()->get_comments()->get_comments(),c)!=0) { if (this->get_subhome()->get_comments()->get_comments()) free(this->get_subhome()->get_comments()->get_comments()); this->get_subhome()->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_subhome()->get_comments()->get_comments()) { free(this->get_subhome()->get_comments()->get_comments()); this->get_subhome()->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } if (this->get_is_template() && num_args) { this->get_subhome()->reorder_args(); } if (this->get_is_template() && num_parts) { this->get_subhome()->get_outgoing_consedge_store()->reorder_parts(); } if (change_primary) { this->set_primary_flag(PRIMARY_OF); this->get_subhome()->get_primary()->set_primary_flag(NONPRIMARY); this->get_subhome()->set_primary(this); check_update_flag(); } } redraw(); XtDestroyWidget(dialog); if (args) delete args; if (arg_orders) delete arg_orders; if (parts) delete parts; if (part_orders) delete part_orders; } void AlternationVertex::doubleClickPopup() { Widget dialog; int unbound = 0; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Class_Info", wargs,n); n = 0; XtSetArg(wargs[n], XmNwidth, 400); n++; XtSetArg(wargs[n], XmNheight,500); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget mainwin = XtCreateManagedWidget ("Args_Window", xmScrolledWindowWidgetClass, dialog, wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,mainwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget classlabel= XtCreateManagedWidget( "Alternation Class Name: ",xmLabelGadgetClass,form,wargs,n); Widget cname; if (this->get_is_template()) { cname = XtCreateManagedWidget("Class_Name",xmTextWidgetClass,form,NULL,0); XmTextSetString(cname,this->get_name()->get_vertex_name()); } else { char pname[1024]; pname[0] = '\0'; if (this->get_template_name()) /* template instance */ { this->get_template_name()-> get_parameterized_name(this->get_parassignstore(),pname); if (this->no_parameters()) pname[strlen(pname)-2] = '\0'; n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; cname = XtCreateManagedWidget(pname,xmLabelGadgetClass,form,wargs,n); } else { unbound = 1; cname = XtCreateManagedWidget("",xmLabelGadgetClass,form,wargs,n); } } n = 0; Widget tbutton; int change_primary = 0; if (this->get_primary_flag() != PRIMARY && this->get_primary_flag() != PRIMARY_OF && this->get_is_template()) { tbutton = XmCreateToggleButton(form,"Non-primary",wargs,n); XtAddCallback(tbutton, XmNvalueChangedCallback, (XtCallbackProc)toggled,(XtPointer)&change_primary); } else if (!this->get_is_template()) { n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; tbutton = XmCreateLabel(form,"Template Instance",wargs,1); } else { n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; tbutton = XmCreateLabel(form,"Primary",wargs,1); } XtManageChild(tbutton); XtVaSetValues(tbutton, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, tbutton, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, NULL); XtVaSetValues(cname, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, tbutton, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, classlabel, XmNrightAttachment, XmATTACH_FORM, NULL); Widget pwin = XmCreatePanedWindow(form,"Vertex_Paned_Win",NULL,0); args = NULL; arg_orders = NULL; if (this->get_is_template()) { num_args = this->get_parassignstore()->length(); args = new args_t[num_args]; arg_orders = new order_t[num_args]; } if (this->get_is_template() && num_args) { n = 0; Widget argform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget arglabel = XmCreateLabel(argform,"Arguments:",wargs,n); XtManageChild(arglabel); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget argwin = XtCreateManagedWidget ("Args_Window", xmScrolledWindowWidgetClass, argform, wargs,n); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; Widget argsform = XtCreateManagedWidget("Form",xmFormWidgetClass,argwin,wargs,n); this->get_parassignstore()->assign_args(argsform); attach_widgets(args,num_args); XtVaSetValues(arglabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(argwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, arglabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); } parts = NULL; part_orders = NULL; if (this->get_is_template()) { num_parts = this->get_subhome()->get_outgoing_consedge_store()->length(); parts = new args_t[num_parts]; part_orders = new order_t[num_parts]; } if (this->get_is_template() && num_parts) { n = 0; Widget partform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget partlabel = XmCreateLabel(partform,"Immediate Common Parts:",wargs,n); XtManageChild(partlabel); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget partwin = XtCreateManagedWidget ("Parts_Window", xmScrolledWindowWidgetClass, partform, wargs,n); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; Widget partsform = XtCreateManagedWidget("Form",xmFormWidgetClass,partwin,wargs,n); this->get_subhome()->get_outgoing_consedge_store()->assign_parts(partsform); attach_widgets(parts,num_parts); XtVaSetValues(partlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(partwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, partlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); } Widget bform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget blabel = XmCreateLabel(bform,"Syntax Before All The Parts:",wargs,n); XtManageChild(blabel); n = 0; Widget bwin = XmCreateFrame(bform,"After_Frame",NULL,0); XtManageChild(bwin); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (this->get_kind() == EXT_VERTEX || unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget btext = XmCreateScrolledText(bwin,"Before_Content",wargs,n); XtManageChild(btext); if (!unbound) { if (this->get_subhome()->get_before()) XmTextSetString(btext,this->get_subhome()->get_before()); } XtVaSetValues(blabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(bwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, blabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget aform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget alabel = XmCreateLabel(aform,"Syntax After All The Parts:",wargs,1); XtManageChild(alabel); n = 0; Widget awin = XmCreateFrame(aform,"After_Frame",NULL,0); XtManageChild(awin); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (this->get_kind() == EXT_VERTEX || unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget atext = XmCreateScrolledText(awin,"After_Content",wargs,n); XtManageChild(atext); if (!unbound) { if (this->get_subhome()->get_after()); XmTextSetString(atext,this->get_subhome()->get_after()); } XtVaSetValues(alabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(awin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, alabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget cform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget comlabel = XmCreateLabel(cform,"Comments:",wargs,1); XtManageChild(comlabel); n = 0; Widget cwin = XmCreateFrame(cform,"After_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 600); n++; XtSetArg(wargs[n], XmNheight,200); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (!unbound) { if (this->get_subhome()->get_comments()->get_comments()) XmTextSetString(ctext,this->get_subhome()->get_comments()->get_comments()); } XtVaSetValues(comlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, comlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(pwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, cname, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtManageChild(pwin); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if (done && !unbound) { /* check whether is is a legal name */ if (this->get_is_template()) { char *newname = XmTextGetString(cname); if (strcmp(newname,this->get_name()->get_vertex_name())!=0) { if (isLegalLocalName(newname)) if (vertex_store->IsNotUsedLocalName(newname,this->get_kind())) { free(this->get_name()->get_vertex_name()); this->get_name()->set_vertex_name(newname); } check_update_flag(); } else free(newname); } char *b = XmTextGetString(btext); if (strlen(b)!= 0) { if (this->get_subhome()->get_before() == NULL || strcmp(this->get_subhome()->get_before(),b)!=0) { if (this->get_subhome()->get_before()) free(this->get_subhome()->get_before()); this->get_subhome()->set_before(b); check_update_flag(); } else free(b); } else { if (this->get_subhome()->get_before()) { free(this->get_subhome()->get_before()); this->get_subhome()->set_before(NULL); check_update_flag(); } free(b); } char *a = XmTextGetString(atext); if (strlen(a)!= 0) { if (this->get_subhome()->get_after() == NULL || strcmp(this->get_subhome()->get_after(),a)!=0) { if (this->get_subhome()->get_after()) free(this->get_subhome()->get_after()); this->get_subhome()->set_after(a); check_update_flag(); } else free(a); } else { if (this->get_subhome()->get_after()) { free(this->get_subhome()->get_after()); this->get_subhome()->set_after(NULL); check_update_flag(); } free(a); } char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_subhome()->get_comments()->get_comments() == NULL || strcmp(this->get_subhome()->get_comments()->get_comments(),c)!=0) { if (this->get_subhome()->get_comments()->get_comments()) free(this->get_subhome()->get_comments()->get_comments()); this->get_subhome()->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_subhome()->get_comments()->get_comments()) { free(this->get_subhome()->get_comments()->get_comments()); this->get_subhome()->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } if (this->get_is_template() && num_args) { this->get_subhome()->reorder_args(); } if (this->get_is_template() && num_parts) { this->get_subhome()->get_outgoing_consedge_store()->reorder_parts(); } if (change_primary) { this->set_primary_flag(PRIMARY_OF); this->get_subhome()->get_primary()->set_primary_flag(NONPRIMARY); this->get_subhome()->set_primary(this); check_update_flag(); } } redraw(); XtDestroyWidget(dialog); if (args) delete args; if (arg_orders) delete arg_orders; if (parts) delete parts; if (part_orders) delete part_orders; } void RepetitionVertex::doubleClickPopup() { Widget dialog; int unbound = 0; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Class_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget classlabel= XtCreateManagedWidget( "Repetition Vertex Name: ",xmLabelGadgetClass,form,wargs,n); Widget cname; if (this->get_is_template()) { cname = XtCreateManagedWidget("Class_Name",xmTextWidgetClass,form,NULL,0); XmTextSetString(cname,this->get_name()->get_vertex_name()); } else { char pname[1024]; pname[0] = '\0'; if (this->get_template_name()) /* template instance */ { this->get_template_name()-> get_parameterized_name(this->get_parassignstore(),pname); if (this->no_parameters()) pname[strlen(pname)-2] = '\0'; n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; cname = XtCreateManagedWidget(pname,xmLabelGadgetClass,form,wargs,n); } else { unbound = 1; cname = XtCreateManagedWidget("",xmLabelGadgetClass,form,wargs,n); } } n = 0; Widget tbutton; int change_primary = 0; if (this->get_primary_flag() != PRIMARY && this->get_primary_flag() != PRIMARY_OF && this->get_is_template()) { tbutton = XmCreateToggleButton(form,"Non-primary",wargs,n); XtAddCallback(tbutton, XmNvalueChangedCallback, (XtCallbackProc)toggled,(XtPointer)&change_primary); } else if (!this->get_is_template()) { n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; tbutton = XmCreateLabel(form,"Template Instance",wargs,1); } else { n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; tbutton = XmCreateLabel(form,"Primary",wargs,1); } XtManageChild(tbutton); XtVaSetValues(tbutton, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, tbutton, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, NULL); XtVaSetValues(cname, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, tbutton, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, classlabel, XmNrightAttachment, XmATTACH_FORM, NULL); Widget pwin = XmCreatePanedWindow(form,"Vertex_Paned_Win",NULL,0); args = NULL; arg_orders = NULL; if (this->get_is_template()) { num_args = this->get_parassignstore()->length(); args = new args_t[num_args]; arg_orders = new order_t[num_args]; } if (this->get_is_template() && num_args) { n = 0; Widget aform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,wargs,n); n = 0; Widget arglabel = XmCreateLabel(aform,"Arguments:",wargs,n); XtManageChild(arglabel); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,150); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget awin = XtCreateManagedWidget ("Args_Window", xmScrolledWindowWidgetClass, aform, wargs,n); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,150); n++; Widget argsform = XtCreateManagedWidget("Form",xmFormWidgetClass,awin,wargs,n); this->get_parassignstore()->assign_args(argsform); attach_widgets(args,num_args); XtVaSetValues(arglabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(awin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, arglabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); } Widget bform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget blabel = XmCreateLabel(bform,"Syntax Before The Repetition Edge:",wargs,n); XtManageChild(blabel); n = 0; Widget bwin = XmCreateFrame(bform,"Before_Frame",NULL,0); XtManageChild(bwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,150); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (this->get_kind() == EXT_VERTEX || unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget btext = XmCreateScrolledText(bwin,"Before_Content",wargs,n); XtManageChild(btext); if (!unbound) { if (this->get_subhome()->get_before()) XmTextSetString(btext,this->get_subhome()->get_before()); } XtVaSetValues(blabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(bwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, blabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget aform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget alabel = XmCreateLabel(aform,"Syntax After The Repetition Edge:",wargs,n); XtManageChild(alabel); n = 0; Widget awin = XmCreateFrame(aform,"Before_Frame",NULL,0); XtManageChild(awin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,150); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (this->get_kind() == EXT_VERTEX || unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget atext = XmCreateScrolledText(awin,"After_Content",wargs,n); XtManageChild(atext); if (!unbound) { if (this->get_subhome()->get_after()); XmTextSetString(atext,this->get_subhome()->get_after()); } XtVaSetValues(alabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(awin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, alabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); n = 0; Widget cform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget comlabel = XmCreateLabel(cform,"Comments:",wargs,1); XtManageChild(comlabel); n = 0; Widget cwin = XmCreateFrame(cform,"Before_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,150); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (!unbound) { if (this->get_subhome()->get_comments()->get_comments()) XmTextSetString(ctext,this->get_subhome()->get_comments()->get_comments()); } XtVaSetValues(comlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, comlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(pwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, cname, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtManageChild(pwin); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if (done && !unbound) { /* check whether is is a legal name */ if (this->get_is_template()) { char *newname = XmTextGetString(cname); if (strcmp(newname,this->get_name()->get_vertex_name())!=0) { if (isLegalLocalName(newname)) if (vertex_store->IsNotUsedLocalName(newname,this->get_kind())) { free(this->get_name()->get_vertex_name()); this->get_name()->set_vertex_name(newname); } check_update_flag(); } else free(newname); } char *b = XmTextGetString(btext); if (strlen(b)!= 0) { if (this->get_subhome()->get_before() == NULL || strcmp(this->get_subhome()->get_before(),b)!=0) { if (this->get_subhome()->get_before()) free(this->get_subhome()->get_before()); this->get_subhome()->set_before(b); check_update_flag(); } else free(b); } else { if (this->get_subhome()->get_before()) { free(this->get_subhome()->get_before()); this->get_subhome()->set_before(NULL); check_update_flag(); } free(b); } char *a = XmTextGetString(atext); if (strlen(a)!= 0) { if (this->get_subhome()->get_after() == NULL || strcmp(this->get_subhome()->get_after(),a)!=0) { if (this->get_subhome()->get_after()) free(this->get_subhome()->get_after()); this->get_subhome()->set_after(a); check_update_flag(); } else free(a); } else { if (this->get_subhome()->get_after()) { free(this->get_subhome()->get_after()); this->get_subhome()->set_after(NULL); check_update_flag(); } free(a); } char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_subhome()->get_comments()->get_comments() == NULL || strcmp(this->get_subhome()->get_comments()->get_comments(),c)!=0) { if (this->get_subhome()->get_comments()->get_comments()) free(this->get_subhome()->get_comments()->get_comments()); this->get_subhome()->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_subhome()->get_comments()->get_comments()) { free(this->get_subhome()->get_comments()->get_comments()); this->get_subhome()->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } if (this->get_is_template() && num_args) { this->get_subhome()->reorder_args(); } if (change_primary) { this->set_primary_flag(PRIMARY_OF); this->get_subhome()->get_primary()->set_primary_flag(NONPRIMARY); this->get_subhome()->set_primary(this); check_update_flag(); } } redraw(); XtDestroyWidget(dialog); if (args) delete args; if (arg_orders) delete arg_orders; } void ExternalVertex::doubleClickPopup() { Widget dialog; int unbound = 0; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Class_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget classlabel= XtCreateManagedWidget( "External Vertex Name: ",xmLabelGadgetClass,form,wargs,n); Widget cname; if (this->get_is_template()) { cname = XtCreateManagedWidget("Class_Name",xmTextWidgetClass,form,NULL,0); XmTextSetString(cname,this->get_name()->get_vertex_name()); } else { char pname[1024]; pname[0] = '\0'; if (this->get_template_name()) /* template instance */ { this->get_template_name()-> get_parameterized_name(this->get_parassignstore(),pname); if (this->no_parameters()) pname[strlen(pname)-2] = '\0'; n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; cname = XtCreateManagedWidget(pname,xmLabelGadgetClass,form,wargs,n); } else { unbound = 1; cname = XtCreateManagedWidget("",xmLabelGadgetClass,form,wargs,n); } } n = 0; Widget tbutton; int change_primary = 0; if (this->get_primary_flag() != PRIMARY && this->get_primary_flag() != PRIMARY_OF && this->get_is_template()) { tbutton = XmCreateToggleButton(form,"Non-primary",wargs,n); XtAddCallback(tbutton, XmNvalueChangedCallback, (XtCallbackProc)toggled,(XtPointer)&change_primary); } else if (!this->get_is_template()) { n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; tbutton = XmCreateLabel(form,"Template Instance",wargs,1); } else { n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; tbutton = XmCreateLabel(form,"Primary",wargs,1); } XtManageChild(tbutton); XtVaSetValues(tbutton, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, tbutton, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, NULL); XtVaSetValues(cname, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, tbutton, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, classlabel, XmNrightAttachment, XmATTACH_FORM, NULL); Widget pwin = XmCreatePanedWindow(form,"Vertex_Paned_Win",NULL,0); args = NULL; arg_orders = NULL; if (this->get_is_template()) { num_args = this->get_parassignstore()->length(); args = new args_t[num_args]; arg_orders = new order_t[num_args]; } if (this->get_is_template() && num_args) { n = 0; Widget aform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,wargs,n); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,150); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget awin = XtCreateManagedWidget ("Args_Window", xmScrolledWindowWidgetClass, aform, wargs,n); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,150); n++; Widget argsform = XtCreateManagedWidget("Form",xmFormWidgetClass,awin,wargs,n); this->get_parassignstore()->assign_args(argsform); attach_widgets(args,num_args); } n = 0; Widget cform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget comlabel = XmCreateLabel(cform,"Comments:",wargs,1); XtManageChild(comlabel); n = 0; Widget cwin = XmCreateFrame(cform,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,150); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; if (unbound) { XtSetArg(wargs[n],XmNeditable,FALSE); n++; } XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (!unbound) { if (this->get_subhome()->get_comments()->get_comments()) XmTextSetString(ctext,this->get_subhome()->get_comments()->get_comments()); } XtVaSetValues(comlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, comlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(pwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, cname, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtManageChild(pwin); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if (done && !unbound) { /* check whether is is a legal name */ if (this->get_is_template()) { char *newname = XmTextGetString(cname); if (strcmp(newname,this->get_name()->get_vertex_name())!=0) { if (isLegalExtName(newname)) if (vertex_store->IsNotUsedLocalName(newname,this->get_kind())) { free(this->get_name()->get_vertex_name()); this->get_name()->set_vertex_name(newname); } check_update_flag(); } else free(newname); } char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_subhome()->get_comments()->get_comments() == NULL || strcmp(this->get_subhome()->get_comments()->get_comments(),c)!=0) { if (this->get_subhome()->get_comments()->get_comments()) free(this->get_subhome()->get_comments()->get_comments()); this->get_subhome()->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_subhome()->get_comments()->get_comments()) { free(this->get_subhome()->get_comments()->get_comments()); this->get_subhome()->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } if (this->get_is_template() && num_args) { this->get_subhome()->reorder_args(); } if (change_primary) { this->set_primary_flag(PRIMARY_OF); this->get_subhome()->get_primary()->set_primary_flag(NONPRIMARY); this->get_subhome()->set_primary(this); check_update_flag(); } } redraw(); XtDestroyWidget(dialog); if (args) delete args; if (arg_orders) delete arg_orders; } void TerminalVertex::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Class_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget classlabel=XtCreateManagedWidget("Terminal Class Name: ",xmLabelGadgetClass,form,wargs,n); Widget cname; cname = XtCreateManagedWidget("Class_Name",xmTextWidgetClass,form,NULL,0); XmTextSetString(cname,this->get_name()->get_vertex_name()); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget clabel=XtCreateManagedWidget("Comments: ",xmLabelGadgetClass,form,wargs,n); n = 0; Widget cwin = XmCreateFrame(form,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) XmTextSetString(ctext,this->get_comments()->get_comments()); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cname, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, classlabel, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(clabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, cname, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, clabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if ( done ) { char *newname = XmTextGetString(cname); if ((strcmp(newname,"DemString") == 0) || (strcmp(newname,"DemText") == 0) || (strcmp(newname,"DemNumber") == 0) || (strcmp(newname,"DemReal") == 0) || (strcmp(newname,"DemIdent") == 0)) { if (strcmp(this->get_name()->get_vertex_name(), newname)!=0) { free(this->get_name()->get_vertex_name()); this->get_name()->set_vertex_name(newname); check_update_flag(); } else free(newname); } else { sprintf(message, "Change vertex: %s is not a terminal vertex name\n",newname); xm_print_message(message); XBell(XtDisplay(draw_area),0); } char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } redraw(); XtDestroyWidget(dialog); } void ParameterVertex::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Class_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget classlabel=XtCreateManagedWidget("Parameter Class Name: ",xmLabelGadgetClass,form,wargs,n); Widget cname; cname = XtCreateManagedWidget("Class_Name",xmTextWidgetClass,form,NULL,0); XmTextSetString(cname,this->get_name()->get_vertex_name()); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget clabel=XtCreateManagedWidget("Comments: ",xmLabelGadgetClass,form,wargs,n); n = 0; Widget cwin = XmCreateFrame(form,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) XmTextSetString(ctext,this->get_comments()->get_comments()); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cname, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, classlabel, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(clabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, cname, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, clabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if ( done ) { char *newname = XmTextGetString(cname); if (strcmp(newname,this->get_name()->get_vertex_name())!=0) { if (isLegalParName(newname)) { if (this->notIntroConflicts(newname)) { free(this->get_name()->get_vertex_name()); this->get_name()->set_vertex_name(newname); check_update_flag(); } else free(newname); } else free(newname); } else free(newname); char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } redraw(); XtDestroyWidget(dialog); } int ParameterVertex::notIntroConflicts(char *n) { /* get incoming edge and check the parassignments of each from vertex */ return this->get_incoming_paredge_store()->notIntroConflict(n); } int ObjectStore::notIntroConflict(char *n) { int r = 1; if (objects) objects->notIntroConflict(n,r); return r; } void GraphicsObjectList::notIntroConflict(char *n,int &r) { elm->notIntroConflict(n,r); if (next && r) next->notIntroConflict(n,r); } void ParameterEdge::notIntroConflict(char *n,int &r) { this->get_from_vertex()->get_parassignstore()->notIntroConflict(n,r); } void ParameterAssignmentStore::notIntroConflict(char *n,int &r) { if (assignments) assignments->notIntroConflict(n,r); } void ParameterAssignmentList::notIntroConflict(char *n,int &r) { elm->notIntroConflict(n,r); if (next && r) next->notIntroConflict(n,r); } void ParameterAssignment::notIntroConflict(char *n,int &r) { if (strcmp(formaledge->get_to_vertex()->get_vertex_name(),n)==0) { sprintf(message, "Change vertex: %s has been used by %s as a parameter.\n", n,formaledge->get_from_vertex()->get_vertex_name()); xm_print_message(message); XBell(XtDisplay(draw_area),0); r = 0; } } void ReqConstructionEdge::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Edge_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; Widget elabel=XtCreateManagedWidget("Required Construction Edge: ", xmLabelGadgetClass,form,wargs,n); Widget ename = XtCreateManagedWidget("Edge_Name",xmTextWidgetClass,form,NULL,0); if (this->get_edge_label()->get_val()) XmTextSetString(ename,this->get_edge_label()->get_val()); Widget pwin = XmCreatePanedWindow(form,"Vertex_Paned_Win",NULL,0); Widget bform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget blabel = XmCreateLabel(bform,"Syntax Before The Part:",wargs,n); XtManageChild(blabel); n = 0; Widget bwin = XmCreateFrame(bform,"Before_Frame",NULL,0); XtManageChild(bwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget btext = XmCreateScrolledText(bwin,"Before_Content",wargs,n); XtManageChild(btext); if (this->get_before()) { XmTextSetString(btext,this->get_before()); } XtVaSetValues(blabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(bwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, blabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget aform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget alabel = XmCreateLabel(aform,"Syntax After The Part:",wargs,1); XtManageChild(alabel); n = 0; Widget awin = XmCreateFrame(aform,"After_Frame",NULL,0); XtManageChild(awin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget atext = XmCreateScrolledText(awin,"After_Content",wargs,n); XtManageChild(atext); if (this->get_after()) { XmTextSetString(atext,this->get_after()); } XtVaSetValues(alabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(awin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, alabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget cform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget comlabel = XmCreateLabel(cform,"Comments:",wargs,1); XtManageChild(comlabel); n = 0; Widget cwin = XmCreateFrame(cform,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) { XmTextSetString(ctext,this->get_comments()->get_comments()); } XtVaSetValues(comlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, comlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(elabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, NULL); XtVaSetValues(ename, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, elabel, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(pwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, elabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtManageChild(pwin); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if (done) { char *tn = XmTextGetString(ename); if (this->get_edge_label()->get_val()) { if (strcmp(tn,this->get_edge_label()->get_val())!=0) { if (isLegalLabel(tn)) { free(this->get_edge_label()->get_val()); this->get_edge_label()->set_val(tn); check_update_flag(); } else free(tn); } else free(tn); } else free(tn); char *b = XmTextGetString(btext); if (strlen(b)!= 0) { if (this->get_before() == NULL || strcmp(this->get_before(),b)!=0) { if (this->get_before()) free(this->get_before()); this->set_before(b); check_update_flag(); } else free(b); } else { if (this->get_before()) { free(this->get_before()); this->set_before(NULL); check_update_flag(); } free(b); } char *a = XmTextGetString(atext); if (strlen(a)!= 0) { if (this->get_after() == NULL || strcmp(this->get_after(),a)!=0) { if (this->get_after()) free(this->get_after()); this->set_after(a); check_update_flag(); } else free(a); } else { if (this->get_after()) { free(this->get_after()); this->set_after(NULL); check_update_flag(); } free(a); } char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } redraw(); XtDestroyWidget(dialog); } void OptConstructionEdge::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Edge_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; Widget elabel=XtCreateManagedWidget("Optional Construction Edge: ", xmLabelGadgetClass,form,wargs,n); Widget ename = XtCreateManagedWidget("Edge_Name",xmTextWidgetClass,form,NULL,0); if (this->get_edge_label()->get_val()) XmTextSetString(ename,this->get_edge_label()->get_val()); Widget pwin = XmCreatePanedWindow(form,"Vertex_Paned_Win",NULL,0); /* befores */ Widget bbform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget bblabel = XmCreateLabel(bbform,"Syntax Before The Opening Bracket:",wargs,n); XtManageChild(bblabel); n = 0; Widget bbwin = XmCreateFrame(bbform,"Comment_Frame",NULL,0); XtManageChild(bbwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget bbtext = XmCreateScrolledText(bbwin,"Before_Content",wargs,n); XtManageChild(bbtext); if (this->get_before()) { XmTextSetString(bbtext,this->get_before()); } Widget bpform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget bplabel = XmCreateLabel(bpform,"Syntax Before The Part Label:",wargs,n); XtManageChild(bplabel); n = 0; Widget bpwin = XmCreateFrame(bpform,"Comment_Frame",NULL,0); XtManageChild(bpwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget bptext = XmCreateScrolledText(bpwin,"Before_Content",wargs,n); XtManageChild(bptext); if (this->get_inbefore()) { XmTextSetString(bptext,this->get_inbefore()); } XtVaSetValues(bblabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(bplabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(bbwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, bblabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(bpwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, bplabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget apform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget aplabel = XmCreateLabel(apform,"Syntax Before The Closing Bracket:",wargs,n); XtManageChild(aplabel); n = 0; Widget apwin = XmCreateFrame(apform,"Comment_Frame",NULL,0); XtManageChild(apwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget aptext = XmCreateScrolledText(apwin,"After_Content",wargs,n); XtManageChild(aptext); if (this->get_inafter()) { XmTextSetString(aptext,this->get_inafter()); } Widget abform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget ablabel = XmCreateLabel(abform,"Syntax After The Closing Bracket:",wargs,n); XtManageChild(ablabel); n = 0; Widget abwin = XmCreateFrame(abform,"Comment_Frame",NULL,0); XtManageChild(abwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget abtext = XmCreateScrolledText(abwin,"After_Content",wargs,n); XtManageChild(abtext); if (this->get_after()) { XmTextSetString(abtext,this->get_after()); } XtVaSetValues(aplabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(apwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, aplabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(ablabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(abwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, ablabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget cform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget comlabel = XmCreateLabel(cform,"Comments:",wargs,1); XtManageChild(comlabel); n = 0; Widget cwin = XmCreateFrame(cform,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) { XmTextSetString(ctext,this->get_comments()->get_comments()); } XtVaSetValues(comlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, comlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(elabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_NONE, NULL); XtVaSetValues(ename, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_WIDGET, XmNleftWidget, elabel, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(pwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, ename, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtManageChild(pwin); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if (done) { char *tn = XmTextGetString(ename); if (this->get_edge_label()->get_val()) { if (strcmp(tn,this->get_edge_label()->get_val())!=0) { if (isLegalLabel(tn)) { free(this->get_edge_label()->get_val()); this->get_edge_label()->set_val(tn); check_update_flag(); } else free(tn); } else free(tn); } else free(tn); char *b = XmTextGetString(bbtext); if (strlen(b)!= 0) { if (this->get_before() == NULL || strcmp(this->get_before(),b)!=0) { if (this->get_before()) free(this->get_before()); this->set_before(b); check_update_flag(); } else free(b); } else { if (this->get_before()) { free(this->get_before()); this->set_before(NULL); check_update_flag(); } free(b); } char *a = XmTextGetString(abtext); if (strlen(a)!= 0) { if (this->get_after() == NULL || strcmp(this->get_after(),a)!=0) { if (this->get_after()) free(this->get_after()); this->set_after(a); check_update_flag(); } else free(a); } else { if (this->get_after()) { free(this->get_after()); this->set_after(NULL); check_update_flag(); } free(a); } b = XmTextGetString(bptext); if (strlen(b)!= 0) { if (this->get_inbefore() == NULL || strcmp(this->get_inbefore(),b)!=0) { if (this->get_inbefore()) free(this->get_inbefore()); this->set_inbefore(b); check_update_flag(); } else free(b); } else { if (this->get_inbefore()) { free(this->get_inbefore()); this->set_inbefore(NULL); check_update_flag(); } free(b); } a = XmTextGetString(aptext); if (strlen(a)!= 0) { if (this->get_inafter() == NULL || strcmp(this->get_inafter(),a)!=0) { if (this->get_inafter()) free(this->get_inafter()); this->set_inafter(a); check_update_flag(); } else free(a); } else { if (this->get_inafter()) { free(this->get_inafter()); this->set_inafter(NULL); check_update_flag(); } free(a); } char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } redraw(); XtDestroyWidget(dialog); } void ReqRepetitionEdge::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Edge_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; Widget elabel=XtCreateManagedWidget("Required Repetition edge", xmLabelGadgetClass,form,wargs,n); Widget pwin = XmCreatePanedWindow(form,"Vertex_Paned_Win",NULL,0); Widget bform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget blabel = XmCreateLabel(bform,"Syntax Adter The Opening Brace:",wargs,n); XtManageChild(blabel); n = 0; Widget bwin = XmCreateFrame(bform,"Before_Frame",NULL,0); XtManageChild(bwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget btext = XmCreateScrolledText(bwin,"Before_Content",wargs,n); XtManageChild(btext); if (this->get_before()) { XmTextSetString(btext,this->get_before()); } XtVaSetValues(blabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(bwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, blabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget aform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget alabel = XmCreateLabel(aform,"Syntax Before The Closing Brace:",wargs,1); XtManageChild(alabel); n = 0; Widget awin = XmCreateFrame(aform,"After_Frame",NULL,0); XtManageChild(awin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget atext = XmCreateScrolledText(awin,"After_Content",wargs,n); XtManageChild(atext); if (this->get_after()) { XmTextSetString(atext,this->get_after()); } XtVaSetValues(alabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(awin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, alabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget cform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget comlabel = XmCreateLabel(cform,"Comments:",wargs,1); XtManageChild(comlabel); n = 0; Widget cwin = XmCreateFrame(cform,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) { XmTextSetString(ctext,this->get_comments()->get_comments()); } XtVaSetValues(comlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, comlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(elabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(pwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, elabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtManageChild(pwin); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if (done) { char *b = XmTextGetString(btext); if (strlen(b)!= 0) { if (this->get_before() == NULL || strcmp(this->get_before(),b)!=0) { if (this->get_before()) free(this->get_before()); this->set_before(b); check_update_flag(); } else free(b); } else { if (this->get_before()) free(this->get_before()); this->set_before(NULL); check_update_flag(); free(b); } char *a = XmTextGetString(atext); if (strlen(a)!= 0) { if (this->get_after() == NULL || strcmp(this->get_after(),a)!=0) { if (this->get_after()) free(this->get_after()); this->set_after(a); check_update_flag(); } else free(a); } else { if (this->get_after()) free(this->get_after()); this->set_after(NULL); check_update_flag(); free(a); } char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } XtDestroyWidget(dialog); } void OptRepetitionEdge::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Edge_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; Widget elabel=XtCreateManagedWidget("Optional Repetition edge", xmLabelGadgetClass,form,wargs,n); Widget pwin = XmCreatePanedWindow(form,"Vertex_Paned_Win",NULL,0); Widget bform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget blabel = XmCreateLabel(bform,"Syntax Adter The Opening Brace:",wargs,n); XtManageChild(blabel); n = 0; Widget bwin = XmCreateFrame(bform,"Comment_Frame",NULL,0); XtManageChild(bwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget btext = XmCreateScrolledText(bwin,"Before_Content",wargs,n); XtManageChild(btext); if (this->get_before()) { XmTextSetString(btext,this->get_before()); } XtVaSetValues(blabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(bwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, blabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget aform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget alabel = XmCreateLabel(aform,"Syntax Before The Closing Brace:",wargs,1); XtManageChild(alabel); n = 0; Widget awin = XmCreateFrame(aform,"Comment_Frame",NULL,0); XtManageChild(awin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget atext = XmCreateScrolledText(awin,"After_Content",wargs,n); XtManageChild(atext); if (this->get_after()) { XmTextSetString(atext,this->get_after()); } XtVaSetValues(alabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(awin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, alabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); Widget cform = XtCreateManagedWidget("Form",xmFormWidgetClass,pwin,NULL,0); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget comlabel = XmCreateLabel(cform,"Comments:",wargs,1); XtManageChild(comlabel); n = 0; Widget cwin = XmCreateFrame(cform,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) { XmTextSetString(ctext,this->get_comments()->get_comments()); } XtVaSetValues(comlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, comlabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(elabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(pwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, elabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtManageChild(pwin); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if (done) { char *b = XmTextGetString(btext); if (strlen(b)!= 0) { if (this->get_before() == NULL || strcmp(this->get_before(),b)!=0) { if (this->get_before()) free(this->get_before()); this->set_before(b); check_update_flag(); } else free(b); } else { if (this->get_before()) { free(this->get_before()); this->set_before(NULL); check_update_flag(); } free(b); } char *a = XmTextGetString(atext); if (strlen(a)!= 0) { if (this->get_after() == NULL || strcmp(this->get_after(),a)!=0) { if (this->get_after()) free(this->get_after()); this->set_after(a); check_update_flag(); } else free(a); } else { if (this->get_after()) { free(this->get_after()); this->set_after(NULL); check_update_flag(); } free(a); } char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } XtDestroyWidget(dialog); } /****************************************************************** ** The following code needs abstraction ** *******************************************************************/ void AlternationEdge::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Edge_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; Widget classlabel=XtCreateManagedWidget("Alternation Edge",xmLabelGadgetClass,form,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget clabel = XmCreateLabel(form,"Comments:",wargs,n); XtManageChild(clabel); n = 0; Widget cwin = XmCreateFrame(form,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) XmTextSetString(ctext,this->get_comments()->get_comments()); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(clabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, classlabel, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, clabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if ( done ) { char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } XtDestroyWidget(dialog); } void InheritanceEdge::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Edge_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; // XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget classlabel=XtCreateManagedWidget("Inheritance Edge",xmLabelGadgetClass,form,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget clabel = XmCreateLabel(form,"Comments:",wargs,n); XtManageChild(clabel); n = 0; Widget cwin = XmCreateFrame(form,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) XmTextSetString(ctext,this->get_comments()->get_comments()); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(clabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, classlabel, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, clabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if ( done ) { char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } XtDestroyWidget(dialog); } void UndeterminedEdge::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Edge_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; // XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget classlabel=XtCreateManagedWidget("Undetermined Edge",xmLabelGadgetClass,form,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget clabel = XmCreateLabel(form,"Comments:",wargs,n); XtManageChild(clabel); n = 0; Widget cwin = XmCreateFrame(form,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) XmTextSetString(ctext,this->get_comments()->get_comments()); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(clabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, classlabel, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, clabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if ( done ) { char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } XtDestroyWidget(dialog); } void ParameterEdge::doubleClickPopup() { Widget dialog; int n; n = 0; XtSetArg(wargs[n], XmNautoUnmanage, False); n++; XtSetArg(wargs[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++; dialog = XmCreatePromptDialog(draw_area,"Edge_Info", wargs,n); Widget form = XtCreateManagedWidget("Form",xmFormWidgetClass,dialog,NULL,0); n = 0; Widget classlabel=XtCreateManagedWidget("Parameter Edge",xmLabelGadgetClass,form,wargs,n); n = 0; XtSetArg(wargs[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; Widget clabel = XmCreateLabel(form,"Comments:",wargs,n); XtManageChild(clabel); n = 0; Widget cwin = XmCreateFrame(form,"Comment_Frame",NULL,0); XtManageChild(cwin); n = 0; XtSetArg(wargs[n], XmNwidth, 300); n++; XtSetArg(wargs[n], XmNheight,100); n++; XtSetArg(wargs[n],XmNeditMode , XmMULTI_LINE_EDIT); n++; XtSetArg(wargs[n], XmNscrollingPolicy, XmAUTOMATIC); n++; Widget ctext = XmCreateScrolledText(cwin,"Comment_Content",wargs,n); XtManageChild(ctext); if (this->get_comments()->get_comments()) XmTextSetString(ctext,this->get_comments()->get_comments()); XtVaSetValues(classlabel, XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(clabel, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, classlabel, XmNbottomAttachment, XmATTACH_NONE, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtVaSetValues(cwin, XmNtopAttachment, XmATTACH_WIDGET, XmNtopWidget, clabel, XmNbottomAttachment, XmATTACH_FORM, XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM, NULL); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_VALUE_TEXT)); XtUnmanageChild( XmSelectionBoxGetChild(dialog,XmDIALOG_SELECTION_LABEL)); XmString xmstr = XmStringCreateSimple("Apply"); XtVaSetValues(dialog, XmNokLabelString, xmstr, NULL); /* cheating */ XmStringFree(xmstr); xmstr = XmStringCreateSimple("Done"); XtVaSetValues(dialog, XmNcancelLabelString,xmstr, NULL); XmStringFree(xmstr); xmstr = XmStringCreateSimple("Cancel"); XtVaSetValues(dialog, XmNhelpLabelString, xmstr, NULL); XmStringFree(xmstr); int done = 0; XtAddCallback(dialog, XmNcancelCallback, (XtCallbackProc)finishInfo,(XtPointer)&done); XtAddCallback(dialog, XmNhelpCallback, (XtCallbackProc)cancelInfo,(XtPointer)&done); XtManageChild(dialog); XtPopup(XtParent(dialog), XtGrabExclusive); dialog_done = 0; while ( dialog_done == 0 || XtAppPending(app)) XtAppProcessEvent(app, XtIMAll); if ( done ) { char *c = XmTextGetString(ctext); if (strlen(c)!= 0) { if (this->get_comments()->get_comments() == NULL || strcmp(this->get_comments()->get_comments(),c)!=0) { if (this->get_comments()->get_comments()) free(this->get_comments()->get_comments()); this->get_comments()->set_comments(c); check_update_flag(); } else free(c); } else { if (this->get_comments()->get_comments()) { free(this->get_comments()->get_comments()); this->get_comments()->set_comments(NULL); check_update_flag(); } free(c); } } XtDestroyWidget(dialog); } /***** assign_args(args,aform) ***********/ void ParameterAssignmentStore::assign_args(Widget f) { if (assignments) assignments->assign_args(f,0); } void ParameterAssignmentList::assi