bool Surface::loadOdf( const KoXmlElement &surfaceElement, KoShapeLoadingContext &context ) { KoStyleStack &styleStack = context.odfLoadingContext().styleStack(); styleStack.save(); if ( surfaceElement.hasAttributeNS( KoXmlNS::chart, "style-name" ) ) { KDChart::BackgroundAttributes backgroundAttributes = d->kdPlane->backgroundAttributes(); KDChart::FrameAttributes frameAttributes = d->kdPlane->frameAttributes(); styleStack.clear(); context.odfLoadingContext().fillStyleStack( surfaceElement, KoXmlNS::chart, "style-name", "chart" ); styleStack.setTypeProperties( "graphic" ); if ( styleStack.hasProperty( KoXmlNS::draw, "stroke" ) ) { frameAttributes.setVisible( true ); QString stroke = styleStack.property( KoXmlNS::draw, "stroke" ); if( stroke == "solid" || stroke == "dash" ) { QPen pen = KoOdfGraphicStyles::loadOdfStrokeStyle( styleStack, stroke, context.odfLoadingContext().stylesReader() ); frameAttributes.setPen( pen ); } } if ( styleStack.hasProperty( KoXmlNS::draw, "fill" ) ) { backgroundAttributes.setVisible( true ); QBrush brush; QString fill = styleStack.property( KoXmlNS::draw, "fill" ); if ( fill == "solid" || fill == "hatch" ) brush = KoOdfGraphicStyles::loadOdfFillStyle( styleStack, fill, context.odfLoadingContext().stylesReader() ); else if ( fill == "gradient" ) { brush = KoOdfGraphicStyles::loadOdfGradientStyle( styleStack, context.odfLoadingContext().stylesReader(), QSizeF( 5.0, 60.0 ) ); } else if ( fill == "bitmap" ) brush = KoOdfGraphicStyles::loadOdfPatternStyle( styleStack, context.odfLoadingContext(), QSizeF( 5.0, 60.0 ) ); backgroundAttributes.setBrush( brush ); } d->kdPlane->setBackgroundAttributes( backgroundAttributes ); d->kdPlane->setFrameAttributes( frameAttributes ); } styleStack.restore(); return true; }
int main(int argc, char *argv[]) { QApplication a(argc, argv); KDChart::Chart chart; QStandardItemModel model; const double offset = 600; model.setRowCount( 100 ); model.setColumnCount( 2 ); // 1 data set for ( int i = 0; i < 100; ++i ) { double t = i + offset; double v = i + offset; QModelIndex index = model.index( i, 0 ); model.setData( index, t ); index = model.index( i, 1 ); model.setData( index, v ); } model.setHeaderData( 0, Qt::Horizontal, "Dataset 1" ); // general chart layout KDChart::FrameAttributes fm = chart.frameAttributes(); fm.setVisible( true ); fm.setPen( QPen( Qt::black ) ); chart.setFrameAttributes( fm ); chart.setGlobalLeading( 10, 0, 10, 10 ); KDChart::BackgroundAttributes chart_bg; chart_bg.setBrush( Qt::white ); chart_bg.setVisible( true ); chart.setBackgroundAttributes( chart_bg ); // coordinate plane setup KDChart::AbstractCoordinatePlane * plane1 = chart.coordinatePlane(); plane1->setRubberBandZoomingEnabled( true ); // create cartesian diagrams KDChart::Plotter * plotter = new KDChart::Plotter; plotter->setAntiAliasing( false ); plotter->setModel( &model ); plane1->replaceDiagram( plotter ); // customize grids KDChart::CartesianCoordinatePlane * cp1 = static_cast< KDChart::CartesianCoordinatePlane * >( plane1 ); KDChart::GridAttributes gv = cp1->gridAttributes( Qt::Vertical ); QPen gridPen( QColor( 200, 100, 100 ) ); gridPen.setStyle( Qt::DashLine ); gv.setGridPen( gridPen ); gridPen.setStyle( Qt::DotLine ); gridPen.setColor( QColor( 255,155,155 ) ); gv.setSubGridPen( gridPen ); cp1->setGridAttributes( Qt::Vertical, gv ); // Enable isometric scaling cp1->setIsometricScaling( true ); // axis KDChart::CartesianAxis * xAxis = new KDChart::CartesianAxis( plotter ); xAxis->setPosition( KDChart::CartesianAxis::Bottom ); xAxis->setTitleText("X-Title"); KDChart::TextAttributes att = xAxis->titleTextAttributes(); QFont f = att.font(); f.setBold( true ); att.setFont( f ); att.setAutoShrink( true ); att.setFontSize( KDChart::Measure( 16 ) ); xAxis->setTitleTextAttributes( att ); KDChart::CartesianAxis * y1Axis = new KDChart::CartesianAxis( plotter ); y1Axis->setPosition( KDChart::CartesianAxis::Left ); y1Axis->setTitleText( "Y-Title" ); att = y1Axis->titleTextAttributes(); f = att.font(); f.setBold( true ); att.setFont( f ); att.setAutoShrink( true ); att.setFontSize( KDChart::Measure( 16 ) ); y1Axis->setTitleTextAttributes( att ); // add the axis to the plotter plotter->addAxis( xAxis ); plotter->addAxis( y1Axis ); // create legend KDChart::Legend * legend = new KDChart::Legend( plotter, &chart ); chart.addLegend( legend ); att = legend->textAttributes(); f = att.font(); f.setBold( false ); att.setFont( f ); att.setAutoShrink( true ); legend->setTextAttributes( att ); legend->setPosition( KDChart::Position::East ); legend->setAlignment( Qt::AlignCenter ); legend->setTitleText( "Curves" ); att = legend->titleTextAttributes(); f = att.font(); f.setBold( true ); att.setFont( f ); att.setAutoShrink( true ); att.setFontSize( KDChart::Measure( 16 ) ); legend->setTitleTextAttributes( att ); KDChart::BackgroundAttributes legend_bg; legend_bg.setBrush( Qt::white ); legend_bg.setVisible( true ); legend->setBackgroundAttributes( legend_bg ); KDChart::DataValueAttributes attr = plotter->dataValueAttributes(); KDChart::TextAttributes tattr = attr.textAttributes(); tattr.setFontSize( KDChart::Measure( 12, KDChartEnums::MeasureCalculationModeAbsolute ) ); tattr.setRotation( 0 ); attr.setTextAttributes( tattr ); plotter->setDataValueAttributes( attr ); // customize marker properties // Dataset 1 : green, MarkerRing, no line QColor SERIES_1_OUTLINE = QColor( 0, 128, 0 ); attr = plotter->dataValueAttributes( 0 ); KDChart::MarkerAttributes mattr = attr.markerAttributes(); mattr.setMarkerColor( SERIES_1_OUTLINE ); // mattr.setMarkerStyle( KDChart::MarkerAttributes::MarkerRing ); mattr.setMarkerSize( QSizeF( 6.0, 6.0 ) ); mattr.setVisible( true ); attr.setMarkerAttributes( mattr ); attr.setVisible( true ); plotter->setDataValueAttributes( 0, attr ); plotter->setPen( 0, Qt::NoPen ); chart.show(); return a.exec(); }
bool Surface::loadOdf(const KoXmlElement &surfaceElement, KoShapeLoadingContext &context) { // Get the current style stack and save it's state. KoStyleStack &styleStack = context.odfLoadingContext().styleStack(); bool brushLoaded = false; if (surfaceElement.hasAttributeNS(KoXmlNS::chart, "style-name")) { KDChart::BackgroundAttributes backgroundAttributes = d->kdPlane->backgroundAttributes(); KDChart::FrameAttributes frameAttributes = d->kdPlane->frameAttributes(); // Add the chart style to the style stack. styleStack.clear(); context.odfLoadingContext().fillStyleStack(surfaceElement, KoXmlNS::chart, "style-name", "chart"); styleStack.setTypeProperties("graphic"); // If there is a "stroke" property, then get the stroke style // and set the pen accordingly. if (styleStack.hasProperty(KoXmlNS::draw, "stroke")) { frameAttributes.setVisible(true); QString stroke = styleStack.property(KoXmlNS::draw, "stroke"); QPen pen(Qt::NoPen); if (stroke == "solid" || stroke == "dash") pen = KoOdfGraphicStyles::loadOdfStrokeStyle(styleStack, stroke, context.odfLoadingContext().stylesReader()); frameAttributes.setPen(pen); } // If there is a "fill" property, then get the fill style, and // set the brush for the surface accordingly. if (styleStack.hasProperty(KoXmlNS::draw, "fill")) { backgroundAttributes.setVisible(true); QBrush brush; QString fill = styleStack.property(KoXmlNS::draw, "fill"); if (fill == "solid" || fill == "hatch") { brushLoaded = true; brush = KoOdfGraphicStyles::loadOdfFillStyle(styleStack, fill, context.odfLoadingContext().stylesReader()); } else if (fill == "gradient") { brushLoaded = true; brush = KoOdfGraphicStyles::loadOdfGradientStyle(styleStack, context.odfLoadingContext().stylesReader(), QSizeF(5.0, 60.0)); } else if (fill == "bitmap") { brushLoaded = true; brush = loadOdfPatternStyle(styleStack, context.odfLoadingContext(), QSizeF(5.0, 60.0)); } backgroundAttributes.setBrush(brush); } // Finally actually set the attributes. d->kdPlane->setBackgroundAttributes(backgroundAttributes); d->kdPlane->setFrameAttributes(frameAttributes); } #ifndef NWORKAROUND_ODF_BUGS if (!brushLoaded) { KDChart::BackgroundAttributes backgroundAttributes = d->kdPlane->backgroundAttributes(); QColor fillColor = KoOdfWorkaround::fixMissingFillColor(surfaceElement, context); if (fillColor.isValid()) { backgroundAttributes.setVisible(true); backgroundAttributes.setBrush(fillColor); d->kdPlane->setBackgroundAttributes(backgroundAttributes); } } #endif return true; }