/** * Update the colour scale after the range changes. */ void ColorMapWidget::updateScale() { double minValue = m_minValueBox->displayText().toDouble(); double maxValue = m_maxValueBox->displayText().toDouble(); GraphOptions::ScaleType type = (GraphOptions::ScaleType)m_scaleOptions->itemData(m_scaleOptions->currentIndex()).toUInt(); if (type == GraphOptions::Linear) { QwtLinearScaleEngine linScaler; m_scaleWidget->setScaleDiv(linScaler.transformation(), linScaler.divideScale(minValue, maxValue, 20, 5)); } else if (type == GraphOptions::Power) { PowerScaleEngine powerScaler; m_scaleWidget->setScaleDiv(powerScaler.transformation(), powerScaler.divideScale(minValue, maxValue, 20, 5)); } else { QwtLog10ScaleEngine logScaler; double logmin(minValue); if (logmin <= 0.0) { logmin = m_minPositiveValue; } m_scaleWidget->setScaleDiv(logScaler.transformation(), logScaler.divideScale(logmin, maxValue, 20, 5)); } }
/** Update the widget when the color map is changed */ void ColorBarWidget::updateColorMap() { // The color bar alway shows the same range. Doesn't matter since the ticks don't show up QwtDoubleInterval range(1.0, 100.0); m_colorBar->setColorBarEnabled(true); m_colorBar->setColorMap( range, m_colorMap); m_colorBar->setColorBarWidth(15); m_colorBar->setEnabled(true); // Try to limit the number of steps based on the height of the color bar int maxMajorSteps = m_colorBar->height()/15; // 15 pixels per div looked about right //std::cout << "maxMajorSteps" << maxMajorSteps << std::endl; if (maxMajorSteps > 10) maxMajorSteps = 10; // Show the scale on the right double minValue = m_min; double maxValue = m_max; GraphOptions::ScaleType type = m_colorMap.getScaleType(); if( type == GraphOptions::Linear ) { QwtLinearScaleEngine linScaler; m_colorBar->setScaleDiv(linScaler.transformation(), linScaler.divideScale(minValue, maxValue, maxMajorSteps, 5)); m_colorBar->setColorMap(QwtDoubleInterval(minValue, maxValue),m_colorMap); } else { QwtLog10ScaleEngine logScaler; m_colorBar->setScaleDiv(logScaler.transformation(), logScaler.divideScale(minValue, maxValue, maxMajorSteps, 5)); m_colorBar->setColorMap(QwtDoubleInterval(minValue, maxValue), m_colorMap); } }
/** * Set up a new colour map. * @param colorMap :: Reference to the new colour map. */ void ColorMapWidget::setupColorBarScaling(const MantidColorMap& colorMap) { double minValue = m_minValueBox->displayText().toDouble(); double maxValue = m_maxValueBox->displayText().toDouble(); GraphOptions::ScaleType type = colorMap.getScaleType(); if( type == GraphOptions::Linear ) { QwtLinearScaleEngine linScaler; m_scaleWidget->setScaleDiv(linScaler.transformation(), linScaler.divideScale(minValue, maxValue, 20, 5)); m_scaleWidget->setColorMap(QwtDoubleInterval(minValue, maxValue),colorMap); } else if( type == GraphOptions::Power ) { PowerScaleEngine powerScaler; m_scaleWidget->setScaleDiv(powerScaler.transformation(), powerScaler.divideScale(minValue, maxValue, 20, 5)); m_scaleWidget->setColorMap(QwtDoubleInterval(minValue, maxValue),colorMap); } else { QwtLog10ScaleEngine logScaler; double logmin(minValue); if( logmin <= 0.0 ) { logmin = m_minPositiveValue; m_minValueBox->blockSignals(true); setMinValue(logmin); m_minValueBox->blockSignals(false); } if (maxValue <= 0) { maxValue = 10.; m_maxValueBox->blockSignals(true); setMaxValue(maxValue); m_maxValueBox->blockSignals(false); } m_scaleWidget->setScaleDiv(logScaler.transformation(), logScaler.divideScale(logmin, maxValue, 20, 5)); m_scaleWidget->setColorMap(QwtDoubleInterval(logmin, maxValue), colorMap); } m_scaleOptions->blockSignals(true); m_scaleOptions->setCurrentIndex(m_scaleOptions->findData(type)); m_dspnN->setEnabled(false); if (m_scaleOptions->findData(type) == 2) { m_dspnN->setEnabled(true); } m_scaleOptions->blockSignals(false); }
EigenPlotDlg::EigenPlotDlg(QWidget* parent) : QDialog(parent), mpPlot(NULL), mpCurve(NULL), mpComponentsSpin(NULL) { // Eigen plot mpPlot = new QwtPlot(this); mpPlot->installEventFilter(this); mpPlot->setAutoFillBackground(true); QFont ftAxis = QApplication::font(); ftAxis.setBold(true); ftAxis.setPointSize(10); QwtText bottomText("Number of Components"); bottomText.setFont(ftAxis); mpPlot->setAxisTitle(QwtPlot::xBottom, bottomText); QwtText leftText("Eigen Values"); leftText.setFont(ftAxis); mpPlot->setAxisTitle(QwtPlot::yLeft, leftText); QwtScaleEngine* pLinearScale = mpPlot->axisScaleEngine(QwtPlot::xBottom); pLinearScale->setAttribute(QwtScaleEngine::Floating); QwtLog10ScaleEngine* pLogScale = new QwtLog10ScaleEngine(); pLogScale->setAttribute(QwtScaleEngine::Floating); mpPlot->setAxisScaleEngine(QwtPlot::yLeft, pLogScale); QPalette plotPalette = mpPlot->palette(); plotPalette.setColor(QPalette::Window, Qt::white); mpPlot->setPalette(plotPalette); QwtPlotCanvas* pPlotCanvas = mpPlot->canvas(); pPlotCanvas->setFrameStyle(QFrame::NoFrame); QwtPlotLayout* pPlotLayout = mpPlot->plotLayout(); pPlotLayout->setMargin(5); QwtPlotGrid* pPlotGrid = new QwtPlotGrid(); pPlotGrid->setPen(QPen(Qt::DotLine)); pPlotGrid->attach(mpPlot); mpPlot->replot(); // Number of components QLabel* pComponentsLabel = new QLabel("Number of Components:", this); mpComponentsSpin = new QSpinBox(this); mpComponentsSpin->setFixedWidth(50); mpComponentsSpin->setMinimum(1); QLabel* pDescriptionLabel = new QLabel("To set, left click in the plot or enter a value.", this); pDescriptionLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); pDescriptionLabel->setWordWrap(true); QFont descriptionFont(pDescriptionLabel->font()); descriptionFont.setItalic(true); pDescriptionLabel->setFont(descriptionFont); QHBoxLayout* pComponentsLayout = new QHBoxLayout(); pComponentsLayout->setMargin(0); pComponentsLayout->setSpacing(5); pComponentsLayout->addWidget(pComponentsLabel); pComponentsLayout->addWidget(mpComponentsSpin); pComponentsLayout->addWidget(pDescriptionLabel, 10); // Horizontal line QFrame* pLine = new QFrame(this); pLine->setFrameStyle(QFrame::HLine | QFrame::Sunken); // Buttons QPushButton* pOk = new QPushButton("&OK", this); QPushButton* pCancel = new QPushButton("&Cancel", this); connect(pOk, SIGNAL(clicked()), this, SLOT(accept())); connect(pCancel, SIGNAL(clicked()), this, SLOT(reject())); QHBoxLayout* pButtonLayout = new QHBoxLayout(); pButtonLayout->setMargin(0); pButtonLayout->setSpacing(5); pButtonLayout->addStretch(10); pButtonLayout->addWidget(pOk); pButtonLayout->addWidget(pCancel); // Layout QGridLayout* pGrid = new QGridLayout(this); pGrid->setMargin(10); pGrid->setSpacing(10); pGrid->addWidget(mpPlot, 0, 0); pGrid->addLayout(pComponentsLayout, 1, 0); pGrid->addWidget(pLine, 2, 0); pGrid->addLayout(pButtonLayout, 3, 0); pGrid->setRowStretch(0, 10); // Initialization setWindowTitle("PCA Components"); setModal(true); resize(440, 300); }