diff layer/ColourMapper.h @ 1362:d79e21855aef

Add mechanism for saving/loading colour maps by name/id rather than by numerical index, for future compatibility when adding to or changing the supported colour maps. Add two new colour maps (and one old one). Write out backward-compatible numerical indices for use when reloading in older versions. Also add a mechanism to invert the colour map, though I don't think it turns out useful enough to include in the UI.
author Chris Cannam
date Thu, 18 Oct 2018 13:21:56 +0100
parents 73d43e410a6b
children
line wrap: on
line diff
--- a/layer/ColourMapper.h	Fri Oct 12 11:17:29 2018 +0100
+++ b/layer/ColourMapper.h	Thu Oct 18 13:21:56 2018 +0100
@@ -27,13 +27,16 @@
 class ColourMapper
 {
 public:
-    ColourMapper(int map, double minValue, double maxValue);
+    ColourMapper(int map,
+                 bool inverted,
+                 double minValue,
+                 double maxValue);
     ~ColourMapper();
 
-    ColourMapper(const ColourMapper &) = default;
-    ColourMapper &operator=(const ColourMapper &) = default;
+    ColourMapper(const ColourMapper &) =default;
+    ColourMapper &operator=(const ColourMapper &) =default;
 
-    enum StandardMap {
+    enum ColourMap {
         Green,
         Sunset,
         WhiteOnBlack,
@@ -45,25 +48,86 @@
         Banded,
         Highlight,
         Printer,
-        HighGain
+        HighGain,
+        BlueOnBlack,
+        Cividis,
+        Magma
     };
 
     int getMap() const { return m_map; }
+    bool isInverted() const { return m_inverted; }
     double getMinValue() const { return m_min; }
     double getMaxValue() const { return m_max; }
 
+    /**
+     * Return the number of known colour maps.
+     */
     static int getColourMapCount();
-    static QString getColourMapName(int n);
 
+    /**
+     * Return a human-readable label for the colour map with the given
+     * index. This may have been subject to translation.
+     */
+    static QString getColourMapLabel(int n);
+
+    /**
+     * Return a machine-readable id string for the colour map with the
+     * given index. This is not translated and is intended for use in
+     * file I/O.
+     */
+    static QString getColourMapId(int n);
+
+    /**
+     * Return the index for the colour map with the given
+     * machine-readable id string, or -1 if the id is not recognised.
+     */
+    static int getColourMapById(QString id);
+
+    /**
+     * Older versions of colour-handling code save and reload colour
+     * maps by numerical index and can't properly handle situations in
+     * which the index order changes between releases, or new indices
+     * are added. So when we save a colour map by id, we should also
+     * save a compatibility value that can be re-read by such
+     * code. This value is an index into the series of colours used by
+     * pre-3.2 SV code, namely (Default/Green, Sunset, WhiteOnBlack,
+     * BlackOnWhite, RedOnBlue, YellowOnBlack, BlueOnBlack,
+     * FruitSalad, Banded, Highlight, Printer, HighGain). It should
+     * represent the closest equivalent to the current colour scheme
+     * available in that set. This function returns that index.
+     */    
+    static int getBackwardCompatibilityColourMap(int n);
+    
+    /**
+     * Map the given value to a colour. The value will be clamped to
+     * the range minValue to maxValue (where both are drawn from the
+     * constructor arguments).
+     */
     QColor map(double value) const;
 
-    QColor getContrastingColour() const; // for cursors etc
+    /**
+     * Return a colour that contrasts somewhat with the colours in the
+     * map, so as to be used for cursors etc.
+     */
+    QColor getContrastingColour() const;
+
+    /**
+     * Return true if the colour map is intended to be placed over a
+     * light background, false otherwise. This is typically true if
+     * the colours corresponding to higher values are darker than
+     * those corresponding to lower values.
+     */
     bool hasLightBackground() const;
 
+    /**
+     * Return a pixmap of the given size containing a preview swatch
+     * for the colour map.
+     */
     QPixmap getExamplePixmap(QSize size) const;
     
 protected:
     int m_map;
+    bool m_inverted;
     double m_min;
     double m_max;
 };