12#include "KDChartAbstractDiagram_p.h"
14#include <QAbstractProxyModel>
15#include <QApplication>
25#include "KDChartPainterSaver_p.h"
29#include <KDABLibFakes>
51void AbstractDiagram::init()
54 d->reverseMapper.setDiagram(
this);
86 if (
d->databoundariesDirty) {
88 d->databoundariesDirty =
false;
90 return d->databoundaries;
95 d->databoundariesDirty =
true;
106 amodel->initFrom(
d->attributesModel);
146 qWarning(
"KDChart::AbstractDiagram::setAttributesModel() failed: "
147 "Trying to set an attributesmodel which works on a different "
148 "model than the diagram.");
152 qWarning(
"KDChart::AbstractDiagram::setAttributesModel() failed: "
153 "Trying to set an attributesmodel that is private to another diagram.");
165 return d->usesExternalAttributesModel();
170 return d->attributesModel;
189 d->attributesModelRootIndex =
idx;
198 if (!
d->attributesModelRootIndex.isValid())
199 d->attributesModelRootIndex =
d->attributesModel->mapFromSource(
rootIndex());
200 return d->attributesModelRootIndex;
211 d->plane->layoutDiagrams();
214 QAbstractItemView::doItemsLayout();
230 d->attributesModel->setData(
231 conditionallyMapFromSource(index),
315 conditionallyMapFromSource(index),
331 d->allowOverlappingDataValueTexts =
allow;
337 return d->allowOverlappingDataValueTexts;
348 return d->antiAliasing;
353 d->percent = percent;
367 d->paintDataValueText(painter, index,
pos, value);
376 d->forgetAlreadyPaintedDataValues();
380 for (
int row = 0; row < rowCount; ++row) {
413 if (
ma.markerColor().isValid())
469 if (markerAttributes.
threeD()) {
473 grad.setCenter(0.5, 0.5);
475 grad.setFocalPoint(0.35, 0.35);
497 QPointF top, left, bottom, right;
538 for (
int i = 0;
i < 12; ++
i)
545 QPointF left, right, top, bottom;
570 "Type item does not match a defined Marker Type.");
585 for (
int row = 0; row < rowCount; ++row) {
604 conditionallyMapFromSource(index),
638 conditionallyMapFromSource(index),
646 conditionallyMapFromSource(index),
690 d->unitPrefixMap[column][orientation] = prefix;
700 d->unitPrefix[orientation] = prefix;
711 d->unitSuffixMap[column][orientation] = suffix;
721 d->unitSuffix[orientation] = suffix;
733 if (!
fallback ||
d->unitPrefixMap[column].contains(orientation))
734 return d->unitPrefixMap[column][orientation];
735 return d->unitPrefix[orientation];
744 return d->unitPrefix[orientation];
756 if (!
fallback ||
d->unitSuffixMap[column].contains(orientation))
757 return d->unitSuffixMap[column][orientation];
758 return d->unitSuffix[orientation];
767 return d->unitSuffix[orientation];
773 return d->reverseMapper.boundingRect(index.
row(), index.
column()).toRect();
804 const QModelIndexList indexes =
d->indexesIn(
rect);
817 polygon <<
d->reverseMapper.polygon(index.
row(), index.
column());
849 for (
int i = 0;
i < rowCount; ++
i) {
863 const int datasetCount =
d->datasetCount();
864 for (
int i = 0;
i < datasetCount; ++
i) {
876 const int datasetCount =
d->datasetCount();
877 for (
int i = 0;
i < datasetCount; ++
i) {
889 const int datasetCount =
d->datasetCount();
890 for (
int i = 0;
i < datasetCount; ++
i) {
902 const int datasetCount =
d->datasetCount();
903 for (
int i = 0;
i < datasetCount; ++
i) {
913 "There is no usable model set, for the diagram.");
916 "There is no usable coordinate plane set, for the diagram.");
923 return d->datasetDimension;
929 qDebug() <<
"Setting the dataset dimension using AbstractDiagram::setDatasetDimension is "
930 "obsolete. Use the specific diagram types instead.";
940 d->attributesModel->setDatasetDimension(
dimension);
948 qWarning() <<
"AbstractDiagram::valueForCell(): Requesting value for invalid index!";
949 return std::numeric_limits<qreal>::quiet_NaN();
951 return d->attributesModel->data(
965 return d->indexAt(point);
970 return d->indexesAt(point);
975 return d->indexesIn(
rect);
Declaring the class KDChart::DataValueAttributes.
QPointF translate(const TernaryPoint &point)
Base class common for all coordinate planes, CartesianCoordinatePlane, PolarCoordinatePlane,...
AbstractDiagram defines the interface for diagram classes.
void setModel(QAbstractItemModel *model) override
void setDataValueAttributes(const QModelIndex &index, const DataValueAttributes &a)
virtual Q_DECL_DEPRECATED void paintDataValueTexts(QPainter *painter)
virtual AttributesModel * attributesModel() const
bool compare(const AbstractDiagram *other) const
void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) override
int verticalOffset() const override
void setUnitPrefix(const QString &prefix, int column, Qt::Orientation orientation)
virtual bool checkInvariants(bool justReturnTheStatus=false) const
void setPen(const QModelIndex &index, const QPen &pen)
virtual void paintMarker(QPainter *painter, const MarkerAttributes &markerAttributes, const QBrush &brush, const QPen &, const QPointF &point, const QSizeF &size)
int horizontalOffset() const override
~AbstractDiagram() override
QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override
DataValueAttributes dataValueAttributes() const
void paintDataValueText(QPainter *painter, const QModelIndex &index, const QPointF &pos, qreal value)
void setAntiAliasing(bool enabled)
QStringList datasetLabels() const
QRect visualRect(const QModelIndex &index) const override
void layoutChanged(AbstractDiagram *)
AbstractDiagram(Private *p, QWidget *parent, AbstractCoordinatePlane *plane)
QModelIndex attributesModelRootIndex() const
returns a QModelIndex pointing into the AttributesModel that corresponds to the root index of the dia...
const QPair< QPointF, QPointF > dataBoundaries() const
Return the bottom left and top right data point, that the diagram will display (unless the grid adjus...
void scrollTo(const QModelIndex &index, ScrollHint hint=EnsureVisible) override
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector< int > &roles=QVector< int >()) override
QList< QBrush > datasetBrushes() const
virtual void setAttributesModel(AttributesModel *model)
Sets an external AttributesModel on this diagram.
virtual const QPair< QPointF, QPointF > calculateDataBoundaries() const =0
Q_DECL_DEPRECATED qreal valueForCell(int row, int column) const
QString unitPrefix(int column, Qt::Orientation orientation, bool fallback=false) const
bool allowOverlappingDataValueTexts() const
AbstractCoordinatePlane * coordinatePlane() const
void setHidden(const QModelIndex &index, bool hidden)
bool isIndexHidden(const QModelIndex &index) const override
QList< QPen > datasetPens() const
void setDataBoundariesDirty() const
void setUnitSuffix(const QString &suffix, int column, Qt::Orientation orientation)
QModelIndexList indexesIn(const QRect &rect) const
void setBrush(const QModelIndex &index, const QBrush &brush)
Q_DECL_DEPRECATED void setPercentMode(bool percent)
Deprecated method that turns the percent mode of this diagram on or off.
void setAllowOverlappingDataValueTexts(bool allow)
QStringList itemRowLabels() const
bool percentMode() const
Returns whether this diagram is drawn in percent mode.
void setSelectionModel(QItemSelectionModel *selectionModel) override
Q_DECL_DEPRECATED void setDatasetDimension(int dimension)
virtual bool usesExternalAttributesModel() const
int datasetDimension() const
virtual void setCoordinatePlane(AbstractCoordinatePlane *plane)
QModelIndex indexAt(const QPoint &point) const override
bool antiAliasing() const
QModelIndexList indexesAt(const QPoint &point) const
void setRootIndex(const QModelIndex &idx) override
Reimplemented for internal purposes.
virtual QRegion visualRegion(const QModelIndex &index) const
virtual Q_DECL_DEPRECATED void paintMarkers(QPainter *painter)
void aboutToBeDestroyed()
QList< MarkerAttributes > datasetMarkers() const
void doItemsLayout() override
QString unitSuffix(int column, Qt::Orientation orientation, bool fallback=false) const
void setAttributesModelRootIndex(const QModelIndex &)
void setDatasetDimensionInternal(int dimension)
QRegion visualRegionForSelection(const QItemSelection &selection) const override
QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override
Reimplemented for internal purposes.
A proxy model used for decorating data with attributes.
QVariant data(int role) const
int rowCount(const QModelIndex &) const override
QVariant modelData(int role) const
bool compare(const AttributesModel *other) const
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::DisplayRole) override
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
bool setModelData(const QVariant value, int role)
Diagram attributes dealing with data value labels.
MarkerAttributes markerAttributes() const
A set of attributes controlling the appearance of data set markers.
QPainterPath customMarkerPath() const
static QPen scalePen(const QPen &pen)
Internally used class just adding a special constructor used by AbstractDiagram.
@ DataValueLabelAttributesRole
virtual int columnCount(const QModelIndex &parent) const const=0
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const const=0
virtual int rowCount(const QModelIndex &parent) const const=0
QAbstractItemModel * model() const const
QModelIndex rootIndex() const const
void scheduleDelayedItemsLayout()
QItemSelectionModel * selectionModel() const const
virtual void setModel(QAbstractItemModel *model)
virtual void setRootIndex(const QModelIndex &index)
virtual void setSelectionModel(QItemSelectionModel *selectionModel)
const QColor & color() const const
QColor lighter(int factor) const const
void setCoordinateMode(QGradient::CoordinateMode mode)
QModelIndexList indexes() const const
void currentChanged(const QModelIndex ¤t, const QModelIndex &previous)
virtual void select(const QModelIndex &index, QItemSelectionModel::SelectionFlags command)
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
void append(const T &value)
QVariant data(int role) const const
bool isValid() const const
const QAbstractItemModel * model() const const
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
QObject * parent() const const
T qobject_cast(QObject *object)
void drawEllipse(const QRectF &rectangle)
void drawLine(const QLineF &line)
void drawPath(const QPainterPath &path)
void drawPoint(const QPointF &position)
void drawPolygon(const QPointF *points, int pointCount, Qt::FillRule fillRule)
void drawRect(const QRectF &rectangle)
const QPen & pen() const const
void scale(qreal sx, qreal sy)
void setBrush(const QBrush &brush)
void setPen(const QColor &color)
void setRenderHint(QPainter::RenderHint hint, bool on)
void translate(const QPointF &offset)
QRectF boundingRect() const const
QPolygon toPolygon() const const
qreal height() const const
typedef KeyboardModifiers
QVariant fromValue(const T &value)
qreal toReal(bool *ok) const const
QString toString() const const
bool isEmpty() const const