00001 #define JOG
00002 #include "Jog.hh"
00003 #undef JOG
00004
00005 Widget
00006 JogControl (Dimension x0, Dimension x1, Dimension y1, Dimension y2,
00007 Dimension boxMarginWidth, Dimension boxMarginHeight,
00008 Widget parent, int numAxes)
00009 {
00010 arrowFrame =
00011 XtVaCreateManagedWidget ("arrowFrame", xmFrameWidgetClass, parent,
00012 XmNfractionBase, 22,
00013 XmNleftPosition, x0,
00014 XmNrightPosition, x1,
00015 XmNtopPosition, y1,
00016 XmNbottomPosition, y2,
00017 XmNmarginWidth, boxMarginWidth,
00018 XmNmarginHeight, boxMarginHeight,
00019 XmNtopAttachment, XmATTACH_POSITION,
00020 XmNbottomAttachment, XmATTACH_POSITION,
00021 XmNleftAttachment, XmATTACH_POSITION,
00022 XmNrightAttachment, XmATTACH_POSITION,
00023 XmNmarginWidth, 5,
00024 XmNmarginHeight, 5,
00025 XmNmappedWhenManaged, False,
00026 XmNtraversalOn, False, NULL);
00027
00028 arrowForm =
00029 XtVaCreateManagedWidget ("arrowForm", xmFormWidgetClass, arrowFrame,
00030 XmNmarginWidth, 5, XmNmarginHeight, 5, NULL);
00031
00032 CREATE_PIXMAP (r_arrow, r_pixmap);
00033 CREATE_PIXMAP (r_arrow_in, r_pixmap_in);
00034 CREATE_PIXMAP (l_arrow, l_pixmap);
00035 CREATE_PIXMAP (l_arrow_in, l_pixmap_in);
00036 CREATE_PIXMAP (right_arrows, rr_pixmap);
00037 CREATE_PIXMAP (right_arrows_in, rr_pixmap_in);
00038 CREATE_PIXMAP (left_arrows, ll_pixmap);
00039 CREATE_PIXMAP (left_arrows_in, ll_pixmap_in);
00040
00041 int i = 0;
00042
00043 JOG_AXIS (arrowB1[i], XmATTACH_FORM, XmATTACH_FORM, NULL, ll_pixmap,
00044 ARROW_LEFT_FAST);
00045 JOG_AXIS (arrowB2[i], XmATTACH_FORM, XmATTACH_WIDGET, arrowB1[i], l_pixmap,
00046 ARROW_LEFT);
00047
00048 LABEL_AXIS (i, XmATTACH_FORM);
00049
00050 JOG_AXIS (arrowB3[i], XmATTACH_FORM, XmATTACH_WIDGET, label[i], r_pixmap,
00051 ARROW_RIGHT);
00052 JOG_AXIS (arrowB4[i], XmATTACH_FORM, XmATTACH_WIDGET, arrowB3[i], rr_pixmap,
00053 ARROW_RIGHT_FAST);
00054
00055
00056 for (i = 1; i < numAxes; i++)
00057 {
00058 SEPARATOR ();
00059
00060 JOG_AXIS (arrowB1[i], XmATTACH_WIDGET, XmATTACH_FORM, NULL, ll_pixmap,
00061 ARROW_LEFT_FAST);
00062 JOG_AXIS (arrowB2[i], XmATTACH_WIDGET, XmATTACH_WIDGET, arrowB1[i],
00063 l_pixmap, ARROW_LEFT);
00064
00065 LABEL_AXIS (i, XmATTACH_WIDGET);
00066
00067 JOG_AXIS (arrowB3[i], XmATTACH_WIDGET, XmATTACH_WIDGET, label[i],
00068 r_pixmap, ARROW_RIGHT);
00069 JOG_AXIS (arrowB4[i], XmATTACH_WIDGET, XmATTACH_WIDGET, arrowB3[i],
00070 rr_pixmap, ARROW_RIGHT_FAST);
00071
00072 }
00073
00074 SEPARATOR ();
00075
00076 XmString JogLabel =
00077 XmStringCreateLtoR ((char *) JOG_LABEL_STR, XmSTRING_DEFAULT_CHARSET);
00078
00079 jogLabel =
00080 XtVaCreateManagedWidget ("label", xmLabelWidgetClass, arrowForm,
00081 XmNtopAttachment, XmATTACH_WIDGET,
00082 XmNtopWidget, separator,
00083 XmNtopOffset, 5,
00084 XmNbottomAttachment, XmATTACH_FORM,
00085 XmNbottomOffset, 10,
00086 XmNleftAttachment, XmATTACH_FORM,
00087 XmNleftOffset, 5,
00088 XmNrightAttachment, XmATTACH_NONE,
00089 XmNlabelString, JogLabel, NULL);
00090
00091 XmStringFree (JogLabel);
00092
00093 doneB =
00094 XtVaCreateManagedWidget (DONE_STR, xmPushButtonWidgetClass, arrowForm,
00095 XmNtopAttachment, XmATTACH_WIDGET,
00096 XmNtopWidget, separator,
00097 XmNtopOffset, 5,
00098 XmNbottomAttachment, XmATTACH_NONE,
00099 XmNleftAttachment, XmATTACH_NONE,
00100 XmNrightAttachment, XmATTACH_FORM,
00101 XmNmarginWidth, 15,
00102 XmNmarginHeight, 15,
00103 XmNshadowThickness, 4, NULL);
00104
00105 XtAddCallback (doneB, XmNarmCallback, buttonCB, (XtPointer) DONE);
00106
00107 return arrowFrame;
00108 }
00109
00110
00111 void
00112 jogDone (void)
00113 {
00114 if (doneB)
00115 buttonCB (doneB, (XtPointer) DONE, (XtPointer) NULL);
00116 }
00117
00118 static void
00119 buttonCB (Widget mw, XtPointer cd, XtPointer cb)
00120 {
00121 int theAxis = -1;
00122 switch ((int) cd)
00123 {
00124 case DONE:
00125 XtVaSetValues (arrowFrame, XmNmappedWhenManaged, False, NULL);
00126 XmPushButtonWidget pb;
00127 pb = (XmPushButtonWidget) mw;
00128 pb->pushbutton.armed = false;
00129 showRunMode ();
00130 return;
00131 case ARROW_LEFT_FAST:
00132 XtVaSetValues (mw, XmNarmPixmap, ll_pixmap_in, NULL);
00133 theAxis = whichAxis (mw, (int) cd);
00134 break;
00135 case ARROW_LEFT:
00136 XtVaSetValues (mw, XmNarmPixmap, l_pixmap_in, NULL);
00137 theAxis = whichAxis (mw, (int) cd);
00138 break;
00139 case ARROW_RIGHT:
00140 XtVaSetValues (mw, XmNarmPixmap, r_pixmap_in, NULL);
00141 theAxis = whichAxis (mw, (int) cd);
00142 break;
00143 case ARROW_RIGHT_FAST:
00144 XtVaSetValues (mw, XmNarmPixmap, rr_pixmap_in, NULL);
00145 theAxis = whichAxis (mw, (int) cd);
00146 break;
00147 default:
00148 return;
00149 }
00150
00151 do_jog (theAxis, (int) cd);
00152
00153 }
00154
00155 static void
00156 unbuttonCB (Widget mw, XtPointer cd, XtPointer cb)
00157 {
00158 int theAxis = -1;
00159 switch ((int) cd)
00160 {
00161 case DONE:
00162 return;
00163 case ARROW_LEFT_FAST:
00164 case ARROW_LEFT:
00165 case ARROW_RIGHT:
00166 case ARROW_RIGHT_FAST:
00167 theAxis = whichAxis (mw, (int) cd);
00168 break;
00169 default:
00170 return;
00171 }
00172
00173 stop_jog (theAxis, (int) cd);
00174
00175 }
00176
00177 static int
00178 whichAxis (Widget w, int type)
00179 {
00180 switch (type)
00181 {
00182 case ARROW_LEFT_FAST:
00183 if (w == arrowB1[0])
00184 return 0;
00185 if (w == arrowB1[1])
00186 return 1;
00187 if (w == arrowB1[2])
00188 return 2;
00189 if (w == arrowB1[3])
00190 return 3;
00191 if (w == arrowB1[4])
00192 return 4;
00193 if (w == arrowB1[5])
00194 return 5;
00195 break;
00196
00197 case ARROW_LEFT:
00198 if (w == arrowB2[0])
00199 return 0;
00200 if (w == arrowB2[1])
00201 return 1;
00202 if (w == arrowB2[2])
00203 return 2;
00204 if (w == arrowB2[3])
00205 return 3;
00206 if (w == arrowB2[4])
00207 return 4;
00208 if (w == arrowB2[5])
00209 return 5;
00210 break;
00211
00212 case ARROW_RIGHT:
00213 if (w == arrowB3[0])
00214 return 0;
00215 if (w == arrowB3[1])
00216 return 1;
00217 if (w == arrowB3[2])
00218 return 2;
00219 if (w == arrowB3[3])
00220 return 3;
00221 if (w == arrowB3[4])
00222 return 4;
00223 if (w == arrowB3[5])
00224 return 5;
00225 break;
00226
00227 case ARROW_RIGHT_FAST:
00228 if (w == arrowB4[0])
00229 return 0;
00230 if (w == arrowB4[1])
00231 return 1;
00232 if (w == arrowB4[2])
00233 return 2;
00234 if (w == arrowB4[3])
00235 return 3;
00236 if (w == arrowB4[4])
00237 return 4;
00238 if (w == arrowB4[5])
00239 return 5;
00240 break;
00241
00242 default:
00243 return -1;
00244 }
00245 return -1;
00246 }
00247
00248 static void
00249 do_jog (int theAxis, int type)
00250 {
00251
00252
00253
00254 #ifdef DEBUG
00255 char *whichWay[4] = { "Left fast", "Left", "Right", "Right fast" };
00256 cout << "Start " << whichWay[type] << " for axis: " << theAxis << endl;
00257 #endif
00258 }
00259
00260 static void
00261 stop_jog (int theAxis, int type)
00262 {
00263
00264
00265
00266 #ifdef DEBUG
00267 char *whichWay[4] = { "Left fast", "Left", "Right", "Right fast" };
00268 cout << "Stop " << whichWay[type] << " for axis: " << theAxis << endl;
00269 #endif
00270 }