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

Last change on this file since 1343 was 1343, checked in by garnier, 14 years ago

HEAD

  • Property svn:mime-type set to text/cpp
File size: 12.8 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.11 2009/02/04 16:48:41 lgarnier Exp $
28// GEANT4 tag $Name:  $
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 "globals.hh"
42
43#include <Xm/Xm.h>
44
45class G4OpenGLXmTopLevelShell;
46class G4OpenGLXmRadioButton;
47class G4OpenGLXmPushButton;
48class G4OpenGLXmSliderBar;
49class G4OpenGLXmBox;
50class G4OpenGLXmTextField;
51class G4OpenGLXmFramedBox;
52class G4OpenGLXmFourArrowButtons;
53class G4OpenGLXmSeparator;
54
55class G4OpenGLXmViewer: public G4OpenGLXViewer {
56
57public:
58  G4OpenGLXmViewer (G4OpenGLSceneHandler& scene);
59  virtual ~G4OpenGLXmViewer ();
60 
61protected:
62  virtual void ShowView ();
63  void GetXmConnection ();
64  virtual void CreateMainWindow ();
65
66  XtAppContext                      app;
67  XtWorkProcId                      workId;
68  Widget                            toplevel,
69                                    shell,
70                                    main_win,
71                                    menubar,
72                                    style_cascade,
73                                    actions_cascade,
74                                    misc_cascade,
75                                    spec_cascade,
76                                    rep_style_pullright,
77                                    drawing_style_pullright,
78                                    background_color_pullright,
79                                    transparency_pullright,
80                                    antialias_pullright,
81                                    haloing_pullright,
82                                    aux_edge_pullright,
83                                    frame,
84                                    glxarea;
85 
86  XmString                          style_str,
87                                    actions_str,
88                                    misc_str,
89                                    spec_str,
90                                    rep_str,
91                                    draw_str,
92                                    polyhedron_str,
93                                    nurbs_str,
94                                    wireframe_str,
95                                    hlr_str,
96                                    hsr_str,
97                                    hlhsr_str,
98                                    set_str,
99                                    rot_str,
100                                    pan_str,
101                                    exit_str,
102                                    quit_str,
103                                    print_str,
104                                    white_str,
105                                    black_str,
106                                    anti_str,
107                                    trans_str,
108                                    halo_str,
109                                    aux_edge_str,
110                                    bgnd_str,
111                                    off_str,
112                                    on_str;
113
114  G4double                          zoom_high,
115                                    zoom_low,
116                                    pan_low,
117                                    pan_high,
118                                    dolly_low,
119                                    dolly_high,
120                                    fov,
121                                    rot_sens_limit,
122                                    pan_sens_limit,
123                                    rot_sens,
124                                    pan_sens,
125                                    wob_sens;
126
127  Pixel                             bgnd,
128                                    borcol;
129
130  G4bool                            pan_right,
131                                    rotate_right,
132                                    pan_up,
133                                    rotate_up;
134
135  XtIntervalId                      rotation_timer,
136                                    pan_timer,
137                                    wobble_timer;
138
139  G4Vector3D                        original_vp;
140
141  G4int                             frameNo;
142
143  G4OpenGLXmTopLevelShell*          fprotation_top;
144  G4OpenGLXmBox*                    fprotation_button_box;
145  G4OpenGLXmRadioButton*            fprotation_button1;
146  G4OpenGLXmRadioButton*            fprotation_button2;
147  G4OpenGLXmBox*                    fprotation_slider_box;
148  G4OpenGLXmSliderBar*              fprotation_slider;
149  G4OpenGLXmBox*                    fprotation_arrow_box;
150  G4OpenGLXmFourArrowButtons*       fprotation_arrow;
151
152  G4OpenGLXmTopLevelShell*          fppanning_top;
153  G4OpenGLXmFramedBox*              fppanning_box;
154  G4OpenGLXmFourArrowButtons*       fppanning_arrows;
155  G4OpenGLXmSliderBar*              fppanning_slider;
156  G4OpenGLXmFramedBox*              fpzoom_box;
157  G4OpenGLXmSliderBar*              fpzoom_slider;
158  G4OpenGLXmFramedBox*              fpdolly_box;
159  G4OpenGLXmSliderBar*              fpdolly_slider;
160
161  G4OpenGLXmTopLevelShell*          fpsetting_top;
162  G4OpenGLXmFramedBox*              fpsetting_box;
163  G4OpenGLXmTextField*              fppan_set;
164  G4OpenGLXmTextField*              fprot_set;
165  G4OpenGLXmTextField*              fpzoom_upper;
166  G4OpenGLXmTextField*              fpzoom_lower;
167  G4OpenGLXmTextField*              fpdolly_upper;
168  G4OpenGLXmTextField*              fpdolly_lower;
169  G4OpenGLXmPushButton*             fpok_button;
170
171  G4OpenGLXmTopLevelShell*          fpmiscellany_top;
172  G4OpenGLXmFramedBox*              fpwobble_box;
173  G4OpenGLXmPushButton*             fpwobble_button;
174  G4OpenGLXmSliderBar*              fpwobble_slider;
175  G4OpenGLXmFramedBox*              fpreset_box;
176  G4OpenGLXmPushButton*             fpreset_button;
177  G4OpenGLXmFramedBox*              fpproj_style_box;
178  G4OpenGLXmRadioButton*            fporthogonal_button;
179  G4OpenGLXmRadioButton*            fpperspective_button;
180  G4OpenGLXmTextField*              fpfov_text;
181
182  G4OpenGLXmTopLevelShell*          fpprint_top;
183  G4OpenGLXmFramedBox*              fpprint_box;
184  G4OpenGLXmFramedBox*              fpprint_col_box;
185  G4OpenGLXmFramedBox*              fpprint_style_box;
186  G4OpenGLXmTextField*              fpprint_text;
187  G4OpenGLXmPushButton*             fpprint_button;
188  G4OpenGLXmSeparator*              fpprint_line;
189  G4OpenGLXmRadioButton*            fpprint_col_radio1;
190  G4OpenGLXmRadioButton*            fpprint_col_radio2;
191  G4OpenGLXmRadioButton*            fpprint_style_radio1;
192  G4OpenGLXmRadioButton*            fpprint_style_radio2;
193
194public:
195
196  static void expose_callback (Widget w,
197                               XtPointer clientData,
198                               XtPointer callData);
199 
200  static void resize_callback (Widget w,
201                               XtPointer clientData,
202                               XtPointer callData);
203 
204  static void actions_callback (Widget w,
205                                XtPointer clientData,
206                                XtPointer callData);
207 
208  static void misc_callback (Widget w,
209                             XtPointer clientData,
210                             XtPointer callData);
211 
212  static void Add_set_field (char* widget,
213                             char* widget_text,
214                             Widget* row_col_box,
215                             Widget* wid,
216                             G4double* val,
217                             G4OpenGLXmViewer* pView);
218 
219  static void zoom_callback (Widget w,
220                             XtPointer clientData,
221                             XtPointer callData);
222 
223  static void dolly_callback (Widget w,
224                              XtPointer clientData,
225                              XtPointer callData);
226 
227  static void pan_left_right_callback (Widget w,
228                                       XtPointer clientData,
229                                       XtPointer callData);
230 
231  static void left_right_pan_callback (XtPointer clientData,
232                                       XtIntervalId* timer_id);
233 
234  static void theta_rotation_callback (Widget w,
235                                       XtPointer clientData,
236                                       XtPointer callData);
237 
238  static void phi_rotation_callback (Widget w,
239                                     XtPointer clientData,
240                                     XtPointer callData);
241 
242  static void pan_up_down_callback (Widget w,
243                                    XtPointer clientData,
244                                    XtPointer callData);
245 
246  static void up_down_pan_callback (XtPointer clientData,
247                                    XtIntervalId* timer_id);
248 
249  static void drawing_style_callback (Widget w,
250                                      XtPointer clientData,
251                                      XtPointer callData);
252 
253  static void rep_style_callback (Widget w,
254                                  XtPointer clientData,
255                                  XtPointer callData);
256 
257  static void background_color_callback (Widget w,
258                                         XtPointer clientData,
259                                         XtPointer callData);
260 
261  static void set_rot_subject_callback (Widget w,
262                                        XtPointer clientData,
263                                        XtPointer callData);
264 
265  static void set_rot_sens_callback (Widget w,
266                                     XtPointer clientData,
267                                     XtPointer callData);
268 
269  static void set_pan_sens_callback (Widget w,
270                                     XtPointer clientData,
271                                     XtPointer callData);
272 
273  static void set_wob_sens_callback (Widget w,
274                                     XtPointer clientData,
275                                     XtPointer callData);
276 
277  static void projection_callback (Widget w,
278                                   XtPointer clientData,
279                                   XtPointer callData);
280 
281  static void wobble_callback (Widget w,
282                               XtPointer clientData,
283                               XtPointer callData);
284 
285  static void reset_callback (Widget w,
286                              XtPointer clientData,
287                              XtPointer callData);
288 
289  static void update_panels_callback (Widget w,
290                                      XtPointer clientData,
291                                      XtPointer callData);
292 
293  static void wobble_timer_callback (XtPointer clientData,
294                                     XtIntervalId* timerid);
295 
296  static void Add_radio_box (char* label_string,
297                             Widget* parent_frame_widget,
298                             XtCallbackRec* radio_box_cb,
299                             G4int num_buttons,
300                             G4int default_button,
301                             char* radio_box_name,
302                             char** button_names,
303                             G4OpenGLXmViewer* pView);
304 
305  static void Add_four_arrow_buttons (G4OpenGLXmViewer* pView,
306                                      XtCallbackRec** arrow_callbacks,
307                                      Widget* parent_widget);
308 
309  static void Add_slider_box (char* label_string,
310                              G4int num_sliders,
311                              char** slider_name,
312                              G4OpenGLXmViewer* pView,
313                              G4double* min_array,
314                              G4double* max_array,
315                              G4double* value_array,
316                              G4bool* show,
317                              short* decimals,
318                              unsigned char* orientation,
319                              unsigned char* direction,
320                              XtCallbackRec** slider_box_cb,
321                              Widget* parent_frame_widget);
322 
323  static void rotate_in_theta (XtPointer clientData,
324                               XtIntervalId* timer_id);
325 
326  static void rotate_in_phi (XtPointer clientData,
327                             XtIntervalId* timer_id);
328 
329  static void get_double_value_callback (Widget w,
330                                         XtPointer clientData,
331                                         XtPointer callData);
332 
333  static void get_text_callback (Widget w,
334                                 XtPointer clientData,
335                                 XtPointer callData);
336 
337  static void transparency_callback (Widget w,
338                                     XtPointer clientData,
339                                     XtPointer callData);
340 
341  static void antialias_callback (Widget w,
342                                  XtPointer clientData,
343                                  XtPointer callData);
344
345  static void haloing_callback (Widget w,
346                                XtPointer clientData,
347                                XtPointer callData);
348
349  static void aux_edge_callback (Widget w,
350                                XtPointer clientData,
351                                XtPointer callData);
352
353  static void set_print_colour_callback (Widget w,
354                                         XtPointer clientData,
355                                         XtPointer callData);
356
357  static void set_print_style_callback (Widget w,
358                                        XtPointer clientData,
359                                        XtPointer callData);
360
361  static void print_callback (Widget w,
362                              XtPointer clientData,
363                              XtPointer callData);
364
365  static G4bool get_boolean_userData (Widget w);
366
367  static G4int  get_int_userData (Widget w);
368
369  friend class G4OpenGLXmVWidgetObject;
370  friend class G4OpenGLXmViewerMessenger;
371 
372private:
373  G4OpenGLXmViewer (const G4OpenGLXmViewer&);
374  G4OpenGLXmViewer& operator = (const G4OpenGLXmViewer&);
375 
376};
377
378#endif
379
380#endif
381 
Note: See TracBrowser for help on using the repository browser.