Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // 28 // L. Garnier 29 30 #include "G4Qt.hh" 31 32 #include "G4UImanager.hh" 33 #include "G4ios.hh" 34 35 #include <qapplication.h> 36 #include <qwidget.h> 37 38 #include <cstdlib> 39 #include <cstring> 40 41 #ifdef G4VIS_USE_VTK_QT 42 # include "QVTKOpenGLNativeWidget.h" 43 # include <qsurfaceformat.h> 44 #endif 45 46 G4Qt* G4Qt::instance = nullptr; 47 48 static G4bool QtInited = false; 49 50 /********************************************* 51 G4Qt* G4Qt::getInstance() 52 /********************************************* 53 /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 54 { 55 return G4Qt::getInstance(0, nullptr, (char*) 56 } 57 /********************************************* 58 G4Qt* G4Qt::getInstance(int a_argn, char** a_a 59 /********************************************* 60 /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 61 { 62 if (instance == nullptr) { 63 instance = new G4Qt(a_argn, a_args, a_clas 64 } 65 return instance; 66 } 67 /********************************************* 68 G4Qt::G4Qt(int a_argn, char** a_args, char* /* 69 ) 70 /********************************************* 71 /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 72 { 73 argn = 0; 74 args = nullptr; 75 externalApp = false; 76 77 // Check if Qt already init in another exter 78 if (qApp) { 79 externalApp = true; 80 QtInited = true; 81 SetMainInteractor(qApp); 82 SetArguments(a_argn, a_args); 83 } 84 else { 85 if (! QtInited) { // Qt should be Inited 86 // Then two cases : 87 // - It is the first time we create G4UI 88 // -> Inited and register 89 // - It is the first time we create G4VI 90 // -> Inited and NOT register 91 92 if (a_argn != 0) { 93 argn = a_argn; 94 args = a_args; 95 } 96 else { // argc = 0 97 98 // FIXME : That's not the good argumen 99 // Interactor. Ex: How to get them fro 100 argn = 1; 101 args = (char**)malloc(1 * sizeof(char* 102 args[0] = (char*)malloc(10 * sizeof(ch 103 strncpy(args[0], "my_app \0", 9); 104 } 105 106 int* p_argn = (int*)malloc(sizeof(int)); 107 *p_argn = argn; 108 #ifdef WIN32 109 qApp->setAttribute(Qt::AA_UseDesktopOpen 110 #endif 111 112 #ifdef G4VIS_USE_VTK_QT 113 QSurfaceFormat::setDefaultFormat(QVTKOpe 114 #endif 115 new QApplication(*p_argn, args); 116 if (! qApp) { 117 G4UImanager* UImanager = G4UImanager:: 118 G4int verbose = UImanager->GetVerboseL 119 if (verbose >= 2) { 120 G4cout << "G4Qt : Unable to init Qt. 121 } 122 } 123 else { 124 QtInited = true; 125 if (a_argn != 0) { 126 SetMainInteractor(qApp); 127 } 128 SetArguments(a_argn, a_args); 129 } 130 } 131 } 132 // AddDispatcher ((G4DispatchFunction)X 133 134 /* 135 * On some non-English locale, comma is used 136 * bringing to weird behavior of strtod (str 137 * This is "by design" from Qt, see https:// 138 * 139 * $ LC_NUMERIC=fr_FR.UTF-8 ./qtstrtod 140 * strtod(0.1) = 0 141 * $ LC_NUMERIC=C ./qtstrtod 142 * strtod(0.1) = 0.1 143 * 144 * Jerome Suhard, jerome@suhard.fr 145 */ 146 147 // explicitly set the LC_NUMBERIC locale to 148 setlocale(LC_NUMERIC, "C"); 149 } 150 /********************************************* 151 G4Qt::~G4Qt() 152 /********************************************* 153 /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 154 { 155 if (this == instance) { 156 instance = nullptr; 157 } 158 } 159 /********************************************* 160 G4bool G4Qt::Inited() 161 /********************************************* 162 /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 163 { 164 return QtInited; 165 } 166 /********************************************* 167 void* G4Qt::GetEvent() 168 /********************************************* 169 /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 170 { 171 return nullptr; 172 } 173 /********************************************* 174 void G4Qt::FlushAndWaitExecution() 175 /********************************************* 176 /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 177 { 178 if (! qApp) return; 179 qApp->processEvents(); 180 } 181 182 /********************************************* 183 bool G4Qt::IsExternalApp() 184 /********************************************* 185 /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 186 { 187 return externalApp; 188 } 189