diff --git a/doc/dox/whatsnew.dox b/doc/dox/whatsnew.dox index 017226cc22..a26ec32eb7 100644 --- a/doc/dox/whatsnew.dox +++ b/doc/dox/whatsnew.dox @@ -28,6 +28,7 @@ Changes, compared to \ref page_whatsnew_V2019_11 "v2019.11" include:
  • improved/breaking change: reworked class hierarchy of parsed function plots and declared several setters as slots.
  • improved/breaking change: reworked class hierarchy of bar & impulse charts.
  • improved/breaking change: reworked class hierarchy of range charts.
  • +
  • improved/breaking change: reworked class hierarchy of special line (step) graphs.
  • improved/breaking change: reworked graph Base-Classes (promoted several setters to slots, added Q_PROPERTY- and Q_ENUM-declarations...)
  • improved/breaking change: made more functions and function parameters const
  • bugfixed/improved: aspect ratio handling in JKQTPlotter.
  • diff --git a/lib/jkqtplotter/graphs/jkqtpspecialline.cpp b/lib/jkqtplotter/graphs/jkqtpspecialline.cpp index 35a621d1a2..c02a0b592c 100644 --- a/lib/jkqtplotter/graphs/jkqtpspecialline.cpp +++ b/lib/jkqtplotter/graphs/jkqtpspecialline.cpp @@ -34,14 +34,9 @@ - - -JKQTPSpecialLineHorizontalGraph::JKQTPSpecialLineHorizontalGraph(JKQTBasePlotter* parent): - JKQTPXYBaselineGraph(parent) +JKQTPSpecialLineGraphBase::JKQTPSpecialLineGraphBase(JKQTBasePlotter* parent): + JKQTPXYBaselineGraph(parent), m_drawSymbols(false), m_specialLineType(JKQTPStepLeft) { - m_drawSymbols=false; - m_specialLineType=JKQTPStepLeft; - parentPlotStyle=-1; initLineStyle(parent, parentPlotStyle); initFillStyle(parent, parentPlotStyle); @@ -49,14 +44,7 @@ JKQTPSpecialLineHorizontalGraph::JKQTPSpecialLineHorizontalGraph(JKQTBasePlotter setFillCurve(false); } - -JKQTPSpecialLineHorizontalGraph::JKQTPSpecialLineHorizontalGraph(JKQTPlotter* parent): - JKQTPSpecialLineHorizontalGraph(parent->getPlotter()) -{ -} - - -void JKQTPSpecialLineHorizontalGraph::drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) { +void JKQTPSpecialLineGraphBase::drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) { painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); QPen p=getLinePen(painter, parent); QPen np(Qt::NoPen); @@ -73,33 +61,34 @@ void JKQTPSpecialLineHorizontalGraph::drawKeyMarker(JKQTPEnhancedPainter& painte } -QColor JKQTPSpecialLineHorizontalGraph::getKeyLabelColor() const { + +QColor JKQTPSpecialLineGraphBase::getKeyLabelColor() const { return getLineColor(); } -void JKQTPSpecialLineHorizontalGraph::setDrawSymbols(bool __value) +void JKQTPSpecialLineGraphBase::setDrawSymbols(bool __value) { m_drawSymbols=__value; } -bool JKQTPSpecialLineHorizontalGraph::getDrawSymbols() const +bool JKQTPSpecialLineGraphBase::getDrawSymbols() const { return m_drawSymbols; } -void JKQTPSpecialLineHorizontalGraph::setSpecialLineType(const JKQTPSpecialLineType &__value) +void JKQTPSpecialLineGraphBase::setSpecialLineType(const JKQTPSpecialLineType &__value) { this->m_specialLineType = __value; } -JKQTPSpecialLineType JKQTPSpecialLineHorizontalGraph::getSpecialLineType() const +JKQTPSpecialLineType JKQTPSpecialLineGraphBase::getSpecialLineType() const { return this->m_specialLineType; } -void JKQTPSpecialLineHorizontalGraph::setColor(QColor c) +void JKQTPSpecialLineGraphBase::setColor(QColor c) { setLineColor(c); setSymbolColor(c); @@ -110,6 +99,21 @@ void JKQTPSpecialLineHorizontalGraph::setColor(QColor c) } + +JKQTPSpecialLineHorizontalGraph::JKQTPSpecialLineHorizontalGraph(JKQTBasePlotter* parent): + JKQTPSpecialLineGraphBase(parent) +{ +} + + +JKQTPSpecialLineHorizontalGraph::JKQTPSpecialLineHorizontalGraph(JKQTPlotter* parent): + JKQTPSpecialLineHorizontalGraph(parent->getPlotter()) +{ +} + + + + void JKQTPSpecialLineHorizontalGraph::draw(JKQTPEnhancedPainter& painter) { #ifdef JKQTBP_AUTOTIMER JKQTPAutoOutputTimer jkaaot("JKQTPSpecialLineHorizontalGraph::draw"); @@ -136,10 +140,6 @@ void JKQTPSpecialLineHorizontalGraph::draw(JKQTPEnhancedPainter& painter) { double xold=-1; double yold=-1; - // double xstart=-1; - // double ystart=-1; - //double x0=transformX(0); - //if (parent->getXAxis()->isLogAxis()) x0=transformX(parent->getXAxis()->getMin()); double y0=transformY(getBaseline()); if (parent->getYAxis()->isLogAxis()) { y0=transformY(parent->getYAxis()->getMin()); @@ -293,12 +293,12 @@ void JKQTPSpecialLineHorizontalGraph::draw(JKQTPEnhancedPainter& painter) { JKQTPSpecialLineVerticalGraph::JKQTPSpecialLineVerticalGraph(JKQTBasePlotter *parent): - JKQTPSpecialLineHorizontalGraph(parent) + JKQTPSpecialLineGraphBase(parent) { } JKQTPSpecialLineVerticalGraph::JKQTPSpecialLineVerticalGraph(JKQTPlotter *parent): - JKQTPSpecialLineHorizontalGraph(parent) + JKQTPSpecialLineVerticalGraph(parent->getPlotter()) { } diff --git a/lib/jkqtplotter/graphs/jkqtpspecialline.h b/lib/jkqtplotter/graphs/jkqtpspecialline.h index d255d287be..0d1c43e2e5 100644 --- a/lib/jkqtplotter/graphs/jkqtpspecialline.h +++ b/lib/jkqtplotter/graphs/jkqtpspecialline.h @@ -43,60 +43,82 @@ class JKQTPDatastore; -/*! \brief This implements a step plot with values \f$ \left(x, f(x) \right) \f$ - \ingroup jkqtplotter_linesymbolgraphs_simple - - \image html stepplots.png - - \see JKQTPSpecialLineVerticalGraph, JKQTPFilledCurveXGraph, \ref JKQTPlotterSpecialStepLinePlot +/** \brief a Base class for special line graphs (steps ...) like e.g. JKQTPSpecialLineHorizontalGraph + * \ingroup jkqtplotter_linesymbolgraphs_simple + * + * \image html stepplots.png + * + * \see JKQTPSpecialLineHorizontalGraph, JKQTPSpecialLineVerticalGraph */ -class JKQTPLOTTER_LIB_EXPORT JKQTPSpecialLineHorizontalGraph: public JKQTPXYBaselineGraph, public JKQTPGraphLineAndFillStyleMixin, public JKQTPGraphSymbolStyleMixin { - Q_OBJECT - public: - /** \brief class constructor */ - JKQTPSpecialLineHorizontalGraph(JKQTBasePlotter* parent=nullptr); - /** \brief class constructor */ - JKQTPSpecialLineHorizontalGraph(JKQTPlotter* parent); +class JKQTPLOTTER_LIB_EXPORT JKQTPSpecialLineGraphBase: public JKQTPXYBaselineGraph, public JKQTPGraphLineAndFillStyleMixin, public JKQTPGraphSymbolStyleMixin { + Q_OBJECT +public: + /** \brief class constructor */ + explicit JKQTPSpecialLineGraphBase(JKQTBasePlotter* parent=nullptr); - /** \brief plots the graph to the plotter object specified as parent */ - virtual void draw(JKQTPEnhancedPainter& painter) override; - /** \brief plots a key marker inside the specified rectangle \a rect */ - virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override; - /** \brief returns the color to be used for the key label */ - virtual QColor getKeyLabelColor() const override; + /** \brief returns the color to be used for the key label */ + virtual QColor getKeyLabelColor() const override; + /** \brief plots a key marker inside the specified rectangle \a rect */ + virtual void drawKeyMarker(JKQTPEnhancedPainter& painter, QRectF& rect) override; - /*! sets whether to draw symbols */ - void setDrawSymbols(bool __value); - /*! returns whether symbols are drawn */ - bool getDrawSymbols() const; - /** \brief set the type of connecting (step-)lines */ - void setSpecialLineType(const JKQTPSpecialLineType & __value); - /** \brief get the type of connecting (step-)lines */ - JKQTPSpecialLineType getSpecialLineType() const; + /** \copydoc m_drawSymbols */ + bool getDrawSymbols() const; + /** \copydoc m_specialLineType */ + JKQTPSpecialLineType getSpecialLineType() const; - /** \brief set line-color, fill color and symbol color */ - void setColor(QColor c); - protected: + Q_PROPERTY(bool drawSymbols READ getDrawSymbols WRITE setDrawSymbols) + Q_PROPERTY(JKQTPSpecialLineType specialLineType READ getSpecialLineType WRITE setSpecialLineType) +public slots: + /** \brief set line-color, fill color and symbol color */ + void setColor(QColor c); + /** \copydoc m_drawSymbols */ + void setDrawSymbols(bool __value); + /** \copydoc m_specialLineType */ + void setSpecialLineType(const JKQTPSpecialLineType & __value); +protected: - /** \brief indicates whether to draw a symbols or not */ - bool m_drawSymbols; - /** \brief type of connecting (step)lines */ - JKQTPSpecialLineType m_specialLineType; + /** \brief indicates whether to draw a symbols at the datapoints, or not */ + bool m_drawSymbols; + /** \brief type of connecting (step)lines */ + JKQTPSpecialLineType m_specialLineType; }; +/** \brief This implements a step plot with values \f$ \left(x, f(x) \right) \f$ + * \ingroup jkqtplotter_linesymbolgraphs_simple + * + * \image html stepplots.png + * + * \see JKQTPSpecialLineVerticalGraph, \ref JKQTPlotterSpecialStepLinePlot + */ +class JKQTPLOTTER_LIB_EXPORT JKQTPSpecialLineHorizontalGraph: public JKQTPSpecialLineGraphBase { + Q_OBJECT +public: + /** \brief class constructor */ + JKQTPSpecialLineHorizontalGraph(JKQTBasePlotter* parent=nullptr); + /** \brief class constructor */ + JKQTPSpecialLineHorizontalGraph(JKQTPlotter* parent); + + /** \brief plots the graph to the plotter object specified as parent */ + virtual void draw(JKQTPEnhancedPainter& painter) override; + +protected: + +}; + + /*! \brief This implements a step plot with values \f$ \left(f(y), y \right) \f$ \ingroup jkqtplotter_linesymbolgraphs_simple \image html stepplots_vertical.png - \see JKQTPSpecialLineHorizontalGraph, JKQTPFilledCurveYGraph, \ref JKQTPlotterSpecialStepLinePlot + \see JKQTPSpecialLineHorizontalGraph, \ref JKQTPlotterSpecialStepLinePlot */ -class JKQTPLOTTER_LIB_EXPORT JKQTPSpecialLineVerticalGraph: public JKQTPSpecialLineHorizontalGraph { +class JKQTPLOTTER_LIB_EXPORT JKQTPSpecialLineVerticalGraph: public JKQTPSpecialLineGraphBase { Q_OBJECT public: /** \brief class constructor */