TransferFunctionEditorWidget::TransferFunctionEditorWidget(QWidget *parent) : QSplitter(Qt::Vertical, parent) { m_splineEditorWidget = new SplineEditorWidget(this); m_gradientEditorWidget = new GradientEditorWidget(this); addWidget(m_splineEditorWidget); addWidget(m_gradientEditorWidget); setChildrenCollapsible(false); QObject::connect(m_splineEditorWidget, SIGNAL(giveHistogram(int)), SLOT(changeHistogram(int))); QObject::connect(m_gradientEditorWidget, SIGNAL(gradientChanged(QGradientStops)), m_splineEditorWidget, SLOT(setGradientStops(QGradientStops))); QObject::connect(m_splineEditorWidget, SIGNAL(selectEvent(QGradientStops)), m_gradientEditorWidget, SLOT(setColorGradient(QGradientStops))); QObject::connect(m_splineEditorWidget, SIGNAL(transferFunctionChanged(QImage)), SLOT(transferFunctionChanged(QImage))); QObject::connect(m_splineEditorWidget, SIGNAL(applyUndo(bool)), SIGNAL(applyUndo(bool))); QObject::connect(m_gradientEditorWidget, SIGNAL(applyUndo(bool)), SIGNAL(applyUndo(bool))); }
TransferFunctionEditorWidget::TransferFunctionEditorWidget(QWidget *parent) : QSplitter(Qt::Vertical, parent) { m_parent = parent; m_splineEditorWidget = new SplineEditorWidget(this); m_gradientEditorWidget = new GradientEditorWidget(this); addWidget(m_splineEditorWidget); addWidget(m_gradientEditorWidget); QList<int> ssz; ssz << 150 << 75; setSizes(ssz); setChildrenCollapsible(false); QObject::connect(m_splineEditorWidget, SIGNAL(giveHistogram(int)), this, SLOT(changeHistogram(int))); QObject::connect(m_gradientEditorWidget, SIGNAL(gradientChanged(QGradientStops)), m_splineEditorWidget, SLOT(setGradientStops(QGradientStops))); QObject::connect(m_splineEditorWidget, SIGNAL(selectEvent(QGradientStops)), m_gradientEditorWidget, SLOT(setColorGradient(QGradientStops))); QObject::connect(m_splineEditorWidget, SIGNAL(deselectEvent()), m_gradientEditorWidget, SLOT(resetColorGradient())); QObject::connect(m_splineEditorWidget, SIGNAL(transferFunctionChanged(QImage)), this, SLOT(transferFunctionChanged(QImage))); }
GradientWidget::GradientWidget(QWidget *parent) : QWidget(parent) { setWindowTitle(tr("Gradients")); m_renderer = new GradientRenderer(this); QGroupBox *mainGroup = new QGroupBox(this); mainGroup->setTitle(tr("Gradients")); QGroupBox *editorGroup = new QGroupBox(mainGroup); editorGroup->setTitle(tr("Color Editor")); m_editor = new GradientEditor(editorGroup); QGroupBox *typeGroup = new QGroupBox(mainGroup); typeGroup->setTitle(tr("Gradient Type")); m_linearButton = new QRadioButton(tr("Linear Gradient"), typeGroup); m_radialButton = new QRadioButton(tr("Radial Gradient"), typeGroup); m_conicalButton = new QRadioButton(tr("Conical Gradient"), typeGroup); QGroupBox *spreadGroup = new QGroupBox(mainGroup); spreadGroup->setTitle(tr("Spread Method")); m_padSpreadButton = new QRadioButton(tr("Pad Spread"), spreadGroup); m_reflectSpreadButton = new QRadioButton(tr("Reflect Spread"), spreadGroup); m_repeatSpreadButton = new QRadioButton(tr("Repeat Spread"), spreadGroup); QGroupBox *defaultsGroup = new QGroupBox(mainGroup); defaultsGroup->setTitle(tr("Defaults")); QPushButton *default1Button = new QPushButton(tr("1"), defaultsGroup); QPushButton *default2Button = new QPushButton(tr("2"), defaultsGroup); QPushButton *default3Button = new QPushButton(tr("3"), defaultsGroup); QPushButton *default4Button = new QPushButton(tr("Reset"), editorGroup); QPushButton *showSourceButton = new QPushButton(mainGroup); showSourceButton->setText(tr("Show Source")); #ifdef QT_OPENGL_SUPPORT QPushButton *enableOpenGLButton = new QPushButton(mainGroup); enableOpenGLButton->setText(tr("Use OpenGL")); enableOpenGLButton->setCheckable(true); enableOpenGLButton->setChecked(m_renderer->usesOpenGL()); if (!QGLFormat::hasOpenGL()) enableOpenGLButton->hide(); #endif QPushButton *whatsThisButton = new QPushButton(mainGroup); whatsThisButton->setText(tr("What's This?")); whatsThisButton->setCheckable(true); // Layouts QHBoxLayout *mainLayout = new QHBoxLayout(this); mainLayout->addWidget(m_renderer); mainLayout->addWidget(mainGroup); mainGroup->setFixedWidth(180); QVBoxLayout *mainGroupLayout = new QVBoxLayout(mainGroup); mainGroupLayout->addWidget(editorGroup); mainGroupLayout->addWidget(typeGroup); mainGroupLayout->addWidget(spreadGroup); mainGroupLayout->addWidget(defaultsGroup); mainGroupLayout->addStretch(1); mainGroupLayout->addWidget(showSourceButton); #ifdef QT_OPENGL_SUPPORT mainGroupLayout->addWidget(enableOpenGLButton); #endif mainGroupLayout->addWidget(whatsThisButton); QVBoxLayout *editorGroupLayout = new QVBoxLayout(editorGroup); editorGroupLayout->addWidget(m_editor); QVBoxLayout *typeGroupLayout = new QVBoxLayout(typeGroup); typeGroupLayout->addWidget(m_linearButton); typeGroupLayout->addWidget(m_radialButton); typeGroupLayout->addWidget(m_conicalButton); QVBoxLayout *spreadGroupLayout = new QVBoxLayout(spreadGroup); spreadGroupLayout->addWidget(m_padSpreadButton); spreadGroupLayout->addWidget(m_repeatSpreadButton); spreadGroupLayout->addWidget(m_reflectSpreadButton); QHBoxLayout *defaultsGroupLayout = new QHBoxLayout(defaultsGroup); defaultsGroupLayout->addWidget(default1Button); defaultsGroupLayout->addWidget(default2Button); defaultsGroupLayout->addWidget(default3Button); editorGroupLayout->addWidget(default4Button); connect(m_editor, SIGNAL(gradientStopsChanged(QGradientStops)), m_renderer, SLOT(setGradientStops(QGradientStops))); connect(m_linearButton, SIGNAL(clicked()), m_renderer, SLOT(setLinearGradient())); connect(m_radialButton, SIGNAL(clicked()), m_renderer, SLOT(setRadialGradient())); connect(m_conicalButton, SIGNAL(clicked()), m_renderer, SLOT(setConicalGradient())); connect(m_padSpreadButton, SIGNAL(clicked()), m_renderer, SLOT(setPadSpread())); connect(m_reflectSpreadButton, SIGNAL(clicked()), m_renderer, SLOT(setReflectSpread())); connect(m_repeatSpreadButton, SIGNAL(clicked()), m_renderer, SLOT(setRepeatSpread())); connect(default1Button, SIGNAL(clicked()), this, SLOT(setDefault1())); connect(default2Button, SIGNAL(clicked()), this, SLOT(setDefault2())); connect(default3Button, SIGNAL(clicked()), this, SLOT(setDefault3())); connect(default4Button, SIGNAL(clicked()), this, SLOT(setDefault4())); connect(showSourceButton, SIGNAL(clicked()), m_renderer, SLOT(showSource())); #ifdef QT_OPENGL_SUPPORT connect(enableOpenGLButton, SIGNAL(clicked(bool)), m_renderer, SLOT(enableOpenGL(bool))); #endif connect(whatsThisButton, SIGNAL(clicked(bool)), m_renderer, SLOT(setDescriptionEnabled(bool))); connect(whatsThisButton, SIGNAL(clicked(bool)), m_renderer->hoverPoints(), SLOT(setDisabled(bool))); connect(m_renderer, SIGNAL(descriptionEnabledChanged(bool)), whatsThisButton, SLOT(setChecked(bool))); connect(m_renderer, SIGNAL(descriptionEnabledChanged(bool)), m_renderer->hoverPoints(), SLOT(setDisabled(bool))); m_renderer->loadSourceFile(":res/gradients/gradients.cpp"); m_renderer->loadDescription(":res/gradients/gradients.html"); QTimer::singleShot(50, this, SLOT(setDefault1())); }
bool RemapWidget::setFile(QList<QString> flnm, int voltype) { m_timeseriesFiles.clear(); Global::statusBar()->clearMessage(); hideWidgets(); if (m_histogramWidget) delete m_histogramWidget; if (m_imageWidget) delete m_imageWidget; if (m_remapVolume) delete m_remapVolume; if (m_gradientWidget) delete m_gradientWidget; if (m_slider) delete m_slider; m_histogramWidget = 0; m_imageWidget = 0; m_gradientWidget = 0; m_remapVolume = 0; m_slider = 0; m_volumeType = voltype; m_volumeFile = flnm; if (m_volumeType == RAWVolume) m_remapVolume = new RemapRawVolume(); else if (m_volumeType == TOMVolume) m_remapVolume = new RemapTomVolume(); else if (m_volumeType == AnalyzeVolume) m_remapVolume = new RemapAnalyze(); else if (m_volumeType == HDF4Volume) m_remapVolume = new RemapHDF4(); else if (m_volumeType == RawSlices) m_remapVolume = new RemapRawSlices(); else if (m_volumeType == RawSlabs) m_remapVolume = new RemapRawSlabs(); else if (m_volumeType == NCVolume) m_remapVolume = new RemapNcVolume(); else if (m_volumeType == ImageVolume) m_remapVolume = new RemapImageVolume(); else if (m_volumeType == ImageMagickVolume) m_remapVolume = new RemapDicomVolume(); if (! m_remapVolume->setFile(m_volumeFile)) return false; m_histogramWidget = new RemapHistogramWidget(); m_histogramWidget->setMinimumSize(100, 300); m_histogramWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_gradientWidget = new GradientEditorWidget(); m_gradientWidget->setDrawBox(false); m_gradientWidget->setMinimumSize(200, 20); m_gradientWidget->setGeneralLock(GradientEditor::LockToTop); int d, w, h; m_remapVolume->gridSize(d, w, h); m_slider = new MySlider(); m_slider->set(0, d-1, 0, d-1, 0); ui.histogramFrame->layout()->addWidget(m_histogramWidget); ui.colorFrame->layout()->addWidget(m_gradientWidget); ui.sliderFrame->layout()->addWidget(m_slider); m_imageWidget = new RemapImage(); m_imageWidget->setGridSize(d, w, h); m_scrollArea->setWidget(m_imageWidget); m_currSlice = 0; connect(m_histogramWidget, SIGNAL(getHistogram()), this, SLOT(getHistogram())); connect(m_histogramWidget, SIGNAL(newMapping()), this, SLOT(newMapping())); connect(m_histogramWidget, SIGNAL(newMinMax(float, float)), this, SLOT(newMinMax(float, float))); connect(m_imageWidget, SIGNAL(getSlice(int)), this, SLOT(getSlice(int))); connect(m_imageWidget, SIGNAL(getRawValue(int, int, int)), this, SLOT(getRawValue(int, int, int))); connect(m_imageWidget, SIGNAL(newMinMax(float, float)), this, SLOT(newMinMax(float, float))); connect(m_imageWidget, SIGNAL(saveTrimmed(int, int, int, int, int, int)), this, SLOT(saveTrimmed(int, int, int, int, int, int))); connect(m_imageWidget, SIGNAL(saveTrimmedImages(int, int, int, int, int, int)), this, SLOT(saveTrimmedImages(int, int, int, int, int, int))); connect(m_imageWidget, SIGNAL(extractRawVolume()), this, SLOT(extractRawVolume())); connect(m_gradientWidget, SIGNAL(gradientChanged(QGradientStops)), m_imageWidget, SLOT(setGradientStops(QGradientStops))); connect(m_gradientWidget, SIGNAL(gradientChanged(QGradientStops)), m_histogramWidget, SLOT(setGradientStops(QGradientStops))); connect(m_slider, SIGNAL(valueChanged(int)), m_imageWidget, SLOT(sliceChanged(int))); connect(m_slider, SIGNAL(userRangeChanged(int, int)), m_imageWidget, SLOT(userRangeChanged(int, int))); QGradientStops stops; stops << QGradientStop(0, Qt::black) << QGradientStop(1, Qt::white); m_gradientWidget->setColorGradient(stops); m_imageWidget->setGradientStops(stops); m_histogramWidget->setGradientStops(stops); setRawMinMax(); showWidgets(); return true; }