SimCenterCommon
Common functionality used within different SimCenter projects
qcustomplot.h
Go to the documentation of this file.
1 /***************************************************************************
2 ** **
3 ** QCustomPlot, an easy to use, modern plotting widget for Qt **
4 ** Copyright (C) 2011-2016 Emanuel Eichhammer **
5 ** **
6 ** This program is free software: you can redistribute it and/or modify **
7 ** it under the terms of the GNU General Public License as published by **
8 ** the Free Software Foundation, either version 3 of the License, or **
9 ** (at your option) any later version. **
10 ** **
11 ** This program is distributed in the hope that it will be useful, **
12 ** but WITHOUT ANY WARRANTY; without even the implied warranty of **
13 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the **
14 ** GNU General Public License for more details. **
15 ** **
16 ** You should have received a copy of the GNU General Public License **
17 ** along with this program. If not, see http://www.gnu.org/licenses/. **
18 ** **
19 ****************************************************************************
20 ** Author: Emanuel Eichhammer **
21 ** Website/Contact: http://www.qcustomplot.com/ **
22 ** Date: 13.09.16 **
23 ** Version: 2.0.0-beta **
24 ****************************************************************************/
25 
26 #ifndef QCUSTOMPLOT_H
27 #define QCUSTOMPLOT_H
28 
29 #include <QtCore/qglobal.h>
30 
31 // some Qt version/configuration dependent macros to include or exclude certain code paths:
32 #ifdef QCUSTOMPLOT_USE_OPENGL
33 # if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
34 # define QCP_OPENGL_PBUFFER
35 # else
36 # define QCP_OPENGL_FBO
37 # endif
38 # if QT_VERSION >= QT_VERSION_CHECK(5, 3, 0)
39 # define QCP_OPENGL_OFFSCREENSURFACE
40 # endif
41 #endif
42 
43 #if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
44  #define QCP_DEVICEPIXELRATIO_SUPPORTED
45 #endif
46 
47 #include <QtCore/QObject>
48 #include <QtCore/QPointer>
49 #include <QtCore/QSharedPointer>
50 #include <QtCore/QTimer>
51 #include <QtGui/QPainter>
52 #include <QtGui/QPaintEvent>
53 #include <QtGui/QMouseEvent>
54 #include <QtGui/QWheelEvent>
55 #include <QtGui/QPixmap>
56 #include <QtCore/QVector>
57 #include <QtCore/QString>
58 #include <QtCore/QDateTime>
59 #include <QtCore/QMultiMap>
60 #include <QtCore/QFlags>
61 #include <QtCore/QDebug>
62 #include <QtCore/QStack>
63 #include <QtCore/QCache>
64 #include <QtCore/QMargins>
65 #include <qmath.h>
66 #include <limits>
67 #include <algorithm>
68 #ifdef QCP_OPENGL_FBO
69 # include <QtGui/QOpenGLContext>
70 # include <QtGui/QOpenGLFramebufferObject>
71 # ifdef QCP_OPENGL_OFFSCREENSURFACE
72 # include <QtGui/QOffscreenSurface>
73 # else
74 # include <QtGui/QWindow>
75 # endif
76 #endif
77 #ifdef QCP_OPENGL_PBUFFER
78 # include <QtOpenGL/QGLPixelBuffer>
79 #endif
80 #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
81 # include <qnumeric.h>
82 # include <QtGui/QWidget>
83 # include <QtGui/QPrinter>
84 # include <QtGui/QPrintEngine>
85 #else
86 # include <QtNumeric>
87 # include <QtWidgets/QWidget>
88 # include <QtPrintSupport/QtPrintSupport>
89 #endif
90 
91 class QCPPainter;
92 class QCustomPlot;
93 class QCPLayerable;
94 class QCPLayoutElement;
95 class QCPLayout;
96 class QCPAxis;
97 class QCPAxisRect;
100 class QCPGraph;
101 class QCPAbstractItem;
103 class QCPLegend;
104 class QCPItemPosition;
105 class QCPLayer;
107 class QCPSelectionRect;
108 class QCPColorMap;
109 class QCPColorScale;
110 class QCPBars;
111 
112 /* including file 'src/global.h', size 16131 */
113 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
114 
115 // decl definitions for shared library compilation/usage:
116 #if defined(QCUSTOMPLOT_COMPILE_LIBRARY)
117 # define QCP_LIB_DECL Q_DECL_EXPORT
118 #elif defined(QCUSTOMPLOT_USE_LIBRARY)
119 # define QCP_LIB_DECL Q_DECL_IMPORT
120 #else
121 # define QCP_LIB_DECL
122 #endif
123 
124 // define empty macro for Q_DECL_OVERRIDE if it doesn't exist (Qt < 5)
125 #ifndef Q_DECL_OVERRIDE
126 # define Q_DECL_OVERRIDE
127 #endif
128 
135 #ifndef Q_MOC_RUN
136 namespace QCP {
137 #else
138 class QCP { // when in moc-run, make it look like a class, so we get Q_GADGET, Q_ENUMS/Q_FLAGS features in namespace
139  Q_GADGET
140  Q_ENUMS(ExportPen)
141  Q_ENUMS(ResolutionUnit)
142  Q_ENUMS(SignDomain)
143  Q_ENUMS(MarginSide)
144  Q_FLAGS(MarginSides)
145  Q_ENUMS(AntialiasedElement)
146  Q_FLAGS(AntialiasedElements)
147  Q_ENUMS(PlottingHint)
148  Q_FLAGS(PlottingHints)
149  Q_ENUMS(Interaction)
150  Q_FLAGS(Interactions)
151  Q_ENUMS(SelectionRectMode)
152  Q_ENUMS(SelectionType)
153 public:
154 #endif
155 
165  };
166 
174  };
175 
186  };
187 
193 enum MarginSide { msLeft = 0x01
194  ,msRight = 0x02
195  ,msTop = 0x04
196  ,msBottom = 0x08
197  ,msAll = 0xFF
198  ,msNone = 0x00
199  };
200 Q_DECLARE_FLAGS(MarginSides, MarginSide)
201 
202 
211 enum AntialiasedElement { aeAxes = 0x0001
212  ,aeGrid = 0x0002
213  ,aeSubGrid = 0x0004
214  ,aeLegend = 0x0008
215  ,aeLegendItems = 0x0010
216  ,aePlottables = 0x0020
217  ,aeItems = 0x0040
218  ,aeScatters = 0x0080
219  ,aeFills = 0x0100
220  ,aeZeroLine = 0x0200
221  ,aeOther = 0x8000
222  ,aeAll = 0xFFFF
223  ,aeNone = 0x0000
224  };
225 Q_DECLARE_FLAGS(AntialiasedElements, AntialiasedElement)
226 
227 
232 enum PlottingHint { phNone = 0x000
233  ,phFastPolylines = 0x001
234  ,phImmediateRefresh = 0x002
236  ,phCacheLabels = 0x004
238  };
239 Q_DECLARE_FLAGS(PlottingHints, PlottingHint)
240 
241 
248 enum Interaction { iRangeDrag = 0x001
249  ,iRangeZoom = 0x002
250  ,iMultiSelect = 0x004
252  ,iSelectAxes = 0x010
253  ,iSelectLegend = 0x020
254  ,iSelectItems = 0x040
255  ,iSelectOther = 0x080
256  };
257 Q_DECLARE_FLAGS(Interactions, Interaction)
258 
259 
268  };
269 
293  };
294 
301 inline bool isInvalidData(double value)
302 {
303  return qIsNaN(value) || qIsInf(value);
304 }
305 
311 inline bool isInvalidData(double value1, double value2)
312 {
313  return isInvalidData(value1) || isInvalidData(value2);
314 }
315 
322 inline void setMarginValue(QMargins &margins, QCP::MarginSide side, int value)
323 {
324  switch (side)
325  {
326  case QCP::msLeft: margins.setLeft(value); break;
327  case QCP::msRight: margins.setRight(value); break;
328  case QCP::msTop: margins.setTop(value); break;
329  case QCP::msBottom: margins.setBottom(value); break;
330  case QCP::msAll: margins = QMargins(value, value, value, value); break;
331  default: break;
332  }
333 }
334 
342 inline int getMarginValue(const QMargins &margins, QCP::MarginSide side)
343 {
344  switch (side)
345  {
346  case QCP::msLeft: return margins.left();
347  case QCP::msRight: return margins.right();
348  case QCP::msTop: return margins.top();
349  case QCP::msBottom: return margins.bottom();
350  default: break;
351  }
352  return 0;
353 }
354 
355 
356 extern const QMetaObject staticMetaObject; // in moc-run we create a static meta object for QCP "fake" object. This line is the link to it via QCP::staticMetaObject in normal operation as namespace
357 
358 } // end of namespace QCP
359 Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::AntialiasedElements)
360 Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::PlottingHints)
361 Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::MarginSides)
362 Q_DECLARE_OPERATORS_FOR_FLAGS(QCP::Interactions)
363 Q_DECLARE_METATYPE(QCP::ExportPen)
364 Q_DECLARE_METATYPE(QCP::ResolutionUnit)
365 Q_DECLARE_METATYPE(QCP::SignDomain)
366 Q_DECLARE_METATYPE(QCP::MarginSide)
367 Q_DECLARE_METATYPE(QCP::AntialiasedElement)
368 Q_DECLARE_METATYPE(QCP::PlottingHint)
369 Q_DECLARE_METATYPE(QCP::Interaction)
370 Q_DECLARE_METATYPE(QCP::SelectionRectMode)
371 Q_DECLARE_METATYPE(QCP::SelectionType)
372 
373 /* end of 'src/global.h' */
374 
375 
376 /* including file 'src/vector2d.h', size 4928 */
377 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
378 
380 {
381 public:
382  QCPVector2D();
383  QCPVector2D(double x, double y);
384  QCPVector2D(const QPoint &point);
385  QCPVector2D(const QPointF &point);
386 
387  // getters:
388  double x() const { return mX; }
389  double y() const { return mY; }
390  double &rx() { return mX; }
391  double &ry() { return mY; }
392 
393  // setters:
394  void setX(double x) { mX = x; }
395  void setY(double y) { mY = y; }
396 
397  // non-virtual methods:
398  double length() const { return qSqrt(mX*mX+mY*mY); }
399  double lengthSquared() const { return mX*mX+mY*mY; }
400  QPoint toPoint() const { return QPoint(mX, mY); }
401  QPointF toPointF() const { return QPointF(mX, mY); }
402 
403  bool isNull() const { return qIsNull(mX) && qIsNull(mY); }
404  void normalize();
405  QCPVector2D normalized() const;
406  QCPVector2D perpendicular() const { return QCPVector2D(-mY, mX); }
407  double dot(const QCPVector2D &vec) const { return mX*vec.mX+mY*vec.mY; }
408  double distanceSquaredToLine(const QCPVector2D &start, const QCPVector2D &end) const;
409  double distanceSquaredToLine(const QLineF &line) const;
410  double distanceToStraightLine(const QCPVector2D &base, const QCPVector2D &direction) const;
411 
412  QCPVector2D &operator*=(double factor);
413  QCPVector2D &operator/=(double divisor);
414  QCPVector2D &operator+=(const QCPVector2D &vector);
415  QCPVector2D &operator-=(const QCPVector2D &vector);
416 
417 private:
418  // property members:
419  double mX, mY;
420 
421  friend inline const QCPVector2D operator*(double factor, const QCPVector2D &vec);
422  friend inline const QCPVector2D operator*(const QCPVector2D &vec, double factor);
423  friend inline const QCPVector2D operator/(const QCPVector2D &vec, double divisor);
424  friend inline const QCPVector2D operator+(const QCPVector2D &vec1, const QCPVector2D &vec2);
425  friend inline const QCPVector2D operator-(const QCPVector2D &vec1, const QCPVector2D &vec2);
426  friend inline const QCPVector2D operator-(const QCPVector2D &vec);
427 };
428 Q_DECLARE_TYPEINFO(QCPVector2D, Q_MOVABLE_TYPE);
429 
430 inline const QCPVector2D operator*(double factor, const QCPVector2D &vec) { return QCPVector2D(vec.mX*factor, vec.mY*factor); }
431 inline const QCPVector2D operator*(const QCPVector2D &vec, double factor) { return QCPVector2D(vec.mX*factor, vec.mY*factor); }
432 inline const QCPVector2D operator/(const QCPVector2D &vec, double divisor) { return QCPVector2D(vec.mX/divisor, vec.mY/divisor); }
433 inline const QCPVector2D operator+(const QCPVector2D &vec1, const QCPVector2D &vec2) { return QCPVector2D(vec1.mX+vec2.mX, vec1.mY+vec2.mY); }
434 inline const QCPVector2D operator-(const QCPVector2D &vec1, const QCPVector2D &vec2) { return QCPVector2D(vec1.mX-vec2.mX, vec1.mY-vec2.mY); }
435 inline const QCPVector2D operator-(const QCPVector2D &vec) { return QCPVector2D(-vec.mX, -vec.mY); }
436 
441 inline QDebug operator<< (QDebug d, const QCPVector2D &vec)
442 {
443  d.nospace() << "QCPVector2D(" << vec.x() << ", " << vec.y() << ")";
444  return d.space();
445 }
446 
447 /* end of 'src/vector2d.h' */
448 
449 
450 /* including file 'src/painter.h', size 4035 */
451 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
452 
453 class QCP_LIB_DECL QCPPainter : public QPainter
454 {
455  Q_GADGET
456 public:
461  enum PainterMode { pmDefault = 0x00
462  ,pmVectorized = 0x01
463  ,pmNoCaching = 0x02
464  ,pmNonCosmetic = 0x04
465  };
466  Q_ENUMS(PainterMode)
467  Q_FLAGS(PainterModes)
468  Q_DECLARE_FLAGS(PainterModes, PainterMode)
469 
470  QCPPainter();
471  explicit QCPPainter(QPaintDevice *device);
472 
473  // getters:
474  bool antialiasing() const { return testRenderHint(QPainter::Antialiasing); }
475  PainterModes modes() const { return mModes; }
476 
477  // setters:
478  void setAntialiasing(bool enabled);
479  void setMode(PainterMode mode, bool enabled=true);
480  void setModes(PainterModes modes);
481 
482  // methods hiding non-virtual base class functions (QPainter bug workarounds):
483  bool begin(QPaintDevice *device);
484  void setPen(const QPen &pen);
485  void setPen(const QColor &color);
486  void setPen(Qt::PenStyle penStyle);
487  void drawLine(const QLineF &line);
488  void drawLine(const QPointF &p1, const QPointF &p2) {drawLine(QLineF(p1, p2));}
489  void save();
490  void restore();
491 
492  // non-virtual methods:
493  void makeNonCosmetic();
494 
495 protected:
496  // property members:
497  PainterModes mModes;
499 
500  // non-property members:
501  QStack<bool> mAntialiasingStack;
502 };
503 Q_DECLARE_OPERATORS_FOR_FLAGS(QCPPainter::PainterModes)
504 Q_DECLARE_METATYPE(QCPPainter::PainterMode)
505 
506 /* end of 'src/painter.h' */
507 
508 
509 /* including file 'src/paintbuffer.h', size 4958 */
510 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
511 
513 {
514 public:
515  explicit QCPAbstractPaintBuffer(const QSize &size, double devicePixelRatio);
516  virtual ~QCPAbstractPaintBuffer();
517 
518  // getters:
519  QSize size() const { return mSize; }
520  bool invalidated() const { return mInvalidated; }
521  double devicePixelRatio() const { return mDevicePixelRatio; }
522 
523  // setters:
524  void setSize(const QSize &size);
525  void setInvalidated(bool invalidated=true);
526  void setDevicePixelRatio(double ratio);
527 
528  // introduced virtual methods:
529  virtual QCPPainter *startPainting() = 0;
530  virtual void donePainting() {}
531  virtual void draw(QCPPainter *painter) const = 0;
532  virtual void clear(const QColor &color) = 0;
533 
534 protected:
535  // property members:
536  QSize mSize;
538 
539  // non-property members:
541 
542  // introduced virtual methods:
543  virtual void reallocateBuffer() = 0;
544 };
545 
546 
548 {
549 public:
550  explicit QCPPaintBufferPixmap(const QSize &size, double devicePixelRatio);
551  virtual ~QCPPaintBufferPixmap();
552 
553  // reimplemented virtual methods:
554  virtual QCPPainter *startPainting() Q_DECL_OVERRIDE;
555  virtual void draw(QCPPainter *painter) const Q_DECL_OVERRIDE;
556  void clear(const QColor &color) Q_DECL_OVERRIDE;
557 
558 protected:
559  // non-property members:
560  QPixmap mBuffer;
561 
562  // reimplemented virtual methods:
563  virtual void reallocateBuffer() Q_DECL_OVERRIDE;
564 };
565 
566 
567 #ifdef QCP_OPENGL_PBUFFER
568 class QCP_LIB_DECL QCPPaintBufferGlPbuffer : public QCPAbstractPaintBuffer
569 {
570 public:
571  explicit QCPPaintBufferGlPbuffer(const QSize &size, double devicePixelRatio, int multisamples);
572  virtual ~QCPPaintBufferGlPbuffer();
573 
574  // reimplemented virtual methods:
575  virtual QCPPainter *startPainting() Q_DECL_OVERRIDE;
576  virtual void draw(QCPPainter *painter) const Q_DECL_OVERRIDE;
577  void clear(const QColor &color) Q_DECL_OVERRIDE;
578 
579 protected:
580  // non-property members:
581  QGLPixelBuffer *mGlPBuffer;
582  int mMultisamples;
583 
584  // reimplemented virtual methods:
585  virtual void reallocateBuffer() Q_DECL_OVERRIDE;
586 };
587 #endif // QCP_OPENGL_PBUFFER
588 
589 
590 #ifdef QCP_OPENGL_FBO
591 class QCP_LIB_DECL QCPPaintBufferGlFbo : public QCPAbstractPaintBuffer
592 {
593 public:
594  explicit QCPPaintBufferGlFbo(const QSize &size, double devicePixelRatio, QWeakPointer<QOpenGLContext> glContext, QWeakPointer<QOpenGLPaintDevice> glPaintDevice);
595  virtual ~QCPPaintBufferGlFbo();
596 
597  // reimplemented virtual methods:
598  virtual QCPPainter *startPainting() Q_DECL_OVERRIDE;
599  virtual void donePainting() Q_DECL_OVERRIDE;
600  virtual void draw(QCPPainter *painter) const Q_DECL_OVERRIDE;
601  void clear(const QColor &color) Q_DECL_OVERRIDE;
602 
603 protected:
604  // non-property members:
605  QWeakPointer<QOpenGLContext> mGlContext;
606  QWeakPointer<QOpenGLPaintDevice> mGlPaintDevice;
607  QOpenGLFramebufferObject *mGlFrameBuffer;
608 
609  // reimplemented virtual methods:
610  virtual void reallocateBuffer() Q_DECL_OVERRIDE;
611 };
612 #endif // QCP_OPENGL_FBO
613 
614 /* end of 'src/paintbuffer.h' */
615 
616 
617 /* including file 'src/layer.h', size 6885 */
618 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
619 
620 class QCP_LIB_DECL QCPLayer : public QObject
621 {
622  Q_OBJECT
624  Q_PROPERTY(QCustomPlot* parentPlot READ parentPlot)
625  Q_PROPERTY(QString name READ name)
626  Q_PROPERTY(int index READ index)
627  Q_PROPERTY(QList<QCPLayerable*> children READ children)
628  Q_PROPERTY(bool visible READ visible WRITE setVisible)
629  Q_PROPERTY(LayerMode mode READ mode WRITE setMode)
631 public:
632 
640  enum LayerMode { lmLogical
641  ,lmBuffered
642  };
643  Q_ENUMS(LayerMode)
644 
645  QCPLayer(QCustomPlot* parentPlot, const QString &layerName);
646  virtual ~QCPLayer();
647 
648  // getters:
649  QCustomPlot *parentPlot() const { return mParentPlot; }
650  QString name() const { return mName; }
651  int index() const { return mIndex; }
652  QList<QCPLayerable*> children() const { return mChildren; }
653  bool visible() const { return mVisible; }
654  LayerMode mode() const { return mMode; }
655 
656  // setters:
657  void setVisible(bool visible);
658  void setMode(LayerMode mode);
659 
660  // non-virtual methods:
661  void replot();
662 
663 protected:
664  // property members:
666  QString mName;
667  int mIndex;
668  QList<QCPLayerable*> mChildren;
669  bool mVisible;
671 
672  // non-property members:
673  QWeakPointer<QCPAbstractPaintBuffer> mPaintBuffer;
674 
675  // non-virtual methods:
676  void draw(QCPPainter *painter);
677  void drawToPaintBuffer();
678  void addChild(QCPLayerable *layerable, bool prepend);
679  void removeChild(QCPLayerable *layerable);
680 
681 private:
682  Q_DISABLE_COPY(QCPLayer)
683 
684  friend class QCustomPlot;
685  friend class QCPLayerable;
686 };
687 Q_DECLARE_METATYPE(QCPLayer::LayerMode)
688 
689 class QCP_LIB_DECL QCPLayerable : public QObject
690 {
691  Q_OBJECT
693  Q_PROPERTY(bool visible READ visible WRITE setVisible)
694  Q_PROPERTY(QCustomPlot* parentPlot READ parentPlot)
695  Q_PROPERTY(QCPLayerable* parentLayerable READ parentLayerable)
696  Q_PROPERTY(QCPLayer* layer READ layer WRITE setLayer NOTIFY layerChanged)
697  Q_PROPERTY(bool antialiased READ antialiased WRITE setAntialiased)
699 public:
700  QCPLayerable(QCustomPlot *plot, QString targetLayer=QString(), QCPLayerable *parentLayerable=0);
701  virtual ~QCPLayerable();
702 
703  // getters:
704  bool visible() const { return mVisible; }
705  QCustomPlot *parentPlot() const { return mParentPlot; }
706  QCPLayerable *parentLayerable() const { return mParentLayerable.data(); }
707  QCPLayer *layer() const { return mLayer; }
708  bool antialiased() const { return mAntialiased; }
709 
710  // setters:
711  void setVisible(bool on);
712  Q_SLOT bool setLayer(QCPLayer *layer);
713  bool setLayer(const QString &layerName);
714  void setAntialiased(bool enabled);
715 
716  // introduced virtual methods:
717  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const;
718 
719  // non-property methods:
720  bool realVisibility() const;
721 
722 signals:
723  void layerChanged(QCPLayer *newLayer);
724 
725 protected:
726  // property members:
727  bool mVisible;
728  QCustomPlot *mParentPlot;
729  QPointer<QCPLayerable> mParentLayerable;
732 
733  // introduced virtual methods:
734  virtual void parentPlotInitialized(QCustomPlot *parentPlot);
735  virtual QCP::Interaction selectionCategory() const;
736  virtual QRect clipRect() const;
737  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const = 0;
738  virtual void draw(QCPPainter *painter) = 0;
739  // selection events:
740  virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged);
741  virtual void deselectEvent(bool *selectionStateChanged);
742  // low-level mouse events:
743  virtual void mousePressEvent(QMouseEvent *event, const QVariant &details);
744  virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos);
745  virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos);
746  virtual void mouseDoubleClickEvent(QMouseEvent *event, const QVariant &details);
747  virtual void wheelEvent(QWheelEvent *event);
748 
749  // non-property methods:
750  void initializeParentPlot(QCustomPlot *parentPlot);
751  void setParentLayerable(QCPLayerable* parentLayerable);
752  bool moveToLayer(QCPLayer *layer, bool prepend);
753  void applyAntialiasingHint(QCPPainter *painter, bool localAntialiased, QCP::AntialiasedElement overrideElement) const;
754 
755 private:
756  Q_DISABLE_COPY(QCPLayerable)
757 
758  friend class QCustomPlot;
759  friend class QCPLayer;
760  friend class QCPAxisRect;
761 };
762 
763 /* end of 'src/layer.h' */
764 
765 
766 /* including file 'src/axis/range.h', size 5280 */
767 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
768 
770 {
771 public:
772  double lower, upper;
773 
774  QCPRange();
775  QCPRange(double lower, double upper);
776 
777  bool operator==(const QCPRange& other) const { return lower == other.lower && upper == other.upper; }
778  bool operator!=(const QCPRange& other) const { return !(*this == other); }
779 
780  QCPRange &operator+=(const double& value) { lower+=value; upper+=value; return *this; }
781  QCPRange &operator-=(const double& value) { lower-=value; upper-=value; return *this; }
782  QCPRange &operator*=(const double& value) { lower*=value; upper*=value; return *this; }
783  QCPRange &operator/=(const double& value) { lower/=value; upper/=value; return *this; }
784  friend inline const QCPRange operator+(const QCPRange&, double);
785  friend inline const QCPRange operator+(double, const QCPRange&);
786  friend inline const QCPRange operator-(const QCPRange& range, double value);
787  friend inline const QCPRange operator*(const QCPRange& range, double value);
788  friend inline const QCPRange operator*(double value, const QCPRange& range);
789  friend inline const QCPRange operator/(const QCPRange& range, double value);
790 
791  double size() const { return upper-lower; }
792  double center() const { return (upper+lower)*0.5; }
793  void normalize() { if (lower > upper) qSwap(lower, upper); }
794  void expand(const QCPRange &otherRange);
795  void expand(double includeCoord);
796  QCPRange expanded(const QCPRange &otherRange) const;
797  QCPRange expanded(double includeCoord) const;
798  QCPRange bounded(double lowerBound, double upperBound) const;
799  QCPRange sanitizedForLogScale() const;
800  QCPRange sanitizedForLinScale() const;
801  bool contains(double value) const { return value >= lower && value <= upper; }
802 
803  static bool validRange(double lower, double upper);
804  static bool validRange(const QCPRange &range);
805  static const double minRange;
806  static const double maxRange;
807 
808 };
809 Q_DECLARE_TYPEINFO(QCPRange, Q_MOVABLE_TYPE);
810 
815 inline QDebug operator<< (QDebug d, const QCPRange &range)
816 {
817  d.nospace() << "QCPRange(" << range.lower << ", " << range.upper << ")";
818  return d.space();
819 }
820 
824 inline const QCPRange operator+(const QCPRange& range, double value)
825 {
826  QCPRange result(range);
827  result += value;
828  return result;
829 }
830 
834 inline const QCPRange operator+(double value, const QCPRange& range)
835 {
836  QCPRange result(range);
837  result += value;
838  return result;
839 }
840 
844 inline const QCPRange operator-(const QCPRange& range, double value)
845 {
846  QCPRange result(range);
847  result -= value;
848  return result;
849 }
850 
854 inline const QCPRange operator*(const QCPRange& range, double value)
855 {
856  QCPRange result(range);
857  result *= value;
858  return result;
859 }
860 
864 inline const QCPRange operator*(double value, const QCPRange& range)
865 {
866  QCPRange result(range);
867  result *= value;
868  return result;
869 }
870 
874 inline const QCPRange operator/(const QCPRange& range, double value)
875 {
876  QCPRange result(range);
877  result /= value;
878  return result;
879 }
880 
881 /* end of 'src/axis/range.h' */
882 
883 
884 /* including file 'src/selection.h', size 8579 */
885 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
886 
888 {
889 public:
890  QCPDataRange();
891  QCPDataRange(int begin, int end);
892 
893  bool operator==(const QCPDataRange& other) const { return mBegin == other.mBegin && mEnd == other.mEnd; }
894  bool operator!=(const QCPDataRange& other) const { return !(*this == other); }
895 
896  // getters:
897  int begin() const { return mBegin; }
898  int end() const { return mEnd; }
899  int size() const { return mEnd-mBegin; }
900  int length() const { return size(); }
901 
902  // setters:
903  void setBegin(int begin) { mBegin = begin; }
904  void setEnd(int end) { mEnd = end; }
905 
906  // non-property methods:
907  bool isValid() const { return (mEnd >= mBegin) && (mBegin >= 0); }
908  bool isEmpty() const { return length() == 0; }
909  QCPDataRange bounded(const QCPDataRange &other) const;
910  QCPDataRange expanded(const QCPDataRange &other) const;
911  QCPDataRange intersection(const QCPDataRange &other) const;
912  QCPDataRange adjusted(int changeBegin, int changeEnd) const { return QCPDataRange(mBegin+changeBegin, mEnd+changeEnd); }
913  bool intersects(const QCPDataRange &other) const;
914  bool contains(const QCPDataRange &other) const;
915 
916 private:
917  // property members:
918  int mBegin, mEnd;
919 
920 };
921 Q_DECLARE_TYPEINFO(QCPDataRange, Q_MOVABLE_TYPE);
922 
923 
925 {
926 public:
927  explicit QCPDataSelection();
928  explicit QCPDataSelection(const QCPDataRange &range);
929 
930  bool operator==(const QCPDataSelection& other) const;
931  bool operator!=(const QCPDataSelection& other) const { return !(*this == other); }
932  QCPDataSelection &operator+=(const QCPDataSelection& other);
933  QCPDataSelection &operator+=(const QCPDataRange& other);
934  QCPDataSelection &operator-=(const QCPDataSelection& other);
935  QCPDataSelection &operator-=(const QCPDataRange& other);
936  friend inline const QCPDataSelection operator+(const QCPDataSelection& a, const QCPDataSelection& b);
937  friend inline const QCPDataSelection operator+(const QCPDataRange& a, const QCPDataSelection& b);
938  friend inline const QCPDataSelection operator+(const QCPDataSelection& a, const QCPDataRange& b);
939  friend inline const QCPDataSelection operator+(const QCPDataRange& a, const QCPDataRange& b);
940  friend inline const QCPDataSelection operator-(const QCPDataSelection& a, const QCPDataSelection& b);
941  friend inline const QCPDataSelection operator-(const QCPDataRange& a, const QCPDataSelection& b);
942  friend inline const QCPDataSelection operator-(const QCPDataSelection& a, const QCPDataRange& b);
943  friend inline const QCPDataSelection operator-(const QCPDataRange& a, const QCPDataRange& b);
944 
945  // getters:
946  int dataRangeCount() const { return mDataRanges.size(); }
947  int dataPointCount() const;
948  QCPDataRange dataRange(int index=0) const;
949  QList<QCPDataRange> dataRanges() const { return mDataRanges; }
950  QCPDataRange span() const;
951 
952  // non-property methods:
953  void addDataRange(const QCPDataRange &dataRange, bool simplify=true);
954  void clear();
955  bool isEmpty() const { return mDataRanges.isEmpty(); }
956  void simplify();
957  void enforceType(QCP::SelectionType type);
958  bool contains(const QCPDataSelection &other) const;
959  QCPDataSelection intersection(const QCPDataRange &other) const;
960  QCPDataSelection intersection(const QCPDataSelection &other) const;
961  QCPDataSelection inverse(const QCPDataRange &outerRange) const;
962 
963 private:
964  // property members:
965  QList<QCPDataRange> mDataRanges;
966 
967  inline static bool lessThanDataRangeBegin(const QCPDataRange &a, const QCPDataRange &b) { return a.begin() < b.begin(); }
968 };
969 Q_DECLARE_METATYPE(QCPDataSelection)
970 
971 
972 
976 inline const QCPDataSelection operator+(const QCPDataSelection& a, const QCPDataSelection& b)
977 {
978  QCPDataSelection result(a);
979  result += b;
980  return result;
981 }
982 
987 inline const QCPDataSelection operator+(const QCPDataRange& a, const QCPDataSelection& b)
988 {
989  QCPDataSelection result(a);
990  result += b;
991  return result;
992 }
993 
998 inline const QCPDataSelection operator+(const QCPDataSelection& a, const QCPDataRange& b)
999 {
1000  QCPDataSelection result(a);
1001  result += b;
1002  return result;
1003 }
1004 
1009 inline const QCPDataSelection operator+(const QCPDataRange& a, const QCPDataRange& b)
1010 {
1011  QCPDataSelection result(a);
1012  result += b;
1013  return result;
1014 }
1015 
1020 {
1021  QCPDataSelection result(a);
1022  result -= b;
1023  return result;
1024 }
1025 
1030 {
1031  QCPDataSelection result(a);
1032  result -= b;
1033  return result;
1034 }
1035 
1040 {
1041  QCPDataSelection result(a);
1042  result -= b;
1043  return result;
1044 }
1045 
1049 inline const QCPDataSelection operator-(const QCPDataRange& a, const QCPDataRange& b)
1050 {
1051  QCPDataSelection result(a);
1052  result -= b;
1053  return result;
1054 }
1055 
1060 inline QDebug operator<< (QDebug d, const QCPDataRange &dataRange)
1061 {
1062  d.nospace() << "[" << dataRange.begin() << ".." << dataRange.end()-1 << "]";
1063  return d.space();
1064 }
1065 
1070 inline QDebug operator<< (QDebug d, const QCPDataSelection &selection)
1071 {
1072  d.nospace() << "QCPDataSelection(";
1073  for (int i=0; i<selection.dataRangeCount(); ++i)
1074  {
1075  if (i != 0)
1076  d << ", ";
1077  d << selection.dataRange(i);
1078  }
1079  d << ")";
1080  return d.space();
1081 }
1082 
1083 
1084 
1085 /* end of 'src/selection.h' */
1086 
1087 
1088 /* including file 'src/selectionrect.h', size 3338 */
1089 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1090 
1092 {
1093  Q_OBJECT
1094 public:
1095  explicit QCPSelectionRect(QCustomPlot *parentPlot);
1096  virtual ~QCPSelectionRect();
1097 
1098  // getters:
1099  QRect rect() const { return mRect; }
1100  QCPRange range(const QCPAxis *axis) const;
1101  QPen pen() const { return mPen; }
1102  QBrush brush() const { return mBrush; }
1103  bool isActive() const { return mActive; }
1104 
1105  // setters:
1106  void setPen(const QPen &pen);
1107  void setBrush(const QBrush &brush);
1108 
1109  // non-property methods:
1110  Q_SLOT void cancel();
1111 
1112 signals:
1113  void started(QMouseEvent *event);
1114  void changed(const QRect &rect, QMouseEvent *event);
1115  void canceled(const QRect &rect, QInputEvent *event);
1116  void accepted(const QRect &rect, QMouseEvent *event);
1117 
1118 protected:
1119  // property members:
1120  QRect mRect;
1121  QPen mPen;
1122  QBrush mBrush;
1123  // non-property members:
1124  bool mActive;
1125 
1126  // introduced virtual methods:
1127  virtual void startSelection(QMouseEvent *event);
1128  virtual void moveSelection(QMouseEvent *event);
1129  virtual void endSelection(QMouseEvent *event);
1130  virtual void keyPressEvent(QKeyEvent *event);
1131 
1132  // reimplemented virtual methods
1133  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
1134  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
1135 
1136  friend class QCustomPlot;
1137 };
1138 
1139 /* end of 'src/selectionrect.h' */
1140 
1141 
1142 /* including file 'src/layout.h', size 13128 */
1143 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1144 
1145 class QCP_LIB_DECL QCPMarginGroup : public QObject
1146 {
1147  Q_OBJECT
1148 public:
1149  explicit QCPMarginGroup(QCustomPlot *parentPlot);
1150  virtual ~QCPMarginGroup();
1151 
1152  // non-virtual methods:
1153  QList<QCPLayoutElement*> elements(QCP::MarginSide side) const { return mChildren.value(side); }
1154  bool isEmpty() const;
1155  void clear();
1156 
1157 protected:
1158  // non-property members:
1160  QHash<QCP::MarginSide, QList<QCPLayoutElement*> > mChildren;
1161 
1162  // introduced virtual methods:
1163  virtual int commonMargin(QCP::MarginSide side) const;
1164 
1165  // non-virtual methods:
1166  void addChild(QCP::MarginSide side, QCPLayoutElement *element);
1167  void removeChild(QCP::MarginSide side, QCPLayoutElement *element);
1168 
1169 private:
1170  Q_DISABLE_COPY(QCPMarginGroup)
1171 
1172  friend class QCPLayoutElement;
1173 };
1174 
1175 
1176 class QCP_LIB_DECL QCPLayoutElement : public QCPLayerable
1177 {
1178  Q_OBJECT
1180  Q_PROPERTY(QCPLayout* layout READ layout)
1181  Q_PROPERTY(QRect rect READ rect)
1182  Q_PROPERTY(QRect outerRect READ outerRect WRITE setOuterRect)
1183  Q_PROPERTY(QMargins margins READ margins WRITE setMargins)
1184  Q_PROPERTY(QMargins minimumMargins READ minimumMargins WRITE setMinimumMargins)
1185  Q_PROPERTY(QSize minimumSize READ minimumSize WRITE setMinimumSize)
1186  Q_PROPERTY(QSize maximumSize READ maximumSize WRITE setMaximumSize)
1188 public:
1193  enum UpdatePhase { upPreparation
1194  ,upMargins
1195  ,upLayout
1196  };
1197  Q_ENUMS(UpdatePhase)
1198 
1199  explicit QCPLayoutElement(QCustomPlot *parentPlot=0);
1200  virtual ~QCPLayoutElement();
1201 
1202  // getters:
1203  QCPLayout *layout() const { return mParentLayout; }
1204  QRect rect() const { return mRect; }
1205  QRect outerRect() const { return mOuterRect; }
1206  QMargins margins() const { return mMargins; }
1207  QMargins minimumMargins() const { return mMinimumMargins; }
1208  QCP::MarginSides autoMargins() const { return mAutoMargins; }
1209  QSize minimumSize() const { return mMinimumSize; }
1210  QSize maximumSize() const { return mMaximumSize; }
1211  QCPMarginGroup *marginGroup(QCP::MarginSide side) const { return mMarginGroups.value(side, (QCPMarginGroup*)0); }
1212  QHash<QCP::MarginSide, QCPMarginGroup*> marginGroups() const { return mMarginGroups; }
1213 
1214  // setters:
1215  void setOuterRect(const QRect &rect);
1216  void setMargins(const QMargins &margins);
1217  void setMinimumMargins(const QMargins &margins);
1218  void setAutoMargins(QCP::MarginSides sides);
1219  void setMinimumSize(const QSize &size);
1220  void setMinimumSize(int width, int height);
1221  void setMaximumSize(const QSize &size);
1222  void setMaximumSize(int width, int height);
1223  void setMarginGroup(QCP::MarginSides sides, QCPMarginGroup *group);
1224 
1225  // introduced virtual methods:
1226  virtual void update(UpdatePhase phase);
1227  virtual QSize minimumSizeHint() const;
1228  virtual QSize maximumSizeHint() const;
1229  virtual QList<QCPLayoutElement*> elements(bool recursive) const;
1230 
1231  // reimplemented virtual methods:
1232  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
1233 
1234 protected:
1235  // property members:
1237  QSize mMinimumSize, mMaximumSize;
1238  QRect mRect, mOuterRect;
1239  QMargins mMargins, mMinimumMargins;
1240  QCP::MarginSides mAutoMargins;
1241  QHash<QCP::MarginSide, QCPMarginGroup*> mMarginGroups;
1242 
1243  // introduced virtual methods:
1244  virtual int calculateAutoMargin(QCP::MarginSide side);
1245  virtual void layoutChanged();
1246 
1247  // reimplemented virtual methods:
1248  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE { Q_UNUSED(painter) }
1249  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE { Q_UNUSED(painter) }
1250  virtual void parentPlotInitialized(QCustomPlot *parentPlot) Q_DECL_OVERRIDE;
1251 
1252 private:
1253  Q_DISABLE_COPY(QCPLayoutElement)
1254 
1255  friend class QCustomPlot;
1256  friend class QCPLayout;
1257  friend class QCPMarginGroup;
1258 };
1259 Q_DECLARE_METATYPE(QCPLayoutElement::UpdatePhase)
1260 
1261 
1262 class QCP_LIB_DECL QCPLayout : public QCPLayoutElement
1263 {
1264  Q_OBJECT
1265 public:
1266  explicit QCPLayout();
1267 
1268  // reimplemented virtual methods:
1269  virtual void update(UpdatePhase phase) Q_DECL_OVERRIDE;
1270  virtual QList<QCPLayoutElement*> elements(bool recursive) const Q_DECL_OVERRIDE;
1271 
1272  // introduced virtual methods:
1273  virtual int elementCount() const = 0;
1274  virtual QCPLayoutElement* elementAt(int index) const = 0;
1275  virtual QCPLayoutElement* takeAt(int index) = 0;
1276  virtual bool take(QCPLayoutElement* element) = 0;
1277  virtual void simplify();
1278 
1279  // non-virtual methods:
1280  bool removeAt(int index);
1281  bool remove(QCPLayoutElement* element);
1282  void clear();
1283 
1284 protected:
1285  // introduced virtual methods:
1286  virtual void updateLayout();
1287 
1288  // non-virtual methods:
1289  void sizeConstraintsChanged() const;
1290  void adoptElement(QCPLayoutElement *el);
1291  void releaseElement(QCPLayoutElement *el);
1292  QVector<int> getSectionSizes(QVector<int> maxSizes, QVector<int> minSizes, QVector<double> stretchFactors, int totalSize) const;
1293 
1294 private:
1295  Q_DISABLE_COPY(QCPLayout)
1296  friend class QCPLayoutElement;
1297 };
1298 
1299 
1300 class QCP_LIB_DECL QCPLayoutGrid : public QCPLayout
1301 {
1302  Q_OBJECT
1304  Q_PROPERTY(int rowCount READ rowCount)
1305  Q_PROPERTY(int columnCount READ columnCount)
1306  Q_PROPERTY(QList<double> columnStretchFactors READ columnStretchFactors WRITE setColumnStretchFactors)
1307  Q_PROPERTY(QList<double> rowStretchFactors READ rowStretchFactors WRITE setRowStretchFactors)
1308  Q_PROPERTY(int columnSpacing READ columnSpacing WRITE setColumnSpacing)
1309  Q_PROPERTY(int rowSpacing READ rowSpacing WRITE setRowSpacing)
1310  Q_PROPERTY(FillOrder fillOrder READ fillOrder WRITE setFillOrder)
1311  Q_PROPERTY(int wrap READ wrap WRITE setWrap)
1313 public:
1314 
1322  enum FillOrder { foRowsFirst
1323  ,foColumnsFirst
1324  };
1325  Q_ENUMS(FillOrder)
1326 
1327  explicit QCPLayoutGrid();
1328  virtual ~QCPLayoutGrid();
1329 
1330  // getters:
1331  int rowCount() const { return mElements.size(); }
1332  int columnCount() const { return mElements.size() > 0 ? mElements.first().size() : 0; }
1333  QList<double> columnStretchFactors() const { return mColumnStretchFactors; }
1334  QList<double> rowStretchFactors() const { return mRowStretchFactors; }
1335  int columnSpacing() const { return mColumnSpacing; }
1336  int rowSpacing() const { return mRowSpacing; }
1337  int wrap() const { return mWrap; }
1338  FillOrder fillOrder() const { return mFillOrder; }
1339 
1340  // setters:
1341  void setColumnStretchFactor(int column, double factor);
1342  void setColumnStretchFactors(const QList<double> &factors);
1343  void setRowStretchFactor(int row, double factor);
1344  void setRowStretchFactors(const QList<double> &factors);
1345  void setColumnSpacing(int pixels);
1346  void setRowSpacing(int pixels);
1347  void setWrap(int count);
1348  void setFillOrder(FillOrder order, bool rearrange=true);
1349 
1350  // reimplemented virtual methods:
1351  virtual void updateLayout() Q_DECL_OVERRIDE;
1352  virtual int elementCount() const Q_DECL_OVERRIDE { return rowCount()*columnCount(); }
1353  virtual QCPLayoutElement* elementAt(int index) const Q_DECL_OVERRIDE;
1354  virtual QCPLayoutElement* takeAt(int index) Q_DECL_OVERRIDE;
1355  virtual bool take(QCPLayoutElement* element) Q_DECL_OVERRIDE;
1356  virtual QList<QCPLayoutElement*> elements(bool recursive) const Q_DECL_OVERRIDE;
1357  virtual void simplify() Q_DECL_OVERRIDE;
1358  virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE;
1359  virtual QSize maximumSizeHint() const Q_DECL_OVERRIDE;
1360 
1361  // non-virtual methods:
1362  QCPLayoutElement *element(int row, int column) const;
1363  bool addElement(int row, int column, QCPLayoutElement *element);
1364  bool addElement(QCPLayoutElement *element);
1365  bool hasElement(int row, int column);
1366  void expandTo(int newRowCount, int newColumnCount);
1367  void insertRow(int newIndex);
1368  void insertColumn(int newIndex);
1369  int rowColToIndex(int row, int column) const;
1370  void indexToRowCol(int index, int &row, int &column) const;
1371 
1372 protected:
1373  // property members:
1374  QList<QList<QCPLayoutElement*> > mElements;
1375  QList<double> mColumnStretchFactors;
1376  QList<double> mRowStretchFactors;
1377  int mColumnSpacing, mRowSpacing;
1378  int mWrap;
1380 
1381  // non-virtual methods:
1382  void getMinimumRowColSizes(QVector<int> *minColWidths, QVector<int> *minRowHeights) const;
1383  void getMaximumRowColSizes(QVector<int> *maxColWidths, QVector<int> *maxRowHeights) const;
1384 
1385 private:
1386  Q_DISABLE_COPY(QCPLayoutGrid)
1387 };
1388 Q_DECLARE_METATYPE(QCPLayoutGrid::FillOrder)
1389 
1390 
1392 {
1393  Q_OBJECT
1394 public:
1398  enum InsetPlacement { ipFree
1399  ,ipBorderAligned
1400  };
1401  Q_ENUMS(InsetPlacement)
1402 
1403  explicit QCPLayoutInset();
1404  virtual ~QCPLayoutInset();
1405 
1406  // getters:
1407  InsetPlacement insetPlacement(int index) const;
1408  Qt::Alignment insetAlignment(int index) const;
1409  QRectF insetRect(int index) const;
1410 
1411  // setters:
1412  void setInsetPlacement(int index, InsetPlacement placement);
1413  void setInsetAlignment(int index, Qt::Alignment alignment);
1414  void setInsetRect(int index, const QRectF &rect);
1415 
1416  // reimplemented virtual methods:
1417  virtual void updateLayout() Q_DECL_OVERRIDE;
1418  virtual int elementCount() const Q_DECL_OVERRIDE;
1419  virtual QCPLayoutElement* elementAt(int index) const Q_DECL_OVERRIDE;
1420  virtual QCPLayoutElement* takeAt(int index) Q_DECL_OVERRIDE;
1421  virtual bool take(QCPLayoutElement* element) Q_DECL_OVERRIDE;
1422  virtual void simplify() Q_DECL_OVERRIDE {}
1423  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
1424 
1425  // non-virtual methods:
1426  void addElement(QCPLayoutElement *element, Qt::Alignment alignment);
1427  void addElement(QCPLayoutElement *element, const QRectF &rect);
1428 
1429 protected:
1430  // property members:
1431  QList<QCPLayoutElement*> mElements;
1432  QList<InsetPlacement> mInsetPlacement;
1433  QList<Qt::Alignment> mInsetAlignment;
1434  QList<QRectF> mInsetRect;
1435 
1436 private:
1437  Q_DISABLE_COPY(QCPLayoutInset)
1438 };
1439 Q_DECLARE_METATYPE(QCPLayoutInset::InsetPlacement)
1440 
1441 /* end of 'src/layout.h' */
1442 
1443 
1444 /* including file 'src/lineending.h', size 4426 */
1445 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1446 
1448 {
1449  Q_GADGET
1450 public:
1462  enum EndingStyle { esNone
1463  ,esFlatArrow
1464  ,esSpikeArrow
1465  ,esLineArrow
1466  ,esDisc
1467  ,esSquare
1468  ,esDiamond
1469  ,esBar
1470  ,esHalfBar
1471  ,esSkewedBar
1472  };
1473  Q_ENUMS(EndingStyle)
1474 
1475  QCPLineEnding();
1476  QCPLineEnding(EndingStyle style, double width=8, double length=10, bool inverted=false);
1477 
1478  // getters:
1479  EndingStyle style() const { return mStyle; }
1480  double width() const { return mWidth; }
1481  double length() const { return mLength; }
1482  bool inverted() const { return mInverted; }
1483 
1484  // setters:
1485  void setStyle(EndingStyle style);
1486  void setWidth(double width);
1487  void setLength(double length);
1488  void setInverted(bool inverted);
1489 
1490  // non-property methods:
1491  double boundingDistance() const;
1492  double realLength() const;
1493  void draw(QCPPainter *painter, const QCPVector2D &pos, const QCPVector2D &dir) const;
1494  void draw(QCPPainter *painter, const QCPVector2D &pos, double angle) const;
1495 
1496 protected:
1497  // property members:
1499  double mWidth, mLength;
1501 };
1502 Q_DECLARE_TYPEINFO(QCPLineEnding, Q_MOVABLE_TYPE);
1503 Q_DECLARE_METATYPE(QCPLineEnding::EndingStyle)
1504 
1505 /* end of 'src/lineending.h' */
1506 
1507 
1508 /* including file 'src/axis/axisticker.h', size 4177 */
1509 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1510 
1512 {
1513  Q_GADGET
1514 public:
1521  {
1522  tssReadability
1523  ,tssMeetTickCount
1524  };
1525  Q_ENUMS(TickStepStrategy)
1526 
1527  QCPAxisTicker();
1528  virtual ~QCPAxisTicker();
1529 
1530  // getters:
1531  TickStepStrategy tickStepStrategy() const { return mTickStepStrategy; }
1532  int tickCount() const { return mTickCount; }
1533  double tickOrigin() const { return mTickOrigin; }
1534 
1535  // setters:
1536  void setTickStepStrategy(TickStepStrategy strategy);
1537  void setTickCount(int count);
1538  void setTickOrigin(double origin);
1539 
1540  // introduced virtual methods:
1541  virtual void generate(const QCPRange &range, const QLocale &locale, QChar formatChar, int precision, QVector<double> &ticks, QVector<double> *subTicks, QVector<QString> *tickLabels);
1542 
1543 protected:
1544  // property members:
1547  double mTickOrigin;
1548 
1549  // introduced virtual methods:
1550  virtual double getTickStep(const QCPRange &range);
1551  virtual int getSubTickCount(double tickStep);
1552  virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision);
1553  virtual QVector<double> createTickVector(double tickStep, const QCPRange &range);
1554  virtual QVector<double> createSubTickVector(int subTickCount, const QVector<double> &ticks);
1555  virtual QVector<QString> createLabelVector(const QVector<double> &ticks, const QLocale &locale, QChar formatChar, int precision);
1556 
1557  // non-virtual methods:
1558  void trimTicks(const QCPRange &range, QVector<double> &ticks, bool keepOneOutlier) const;
1559  double pickClosest(double target, const QVector<double> &candidates) const;
1560  double getMantissa(double input, double *magnitude=0) const;
1561  double cleanMantissa(double input) const;
1562 };
1563 Q_DECLARE_METATYPE(QCPAxisTicker::TickStepStrategy)
1564 Q_DECLARE_METATYPE(QSharedPointer<QCPAxisTicker>)
1565 
1566 /* end of 'src/axis/axisticker.h' */
1567 
1568 
1569 /* including file 'src/axis/axistickerdatetime.h', size 3289 */
1570 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1571 
1573 {
1574 public:
1576 
1577  // getters:
1578  QString dateTimeFormat() const { return mDateTimeFormat; }
1579  Qt::TimeSpec dateTimeSpec() const { return mDateTimeSpec; }
1580 
1581  // setters:
1582  void setDateTimeFormat(const QString &format);
1583  void setDateTimeSpec(Qt::TimeSpec spec);
1584  void setTickOrigin(double origin); // hides base class method but calls baseclass implementation ("using" throws off IDEs and doxygen)
1585  void setTickOrigin(const QDateTime &origin);
1586 
1587  // static methods:
1588  static QDateTime keyToDateTime(double key);
1589  static double dateTimeToKey(const QDateTime dateTime);
1590  static double dateTimeToKey(const QDate date);
1591 
1592 protected:
1593  // property members:
1595  Qt::TimeSpec mDateTimeSpec;
1596 
1597  // non-property members:
1598  enum DateStrategy {dsNone, dsUniformTimeInDay, dsUniformDayInMonth} mDateStrategy;
1599 
1600  // reimplemented virtual methods:
1601  virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
1602  virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
1603  virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) Q_DECL_OVERRIDE;
1604  virtual QVector<double> createTickVector(double tickStep, const QCPRange &range) Q_DECL_OVERRIDE;
1605 };
1606 
1607 /* end of 'src/axis/axistickerdatetime.h' */
1608 
1609 
1610 /* including file 'src/axis/axistickertime.h', size 3288 */
1611 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1612 
1614 {
1615  Q_GADGET
1616 public:
1622  enum TimeUnit { tuMilliseconds
1623  ,tuSeconds
1624  ,tuMinutes
1625  ,tuHours
1626  ,tuDays
1627  };
1628  Q_ENUMS(TimeUnit)
1629 
1631 
1632  // getters:
1633  QString timeFormat() const { return mTimeFormat; }
1634  int fieldWidth(TimeUnit unit) const { return mFieldWidth.value(unit); }
1635 
1636  // setters:
1637  void setTimeFormat(const QString &format);
1638  void setFieldWidth(TimeUnit unit, int width);
1639 
1640 protected:
1641  // property members:
1642  QString mTimeFormat;
1643  QHash<TimeUnit, int> mFieldWidth;
1644 
1645  // non-property members:
1646  TimeUnit mSmallestUnit, mBiggestUnit;
1647  QHash<TimeUnit, QString> mFormatPattern;
1648 
1649  // reimplemented virtual methods:
1650  virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
1651  virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
1652  virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) Q_DECL_OVERRIDE;
1653 
1654  // non-virtual methods:
1655  void replaceUnit(QString &text, TimeUnit unit, int value) const;
1656 };
1657 Q_DECLARE_METATYPE(QCPAxisTickerTime::TimeUnit)
1658 
1659 /* end of 'src/axis/axistickertime.h' */
1660 
1661 
1662 /* including file 'src/axis/axistickerfixed.h', size 3308 */
1663 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1664 
1666 {
1667  Q_GADGET
1668 public:
1675  enum ScaleStrategy { ssNone
1676  ,ssMultiples
1677  ,ssPowers
1678  };
1679  Q_ENUMS(ScaleStrategy)
1680 
1682 
1683  // getters:
1684  double tickStep() const { return mTickStep; }
1685  ScaleStrategy scaleStrategy() const { return mScaleStrategy; }
1686 
1687  // setters:
1688  void setTickStep(double step);
1689  void setScaleStrategy(ScaleStrategy strategy);
1690 
1691 protected:
1692  // property members:
1693  double mTickStep;
1695 
1696  // reimplemented virtual methods:
1697  virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
1698 };
1699 Q_DECLARE_METATYPE(QCPAxisTickerFixed::ScaleStrategy)
1700 
1701 /* end of 'src/axis/axistickerfixed.h' */
1702 
1703 
1704 /* including file 'src/axis/axistickertext.h', size 3085 */
1705 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1706 
1708 {
1709 public:
1711 
1712  // getters:
1713  QMap<double, QString> &ticks() { return mTicks; }
1714  int subTickCount() const { return mSubTickCount; }
1715 
1716  // setters:
1717  void setTicks(const QMap<double, QString> &ticks);
1718  void setTicks(const QVector<double> &positions, const QVector<QString> labels);
1719  void setSubTickCount(int subTicks);
1720 
1721  // non-virtual methods:
1722  void clear();
1723  void addTick(double position, QString label);
1724  void addTicks(const QMap<double, QString> &ticks);
1725  void addTicks(const QVector<double> &positions, const QVector<QString> &labels);
1726 
1727 protected:
1728  // property members:
1729  QMap<double, QString> mTicks;
1731 
1732  // reimplemented virtual methods:
1733  virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
1734  virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
1735  virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) Q_DECL_OVERRIDE;
1736  virtual QVector<double> createTickVector(double tickStep, const QCPRange &range) Q_DECL_OVERRIDE;
1737 
1738 };
1739 
1740 /* end of 'src/axis/axistickertext.h' */
1741 
1742 
1743 /* including file 'src/axis/axistickerpi.h', size 3911 */
1744 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1745 
1747 {
1748  Q_GADGET
1749 public:
1755  enum FractionStyle { fsFloatingPoint
1756  ,fsAsciiFractions
1757  ,fsUnicodeFractions
1758  };
1759  Q_ENUMS(FractionStyle)
1760 
1761  QCPAxisTickerPi();
1762 
1763  // getters:
1764  QString piSymbol() const { return mPiSymbol; }
1765  double piValue() const { return mPiValue; }
1766  bool periodicity() const { return mPeriodicity; }
1767  FractionStyle fractionStyle() const { return mFractionStyle; }
1768 
1769  // setters:
1770  void setPiSymbol(QString symbol);
1771  void setPiValue(double pi);
1772  void setPeriodicity(int multiplesOfPi);
1773  void setFractionStyle(FractionStyle style);
1774 
1775 protected:
1776  // property members:
1777  QString mPiSymbol;
1778  double mPiValue;
1781 
1782  // non-property members:
1783  double mPiTickStep; // size of one tick step in units of mPiValue
1784 
1785  // reimplemented virtual methods:
1786  virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
1787  virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
1788  virtual QString getTickLabel(double tick, const QLocale &locale, QChar formatChar, int precision) Q_DECL_OVERRIDE;
1789 
1790  // non-virtual methods:
1791  void simplifyFraction(int &numerator, int &denominator) const;
1792  QString fractionToString(int numerator, int denominator) const;
1793  QString unicodeFraction(int numerator, int denominator) const;
1794  QString unicodeSuperscript(int number) const;
1795  QString unicodeSubscript(int number) const;
1796 };
1797 Q_DECLARE_METATYPE(QCPAxisTickerPi::FractionStyle)
1798 
1799 /* end of 'src/axis/axistickerpi.h' */
1800 
1801 
1802 /* including file 'src/axis/axistickerlog.h', size 2663 */
1803 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1804 
1806 {
1807 public:
1808  QCPAxisTickerLog();
1809 
1810  // getters:
1811  double logBase() const { return mLogBase; }
1812  int subTickCount() const { return mSubTickCount; }
1813 
1814  // setters:
1815  void setLogBase(double base);
1816  void setSubTickCount(int subTicks);
1817 
1818 protected:
1819  // property members:
1820  double mLogBase;
1822 
1823  // non-property members:
1825 
1826  // reimplemented virtual methods:
1827  virtual double getTickStep(const QCPRange &range) Q_DECL_OVERRIDE;
1828  virtual int getSubTickCount(double tickStep) Q_DECL_OVERRIDE;
1829  virtual QVector<double> createTickVector(double tickStep, const QCPRange &range) Q_DECL_OVERRIDE;
1830 };
1831 
1832 /* end of 'src/axis/axistickerlog.h' */
1833 
1834 
1835 /* including file 'src/axis/axis.h', size 20230 */
1836 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
1837 
1839 {
1840  Q_OBJECT
1842  Q_PROPERTY(bool subGridVisible READ subGridVisible WRITE setSubGridVisible)
1843  Q_PROPERTY(bool antialiasedSubGrid READ antialiasedSubGrid WRITE setAntialiasedSubGrid)
1844  Q_PROPERTY(bool antialiasedZeroLine READ antialiasedZeroLine WRITE setAntialiasedZeroLine)
1845  Q_PROPERTY(QPen pen READ pen WRITE setPen)
1846  Q_PROPERTY(QPen subGridPen READ subGridPen WRITE setSubGridPen)
1847  Q_PROPERTY(QPen zeroLinePen READ zeroLinePen WRITE setZeroLinePen)
1849 public:
1850  explicit QCPGrid(QCPAxis *parentAxis);
1851 
1852  // getters:
1853  bool subGridVisible() const { return mSubGridVisible; }
1854  bool antialiasedSubGrid() const { return mAntialiasedSubGrid; }
1855  bool antialiasedZeroLine() const { return mAntialiasedZeroLine; }
1856  QPen pen() const { return mPen; }
1857  QPen subGridPen() const { return mSubGridPen; }
1858  QPen zeroLinePen() const { return mZeroLinePen; }
1859 
1860  // setters:
1861  void setSubGridVisible(bool visible);
1862  void setAntialiasedSubGrid(bool enabled);
1863  void setAntialiasedZeroLine(bool enabled);
1864  void setPen(const QPen &pen);
1865  void setSubGridPen(const QPen &pen);
1866  void setZeroLinePen(const QPen &pen);
1867 
1868 protected:
1869  // property members:
1871  bool mAntialiasedSubGrid, mAntialiasedZeroLine;
1872  QPen mPen, mSubGridPen, mZeroLinePen;
1873 
1874  // non-property members:
1876 
1877  // reimplemented virtual methods:
1878  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
1879  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
1880 
1881  // non-virtual methods:
1882  void drawGridLines(QCPPainter *painter) const;
1883  void drawSubGridLines(QCPPainter *painter) const;
1884 
1885  friend class QCPAxis;
1886 };
1887 
1888 
1890 {
1891  Q_OBJECT
1893  Q_PROPERTY(AxisType axisType READ axisType)
1894  Q_PROPERTY(QCPAxisRect* axisRect READ axisRect)
1895  Q_PROPERTY(ScaleType scaleType READ scaleType WRITE setScaleType NOTIFY scaleTypeChanged)
1896  Q_PROPERTY(QCPRange range READ range WRITE setRange NOTIFY rangeChanged)
1897  Q_PROPERTY(bool rangeReversed READ rangeReversed WRITE setRangeReversed)
1898  Q_PROPERTY(QSharedPointer<QCPAxisTicker> ticker READ ticker WRITE setTicker)
1899  Q_PROPERTY(bool ticks READ ticks WRITE setTicks)
1900  Q_PROPERTY(bool tickLabels READ tickLabels WRITE setTickLabels)
1901  Q_PROPERTY(int tickLabelPadding READ tickLabelPadding WRITE setTickLabelPadding)
1902  Q_PROPERTY(QFont tickLabelFont READ tickLabelFont WRITE setTickLabelFont)
1903  Q_PROPERTY(QColor tickLabelColor READ tickLabelColor WRITE setTickLabelColor)
1904  Q_PROPERTY(double tickLabelRotation READ tickLabelRotation WRITE setTickLabelRotation)
1905  Q_PROPERTY(LabelSide tickLabelSide READ tickLabelSide WRITE setTickLabelSide)
1906  Q_PROPERTY(QString numberFormat READ numberFormat WRITE setNumberFormat)
1907  Q_PROPERTY(int numberPrecision READ numberPrecision WRITE setNumberPrecision)
1908  Q_PROPERTY(QVector<double> tickVector READ tickVector)
1909  Q_PROPERTY(QVector<QString> tickVectorLabels READ tickVectorLabels)
1910  Q_PROPERTY(int tickLengthIn READ tickLengthIn WRITE setTickLengthIn)
1911  Q_PROPERTY(int tickLengthOut READ tickLengthOut WRITE setTickLengthOut)
1912  Q_PROPERTY(bool subTicks READ subTicks WRITE setSubTicks)
1913  Q_PROPERTY(int subTickLengthIn READ subTickLengthIn WRITE setSubTickLengthIn)
1914  Q_PROPERTY(int subTickLengthOut READ subTickLengthOut WRITE setSubTickLengthOut)
1915  Q_PROPERTY(QPen basePen READ basePen WRITE setBasePen)
1916  Q_PROPERTY(QPen tickPen READ tickPen WRITE setTickPen)
1917  Q_PROPERTY(QPen subTickPen READ subTickPen WRITE setSubTickPen)
1918  Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont)
1919  Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor)
1920  Q_PROPERTY(QString label READ label WRITE setLabel)
1921  Q_PROPERTY(int labelPadding READ labelPadding WRITE setLabelPadding)
1922  Q_PROPERTY(int padding READ padding WRITE setPadding)
1923  Q_PROPERTY(int offset READ offset WRITE setOffset)
1924  Q_PROPERTY(SelectableParts selectedParts READ selectedParts WRITE setSelectedParts NOTIFY selectionChanged)
1925  Q_PROPERTY(SelectableParts selectableParts READ selectableParts WRITE setSelectableParts NOTIFY selectableChanged)
1926  Q_PROPERTY(QFont selectedTickLabelFont READ selectedTickLabelFont WRITE setSelectedTickLabelFont)
1927  Q_PROPERTY(QFont selectedLabelFont READ selectedLabelFont WRITE setSelectedLabelFont)
1928  Q_PROPERTY(QColor selectedTickLabelColor READ selectedTickLabelColor WRITE setSelectedTickLabelColor)
1929  Q_PROPERTY(QColor selectedLabelColor READ selectedLabelColor WRITE setSelectedLabelColor)
1930  Q_PROPERTY(QPen selectedBasePen READ selectedBasePen WRITE setSelectedBasePen)
1931  Q_PROPERTY(QPen selectedTickPen READ selectedTickPen WRITE setSelectedTickPen)
1932  Q_PROPERTY(QPen selectedSubTickPen READ selectedSubTickPen WRITE setSelectedSubTickPen)
1933  Q_PROPERTY(QCPLineEnding lowerEnding READ lowerEnding WRITE setLowerEnding)
1934  Q_PROPERTY(QCPLineEnding upperEnding READ upperEnding WRITE setUpperEnding)
1935  Q_PROPERTY(QCPGrid* grid READ grid)
1937 public:
1942  enum AxisType { atLeft = 0x01
1943  ,atRight = 0x02
1944  ,atTop = 0x04
1945  ,atBottom = 0x08
1946  };
1947  Q_ENUMS(AxisType)
1948  Q_FLAGS(AxisTypes)
1949  Q_DECLARE_FLAGS(AxisTypes, AxisType)
1955  enum LabelSide { lsInside
1956  ,lsOutside
1957  };
1958  Q_ENUMS(LabelSide)
1963  enum ScaleType { stLinear
1964  ,stLogarithmic
1965  };
1966  Q_ENUMS(ScaleType)
1971  enum SelectablePart { spNone = 0
1972  ,spAxis = 0x001
1973  ,spTickLabels = 0x002
1974  ,spAxisLabel = 0x004
1975  };
1976  Q_ENUMS(SelectablePart)
1977  Q_FLAGS(SelectableParts)
1978  Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
1979 
1980  explicit QCPAxis(QCPAxisRect *parent, AxisType type);
1981  virtual ~QCPAxis();
1982 
1983  // getters:
1984  AxisType axisType() const { return mAxisType; }
1985  QCPAxisRect *axisRect() const { return mAxisRect; }
1986  ScaleType scaleType() const { return mScaleType; }
1987  const QCPRange range() const { return mRange; }
1988  bool rangeReversed() const { return mRangeReversed; }
1989  QSharedPointer<QCPAxisTicker> ticker() const { return mTicker; }
1990  bool ticks() const { return mTicks; }
1991  bool tickLabels() const { return mTickLabels; }
1992  int tickLabelPadding() const;
1993  QFont tickLabelFont() const { return mTickLabelFont; }
1994  QColor tickLabelColor() const { return mTickLabelColor; }
1995  double tickLabelRotation() const;
1996  LabelSide tickLabelSide() const;
1997  QString numberFormat() const;
1998  int numberPrecision() const { return mNumberPrecision; }
1999  QVector<double> tickVector() const { return mTickVector; }
2000  QVector<QString> tickVectorLabels() const { return mTickVectorLabels; }
2001  int tickLengthIn() const;
2002  int tickLengthOut() const;
2003  bool subTicks() const { return mSubTicks; }
2004  int subTickLengthIn() const;
2005  int subTickLengthOut() const;
2006  QPen basePen() const { return mBasePen; }
2007  QPen tickPen() const { return mTickPen; }
2008  QPen subTickPen() const { return mSubTickPen; }
2009  QFont labelFont() const { return mLabelFont; }
2010  QColor labelColor() const { return mLabelColor; }
2011  QString label() const { return mLabel; }
2012  int labelPadding() const;
2013  int padding() const { return mPadding; }
2014  int offset() const;
2015  SelectableParts selectedParts() const { return mSelectedParts; }
2016  SelectableParts selectableParts() const { return mSelectableParts; }
2017  QFont selectedTickLabelFont() const { return mSelectedTickLabelFont; }
2018  QFont selectedLabelFont() const { return mSelectedLabelFont; }
2019  QColor selectedTickLabelColor() const { return mSelectedTickLabelColor; }
2020  QColor selectedLabelColor() const { return mSelectedLabelColor; }
2021  QPen selectedBasePen() const { return mSelectedBasePen; }
2022  QPen selectedTickPen() const { return mSelectedTickPen; }
2023  QPen selectedSubTickPen() const { return mSelectedSubTickPen; }
2024  QCPLineEnding lowerEnding() const;
2025  QCPLineEnding upperEnding() const;
2026  QCPGrid *grid() const { return mGrid; }
2027 
2028  // setters:
2029  Q_SLOT void setScaleType(QCPAxis::ScaleType type);
2030  Q_SLOT void setRange(const QCPRange &range);
2031  void setRange(double lower, double upper);
2032  void setRange(double position, double size, Qt::AlignmentFlag alignment);
2033  void setRangeLower(double lower);
2034  void setRangeUpper(double upper);
2035  void setRangeReversed(bool reversed);
2036  void setTicker(QSharedPointer<QCPAxisTicker> ticker);
2037  void setTicks(bool show);
2038  void setTickLabels(bool show);
2039  void setTickLabelPadding(int padding);
2040  void setTickLabelFont(const QFont &font);
2041  void setTickLabelColor(const QColor &color);
2042  void setTickLabelRotation(double degrees);
2043  void setTickLabelSide(LabelSide side);
2044  void setNumberFormat(const QString &formatCode);
2045  void setNumberPrecision(int precision);
2046  void setTickLength(int inside, int outside=0);
2047  void setTickLengthIn(int inside);
2048  void setTickLengthOut(int outside);
2049  void setSubTicks(bool show);
2050  void setSubTickLength(int inside, int outside=0);
2051  void setSubTickLengthIn(int inside);
2052  void setSubTickLengthOut(int outside);
2053  void setBasePen(const QPen &pen);
2054  void setTickPen(const QPen &pen);
2055  void setSubTickPen(const QPen &pen);
2056  void setLabelFont(const QFont &font);
2057  void setLabelColor(const QColor &color);
2058  void setLabel(const QString &str);
2059  void setLabelPadding(int padding);
2060  void setPadding(int padding);
2061  void setOffset(int offset);
2062  void setSelectedTickLabelFont(const QFont &font);
2063  void setSelectedLabelFont(const QFont &font);
2064  void setSelectedTickLabelColor(const QColor &color);
2065  void setSelectedLabelColor(const QColor &color);
2066  void setSelectedBasePen(const QPen &pen);
2067  void setSelectedTickPen(const QPen &pen);
2068  void setSelectedSubTickPen(const QPen &pen);
2069  Q_SLOT void setSelectableParts(const QCPAxis::SelectableParts &selectableParts);
2070  Q_SLOT void setSelectedParts(const QCPAxis::SelectableParts &selectedParts);
2071  void setLowerEnding(const QCPLineEnding &ending);
2072  void setUpperEnding(const QCPLineEnding &ending);
2073 
2074  // reimplemented virtual methods:
2075  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
2076 
2077  // non-property methods:
2078  Qt::Orientation orientation() const { return mOrientation; }
2079  int pixelOrientation() const { return rangeReversed() != (orientation()==Qt::Vertical) ? -1 : 1; }
2080  void moveRange(double diff);
2081  void scaleRange(double factor);
2082  void scaleRange(double factor, double center);
2083  void setScaleRatio(const QCPAxis *otherAxis, double ratio=1.0);
2084  void rescale(bool onlyVisiblePlottables=false);
2085  double pixelToCoord(double value) const;
2086  double coordToPixel(double value) const;
2087  SelectablePart getPartAt(const QPointF &pos) const;
2088  QList<QCPAbstractPlottable*> plottables() const;
2089  QList<QCPGraph*> graphs() const;
2090  QList<QCPAbstractItem*> items() const;
2091 
2092  static AxisType marginSideToAxisType(QCP::MarginSide side);
2093  static Qt::Orientation orientation(AxisType type) { return type==atBottom||type==atTop ? Qt::Horizontal : Qt::Vertical; }
2094  static AxisType opposite(AxisType type);
2095 
2096 signals:
2097  void rangeChanged(const QCPRange &newRange);
2098  void rangeChanged(const QCPRange &newRange, const QCPRange &oldRange);
2099  void scaleTypeChanged(QCPAxis::ScaleType scaleType);
2100  void selectionChanged(const QCPAxis::SelectableParts &parts);
2101  void selectableChanged(const QCPAxis::SelectableParts &parts);
2102 
2103 protected:
2104  // property members:
2105  // axis base:
2108  //int mOffset; // in QCPAxisPainter
2110  Qt::Orientation mOrientation;
2111  SelectableParts mSelectableParts, mSelectedParts;
2112  QPen mBasePen, mSelectedBasePen;
2113  //QCPLineEnding mLowerEnding, mUpperEnding; // in QCPAxisPainter
2114  // axis label:
2115  //int mLabelPadding; // in QCPAxisPainter
2116  QString mLabel;
2117  QFont mLabelFont, mSelectedLabelFont;
2118  QColor mLabelColor, mSelectedLabelColor;
2119  // tick labels:
2120  //int mTickLabelPadding; // in QCPAxisPainter
2122  //double mTickLabelRotation; // in QCPAxisPainter
2123  QFont mTickLabelFont, mSelectedTickLabelFont;
2124  QColor mTickLabelColor, mSelectedTickLabelColor;
2126  QLatin1Char mNumberFormatChar;
2128  //bool mNumberMultiplyCross; // QCPAxisPainter
2129  // ticks and subticks:
2130  bool mTicks;
2132  //int mTickLengthIn, mTickLengthOut, mSubTickLengthIn, mSubTickLengthOut; // QCPAxisPainter
2133  QPen mTickPen, mSelectedTickPen;
2134  QPen mSubTickPen, mSelectedSubTickPen;
2135  // scale and range:
2139 
2140  // non-property members:
2143  QSharedPointer<QCPAxisTicker> mTicker;
2144  QVector<double> mTickVector;
2145  QVector<QString> mTickVectorLabels;
2146  QVector<double> mSubTickVector;
2149 
2150  // introduced virtual methods:
2151  virtual int calculateMargin();
2152 
2153  // reimplemented virtual methods:
2154  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
2155  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
2156  virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
2157  // events:
2158  virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
2159  virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
2160 
2161  // non-virtual methods:
2162  void setupTickVectors();
2163  QPen getBasePen() const;
2164  QPen getTickPen() const;
2165  QPen getSubTickPen() const;
2166  QFont getTickLabelFont() const;
2167  QFont getLabelFont() const;
2168  QColor getTickLabelColor() const;
2169  QColor getLabelColor() const;
2170 
2171 private:
2172  Q_DISABLE_COPY(QCPAxis)
2173 
2174  friend class QCustomPlot;
2175  friend class QCPGrid;
2176  friend class QCPAxisRect;
2177 };
2178 Q_DECLARE_OPERATORS_FOR_FLAGS(QCPAxis::SelectableParts)
2179 Q_DECLARE_OPERATORS_FOR_FLAGS(QCPAxis::AxisTypes)
2180 Q_DECLARE_METATYPE(QCPAxis::AxisType)
2181 Q_DECLARE_METATYPE(QCPAxis::LabelSide)
2182 Q_DECLARE_METATYPE(QCPAxis::ScaleType)
2183 Q_DECLARE_METATYPE(QCPAxis::SelectablePart)
2184 
2185 
2187 {
2188 public:
2189  explicit QCPAxisPainterPrivate(QCustomPlot *parentPlot);
2190  virtual ~QCPAxisPainterPrivate();
2191 
2192  virtual void draw(QCPPainter *painter);
2193  virtual int size() const;
2194  void clearCache();
2195 
2196  QRect axisSelectionBox() const { return mAxisSelectionBox; }
2197  QRect tickLabelsSelectionBox() const { return mTickLabelsSelectionBox; }
2198  QRect labelSelectionBox() const { return mLabelSelectionBox; }
2199 
2200  // public property members:
2202  QPen basePen;
2203  QCPLineEnding lowerEnding, upperEnding; // directly accessed by QCPAxis setters/getters
2204  int labelPadding; // directly accessed by QCPAxis setters/getters
2205  QFont labelFont;
2206  QColor labelColor;
2207  QString label;
2208  int tickLabelPadding; // directly accessed by QCPAxis setters/getters
2209  double tickLabelRotation; // directly accessed by QCPAxis setters/getters
2210  QCPAxis::LabelSide tickLabelSide; // directly accessed by QCPAxis setters/getters
2212  bool numberMultiplyCross; // directly accessed by QCPAxis setters/getters
2213  int tickLengthIn, tickLengthOut, subTickLengthIn, subTickLengthOut; // directly accessed by QCPAxis setters/getters
2214  QPen tickPen, subTickPen;
2217  QRect axisRect, viewportRect;
2218  double offset; // directly accessed by QCPAxis setters/getters
2221 
2222  QVector<double> subTickPositions;
2223  QVector<double> tickPositions;
2224  QVector<QString> tickLabels;
2225 
2226 protected:
2228  {
2229  QPointF offset;
2230  QPixmap pixmap;
2231  };
2233  {
2234  QString basePart, expPart, suffixPart;
2235  QRect baseBounds, expBounds, suffixBounds, totalBounds, rotatedTotalBounds;
2236  QFont baseFont, expFont;
2237  };
2238  QCustomPlot *mParentPlot;
2239  QByteArray mLabelParameterHash; // to determine whether mLabelCache needs to be cleared due to changed parameters
2240  QCache<QString, CachedLabel> mLabelCache;
2241  QRect mAxisSelectionBox, mTickLabelsSelectionBox, mLabelSelectionBox;
2242 
2243  virtual QByteArray generateLabelParameterHash() const;
2244 
2245  virtual void placeTickLabel(QCPPainter *painter, double position, int distanceToAxis, const QString &text, QSize *tickLabelsSize);
2246  virtual void drawTickLabel(QCPPainter *painter, double x, double y, const TickLabelData &labelData) const;
2247  virtual TickLabelData getTickLabelData(const QFont &font, const QString &text) const;
2248  virtual QPointF getTickLabelDrawOffset(const TickLabelData &labelData) const;
2249  virtual void getMaxTickLabelSize(const QFont &font, const QString &text, QSize *tickLabelsSize) const;
2250 };
2251 
2252 /* end of 'src/axis/axis.h' */
2253 
2254 
2255 /* including file 'src/scatterstyle.h', size 7275 */
2256 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
2257 
2259 {
2260  Q_GADGET
2261 public:
2270  enum ScatterProperty { spNone = 0x00
2271  ,spPen = 0x01
2272  ,spBrush = 0x02
2273  ,spSize = 0x04
2274  ,spShape = 0x08
2275  ,spAll = 0xFF
2276  };
2277  Q_ENUMS(ScatterProperty)
2278  Q_FLAGS(ScatterProperties)
2279  Q_DECLARE_FLAGS(ScatterProperties, ScatterProperty)
2280 
2288  enum ScatterShape { ssNone
2289  ,ssDot
2290  ,ssCross
2291  ,ssPlus
2292  ,ssCircle
2293  ,ssDisc
2294  ,ssSquare
2295  ,ssDiamond
2296  ,ssStar
2297  ,ssTriangle
2298  ,ssTriangleInverted
2299  ,ssCrossSquare
2300  ,ssPlusSquare
2301  ,ssCrossCircle
2302  ,ssPlusCircle
2303  ,ssPeace
2304  ,ssPixmap
2305  ,ssCustom
2306  };
2307  Q_ENUMS(ScatterShape)
2308 
2309  QCPScatterStyle();
2310  QCPScatterStyle(ScatterShape shape, double size=6);
2311  QCPScatterStyle(ScatterShape shape, const QColor &color, double size);
2312  QCPScatterStyle(ScatterShape shape, const QColor &color, const QColor &fill, double size);
2313  QCPScatterStyle(ScatterShape shape, const QPen &pen, const QBrush &brush, double size);
2314  QCPScatterStyle(const QPixmap &pixmap);
2315  QCPScatterStyle(const QPainterPath &customPath, const QPen &pen, const QBrush &brush=Qt::NoBrush, double size=6);
2316 
2317  // getters:
2318  double size() const { return mSize; }
2319  ScatterShape shape() const { return mShape; }
2320  QPen pen() const { return mPen; }
2321  QBrush brush() const { return mBrush; }
2322  QPixmap pixmap() const { return mPixmap; }
2323  QPainterPath customPath() const { return mCustomPath; }
2324 
2325  // setters:
2326  void setFromOther(const QCPScatterStyle &other, ScatterProperties properties);
2327  void setSize(double size);
2328  void setShape(ScatterShape shape);
2329  void setPen(const QPen &pen);
2330  void setBrush(const QBrush &brush);
2331  void setPixmap(const QPixmap &pixmap);
2332  void setCustomPath(const QPainterPath &customPath);
2333 
2334  // non-property methods:
2335  bool isNone() const { return mShape == ssNone; }
2336  bool isPenDefined() const { return mPenDefined; }
2337  void undefinePen();
2338  void applyTo(QCPPainter *painter, const QPen &defaultPen) const;
2339  void drawShape(QCPPainter *painter, const QPointF &pos) const;
2340  void drawShape(QCPPainter *painter, double x, double y) const;
2341 
2342 protected:
2343  // property members:
2344  double mSize;
2346  QPen mPen;
2347  QBrush mBrush;
2348  QPixmap mPixmap;
2349  QPainterPath mCustomPath;
2350 
2351  // non-property members:
2353 };
2354 Q_DECLARE_TYPEINFO(QCPScatterStyle, Q_MOVABLE_TYPE);
2355 Q_DECLARE_OPERATORS_FOR_FLAGS(QCPScatterStyle::ScatterProperties)
2356 Q_DECLARE_METATYPE(QCPScatterStyle::ScatterProperty)
2357 Q_DECLARE_METATYPE(QCPScatterStyle::ScatterShape)
2358 
2359 /* end of 'src/scatterstyle.h' */
2360 
2361 
2362 /* including file 'src/datacontainer.h', size 4535 */
2363 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
2364 
2370 template <class DataType>
2371 inline bool qcpLessThanSortKey(const DataType &a, const DataType &b) { return a.sortKey() < b.sortKey(); }
2372 
2373 template <class DataType>
2375 {
2376 public:
2377  typedef typename QVector<DataType>::const_iterator const_iterator;
2378  typedef typename QVector<DataType>::iterator iterator;
2379 
2380  QCPDataContainer();
2381 
2382  // getters:
2383  int size() const { return mData.size()-mPreallocSize; }
2384  bool isEmpty() const { return size() == 0; }
2385  bool autoSqueeze() const { return mAutoSqueeze; }
2386 
2387  // setters:
2388  void setAutoSqueeze(bool enabled);
2389 
2390  // non-virtual methods:
2391  void set(const QCPDataContainer<DataType> &data);
2392  void set(const QVector<DataType> &data, bool alreadySorted=false);
2393  void add(const QCPDataContainer<DataType> &data);
2394  void add(const QVector<DataType> &data, bool alreadySorted=false);
2395  void add(const DataType &data);
2396  void removeBefore(double sortKey);
2397  void removeAfter(double sortKey);
2398  void remove(double sortKeyFrom, double sortKeyTo);
2399  void remove(double sortKey);
2400  void clear();
2401  void sort();
2402  void squeeze(bool preAllocation=true, bool postAllocation=true);
2403 
2404  const_iterator constBegin() const { return mData.constBegin()+mPreallocSize; }
2405  const_iterator constEnd() const { return mData.constEnd(); }
2406  iterator begin() { return mData.begin()+mPreallocSize; }
2407  iterator end() { return mData.end(); }
2408  const_iterator findBegin(double sortKey, bool expandedRange=true) const;
2409  const_iterator findEnd(double sortKey, bool expandedRange=true) const;
2410  const_iterator at(int index) const { return constBegin()+qBound(0, index, size()); }
2411  QCPRange keyRange(bool &foundRange, QCP::SignDomain signDomain=QCP::sdBoth);
2412  QCPRange valueRange(bool &foundRange, QCP::SignDomain signDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange());
2413  QCPDataRange dataRange() const { return QCPDataRange(0, size()); }
2414  void limitIteratorsToDataRange(const_iterator &begin, const_iterator &end, const QCPDataRange &dataRange) const;
2415 
2416 protected:
2417  // property members:
2419 
2420  // non-property memebers:
2421  QVector<DataType> mData;
2424 
2425  // non-virtual methods:
2426  void preallocateGrow(int minimumPreallocSize);
2427  void performAutoSqueeze();
2428 };
2429 
2430 // include implementation in header since it is a class template:
2431 
2432 /* including file 'src/datacontainer.cpp', size 31224 */
2433 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
2434 
2438 
2506 /* start documentation of inline functions */
2507 
2562 /* end documentation of inline functions */
2563 
2568 template <class DataType>
2570  mAutoSqueeze(true),
2571  mPreallocSize(0),
2572  mPreallocIteration(0)
2573 {
2574 }
2575 
2584 template <class DataType>
2586 {
2587  if (mAutoSqueeze != enabled)
2588  {
2589  mAutoSqueeze = enabled;
2590  if (mAutoSqueeze)
2592  }
2593 }
2594 
2601 template <class DataType>
2603 {
2604  clear();
2605  add(data);
2606 }
2607 
2617 template <class DataType>
2618 void QCPDataContainer<DataType>::set(const QVector<DataType> &data, bool alreadySorted)
2619 {
2620  mData = data;
2621  mPreallocSize = 0;
2622  mPreallocIteration = 0;
2623  if (!alreadySorted)
2624  sort();
2625 }
2626 
2633 template <class DataType>
2635 {
2636  if (data.isEmpty())
2637  return;
2638 
2639  const int n = data.size();
2640  const int oldSize = size();
2641 
2642  if (oldSize > 0 && !qcpLessThanSortKey<DataType>(*constBegin(), *(data.constEnd()-1))) // prepend if new data keys are all smaller than or equal to existing ones
2643  {
2644  if (mPreallocSize < n)
2645  preallocateGrow(n);
2646  mPreallocSize -= n;
2647  std::copy(data.constBegin(), data.constEnd(), begin());
2648  } else // don't need to prepend, so append and merge if necessary
2649  {
2650  mData.resize(mData.size()+n);
2651  std::copy(data.constBegin(), data.constEnd(), end()-n);
2652  if (oldSize > 0 && !qcpLessThanSortKey<DataType>(*(constEnd()-n-1), *(constEnd()-n))) // if appended range keys aren't all greater than existing ones, merge the two partitions
2653  std::inplace_merge(begin(), end()-n, end(), qcpLessThanSortKey<DataType>);
2654  }
2655 }
2656 
2665 template <class DataType>
2666 void QCPDataContainer<DataType>::add(const QVector<DataType> &data, bool alreadySorted)
2667 {
2668  if (data.isEmpty())
2669  return;
2670  if (isEmpty())
2671  {
2672  set(data, alreadySorted);
2673  return;
2674  }
2675 
2676  const int n = data.size();
2677  const int oldSize = size();
2678 
2679  if (alreadySorted && oldSize > 0 && !qcpLessThanSortKey<DataType>(*constBegin(), *(data.constEnd()-1))) // prepend if new data is sorted and keys are all smaller than or equal to existing ones
2680  {
2681  if (mPreallocSize < n)
2682  preallocateGrow(n);
2683  mPreallocSize -= n;
2684  std::copy(data.constBegin(), data.constEnd(), begin());
2685  } else // don't need to prepend, so append and then sort and merge if necessary
2686  {
2687  mData.resize(mData.size()+n);
2688  std::copy(data.constBegin(), data.constEnd(), end()-n);
2689  if (!alreadySorted) // sort appended subrange if it wasn't already sorted
2690  std::sort(end()-n, end(), qcpLessThanSortKey<DataType>);
2691  if (oldSize > 0 && !qcpLessThanSortKey<DataType>(*(constEnd()-n-1), *(constEnd()-n))) // if appended range keys aren't all greater than existing ones, merge the two partitions
2692  std::inplace_merge(begin(), end()-n, end(), qcpLessThanSortKey<DataType>);
2693  }
2694 }
2695 
2702 template <class DataType>
2703 void QCPDataContainer<DataType>::add(const DataType &data)
2704 {
2705  if (isEmpty() || !qcpLessThanSortKey<DataType>(data, *(constEnd()-1))) // quickly handle appends if new data key is greater or equal to existing ones
2706  {
2707  mData.append(data);
2708  } else if (qcpLessThanSortKey<DataType>(data, *constBegin())) // quickly handle prepends using preallocated space
2709  {
2710  if (mPreallocSize < 1)
2711  preallocateGrow(1);
2712  --mPreallocSize;
2713  *begin() = data;
2714  } else // handle inserts, maintaining sorted keys
2715  {
2716  QCPDataContainer<DataType>::iterator insertionPoint = std::lower_bound(begin(), end(), data, qcpLessThanSortKey<DataType>);
2717  mData.insert(insertionPoint, data);
2718  }
2719 }
2720 
2726 template <class DataType>
2728 {
2730  QCPDataContainer<DataType>::iterator itEnd = std::lower_bound(begin(), end(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
2731  mPreallocSize += itEnd-it; // don't actually delete, just add it to the preallocated block (if it gets too large, squeeze will take care of it)
2732  if (mAutoSqueeze)
2734 }
2735 
2741 template <class DataType>
2743 {
2744  QCPDataContainer<DataType>::iterator it = std::upper_bound(begin(), end(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
2746  mData.erase(it, itEnd); // typically adds it to the postallocated block
2747  if (mAutoSqueeze)
2749 }
2750 
2758 template <class DataType>
2759 void QCPDataContainer<DataType>::remove(double sortKeyFrom, double sortKeyTo)
2760 {
2761  if (sortKeyFrom >= sortKeyTo || isEmpty())
2762  return;
2763 
2764  QCPDataContainer<DataType>::iterator it = std::lower_bound(begin(), end(), DataType::fromSortKey(sortKeyFrom), qcpLessThanSortKey<DataType>);
2765  QCPDataContainer<DataType>::iterator itEnd = std::upper_bound(it, end(), DataType::fromSortKey(sortKeyTo), qcpLessThanSortKey<DataType>);
2766  mData.erase(it, itEnd);
2767  if (mAutoSqueeze)
2769 }
2770 
2780 template <class DataType>
2782 {
2783  QCPDataContainer::iterator it = std::lower_bound(begin(), end(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
2784  if (it != end() && it->sortKey() == sortKey)
2785  {
2786  if (it == begin())
2787  ++mPreallocSize; // don't actually delete, just add it to the preallocated block (if it gets too large, squeeze will take care of it)
2788  else
2789  mData.erase(it);
2790  }
2791  if (mAutoSqueeze)
2793 }
2794 
2800 template <class DataType>
2802 {
2803  mData.clear();
2804  mPreallocIteration = 0;
2805  mPreallocSize = 0;
2806 }
2807 
2819 template <class DataType>
2821 {
2822  std::sort(begin(), end(), qcpLessThanSortKey<DataType>);
2823 }
2824 
2835 template <class DataType>
2836 void QCPDataContainer<DataType>::squeeze(bool preAllocation, bool postAllocation)
2837 {
2838  if (preAllocation)
2839  {
2840  if (mPreallocSize > 0)
2841  {
2842  std::copy(begin(), end(), mData.begin());
2843  mData.resize(size());
2844  mPreallocSize = 0;
2845  }
2846  mPreallocIteration = 0;
2847  }
2848  if (postAllocation)
2849  mData.squeeze();
2850 }
2851 
2867 template <class DataType>
2869 {
2870  if (isEmpty())
2871  return constEnd();
2872 
2873  QCPDataContainer<DataType>::const_iterator it = std::lower_bound(constBegin(), constEnd(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
2874  if (expandedRange && it != constBegin()) // also covers it == constEnd case, and we know --constEnd is valid because mData isn't empty
2875  --it;
2876  return it;
2877 }
2878 
2894 template <class DataType>
2896 {
2897  if (isEmpty())
2898  return constEnd();
2899 
2900  QCPDataContainer<DataType>::const_iterator it = std::upper_bound(constBegin(), constEnd(), DataType::fromSortKey(sortKey), qcpLessThanSortKey<DataType>);
2901  if (expandedRange && it != constEnd())
2902  ++it;
2903  return it;
2904 }
2905 
2921 template <class DataType>
2923 {
2924  if (isEmpty())
2925  {
2926  foundRange = false;
2927  return QCPRange();
2928  }
2929  QCPRange range;
2930  bool haveLower = false;
2931  bool haveUpper = false;
2932  double current;
2933 
2936  if (signDomain == QCP::sdBoth) // range may be anywhere
2937  {
2938  if (DataType::sortKeyIsMainKey()) // if DataType is sorted by main key (e.g. QCPGraph, but not QCPCurve), use faster algorithm by finding just first and last key with non-NaN value
2939  {
2940  while (it != itEnd) // find first non-nan going up from left
2941  {
2942  if (!qIsNaN(it->mainValue()))
2943  {
2944  range.lower = it->mainKey();
2945  haveLower = true;
2946  break;
2947  }
2948  ++it;
2949  }
2950  it = itEnd;
2951  while (it != constBegin()) // find first non-nan going down from right
2952  {
2953  --it;
2954  if (!qIsNaN(it->mainValue()))
2955  {
2956  range.upper = it->mainKey();
2957  haveUpper = true;
2958  break;
2959  }
2960  }
2961  } else // DataType is not sorted by main key, go through all data points and accordingly expand range
2962  {
2963  while (it != itEnd)
2964  {
2965  if (!qIsNaN(it->mainValue()))
2966  {
2967  current = it->mainKey();
2968  if (current < range.lower || !haveLower)
2969  {
2970  range.lower = current;
2971  haveLower = true;
2972  }
2973  if (current > range.upper || !haveUpper)
2974  {
2975  range.upper = current;
2976  haveUpper = true;
2977  }
2978  }
2979  ++it;
2980  }
2981  }
2982  } else if (signDomain == QCP::sdNegative) // range may only be in the negative sign domain
2983  {
2984  while (it != itEnd)
2985  {
2986  if (!qIsNaN(it->mainValue()))
2987  {
2988  current = it->mainKey();
2989  if ((current < range.lower || !haveLower) && current < 0)
2990  {
2991  range.lower = current;
2992  haveLower = true;
2993  }
2994  if ((current > range.upper || !haveUpper) && current < 0)
2995  {
2996  range.upper = current;
2997  haveUpper = true;
2998  }
2999  }
3000  ++it;
3001  }
3002  } else if (signDomain == QCP::sdPositive) // range may only be in the positive sign domain
3003  {
3004  while (it != itEnd)
3005  {
3006  if (!qIsNaN(it->mainValue()))
3007  {
3008  current = it->mainKey();
3009  if ((current < range.lower || !haveLower) && current > 0)
3010  {
3011  range.lower = current;
3012  haveLower = true;
3013  }
3014  if ((current > range.upper || !haveUpper) && current > 0)
3015  {
3016  range.upper = current;
3017  haveUpper = true;
3018  }
3019  }
3020  ++it;
3021  }
3022  }
3023 
3024  foundRange = haveLower && haveUpper;
3025  return range;
3026 }
3027 
3044 template <class DataType>
3045 QCPRange QCPDataContainer<DataType>::valueRange(bool &foundRange, QCP::SignDomain signDomain, const QCPRange &inKeyRange)
3046 {
3047  if (isEmpty())
3048  {
3049  foundRange = false;
3050  return QCPRange();
3051  }
3052  QCPRange range;
3053  const bool restrictKeyRange = inKeyRange != QCPRange();
3054  bool haveLower = false;
3055  bool haveUpper = false;
3056  QCPRange current;
3059  if (DataType::sortKeyIsMainKey() && restrictKeyRange)
3060  {
3061  itBegin = findBegin(inKeyRange.lower);
3062  itEnd = findEnd(inKeyRange.upper);
3063  }
3064  if (signDomain == QCP::sdBoth) // range may be anywhere
3065  {
3066  for (QCPDataContainer<DataType>::const_iterator it = itBegin; it != itEnd; ++it)
3067  {
3068  if (restrictKeyRange && (it->mainKey() < inKeyRange.lower || it->mainKey() > inKeyRange.upper))
3069  continue;
3070  current = it->valueRange();
3071  if ((current.lower < range.lower || !haveLower) && !qIsNaN(current.lower))
3072  {
3073  range.lower = current.lower;
3074  haveLower = true;
3075  }
3076  if ((current.upper > range.upper || !haveUpper) && !qIsNaN(current.upper))
3077  {
3078  range.upper = current.upper;
3079  haveUpper = true;
3080  }
3081  }
3082  } else if (signDomain == QCP::sdNegative) // range may only be in the negative sign domain
3083  {
3084  for (QCPDataContainer<DataType>::const_iterator it = itBegin; it != itEnd; ++it)
3085  {
3086  if (restrictKeyRange && (it->mainKey() < inKeyRange.lower || it->mainKey() > inKeyRange.upper))
3087  continue;
3088  current = it->valueRange();
3089  if ((current.lower < range.lower || !haveLower) && current.lower < 0 && !qIsNaN(current.lower))
3090  {
3091  range.lower = current.lower;
3092  haveLower = true;
3093  }
3094  if ((current.upper > range.upper || !haveUpper) && current.upper < 0 && !qIsNaN(current.upper))
3095  {
3096  range.upper = current.upper;
3097  haveUpper = true;
3098  }
3099  }
3100  } else if (signDomain == QCP::sdPositive) // range may only be in the positive sign domain
3101  {
3102  for (QCPDataContainer<DataType>::const_iterator it = itBegin; it != itEnd; ++it)
3103  {
3104  if (restrictKeyRange && (it->mainKey() < inKeyRange.lower || it->mainKey() > inKeyRange.upper))
3105  continue;
3106  current = it->valueRange();
3107  if ((current.lower < range.lower || !haveLower) && current.lower > 0 && !qIsNaN(current.lower))
3108  {
3109  range.lower = current.lower;
3110  haveLower = true;
3111  }
3112  if ((current.upper > range.upper || !haveUpper) && current.upper > 0 && !qIsNaN(current.upper))
3113  {
3114  range.upper = current.upper;
3115  haveUpper = true;
3116  }
3117  }
3118  }
3119 
3120  foundRange = haveLower && haveUpper;
3121  return range;
3122 }
3123 
3131 template <class DataType>
3133 {
3134  QCPDataRange iteratorRange(begin-constBegin(), end-constBegin());
3135  iteratorRange = iteratorRange.bounded(dataRange.bounded(this->dataRange()));
3136  begin = constBegin()+iteratorRange.begin();
3137  end = constBegin()+iteratorRange.end();
3138 }
3139 
3149 template <class DataType>
3150 void QCPDataContainer<DataType>::preallocateGrow(int minimumPreallocSize)
3151 {
3152  if (minimumPreallocSize <= mPreallocSize)
3153  return;
3154 
3155  int newPreallocSize = minimumPreallocSize;
3156  newPreallocSize += (1u<<qBound(4, mPreallocIteration+4, 15)) - 12; // do 4 up to 32768-12 preallocation, doubling in each intermediate iteration
3158 
3159  int sizeDifference = newPreallocSize-mPreallocSize;
3160  mData.resize(mData.size()+sizeDifference);
3161  std::copy_backward(mData.begin()+mPreallocSize, mData.end()-sizeDifference, mData.end());
3162  mPreallocSize = newPreallocSize;
3163 }
3164 
3179 template <class DataType>
3181 {
3182  const int totalAlloc = mData.capacity();
3183  const int postAllocSize = totalAlloc-mData.size();
3184  const int usedSize = size();
3185  bool shrinkPostAllocation = false;
3186  bool shrinkPreAllocation = false;
3187  if (totalAlloc > 650000) // if allocation is larger, shrink earlier with respect to total used size
3188  {
3189  shrinkPostAllocation = postAllocSize > usedSize*1.5; // QVector grow strategy is 2^n for static data. Watch out not to oscillate!
3190  shrinkPreAllocation = mPreallocSize*10 > usedSize;
3191  } else if (totalAlloc > 1000) // below 10 MiB raw data be generous with preallocated memory, below 1k points don't even bother
3192  {
3193  shrinkPostAllocation = postAllocSize > usedSize*5;
3194  shrinkPreAllocation = mPreallocSize > usedSize*1.5; // preallocation can grow into postallocation, so can be smaller
3195  }
3196 
3197  if (shrinkPreAllocation || shrinkPostAllocation)
3198  squeeze(shrinkPreAllocation, shrinkPostAllocation);
3199 }
3200 /* end of 'src/datacontainer.cpp' */
3201 
3202 
3203 /* end of 'src/datacontainer.h' */
3204 
3205 
3206 /* including file 'src/plottable.h', size 8312 */
3207 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
3208 
3210 {
3211  Q_GADGET
3212 public:
3214  virtual ~QCPSelectionDecorator();
3215 
3216  // getters:
3217  QPen pen() const { return mPen; }
3218  QBrush brush() const { return mBrush; }
3219  QCPScatterStyle scatterStyle() const { return mScatterStyle; }
3220  QCPScatterStyle::ScatterProperties usedScatterProperties() const { return mUsedScatterProperties; }
3221 
3222  // setters:
3223  void setPen(const QPen &pen);
3224  void setBrush(const QBrush &brush);
3225  void setScatterStyle(const QCPScatterStyle &scatterStyle, QCPScatterStyle::ScatterProperties usedProperties=QCPScatterStyle::spPen);
3226  void setUsedScatterProperties(const QCPScatterStyle::ScatterProperties &properties);
3227 
3228  // non-virtual methods:
3229  void applyPen(QCPPainter *painter) const;
3230  void applyBrush(QCPPainter *painter) const;
3231  QCPScatterStyle getFinalScatterStyle(const QCPScatterStyle &unselectedStyle) const;
3232 
3233  // introduced virtual methods:
3234  virtual void copyFrom(const QCPSelectionDecorator *other);
3235  virtual void drawDecoration(QCPPainter *painter, QCPDataSelection selection);
3236 
3237 protected:
3238  // property members:
3239  QPen mPen;
3240  QBrush mBrush;
3242  QCPScatterStyle::ScatterProperties mUsedScatterProperties;
3243  // non-property members:
3245 
3246  // introduced virtual methods:
3247  virtual bool registerWithPlottable(QCPAbstractPlottable *plottable);
3248 
3249 private:
3250  Q_DISABLE_COPY(QCPSelectionDecorator)
3251  friend class QCPAbstractPlottable;
3252 };
3253 Q_DECLARE_METATYPE(QCPSelectionDecorator*)
3254 
3255 
3256 class QCP_LIB_DECL QCPAbstractPlottable : public QCPLayerable
3257 {
3258  Q_OBJECT
3260  Q_PROPERTY(QString name READ name WRITE setName)
3261  Q_PROPERTY(bool antialiasedFill READ antialiasedFill WRITE setAntialiasedFill)
3262  Q_PROPERTY(bool antialiasedScatters READ antialiasedScatters WRITE setAntialiasedScatters)
3263  Q_PROPERTY(QPen pen READ pen WRITE setPen)
3264  Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
3265  Q_PROPERTY(QCPAxis* keyAxis READ keyAxis WRITE setKeyAxis)
3266  Q_PROPERTY(QCPAxis* valueAxis READ valueAxis WRITE setValueAxis)
3267  Q_PROPERTY(QCP::SelectionType selectable READ selectable WRITE setSelectable NOTIFY selectableChanged)
3268  Q_PROPERTY(QCPDataSelection selection READ selection WRITE setSelection NOTIFY selectionChanged)
3269  Q_PROPERTY(QCPSelectionDecorator* selectionDecorator READ selectionDecorator WRITE setSelectionDecorator)
3271 public:
3272  QCPAbstractPlottable(QCPAxis *keyAxis, QCPAxis *valueAxis);
3273  virtual ~QCPAbstractPlottable();
3274 
3275  // getters:
3276  QString name() const { return mName; }
3277  bool antialiasedFill() const { return mAntialiasedFill; }
3278  bool antialiasedScatters() const { return mAntialiasedScatters; }
3279  QPen pen() const { return mPen; }
3280  QBrush brush() const { return mBrush; }
3281  QCPAxis *keyAxis() const { return mKeyAxis.data(); }
3282  QCPAxis *valueAxis() const { return mValueAxis.data(); }
3283  QCP::SelectionType selectable() const { return mSelectable; }
3284  bool selected() const { return !mSelection.isEmpty(); }
3285  QCPDataSelection selection() const { return mSelection; }
3286  QCPSelectionDecorator *selectionDecorator() const { return mSelectionDecorator; }
3287 
3288  // setters:
3289  void setName(const QString &name);
3290  void setAntialiasedFill(bool enabled);
3291  void setAntialiasedScatters(bool enabled);
3292  void setPen(const QPen &pen);
3293  void setBrush(const QBrush &brush);
3294  void setKeyAxis(QCPAxis *axis);
3295  void setValueAxis(QCPAxis *axis);
3296  Q_SLOT void setSelectable(QCP::SelectionType selectable);
3297  Q_SLOT void setSelection(QCPDataSelection selection);
3298  void setSelectionDecorator(QCPSelectionDecorator *decorator);
3299 
3300  // introduced virtual methods:
3301  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const = 0;
3302  virtual QCPPlottableInterface1D *interface1D() { return 0; }
3303  virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const = 0;
3304  virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const = 0;
3305 
3306  // non-property methods:
3307  void coordsToPixels(double key, double value, double &x, double &y) const;
3308  const QPointF coordsToPixels(double key, double value) const;
3309  void pixelsToCoords(double x, double y, double &key, double &value) const;
3310  void pixelsToCoords(const QPointF &pixelPos, double &key, double &value) const;
3311  void rescaleAxes(bool onlyEnlarge=false) const;
3312  void rescaleKeyAxis(bool onlyEnlarge=false) const;
3313  void rescaleValueAxis(bool onlyEnlarge=false, bool inKeyRange=false) const;
3314  bool addToLegend(QCPLegend *legend);
3315  bool addToLegend();
3316  bool removeFromLegend(QCPLegend *legend) const;
3317  bool removeFromLegend() const;
3318 
3319 signals:
3320  void selectionChanged(bool selected);
3321  void selectionChanged(const QCPDataSelection &selection);
3322  void selectableChanged(QCP::SelectionType selectable);
3323 
3324 protected:
3325  // property members:
3326  QString mName;
3327  bool mAntialiasedFill, mAntialiasedScatters;
3328  QPen mPen;
3329  QBrush mBrush;
3330  QPointer<QCPAxis> mKeyAxis, mValueAxis;
3334 
3335  // reimplemented virtual methods:
3336  virtual QRect clipRect() const Q_DECL_OVERRIDE;
3337  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE = 0;
3338  virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
3339  void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
3340  // events:
3341  virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
3342  virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
3343 
3344  // introduced virtual methods:
3345  virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const = 0;
3346 
3347  // non-virtual methods:
3348  void applyFillAntialiasingHint(QCPPainter *painter) const;
3349  void applyScattersAntialiasingHint(QCPPainter *painter) const;
3350 
3351 private:
3352  Q_DISABLE_COPY(QCPAbstractPlottable)
3353 
3354  friend class QCustomPlot;
3355  friend class QCPAxis;
3357 };
3358 
3359 
3360 /* end of 'src/plottable.h' */
3361 
3362 
3363 /* including file 'src/item.h', size 9368 */
3364 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
3365 
3367 {
3368  Q_GADGET
3369 public:
3370  QCPItemAnchor(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString &name, int anchorId=-1);
3371  virtual ~QCPItemAnchor();
3372 
3373  // getters:
3374  QString name() const { return mName; }
3375  virtual QPointF pixelPosition() const;
3376 
3377 protected:
3378  // property members:
3379  QString mName;
3380 
3381  // non-property members:
3382  QCustomPlot *mParentPlot;
3385  QSet<QCPItemPosition*> mChildrenX, mChildrenY;
3386 
3387  // introduced virtual methods:
3388  virtual QCPItemPosition *toQCPItemPosition() { return 0; }
3389 
3390  // non-virtual methods:
3391  void addChildX(QCPItemPosition* pos); // called from pos when this anchor is set as parent
3392  void removeChildX(QCPItemPosition *pos); // called from pos when its parent anchor is reset or pos deleted
3393  void addChildY(QCPItemPosition* pos); // called from pos when this anchor is set as parent
3394  void removeChildY(QCPItemPosition *pos); // called from pos when its parent anchor is reset or pos deleted
3395 
3396 private:
3397  Q_DISABLE_COPY(QCPItemAnchor)
3398 
3399  friend class QCPItemPosition;
3400 };
3401 
3402 
3403 
3404 class QCP_LIB_DECL QCPItemPosition : public QCPItemAnchor
3405 {
3406  Q_GADGET
3407 public:
3414  enum PositionType { ptAbsolute
3415  ,ptViewportRatio
3416  ,ptAxisRectRatio
3419  ,ptPlotCoords
3422  };
3423  Q_ENUMS(PositionType)
3424 
3425  QCPItemPosition(QCustomPlot *parentPlot, QCPAbstractItem *parentItem, const QString &name);
3426  virtual ~QCPItemPosition();
3427 
3428  // getters:
3429  PositionType type() const { return typeX(); }
3430  PositionType typeX() const { return mPositionTypeX; }
3431  PositionType typeY() const { return mPositionTypeY; }
3432  QCPItemAnchor *parentAnchor() const { return parentAnchorX(); }
3433  QCPItemAnchor *parentAnchorX() const { return mParentAnchorX; }
3434  QCPItemAnchor *parentAnchorY() const { return mParentAnchorY; }
3435  double key() const { return mKey; }
3436  double value() const { return mValue; }
3437  QPointF coords() const { return QPointF(mKey, mValue); }
3438  QCPAxis *keyAxis() const { return mKeyAxis.data(); }
3439  QCPAxis *valueAxis() const { return mValueAxis.data(); }
3440  QCPAxisRect *axisRect() const;
3441  virtual QPointF pixelPosition() const;
3442 
3443  // setters:
3444  void setType(PositionType type);
3445  void setTypeX(PositionType type);
3446  void setTypeY(PositionType type);
3447  bool setParentAnchor(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false);
3448  bool setParentAnchorX(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false);
3449  bool setParentAnchorY(QCPItemAnchor *parentAnchor, bool keepPixelPosition=false);
3450  void setCoords(double key, double value);
3451  void setCoords(const QPointF &coords);
3452  void setAxes(QCPAxis* keyAxis, QCPAxis* valueAxis);
3453  void setAxisRect(QCPAxisRect *axisRect);
3454  void setPixelPosition(const QPointF &pixelPosition);
3455 
3456 protected:
3457  // property members:
3458  PositionType mPositionTypeX, mPositionTypeY;
3459  QPointer<QCPAxis> mKeyAxis, mValueAxis;
3460  QPointer<QCPAxisRect> mAxisRect;
3461  double mKey, mValue;
3462  QCPItemAnchor *mParentAnchorX, *mParentAnchorY;
3463 
3464  // reimplemented virtual methods:
3465  virtual QCPItemPosition *toQCPItemPosition() Q_DECL_OVERRIDE { return this; }
3466 
3467 private:
3468  Q_DISABLE_COPY(QCPItemPosition)
3469 
3470 };
3471 Q_DECLARE_METATYPE(QCPItemPosition::PositionType)
3472 
3473 
3474 class QCP_LIB_DECL QCPAbstractItem : public QCPLayerable
3475 {
3476  Q_OBJECT
3478  Q_PROPERTY(bool clipToAxisRect READ clipToAxisRect WRITE setClipToAxisRect)
3479  Q_PROPERTY(QCPAxisRect* clipAxisRect READ clipAxisRect WRITE setClipAxisRect)
3480  Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectableChanged)
3481  Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectionChanged)
3483 public:
3484  explicit QCPAbstractItem(QCustomPlot *parentPlot);
3485  virtual ~QCPAbstractItem();
3486 
3487  // getters:
3488  bool clipToAxisRect() const { return mClipToAxisRect; }
3489  QCPAxisRect *clipAxisRect() const;
3490  bool selectable() const { return mSelectable; }
3491  bool selected() const { return mSelected; }
3492 
3493  // setters:
3494  void setClipToAxisRect(bool clip);
3495  void setClipAxisRect(QCPAxisRect *rect);
3496  Q_SLOT void setSelectable(bool selectable);
3497  Q_SLOT void setSelected(bool selected);
3498 
3499  // reimplemented virtual methods:
3500  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE = 0;
3501 
3502  // non-virtual methods:
3503  QList<QCPItemPosition*> positions() const { return mPositions; }
3504  QList<QCPItemAnchor*> anchors() const { return mAnchors; }
3505  QCPItemPosition *position(const QString &name) const;
3506  QCPItemAnchor *anchor(const QString &name) const;
3507  bool hasAnchor(const QString &name) const;
3508 
3509 signals:
3510  void selectionChanged(bool selected);
3511  void selectableChanged(bool selectable);
3512 
3513 protected:
3514  // property members:
3516  QPointer<QCPAxisRect> mClipAxisRect;
3517  QList<QCPItemPosition*> mPositions;
3518  QList<QCPItemAnchor*> mAnchors;
3519  bool mSelectable, mSelected;
3520 
3521  // reimplemented virtual methods:
3522  virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
3523  virtual QRect clipRect() const Q_DECL_OVERRIDE;
3524  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
3525  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE = 0;
3526  // events:
3527  virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
3528  virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
3529 
3530  // introduced virtual methods:
3531  virtual QPointF anchorPixelPosition(int anchorId) const;
3532 
3533  // non-virtual methods:
3534  double rectDistance(const QRectF &rect, const QPointF &pos, bool filledRect) const;
3535  QCPItemPosition *createPosition(const QString &name);
3536  QCPItemAnchor *createAnchor(const QString &name, int anchorId);
3537 
3538 private:
3539  Q_DISABLE_COPY(QCPAbstractItem)
3540 
3541  friend class QCustomPlot;
3542  friend class QCPItemAnchor;
3543 };
3544 
3545 /* end of 'src/item.h' */
3546 
3547 
3548 /* including file 'src/core.h', size 14797 */
3549 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
3550 
3551 class QCP_LIB_DECL QCustomPlot : public QWidget
3552 {
3553  Q_OBJECT
3555  Q_PROPERTY(QRect viewport READ viewport WRITE setViewport)
3556  Q_PROPERTY(QPixmap background READ background WRITE setBackground)
3557  Q_PROPERTY(bool backgroundScaled READ backgroundScaled WRITE setBackgroundScaled)
3558  Q_PROPERTY(Qt::AspectRatioMode backgroundScaledMode READ backgroundScaledMode WRITE setBackgroundScaledMode)
3559  Q_PROPERTY(QCPLayoutGrid* plotLayout READ plotLayout)
3560  Q_PROPERTY(bool autoAddPlottableToLegend READ autoAddPlottableToLegend WRITE setAutoAddPlottableToLegend)
3561  Q_PROPERTY(int selectionTolerance READ selectionTolerance WRITE setSelectionTolerance)
3562  Q_PROPERTY(bool noAntialiasingOnDrag READ noAntialiasingOnDrag WRITE setNoAntialiasingOnDrag)
3563  Q_PROPERTY(Qt::KeyboardModifier multiSelectModifier READ multiSelectModifier WRITE setMultiSelectModifier)
3564  Q_PROPERTY(bool openGl READ openGl WRITE setOpenGl)
3566 public:
3572  enum LayerInsertMode { limBelow
3573  ,limAbove
3574  };
3575  Q_ENUMS(LayerInsertMode)
3576 
3577 
3582  enum RefreshPriority { rpImmediateRefresh
3583  ,rpQueuedRefresh
3584  ,rpRefreshHint
3585  ,rpQueuedReplot
3586  };
3587  Q_ENUMS(RefreshPriority)
3588 
3589  explicit QCustomPlot(QWidget *parent = 0);
3590  virtual ~QCustomPlot();
3591 
3592  // getters:
3593  QRect viewport() const { return mViewport; }
3594  double bufferDevicePixelRatio() const { return mBufferDevicePixelRatio; }
3595  QPixmap background() const { return mBackgroundPixmap; }
3596  bool backgroundScaled() const { return mBackgroundScaled; }
3597  Qt::AspectRatioMode backgroundScaledMode() const { return mBackgroundScaledMode; }
3598  QCPLayoutGrid *plotLayout() const { return mPlotLayout; }
3599  QCP::AntialiasedElements antialiasedElements() const { return mAntialiasedElements; }
3600  QCP::AntialiasedElements notAntialiasedElements() const { return mNotAntialiasedElements; }
3601  bool autoAddPlottableToLegend() const { return mAutoAddPlottableToLegend; }
3602  const QCP::Interactions interactions() const { return mInteractions; }
3603  int selectionTolerance() const { return mSelectionTolerance; }
3604  bool noAntialiasingOnDrag() const { return mNoAntialiasingOnDrag; }
3605  QCP::PlottingHints plottingHints() const { return mPlottingHints; }
3606  Qt::KeyboardModifier multiSelectModifier() const { return mMultiSelectModifier; }
3607  QCP::SelectionRectMode selectionRectMode() const { return mSelectionRectMode; }
3608  QCPSelectionRect *selectionRect() const { return mSelectionRect; }
3609  bool openGl() const { return mOpenGl; }
3610 
3611  // setters:
3612  void setViewport(const QRect &rect);
3613  void setBufferDevicePixelRatio(double ratio);
3614  void setBackground(const QPixmap &pm);
3615  void setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode=Qt::KeepAspectRatioByExpanding);
3616  void setBackground(const QBrush &brush);
3617  void setBackgroundScaled(bool scaled);
3618  void setBackgroundScaledMode(Qt::AspectRatioMode mode);
3619  void setAntialiasedElements(const QCP::AntialiasedElements &antialiasedElements);
3620  void setAntialiasedElement(QCP::AntialiasedElement antialiasedElement, bool enabled=true);
3621  void setNotAntialiasedElements(const QCP::AntialiasedElements &notAntialiasedElements);
3622  void setNotAntialiasedElement(QCP::AntialiasedElement notAntialiasedElement, bool enabled=true);
3623  void setAutoAddPlottableToLegend(bool on);
3624  void setInteractions(const QCP::Interactions &interactions);
3625  void setInteraction(const QCP::Interaction &interaction, bool enabled=true);
3626  void setSelectionTolerance(int pixels);
3627  void setNoAntialiasingOnDrag(bool enabled);
3628  void setPlottingHints(const QCP::PlottingHints &hints);
3629  void setPlottingHint(QCP::PlottingHint hint, bool enabled=true);
3630  void setMultiSelectModifier(Qt::KeyboardModifier modifier);
3631  void setSelectionRectMode(QCP::SelectionRectMode mode);
3632  void setSelectionRect(QCPSelectionRect *selectionRect);
3633  void setOpenGl(bool enabled, int multisampling=16);
3634 
3635  // non-property methods:
3636  // plottable interface:
3637  QCPAbstractPlottable *plottable(int index);
3638  QCPAbstractPlottable *plottable();
3639  bool removePlottable(QCPAbstractPlottable *plottable);
3640  bool removePlottable(int index);
3641  int clearPlottables();
3642  int plottableCount() const;
3643  QList<QCPAbstractPlottable*> selectedPlottables() const;
3644  QCPAbstractPlottable *plottableAt(const QPointF &pos, bool onlySelectable=false) const;
3645  bool hasPlottable(QCPAbstractPlottable *plottable) const;
3646 
3647  // specialized interface for QCPGraph:
3648  QCPGraph *graph(int index) const;
3649  QCPGraph *graph() const;
3650  QCPGraph *addGraph(QCPAxis *keyAxis=0, QCPAxis *valueAxis=0);
3651  bool removeGraph(QCPGraph *graph);
3652  bool removeGraph(int index);
3653  int clearGraphs();
3654  int graphCount() const;
3655  QList<QCPGraph*> selectedGraphs() const;
3656 
3657  // item interface:
3658  QCPAbstractItem *item(int index) const;
3659  QCPAbstractItem *item() const;
3660  bool removeItem(QCPAbstractItem *item);
3661  bool removeItem(int index);
3662  int clearItems();
3663  int itemCount() const;
3664  QList<QCPAbstractItem*> selectedItems() const;
3665  QCPAbstractItem *itemAt(const QPointF &pos, bool onlySelectable=false) const;
3666  bool hasItem(QCPAbstractItem *item) const;
3667 
3668  // layer interface:
3669  QCPLayer *layer(const QString &name) const;
3670  QCPLayer *layer(int index) const;
3671  QCPLayer *currentLayer() const;
3672  bool setCurrentLayer(const QString &name);
3673  bool setCurrentLayer(QCPLayer *layer);
3674  int layerCount() const;
3675  bool addLayer(const QString &name, QCPLayer *otherLayer=0, LayerInsertMode insertMode=limAbove);
3676  bool removeLayer(QCPLayer *layer);
3677  bool moveLayer(QCPLayer *layer, QCPLayer *otherLayer, LayerInsertMode insertMode=limAbove);
3678 
3679  // axis rect/layout interface:
3680  int axisRectCount() const;
3681  QCPAxisRect* axisRect(int index=0) const;
3682  QList<QCPAxisRect*> axisRects() const;
3683  QCPLayoutElement* layoutElementAt(const QPointF &pos) const;
3684  QCPAxisRect* axisRectAt(const QPointF &pos) const;
3685  Q_SLOT void rescaleAxes(bool onlyVisiblePlottables=false);
3686 
3687  QList<QCPAxis*> selectedAxes() const;
3688  QList<QCPLegend*> selectedLegends() const;
3689  Q_SLOT void deselectAll();
3690 
3691  bool savePdf(const QString &fileName, int width=0, int height=0, QCP::ExportPen exportPen=QCP::epAllowCosmetic, const QString &pdfCreator=QString(), const QString &pdfTitle=QString());
3692  bool savePng(const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch);
3693  bool saveJpg(const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch);
3694  bool saveBmp(const QString &fileName, int width=0, int height=0, double scale=1.0, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch);
3695  bool saveRastered(const QString &fileName, int width, int height, double scale, const char *format, int quality=-1, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch);
3696  QPixmap toPixmap(int width=0, int height=0, double scale=1.0);
3697  void toPainter(QCPPainter *painter, int width=0, int height=0);
3698  Q_SLOT void replot(QCustomPlot::RefreshPriority refreshPriority=QCustomPlot::rpRefreshHint);
3699 
3700  QCPAxis *xAxis, *yAxis, *xAxis2, *yAxis2;
3702 
3703 signals:
3704  void mouseDoubleClick(QMouseEvent *event);
3705  void mousePress(QMouseEvent *event);
3706  void mouseMove(QMouseEvent *event);
3707  void mouseRelease(QMouseEvent *event);
3708  void mouseWheel(QWheelEvent *event);
3709 
3710  void plottableClick(QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event);
3711  void plottableDoubleClick(QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event);
3712  void itemClick(QCPAbstractItem *item, QMouseEvent *event);
3713  void itemDoubleClick(QCPAbstractItem *item, QMouseEvent *event);
3714  void axisClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event);
3715  void axisDoubleClick(QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event);
3716  void legendClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event);
3717  void legendDoubleClick(QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event);
3718 
3719  void selectionChangedByUser();
3720  void beforeReplot();
3721  void afterReplot();
3722 
3723 protected:
3724  // property members:
3725  QRect mViewport;
3729  QList<QCPAbstractPlottable*> mPlottables;
3730  QList<QCPGraph*> mGraphs; // extra list of plottables also in mPlottables that are of type QCPGraph
3731  QList<QCPAbstractItem*> mItems;
3732  QList<QCPLayer*> mLayers;
3733  QCP::AntialiasedElements mAntialiasedElements, mNotAntialiasedElements;
3734  QCP::Interactions mInteractions;
3741  Qt::AspectRatioMode mBackgroundScaledMode;
3743  QCP::PlottingHints mPlottingHints;
3744  Qt::KeyboardModifier mMultiSelectModifier;
3747  bool mOpenGl;
3748 
3749  // non-property members:
3750  QList<QSharedPointer<QCPAbstractPaintBuffer> > mPaintBuffers;
3753  QPointer<QCPLayerable> mMouseEventLayerable;
3758  QCP::AntialiasedElements mOpenGlAntialiasedElementsBackup;
3760 #ifdef QCP_OPENGL_FBO
3761  QSharedPointer<QOpenGLContext> mGlContext;
3762  QSharedPointer<QSurface> mGlSurface;
3763  QSharedPointer<QOpenGLPaintDevice> mGlPaintDevice;
3764 #endif
3765 
3766  // reimplemented virtual methods:
3767  virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE;
3768  virtual QSize sizeHint() const Q_DECL_OVERRIDE;
3769  virtual void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
3770  virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
3771  virtual void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
3772  virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
3773  virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
3774  virtual void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
3775  virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
3776 
3777  // introduced virtual methods:
3778  virtual void draw(QCPPainter *painter);
3779  virtual void updateLayout();
3780  virtual void axisRemoved(QCPAxis *axis);
3781  virtual void legendRemoved(QCPLegend *legend);
3782  Q_SLOT virtual void processRectSelection(QRect rect, QMouseEvent *event);
3783  Q_SLOT virtual void processRectZoom(QRect rect, QMouseEvent *event);
3784  Q_SLOT virtual void processPointSelection(QMouseEvent *event);
3785 
3786  // non-virtual methods:
3787  bool registerPlottable(QCPAbstractPlottable *plottable);
3788  bool registerGraph(QCPGraph *graph);
3789  bool registerItem(QCPAbstractItem* item);
3790  void updateLayerIndices() const;
3791  QCPLayerable *layerableAt(const QPointF &pos, bool onlySelectable, QVariant *selectionDetails=0) const;
3792  QList<QCPLayerable*> layerableListAt(const QPointF &pos, bool onlySelectable, QList<QVariant> *selectionDetails=0) const;
3793  void drawBackground(QCPPainter *painter);
3794  void setupPaintBuffers();
3795  QCPAbstractPaintBuffer *createPaintBuffer();
3796  bool hasInvalidatedPaintBuffers();
3797  bool setupOpenGl();
3798  void freeOpenGl();
3799 
3800  friend class QCPLegend;
3801  friend class QCPAxis;
3802  friend class QCPLayer;
3803  friend class QCPAxisRect;
3804  friend class QCPAbstractPlottable;
3805  friend class QCPGraph;
3806  friend class QCPAbstractItem;
3807 };
3808 Q_DECLARE_METATYPE(QCustomPlot::LayerInsertMode)
3809 Q_DECLARE_METATYPE(QCustomPlot::RefreshPriority)
3810 
3811 /* end of 'src/core.h' */
3812 
3813 
3814 /* including file 'src/plottable1d.h', size 4250 */
3815 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
3816 
3818 {
3819 public:
3820  // introduced pure virtual methods:
3821  virtual int dataCount() const = 0;
3822  virtual double dataMainKey(int index) const = 0;
3823  virtual double dataSortKey(int index) const = 0;
3824  virtual double dataMainValue(int index) const = 0;
3825  virtual QCPRange dataValueRange(int index) const = 0;
3826  virtual QPointF dataPixelPosition(int index) const = 0;
3827  virtual bool sortKeyIsMainKey() const = 0;
3828  virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const = 0;
3829  virtual int findBegin(double sortKey, bool expandedRange=true) const = 0;
3830  virtual int findEnd(double sortKey, bool expandedRange=true) const = 0;
3831 };
3832 
3833 template <class DataType>
3834 class QCP_LIB_DECL QCPAbstractPlottable1D : public QCPAbstractPlottable, public QCPPlottableInterface1D
3835 {
3836  // No Q_OBJECT macro due to template class
3837 
3838 public:
3839  QCPAbstractPlottable1D(QCPAxis *keyAxis, QCPAxis *valueAxis);
3840  virtual ~QCPAbstractPlottable1D();
3841 
3842  // virtual methods of 1d plottable interface:
3843  virtual int dataCount() const;
3844  virtual double dataMainKey(int index) const;
3845  virtual double dataSortKey(int index) const;
3846  virtual double dataMainValue(int index) const;
3847  virtual QCPRange dataValueRange(int index) const;
3848  virtual QPointF dataPixelPosition(int index) const;
3849  virtual bool sortKeyIsMainKey() const;
3850  virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const;
3851  virtual int findBegin(double sortKey, bool expandedRange=true) const;
3852  virtual int findEnd(double sortKey, bool expandedRange=true) const;
3853 
3854  // virtual methods:
3855  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const;
3856  virtual QCPPlottableInterface1D *interface1D() { return this; }
3857 
3858 protected:
3859  // property members:
3860  QSharedPointer<QCPDataContainer<DataType> > mDataContainer;
3861 
3862  // helpers for subclasses:
3863  void getDataSegments(QList<QCPDataRange> &selectedSegments, QList<QCPDataRange> &unselectedSegments) const;
3864  void drawPolyline(QCPPainter *painter, const QVector<QPointF> &lineData) const;
3865 
3866 private:
3867  Q_DISABLE_COPY(QCPAbstractPlottable1D)
3868 
3869 };
3870 
3871 // include implementation in header since it is a class template:
3872 
3873 /* including file 'src/plottable1d.cpp', size 22240 */
3874 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
3875 
3879 
3903 /* start documentation of pure virtual functions */
3904 
4014 /* end documentation of pure virtual functions */
4015 
4016 
4020 
4045 /* start documentation of inline functions */
4046 
4055 /* end documentation of inline functions */
4056 
4061 template <class DataType>
4063  QCPAbstractPlottable(keyAxis, valueAxis),
4064  mDataContainer(new QCPDataContainer<DataType>)
4065 {
4066 }
4067 
4068 template <class DataType>
4070 {
4071 }
4072 
4076 template <class DataType>
4078 {
4079  return mDataContainer->size();
4080 }
4081 
4085 template <class DataType>
4087 {
4088  if (index >= 0 && index < mDataContainer->size())
4089  {
4090  return (mDataContainer->constBegin()+index)->mainKey();
4091  } else
4092  {
4093  qDebug() << Q_FUNC_INFO << "Index out of bounds" << index;
4094  return 0;
4095  }
4096 }
4097 
4101 template <class DataType>
4103 {
4104  if (index >= 0 && index < mDataContainer->size())
4105  {
4106  return (mDataContainer->constBegin()+index)->sortKey();
4107  } else
4108  {
4109  qDebug() << Q_FUNC_INFO << "Index out of bounds" << index;
4110  return 0;
4111  }
4112 }
4113 
4117 template <class DataType>
4119 {
4120  if (index >= 0 && index < mDataContainer->size())
4121  {
4122  return (mDataContainer->constBegin()+index)->mainValue();
4123  } else
4124  {
4125  qDebug() << Q_FUNC_INFO << "Index out of bounds" << index;
4126  return 0;
4127  }
4128 }
4129 
4133 template <class DataType>
4135 {
4136  if (index >= 0 && index < mDataContainer->size())
4137  {
4138  return (mDataContainer->constBegin()+index)->valueRange();
4139  } else
4140  {
4141  qDebug() << Q_FUNC_INFO << "Index out of bounds" << index;
4142  return QCPRange(0, 0);
4143  }
4144 }
4145 
4149 template <class DataType>
4151 {
4152  if (index >= 0 && index < mDataContainer->size())
4153  {
4154  const typename QCPDataContainer<DataType>::const_iterator it = mDataContainer->constBegin()+index;
4155  return coordsToPixels(it->mainKey(), it->mainValue());
4156  } else
4157  {
4158  qDebug() << Q_FUNC_INFO << "Index out of bounds" << index;
4159  return QPointF();
4160  }
4161 }
4162 
4166 template <class DataType>
4168 {
4169  return DataType::sortKeyIsMainKey();
4170 }
4171 
4179 template <class DataType>
4180 QCPDataSelection QCPAbstractPlottable1D<DataType>::selectTestRect(const QRectF &rect, bool onlySelectable) const
4181 {
4182  QCPDataSelection result;
4183  if ((onlySelectable && mSelectable == QCP::stNone) || mDataContainer->isEmpty())
4184  return result;
4185  if (!mKeyAxis || !mValueAxis)
4186  return result;
4187 
4188  // convert rect given in pixels to ranges given in plot coordinates:
4189  double key1, value1, key2, value2;
4190  pixelsToCoords(rect.topLeft(), key1, value1);
4191  pixelsToCoords(rect.bottomRight(), key2, value2);
4192  QCPRange keyRange(key1, key2); // QCPRange normalizes internally so we don't have to care about whether key1 < key2
4193  QCPRange valueRange(value1, value2);
4194  typename QCPDataContainer<DataType>::const_iterator begin = mDataContainer->constBegin();
4196  if (DataType::sortKeyIsMainKey()) // we can assume that data is sorted by main key, so can reduce the searched key interval:
4197  {
4198  begin = mDataContainer->findBegin(keyRange.lower, false);
4199  end = mDataContainer->findEnd(keyRange.upper, false);
4200  }
4201  if (begin == end)
4202  return result;
4203 
4204  int currentSegmentBegin = -1; // -1 means we're currently not in a segment that's contained in rect
4205  for (typename QCPDataContainer<DataType>::const_iterator it=begin; it!=end; ++it)
4206  {
4207  if (currentSegmentBegin == -1)
4208  {
4209  if (valueRange.contains(it->mainValue()) && keyRange.contains(it->mainKey())) // start segment
4210  currentSegmentBegin = it-mDataContainer->constBegin();
4211  } else if (!valueRange.contains(it->mainValue()) || !keyRange.contains(it->mainKey())) // segment just ended
4212  {
4213  result.addDataRange(QCPDataRange(currentSegmentBegin, it-mDataContainer->constBegin()), false);
4214  currentSegmentBegin = -1;
4215  }
4216  }
4217  // process potential last segment:
4218  if (currentSegmentBegin != -1)
4219  result.addDataRange(QCPDataRange(currentSegmentBegin, end-mDataContainer->constBegin()), false);
4220 
4221  result.simplify();
4222  return result;
4223 }
4224 
4228 template <class DataType>
4229 int QCPAbstractPlottable1D<DataType>::findBegin(double sortKey, bool expandedRange) const
4230 {
4231  return mDataContainer->findBegin(sortKey, expandedRange)-mDataContainer->constBegin();
4232 }
4233 
4237 template <class DataType>
4238 int QCPAbstractPlottable1D<DataType>::findEnd(double sortKey, bool expandedRange) const
4239 {
4240  return mDataContainer->findEnd(sortKey, expandedRange)-mDataContainer->constBegin();
4241 }
4242 
4250 template <class DataType>
4251 double QCPAbstractPlottable1D<DataType>::selectTest(const QPointF &pos, bool onlySelectable, QVariant *details) const
4252 {
4253  if ((onlySelectable && mSelectable == QCP::stNone) || mDataContainer->isEmpty())
4254  return -1;
4255  if (!mKeyAxis || !mValueAxis)
4256  return -1;
4257 
4258  QCPDataSelection selectionResult;
4259  double minDistSqr = std::numeric_limits<double>::max();
4260  int minDistIndex = mDataContainer->size();
4261 
4262  typename QCPDataContainer<DataType>::const_iterator begin = mDataContainer->constBegin();
4264  if (DataType::sortKeyIsMainKey()) // we can assume that data is sorted by main key, so can reduce the searched key interval:
4265  {
4266  // determine which key range comes into question, taking selection tolerance around pos into account:
4267  double posKeyMin, posKeyMax, dummy;
4268  pixelsToCoords(pos-QPointF(mParentPlot->selectionTolerance(), mParentPlot->selectionTolerance()), posKeyMin, dummy);
4269  pixelsToCoords(pos+QPointF(mParentPlot->selectionTolerance(), mParentPlot->selectionTolerance()), posKeyMax, dummy);
4270  if (posKeyMin > posKeyMax)
4271  qSwap(posKeyMin, posKeyMax);
4272  begin = mDataContainer->findBegin(posKeyMin, true);
4273  end = mDataContainer->findEnd(posKeyMax, true);
4274  }
4275  if (begin == end)
4276  return -1;
4277  QCPRange keyRange(mKeyAxis->range());
4278  QCPRange valueRange(mValueAxis->range());
4279  for (typename QCPDataContainer<DataType>::const_iterator it=begin; it!=end; ++it)
4280  {
4281  const double mainKey = it->mainKey();
4282  const double mainValue = it->mainValue();
4283  if (keyRange.contains(mainKey) && valueRange.contains(mainValue)) // make sure data point is inside visible range, for speedup in cases where sort key isn't main key and we iterate over all points
4284  {
4285  const double currentDistSqr = QCPVector2D(coordsToPixels(mainKey, mainValue)-pos).lengthSquared();
4286  if (currentDistSqr < minDistSqr)
4287  {
4288  minDistSqr = currentDistSqr;
4289  minDistIndex = it-mDataContainer->constBegin();
4290  }
4291  }
4292  }
4293  if (minDistIndex != mDataContainer->size())
4294  selectionResult.addDataRange(QCPDataRange(minDistIndex, minDistIndex+1), false);
4295 
4296  selectionResult.simplify();
4297  if (details)
4298  details->setValue(selectionResult);
4299  return qSqrt(minDistSqr);
4300 }
4301 
4312 template <class DataType>
4313 void QCPAbstractPlottable1D<DataType>::getDataSegments(QList<QCPDataRange> &selectedSegments, QList<QCPDataRange> &unselectedSegments) const
4314 {
4315  selectedSegments.clear();
4316  unselectedSegments.clear();
4317  if (mSelectable == QCP::stWhole) // stWhole selection type draws the entire plottable with selected style if mSelection isn't empty
4318  {
4319  if (selected())
4320  selectedSegments << QCPDataRange(0, dataCount());
4321  else
4322  unselectedSegments << QCPDataRange(0, dataCount());
4323  } else
4324  {
4325  QCPDataSelection sel(selection());
4326  sel.simplify();
4327  selectedSegments = sel.dataRanges();
4328  unselectedSegments = sel.inverse(QCPDataRange(0, dataCount())).dataRanges();
4329  }
4330 }
4331 
4342 template <class DataType>
4343 void QCPAbstractPlottable1D<DataType>::drawPolyline(QCPPainter *painter, const QVector<QPointF> &lineData) const
4344 {
4345  // if drawing solid line and not in PDF, use much faster line drawing instead of polyline:
4346  if (mParentPlot->plottingHints().testFlag(QCP::phFastPolylines) &&
4347  painter->pen().style() == Qt::SolidLine &&
4348  !painter->modes().testFlag(QCPPainter::pmVectorized) &&
4349  !painter->modes().testFlag(QCPPainter::pmNoCaching))
4350  {
4351  int i = 0;
4352  bool lastIsNan = false;
4353  const int lineDataSize = lineData.size();
4354  while (i < lineDataSize && (qIsNaN(lineData.at(i).y()) || qIsNaN(lineData.at(i).x()))) // make sure first point is not NaN
4355  ++i;
4356  ++i; // because drawing works in 1 point retrospect
4357  while (i < lineDataSize)
4358  {
4359  if (!qIsNaN(lineData.at(i).y()) && !qIsNaN(lineData.at(i).x())) // NaNs create a gap in the line
4360  {
4361  if (!lastIsNan)
4362  painter->drawLine(lineData.at(i-1), lineData.at(i));
4363  else
4364  lastIsNan = false;
4365  } else
4366  lastIsNan = true;
4367  ++i;
4368  }
4369  } else
4370  {
4371  int segmentStart = 0;
4372  int i = 0;
4373  const int lineDataSize = lineData.size();
4374  while (i < lineDataSize)
4375  {
4376  if (qIsNaN(lineData.at(i).y()) || qIsNaN(lineData.at(i).x()) || qIsInf(lineData.at(i).y())) // NaNs create a gap in the line. Also filter Infs which make drawPolyline block
4377  {
4378  painter->drawPolyline(lineData.constData()+segmentStart, i-segmentStart); // i, because we don't want to include the current NaN point
4379  segmentStart = i+1;
4380  }
4381  ++i;
4382  }
4383  // draw last segment:
4384  painter->drawPolyline(lineData.constData()+segmentStart, lineDataSize-segmentStart);
4385  }
4386 }
4387 /* end of 'src/plottable1d.cpp' */
4388 
4389 
4390 /* end of 'src/plottable1d.h' */
4391 
4392 
4393 /* including file 'src/colorgradient.h', size 6243 */
4394 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
4395 
4397 {
4398  Q_GADGET
4399 public:
4405  enum ColorInterpolation { ciRGB
4406  ,ciHSV
4407  };
4408  Q_ENUMS(ColorInterpolation)
4409 
4410 
4414  enum GradientPreset { gpGrayscale
4415  ,gpHot
4416  ,gpCold
4417  ,gpNight
4418  ,gpCandy
4419  ,gpGeography
4420  ,gpIon
4421  ,gpThermal
4422  ,gpPolar
4423  ,gpSpectrum
4424  ,gpJet
4425  ,gpHues
4426  };
4427  Q_ENUMS(GradientPreset)
4428 
4429  QCPColorGradient();
4430  QCPColorGradient(GradientPreset preset);
4431  bool operator==(const QCPColorGradient &other) const;
4432  bool operator!=(const QCPColorGradient &other) const { return !(*this == other); }
4433 
4434  // getters:
4435  int levelCount() const { return mLevelCount; }
4436  QMap<double, QColor> colorStops() const { return mColorStops; }
4437  ColorInterpolation colorInterpolation() const { return mColorInterpolation; }
4438  bool periodic() const { return mPeriodic; }
4439 
4440  // setters:
4441  void setLevelCount(int n);
4442  void setColorStops(const QMap<double, QColor> &colorStops);
4443  void setColorStopAt(double position, const QColor &color);
4444  void setColorInterpolation(ColorInterpolation interpolation);
4445  void setPeriodic(bool enabled);
4446 
4447  // non-property methods:
4448  void colorize(const double *data, const QCPRange &range, QRgb *scanLine, int n, int dataIndexFactor=1, bool logarithmic=false);
4449  void colorize(const double *data, const unsigned char *alpha, const QCPRange &range, QRgb *scanLine, int n, int dataIndexFactor=1, bool logarithmic=false);
4450  QRgb color(double position, const QCPRange &range, bool logarithmic=false);
4451  void loadPreset(GradientPreset preset);
4452  void clearColorStops();
4453  QCPColorGradient inverted() const;
4454 
4455 protected:
4456  // property members:
4458  QMap<double, QColor> mColorStops;
4461 
4462  // non-property members:
4463  QVector<QRgb> mColorBuffer; // have colors premultiplied with alpha (for usage with QImage::Format_ARGB32_Premultiplied)
4465 
4466  // non-virtual methods:
4467  bool stopsUseAlpha() const;
4468  void updateColorBuffer();
4469 };
4470 Q_DECLARE_METATYPE(QCPColorGradient::ColorInterpolation)
4471 Q_DECLARE_METATYPE(QCPColorGradient::GradientPreset)
4472 
4473 /* end of 'src/colorgradient.h' */
4474 
4475 
4476 /* including file 'src/selectiondecorator-bracket.h', size 4426 */
4477 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
4478 
4480 {
4481  Q_GADGET
4482 public:
4483 
4490  enum BracketStyle { bsSquareBracket
4491  ,bsHalfEllipse
4492  ,bsEllipse
4493  ,bsPlus
4494  ,bsUserStyle
4495  };
4496  Q_ENUMS(BracketStyle)
4497 
4499  virtual ~QCPSelectionDecoratorBracket();
4500 
4501  // getters:
4502  QPen bracketPen() const { return mBracketPen; }
4503  QBrush bracketBrush() const { return mBracketBrush; }
4504  int bracketWidth() const { return mBracketWidth; }
4505  int bracketHeight() const { return mBracketHeight; }
4506  BracketStyle bracketStyle() const { return mBracketStyle; }
4507  bool tangentToData() const { return mTangentToData; }
4508  int tangentAverage() const { return mTangentAverage; }
4509 
4510  // setters:
4511  void setBracketPen(const QPen &pen);
4512  void setBracketBrush(const QBrush &brush);
4513  void setBracketWidth(int width);
4514  void setBracketHeight(int height);
4515  void setBracketStyle(BracketStyle style);
4516  void setTangentToData(bool enabled);
4517  void setTangentAverage(int pointCount);
4518 
4519  // introduced virtual methods:
4520  virtual void drawBracket(QCPPainter *painter, int direction) const;
4521 
4522  // virtual methods:
4523  virtual void drawDecoration(QCPPainter *painter, QCPDataSelection selection);
4524 
4525 protected:
4526  // property members:
4534 
4535  // non-virtual methods:
4536  double getTangentAngle(const QCPPlottableInterface1D *interface1d, int dataIndex, int direction) const;
4537  QPointF getPixelCoordinates(const QCPPlottableInterface1D *interface1d, int dataIndex) const;
4538 
4539 };
4541 
4542 /* end of 'src/selectiondecorator-bracket.h' */
4543 
4544 
4545 /* including file 'src/layoutelements/layoutelement-axisrect.h', size 7528 */
4546 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
4547 
4549 {
4550  Q_OBJECT
4552  Q_PROPERTY(QPixmap background READ background WRITE setBackground)
4553  Q_PROPERTY(bool backgroundScaled READ backgroundScaled WRITE setBackgroundScaled)
4554  Q_PROPERTY(Qt::AspectRatioMode backgroundScaledMode READ backgroundScaledMode WRITE setBackgroundScaledMode)
4555  Q_PROPERTY(Qt::Orientations rangeDrag READ rangeDrag WRITE setRangeDrag)
4556  Q_PROPERTY(Qt::Orientations rangeZoom READ rangeZoom WRITE setRangeZoom)
4558 public:
4559  explicit QCPAxisRect(QCustomPlot *parentPlot, bool setupDefaultAxes=true);
4560  virtual ~QCPAxisRect();
4561 
4562  // getters:
4563  QPixmap background() const { return mBackgroundPixmap; }
4564  QBrush backgroundBrush() const { return mBackgroundBrush; }
4565  bool backgroundScaled() const { return mBackgroundScaled; }
4566  Qt::AspectRatioMode backgroundScaledMode() const { return mBackgroundScaledMode; }
4567  Qt::Orientations rangeDrag() const { return mRangeDrag; }
4568  Qt::Orientations rangeZoom() const { return mRangeZoom; }
4569  QCPAxis *rangeDragAxis(Qt::Orientation orientation);
4570  QCPAxis *rangeZoomAxis(Qt::Orientation orientation);
4571  QList<QCPAxis*> rangeDragAxes(Qt::Orientation orientation);
4572  QList<QCPAxis*> rangeZoomAxes(Qt::Orientation orientation);
4573  double rangeZoomFactor(Qt::Orientation orientation);
4574 
4575  // setters:
4576  void setBackground(const QPixmap &pm);
4577  void setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode=Qt::KeepAspectRatioByExpanding);
4578  void setBackground(const QBrush &brush);
4579  void setBackgroundScaled(bool scaled);
4580  void setBackgroundScaledMode(Qt::AspectRatioMode mode);
4581  void setRangeDrag(Qt::Orientations orientations);
4582  void setRangeZoom(Qt::Orientations orientations);
4583  void setRangeDragAxes(QCPAxis *horizontal, QCPAxis *vertical);
4584  void setRangeDragAxes(QList<QCPAxis*> axes);
4585  void setRangeDragAxes(QList<QCPAxis*> horizontal, QList<QCPAxis*> vertical);
4586  void setRangeZoomAxes(QCPAxis *horizontal, QCPAxis *vertical);
4587  void setRangeZoomAxes(QList<QCPAxis*> axes);
4588  void setRangeZoomAxes(QList<QCPAxis*> horizontal, QList<QCPAxis*> vertical);
4589  void setRangeZoomFactor(double horizontalFactor, double verticalFactor);
4590  void setRangeZoomFactor(double factor);
4591 
4592  // non-property methods:
4593  int axisCount(QCPAxis::AxisType type) const;
4594  QCPAxis *axis(QCPAxis::AxisType type, int index=0) const;
4595  QList<QCPAxis*> axes(QCPAxis::AxisTypes types) const;
4596  QList<QCPAxis*> axes() const;
4597  QCPAxis *addAxis(QCPAxis::AxisType type, QCPAxis *axis=0);
4598  QList<QCPAxis*> addAxes(QCPAxis::AxisTypes types);
4599  bool removeAxis(QCPAxis *axis);
4600  QCPLayoutInset *insetLayout() const { return mInsetLayout; }
4601 
4602  void zoom(const QRectF &pixelRect);
4603  void zoom(const QRectF &pixelRect, const QList<QCPAxis*> &affectedAxes);
4604  void setupFullAxesBox(bool connectRanges=false);
4605  QList<QCPAbstractPlottable*> plottables() const;
4606  QList<QCPGraph*> graphs() const;
4607  QList<QCPAbstractItem*> items() const;
4608 
4609  // read-only interface imitating a QRect:
4610  int left() const { return mRect.left(); }
4611  int right() const { return mRect.right(); }
4612  int top() const { return mRect.top(); }
4613  int bottom() const { return mRect.bottom(); }
4614  int width() const { return mRect.width(); }
4615  int height() const { return mRect.height(); }
4616  QSize size() const { return mRect.size(); }
4617  QPoint topLeft() const { return mRect.topLeft(); }
4618  QPoint topRight() const { return mRect.topRight(); }
4619  QPoint bottomLeft() const { return mRect.bottomLeft(); }
4620  QPoint bottomRight() const { return mRect.bottomRight(); }
4621  QPoint center() const { return mRect.center(); }
4622 
4623  // reimplemented virtual methods:
4624  virtual void update(UpdatePhase phase) Q_DECL_OVERRIDE;
4625  virtual QList<QCPLayoutElement*> elements(bool recursive) const Q_DECL_OVERRIDE;
4626 
4627 protected:
4628  // property members:
4633  Qt::AspectRatioMode mBackgroundScaledMode;
4635  Qt::Orientations mRangeDrag, mRangeZoom;
4636  QList<QPointer<QCPAxis> > mRangeDragHorzAxis, mRangeDragVertAxis;
4637  QList<QPointer<QCPAxis> > mRangeZoomHorzAxis, mRangeZoomVertAxis;
4638  double mRangeZoomFactorHorz, mRangeZoomFactorVert;
4639 
4640  // non-property members:
4641  QList<QCPRange> mDragStartHorzRange, mDragStartVertRange;
4642  QCP::AntialiasedElements mAADragBackup, mNotAADragBackup;
4643  QPoint mDragStart;
4645  QHash<QCPAxis::AxisType, QList<QCPAxis*> > mAxes;
4646 
4647  // reimplemented virtual methods:
4648  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
4649  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
4650  virtual int calculateAutoMargin(QCP::MarginSide side) Q_DECL_OVERRIDE;
4651  virtual void layoutChanged() Q_DECL_OVERRIDE;
4652  // events:
4653  virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
4654  virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
4655  virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
4656  virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
4657 
4658  // non-property methods:
4659  void drawBackground(QCPPainter *painter);
4660  void updateAxesOffset(QCPAxis::AxisType type);
4661 
4662 private:
4663  Q_DISABLE_COPY(QCPAxisRect)
4664 
4665  friend class QCustomPlot;
4666 };
4667 
4668 
4669 /* end of 'src/layoutelements/layoutelement-axisrect.h' */
4670 
4671 
4672 /* including file 'src/layoutelements/layoutelement-legend.h', size 10392 */
4673 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
4674 
4675 class QCP_LIB_DECL QCPAbstractLegendItem : public QCPLayoutElement
4676 {
4677  Q_OBJECT
4679  Q_PROPERTY(QCPLegend* parentLegend READ parentLegend)
4680  Q_PROPERTY(QFont font READ font WRITE setFont)
4681  Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor)
4682  Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont)
4683  Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor)
4684  Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectionChanged)
4685  Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectableChanged)
4687 public:
4688  explicit QCPAbstractLegendItem(QCPLegend *parent);
4689 
4690  // getters:
4691  QCPLegend *parentLegend() const { return mParentLegend; }
4692  QFont font() const { return mFont; }
4693  QColor textColor() const { return mTextColor; }
4694  QFont selectedFont() const { return mSelectedFont; }
4695  QColor selectedTextColor() const { return mSelectedTextColor; }
4696  bool selectable() const { return mSelectable; }
4697  bool selected() const { return mSelected; }
4698 
4699  // setters:
4700  void setFont(const QFont &font);
4701  void setTextColor(const QColor &color);
4702  void setSelectedFont(const QFont &font);
4703  void setSelectedTextColor(const QColor &color);
4704  Q_SLOT void setSelectable(bool selectable);
4705  Q_SLOT void setSelected(bool selected);
4706 
4707  // reimplemented virtual methods:
4708  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
4709 
4710 signals:
4711  void selectionChanged(bool selected);
4712  void selectableChanged(bool selectable);
4713 
4714 protected:
4715  // property members:
4717  QFont mFont;
4718  QColor mTextColor;
4722 
4723  // reimplemented virtual methods:
4724  virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
4725  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
4726  virtual QRect clipRect() const Q_DECL_OVERRIDE;
4727  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE = 0;
4728  // events:
4729  virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
4730  virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
4731 
4732 private:
4733  Q_DISABLE_COPY(QCPAbstractLegendItem)
4734 
4735  friend class QCPLegend;
4736 };
4737 
4738 
4740 {
4741  Q_OBJECT
4742 public:
4743  QCPPlottableLegendItem(QCPLegend *parent, QCPAbstractPlottable *plottable);
4744 
4745  // getters:
4746  QCPAbstractPlottable *plottable() { return mPlottable; }
4747 
4748 protected:
4749  // property members:
4750  QCPAbstractPlottable *mPlottable;
4751 
4752  // reimplemented virtual methods:
4753  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
4754  virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE;
4755 
4756  // non-virtual methods:
4757  QPen getIconBorderPen() const;
4758  QColor getTextColor() const;
4759  QFont getFont() const;
4760 };
4761 
4762 
4763 class QCP_LIB_DECL QCPLegend : public QCPLayoutGrid
4764 {
4765  Q_OBJECT
4767  Q_PROPERTY(QPen borderPen READ borderPen WRITE setBorderPen)
4768  Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
4769  Q_PROPERTY(QFont font READ font WRITE setFont)
4770  Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor)
4771  Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
4772  Q_PROPERTY(int iconTextPadding READ iconTextPadding WRITE setIconTextPadding)
4773  Q_PROPERTY(QPen iconBorderPen READ iconBorderPen WRITE setIconBorderPen)
4774  Q_PROPERTY(SelectableParts selectableParts READ selectableParts WRITE setSelectableParts NOTIFY selectionChanged)
4775  Q_PROPERTY(SelectableParts selectedParts READ selectedParts WRITE setSelectedParts NOTIFY selectableChanged)
4776  Q_PROPERTY(QPen selectedBorderPen READ selectedBorderPen WRITE setSelectedBorderPen)
4777  Q_PROPERTY(QPen selectedIconBorderPen READ selectedIconBorderPen WRITE setSelectedIconBorderPen)
4778  Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
4779  Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont)
4780  Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor)
4782 public:
4788  enum SelectablePart { spNone = 0x000
4789  ,spLegendBox = 0x001
4790  ,spItems = 0x002
4791  };
4792  Q_ENUMS(SelectablePart)
4793  Q_FLAGS(SelectableParts)
4794  Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
4795 
4796  explicit QCPLegend();
4797  virtual ~QCPLegend();
4798 
4799  // getters:
4800  QPen borderPen() const { return mBorderPen; }
4801  QBrush brush() const { return mBrush; }
4802  QFont font() const { return mFont; }
4803  QColor textColor() const { return mTextColor; }
4804  QSize iconSize() const { return mIconSize; }
4805  int iconTextPadding() const { return mIconTextPadding; }
4806  QPen iconBorderPen() const { return mIconBorderPen; }
4807  SelectableParts selectableParts() const { return mSelectableParts; }
4808  SelectableParts selectedParts() const;
4809  QPen selectedBorderPen() const { return mSelectedBorderPen; }
4810  QPen selectedIconBorderPen() const { return mSelectedIconBorderPen; }
4811  QBrush selectedBrush() const { return mSelectedBrush; }
4812  QFont selectedFont() const { return mSelectedFont; }
4813  QColor selectedTextColor() const { return mSelectedTextColor; }
4814 
4815  // setters:
4816  void setBorderPen(const QPen &pen);
4817  void setBrush(const QBrush &brush);
4818  void setFont(const QFont &font);
4819  void setTextColor(const QColor &color);
4820  void setIconSize(const QSize &size);
4821  void setIconSize(int width, int height);
4822  void setIconTextPadding(int padding);
4823  void setIconBorderPen(const QPen &pen);
4824  Q_SLOT void setSelectableParts(const SelectableParts &selectableParts);
4825  Q_SLOT void setSelectedParts(const SelectableParts &selectedParts);
4826  void setSelectedBorderPen(const QPen &pen);
4827  void setSelectedIconBorderPen(const QPen &pen);
4828  void setSelectedBrush(const QBrush &brush);
4829  void setSelectedFont(const QFont &font);
4830  void setSelectedTextColor(const QColor &color);
4831 
4832  // reimplemented virtual methods:
4833  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
4834 
4835  // non-virtual methods:
4836  QCPAbstractLegendItem *item(int index) const;
4837  QCPPlottableLegendItem *itemWithPlottable(const QCPAbstractPlottable *plottable) const;
4838  int itemCount() const;
4839  bool hasItem(QCPAbstractLegendItem *item) const;
4840  bool hasItemWithPlottable(const QCPAbstractPlottable *plottable) const;
4841  bool addItem(QCPAbstractLegendItem *item);
4842  bool removeItem(int index);
4843  bool removeItem(QCPAbstractLegendItem *item);
4844  void clearItems();
4845  QList<QCPAbstractLegendItem*> selectedItems() const;
4846 
4847 signals:
4848  void selectionChanged(QCPLegend::SelectableParts parts);
4849  void selectableChanged(QCPLegend::SelectableParts parts);
4850 
4851 protected:
4852  // property members:
4853  QPen mBorderPen, mIconBorderPen;
4854  QBrush mBrush;
4855  QFont mFont;
4856  QColor mTextColor;
4857  QSize mIconSize;
4859  SelectableParts mSelectedParts, mSelectableParts;
4860  QPen mSelectedBorderPen, mSelectedIconBorderPen;
4864 
4865  // reimplemented virtual methods:
4866  virtual void parentPlotInitialized(QCustomPlot *parentPlot) Q_DECL_OVERRIDE;
4867  virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE;
4868  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
4869  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
4870  // events:
4871  virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
4872  virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
4873 
4874  // non-virtual methods:
4875  QPen getBorderPen() const;
4876  QBrush getBrush() const;
4877 
4878 private:
4879  Q_DISABLE_COPY(QCPLegend)
4880 
4881  friend class QCustomPlot;
4882  friend class QCPAbstractLegendItem;
4883 };
4884 Q_DECLARE_OPERATORS_FOR_FLAGS(QCPLegend::SelectableParts)
4885 Q_DECLARE_METATYPE(QCPLegend::SelectablePart)
4886 
4887 /* end of 'src/layoutelements/layoutelement-legend.h' */
4888 
4889 
4890 /* including file 'src/layoutelements/layoutelement-textelement.h', size 5343 */
4891 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
4892 
4893 class QCP_LIB_DECL QCPTextElement : public QCPLayoutElement
4894 {
4895  Q_OBJECT
4897  Q_PROPERTY(QString text READ text WRITE setText)
4898  Q_PROPERTY(QFont font READ font WRITE setFont)
4899  Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor)
4900  Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont)
4901  Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor)
4902  Q_PROPERTY(bool selectable READ selectable WRITE setSelectable NOTIFY selectableChanged)
4903  Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectionChanged)
4905 public:
4906  explicit QCPTextElement(QCustomPlot *parentPlot);
4907  QCPTextElement(QCustomPlot *parentPlot, const QString &text);
4908  QCPTextElement(QCustomPlot *parentPlot, const QString &text, double pointSize);
4909  QCPTextElement(QCustomPlot *parentPlot, const QString &text, const QString &fontFamily, double pointSize);
4910  QCPTextElement(QCustomPlot *parentPlot, const QString &text, const QFont &font);
4911 
4912  // getters:
4913  QString text() const { return mText; }
4914  int textFlags() const { return mTextFlags; }
4915  QFont font() const { return mFont; }
4916  QColor textColor() const { return mTextColor; }
4917  QFont selectedFont() const { return mSelectedFont; }
4918  QColor selectedTextColor() const { return mSelectedTextColor; }
4919  bool selectable() const { return mSelectable; }
4920  bool selected() const { return mSelected; }
4921 
4922  // setters:
4923  void setText(const QString &text);
4924  void setTextFlags(int flags);
4925  void setFont(const QFont &font);
4926  void setTextColor(const QColor &color);
4927  void setSelectedFont(const QFont &font);
4928  void setSelectedTextColor(const QColor &color);
4929  Q_SLOT void setSelectable(bool selectable);
4930  Q_SLOT void setSelected(bool selected);
4931 
4932  // reimplemented virtual methods:
4933  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
4934  virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
4935  virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
4936  virtual void mouseDoubleClickEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
4937 
4938 signals:
4939  void selectionChanged(bool selected);
4940  void selectableChanged(bool selectable);
4941  void clicked(QMouseEvent *event);
4942  void doubleClicked(QMouseEvent *event);
4943 
4944 protected:
4945  // property members:
4946  QString mText;
4948  QFont mFont;
4949  QColor mTextColor;
4954 
4955  // reimplemented virtual methods:
4956  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
4957  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
4958  virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE;
4959  virtual QSize maximumSizeHint() const Q_DECL_OVERRIDE;
4960  // events:
4961  virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE;
4962  virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE;
4963 
4964  // non-virtual methods:
4965  QFont mainFont() const;
4966  QColor mainTextColor() const;
4967 
4968 private:
4969  Q_DISABLE_COPY(QCPTextElement)
4970 };
4971 
4972 
4973 
4974 /* end of 'src/layoutelements/layoutelement-textelement.h' */
4975 
4976 
4977 /* including file 'src/layoutelements/layoutelement-colorscale.h', size 5907 */
4978 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
4979 
4980 
4982 {
4983  Q_OBJECT
4984 public:
4985  explicit QCPColorScaleAxisRectPrivate(QCPColorScale *parentColorScale);
4986 protected:
4990  // re-using some methods of QCPAxisRect to make them available to friend class QCPColorScale
4996  using QCPAxisRect::update;
4997  virtual void draw(QCPPainter *painter);
4998  void updateGradientImage();
4999  Q_SLOT void axisSelectionChanged(QCPAxis::SelectableParts selectedParts);
5000  Q_SLOT void axisSelectableChanged(QCPAxis::SelectableParts selectableParts);
5001  friend class QCPColorScale;
5002 };
5003 
5004 
5005 class QCP_LIB_DECL QCPColorScale : public QCPLayoutElement
5006 {
5007  Q_OBJECT
5009  Q_PROPERTY(QCPAxis::AxisType type READ type WRITE setType)
5010  Q_PROPERTY(QCPRange dataRange READ dataRange WRITE setDataRange NOTIFY dataRangeChanged)
5011  Q_PROPERTY(QCPAxis::ScaleType dataScaleType READ dataScaleType WRITE setDataScaleType NOTIFY dataScaleTypeChanged)
5012  Q_PROPERTY(QCPColorGradient gradient READ gradient WRITE setGradient NOTIFY gradientChanged)
5013  Q_PROPERTY(QString label READ label WRITE setLabel)
5014  Q_PROPERTY(int barWidth READ barWidth WRITE setBarWidth)
5015  Q_PROPERTY(bool rangeDrag READ rangeDrag WRITE setRangeDrag)
5016  Q_PROPERTY(bool rangeZoom READ rangeZoom WRITE setRangeZoom)
5018 public:
5019  explicit QCPColorScale(QCustomPlot *parentPlot);
5020  virtual ~QCPColorScale();
5021 
5022  // getters:
5023  QCPAxis *axis() const { return mColorAxis.data(); }
5024  QCPAxis::AxisType type() const { return mType; }
5025  QCPRange dataRange() const { return mDataRange; }
5026  QCPAxis::ScaleType dataScaleType() const { return mDataScaleType; }
5027  QCPColorGradient gradient() const { return mGradient; }
5028  QString label() const;
5029  int barWidth () const { return mBarWidth; }
5030  bool rangeDrag() const;
5031  bool rangeZoom() const;
5032 
5033  // setters:
5034  void setType(QCPAxis::AxisType type);
5035  Q_SLOT void setDataRange(const QCPRange &dataRange);
5036  Q_SLOT void setDataScaleType(QCPAxis::ScaleType scaleType);
5037  Q_SLOT void setGradient(const QCPColorGradient &gradient);
5038  void setLabel(const QString &str);
5039  void setBarWidth(int width);
5040  void setRangeDrag(bool enabled);
5041  void setRangeZoom(bool enabled);
5042 
5043  // non-property methods:
5044  QList<QCPColorMap*> colorMaps() const;
5045  void rescaleDataRange(bool onlyVisibleMaps);
5046 
5047  // reimplemented virtual methods:
5048  virtual void update(UpdatePhase phase) Q_DECL_OVERRIDE;
5049 
5050 signals:
5051  void dataRangeChanged(const QCPRange &newRange);
5052  void dataScaleTypeChanged(QCPAxis::ScaleType scaleType);
5053  void gradientChanged(const QCPColorGradient &newGradient);
5054 
5055 protected:
5056  // property members:
5062 
5063  // non-property members:
5064  QPointer<QCPColorScaleAxisRectPrivate> mAxisRect;
5065  QPointer<QCPAxis> mColorAxis;
5066 
5067  // reimplemented virtual methods:
5068  virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE;
5069  // events:
5070  virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE;
5071  virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
5072  virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE;
5073  virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
5074 
5075 private:
5076  Q_DISABLE_COPY(QCPColorScale)
5077 
5079 };
5080 
5081 
5082 /* end of 'src/layoutelements/layoutelement-colorscale.h' */
5083 
5084 
5085 /* including file 'src/plottables/plottable-graph.h', size 8826 */
5086 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
5087 
5089 {
5090 public:
5091  QCPGraphData();
5092  QCPGraphData(double key, double value);
5093 
5094  inline double sortKey() const { return key; }
5095  inline static QCPGraphData fromSortKey(double sortKey) { return QCPGraphData(sortKey, 0); }
5096  inline static bool sortKeyIsMainKey() { return true; }
5097 
5098  inline double mainKey() const { return key; }
5099  inline double mainValue() const { return value; }
5100 
5101  inline QCPRange valueRange() const { return QCPRange(value, value); }
5102 
5103  double key, value;
5104 };
5105 Q_DECLARE_TYPEINFO(QCPGraphData, Q_PRIMITIVE_TYPE);
5106 
5107 
5118 
5119 class QCP_LIB_DECL QCPGraph : public QCPAbstractPlottable1D<QCPGraphData>
5120 {
5121  Q_OBJECT
5123  Q_PROPERTY(LineStyle lineStyle READ lineStyle WRITE setLineStyle)
5124  Q_PROPERTY(QCPScatterStyle scatterStyle READ scatterStyle WRITE setScatterStyle)
5125  Q_PROPERTY(int scatterSkip READ scatterSkip WRITE setScatterSkip)
5126  Q_PROPERTY(QCPGraph* channelFillGraph READ channelFillGraph WRITE setChannelFillGraph)
5127  Q_PROPERTY(bool adaptiveSampling READ adaptiveSampling WRITE setAdaptiveSampling)
5129 public:
5135  enum LineStyle { lsNone
5136  ,lsLine
5138  ,lsStepLeft
5139  ,lsStepRight
5140  ,lsStepCenter
5141  ,lsImpulse
5142  };
5143  Q_ENUMS(LineStyle)
5144 
5145  explicit QCPGraph(QCPAxis *keyAxis, QCPAxis *valueAxis);
5146  virtual ~QCPGraph();
5147 
5148  // getters:
5149  QSharedPointer<QCPGraphDataContainer> data() const { return mDataContainer; }
5150  LineStyle lineStyle() const { return mLineStyle; }
5151  QCPScatterStyle scatterStyle() const { return mScatterStyle; }
5152  int scatterSkip() const { return mScatterSkip; }
5153  QCPGraph *channelFillGraph() const { return mChannelFillGraph.data(); }
5154  bool adaptiveSampling() const { return mAdaptiveSampling; }
5155 
5156  // setters:
5157  void setData(QSharedPointer<QCPGraphDataContainer> data);
5158  void setData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
5159  void setLineStyle(LineStyle ls);
5160  void setScatterStyle(const QCPScatterStyle &style);
5161  void setScatterSkip(int skip);
5162  void setChannelFillGraph(QCPGraph *targetGraph);
5163  void setAdaptiveSampling(bool enabled);
5164 
5165  // non-property methods:
5166  void addData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
5167  void addData(double key, double value);
5168 
5169  // reimplemented virtual methods:
5170  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
5171  virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
5172  virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
5173 
5174 protected:
5175  // property members:
5179  QPointer<QCPGraph> mChannelFillGraph;
5181 
5182  // reimplemented virtual methods:
5183  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
5184  virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
5185 
5186  // introduced virtual methods:
5187  virtual void drawFill(QCPPainter *painter, QVector<QPointF> *lines) const;
5188  virtual void drawScatterPlot(QCPPainter *painter, const QVector<QPointF> &scatters, const QCPScatterStyle &style) const;
5189  virtual void drawLinePlot(QCPPainter *painter, const QVector<QPointF> &lines) const;
5190  virtual void drawImpulsePlot(QCPPainter *painter, const QVector<QPointF> &lines) const;
5191 
5192  virtual void getOptimizedLineData(QVector<QCPGraphData> *lineData, const QCPGraphDataContainer::const_iterator &begin, const QCPGraphDataContainer::const_iterator &end) const;
5193  virtual void getOptimizedScatterData(QVector<QCPGraphData> *scatterData, QCPGraphDataContainer::const_iterator begin, QCPGraphDataContainer::const_iterator end) const;
5194 
5195  // non-virtual methods:
5196  void getVisibleDataBounds(QCPGraphDataContainer::const_iterator &begin, QCPGraphDataContainer::const_iterator &end, const QCPDataRange &rangeRestriction) const;
5197  void getLines(QVector<QPointF> *lines, const QCPDataRange &dataRange) const;
5198  void getScatters(QVector<QPointF> *scatters, const QCPDataRange &dataRange) const;
5199  QVector<QPointF> dataToLines(const QVector<QCPGraphData> &data) const;
5200  QVector<QPointF> dataToStepLeftLines(const QVector<QCPGraphData> &data) const;
5201  QVector<QPointF> dataToStepRightLines(const QVector<QCPGraphData> &data) const;
5202  QVector<QPointF> dataToStepCenterLines(const QVector<QCPGraphData> &data) const;
5203  QVector<QPointF> dataToImpulseLines(const QVector<QCPGraphData> &data) const;
5204  void addFillBasePoints(QVector<QPointF> *lines) const;
5205  void removeFillBasePoints(QVector<QPointF> *lines) const;
5206  QPointF lowerFillBasePoint(double lowerKey) const;
5207  QPointF upperFillBasePoint(double upperKey) const;
5208  const QPolygonF getChannelFillPolygon(const QVector<QPointF> *lines) const;
5209  int findIndexBelowX(const QVector<QPointF> *data, double x) const;
5210  int findIndexAboveX(const QVector<QPointF> *data, double x) const;
5211  int findIndexBelowY(const QVector<QPointF> *data, double y) const;
5212  int findIndexAboveY(const QVector<QPointF> *data, double y) const;
5213  double pointDistance(const QPointF &pixelPoint, QCPGraphDataContainer::const_iterator &closestData) const;
5214 
5215  friend class QCustomPlot;
5216  friend class QCPLegend;
5217 };
5218 Q_DECLARE_METATYPE(QCPGraph::LineStyle)
5219 
5220 /* end of 'src/plottables/plottable-graph.h' */
5221 
5222 
5223 /* including file 'src/plottables/plottable-curve.h', size 7409 */
5224 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
5225 
5227 {
5228 public:
5229  QCPCurveData();
5230  QCPCurveData(double t, double key, double value);
5231 
5232  inline double sortKey() const { return t; }
5233  inline static QCPCurveData fromSortKey(double sortKey) { return QCPCurveData(sortKey, 0, 0); }
5234  inline static bool sortKeyIsMainKey() { return false; }
5235 
5236  inline double mainKey() const { return key; }
5237  inline double mainValue() const { return value; }
5238 
5239  inline QCPRange valueRange() const { return QCPRange(value, value); }
5240 
5241  double t, key, value;
5242 };
5243 Q_DECLARE_TYPEINFO(QCPCurveData, Q_PRIMITIVE_TYPE);
5244 
5245 
5257 
5258 class QCP_LIB_DECL QCPCurve : public QCPAbstractPlottable1D<QCPCurveData>
5259 {
5260  Q_OBJECT
5262  Q_PROPERTY(QCPScatterStyle scatterStyle READ scatterStyle WRITE setScatterStyle)
5263  Q_PROPERTY(int scatterSkip READ scatterSkip WRITE setScatterSkip)
5264  Q_PROPERTY(LineStyle lineStyle READ lineStyle WRITE setLineStyle)
5266 public:
5272  enum LineStyle { lsNone
5273  ,lsLine
5274  };
5275  Q_ENUMS(LineStyle)
5276 
5277  explicit QCPCurve(QCPAxis *keyAxis, QCPAxis *valueAxis);
5278  virtual ~QCPCurve();
5279 
5280  // getters:
5281  QSharedPointer<QCPCurveDataContainer> data() const { return mDataContainer; }
5282  QCPScatterStyle scatterStyle() const { return mScatterStyle; }
5283  int scatterSkip() const { return mScatterSkip; }
5284  LineStyle lineStyle() const { return mLineStyle; }
5285 
5286  // setters:
5287  void setData(QSharedPointer<QCPCurveDataContainer> data);
5288  void setData(const QVector<double> &t, const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
5289  void setData(const QVector<double> &keys, const QVector<double> &values);
5290  void setScatterStyle(const QCPScatterStyle &style);
5291  void setScatterSkip(int skip);
5292  void setLineStyle(LineStyle style);
5293 
5294  // non-property methods:
5295  void addData(const QVector<double> &t, const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
5296  void addData(const QVector<double> &keys, const QVector<double> &values);
5297  void addData(double t, double key, double value);
5298  void addData(double key, double value);
5299 
5300  // reimplemented virtual methods:
5301  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
5302  virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
5303  virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
5304 
5305 protected:
5306  // property members:
5310 
5311  // reimplemented virtual methods:
5312  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
5313  virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
5314 
5315  // introduced virtual methods:
5316  virtual void drawCurveLine(QCPPainter *painter, const QVector<QPointF> &lines) const;
5317  virtual void drawScatterPlot(QCPPainter *painter, const QVector<QPointF> &points, const QCPScatterStyle &style) const;
5318 
5319  // non-virtual methods:
5320  void getCurveLines(QVector<QPointF> *lines, const QCPDataRange &dataRange, double penWidth) const;
5321  void getScatters(QVector<QPointF> *scatters, const QCPDataRange &dataRange, double scatterWidth) const;
5322  int getRegion(double key, double value, double keyMin, double valueMax, double keyMax, double valueMin) const;
5323  QPointF getOptimizedPoint(int prevRegion, double prevKey, double prevValue, double key, double value, double keyMin, double valueMax, double keyMax, double valueMin) const;
5324  QVector<QPointF> getOptimizedCornerPoints(int prevRegion, int currentRegion, double prevKey, double prevValue, double key, double value, double keyMin, double valueMax, double keyMax, double valueMin) const;
5325  bool mayTraverse(int prevRegion, int currentRegion) const;
5326  bool getTraverse(double prevKey, double prevValue, double key, double value, double keyMin, double valueMax, double keyMax, double valueMin, QPointF &crossA, QPointF &crossB) const;
5327  void getTraverseCornerPoints(int prevRegion, int currentRegion, double keyMin, double valueMax, double keyMax, double valueMin, QVector<QPointF> &beforeTraverse, QVector<QPointF> &afterTraverse) const;
5328  double pointDistance(const QPointF &pixelPoint, QCPCurveDataContainer::const_iterator &closestData) const;
5329 
5330  friend class QCustomPlot;
5331  friend class QCPLegend;
5332 };
5333 Q_DECLARE_METATYPE(QCPCurve::LineStyle)
5334 
5335 /* end of 'src/plottables/plottable-curve.h' */
5336 
5337 
5338 /* including file 'src/plottables/plottable-bars.h', size 8924 */
5339 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
5340 
5341 class QCP_LIB_DECL QCPBarsGroup : public QObject
5342 {
5343  Q_OBJECT
5345  Q_PROPERTY(SpacingType spacingType READ spacingType WRITE setSpacingType)
5346  Q_PROPERTY(double spacing READ spacing WRITE setSpacing)
5348 public:
5355  enum SpacingType { stAbsolute
5356  ,stAxisRectRatio
5357  ,stPlotCoords
5358  };
5359  Q_ENUMS(SpacingType)
5360 
5361  QCPBarsGroup(QCustomPlot *parentPlot);
5362  virtual ~QCPBarsGroup();
5363 
5364  // getters:
5365  SpacingType spacingType() const { return mSpacingType; }
5366  double spacing() const { return mSpacing; }
5367 
5368  // setters:
5369  void setSpacingType(SpacingType spacingType);
5370  void setSpacing(double spacing);
5371 
5372  // non-virtual methods:
5373  QList<QCPBars*> bars() const { return mBars; }
5374  QCPBars* bars(int index) const;
5375  int size() const { return mBars.size(); }
5376  bool isEmpty() const { return mBars.isEmpty(); }
5377  void clear();
5378  bool contains(QCPBars *bars) const { return mBars.contains(bars); }
5379  void append(QCPBars *bars);
5380  void insert(int i, QCPBars *bars);
5381  void remove(QCPBars *bars);
5382 
5383 protected:
5384  // non-property members:
5385  QCustomPlot *mParentPlot;
5387  double mSpacing;
5388  QList<QCPBars*> mBars;
5389 
5390  // non-virtual methods:
5391  void registerBars(QCPBars *bars);
5392  void unregisterBars(QCPBars *bars);
5393 
5394  // virtual methods:
5395  double keyPixelOffset(const QCPBars *bars, double keyCoord);
5396  double getPixelSpacing(const QCPBars *bars, double keyCoord);
5397 
5398 private:
5399  Q_DISABLE_COPY(QCPBarsGroup)
5400 
5401  friend class QCPBars;
5402 };
5403 Q_DECLARE_METATYPE(QCPBarsGroup::SpacingType)
5404 
5405 
5407 {
5408 public:
5409  QCPBarsData();
5410  QCPBarsData(double key, double value);
5411 
5412  inline double sortKey() const { return key; }
5413  inline static QCPBarsData fromSortKey(double sortKey) { return QCPBarsData(sortKey, 0); }
5414  inline static bool sortKeyIsMainKey() { return true; }
5415 
5416  inline double mainKey() const { return key; }
5417  inline double mainValue() const { return value; }
5418 
5419  inline QCPRange valueRange() const { return QCPRange(value, value); } // note that bar base value isn't held in each QCPBarsData and thus can't/shouldn't be returned here
5420 
5421  double key, value;
5422 };
5423 Q_DECLARE_TYPEINFO(QCPBarsData, Q_PRIMITIVE_TYPE);
5424 
5425 
5436 
5437 class QCP_LIB_DECL QCPBars : public QCPAbstractPlottable1D<QCPBarsData>
5438 {
5439  Q_OBJECT
5441  Q_PROPERTY(double width READ width WRITE setWidth)
5442  Q_PROPERTY(WidthType widthType READ widthType WRITE setWidthType)
5443  Q_PROPERTY(QCPBarsGroup* barsGroup READ barsGroup WRITE setBarsGroup)
5444  Q_PROPERTY(double baseValue READ baseValue WRITE setBaseValue)
5445  Q_PROPERTY(double stackingGap READ stackingGap WRITE setStackingGap)
5446  Q_PROPERTY(QCPBars* barBelow READ barBelow)
5447  Q_PROPERTY(QCPBars* barAbove READ barAbove)
5449 public:
5456  enum WidthType { wtAbsolute
5457  ,wtAxisRectRatio
5458  ,wtPlotCoords
5459  };
5460  Q_ENUMS(WidthType)
5461 
5462  explicit QCPBars(QCPAxis *keyAxis, QCPAxis *valueAxis);
5463  virtual ~QCPBars();
5464 
5465  // getters:
5466  double width() const { return mWidth; }
5467  WidthType widthType() const { return mWidthType; }
5468  QCPBarsGroup *barsGroup() const { return mBarsGroup; }
5469  double baseValue() const { return mBaseValue; }
5470  double stackingGap() const { return mStackingGap; }
5471  QCPBars *barBelow() const { return mBarBelow.data(); }
5472  QCPBars *barAbove() const { return mBarAbove.data(); }
5473  QSharedPointer<QCPBarsDataContainer> data() const { return mDataContainer; }
5474 
5475  // setters:
5476  void setData(QSharedPointer<QCPBarsDataContainer> data);
5477  void setData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
5478  void setWidth(double width);
5479  void setWidthType(WidthType widthType);
5480  void setBarsGroup(QCPBarsGroup *barsGroup);
5481  void setBaseValue(double baseValue);
5482  void setStackingGap(double pixels);
5483 
5484  // non-property methods:
5485  void addData(const QVector<double> &keys, const QVector<double> &values, bool alreadySorted=false);
5486  void addData(double key, double value);
5487  void moveBelow(QCPBars *bars);
5488  void moveAbove(QCPBars *bars);
5489 
5490  // reimplemented virtual methods:
5491  virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const Q_DECL_OVERRIDE;
5492  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
5493  virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
5494  virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
5495  virtual QPointF dataPixelPosition(int index) const Q_DECL_OVERRIDE;
5496 
5497 protected:
5498  // property members:
5499  double mWidth;
5502  double mBaseValue;
5504  QPointer<QCPBars> mBarBelow, mBarAbove;
5505 
5506  // reimplemented virtual methods:
5507  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
5508  virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
5509 
5510  // non-virtual methods:
5511  void getVisibleDataBounds(QCPBarsDataContainer::const_iterator &begin, QCPBarsDataContainer::const_iterator &end) const;
5512  QRectF getBarRect(double key, double value) const;
5513  void getPixelWidth(double key, double &lower, double &upper) const;
5514  double getStackedBaseValue(double key, bool positive) const;
5515  static void connectBars(QCPBars* lower, QCPBars* upper);
5516 
5517  friend class QCustomPlot;
5518  friend class QCPLegend;
5519  friend class QCPBarsGroup;
5520 };
5521 Q_DECLARE_METATYPE(QCPBars::WidthType)
5522 
5523 /* end of 'src/plottables/plottable-bars.h' */
5524 
5525 
5526 /* including file 'src/plottables/plottable-statisticalbox.h', size 7516 */
5527 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
5528 
5530 {
5531 public:
5532  QCPStatisticalBoxData();
5533  QCPStatisticalBoxData(double key, double minimum, double lowerQuartile, double median, double upperQuartile, double maximum, const QVector<double>& outliers=QVector<double>());
5534 
5535  inline double sortKey() const { return key; }
5536  inline static QCPStatisticalBoxData fromSortKey(double sortKey) { return QCPStatisticalBoxData(sortKey, 0, 0, 0, 0, 0); }
5537  inline static bool sortKeyIsMainKey() { return true; }
5538 
5539  inline double mainKey() const { return key; }
5540  inline double mainValue() const { return median; }
5541 
5542  inline QCPRange valueRange() const
5543  {
5544  QCPRange result(minimum, maximum);
5545  for (QVector<double>::const_iterator it = outliers.constBegin(); it != outliers.constEnd(); ++it)
5546  result.expand(*it);
5547  return result;
5548  }
5549 
5550  double key, minimum, lowerQuartile, median, upperQuartile, maximum;
5551  QVector<double> outliers;
5552 };
5553 Q_DECLARE_TYPEINFO(QCPStatisticalBoxData, Q_MOVABLE_TYPE);
5554 
5555 
5567 
5568 class QCP_LIB_DECL QCPStatisticalBox : public QCPAbstractPlottable1D<QCPStatisticalBoxData>
5569 {
5570  Q_OBJECT
5572  Q_PROPERTY(double width READ width WRITE setWidth)
5573  Q_PROPERTY(double whiskerWidth READ whiskerWidth WRITE setWhiskerWidth)
5574  Q_PROPERTY(QPen whiskerPen READ whiskerPen WRITE setWhiskerPen)
5575  Q_PROPERTY(QPen whiskerBarPen READ whiskerBarPen WRITE setWhiskerBarPen)
5576  Q_PROPERTY(bool whiskerAntialiased READ whiskerAntialiased WRITE setWhiskerAntialiased)
5577  Q_PROPERTY(QPen medianPen READ medianPen WRITE setMedianPen)
5578  Q_PROPERTY(QCPScatterStyle outlierStyle READ outlierStyle WRITE setOutlierStyle)
5580 public:
5581  explicit QCPStatisticalBox(QCPAxis *keyAxis, QCPAxis *valueAxis);
5582 
5583  // getters:
5584  QSharedPointer<QCPStatisticalBoxDataContainer> data() const { return mDataContainer; }
5585  double width() const { return mWidth; }
5586  double whiskerWidth() const { return mWhiskerWidth; }
5587  QPen whiskerPen() const { return mWhiskerPen; }
5588  QPen whiskerBarPen() const { return mWhiskerBarPen; }
5589  bool whiskerAntialiased() const { return mWhiskerAntialiased; }
5590  QPen medianPen() const { return mMedianPen; }
5591  QCPScatterStyle outlierStyle() const { return mOutlierStyle; }
5592 
5593  // setters:
5594  void setData(QSharedPointer<QCPStatisticalBoxDataContainer> data);
5595  void setData(const QVector<double> &keys, const QVector<double> &minimum, const QVector<double> &lowerQuartile, const QVector<double> &median, const QVector<double> &upperQuartile, const QVector<double> &maximum, bool alreadySorted=false);
5596  void setWidth(double width);
5597  void setWhiskerWidth(double width);
5598  void setWhiskerPen(const QPen &pen);
5599  void setWhiskerBarPen(const QPen &pen);
5600  void setWhiskerAntialiased(bool enabled);
5601  void setMedianPen(const QPen &pen);
5602  void setOutlierStyle(const QCPScatterStyle &style);
5603 
5604  // non-property methods:
5605  void addData(const QVector<double> &keys, const QVector<double> &minimum, const QVector<double> &lowerQuartile, const QVector<double> &median, const QVector<double> &upperQuartile, const QVector<double> &maximum, bool alreadySorted=false);
5606  void addData(double key, double minimum, double lowerQuartile, double median, double upperQuartile, double maximum, const QVector<double> &outliers=QVector<double>());
5607 
5608  // reimplemented virtual methods:
5609  virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const Q_DECL_OVERRIDE;
5610  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
5611  virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
5612  virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
5613 
5614 protected:
5615  // property members:
5616  double mWidth;
5618  QPen mWhiskerPen, mWhiskerBarPen;
5622 
5623  // reimplemented virtual methods:
5624  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
5625  virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
5626 
5627  // introduced virtual methods:
5628  virtual void drawStatisticalBox(QCPPainter *painter, QCPStatisticalBoxDataContainer::const_iterator it, const QCPScatterStyle &outlierStyle) const;
5629 
5630  // non-virtual methods:
5632  QRectF getQuartileBox(QCPStatisticalBoxDataContainer::const_iterator it) const;
5633  QVector<QLineF> getWhiskerBackboneLines(QCPStatisticalBoxDataContainer::const_iterator it) const;
5634  QVector<QLineF> getWhiskerBarLines(QCPStatisticalBoxDataContainer::const_iterator it) const;
5635 
5636  friend class QCustomPlot;
5637  friend class QCPLegend;
5638 };
5639 
5640 /* end of 'src/plottables/plottable-statisticalbox.h' */
5641 
5642 
5643 /* including file 'src/plottables/plottable-colormap.h', size 7070 */
5644 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
5645 
5647 {
5648 public:
5649  QCPColorMapData(int keySize, int valueSize, const QCPRange &keyRange, const QCPRange &valueRange);
5650  ~QCPColorMapData();
5651  QCPColorMapData(const QCPColorMapData &other);
5652  QCPColorMapData &operator=(const QCPColorMapData &other);
5653 
5654  // getters:
5655  int keySize() const { return mKeySize; }
5656  int valueSize() const { return mValueSize; }
5657  QCPRange keyRange() const { return mKeyRange; }
5658  QCPRange valueRange() const { return mValueRange; }
5659  QCPRange dataBounds() const { return mDataBounds; }
5660  double data(double key, double value);
5661  double cell(int keyIndex, int valueIndex);
5662  unsigned char alpha(int keyIndex, int valueIndex);
5663 
5664  // setters:
5665  void setSize(int keySize, int valueSize);
5666  void setKeySize(int keySize);
5667  void setValueSize(int valueSize);
5668  void setRange(const QCPRange &keyRange, const QCPRange &valueRange);
5669  void setKeyRange(const QCPRange &keyRange);
5670  void setValueRange(const QCPRange &valueRange);
5671  void setData(double key, double value, double z);
5672  void setCell(int keyIndex, int valueIndex, double z);
5673  void setAlpha(int keyIndex, int valueIndex, unsigned char alpha);
5674 
5675  // non-property methods:
5676  void recalculateDataBounds();
5677  void clear();
5678  void clearAlpha();
5679  void fill(double z);
5680  void fillAlpha(unsigned char alpha);
5681  bool isEmpty() const { return mIsEmpty; }
5682  void coordToCell(double key, double value, int *keyIndex, int *valueIndex) const;
5683  void cellToCoord(int keyIndex, int valueIndex, double *key, double *value) const;
5684 
5685 protected:
5686  // property members:
5687  int mKeySize, mValueSize;
5688  QCPRange mKeyRange, mValueRange;
5689  bool mIsEmpty;
5690 
5691  // non-property members:
5692  double *mData;
5693  unsigned char *mAlpha;
5696 
5697  bool createAlpha(bool initializeOpaque=true);
5698 
5699  friend class QCPColorMap;
5700 };
5701 
5702 
5703 class QCP_LIB_DECL QCPColorMap : public QCPAbstractPlottable
5704 {
5705  Q_OBJECT
5707  Q_PROPERTY(QCPRange dataRange READ dataRange WRITE setDataRange NOTIFY dataRangeChanged)
5708  Q_PROPERTY(QCPAxis::ScaleType dataScaleType READ dataScaleType WRITE setDataScaleType NOTIFY dataScaleTypeChanged)
5709  Q_PROPERTY(QCPColorGradient gradient READ gradient WRITE setGradient NOTIFY gradientChanged)
5710  Q_PROPERTY(bool interpolate READ interpolate WRITE setInterpolate)
5711  Q_PROPERTY(bool tightBoundary READ tightBoundary WRITE setTightBoundary)
5712  Q_PROPERTY(QCPColorScale* colorScale READ colorScale WRITE setColorScale)
5714 public:
5715  explicit QCPColorMap(QCPAxis *keyAxis, QCPAxis *valueAxis);
5716  virtual ~QCPColorMap();
5717 
5718  // getters:
5719  QCPColorMapData *data() const { return mMapData; }
5720  QCPRange dataRange() const { return mDataRange; }
5721  QCPAxis::ScaleType dataScaleType() const { return mDataScaleType; }
5722  bool interpolate() const { return mInterpolate; }
5723  bool tightBoundary() const { return mTightBoundary; }
5724  QCPColorGradient gradient() const { return mGradient; }
5725  QCPColorScale *colorScale() const { return mColorScale.data(); }
5726 
5727  // setters:
5728  void setData(QCPColorMapData *data, bool copy=false);
5729  Q_SLOT void setDataRange(const QCPRange &dataRange);
5730  Q_SLOT void setDataScaleType(QCPAxis::ScaleType scaleType);
5731  Q_SLOT void setGradient(const QCPColorGradient &gradient);
5732  void setInterpolate(bool enabled);
5733  void setTightBoundary(bool enabled);
5734  void setColorScale(QCPColorScale *colorScale);
5735 
5736  // non-property methods:
5737  void rescaleDataRange(bool recalculateDataBounds=false);
5738  Q_SLOT void updateLegendIcon(Qt::TransformationMode transformMode=Qt::SmoothTransformation, const QSize &thumbSize=QSize(32, 18));
5739 
5740  // reimplemented virtual methods:
5741  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
5742  virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
5743  virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
5744 
5745 signals:
5746  void dataRangeChanged(const QCPRange &newRange);
5747  void dataScaleTypeChanged(QCPAxis::ScaleType scaleType);
5748  void gradientChanged(const QCPColorGradient &newGradient);
5749 
5750 protected:
5751  // property members:
5758  QPointer<QCPColorScale> mColorScale;
5759 
5760  // non-property members:
5761  QImage mMapImage, mUndersampledMapImage;
5762  QPixmap mLegendIcon;
5764 
5765  // introduced virtual methods:
5766  virtual void updateMapImage();
5767 
5768  // reimplemented virtual methods:
5769  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
5770  virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
5771 
5772  friend class QCustomPlot;
5773  friend class QCPLegend;
5774 };
5775 
5776 /* end of 'src/plottables/plottable-colormap.h' */
5777 
5778 
5779 /* including file 'src/plottables/plottable-financial.h', size 8622 */
5780 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
5781 
5783 {
5784 public:
5785  QCPFinancialData();
5786  QCPFinancialData(double key, double open, double high, double low, double close);
5787 
5788  inline double sortKey() const { return key; }
5789  inline static QCPFinancialData fromSortKey(double sortKey) { return QCPFinancialData(sortKey, 0, 0, 0, 0); }
5790  inline static bool sortKeyIsMainKey() { return true; }
5791 
5792  inline double mainKey() const { return key; }
5793  inline double mainValue() const { return open; }
5794 
5795  inline QCPRange valueRange() const { return QCPRange(low, high); } // open and close must lie between low and high, so we don't need to check them
5796 
5797  double key, open, high, low, close;
5798 };
5799 Q_DECLARE_TYPEINFO(QCPFinancialData, Q_PRIMITIVE_TYPE);
5800 
5801 
5812 
5813 class QCP_LIB_DECL QCPFinancial : public QCPAbstractPlottable1D<QCPFinancialData>
5814 {
5815  Q_OBJECT
5817  Q_PROPERTY(ChartStyle chartStyle READ chartStyle WRITE setChartStyle)
5818  Q_PROPERTY(double width READ width WRITE setWidth)
5819  Q_PROPERTY(WidthType widthType READ widthType WRITE setWidthType)
5820  Q_PROPERTY(bool twoColored READ twoColored WRITE setTwoColored)
5821  Q_PROPERTY(QBrush brushPositive READ brushPositive WRITE setBrushPositive)
5822  Q_PROPERTY(QBrush brushNegative READ brushNegative WRITE setBrushNegative)
5823  Q_PROPERTY(QPen penPositive READ penPositive WRITE setPenPositive)
5824  Q_PROPERTY(QPen penNegative READ penNegative WRITE setPenNegative)
5826 public:
5833  enum WidthType { wtAbsolute
5834  ,wtAxisRectRatio
5835  ,wtPlotCoords
5836  };
5837  Q_ENUMS(WidthType)
5838 
5839 
5844  enum ChartStyle { csOhlc
5845  ,csCandlestick
5846  };
5847  Q_ENUMS(ChartStyle)
5848 
5849  explicit QCPFinancial(QCPAxis *keyAxis, QCPAxis *valueAxis);
5850  virtual ~QCPFinancial();
5851 
5852  // getters:
5853  QSharedPointer<QCPFinancialDataContainer> data() const { return mDataContainer; }
5854  ChartStyle chartStyle() const { return mChartStyle; }
5855  double width() const { return mWidth; }
5856  WidthType widthType() const { return mWidthType; }
5857  bool twoColored() const { return mTwoColored; }
5858  QBrush brushPositive() const { return mBrushPositive; }
5859  QBrush brushNegative() const { return mBrushNegative; }
5860  QPen penPositive() const { return mPenPositive; }
5861  QPen penNegative() const { return mPenNegative; }
5862 
5863  // setters:
5864  void setData(QSharedPointer<QCPFinancialDataContainer> data);
5865  void setData(const QVector<double> &keys, const QVector<double> &open, const QVector<double> &high, const QVector<double> &low, const QVector<double> &close, bool alreadySorted=false);
5866  void setChartStyle(ChartStyle style);
5867  void setWidth(double width);
5868  void setWidthType(WidthType widthType);
5869  void setTwoColored(bool twoColored);
5870  void setBrushPositive(const QBrush &brush);
5871  void setBrushNegative(const QBrush &brush);
5872  void setPenPositive(const QPen &pen);
5873  void setPenNegative(const QPen &pen);
5874 
5875  // non-property methods:
5876  void addData(const QVector<double> &keys, const QVector<double> &open, const QVector<double> &high, const QVector<double> &low, const QVector<double> &close, bool alreadySorted=false);
5877  void addData(double key, double open, double high, double low, double close);
5878 
5879  // reimplemented virtual methods:
5880  virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const Q_DECL_OVERRIDE;
5881  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
5882  virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
5883  virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
5884 
5885  // static methods:
5886  static QCPFinancialDataContainer timeSeriesToOhlc(const QVector<double> &time, const QVector<double> &value, double timeBinSize, double timeBinOffset = 0);
5887 
5888 protected:
5889  // property members:
5891  double mWidth;
5894  QBrush mBrushPositive, mBrushNegative;
5895  QPen mPenPositive, mPenNegative;
5896 
5897  // reimplemented virtual methods:
5898  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
5899  virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
5900 
5901  // non-virtual methods:
5902  void drawOhlcPlot(QCPPainter *painter, const QCPFinancialDataContainer::const_iterator &begin, const QCPFinancialDataContainer::const_iterator &end, bool isSelected);
5903  void drawCandlestickPlot(QCPPainter *painter, const QCPFinancialDataContainer::const_iterator &begin, const QCPFinancialDataContainer::const_iterator &end, bool isSelected);
5904  double getPixelWidth(double key, double keyPixel) const;
5905  double ohlcSelectTest(const QPointF &pos, const QCPFinancialDataContainer::const_iterator &begin, const QCPFinancialDataContainer::const_iterator &end, QCPFinancialDataContainer::const_iterator &closestDataPoint) const;
5906  double candlestickSelectTest(const QPointF &pos, const QCPFinancialDataContainer::const_iterator &begin, const QCPFinancialDataContainer::const_iterator &end, QCPFinancialDataContainer::const_iterator &closestDataPoint) const;
5907  void getVisibleDataBounds(QCPFinancialDataContainer::const_iterator &begin, QCPFinancialDataContainer::const_iterator &end) const;
5908  QRectF selectionHitBox(QCPFinancialDataContainer::const_iterator it) const;
5909 
5910  friend class QCustomPlot;
5911  friend class QCPLegend;
5912 };
5913 Q_DECLARE_METATYPE(QCPFinancial::ChartStyle)
5914 
5915 /* end of 'src/plottables/plottable-financial.h' */
5916 
5917 
5918 /* including file 'src/plottables/plottable-errorbar.h', size 7567 */
5919 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
5920 
5922 {
5923 public:
5924  QCPErrorBarsData();
5925  explicit QCPErrorBarsData(double error);
5926  QCPErrorBarsData(double errorMinus, double errorPlus);
5927 
5928  double errorMinus, errorPlus;
5929 };
5930 Q_DECLARE_TYPEINFO(QCPErrorBarsData, Q_PRIMITIVE_TYPE);
5931 
5932 
5948 typedef QVector<QCPErrorBarsData> QCPErrorBarsDataContainer;
5949 
5950 class QCP_LIB_DECL QCPErrorBars : public QCPAbstractPlottable, public QCPPlottableInterface1D
5951 {
5952  Q_OBJECT
5954  Q_PROPERTY(QSharedPointer<QCPErrorBarsDataContainer> data READ data WRITE setData)
5955  Q_PROPERTY(QCPAbstractPlottable* dataPlottable READ dataPlottable WRITE setDataPlottable)
5956  Q_PROPERTY(ErrorType errorType READ errorType WRITE setErrorType)
5957  Q_PROPERTY(double whiskerWidth READ whiskerWidth WRITE setWhiskerWidth)
5958  Q_PROPERTY(double symbolGap READ symbolGap WRITE setSymbolGap)
5960 public:
5961 
5968  enum ErrorType { etKeyError
5969  ,etValueError
5970  };
5971  Q_ENUMS(ErrorType)
5972 
5973  explicit QCPErrorBars(QCPAxis *keyAxis, QCPAxis *valueAxis);
5974  virtual ~QCPErrorBars();
5975  // getters:
5976  QSharedPointer<QCPErrorBarsDataContainer> data() const { return mDataContainer; }
5977  QCPAbstractPlottable *dataPlottable() const { return mDataPlottable.data(); }
5978  ErrorType errorType() const { return mErrorType; }
5979  double whiskerWidth() const { return mWhiskerWidth; }
5980  double symbolGap() const { return mSymbolGap; }
5981 
5982  // setters:
5983  void setData(QSharedPointer<QCPErrorBarsDataContainer> data);
5984  void setData(const QVector<double> &error);
5985  void setData(const QVector<double> &errorMinus, const QVector<double> &errorPlus);
5986  void setDataPlottable(QCPAbstractPlottable* plottable);
5987  void setErrorType(ErrorType type);
5988  void setWhiskerWidth(double pixels);
5989  void setSymbolGap(double pixels);
5990 
5991  // non-property methods:
5992  void addData(const QVector<double> &error);
5993  void addData(const QVector<double> &errorMinus, const QVector<double> &errorPlus);
5994  void addData(double error);
5995  void addData(double errorMinus, double errorPlus);
5996 
5997  // virtual methods of 1d plottable interface:
5998  virtual int dataCount() const;
5999  virtual double dataMainKey(int index) const;
6000  virtual double dataSortKey(int index) const;
6001  virtual double dataMainValue(int index) const;
6002  virtual QCPRange dataValueRange(int index) const;
6003  virtual QPointF dataPixelPosition(int index) const;
6004  virtual bool sortKeyIsMainKey() const;
6005  virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const;
6006  virtual int findBegin(double sortKey, bool expandedRange=true) const;
6007  virtual int findEnd(double sortKey, bool expandedRange=true) const;
6008 
6009  // reimplemented virtual methods:
6010  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6011  virtual QCPPlottableInterface1D *interface1D() Q_DECL_OVERRIDE { return this; }
6012 
6013 protected:
6014  // property members:
6015  QSharedPointer<QCPErrorBarsDataContainer> mDataContainer;
6016  QPointer<QCPAbstractPlottable> mDataPlottable;
6019  double mSymbolGap;
6020 
6021  // reimplemented virtual methods:
6022  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6023  virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const Q_DECL_OVERRIDE;
6024  virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const Q_DECL_OVERRIDE;
6025  virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const Q_DECL_OVERRIDE;
6026 
6027  // non-virtual methods:
6028  void getErrorBarLines(QCPErrorBarsDataContainer::const_iterator it, QVector<QLineF> &backbones, QVector<QLineF> &whiskers) const;
6029  void getVisibleDataBounds(QCPErrorBarsDataContainer::const_iterator &begin, QCPErrorBarsDataContainer::const_iterator &end, const QCPDataRange &rangeRestriction) const;
6030  double pointDistance(const QPointF &pixelPoint, QCPErrorBarsDataContainer::const_iterator &closestData) const;
6031  // helpers:
6032  void getDataSegments(QList<QCPDataRange> &selectedSegments, QList<QCPDataRange> &unselectedSegments) const;
6033  bool errorBarVisible(int index) const;
6034  bool rectIntersectsLine(const QRectF &pixelRect, const QLineF &line) const;
6035 
6036  friend class QCustomPlot;
6037  friend class QCPLegend;
6038 };
6039 
6040 /* end of 'src/plottables/plottable-errorbar.h' */
6041 
6042 
6043 /* including file 'src/items/item-straightline.h', size 3117 */
6044 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
6045 
6047 {
6048  Q_OBJECT
6050  Q_PROPERTY(QPen pen READ pen WRITE setPen)
6051  Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
6053 public:
6054  explicit QCPItemStraightLine(QCustomPlot *parentPlot);
6055  virtual ~QCPItemStraightLine();
6056 
6057  // getters:
6058  QPen pen() const { return mPen; }
6059  QPen selectedPen() const { return mSelectedPen; }
6060 
6061  // setters;
6062  void setPen(const QPen &pen);
6063  void setSelectedPen(const QPen &pen);
6064 
6065  // reimplemented virtual methods:
6066  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6067 
6070 
6071 protected:
6072  // property members:
6074 
6075  // reimplemented virtual methods:
6076  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6077 
6078  // non-virtual methods:
6079  QLineF getRectClippedStraightLine(const QCPVector2D &point1, const QCPVector2D &vec, const QRect &rect) const;
6080  QPen mainPen() const;
6081 };
6082 
6083 /* end of 'src/items/item-straightline.h' */
6084 
6085 
6086 /* including file 'src/items/item-line.h', size 3407 */
6087 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
6088 
6090 {
6091  Q_OBJECT
6093  Q_PROPERTY(QPen pen READ pen WRITE setPen)
6094  Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
6095  Q_PROPERTY(QCPLineEnding head READ head WRITE setHead)
6096  Q_PROPERTY(QCPLineEnding tail READ tail WRITE setTail)
6098 public:
6099  explicit QCPItemLine(QCustomPlot *parentPlot);
6100  virtual ~QCPItemLine();
6101 
6102  // getters:
6103  QPen pen() const { return mPen; }
6104  QPen selectedPen() const { return mSelectedPen; }
6105  QCPLineEnding head() const { return mHead; }
6106  QCPLineEnding tail() const { return mTail; }
6107 
6108  // setters;
6109  void setPen(const QPen &pen);
6110  void setSelectedPen(const QPen &pen);
6111  void setHead(const QCPLineEnding &head);
6112  void setTail(const QCPLineEnding &tail);
6113 
6114  // reimplemented virtual methods:
6115  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6116 
6119 
6120 protected:
6121  // property members:
6124 
6125  // reimplemented virtual methods:
6126  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6127 
6128  // non-virtual methods:
6129  QLineF getRectClippedLine(const QCPVector2D &start, const QCPVector2D &end, const QRect &rect) const;
6130  QPen mainPen() const;
6131 };
6132 
6133 /* end of 'src/items/item-line.h' */
6134 
6135 
6136 /* including file 'src/items/item-curve.h', size 3379 */
6137 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
6138 
6140 {
6141  Q_OBJECT
6143  Q_PROPERTY(QPen pen READ pen WRITE setPen)
6144  Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
6145  Q_PROPERTY(QCPLineEnding head READ head WRITE setHead)
6146  Q_PROPERTY(QCPLineEnding tail READ tail WRITE setTail)
6148 public:
6149  explicit QCPItemCurve(QCustomPlot *parentPlot);
6150  virtual ~QCPItemCurve();
6151 
6152  // getters:
6153  QPen pen() const { return mPen; }
6154  QPen selectedPen() const { return mSelectedPen; }
6155  QCPLineEnding head() const { return mHead; }
6156  QCPLineEnding tail() const { return mTail; }
6157 
6158  // setters;
6159  void setPen(const QPen &pen);
6160  void setSelectedPen(const QPen &pen);
6161  void setHead(const QCPLineEnding &head);
6162  void setTail(const QCPLineEnding &tail);
6163 
6164  // reimplemented virtual methods:
6165  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6166 
6171 
6172 protected:
6173  // property members:
6176 
6177  // reimplemented virtual methods:
6178  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6179 
6180  // non-virtual methods:
6181  QPen mainPen() const;
6182 };
6183 
6184 /* end of 'src/items/item-curve.h' */
6185 
6186 
6187 /* including file 'src/items/item-rect.h', size 3688 */
6188 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
6189 
6191 {
6192  Q_OBJECT
6194  Q_PROPERTY(QPen pen READ pen WRITE setPen)
6195  Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
6196  Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
6197  Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
6199 public:
6200  explicit QCPItemRect(QCustomPlot *parentPlot);
6201  virtual ~QCPItemRect();
6202 
6203  // getters:
6204  QPen pen() const { return mPen; }
6205  QPen selectedPen() const { return mSelectedPen; }
6206  QBrush brush() const { return mBrush; }
6207  QBrush selectedBrush() const { return mSelectedBrush; }
6208 
6209  // setters;
6210  void setPen(const QPen &pen);
6211  void setSelectedPen(const QPen &pen);
6212  void setBrush(const QBrush &brush);
6213  void setSelectedBrush(const QBrush &brush);
6214 
6215  // reimplemented virtual methods:
6216  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6217 
6220  QCPItemAnchor * const top;
6221  QCPItemAnchor * const topRight;
6222  QCPItemAnchor * const right;
6223  QCPItemAnchor * const bottom;
6224  QCPItemAnchor * const bottomLeft;
6225  QCPItemAnchor * const left;
6226 
6227 protected:
6228  enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, aiLeft};
6229 
6230  // property members:
6233 
6234  // reimplemented virtual methods:
6235  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6236  virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
6237 
6238  // non-virtual methods:
6239  QPen mainPen() const;
6240  QBrush mainBrush() const;
6241 };
6242 
6243 /* end of 'src/items/item-rect.h' */
6244 
6245 
6246 /* including file 'src/items/item-text.h', size 5554 */
6247 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
6248 
6250 {
6251  Q_OBJECT
6253  Q_PROPERTY(QColor color READ color WRITE setColor)
6254  Q_PROPERTY(QColor selectedColor READ selectedColor WRITE setSelectedColor)
6255  Q_PROPERTY(QPen pen READ pen WRITE setPen)
6256  Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
6257  Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
6258  Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
6259  Q_PROPERTY(QFont font READ font WRITE setFont)
6260  Q_PROPERTY(QFont selectedFont READ selectedFont WRITE setSelectedFont)
6261  Q_PROPERTY(QString text READ text WRITE setText)
6262  Q_PROPERTY(Qt::Alignment positionAlignment READ positionAlignment WRITE setPositionAlignment)
6263  Q_PROPERTY(Qt::Alignment textAlignment READ textAlignment WRITE setTextAlignment)
6264  Q_PROPERTY(double rotation READ rotation WRITE setRotation)
6265  Q_PROPERTY(QMargins padding READ padding WRITE setPadding)
6267 public:
6268  explicit QCPItemText(QCustomPlot *parentPlot);
6269  virtual ~QCPItemText();
6270 
6271  // getters:
6272  QColor color() const { return mColor; }
6273  QColor selectedColor() const { return mSelectedColor; }
6274  QPen pen() const { return mPen; }
6275  QPen selectedPen() const { return mSelectedPen; }
6276  QBrush brush() const { return mBrush; }
6277  QBrush selectedBrush() const { return mSelectedBrush; }
6278  QFont font() const { return mFont; }
6279  QFont selectedFont() const { return mSelectedFont; }
6280  QString text() const { return mText; }
6281  Qt::Alignment positionAlignment() const { return mPositionAlignment; }
6282  Qt::Alignment textAlignment() const { return mTextAlignment; }
6283  double rotation() const { return mRotation; }
6284  QMargins padding() const { return mPadding; }
6285 
6286  // setters;
6287  void setColor(const QColor &color);
6288  void setSelectedColor(const QColor &color);
6289  void setPen(const QPen &pen);
6290  void setSelectedPen(const QPen &pen);
6291  void setBrush(const QBrush &brush);
6292  void setSelectedBrush(const QBrush &brush);
6293  void setFont(const QFont &font);
6294  void setSelectedFont(const QFont &font);
6295  void setText(const QString &text);
6296  void setPositionAlignment(Qt::Alignment alignment);
6297  void setTextAlignment(Qt::Alignment alignment);
6298  void setRotation(double degrees);
6299  void setPadding(const QMargins &padding);
6300 
6301  // reimplemented virtual methods:
6302  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6303 
6305  QCPItemAnchor * const topLeft;
6306  QCPItemAnchor * const top;
6307  QCPItemAnchor * const topRight;
6308  QCPItemAnchor * const right;
6309  QCPItemAnchor * const bottomRight;
6310  QCPItemAnchor * const bottom;
6311  QCPItemAnchor * const bottomLeft;
6312  QCPItemAnchor * const left;
6313 
6314 protected:
6315  enum AnchorIndex {aiTopLeft, aiTop, aiTopRight, aiRight, aiBottomRight, aiBottom, aiBottomLeft, aiLeft};
6316 
6317  // property members:
6318  QColor mColor, mSelectedColor;
6321  QFont mFont, mSelectedFont;
6322  QString mText;
6323  Qt::Alignment mPositionAlignment;
6324  Qt::Alignment mTextAlignment;
6325  double mRotation;
6326  QMargins mPadding;
6327 
6328  // reimplemented virtual methods:
6329  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6330  virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
6331 
6332  // non-virtual methods:
6333  QPointF getTextDrawPoint(const QPointF &pos, const QRectF &rect, Qt::Alignment positionAlignment) const;
6334  QFont mainFont() const;
6335  QColor mainColor() const;
6336  QPen mainPen() const;
6337  QBrush mainBrush() const;
6338 };
6339 
6340 /* end of 'src/items/item-text.h' */
6341 
6342 
6343 /* including file 'src/items/item-ellipse.h', size 3868 */
6344 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
6345 
6347 {
6348  Q_OBJECT
6350  Q_PROPERTY(QPen pen READ pen WRITE setPen)
6351  Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
6352  Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
6353  Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
6355 public:
6356  explicit QCPItemEllipse(QCustomPlot *parentPlot);
6357  virtual ~QCPItemEllipse();
6358 
6359  // getters:
6360  QPen pen() const { return mPen; }
6361  QPen selectedPen() const { return mSelectedPen; }
6362  QBrush brush() const { return mBrush; }
6363  QBrush selectedBrush() const { return mSelectedBrush; }
6364 
6365  // setters;
6366  void setPen(const QPen &pen);
6367  void setSelectedPen(const QPen &pen);
6368  void setBrush(const QBrush &brush);
6369  void setSelectedBrush(const QBrush &brush);
6370 
6371  // reimplemented virtual methods:
6372  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6373 
6376  QCPItemAnchor * const topLeftRim;
6377  QCPItemAnchor * const top;
6378  QCPItemAnchor * const topRightRim;
6379  QCPItemAnchor * const right;
6380  QCPItemAnchor * const bottomRightRim;
6381  QCPItemAnchor * const bottom;
6382  QCPItemAnchor * const bottomLeftRim;
6383  QCPItemAnchor * const left;
6384  QCPItemAnchor * const center;
6385 
6386 protected:
6387  enum AnchorIndex {aiTopLeftRim, aiTop, aiTopRightRim, aiRight, aiBottomRightRim, aiBottom, aiBottomLeftRim, aiLeft, aiCenter};
6388 
6389  // property members:
6392 
6393  // reimplemented virtual methods:
6394  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6395  virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
6396 
6397  // non-virtual methods:
6398  QPen mainPen() const;
6399  QBrush mainBrush() const;
6400 };
6401 
6402 /* end of 'src/items/item-ellipse.h' */
6403 
6404 
6405 /* including file 'src/items/item-pixmap.h', size 4373 */
6406 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
6407 
6409 {
6410  Q_OBJECT
6412  Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
6413  Q_PROPERTY(bool scaled READ scaled WRITE setScaled)
6414  Q_PROPERTY(Qt::AspectRatioMode aspectRatioMode READ aspectRatioMode)
6415  Q_PROPERTY(Qt::TransformationMode transformationMode READ transformationMode)
6416  Q_PROPERTY(QPen pen READ pen WRITE setPen)
6417  Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
6419 public:
6420  explicit QCPItemPixmap(QCustomPlot *parentPlot);
6421  virtual ~QCPItemPixmap();
6422 
6423  // getters:
6424  QPixmap pixmap() const { return mPixmap; }
6425  bool scaled() const { return mScaled; }
6426  Qt::AspectRatioMode aspectRatioMode() const { return mAspectRatioMode; }
6427  Qt::TransformationMode transformationMode() const { return mTransformationMode; }
6428  QPen pen() const { return mPen; }
6429  QPen selectedPen() const { return mSelectedPen; }
6430 
6431  // setters;
6432  void setPixmap(const QPixmap &pixmap);
6433  void setScaled(bool scaled, Qt::AspectRatioMode aspectRatioMode=Qt::KeepAspectRatio, Qt::TransformationMode transformationMode=Qt::SmoothTransformation);
6434  void setPen(const QPen &pen);
6435  void setSelectedPen(const QPen &pen);
6436 
6437  // reimplemented virtual methods:
6438  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6439 
6442  QCPItemAnchor * const top;
6443  QCPItemAnchor * const topRight;
6444  QCPItemAnchor * const right;
6445  QCPItemAnchor * const bottom;
6446  QCPItemAnchor * const bottomLeft;
6447  QCPItemAnchor * const left;
6448 
6449 protected:
6450  enum AnchorIndex {aiTop, aiTopRight, aiRight, aiBottom, aiBottomLeft, aiLeft};
6451 
6452  // property members:
6453  QPixmap mPixmap;
6454  QPixmap mScaledPixmap;
6455  bool mScaled;
6457  Qt::AspectRatioMode mAspectRatioMode;
6458  Qt::TransformationMode mTransformationMode;
6460 
6461  // reimplemented virtual methods:
6462  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6463  virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
6464 
6465  // non-virtual methods:
6466  void updateScaledPixmap(QRect finalRect=QRect(), bool flipHorz=false, bool flipVert=false);
6467  QRect getFinalRect(bool *flippedHorz=0, bool *flippedVert=0) const;
6468  QPen mainPen() const;
6469 };
6470 
6471 /* end of 'src/items/item-pixmap.h' */
6472 
6473 
6474 /* including file 'src/items/item-tracer.h', size 4762 */
6475 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
6476 
6478 {
6479  Q_OBJECT
6481  Q_PROPERTY(QPen pen READ pen WRITE setPen)
6482  Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
6483  Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
6484  Q_PROPERTY(QBrush selectedBrush READ selectedBrush WRITE setSelectedBrush)
6485  Q_PROPERTY(double size READ size WRITE setSize)
6486  Q_PROPERTY(TracerStyle style READ style WRITE setStyle)
6487  Q_PROPERTY(QCPGraph* graph READ graph WRITE setGraph)
6488  Q_PROPERTY(double graphKey READ graphKey WRITE setGraphKey)
6489  Q_PROPERTY(bool interpolating READ interpolating WRITE setInterpolating)
6491 public:
6497  enum TracerStyle { tsNone
6498  ,tsPlus
6499  ,tsCrosshair
6500  ,tsCircle
6501  ,tsSquare
6502  };
6503  Q_ENUMS(TracerStyle)
6504 
6505  explicit QCPItemTracer(QCustomPlot *parentPlot);
6506  virtual ~QCPItemTracer();
6507 
6508  // getters:
6509  QPen pen() const { return mPen; }
6510  QPen selectedPen() const { return mSelectedPen; }
6511  QBrush brush() const { return mBrush; }
6512  QBrush selectedBrush() const { return mSelectedBrush; }
6513  double size() const { return mSize; }
6514  TracerStyle style() const { return mStyle; }
6515  QCPGraph *graph() const { return mGraph; }
6516  double graphKey() const { return mGraphKey; }
6517  bool interpolating() const { return mInterpolating; }
6518 
6519  // setters;
6520  void setPen(const QPen &pen);
6521  void setSelectedPen(const QPen &pen);
6522  void setBrush(const QBrush &brush);
6523  void setSelectedBrush(const QBrush &brush);
6524  void setSize(double size);
6525  void setStyle(TracerStyle style);
6526  void setGraph(QCPGraph *graph);
6527  void setGraphKey(double key);
6528  void setInterpolating(bool enabled);
6529 
6530  // reimplemented virtual methods:
6531  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6532 
6533  // non-virtual methods:
6534  void updatePosition();
6535 
6537 
6538 protected:
6539  // property members:
6542  double mSize;
6545  double mGraphKey;
6547 
6548  // reimplemented virtual methods:
6549  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6550 
6551  // non-virtual methods:
6552  QPen mainPen() const;
6553  QBrush mainBrush() const;
6554 };
6555 Q_DECLARE_METATYPE(QCPItemTracer::TracerStyle)
6556 
6557 /* end of 'src/items/item-tracer.h' */
6558 
6559 
6560 /* including file 'src/items/item-bracket.h', size 3969 */
6561 /* commit 633339dadc92cb10c58ef3556b55570685fafb99 2016-09-13 23:54:56 +0200 */
6562 
6564 {
6565  Q_OBJECT
6567  Q_PROPERTY(QPen pen READ pen WRITE setPen)
6568  Q_PROPERTY(QPen selectedPen READ selectedPen WRITE setSelectedPen)
6569  Q_PROPERTY(double length READ length WRITE setLength)
6570  Q_PROPERTY(BracketStyle style READ style WRITE setStyle)
6572 public:
6579  enum BracketStyle { bsSquare
6580  ,bsRound
6581  ,bsCurly
6582  ,bsCalligraphic
6583  };
6584  Q_ENUMS(BracketStyle)
6585 
6586  explicit QCPItemBracket(QCustomPlot *parentPlot);
6587  virtual ~QCPItemBracket();
6588 
6589  // getters:
6590  QPen pen() const { return mPen; }
6591  QPen selectedPen() const { return mSelectedPen; }
6592  double length() const { return mLength; }
6593  BracketStyle style() const { return mStyle; }
6594 
6595  // setters;
6596  void setPen(const QPen &pen);
6597  void setSelectedPen(const QPen &pen);
6598  void setLength(double length);
6599  void setStyle(BracketStyle style);
6600 
6601  // reimplemented virtual methods:
6602  virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const Q_DECL_OVERRIDE;
6603 
6606  QCPItemAnchor * const center;
6607 
6608 protected:
6609  // property members:
6610  enum AnchorIndex {aiCenter};
6612  double mLength;
6614 
6615  // reimplemented virtual methods:
6616  virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE;
6617  virtual QPointF anchorPixelPosition(int anchorId) const Q_DECL_OVERRIDE;
6618 
6619  // non-virtual methods:
6620  QPen mainPen() const;
6621 };
6622 Q_DECLARE_METATYPE(QCPItemBracket::BracketStyle)
6623 
6624 /* end of 'src/items/item-bracket.h' */
6625 
6626 
6627 #endif // QCUSTOMPLOT_H
6628 
bool openGl() const
Definition: qcustomplot.h:3609
double devicePixelRatio() const
Definition: qcustomplot.h:521
QList< QList< QCPLayoutElement * > > mElements
Definition: qcustomplot.h:1374
QCP::AntialiasedElements mNotAADragBackup
Definition: qcustomplot.h:4642
double size() const
Definition: qcustomplot.h:791
QCPLayoutGrid * plotLayout() const
Definition: qcustomplot.h:3598
QPen basePen() const
Definition: qcustomplot.h:2006
A bracket for referencing/highlighting certain parts in the plot.
Definition: qcustomplot.h:6563
QPen mSelectedPen
Definition: qcustomplot.h:6231
QList< QSharedPointer< QCPAbstractPaintBuffer > > mPaintBuffers
Definition: qcustomplot.h:3750
QCustomPlot * mParentPlot
Definition: qcustomplot.h:1159
A margin group allows synchronization of margin sides if working with multiple layout elements...
Definition: qcustomplot.h:1145
One individual data point can be selected at a time.
Definition: qcustomplot.h:290
QList< QCPGraph * > mGraphs
Definition: qcustomplot.h:3730
Holds the data of one single error bar for QCPErrorBars.
Definition: qcustomplot.h:5921
QMargins padding() const
Definition: qcustomplot.h:6284
bool operator==(const QCPRange &other) const
Definition: qcustomplot.h:777
An arbitrary pixmap.
Definition: qcustomplot.h:6408
0xFFFF All elements
Definition: qcustomplot.h:222
virtual double dataMainKey(int index) const
Definition: qcustomplot.h:4086
QList< QCPLayoutElement * > elements(QCP::MarginSide side) const
Definition: qcustomplot.h:1153
double bufferDevicePixelRatio() const
Definition: qcustomplot.h:3594
WidthType mWidthType
Definition: qcustomplot.h:5892
static const double maxRange
Definition: qcustomplot.h:806
bool isInvalidData(double value)
Definition: qcustomplot.h:301
ErrorType errorType() const
Definition: qcustomplot.h:5978
void clear()
const_iterator findBegin(double sortKey, bool expandedRange=true) const
Definition: qcustomplot.h:2868
QSharedPointer< QCPDataContainer< DataType > > mDataContainer
Definition: qcustomplot.h:3860
virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE=0
QCPColorGradient gradient() const
Definition: qcustomplot.h:5027
const_iterator findEnd(double sortKey, bool expandedRange=true) const
Definition: qcustomplot.h:2895
0x08 bottom margin
Definition: qcustomplot.h:196
bool clipToAxisRect() const
Definition: qcustomplot.h:3488
QPen selectedPen() const
Definition: qcustomplot.h:6205
QPen whiskerBarPen() const
Definition: qcustomplot.h:5588
QBrush brushNegative() const
Definition: qcustomplot.h:5859
QCPItemPosition *const end
Definition: qcustomplot.h:6170
QCPColorMapData * mMapData
Definition: qcustomplot.h:5754
QFont mSelectedFont
Definition: qcustomplot.h:4862
bool subGridVisible() const
Definition: qcustomplot.h:1853
QCPLayout * mParentLayout
Definition: qcustomplot.h:1236
virtual int calculateAutoMargin(QCP::MarginSide side) Q_DECL_OVERRIDE
QCPAxis * mParentAxis
Definition: qcustomplot.h:1875
void drawLine(const QPointF &p1, const QPointF &p2)
Definition: qcustomplot.h:488
The base class tick generator used by QCPAxis to create tick positions and tick labels.
Definition: qcustomplot.h:1511
virtual QCPDataSelection selectTestRect(const QRectF &rect, bool onlySelectable) const
Definition: qcustomplot.h:4180
PainterModes modes() const
Definition: qcustomplot.h:475
QCPRange dataRange() const
Definition: qcustomplot.h:5025
#define Q_DECL_OVERRIDE
Definition: qcustomplot.h:126
QPoint toPoint() const
Definition: qcustomplot.h:400
static QCPStatisticalBoxData fromSortKey(double sortKey)
Definition: qcustomplot.h:5536
The abstract base class for paint buffers, which define the rendering backend.
Definition: qcustomplot.h:512
QCPDataContainer< QCPStatisticalBoxData > QCPStatisticalBoxDataContainer
Definition: qcustomplot.h:5566
QCPGrid * mGrid
Definition: qcustomplot.h:2141
int padding() const
Definition: qcustomplot.h:2013
QCP::AntialiasedElements antialiasedElements() const
Definition: qcustomplot.h:3599
QCPDataSelection selection() const
Definition: qcustomplot.h:3285
QColor textColor() const
Definition: qcustomplot.h:4803
void set(const QCPDataContainer< DataType > &data)
Definition: qcustomplot.h:2602
QString text() const
Definition: qcustomplot.h:4913
double mainValue() const
Definition: qcustomplot.h:5417
Holds the data of one single data point for QCPCurve.
Definition: qcustomplot.h:5226
QCPRange keyRange() const
Definition: qcustomplot.h:5657
QList< QCPDataRange > dataRanges() const
Definition: qcustomplot.h:949
QCPLineEnding tail() const
Definition: qcustomplot.h:6156
bool mNumberBeautifulPowers
Definition: qcustomplot.h:2127
QCPItemAnchor *const center
Definition: qcustomplot.h:6384
A selection decorator which draws brackets around each selected data segment.
Definition: qcustomplot.h:4479
QCPRange valueRange() const
Definition: qcustomplot.h:5101
A legend item representing a plottable with an icon and the plottable name.
Definition: qcustomplot.h:4739
QHash< QCP::MarginSide, QCPMarginGroup * > mMarginGroups
Definition: qcustomplot.h:1241
QBrush selectedBrush() const
Definition: qcustomplot.h:6277
QCPItemPosition *const start
Definition: qcustomplot.h:6167
int numberPrecision() const
Definition: qcustomplot.h:1998
QFont font() const
Definition: qcustomplot.h:4802
QByteArray mLabelParameterHash
Definition: qcustomplot.h:2239
0x01 Mode for vectorized painting (e.g. PDF export). For example, this prevents some antialiasing fix...
Definition: qcustomplot.h:462
QBrush mSelectedBrush
Definition: qcustomplot.h:6541
void setY(double y)
Definition: qcustomplot.h:395
QBrush mBackgroundBrush
Definition: qcustomplot.h:4629
QCPAbstractPlottable * plottable()
Definition: qcustomplot.h:4746
bool contains(double value) const
Definition: qcustomplot.h:801
bool periodic() const
Definition: qcustomplot.h:4438
bool scaled() const
Definition: qcustomplot.h:6425
PositionType typeX() const
Definition: qcustomplot.h:3430
SelectionType
Definition: qcustomplot.h:288
virtual void wheelEvent(QWheelEvent *event)
Controls how a plottable&#39;s data selection is drawn.
Definition: qcustomplot.h:3209
QString text() const
Definition: qcustomplot.h:6280
int end() const
Definition: qcustomplot.h:898
int bottom() const
Definition: qcustomplot.h:4613
bool isActive() const
Definition: qcustomplot.h:1103
QColor textColor() const
Definition: qcustomplot.h:4916
bool isEmpty() const
Definition: qcustomplot.h:5376
QCPItemPosition *const topLeft
Definition: qcustomplot.h:6218
SelectableParts mSelectedParts
Definition: qcustomplot.h:2111
bool operator!=(const QCPDataRange &other) const
Definition: qcustomplot.h:894
QPen selectedBorderPen() const
Definition: qcustomplot.h:4809
The abstract base class for all entries in a QCPLegend.
Definition: qcustomplot.h:4675
QCPItemAnchor *const topRight
Definition: qcustomplot.h:6307
const QCPVector2D operator-(const QCPVector2D &vec1, const QCPVector2D &vec2)
Definition: qcustomplot.h:434
virtual QCPRange dataValueRange(int index) const
Definition: qcustomplot.h:4134
bool twoColored() const
Definition: qcustomplot.h:5857
bool mAntialiasedZeroLine
Definition: qcustomplot.h:1871
double graphKey() const
Definition: qcustomplot.h:6516
double mainKey() const
Definition: qcustomplot.h:5416
void setAutoSqueeze(bool enabled)
Definition: qcustomplot.h:2585
QColor mSelectedTextColor
Definition: qcustomplot.h:4951
double dot(const QCPVector2D &vec) const
Definition: qcustomplot.h:407
QCPAxisRect * mAxisRect
Definition: qcustomplot.h:2107
0x0001 Axis base line and tick marks
Definition: qcustomplot.h:211
int size() const
Definition: qcustomplot.h:2383
QCPAxis::AxisType mType
Definition: qcustomplot.h:5057
QPainterPath customPath() const
Definition: qcustomplot.h:2323
QCP::SelectionType selectable() const
Definition: qcustomplot.h:3283
0x0008 Legend box
Definition: qcustomplot.h:214
Responsible for drawing the grid of a QCPAxis.
Definition: qcustomplot.h:1838
Qt::Alignment positionAlignment() const
Definition: qcustomplot.h:6281
0x001 Axis ranges are draggable (see QCPAxisRect::setRangeDrag, QCPAxisRect::setRangeDragAxes) ...
Definition: qcustomplot.h:248
QCPItemAnchor * parentAnchor() const
Definition: qcustomplot.h:3432
0x00 no margin
Definition: qcustomplot.h:198
QVector< QString > tickLabels
Definition: qcustomplot.h:2224
Qt::AspectRatioMode backgroundScaledMode() const
Definition: qcustomplot.h:3597
virtual QCP::Interaction selectionCategory() const Q_DECL_OVERRIDE
QSize maximumSize() const
Definition: qcustomplot.h:1210
int mIconTextPadding
Definition: qcustomplot.h:4858
QCPDataRange dataRange() const
Definition: qcustomplot.h:2413
QCPLayer * mLayer
Definition: qcustomplot.h:730
bool visible() const
Definition: qcustomplot.h:704
const QCPRange range() const
Definition: qcustomplot.h:1987
Specialized axis ticker which allows arbitrary labels at specified coordinates.
Definition: qcustomplot.h:1707
QCPColorGradient mGradient
Definition: qcustomplot.h:5060
0x04 top margin
Definition: qcustomplot.h:195
Defines an abstract interface for one-dimensional plottables.
Definition: qcustomplot.h:3817
QFont font() const
Definition: qcustomplot.h:4915
ErrorType mErrorType
Definition: qcustomplot.h:6017
QSharedPointer< QCPStatisticalBoxDataContainer > data() const
Definition: qcustomplot.h:5584
The selection rect is disabled, and all mouse events are forwarded to the underlying objects...
Definition: qcustomplot.h:264
QCPColorMapData * data() const
Definition: qcustomplot.h:5719
bool noAntialiasingOnDrag() const
Definition: qcustomplot.h:3604
QRect axisSelectionBox() const
Definition: qcustomplot.h:2196
const_iterator constEnd() const
Definition: qcustomplot.h:2405
Provides rect/rubber-band data selection and range zoom interaction.
Definition: qcustomplot.h:1091
void setBegin(int begin)
Definition: qcustomplot.h:903
QColor color() const
Definition: qcustomplot.h:6272
QList< QCPItemPosition * > mPositions
Definition: qcustomplot.h:3517
QCP::PlottingHints plottingHints() const
Definition: qcustomplot.h:3605
QCustomPlot * mParentPlot
Definition: qcustomplot.h:3382
QCPLayer * layer() const
Definition: qcustomplot.h:707
voidpf uLong int origin
Definition: ioapi.h:42
QColor labelColor() const
Definition: qcustomplot.h:2010
An anchor of an item to which positions can be attached to.
Definition: qcustomplot.h:3366
ScaleStrategy mScaleStrategy
Definition: qcustomplot.h:1694
Qt::Orientations mRangeZoom
Definition: qcustomplot.h:4635
QBrush mSelectedBrush
Definition: qcustomplot.h:4861
void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE
QCPItemAnchor *const bottomLeftRim
Definition: qcustomplot.h:6382
int mSelectionTolerance
Definition: qcustomplot.h:3735
QBrush brush() const
Definition: qcustomplot.h:1102
QHash< QCP::MarginSide, QCPMarginGroup * > marginGroups() const
Definition: qcustomplot.h:1212
QCPScatterStyle mScatterStyle
Definition: qcustomplot.h:3241
QBrush selectedBrush() const
Definition: qcustomplot.h:6512
QCPAxis * keyAxis() const
Definition: qcustomplot.h:3438
double & ry()
Definition: qcustomplot.h:391
double width() const
Definition: qcustomplot.h:5585
SelectionRectMode
Definition: qcustomplot.h:264
0x0004 Sub grid lines
Definition: qcustomplot.h:213
QCache< QString, CachedLabel > mLabelCache
Definition: qcustomplot.h:2240
virtual int findBegin(double sortKey, bool expandedRange=true) const
Definition: qcustomplot.h:4229
QString dateTimeFormat() const
Definition: qcustomplot.h:1578
QCPItemPosition *const right
Definition: qcustomplot.h:6605
QCP::MarginSides autoMargins() const
Definition: qcustomplot.h:1208
QVector< double > subTickPositions
Definition: qcustomplot.h:2222
QCPRange valueRange() const
Definition: qcustomplot.h:5419
QCPLineEnding mTail
Definition: qcustomplot.h:6175
0x0002 Grid lines
Definition: qcustomplot.h:212
const_iterator constBegin() const
Definition: qcustomplot.h:2404
QCPLineEnding head() const
Definition: qcustomplot.h:6155
0x01 left margin
Definition: qcustomplot.h:193
QCPRange & operator*=(const double &value)
Definition: qcustomplot.h:782
virtual QCPItemPosition * toQCPItemPosition() Q_DECL_OVERRIDE
Definition: qcustomplot.h:3465
int rowSpacing() const
Definition: qcustomplot.h:1336
Base class for all drawable objects.
Definition: qcustomplot.h:689
static bool sortKeyIsMainKey()
Definition: qcustomplot.h:5790
QBrush mBrush
Definition: qcustomplot.h:4854
QPixmap mBackgroundPixmap
Definition: qcustomplot.h:3738
double logBase() const
Definition: qcustomplot.h:1811
double sortKey() const
Definition: qcustomplot.h:5412
QPen selectedBasePen() const
Definition: qcustomplot.h:2021
QSharedPointer< QCPAxisTicker > ticker() const
Definition: qcustomplot.h:1989
QCPRange valueRange() const
Definition: qcustomplot.h:5542
Specialized axis ticker suited for logarithmic axes.
Definition: qcustomplot.h:1805
QCPAxis::ScaleType dataScaleType() const
Definition: qcustomplot.h:5026
QBrush brushPositive() const
Definition: qcustomplot.h:5858
A plottable representing a bar chart in a plot.
Definition: qcustomplot.h:5437
const QCP::Interactions interactions() const
Definition: qcustomplot.h:3602
virtual QCPPlottableInterface1D * interface1D()
Definition: qcustomplot.h:3302
QFont mFont
Definition: qcustomplot.h:4855
QPen subTickPen() const
Definition: qcustomplot.h:2008
QFont font() const
Definition: qcustomplot.h:6278
QCPRange & operator+=(const double &value)
Definition: qcustomplot.h:780
QVector< double > mTickVector
Definition: qcustomplot.h:2144
0x080 All other objects are selectable (e.g. your own derived layerables, other layout elements...
Definition: qcustomplot.h:255
voidpf void uLong size
Definition: ioapi.h:39
double mStackingGap
Definition: qcustomplot.h:5503
A curved line from one point to another.
Definition: qcustomplot.h:6139
SpacingType mSpacingType
Definition: qcustomplot.h:5386
0x0080 Scatter symbols of plottables (excluding scatter symbols of type ssPixmap) ...
Definition: qcustomplot.h:218
double mSymbolGap
Definition: qcustomplot.h:6019
bool operator!=(const QCPRange &other) const
Definition: qcustomplot.h:778
QFont selectedTickLabelFont() const
Definition: qcustomplot.h:2017
QSize mIconSize
Definition: qcustomplot.h:4857
QPen mSubTickPen
Definition: qcustomplot.h:2134
virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos)
int valueSize() const
Definition: qcustomplot.h:5656
bool invalidated() const
Definition: qcustomplot.h:520
QPoint mDragStart
Definition: qcustomplot.h:4643
QPen selectedPen() const
Definition: qcustomplot.h:6510
bool mScaledPixmapInvalidated
Definition: qcustomplot.h:6456
virtual void deselectEvent(bool *selectionStateChanged) Q_DECL_OVERRIDE
QPen pen() const
Definition: qcustomplot.h:6153
QPointer< QCPBars > mBarBelow
Definition: qcustomplot.h:5504
QPixmap mScaledPixmap
Definition: qcustomplot.h:6454
QCustomPlot * mParentPlot
Definition: qcustomplot.h:5385
QList< QCPLayerable * > children() const
Definition: qcustomplot.h:652
double spacing() const
Definition: qcustomplot.h:5366
QRect mTextBoundingRect
Definition: qcustomplot.h:4952
bool interpolate() const
Definition: qcustomplot.h:5722
QCPScatterStyle mScatterStyle
Definition: qcustomplot.h:5307
QPen mIconBorderPen
Definition: qcustomplot.h:4853
TracerStyle mStyle
Definition: qcustomplot.h:6543
0x02 Mode for all sorts of exports (e.g. PNG, PDF,...). For example, this prevents using cached pixma...
Definition: qcustomplot.h:463
A layout that arranges child elements in a grid.
Definition: qcustomplot.h:1300
QVector< DataType >::iterator iterator
Definition: qcustomplot.h:2378
int pixelOrientation() const
Definition: qcustomplot.h:2079
int levelCount() const
Definition: qcustomplot.h:4435
QCPRange valueRange() const
Definition: qcustomplot.h:5795
QMargins margins() const
Definition: qcustomplot.h:1206
QPointer< QCPAbstractPlottable > mDataPlottable
Definition: qcustomplot.h:6016
double mainValue() const
Definition: qcustomplot.h:5099
double mBufferDevicePixelRatio
Definition: qcustomplot.h:3726
QPoint bottomLeft() const
Definition: qcustomplot.h:4619
QCPScatterStyle mOutlierStyle
Definition: qcustomplot.h:5621
double mSpacing
Definition: qcustomplot.h:5387
Multiple contiguous data points (a data range) can be selected.
Definition: qcustomplot.h:291
QList< QCPLayer * > mLayers
Definition: qcustomplot.h:3732
QBrush brush() const
Definition: qcustomplot.h:4801
QCP::AntialiasedElements mNotAntialiasedElements
Definition: qcustomplot.h:3733
TimeUnit mSmallestUnit
Definition: qcustomplot.h:1646
double mTickOrigin
Definition: qcustomplot.h:1547
QCPItemAnchor *const bottom
Definition: qcustomplot.h:6310
QRect rect() const
Definition: qcustomplot.h:1099
double y() const
Definition: qcustomplot.h:389
0x0040 Main lines of items
Definition: qcustomplot.h:217
QImage mUndersampledMapImage
Definition: qcustomplot.h:5761
Represents two doubles as a mathematical 2D vector.
Definition: qcustomplot.h:379
QCPVector2D perpendicular() const
Definition: qcustomplot.h:406
Holds the data of one single data point for QCPGraph.
Definition: qcustomplot.h:5088
bool mMouseHasMoved
Definition: qcustomplot.h:3752
double value() const
Definition: qcustomplot.h:3436
QCP::MarginSides mAutoMargins
Definition: qcustomplot.h:1240
The abstract base class for all data representing objects in a plot.
Definition: qcustomplot.h:3256
QColor textColor() const
Definition: qcustomplot.h:4693
FractionStyle mFractionStyle
Definition: qcustomplot.h:1780
EndingStyle mStyle
Definition: qcustomplot.h:1498
QCPScatterStyle outlierStyle() const
Definition: qcustomplot.h:5591
QVector< QString > tickVectorLabels() const
Definition: qcustomplot.h:2000
A plottable representing a single statistical box in a plot.
Definition: qcustomplot.h:5568
QColor tickLabelColor() const
Definition: qcustomplot.h:1994
Qt::Alignment textAlignment() const
Definition: qcustomplot.h:6282
QPen medianPen() const
Definition: qcustomplot.h:5590
QPointF coords() const
Definition: qcustomplot.h:3437
bool autoAddPlottableToLegend() const
Definition: qcustomplot.h:3601
BracketStyle bracketStyle() const
Definition: qcustomplot.h:4506
ExportPen
Definition: qcustomplot.h:172
QCPItemAnchor *const left
Definition: qcustomplot.h:6383
QPointer< QCPAxis > mValueAxis
Definition: qcustomplot.h:3330
double mGraphKey
Definition: qcustomplot.h:6545
double mWhiskerWidth
Definition: qcustomplot.h:6018
bool subTicks() const
Definition: qcustomplot.h:2003
QList< QCPBars * > bars() const
Definition: qcustomplot.h:5373
QList< QPointer< QCPAxis > > mRangeDragVertAxis
Definition: qcustomplot.h:4636
QCPDataRange adjusted(int changeBegin, int changeEnd) const
Definition: qcustomplot.h:912
QPen selectedTickPen() const
Definition: qcustomplot.h:2022
QPointer< QCPAxis > mColorAxis
Definition: qcustomplot.h:5065
0x008 Plottables are selectable (e.g. graphs, curves, bars,... see QCPAbstractPlottable) ...
Definition: qcustomplot.h:251
Q_SLOT void setSelectable(QCP::SelectionType selectable)
QCPItemAnchor * parentAnchorY() const
Definition: qcustomplot.h:3434
double mainKey() const
Definition: qcustomplot.h:5792
virtual QPointF dataPixelPosition(int index) const
Definition: qcustomplot.h:4150
QColor selectedColor() const
Definition: qcustomplot.h:6273
QCPItemPosition *const endDir
Definition: qcustomplot.h:6169
bool antialiasedSubGrid() const
Definition: qcustomplot.h:1854
QCPDataContainer< QCPCurveData > QCPCurveDataContainer
Definition: qcustomplot.h:5256
QVector< QCPErrorBarsData > QCPErrorBarsDataContainer
Definition: qcustomplot.h:5948
SignDomain
Definition: qcustomplot.h:183
QCPItemPosition *const bottomRight
Definition: qcustomplot.h:6375
virtual int findEnd(double sortKey, bool expandedRange=true) const
Definition: qcustomplot.h:4238
QColor selectedTextColor() const
Definition: qcustomplot.h:4813
double width() const
Definition: qcustomplot.h:1480
bool mInterpolate
Definition: qcustomplot.h:5756
QCPColorGradient mGradient
Definition: qcustomplot.h:5755
Q_DECLARE_TYPEINFO(QCPVector2D, Q_MOVABLE_TYPE)
bool antialiasedFill() const
Definition: qcustomplot.h:3277
QList< QPointer< QCPAxis > > mRangeZoomVertAxis
Definition: qcustomplot.h:4637
Qt::AspectRatioMode aspectRatioMode() const
Definition: qcustomplot.h:6426
double sortKey() const
Definition: qcustomplot.h:5788
#define QCP_LIB_DECL
Definition: qcustomplot.h:121
QCustomPlot * mParentPlot
Definition: qcustomplot.h:665
bool periodicity() const
Definition: qcustomplot.h:1766
int tickCount() const
Definition: qcustomplot.h:1532
QCPColorScale * colorScale() const
Definition: qcustomplot.h:5725
A plottable representing a graph in a plot.
Definition: qcustomplot.h:5119
QCPAbstractPlottable * mPlottable
Definition: qcustomplot.h:3244
QCPItemPosition *const start
Definition: qcustomplot.h:6117
int iconTextPadding() const
Definition: qcustomplot.h:4805
The abstract base class for all items in a plot.
Definition: qcustomplot.h:3474
QList< QRectF > mInsetRect
Definition: qcustomplot.h:1434
QString name() const
Definition: qcustomplot.h:650
QCPLayoutInset * mInsetLayout
Definition: qcustomplot.h:4634
double length() const
Definition: qcustomplot.h:6592
0x004 axis (tick) labels will be cached as pixmaps, increasing replot performance.
Definition: qcustomplot.h:237
QRect tickLabelsSelectionBox() const
Definition: qcustomplot.h:2197
Item that sticks to QCPGraph data points.
Definition: qcustomplot.h:6477
static QCPFinancialData fromSortKey(double sortKey)
Definition: qcustomplot.h:5789
double whiskerWidth() const
Definition: qcustomplot.h:5979
A layout element displaying a text.
Definition: qcustomplot.h:4893
QCPLegend * mParentLegend
Definition: qcustomplot.h:4716
virtual QCPRange getValueRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange()) const =0
QBrush brush() const
Definition: qcustomplot.h:6511
QFont mSelectedLabelFont
Definition: qcustomplot.h:2117
const QCPVector2D operator*(double factor, const QCPVector2D &vec)
Definition: qcustomplot.h:430
QCPItemAnchor *const right
Definition: qcustomplot.h:6222
bool mNoAntialiasingOnDrag
Definition: qcustomplot.h:3736
The central class of the library. This is the QWidget which displays the plot and interacts with the ...
Definition: qcustomplot.h:3551
int size() const
Definition: qcustomplot.h:5375
0x040 Items are selectable (Rectangles, Arrows, Textitems, etc. see QCPAbstractItem) ...
Definition: qcustomplot.h:254
int mScatterSkip
Definition: qcustomplot.h:5308
int columnSpacing() const
Definition: qcustomplot.h:1335
bool backgroundScaled() const
Definition: qcustomplot.h:4565
bool selectable() const
Definition: qcustomplot.h:3490
TickStepStrategy mTickStepStrategy
Definition: qcustomplot.h:1545
Manages a single axis inside a QCustomPlot.
Definition: qcustomplot.h:1889
QCPLineEnding tail() const
Definition: qcustomplot.h:6106
bool isEmpty() const
Definition: qcustomplot.h:955
QList< QCPItemAnchor * > anchors() const
Definition: qcustomplot.h:3504
QCPAxis::AxisType type() const
Definition: qcustomplot.h:5024
bool mSubTicks
Definition: qcustomplot.h:2131
QCPBarsGroup * barsGroup() const
Definition: qcustomplot.h:5468
bool isPenDefined() const
Definition: qcustomplot.h:2336
virtual QCPPlottableInterface1D * interface1D() Q_DECL_OVERRIDE
Definition: qcustomplot.h:6011
void drawLine(const QLineF &line)
QBrush brush() const
Definition: qcustomplot.h:2321
QCPScatterStyle scatterStyle() const
Definition: qcustomplot.h:5151
bool mIsAntialiasing
Definition: qcustomplot.h:498
double tickOrigin() const
Definition: qcustomplot.h:1533
static QCPBarsData fromSortKey(double sortKey)
Definition: qcustomplot.h:5413
QHash< TimeUnit, QString > mFormatPattern
Definition: qcustomplot.h:1647
QCPItemAnchor *const topRight
Definition: qcustomplot.h:6443
QCPColorScale * mParentColorScale
Definition: qcustomplot.h:4987
double rotation() const
Definition: qcustomplot.h:6283
QCPItemAnchor *const topLeftRim
Definition: qcustomplot.h:6376
QPen pen() const
Definition: qcustomplot.h:6103
Represents the visual appearance of scatter points.
Definition: qcustomplot.h:2258
int index() const
Definition: qcustomplot.h:651
bool isEmpty() const
Definition: qcustomplot.h:908
double mainKey() const
Definition: qcustomplot.h:5098
Manages a legend inside a QCustomPlot.
Definition: qcustomplot.h:4763
QList< QCPItemPosition * > positions() const
Definition: qcustomplot.h:3503
QList< QCPLayerable * > mChildren
Definition: qcustomplot.h:668
QSet< QCPItemPosition * > mChildrenY
Definition: qcustomplot.h:3385
QSharedPointer< QCPGraphDataContainer > data() const
Definition: qcustomplot.h:5149
QCPRange mDataRange
Definition: qcustomplot.h:5752
LayerMode mMode
Definition: qcustomplot.h:670
PositionType mPositionTypeY
Definition: qcustomplot.h:3458
QCPLayerable * parentLayerable() const
Definition: qcustomplot.h:706
QPointer< QCPColorScaleAxisRectPrivate > mAxisRect
Definition: qcustomplot.h:5064
QCPSelectionRect * mSelectionRect
Definition: qcustomplot.h:3746
Cosmetic pens are converted to pens with pixel width 1 when exporting.
Definition: qcustomplot.h:172
int columnCount() const
Definition: qcustomplot.h:1332
QPen selectedPen() const
Definition: qcustomplot.h:6591
Qt::AspectRatioMode mBackgroundScaledMode
Definition: qcustomplot.h:4633
When dragging the mouse, a selection rect becomes active. Upon releasing, the axes that are currently...
Definition: qcustomplot.h:265
0x0100 Borders of fills (e.g. under or between graphs)
Definition: qcustomplot.h:219
0x004 The user can select multiple objects by holding the modifier set by QCustomPlot::setMultiSelect...
Definition: qcustomplot.h:250
QList< double > rowStretchFactors() const
Definition: qcustomplot.h:1334
QCPItemAnchor *const bottomRight
Definition: qcustomplot.h:6309
QCPItemAnchor *const bottomLeft
Definition: qcustomplot.h:6446
virtual void update(UpdatePhase phase) Q_DECL_OVERRIDE
QPointer< QCPAxis > mValueAxis
Definition: qcustomplot.h:3459
int begin() const
Definition: qcustomplot.h:897
virtual QCPRange getKeyRange(bool &foundRange, QCP::SignDomain inSignDomain=QCP::sdBoth) const =0
The plottable is not selectable.
Definition: qcustomplot.h:288
QCPRange valueRange() const
Definition: qcustomplot.h:5658
QVector< double > mSubTickVector
Definition: qcustomplot.h:2146
QPen tickPen() const
Definition: qcustomplot.h:2007
QList< QCPBars * > mBars
Definition: qcustomplot.h:5388
bool isEmpty() const
Definition: qcustomplot.h:5681
QCPDataRange dataRange(int index=0) const
QPen pen() const
Definition: qcustomplot.h:6274
LayerMode mode() const
Definition: qcustomplot.h:654
QPointer< QCPLayerable > mMouseEventLayerable
Definition: qcustomplot.h:3753
int textFlags() const
Definition: qcustomplot.h:4914
double width() const
Definition: qcustomplot.h:5855
int height() const
Definition: qcustomplot.h:4615
int dataRangeCount() const
Definition: qcustomplot.h:946
QCPItemAnchor *const topRightRim
Definition: qcustomplot.h:6378
A layer that may contain objects, to control the rendering order.
Definition: qcustomplot.h:620
bool mTickLabels
Definition: qcustomplot.h:2121
Qt::Orientation orientation() const
Definition: qcustomplot.h:2078
QString label() const
Definition: qcustomplot.h:2011
A rectangle.
Definition: qcustomplot.h:6190
void setEnd(int end)
Definition: qcustomplot.h:904
QCPItemPosition *const position
Definition: qcustomplot.h:6536
Selection behaves like stMultipleDataRanges, but if there are any data points selected, the entire plottable is drawn as selected.
Definition: qcustomplot.h:289
bool interpolating() const
Definition: qcustomplot.h:6517
QSize size() const
Definition: qcustomplot.h:519
LineStyle mLineStyle
Definition: qcustomplot.h:5309
double mainKey() const
Definition: qcustomplot.h:5539
The abstract base class for all objects that form the layout system.
Definition: qcustomplot.h:1176
PlottingHint
Definition: qcustomplot.h:232
QPen pen() const
Definition: qcustomplot.h:1101
QCPRange mValueRange
Definition: qcustomplot.h:5688
const QCPVector2D operator/(const QCPVector2D &vec, double divisor)
Definition: qcustomplot.h:432
bool isEmpty() const
Definition: qcustomplot.h:2384
QVector< DataType > mData
Definition: qcustomplot.h:2421
QCPAxis * keyAxis() const
Definition: qcustomplot.h:3281
QString mName
Definition: qcustomplot.h:666
QBrush brush() const
Definition: qcustomplot.h:6276
bool selected() const
Definition: qcustomplot.h:4920
QList< InsetPlacement > mInsetPlacement
Definition: qcustomplot.h:1432
QPen selectedPen() const
Definition: qcustomplot.h:6104
QCPColorGradient gradient() const
Definition: qcustomplot.h:5724
int keySize() const
Definition: qcustomplot.h:5655
void setPen(const QPen &pen)
QCPLineEnding upperEnding
Definition: qcustomplot.h:2203
QMap< double, QString > & ticks()
Definition: qcustomplot.h:1713
QString mLabel
Definition: qcustomplot.h:2116
FillOrder mFillOrder
Definition: qcustomplot.h:1379
virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE
Qt::AspectRatioMode mAspectRatioMode
Definition: qcustomplot.h:6457
Cosmetic pens are exported normally (e.g. in PDF exports, cosmetic pens always appear as 1 pixel on s...
Definition: qcustomplot.h:173
bool selected() const
Definition: qcustomplot.h:3284
static QCPCurveData fromSortKey(double sortKey)
Definition: qcustomplot.h:5233
QBrush mSelectedBrush
Definition: qcustomplot.h:6320
QPen selectedIconBorderPen() const
Definition: qcustomplot.h:4810
bool operator!=(const QCPDataSelection &other) const
Definition: qcustomplot.h:931
Describes a data set by holding multiple QCPDataRange instances.
Definition: qcustomplot.h:924
QCPItemAnchor * parentAnchorX() const
Definition: qcustomplot.h:3433
double mRotation
Definition: qcustomplot.h:6325
QCPLayer * mCurrentLayer
Definition: qcustomplot.h:3742
virtual void donePainting()
Definition: qcustomplot.h:530
QPainterPath mCustomPath
Definition: qcustomplot.h:2349
WidthType mWidthType
Definition: qcustomplot.h:5500
A straight line that spans infinitely in both directions.
Definition: qcustomplot.h:6046
QCPBarsGroup * mBarsGroup
Definition: qcustomplot.h:5501
QCPItemAnchor *const left
Definition: qcustomplot.h:6312
double center() const
Definition: qcustomplot.h:792
bool mReplotting
Definition: qcustomplot.h:3755
bool operator==(const QCPDataRange &other) const
Definition: qcustomplot.h:893
QFont tickLabelFont() const
Definition: qcustomplot.h:1993
void preallocateGrow(int minimumPreallocSize)
Definition: qcustomplot.h:3150
Specialized axis ticker for calendar dates and times as axis ticks.
Definition: qcustomplot.h:1572
QCPSelectionDecorator * selectionDecorator() const
Definition: qcustomplot.h:3286
virtual void applyDefaultAntialiasingHint(QCPPainter *painter) const Q_DECL_OVERRIDE
Definition: qcustomplot.h:1248
PainterModes mModes
Definition: qcustomplot.h:497
const QMetaObject staticMetaObject
A layout that places child elements aligned to the border or arbitrarily positioned.
Definition: qcustomplot.h:1391
0x020 Legends are selectable (or their child items, see QCPLegend::setSelectableParts) ...
Definition: qcustomplot.h:253
void remove(double sortKeyFrom, double sortKeyTo)
Definition: qcustomplot.h:2759
Handles the different ending decorations for line-like items.
Definition: qcustomplot.h:1447
A color scale for use with color coding data such as QCPColorMap.
Definition: qcustomplot.h:5005
double length() const
Definition: qcustomplot.h:398
QPoint center() const
Definition: qcustomplot.h:4621
QPen pen() const
Definition: qcustomplot.h:6360
QPen mTickPen
Definition: qcustomplot.h:2133
QCP::PlottingHints mPlottingHints
Definition: qcustomplot.h:3743
BracketStyle mStyle
Definition: qcustomplot.h:6613
QCPAxis * valueAxis() const
Definition: qcustomplot.h:3439
QCPAbstractPlottable * dataPlottable() const
Definition: qcustomplot.h:5977
int mCachedMargin
Definition: qcustomplot.h:2148
bool selectable() const
Definition: qcustomplot.h:4919
virtual void mousePressEvent(QMouseEvent *event, const QVariant &details) Q_DECL_OVERRIDE
virtual QCPItemPosition * toQCPItemPosition()
Definition: qcustomplot.h:3388
QPointer< QCPAxisRect > mClipAxisRect
Definition: qcustomplot.h:3516
QVector< QString > mTickVectorLabels
Definition: qcustomplot.h:2145
int getMarginValue(const QMargins &margins, QCP::MarginSide side)
Definition: qcustomplot.h:342
virtual void drawLegendIcon(QCPPainter *painter, const QRectF &rect) const =0
Both sign domains, including zero, i.e. all numbers.
Definition: qcustomplot.h:184
QList< QCPAbstractPlottable * > mPlottables
Definition: qcustomplot.h:3729
QPen pen() const
Definition: qcustomplot.h:3279
QPainter subclass used internally.
Definition: qcustomplot.h:453
Qt::TransformationMode transformationMode() const
Definition: qcustomplot.h:6427
Qt::KeyboardModifier multiSelectModifier() const
Definition: qcustomplot.h:3606
int mScatterSkip
Definition: qcustomplot.h:5178
iterator end()
Definition: qcustomplot.h:2407
unsigned char * mAlpha
Definition: qcustomplot.h:5693
ScaleType mScaleType
Definition: qcustomplot.h:2138
bool selectable() const
Definition: qcustomplot.h:4696
QPixmap mLegendIcon
Definition: qcustomplot.h:5762
QMap< double, QString > mTicks
Definition: qcustomplot.h:1729
QCPScatterStyle scatterStyle() const
Definition: qcustomplot.h:5282
WidthType widthType() const
Definition: qcustomplot.h:5467
const QCPVector2D operator+(const QCPVector2D &vec1, const QCPVector2D &vec2)
Definition: qcustomplot.h:433
void coordsToPixels(double key, double value, double &x, double &y) const
QFont selectedLabelFont() const
Definition: qcustomplot.h:2018
static bool sortKeyIsMainKey()
Definition: qcustomplot.h:5234
Holds the data of one single data point (one bar) for QCPBars.
Definition: qcustomplot.h:5406
int left() const
Definition: qcustomplot.h:4610
bool mCachedMarginValid
Definition: qcustomplot.h:2147
QCPItemAnchor *const bottom
Definition: qcustomplot.h:6381
QPixmap mPixmap
Definition: qcustomplot.h:6453
virtual bool sortKeyIsMainKey() const
Definition: qcustomplot.h:4167
QCPSelectionDecorator * mSelectionDecorator
Definition: qcustomplot.h:3333
QCPScatterStyle::ScatterProperties usedScatterProperties() const
Definition: qcustomplot.h:3220
QColor mSelectedColor
Definition: qcustomplot.h:6318
QPen mSelectedBasePen
Definition: qcustomplot.h:2112
QCPLineEnding head() const
Definition: qcustomplot.h:6105
void normalize()
Definition: qcustomplot.h:793
virtual double selectTest(const QPointF &pos, bool onlySelectable, QVariant *details=0) const
Definition: qcustomplot.h:4251
int mPadding
Definition: qcustomplot.h:2109
SelectableParts mSelectedParts
Definition: qcustomplot.h:4859
virtual QCPPlottableInterface1D * interface1D()
Definition: qcustomplot.h:3856
QCPAxis * yAxis2
Definition: qcustomplot.h:3700
QVector< QRgb > mColorBuffer
Definition: qcustomplot.h:4463
QCPAxisRect * axisRect() const
Definition: qcustomplot.h:1985
QCPAbstractItem * mParentItem
Definition: qcustomplot.h:3383
double lengthSquared() const
Definition: qcustomplot.h:399
QCP::SelectionRectMode mSelectionRectMode
Definition: qcustomplot.h:3745
iterator begin()
Definition: qcustomplot.h:2406
int selectionTolerance() const
Definition: qcustomplot.h:3603
LineStyle lineStyle() const
Definition: qcustomplot.h:5284
QMargins minimumMargins() const
Definition: qcustomplot.h:1207
When dragging the mouse, a selection rect becomes active. It is the programmer&#39;s responsibility to co...
Definition: qcustomplot.h:267
Qt::TimeSpec mDateTimeSpec
Definition: qcustomplot.h:1595
QCPRange & operator/=(const double &value)
Definition: qcustomplot.h:783
QBrush mSelectedBrush
Definition: qcustomplot.h:6391
Qt::Orientation mOrientation
Definition: qcustomplot.h:2110
0x01 The pen property, see setPen
Definition: qcustomplot.h:2271
QRect labelSelectionBox() const
Definition: qcustomplot.h:2198
static const double minRange
Definition: qcustomplot.h:805
bool backgroundScaled() const
Definition: qcustomplot.h:3596
QCPDataContainer< QCPBarsData > QCPBarsDataContainer
Definition: qcustomplot.h:5435
bool autoSqueeze() const
Definition: qcustomplot.h:2385
QCPRange valueRange() const
Definition: qcustomplot.h:5239
QCPGraph * graph() const
Definition: qcustomplot.h:6515
QCPAxis::AxisType type
Definition: qcustomplot.h:2201
bool isNone() const
Definition: qcustomplot.h:2335
QCPItemAnchor *const bottom
Definition: qcustomplot.h:6445
0x0020 Main lines of plottables
Definition: qcustomplot.h:216
double mainValue() const
Definition: qcustomplot.h:5540
QBrush bracketBrush() const
Definition: qcustomplot.h:4503
QBrush selectedBrush() const
Definition: qcustomplot.h:6363
Qt::Orientations rangeZoom() const
Definition: qcustomplot.h:4568
Interaction
Definition: qcustomplot.h:248
virtual void selectEvent(QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged) Q_DECL_OVERRIDE
QFont selectedFont() const
Definition: qcustomplot.h:6279
QVector< DataType >::const_iterator const_iterator
Definition: qcustomplot.h:2377
QCPBars * barBelow() const
Definition: qcustomplot.h:5471
bool rangeReversed() const
Definition: qcustomplot.h:1988
QColor selectedTextColor() const
Definition: qcustomplot.h:4918
QCPItemAnchor *const center
Definition: qcustomplot.h:6606
int top() const
Definition: qcustomplot.h:4612
QPen mSelectedPen
Definition: qcustomplot.h:6122
QPen selectedPen() const
Definition: qcustomplot.h:6059
0x000 No hints are set
Definition: qcustomplot.h:232
QBrush mBrushPositive
Definition: qcustomplot.h:5894
static QCPGraphData fromSortKey(double sortKey)
Definition: qcustomplot.h:5095
double & rx()
Definition: qcustomplot.h:390
int scatterSkip() const
Definition: qcustomplot.h:5283
QFont labelFont() const
Definition: qcustomplot.h:2009
bool inverted() const
Definition: qcustomplot.h:1482
QBrush backgroundBrush() const
Definition: qcustomplot.h:4564
A plottable representing a parametric curve in a plot.
Definition: qcustomplot.h:5258
QCPItemPosition *const topLeft
Definition: qcustomplot.h:6440
QCPItemAnchor *const bottom
Definition: qcustomplot.h:6223
bool mAutoAddPlottableToLegend
Definition: qcustomplot.h:3728
QList< Qt::Alignment > mInsetAlignment
Definition: qcustomplot.h:1433
QSharedPointer< QCPBarsDataContainer > data() const
Definition: qcustomplot.h:5473
QCustomPlot * parentPlot() const
Definition: qcustomplot.h:705
Specialized axis ticker to display ticks in units of an arbitrary constant, for example pi...
Definition: qcustomplot.h:1746
QVector< double > tickVector() const
Definition: qcustomplot.h:1999
QPen pen() const
Definition: qcustomplot.h:1856
const_iterator at(int index) const
Definition: qcustomplot.h:2410
0x0000 No elements
Definition: qcustomplot.h:223
QList< double > mColumnStretchFactors
Definition: qcustomplot.h:1375
bool mMapImageInvalidated
Definition: qcustomplot.h:5763
BracketStyle style() const
Definition: qcustomplot.h:6593
QCPItemAnchor *const top
Definition: qcustomplot.h:6306
0x02 right margin
Definition: qcustomplot.h:194
QCPItemAnchor *const bottomRightRim
Definition: qcustomplot.h:6380
SelectableParts selectedParts() const
Definition: qcustomplot.h:2015
friend class QCPAxisRect
Definition: qcustomplot.h:760
QCPRange keyRange(bool &foundRange, QCP::SignDomain signDomain=QCP::sdBoth)
Definition: qcustomplot.h:2922
QPointer< QCPColorScale > mColorScale
Definition: qcustomplot.h:5758
QCPScatterStyle scatterStyle() const
Definition: qcustomplot.h:3219
bool selected() const
Definition: qcustomplot.h:3491
virtual void mouseMoveEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE
QColor mTextColor
Definition: qcustomplot.h:4856
QCPLineEnding mTail
Definition: qcustomplot.h:6123
QCPLayoutInset * insetLayout() const
Definition: qcustomplot.h:4600
QCPRange mDataRange
Definition: qcustomplot.h:5058
QCPAbstractPlottable1D(QCPAxis *keyAxis, QCPAxis *valueAxis)
Definition: qcustomplot.h:4062
static bool sortKeyIsMainKey()
Definition: qcustomplot.h:5096
QCPLegend * parentLegend() const
Definition: qcustomplot.h:4691
QString name() const
Definition: qcustomplot.h:3276
An ellipse.
Definition: qcustomplot.h:6346
int mNumberPrecision
Definition: qcustomplot.h:2125
QColor selectedTickLabelColor() const
Definition: qcustomplot.h:2019
QMap< double, QColor > mColorStops
Definition: qcustomplot.h:4458
QStack< bool > mAntialiasingStack
Definition: qcustomplot.h:501
FillOrder fillOrder() const
Definition: qcustomplot.h:1338
QPoint topLeft() const
Definition: qcustomplot.h:4617
QSize iconSize() const
Definition: qcustomplot.h:4804
QPen selectedPen() const
Definition: qcustomplot.h:6154
int wrap() const
Definition: qcustomplot.h:1337
QCPItemPosition *const point1
Definition: qcustomplot.h:6068
int mIndex
Definition: qcustomplot.h:667
QPen selectedPen() const
Definition: qcustomplot.h:6429
bool mSubGridVisible
Definition: qcustomplot.h:1870
QCPAxis::ScaleType mDataScaleType
Definition: qcustomplot.h:5753
Describes a data range given by begin and end index.
Definition: qcustomplot.h:887
QCP::SelectionType mSelectable
Definition: qcustomplot.h:3331
QPixmap pixmap() const
Definition: qcustomplot.h:2322
QCPAxis::ScaleType mDataScaleType
Definition: qcustomplot.h:5059
QCPItemAnchor *const bottomLeft
Definition: qcustomplot.h:6311
int subTickCount() const
Definition: qcustomplot.h:1714
LineStyle lineStyle() const
Definition: qcustomplot.h:5150
QWeakPointer< QCPAbstractPaintBuffer > mPaintBuffer
Definition: qcustomplot.h:673
QBrush selectedBrush() const
Definition: qcustomplot.h:6207
QSharedPointer< QCPErrorBarsDataContainer > mDataContainer
Definition: qcustomplot.h:6015
QPen pen() const
Definition: qcustomplot.h:6428
bool mBackgroundScaled
Definition: qcustomplot.h:3740
QRect rect() const
Definition: qcustomplot.h:1204
QHash< QCPAxis::AxisType, QList< QCPAxis * > > mAxes
Definition: qcustomplot.h:4645
QString name() const
Definition: qcustomplot.h:3374
QCPItemAnchor *const right
Definition: qcustomplot.h:6308
QPen selectedPen() const
Definition: qcustomplot.h:6361
QBrush mSelectedBrush
Definition: qcustomplot.h:6232
QPen selectedSubTickPen() const
Definition: qcustomplot.h:2023
ChartStyle chartStyle() const
Definition: qcustomplot.h:5854
int fieldWidth(TimeUnit unit) const
Definition: qcustomplot.h:1634
QCPDataSelection mSelection
Definition: qcustomplot.h:3332
bool visible() const
Definition: qcustomplot.h:653
QCPItemPosition *const startDir
Definition: qcustomplot.h:6168
virtual QRect clipRect() const Q_DECL_OVERRIDE
QCPSelectionRect * selectionRect() const
Definition: qcustomplot.h:3608
bool isValid() const
Definition: qcustomplot.h:907
bool mAntialiased
Definition: qcustomplot.h:731
QPen pen() const
Definition: qcustomplot.h:2320
The generic data container for one-dimensional plottables.
Definition: qcustomplot.h:2374
void add(const QCPDataContainer< DataType > &data)
Definition: qcustomplot.h:2634
QCPRange valueRange(bool &foundRange, QCP::SignDomain signDomain=QCP::sdBoth, const QCPRange &inKeyRange=QCPRange())
Definition: qcustomplot.h:3045
QColor selectedLabelColor() const
Definition: qcustomplot.h:2020
int subTickCount() const
Definition: qcustomplot.h:1812
QPen whiskerPen() const
Definition: qcustomplot.h:5587
virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos)
Holds the two-dimensional data of a QCPColorMap plottable.
Definition: qcustomplot.h:5646
QList< QCPAbstractItem * > mItems
Definition: qcustomplot.h:3731
PositionType typeY() const
Definition: qcustomplot.h:3431
0x002 Axis ranges are zoomable with the mouse wheel (see QCPAxisRect::setRangeZoom, QCPAxisRect::setRangeZoomAxes)
Definition: qcustomplot.h:249
QPen selectedPen() const
Definition: qcustomplot.h:6275
QCPItemAnchor *const top
Definition: qcustomplot.h:6377
void addDataRange(const QCPDataRange &dataRange, bool simplify=true)
double mRangeZoomFactorVert
Definition: qcustomplot.h:4638
double size() const
Definition: qcustomplot.h:6513
A plottable representing a financial stock chart.
Definition: qcustomplot.h:5813
FractionStyle fractionStyle() const
Definition: qcustomplot.h:1767
void squeeze(bool preAllocation=true, bool postAllocation=true)
Definition: qcustomplot.h:2836
TracerStyle style() const
Definition: qcustomplot.h:6514
0x0010 Legend items
Definition: qcustomplot.h:215
QBrush selectedBrush() const
Definition: qcustomplot.h:4811
QBrush brush() const
Definition: qcustomplot.h:3218
int barWidth() const
Definition: qcustomplot.h:5029
void setMarginValue(QMargins &margins, QCP::MarginSide side, int value)
Definition: qcustomplot.h:322
void drawPolyline(QCPPainter *painter, const QVector< QPointF > &lineData) const
Definition: qcustomplot.h:4343
QCPAxisPainterPrivate * mAxisPainter
Definition: qcustomplot.h:2142
The abstract base class for layouts.
Definition: qcustomplot.h:1262
Holds the data of one single data point for QCPFinancial.
Definition: qcustomplot.h:5782
A text label.
Definition: qcustomplot.h:6249
QBrush mBackgroundBrush
Definition: qcustomplot.h:3737
QCPAxis * axis() const
Definition: qcustomplot.h:5023
QPen mSelectedIconBorderPen
Definition: qcustomplot.h:4860
QCPItemPosition *const bottomRight
Definition: qcustomplot.h:6441
Any combination of data points/ranges can be selected.
Definition: qcustomplot.h:292
void setBrush(const QBrush &brush)
double sortKey() const
Definition: qcustomplot.h:5232
Resolution is given in dots per centimeter (dpcm)
Definition: qcustomplot.h:163
bool mOpenGlCacheLabelsBackup
Definition: qcustomplot.h:3759
virtual int elementCount() const Q_DECL_OVERRIDE
Definition: qcustomplot.h:1352
const char int mode
Definition: ioapi.h:38
QCPItemAnchor *const left
Definition: qcustomplot.h:6225
QCPAbstractPlottable * mPlottable
Definition: qcustomplot.h:4750
virtual void mouseReleaseEvent(QMouseEvent *event, const QPointF &startPos) Q_DECL_OVERRIDE
ColorInterpolation mColorInterpolation
Definition: qcustomplot.h:4459
void removeAfter(double sortKey)
Definition: qcustomplot.h:2742
void performAutoSqueeze()
Definition: qcustomplot.h:3180
QCPBars * barAbove() const
Definition: qcustomplot.h:5472
QPen penNegative() const
Definition: qcustomplot.h:5861
QSize size() const
Definition: qcustomplot.h:4616
QCPItemAnchor *const bottomLeft
Definition: qcustomplot.h:6224
double sortKey() const
Definition: qcustomplot.h:5094
QPen subGridPen() const
Definition: qcustomplot.h:1857
double x() const
Definition: qcustomplot.h:388
A plottable representing a two-dimensional color map in a plot.
Definition: qcustomplot.h:5703
bool mAdaptiveSampling
Definition: qcustomplot.h:5180
void removeBefore(double sortKey)
Definition: qcustomplot.h:2727
QHash< QCP::MarginSide, QList< QCPLayoutElement * > > mChildren
Definition: qcustomplot.h:1160
QCPAxis * valueAxis() const
Definition: qcustomplot.h:3282
QColor mTickLabelColor
Definition: qcustomplot.h:2124
bool mVisible
Definition: qcustomplot.h:669
QCPItemPosition *const position
Definition: qcustomplot.h:6304
double stackingGap() const
Definition: qcustomplot.h:5470
virtual void mousePressEvent(QMouseEvent *event, const QVariant &details)
virtual ~QCPAbstractPlottable1D()
Definition: qcustomplot.h:4069
QCPAxis::LabelSide tickLabelSide
Definition: qcustomplot.h:2210
The positive sign domain, i.e. numbers greater than zero.
Definition: qcustomplot.h:185
static bool sortKeyIsMainKey()
Definition: qcustomplot.h:5537
QPointer< QCPLayerable > mParentLayerable
Definition: qcustomplot.h:729
int scatterSkip() const
Definition: qcustomplot.h:5152
QCPItemAnchor *const topLeft
Definition: qcustomplot.h:6305
QPen mZeroLinePen
Definition: qcustomplot.h:1872
QPoint mMousePressPos
Definition: qcustomplot.h:3751
bool isNull() const
Definition: qcustomplot.h:403
bool ticks() const
Definition: qcustomplot.h:1990
QCPItemAnchor *const right
Definition: qcustomplot.h:6379
WidthType widthType() const
Definition: qcustomplot.h:5856
ChartStyle mChartStyle
Definition: qcustomplot.h:5890
QList< double > mRowStretchFactors
Definition: qcustomplot.h:1376
QRect mViewport
Definition: qcustomplot.h:3725
QPixmap mScaledBackgroundPixmap
Definition: qcustomplot.h:4631
When dragging the mouse, a selection rect becomes active. Upon releasing, plottable data points that ...
Definition: qcustomplot.h:266
double key() const
Definition: qcustomplot.h:3435
The negative sign domain, i.e. numbers smaller than zero.
Definition: qcustomplot.h:183
QRect outerRect() const
Definition: qcustomplot.h:1205
virtual void mouseDoubleClickEvent(QMouseEvent *event, const QVariant &details)
QPoint bottomRight() const
Definition: qcustomplot.h:4620
double value
Definition: qcustomplot.h:5421
QPointer< QCPAxisRect > mAxisRect
Definition: qcustomplot.h:3460
QList< QCPLayoutElement * > mElements
Definition: qcustomplot.h:1431
Qt::TransformationMode mTransformationMode
Definition: qcustomplot.h:6458
Qt::TimeSpec dateTimeSpec() const
Definition: qcustomplot.h:1579
double baseValue() const
Definition: qcustomplot.h:5469
QPen pen() const
Definition: qcustomplot.h:6058
QFont mTickLabelFont
Definition: qcustomplot.h:2123
QPoint topRight() const
Definition: qcustomplot.h:4618
QVector< double > tickPositions
Definition: qcustomplot.h:2223
static bool sortKeyIsMainKey()
Definition: qcustomplot.h:5414
void selectionChanged(bool selected)
QHash< TimeUnit, int > mFieldWidth
Definition: qcustomplot.h:1643
QFont selectedFont() const
Definition: qcustomplot.h:4812
QPen pen() const
Definition: qcustomplot.h:6204
QCPDataSelection inverse(const QCPDataRange &outerRange) const
void expand(const QCPRange &otherRange)
QCPRange dataBounds() const
Definition: qcustomplot.h:5659
int size() const
Definition: qcustomplot.h:899
A line from one point to another.
Definition: qcustomplot.h:6089
Holds the data of one single data point for QCPStatisticalBox.
Definition: qcustomplot.h:5529
bool mReplotQueued
Definition: qcustomplot.h:3756
double sortKey() const
Definition: qcustomplot.h:5535
int length() const
Definition: qcustomplot.h:900
A paint buffer based on QPixmap, using software raster rendering.
Definition: qcustomplot.h:547
QColor mSelectedTextColor
Definition: qcustomplot.h:4863
bool contains(QCPBars *bars) const
Definition: qcustomplot.h:5378
bool whiskerAntialiased() const
Definition: qcustomplot.h:5589
SelectableParts selectableParts() const
Definition: qcustomplot.h:2016
QCPItemPosition *const point2
Definition: qcustomplot.h:6069
QVariant mMouseEventLayerableDetails
Definition: qcustomplot.h:3754
QMargins mPadding
Definition: qcustomplot.h:6326
QCPRange mDataBounds
Definition: qcustomplot.h:5694
double length() const
Definition: qcustomplot.h:1481
QCPItemAnchor * mParentAnchorY
Definition: qcustomplot.h:3462
double whiskerWidth() const
Definition: qcustomplot.h:5586
0x0200 Zero-lines, see QCPGrid::setZeroLinePen
Definition: qcustomplot.h:220
void limitIteratorsToDataRange(const_iterator &begin, const_iterator &end, const QCPDataRange &dataRange) const
Definition: qcustomplot.h:3132
int mOpenGlMultisamples
Definition: qcustomplot.h:3757
QString mText
Definition: qcustomplot.h:6322
bool antialiasedScatters() const
Definition: qcustomplot.h:3278
Manages the position of an item.
Definition: qcustomplot.h:3404
QList< QCPRange > mDragStartVertRange
Definition: qcustomplot.h:4641
ResolutionUnit
Definition: qcustomplot.h:162
bool antialiased() const
Definition: qcustomplot.h:708
QPen iconBorderPen() const
Definition: qcustomplot.h:4806
QCPItemPosition *const end
Definition: qcustomplot.h:6118
QCPAxis::ScaleType dataScaleType() const
Definition: qcustomplot.h:5721
bool tightBoundary() const
Definition: qcustomplot.h:5723
void getDataSegments(QList< QCPDataRange > &selectedSegments, QList< QCPDataRange > &unselectedSegments) const
Definition: qcustomplot.h:4313
QCPDataContainer< QCPFinancialData > QCPFinancialDataContainer
Definition: qcustomplot.h:5811
QPixmap mBackgroundPixmap
Definition: qcustomplot.h:4630
double mainKey() const
Definition: qcustomplot.h:5236
QFont mSelectedFont
Definition: qcustomplot.h:6321
Defines a color gradient for use with e.g. QCPColorMap.
Definition: qcustomplot.h:4396
QPixmap background() const
Definition: qcustomplot.h:3595
QList< double > columnStretchFactors() const
Definition: qcustomplot.h:1333
QCPGrid * grid() const
Definition: qcustomplot.h:2026
double upper
Definition: qcustomplot.h:772
Resolution is given in dots per inch (DPI/PPI)
Definition: qcustomplot.h:164
QCPMarginGroup * marginGroup(QCP::MarginSide side) const
Definition: qcustomplot.h:1211
static Qt::Orientation orientation(AxisType type)
Definition: qcustomplot.h:2093
QPixmap mScaledBackgroundPixmap
Definition: qcustomplot.h:3739
voidpf uLong offset
Definition: ioapi.h:42
QMap< double, QColor > colorStops() const
Definition: qcustomplot.h:4436
QMargins mMinimumMargins
Definition: qcustomplot.h:1239
virtual void parentPlotInitialized(QCustomPlot *parentPlot)
Represents the range an axis is encompassing.
Definition: qcustomplot.h:769
0x8000 Other elements that don&#39;t fit into any of the existing categories
Definition: qcustomplot.h:221
double mainValue() const
Definition: qcustomplot.h:5237
QCPRange dataRange() const
Definition: qcustomplot.h:5720
bool tickLabels() const
Definition: qcustomplot.h:1991
QCPLayoutGrid * mPlotLayout
Definition: qcustomplot.h:3727
QList< QCPItemAnchor * > mAnchors
Definition: qcustomplot.h:3518
QCPScatterStyle mScatterStyle
Definition: qcustomplot.h:5177
Groups multiple QCPBars together so they appear side by side.
Definition: qcustomplot.h:5341
QPixmap background() const
Definition: qcustomplot.h:4563
ColorInterpolation colorInterpolation() const
Definition: qcustomplot.h:4437
0x010 Axes are selectable (or parts of them, see QCPAxis::setSelectableParts)
Definition: qcustomplot.h:252
double lower
Definition: qcustomplot.h:772
bool adaptiveSampling() const
Definition: qcustomplot.h:5154
QSize minimumSize() const
Definition: qcustomplot.h:1209
QFont font() const
Definition: qcustomplot.h:4692
Qt::Orientations rangeDrag() const
Definition: qcustomplot.h:4567
virtual int dataCount() const
Definition: qcustomplot.h:4077
A template base class for plottables with one-dimensional data.
Definition: qcustomplot.h:3834
ScaleType scaleType() const
Definition: qcustomplot.h:1986
ScatterShape mShape
Definition: qcustomplot.h:2345
Resolution is given in dots per meter (dpm)
Definition: qcustomplot.h:162
void pixelsToCoords(double x, double y, double &key, double &value) const
QCPItemPosition *const topLeft
Definition: qcustomplot.h:6374
SelectableParts selectableParts() const
Definition: qcustomplot.h:4807
0xFF all margins
Definition: qcustomplot.h:197
QPixmap pixmap() const
Definition: qcustomplot.h:6424
bool antialiasedZeroLine() const
Definition: qcustomplot.h:1855
bool mTightBoundary
Definition: qcustomplot.h:5757
friend class QCPPlottableLegendItem
Definition: qcustomplot.h:3356
virtual double dataMainValue(int index) const
Definition: qcustomplot.h:4118
QCP::SelectionRectMode selectionRectMode() const
Definition: qcustomplot.h:3607
double piValue() const
Definition: qcustomplot.h:1765
bool mRangeReversed
Definition: qcustomplot.h:2137
QCPItemAnchor *const top
Definition: qcustomplot.h:6442
Qt::Alignment mPositionAlignment
Definition: qcustomplot.h:6323
QPen zeroLinePen() const
Definition: qcustomplot.h:1858
double symbolGap() const
Definition: qcustomplot.h:5980
Holds multiple axes and arranges them in a rectangular shape.
Definition: qcustomplot.h:4548
virtual void draw(QCPPainter *painter) Q_DECL_OVERRIDE
Definition: qcustomplot.h:1249
Qt::AspectRatioMode backgroundScaledMode() const
Definition: qcustomplot.h:4566
QCPDataRange bounded(const QCPDataRange &other) const
QCPItemAnchor *const left
Definition: qcustomplot.h:6447
QBrush brush() const
Definition: qcustomplot.h:6362
Whether to use immediate or queued refresh depends on whether the plotting hint QCP::phImmediateRefre...
Definition: qcustomplot.h:3584
int width() const
Definition: qcustomplot.h:4614
Specialized axis ticker with a fixed tick step.
Definition: qcustomplot.h:1665
A plottable that adds a set of error bars to other plottables.
Definition: qcustomplot.h:5950
Specialized axis ticker for time spans in units of milliseconds to days.
Definition: qcustomplot.h:1613
QCPRange mRange
Definition: qcustomplot.h:2136
QCPScatterStyle::ScatterProperties mUsedScatterProperties
Definition: qcustomplot.h:3242
double mBaseValue
Definition: qcustomplot.h:5502
QBrush brush() const
Definition: qcustomplot.h:6206
Qt::KeyboardModifier mMultiSelectModifier
Definition: qcustomplot.h:3744
QFont selectedFont() const
Definition: qcustomplot.h:4694
QCPLegend * legend
Definition: qcustomplot.h:3701
QCP::AntialiasedElements notAntialiasedElements() const
Definition: qcustomplot.h:3600
QCPItemAnchor *const top
Definition: qcustomplot.h:6220
AxisType mAxisType
Definition: qcustomplot.h:2106
void setX(double x)
Definition: qcustomplot.h:394
QVector< double > outliers
Definition: qcustomplot.h:5551
LineStyle mLineStyle
Definition: qcustomplot.h:5176
QCPRange & operator-=(const double &value)
Definition: qcustomplot.h:781
QCP::Interactions mInteractions
Definition: qcustomplot.h:3734
QCPGraph * mGraph
Definition: qcustomplot.h:6544
QCPItemAnchor *const topRight
Definition: qcustomplot.h:6221
MarginSide
Definition: qcustomplot.h:193
Qt::Alignment mTextAlignment
Definition: qcustomplot.h:6324
QCPDataContainer< QCPGraphData > QCPGraphDataContainer
Definition: qcustomplot.h:5117
QLatin1Char mNumberFormatChar
Definition: qcustomplot.h:2126
bool mBackgroundScaled
Definition: qcustomplot.h:4632
QCP::AntialiasedElements mOpenGlAntialiasedElementsBackup
Definition: qcustomplot.h:3758
QBrush brush() const
Definition: qcustomplot.h:3280
AntialiasedElement
Definition: qcustomplot.h:211
QFont selectedFont() const
Definition: qcustomplot.h:4917
QCPItemPosition *const left
Definition: qcustomplot.h:6604
bool mColorBufferInvalidated
Definition: qcustomplot.h:4464
QCustomPlot * mParentPlot
Definition: qcustomplot.h:2238
QSharedPointer< QCPAxisTicker > mTicker
Definition: qcustomplot.h:2143
QPointer< QCPGraph > mChannelFillGraph
Definition: qcustomplot.h:5179
void selectableChanged(QCP::SelectionType selectable)
QPointF toPointF() const
Definition: qcustomplot.h:401
double mWidth
Definition: qcustomplot.h:5499
QPen mSelectedPen
Definition: qcustomplot.h:6319
QCustomPlot * mParentPlot
Definition: qcustomplot.h:728
ScatterShape shape() const
Definition: qcustomplot.h:2319
virtual double dataSortKey(int index) const
Definition: qcustomplot.h:4102
QCPItemPosition *const bottomRight
Definition: qcustomplot.h:6219
QCPItemAnchor *const right
Definition: qcustomplot.h:6444
QPen penPositive() const
Definition: qcustomplot.h:5860
QCPGraph * channelFillGraph() const
Definition: qcustomplot.h:5153
Qt::AspectRatioMode mBackgroundScaledMode
Definition: qcustomplot.h:3741
ScaleStrategy scaleStrategy() const
Definition: qcustomplot.h:1685
QColor selectedTextColor() const
Definition: qcustomplot.h:4695
bool selected() const
Definition: qcustomplot.h:4697
double mainValue() const
Definition: qcustomplot.h:5793
int right() const
Definition: qcustomplot.h:4611
QColor mSelectedLabelColor
Definition: qcustomplot.h:2118
bool mTicks
Definition: qcustomplot.h:2130