G4OpenGLXmViewer.hh

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 //
00027 // $Id$
00028 //
00029 // 
00030 // Andrew Walkden  10th February 1997
00031 // G4OpenGLXmViewer : Class derived from G4OpenGLXViewer, to provide
00032 //                    (Motif) widget OpenGL functionality for GEANT4.
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   // Update the content of the control panel
00377 };
00378 
00379 #endif
00380 
00381 #endif
00382   

Generated on Mon May 27 17:49:11 2013 for Geant4 by  doxygen 1.4.7