492 lines
14 KiB
C++
492 lines
14 KiB
C++
//
|
|
// ********************************************************************
|
|
// * License and Disclaimer *
|
|
// * *
|
|
// * The Geant4 software is copyright of the Copyright Holders of *
|
|
// * the Geant4 Collaboration. It is provided under the terms and *
|
|
// * conditions of the Geant4 Software License, included in the file *
|
|
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
|
// * include a list of copyright holders. *
|
|
// * *
|
|
// * Neither the authors of this software system, nor their employing *
|
|
// * institutes,nor the agencies providing financial support for this *
|
|
// * work make any representation or warranty, express or implied, *
|
|
// * regarding this software system or assume any liability for its *
|
|
// * use. Please see the license in the file LICENSE and URL above *
|
|
// * for the full disclaimer and the limitation of liability. *
|
|
// * *
|
|
// * This code implementation is the result of the scientific and *
|
|
// * technical work of the GEANT4 collaboration. *
|
|
// * By using, copying, modifying or distributing the software (or *
|
|
// * any work based on the software) you agree to acknowledge its *
|
|
// * use in resulting scientific publications, and indicate your *
|
|
// * acceptance of all terms of the Geant4 Software license. *
|
|
// ********************************************************************
|
|
//
|
|
//
|
|
// $Id: G4OpenGLQtExportDialog.cc,v 1.9 2008/10/24 14:17:10 lgarnier Exp $
|
|
// GEANT4 tag $Name: geant4-09-02 $
|
|
//
|
|
//
|
|
|
|
#ifdef G4VIS_BUILD_OPENGLQT_DRIVER
|
|
|
|
#include "G4OpenGLQtExportDialog.hh"
|
|
|
|
#include <qvariant.h>
|
|
#include <qpushbutton.h>
|
|
#include <qcheckbox.h>
|
|
#include <qlabel.h>
|
|
#include <qcombobox.h>
|
|
#include <qslider.h>
|
|
#include <qlayout.h>
|
|
#include <qgroupbox.h>
|
|
#include <qradiobutton.h>
|
|
#include <qimage.h>
|
|
#include <qlineedit.h>
|
|
#include <qbuttongroup.h>
|
|
|
|
G4OpenGLQtExportDialog::G4OpenGLQtExportDialog(
|
|
QWidget* parent
|
|
,QString format
|
|
,int aHeight
|
|
,int aWidth
|
|
)
|
|
: QDialog( parent ),
|
|
isChangingSize(false)
|
|
{
|
|
#if QT_VERSION < 0x040000
|
|
setCaption( tr( " Export options" ));
|
|
#else
|
|
setWindowTitle( tr( " Export options" ));
|
|
#endif
|
|
originalWidth = aWidth;
|
|
originalHeight = aHeight;
|
|
|
|
// Initializations
|
|
qualitySlider = NULL;
|
|
width = NULL;
|
|
height = NULL;
|
|
colorButton = NULL;
|
|
BWButton = NULL;
|
|
|
|
// global layout
|
|
QVBoxLayout* globalVLayout = new QVBoxLayout(this);
|
|
globalVLayout->setMargin(10);
|
|
globalVLayout->setSpacing(10);
|
|
|
|
|
|
|
|
// FIXME : L. Garnier 4/12/07
|
|
// Not implented. Should deal with alpha channel
|
|
|
|
// if((format == "tif") ||
|
|
// (format == "tiff") ||
|
|
// (format == "jpg") ||
|
|
// (format == "jpeg") ||
|
|
// (format == "png") ||
|
|
// (format == "xpm")) {
|
|
|
|
// QGroupBox *transparencyGroupBox = new QGroupBox(tr("Transparency"),this);
|
|
// QVBoxLayout *transparencyGroupBoxLayout = new QVBoxLayout(transparencyGroupBox);
|
|
|
|
// boxTransparency = new QCheckBox("Save transparency",transparencyGroupBox);
|
|
// boxTransparency->setChecked( false );
|
|
|
|
// transparencyGroupBoxLayout->addWidget(boxTransparency);
|
|
// #if QT_VERSION >= 0x040000
|
|
// transparencyGroupBox->setLayout(transparencyGroupBoxLayout);
|
|
// #endif
|
|
// globalVLayout->addWidget(transparencyGroupBox);
|
|
|
|
// }
|
|
|
|
// FIXME : L. Garnier 4/12/07
|
|
// This is not working for PS and PDF images, it does nothing.
|
|
// Image is staying in color mode
|
|
// if ((format == "ps") || (format == "pdf") || (format == "eps")) {
|
|
|
|
|
|
// size box
|
|
|
|
QWidget * sizeWidget = new QWidget(this); // widget containing group button
|
|
QVBoxLayout * sizeWidgetLayout = new QVBoxLayout(sizeWidget);
|
|
sizeWidgetLayout->setMargin (10);
|
|
|
|
// original and modify radiobuttons
|
|
#if QT_VERSION < 0x040000
|
|
QButtonGroup * sizeButtonGroupBox = new QButtonGroup ( 2,Qt::Vertical, tr("Size"),this);
|
|
sizeButtonGroupBox->setInsideMargin (15);
|
|
|
|
original = new QRadioButton("Original",sizeButtonGroupBox);
|
|
modify = new QRadioButton("Modify",sizeButtonGroupBox);
|
|
|
|
sizeButtonGroupBox->insert(original);
|
|
sizeButtonGroupBox->insert(modify);
|
|
sizeButtonGroupBox->setExclusive(true);
|
|
sizeWidgetLayout->add(sizeButtonGroupBox);
|
|
|
|
connect( sizeButtonGroupBox, SIGNAL( clicked(int) ), this, SLOT( changeSizeBox()) );
|
|
#else
|
|
|
|
sizeGroupBox = new QGroupBox(tr("Size"));
|
|
QVBoxLayout *sizeGroupBoxLayout = new QVBoxLayout(sizeGroupBox);
|
|
QButtonGroup * sizeButtonGroupBox = new QButtonGroup();
|
|
sizeGroupBoxLayout->setMargin (15);
|
|
|
|
original = new QRadioButton("Original");
|
|
modify = new QRadioButton("Modify");
|
|
|
|
sizeButtonGroupBox->addButton(original);
|
|
sizeButtonGroupBox->addButton(modify);
|
|
sizeButtonGroupBox->setExclusive(true);
|
|
|
|
sizeGroupBoxLayout->addWidget(original);
|
|
sizeGroupBoxLayout->addWidget(modify);
|
|
|
|
sizeGroupBox->setLayout(sizeGroupBoxLayout);
|
|
sizeWidgetLayout->addWidget(sizeGroupBox);
|
|
|
|
connect( sizeButtonGroupBox, SIGNAL( buttonClicked(QAbstractButton*) ), this, SLOT( changeSizeBox()) );
|
|
#endif
|
|
original->setChecked( true );
|
|
|
|
|
|
// height
|
|
heightWidget = new QWidget(sizeWidget);
|
|
|
|
QHBoxLayout *heightLineLayout = new QHBoxLayout(heightWidget);
|
|
|
|
QString tmp;
|
|
|
|
heightLineLayout->addWidget(new QLabel("Height",heightWidget));
|
|
height = new QLineEdit(tmp.setNum(originalHeight),heightWidget);
|
|
height->setMaxLength(5);
|
|
#if QT_VERSION < 0x040000
|
|
heightLineLayout->add(height);
|
|
#else
|
|
heightLineLayout->addWidget(height);
|
|
#endif
|
|
|
|
#if QT_VERSION >= 0x040000
|
|
heightWidget->setLayout(heightLineLayout);
|
|
#endif
|
|
|
|
#if QT_VERSION < 0x040000
|
|
sizeWidgetLayout->add(heightWidget);
|
|
#else
|
|
sizeWidgetLayout->addWidget(heightWidget);
|
|
#endif
|
|
connect( height, SIGNAL( textChanged ( const QString& ) ), this, SLOT( textHeightChanged(const QString &) ) );
|
|
|
|
|
|
// width
|
|
widthWidget = new QWidget(sizeWidget);
|
|
|
|
QHBoxLayout *widthLineLayout = new QHBoxLayout(widthWidget);
|
|
|
|
#if QT_VERSION < 0x040000
|
|
widthLineLayout->add(new QLabel("Width ",widthWidget));
|
|
#else
|
|
widthLineLayout->addWidget(new QLabel("Width ",widthWidget));
|
|
#endif
|
|
width = new QLineEdit(tmp.setNum(originalWidth),widthWidget);
|
|
width->setMaxLength(5);
|
|
#if QT_VERSION < 0x040000
|
|
widthLineLayout->add(width);
|
|
#else
|
|
widthLineLayout->addWidget(width);
|
|
#endif
|
|
#if QT_VERSION >= 0x040000
|
|
widthWidget->setLayout(widthLineLayout);
|
|
#endif
|
|
#if QT_VERSION < 0x040000
|
|
sizeWidgetLayout->add(widthWidget);
|
|
#else
|
|
sizeWidgetLayout->addWidget(widthWidget);
|
|
#endif
|
|
connect( width, SIGNAL( textChanged ( const QString& ) ), this, SLOT( textWidthChanged(const QString &) ) );
|
|
|
|
|
|
|
|
// ratio check box
|
|
|
|
ratioCheckBox = new QCheckBox( "Keep ratio",sizeWidget);
|
|
ratioCheckBox->setChecked( true );
|
|
|
|
#if QT_VERSION < 0x040000
|
|
sizeWidgetLayout->add(ratioCheckBox);
|
|
#else
|
|
sizeWidgetLayout->addWidget(ratioCheckBox);
|
|
#endif
|
|
|
|
#if QT_VERSION < 0x040000
|
|
ratioCheckBox->setEnabled ( false );
|
|
heightWidget->setEnabled ( false );
|
|
widthWidget->setEnabled ( false );
|
|
#else
|
|
ratioCheckBox->hide();
|
|
heightWidget->hide();
|
|
widthWidget->hide();
|
|
#endif
|
|
|
|
#if QT_VERSION >= 0x040000
|
|
sizeWidget->setLayout(sizeWidgetLayout);
|
|
#endif
|
|
globalVLayout->addWidget(sizeWidget);
|
|
|
|
if (format == "eps") {
|
|
|
|
QGroupBox *EPSWidgetGroupBox = new QGroupBox(tr("EPS options"),this); // widget containing group button
|
|
|
|
|
|
#if QT_VERSION < 0x040000
|
|
|
|
EPSWidgetGroupBox->setInsideMargin (15);
|
|
|
|
// QButtonGroup * EPSColorButtonGroupBox = new QButtonGroup( 2,Qt::Vertical, tr("EPS options"),this);
|
|
// EPSGroupBoxLayout = new QVBoxLayout(EPSColorButtonGroupBox);
|
|
// colorButton = new QRadioButton("Color",EPSColorButtonGroupBox);
|
|
// BWButton = new QRadioButton("Grayscale",EPSColorButtonGroupBox);
|
|
// EPSColorButtonGroupBox->setInsideMargin (15);
|
|
// EPSColorButtonGroupBox->insert(colorButton);
|
|
// EPSColorButtonGroupBox->insert(BWButton);
|
|
// EPSColorButtonGroupBox->setExclusive(true);
|
|
// EPSWidgetGroupBox->add(EPSColorButtonGroupBox);
|
|
|
|
vectorEPSCheckBox = new QCheckBox( "Vector EPS File",EPSWidgetGroupBox);
|
|
|
|
#else
|
|
QVBoxLayout * EPSGroupBoxLayout = new QVBoxLayout(EPSWidgetGroupBox);
|
|
EPSGroupBoxLayout->setMargin (15);
|
|
|
|
// colorButton = new QRadioButton("Color",EPSWidgetGroupBox);
|
|
// BWButton = new QRadioButton("Grayscale",EPSWidgetGroupBox);
|
|
|
|
// QButtonGroup * EPSColorButtonGroupBox = new QButtonGroup();
|
|
// EPSColorButtonGroupBox->addButton(colorButton);
|
|
// EPSColorButtonGroupBox->addButton(BWButton);
|
|
// EPSColorButtonGroupBox->setExclusive(true);
|
|
|
|
// EPSGroupBoxLayout->addWidget(colorButton);
|
|
// EPSGroupBoxLayout->addWidget(BWButton);
|
|
|
|
vectorEPSCheckBox = new QCheckBox( "Vector EPS File",EPSWidgetGroupBox);
|
|
EPSGroupBoxLayout->addWidget(vectorEPSCheckBox);
|
|
|
|
EPSWidgetGroupBox->setLayout(EPSGroupBoxLayout);
|
|
#endif
|
|
// colorButton->setChecked( true );
|
|
vectorEPSCheckBox->setChecked( true );
|
|
|
|
globalVLayout->addWidget(EPSWidgetGroupBox);
|
|
connect( vectorEPSCheckBox, SIGNAL( clicked() ), this, SLOT( changeVectorEPS()) );
|
|
|
|
}
|
|
|
|
if ((format == "jpg") ||
|
|
(format == "jpeg")) {
|
|
|
|
QGroupBox *imageGroupBox = new QGroupBox(tr("Image quality"),this);
|
|
QHBoxLayout *hSliderLayout = new QHBoxLayout(imageGroupBox);
|
|
hSliderLayout->setMargin (15);
|
|
|
|
qualitySlider= new QSlider(Qt::Horizontal,imageGroupBox);
|
|
#if QT_VERSION < 0x040000
|
|
qualitySlider->setMinValue(0);
|
|
qualitySlider->setMaxValue(100);
|
|
qualitySlider->setTickmarks(QSlider::Below);
|
|
#else
|
|
qualitySlider->setMinimum(0);
|
|
qualitySlider->setMaximum(100);
|
|
qualitySlider->setTickPosition(QSlider::TicksBelow);
|
|
#endif
|
|
qualitySlider->setValue(60);
|
|
hSliderLayout->addWidget(new QLabel("Low ",imageGroupBox));
|
|
hSliderLayout->addWidget(qualitySlider);
|
|
hSliderLayout->addWidget(new QLabel(" Maximum",imageGroupBox));
|
|
|
|
#if QT_VERSION >= 0x040000
|
|
imageGroupBox->setLayout(hSliderLayout);
|
|
#endif
|
|
|
|
globalVLayout->addWidget(imageGroupBox);
|
|
}
|
|
|
|
|
|
// button ok/cancel box
|
|
|
|
QWidget *buttonBox = new QWidget(this);
|
|
|
|
QHBoxLayout *buttonBoxLayout = new QHBoxLayout(buttonBox);
|
|
|
|
buttonOk = new QPushButton( tr( "&OK" ),buttonBox );
|
|
buttonOk->setAutoDefault( TRUE );
|
|
buttonOk->setDefault( TRUE );
|
|
buttonBoxLayout->addWidget(buttonOk);
|
|
|
|
buttonCancel = new QPushButton( tr( "&Cancel" ),buttonBox );
|
|
buttonCancel->setAutoDefault( TRUE );
|
|
buttonBoxLayout->addWidget(buttonCancel);
|
|
|
|
#if QT_VERSION >= 0x040000
|
|
buttonBox->setLayout(buttonBoxLayout);
|
|
#endif
|
|
globalVLayout->addWidget(buttonBox);
|
|
|
|
|
|
|
|
#if QT_VERSION >= 0x040000
|
|
setLayout(globalVLayout);
|
|
#endif
|
|
|
|
// signals and slots connections
|
|
connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
|
|
connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
|
|
}
|
|
|
|
|
|
|
|
int G4OpenGLQtExportDialog::getSliderValue()
|
|
{
|
|
if (!qualitySlider) return -1;
|
|
return qualitySlider->value();
|
|
}
|
|
|
|
int G4OpenGLQtExportDialog::getHeight()
|
|
{
|
|
if (!height) return originalHeight;
|
|
return height->text().toInt();
|
|
}
|
|
|
|
int G4OpenGLQtExportDialog::getWidth()
|
|
{
|
|
if (!width) return originalWidth;
|
|
return width->text().toInt();
|
|
}
|
|
|
|
int G4OpenGLQtExportDialog::getTransparency()
|
|
{
|
|
if (!boxTransparency) return -1;
|
|
return boxTransparency->isChecked();
|
|
}
|
|
|
|
int G4OpenGLQtExportDialog::getNbColor()
|
|
{
|
|
if (!colorButton) return -1;
|
|
// Black and white
|
|
if (!colorButton->isChecked())
|
|
return 1;
|
|
// rgb color
|
|
return 3;
|
|
}
|
|
|
|
bool G4OpenGLQtExportDialog::getVectorEPS()
|
|
{
|
|
if (!vectorEPSCheckBox) return 0;
|
|
return vectorEPSCheckBox->isChecked();
|
|
}
|
|
|
|
|
|
void G4OpenGLQtExportDialog::changeVectorEPS()
|
|
{
|
|
if (!vectorEPSCheckBox) return;
|
|
if (vectorEPSCheckBox->isChecked()) {
|
|
#if QT_VERSION < 0x040000
|
|
original->setEnabled ( true );
|
|
modify->setEnabled ( true );
|
|
#else
|
|
sizeGroupBox->show();
|
|
original->show();
|
|
modify->show();
|
|
#endif
|
|
changeSizeBox();
|
|
} else {
|
|
#if QT_VERSION < 0x040000
|
|
original->setEnabled ( false );
|
|
modify->setEnabled ( false );
|
|
ratioCheckBox->setEnabled ( false );
|
|
heightWidget->setEnabled ( false );
|
|
widthWidget->setEnabled ( false );
|
|
#else
|
|
sizeGroupBox->hide();
|
|
original->hide();
|
|
modify->hide();
|
|
ratioCheckBox->hide();
|
|
heightWidget->hide();
|
|
widthWidget->hide();
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
void G4OpenGLQtExportDialog::changeSizeBox()
|
|
{
|
|
if (!original) return;
|
|
if (!heightWidget) return;
|
|
if (!widthWidget) return;
|
|
if (!ratioCheckBox) return;
|
|
|
|
if ( original->isChecked()) {
|
|
#if QT_VERSION < 0x040000
|
|
ratioCheckBox->setEnabled ( false );
|
|
heightWidget->setEnabled ( false );
|
|
widthWidget->setEnabled ( false );
|
|
#else
|
|
ratioCheckBox->hide();
|
|
heightWidget->hide();
|
|
widthWidget->hide();
|
|
#endif
|
|
} else {
|
|
#if QT_VERSION < 0x040000
|
|
ratioCheckBox->setEnabled ( true );
|
|
heightWidget->setEnabled ( true );
|
|
widthWidget->setEnabled ( true );
|
|
#else
|
|
heightWidget->show();
|
|
widthWidget->show();
|
|
ratioCheckBox->show();
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
void G4OpenGLQtExportDialog::textWidthChanged(
|
|
const QString & s
|
|
)
|
|
{
|
|
if (!ratioCheckBox) return;
|
|
if (!width) return;
|
|
if (isChangingSize == true) return; // exclusive slot
|
|
|
|
if (ratioCheckBox->isChecked()){
|
|
isChangingSize = true;
|
|
QString tmp;
|
|
height->setText(tmp.setNum((int)(s.toInt()*(double)((double)originalHeight/(double)originalWidth))));
|
|
isChangingSize = false;
|
|
}
|
|
}
|
|
|
|
void G4OpenGLQtExportDialog:: textHeightChanged(
|
|
const QString & s
|
|
)
|
|
{
|
|
if (!ratioCheckBox) return;
|
|
if (!width) return;
|
|
if (isChangingSize == true) return; // exclusive slot
|
|
|
|
if (ratioCheckBox->isChecked()){
|
|
isChangingSize = true;
|
|
QString tmp;
|
|
width->setText(tmp.setNum(s.toInt()*originalWidth/originalHeight));
|
|
isChangingSize = false;
|
|
}
|
|
}
|
|
|
|
G4OpenGLQtExportDialog::~G4OpenGLQtExportDialog()
|
|
{
|
|
}
|
|
|
|
|
|
#endif
|