]> Creatis software - cpPlugins.git/blob - lib/QCustomPlot/changelog.txt
Cast image filter added. ROI filter modified.
[cpPlugins.git] / lib / QCustomPlot / changelog.txt
1 #### Version 1.3.2 released on 22.12.15 ####
2
3   Bugfixes [Backported from 2.0.0 branch]:
4     - Fixed possible crash when having a QCPGraph with scatters only and a non-transparent main/fill brush of the graph
5     - Fixed QCPItemPixmap not updating internally cached scaled pixmap if new pixmap set with same scaled dimensions
6     - When using log axis scale and zooming out as far as possible (~1e-280..1e280), axis doesn't end up in (via mouse) unrecoverable range with strange axis ticks anymore
7     - Axis tick label algorithm for beautifully typeset powers now checks whether "e" in tick label is actually part of a number before converting the exponent to superscript
8     - Fixed QCustomPlot::moveLayer performing incorrect move and possible crash in certain situations
9     - Fixed possible crash on QCustomPlot destruction due to wrong QObject-hierarchy. Only occurs if a QCPAxisRect is removed from the normal QCustomPlot destruction hierarchy by taking it out of its layout
10     - Fixed possible freeze when data values become infinity after coord-to-pixel transformation (e.g. maximally zoomed out log axis), and line style is not solid (e.g. dashed) or phFastPolylines is disabled
11     
12   Other [Backported from 2.0.0 branch]:
13     - A few documentation fixes/improvements
14     - Qt5.5 compatibility (If you use PDF export, test your outputs, as output dimensions might change when switching Qt versions -- QCP does not try to emulate previous Qt version behaviour here)
15     - QCP now includes <QtPrintSupport/QtPrintSupport> instead of just <QtPrintSupport> because some users had problems with the latter. Please report if you now experience issues due to the new include.
16
17 #### Version 1.3.1 released on 25.04.15 ####
18
19   Bugfixes:
20     - Fixed bug that prevented automatic axis rescaling when some graphs/curves had only NaN data points
21     - Improved QCPItemBracket selection boundaries, especially bsCurly and bsCalligraphic
22     - Fixed bug of axis rect and colorscale background shifted downward by one logical pixel (visible in scaled png and pdf export)
23     - Replot upon mouse release is now only performed if a selection change has actually happened (improves responsivity on particularly complex plots)
24     - Fixed bug that allowed scatter-only graphs to be selected by clicking the non-existent line between scatters
25     - Fixed crash when trying to select a scatter-only QCPGraph whose only points in the visible key range are at identical key coordinates and vertically off-screen, with adaptive sampling enabled
26     - Fixed pdf export of QCPColorMap with enabled interpolation (didn't appear interpolated in pdf)
27     - Reduced QCPColorMap jitter of internal cell boundaries for small sized maps when viewed with high zoom, by applying oversampling factors dependant on map size
28     - Fixed bug of QCPColorMap::fill() not causing the buffered internal image map to be updated, and thus the change didn't become visible immediately
29     - Axis labels with size set in pixels (setPixelSize) instead of points now correctly calculate the exponent's font size if beautifully typeset powers are enabled
30     - Fixed QCPColorMap appearing at the wrong position for logarithmic axes and color map spanning larger ranges
31     
32   Other:
33     - Pdf export used to embed entire QCPColorMaps, potentially leading to large files. Now only the visible portion of the map is embedded in the pdf
34     - Many documentation fixes and extensions, style modernization
35     - Reduced documentation file size (and thus full package size) by automatically reducing image palettes during package build
36     - Fixed MSVC warning message (at warning level 4) due to temporary QLists in some foreach statements
37
38 #### Version 1.3.0 released on 27.12.14 ####
39
40   Added features:
41     - New plottable class QCPFinancial allows display of candlestick/ohlc data
42     - New class QCPBarsGroup allows horizontal grouping of multiple QCPBars plottables
43     - Added QCPBars feature allowing non-zero base values (see property QCPBars::setBaseValue)
44     - Added QCPBars width type, for more flexible bar widths (see property QCPBars::setWidthType)
45     - New QCPCurve optimization algorithm, fixes bug which caused line flicker at deep zoom into curve segment
46     - Item positions can now have different position types and anchors for their x and y coordinates (QCPItemPosition::setTypeX/Y, setParentAnchorX/Y)
47     - QCPGraph and QCPCurve can now display gaps in their lines, when inserting quiet NaNs as values (std::numeric_limits<double>::quiet_NaN())
48     - QCPAxis now supports placing the tick labels inside the axis rect, for particularly space saving plots (QCPAxis::setTickLabelSide)
49   Added features after beta:
50     - Made code compatible with QT_NO_CAST_FROM_ASCII, QT_NO_CAST_TO_ASCII
51     - Added compatibility with QT_NO_KEYWORDS after sending code files through a simple reg-ex script
52     - Added possibility to inject own QCPAxis(-subclasses) via second, optional QCPAxisRect::addAxis parameter
53     - Added parameter to QCPItemPixmap::setScaled to specify transformation mode
54   
55   Bugfixes:
56     - Fixed bug in QCPCurve rendering of very zoomed-in curves (via new optimization algorithm)
57     - Fixed conflict with MSVC-specific keyword "interface" in text-document-integration example
58     - Fixed QCPScatterStyle bug ignoring the specified pen in the custom scatter shape constructor
59     - Fixed bug (possible crash) during QCustomPlot teardown, when a QCPLegend that has no parent layout (i.e. was removed from layout manually) gets deleted
60   Bugfixes after beta:
61     - Fixed bug of QCPColorMap/QCPColorGradient colors being off by one color sampling step (only noticeable in special cases)
62     - Fixed bug of QCPGraph adaptive sampling on vertical key axis, causing staggered look
63     - Fixed low (float) precision in QCPCurve optimization algorithm, by not using QVector2D anymore
64   
65   Other:
66     - Qt 5.3 and Qt 5.4 compatibility
67
68 #### Version 1.2.1 released on 07.04.14 ####
69
70   Bugfixes:
71     - Fixed regression which garbled date-time tick labels on axes, if setTickLabelType is ltDateTime and setNumberFormat contains the "b" option
72
73 #### Version 1.2.0 released on 14.03.14 ####
74
75   Added features:
76     - Adaptive Sampling for QCPGraph greatly improves performance for high data densities (see QCPGraph::setAdaptiveSampling)
77     - QCPColorMap plottable with QCPColorScale layout element allows plotting of 2D color maps
78     - QCustomPlot::savePdf now has additional optional parameters pdfCreator and pdfTitle to set according PDF metadata fields
79     - QCustomPlot::replot now allows specifying whether the widget update is immediate (repaint) or queued (update)
80     - QCPRange operators +, -, *, / with double operand for range shifting and scaling, and ==, != for range comparison
81     - Layers now have a visibility property (QCPLayer::setVisible)
82     - static functions QCPAxis::opposite and QCPAxis::orientation now offer more convenience when handling axis types
83     - added notification signals for selectability change (selectableChanged) on all objects that have a selected/selectable property
84     - added notification signal for QCPAxis scaleType property
85     - added notification signal QCPLayerable::layerChanged
86   
87   Bugfixes:
88     - Fixed assert halt, when QCPAxis auto tick labels not disabled but nevertheless a custom non-number tick label ending in "e" given
89     - Fixed painting glitches when QCustomPlot resized inside a QMdiArea or under certain conditions inside a QLayout
90     - If changing QCPAxis::scaleType and thus causing range sanitizing and a range modification, rangeChanged wouldn't be emitted
91     - Fixed documentation bug that caused indentation to be lost in code examples
92   Bugfixes after beta:
93     - Fixed bug that caused crash if clicked-on legend item is removed in mousePressEvent.
94     - On some systems, font size defaults to -1, which used to cause a debug output in QCPAxisPainterPrivate::TickLabelDataQCP. Now it's checked before setting values based on the default font size.
95     - When using multiple axes on one side, setting one to invisible didn't properly compress the freed space.
96     - Fixed bug that allowed selection of plottables when clicking in the bottom or top margin of a QCPAxisRect (outside the inner rect)
97     
98   Other:
99     - In method QCPAbstractPlottable::getKeyRange/getValueRange, renamed parameter "validRange" to "foundRange", to better reflect its meaning (and contrast it from QCPRange::validRange)
100     - QCPAxis low-level axis painting methods exported to QCPAxisPainterPrivate
101
102 #### Version 1.1.1 released on 09.12.13 ####
103
104   Bugfixes:
105     - Fixed bug causing legends blocking input events from reaching underlying axis rect even if legend is invisible
106     - Added missing Q_PROPERTY for QCPAxis::setDateTimeSpec
107     - Fixed behaviour of QCPAxisRect::setupFullAxesBox (now transfers more properties from bottom/left to top/right axes and sets visibility of bottom/left axes to true)
108     - Made sure PDF export doesn't default to grayscale output on some systems
109   
110   Other:
111     - Plotting hint QCP::phForceRepaint is now enabled on all systems (and not only on windows) by default
112     - Documentation improvements
113
114 #### Version 1.1.0 released on 04.11.13 ####
115
116   Added features:
117     - Added QCPRange::expand and QCPRange::expanded
118     - Added QCPAxis::rescale to rescale axis to all associated plottables
119     - Added QCPAxis::setDateTimeSpec/dateTimeSpec to allow axis labels either in UTC or local time
120     - QCPAxis now additionally emits a rangeChanged signal overload that provides the old range as second parameter
121     
122   Bugfixes:
123     - Fixed QCustomPlot::rescaleAxes not rescaling properly if first plottable has an empty range
124     - QCPGraph::rescaleAxes/rescaleKeyAxis/rescaleValueAxis are no longer virtual (never were in base class, was a mistake)
125     - Fixed bugs in QCPAxis::items and QCPAxisRect::items not properly returning associated items and potentially stalling
126     
127   Other:
128     - Internal change from QWeakPointer to QPointer, thus got rid of deprecated Qt functionality
129     - Qt5.1 and Qt5.2 (beta1) compatibility
130     - Release packages now extract to single subdirectory and don't place multiple files in current working directory
131
132 #### Version 1.0.1 released on 05.09.13 ####
133
134   Bugfixes:
135     - using define flag QCUSTOMPLOT_CHECK_DATA caused debug output when data was correct, instead of invalid (fixed QCP::isInvalidData)
136     - documentation images are now properly shown when viewed with Qt Assistant
137     - fixed various documentation mistakes
138     
139   Other:
140     - Adapted documentation style sheet to better match Qt5 documentation
141
142 #### Version 1.0.0 released on 01.08.13 ####
143
144   Quick Summary:
145     - Layout system for multiple axis rects in one plot
146     - Multiple axes per side
147     - Qt5 compatibility
148     - More flexible and consistent scatter configuration with QCPScatterStyle
149     - Various interface cleanups/refactoring
150     - Pixmap-cached axis labels for improved replot performance
151
152   Changes that break backward compatibility:
153     - QCustomPlot::axisRect() changed meaning due to the extensive changes to how axes and axis rects are handled
154       it now returns a pointer to a QCPAxisRect and takes an integer index as parameter.
155     - QCPAxis constructor changed to now take QCPAxisRect* as parent
156     - setAutoMargin, setMarginLeft/Right/Top/Bottom removed due to the axis rect changes (see QCPAxisRect::setMargins/setAutoMargins)
157     - setAxisRect removed due to the axis rect changes
158     - setAxisBackground(-Scaled/-ScaledMode) now moved to QCPAxisRect as setBackground(-Scaled/ScaledMode) (access via QCustomPlot::axisRects())
159     - QCPLegend now is a QCPLayoutElement
160     - QCPAbstractPlottable::drawLegendIcon parameter "rect" changed from QRect to QRectF
161     - QCPAbstractLegendItem::draw second parameter removed (position/size now handled via QCPLayoutElement base class)
162     - removed QCPLegend::setMargin/setMarginLeft/Right/Top/Bottom (now inherits the capability from QCPLayoutElement::setMargins)
163     - removed QCPLegend::setMinimumSize (now inherits the capability from QCPLayoutElement::setMinimumSize)
164     - removed enum QCPLegend::PositionStyle, QCPLegend::positionStyle/setPositionStyle/position/setPosition (replaced by capabilities of QCPLayoutInset)
165     - QCPLegend transformed to work with new layout system (almost everything changed)
166     - removed entire title interface: QCustomPlot::setTitle/setTitleFont/setTitleColor/setTitleSelected/setTitleSelectedFont/setTitleSelectedColor and
167       the QCustomPlot::iSelectTitle interaction flag (all functionality is now given by the layout element "QCPPlotTitle" which can be added to the plot layout)
168     - selectTest functions now take two additional parameters: bool onlySelectable and QVariant *details=0
169     - selectTest functions now ignores visibility of objects and (if parameter onlySelectable is true) does not anymore ignore selectability of the object
170     - moved QCustomPlot::Interaction/Interactions to QCP namespace as QCP::Interaction/Interactions
171     - moved QCustomPlot::setupFullAxesBox() to QCPAxisRect::setupFullAxesBox. Now also accepts parameter to decide whether to connect opposite axis ranges
172     - moved range dragging/zooming interface from QCustomPlot to QCPAxisRect (setRangeDrag, setRangeZoom, setRangeDragAxes, setRangeZoomAxes,...)
173     - rangeDrag/Zoom is now set to Qt::Horizontal|Qt::Vertical instead of 0 by default, on the other hand, iRangeDrag/Zoom is unset in interactions by
174       default (this makes enabling dragging/zooming easier by just adding the interaction flags)
175     - QCPScatterStyle takes over everything related to handling scatters in all plottables
176     - removed setScatterPen/Size on QCPGraph and QCPCurve, removed setOutlierPen/Size on QCPStatisticalBox (now handled via QCPScatterStyle)
177     - modified setScatterStyle on QCPGraph and QCPCurve, and setOutlierStyle on QCPStatisticalBox, to take QCPScatterStyle
178     - axis grid and subgrid are now reachable via the QCPGrid *QCPAxis::grid() method. (e.g. instead of xAxis->setGrid(true), write xAxis->grid()->setVisible(true))
179
180   Added features:
181     - Axis tick labels are now pixmap-cached, thus increasing replot performance (in usual setups by about 24%). See plotting hint phCacheLabels which is set by default
182     - Advanced layout system, including the classes QCPLayoutElement, QCPLayout, QCPLayoutGrid, QCPLayoutInset, QCPAxisRect
183     - QCustomPlot::axisRects() returns all the axis rects in the QCustomPlot.
184     - QCustomPlot::plotLayout() returns the top level layout (initially a QCPLayoutGrid with one QCPAxisRect inside)
185     - QCPAxis now may have an offset to the axis rect (setOffset)
186     - Multiple axes per QCPAxisRect side are now supported (see QCPAxisRect::addAxis)
187     - QCustomPlot::toPixmap renders the plot into a pixmap and returns it
188     - When setting tick label rotation to +90 or -90 degrees on a vertical axis, the labels are now centered vertically on the tick height
189       (This allows space saving vertical tick labels by having the text direction parallel to the axis)
190     - Substantially increased replot performance when using very large manual tick vectors (> 10000 ticks) via QCPAxis::setTickVector
191     - QCPAxis and QCPAxisRect now allow easy access to all plottables(), graphs() and items() that are associated with them
192     - Added QCustomPlot::hasItem method for consistency with plottable interface, hasPlottable
193     - Added QCPAxisRect::setMinimumMargins as replacement for hardcoded minimum axis margin (15 px) when auto margin is enabled
194     - Added Flags type QCPAxis::AxisTypes (from QCPAxis::AxisType), used in QCPAxisRect interface
195     - Automatic margin calculation can now be enabled/disabled on a per-side basis, see QCPAxisRect::setAutoMargins
196     - QCPAxisRect margins of multiple axis rects can be coupled via QCPMarginGroup
197     - Added new default layers "background" and "legend" (QCPAxisRect draws its background on the "background" layer, QCPLegend is on the "legend" layer by default)
198     - Custom scatter style via QCP::ssCustom and respective setCustomScatter functions that take a QPainterPath
199     - Filled scatters via QCPScatterStyle::setBrush
200   Added features after beta:
201     - Added QCustomPlot::toPainter method, to allow rendering with existing painter
202     - QCPItemEllipse now provides a center anchor
203
204   Bugfixes:
205     - Fixed compile error on ARM
206     - Wrong legend icons were displayed if using pixmaps for scatters that are smaller than the legend icon rect
207     - Fixed clipping inaccuracy for rotated tick labels (were hidden too early, because the non-rotated bounding box was used)
208     - Fixed bug that caused wrong clipping of axis ticks and subticks when the ticks were given manually by QCPAxis::setTickVector
209     - Fixed Qt5 crash when dragging graph out of view (iterator out of bounds in QCPGraph::getVisibleDataBounds)
210     - Fixed QCPItemText not scaling properly when using scaled raster export
211   Bugfixes after beta:
212     - Fixed bug that clipped the rightmost pixel column of tick labels when caching activated (only visible on windows for superscript exponents)
213     - Restored compatibility to Qt4.6
214     - Restored support for -no-RTTI compilation
215     - Empty manual tick labels are handled more gracefully (no QPainter qDebug messages anymore)
216     - Fixed type ambiguity in QCPLineEnding::draw causing compile error on ARM
217     - Fixed bug of grid layouts not propagating the minimum size from their child elements to the parent layout correctly
218     - Fixed bug of child elements (e.g. axis rects) of inset layouts not properly receiving mouse events
219
220   Other:
221     - Opened up non-amalgamated project structure to public via git repository
222
223 #### Version released on 09.06.12 ####
224
225   Quick Summary:
226     - Items (arrows, text,...)
227     - Layers (easier control over rendering order)
228     - New antialiasing system (Each objects controls own antialiasing with setAntialiased)
229     - Performance Improvements
230     - improved pixel-precise drawing
231     - easier shared library creation/usage
232
233   Changes that (might) break backward compatibility:
234     - enum QCPGraph::ScatterSymbol was moved to QCP namespace (now QCP::ScatterSymbol).
235       This replace should fix your code: "QCPGraph::ss" -> "QCP::ss"
236     - enum QCustomPlot::AntialiasedElement and flag QCustomPlot::AntialiasedElements was moved to QCP namespace
237       This replace should fix your code: "QCustomPlot::ae" -> "QCP::ae"
238     - the meaning of QCustomPlot::setAntialiasedElements has changed slightly: It is now an override to force elements to be antialiased. If you want to force
239       elements to not be drawn antialiased, use the new setNotAntialiasedElements. If an element is mentioned in neither of those functions, it now controls
240       its antialiasing itself via its "setAntialiased" function(s). (e.g. QCPAxis::setAntialiased(bool), QCPAbstractPlottable::setAntialiased(bool),
241       QCPAbstractPlottable::setAntialiasedScatters(bool), etc.)
242     - QCPAxis::setTickVector and QCPAxis::setTickVectorLabels no longer take a pointer but a const reference of the respective QVector as parameter.
243       (handing over a pointer didn't give any noticeable performance benefits but was inconsistent with the rest of the interface)
244     - Equally QCPAxis::tickVector and QCPAxis::tickVectorLabels don't return by pointer but by value now
245     - QCustomPlot::savePngScaled was removed, its purpose is now included as optional parameter "scale" of savePng.
246     - If you have derived from QCPAbstractPlottable: all selectTest functions now consistently take the argument "const QPointF &pos" which is the test point in pixel coordinates.
247       (the argument there was "double key, double value" in plot coordinates, before).
248     - QCPAbstractPlottable, QCPAxis and QCPLegend now inherit from QCPLayerable
249     - If you have derived from QCPAbstractPlottable: the draw method signature has changed from "draw (..) const" to "draw (..)", i.e. the method
250       is not const anymore. This allows the draw function of your plottable to perform buffering/caching operations, if necessary.
251
252   Added features:
253     - Item system: QCPAbstractItem, QCPItemAnchor, QCPItemPosition, QCPLineEnding. Allows placing of lines, arrows, text, pixmaps etc.
254       - New Items: QCPItemStraightLine, QCPItemLine, QCPItemCurve, QCPItemEllipse, QCPItemRect, QCPItemPixmap, QCPItemText, QCPItemBracket, QCPItemTracer
255       - QCustomPlot::addItem/itemCount/item/removeItem/selectedItems
256       - signals QCustomPlot::itemClicked/itemDoubleClicked
257       - the QCustomPlot interactions property now includes iSelectItems (for selection of QCPAbstractItem)
258       - QCPLineEnding. Represents the different styles a line/curve can end (e.g. different arrows, circle, square, bar, etc.), see e.g. QCPItemCurve::setHead
259     - Layer system: QCPLayerable, QCPLayer. Allows more sophisticated control over drawing order and a kind of grouping.
260       - QCPAbstractPlottable, QCPAbstractItem, QCPAxis, QCPGrid, QCPLegend are layerables and derive from QCPLayerable
261       - QCustomPlot::addLayer/moveLayer/removeLayer/setCurrentLayer/layer/currentLayer/layerCount
262       - Initially there are three layers: "grid", "main", and "axes". The "main" layer is initially empty and set as current layer, so new plottables/items are put there.
263     - QCustomPlot::viewport now makes the previously inaccessible viewport rect read-only-accessible (needed that for item-interface)
264     - PNG export now allows transparent background by calling QCustomPlot::setColor(Qt::transparent) before savePng
265     - QCPStatisticalBox outlier symbols may now be all scatter symbols, not only hardcoded circles.
266     - perfect precision of scatter symbol/error bar drawing and clipping in both antialiased and non-antialiased mode, by introducing QCPPainter
267       that works around some QPainter bugs/inconveniences. Further, more complex symbols like ssCrossSquare used to look crooked, now they look good.
268     - new antialiasing control system: Each drawing element now has its own "setAntialiased" function to control whether it is drawn antialiased.
269       - QCustomPlot::setAntialiasedElements and QCustomPlot::setNotAntialiasedElements can be used to override the individual settings.
270       - Subclasses of QCPAbstractPlottable can now use the convenience functions like applyFillAntialiasingHint or applyScattersAntialiasingHint to
271         easily make their drawing code comply with the overall antialiasing system.
272     - QCustomPlot::setNoAntialiasingOnDrag allows greatly improved performance and responsiveness by temporarily disabling all antialiasing while
273       the user is dragging axis ranges
274     - QCPGraph can now show scatter symbols at data points and hide its line (see QCPGraph::setScatterStyle, setScatterSize, setScatterPixmap, setLineStyle)
275     - Grid drawing code was sourced out from QCPAxis to QCPGrid. QCPGrid is mainly an internal class and every QCPAxis owns one. The grid interface still
276       works through QCPAxis and hasn't changed. The separation allows the grid to be drawn on a different layer as the axes, such that e.g. a graph can
277       be above the grid but below the axes.
278     - QCustomPlot::hasPlottable(plottable), returns whether the QCustomPlot contains the plottable
279     - QCustomPlot::setPlottingHint/setPlottingHints, plotting hints control details about the plotting quality/speed
280     - export to jpg and bmp added (QCustomPlot::saveJpg/saveBmp), as well as control over compression quality for png and jpg
281     - multi-select-modifier may now be specified with QCustomPlot::setMultiSelectModifier and is not fixed to Ctrl anymore
282
283   Bugfixes:
284     - fixed QCustomPlot ignores replot after it had size (0,0) even if size becomes valid again
285     - on Windows, a repaint used to be delayed during dragging/zooming of a complex plot, until the drag operation was done.
286       This was fixed, i.e. repaints are forced after a replot() call. See QCP::phForceRepaint and setPlottingHints.
287     - when using the raster paintengine and exporting to scaled PNG, pen widths are now scaled correctly (QPainter bug workaround via QCPPainter)
288     - PDF export now respects QCustomPlot background color (QCustomPlot::setColor), also Qt::transparent
289     - fixed a bug on QCPBars and QCPStatisticalBox where auto-rescaling of axis would fail when all data is very small (< 1e-11)
290     - fixed mouse event propagation bug that prevented range dragging from working on KDE (GNU/Linux)
291     - fixed a compiler warning on 64-bit systems due to pointer cast to int instead of quintptr in a qDebug output
292
293   Other:
294     - Added support for easier shared library creation (including examples for compiling and using QCustomPlot as shared library)
295     - QCustomPlot now has the Qt::WA_OpaquePaintEvent widget attribute (gives slightly improved performance).
296     - QCP::aeGraphs (enum QCP::AntialiasedElement, previously QCustomPlot::aeGraphs) has been marked deprecated since version 02.02.12 and
297       was now removed. Use QCP::aePlottables instead.
298     - optional performance-quality-tradeoff for solid graph lines (see QCustomPlot::setPlottingHints).
299     - marked data classes and QCPRange as Q_MOVABLE_TYPE
300     - replaced usage of own macro FUNCNAME with Qt macro Q_FUNC_INFO
301     - QCustomPlot now returns a minimum size hint of 50*50
302
303 #### Version released on 31.03.12 ####
304
305   Changes that (might) break backward compatibility:
306   - QCPAbstractLegendItem now inherits from QObject
307   - mousePress, mouseMove and mouseRelease signals are now emitted before and not after any QCustomPlot processing (range dragging, selecting, etc.)
308
309   Added features:
310   - Interaction system: now allows selecting of objects like plottables, axes, legend and plot title, see QCustomPlot::setInteractions documentation
311   - Interaction system for plottables:
312     - setSelectable, setSelected, setSelectedPen, setSelectedBrush, selectTest on QCPAbstractPlottable and all derived plottables
313     - setSelectionTolerance on QCustomPlot
314     - selectedPlottables and selectedGraphs on QCustomPlot (returns the list of currently selected plottables/graphs)
315   - Interaction system for axes:
316     - setSelectable, setSelected, setSelectedBasePen, setSelectedTickPen, setSelectedSubTickPen, setSelectedLabelFont, setSelectedTickLabelFont,
317       setSelectedLabelColor, setSelectedTickLabelColor, selectTest on QCPAxis
318     - selectedAxes on QCustomPlot (returns a list of the axes that currently have selected parts)
319   - Interaction system for legend:
320     - setSelectable, setSelected, setSelectedBorderPen, setSelectedIconBorderPen, setSelectedBrush, setSelectedFont, setSelectedTextColor, selectedItems on QCPLegend
321     - setSelectedFont, setSelectedTextColor, setSelectable, setSelected on QCPAbstractLegendItem
322     - selectedLegends on QCustomPlot
323   - Interaction system for title:
324     - setSelectedTitleFont, setSelectedTitleColor, setTitleSelected on QCustomPlot
325   - new signals in accordance with the interaction system:
326     - selectionChangedByUser on QCustomPlot
327     - selectionChanged on QCPAbstractPlottable
328     - selectionChanged on QCPAxis
329     - selectionChanged on QCPLegend and QCPAbstractLegendItem
330     - plottableClick, legendClick, axisClick, titleClick, plottableDoubleClick, legendDoubleClick, axisDoubleClick, titleDoubleClick on QCustomPlot
331   - QCustomPlot::deselectAll (deselects everything, i.e. axes and plottables)
332   - QCPAbstractPlottable::pixelsToCoords (inverse function to the already existing coordsToPixels function)
333   - QCPRange::contains(double value)
334   - QCPAxis::setLabelColor and setTickLabelColor
335   - QCustomPlot::setTitleColor
336   - QCustomPlot now emits beforeReplot and afterReplot signals. Note that it is safe to make two customPlots mutually call eachothers replot functions
337     in one of these slots, it will not cause an infinite loop. (usefull for synchronizing axes ranges between two customPlots, because setRange alone doesn't replot)
338   - If the Qt version is 4.7 or greater, the tick label strings in date-time-mode now support sub-second accuracy (e.g. with format like "hh:mm:ss.zzz").
339
340   Bugfixes:
341   - tick labels/margins should no longer oscillate by one pixel when dragging range or replotting repeatedly while changing e.g. data. This
342     was caused by a bug in Qt's QFontMetrics::boundingRect function when the font has an integer point size (probably some rounding problem).
343     The fix hence consists of creating a temporary font (only for bounding-box calculation) which is 0.05pt larger and thus avoiding the
344     jittering rounding outcome.
345   - tick label, axis label and plot title colors used to be undefined. This was fixed by providing explicit color properties.
346     
347   Other:
348   - fixed some glitches in the documentation
349   - QCustomPlot::replot and QCustomPlot::rescaleAxes are now slots
350
351 #### Version released on 02.02.12 ####
352
353   Changes that break backward compatibility:
354   - renamed all secondary classes from QCustomPlot[...] to QCP[...]:
355     QCustomPlotAxis -> QCPAxis
356     QCustomPlotGraph -> QCPGraph
357     QCustomPlotRange -> QCPRange
358     QCustomPlotData -> QCPData
359     QCustomPlotDataMap -> QCPDataMap
360     QCustomPlotLegend -> QCPLegend
361     QCustomPlotDataMapIterator -> QCPDataMapIterator
362     QCustomPlotDataMutableMapIterator -> QCPDataMutableMapIterator
363     A simple search and replace on all code files should make your code run again, e.g. consider the regex "QCustomPlot(?=[AGRDL])" -> "QCP".
364     Make sure not to just replace "QCustomPlot" with "QCP" because the main class QCustomPlot hasn't changed to QCP.
365     This change was necessary because class names became unhandy, pardon my bad naming decision in the beginning.
366   - QCPAxis::tickLength() and QCPAxis::subTickLength() now each split into two functions for inward and outward ticks (tickLengthIn/tickLengthOut).
367   - QCPLegend now uses QCPAbstractLegendItem to carry item data (before, the legend was passed QCPGraphs directly)
368   - QCustomPlot::addGraph() now doesn't return the index of the created graph anymore, but a pointer to the created QCPGraph.
369   - QCustomPlot::setAutoAddGraphToLegend is replaced by setAutoAddPlottableToLegend
370
371   Added features:
372   - Reversed axis range with QCPAxis::setRangeReversed(bool)
373   - Tick labels are now only drawn if not clipped by the viewport (widget border) on the sides (e.g. left and right on a horizontal axis).
374   - Zerolines. Like grid lines only with a separate pen (QCPAxis::setZeroLinePen), at tick position zero.
375   - Outward ticks. QCPAxis::setTickLength/setSubTickLength now accepts two arguments for inward and outward tick length. This doesn't break
376     backward compatibility because the second argument (outward) has default value zero and thereby a call with one argument hasn't changed its meaning.
377   - QCPGraph now inherits from QCPAbstractPlottable
378   - QCustomPlot::addPlottable/plottable/removePlottable/clearPlottables added to interface with the new QCPAbstractPlottable-based system. The simpler interface
379     which only acts on QCPGraphs (addGraph, graph, removeGraph, etc.) was adapted internally and is kept for backward compatibility and ease of use.
380   - QCPLegend items for plottables (e.g. graphs) can automatically wrap their texts to fit the widths, see QCPLegend::setMinimumSize and QCPPlottableLegendItem::setTextWrap.
381   - QCustomPlot::rescaleAxes. Adapts axis ranges to show all plottables/graphs, by calling QCPAbstractPlottable::rescaleAxes on all plottables in the plot.
382   - QCPCurve. For plotting of parametric curves.
383   - QCPBars. For plotting of bar charts.
384   - QCPStatisticalBox. For statistical box plots.
385
386   Bugfixes:
387   - Fixed QCustomPlot::removeGraph(int) not being able to remove graph index 0
388   - made QCustomPlot::replot() abort painting when painter initialization fails (e.g. because width/height of QCustomPlot is zero)
389   - The distance of the axis label from the axis ignored the tick label padding, this could have caused overlapping axis labels and tick labels
390   - fixed memory leak in QCustomPlot (dtor didn't delete legend)
391   - fixed bug that prevented QCPAxis::setRangeLower/Upper from setting the value to exactly 0.
392
393   Other:
394   - Changed default error bar handle size (QCustomPlotGraph::setErrorBarSize) from 4 to 6.
395   - Removed QCustomPlotDataFetcher. Was deprecated and not used class.
396   - Extended documentation, especially class descriptions.
397
398 #### Version released on 15.01.12 ####
399
400   Changes that (might) break backward compatibility:
401   - QCustomPlotGraph now inherits from QObject
402   
403   Added features:
404   - Added axis background pixmap (QCustomPlot::setAxisBackground, setAxisBackgroundScaled, setAxisBackgroundScaledMode)
405   - Added width and height parameter on PDF export function QCustomPlot::savePdf(). This now allows PDF export to
406     have arbitrary dimensions, independent of the current geometry of the QCustomPlot.
407   - Added overload of QCustomPlot::removeGraph that takes QCustomPlotGraph* as parameter, instead the index of the graph
408   - Added all enums to the Qt meta system via Q_ENUMS(). The enums can now be transformed
409     to QString values easily with the Qt meta system, which makes saving state e.g. as XML
410     significantly nicer.
411   - added typedef QMapIterator<double,QCustomPlotData> QCustomPlotDataMapIterator
412     and typedef QMutableMapIterator<double,QCustomPlotData> QCustomPlotDataMutableMapIterator
413     for improved information hiding, when using iterators outside QCustomPlot code
414   
415   Bugfixes:
416   - Fixed savePngScaled. Axis/label drawing functions used to reset the painter transform
417     and thereby break savePngScaled. Now they buffer the current transform and restore it afterwards.
418   - Fixed some glitches in the doxygen comments (affects documentation only)
419   
420   Other:
421   - Changed the default tickLabelPadding of top axis from 3 to 6 pixels. Looks better.
422   - Changed the default QCustomPlot::setAntialiasedElements setting: Graph fills are now antialiased
423     by default. That's a bit slower, but makes fill borders look better.
424
425 #### Version released on 19.11.11 ####
426
427   Changes that break backward compatibility:
428   - QCustomPlotAxis: tickFont and setTickFont renamed to tickLabelFont and setTickLabelFont (for naming consistency)
429
430   Other:
431   - QCustomPlotAxis: Added rotated tick labels, see setTickLabelRotation
432