📄 dna3.cc
字号:
xms = XmStringCreateSimple(temp));n++; wid[k] = w[wc++] = XmCreatePushButton(form,boxstring,args,n); a.boxwidget[j][k] = wid[k]; XtManageChild(wid[k]); XmStringFree(xms); XtAddCallback(wid[k], XmNactivateCallback, (XtCBP)dialogmulticlickboxcb, (XtP)&a); XtAddCallback(wid[k], XmNarmCallback,(XtCBP)armboxcb, (XtP)&a); w[wc++] = addlabel(form,boxstring,LEFT,LABELSTART,y,LABELEND,y+bspacing); } for(i=0;i<4;i++) clickboxdata[j].widget[i] = wid[i]; clickboxdata[j].dirmask = 0; break; case TOGGLEMULTICLICKBOX: //// Toggle button portion - The callback f1 must unset other //// buttons, gray out unwanted options, etc. - it is not done //// automatically. n = 0; XtSetArg(args[n], XmNmarginLeft, 1); n++; XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNspacing, 0); n++; XtSetArg(args[n], XmNleftPosition, BOXSTART); n++; XtSetArg(args[n], XmNtopPosition, y); n++; XtSetArg(args[n], XmNbottomPosition, y+bspacing); n++; XtSetArg(args[n], XmNrightPosition, BOXSTART+CHECKWIDTH); n++; XtSetArg(args[n], XmNfractionBase, 100); n++; // Use percentages XtSetArg(args[n], XmNtopAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++; #ifdef MOTIF2 XtSetArg(args[n], XmNindicatorOn, XmINDICATOR_CROSS_BOX); n++; #endif XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; if(a.boxset[j]){ XtSetArg(args[n], XmNset, True); n++; } else { XtSetArg(args[n], XmNset, False); n++; } //// Stop Motif from trying to grab another color if none are available. if(g.want_colormaps) { XtSetArg(args[n], XmNbackground, g.main_bcolor); n++; XtSetArg(args[n], XmNforeground, g.main_fcolor); n++; } w[wc++] = boxbutton[j] =XmCreateToggleButton(form," ",args,n); a.boxwidget[j][0] = boxbutton[j]; XtManageChild(boxbutton[j]); //// Set up callbacks for each box button XtAddCallback(boxbutton[j], XmNarmCallback,(XtCBP)armboxcb, (XtP)&a); //// Multiclickbox portion n = 0; XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNspacing, 0); n++; XtSetArg(args[n], XmNleftPosition, BOXSTART+CHECKWIDTH); n++; XtSetArg(args[n], XmNtopPosition, y); n++; XtSetArg(args[n], XmNbottomPosition, y+bspacing); n++; XtSetArg(args[n], XmNrightPosition, BOXEND); n++; XtSetArg(args[n], XmNfractionBase, 100); n++; // Use percentages XtSetArg(args[n], XmNtopAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++; //// Stop Motif from trying to grab another color if none are available. if(g.want_colormaps) { XtSetArg(args[n], XmNbackground, g.main_bcolor); n++; XtSetArg(args[n], XmNforeground, g.main_fcolor); n++; } value = atoi(a.answer[j]); //valuetoRGB(value,color[1],color[2],color[3],a.bpp); clickboxdata[j].title = boxstring; clickboxdata[j].answer = atoi(a.answer[j]); clickboxdata[j].startval = atoi(a.answer[j]); clickboxdata[j].minval = a.boxmin[j]; clickboxdata[j].maxval = a.boxmax[j]; clickboxdata[j].type = INTEGER; clickboxdata[j].wantpreview = 0; clickboxdata[j].wantdragcb = 1; clickboxdata[j].f1 = null; clickboxdata[j].f2 = null; clickboxdata[j].f3 = null; a.c[j] = &clickboxdata[j]; for(k=1;k<4;k++) { XtSetArg(args[n], XmNleftPosition, BOXSTART+k*7); n++; XtSetArg(args[n], XmNtopPosition, y); n++; XtSetArg(args[n], XmNrightPosition, BOXSTART+(k+1)*7-1); n++; XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNspacing, 0); n++; XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNfractionBase, 100); n++; // Use percentages XtSetArg(args[n], XmNtopAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++; itoa(color[k],temp,10); XtSetArg(args[n], XmNlabelString, xms = XmStringCreateSimple(temp));n++; wid[k] = w[wc++] = XmCreatePushButton(form,boxstring,args,n); a.boxwidget[j][k] = wid[k]; XtManageChild(wid[k]); XmStringFree(xms); XtAddCallback(wid[k], XmNactivateCallback, (XtCBP)dialogmulticlickboxcb, (XtP) &a); XtAddCallback(wid[k], XmNarmCallback,(XtCBP)armboxcb, (XtP)&a); w[wc++] = addlabel(form,boxstring,LEFT,LABELSTART,y,LABELEND,y+bspacing); } for(i=0;i<4;i++) clickboxdata[j].widget[i] = wid[i]; clickboxdata[j].dirmask = 0; break; case LIST: case NON_EDIT_LIST: case NO_LABEL_LIST: n = 0; XtSetArg(args[n], XmNmarginLeft, 4); n++; XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNspacing, 0); n++; XtSetArg(args[n], XmNleftPosition, BOXSTART); n++; XtSetArg(args[n], XmNtopPosition, y); n++; XtSetArg(args[n], XmNbottomPosition, y+bspacing); n++; XtSetArg(args[n], XmNrightPosition, BOXEND); n++; XtSetArg(args[n], XmNfractionBase, 100); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; k = a.boxmenuselection[j]; XtSetArg(args[n], XmNlabelString, xms = XmStringCreateSimple(a.boxmenu[j][k]));n++; //// Stop Motif from trying to grab another color if none are available. if(g.want_colormaps) { XtSetArg(args[n], XmNbackground, g.main_bcolor); n++; XtSetArg(args[n], XmNforeground, g.main_fcolor); n++; } boxbutton[j] = w[wc++] = XmCreatePushButton(form,boxstring,args,n); a.boxwidget[j][0] = boxbutton[j]; a.boxwidget[j][1] = 0; a.boxwidget[j][2] = 0; a.boxwidget[j][3] = 0; XtManageChild(boxbutton[j]); XmStringFree(xms); w[wc++] = addlabel(form,boxstring,LEFT,LABELSTART,y,LABELEND,y+bspacing); clickboxdata[j].title = a.boxmenutitle[j]; clickboxdata[j].answer = a.boxmenuselection[j]; clickboxdata[j].widget[0] = boxbutton[j]; clickboxdata[j].dirmask = 0; clickboxdata[j].list = a.boxmenu[j]; clickboxdata[j].helptopic = a.helptopic; clickboxdata[j].listsize = a.boxmax[j]; clickboxdata[j].f1 = null; clickboxdata[j].f2 = null; clickboxdata[j].f3 = null; if(a.boxtype[j]==NON_EDIT_LIST) clickboxdata[j].allowedit = 0; else { clickboxdata[j].allowedit = 1; clickboxdata[j].editcol = a.list_editcol[j]; clickboxdata[j].editrow = a.list_editrow[j]; clickboxdata[j].maxstringsize = a.list_maxstringsize[j]; } a.c[j] = &clickboxdata[j]; XtAddCallback(boxbutton[j], XmNactivateCallback, (XtCBP)dialoglistcb, (XtP)&a); break; case LABEL: // Just a heading, don't do anything w[wc++] = addlabel(form,boxstring,LEFT,BOXSTART,y,BOXEND,y+bspacing); a.boxwidget[j][0] = 0; a.boxwidget[j][1] = 0; a.boxwidget[j][2] = 0; a.boxwidget[j][3] = 0; break; case DOUBLECLICKBOX: n = 0; XtSetArg(args[n], XmNmarginLeft, 4); n++; XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNspacing, 0); n++; XtSetArg(args[n], XmNleftPosition, BOXSTART); n++; XtSetArg(args[n], XmNtopPosition, y); n++; XtSetArg(args[n], XmNbottomPosition, y+bspacing); n++; XtSetArg(args[n], XmNrightPosition, BOXEND); n++; XtSetArg(args[n], XmNfractionBase, 100); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_POSITION); n++; XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); n++; XtSetArg(args[n], XmNlabelString, xms = XmStringCreateSimple(a.answer[j]));n++; //// Stop Motif from trying to grab another color if none are available. if(g.want_colormaps) { XtSetArg(args[n], XmNbackground, g.main_bcolor); n++; XtSetArg(args[n], XmNforeground, g.main_fcolor); n++; } boxbutton[j] = w[wc++] = XmCreatePushButton(form,boxstring,args,n); a.boxwidget[j][0] = boxbutton[j]; a.boxwidget[j][1] = 0; a.boxwidget[j][2] = 0; a.boxwidget[j][3] = 0; XtManageChild(boxbutton[j]); XmStringFree(xms); w[wc++] = addlabel(form,boxstring,LEFT,LABELSTART,y,LABELEND,y+bspacing); clickboxdata[j].title = boxstring; clickboxdata[j].fanswer = atof(a.answer[j]); clickboxdata[j].fstartval = atof(a.answer[j]); clickboxdata[j].fminval = (double)a.boxmin[j]; clickboxdata[j].fmaxval = (double)a.boxmax[j]; clickboxdata[j].type = FLOAT; clickboxdata[j].wantpreview = 0; clickboxdata[j].widget[0] = boxbutton[j]; clickboxdata[j].dirmask = 0; clickboxdata[j].f1 = null; clickboxdata[j].f2 = null; clickboxdata[j].f3 = null; a.c[j] = &clickboxdata[j]; XtAddCallback(boxbutton[j], XmNactivateCallback, (XtCBP)dialogdoubleclickboxcb, (XtP)&a); XtAddCallback(boxbutton[j], XmNarmCallback,(XtCBP)armboxcb, (XtP)&a); break; default: fprintf(stderr,"error in dialogboxes\n"); } y+=bspacing; } addstandardbuttons(form, &w[wc], &a.helptopic); wc += 3; // This makes the Ok button the default, but also trashes the dialog box. // So we are forced to add an event handler to every button. // XtVaSetValues(form, XmNdefaultButton, okbutton, NULL); // Make Return key activate Ok button: for(k=0;k<wc;k++) XtAddEventHandler(w[k], KeyPressMask, FALSE, (XtEH)entercb, (XtP)form); XtAddEventHandler(XtParent((form)), FocusChangeMask, False, (XtEH)raisecb, (XtP)NULL); // if(a.want_changecicb)// XtAddEventHandler(g.drawing_area, SubstructureNotifyMask, FALSE,// (XtEH)dialogchangecicb, (XtP)&a); //// Initialize any grayed-out items in the callback if any
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -