/** * Tworzy wykres spektrogramu. * * Przygotowuje mapowanie kolorów, skale osi we właściwych jednostkach itp. * * @param parent obiekt rodzica */ SpectrogramPlot::SpectrogramPlot(QWidget* parent): QwtPlot(tr("Wave file not loaded"), parent) { spectrogram = new QwtPlotSpectrogram(); QwtLinearColorMap colorMap(Qt::black, Qt::red); colorMap.addColorStop(0.3, Qt::darkBlue); colorMap.addColorStop(0.4, Qt::blue); colorMap.addColorStop(0.65, Qt::green); colorMap.addColorStop(0.85, Qt::yellow); spectrogram->setColorMap(colorMap); // kolorowa prawa oś QwtScaleWidget *rightAxis = axisWidget(yRight); rightAxis->setTitle(tr("Intensity [dB]")); rightAxis->setColorBarEnabled(true); enableAxis(yRight); spectrogram->attach(this); const QFontMetrics fmRight(rightAxis->font()); int intensityWidth = rightAxis->colorBarWidth() + fmRight.width("888 888"); axisScaleDraw(yRight)->setMinimumExtent(intensityWidth); QwtPlotPanner *panner = new QwtPlotPanner(canvas()); panner->setAxisEnabled(QwtPlot::yRight, false); panner->setMouseButton(Qt::MidButton); // dolna oś setAxisScaleDraw(xBottom, new DurationScaleDraw()); }
TextEditor::TextEditor(Graph *g): QTextEdit(g), d_target(NULL) { setAttribute(Qt::WA_DeleteOnClose); setFrameShadow(QFrame::Plain); setFrameShape(QFrame::Box); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QPalette palette = this->palette(); palette.setColor(QPalette::Active, QPalette::WindowText, Qt::blue); palette.setColor(QPalette::Active, QPalette::Base, Qt::white); setPalette(palette); QString text; if (g->selectedText()){ d_target = g->selectedText(); setGeometry(d_target->geometry()); auto legend = dynamic_cast<LegendWidget*>(d_target); text = legend ? legend->text() : ""; d_target->hide(); } else if (g->titleSelected()){ d_target = g->plotWidget()->titleLabel(); QwtText t = g->plotWidget()->title(); text = t.text(); setAlignment((Qt::Alignment)t.renderFlags()); setGeometry(d_target->geometry()); } else if (g->selectedScale()){ d_target = g->selectedScale(); QwtScaleWidget *scale = (QwtScaleWidget*)d_target; QwtText t = scale->title(); text = t.text(); setAlignment((Qt::Alignment)t.renderFlags()); QRect rect = g->axisTitleRect(scale); if (scale->alignment() == QwtScaleDraw::BottomScale || scale->alignment() == QwtScaleDraw::TopScale){ resize(rect.size()); move(QPoint(d_target->x() + rect.x(), d_target->y() + rect.y())); } else { resize(QSize(rect.height(), rect.width())); if (scale->alignment() == QwtScaleDraw::LeftScale) move(QPoint(d_target->x() + rect.x(), d_target->y() + rect.y() + rect.height()/2)); else if (scale->alignment() == QwtScaleDraw::RightScale) move(QPoint(d_target->x() - rect.height(), d_target->y() + rect.y() + rect.height()/2)); t.setText(" "); t.setBackgroundPen(QPen(Qt::NoPen)); scale->setTitle(t); } } QTextCursor cursor = textCursor(); cursor.insertText(text); d_initial_text = text; show(); setFocus(); }
void SaxsviewImage::Private::setupScales(SaxsviewImage *image) { QwtPlotScaleItem *yRight = new QwtPlotScaleItem(QwtScaleDraw::LeftScale); yRight->scaleDraw()->enableComponent(QwtAbstractScaleDraw::Labels, false); yRight->attach(image); yRight->setBorderDistance(1); scales[QwtPlot::yRight] = yRight; QwtPlotScaleItem *yLeft = new QwtPlotScaleItem(QwtScaleDraw::RightScale); yLeft->scaleDraw()->enableComponent(QwtAbstractScaleDraw::Labels, false); yLeft->attach(image); yLeft->setBorderDistance(0); scales[QwtPlot::yLeft] = yLeft; QwtPlotScaleItem *xTop = new QwtPlotScaleItem(QwtScaleDraw::BottomScale); xTop->scaleDraw()->enableComponent(QwtAbstractScaleDraw::Labels, false); xTop->attach(image); xTop->setBorderDistance(0); scales[QwtPlot::xTop] = xTop; QwtPlotScaleItem *xBottom = new QwtPlotScaleItem(QwtScaleDraw::TopScale); xBottom->scaleDraw()->enableComponent(QwtAbstractScaleDraw::Labels, false); xBottom->attach(image); xBottom->setBorderDistance(1); scales[QwtPlot::xBottom] = xBottom; SaxsviewScaleDraw *scaleDraw; scaleDraw = new SaxsviewScaleDraw; scaleDraw->enableComponent(QwtAbstractScaleDraw::Backbone, false); scaleDraw->enableComponent(QwtAbstractScaleDraw::Ticks, false); image->setAxisScaleDraw(QwtPlot::yLeft, scaleDraw); scaleDraw = new SaxsviewScaleDraw; scaleDraw->enableComponent(QwtAbstractScaleDraw::Backbone, false); scaleDraw->enableComponent(QwtAbstractScaleDraw::Ticks, false); image->setAxisScaleDraw(QwtPlot::xBottom, scaleDraw); image->axisScaleEngine(QwtPlot::xBottom)->setAttribute(QwtScaleEngine::Floating, false); // // A color bar on the right axis. // QwtScaleWidget *rightAxis = image->axisWidget(QwtPlot::yRight); rightAxis->setTitle("Counts"); rightAxis->setColorBarEnabled(true); image->enableAxis(QwtPlot::yRight); image->plotLayout()->setAlignCanvasToScales(true); // // Allow rescaling to a fixed aspect ratio - but exempt // the color bar on the right axis. // rescaler = new QwtPlotRescaler(image->canvas(), QwtPlot::xBottom, QwtPlotRescaler::Fixed); rescaler->setAspectRatio(QwtPlot::yRight, 0.0); rescaler->setEnabled(false); }
Plot::Plot( QWidget *parent ): QwtPlot( parent ), d_formatType( 0 ), d_alpha(255) { d_spectrogram = new QwtPlotSpectrogram(); d_spectrogram->setRenderThreadCount( 0 ); // use system specific thread count d_spectrogram->setCachePolicy( QwtPlotRasterItem::PaintCache ); QList<double> contourLevels; for ( double level = 0.5; level < 10.0; level += 1.0 ) contourLevels += level; d_spectrogram->setContourLevels( contourLevels ); d_spectrogram->setData( new SpectrogramData() ); d_spectrogram->attach( this ); const QwtInterval zInterval = d_spectrogram->data()->interval( Qt::ZAxis ); // A color bar on the right axis QwtScaleWidget *rightAxis = axisWidget( QwtPlot::yRight ); rightAxis->setTitle( "Intensity" ); rightAxis->setColorBarEnabled( true ); setAxisScale( QwtPlot::yRight, zInterval.minValue(), zInterval.maxValue() ); enableAxis( QwtPlot::yRight ); plotLayout()->setAlignCanvasToScales( true ); setColorMap( Plot::RGBMap ); // LeftButton for the zooming // MidButton for the panning // RightButton: zoom out by 1 // Ctrl+RighButton: zoom out to full size QwtPlotZoomer* zoomer = new MyZoomer( canvas() ); zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier ); zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::RightButton ); QwtPlotPanner *panner = new QwtPlotPanner( canvas() ); panner->setAxisEnabled( QwtPlot::yRight, false ); panner->setMouseButton( Qt::MidButton ); // Avoid jumping when labels with more/less digits // appear/disappear when scrolling vertically const QFontMetrics fm( axisWidget( QwtPlot::yLeft )->font() ); QwtScaleDraw *sd = axisScaleDraw( QwtPlot::yLeft ); sd->setMinimumExtent( fm.width( "100.00" ) ); const QColor c( Qt::darkBlue ); zoomer->setRubberBandPen( c ); zoomer->setTrackerPen( c ); }
SectionWindow::SectionWindow(QWidget *parent): QMainWindow(parent) { m_data = new RasterData(); m_plot = new QwtPlot(parent); m_spect = new QwtPlotSpectrogram(); m_spect->setColorMap(QwtLinearColorMap(Qt::darkCyan, Qt::red)); m_spect->setData(*m_data); m_spect->attach(m_plot); m_plot->axisWidget(QwtPlot::xBottom)->setTitle("Band (index)"); m_plot->axisWidget(QwtPlot::yLeft)->setTitle("Arclength (pixel)"); m_plot->setMargin(5); // A color bar on the right axis QwtScaleWidget *rightAxis = m_plot->axisWidget(QwtPlot::yRight); rightAxis->setTitle("Intensity"); rightAxis->setColorBarEnabled(true); m_plot->enableAxis(QwtPlot::yRight); m_plot->plotLayout()->setAlignCanvasToScales(true); m_plot->replot(); // LeftButton for the zooming // MidButton for the panning // RightButton: zoom out by 1 // Ctrl+RighButton: zoom out to full size m_zoomer = new MyZoomer(this, m_plot->canvas()); m_zoomer->setMousePattern(QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier); m_zoomer->setMousePattern(QwtEventPattern::MouseSelect3, Qt::RightButton); const QColor c(Qt::darkBlue); m_zoomer->setRubberBandPen(c); m_zoomer->setTrackerPen(c); QwtPlotPanner *panner = new QwtPlotPanner(m_plot->canvas()); panner->setAxisEnabled(QwtPlot::yRight, false); panner->setMouseButton(Qt::MidButton); // Avoid jumping when labels with more/less digits // appear/disappear when scrolling vertically const QFontMetrics fm(m_plot->axisWidget(QwtPlot::yLeft)->font()); QwtScaleDraw *sd = m_plot->axisScaleDraw(QwtPlot::yLeft); sd->setMinimumExtent( fm.width("100.00") ); setCentralWidget(m_plot); }
void TextEditor::closeEvent(QCloseEvent *e) { if(d_target != NULL) { Graph *g = dynamic_cast<Graph *>(parent()); if (g) { QString s = QString(); if (auto legend = dynamic_cast<LegendWidget*>(d_target)){ s = text(); legend->setText(s); d_target->show(); g->setSelectedText(NULL); } else if (auto pieLabel = dynamic_cast<PieLabel*>(d_target)){ s = text(); pieLabel->setCustomText(s); d_target->show(); g->setSelectedText(NULL); } else if (d_target->isA("QwtTextLabel")){ QwtText title = g->plotWidget()->title(); s = text(); if(s.isEmpty()) s = " "; title.setText(s); g->plotWidget()->setTitle(title); } else if (d_target->isA("QwtScaleWidget")){ QwtScaleWidget *scale = (QwtScaleWidget*)d_target; QwtText title = scale->title(); s = text(); if(s.isEmpty()) s = " "; title.setText(s); scale->setTitle(title); } if (d_initial_text != s) g->notifyChanges(); d_target->repaint(); } } e->accept(); }
void TextEditor::closeEvent(QCloseEvent *e) { QString s = text(); int lines = s.count(QRegExp("\n")); if ( lines >= 100 && QMessageBox::question(d_graph->multiLayer(), tr("QtiPlot") + " - " + tr("Confirmation"), tr("Are you sure you want to add %1 text lines into this text box?").arg(lines), QMessageBox::Yes | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Cancel) s = d_initial_text; if (d_target->isA("LegendWidget")){ ((LegendWidget*)d_target)->setText(s); d_target->show(); d_graph->setActiveText(NULL); } else if (d_target->isA("PieLabel")){ ((PieLabel*)d_target)->setCustomText(s); d_target->show(); d_graph->setActiveText(NULL); } else if (d_target->isA("QwtTextLabel")){ QwtText title = d_graph->title(); if(s.isEmpty()) s = " "; title.setText(s); d_graph->setTitle(title); } else if (d_target->isA("QwtScaleWidget")){ QwtScaleWidget *scale = (QwtScaleWidget*)d_target; QwtText title = scale->title(); if(s.isEmpty()) s = " "; title.setText(s); scale->setTitle(title); } if (d_initial_text != s) d_graph->notifyChanges(); d_target->repaint(); e->accept(); }
Plot::Plot(QWidget *parent, const char *name) : QwtPlot(parent) { marker_key = 0; curve_key = 0; minTickLength = 5; majTickLength = 9; movedGraph=FALSE; graphToResize=FALSE; ShiftButton=FALSE; setGeometry(QRect(0,0,500,400)); setAxisTitle(QwtPlot::yLeft, tr("Y Axis Title")); setAxisTitle(QwtPlot::xBottom, tr("X Axis Title")); // grid d_grid = new Grid; d_grid->enableX(false); d_grid->enableY(false); d_grid->setMajPen(QPen(Qt::blue, 0, Qt::SolidLine)); d_grid->setMinPen(QPen(Qt::gray, 0 , Qt::DotLine)); d_grid->attach(this); //custom scale for (int i= 0; i<QwtPlot::axisCnt; i++) { QwtScaleWidget *scale = (QwtScaleWidget *) axisWidget(i); if (scale) { scale->setMargin(0); //the axis title color must be initialized QwtText title = scale->title(); title.setColor(Qt::black); scale->setTitle(title); ScaleDraw *sd = new ScaleDraw(); sd->setTickLength (QwtScaleDiv::MinorTick, minTickLength); sd->setTickLength (QwtScaleDiv::MediumTick, minTickLength); sd->setTickLength (QwtScaleDiv::MajorTick, majTickLength); setAxisScaleDraw (i, sd); } } QwtPlotLayout *pLayout=plotLayout(); pLayout->setCanvasMargin(0); QwtPlotCanvas* plCanvas = canvas(); plCanvas->setFocusPolicy(QWidget::StrongFocus); plCanvas->setFocusIndicator(QwtPlotCanvas::ItemFocusIndicator); plCanvas->setFocus(); plCanvas->setFrameShadow(QwtPlot::Plain); plCanvas->setCursor(Qt::arrowCursor); plCanvas->setLineWidth(0); setFocusPolicy(QWidget::StrongFocus); setFocusProxy(plCanvas); setFrameShape (QFrame::Box); setLineWidth(0); }
Plot::Plot(QWidget *parent): QwtPlot(parent) { d_spectrogram = new QwtPlotSpectrogram(); QwtLinearColorMap colorMap(Qt::darkCyan, Qt::red); colorMap.addColorStop(0.1, Qt::cyan); colorMap.addColorStop(0.6, Qt::green); colorMap.addColorStop(0.95, Qt::yellow); d_spectrogram->setColorMap(colorMap); d_spectrogram->setData(SpectrogramData()); d_spectrogram->attach(this); QwtValueList contourLevels; for ( double level = 0.5; level < 10.0; level += 1.0 ) contourLevels += level; d_spectrogram->setContourLevels(contourLevels); QwtScaleWidget *rightAxis = axisWidget(QwtPlot::yRight); rightAxis->setTitle("Intensity"); rightAxis->setColorBarEnabled(true); rightAxis->setColorMap(d_spectrogram->data().range(), d_spectrogram->colorMap()); setAxisScale(QwtPlot::yRight, d_spectrogram->data().range().minValue(), d_spectrogram->data().range().maxValue() ); enableAxis(QwtPlot::yRight); plotLayout()->setAlignCanvasToScales(true); replot(); // LeftButton for the zooming // MidButton for the panning // RightButton: zoom out by 1 // Ctrl+RighButton: zoom out to full size QwtPlotZoomer* zoomer = new QwtPlotZoomer(canvas()); #if QT_VERSION < 0x040000 zoomer->setMousePattern(QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlButton); #else zoomer->setMousePattern(QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier); #endif zoomer->setMousePattern(QwtEventPattern::MouseSelect3, Qt::RightButton); QwtPlotPanner *panner = new QwtPlotPanner(canvas()); panner->setAxisEnabled(QwtPlot::yRight, false); panner->setMouseButton(Qt::MidButton); // Avoid jumping when labels with more/less digits // appear/disappear when scrolling vertically const QFontMetrics fm(axisWidget(QwtPlot::yLeft)->font()); QwtScaleDraw *sd = axisScaleDraw(QwtPlot::yLeft); sd->setMinimumExtent( fm.width("100.00") ); const QColor c(Qt::darkBlue); zoomer->setRubberBandPen(c); zoomer->setTrackerPen(c); }
SpectrogramPlot::SpectrogramPlot( QWidget *parent ) : QwtPlot(parent) , impl_( new impl( this ) ) { impl_->spectrogram_->setRenderThreadCount( 0 ); // use system specific thread count impl_->spectrogram_->setColorMap( new ColorMap() ); impl_->spectrogram_->setCachePolicy( QwtPlotRasterItem::PaintCache ); impl_->spectrogram_->setData( impl_->drawable_ ); impl_->spectrogram_->attach( this ); impl_->marker_->attach( this ); // QList<double> contourLevels; // for ( double level = 0.5; level < 10.0; level += 1.0 ) // contourLevels += level; // impl_->spectrogram_->setContourLevels( contourLevels ); const QwtInterval zInterval = impl_->spectrogram_->data()->interval( Qt::ZAxis ); // A color bar on the right axis QwtScaleWidget *rightAxis = axisWidget( QwtPlot::yRight ); rightAxis->setTitle( "Intensity" ); rightAxis->setColorBarEnabled( true ); // rightAxis->setColorMap( zInterval, new ColorMap() ); setAxisZMax( 10.0 ); //setAxisScale( QwtPlot::xBottom, 0, 64 ); //setAxisScale( QwtPlot::yLeft, 64, 0 ); axisScaleEngine( QwtPlot::xBottom )->setAttribute( QwtScaleEngine::Floating, true ); axisScaleEngine( QwtPlot::yLeft )->setAttribute( QwtScaleEngine::Floating, true ); axisScaleEngine( QwtPlot::yLeft )->setAttribute( QwtScaleEngine::Inverted, true ); setAxisScale(QwtPlot::yRight, zInterval.minValue(), zInterval.maxValue()); enableAxis( QwtPlot::yRight ); plotLayout()->setAlignCanvasToScales( true ); replot(); if ( auto zoomer = new adplot::Zoomer( QwtPlot::xBottom, QwtPlot::yLeft, canvas() ) ) { const QColor c( 0xe0, 0xff, 0xff, 0x40 ); // lightcyan zoomer->setRubberBandPen( c ); zoomer->setTrackerPen( c ); zoomer->setTrackerMode( QwtPlotPicker::ActiveOnly ); } QwtPlotPanner *panner = new QwtPlotPanner( canvas() ); panner->setAxisEnabled( QwtPlot::yRight, false ); panner->setMouseButton( Qt::MidButton ); if ( auto picker = new adplot::Picker( canvas() ) ) { //picker->setStateMachine( new QwtPickerClickPointMachine() ); picker->setStateMachine( new QwtPickerDragRectMachine() ); picker->setRubberBand( QwtPicker::RectRubberBand ); picker->setRubberBandPen( QColor( Qt::red ) ); picker->setTrackerPen( QColor( Qt::white ) ); picker->setMousePattern( QwtEventPattern::MouseSelect1, Qt::RightButton ); picker->setTrackerMode( QwtPicker::AlwaysOff ); picker->setEnabled( true ); connect( picker, static_cast<void( QwtPlotPicker::* )( const QPointF& )>( &QwtPlotPicker::selected ), this, [this] ( const QPointF& p ) { impl_->marker_->setRect( p ); replot(); emit cellSelected( impl_->marker_->rect() ); } ); connect( picker, static_cast<void( QwtPlotPicker::* )( const QRectF& )>( &QwtPlotPicker::selected ), this, [this] ( const QRectF& rc ) { impl_->marker_->setRect( rc ); replot(); emit cellSelected( impl_->marker_->rect() ); } ); } QFont font; qtwrapper::font::setFont( font, qtwrapper::fontSizeSmall, qtwrapper::fontAxisLabel ); setAxisFont( QwtPlot::xBottom, font ); setAxisFont( QwtPlot::yLeft, font ); // Set fixed 'extent' for axis in order to avoid jumping when labels with more/less digits // appear/disappear when scrolling vertically const QFontMetrics fm( axisWidget( QwtPlot::yLeft )->font() ); QwtScaleDraw *sd = axisScaleDraw( QwtPlot::yLeft ); sd->setMinimumExtent( fm.width( "888.0" ) ); setContextMenuPolicy( Qt::CustomContextMenu ); }
Plot::Plot(int width, int height, QWidget *parent, const char *) : QwtPlot(parent) { setAutoReplot (false); marker_key = 0; curve_key = 0; minTickLength = 5; majTickLength = 9; setGeometry(QRect(0, 0, width, height)); setAxisTitle(QwtPlot::yLeft, tr("Y Axis Title")); setAxisTitle(QwtPlot::xBottom, tr("X Axis Title")); //due to the plot layout updates, we must always have a non empty title setAxisTitle(QwtPlot::yRight, tr(" ")); setAxisTitle(QwtPlot::xTop, tr(" ")); // grid d_grid = new Grid(); d_grid->attach(this); //custom scale for (int i= 0; i<QwtPlot::axisCnt; i++) { QwtScaleWidget *scale = (QwtScaleWidget *) axisWidget(i); if (scale) { scale->setMargin(0); //the axis title color must be initialized... QwtText title = scale->title(); title.setColor(Qt::black); scale->setTitle(title); //...same for axis color QPalette pal = scale->palette(); pal.setColor(QPalette::Foreground, QColor(Qt::black)); scale->setPalette(pal); ScaleDraw *sd = new ScaleDraw(this); sd->setTickLength(QwtScaleDiv::MinorTick, minTickLength); sd->setTickLength(QwtScaleDiv::MediumTick, minTickLength); sd->setTickLength(QwtScaleDiv::MajorTick, majTickLength); setAxisScaleDraw (i, sd); setAxisScaleEngine (i, new ScaleEngine()); } } QwtPlotLayout *pLayout = plotLayout(); pLayout->setCanvasMargin(0); pLayout->setAlignCanvasToScales (true); QwtPlotCanvas* plCanvas = canvas(); plCanvas->setFocusPolicy(Qt::StrongFocus); plCanvas->setFocusIndicator(QwtPlotCanvas::ItemFocusIndicator); //plCanvas->setFocus(); plCanvas->setFrameShadow(QwtPlot::Plain); plCanvas->setCursor(Qt::arrowCursor); plCanvas->setLineWidth(0); plCanvas->setPaintAttribute(QwtPlotCanvas::PaintCached, false); plCanvas->setPaintAttribute(QwtPlotCanvas::PaintPacked, false); QColor background = QColor(Qt::white); background.setAlpha(255); QPalette palette; palette.setColor(QPalette::Window, background); setPalette(palette); setCanvasBackground (background); setFocusPolicy(Qt::StrongFocus); //setFocusProxy(plCanvas); setFrameShape(QFrame::Box); setLineWidth(0); }
/*! Reset color and fonts of a plot \sa apply() */ void QwtPlotPrintFilter::reset(QwtPlot *plot) const { if ( d_data->cache == 0 ) return; const bool doAutoReplot = plot->autoReplot(); plot->setAutoReplot(false); const PrivateData::Cache &cache = *d_data->cache; if ( plot->titleLabel() ) { QwtTextLabel* title = plot->titleLabel(); if ( title->text().testPaintAttribute(QwtText::PaintUsingTextFont) ) { QwtText text = title->text(); text.setColor(cache.titleColor); title->setText(text); } else { QPalette palette = title->palette(); palette.setColor( QPalette::Active, Palette::Text, cache.titleColor); title->setPalette(palette); } if ( title->text().testPaintAttribute(QwtText::PaintUsingTextFont) ) { QwtText text = title->text(); text.setFont(cache.titleFont); title->setText(text); } else { title->setFont(cache.titleFont); } } if ( plot->legend() ) { #if QT_VERSION < 0x040000 QValueList<QWidget *> list = plot->legend()->legendItems(); for ( QValueListIterator<QWidget *> it = list.begin(); it != list.end(); ++it ) #else QList<QWidget *> list = plot->legend()->legendItems(); for ( QList<QWidget*>::iterator it = list.begin(); it != list.end(); ++it ) #endif { QWidget *w = *it; if ( cache.legendFonts.contains(w) ) w->setFont(cache.legendFonts[w]); if ( w->inherits("QwtLegendItem") ) { QwtLegendItem *label = (QwtLegendItem *)w; const QwtPlotItem *plotItem = (const QwtPlotItem*)plot->legend()->find(label); QwtSymbol symbol = label->symbol(); if ( cache.curveSymbolPenColors.contains(plotItem) ) { QPen pen = symbol.pen(); pen.setColor(cache.curveSymbolPenColors[plotItem]); symbol.setPen(pen); } if ( cache.curveSymbolBrushColors.contains(plotItem) ) { QBrush brush = symbol.brush(); brush.setColor(cache.curveSymbolBrushColors[plotItem]); symbol.setBrush(brush); } label->setSymbol(symbol); if ( cache.curveColors.contains(plotItem) ) { QPen pen = label->curvePen(); pen.setColor(cache.curveColors[plotItem]); label->setCurvePen(pen); } } } } for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ ) { QwtScaleWidget *scaleWidget = plot->axisWidget(axis); if ( scaleWidget ) { QPalette palette = scaleWidget->palette(); palette.setColor(QPalette::Active, Palette::Foreground, cache.scaleColor[axis]); scaleWidget->setPalette(palette); scaleWidget->setFont(cache.scaleFont[axis]); scaleWidget->setTitle(cache.scaleTitle[axis]); int startDist, endDist; scaleWidget->getBorderDistHint(startDist, endDist); scaleWidget->setBorderDist(startDist, endDist); } } if ( hasBackgroundColor(plot) ) { QPalette p = plot->palette(); p.setColor(QPalette::Active, Palette::Background, cache.widgetBackground); plot->setPalette(p); } if ( hasBackgroundColor(plot->canvas()) ) { plot->setCanvasBackground(cache.canvasBackground); } const QwtPlotItemList& itmList = plot->itemList(); for ( QwtPlotItemIterator it = itmList.begin(); it != itmList.end(); ++it ) { reset(*it); } delete d_data->cache; d_data->cache = 0; plot->setAutoReplot(doAutoReplot); }
/*! Change color and fonts of a plot \sa apply() */ void QwtPlotPrintFilter::apply(QwtPlot *plot) const { const bool doAutoReplot = plot->autoReplot(); plot->setAutoReplot(false); delete d_data->cache; d_data->cache = new PrivateData::Cache; PrivateData::Cache &cache = *d_data->cache; if ( plot->titleLabel() ) { QPalette palette = plot->titleLabel()->palette(); cache.titleColor = palette.color( QPalette::Active, Palette::Text); palette.setColor(QPalette::Active, Palette::Text, color(cache.titleColor, Title)); plot->titleLabel()->setPalette(palette); cache.titleFont = plot->titleLabel()->font(); plot->titleLabel()->setFont(font(cache.titleFont, Title)); } if ( plot->legend() ) { #if QT_VERSION < 0x040000 QValueList<QWidget *> list = plot->legend()->legendItems(); for ( QValueListIterator<QWidget *> it = list.begin(); it != list.end(); ++it ) #else QList<QWidget *> list = plot->legend()->legendItems(); for ( QList<QWidget*>::iterator it = list.begin(); it != list.end(); ++it ) #endif { QWidget *w = *it; cache.legendFonts.insert(w, w->font()); w->setFont(font(w->font(), Legend)); if ( w->inherits("QwtLegendItem") ) { QwtLegendItem *label = (QwtLegendItem *)w; QwtSymbol symbol = label->symbol(); QPen pen = symbol.pen(); QBrush brush = symbol.brush(); pen.setColor(color(pen.color(), CurveSymbol)); brush.setColor(color(brush.color(), CurveSymbol)); symbol.setPen(pen); symbol.setBrush(brush); label->setSymbol(symbol); pen = label->curvePen(); pen.setColor(color(pen.color(), Curve)); label->setCurvePen(pen); } } } for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ ) { QwtScaleWidget *scaleWidget = plot->axisWidget(axis); if ( scaleWidget ) { cache.scaleColor[axis] = scaleWidget->palette().color( QPalette::Active, Palette::Foreground); QPalette palette = scaleWidget->palette(); palette.setColor(QPalette::Active, Palette::Foreground, color(cache.scaleColor[axis], AxisScale)); scaleWidget->setPalette(palette); cache.scaleFont[axis] = scaleWidget->font(); scaleWidget->setFont(font(cache.scaleFont[axis], AxisScale)); cache.scaleTitle[axis] = scaleWidget->title(); QwtText scaleTitle = scaleWidget->title(); if ( scaleTitle.testPaintAttribute(QwtText::PaintUsingTextColor) ) { cache.scaleTitleColor[axis] = scaleTitle.color(); scaleTitle.setColor( color(cache.scaleTitleColor[axis], AxisTitle)); } if ( scaleTitle.testPaintAttribute(QwtText::PaintUsingTextFont) ) { cache.scaleTitleFont[axis] = scaleTitle.font(); scaleTitle.setFont( font(cache.scaleTitleFont[axis], AxisTitle)); } scaleWidget->setTitle(scaleTitle); int startDist, endDist; scaleWidget->getBorderDistHint(startDist, endDist); scaleWidget->setBorderDist(startDist, endDist); } } if ( hasBackgroundColor(plot) ) { QPalette p = plot->palette(); cache.widgetBackground = plot->palette().color( QPalette::Active, Palette::Background); p.setColor(QPalette::Active, Palette::Background, color(cache.widgetBackground, WidgetBackground)); plot->setPalette(p); } if ( hasBackgroundColor(plot->canvas())) { cache.canvasBackground = plot->canvasBackground(); plot->setCanvasBackground(color(cache.canvasBackground, CanvasBackground)); } const QwtPlotItemList& itmList = plot->itemList(); for ( QwtPlotItemIterator it = itmList.begin(); it != itmList.end(); ++it ) { apply(*it); } plot->setAutoReplot(doAutoReplot); }
TextEditor::TextEditor(Graph *g): QTextEdit(g), d_graph(g) { setAttribute(Qt::WA_DeleteOnClose); setFrameShadow(QFrame::Plain); setFrameShape(QFrame::Box); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); QPalette palette = this->palette(); palette.setColor(QPalette::Active, QPalette::WindowText, Qt::blue); palette.setColor(QPalette::Active, QPalette::Base, Qt::white); setPalette(palette); bool moveCrs = true; QString text; if (g->activeText()){ setParent(g->multiLayer()->canvas()); d_target = g->activeText(); setGeometry(d_target->geometry()); text = ((LegendWidget*)d_target)->text(); d_target->hide(); setFont(((LegendWidget*)d_target)->font()); } else if (g->titleSelected()){ d_target = g->titleLabel(); QwtText t = g->title(); text = t.text(); setAlignment((Qt::Alignment)t.renderFlags()); setFont(t.font()); setGeometry(d_target->geometry()); } else if (g->selectedScale()){ d_target = g->selectedScale(); QwtScaleWidget *scale = (QwtScaleWidget*)d_target; QwtText t = scale->title(); text = t.text(); setAlignment((Qt::Alignment)t.renderFlags()); setFont(t.font()); QRect rect = g->axisTitleRect(scale); if (scale->alignment() == QwtScaleDraw::BottomScale || scale->alignment() == QwtScaleDraw::TopScale){ resize(rect.size()); move(QPoint(d_target->x() + rect.x(), d_target->y() + rect.y())); } else { resize(QSize(rect.height(), rect.width())); if (scale->alignment() == QwtScaleDraw::LeftScale) move(QPoint(d_target->x() + rect.x(), d_target->y() + rect.y() + rect.height()/2)); else if (scale->alignment() == QwtScaleDraw::RightScale) move(QPoint(d_target->x() - rect.height(), d_target->y() + rect.y() + rect.height()/2)); t.setText(" "); t.setBackgroundPen(QPen(Qt::NoPen)); scale->setTitle(t); moveCrs = false; } } QTextCursor cursor = textCursor(); cursor.insertText(text); d_initial_text = text; setWordWrapMode (QTextOption::NoWrap); setAlignment(Qt::AlignCenter); QTextFrame *frame = document()->rootFrame(); QTextFrameFormat format = frame->frameFormat(); format.setTopMargin(format.topMargin () + 3); frame->setFrameFormat(format); show(); if (moveCrs) setTextCursor(cursorForPosition(mapFromGlobal(QCursor::pos()))); setFocus(); }
void ComponentPlotter::plot(bool zoom) { qwt_plot_->clear(); if(component_matrix_==NULL||component_matrix_->cols()==0) calculateComponents(); if(component_matrix_==NULL||component_matrix_->cols()<2) return; // only 1 component double min_y=1e10; double max_y=-1e10; double min_x=1e10; double max_x=-1e10; const vector<string>* feature_names; if(!plot_loadings_) feature_names = model_item_->model()->getSubstanceNames(); else feature_names = model_item_->model()->getDescriptorNames(); const unsigned int size = feature_names->size(); unsigned int comp_one=component_one_combobox_->itemData(component_one_combobox_->currentIndex()).toInt(); unsigned int comp_two=component_two_combobox_->itemData(component_two_combobox_->currentIndex()).toInt(); QwtLinearColorMap color_map; color_map.setColorInterval(QColor(255,0,0),QColor(0,255,0)); QwtDoubleInterval interval(min_response_value_,max_response_value_); const QSARData* data = model_item_->inputDataItem()->data(); for(unsigned int j=1; j<=size; j++) { QwtPlotMarker* marker= new QwtPlotMarker; QwtSymbol symbol = data_symbol; if(!plot_loadings_) { vector<double>* resp = data->getActivity(j-1); double response_value = (*resp)[selected_activity_]; delete resp; QBrush b(QColor(color_map.rgb(interval,response_value)),Qt::SolidPattern); symbol.setBrush(b); } double x_j = (*component_matrix_)(j,comp_one); double y_j = (*component_matrix_)(j,comp_two); if(y_j<min_y) min_y=y_j; if(y_j>max_y) max_y=y_j; if(x_j<min_x) min_x=x_j; if(x_j>max_x) max_x=x_j; marker->setSymbol(symbol); marker->setValue(x_j,y_j); marker->attach(qwt_plot_); // attached object will be automatically deleted by QwtPlot if(show_data_labels) { QString s =(*feature_names)[j-1].c_str(); QwtText label(s); label.setFont(data_label_font); marker->setLabel(label); marker->setLabelAlignment(data_label_alignment); } } QString s1 = component_one_combobox_->itemText(component_one_combobox_->currentIndex()); QString s2 = component_two_combobox_->itemText(component_two_combobox_->currentIndex()); LatentVariableModel* lv_model = dynamic_cast<LatentVariableModel*>(model_item_->model()); const Eigen::MatrixXd* weights = lv_model->getWeights(); if(!plot_loadings_) { s1 += " c="; s1+=String((*weights)(comp_one,1)).c_str(); s2 += " c="; s2+=String((*weights)(comp_two,1)).c_str(); } qwt_plot_->setAxisTitle(QwtPlot::yLeft,s2); qwt_plot_->setAxisTitle(QwtPlot::xBottom,s1); double x_border=(max_x-min_x)*0.05; double y_border=(max_y-min_y)*0.05; min_x-=x_border; min_y-=y_border; max_x+=x_border; max_y+=y_border; QwtPlotCurve* zero_line = new QwtPlotCurve; QwtPlotCurve* zero_line2 = new QwtPlotCurve; double x[2]; x[0]=min_x; x[1]=max_x; double y[2]; y[0]=0; y[1]=0; zero_line->setData(x,y,2); x[0]=0; x[1]=0; y[0]=min_y; y[1]=max_y; zero_line2->setData(x,y,2); QColor c(135,135,135); // grey QPen pen(c); zero_line->setPen(pen); zero_line->attach(qwt_plot_); zero_line2->setPen(pen); zero_line2->attach(qwt_plot_); if(zoom) { qwt_plot_->setAxisScale(QwtPlot::yLeft,min_y,max_y); qwt_plot_->setAxisScale(QwtPlot::xBottom,min_x,max_x); } if(!plot_loadings_) { QwtScaleWidget* rightAxis = qwt_plot_->axisWidget(QwtPlot::yRight); rightAxis->setTitle("response value"); rightAxis->setColorBarEnabled(true); rightAxis->setColorMap(interval,color_map); qwt_plot_->setAxisScale(QwtPlot::yRight,min_response_value_,max_response_value_); } }
void caWaterfallPlot::setColormap(colormap const &map) { thisColormap = map; setPropertyVisible(customcolormap, false); setPropertyVisible(discretecolormap, false); // A color bar on the right axis QwtScaleWidget *rightAxis = plot->axisWidget(QwtPlot::yRight); rightAxis->setTitle("Intensity"); rightAxis->setColorBarEnabled(true); plot->setAxisScale(QwtPlot::yRight, thisIntensityMin, thisIntensityMax); plot->enableAxis(QwtPlot::yRight); switch (map) { case grey: d_spectrogram->setColorMap(new ColorMap_Grey()); rightAxis->setColorMap(QwtInterval(thisIntensityMin, thisIntensityMax), new ColorMap_Grey()); thisColormap = grey; break; case spectrum_wavelength: d_spectrogram->setColorMap(new ColorMap_Wavelength()); rightAxis->setColorMap(QwtInterval(thisIntensityMin, thisIntensityMax), new ColorMap_Wavelength()); thisColormap = spectrum_wavelength; break; case spectrum_hot: d_spectrogram->setColorMap(new ColorMap_Hot()); rightAxis->setColorMap(QwtInterval(thisIntensityMin, thisIntensityMax), new ColorMap_Hot()); thisColormap = spectrum_hot; break; case spectrum_heat: d_spectrogram->setColorMap(new ColorMap_Heat()); rightAxis->setColorMap(QwtInterval(thisIntensityMin, thisIntensityMax), new ColorMap_Heat()); thisColormap = spectrum_heat; break; case spectrum_jet: d_spectrogram->setColorMap(new ColorMap_Jet()); rightAxis->setColorMap(QwtInterval(thisIntensityMin, thisIntensityMax), new ColorMap_Jet()); thisColormap = spectrum_jet; break; case spectrum_custom: { int *colorIndexes=NULL; setPropertyVisible(customcolormap, true); setPropertyVisible(discretecolormap, true); // user has the possibility to input its own colormap with discrete QtColors from 2 t0 18 // when nothing given, fallback to default colormap if(thisCustomMap.count() > 2) { colorIndexes=(int *) malloc(thisCustomMap.count()*sizeof(int)); // get the discrete colors for(int i=0; i< thisCustomMap.count(); i++) { bool ok; int index = thisCustomMap.at(i).toInt(&ok); if(ok) colorIndexes[i] = index; else colorIndexes[i] = 2; // black if(colorIndexes[i] < 2) colorIndexes[i] = 2; if(colorIndexes[i] > 18) colorIndexes[i] = 18; } // create colormap ColorMap_Custom * colormap = new ColorMap_Custom(); colormap->initColormap(colorIndexes, thisCustomMap.count(), thisDiscreteMap); d_spectrogram->setColorMap(colormap); rightAxis->setColorMap(QwtInterval(thisIntensityMin, thisIntensityMax), colormap); free(colorIndexes); thisColormap = spectrum_custom; } else { d_spectrogram->setColorMap(new ColorMap_Wavelength()); rightAxis->setColorMap(QwtInterval(thisIntensityMin, thisIntensityMax), new ColorMap_Wavelength()); thisColormap = spectrum_wavelength; } } break; default: d_spectrogram->setColorMap(new ColorMap_Wavelength()); rightAxis->setColorMap(QwtInterval(thisIntensityMin, thisIntensityMax), new ColorMap_Wavelength()); thisColormap = spectrum_wavelength; break; } myReplot(); }