Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc (Version 11.3.0) and /visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc (Version 9.2.p4)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
                                                   >>  27 // $Id: G4OpenGLStoredQtViewer.cc,v 1.20.2.1 2009/03/13 09:02:57 gcosmo Exp $
                                                   >>  28 // GEANT4 tag $Name: geant4-09-02-patch-04 $
 27 //                                                 29 //
 28 //                                                 30 //
 29 // Class G4OpenGLStoredQtViewer : a class deri     31 // Class G4OpenGLStoredQtViewer : a class derived from G4OpenGLQtViewer and
 30 //                                G4OpenGLStor     32 //                                G4OpenGLStoredViewer.
 31                                                    33 
                                                   >>  34 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER
                                                   >>  35 
 32 #include "G4OpenGLStoredQtViewer.hh"               36 #include "G4OpenGLStoredQtViewer.hh"
 33                                                    37 
 34 #include "G4OpenGLStoredSceneHandler.hh"       << 
 35 #include "G4ios.hh"                                38 #include "G4ios.hh"
 36 #include "G4Threading.hh"                      << 
 37 #include "G4UIQt.hh"                           << 
 38 #if 0x060000 <= QT_VERSION                     << 
 39 #include "G4Qt.hh"                             << 
 40 #endif                                         << 
 41                                                    39 
 42 #include <qapplication.h>                      <<  40 //#include <qmouseevent.h>
 43 #include <qtabwidget.h>                        <<  41 #include <qevent.h> // include <qcontextmenuevent.h>
 44                                                    42 
 45 G4OpenGLStoredQtViewer::G4OpenGLStoredQtViewer     43 G4OpenGLStoredQtViewer::G4OpenGLStoredQtViewer
 46 (G4OpenGLStoredSceneHandler& sceneHandler,         44 (G4OpenGLStoredSceneHandler& sceneHandler,
 47  const G4String&  name):                           45  const G4String&  name):
 48   G4VViewer (sceneHandler, sceneHandler.Increm     46   G4VViewer (sceneHandler, sceneHandler.IncrementViewCount (), name),
 49   G4OpenGLViewer (sceneHandler),                   47   G4OpenGLViewer (sceneHandler),
 50   G4OpenGLQtViewer (sceneHandler),                 48   G4OpenGLQtViewer (sceneHandler),
 51   G4OpenGLStoredViewer (sceneHandler),         <<  49   G4OpenGLStoredViewer (sceneHandler)             // FIXME : gerer le pb du parent !
 52   G4QGLWidgetType()                            << 
 53 {                                                  50 {
 54   if (fViewId < 0) return;  // In case error i << 
 55                                                << 
 56 #if QT_VERSION < 0x060000                      << 
 57   fQGLWidgetInitialiseCompleted = false;       << 
 58                                                    51 
 59     // Indicates that the widget has no backgr <<  52   //set true to picking
 60   G4QGLWidgetType::setAttribute (Qt::WA_NoSyst <<  53   fVP.SetPicking(true);
 61                                                <<  54 #if QT_VERSION < 0x040000
 62   setFocusPolicy(Qt::StrongFocus); // enable k <<  55   setFocusPolicy(QWidget::StrongFocus); // enable keybord events
 63   fHasToRepaint = false;                       << 
 64   fPaintEventLock = false;                     << 
 65   fUpdateGLLock = false;                       << 
 66 #else                                              56 #else
 67   // Indicates that the widget has no backgrou << 
 68   G4QGLWidgetType::setAttribute (Qt::WA_NoSyst << 
 69                                                << 
 70   setFocusPolicy(Qt::StrongFocus); // enable k     57   setFocusPolicy(Qt::StrongFocus); // enable keybord events
 71 #endif                                             58 #endif
 72 }                                              <<  59   hasToRepaint =false;
 73                                                << 
 74 G4OpenGLStoredQtViewer::~G4OpenGLStoredQtViewe << 
 75                                                << 
 76 void G4OpenGLStoredQtViewer::Initialise() {    << 
 77 #if QT_VERSION < 0x060000                      << 
 78                                                    60 
 79   fQGLWidgetInitialiseCompleted = false;       <<  61   if (fViewId < 0) return;  // In case error in base class instantiation.
 80   CreateMainWindow (this,QString(GetName()));  <<  62 }
 81                                                    63 
                                                   >>  64 G4OpenGLStoredQtViewer::~G4OpenGLStoredQtViewer() {
 82   makeCurrent();                                   65   makeCurrent();
 83   glDrawBuffer (GL_BACK);                      <<  66   // this is connect to the Dialog for deleting it properly
                                                   >>  67   // when close event.
                                                   >>  68   //   ((QDialog*)window())->reject();
                                                   >>  69 }
 84                                                    70 
 85    // set the good tab active                  <<  71 void G4OpenGLStoredQtViewer::Initialise() {
 86   if (G4QGLWidgetType::parentWidget()) {       <<  72 #ifdef G4DEBUG_VIS_OGL
 87     auto *parentTab = dynamic_cast<QTabWidget* <<  73   printf("G4OpenGLStoredQtViewer::Initialise 1\n");
 88     if (parentTab) {                           << 
 89       parentTab->setCurrentIndex(parentTab->co << 
 90     }                                          << 
 91   }                                            << 
 92                                                << 
 93   fQGLWidgetInitialiseCompleted = true;        << 
 94 #else                                          << 
 95   CreateMainWindow (this,QString(GetName()));  << 
 96   // Set jpg as default export format for Qt v << 
 97   setExportImageFormat("jpg");                 << 
 98 #endif                                             74 #endif
                                                   >>  75   readyToPaint = false;
                                                   >>  76   CreateMainWindow (this,QString(fName));
                                                   >>  77   CreateFontLists ();
                                                   >>  78   
                                                   >>  79   readyToPaint = true;
 99 }                                                  80 }
100                                                    81 
101 #if QT_VERSION < 0x060000                      << 
102 void G4OpenGLStoredQtViewer::initializeGL () {     82 void G4OpenGLStoredQtViewer::initializeGL () {
103                                                    83 
104   InitializeGLView ();                             84   InitializeGLView ();
105                                                    85 
106   if (fSceneHandler.GetScene() == 0) {         <<  86 #ifdef G4DEBUG_VIS_OGL
107     fHasToRepaint =false;                      <<  87   printf("G4OpenGLStoredQtViewer::InitialiseGL () 1\n");
108   } else {                                     << 
109     fHasToRepaint =true;                       << 
110   }                                            << 
111                                                << 
112    // Set the component visible                << 
113   //   setVisible(true) ;                      << 
114                                                << 
115   // Set jpg as default export format for Qt v << 
116   setExportImageFormat("jpg");                 << 
117 }                                              << 
118 #endif                                             88 #endif
119                                                    89 
120 G4bool G4OpenGLStoredQtViewer::CompareForKerne <<  90   // clear the buffers and window.
121 {                                              <<  91   ClearView ();
122   // Identical to G4OpenGLStoredViewer::Compar <<  92   FinishView ();
123   // for checking of VisAttributesModifiers, b <<  93    
124   // G4OpenGLStoredQtViewer keeps track of its <<  94   glDepthFunc (GL_LEQUAL);
125   // modifiers (fTreeItemModels, etc.).        <<  95   glDepthMask (GL_TRUE);
126   if (                                         << 
127       (lastVP.GetDrawingStyle ()    != fVP.Get << 
128       (lastVP.GetNumberOfCloudPoints()  != fVP << 
129       (lastVP.IsAuxEdgeVisible ()   != fVP.IsA << 
130       (lastVP.IsCulling ()          != fVP.IsC << 
131       (lastVP.IsCullingInvisible () != fVP.IsC << 
132       (lastVP.IsDensityCulling ()   != fVP.IsD << 
133       (lastVP.IsCullingCovered ()   != fVP.IsC << 
134       (lastVP.GetCBDAlgorithmNumber() !=       << 
135        fVP.GetCBDAlgorithmNumber())            << 
136       // Note: Section and Cutaway can reveal  << 
137       // backface culling is implemented, the  << 
138       // the back-facing faces are not there.  << 
139       // (commented out) backface culling (it  << 
140       // in fact, performance seems to improve << 
141       (lastVP.IsSection ()          != fVP.IsS << 
142       // Section (DCUT) is NOT implemented loc << 
143       // (lastVP.IsCutaway ()          != fVP. << 
144       // Cutaways are implemented locally so w << 
145       (lastVP.IsExplode ()          != fVP.IsE << 
146       (lastVP.GetNoOfSides ()       != fVP.Get << 
147       (lastVP.GetGlobalMarkerScale()    != fVP << 
148       (lastVP.GetGlobalLineWidthScale() != fVP << 
149       (lastVP.IsMarkerNotHidden ()  != fVP.IsM << 
150       (lastVP.GetDefaultVisAttributes()->GetCo << 
151        fVP.GetDefaultVisAttributes()->GetColou << 
152       (lastVP.GetDefaultTextVisAttributes()->G << 
153        fVP.GetDefaultTextVisAttributes()->GetC << 
154       (lastVP.GetBackgroundColour ()!= fVP.Get << 
155       (lastVP.IsPicking ()          != fVP.IsP << 
156       (lastVP.IsSpecialMeshRendering() != fVP. << 
157       (lastVP.GetSpecialMeshRenderingOption()  << 
158     return true;                               << 
159                                                << 
160   // Don't check VisAttributesModifiers if thi << 
161   // initiated by a mouse interaction on the s << 
162   if (fMouseOnSceneTree) {                     << 
163     // Reset the flag.                         << 
164     fMouseOnSceneTree = false;                 << 
165   } else {                                     << 
166     // Not initiated by a mouse so compare for << 
167     if (lastVP.GetVisAttributesModifiers() !=  << 
168       return true;                             << 
169     }                                          << 
170   }                                            << 
171                                                    96 
172   if (lastVP.IsDensityCulling () &&            <<  97   if (fSceneHandler.GetScene() == 0) {
173       (lastVP.GetVisibleDensity () != fVP.GetV <<  98     hasToRepaint =false;
174     return true;                               <<  99   } else {
175                                                << 100     hasToRepaint =true;
176 //  /***************************************** << 
177 //   If section (DCUT) is implemented locally, << 
178   if (lastVP.IsSection () &&                   << 
179       (lastVP.GetSectionPlane () != fVP.GetSec << 
180     return true;                               << 
181 //   ***************************************** << 
182                                                << 
183   /******************************************* << 
184    If cutaways are implemented locally, commen << 
185    if (lastVP.IsCutaway ()) {                  << 
186    if (vp.GetCutawayMode() != fVP.GetCutawayMo << 
187    if (lastVP.GetCutawayPlanes ().size () !=   << 
188    fVP.GetCutawayPlanes ().size ()) return tru << 
189    for (size_t i = 0; i < lastVP.GetCutawayPla << 
190    if (lastVP.GetCutawayPlanes()[i] != fVP.Get << 
191    return true;                                << 
192    }                                           << 
193    ******************************************* << 
194                                                << 
195   if (lastVP.GetCBDAlgorithmNumber() > 0) {    << 
196     if (lastVP.GetCBDParameters().size() != fV << 
197     else if (lastVP.GetCBDParameters() != fVP. << 
198   }                                               101   }
199                                                   102 
200   if (lastVP.IsExplode () &&                   << 103 #ifdef G4DEBUG_VIS_OGL
201       (lastVP.GetExplodeFactor () != fVP.GetEx << 104   printf("G4OpenGLStoredQtViewer::InitialiseGL  END\n");
202     return true;                               << 105 #endif
203                                                << 
204   if (lastVP.IsSpecialMeshRendering() &&       << 
205       (lastVP.GetSpecialMeshVolumes() != fVP.G << 
206     return true;                               << 
207                                                << 
208   return false;                                << 
209 }                                                 106 }
210                                                   107 
211 G4bool G4OpenGLStoredQtViewer::POSelected(size << 
212 {                                              << 
213   return isTouchableVisible((int)POListIndex); << 
214 }                                              << 
215                                                << 
216 G4bool G4OpenGLStoredQtViewer::TOSelected(size << 
217 {                                              << 
218   return true;                                 << 
219 }                                              << 
220                                                   108 
221 void G4OpenGLStoredQtViewer::DrawView () {        109 void G4OpenGLStoredQtViewer::DrawView () {
222 #if QT_VERSION < 0x060000                      << 110 #ifdef G4DEBUG_VIS_OGL
223 #else                                          << 111   printf("G4OpenGLStoredQtViewer::DrawView  VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n");
224   if(IsGettingPickInfos()) {                   << 
225     paintGL();                                 << 
226     return;                                    << 
227   }                                            << 
228 #endif                                            112 #endif
229 #if (QT_VERSION < 0x060000) || !defined(G4MULT << 113   // That's no the same logic as Immediate Viewer, I don't know why...
230   updateQWidget();                             << 114   // But if I send updateGL here, we go here :
231 #else                                          << 115   //  updateQWidget -> paintGL -> ComputeView
232   if (G4Threading::IsMasterThread()) {         << 116   // whih is not the same as ComputeView Directly
233     updateQWidget();                           << 117   // And we loose the redraw of things !
234   } else {                                     << 118   
235     update(); //G.Barrand: updateQWidget() ind << 119   ComputeView();
236   }                                            << 120 #ifdef G4DEBUG_VIS_OGL
                                                   >> 121   printf("G4OpenGLStoredQtViewer::DrawView  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
237 #endif                                            122 #endif
238 }                                                 123 }
239                                                   124 
240 void G4OpenGLStoredQtViewer::ComputeView () {     125 void G4OpenGLStoredQtViewer::ComputeView () {
241                                                   126 
242 #if QT_VERSION < 0x060000                      << 127 #ifdef G4DEBUG_VIS_OGL
243   makeCurrent();                               << 128   printf("G4OpenGLStoredQtViewer::ComputeView %d %d   VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV\n",fWinSize_x, fWinSize_y);
244 #endif                                            129 #endif
245                                                << 130   makeCurrent();
246   G4ViewParameters::DrawingStyle dstyle = GetV << 131   G4ViewParameters::DrawingStyle style = GetViewParameters().GetDrawingStyle();
247                                                   132 
248   //Make sure current viewer is attached and c    133   //Make sure current viewer is attached and clean...
249                                                   134 
250   //See if things have changed from last time     135   //See if things have changed from last time and remake if necessary...
251   // The fNeedKernelVisit flag might have been    136   // The fNeedKernelVisit flag might have been set by the user in
252   // /vis/viewer/rebuild, but if not, make dec    137   // /vis/viewer/rebuild, but if not, make decision and set flag only
253   // if necessary...                              138   // if necessary...
254   if (!fNeedKernelVisit) {                        139   if (!fNeedKernelVisit) {
255     KernelVisitDecision ();                       140     KernelVisitDecision ();
256   }                                               141   }
257   fLastVP = fVP;                               << 
258   G4bool kernelVisitWasNeeded = fNeedKernelVis    142   G4bool kernelVisitWasNeeded = fNeedKernelVisit; // Keep (ProcessView resets).
259   ProcessView ();                                 143   ProcessView ();
260                                                   144    
261   if (kernelVisitWasNeeded) {                  << 
262     displaySceneTreeComponent();               << 
263   }                                            << 
264                                                   145 
265   if(dstyle!=G4ViewParameters::hlr &&          << 146   if(style!=G4ViewParameters::hlr &&
266      haloing_enabled) {                           147      haloing_enabled) {
                                                   >> 148 #ifdef G4DEBUG_VIS_OGL
                                                   >> 149     printf("G4OpenGLStoredQtViewer::ComputeView DANS LE IF\n");
                                                   >> 150 #endif
267                                                   151 
268     HaloingFirstPass ();                          152     HaloingFirstPass ();
269     DrawDisplayLists ();                          153     DrawDisplayLists ();
270     glFlush ();                                   154     glFlush ();
271                                                   155 
272     HaloingSecondPass ();                         156     HaloingSecondPass ();
273                                                   157 
274     DrawDisplayLists ();                          158     DrawDisplayLists ();
275     FinishView ();                                159     FinishView ();
276                                                   160 
277   } else {                                        161   } else {
278                                                   162      
279     // If kernel visit was needed, drawing and    163     // If kernel visit was needed, drawing and FinishView will already
280     // have been done, so...                      164     // have been done, so...
281     if (!kernelVisitWasNeeded) {                  165     if (!kernelVisitWasNeeded) {
                                                   >> 166 #ifdef G4DEBUG_VIS_OGL
                                                   >> 167       printf("**************************  G4OpenGLStoredQtViewer::ComputeView Don't need kernel Visit \n");
                                                   >> 168 #endif
282       DrawDisplayLists ();                        169       DrawDisplayLists ();
283       FinishView ();                              170       FinishView ();
284     } else {                                      171     } else {
                                                   >> 172 #ifdef G4DEBUG_VIS_OGL
                                                   >> 173       printf("**************************  G4OpenGLStoredQtViewer::ComputeView need kernel Visit \n");
                                                   >> 174 #endif
285       // However, union cutaways are implement    175       // However, union cutaways are implemented in DrawDisplayLists, so make
286       // an extra pass...                         176       // an extra pass...
287       if (fVP.IsCutaway() &&                      177       if (fVP.IsCutaway() &&
288           fVP.GetCutawayMode() == G4ViewParame    178           fVP.GetCutawayMode() == G4ViewParameters::cutawayUnion) {
289         ClearView();                              179         ClearView();
290         DrawDisplayLists ();                      180         DrawDisplayLists ();
291         FinishView ();                            181         FinishView ();
                                                   >> 182 #ifdef G4DEBUG_VIS_OGL
                                                   >> 183         printf("***************************  CASE 4 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n");
                                                   >> 184 #endif
292       } else { // ADD TO AVOID KernelVisit=1 a    185       } else { // ADD TO AVOID KernelVisit=1 and nothing to display
293         DrawDisplayLists ();                      186         DrawDisplayLists ();
294         FinishView ();                            187         FinishView ();
295       }                                           188       }
296     }                                             189     }
297   }                                               190   }
298                                                   191 
299   if (isRecording()) {                            192   if (isRecording()) {
300     savePPMToTemp();                              193     savePPMToTemp();
301   }                                               194   }
302                                                   195 
303 #if QT_VERSION < 0x060000                      << 196 #ifdef G4DEBUG_VIS_OGL
304   fHasToRepaint = true;                        << 197   printf("G4OpenGLStoredQtViewer::ComputeView %d %d ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ \n",fWinSize_x, fWinSize_y);
305 #endif                                            198 #endif
                                                   >> 199   hasToRepaint =true;
306 }                                                 200 }
307                                                   201 
308                                                   202 
309 /**                                               203 /**
310    - Lors du resize de la fenetre, on doit non    204    - Lors du resize de la fenetre, on doit non pas redessiner le detecteur, mais aussi les evenements
311 */                                                205 */
312 void G4OpenGLStoredQtViewer::resizeGL(            206 void G4OpenGLStoredQtViewer::resizeGL(
313                                       int aWid    207                                       int aWidth
314                                       ,int aHe    208                                       ,int aHeight)
315 {                                                 209 {  
316   // Set new size, it will be update when next    210   // Set new size, it will be update when next Repaint()->SetView() called
317   if ((aWidth > 0) && (aHeight > 0)) {         << 211   fWinSize_x = aWidth;
318 #if QT_VERSION < 0x060000                      << 212   fWinSize_y = aHeight;
319     ResizeWindow(aWidth,aHeight);              << 213   hasToRepaint = true;
320     fHasToRepaint = sizeHasChanged();          << 
321 #else                                          << 
322     ResizeWindow(devicePixelRatio()*aWidth,dev << 
323 #endif                                         << 
324   }                                            << 
325 }                                                 214 }
326                                                   215 
327                                                   216 
328 // We have to get several case :               << 
329 // - Only activate the windows (mouse click fo << 
330 // - resize window -> redraw                   << 
331 // - try to avoid recompute everything if we d << 
332                                                << 
333 void G4OpenGLStoredQtViewer::paintGL()            217 void G4OpenGLStoredQtViewer::paintGL()
334 {                                                 218 {
335 #if QT_VERSION < 0x060000                      << 219 #ifdef G4DEBUG_VIS_OGL
336   updateToolbarAndMouseContextMenu();          << 220   printf("G4OpenGLStoredQtViewer::paintGL ??\n");
337 #else                                          << 
338   //G.Barrand: don't do any change in the GUI  << 
339 #endif                                            221 #endif
340                                                << 222   if (!readyToPaint) {
341 #if QT_VERSION < 0x060000                      << 223     readyToPaint= true;
342   if (fPaintEventLock) {                       << 
343 //    return ;                                 << 
344   }                                            << 
345   fPaintEventLock = true;                      << 
346   if ((getWinWidth() == 0) && (getWinHeight()  << 
347     return;                                       224     return;
348   }                                               225   }
349                                                << 
350   if (!fQGLWidgetInitialiseCompleted) {        << 
351     fPaintEventLock = false;                   << 
352     return;                                    << 
353   }                                            << 
354                                                << 
355   // DO NOT RESIZE IF SIZE HAS NOT CHANGE :       226   // DO NOT RESIZE IF SIZE HAS NOT CHANGE :
356   //    WHEN CLICK ON THE FRAME FOR EXAMPLE       227   //    WHEN CLICK ON THE FRAME FOR EXAMPLE
357   //    EXECEPT WHEN MOUSE MOVE EVENT             228   //    EXECEPT WHEN MOUSE MOVE EVENT
358   if ( !fHasToRepaint) {                       << 229   if ( !hasToRepaint) {
359     // L. Garnier : Trap to get the size with  << 230     if (((fWinSize_x == (unsigned int)width())) &&(fWinSize_y == (unsigned int) height())) {
360     // Tested on Qt4.5 on mac, 4.4 on windows, << 
361     int sw = 0;                                << 
362     int sh = 0;                                << 
363     if (!isMaximized() && !isFullScreen()) {   << 
364       sw = normalGeometry().width();           << 
365       sh = normalGeometry().height();          << 
366     } else {                                   << 
367       sw = frameGeometry().width();            << 
368       sh = frameGeometry().height();           << 
369     }                                          << 
370     if ((getWinWidth() == (unsigned int)sw) && << 
371       return;                                     231       return;
372     }                                             232     }
373   }                                               233   }
374 #else                                          << 234 #ifdef G4DEBUG_VIS_OGL
375   if ((getWinWidth() == 0) && (getWinHeight()  << 235   printf("G4OpenGLStoredQtViewer::paintGL VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV ready %d\n",readyToPaint);
376 #endif                                            236 #endif
377                                                   237 
378 #if QT_VERSION < 0x060000                      << 
379 #else                                          << 
380   InitializeGLView ();                         << 
381 #endif                                         << 
382                                                << 
383   // Ensure that we really draw the BACK buffe << 
384   glDrawBuffer (GL_BACK);                      << 
385                                                << 
386   SetView();                                      238   SetView();
387                                                << 239           
388   ClearView (); //ok, put the background corre    240   ClearView (); //ok, put the background correct
389   ComputeView();                                  241   ComputeView();
390                                                << 242      
391 #if QT_VERSION < 0x060000                      << 243   hasToRepaint =false;
392   fHasToRepaint = false;                       << 244      
393                                                << 245 #ifdef G4DEBUG_VIS_OGL
394   fPaintEventLock = false;                     << 246   printf("G4OpenGLStoredQtViewer::paintGL ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ready %d\n",readyToPaint);
395 #endif                                         << 
396 }                                              << 
397                                                << 
398 #if QT_VERSION < 0x060000                      << 
399 void G4OpenGLStoredQtViewer::paintEvent(QPaint << 
400   if (! fQGLWidgetInitialiseCompleted) {       << 
401     return;                                    << 
402   }                                            << 
403   // Force a repaint next time if the FRAMEBUF << 
404   fHasToRepaint = isFramebufferReady();        << 
405   if ( fHasToRepaint) {                        << 
406     // Will really update the widget by callin << 
407     // The widget's rendering context will bec << 
408     // will be called if it hasn't already bee << 
409     // Copies the back buffer of a double-buff << 
410 #if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))   << 
411     updateGL();                                << 
412 #else                                          << 
413     // Not sure this is correct....            << 
414     paintGL();                                 << 
415 #endif                                            247 #endif
416   }                                            << 
417 }                                                 248 }
418 #endif                                         << 
419                                                   249 
420 void G4OpenGLStoredQtViewer::mousePressEvent(Q    250 void G4OpenGLStoredQtViewer::mousePressEvent(QMouseEvent *event)
421 {                                                 251 {
422   G4MousePressEvent(event);                       252   G4MousePressEvent(event);
423 }                                                 253 }
424                                                   254 
425 void G4OpenGLStoredQtViewer::keyPressEvent (QK    255 void G4OpenGLStoredQtViewer::keyPressEvent (QKeyEvent * event) 
426 {                                                 256 {
427   G4keyPressEvent(event);                         257   G4keyPressEvent(event);
428 }                                                 258 }
429                                                   259 
430 void G4OpenGLStoredQtViewer::keyReleaseEvent ( << 260 void G4OpenGLStoredQtViewer::wheelEvent (QWheelEvent * event) 
431 {                                              << 
432   G4keyReleaseEvent(event);                    << 
433 }                                              << 
434                                                << 
435 void G4OpenGLStoredQtViewer::wheelEvent (QWhee << 
436 {                                                 261 {
437   G4wheelEvent(event);                            262   G4wheelEvent(event);
438 }                                                 263 }
439                                                   264 
440 #if QT_VERSION < 0x060000                      << 
441 void G4OpenGLStoredQtViewer::showEvent (QShowE << 
442 {                                              << 
443   if (fQGLWidgetInitialiseCompleted) {         << 
444     fHasToRepaint = true;                      << 
445   }                                            << 
446 }                                              << 
447 #endif                                         << 
448                                                << 
449 /**                                               265 /**
450  * This function was build in order to make a     266  * This function was build in order to make a zoom on double clic event.
451  * It was think to build a rubberband on the z    267  * It was think to build a rubberband on the zoom area, but never work fine
452  */                                               268  */
453 void G4OpenGLStoredQtViewer::mouseDoubleClickE << 269 void G4OpenGLStoredQtViewer::mouseDoubleClickEvent(QMouseEvent *event)
454 {                                                 270 {
455   G4MouseDoubleClickEvent();                      271   G4MouseDoubleClickEvent();
456 }                                                 272 }
457                                                   273 
458 void G4OpenGLStoredQtViewer::mouseReleaseEvent    274 void G4OpenGLStoredQtViewer::mouseReleaseEvent(QMouseEvent *event)
459 {                                                 275 {
460   G4MouseReleaseEvent(event);                  << 276   G4MouseReleaseEvent();
461 }                                                 277 }
462                                                   278 
463 void G4OpenGLStoredQtViewer::mouseMoveEvent(QM    279 void G4OpenGLStoredQtViewer::mouseMoveEvent(QMouseEvent *event)
464 {                                                 280 {
465   G4MouseMoveEvent(event);                        281   G4MouseMoveEvent(event);
466 }                                                 282 }
467                                                   283 
468                                                   284 
469 void G4OpenGLStoredQtViewer::contextMenuEvent(    285 void G4OpenGLStoredQtViewer::contextMenuEvent(QContextMenuEvent *e)
470 {                                                 286 {
471   G4manageContextMenuEvent(e);                    287   G4manageContextMenuEvent(e);
472 }                                                 288 }
473                                                   289 
474 void G4OpenGLStoredQtViewer::updateQWidget() {    290 void G4OpenGLStoredQtViewer::updateQWidget() {
475 #if QT_VERSION < 0x060000                      << 291   hasToRepaint= true;
476   if (fUpdateGLLock) {                         << 292   updateGL();
477     return;                                    << 293   hasToRepaint= false;
478   }                                            << 
479                                                << 
480   if (! isCurrentWidget()){                    << 
481     return;                                    << 
482   }                                            << 
483                                                << 
484   fUpdateGLLock = true;                        << 
485   fHasToRepaint= true;                         << 
486   // Will really update the widget by calling  << 
487   // The widget's rendering context will becom << 
488   // will be called if it hasn't already been  << 
489   // Copies the back buffer of a double-buffer << 
490   repaint(); // will read scene tree state     << 
491   // updateGL() // From J.Allison picking bran << 
492   updateViewerPropertiesTableWidget();         << 
493   updateSceneTreeWidget();                     << 
494   fUpdateGLLock = false;                       << 
495 #else                                          << 
496   //if (!isCurrentWidget()) return; //G.Barran << 
497   //G.Barrand: don't do any change in the GUI  << 
498   update();                                    << 
499 #endif                                         << 
500 }                                                 294 }
501                                                   295 
502 void G4OpenGLStoredQtViewer::ShowView ()       << 296 void G4OpenGLStoredQtViewer::ShowView (
                                                   >> 297 ) 
                                                   >> 298 //////////////////////////////////////////////////////////////////////////////
                                                   >> 299 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//
503 {                                                 300 {
                                                   >> 301 #if QT_VERSION < 0x040000
                                                   >> 302   setActiveWindow();
                                                   >> 303 #else
504   activateWindow();                               304   activateWindow();
505 #if 0x060000 <= QT_VERSION                     << 
506   ((QApplication*)G4Qt::getInstance ())->proce << 
507 #endif                                            305 #endif
                                                   >> 306   updateQWidget();
508 }                                                 307 }
509                                                   308 
510                                                << 309 #endif
511 void G4OpenGLStoredQtViewer::DisplayTimePOColo << 
512 G4Colour& c,                                   << 
513 size_t poIndex) {                              << 
514   c = getColorForPoIndex((int)poIndex);        << 
515 }                                              << 
516                                                   310