Since this version, `guiqwt` is compatible with PyQt4 API 1 *and* API 2.
Please read carefully the coding guidelines which have been recently added to
the documentation.
Bug fixes:
* Sift/bugfix: difference/division operations were performed backwards (s001-s000 instead of s000-s001)
* Sift: working directory is now changed after opening/saving signal/image
* label.RangeComputation: fixed bug if compute function was returning more than one result and when X-range was empty (e.g. selection is outside curve X-axis values)
* curve.CurvePlot: fixed pan/zoom erratic behavior for curves associated with log-scale axes
* baseplot.BasePlot: now performing an autoscale after changing axis lin/log scale (set_axis_scale/set_scales)
* annotations.AnnotatedSegment/CRITICAL: fixed an error (introduced in v2.1.0) when computing segment length (returned length was twice lower than the real value)
* image.XYImageItem (Contributor: Carlos Pascual): fixed bug when Y-axis array is of dimension Ni+1 (where Ni is the number of rows of the image pixel data array)
* Fixed compatiblity issues with PyQt v4.4 (Contributor: Carlos Pascual)
* (minor) Fixed label text (too long) of 2D-Histogram items background color in shown DataSet
* guiqwt.io.array_to_dicomfile/bugfix: Smallest/LargestImagePixelValue fields had wrong type (str instead of int)
* LabelTool: label was not moved as expected (default: now, label is *not* attached to canvas)
* tools.ImageStatsTool/bugfix: image title was not shown
* CurvePlot: autoscale for log scales / bugfix: handling zero values
* tools.AxisScaleTool/bugfix: when updating its status, the tool was setting the axes scales even when not necessary, hence causing an autoscale since changeset 1159 (687e22074f8d)
* ItemCenterTool was not working as expected when centering annotated shapes having a specific transform matrix
* XYImageItem objects: re-added cross-section support (removed accidently)
* Curve autoscale method (curve.CurvePlot/ErrorBarCurvePlot):
* now handles non-finite values (NaNs and infs)
* logarithmic scales: now excludes zero/negative values to avoid confusing the autoscale algorithm
Possible API compatibility issues:
* Moved functions from guiqwt.io to new module guiqwt.qthelpers: exec_image_save_dialog, exec_image_open_dialog, exec_images_open_dialog
* Markers:
* label and constraint callbacks take now 2 arguments (the marker's coordinates) instead of 3
* removed method 'move_point_to': use new method 'set_pos' instead (takes two arguments: x, y)
* Removed cursors introduced in v2.1.0:
* These cursors have been replaced by shapes.Marker (i.e. objects derived from QwtPlotMarker)
* Removed signals.SIG_CURSOR_MOVED, shapes.HorizontalCursor, shapes.VerticalCursor, annotations.AnnotatedHCursor, annotations.AnnotatedVCursor and associated builder methods (annotated_vcursor, annotated_hcursor)
* Builder methods vcursor and hcursor were slightly changed (see tests/cursors.py to adapt your code)
* Use markers instead of cursors (and SIG_MARKER_CHANGED instead of SIG_CURSOR_MOVED -- arguments are not identical, see signals.py):
* base object: shapes.Marker
* associated builder methods: marker, vcursor, hcursor, xcursor (see tests/cursors.py)
* label.LabelItem: renamed method 'set_position' to 'set_pos' (consistency with shapes.PointShape, ...)
* Annotations:
* method `get_center` now returns coordinates *without* applying the transform matrix, i.e. in pure plot coordinates
* the following methods were renamed to highlight the fact that the transform matrix is applied in those computations:
* `get_center` was renamed to `get_tr_center`
* `get_size` was renamed to `get_tr_size`
* `get_angle` was renamed to `get_tr_angle`
* `get_diameter` was renamed to `get_tr_diameter`
* `get_length` was renamed to `get_tr_length`
* Removed the following deprecated classes in `guiqwt.plot`:
* CurvePlotWidget (renamed to CurveWidget)
* CurvePlotDialog (renamed to CurveDialog)
* ImagePlotWidget (renamed to ImageWidget)
* ImagePlotDialog (renamed to ImageDialog)
Other changes:
* Added module qthelpers: image open/save dialog helpers (moved from guiqwt.io to avoid using GUIs in this module)
* Annotation/default style: changed string formatting from '%d' to '%.1f'
* baseplot.BasePlot.add_item: when adding the same item twice, printing a warning message
* Using new guidata.qt PyQt4->PySide transitional package
* Sift: ROI extraction ("Crop"-->"ROI extraction" + added the same feature for signals), added "swap axes" operation for signals/images, added "normalize" processing for signals only
* Sift: added linear calibration (signals: X/Y axes, images: Z axis)
* Interactive tools: added signal SIG_TOOL_JOB_FINISHED emitted when tool has finished its job + if SWITCH_TO_DEFAULT_TOOL class attribute is True, switching to the default interactive tool
* Buider: added cross cursor and marker constructors (builder.make.marker and builder.make.xcursor, see tests/cursors.py)
* Added SignalStatsTool (standard curve tool) to show ymin, ymax, ymean, ... on a selected curve ROI
* Sift: added support for curve data with error bars (I/O + operations + processing)
* Added coding guidelines to the documentation
* builder/make.computation/computation2d: added title option (defaults to object's (curve or image) label)
* plot.CurvePlot, plot.CurveWidget: added keyword arguments 'xunit' and 'yunit' to set axes units (same syntax as labels)
* plot.ImagePlot, plot.ImageWidget: added keyword arguments 'xunit', 'yunit' and 'zunit' to set axes units (same syntax as labels)
* pyplot.imshow: added keyword argument 'mask' to support masked arrays display