Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4OpenGLQtMovieDialog.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 // $Id: G4OpenGLQtMovieDialog.cc 81942 2014-06-06 15:54:20Z gcosmo $
28 //
29 //
30 
31 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER
32 
33 #include "G4OpenGLQtViewer.hh" // should be first in case we include
34  // some boost SIGNAL/SLOT library
35 #include "G4OpenGLQtMovieDialog.hh"
36 
37 #include <qpushbutton.h>
38 #include <qpalette.h>
39 #include <qlabel.h>
40 #include <qgroupbox.h>
41 #include <qlayout.h>
42 #include <qlineedit.h>
43 #include <qfiledialog.h>
44 #include <qprocess.h>
45 
46 
47 // +---------------------------------------+
48 // + Path for encoder +
49 // + _______ +
50 // + | select| ____________________ +
51 // + ------- +
52 // + Temp path +
53 // + _______ +
54 // + | select| ____________________ +
55 // + ------- +
56 // + +
57 // + max number of frames ________ +
58 // + .... +
59 // + +
60 // + Label : X frames Saves/Encoding +
61 // + Cancel Encode +
62 // +---------------------------------------+
63 
64 G4OpenGLQtMovieDialog::G4OpenGLQtMovieDialog(
65  G4OpenGLQtViewer* parentViewer,
66  QWidget* parentw
67 )
68  : QDialog( parentw ),
69  fParentViewer(parentViewer)
70 {
71  setModal(false);
72  setWindowTitle( tr( " Save as movie" ));
73 
74 
75  // global layout
76  QVBoxLayout* globalVLayout = new QVBoxLayout(this);
77  globalVLayout->setMargin(10);
78  globalVLayout->setSpacing(10);
79 
80  // Encoder group box
81  QGroupBox *encoderGroupBox = new QGroupBox(tr("Encoder path"),this);
82  QVBoxLayout *encoderVGroupBoxLayout = new QVBoxLayout(encoderGroupBox);
83 
84  // Encoder Path
85  QWidget *encoderHBox = new QWidget(encoderGroupBox);
86  QHBoxLayout *encoderHBoxLayout = new QHBoxLayout(encoderHBox);
87  fEncoderPath = new QLineEdit("",encoderHBox);
88 
89  QPushButton *encoderButton = new QPushButton(tr("..."),encoderHBox);
90  encoderButton->setMaximumWidth (30);
91 
92  fEncoderStatus = new QLabel(encoderGroupBox);
93 
94  fEncoderStatus->setWordWrap(true);
95  encoderVGroupBoxLayout->setMargin(15);
96 
97  fEncoderStatus->setText("");
98 
99  encoderHBoxLayout->addWidget(fEncoderPath);
100  encoderHBoxLayout->addWidget(encoderButton);
101  encoderVGroupBoxLayout->addWidget(encoderHBox);
102  encoderVGroupBoxLayout->addWidget(fEncoderStatus);
103 
104  encoderGroupBox->setLayout(encoderVGroupBoxLayout);
105  globalVLayout->addWidget(encoderGroupBox);
106 
107  connect( encoderButton, SIGNAL( clicked( ) ), this, SLOT(selectEncoderPathAction() ) );
108 
109 
110  // temp folder group box
111  QGroupBox *tempFolderGroupBox = new QGroupBox(tr("Temporary folder path"),this);
112  QVBoxLayout *tempFolderVGroupBoxLayout = new QVBoxLayout(tempFolderGroupBox);
113 
114  // temp folder Path
115  QWidget *tempFolderHBox = new QWidget(tempFolderGroupBox);
116  QHBoxLayout *tempFolderHBoxLayout = new QHBoxLayout(tempFolderHBox);
117 
118  fTempFolderPath = new QLineEdit("",tempFolderHBox);
119 
120  QPushButton *tempButton = new QPushButton(tr("..."),tempFolderHBox);
121  tempButton->setMaximumWidth (30);
122 
123  fTempFolderStatus = new QLabel(tempFolderGroupBox);
124  fTempFolderStatus->setWordWrap(true);
125  tempFolderVGroupBoxLayout->setMargin(15);
126  fTempFolderStatus->setText("");
127 
128  tempFolderHBoxLayout->addWidget(fTempFolderPath);
129  tempFolderHBoxLayout->addWidget(tempButton);
130  tempFolderVGroupBoxLayout->addWidget(tempFolderHBox);
131  tempFolderVGroupBoxLayout->addWidget(fTempFolderStatus);
132 
133  tempFolderGroupBox->setLayout(tempFolderVGroupBoxLayout);
134  globalVLayout->addWidget(tempFolderGroupBox);
135 
136  connect( tempButton, SIGNAL( clicked( ) ), this, SLOT(selectTempPathAction() ) );
137 
138 
139 
140 
141  // save file group box
142  QGroupBox *saveFileGroupBox = new QGroupBox(tr("Save as"),this);
143  QVBoxLayout *saveFileVGroupBoxLayout = new QVBoxLayout(saveFileGroupBox);
144 
145  // save file
146  QWidget *saveFileHBox = new QWidget(saveFileGroupBox);
147  QHBoxLayout *saveFileHBoxLayout = new QHBoxLayout(saveFileHBox);
148 
149  fSaveFileName = new QLineEdit("G4Movie.mpeg",saveFileHBox);
150 
151  QPushButton *saveButton = new QPushButton(tr("..."),saveFileHBox);
152  saveButton->setMaximumWidth (30);
153 
154  fSaveFileStatus = new QLabel(saveFileGroupBox);
155  fSaveFileStatus->setWordWrap(true);
156  saveFileVGroupBoxLayout->setMargin(15);
157  fSaveFileStatus->setText("");
158 
159  saveFileHBoxLayout->addWidget(fSaveFileName);
160  saveFileHBoxLayout->addWidget(saveButton);
161  saveFileVGroupBoxLayout->addWidget(saveFileHBox);
162  saveFileVGroupBoxLayout->addWidget(fSaveFileStatus);
163 
164  saveFileGroupBox->setLayout(saveFileVGroupBoxLayout);
165  globalVLayout->addWidget(saveFileGroupBox);
166 
167  connect( saveButton, SIGNAL( clicked( ) ), this, SLOT(selectSaveFileNameAction() ) );
168 
169 
170 
171  // label
172 
173  QLabel *infoLabel = new QLabel(" Press SPACE to Start/Pause video recording \n Press RETURN to Stop video recording",this);
174 
175  // global status
176  QGroupBox *statusGroupBox = new QGroupBox(tr("Status"),this);
177  QVBoxLayout *statusVGroupBoxLayout = new QVBoxLayout(statusGroupBox);
178 
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);
185 
186  fRecordingInfos = new QLabel(statusGroupBox);
187  fRecordingInfos->setWordWrap(true);
188  setRecordingInfos("");
189 
190  statusVGroupBoxLayout->addWidget(fRecordingStatus);
191  statusVGroupBoxLayout->addWidget(fRecordingInfos);
192 
193  statusGroupBox->setLayout(statusVGroupBoxLayout);
194  globalVLayout->addWidget(infoLabel);
195  globalVLayout->addWidget(statusGroupBox);
196 
197  // buttons
198  QWidget *buttonBox = new QWidget(this);
199 
200  QHBoxLayout *buttonBoxLayout = new QHBoxLayout(buttonBox);
201 
202  QPushButton *buttonReset = new QPushButton( tr( "&Reset" ),buttonBox );
203  buttonReset->setAutoDefault( TRUE );
204  buttonBoxLayout->addWidget(buttonReset);
205 
206  fButtonStartPause = new QPushButton( tr( " &Start " ),buttonBox );
207  fButtonStartPause->setEnabled(true);
208  fButtonStartPause->setAutoDefault( TRUE );
209  buttonBoxLayout->addWidget(fButtonStartPause);
210 
211  fButtonStopFinishClose = new QPushButton( tr( "&Stop" ),buttonBox );
212  fButtonStopFinishClose->setEnabled(false);
213  fButtonStopFinishClose->setAutoDefault( TRUE );
214  buttonBoxLayout->addWidget(fButtonStopFinishClose);
215 
216  fButtonSave = new QPushButton( tr( "&Save" ),buttonBox );
217  fButtonSave->setEnabled(false);
218  fButtonSave->setAutoDefault( TRUE );
219  buttonBoxLayout->addWidget(fButtonSave);
220 
221  QPushButton *buttonCancel = new QPushButton( tr( "&Cancel" ),buttonBox );
222  buttonCancel->setAutoDefault( TRUE );
223  buttonBoxLayout->addWidget(buttonCancel);
224 
225  buttonBox->setLayout(buttonBoxLayout);
226  globalVLayout->addWidget(buttonBox);
227 
228 
229 
230  setLayout(globalVLayout);
231 
232  // signals and slots connections
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() ) );
238 
239  // fill
240  setRecordingStatus("");
241  fEncoderPath->setText(fParentViewer->getEncoderPath());
242  fTempFolderPath->setText(fParentViewer->getTempFolderPath());
243 
244  // connect line edit signals
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()));
248 
249  connect (fEncoderPath,SIGNAL(editingFinished ()),this,SLOT(checkEncoderSwParameters()));
250  connect (fTempFolderPath,SIGNAL(editingFinished ()),this,SLOT(checkTempFolderParameters()));
251  connect (fSaveFileName,SIGNAL(editingFinished ()),this,SLOT(checkSaveFileNameParameters()));
252 
253 }
254 
255 
256 
257 G4OpenGLQtMovieDialog::~G4OpenGLQtMovieDialog()
258 {
259 }
260 
261 void G4OpenGLQtMovieDialog::selectEncoderPathAction()
262 {
263  QString nomFich = QFileDialog::getOpenFileName ( this,
264  "Select your encoder",
265  tr("Select your encoder ..."));
266 
267 
268  if (nomFich == "") {
269  return;
270  }
271  fEncoderPath->setText(nomFich);
272  checkEncoderSwParameters();
273  }
274 
275 
276 void G4OpenGLQtMovieDialog::selectTempPathAction()
277 {
278  QString nomFich = QFileDialog::getExistingDirectory ( this,
279  "Select temporary folder",
280  tr("Select temporary folder ..."));
281 
282  if (nomFich == "") {
283  return;
284  }
285  fTempFolderPath->setText(nomFich);
286  checkTempFolderParameters();
287  }
288 
289 
290 void G4OpenGLQtMovieDialog::selectSaveFileNameAction()
291 {
292  QString nomFich = QFileDialog::getSaveFileName ( this,
293  "Select saved file",
294  tr("Select saved file ..."));
295 
296  if (nomFich == "") {
297  return;
298  }
299  fSaveFileName->setText(nomFich);
300  checkSaveFileNameParameters();
301  }
302 
303 
304 void G4OpenGLQtMovieDialog::stopFinishClose() {
305  fParentViewer->stopVideo();
306 }
307 
308 void G4OpenGLQtMovieDialog::save() {
309  if (((fParentViewer->isPaused()) || fParentViewer->isRecording() || fParentViewer->isStopped())) {
310  fParentViewer->saveVideo();
311  }
312 }
313 
318 bool G4OpenGLQtMovieDialog::checkEncoderSwParameters() {
319 
320  bool status = true;
321  QPalette mypalette( fEncoderPath->palette() );
322 
323  QString temp = fParentViewer->setEncoderPath(fEncoderPath->text());
324  setRecordingInfos("");
325  fEncoderStatus->setText(temp);
326  if (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");
330  }
331  status = false;
332  } else {
333  mypalette.setColor( QPalette::Base, Qt::white);
334  fEncoderPath->setText(fParentViewer->getEncoderPath());
335  }
336  fEncoderPath->setPalette(mypalette);
337  return status;
338 }
339 
340 
345 bool G4OpenGLQtMovieDialog::checkTempFolderParameters() {
346 
347  bool status = true;
348  QPalette mypalette( fTempFolderPath->palette() );
349 
350  QString temp = fParentViewer->setTempFolderPath(fTempFolderPath->text());
351  fTempFolderStatus->setText(temp);
352  if (temp != "") {
353  mypalette.setColor( QPalette::Base, Qt::red);
354  status = false;
355  } else {
356  mypalette.setColor( QPalette::Base, Qt::white);
357  fTempFolderPath->setText(fParentViewer->getTempFolderPath());
358  }
359  fTempFolderPath->setPalette(mypalette);
360  return status;
361 }
362 
363 
368 bool G4OpenGLQtMovieDialog::checkSaveFileNameParameters() {
369 
370  bool status = true;
371  QPalette mypalette( fSaveFileName->palette() );
372 
373  QString temp = fParentViewer->setSaveFileName(fSaveFileName->text());
374  fSaveFileStatus->setText(temp);
375  if (temp != "") {
376  mypalette.setColor( QPalette::Base, Qt::red);
377  status = false;
378  } else {
379  mypalette.setColor( QPalette::Base, Qt::white);
380  fSaveFileName->setText(fParentViewer->getSaveFileName());
381  }
382  fSaveFileName->setPalette(mypalette);
383  return status;
384 }
385 
386 
387 void G4OpenGLQtMovieDialog::resetRecording() {
388  fParentViewer->resetRecording();
389 }
390 
391 
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);
399 
400  } else if (fParentViewer->isPaused()) {
401 
402  fButtonStartPause->setText(" &Continue ");
403  fButtonStartPause->setEnabled(true);
404  fButtonStopFinishClose->setEnabled(true);
405  fButtonSave->setEnabled(false);
406 
407  } else if (fParentViewer->isRecording()) {
408 
409  fButtonStartPause->setText(" &Pause ");
410  fButtonStartPause->setEnabled(true);
411  fButtonStopFinishClose->setEnabled(true);
412  fButtonSave->setEnabled(false);
413 
414  } else if (fParentViewer->isBadOutput()) {
415 
416  fButtonStartPause->setText(" &Start ");
417  fButtonStartPause->setEnabled(true);
418  fButtonStopFinishClose->setEnabled(false);
419  fButtonSave->setEnabled(false);
420 
421  } else if (fParentViewer->isBadTmp()) {
422 
423  fButtonStartPause->setText(" &Start ");
424  fButtonStartPause->setEnabled(false);
425  fButtonStopFinishClose->setEnabled(false);
426  fButtonSave->setEnabled(false);
427 
428  } else if (fParentViewer->isBadEncoder()) {
429 
430  fButtonStartPause->setText(" &Start ");
431  fButtonStartPause->setEnabled(true);
432  fButtonStopFinishClose->setEnabled(false);
433  fButtonSave->setEnabled(false);
434 
435  } else if (fParentViewer->isSuccess()) {
436 
437  fButtonStartPause->setText(" &Start ");
438  fButtonStartPause->setEnabled(false);
439  fButtonStopFinishClose->setEnabled(false);
440  fButtonSave->setEnabled(false);
441 
442  } else if (fParentViewer->isFailed()) {
443 
444  fButtonStartPause->setText(" &Start ");
445  fButtonStartPause->setEnabled(false);
446  fButtonStopFinishClose->setEnabled(false);
447  fButtonSave->setEnabled(false);
448 
449  } else if (fParentViewer->isStopped()) {
450 
451  fButtonStartPause->setText(" &Start ");
452  fButtonStartPause->setEnabled(false);
453  fButtonStopFinishClose->setEnabled(false);
454  fButtonSave->setEnabled(true);
455  }
456 }
457 
458 
459 void G4OpenGLQtMovieDialog::setRecordingInfos(QString txt) {
460  fRecordingInfos->setText(txt);
461 }
462 
463 
464 void G4OpenGLQtMovieDialog::enabledApplyButton() {
465  fButtonStartPause->setEnabled(true);
466 }
467 
468 #endif
#define TRUE
Definition: globals.hh:55