void MultiLayer::setFonts(const QFont &titleFnt, const QFont &scaleFnt, const QFont &numbersFnt, const QFont &legendFnt) { for (int i = 0; i < (int)graphsList.count(); i++) { Graph *gr = (Graph *)graphsList.at(i); QwtPlot *plot = gr->plotWidget(); QwtText text = plot->title(); text.setFont(titleFnt); plot->setTitle(text); for (int j = 0; j < QwtPlot::axisCnt; j++) { plot->setAxisFont(j, numbersFnt); text = plot->axisTitle(j); text.setFont(scaleFnt); plot->setAxisTitle(j, text); } QVector<int> keys = gr->textMarkerKeys(); for (int k = 0; k < (int)keys.size(); k++) { Legend *mrk = (Legend *)gr->textMarker(keys[k]); if (mrk) mrk->setFont(legendFnt); } plot->replot(); } emit modifiedPlot(); }
int LD::serialize (std::wostream & _stream, const std::wstring & entries) { ATTACHEDLABEL *att = dynamic_cast<ATTACHEDLABEL*> (m_ATTACHEDLABEL.get()); Legend *legend = dynamic_cast<Legend *> (m_Legend.get()); if (!m_CrtLayout12 && !m_Legend) return 0; if (legend) { legend->m_CrtLayout12 = m_CrtLayout12; legend->serialize(_stream, m_countSeries); }else if (m_CrtLayout12) m_CrtLayout12->serialize(_stream); if (!entries.empty()) _stream << entries; if (m_FRAME) m_FRAME->serialize(_stream); if (att) att->serialize_txPr(_stream); return 0; }
void testIntialOwnershipFromCtor() { Legend* l = new Legend( m_lines, m_chart ); m_chart->replaceLegend( l ); QCOMPARE( m_chart->legend(), l ); QCOMPARE( dynamic_cast< LineDiagram * >(l->diagram()), m_lines ); }
void testIntialOwnership() { Legend* l = new Legend( m_chart ); m_chart->addLegend( l ); QCOMPARE( m_chart->legend(), l ); QCOMPARE( l->diagram(), (AbstractDiagram*)0); l->setDiagram( m_lines ); QCOMPARE( dynamic_cast< LineDiagram * >(l->diagram()), m_lines ); }
void testReferenceArea() { Legend* l = new Legend( ); QCOMPARE( l->referenceArea(), ( const QWidget* )0 ); l->setReferenceArea( m_chart ); QCOMPARE( dynamic_cast< const Chart * >(l->referenceArea()), const_cast< const Chart * >(m_chart) ); Legend* l1 = new Legend( m_chart ); QCOMPARE( dynamic_cast< const Chart * >(l1->referenceArea()), const_cast< const Chart * >(m_chart) ); Legend* l2 = new Legend( m_lines, m_chart ); QCOMPARE( dynamic_cast< const Chart * >(l2->referenceArea()), const_cast< const Chart * >(m_chart) ); }
void testReplacing() { Legend* l = new Legend( m_chart ); QPointer<Legend> oldLegend = m_chart->legend(); QCOMPARE( dynamic_cast< LineDiagram * >(oldLegend->diagram()), m_lines ); m_chart->replaceLegend( l, oldLegend ); QVERIFY( oldLegend.isNull() ); QCOMPARE( l->diagram(), (AbstractDiagram*)0 ); l->setDiagram( m_lines ); QCOMPARE( dynamic_cast< LineDiagram * >(l->diagram()), m_lines ); }
void testTypeChangeWithLegend() { //set Cartesian type m_widget->addLegend( Position::North ); QCOMPARE( m_widget->allLegends().size(), 1 ); m_widget->setType( Widget::Bar, Widget::Stacked ); Legend *legend = m_widget->legend(); QVERIFY( legend != 0 ); QVERIFY( legend->diagram() != 0 ); QCOMPARE( legend->diagram(), m_widget->diagram() ); QCOMPARE( m_widget->allLegends().size(), 1 ); m_widget->setType( Widget::Line ); }
Legend ExportImageDialog::getLegendForSettings() { Legend legend; // set font for legend labels legend.setFont(QFont("Courier New", 8)); // set background color QColor bgColor = legend.getBgColor(); bgColor.setAlpha(160); legend.setBgColor(bgColor); // set legend orientation if(m_DialogUI->legendOrientationComboBox->currentIndex() == 1) // orientation: vertical { legend.setOrientation(Legend::LO_VERTICAL); } // set legend type Legend::LEGEND_TYPE type = static_cast<Legend::LEGEND_TYPE>(m_DialogUI->legendTypeComboBox->currentIndex()); legend.setType(type); // set legend position Legend::LEGEND_POSITION pos = static_cast<Legend::LEGEND_POSITION>(m_DialogUI->legendPositionComboBox->currentIndex()); legend.setPosition(pos); return legend; }
void MultiLayer::addTextLayer(const QPoint &pos) { Graph *g = addLayer(); g->removeLegend(); g->setTitle(""); QVector<bool> axesOn(4); for (int j = 0; j < 4; j++) axesOn[j] = false; g->enableAxes(axesOn); g->setIgnoreResizeEvents(true); g->setTextMarkerDefaults(defaultTextMarkerFrame, defaultTextMarkerFont, defaultTextMarkerColor, defaultTextMarkerBackground); Legend *mrk = g->newLegend(tr("enter your text here")); QSize size = mrk->rect().size(); setGraphGeometry(pos.x(), pos.y(), size.width() + 10, size.height() + 10); g->setIgnoreResizeEvents(false); g->show(); QApplication::restoreOverrideCursor(); canvas->releaseMouse(); addTextOn = false; emit drawTextOff(); emit modifiedPlot(); }
MainWindow::MainWindow( QWidget* parent ) : QWidget( parent ) { setupUi( this ); QHBoxLayout* chartLayout = new QHBoxLayout( chartFrame ); m_chart = new Chart(); m_chart->setGlobalLeading( 20, 20, 20, 20 ); chartLayout->addWidget( m_chart ); // Initialize the model, and fill it with data const int rowCount = 8; const int columnCount = 3; m_model = new QStandardItemModel(rowCount, columnCount, this); m_model->setHeaderData(0, Qt::Horizontal, tr("Product A")); m_model->setHeaderData(1, Qt::Horizontal, tr("Product B")); m_model->setHeaderData(2, Qt::Horizontal, tr("Product C")); openFile(":/Charts/qtdata.cht"); // Set up the diagram m_lines = new LineDiagram(); // Register the data model at the diagram m_lines->setModel( m_model ); // Add axes to the diagram CartesianAxis *xAxis = new CartesianAxis( m_lines ); CartesianAxis *yAxis = new CartesianAxis ( m_lines ); xAxis->setPosition ( KDChart::CartesianAxis::Bottom ); yAxis->setPosition ( KDChart::CartesianAxis::Left ); m_lines->addAxis( xAxis ); m_lines->addAxis( yAxis ); // Make the lines thicker for( int iColumn = 0; iColumn < columnCount; ++iColumn ){ QPen linePen( m_lines->pen( iColumn ) ); linePen.setWidth( 3 ); m_lines->setPen( iColumn, linePen ); } // Register the diagram at the coordinate plane m_chart->coordinatePlane()->replaceDiagram( m_lines ); // Add a legend Legend* legend = new Legend( m_lines, m_chart ); legend->setPosition( Position::South ); legend->setAlignment( Qt::AlignCenter ); legend->setShowLines( true ); legend->setTitleText(""); legend->setOrientation( Qt::Horizontal ); legend->addDiagram( m_lines ); m_chart->addLegend( legend ); }
int main( int argc, char** argv ) { QApplication app( argc, argv ); Widget widget; widget.resize( 600, 600 ); QVector< qreal > vec0, vec1, vec2; vec0 << -5 << -4 << -3 << -2 << -1 << 0 << 1 << 2 << 3 << 4 << 5; vec1 << 25 << 16 << 9 << 4 << 1 << 0 << 1 << 4 << 9 << 16 << 25; vec2 << -125 << -64 << -27 << -8 << -1 << 0 << 1 << 8 << 27 << 64 << 125; widget.setDataset( 0, vec0, "v0" ); widget.setDataset( 1, vec1, "v1" ); widget.setDataset( 2, vec2, "v2" ); widget.setType( Widget::Bar ); Legend* legend = new Legend( widget.diagram(), &widget ); legend->setOrientation( Qt::Horizontal ); legend->setTitleText( "Bars Legend" ); legend->setText( 0, "Vector 1" ); legend->setText( 1, "Vector 2" ); legend->setText( 2, "Vector 3" ); legend->setShowLines( true ); // The following aligns the legend exactly to the // chart's coordinate plane's top-right corner. // // Note: We do NOT use Legend::setAlignment here, because when // setRelativePosition is used the alignment is set at the // KChart::RelativePosition rather than at the KChart::Legend. KChart::RelativePosition relativePosition; relativePosition.setReferenceArea( widget.coordinatePlane() ); relativePosition.setReferencePosition( Position::NorthEast ); relativePosition.setAlignment( Qt::AlignTop | Qt::AlignRight ); relativePosition.setHorizontalPadding( KChart::Measure( -1.0, KChartEnums::MeasureCalculationModeAbsolute ) ); relativePosition.setVerticalPadding( KChart::Measure( 1.0, KChartEnums::MeasureCalculationModeAbsolute ) ); legend->setFloatingPosition( relativePosition ); widget.addLegend( legend ); widget.show(); return app.exec(); }
int main( int argc, char** argv ) { QApplication app( argc, argv ); Widget widget; widget.resize( 600, 600 ); QVector< double > vec0, vec1, vec2; vec0 << 5 << 1 << 3 << 4 << 1; vec1 << 3 << 6 << 2 << 4 << 8; vec2 << 0 << 7 << 1 << 2 << 1; widget.setDataset( 0, vec0, "vec0" ); widget.setDataset( 1, vec1, "vec1" ); widget.setDataset( 2, vec2, "vec2" ); widget.setSubType( Widget::Percent ); //Configure a pen and draw a line //a dot line for column 1 QPen pen; QBrush brush; pen.setWidth(3); pen.setStyle( Qt::DotLine ); pen.setColor( Qt::yellow ); brush.setColor( Qt::yellow ); // call your diagram and set the new pen // and brush widget.lineDiagram()->setPen( 1 , pen ); widget.lineDiagram()->setBrush( 1, brush ); //set up a legend Legend* legend = new Legend( &widget ); legend->setPosition( Position::East ); legend->setAlignment( Qt::AlignCenter ); legend->setOrientation( Qt::Vertical ); legend->setLegendStyle( Legend::LinesOnly ); legend->setShowLines( true ); widget.addLegend( legend ); //Set up your Attributes //display areas LineAttributes la( widget.lineDiagram()->lineAttributes() ); la.setDisplayArea( true ); la.setTransparency( 25 ); widget.lineDiagram()->setLineAttributes( la ); widget.show(); return app.exec(); }
void ExportImageDialog::addLegend(SkyQPainter *painter) { Legend legend = getLegendForSettings(); legend.paintLegend(painter); }
void KReportChartView::drawPivotChart(const PivotGrid &grid, const MyMoneyReport &config, int numberColumns, const QStringList& columnHeadings, const QList<ERowType>& rowTypeList, const QStringList& columnTypeHeaderList) { //set the number of columns setNumColumns(numberColumns); //set skipZero m_skipZero = config.isSkippingZero(); //remove existing headers while (headerFooters().count() > 0) { HeaderFooter* delHeader = headerFooters().at(0); takeHeaderFooter(delHeader); delete delHeader; } //make sure the model is clear m_model.removeColumns(0, m_model.columnCount()); m_model.removeRows(0, m_model.rowCount()); //set the new header HeaderFooter* header = new HeaderFooter(this); header->setText(config.name()); header->setType(HeaderFooter::Header); header->setPosition(Position::North); TextAttributes headerTextAttr(header->textAttributes()); headerTextAttr.setPen(m_foregroundBrush.color()); header->setTextAttributes(headerTextAttr); addHeaderFooter(header); // whether to limit the chart to use series totals only. Used for reports which only // show one dimension (pie). setSeriesTotals(false); // whether series (rows) are accounts (true) or months (false). This causes a lot // of complexity in the charts. The problem is that circular reports work best with // an account in a COLUMN, while line/bar prefer it in a ROW. setAccountSeries(true); switch (config.chartType()) { case MyMoneyReport::eChartNone: case MyMoneyReport::eChartEnd: case MyMoneyReport::eChartLine: { KDChart::LineDiagram* diagram = new KDChart::LineDiagram; if (config.isSkippingZero()) { LineAttributes attributes = diagram->lineAttributes(); attributes.setMissingValuesPolicy(LineAttributes::MissingValuesAreBridged); diagram->setLineAttributes(attributes); } CartesianCoordinatePlane* cartesianPlane = new CartesianCoordinatePlane; replaceCoordinatePlane(cartesianPlane); coordinatePlane()->replaceDiagram(diagram); break; } case MyMoneyReport::eChartBar: { KDChart::BarDiagram* diagram = new KDChart::BarDiagram; CartesianCoordinatePlane* cartesianPlane = new CartesianCoordinatePlane; replaceCoordinatePlane(cartesianPlane); coordinatePlane()->replaceDiagram(diagram); break; } case MyMoneyReport::eChartStackedBar: { KDChart::BarDiagram* diagram = new KDChart::BarDiagram; CartesianCoordinatePlane* cartesianPlane = new CartesianCoordinatePlane; replaceCoordinatePlane(cartesianPlane); diagram->setType(BarDiagram::Stacked); coordinatePlane()->replaceDiagram(diagram); break; } case MyMoneyReport::eChartPie: { KDChart::PieDiagram* diagram = new KDChart::PieDiagram; PolarCoordinatePlane* polarPlane = new PolarCoordinatePlane; replaceCoordinatePlane(polarPlane); coordinatePlane()->replaceDiagram(diagram); setAccountSeries(false); setSeriesTotals(true); break; } case MyMoneyReport::eChartRing: { KDChart::RingDiagram* diagram = new KDChart::RingDiagram; PolarCoordinatePlane* polarPlane = new PolarCoordinatePlane; replaceCoordinatePlane(polarPlane); polarPlane->replaceDiagram(diagram); //chartView.params()->setRelativeRingThickness( true ); setAccountSeries(false); break; } } //get the diagram for later use AbstractDiagram* planeDiagram = coordinatePlane()->diagram(); //set grid attributes GridAttributes gridAttr(coordinatePlane()->globalGridAttributes()); gridAttr.setGridVisible(config.isChartGridLines()); coordinatePlane()->setGlobalGridAttributes(gridAttr); //the palette - we set it here because it is a property of the diagram switch (KMyMoneySettings::chartsPalette()) { case 0: planeDiagram->useDefaultColors(); break; case 1: planeDiagram->useRainbowColors(); break; case 2: default: planeDiagram->useSubduedColors(); break; } //the legend will be used later Legend* legend = new Legend(planeDiagram, this); legend->setTitleText(i18nc("Chart legend title", "Legend")); //set up the axes for cartesian diagrams if (config.chartType() == MyMoneyReport::eChartLine || config.chartType() == MyMoneyReport::eChartBar || config.chartType() == MyMoneyReport::eChartStackedBar) { //set x axis CartesianAxis *xAxis = new CartesianAxis(); xAxis->setPosition(CartesianAxis::Bottom); xAxis->setTitleText(i18n("Time")); TextAttributes xAxisTitleTextAttr(xAxis->titleTextAttributes()); xAxisTitleTextAttr.setMinimalFontSize(KGlobalSettings::generalFont().pointSize()); xAxisTitleTextAttr.setPen(m_foregroundBrush.color()); xAxis->setTitleTextAttributes(xAxisTitleTextAttr); TextAttributes xAxisTextAttr(xAxis->textAttributes()); xAxisTextAttr.setPen(m_foregroundBrush.color()); xAxis->setTextAttributes(xAxisTextAttr); RulerAttributes xAxisRulerAttr(xAxis->rulerAttributes()); xAxisRulerAttr.setTickMarkPen(m_foregroundBrush.color()); xAxisRulerAttr.setShowRulerLine(true); xAxis->setRulerAttributes(xAxisRulerAttr); // Set up X axis labels (ie "abscissa" to use the technical term) QStringList abscissaNames; if (accountSeries()) { // if not, we will set these up while putting in the chart values. int column = 1; while (column < numColumns()) { abscissaNames += QString(columnHeadings[column++]).replace(" ", " "); } xAxis->setLabels(abscissaNames); } //set y axis KBalanceAxis *yAxis = new KBalanceAxis(); yAxis->setPosition(CartesianAxis::Left); // TODO // if the chart shows prices and no balance // the axis title should be 'Price' if (config.isIncludingPrice()) { yAxis->setTitleText(i18n("Price")); } else { yAxis->setTitleText(i18n("Balance")); } TextAttributes yAxisTitleTextAttr(yAxis->titleTextAttributes()); yAxisTitleTextAttr.setMinimalFontSize(KGlobalSettings::generalFont().pointSize()); yAxisTitleTextAttr.setPen(m_foregroundBrush.color()); yAxis->setTitleTextAttributes(yAxisTitleTextAttr); TextAttributes yAxisTextAttr(yAxis->textAttributes()); yAxisTextAttr.setPen(m_foregroundBrush.color()); yAxis->setTextAttributes(yAxisTextAttr); RulerAttributes yAxisRulerAttr(yAxis->rulerAttributes()); yAxisRulerAttr.setTickMarkPen(m_foregroundBrush.color()); yAxisRulerAttr.setShowRulerLine(true); yAxis->setRulerAttributes(yAxisRulerAttr); //add the axes to the corresponding diagram if (config.chartType() == MyMoneyReport::eChartLine) { KDChart::LineDiagram* lineDiagram = qobject_cast<LineDiagram*>(planeDiagram); lineDiagram->addAxis(xAxis); lineDiagram->addAxis(yAxis); } else if (config.chartType() == MyMoneyReport::eChartBar || config.chartType() == MyMoneyReport::eChartStackedBar) { KDChart::BarDiagram* barDiagram = qobject_cast<BarDiagram*>(planeDiagram); barDiagram->addAxis(xAxis); barDiagram->addAxis(yAxis); } } switch (config.detailLevel()) { case MyMoneyReport::eDetailNone: case MyMoneyReport::eDetailEnd: case MyMoneyReport::eDetailAll: { int rowNum = 0; // iterate over outer groups PivotGrid::const_iterator it_outergroup = grid.begin(); while (it_outergroup != grid.end()) { // iterate over inner groups PivotOuterGroup::const_iterator it_innergroup = (*it_outergroup).begin(); while (it_innergroup != (*it_outergroup).end()) { // // Rows // QString innergroupdata; PivotInnerGroup::const_iterator it_row = (*it_innergroup).begin(); while (it_row != (*it_innergroup).end()) { //Do not include investments accounts in the chart because they are merely container of stock and other accounts if (it_row.key().accountType() != MyMoneyAccount::Investment) { //iterate row types for (int i = 0; i < rowTypeList.size(); ++i) { //skip the budget difference rowset if (rowTypeList[i] != eBudgetDiff) { QString legendText; //only show the column type in the header if there is more than one type if (rowTypeList.size() > 1) { legendText = QString(columnTypeHeaderList[i] + " - " + it_row.key().name()); } else { legendText = QString(it_row.key().name()); } //set the cell value and tooltip rowNum = drawPivotRowSet(rowNum, it_row.value(), rowTypeList[i], legendText, 1, numColumns()); //set the legend text legend->setText(rowNum - 1, legendText); } } } ++it_row; } ++it_innergroup; } ++it_outergroup; } } break; case MyMoneyReport::eDetailTop: { int rowNum = 0; // iterate over outer groups PivotGrid::const_iterator it_outergroup = grid.begin(); while (it_outergroup != grid.end()) { // iterate over inner groups PivotOuterGroup::const_iterator it_innergroup = (*it_outergroup).begin(); while (it_innergroup != (*it_outergroup).end()) { //iterate row types for (int i = 0; i < rowTypeList.size(); ++i) { //skip the budget difference rowset if (rowTypeList[i] != eBudgetDiff) { QString legendText; //only show the column type in the header if there is more than one type if (rowTypeList.size() > 1) { legendText = QString(columnTypeHeaderList[i] + " - " + it_innergroup.key()); } else { legendText = QString(it_innergroup.key()); } //set the cell value and tooltip rowNum = drawPivotRowSet(rowNum, (*it_innergroup).m_total, rowTypeList[i], legendText, 1, numColumns()); //set the legend text legend->setText(rowNum - 1, legendText); } } ++it_innergroup; } ++it_outergroup; } } break; case MyMoneyReport::eDetailGroup: { int rowNum = 0; // iterate over outer groups PivotGrid::const_iterator it_outergroup = grid.begin(); while (it_outergroup != grid.end()) { //iterate row types for (int i = 0; i < rowTypeList.size(); ++i) { //skip the budget difference rowset if (rowTypeList[i] != eBudgetDiff) { QString legendText; //only show the column type in the header if there is more than one type if (rowTypeList.size() > 1) { legendText = QString(columnTypeHeaderList[i] + " - " + it_outergroup.key()); } else { legendText = QString(it_outergroup.key()); } //set the cell value and tooltip rowNum = drawPivotRowSet(rowNum, (*it_outergroup).m_total, rowTypeList[i], legendText, 1, numColumns()); //set the legend legend->setText(rowNum - 1, legendText); } } ++it_outergroup; } //if selected, show totals too if (config.isShowingRowTotals()) { //iterate row types for (int i = 0; i < rowTypeList.size(); ++i) { //skip the budget difference rowset if (rowTypeList[i] != eBudgetDiff) { QString legendText; //only show the column type in the header if there is more than one type if (rowTypeList.size() > 1) { legendText = QString(columnTypeHeaderList[i] + " - " + i18nc("Total balance", "Total")); } else { legendText = QString(i18nc("Total balance", "Total")); } //set the cell value rowNum = drawPivotRowSet(rowNum, grid.m_total, rowTypeList[i], legendText, 1, numColumns()); //set the legend legend->setText(rowNum - 1, legendText); } } } } break; case MyMoneyReport::eDetailTotal: { int rowNum = 0; //iterate row types for (int i = 0; i < rowTypeList.size(); ++i) { //skip the budget difference rowset if (rowTypeList[i] != eBudgetDiff) { QString legendText; //only show the column type in the header if there is more than one type if (rowTypeList.size() > 1) { legendText = QString(columnTypeHeaderList[i] + " - " + i18nc("Total balance", "Total")); } else { legendText = QString(i18nc("Total balance", "Total")); } if (config.isMixedTime() && (rowTypeList[i] == eActual || rowTypeList[i] == eForecast)) { if (rowTypeList[i] == eActual) { rowNum = drawPivotRowSet(rowNum, grid.m_total, rowTypeList[i], legendText, 1, config.currentDateColumn()); } else if (rowTypeList[i] == eForecast) { rowNum = drawPivotRowSet(rowNum, grid.m_total, rowTypeList[i], legendText, config.currentDateColumn(), numColumns()); } else { rowNum = drawPivotRowSet(rowNum, grid.m_total, rowTypeList[i], legendText, 1, numColumns()); } } else { //set cell value rowNum = drawPivotRowSet(rowNum, grid.m_total, rowTypeList[i], legendText, 1, numColumns()); } //set legend text legend->setText(rowNum - 1, legendText); } } } break; } //assign model to the diagram planeDiagram->setModel(&m_model); //set the legend basic attributes //this is done after adding the legend because the values are overridden when adding the legend to the chart for (uint i = static_cast<uint>(KMyMoneyGlobalSettings::maximumLegendItems()); i < legend->datasetCount(); ++i) { legend->setDatasetHidden(i, true); } legend->setTitleText(i18nc("Chart lines legend", "Legend")); legend->setUseAutomaticMarkerSize(false); FrameAttributes legendFrameAttr(legend->frameAttributes()); legendFrameAttr.setPen(m_foregroundBrush.color()); // leave some space between the content and the frame legendFrameAttr.setPadding(2); legend->setFrameAttributes(legendFrameAttr); legend->setPosition(Position::East); legend->setTextAlignment(Qt::AlignLeft); legend->setLegendStyle(KDChart::Legend::MarkersAndLines); replaceLegend(legend); // set the text attributes after calling replaceLegend() otherwise fon sizes will get overwritten qreal generalFontSize = KGlobalSettings::generalFont().pointSizeF(); if (generalFontSize == -1) generalFontSize = 8; // this is a fallback if the fontsize was specified in pixels TextAttributes legendTextAttr(legend->textAttributes()); legendTextAttr.setPen(m_foregroundBrush.color()); legendTextAttr.setFontSize(KDChart::Measure(generalFontSize, KDChartEnums::MeasureCalculationModeAbsolute)); legend->setTextAttributes(legendTextAttr); TextAttributes legendTitleTextAttr(legend->titleTextAttributes()); legendTitleTextAttr.setPen(m_foregroundBrush.color()); legendTitleTextAttr.setFontSize(KDChart::Measure(generalFontSize + 4, KDChartEnums::MeasureCalculationModeAbsolute)); legend->setTitleTextAttributes(legendTitleTextAttr); //this sets the line width only for line diagrams setLineWidth(config.chartLineWidth()); //set data value attributes //make sure to show only the required number of fractional digits on the labels of the graph DataValueAttributes dataValueAttr(planeDiagram->dataValueAttributes()); MarkerAttributes markerAttr(dataValueAttr.markerAttributes()); markerAttr.setVisible(true); markerAttr.setMarkerStyle(MarkerAttributes::MarkerCircle); markerAttr.setMarkerSize(QSize(8, 8)); dataValueAttr.setMarkerAttributes(markerAttr); TextAttributes dataValueTextAttr(dataValueAttr.textAttributes()); dataValueTextAttr.setPen(m_foregroundBrush.color()); dataValueAttr.setTextAttributes(dataValueTextAttr); dataValueAttr.setVisible(config.isChartDataLabels()); dataValueAttr.setDecimalDigits(MyMoneyMoney::denomToPrec(MyMoneyFile::instance()->baseCurrency().smallestAccountFraction())); planeDiagram->setDataValueAttributes(dataValueAttr); planeDiagram->setAllowOverlappingDataValueTexts(true); if (qMin(static_cast<uint>(KMyMoneyGlobalSettings::maximumLegendItems()), legend->datasetCount()) < 2) { // the legend is needed only if at least two data sets are rendered removeLegend(); } }
void testDiagramOwnership() { Legend* l = new Legend( m_chart ); QVERIFY( l->diagrams().size() == 0 ); l->addDiagram( m_lines ); QVERIFY( l->diagrams().size() == 1 ); l->addDiagram( m_bars ); QVERIFY( l->diagrams().size() == 2 ); QCOMPARE( dynamic_cast< LineDiagram * >(l->diagram()), m_lines ); l->removeDiagram( m_lines ); QVERIFY( l->diagrams().size() == 1 ); QCOMPARE( dynamic_cast< BarDiagram * >(l->diagram()), m_bars ); l->replaceDiagram( m_lines, m_bars ); QVERIFY( l->diagrams().size() == 1 ); QCOMPARE( dynamic_cast< LineDiagram * >(l->diagram()), m_lines ); }
void testLegendSettings() { Legend* l = new Legend( m_lines, m_chart ); QVERIFY( l->position() == Position::NorthEast ); QVERIFY( l->alignment() == Qt::AlignCenter ); QVERIFY( l->orientation() == Qt::Vertical ); QVERIFY( l->showLines() == false ); QVERIFY( !l->titleText().isEmpty() ); QVERIFY( l->spacing() == 1 ); QVERIFY( l->legendStyle() == Legend::MarkersOnly ); l->setPosition( Position::North ); l->setAlignment( Qt::AlignLeft ); l->setOrientation( Qt::Horizontal ); l->setShowLines( true ); l->setTitleText( QString( tr( "Lines" ) ) ); l->setSpacing( 2 ); l->setLegendStyle( Legend::LinesOnly ); QVERIFY( l->position() == Position::North ); QVERIFY( l->alignment() == Qt::AlignLeft ); QVERIFY( l->orientation() == Qt::Horizontal ); QVERIFY( l->showLines() == true ); QVERIFY( l->titleText() == QString( tr( "Lines" ) ) ); QVERIFY( l->spacing() == 2 ); QVERIFY( l->legendStyle() == Legend::LinesOnly ); }