source: trunk/source/visualization/OpenGL/include/G4OpenGLXmViewer.hh @ 850

Last change on this file since 850 was 850, checked in by garnier, 16 years ago

geant4.8.2 beta

  • Property svn:mime-type set to text/cpp
File size: 13.2 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer                                           *
4// *                                                                  *
5// * The  Geant4 software  is  copyright of the Copyright Holders  of *
6// * the Geant4 Collaboration.  It is provided  under  the terms  and *
7// * conditions of the Geant4 Software License,  included in the file *
8// * LICENSE and available at  http://cern.ch/geant4/license .  These *
9// * include a list of copyright holders.                             *
10// *                                                                  *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work  make  any representation or  warranty, express or implied, *
14// * regarding  this  software system or assume any liability for its *
15// * use.  Please see the license in the file  LICENSE  and URL above *
16// * for the full disclaimer and the limitation of liability.         *
17// *                                                                  *
18// * This  code  implementation is the result of  the  scientific and *
19// * technical work of the GEANT4 collaboration.                      *
20// * By using,  copying,  modifying or  distributing the software (or *
21// * any work based  on the software)  you  agree  to acknowledge its *
22// * use  in  resulting  scientific  publications,  and indicate your *
23// * acceptance of all terms of the Geant4 Software license.          *
24// ********************************************************************
25//
26//
27// $Id: G4OpenGLXmViewer.hh,v 1.10 2006/06/29 21:18:52 gunter Exp $
28// GEANT4 tag $Name: HEAD $
29//
30//
31// Andrew Walkden  10th February 1997
32// G4OpenGLXmViewer : Class derived from G4OpenGLXViewer, to provide
33//                    (Motif) widget OpenGL functionality for GEANT4.
34
35#ifdef G4VIS_BUILD_OPENGLXM_DRIVER
36
37#ifndef G4OPENGLXMVIEWER_HH
38#define G4OPENGLXMVIEWER_HH
39
40#include "G4OpenGLXViewer.hh"
41#include "G4OpenGLSceneHandler.hh"
42#include "globals.hh"
43
44#include <Xm/Xm.h>
45#include <Xm/MainW.h>
46#include <Xm/Label.h>
47#include <Xm/Form.h>
48#include <Xm/RowColumn.h>
49#include <Xm/PushB.h>
50#include <Xm/ToggleB.h>
51#include <Xm/ArrowBG.h>
52#include <Xm/CascadeB.h>
53#include <Xm/DrawingA.h>
54#include <Xm/Frame.h>
55#include <X11/keysym.h>
56#include <Xm/XmStrDefs.h>
57#include <X11/Xmu/StdCmap.h>
58#include <Xm/TextF.h>
59#include <Xm/ToggleB.h>
60#include <X11/Shell.h>
61#include <Xm/Separator.h>
62#include <Xm/Scale.h>
63
64class G4OpenGLXmTopLevelShell;
65class G4OpenGLXmRadioButton;
66class G4OpenGLXmPushButton;
67class G4OpenGLXmSliderBar;
68class G4OpenGLXmBox;
69class G4OpenGLXmTextField;
70class G4OpenGLXmFramedBox;
71class G4OpenGLXmFourArrowButtons;
72class G4OpenGLXmSeparator;
73
74class G4OpenGLXmViewer: public G4OpenGLXViewer {
75
76public:
77  G4OpenGLXmViewer (G4OpenGLSceneHandler& scene);
78  virtual ~G4OpenGLXmViewer ();
79 
80protected:
81  virtual void ShowView ();
82  void GetXmConnection ();
83  virtual void CreateMainWindow ();
84
85  XtAppContext                      app;
86  XtWorkProcId                      workId;
87  Widget                            toplevel,
88                                    shell,
89                                    main_win,
90                                    menubar,
91                                    style_cascade,
92                                    actions_cascade,
93                                    misc_cascade,
94                                    spec_cascade,
95                                    rep_style_pullright,
96                                    drawing_style_pullright,
97                                    background_color_pullright,
98                                    transparency_pullright,
99                                    antialias_pullright,
100                                    haloing_pullright,
101                                    aux_edge_pullright,
102                                    frame,
103                                    glxarea;
104 
105  XmString                          style_str,
106                                    actions_str,
107                                    misc_str,
108                                    spec_str,
109                                    rep_str,
110                                    draw_str,
111                                    polyhedron_str,
112                                    nurbs_str,
113                                    wireframe_str,
114                                    hlr_str,
115                                    hsr_str,
116                                    hlhsr_str,
117                                    set_str,
118                                    rot_str,
119                                    pan_str,
120                                    exit_str,
121                                    quit_str,
122                                    print_str,
123                                    white_str,
124                                    black_str,
125                                    anti_str,
126                                    trans_str,
127                                    halo_str,
128                                    aux_edge_str,
129                                    bgnd_str,
130                                    off_str,
131                                    on_str;
132
133  G4double                          zoom_high,
134                                    zoom_low,
135                                    pan_low,
136                                    pan_high,
137                                    dolly_low,
138                                    dolly_high,
139                                    fov,
140                                    rot_sens_limit,
141                                    pan_sens_limit,
142                                    rot_sens,
143                                    pan_sens,
144                                    wob_sens;
145
146  Pixel                             bgnd,
147                                    borcol;
148
149  G4bool                            pan_right,
150                                    rotate_right,
151                                    pan_up,
152                                    rotate_up;
153
154  XtIntervalId                      rotation_timer,
155                                    pan_timer,
156                                    wobble_timer;
157
158  G4Vector3D                        original_vp;
159
160  G4int                             frameNo;
161
162  G4OpenGLXmTopLevelShell*          fprotation_top;
163  G4OpenGLXmBox*                    fprotation_button_box;
164  G4OpenGLXmRadioButton*            fprotation_button1;
165  G4OpenGLXmRadioButton*            fprotation_button2;
166  G4OpenGLXmBox*                    fprotation_slider_box;
167  G4OpenGLXmSliderBar*              fprotation_slider;
168  G4OpenGLXmBox*                    fprotation_arrow_box;
169  G4OpenGLXmFourArrowButtons*       fprotation_arrow;
170
171  G4OpenGLXmTopLevelShell*          fppanning_top;
172  G4OpenGLXmFramedBox*              fppanning_box;
173  G4OpenGLXmFourArrowButtons*       fppanning_arrows;
174  G4OpenGLXmSliderBar*              fppanning_slider;
175  G4OpenGLXmFramedBox*              fpzoom_box;
176  G4OpenGLXmSliderBar*              fpzoom_slider;
177  G4OpenGLXmFramedBox*              fpdolly_box;
178  G4OpenGLXmSliderBar*              fpdolly_slider;
179
180  G4OpenGLXmTopLevelShell*          fpsetting_top;
181  G4OpenGLXmFramedBox*              fpsetting_box;
182  G4OpenGLXmTextField*              fppan_set;
183  G4OpenGLXmTextField*              fprot_set;
184  G4OpenGLXmTextField*              fpzoom_upper;
185  G4OpenGLXmTextField*              fpzoom_lower;
186  G4OpenGLXmTextField*              fpdolly_upper;
187  G4OpenGLXmTextField*              fpdolly_lower;
188  G4OpenGLXmPushButton*             fpok_button;
189
190  G4OpenGLXmTopLevelShell*          fpmiscellany_top;
191  G4OpenGLXmFramedBox*              fpwobble_box;
192  G4OpenGLXmPushButton*             fpwobble_button;
193  G4OpenGLXmSliderBar*              fpwobble_slider;
194  G4OpenGLXmFramedBox*              fpreset_box;
195  G4OpenGLXmPushButton*             fpreset_button;
196  G4OpenGLXmFramedBox*              fpproj_style_box;
197  G4OpenGLXmRadioButton*            fporthogonal_button;
198  G4OpenGLXmRadioButton*            fpperspective_button;
199  G4OpenGLXmTextField*              fpfov_text;
200
201  G4OpenGLXmTopLevelShell*          fpprint_top;
202  G4OpenGLXmFramedBox*              fpprint_box;
203  G4OpenGLXmFramedBox*              fpprint_col_box;
204  G4OpenGLXmFramedBox*              fpprint_style_box;
205  G4OpenGLXmTextField*              fpprint_text;
206  G4OpenGLXmPushButton*             fpprint_button;
207  G4OpenGLXmSeparator*              fpprint_line;
208  G4OpenGLXmRadioButton*            fpprint_col_radio1;
209  G4OpenGLXmRadioButton*            fpprint_col_radio2;
210  G4OpenGLXmRadioButton*            fpprint_style_radio1;
211  G4OpenGLXmRadioButton*            fpprint_style_radio2;
212
213public:
214
215  static void expose_callback (Widget w,
216                               XtPointer clientData,
217                               XtPointer callData);
218 
219  static void resize_callback (Widget w,
220                               XtPointer clientData,
221                               XtPointer callData);
222 
223  static void actions_callback (Widget w,
224                                XtPointer clientData,
225                                XtPointer callData);
226 
227  static void misc_callback (Widget w,
228                             XtPointer clientData,
229                             XtPointer callData);
230 
231  static void Add_set_field (char* widget,
232                             char* widget_text,
233                             Widget* row_col_box,
234                             Widget* wid,
235                             G4double* val,
236                             G4OpenGLXmViewer* pView);
237 
238  static void zoom_callback (Widget w,
239                             XtPointer clientData,
240                             XtPointer callData);
241 
242  static void dolly_callback (Widget w,
243                              XtPointer clientData,
244                              XtPointer callData);
245 
246  static void pan_left_right_callback (Widget w,
247                                       XtPointer clientData,
248                                       XtPointer callData);
249 
250  static void left_right_pan_callback (XtPointer clientData,
251                                       XtIntervalId* timer_id);
252 
253  static void theta_rotation_callback (Widget w,
254                                       XtPointer clientData,
255                                       XtPointer callData);
256 
257  static void phi_rotation_callback (Widget w,
258                                     XtPointer clientData,
259                                     XtPointer callData);
260 
261  static void pan_up_down_callback (Widget w,
262                                    XtPointer clientData,
263                                    XtPointer callData);
264 
265  static void up_down_pan_callback (XtPointer clientData,
266                                    XtIntervalId* timer_id);
267 
268  static void drawing_style_callback (Widget w,
269                                      XtPointer clientData,
270                                      XtPointer callData);
271 
272  static void rep_style_callback (Widget w,
273                                  XtPointer clientData,
274                                  XtPointer callData);
275 
276  static void background_color_callback (Widget w,
277                                         XtPointer clientData,
278                                         XtPointer callData);
279 
280  static void set_rot_subject_callback (Widget w,
281                                        XtPointer clientData,
282                                        XtPointer callData);
283 
284  static void set_rot_sens_callback (Widget w,
285                                     XtPointer clientData,
286                                     XtPointer callData);
287 
288  static void set_pan_sens_callback (Widget w,
289                                     XtPointer clientData,
290                                     XtPointer callData);
291 
292  static void set_wob_sens_callback (Widget w,
293                                     XtPointer clientData,
294                                     XtPointer callData);
295 
296  static void projection_callback (Widget w,
297                                   XtPointer clientData,
298                                   XtPointer callData);
299 
300  static void wobble_callback (Widget w,
301                               XtPointer clientData,
302                               XtPointer callData);
303 
304  static void reset_callback (Widget w,
305                              XtPointer clientData,
306                              XtPointer callData);
307 
308  static void update_panels_callback (Widget w,
309                                      XtPointer clientData,
310                                      XtPointer callData);
311 
312  static void wobble_timer_callback (XtPointer clientData,
313                                     XtIntervalId* timerid);
314 
315  static void Add_radio_box (char* label_string,
316                             Widget* parent_frame_widget,
317                             XtCallbackRec* radio_box_cb,
318                             G4int num_buttons,
319                             G4int default_button,
320                             char* radio_box_name,
321                             char** button_names,
322                             G4OpenGLXmViewer* pView);
323 
324  static void Add_four_arrow_buttons (G4OpenGLXmViewer* pView,
325                                      XtCallbackRec** arrow_callbacks,
326                                      Widget* parent_widget);
327 
328  static void Add_slider_box (char* label_string,
329                              G4int num_sliders,
330                              char** slider_name,
331                              G4OpenGLXmViewer* pView,
332                              G4double* min_array,
333                              G4double* max_array,
334                              G4double* value_array,
335                              G4bool* show,
336                              short* decimals,
337                              unsigned char* orientation,
338                              unsigned char* direction,
339                              XtCallbackRec** slider_box_cb,
340                              Widget* parent_frame_widget);
341 
342  static void rotate_in_theta (XtPointer clientData,
343                               XtIntervalId* timer_id);
344 
345  static void rotate_in_phi (XtPointer clientData,
346                             XtIntervalId* timer_id);
347 
348  static void get_double_value_callback (Widget w,
349                                         XtPointer clientData,
350                                         XtPointer callData);
351 
352  static void get_text_callback (Widget w,
353                                 XtPointer clientData,
354                                 XtPointer callData);
355 
356  static void transparency_callback (Widget w,
357                                     XtPointer clientData,
358                                     XtPointer callData);
359 
360  static void antialias_callback (Widget w,
361                                  XtPointer clientData,
362                                  XtPointer callData);
363
364  static void haloing_callback (Widget w,
365                                XtPointer clientData,
366                                XtPointer callData);
367
368  static void aux_edge_callback (Widget w,
369                                XtPointer clientData,
370                                XtPointer callData);
371
372  static void set_print_colour_callback (Widget w,
373                                         XtPointer clientData,
374                                         XtPointer callData);
375
376  static void set_print_style_callback (Widget w,
377                                        XtPointer clientData,
378                                        XtPointer callData);
379
380  static void print_callback (Widget w,
381                              XtPointer clientData,
382                              XtPointer callData);
383
384  static G4bool get_boolean_userData (Widget w);
385
386  static G4int  get_int_userData (Widget w);
387
388  friend class G4OpenGLXmVWidgetObject;
389  friend class G4OpenGLXmViewerMessenger;
390 
391private:
392  G4OpenGLXmViewer (const G4OpenGLXmViewer&);
393  G4OpenGLXmViewer& operator = (const G4OpenGLXmViewer&);
394 
395};
396
397#endif
398
399#endif
400 
Note: See TracBrowser for help on using the repository browser.