📄 ui_panel.c
字号:
}/* synchronize size slider with slider text */UISizeSlider (widget)Widget widget; { int value; string svalue; int islider; extern View view; for (islider=0; islider<ui->s_nslider; islider++) { if (ui->s_slist[islider] == widget) break; } if (islider == ui->s_nslider) return; XtVaGetValues (widget,XmNvalue,&value,NULL); if (ui->s_alist[islider] == NO_INDEX) { sprintf (svalue, "%d", value); } else { sprintf (svalue, "%g", AxisValue (MapAxis(ViewMap(view,ui->s_alist[islider])),value)); } XtVaSetValues (ui->s_vlist[islider],XmNvalue,svalue,NULL); }/* synchronize slider text with size slider */UISizeText (widget)Widget widget; { char *svalue; int islider, value; double atof(); extern View view; for (islider=0; islider<ui->s_nslider; islider++) { if (ui->s_vlist[islider] == widget) break; } XtVaGetValues (widget,XmNvalue,&svalue,NULL); if (ui->s_alist[islider] == NO_INDEX) { value = atoi (svalue); } else { value = AxisIndex(MapAxis(ViewMap(view,ui->s_alist[islider])),atof(svalue)); } XtVaSetValues (ui->s_slist[islider],XmNvalue,value,NULL); }/********************************* ARRAY PANEL ******************************//* initialize array control panel */UIArrayInit () { extern UIArrayDraw(), UIArrayClose(), UIArrayDir(); extern UIArrayDeltaAdjust(), UIArrayEndAdjust(); extern Data data; extern View view; Widget widget, parent; ui->across = 0; if (ui->a_shell) return; ui->a_shell = XtVaCreatePopupShell ("array", xmDialogShellWidgetClass,ui->main, XmNtitle, CS("ARRAY PARAMETERS"), NULL); ui->a_base = XtVaCreateWidget ("base", xmRowColumnWidgetClass,ui->a_shell, XmNorientation, XmVERTICAL, NULL); XtVaCreateManagedWidget ("ARRAY PARAMETERS:",xmLabelWidgetClass,ui->a_base,NULL); ui->a_dir = XmVaCreateSimpleRadioBox (ui->a_base, "dir", AxisDir (MapAxis (ViewMap(view,AXIS_DEEP))) - 1, (XtCallbackProc)UIArrayDir, XmVaRADIOBUTTON, CS(AxisLabel(DataAxis(data,DATA_AXIS1))),NULL,NULL,NULL, XmVaRADIOBUTTON, CS(AxisLabel(DataAxis(data,DATA_AXIS2))),NULL,NULL,NULL, XmVaRADIOBUTTON, CS(AxisLabel(DataAxis(data,DATA_AXIS3))),NULL,NULL,NULL, XmVaRADIOBUTTON, CS(AxisLabel(DataAxis(data,DATA_AXIS4))),NULL,NULL,NULL, NULL); XtManageChild (ui->a_dir); parent = ui->a_dir; ui->a_across = XtVaCreateManagedWidget ("across", xmScaleWidgetClass, ui->a_base, XmNminimum, 1, XmNmaximum, 50, XmNwidth, 250, XmNshowValue, True, XmNtitleString, CS("ACROSS"), XmNorientation, XmHORIZONTAL, NULL); XtAddCallback (ui->a_across,XmNvalueChangedCallback,(XtCallbackProc)UIArrayEndAdjust,NULL); ui->a_down = XtVaCreateManagedWidget ("down", xmScaleWidgetClass, ui->a_base, XmNminimum, 1, XmNmaximum, 50, XmNwidth, 250, XmNshowValue, True, XmNtitleString, CS("DOWN"), XmNorientation, XmHORIZONTAL, NULL); XtAddCallback (ui->a_down,XmNvalueChangedCallback,(XtCallbackProc)UIArrayEndAdjust,NULL); ui->a_start = XtVaCreateManagedWidget ("start", xmScaleWidgetClass, ui->a_base, XmNwidth, 250, XmNshowValue, True, XmNtitleString, CS("START"), XmNorientation, XmHORIZONTAL, NULL); XtAddCallback (ui->a_start,XmNvalueChangedCallback,(XtCallbackProc)UIArrayEndAdjust,NULL); ui->a_delta = XtVaCreateManagedWidget ("delta", xmScaleWidgetClass, ui->a_base, XmNminimum, 1, XmNmaximum, 50, XmNwidth, 250, XmNvalue, ui->delta, XmNshowValue, True, XmNtitleString, CS("DELTA"), XmNorientation, XmHORIZONTAL, NULL); XtAddCallback (ui->a_delta,XmNvalueChangedCallback,(XtCallbackProc)UIArrayEndAdjust,NULL); ui->a_end = XtVaCreateManagedWidget ("end", xmScaleWidgetClass, ui->a_base, XmNminimum, 0, XmNwidth, 250, XmNshowValue, True, XmNtitleString, CS("END"), XmNorientation, XmHORIZONTAL, NULL); XtAddCallback (ui->a_end,XmNvalueChangedCallback,(XtCallbackProc)UIArrayDeltaAdjust,NULL); XtVaCreateManagedWidget ("line", xmSeparatorWidgetClass, ui->a_base,NULL); widget = XtVaCreateManagedWidget ("DRAW", xmPushButtonWidgetClass, ui->a_base, NULL); XtAddCallback (widget,XmNactivateCallback,(XtCallbackProc)UIArrayDraw,NULL); widget = XtVaCreateManagedWidget ("CLOSE", xmPushButtonWidgetClass, ui->a_base, NULL); XtAddCallback (widget,XmNactivateCallback,(XtCallbackProc)UIArrayClose,NULL); XtManageChild (ui->a_base); XtManageChild (ui->a_shell); }/* set array control panel direction when orientation changes */UIArrayDir (widget,item)Widget widget;int item; { if (XmToggleButtonGetState(widget) == True) { UIArrayReset (item+1); } }/* fetch current array control panel settings */UIArrayRaise () { UIArrayInit (); UIArrayReset (0); ui->shell = ui->a_shell; XtPopup (ui->a_shell,XtGrabNone); }UIArrayReset (dir)int dir; { extern View view; extern Data data; Axis axis; Map map; int imap, delta; WidgetList list; if (ui->a_shell == 0) return; if (!dir) { map = ViewMap(view,AXIS_DEEP); ui->dir = AxisDir(MapAxis(map)); XtVaGetValues (ui->a_dir,XmNchildren,&list,NULL); dir = ui->dir - 1; XtVaSetValues (list[dir],XmNset,True,NULL); XtVaSetValues (list[(dir+1)%3],XmNset,False,NULL); XtVaSetValues (list[(dir+2)%3],XmNset,False,NULL); } else { ui->dir = dir; for (imap=1; imap<=3; imap++) { if (ui->dir == AxisDir(MapAxis(map=view->map[imap]))) break; } } axis = DataAxis(data,ui->dir); UIArrayShape (MapNFrame(map),&ui->across,&ui->down); XtVaSetValues (ui->a_across,XmNvalue,ui->across,NULL); XtVaSetValues (ui->a_down,XmNvalue,ui->down,NULL); ui->delta = 1; ui->start = MapLow(map); delta = rint(AxisDelta(axis) * AxisScale(axis)); XtVaSetValues (ui->a_delta, XmNdecimalPoints, AxisPrec(axis), XmNminimum, delta, XmNmaximum, 50*delta, XmNvalue, ui->delta*delta, NULL); XtVaSetValues (ui->a_start, XmNdecimalPoints, AxisPrec(axis), XmNminimum, AxisScaledValue(axis,0), XmNmaximum, AxisScaledValue(axis,AxisSize(axis)-1), XmNvalue, AxisScaledValue(axis,ui->start), NULL); XtVaSetValues (ui->a_end, XmNdecimalPoints, AxisPrec(axis), XmNminimum, AxisScaledValue(axis,0), XmNmaximum, AxisScaledValue(axis,AxisSize(axis)-1), XmNvalue, AxisScaledValue(axis, (ui->across*ui->down*ui->delta+ui->start)< (AxisSize(axis)-1)? AxisScaledValue(axis,ui->across*ui->down*ui->delta+ui->start): AxisScaledValue(axis,AxisSize(axis)-1) ), NULL); }/* execute array control panel settings */UIArrayDraw () { extern View view; Axis axis; int iaxis, value; if (ui->dir != AxisDir(axis=MapAxis(ViewMap(view,AXIS_DEEP)))) { if (ui->dir == AxisDir(axis=MapAxis(ViewMap(view,AXIS_ACROSS)))) { MapSwap (ViewMap(view,AXIS_DEEP),ViewMap(view,AXIS_ACROSS)); } else { axis = MapAxis(ViewMap(view,AXIS_DOWN)); MapSwap (ViewMap(view,AXIS_DEEP),ViewMap(view,AXIS_DOWN)); } } XtVaGetValues (ui->a_across,XmNvalue,&ui->across,NULL); XtVaGetValues (ui->a_down,XmNvalue,&ui->down,NULL); XtVaGetValues (ui->a_delta,XmNvalue,&value,NULL); ui->delta = AxisScaledIndex(axis,value+AxisScaledValue(axis,0)); XtVaGetValues (ui->a_start,XmNvalue,&value,NULL); ui->start = AxisScaledIndex(axis,value); ViewArray (ui->across,ui->down,ui->start,ui->delta); UISizeReset (); }/* close array control panel */UIArrayClose () { XtPopdown (ui->a_shell); ui->shell = 0; }/* synchronize array end slider with other array slider adjustments */UIArrayEndAdjust () { extern Data data; Axis axis; int max, value; axis = DataAxis(data,ui->dir); XtVaGetValues (ui->a_across,XmNvalue,&ui->across,NULL); XtVaGetValues (ui->a_down,XmNvalue,&ui->down,NULL); XtVaGetValues (ui->a_delta,XmNvalue,&value,NULL); ui->delta = AxisScaledIndex(axis,value+AxisScaledValue(axis,0)); XtVaGetValues (ui->a_start,XmNvalue,&value,NULL); ui->start = AxisScaledIndex(axis,value); XtVaGetValues (ui->a_end,XmNmaximum,&value,NULL); max = AxisScaledIndex(axis,value); XtVaSetValues (ui->a_end, XmNvalue,max< (ui->start+ui->down*ui->across*ui->delta) ? AxisScaledValue(axis,max) : AxisScaledValue(axis,ui->start+ui->down*ui->across*ui->delta), NULL); }/* synchronize array delta slider with array end slider changes */UIArrayDeltaAdjust () { int last, max, value; extern Data data; Axis axis; axis = DataAxis(data,ui->dir); XtVaGetValues (ui->a_across,XmNvalue,&ui->across,NULL); XtVaGetValues (ui->a_down,XmNvalue,&ui->down,NULL); XtVaGetValues (ui->a_start,XmNvalue,&value,NULL); ui->start = AxisScaledIndex(axis,value); XtVaGetValues (ui->a_end,XmNvalue,&value,NULL); last = AxisScaledIndex(axis,value); ui->delta = (last - ui->start - 1) / (ui->across * ui->down); ui->delta = ui->delta > 1 ? ui->delta : 1; ui->delta = ui->delta < 50 ? ui->delta : 50; XtVaSetValues (ui->a_delta, XmNvalue,(int)rint(AxisScale(axis)*AxisDelta(axis)*ui->delta), NULL); }UIArrayShape (n,across,down)int n, *across, *down; { double sqrt(); int across_, down_; if (n < 4) { across_ = n; down_ = 1; } else { across_ = (int)sqrt((double)n); down_ = n / across_; if (across_ * down_ < n) across_++; } across_ = across_ > 1 ? across_ : 1; down_ = down_ > 1 ? down_ : 1; across_ = across_ < 50 ? across_ : 50; down_ = down_ < 50 ? down_ : 50; *across = across_; *down = down_; }/********************************* LABEL PANEL ******************************/UILabelInit () { extern View view; string svalue; Widget parent; if (ui->l_shell) return; ui->l_shell = XtVaCreatePopupShell ("label",xmDialogShellWidgetClass,ui->main, XmNtitle, CS("LABEL PARAMETERS"), NULL); ui->l_base = XtVaCreateWidget ("l_base",xmRowColumnWidgetClass,ui->l_shell, XmNnumColumns, 9, XmNpacking, XmPACK_COLUMN, XmNorientation, XmHORIZONTAL, NULL);#undef LABEL#define LABEL(name) XtVaCreateManagedWidget (name, xmLabelWidgetClass, parent,\ NULL);#undef FIELD#define FIELD(var) \ ui->var = XtVaCreateManagedWidget ("var", xmTextFieldWidgetClass, parent,\ XmNcolumns, 6,\ NULL);#undef BUTTON#define BUTTON(name,callback) {\ Widget widget;\ extern callback();\ widget = XtVaCreateManagedWidget (name, xmPushButtonWidgetClass, parent, NULL);\ XtAddCallback (widget,XmNactivateCallback,(XtCallbackProc)callback,NULL);\ } parent = ui->l_base; LABEL("TITLE"); FIELD(l_title); LABEL(""); LABEL(""); LABEL(""); LABEL(""); LABEL("COLOR"); LABEL("DOWN"); LABEL("ACROSS"); LABEL("DEEP"); LABEL("LABEL"); FIELD(l_label[AXIS_COLOR]); FIELD(l_label[AXIS_DOWN]); FIELD(l_label[AXIS_ACROSS]); FIELD(l_label[AXIS_DEEP]); LABEL("ORIGIN"); FIELD(l_first[AXIS_COLOR]); FIELD(l_first[AXIS_DOWN]); FIELD(l_first[AXIS_ACROSS]); FIELD(l_first[AXIS_DEEP]); LABEL("DELTA"); FIELD(l_delta[AXIS_COLOR]); FIELD(l_delta[AXIS_DOWN]); FIELD(l_delta[AXIS_ACROSS]); FIELD(l_delta[AXIS_DEEP]); LABEL("MIN TIC"); FIELD(l_tic0[AXIS_COLOR]); FIELD(l_tic0[AXIS_DOWN]); FIELD(l_tic0[AXIS_ACROSS]); FIELD(l_tic0[AXIS_DEEP]); LABEL("TIC INC"); FIELD(l_dtic[AXIS_COLOR]); FIELD(l_dtic[AXIS_DOWN]); FIELD(l_dtic[AXIS_ACROSS]); FIELD(l_dtic[AXIS_DEEP]); LABEL("MAX TIC"); FIELD(l_tic2[AXIS_COLOR]); FIELD(l_tic2[AXIS_DOWN]); FIELD(l_tic2[AXIS_ACROSS]); FIELD(l_tic2[AXIS_DEEP]); BUTTON("EXECUTE SETTINGS",UILabelDraw); BUTTON("CURRENT SETTINGS",UILabelReset); BUTTON("CLOSE",UILabelClose); XtManageChild (ui->l_base); }UILabelRaise () { UILabelInit (); UILabelReset (); XtPopup (ui->l_shell,XtGrabNone); }UILabelReset () { int i; extern View view; extern Data data; string svalue; XtVaSetValues (ui->l_title,XmNvalue,DataTitle(data),NULL); for (i=0; i<4; i++) { XtVaSetValues (ui->l_label[i],XmNvalue,AxisLabel(MapAxis(view->map[i])),NULL); sprintf (svalue,"%g",AxisFirst(MapAxis(view->map[i]))); XtVaSetValues (ui->l_first[i],XmNvalue,svalue,NULL); sprintf (svalue,"%g",AxisDelta(MapAxis(view->map[i]))); XtVaSetValues (ui->l_delta[i],XmNvalue,svalue,NULL); sprintf (svalue,"%g",MapTic0(view->map[i])); XtVaSetValues (ui->l_tic0[i],XmNvalue,svalue,NULL); sprintf (svalue,"%g",MapDtic(view->map[i])); XtVaSetValues (ui->l_dtic[i],XmNvalue,svalue,NULL); sprintf (svalue,"%g",MapTic2(view->map[i])); XtVaSetValues (ui->l_tic2[i],XmNvalue,svalue,NULL); } }UILabelDraw () { extern Data data; extern View view; char *svalue;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -