31 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER 
   37 #include <qpushbutton.h> 
   40 #include <qgroupbox.h> 
   42 #include <qlineedit.h> 
   43 #include <qfiledialog.h> 
   64 G4OpenGLQtMovieDialog::G4OpenGLQtMovieDialog(
 
   65  G4OpenGLQtViewer* parentViewer,
 
   69     fParentViewer(parentViewer)
 
   72   setWindowTitle( tr( 
" Save as movie" ));
 
   76   QVBoxLayout* globalVLayout = 
new QVBoxLayout(
this);
 
   77   globalVLayout->setMargin(10);
 
   78   globalVLayout->setSpacing(10);
 
   81   QGroupBox *encoderGroupBox = 
new QGroupBox(tr(
"Encoder path"),
this);      
 
   82   QVBoxLayout *encoderVGroupBoxLayout = 
new QVBoxLayout(encoderGroupBox);
 
   85   QWidget *encoderHBox = 
new QWidget(encoderGroupBox);
 
   86   QHBoxLayout *encoderHBoxLayout = 
new QHBoxLayout(encoderHBox);
 
   87   fEncoderPath = 
new QLineEdit(
"",encoderHBox);
 
   89   QPushButton *encoderButton = 
new QPushButton(tr(
"..."),encoderHBox);
 
   90   encoderButton->setMaximumWidth (30);
 
   92   fEncoderStatus = 
new QLabel(encoderGroupBox);
 
   94   fEncoderStatus->setWordWrap(
true);
 
   95   encoderVGroupBoxLayout->setMargin(15);
 
   97   fEncoderStatus->setText(
"");
 
   99   encoderHBoxLayout->addWidget(fEncoderPath);
 
  100   encoderHBoxLayout->addWidget(encoderButton);
 
  101   encoderVGroupBoxLayout->addWidget(encoderHBox);
 
  102   encoderVGroupBoxLayout->addWidget(fEncoderStatus);
 
  104   encoderGroupBox->setLayout(encoderVGroupBoxLayout);
 
  105   globalVLayout->addWidget(encoderGroupBox);
 
  107   connect( encoderButton, SIGNAL( clicked( ) ), 
this, SLOT(selectEncoderPathAction() ) );
 
  111   QGroupBox *tempFolderGroupBox = 
new QGroupBox(tr(
"Temporary folder path"),
this);
 
  112   QVBoxLayout *tempFolderVGroupBoxLayout = 
new QVBoxLayout(tempFolderGroupBox);
 
  115   QWidget *tempFolderHBox = 
new QWidget(tempFolderGroupBox);
 
  116   QHBoxLayout *tempFolderHBoxLayout = 
new QHBoxLayout(tempFolderHBox);
 
  118   fTempFolderPath = 
new QLineEdit(
"",tempFolderHBox);
 
  120   QPushButton *tempButton = 
new QPushButton(tr(
"..."),tempFolderHBox);
 
  121   tempButton->setMaximumWidth (30);
 
  123   fTempFolderStatus = 
new QLabel(tempFolderGroupBox);
 
  124   fTempFolderStatus->setWordWrap(
true);
 
  125   tempFolderVGroupBoxLayout->setMargin(15);
 
  126   fTempFolderStatus->setText(
"");
 
  128   tempFolderHBoxLayout->addWidget(fTempFolderPath);
 
  129   tempFolderHBoxLayout->addWidget(tempButton);
 
  130   tempFolderVGroupBoxLayout->addWidget(tempFolderHBox);
 
  131   tempFolderVGroupBoxLayout->addWidget(fTempFolderStatus);
 
  133   tempFolderGroupBox->setLayout(tempFolderVGroupBoxLayout);
 
  134   globalVLayout->addWidget(tempFolderGroupBox);
 
  136   connect( tempButton, SIGNAL( clicked( ) ), 
this, SLOT(selectTempPathAction() ) );
 
  142   QGroupBox *saveFileGroupBox = 
new QGroupBox(tr(
"Save as"),
this);
 
  143   QVBoxLayout *saveFileVGroupBoxLayout = 
new QVBoxLayout(saveFileGroupBox);
 
  146   QWidget *saveFileHBox = 
new QWidget(saveFileGroupBox);
 
  147   QHBoxLayout *saveFileHBoxLayout = 
new QHBoxLayout(saveFileHBox);
 
  149   fSaveFileName = 
new QLineEdit(
"G4Movie.mpeg",saveFileHBox);
 
  151   QPushButton *saveButton = 
new QPushButton(tr(
"..."),saveFileHBox);
 
  152   saveButton->setMaximumWidth (30);
 
  154   fSaveFileStatus = 
new QLabel(saveFileGroupBox);
 
  155   fSaveFileStatus->setWordWrap(
true);
 
  156   saveFileVGroupBoxLayout->setMargin(15);
 
  157   fSaveFileStatus->setText(
"");
 
  159   saveFileHBoxLayout->addWidget(fSaveFileName);
 
  160   saveFileHBoxLayout->addWidget(saveButton);
 
  161   saveFileVGroupBoxLayout->addWidget(saveFileHBox);
 
  162   saveFileVGroupBoxLayout->addWidget(fSaveFileStatus);
 
  164   saveFileGroupBox->setLayout(saveFileVGroupBoxLayout);
 
  165   globalVLayout->addWidget(saveFileGroupBox);
 
  167   connect( saveButton, SIGNAL( clicked( ) ), 
this, SLOT(selectSaveFileNameAction() ) );
 
  173   QLabel *infoLabel = 
new QLabel(
"  Press SPACE to Start/Pause video recording \n  Press RETURN to Stop video recording",
this);
 
  176   QGroupBox *statusGroupBox = 
new QGroupBox(tr(
"Status"),
this);
 
  177   QVBoxLayout *statusVGroupBoxLayout = 
new QVBoxLayout(statusGroupBox);
 
  179   fRecordingStatus = 
new QLabel(statusGroupBox);
 
  180   statusVGroupBoxLayout->setMargin(15);
 
  181   fRecordingStatus->setWordWrap(
true);
 
  182   QPalette mypalette( fRecordingStatus->palette() );
 
  183   mypalette.setColor( QPalette::Text, Qt::green);
 
  184   fRecordingStatus->setPalette(mypalette);
 
  186   fRecordingInfos = 
new QLabel(statusGroupBox);
 
  187   fRecordingInfos->setWordWrap(
true);
 
  188   setRecordingInfos(
"");
 
  190   statusVGroupBoxLayout->addWidget(fRecordingStatus);
 
  191   statusVGroupBoxLayout->addWidget(fRecordingInfos);
 
  193   statusGroupBox->setLayout(statusVGroupBoxLayout);
 
  194   globalVLayout->addWidget(infoLabel);
 
  195   globalVLayout->addWidget(statusGroupBox);
 
  198   QWidget *buttonBox = 
new QWidget(
this);
 
  200   QHBoxLayout *buttonBoxLayout = 
new QHBoxLayout(buttonBox);
 
  202   QPushButton *buttonReset = 
new QPushButton( tr( 
"&Reset" ),buttonBox );
 
  203   buttonReset->setAutoDefault( 
TRUE );
 
  204   buttonBoxLayout->addWidget(buttonReset);
 
  206   fButtonStartPause = 
new QPushButton( tr( 
"  &Start " ),buttonBox );
 
  207   fButtonStartPause->setEnabled(
true);
 
  208   fButtonStartPause->setAutoDefault( 
TRUE );
 
  209   buttonBoxLayout->addWidget(fButtonStartPause);
 
  211   fButtonStopFinishClose = 
new QPushButton( tr( 
"&Stop" ),buttonBox );
 
  212   fButtonStopFinishClose->setEnabled(
false);
 
  213   fButtonStopFinishClose->setAutoDefault( 
TRUE );
 
  214   buttonBoxLayout->addWidget(fButtonStopFinishClose);
 
  216   fButtonSave = 
new QPushButton( tr( 
"&Save" ),buttonBox );
 
  217   fButtonSave->setEnabled(
false);
 
  218   fButtonSave->setAutoDefault( 
TRUE );
 
  219   buttonBoxLayout->addWidget(fButtonSave);
 
  221   QPushButton *buttonCancel = 
new QPushButton( tr( 
"&Cancel" ),buttonBox );
 
  222   buttonCancel->setAutoDefault( 
TRUE );
 
  223   buttonBoxLayout->addWidget(buttonCancel);
 
  225   buttonBox->setLayout(buttonBoxLayout);
 
  226   globalVLayout->addWidget(buttonBox);
 
  230   setLayout(globalVLayout);
 
  233   connect( fButtonStartPause, SIGNAL( clicked() ), fParentViewer, SLOT(    startPauseVideo() ) );
 
  234   connect( buttonReset, SIGNAL( clicked() ), 
this, SLOT( resetRecording() ) );
 
  235   connect( buttonCancel, SIGNAL( clicked() ), 
this, SLOT( reject() ) );
 
  236   connect( fButtonStopFinishClose, SIGNAL( clicked() ), 
this, SLOT( stopFinishClose() ) );
 
  237   connect( fButtonSave, SIGNAL( clicked() ), 
this, SLOT( save() ) );
 
  240   setRecordingStatus(
"");
 
  241   fEncoderPath->setText(fParentViewer->getEncoderPath());
 
  242   fTempFolderPath->setText(fParentViewer->getTempFolderPath());
 
  245   connect (fEncoderPath,SIGNAL(textChanged ( 
const QString&)),
this,SLOT(checkEncoderSwParameters()));
 
  246   connect (fTempFolderPath,SIGNAL(textChanged ( 
const QString&)),
this,SLOT(checkTempFolderParameters()));
 
  247   connect (fSaveFileName,SIGNAL(textChanged ( 
const QString&)),
this,SLOT(checkSaveFileNameParameters()));
 
  249   connect (fEncoderPath,SIGNAL(editingFinished ()),
this,SLOT(checkEncoderSwParameters()));
 
  250   connect (fTempFolderPath,SIGNAL(editingFinished ()),
this,SLOT(checkTempFolderParameters()));
 
  251   connect (fSaveFileName,SIGNAL(editingFinished ()),
this,SLOT(checkSaveFileNameParameters()));
 
  257 G4OpenGLQtMovieDialog::~G4OpenGLQtMovieDialog()
 
  261 void G4OpenGLQtMovieDialog::selectEncoderPathAction()
 
  263   QString nomFich =  QFileDialog::getOpenFileName ( 
this,
 
  264                                                     "Select your encoder",
 
  265                                                     tr(
"Select your encoder ...")); 
 
  271   fEncoderPath->setText(nomFich);
 
  272   checkEncoderSwParameters();
 
  276 void G4OpenGLQtMovieDialog::selectTempPathAction()
 
  278   QString nomFich =  QFileDialog::getExistingDirectory ( 
this,
 
  279                                                     "Select temporary folder",
 
  280                                                     tr(
"Select temporary folder ...")); 
 
  285   fTempFolderPath->setText(nomFich);
 
  286   checkTempFolderParameters();
 
  290 void G4OpenGLQtMovieDialog::selectSaveFileNameAction()
 
  292   QString nomFich =  QFileDialog::getSaveFileName ( 
this,
 
  294                                                     tr(
"Select saved file ...")); 
 
  299   fSaveFileName->setText(nomFich);
 
  300   checkSaveFileNameParameters();
 
  304 void G4OpenGLQtMovieDialog::stopFinishClose() {
 
  305   fParentViewer->stopVideo();
 
  308 void G4OpenGLQtMovieDialog::save() {
 
  309   if (((fParentViewer->isPaused()) || fParentViewer->isRecording() || fParentViewer->isStopped())) {
 
  310     fParentViewer->saveVideo();
 
  318 bool G4OpenGLQtMovieDialog::checkEncoderSwParameters() {
 
  321   QPalette mypalette( fEncoderPath->palette() );
 
  323   QString temp = fParentViewer->setEncoderPath(fEncoderPath->text());
 
  324   setRecordingInfos(
"");
 
  325   fEncoderStatus->setText(temp);
 
  327     mypalette.setColor( QPalette::Base, 
Qt::red);
 
  328     if (fParentViewer->isReadyToEncode()) {
 
  329       setRecordingInfos(
"No valid encode defined, screen capture had been saved in the temp folder in ppm format.\nPlease define a encoder and clic on Apply button");
 
  333     mypalette.setColor( QPalette::Base, Qt::white);
 
  334     fEncoderPath->setText(fParentViewer->getEncoderPath());
 
  336   fEncoderPath->setPalette(mypalette);
 
  345 bool G4OpenGLQtMovieDialog::checkTempFolderParameters() {
 
  348   QPalette mypalette( fTempFolderPath->palette() );
 
  350   QString temp = fParentViewer->setTempFolderPath(fTempFolderPath->text());
 
  351   fTempFolderStatus->setText(temp);
 
  353     mypalette.setColor( QPalette::Base, 
Qt::red);
 
  356     mypalette.setColor( QPalette::Base, Qt::white);
 
  357     fTempFolderPath->setText(fParentViewer->getTempFolderPath());
 
  359   fTempFolderPath->setPalette(mypalette);
 
  368 bool G4OpenGLQtMovieDialog::checkSaveFileNameParameters() {
 
  371   QPalette mypalette( fSaveFileName->palette() );
 
  373   QString temp = fParentViewer->setSaveFileName(fSaveFileName->text());
 
  374   fSaveFileStatus->setText(temp);
 
  376     mypalette.setColor( QPalette::Base, 
Qt::red);
 
  379     mypalette.setColor( QPalette::Base, Qt::white);
 
  380     fSaveFileName->setText(fParentViewer->getSaveFileName());
 
  382   fSaveFileName->setPalette(mypalette);
 
  387 void G4OpenGLQtMovieDialog::resetRecording() {
 
  388   fParentViewer->resetRecording();
 
  392 void G4OpenGLQtMovieDialog::setRecordingStatus(QString txt) {
 
  393   fRecordingStatus->setText(txt);
 
  394   if (fParentViewer->isWaiting()) {
 
  395     fButtonStartPause->setText(
"  &Start ");
 
  396     fButtonStartPause->setEnabled(
true);
 
  397     fButtonStopFinishClose->setEnabled(
false);
 
  398     fButtonSave->setEnabled(
false);
 
  400   } 
else if (fParentViewer->isPaused()) {
 
  402     fButtonStartPause->setText(
"  &Continue ");
 
  403     fButtonStartPause->setEnabled(
true);
 
  404     fButtonStopFinishClose->setEnabled(
true);
 
  405     fButtonSave->setEnabled(
false);
 
  407   } 
else if (fParentViewer->isRecording()) {
 
  409     fButtonStartPause->setText(
"  &Pause ");
 
  410     fButtonStartPause->setEnabled(
true);
 
  411     fButtonStopFinishClose->setEnabled(
true);
 
  412     fButtonSave->setEnabled(
false);
 
  414   } 
else if (fParentViewer->isBadOutput()) {
 
  416     fButtonStartPause->setText(
"  &Start ");
 
  417     fButtonStartPause->setEnabled(
true);
 
  418     fButtonStopFinishClose->setEnabled(
false);
 
  419     fButtonSave->setEnabled(
false);
 
  421   } 
else if (fParentViewer->isBadTmp()) {
 
  423     fButtonStartPause->setText(
"  &Start ");
 
  424     fButtonStartPause->setEnabled(
false);
 
  425     fButtonStopFinishClose->setEnabled(
false);
 
  426     fButtonSave->setEnabled(
false);
 
  428   } 
else if (fParentViewer->isBadEncoder()) {
 
  430     fButtonStartPause->setText(
"  &Start ");
 
  431     fButtonStartPause->setEnabled(
true);
 
  432     fButtonStopFinishClose->setEnabled(
false);
 
  433     fButtonSave->setEnabled(
false);
 
  435   } 
else if (fParentViewer->isSuccess()) {
 
  437     fButtonStartPause->setText(
"  &Start ");
 
  438     fButtonStartPause->setEnabled(
false);
 
  439     fButtonStopFinishClose->setEnabled(
false);
 
  440     fButtonSave->setEnabled(
false);
 
  442   } 
else if (fParentViewer->isFailed()) {
 
  444     fButtonStartPause->setText(
"  &Start ");
 
  445     fButtonStartPause->setEnabled(
false);
 
  446     fButtonStopFinishClose->setEnabled(
false);
 
  447     fButtonSave->setEnabled(
false);
 
  449   } 
else if (fParentViewer->isStopped()) {
 
  451     fButtonStartPause->setText(
"  &Start ");
 
  452     fButtonStartPause->setEnabled(
false);
 
  453     fButtonStopFinishClose->setEnabled(
false);
 
  454     fButtonSave->setEnabled(
true);
 
  459 void G4OpenGLQtMovieDialog::setRecordingInfos(QString txt) {
 
  460   fRecordingInfos->setText(txt);
 
  464 void G4OpenGLQtMovieDialog::enabledApplyButton() {
 
  465   fButtonStartPause->setEnabled(
true);