00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifdef G4VIS_BUILD_OPENGLXM_DRIVER
00035
00036 #ifndef G4OPENGLXMVIEWER_HH
00037 #define G4OPENGLXMVIEWER_HH
00038
00039 #include "G4OpenGLXViewer.hh"
00040 #include "globals.hh"
00041
00042 #include <Xm/Xm.h>
00043
00044 class G4OpenGLXmTopLevelShell;
00045 class G4OpenGLXmRadioButton;
00046 class G4OpenGLXmPushButton;
00047 class G4OpenGLXmSliderBar;
00048 class G4OpenGLXmBox;
00049 class G4OpenGLXmTextField;
00050 class G4OpenGLXmFramedBox;
00051 class G4OpenGLXmFourArrowButtons;
00052 class G4OpenGLXmSeparator;
00053
00054 class G4OpenGLXmViewer: public G4OpenGLXViewer {
00055
00056 public:
00057 G4OpenGLXmViewer (G4OpenGLSceneHandler& scene);
00058 virtual ~G4OpenGLXmViewer ();
00059
00060 protected:
00061 virtual void ShowView ();
00062 void ResetView ();
00063 void GetXmConnection ();
00064 virtual void CreateMainWindow ();
00065
00066 XtAppContext app;
00067 XtWorkProcId workId;
00068 Widget toplevel,
00069 shell,
00070 main_win,
00071 menubar,
00072 style_cascade,
00073 actions_cascade,
00074 misc_cascade,
00075 spec_cascade,
00076 rep_style_pullright,
00077 drawing_style_pullright,
00078 background_color_pullright,
00079 transparency_pullright,
00080 antialias_pullright,
00081 haloing_pullright,
00082 aux_edge_pullright,
00083 frame,
00084 glxarea;
00085
00086 XmString style_str,
00087 actions_str,
00088 misc_str,
00089 spec_str,
00090 rep_str,
00091 draw_str,
00092 polyhedron_str,
00093 nurbs_str,
00094 wireframe_str,
00095 hlr_str,
00096 hsr_str,
00097 hlhsr_str,
00098 set_str,
00099 rot_str,
00100 pan_str,
00101 exit_str,
00102 quit_str,
00103 print_str,
00104 white_str,
00105 black_str,
00106 anti_str,
00107 trans_str,
00108 halo_str,
00109 aux_edge_str,
00110 bgnd_str,
00111 off_str,
00112 on_str;
00113
00114 G4double zoom_high,
00115 zoom_low,
00116 pan_low,
00117 pan_high,
00118 dolly_low,
00119 dolly_high,
00120 fov,
00121 rot_sens_limit,
00122 pan_sens_limit,
00123 wob_high,
00124 wob_low,
00125 wob_sens;
00126
00127 Pixel bgnd,
00128 borcol;
00129
00130 G4bool pan_right,
00131 rotate_right,
00132 pan_up,
00133 rotate_up;
00134
00135 XtIntervalId rotation_timer,
00136 pan_timer,
00137 wobble_timer;
00138
00139 G4Vector3D original_vp;
00140
00141 G4int frameNo;
00142
00143 G4OpenGLXmTopLevelShell* fprotation_top;
00144 G4OpenGLXmBox* fprotation_button_box;
00145 G4OpenGLXmRadioButton* fprotation_button1;
00146 G4OpenGLXmRadioButton* fprotation_button2;
00147 G4OpenGLXmBox* fprotation_slider_box;
00148 G4OpenGLXmSliderBar* fprotation_slider;
00149 G4OpenGLXmBox* fprotation_arrow_box;
00150 G4OpenGLXmFourArrowButtons* fprotation_arrow;
00151
00152 G4OpenGLXmTopLevelShell* fppanning_top;
00153 G4OpenGLXmFramedBox* fppanning_box;
00154 G4OpenGLXmFourArrowButtons* fppanning_arrows;
00155 G4OpenGLXmSliderBar* fppanning_slider;
00156 G4OpenGLXmFramedBox* fpzoom_box;
00157 G4OpenGLXmSliderBar* fpzoom_slider;
00158 G4OpenGLXmFramedBox* fpdolly_box;
00159 G4OpenGLXmSliderBar* fpdolly_slider;
00160
00161 G4OpenGLXmTopLevelShell* fpsetting_top;
00162 G4OpenGLXmFramedBox* fpsetting_box;
00163 G4OpenGLXmTextField* fppan_set;
00164 G4OpenGLXmTextField* fprot_set;
00165 G4OpenGLXmTextField* fpzoom_upper;
00166 G4OpenGLXmTextField* fpzoom_lower;
00167 G4OpenGLXmTextField* fpdolly_upper;
00168 G4OpenGLXmTextField* fpdolly_lower;
00169 G4OpenGLXmPushButton* fpok_button;
00170
00171 G4OpenGLXmTopLevelShell* fpmiscellany_top;
00172 G4OpenGLXmFramedBox* fpwobble_box;
00173 G4OpenGLXmPushButton* fpwobble_button;
00174 G4OpenGLXmSliderBar* fpwobble_slider;
00175 G4OpenGLXmFramedBox* fpreset_box;
00176 G4OpenGLXmPushButton* fpreset_button;
00177 G4OpenGLXmFramedBox* fpproj_style_box;
00178 G4OpenGLXmRadioButton* fporthogonal_button;
00179 G4OpenGLXmRadioButton* fpperspective_button;
00180 G4OpenGLXmTextField* fpfov_text;
00181
00182 G4OpenGLXmTopLevelShell* fpprint_top;
00183 G4OpenGLXmFramedBox* fpprint_box;
00184 G4OpenGLXmFramedBox* fpprint_col_box;
00185 G4OpenGLXmFramedBox* fpprint_style_box;
00186 G4OpenGLXmTextField* fpprint_text;
00187 G4OpenGLXmPushButton* fpprint_button;
00188 G4OpenGLXmSeparator* fpprint_line;
00189 G4OpenGLXmRadioButton* fpprint_col_radio1;
00190 G4OpenGLXmRadioButton* fpprint_col_radio2;
00191 G4OpenGLXmRadioButton* fpprint_style_radio1;
00192 G4OpenGLXmRadioButton* fpprint_style_radio2;
00193
00194 public:
00195
00196 static void expose_callback (Widget w,
00197 XtPointer clientData,
00198 XtPointer callData);
00199
00200 static void resize_callback (Widget w,
00201 XtPointer clientData,
00202 XtPointer callData);
00203
00204 static void actions_callback (Widget w,
00205 XtPointer clientData,
00206 XtPointer callData);
00207
00208 static void misc_callback (Widget w,
00209 XtPointer clientData,
00210 XtPointer callData);
00211
00212 static void Add_set_field (char* widget,
00213 char* widget_text,
00214 Widget* row_col_box,
00215 Widget* wid,
00216 G4double* val,
00217 G4OpenGLXmViewer* pView);
00218
00219 static void zoom_callback (Widget w,
00220 XtPointer clientData,
00221 XtPointer callData);
00222
00223 static void dolly_callback (Widget w,
00224 XtPointer clientData,
00225 XtPointer callData);
00226
00227 static void pan_left_right_callback (Widget w,
00228 XtPointer clientData,
00229 XtPointer callData);
00230
00231 static void left_right_pan_callback (XtPointer clientData,
00232 XtIntervalId* timer_id);
00233
00234 static void theta_rotation_callback (Widget w,
00235 XtPointer clientData,
00236 XtPointer callData);
00237
00238 static void phi_rotation_callback (Widget w,
00239 XtPointer clientData,
00240 XtPointer callData);
00241
00242 static void pan_up_down_callback (Widget w,
00243 XtPointer clientData,
00244 XtPointer callData);
00245
00246 static void up_down_pan_callback (XtPointer clientData,
00247 XtIntervalId* timer_id);
00248
00249 static void drawing_style_callback (Widget w,
00250 XtPointer clientData,
00251 XtPointer callData);
00252
00253 static void rep_style_callback (Widget w,
00254 XtPointer clientData,
00255 XtPointer callData);
00256
00257 static void background_color_callback (Widget w,
00258 XtPointer clientData,
00259 XtPointer callData);
00260
00261 static void set_rot_subject_callback (Widget w,
00262 XtPointer clientData,
00263 XtPointer callData);
00264
00265 static void set_rot_sens_callback (Widget w,
00266 XtPointer clientData,
00267 XtPointer callData);
00268
00269 static void set_pan_sens_callback (Widget w,
00270 XtPointer clientData,
00271 XtPointer callData);
00272
00273 static void set_wob_sens_callback (Widget w,
00274 XtPointer clientData,
00275 XtPointer callData);
00276
00277 static void projection_callback (Widget w,
00278 XtPointer clientData,
00279 XtPointer callData);
00280
00281 static void wobble_callback (Widget w,
00282 XtPointer clientData,
00283 XtPointer callData);
00284
00285 static void reset_callback (Widget w,
00286 XtPointer clientData,
00287 XtPointer callData);
00288
00289 static void update_panels_callback (Widget w,
00290 XtPointer clientData,
00291 XtPointer callData);
00292
00293 static void wobble_timer_callback (XtPointer clientData,
00294 XtIntervalId* timerid);
00295
00296 static void Add_radio_box (char* label_string,
00297 Widget* parent_frame_widget,
00298 XtCallbackRec* radio_box_cb,
00299 G4int num_buttons,
00300 G4int default_button,
00301 char* radio_box_name,
00302 char** button_names,
00303 G4OpenGLXmViewer* pView);
00304
00305 static void Add_four_arrow_buttons (G4OpenGLXmViewer* pView,
00306 XtCallbackRec** arrow_callbacks,
00307 Widget* parent_widget);
00308
00309 static void Add_slider_box (char* label_string,
00310 G4int num_sliders,
00311 char** slider_name,
00312 G4OpenGLXmViewer* pView,
00313 G4double* min_array,
00314 G4double* max_array,
00315 G4double* value_array,
00316 G4bool* show,
00317 short* decimals,
00318 unsigned char* orientation,
00319 unsigned char* direction,
00320 XtCallbackRec** slider_box_cb,
00321 Widget* parent_frame_widget);
00322
00323 static void rotate_in_theta (XtPointer clientData,
00324 XtIntervalId* timer_id);
00325
00326 static void rotate_in_phi (XtPointer clientData,
00327 XtIntervalId* timer_id);
00328
00329 static void get_double_value_callback (Widget w,
00330 XtPointer clientData,
00331 XtPointer callData);
00332
00333 static void get_text_callback (Widget w,
00334 XtPointer clientData,
00335 XtPointer callData);
00336
00337 static void transparency_callback (Widget w,
00338 XtPointer clientData,
00339 XtPointer callData);
00340
00341 static void antialias_callback (Widget w,
00342 XtPointer clientData,
00343 XtPointer callData);
00344
00345 static void haloing_callback (Widget w,
00346 XtPointer clientData,
00347 XtPointer callData);
00348
00349 static void aux_edge_callback (Widget w,
00350 XtPointer clientData,
00351 XtPointer callData);
00352
00353 static void set_print_colour_callback (Widget w,
00354 XtPointer clientData,
00355 XtPointer callData);
00356
00357 static void set_print_style_callback (Widget w,
00358 XtPointer clientData,
00359 XtPointer callData);
00360
00361 static void print_callback (Widget w,
00362 XtPointer clientData,
00363 XtPointer callData);
00364
00365 static G4bool get_boolean_userData (Widget w);
00366
00367 static G4int get_int_userData (Widget w);
00368
00369 friend class G4OpenGLXmVWidgetObject;
00370 friend class G4OpenGLXmViewerMessenger;
00371
00372 private:
00373 G4OpenGLXmViewer (const G4OpenGLXmViewer&);
00374 G4OpenGLXmViewer& operator = (const G4OpenGLXmViewer&);
00375 void UpdateControlPanel();
00376
00377 };
00378
00379 #endif
00380
00381 #endif
00382