improved documentation

This commit is contained in:
Jan W. Krieger 2019-01-28 22:14:27 +01:00
parent c5b9504189
commit 73bf9edd95
7 changed files with 337 additions and 129 deletions

View File

@ -2462,6 +2462,42 @@ bool JKQTBasePlotter::isEmittingPlotSignalsEnabled() const
return this->emitPlotSignals;
}
void JKQTBasePlotter::setGridPrinting(bool __value)
{
this->gridPrinting = __value;
}
bool JKQTBasePlotter::getGridPrinting() const
{
return this->gridPrinting;
}
void JKQTBasePlotter::setGridPrintingCurrentX(size_t __value)
{
this->gridPrintingCurrentX = __value;
}
size_t JKQTBasePlotter::getGridPrintingCurrentX() const
{
return this->gridPrintingCurrentX;
}
void JKQTBasePlotter::setGridPrintingCurrentY(size_t __value)
{
this->gridPrintingCurrentY = __value;
}
size_t JKQTBasePlotter::getGridPrintingCurrentY() const
{
return this->gridPrintingCurrentY;
}
void JKQTBasePlotter::setGridPrintingCurrentPos(size_t x, size_t y)
{
gridPrintingCurrentX=x;
gridPrintingCurrentY=y;
}
void JKQTBasePlotter::registerAdditionalAction(const QString &key, QAction *act)
{
if (!lstAdditionalPlotterActions.contains(key)) {

View File

@ -144,7 +144,8 @@ class LIB_EXPORT JKQTPPaintDeviceAdapter {
* may be used to set the axis properties.
*
*
* \section jkqtplotter_base_key Graph Keys
* \section jkqtbaseplotter_appearance_and_style Appearance & Styling of the Graph
* \subsection jkqtplotter_base_key Graph Keys
* This class provides means to plot a key together with the functions. The plotting is only partially implemented in this base class, and has to be
* implemented by child classes, as no graph management, that could provide a title for a specific graph, is implemented here. Key Plotting is
* performed in the plotKey() method. This method basically draws a frame and background and then calls plotKeyContent() to draw the actual contents.
@ -165,43 +166,7 @@ class LIB_EXPORT JKQTPPaintDeviceAdapter {
* key content. By default this feature is switched ON.
*
*
* \section jkqtplotter_base_saveprint Saving and Printing Graphs
* This class implement a set of function to save and print the graphs:
* - print() prints the graph on a QPrinter object
* - saveAsPixelImage() saves the plot into a pixel image file (PNG, TIFF, ... formats, as supported by Qt)
* - saveAsPDF() saves the graph as a PDF file (using the Qt printing engine)
* - saveAsPS() saves the graph as a PDF file (using the Qt printing engine)
* - saveAsSVG() saves the graph as a SVG file (using the Qt SVG library)
* - saveAsCSV() saves the data of the plot as comma separated values
* - saveAsSYLK() saves the data of the plot as SYLK spreadsheet
* - saveAsDIF() saves the data of the plot as data interchange format file
* .
*
* As one often want's to combine different graphs, there is a possibility to combine this graph with more other graphs.
* To do so one can think of the graphs to be part of a grid where each graph is contained in one cell. By default this
* mechanism is deactivated. You can activate it by calling setGridPrinting(true). Then you can set the position of the
* current graph by calling setGridPrintingCurrentX() and setGridPrintingCurrentY(). Add additional graphs by calling
* addGridPrintingPlotter(). The position of the current graph is 0,0 by default. Afterwards the save and print routines
* will export/print all graphs, not just the current one. There will be no additional border between the graphs, as the
* class expects the internal graph borders to be sufficient.
*
*
* \section jkqtplotter_base_defaultvalues Default Properties
* The plot is configured by a huge set of properties. For each property there is also a second protected variable which
* contains its default value. This way it is possible to store only those parameters in an INI file which have changed with
* respect to the default values. If the property is ( \copybrief is )called \c property then the according default value is stored in
* \c default_property. To reduce the code to be entered you can use the JKQTPPROPERTY() macro.
*
* Default values are available only for properties that control the appearance of the graphs (line widths, border widths,
* color, fonts ...), not the type of the graph (xmin, xmax, logXAxis, ...)
*
* \section jkqtplotter_base_userprops User Properties
* There is a subset of options that describe how the user interacted with the plotter (export/print scaling factors etc, save directories,
* other export settings, ...). These are not stored/loaded using saveSettings() and loadSettings(), but using saveUserSettings() and loadUserSettings().
* These methods MAY (strictly optional and turned off by default) be called by saveSettings() and loadSettings(), if the property userSettigsFilename ( \copybrief userSettigsFilename )is
* set (not-empty). In this case the suer settings are stored/loaded also everytime they are changed by the user or programmatically.
*
* \section jkqtplotter_base_aspectratios Aspect Ratios
* \subsection jkqtplotter_base_aspectratios Aspect Ratios
* First note that this functionality is only available and activated if both axes are linear!
*
* You can set two different aspect ratios:
@ -215,6 +180,66 @@ class LIB_EXPORT JKQTPPaintDeviceAdapter {
* setAxisAspectRatio(4.0*getAspectRatio());
* \endcode
* .
*
*
* \section jkqtbaseplotter_dataexport_print Printing, Saving & Exporting
*
* \subsection jkqtplotter_base_saveprint Saving and Printing Graphs
* This class implement a set of function to save and print the graphs:
* - print() prints the graph on a QPrinter object
* - saveAsPixelImage() saves the plot into a pixel image file (PNG, TIFF, ... formats, as supported by Qt)
* - saveAsPDF() saves the graph as a PDF file (using the Qt printing engine)
* - saveAsPS() saves the graph as a PDF file (using the Qt printing engine)
* - saveAsSVG() saves the graph as a SVG file (using the Qt SVG library)
* - saveImage() saves the graph
* .
* You can also copy the contents of the plot into the clipboard:
* - copyPixelImage()
* .
*
* \subsection jkqtplotter_base_dataexport Exporting Graph Data
* This class implement a set of function to save the data of the graphs:
* - saveData() saves the data of the plot
* - saveAsCSV() saves the data of the plot as comma separated values
* - saveAsSYLK() saves the data of the plot as SYLK spreadsheet
* - saveAsDIF() saves the data of the plot as data interchange format file
* - saveAsMatlab() saves the data of the plot as a CSV file suitable for Matlab
* - saveAsSemicolonSV() saves the data of the plot as a Semicolon Separated Values (SSV)
* - saveAsTabSV() saves the data of the plot as a Tabulator Separated Values (CSV) file
* - saveAsGerExcelCSV() saves the data of the plot as a Text file (SSV) suitable for german excel, i.e. with comma as decimal separator
* .
* You can also copy the graphs' data into the clipboard:
* - copyData()
* - copyDataMatlab()
* .
*
*
* \subsection JKQTBASEPLOTTER_GRIDPRINTING Grid-Printing / Layouting Several Graphs
* As one often want's to combine different graphs, there is a possibility to combine this graph with more other graphs.
* To do so one can think of the graphs to be part of a grid where each graph is contained in one cell. By default this
* mechanism is deactivated. You can activate it by calling setGridPrinting(true). Then you can set the position of the
* current graph by calling setGridPrintingCurrentX() and setGridPrintingCurrentY(). Add additional graphs by calling
* addGridPrintingPlotter(). The position of the current graph is 0,0 by default. Afterwards the save and print routines
* will export/print all graphs, not just the current one. There will be no additional border between the graphs, as the
* class expects the internal graph borders to be sufficient.
*
* \see \ref JKQTPLOTTER_SYNCMULTIPLOT
*
*
* \section jkqtplotter_base_defaultvalues Default Properties
* The plot is configured by a huge set of properties. For each property there is also a second protected variable which
* contains its default value. This way it is possible to store only those parameters in an INI file which have changed with
* respect to the default values. If the property is called \c property then the according default value is stored in
* \c default_property. To reduce the code to be entered you can use the JKQTPPROPERTY() macro.
*
* Default values are available only for properties that control the appearance of the graphs (line widths, border widths,
* color, fonts ...), not the type of the graph (xmin, xmax, logXAxis, ...)
*
* \section jkqtplotter_base_userprops User Properties
* There is a subset of options that describe how the user interacted with the plotter (export/print scaling factors etc, save directories,
* other export settings, ...). These are not stored/loaded using saveSettings() and loadSettings(), but using saveUserSettings() and loadUserSettings().
* These methods MAY (strictly optional and turned off by default) be called by saveSettings() and loadSettings(), if the property userSettigsFilename ( \copybrief userSettigsFilename )is
* set (not-empty). In this case the suer settings are stored/loaded also everytime they are changed by the user or programmatically.
*/
class LIB_EXPORT JKQTBasePlotter: public QObject {
Q_OBJECT
@ -1740,45 +1765,36 @@ class LIB_EXPORT JKQTBasePlotter: public QObject {
/*! \brief sets the property gridPrinting ( \copybrief gridPrinting ) to the specified \a __value.
\details Description of the parameter gridPrinting is: <BLOCKQUOTE>\copydoc gridPrinting </BLOCKQUOTE>
\see gridPrinting for more information */
inline void setGridPrinting(bool __value)
{
this->gridPrinting = __value;
}
void setGridPrinting(bool __value);
/*! \brief returns the property gridPrinting ( \copybrief gridPrinting ).
\details Description of the parameter gridPrinting is: <BLOCKQUOTE>\copydoc gridPrinting </BLOCKQUOTE>
\see gridPrinting for more information */
inline bool getGridPrinting() const
{
return this->gridPrinting;
}
bool getGridPrinting() const;
/*! \brief sets the property gridPrintingCurrentX ( \copybrief gridPrintingCurrentX ) to the specified \a __value.
\details Description of the parameter gridPrintingCurrentX is: <BLOCKQUOTE>\copydoc gridPrintingCurrentX </BLOCKQUOTE>
\see gridPrintingCurrentX for more information */
inline void setGridPrintingCurrentX(size_t __value)
{
this->gridPrintingCurrentX = __value;
}
void setGridPrintingCurrentX(size_t __value);
/*! \brief returns the property gridPrintingCurrentX ( \copybrief gridPrintingCurrentX ).
\details Description of the parameter gridPrintingCurrentX is: <BLOCKQUOTE>\copydoc gridPrintingCurrentX </BLOCKQUOTE>
\see gridPrintingCurrentX for more information */
inline size_t getGridPrintingCurrentX() const
{
return this->gridPrintingCurrentX;
}
size_t getGridPrintingCurrentX() const;
/*! \brief sets the property gridPrintingCurrentY ( \copybrief gridPrintingCurrentY ) to the specified \a __value.
\details Description of the parameter gridPrintingCurrentY is: <BLOCKQUOTE>\copydoc gridPrintingCurrentY </BLOCKQUOTE>
\see gridPrintingCurrentY for more information */
inline void setGridPrintingCurrentY(size_t __value)
{
this->gridPrintingCurrentY = __value;
}
void setGridPrintingCurrentY(size_t __value);
/*! \brief returns the property gridPrintingCurrentY ( \copybrief gridPrintingCurrentY ).
\details Description of the parameter gridPrintingCurrentY is: <BLOCKQUOTE>\copydoc gridPrintingCurrentY </BLOCKQUOTE>
\see gridPrintingCurrentY for more information */
inline size_t getGridPrintingCurrentY() const
{
return this->gridPrintingCurrentY;
}
size_t getGridPrintingCurrentY() const;
/** \brief set the x- and y-positions of this JKQTPlotter in the grid-printing grid
*
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentX(), setGridPrintingCurrentY() \ref JKQTPBASELOTTER_SYNCMULTIPLOT
*/
void setGridPrintingCurrentPos(size_t x, size_t y);
/*! \brief sets the property currentSaveDirectory ( \copybrief currentSaveDirectory ) to the specified \a __value.
\details Description of the parameter currentSaveDirectory is: <BLOCKQUOTE>\copydoc currentSaveDirectory </BLOCKQUOTE>
\see currentSaveDirectory for more information */

View File

@ -254,6 +254,13 @@ class LIB_EXPORT JKQTPXYLineGraph: public JKQTPXYGraph {
\ingroup jkqtplotter_linesymbolgraphs
set the properties sizeColumn and/or colorColumn to change the size and/or color of the symbols according to the values in the column.
\image html jkqtplotter_simpletest_paramscatterplot.png "Different Styles of Parametrized Scatter/Line Graphs"
\image html jkqtplotter_simpletest_paramscatterplot_image_star.png "JKQTPXYParametrizedScatterGraph with symbols organized in a grid"
\see JKQTPXYParametrizedErrorScatterGraph, \ref JKQTPlotterParamScatter , \ref JKQTPlotterParamScatterImage
*/
class LIB_EXPORT JKQTPXYParametrizedScatterGraph: public JKQTPXYLineGraph, public JKQTPColorPaletteTools {
Q_OBJECT
@ -516,6 +523,10 @@ class LIB_EXPORT JKQTPXYLineErrorGraph: public JKQTPXYLineGraph, public JKQTPXYG
\ingroup jkqtplotter_linesymbolgraphs
set the properties sizeColumn and/or colorColumn to change the size and/or color of the symbols according to the values in the column.
\image html screen_parmetrizedplots_datatable.png
\see JKQTPXYParametrizedScatterGraph, \ref JKQTPlotterParamScatter
*/
class LIB_EXPORT JKQTPXYParametrizedErrorScatterGraph: public JKQTPXYParametrizedScatterGraph, public JKQTPXYGraphErrors {
Q_OBJECT
@ -553,21 +564,9 @@ class LIB_EXPORT JKQTPXYParametrizedErrorScatterGraph: public JKQTPXYParametrize
/*! \brief This implements a step plot with values \f$ \left(x, f(x) \right) \f$
\ingroup jkqtplotter_linesymbolgraphs
A step plot starts at \f$ \left(x_{i-1}, f(x_{i-1})\right) \f$ and then goes on to
\f$ \left(x_{i}, f(x_{i-1})\right) \f$. There it raises immediately to
\f$ \left(x_i, f(x_i)\right) \f$.
\image html jkqtplotter_simpletest_stepplots.png
If you want the \f$ x_i \f$ values in the center of the steps, use
\code JKQTPStepHorizontalGraph::setXCentered(true) \endcode . In that case the steps
go from \f$ \left(x_{i-1}, f(x_{i-1})\right) \f$ to \f$ \left(x_{i}-\delta/2, f(x_{i-1})\right) \f$ ,
then to \f$ \left(x_{i}-\delta/2, f(x_{i})\right) \f$ and finally
to \f$ \left(x_{i}, f(x_{i})\right) \f$ where \f$ \delta=(x_{i}-x_{i-1}) \f$ .
This diagram shows a plot with \code JKQTPStepHorizontalGraph::setValuesCentered(false) \endcode :
\image html plot_stephorplot1.png
This diagram shows a plot with \code JKQTPStepHorizontalGraph::setValuesCentered(true) \endcode :
\image html plot_stephorplot2.png
\see JKQTPStepVerticalGraph, \ref JKQTPlotterStepPlot
*/
class LIB_EXPORT JKQTPStepHorizontalGraph: public JKQTPXYGraph {
Q_OBJECT
@ -726,21 +725,9 @@ class LIB_EXPORT JKQTPStepHorizontalGraph: public JKQTPXYGraph {
/*! \brief This implements a step plot with values \f$ \left(f(y), y \right) \f$
\ingroup jkqtplotter_linesymbolgraphs
A step plot starts at \f$ \left(f(y_{i-1}), x_{i-1}\right) \f$ and then goes on to
\f$ \left(f(y_{i-1}), y_{i}\right) \f$. There it raises immediately to
\f$ \left(f(y_i), y_i\right) \f$.
If you want the \f$ y_i \f$ values in the center of the steps, use
\code JKQTPStepHorizontalGraph::setValuesCentered(true) \endcode . In that case the steps
go from \f$ \left(f(y_{i-1}), y_{i-1})\right) \f$ to \f$ \left(f(y_{i-1}), y_{i}-\delta/2\right) \f$ ,
then to \f$ \left(f(y_{i}, y_{i}-\delta/2\right) \f$ and finally
to \f$ \left(f(y_{i}), y_{i}\right) \f$ where \f$ \delta=(y_{i}-y_{i-1}) \f$ .
This diagram shows a plot with \code JKQTPStepHorizontalGraph::setXCentered(false) \endcode :
\image html plot_stepverplot1.png
This diagram shows a plot with \code JKQTPStepHorizontalGraph::setXCentered(true) \endcode :
\image html plot_stepverplot2.png
\see JKQTPStepHorizontalGraph, \ref JKQTPlotterStepPlot
*/
class LIB_EXPORT JKQTPStepVerticalGraph: public JKQTPStepHorizontalGraph {
Q_OBJECT

View File

@ -31,7 +31,9 @@
/*! \brief This implements filled curve plots where the area is filled between the plot line and the x-Axis.
\ingroup jkqtplotter_linesymbolgraphs
\image html plot_filledcurvexerrorplots.png
\image html jkqtplotter_simpletest_filledgraphs.png
\see \ref JKQTPlotterFilledGraphs
*/
class LIB_EXPORT JKQTPFilledCurveXGraph: public JKQTPXYGraph {
Q_OBJECT
@ -211,6 +213,9 @@ class LIB_EXPORT JKQTPFilledCurveXGraph: public JKQTPXYGraph {
\ingroup jkqtplotter_linesymbolgraphs
\image html plot_filledcurvexerrorplots.png
\see \ref JKQTPlotterFilledGraphs
*/
class LIB_EXPORT JKQTPFilledCurveXErrorGraph: public JKQTPFilledCurveXGraph, public JKQTPYGraphErrors {
Q_OBJECT
@ -236,7 +241,10 @@ class LIB_EXPORT JKQTPFilledCurveXErrorGraph: public JKQTPFilledCurveXGraph, pub
/*! \brief This implements filled curve plots where the area is filled between the plot line and y-Axis
\ingroup jkqtplotter_linesymbolgraphs
\image html plot_filledcurvexplots.png
\image html jkqtplotter_simpletest_filledgraphs_yaxis.png
\see \ref JKQTPlotterFilledGraphs
*/
class LIB_EXPORT JKQTPFilledCurveYGraph: public JKQTPFilledCurveXGraph {
Q_OBJECT
@ -256,6 +264,8 @@ class LIB_EXPORT JKQTPFilledCurveYGraph: public JKQTPFilledCurveXGraph {
\ingroup jkqtplotter_linesymbolgraphs
\image html plot_filledcurveyerrorplots.png
\see \ref JKQTPlotterFilledGraphs
*/
class LIB_EXPORT JKQTPFilledCurveYErrorGraph: public JKQTPFilledCurveYGraph, public JKQTPXGraphErrors {
Q_OBJECT
@ -286,6 +296,10 @@ class LIB_EXPORT JKQTPFilledCurveYErrorGraph: public JKQTPFilledCurveYGraph, pub
With setDrawlines(true):
\image html JKQTPFilledVerticalRangeGraph_WithLines.png
\see \ref JKQTPlotterDateTimeAxes
*/
class LIB_EXPORT JKQTPFilledVerticalRangeGraph: public JKQTPXYGraph {
Q_OBJECT

View File

@ -347,7 +347,7 @@ class LIB_EXPORT JKQTPMathImageBase: public JKQTPImageBase {
/*! \brief class to plot an image from a QImage object
\ingroup jkqtplotter_imagelots_elements
\image html jkqtplotter_simpletest_rgbimageplot_qt
\image html jkqtplotter_simpletest_rgbimageplot_qt.png
*/
class LIB_EXPORT JKQTPImage: public JKQTPImageBase {
Q_OBJECT

View File

@ -892,11 +892,11 @@ void JKQTPlotter::masterPlotScalingRecalculated() {
}
}
void JKQTPlotter::synchronizeToMaster(JKQTPlotter* master, bool synchronizeWidth, bool synchronizeHeight) {
void JKQTPlotter::synchronizeToMaster(JKQTPlotter* master, bool synchronizeWidth, bool synchronizeHeight, bool synchronizeZoomingMasterToSlave, bool synchronizeZoomingSlaveToMaster) {
if (!master) {
resetMasterSynchronization();
}
plotter->synchronizeToMaster(master->getPlotter(), synchronizeWidth, synchronizeHeight);
plotter->synchronizeToMaster(master->getPlotter(), synchronizeWidth, synchronizeHeight, synchronizeZoomingMasterToSlave, synchronizeZoomingSlaveToMaster);
masterPlotter=master;
if (masterPlotter) connect(masterPlotter->getPlotter(), SIGNAL(plotScalingRecalculated()), this, SLOT(masterPlotScalingRecalculated()));
redrawPlot();
@ -908,6 +908,36 @@ void JKQTPlotter::resetMasterSynchronization() {
redrawPlot();
}
void JKQTPlotter::setGridPrinting(bool enabled)
{
plotter->setGridPrinting(enabled);
}
void JKQTPlotter::addGridPrintingPlotter(size_t x, size_t y, JKQTPlotter *plotterOther)
{
plotter->addGridPrintingPlotter(x,y,plotterOther->getPlotter());
}
void JKQTPlotter::clearGridPrintingPlotters()
{
plotter->clearGridPrintingPlotters();
}
void JKQTPlotter::setGridPrintingCurrentX(size_t x)
{
plotter->setGridPrintingCurrentX(x);
}
void JKQTPlotter::setGridPrintingCurrentY(size_t y)
{
plotter->setGridPrintingCurrentY(y);
}
void JKQTPlotter::setGridPrintingCurrentPos(size_t x, size_t y)
{
plotter->setGridPrintingCurrentPos(x,y);
}
bool JKQTPlotter::isPlotUpdateEnabled() const {
return doDrawing;
}

View File

@ -62,18 +62,79 @@ LIB_EXPORT void initJKQTPlotterResources();
/** \brief plotter widget for scientific plots (uses JKQTBasePlotter to do the actual drawing)
* \ingroup jkqtpplotterclasses
*
* This class is an implementation of JKQTBasePlotter. It uses the tools from this base class
* to display function graphs that use the internal datastore as data source. This class mostly
* adds the Widget for the output and adds different types of user interactions.
* This class is a QWidget-wrapper around JKQTBasePlotter. It uses the tools from JKQTBasePlotter
* to display scientific plots. This class mostly adds the Widget for the output and adds different
* types of user interactions.
*
* <b>Please have a look at the documentation of JKQTBasePlotter for details on the management of graphs
* and the formating/styling of the plot and graphs!</b>
*
* \see JKQTBasePlotter
* The rest of this documentation ins split into sections that each treat a special topic, as outlines below:
*
* \tableofcontents
*
*
* \section JKQTPLOTTER_SYNCMULTIPLOT Synchronizing Several Plots
*
* \section JKQTPLOTTER_USERINTERACTION User-Interactions
* Often a single plot is not sufficient, but several plots need to be aligned with respect to each other:
*
* \image html test_multiplot.png
*
* This can be achieved by putting several JKQTPlotter instances into a
* <a href="http://doc.qt.io/qt-5/layout.html">Qt Layout</a>. Then you can fill each plot differently and
* set the x-/y-range of each plot by hand. This method works for simple cases, but has several drawbacks:
* - Due to the independent and automatic layouting of each plot, the axes do not need to be aligned properly
* - When you print the plot, the printing does not know about the layout and will only print one of the
* several plots in your layout.
* - when you zoom/pan in one of the plots (e.g. using the mouse), the other plots will not adapt their
* axes to match the new area, but especially in cases as in the image above it would be beneficial,
* that tha x-axis of the plot at the bottom follows the x-axis of the plot above etc.
* .
*
* To overcome these limitations, JKQTPlotter offers an API with which you can declare relations between
* different plots (one of them is made the master) and you can synchronize the axes of two plots, when
* zooming (also when calling e.g. zoomToFit() or setXY() ). This API is:
* - <b>Declaring the Relations (forwarding to JKQTBasePlotter !):</b>
* - synchronizeToMaster() / JKQTBasePlotter::synchronizeToMaster() synchronizes the parent JKQTPlotter with another JKQTPlotter. With two boolean-parameters
* you can specify the axes to be synchronized. E.g. in the case above, you would call:
* \code
* // synchronize width/x-axis of plotResid to width/x-axis of plotMain
* plotResid->synchronizeToMaster(plotMain, true, false, true, true);
*
* // synchronize y-axis of width/plotResidHist to y-axis of width/plotResid
* plotResidHist->synchronizeToMaster(plotResid, false, true, true, true);
* \endcode
* This will synchronize the x-axes of the top (\c plotMain ) and bottom-left plot (\c plotResid ),
* as well as the y-axes of the bottom-left (\c plotResid ) and bottom-right plot (\c plotResidHist ).
* After this call they will have the same size in screen pixels and always span the same range
* in plot coordinates.
* - resetMasterSynchronization() / JKQTBasePlotter::resetMasterSynchronization() deletes all synchronizations
* from the JKQTPlotter
* .
* - <b>Synchronizing Axes (forwarding to JKQTBasePlotter !):</b>
* - setGridPrinting() enables grid printing for this JKQTPlotter. If set to \c true , and you print afterwards,
* the printout (or export) will not only contain the plot itself, but also additional plots that were
* declared using addGridPrintingPlotter() (see below).
* - addGridPrintingPlotter() add a new plotter \a plotterOther for grid printing mode, at location \a x / \a y
* E.g. in the example shown above, you could call:
* \code
* plotMain->setGridPrinting(true);
* plotMain->addGridPrintingPlotter(0,1,plotResid);
* plotMain->addGridPrintingPlotter(1,1,plotResidHist);
* \endcode
* - clearGridPrintingPlotters() clear all additional plotters for grid printing mode
* .
* These two functionalities are kept separate, so you can use them independently.
*
* \note Note that the grid printing mode only allows to put plots to the right (positive x-values in addGridPrintingPlotter() )
* and to the bottom (positive y-values in addGridPrintingPlotter() ) of the current plot. Therefore the master plot
* needs to be the top-left plot of your grid and all plots need to be aligned in a grid (i.e. using
* <a href="http://doc.qt.io/qt-5/qgridlayout.html">QGridLayout</a>)
*
* \see See \ref JKQTPlotterMultiPlotLayout for an extensive example of the functionality.
*
*
* \section JKQTPLOTTER_USERINTERACTION User-Interactions/GUI Features
*
* JKQTPlotter offers a lot of user-interaction features out of the box. These are detailed below.
*
@ -156,7 +217,18 @@ LIB_EXPORT void initJKQTPlotterResources();
*
* \subsection JKQTPLOTTER_USERMOUSEINTERACTION Mouse-Interaction in JKQTPlotter
*
* \see \ref JKQTPlotterUserInteraction
* This section summarizes all user-interaction functions in JKQTPlotter that somehow relate to the mouse.
* These are:
* - \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG
* - \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSECLICK
* - \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEWHEEL
* - \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEMOVE
* .
*
* \note Zooming and Paning interactions apply to both axes when they are performed with the mouse
* inside the plot. They are limited to one of the two axes, when the mouse hovers over that axis
* (e.g. when you zoom by mouse-wheel while the mouse pointer is below the plot, over the x-axis,
* only the x-axis is affected by the operation).
*
* \subsubsection JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG Actions When Dragging the Mouse
* JKQTPlotter offers several methods that allow to customize, how it reacts to mouse actions:
@ -175,7 +247,13 @@ LIB_EXPORT void initJKQTPlotterResources();
*
* Pressing the \c ESC key will stop the current JKQTPlotter::MouseActionMode.
*
* \subsubsection JKQTPLOTTER_USERMOUSEINTERACTION_MOUSECLICK Actions After Clicks on the Mouse Buttons
* If e.g. the mode JKQTPlotter::MouseActionMode::ZoomRectangle is selected, while you drag the mouse, the
* zoom rectangle is drawn over the plot. You can modify the style of drawing using these functions:
* - setUserActionColor() sets the color of the drawn shape
* - setUserActionCompositionMode() specifies how to combine the shape with the existing plot
* .
*
* \subsubsection JKQTPLOTTER_USERMOUSEINTERACTION_MOUSECLICK Actions After (Double-)Clicks on the Mouse Buttons
* The right mouse button has a special role: If it is single-clicked and no JKQTPlotter::MouseActionMode is specified
* for the vent, it opens the context menu, unless you call \c setContextMenuMoode(JKQTPlotter::NoContextMenu) .
* You can also use setContextMenuMoode() to specify which type of context menu is shown. See JKQTPlotter::ContextMenuModes
@ -222,6 +300,9 @@ LIB_EXPORT void initJKQTPlotterResources();
* In addition the signal plotMouseMove() is called whenever the mouse moves over the plot.
* Additional signals may be emitted, depending on the currently active JKQTPlotter::MouseActionMode.
*
* Also the current mouse position is shown above the graph by default (can be switched on or off
* using setMousePositionShown() ).
*
*
*
* \section JKQTPLOTTER_USEQTCREATOR How to use JKQTPlotter in the Qt Form Designer
@ -334,14 +415,10 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
\details Description of the parameter displayMousePosition is: <BLOCKQUOTE>\copydoc displayMousePosition </BLOCKQUOTE>
\see displayMousePosition for more information */
bool isMousePositionShown() const;
/*! \brief returns the property userActionColor ( \copybrief userActionColor ).
\details Description of the parameter userActionColor is: <BLOCKQUOTE>\copydoc userActionColor </BLOCKQUOTE>
\see userActionColor for more information */
/** \brief returns the fill color of the zoom rectangle \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
QColor getUserActionColor() const;
/*! \brief returns the property userActionCompositionMode ( \copybrief userActionCompositionMode ).
\details Description of the parameter userActionCompositionMode is: <BLOCKQUOTE>\copydoc userActionCompositionMode </BLOCKQUOTE>
\see userActionCompositionMode for more information */
/** \brief returns the QPainter::CompositionMode used to draw the zoom rectangle etc. \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
QPainter::CompositionMode getUserActionCompositionMode() const;
@ -373,12 +450,64 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
\param master the plotter widget to synchronize to
\param synchronizeWidth do you want the plot width to be synchronized?
\param synchronizeHeight do you want the plot height to be synchronized?
*/
void synchronizeToMaster(JKQTPlotter* master, bool synchronizeWidth, bool synchronizeHeight);
\param synchronizeZoomingMasterToSlave if set, also zooming in the master leads to a modification of the linked axes in the slave
\param synchronizeZoomingSlaveToMaster if set, also zooming in the slave leads to a modification of the linked axes in the master
/** \brief switches any synchronization off, that has been created by synchronizeToMaster() */
\note This function internally calls JKQTBasePlotter::synchronizeToMaster()
\see synchronizeToMaster(), resetMasterSynchronization(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void synchronizeToMaster(JKQTBasePlotter* master, bool synchronizeWidth, bool synchronizeHeight, bool synchronizeZoomingMasterToSlave=false, bool synchronizeZoomingSlaveToMaster=false);
/** \brief switches any synchronization off, that has been created by synchronizeToMaster()
*
* \note This function internally calls JKQTBasePlotter::resetMasterSynchronization()
* \see synchronizeToMaster(), resetMasterSynchronization(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void resetMasterSynchronization();
/*! \brief enables grid-printing for this plot
*
* \note This function call forwards to JKQTBasePlotter::setGridPrinting()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void setGridPrinting(bool enabled);
/** \brief add a new plotter \a plotterOther for grid printing mode, at location \a x / \a y
*
* \note This function call forwards to JKQTBasePlotter::addGridPrintingPlotter()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void addGridPrintingPlotter(size_t x, size_t y, JKQTPlotter* plotterOther) ;
/** \brief clear all additional plotters for grid printing mode
*
* \note This function call forwards to JKQTBasePlotter::clearGridPrintingPlotters()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void clearGridPrintingPlotters() ;
/** \brief set the x-position of this JKQTPlotter in the grid-printing grid
*
* \note This function call forwards to JKQTBasePlotter::setGridPrintingCurrentX()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), setGridPrintingCurrentY(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void setGridPrintingCurrentX(size_t x);
/** \brief set the y-position of this JKQTPlotter in the grid-printing grid
*
* \note This function call forwards to JKQTBasePlotter::setGridPrintingCurrentY()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentPos(), setGridPrintingCurrentX(), \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void setGridPrintingCurrentY(size_t y);
/** \brief set the x- and y-positions of this JKQTPlotter in the grid-printing grid
*
* \note This function call forwards to JKQTBasePlotter::setGridPrintingCurrentPos()
* \see setGridPrinting(), addGridPrintingPlotter(), clearGridPrintingPlotters(), setGridPrintingCurrentX(), setGridPrintingCurrentY() \ref JKQTPLOTTER_SYNCMULTIPLOT
*/
void setGridPrintingCurrentPos(size_t x, size_t y);
/** \brief returns a pointer to the datastore used by this object */
inline JKQTPDatastore* getDatastore() { return plotter->getDatastore(); }
@ -434,11 +563,11 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
/** \brief clear all registered mouse double-click actions */
void clearAllRegisteredMouseDoubleClickActions();
/** \brief specifies the action to perform on a mouse wheel event when a given modifier is pressed \see deregisterMouseWheelAction(), clearAllMouseWheelActions(), JKQTPLOTTER_USERMOUSEINTERACTION */
/** \brief specifies the action to perform on a mouse wheel event when a given modifier is pressed \see deregisterMouseWheelAction(), clearAllMouseWheelActions(), \ref JKQTPLOTTER_USERMOUSEINTERACTION */
void registerMouseWheelAction(Qt::KeyboardModifier modifier, MouseWheelActions action);
/** \brief deletes all mouse-wheel actions registered for a given \a modifier \see registerMouseWheelAction(), clearAllMouseWheelActions(), JKQTPLOTTER_USERMOUSEINTERACTION */
/** \brief deletes all mouse-wheel actions registered for a given \a modifier \see registerMouseWheelAction(), clearAllMouseWheelActions(), \ref JKQTPLOTTER_USERMOUSEINTERACTION */
void deregisterMouseWheelAction(Qt::KeyboardModifier modifier);
/** \brief deletes all mouse-wheel actions \see registerMouseWheelAction(), deregisterMouseWheelAction(), JKQTPLOTTER_USERMOUSEINTERACTION */
/** \brief deletes all mouse-wheel actions \see registerMouseWheelAction(), deregisterMouseWheelAction(), \ref JKQTPLOTTER_USERMOUSEINTERACTION */
void clearAllMouseWheelActions();
/*! \brief returns the currently set special context menu object */
@ -557,7 +686,7 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
return getConstplotter()->getKeyFontSize();
}
/** \brief returns the currently set mode for the context menu \see ContextMenuModes, JKQTPLOTTER_USERMOUSEINTERACTION */
/** \brief returns the currently set mode for the context menu \see ContextMenuModes, \ref JKQTPLOTTER_USERMOUSEINTERACTION */
ContextMenuModes getContextMenuMode() const;
@ -652,25 +781,21 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
void setToolbarAlwaysOn(bool __value);
/*! \brief sets the property displayMousePosition ( \copybrief displayMousePosition ) to the specified \a __value.
\details Description of the parameter displayMousePosition is: <BLOCKQUOTE>\copydoc displayMousePosition </BLOCKQUOTE>
\see displayMousePosition for more information */
\see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEMOVE */
void setMousePositionShown(bool __value);
/*! \brief sets the property userActionColor ( \copybrief userActionColor ) to the specified \a __value.
\details Description of the parameter userActionColor is: <BLOCKQUOTE>\copydoc userActionColor </BLOCKQUOTE>
\see userActionColor for more information */
/** \brief set the fill color of the zoom rectangle \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
void setUserActionColor(const QColor & __value);
/*! \brief sets the property userActionCompositionMode ( \copybrief userActionCompositionMode ) to the specified \a __value.
\details Description of the parameter userActionCompositionMode is: <BLOCKQUOTE>\copydoc userActionCompositionMode </BLOCKQUOTE>
\see userActionCompositionMode for more information */
/** \brief set the QPainter::CompositionMode used to draw the zoom rectangle etc. \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
void setUserActionCompositionMode(const QPainter::CompositionMode & __value);
/** \brief sets the mode if the standard context menu \see ContextMenuModes, JKQTPLOTTER_USERMOUSEINTERACTION */
/** \brief sets the mode if the standard context menu \see ContextMenuModes, \ref JKQTPLOTTER_USERMOUSEINTERACTION */
void setContextMenuMode(ContextMenuModes mode);
/** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local x-axis to the other x-axis */
/** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local x-axis to the other x-axis \see \ref JKQTPLOTTER_SYNCMULTIPLOT */
void synchronizeXAxis(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
/** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local y-axis to the other y-axis */
/** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local y-axis to the other y-axis \see \ref JKQTPLOTTER_SYNCMULTIPLOT */
void synchronizeYAxis(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
/** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local x- and y-axis to the other x- and y-axis */
/** \brief may be connected to zoomChangedLocally() of a different plot and synchronizes the local x- and y-axis to the other x- and y-axis \see \ref JKQTPLOTTER_SYNCMULTIPLOT */
void synchronizeXYAxis(double newxmin, double newxmax, double newymin, double newymax, JKQTPlotter* sender);
@ -889,12 +1014,12 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
JKQTBasePlotter* plotter;
/** \brief fill color of the zoom rectangle */
/** \brief fill color of the zoom rectangle \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
QColor userActionColor;
/*! \brief default value for property property userActionColor. \see userActionColor for more information */
QColor default_userActionColor;
/** \brief fill color of the zoom rectangle */
/** \brief the QPainter::CompositionMode used to draw the zoom rectangle etc. \see \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEDRAG */
QPainter::CompositionMode userActionCompositionMode;
/*! \brief default value for property property userActionCompositionMode. \see userActionCompositionMode for more information */
QPainter::CompositionMode default_userActionCompositionMode;
@ -1043,7 +1168,7 @@ class LIB_EXPORT JKQTPlotter: public QWidget {
*
* \image html jkqtplotter_mousepositiondisplay.png
*
* \see mousePositionTemplate, \ref JKQTPlotterUserInteraction
* \see mousePositionTemplate, \ref JKQTPlotterUserInteraction, \ref JKQTPLOTTER_USERMOUSEINTERACTION_MOUSEMOVE
*/
bool displayMousePosition;
/** \brief this string is used to generate the position output above the graph (\c %1 is replaced by the x-position, \c %2 by the y-position)