12 #include "KDChartStockDiagram_p.h"
15 #include "KDChartPainterSaver_p.h"
34 void StockDiagram::init()
41 d->upTrendCandlestickBrush = QBrush(Qt::white);
42 d->downTrendCandlestickBrush = QBrush(Qt::black);
43 d->upTrendCandlestickPen = QPen(Qt::black);
44 d->downTrendCandlestickPen = QPen(Qt::black);
46 d->lowHighLinePen = QPen(Qt::black);
74 QVariant::fromValue(attr),
106 QVariant::fromValue(attr),
155 d->lowHighLinePen =
pen;
160 return d->lowHighLinePen;
165 d->lowHighLinePens[column] =
pen;
170 if (
d->lowHighLinePens.contains(column))
171 return d->lowHighLinePens[column];
172 return d->lowHighLinePen;
177 d->upTrendCandlestickBrush =
brush;
182 return d->upTrendCandlestickBrush;
187 d->downTrendCandlestickBrush =
brush;
192 return d->downTrendCandlestickBrush;
197 d->upTrendCandlestickBrushes[column] =
brush;
202 if (
d->upTrendCandlestickBrushes.contains(column))
203 return d->upTrendCandlestickBrushes[column];
204 return d->upTrendCandlestickBrush;
209 d->downTrendCandlestickBrushes[column] =
brush;
214 if (
d->downTrendCandlestickBrushes.contains(column))
215 return d->downTrendCandlestickBrushes[column];
216 return d->downTrendCandlestickBrush;
221 d->upTrendCandlestickPen =
pen;
226 return d->upTrendCandlestickPen;
231 d->downTrendCandlestickPen =
pen;
236 return d->downTrendCandlestickPen;
241 d->upTrendCandlestickPens[column] =
pen;
246 if (
d->upTrendCandlestickPens.contains(column))
247 return d->upTrendCandlestickPens[column];
248 return d->upTrendCandlestickPen;
253 d->downTrendCandlestickPens[column] =
pen;
258 if (
d->downTrendCandlestickPens.contains(column))
259 return d->downTrendCandlestickPens[column];
260 return d->downTrendCandlestickPen;
263 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && defined(Q_COMPILER_MANGLES_RETURN_TYPE)
272 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && defined(Q_COMPILER_MANGLES_RETURN_TYPE)
285 d->reverseMapper.clear();
287 PainterSaver painterSaver(context->
painter());
291 for (
int col = 0; col < colCount; ++col) {
292 for (
int row = 0; row < rowCount; row++) {
293 CartesianDiagramDataCompressor::DataPoint low;
294 CartesianDiagramDataCompressor::DataPoint high;
295 CartesianDiagramDataCompressor::DataPoint open;
296 CartesianDiagramDataCompressor::DataPoint close;
297 CartesianDiagramDataCompressor::DataPoint volume;
300 const CartesianDiagramDataCompressor::CachePosition highPos(row, col * divisor);
301 const CartesianDiagramDataCompressor::CachePosition lowPos(row, col * divisor + 1);
302 const CartesianDiagramDataCompressor::CachePosition closePos(row, col * divisor + 2);
303 low =
d->compressor.data(lowPos);
304 high =
d->compressor.data(highPos);
305 close =
d->compressor.data(closePos);
307 const CartesianDiagramDataCompressor::CachePosition openPos(row, col * divisor);
308 const CartesianDiagramDataCompressor::CachePosition highPos(row, col * divisor + 1);
309 const CartesianDiagramDataCompressor::CachePosition lowPos(row, col * divisor + 2);
310 const CartesianDiagramDataCompressor::CachePosition closePos(row, col * divisor + 3);
311 open =
d->compressor.data(openPos);
312 low =
d->compressor.data(lowPos);
313 high =
d->compressor.data(highPos);
314 close =
d->compressor.data(closePos);
322 if (close.index.isValid() && low.index.isValid() && high.index.isValid())
323 d->drawOHLCBar(col, open, high, low, close, context);
326 d->drawCandlestick(col, open, high, low, close, context);
335 d->compressor.setResolution(
static_cast<int>(size.width() *
coordinatePlane()->zoomFactorX()),
338 QAbstractItemView::resize(size.toSize());
360 qreal xMax = rowCount;
363 for (
int row = 0; row < rowCount; row++) {
364 for (
int col = 0; col < colCount; col++) {
365 const CartesianDiagramDataCompressor::CachePosition pos(row, col);
366 const CartesianDiagramDataCompressor::DataPoint point =
d->compressor.data(pos);
367 yMax = qMax(yMax, point.value);
368 yMin = qMin(yMin, point.value);
371 return QPair<QPointF, QPointF>(QPointF(xMin, yMin), QPointF(xMax, yMax));
Base class for diagrams based on a cartesian coordianate system.
virtual AttributesModel * attributesModel() const
void setPen(const QModelIndex &index, const QPen &pen)
QModelIndex attributesModelRootIndex() const
returns a QModelIndex pointing into the AttributesModel that corresponds to the root index of the dia...
AbstractCoordinatePlane * coordinatePlane() const
void setDataBoundariesDirty() const
void setDatasetDimensionInternal(int dimension)
int rowCount(const QModelIndex &) const override
QVariant modelData(int role) const
int columnCount(const QModelIndex &) const override
bool setModelData(const QVariant value, int role)
Cartesian coordinate plane.
Stores information about painting diagrams.
QPainter * painter() const
Attributes to customize the appearance of a column in a stock chart.
const QPair< QPointF, QPointF > calculateDataBoundaries() const override
void setDownTrendCandlestickBrush(const QBrush &brush)
void setThreeDBarAttributes(const ThreeDBarAttributes &attr)
ThreeDBarAttributes threeDBarAttributes() const
void resize(const QSizeF &size) override
void setUpTrendCandlestickBrush(const QBrush &brush)
QPen downTrendCandlestickPen() const
StockBarAttributes stockBarAttributes() const
void setStockBarAttributes(const StockBarAttributes &attr)
int numberOfOrdinateSegments() const override
void paint(PaintContext *paintContext) override
QPen lowHighLinePen() const
QBrush upTrendCandlestickBrush() const
qreal threeDItemDepth(int column) const override
void setDownTrendCandlestickPen(const QPen &pen)
void setUpTrendCandlestickPen(const QPen &pen)
int numberOfAbscissaSegments() const override
void setLowHighLinePen(const QPen &pen)
QPen upTrendCandlestickPen() const
QBrush downTrendCandlestickBrush() const
StockDiagram(QWidget *parent=nullptr, CartesianCoordinatePlane *plane=nullptr)
A set of 3D bar attributes.
@ ThreeDBarAttributesRole