📄 dna.cc
字号:
XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNautoUnmanage, False); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtitle, title); n++; form = w[wc++] = XmCreateFormDialog(g.main_widget, "ClickboxForm", args, n); //--------Title for dialog box-------------------------------------// w[wc++] = addlabel(form,title,CENTER,1,2,99,15); //--------Slider---------------------------------------------------// n = 0; XtSetArg(args[n], XmNwidth, max(200,xsize-20)); n++; XtSetArg(args[n], XmNleftPosition, 5); n++; // % of width from left XtSetArg(args[n], XmNtopPosition, 40); n++; // % of height from top XtSetArg(args[n], XmNbottomPosition, 75); n++; // % of width from top XtSetArg(args[n], XmNrightPosition, 95); n++; // % of height from left 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++; XtSetArg(args[n], XmNminimum, minval); n++; XtSetArg(args[n], XmNmaximum, maxval); n++; XtSetArg(args[n], XmNprocessingDirection,XmMAX_ON_RIGHT); n++; XtSetArg(args[n], XmNhighlightOnEnter, True); n++; XtSetArg(args[n], XmNincrement, 1); n++; XtSetArg(args[n], XmNvalue, startval); n++; XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg(args[n], XmNscaleHeight, 35); n++; #ifdef MOTIF2 XtSetArg(args[n], XmNshowValue, XmNEAR_BORDER); n++; #endif XtSetArg(args[n], XmNdecimalPoints, decimalpoints); n++; XtSetArg(args[n], XmNshowArrows, True); n++; XtSetArg(args[n], XmNhighlightThickness, 1); n++; slider = w[wc++] = XmCreateScale(form, "Value", args, n); XtManageChild(slider); //--------Text area------------------------------------------------// n = 0; XtSetArg(args[n], XmNcolumns, 40); n++; XtSetArg(args[n], XmNrows, 1); n++; XtSetArg(args[n], XmNvalue, textlabel); n++; XtSetArg(args[n], XmNleftPosition, 5); n++; // % of width from left XtSetArg(args[n], XmNtopPosition, 20); n++; // % of height from top XtSetArg(args[n], XmNbottomPosition, 38); n++; // % of width from top XtSetArg(args[n], XmNrightPosition, 95); n++; // % of height from left 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++; XtSetArg(args[n], XmNmarginHeight, 2); n++; XtSetArg(args[n], XmNmarginWidth, 2); n++; clickboxdata[0].title = textlabel; clickboxdata[0].answer = startval; clickboxdata[0].fanswer = startval; clickboxdata[0].startval = startval; clickboxdata[0].minval = minval; clickboxdata[0].maxval = maxval; clickboxdata[0].type = type; clickboxdata[0].wantpreview = 0; clickboxdata[0].decimalpoints = decimalpoints; clickboxdata[0].form = form; clickboxdata[0].widget[0] = slider; clickboxdata[0].f1 = null; clickboxdata[0].f2 = null; clickboxdata[0].f3 = null; if(type==INTEGER) itoa(startval, textlabel, 10); else gcvt(startval/pow(10, g.signif), g.signif, textlabel); text = w[wc++] = XmCreateText(form, textlabel, args, n); XtAddCallback(text, XmNvalueChangedCallback, (XtCallbackProc)clickboxcb, (XtPointer)&clickboxdata[0]); XtManageChild(text); //--------Now add a callback so slider can change text area--------// clickboxdata[1].title = textlabel; clickboxdata[1].answer = startval; clickboxdata[1].fanswer = startval; clickboxdata[1].startval = startval; clickboxdata[1].minval = minval; clickboxdata[1].maxval = maxval; clickboxdata[1].type = type; clickboxdata[1].wantpreview = 0; clickboxdata[1].form = form; clickboxdata[1].widget[0] = text; clickboxdata[1].decimalpoints = max(0,decimalpoints); clickboxdata[1].f1 = f1; clickboxdata[1].f2 = f2; clickboxdata[1].f3 = null; XtAddCallback(slider, XmNdragCallback, (XtCallbackProc)slidercb, (XtPointer)&clickboxdata[1]); XtAddCallback(slider, XmNvalueChangedCallback, (XtCallbackProc)slidercb, (XtPointer)&clickboxdata[1]); //// Add callbacks so hitting Return activates Ok button for(k=0;k<wc;k++) XtAddEventHandler(w[k], KeyPressMask, FALSE, (XtEH)entercb, (XtP)form); //--------Ok, Cancel, Help buttons & their callbacks---------------// addstandardbuttons(form, &w[wc], &helptopic); wc += 3; // addstandardbuttons adds 3 widgets XtManageChild(form); event_loop(form); XmScaleGetValue(slider, &answer); XtUnmanageChild(form); for(k=0;k<wc;k++) { XtRemoveEventHandler(w[k], KeyPressMask, FALSE, (XtEH)entercb, (XtP)form); XtDestroyWidget(w[k]); } delete[] w; g.state = ostate; return answer;}//--------------------------------------------------------------------//// multiclick- puts integers into clickboxinfo struct by click-and- //// box dragging with the mouse. //// 'getout' must be reset to 0 by the calling routine. //// Returns error code (0=OK) //// Calls f(), which is a calling-routine-specific func- //// tion, whenever a value is changed or mouse is //// clicked. This allows passed function f() to add new //// buttons. //// 'a.boxtype' is 0=counter, 1=slider, 2=valslider //// If 'a[0].wantpreview'==1, it adds "preview" button and //// only calls f() when clicked; otherwise, it calls f() //// continuously. ////--------------------------------------------------------------------//int multiclickbox(char* title, int noofboxes, clickboxinfo* a, void f(int values[10]), int helptopic){ Widget form, slider[noofboxes], text[noofboxes], *w; clickboxinfo clickboxdata[2][noofboxes]; int k, n, wc=0, x, xsize, y, ypct, ysize; int boxsize; Arg args[100]; w = new Widget[100]; char textlabel[FILENAMELENGTH]; xsize = 425; ysize = 150+20*noofboxes; // overall height in pixels const int LABELSTART=64; const int LABELEND=85; ypct = 100/(noofboxes+2); // % of y height for each box boxsize = (int)(0.9*ypct); // height of each box in % //------- Create a form dialog shell widget -----------------------// n=0; XtSetArg(args[n], XmNwidth, xsize); n++; XtSetArg(args[n], XmNheight, ysize); n++; XtSetArg(args[n], XmNresizable, False); n++; XtSetArg(args[n], XmNautoUnmanage, False); n++; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtitle, title); n++; form = w[wc++] = XmCreateFormDialog(g.main_widget, "MultiClickboxForm", args, n); //--------Title for dialog box-------------------------------------// x = 100; w[wc++] = addlabel(form,title,CENTER,1,1,99,15); //--------Slider---------------------------------------------------// y = 15; for(k=0;k<noofboxes;k++) { a[0].answers[k] = a[k].startval; w[wc++] = addlabel(form,a[k].title,LEFT,LABELSTART,y+boxsize/4, LABELEND,y+boxsize+boxsize/4); itoa(a[k].startval, textlabel, 10); n = 0; XtSetArg(args[n], XmNwidth, max(300,xsize-20)); n++; XtSetArg(args[n], XmNleftPosition, 5); n++; // % of width from left XtSetArg(args[n], XmNtopPosition, y); n++; // % of height from top XtSetArg(args[n], XmNbottomPosition, y+boxsize); n++; // % of width from top XtSetArg(args[n], XmNrightPosition, LABELSTART-1); n++; // % of height from left 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++; XtSetArg(args[n], XmNminimum, a[k].minval); n++; XtSetArg(args[n], XmNmaximum, a[k].maxval); n++; XtSetArg(args[n], XmNprocessingDirection,XmMAX_ON_RIGHT); n++; XtSetArg(args[n], XmNhighlightOnEnter, True); n++; XtSetArg(args[n], XmNincrement, 1); n++; XtSetArg(args[n], XmNvalue, a[k].startval); n++; XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++; XtSetArg(args[n], XmNshowValue, XmNONE); n++; XtSetArg(args[n], XmNdecimalPoints, 0); n++; XtSetArg(args[n], XmNshowArrows, True); n++; XtSetArg(args[n], XmNhighlightThickness, 1); n++; slider[k] = w[wc++] = XmCreateScale(form, "MultiClickBoxScale", args, n); XtManageChild(slider[k]); //--------Text area------------------------------------------------// n = 0; XtSetArg(args[n], XmNcolumns, 20); n++; XtSetArg(args[n], XmNrows, 1); n++; XtSetArg(args[n], XmNvalue, textlabel); n++; XtSetArg(args[n], XmNleftPosition, LABELEND+1); n++; // % of width from left XtSetArg(args[n], XmNtopPosition, y+boxsize/4); n++; // % of height from top XtSetArg(args[n], XmNbottomPosition, y+boxsize); n++; // % of width from top XtSetArg(args[n], XmNrightPosition, 98); n++; // % of height from left 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++; XtSetArg(args[n], XmNmarginHeight, 2); n++; XtSetArg(args[n], XmNmarginWidth, 2); n++; strcpy(clickboxdata[0][k].title, textlabel); clickboxdata[0][k].answer = a[k].startval; // An answers[] array has been allocated only for the first one. // All the data are accessible to all the other sliders, and all // are aliased to the same original array. clickboxdata[0][k].answers = a[0].answers; clickboxdata[0][k].k = k; clickboxdata[0][k].startval = a[k].startval; clickboxdata[0][k].minval = a[k].minval; clickboxdata[0][k].maxval = a[k].maxval; clickboxdata[0][k].type = INTEGER; clickboxdata[0][k].wantpreview = 0; clickboxdata[0][k].widget[0] = slider[k]; clickboxdata[0][k].f1 = null; clickboxdata[0][k].f2 = null; clickboxdata[0][k].f3 = f; text[k] = w[wc++] = XmCreateText(form, textlabel, args, n); XtAddCallback(text[k], XmNvalueChangedCallback, (XtCallbackProc)clickboxcb, (XtPointer)&clickboxdata[0][k]); XtManageChild(text[k]); //--------Now add a callback so slider can change text area--------// strcpy(clickboxdata[1][k].title, textlabel); clickboxdata[1][k].answer = a[k].startval; clickboxdata[1][k].answers = a[0].answers; clickboxdata[1][k].k = k; clickboxdata[1][k].startval = a[k].startval; clickboxdata[1][k].minval = a[k].minval; clickboxdata[1][k].maxval = a[k].maxval; clickboxdata[1][k].type = INTARRAY; clickboxdata[1][k].wantpreview = 0; clickboxdata[1][k].widget[0] = text[k]; clickboxdata[1][k].decimalpoints = 0; clickboxdata[1][k].f1 = null; clickboxdata[1][k].f2 = null; clickboxdata[1][k].f3 = f; XtAddCallback(slider[k], XmNvalueChangedCallback, (XtCallbackProc)slidercb, (XtPointer)&clickboxdata[1][k]); if(a[k].wantdragcb) XtAddCallback(slider[k], XmNdragCallback, (XtCallbackProc)slidercb, (XtPointer)&clickboxdata[1][k]); y+=ypct; } //--------Ok, Cancel, Help buttons & their callbacks---------------// addstandardbuttons(form, &w[wc], &helptopic); wc += 3; // addstandardbuttons adds 3 widgets XtManageChild(form); event_loop(form); for(k=0;k<noofboxes;k++) XmScaleGetValue(slider[k], &a[k].answer); XtUnmanageChild(form); for(k=0;k<wc;k++) XtDestroyWidget(w[k]); delete[] w; return 0;}//--------------------------------------------------------------------//// save_ok - returns YES if everything saved & ok to quit. //// Returns NO if user clicks "no". //// Returns ABORT if user clicks "cancel" ////--------------------------------------------------------------------//int save_ok(int ino){ char name[FILENAMELENGTH]; int answer=YES; char tempstring[80]; g.getout=0; if(ino<0) return(ERROR); // should not happen sprintf(tempstring,"Save image #%d? \n(%s)",ino,name); switch(message(tempstring,YESNOQUESTION)) { case YES: answer=YES; if(g.getout)answer=ABORT; // Clicked Cancel break; case NO: answer=NO; break; // No, dont save but ok to quit case CANCEL: answer=ABORT; break; // Clicked Cancel in message box } return(answer);}//--------------------------------------------------------------------//// print ////--------------------------------------------------------------------//void print(char *string, int x, int y, uint fcol, uint bcol, Window win, int wantbkg, int vertical){ int ascent,descent,offset,pos,i,j,w,h,xx,yy; char tempstring[256]; int bpp,c,s; int len=strlen(string); bpp = g.bitsperpixel; for(pos=0; pos<len; pos++) { s = string[pos];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -