Geant4  10.00.p01
G4OpenGLQtExportDialog.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: G4OpenGLQtExportDialog.cc 68732 2013-04-05 09:44:10Z gcosmo $
28 //
29 //
30 
31 #ifdef G4VIS_BUILD_OPENGLQT_DRIVER
32 
34 
35 #include <qvariant.h>
36 #include <qpushbutton.h>
37 #include <qcheckbox.h>
38 #include <qlabel.h>
39 #include <qcombobox.h>
40 #include <qslider.h>
41 #include <qlayout.h>
42 #include <qgroupbox.h>
43 #include <qradiobutton.h>
44 #include <qimage.h>
45 #include <qlineedit.h>
46 #include <qbuttongroup.h>
47 
48 G4OpenGLQtExportDialog::G4OpenGLQtExportDialog(
49  QWidget* parentw
50 ,QString format
51  ,int aHeight
52  ,int aWidth
53 )
54  : QDialog( parentw ),
55  isChangingSize(false)
56 {
57  setWindowTitle( tr( " Export options" ));
58  originalWidth = aWidth;
59  originalHeight = aHeight;
60 
61  // Initializations
62  qualitySlider = NULL;
63  width = NULL;
64  height = NULL;
65  colorButton = NULL;
66  BWButton = NULL;
67 
68  // global layout
69  QVBoxLayout* globalVLayout = new QVBoxLayout(this);
70  globalVLayout->setMargin(10);
71  globalVLayout->setSpacing(10);
72 
73 
74 
75  // FIXME : L. Garnier 4/12/07
76  // Not implented. Should deal with alpha channel
77 
78 // if((format == "tif") ||
79 // (format == "tiff") ||
80 // (format == "jpg") ||
81 // (format == "jpeg") ||
82 // (format == "png") ||
83 // (format == "xpm")) {
84 
85 // QGroupBox *transparencyGroupBox = new QGroupBox(tr("Transparency"),this);
86 // QVBoxLayout *transparencyGroupBoxLayout = new QVBoxLayout(transparencyGroupBox);
87 
88 // boxTransparency = new QCheckBox("Save transparency",transparencyGroupBox);
89 // boxTransparency->setChecked( false );
90 
91 // transparencyGroupBoxLayout->addWidget(boxTransparency);
92 // globalVLayout->addWidget(transparencyGroupBox);
93 
94 // }
95 
96  // FIXME : L. Garnier 4/12/07
97  // This is not working for PS and PDF images, it does nothing.
98  // Image is staying in color mode
99  // if ((format == "ps") || (format == "pdf") || (format == "eps")) {
100 
101 
102  // size box
103 
104  QWidget * sizeWidget = new QWidget(this); // widget containing group button
105  QVBoxLayout * sizeWidgetLayout = new QVBoxLayout(sizeWidget);
106  sizeWidgetLayout->setMargin (10);
107 
108  // original and modify radiobuttons
109 
110  sizeGroupBox = new QGroupBox(tr("Size"));
111  QVBoxLayout *sizeGroupBoxLayout = new QVBoxLayout(sizeGroupBox);
112  QButtonGroup * sizeButtonGroupBox = new QButtonGroup();
113  sizeGroupBoxLayout->setMargin (15);
114 
115  original = new QRadioButton("Original");
116  modify = new QRadioButton("Modify");
117 
118  sizeButtonGroupBox->addButton(original);
119  sizeButtonGroupBox->addButton(modify);
120  sizeButtonGroupBox->setExclusive(true);
121 
122  sizeGroupBoxLayout->addWidget(original);
123  sizeGroupBoxLayout->addWidget(modify);
124 
125  sizeGroupBox->setLayout(sizeGroupBoxLayout);
126  sizeWidgetLayout->addWidget(sizeGroupBox);
127 
128  connect( sizeButtonGroupBox, SIGNAL( buttonClicked(QAbstractButton*) ), this, SLOT( changeSizeBox()) );
129  original->setChecked( true );
130 
131 
132  // height
133  heightWidget = new QWidget(sizeWidget);
134 
135  QHBoxLayout *heightLineLayout = new QHBoxLayout(heightWidget);
136 
137  QString tmp;
138 
139  heightLineLayout->addWidget(new QLabel("Height",heightWidget));
140  height = new QLineEdit(tmp.setNum(originalHeight),heightWidget);
141  height->setMaxLength(5);
142  heightLineLayout->addWidget(height);
143 
144  heightWidget->setLayout(heightLineLayout);
145 
146  sizeWidgetLayout->addWidget(heightWidget);
147  connect( height, SIGNAL( textChanged ( const QString& ) ), this, SLOT( textHeightChanged(const QString &) ) );
148 
149 
150  // width
151  widthWidget = new QWidget(sizeWidget);
152 
153  QHBoxLayout *widthLineLayout = new QHBoxLayout(widthWidget);
154 
155  widthLineLayout->addWidget(new QLabel("Width ",widthWidget));
156  width = new QLineEdit(tmp.setNum(originalWidth),widthWidget);
157  width->setMaxLength(5);
158  widthLineLayout->addWidget(width);
159  widthWidget->setLayout(widthLineLayout);
160  sizeWidgetLayout->addWidget(widthWidget);
161  connect( width, SIGNAL( textChanged ( const QString& ) ), this, SLOT( textWidthChanged(const QString &) ) );
162 
163 
164 
165  // ratio check box
166 
167  ratioCheckBox = new QCheckBox( "Keep ratio",sizeWidget);
168  ratioCheckBox->setChecked( true );
169 
170  sizeWidgetLayout->addWidget(ratioCheckBox);
171 
172  ratioCheckBox->hide();
173  heightWidget->hide();
174  widthWidget->hide();
175 
176  sizeWidget->setLayout(sizeWidgetLayout);
177  globalVLayout->addWidget(sizeWidget);
178 
179  if (format == "eps") {
180 
181  QGroupBox *EPSWidgetGroupBox = new QGroupBox(tr("EPS options"),this); // widget containing group button
182 
183 
184  QVBoxLayout * EPSGroupBoxLayout = new QVBoxLayout(EPSWidgetGroupBox);
185  EPSGroupBoxLayout->setMargin (15);
186 
187 // colorButton = new QRadioButton("Color",EPSWidgetGroupBox);
188 // BWButton = new QRadioButton("Grayscale",EPSWidgetGroupBox);
189 
190 // QButtonGroup * EPSColorButtonGroupBox = new QButtonGroup();
191 // EPSColorButtonGroupBox->addButton(colorButton);
192 // EPSColorButtonGroupBox->addButton(BWButton);
193 // EPSColorButtonGroupBox->setExclusive(true);
194 
195 // EPSGroupBoxLayout->addWidget(colorButton);
196 // EPSGroupBoxLayout->addWidget(BWButton);
197 
198  vectorEPSCheckBox = new QCheckBox( "Vector EPS File",EPSWidgetGroupBox);
199  EPSGroupBoxLayout->addWidget(vectorEPSCheckBox);
200 
201  EPSWidgetGroupBox->setLayout(EPSGroupBoxLayout);
202  // colorButton->setChecked( true );
203  vectorEPSCheckBox->setChecked( true );
204 
205  globalVLayout->addWidget(EPSWidgetGroupBox);
206  connect( vectorEPSCheckBox, SIGNAL( clicked() ), this, SLOT( changeVectorEPS()) );
207 
208  }
209 
210  if ((format == "jpg") ||
211  (format == "jpeg")) {
212 
213  QGroupBox *imageGroupBox = new QGroupBox(tr("Image quality"),this);
214  QHBoxLayout *hSliderLayout = new QHBoxLayout(imageGroupBox);
215  hSliderLayout->setMargin (15);
216 
217  qualitySlider= new QSlider(Qt::Horizontal,imageGroupBox);
218  qualitySlider->setMinimum(0);
219  qualitySlider->setMaximum(100);
220  qualitySlider->setTickPosition(QSlider::TicksBelow);
221  qualitySlider->setValue(60);
222  hSliderLayout->addWidget(new QLabel("Low ",imageGroupBox));
223  hSliderLayout->addWidget(qualitySlider);
224  hSliderLayout->addWidget(new QLabel(" Maximum",imageGroupBox));
225 
226  imageGroupBox->setLayout(hSliderLayout);
227 
228  globalVLayout->addWidget(imageGroupBox);
229  }
230 
231 
232  // button ok/cancel box
233 
234  QWidget *buttonBox = new QWidget(this);
235 
236  QHBoxLayout *buttonBoxLayout = new QHBoxLayout(buttonBox);
237 
238  buttonOk = new QPushButton( tr( "&OK" ),buttonBox );
239  buttonOk->setAutoDefault( true );
240  buttonOk->setDefault( true );
241  buttonBoxLayout->addWidget(buttonOk);
242 
243  buttonCancel = new QPushButton( tr( "&Cancel" ),buttonBox );
244  buttonCancel->setAutoDefault( true );
245  buttonBoxLayout->addWidget(buttonCancel);
246 
247  buttonBox->setLayout(buttonBoxLayout);
248  globalVLayout->addWidget(buttonBox);
249 
250 
251 
252  setLayout(globalVLayout);
253 
254  // signals and slots connections
255  connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
256  connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
257 }
258 
259 
260 
261 int G4OpenGLQtExportDialog::getSliderValue()
262 {
263  if (!qualitySlider) return -1;
264  return qualitySlider->value();
265 }
266 
267 int G4OpenGLQtExportDialog::getHeight()
268 {
269  if (!height) return originalHeight;
270  return height->text().toInt();
271 }
272 
273 int G4OpenGLQtExportDialog::getWidth()
274 {
275  if (!width) return originalWidth;
276  return width->text().toInt();
277 }
278 
279 int G4OpenGLQtExportDialog::getTransparency()
280 {
281  if (!boxTransparency) return -1;
282  return boxTransparency->isChecked();
283 }
284 
285 int G4OpenGLQtExportDialog::getNbColor()
286 {
287  if (!colorButton) return -1;
288  // Black and white
289  if (!colorButton->isChecked())
290  return 1;
291  // rgb color
292  return 3;
293 }
294 
295 bool G4OpenGLQtExportDialog::getVectorEPS()
296 {
297  if (!vectorEPSCheckBox) return 0;
298  return vectorEPSCheckBox->isChecked();
299 }
300 
301 
302 void G4OpenGLQtExportDialog::changeVectorEPS()
303 {
304  if (!vectorEPSCheckBox) return;
305  if (vectorEPSCheckBox->isChecked()) {
306  sizeGroupBox->show();
307  original->show();
308  modify->show();
309  changeSizeBox();
310  } else {
311  sizeGroupBox->hide();
312  original->hide();
313  modify->hide();
314  ratioCheckBox->hide();
315  heightWidget->hide();
316  widthWidget->hide();
317  }
318 }
319 
320 
321 void G4OpenGLQtExportDialog::changeSizeBox()
322 {
323  if (!original) return;
324  if (!heightWidget) return;
325  if (!widthWidget) return;
326  if (!ratioCheckBox) return;
327 
328  if ( original->isChecked()) {
329  ratioCheckBox->hide();
330  heightWidget->hide();
331  widthWidget->hide();
332  } else {
333  heightWidget->show();
334  widthWidget->show();
335  ratioCheckBox->show();
336  }
337 }
338 
339 
340 void G4OpenGLQtExportDialog::textWidthChanged(
341  const QString & s
342  )
343 {
344  if (!ratioCheckBox) return;
345  if (!width) return;
346  if (isChangingSize == true) return; // exclusive slot
347 
348  if (ratioCheckBox->isChecked()){
349  isChangingSize = true;
350  QString tmp;
351  height->setText(tmp.setNum((int)(s.toInt()*(double)((double)originalHeight/(double)originalWidth))));
352  isChangingSize = false;
353  }
354 }
355 
356 void G4OpenGLQtExportDialog:: textHeightChanged(
357  const QString & s
358 )
359 {
360  if (!ratioCheckBox) return;
361  if (!width) return;
362  if (isChangingSize == true) return; // exclusive slot
363 
364  if (ratioCheckBox->isChecked()){
365  isChangingSize = true;
366  QString tmp;
367  width->setText(tmp.setNum(s.toInt()*originalWidth/originalHeight));
368  isChangingSize = false;
369  }
370 }
371 
372 G4OpenGLQtExportDialog::~G4OpenGLQtExportDialog()
373 {
374 }
375 
376 
377 #endif
#define width
static const double s
Definition: G4SIunits.hh:150