source: trunk/source/visualization/OpenGL/src/G4OpenGLXmConvenienceRoutines.cc @ 893

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

geant4.8.2 beta

  • Property svn:mime-type set to text/cpp
File size: 14.0 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: G4OpenGLXmConvenienceRoutines.cc,v 1.11 2006/06/29 21:19:42 gunter Exp $
28// GEANT4 tag $Name: HEAD $
29//
30//
31// Andrew Walkden  16th April 1997
32// G4OpenGLXmConvenienceRoutines :
33//                       Collection of routines to facilitate
34//                       the addition of simple push button boxes,
35//                       and slider bars to the control panel.
36//
37// See G4OpenGLXmConvenienceRoutines.hh for more information.
38
39#ifdef G4VIS_BUILD_OPENGLXM_DRIVER
40
41#include "G4OpenGLXmViewer.hh"
42
43void G4OpenGLXmViewer::Add_four_arrow_buttons (G4OpenGLXmViewer* pView,
44                                             XtCallbackRec** arrow_callbacks,
45                                             Widget* parent_widget) {
46 
47  Widget arrow_form = XtVaCreateWidget
48    ("arrow_form",
49     xmFormWidgetClass,
50     *parent_widget,
51     XmNfractionBase, 3,
52     XtNvisual, pView->vi->visual,
53     XtNdepth, pView->vi->depth,
54     XtNcolormap, pView->cmap,
55     XtNborderColor, pView->borcol,
56     XtNbackground, pView->bgnd,
57     NULL);
58 
59  Widget arrow = XtVaCreateManagedWidget
60    ("up_arrow",
61     xmArrowButtonGadgetClass,
62     arrow_form,
63     XmNtopAttachment, XmATTACH_POSITION,
64     XmNtopPosition, 0,
65     XmNbottomAttachment, XmATTACH_POSITION,
66     XmNbottomPosition, 1,
67     XmNleftAttachment, XmATTACH_POSITION,
68     XmNleftPosition, 1,
69     XmNrightAttachment, XmATTACH_POSITION,
70     XmNrightPosition, 2,
71     XmNarrowDirection, XmARROW_UP,
72     NULL);
73 
74  XtVaSetValues (arrow,
75                 XmNuserData, True,
76                 NULL);
77 
78  XtAddCallbacks (arrow,
79                 XmNactivateCallback,
80                 arrow_callbacks[0]);
81 
82  XtAddCallbacks (arrow,
83                 XmNarmCallback,
84                 arrow_callbacks[0]);
85 
86  XtAddCallbacks (arrow,
87                 XmNdisarmCallback,
88                 arrow_callbacks[0]);
89 
90  arrow = XtVaCreateManagedWidget
91    ("down_arrow",
92     xmArrowButtonGadgetClass,
93     arrow_form,
94     XmNtopAttachment, XmATTACH_POSITION,
95     XmNtopPosition, 2,
96     XmNbottomAttachment, XmATTACH_POSITION,
97     XmNbottomPosition, 3,
98     XmNleftAttachment, XmATTACH_POSITION,
99     XmNleftPosition, 1,
100     XmNrightAttachment, XmATTACH_POSITION,
101     XmNrightPosition, 2,
102     XmNarrowDirection, XmARROW_DOWN,
103     NULL);
104 
105  XtVaSetValues (arrow,
106                 XmNuserData, False,
107                 NULL);
108 
109  XtAddCallbacks (arrow,
110                 XmNactivateCallback,
111                 arrow_callbacks[1]);
112 
113  XtAddCallbacks (arrow,
114                 XmNarmCallback,
115                 arrow_callbacks[1]);
116 
117  XtAddCallbacks (arrow,
118                 XmNdisarmCallback,
119                 arrow_callbacks[1]);
120 
121  arrow = XtVaCreateManagedWidget
122    ("left_arrow",
123     xmArrowButtonGadgetClass,
124     arrow_form,
125     XmNtopAttachment, XmATTACH_POSITION,
126     XmNtopPosition, 1,
127     XmNbottomAttachment, XmATTACH_POSITION,
128     XmNbottomPosition, 2,
129     XmNleftAttachment, XmATTACH_POSITION,
130     XmNleftPosition, 0,
131     XmNrightAttachment, XmATTACH_POSITION,
132     XmNrightPosition, 1,
133     XmNarrowDirection, XmARROW_LEFT,
134     NULL);
135 
136  XtVaSetValues (arrow,
137                 XmNuserData, False,
138                 NULL);
139
140  XtAddCallbacks (arrow,
141                 XmNactivateCallback,
142                 arrow_callbacks[2]);
143
144  XtAddCallbacks (arrow,
145                 XmNarmCallback,
146                 arrow_callbacks[2]);
147 
148  XtAddCallbacks (arrow,
149                 XmNdisarmCallback,
150                 arrow_callbacks[2]);
151     
152  arrow = XtVaCreateManagedWidget
153    ("right_arrow",
154     xmArrowButtonGadgetClass,
155     arrow_form,
156     XmNtopAttachment, XmATTACH_POSITION,
157     XmNtopPosition, 1,
158     XmNbottomAttachment, XmATTACH_POSITION,
159     XmNbottomPosition, 2,
160     XmNleftAttachment, XmATTACH_POSITION,
161     XmNleftPosition, 2,
162     XmNrightAttachment, XmATTACH_POSITION,
163     XmNrightPosition, 3,
164     XmNarrowDirection, XmARROW_RIGHT,
165     NULL);
166 
167  XtVaSetValues (arrow,
168                 XmNuserData, True,
169                 NULL);
170 
171  XtAddCallbacks (arrow,
172                 XmNactivateCallback,
173                 arrow_callbacks[3]);
174 
175  XtAddCallbacks (arrow,
176                 XmNarmCallback,
177                 arrow_callbacks[3]);
178
179  XtAddCallbacks (arrow,
180                 XmNdisarmCallback,
181                 arrow_callbacks[3]);
182 
183  XtManageChild (arrow_form);
184 
185}
186
187void G4OpenGLXmViewer::Add_radio_box (char* label_string,
188                                    Widget* parent_widget,
189                                    XtCallbackRec* radio_box_callback,
190                                    G4int num_buttons,
191                                    G4int default_button,
192                                    char* radio_box_name,
193                                    char** button_names,
194                                    G4OpenGLXmViewer* pView)
195{
196  XmString button_str = XmStringCreateLocalized((char*) ""); // ...to
197  // initialise to something to avoid pedantic warning.
198  Arg** args;
199  args = new Arg* [num_buttons];
200  Widget button;
201
202  G4int i;
203  for (i = 0; i < num_buttons; i++) {
204
205    args[i] = new Arg[7];
206    button_str = XmStringCreateLocalized (button_names[i]);
207
208    XtSetArg (args[i][0], XtNvisual, pView->vi->visual);
209    XtSetArg (args[i][1], XtNdepth, pView->vi->depth);
210    XtSetArg (args[i][2], XtNcolormap, pView->cmap);
211    XtSetArg (args[i][3], XtNborderColor, pView->borcol);
212    XtSetArg (args[i][4], XtNbackground, pView->bgnd);
213    XtSetArg (args[i][5], XmNlabelString, button_str);
214
215    if (i == default_button) {
216      XtSetArg (args[i][6], XmNset, True);
217    } else {
218      XtSetArg (args[i][6], XmNset, False);
219    }
220  }
221 
222  Widget radio_box = XtVaCreateWidget (radio_box_name,
223                                       xmRowColumnWidgetClass,
224                                       *parent_widget,
225                                       XmNisHomogeneous, False,
226                                       XmNradioBehavior, True,
227                                       XmNradioAlwaysOne, True,
228                                       XmNuserData, pView,
229                                       XtNvisual, pView->vi->visual,
230                                       XtNdepth, pView->vi->depth,
231                                       XtNcolormap, pView->cmap,
232                                       XtNborderColor, pView->borcol,
233                                       XtNbackground, pView->bgnd,
234                                       NULL);
235
236  XmString lab = XmStringCreateLocalized (label_string);
237
238  // Unused!
239  //Widget label = XtVaCreateManagedWidget ("radio_label",
240  //                              xmLabelWidgetClass,
241  //                              radio_box,
242  //                              XmNalignment, XmALIGNMENT_CENTER,
243  //                              XmNlabelString, lab,
244  //                              XtNvisual, pView->vi->visual,
245  //                              XtNdepth, pView->vi->depth,
246  //                              XtNcolormap, pView->cmap,
247  //                              XtNborderColor, pView->borcol,
248  //                              XtNbackground, pView->bgnd,
249  //                              NULL);
250
251  XmStringFree (lab);
252
253  for (i = 0; i < num_buttons; i++) {
254    button = XtCreateManagedWidget (button_names[i],
255                                    xmToggleButtonWidgetClass,
256                                    radio_box,
257                                    args[i],
258                                    7);
259    XtVaSetValues (button,
260                   XmNuserData, i,
261                   NULL);
262   
263    XtAddCallbacks (button,
264                   XmNarmCallback,
265                   radio_box_callback);
266  }
267
268  XtManageChild (radio_box);
269
270  XmStringFree (button_str);
271 
272  for (i = 0; i < num_buttons; i++) {
273
274    delete[] args[i];
275
276  }
277
278  delete[] args;
279
280
281void G4OpenGLXmViewer::Add_set_field (char* w_name,
282                                    char* w_text,
283                                    Widget* row_col_box,
284                                    Widget* wid,
285                                    G4double* val,
286                                    G4OpenGLXmViewer* pView)
287{
288
289  char local_w_text[50];
290  strcpy (local_w_text, w_text);
291
292  char label_name[50];
293  strcpy (label_name, w_name);
294  strcat (label_name, "_label");
295 
296  char text_field_name[50];
297  strcpy (text_field_name, w_name);
298  strcat (text_field_name, "_text_field");
299 
300  XmString local_text = XmStringCreateLocalized (local_w_text);
301
302  // Unused!
303  //  Widget label = XtVaCreateManagedWidget (label_name,
304  //                              xmLabelWidgetClass,
305  //                              *row_col_box,
306  //                              XmNlabelString, local_text,
307  //                              XtNvisual, pView->vi->visual,
308  //                              XtNdepth, pView->vi->depth,
309  //                              XtNcolormap, pView->cmap,
310  //                              XtNborderColor, pView->borcol,
311  //                              XtNbackground, pView->bgnd,
312  //                              NULL);
313
314  XmStringFree (local_text);
315
316  char initial[50];
317  sprintf (initial, "%6.2f", *val);
318 
319  *wid = XtVaCreateManagedWidget (text_field_name,
320                                  xmTextFieldWidgetClass,
321                                  *row_col_box,
322                                  XmNvalue, (String)initial,
323                                  XtNvisual, pView->vi->visual,
324                                  XtNdepth, pView->vi->depth,
325                                  XtNcolormap, pView->cmap,
326                                  XtNborderColor, pView->borcol,
327                                  XtNbackground, pView->bgnd,
328                                  NULL);
329
330  XtAddCallback (*wid,
331                 XmNvalueChangedCallback,
332                 get_double_value_callback,
333                 val);
334
335  Widget sep = XtVaCreateManagedWidget ("sep",
336                                        xmSeparatorWidgetClass,
337                                        *row_col_box,
338                                        XmNorientation, XmHORIZONTAL,
339                                        XtNvisual, pView->vi->visual,
340                                        XtNdepth, pView->vi->depth,
341                                        XtNcolormap, pView->cmap,
342                                        XtNborderColor, pView->borcol,
343                                        XtNbackground, pView->bgnd,
344                                        NULL);
345
346  sep = XtVaCreateManagedWidget ("sep",
347                                 xmSeparatorWidgetClass,
348                                 *row_col_box,
349                                 XmNseparatorType, XmNO_LINE,
350                                 XmNmargin, 1,
351                                 XmNorientation, XmHORIZONTAL,
352                                 XtNvisual, pView->vi->visual,
353                                 XtNdepth, pView->vi->depth,
354                                 XtNcolormap, pView->cmap,
355                                 XtNborderColor, pView->borcol,
356                                 XtNbackground, pView->bgnd,
357                                 NULL);
358}
359
360void G4OpenGLXmViewer::Add_slider_box (char* label_string,
361                                     G4int num_sliders,
362                                     char** slider_names,
363                                     G4OpenGLXmViewer* pView,
364                                     G4double* min_array,
365                                     G4double* max_array,
366                                     G4double* value_array,
367                                     G4bool* show,
368                                     short* decimals,
369                                     unsigned char* orientation,
370                                     unsigned char* direction,
371                                     XtCallbackRec** slider_box_callbacks,
372                                     Widget* parent_widget)
373{
374  XmString slider_name_str = XmStringCreateLocalized((char*) ""); // ...to
375  // initialise to something to avoid pedantic warning.
376  Arg** slider_args;
377  slider_args = new Arg*[num_sliders];
378  Widget slider;
379  G4int j = 0;
380
381  G4int i;
382  for (i = 0; i < num_sliders; i++) {
383    j = 0;
384    slider_args[i] = new Arg[13];
385    slider_name_str = XmStringCreateLtoR (slider_names[i],
386                                          XmFONTLIST_DEFAULT_TAG);
387   
388    XtSetArg (slider_args[i][j],
389              XtNvisual, pView->vi->visual); j++;
390    XtSetArg (slider_args[i][j],
391              XtNdepth, pView->vi->depth); j++;
392    XtSetArg (slider_args[i][j],
393              XtNcolormap, pView->cmap); j++;
394    XtSetArg (slider_args[i][j],
395              XtNborderColor, pView->borcol); j++;
396    XtSetArg (slider_args[i][j],
397              XtNbackground, pView->bgnd); j++;
398   
399    XtSetArg (slider_args[i][j],
400              XmNtitleString, slider_name_str);  j++;
401   
402    XtSetArg (slider_args[i][j],
403              XmNmaximum, G4int(max_array[i] * std::pow(10.0, (G4double)decimals[i]))); j++;
404    XtSetArg (slider_args[i][j],
405              XmNminimum, G4int(min_array[i] * std::pow(10.0, (G4double)decimals[i]))); j++;
406    XtSetArg (slider_args[i][j],
407              XmNvalue, G4int(value_array[i] * std::pow(10.0, (G4double)decimals[i]))); j++;
408    XtSetArg (slider_args[i][j],
409              XmNshowValue, show[i]); j++;
410    XtSetArg (slider_args[i][j],
411              XmNdecimalPoints, decimals[i]); j++;
412   
413    XtSetArg (slider_args[i][j],
414              XmNorientation, orientation[i]);  j++;
415    XtSetArg (slider_args[i][j],
416              XmNprocessingDirection, direction[i]); j++;
417
418  }
419
420  Widget slider_box = XtVaCreateWidget ("slider_box",
421                                        xmRowColumnWidgetClass,
422                                        *parent_widget,
423                                        XmNisHomogeneous, False,
424                                        XtNvisual, pView->vi->visual,
425                                        XtNdepth, pView->vi->depth,
426                                        XtNcolormap, pView->cmap,
427                                        XtNborderColor, pView->borcol,
428                                        XtNbackground, pView->bgnd,
429                                        NULL);
430
431  XmString lab = XmStringCreateLocalized (label_string);
432
433  // Unused!
434  //Widget label = XtVaCreateManagedWidget ("slider_label",
435  //                              xmLabelWidgetClass,
436  //                              slider_box,
437  //                              XmNlabelString, lab,
438  //                              XmNalignment, XmALIGNMENT_CENTER,
439  //                              XtNvisual, pView->vi->visual,
440  //                              XtNdepth, pView->vi->depth,
441  //                              XtNcolormap, pView->cmap,
442  //                              XtNborderColor, pView->borcol,
443  //                              XtNbackground, pView->bgnd,
444  //                              NULL);
445
446  XmStringFree (lab);
447 
448  for (i = 0; i < num_sliders; i++) {
449   
450    slider = XtCreateManagedWidget (slider_names[i],
451                                    xmScaleWidgetClass,
452                                    slider_box,
453                                    slider_args[i],
454                                    j);
455
456    XtAddCallbacks (slider,
457                   XmNvalueChangedCallback,
458                   slider_box_callbacks[i]);
459   
460    XtAddCallbacks (slider,
461                   XmNdragCallback,
462                   slider_box_callbacks[i]);
463   
464  }
465
466  XtManageChild (slider_box);
467  XmStringFree (slider_name_str);
468
469  for (i = 0; i < num_sliders; i++) {
470
471    delete[] slider_args[i];
472
473  }
474
475  delete[] slider_args;
476
477}
478
479void G4OpenGLXmViewer::get_double_value_callback (Widget w,
480                                                XtPointer clientData,
481                                                XtPointer)
482{
483  G4double* val = (G4double*) clientData;
484  String string;
485
486  XtVaGetValues (w,
487                 XmNvalue, &string,
488                 NULL);
489
490  sscanf (string, "%lg", val);
491
492}
493
494void G4OpenGLXmViewer::get_text_callback (Widget w,
495                                        XtPointer clientData,
496                                        XtPointer)
497{
498  char* txt = (char*)clientData;
499  String string;
500
501  XtVaGetValues (w,
502                 XmNvalue, &string,
503                 NULL);
504
505  sscanf (string, "%s", txt);
506}
507
508G4bool G4OpenGLXmViewer::get_boolean_userData (Widget w)
509{
510  XtPointer userData;
511  XtVaGetValues (w,XmNuserData,&userData,NULL);
512  return (G4bool)(unsigned long)userData;
513}
514
515G4int G4OpenGLXmViewer::get_int_userData (Widget w)
516{
517  XtPointer userData;
518  XtVaGetValues (w,XmNuserData,&userData,NULL);
519  return (G4int)(unsigned long)userData;
520}
521
522#endif
523
524
525
526
527
Note: See TracBrowser for help on using the repository browser.