Changeset 740 for trunk/geant4/visualization
- Timestamp:
- Mar 5, 2008, 5:23:40 PM (16 years ago)
- Location:
- trunk/geant4/visualization/OpenGL
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/geant4/visualization/OpenGL/include/G4OpenGLQtMovieDialog.hh
r739 r740 62 62 ~G4OpenGLQtMovieDialog(); 63 63 void setStatus(QString); 64 void setEncodeButtonEnabled(bool); 64 65 65 66 private : … … 72 73 QLabel *fSaveFileStatus; 73 74 QLabel *fGlobalStatus; 74 QPushButton *fButtonE mcode;75 QPushButton *fButtonEncode; 75 76 76 77 void checkEncoderParameters(QString); … … 78 79 void checkSaveFileNameParameters(QString); 79 80 81 public slots : 82 void checkAllParameters(); 83 80 84 private slots : 81 85 void selectEncoderPathAction(); 82 86 void selectTempPathAction(); 83 87 void selectSaveFileNameAction(); 84 void checkAllParameters();85 88 void encode(); 86 89 }; -
trunk/geant4/visualization/OpenGL/include/G4OpenGLQtViewer.hh
r739 r740 78 78 QString setSaveFileName(QString path); 79 79 QString getSaveFileName(); 80 bool getRecordFrames(); 80 81 81 82 protected: … … 106 107 bool hasPendingEvents(); 107 108 void savePPMToTemp(); 108 bool saveVideo(QString);109 bool generateMpegEncoderParameters(); 109 110 bool fRecordFrames; 110 111 int fRecordFrameNumber; … … 155 156 QString fMovieTempFolderPath; 156 157 QString fSaveFileName; 158 QString fParameterFileName; 157 159 QAction *fRotateAction; 158 160 QAction *fMoveAction; -
trunk/geant4/visualization/OpenGL/src/G4OpenGLQtMovieDialog.cc
r739 r740 231 231 232 232 fButtonEncode = new QPushButton( tr( "&Encode" ),buttonBox ); 233 fButtonEncode->setEnabled(f alse);233 fButtonEncode->setEnabled(fParentViewer->getRecordFrames()); 234 234 fButtonEncode->setAutoDefault( TRUE ); 235 235 buttonBoxLayout->addWidget(fButtonEncode); … … 309 309 checkTempFolderParameters(fTempFolderPath->text()); 310 310 checkSaveFileNameParameters(fSaveFileName->text()); 311 312 // set state of encode button 313 // if frames had been generated and parameters are valid : enabled encode button 314 // if ((fParentViewer->getRecordFrames() == false) && (fRecordFrameNumber >1)) { 315 // } 316 311 317 } 312 318 … … 321 327 QString temp = fParentViewer->setEncoderPath(param); 322 328 setStatus(""); 323 329 fEncoderStatus->setText(temp); 324 330 if (temp != "") { 325 331 palette.setColor( QPalette::Base, Qt::red); … … 380 386 } 381 387 382 #endif 388 void G4OpenGLQtMovieDialog::setEncodeButtonEnabled(bool b) { 389 fButtonEncode->setEnabled(b); 390 } 391 #endif -
trunk/geant4/visualization/OpenGL/src/G4OpenGLQtViewer.cc
r739 r740 306 306 ,fMovieTempFolderPath("") 307 307 ,fSaveFileName("") 308 ,fParameterFileName("mpeg_encode_parameter_file.par") 308 309 ,fMovieParametersDialog(NULL) 309 310 { … … 322 323 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// 323 324 { 324 removeTempFolder();325 G4cout <<removeTempFolder().toStdString().c_str(); 325 326 #ifdef GEANT4_QT_DEBUG 326 327 printf("G4OpenGLQtViewer::~G4OpenGLQtViewer \n"); … … 1304 1305 return; 1305 1306 } 1306 QString nomFich =fMovieTempFolderPath+" /Test"+QString::number(fRecordFrameNumber)1307 QString nomFich =fMovieTempFolderPath+"Test"+QString::number(fRecordFrameNumber); 1307 1308 1308 1309 QImage image; … … 2095 2096 #endif 2096 2097 } 2097 2098 // several case here : If return is pressed, in every case -> display the movie parameters dialog 2099 // If one parameter is wrong -> put it in red (only save filenam could be wrong..) 2100 // If encoder not found-> does nothing.Only display a message in status box 2101 // If all ok-> generate parameter file 2102 // If ok -> put encoder button enabled 2103 2098 2104 if ((event->key() == Qt::Key_Return) || (event->key() == Qt::Key_Enter)){ // end of video 2099 2105 // if encoder parameter is wrong, display parameters dialog and return … … 2102 2108 } 2103 2109 fMovieParametersDialog->setStatus("Stop Recording\n"); 2110 fMovieParametersDialog->checkAllParameters(); 2104 2111 if (getEncoderPath() == "") { 2105 fMovieParametersDialog->setStatus("No valid encoder found. Frames saved in "+fTempFolder); 2106 } 2107 if (generateMpegEncoderParameters()) { 2108 ... 2109 if ( 2110 ... 2111 if (fMovieParametersDialog) { 2112 fMovieParametersDialog->setEncodeButtonEnable(true); 2113 } 2112 fMovieParametersDialog->setStatus("No valid encoder found. Frames saved in "+fMovieTempFolderPath); 2113 } else if (getSaveFileName() =="") { // if no saved file 2114 if (generateMpegEncoderParameters()) { 2115 fMovieParametersDialog->setEncodeButtonEnabled(true); 2116 fMovieParametersDialog->setStatus("Parameter file "+fParameterFileName+" generated in "+fMovieTempFolderPath); 2117 } else { // try to encode without dialog 2118 fMovieParametersDialog->setStatus("Generation of parameter file failed"); 2114 2119 } 2115 2120 } … … 2126 2131 return; 2127 2132 } else { 2128 // printf("record+premier image+temp<>.. \n");2129 2133 // remove temp folder if it was create 2130 if (!removeTempFolder()) { 2134 QString tmp = removeTempFolder() 2135 if (tmp !="") { 2136 fMovieParametersDialog->setStatus(tmp); 2131 2137 fHoldKeyEvent = false; 2132 2138 return; 2133 2139 } 2134 2135 // printf("create tmp dir.. \n"); 2136 // create temp dir if not 2137 QString time = QDir::fromNativeSeparators ("/"+QDateTime::currentDateTime ().toString("dd-MM-yyyy_hh-mm-ss")); 2138 QDir dir(fTempFolderBasePath); 2139 if (dir.mkdir(fTempFolderBasePath+time)) { 2140 fTempFolder = fTempFolderBasePath+time; 2140 QString tmp = createTempFolder(); 2141 if (tmp != "") { 2142 fMovieParametersDialog->setStatus("Can't create temp folder. \n"+tmp); 2143 fHoldKeyEvent = false; 2144 return; 2141 2145 } 2142 2146 } … … 2222 2226 return "File does not exist"; 2223 2227 } 2228 path = QDir::cleanPath(path); 2224 2229 QFile *f = new QFile(path); 2225 2230 if (!f->exists()) { … … 2233 2238 } 2234 2239 2240 bool G4OpenGLQtViewer::getRecordFrames(){ 2241 return fRecordFrames; 2242 } 2243 2235 2244 /** 2236 2245 * set the temp folder path … … 2242 2251 return "Path does not exist"; 2243 2252 } 2253 path = QDir::cleanPath(path); 2244 2254 QDir *d = new QDir(path); 2245 2255 if (!d->exists(path)) { … … 2281 2291 return "Path does not exist"; 2282 2292 } 2283 QDir *d = new QDir(path); 2284 if (!d->exists(path)) { 2285 return "Path does not exist"; 2286 } 2287 2288 d->setFilter( QDir::Dirs | QDir::Readable | QDir::Writable ); 2289 QStringList subDirList = d->entryList(); 2293 path = QDir::cleanPath(path); 2294 QFileInfo *fileInfo = new QFileInfo(path); 2295 QDir dir = fileInfo->absoluteDir(); 2296 if (!dir.exists()) { 2297 return "Folder does not exist\n"; 2298 } 2299 2300 dir.setFilter( QDir::Dirs | QDir::Writable ); 2301 QStringList subDirList = dir.entryList(); 2290 2302 bool found = false; 2291 2303 … … 2312 2324 2313 2325 /** Create a Qt_temp folder in the temp folder given 2314 */ 2315 bool G4OpenGLQtViewer::createTempFolder() { 2326 * The temp folder will be like this /tmp/QtMovie_12-02-2008_12_12_58/ 2327 * @return "" if success. Error message if not. 2328 */ 2329 QString G4OpenGLQtViewer::createTempFolder() { 2316 2330 fMovieTempFolderPath = ""; 2317 2331 2318 2332 //check 2319 if (setTempFolderPath(fTempFolderPath) != "") { 2320 return false; 2321 } 2322 QString path = QString("/QtMovie_")+QDateTime::currentDateTime ().toString("dd-MM-yyyy_hh-mm-ss"); 2323 QDir *d = new QDir(fTempFolderPath); 2333 QString tmp = setTempFolderPath(fTempFolderPath); 2334 if (tmp != "") { 2335 return tmp; 2336 } 2337 QString path = QDir::fromNativeSeparators(QString("/QtMovie_")+QDateTime::currentDateTime ().toString("dd-MM-yyyy_hh-mm-ss/")); 2338 QDir *d = new QDir(QDir::cleanPath(fTempFolderPath)); 2324 2339 // check if it is already present 2325 2340 if (d->exists(path)) { 2326 return false;2341 return "Folder "+path+" already exists.\nPlease remove it first"; 2327 2342 } 2328 2343 if (d->mkdir(fTempFolderPath+path)) { 2329 2344 fMovieTempFolderPath = fTempFolderPath+path; 2330 return true; 2331 } 2332 return false; 2345 return ""; 2346 } else { 2347 return "Can't create "+fTempFolderPath+path+"\n"; 2348 } 2349 return "-"; 2333 2350 } 2334 2351 2335 2352 /** Remove the Qt_temp folder in the temp folder 2336 2353 */ 2337 boolG4OpenGLQtViewer::removeTempFolder() {2354 QString G4OpenGLQtViewer::removeTempFolder() { 2338 2355 // remove files in Qt_temp folder 2339 QDir *d = new QDir( fMovieTempFolderPath);2356 QDir *d = new QDir(QDir::cleanPath(fMovieTempFolderPath)); 2340 2357 if (!d->exists()) { 2341 return false; // already remove2358 return ""; // already remove 2342 2359 } 2343 2360 … … 2345 2362 QStringList subDirList = d->entryList(); 2346 2363 int res = true; 2347 2364 QString error = ""; 2348 2365 for (QStringList::ConstIterator it = subDirList.begin() ;(it != subDirList.end()) ; it++) { 2349 2366 const QString currentFile = *it; 2350 2367 if (!d->remove(currentFile)) { 2351 2368 res = false; 2352 G4cout << "Try to remove Movie temp directory:"<<fMovieTempFolderPath.toStdString()<<" but failed to remove:"<<fMovieTempFolderPath.toStdString()<<"/"<<currentFile.toStdString() <<"\n" << G4endl; 2369 QString file = QDir::fromNativeSeparators(fMovieTempFolderPath+currentFile); 2370 error +="Removing file failed : "+file.toStdString()+"\n"; 2353 2371 } 2354 2372 } 2355 2373 if (res) { 2356 2374 if (d->rmdir(fMovieTempFolderPath)) { 2357 return true; 2358 } 2359 } 2360 return false; 2375 return ""; 2376 } else { 2377 return "Dir "+fMovieTempFolderPath+" should be empty,\n but could not remove it"; 2378 } 2379 2380 } 2381 return "Could not remove "+fMovieTempFolderPath+" because \nof the following errors :"+error; 2361 2382 } 2362 2383 … … 2367 2388 } 2368 2389 2369 bool G4OpenGLQtViewer:: saveVideo (QString outputName) {2390 bool G4OpenGLQtViewer::generateMpegEncoderParameters () { 2370 2391 2371 2392 // save the parameter file 2372 2393 FILE* fp; 2373 fp = fopen ("/temp/parameter_file.par", "w"); 2394 #if QT_VERSION < 0x040000 2395 fp = fopen (QString(fMovieTempFolderPath+fParameterFileName).ascii, "w"); 2396 #else 2397 fp = fopen (QString(fMovieTempFolderPath+fParameterFileName).toStdString().c_str(), "w"); 2398 #endif 2374 2399 2375 2400 if (fp == NULL) { … … 2472 2497 fprintf (fp,"\n"); 2473 2498 fprintf (fp,"# directory to get all input files from (makes this file easier to read)\n"); 2474 fprintf (fp,"INPUT_DIR /temp\n"); 2499 #if QT_VERSION < 0x040000 2500 fprintf (fp,"INPUT_DIR %s\n",fMovieTempFolderPath.ascii()); 2501 #else 2502 fprintf (fp,"INPUT_DIR %s\n",fMovieTempFolderPath.toStdString().c_str()); 2503 #endif 2475 2504 fprintf (fp,"\n"); 2476 2505 fprintf (fp,"# There are a bunch of ways to specify the input files.\n"); … … 2550 2579 fclose (fp); 2551 2580 2552 QProcess::execute (fEncoderPath, QStringList("/temp/parameter_file.par")); 2581 fMovieParametersDialog->setStatus("Parameter file generated : "+fMovieTempFolderPath+fParameterFileName); 2582 return true; 2583 } 2584 2585 bool G4OpenGLQtViewer::saveVideo() 2586 { 2587 QProcess::execute (fEncoderPath, QStringList(fMovieTempFolderPath+fParameterFileName)); 2588 fMovieParametersDialog->setStatus(removeTempFolder()); 2589 2590 // reset 2591 fRecordFrameNumber = 0; 2553 2592 return true; 2554 2593 }
Note: See TracChangeset
for help on using the changeset viewer.