Ignore:
Timestamp:
Mar 6, 2008, 3:18:56 PM (16 years ago)
Author:
garnier
Message:

modif de structre et passage des recording step sur un enum

Location:
trunk/geant4/visualization/OpenGL
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/geant4/visualization/OpenGL/include/G4OpenGLQtMovieDialog.hh

    r740 r744  
    6161  /** Destroys G4OpenGLQtMovieDialog */
    6262  ~G4OpenGLQtMovieDialog();
    63   void setStatus(QString);
     63  void setRecordingStatus(QString);
     64  void setRecordingInfos(QString);
    6465  void setEncodeButtonEnabled(bool);
    6566
     
    7273  QLabel *fTempFolderStatus;
    7374  QLabel *fSaveFileStatus;
    74   QLabel *fGlobalStatus;
     75  QLabel *fRecordingStatus;
     76  QLabel *fRecordingInfos;
    7577  QPushButton *fButtonEncode;
    7678
  • trunk/geant4/visualization/OpenGL/include/G4OpenGLQtViewer.hh

    r742 r744  
    7878  QString setSaveFileName(QString path);
    7979  QString getSaveFileName();
    80   bool getRecordFrames();
     80  enum RECORDING_STEP {WAIT=0,START,PAUSE,CONTINUE,STOP,ENCODE};
     81  RECORDING_STEP getRecordingStep();
     82  bool encodeVideo();
    8183
    8284protected:
     
    108110  void savePPMToTemp();
    109111  bool generateMpegEncoderParameters();
    110   bool fRecordFrames;
    111112  int fRecordFrameNumber;
    112113
     
    122123  QString createTempFolder();
    123124  QString removeTempFolder();
    124   bool saveVideo();
     125  void startPauseVideo();
     126  void stopVideo();
     127  void setRecordingStatus(RECORDING_STEP);
     128  void setRecordingInfos(QString);
     129
    125130
    126131#if QT_VERSION < 0x040000
     
    130135#endif
    131136  enum mouseActions {STYLE1,STYLE2,STYLE3,STYLE4};
     137
    132138  mouseActions fMouseAction; // 1: rotate 2:move 3:pick 4:shortcuts
    133139  QPoint fLastPos;
     
    168174  QAction *fDrawingLineSurfaceRemoval;
    169175  G4OpenGLQtMovieDialog* fMovieParametersDialog;
     176  RECORDING_STEP fRecordingStep;
    170177
    171178private slots :
  • trunk/geant4/visualization/OpenGL/src/G4OpenGLQtMovieDialog.cc

    r742 r744  
    200200  QGroupBox *statusGroupBox = new QGroupBox(tr("Status"));
    201201  QVBoxLayout *statusVGroupBoxLayout = new QVBoxLayout(statusGroupBox);
    202   fGlobalStatus = new QLabel(statusGroupBox);
    203   setStatus("");
     202
     203  fRecordingStatus = new QLabel(statusGroupBox);
     204  setRecordingStatus("");
     205  QPalette palette( fRecordingStatus->palette() );
     206  palette.setColor( QPalette::Text, Qt::green);
     207  fRecordingStatus->setPalette(palette);
     208
     209  fRecordingInfos = new QLabel(statusGroupBox);
     210  setRecordingInfos("");
    204211
    205212#if QT_VERSION < 0x040000
    206   statusVGroupBoxLayout->add(fGlobalStatus);
     213  statusVGroupBoxLayout->add(fRecordingStatus);
     214  statusVGroupBoxLayout->add(fRecordingInfos);
    207215
    208216  globalVLayout->add(infoLabel);
    209217  globalVLayout->add(statusGroupBox);
    210218#else
    211   statusVGroupBoxLayout->addWidget(fGlobalStatus);
     219  statusVGroupBoxLayout->addWidget(fRecordingStatus);
     220  statusVGroupBoxLayout->addWidget(fRecordingInfos);
    212221
    213222  statusGroupBox->setLayout(statusVGroupBoxLayout);
     
    231240
    232241  fButtonEncode = new QPushButton( tr( "&Encode" ),buttonBox );
    233   fButtonEncode->setEnabled(fParentViewer->getRecordFrames());
     242  if (fParentViewer->getRecordingStep() == G4OpenGLQtViewer::ENCODE) {
     243    fButtonEncode->setEnabled(true);
     244  } else {
     245    fButtonEncode->setEnabled(false);
     246  }
    234247  fButtonEncode->setAutoDefault( TRUE );
    235248  buttonBoxLayout->addWidget(fButtonEncode);
     
    256269
    257270  if (fParentViewer->getEncoderPath() == "") {
    258     setStatus("mpeg_encode is needed to encode in video format.\nIt is available here: \nhttp://bmrc.berkeley.edu/frame/research/mpeg/");
     271    setRecordingInfos("mpeg_encode is needed to encode in video format.\nIt is available here: \nhttp://bmrc.berkeley.edu/frame/research/mpeg/");
    259272  }
    260273
     
    301314
    302315void G4OpenGLQtMovieDialog::encode() {
     316  fParentViewer->encodeVideo();
    303317}
    304318
     
    326340
    327341  QString temp = fParentViewer->setEncoderPath(param);
    328   setStatus("");
     342  setRecordingInfos("");
    329343  fEncoderStatus->setText(temp);
    330344  if (temp != "") {
    331345    palette.setColor( QPalette::Base, Qt::red);
    332     setStatus("If no valid encode defined, screen \ncapture files will be saved in the\ntemp folder in ppm format.");
     346    setRecordingInfos("If no valid encode defined, screen \ncapture files will be saved in the\ntemp folder in ppm format.");
    333347  } else {
    334348    palette.setColor( QPalette::Base, Qt::white);
    335349    fEncoderPath->setText(fParentViewer->getEncoderPath());
    336350    if (fParentViewer->getEncoderPath() == "") {
    337       setStatus("mpeg_encode is needed to encode in video format.\nIt is available here: \nhttp://bmrc.berkeley.edu/frame/research/mpeg/");
     351      setRecordingInfos("mpeg_encode is needed to encode in video format.\nIt is available here: \nhttp://bmrc.berkeley.edu/frame/research/mpeg/");
    338352    }
    339353  }
     
    382396
    383397
    384 void G4OpenGLQtMovieDialog::setStatus(QString txt) {
    385   fGlobalStatus->setText(txt);
     398void G4OpenGLQtMovieDialog::setRecordingStatus(QString txt) {
     399  fRecordingStatus->setText(txt);
     400}
     401
     402void G4OpenGLQtMovieDialog::setRecordingInfos(QString txt) {
     403  fRecordingInfos->setText(txt);
    386404}
    387405
  • trunk/geant4/visualization/OpenGL/src/G4OpenGLQtViewer.cc

    r743 r744  
    289289  ,G4OpenGLViewer (scene)
    290290  ,fWindow(0)
    291   ,fRecordFrames(false)
    292291  ,fRecordFrameNumber(0)
    293292  ,fContextMenu(0)
     
    308307  ,fParameterFileName("mpeg_encode_parameter_file.par")
    309308  ,fMovieParametersDialog(NULL)
     309  ,fRecordingStep(WAIT)
     310
    310311{
    311312
     
    13051306    return;
    13061307  }
    1307   QString nomFich =fMovieTempFolderPath+"Test"+QString::number(fRecordFrameNumber);
     1308  QString fileName ="Test"+QString::number(fRecordFrameNumber)+".ppm";
     1309  QString filePath =fMovieTempFolderPath+fileName;
    13081310
    13091311  QImage image;
     
    13111313  bool res = false;
    13121314 
    1313   nomFich += "."+QString("ppm");
    1314 #if QT_VERSION < 0x040000
    1315   res = image.save(nomFich,"ppm");
    1316 #else
    1317   res = image.save(nomFich,0);
    1318 #endif
    1319  if (res == false) {
    1320     fRecordFrames = false;
    1321     if (fMovieParametersDialog) {
    1322       fMovieParametersDialog->setStatus("Can't save tmp file "+nomFich);
    1323     } else {
    1324 #if QT_VERSION < 0x040000
    1325       G4cout << "Can't save tmp file "<<nomFich.ascii()<<"\n" << G4endl;
    1326 #else
    1327       G4cout << "Can't save tmp file "<<nomFich.toStdString().c_str()<<"\n" << G4endl;
    1328 #endif
    1329     }
     1315#if QT_VERSION < 0x040000
     1316  res = image.save(filePath,"ppm");
     1317#else
     1318  res = image.save(filePath,0);
     1319#endif
     1320  if (res == false) {
     1321    setRecordingStatus(WAIT);
     1322    setRecordingInfos("Can't save tmp file "+filePath);
    13301323    return;
    13311324  }
    13321325 
    1333   if (fMovieParametersDialog) {
    1334     fMovieParametersDialog->setStatus("File "+nomFich+" saved");
    1335   } else {
    1336 #if QT_VERSION < 0x040000
    1337     G4cout << "File "<<nomFich.ascii()<<" saved\n" << G4endl;
    1338 #else
    1339     G4cout << "File "<<nomFich.toStdString().c_str()<<" saved\n" << G4endl;
    1340 #endif
    1341   }
     1326  setRecordingInfos("File "+fileName+" saved");
    13421327  fRecordFrameNumber++;
    13431328#ifdef GEANT4_QT_DEBUG
     
    21032088 
    21042089  if ((event->key() == Qt::Key_Return) || (event->key() == Qt::Key_Enter)){ // end of video
    2105    // if encoder parameter is wrong, display parameters dialog and return
    2106     if (!fMovieParametersDialog) {
    2107       showMovieParametersDialog();
    2108     }
    2109     fMovieParametersDialog->setStatus("Stop Recording\n");
    2110 
     2090   stopVideo();
     2091  }
     2092  if (event->key() == Qt::Key_Space){ // start/pause of video
     2093   startPauseVideo();
     2094  }
     2095
     2096  // with no modifiers
     2097#if QT_VERSION < 0x040000
     2098  if (event->state() == Qt::NoButton) {
     2099#else
     2100  if (event->modifiers() == Qt::NoModifier) {
     2101#endif
     2102    if (event->key() == Qt::Key_Down) { // go down
     2103      moveScene(0,1,0,false);
     2104    }
     2105    else if (event->key() == Qt::Key_Up) {  // go up
     2106      moveScene(0,-1,0,false);
     2107    }
     2108    if (event->key() == Qt::Key_Left) { // go left
     2109      moveScene(-1,0,0,false);
     2110    }
     2111    else if (event->key() == Qt::Key_Right) { // go right
     2112      moveScene(1,0,0,false);
     2113    }
     2114  }
     2115  fHoldKeyEvent = false;
     2116}
     2117 
     2118
     2119/** Stop the video. Check all parameters and enable encoder button if all is ok.
     2120*/
     2121void G4OpenGLQtViewer::stopVideo() {
     2122
     2123 // if encoder parameter is wrong, display parameters dialog and return
     2124  if (!fMovieParametersDialog) {
     2125    showMovieParametersDialog();
     2126  }
     2127  setRecordingStatus(STOP);
     2128
     2129  if (fRecordFrameNumber >0) {
    21112130    // check parameters if they were modified (Re APPLY them...)
    21122131    fMovieParametersDialog->checkAllParameters();
    2113     if (getEncoderPath() != "") {
    2114       if (getSaveFileName() != "") {
    2115         if (generateMpegEncoderParameters()) {
    2116           fMovieParametersDialog->setEncodeButtonEnabled(true);
    2117           fMovieParametersDialog->setStatus("Parameter file "+fParameterFileName+" generated in "+fMovieTempFolderPath);
    2118         } else {  // try to encode without dialog
    2119           fMovieParametersDialog->setStatus("Generation of parameter file failed");
     2132    if ((getEncoderPath() != "") && (getSaveFileName() != "")) {
     2133      if (generateMpegEncoderParameters()) {
     2134        fMovieParametersDialog->setEncodeButtonEnabled(true);
     2135        setRecordingInfos("Parameter file "+fParameterFileName+" generated in "+fMovieTempFolderPath);
     2136      } else {  // try to encode without dialog
     2137        setRecordingInfos("Generation of parameter file failed");
     2138      }
     2139    }
     2140  } else {
     2141    setRecordingStatus(WAIT);
     2142    setRecordingInfos("No frame to encode.");
     2143  }
     2144}
     2145
     2146
     2147/** Start/Pause the video..
     2148*/
     2149void G4OpenGLQtViewer::startPauseVideo() {
     2150   
     2151  // first time, if temp parameter is wrong, display parameters dialog and return
     2152  if ( fRecordingStep == WAIT) {
     2153    if ( fRecordFrameNumber == 0) {
     2154      if (getTempFolderPath() == "") {
     2155        showMovieParametersDialog();
     2156        setRecordingInfos("You should specified the temp folder in order to make movie");
     2157        return;
     2158      } else  {
     2159        // remove temp folder if it was create
     2160        QString tmp = removeTempFolder();
     2161        if (tmp !="") {
     2162          setRecordingInfos(tmp);
     2163          return;
     2164        }
     2165        tmp = createTempFolder();
     2166        if (tmp != "") {
     2167          setRecordingInfos("Can't create temp folder. \n"+tmp);
     2168          return;
    21202169        }
    21212170      }
    21222171    }
    2123     fRecordFrames = false;
    2124   }
    2125   if (event->key() == Qt::Key_Space){ // start/pause of video
    2126    // first time, if temp parameter is wrong, display parameters dialog and return
    2127     if (fRecordFrames == false) {
    2128       if ( fRecordFrameNumber == 0) {
    2129         if (getTempFolderPath() == "") {
    2130           showMovieParametersDialog();
    2131           fMovieParametersDialog->setStatus("You should specified the temp folder in order to make movie");
    2132           fHoldKeyEvent = false;
    2133           return;
    2134         } else  {
    2135           // remove temp folder if it was create
    2136           QString tmp = removeTempFolder();
    2137           if (tmp !="") {
    2138             fMovieParametersDialog->setStatus(tmp);
    2139             fHoldKeyEvent = false;
    2140             return;
    2141           }
    2142           tmp = createTempFolder();
    2143           if (tmp != "") {
    2144             fMovieParametersDialog->setStatus("Can't create temp folder. \n"+tmp);
    2145             fHoldKeyEvent = false;
    2146             return;
    2147           }
    2148         }
    2149       }
    2150     }
    2151     fRecordFrames = !fRecordFrames;
    2152     if (fRecordFrames) {
    2153 
    2154       if (fMovieParametersDialog) {
    2155         fMovieParametersDialog->setStatus("Start Recording\n");
    2156       } else {
    2157         G4cout << " Start Recording \n" << G4endl;
    2158       }
    2159     } else {
    2160       if (fMovieParametersDialog) {
    2161         fMovieParametersDialog->setStatus("Pause Recording\n");
    2162       } else {
    2163         G4cout << "Pause Recording \n" << G4endl;
    2164       }
    2165     }   
    2166   }
    2167 
    2168   // with no modifiers
    2169 #if QT_VERSION < 0x040000
    2170   if (event->state() == Qt::NoButton) {
    2171 #else
    2172   if (event->modifiers() == Qt::NoModifier) {
    2173 #endif
    2174     if (event->key() == Qt::Key_Down) { // go down
    2175       moveScene(0,1,0,false);
    2176     }
    2177     else if (event->key() == Qt::Key_Up) {  // go up
    2178       moveScene(0,-1,0,false);
    2179     }
    2180     if (event->key() == Qt::Key_Left) { // go left
    2181       moveScene(-1,0,0,false);
    2182     }
    2183     else if (event->key() == Qt::Key_Right) { // go right
    2184       moveScene(1,0,0,false);
    2185     }
    2186   }
    2187   fHoldKeyEvent = false;
    2188 }
    2189  
     2172  }
     2173  if (fRecordingStep == WAIT) {
     2174    fRecordingStep = START;
     2175  } else if (fRecordingStep == START) {
     2176    fRecordingStep = PAUSE;
     2177  } else if (fRecordingStep == PAUSE) {
     2178    fRecordingStep = CONTINUE;
     2179  } else if (fRecordingStep == CONTINUE) {
     2180    fRecordingStep = PAUSE;
     2181  }
     2182}
     2183
     2184
     2185void G4OpenGLQtViewer::setRecordingStatus(RECORDING_STEP step) {
     2186 
     2187  QString txt = "";
     2188  if (step == WAIT) {
     2189    txt  = "Waiting to start...";
     2190    fRecordFrameNumber = 0; // reset the frame number
     2191  } else if (step == START) {
     2192    txt  = "Start Recording...";
     2193  } else if (step == PAUSE) {
     2194    txt  = "Pause Recording...";
     2195  } else if (step == CONTINUE) {
     2196    txt  = "Continue Recording...";
     2197  } else if (step == STOP) {
     2198    txt  = "Stop Recording...";
     2199  } else if (step == ENCODE) {
     2200    txt  = "Encoding...";
     2201  } else {
     2202  }
     2203
     2204  if (fMovieParametersDialog) {
     2205    setRecordingInfos(txt);
     2206  } else {
     2207#if QT_VERSION < 0x040000
     2208    G4cout << txt.ascii() << G4endl;
     2209#else
     2210    G4cout << txt.toStdString().c_str() << G4endl;
     2211#endif
     2212  }
     2213  setRecordingInfos("");
     2214}
     2215
     2216void G4OpenGLQtViewer::setRecordingInfos(QString txt) {
     2217  if (fMovieParametersDialog) {
     2218    setRecordingInfos(txt);
     2219  } else {
     2220#if QT_VERSION < 0x040000
     2221    G4cout << txt.ascii() << G4endl;
     2222#else
     2223    G4cout << txt.toStdString().c_str() << G4endl;
     2224#endif
     2225  }
     2226}
    21902227
    21912228/** Init the movie parameters. Temp dir and encoder path
     
    22402277}
    22412278
    2242 bool G4OpenGLQtViewer::getRecordFrames(){
    2243   return fRecordFrames;
     2279G4OpenGLQtViewer::RECORDING_STEP G4OpenGLQtViewer::getRecordingStep(){
     2280  return fRecordingStep;
    22442281}
    22452282
     
    23372374    return tmp;
    23382375  }
    2339   QString path = QDir::separator()+"QtMovie_"+QDateTime::currentDateTime ().toString("dd-MM-yyyy_hh-mm-ss")+QDir::separator();
     2376  QString path = QString(QDir::separator())+"QtMovie_"+QDateTime::currentDateTime ().toString("dd-MM-yyyy_hh-mm-ss")+QString(QDir::separator());
    23402377  QDir *d = new QDir(QDir::cleanPath(fTempFolderPath));
    23412378  // check if it is already present
     
    25842621  fclose (fp);
    25852622
    2586   fMovieParametersDialog->setStatus("Parameter file generated : "+fMovieTempFolderPath+fParameterFileName);
    25872623  return true;
    25882624}
    25892625
    2590 bool G4OpenGLQtViewer::saveVideo()
     2626bool G4OpenGLQtViewer::encodeVideo()
    25912627{
     2628  setRecordingStatus(ENCODE);
    25922629  QProcess::execute (fEncoderPath, QStringList(fMovieTempFolderPath+fParameterFileName));
    2593   fMovieParametersDialog->setStatus(removeTempFolder());
    2594 
    2595   // reset
    2596   fRecordFrameNumber = 0;
     2630
     2631  setRecordingStatus(WAIT);
     2632  setRecordingInfos(removeTempFolder());
     2633
    25972634  return true;
    25982635}
  • trunk/geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc

    r739 r744  
    199199  }
    200200
    201   if (fRecordFrames) {
     201  if ((getRecordingStep() == START) || (getRecordingStep() == PAUSE) || (getRecordingStep() == CONTINUE)) {
    202202    savePPMToTemp();
    203203    fRecordFrameNumber++;
Note: See TracChangeset for help on using the changeset viewer.