Mercurial > hg > svgui
comparison layer/TimeValueLayer.cpp @ 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 | 1d7921b1852f |
children | a1393b4384a5 |
comparison
equal
deleted
inserted
replaced
1361:2e3b3fadba27 | 1362:d79e21855aef |
---|---|
58 m_editing(false), | 58 m_editing(false), |
59 m_originalPoint(0, 0.0, tr("New Point")), | 59 m_originalPoint(0, 0.0, tr("New Point")), |
60 m_editingPoint(0, 0.0, tr("New Point")), | 60 m_editingPoint(0, 0.0, tr("New Point")), |
61 m_editingCommand(0), | 61 m_editingCommand(0), |
62 m_colourMap(0), | 62 m_colourMap(0), |
63 m_colourInverted(false), | |
63 m_plotStyle(PlotConnectedPoints), | 64 m_plotStyle(PlotConnectedPoints), |
64 m_verticalScale(AutoAlignScale), | 65 m_verticalScale(AutoAlignScale), |
65 m_drawSegmentDivisions(true), | 66 m_drawSegmentDivisions(true), |
66 m_derivative(false), | 67 m_derivative(false), |
67 m_scaleMinimum(0), | 68 m_scaleMinimum(0), |
221 QString | 222 QString |
222 TimeValueLayer::getPropertyValueLabel(const PropertyName &name, | 223 TimeValueLayer::getPropertyValueLabel(const PropertyName &name, |
223 int value) const | 224 int value) const |
224 { | 225 { |
225 if (name == "Colour" && m_plotStyle == PlotSegmentation) { | 226 if (name == "Colour" && m_plotStyle == PlotSegmentation) { |
226 return ColourMapper::getColourMapName(value); | 227 return ColourMapper::getColourMapLabel(value); |
227 } else if (name == "Plot Type") { | 228 } else if (name == "Plot Type") { |
228 switch (value) { | 229 switch (value) { |
229 default: | 230 default: |
230 case 0: return tr("Points"); | 231 case 0: return tr("Points"); |
231 case 1: return tr("Stems"); | 232 case 1: return tr("Stems"); |
894 #ifdef DEBUG_TIME_VALUE_LAYER | 895 #ifdef DEBUG_TIME_VALUE_LAYER |
895 cerr << "TimeValueLayer::getColourForValue: min " << min << ", max " | 896 cerr << "TimeValueLayer::getColourForValue: min " << min << ", max " |
896 << max << ", log " << log << ", value " << val << endl; | 897 << max << ", log " << log << ", value " << val << endl; |
897 #endif | 898 #endif |
898 | 899 |
899 QColor solid = ColourMapper(m_colourMap, min, max).map(val); | 900 QColor solid = ColourMapper(m_colourMap, m_colourInverted, min, max).map(val); |
900 return QColor(solid.red(), solid.green(), solid.blue(), 120); | 901 return QColor(solid.red(), solid.green(), solid.blue(), 120); |
901 } | 902 } |
902 | 903 |
903 int | 904 int |
904 TimeValueLayer::getDefaultColourHint(bool darkbg, bool &impose) | 905 TimeValueLayer::getDefaultColourHint(bool darkbg, bool &impose) |
1905 | 1906 |
1906 void | 1907 void |
1907 TimeValueLayer::toXml(QTextStream &stream, | 1908 TimeValueLayer::toXml(QTextStream &stream, |
1908 QString indent, QString extraAttributes) const | 1909 QString indent, QString extraAttributes) const |
1909 { | 1910 { |
1910 SingleColourLayer::toXml(stream, indent, | 1911 QString s; |
1911 extraAttributes + | 1912 |
1912 QString(" colourMap=\"%1\" plotStyle=\"%2\" verticalScale=\"%3\" scaleMinimum=\"%4\" scaleMaximum=\"%5\" drawDivisions=\"%6\" derivative=\"%7\" ") | 1913 s += QString("plotStyle=\"%1\" " |
1913 .arg(m_colourMap) | 1914 "verticalScale=\"%2\" " |
1914 .arg(m_plotStyle) | 1915 "scaleMinimum=\"%3\" " |
1915 .arg(m_verticalScale) | 1916 "scaleMaximum=\"%4\" " |
1916 .arg(m_scaleMinimum) | 1917 "drawDivisions=\"%5\" " |
1917 .arg(m_scaleMaximum) | 1918 "derivative=\"%6\" ") |
1918 .arg(m_drawSegmentDivisions ? "true" : "false") | 1919 .arg(m_plotStyle) |
1919 .arg(m_derivative ? "true" : "false")); | 1920 .arg(m_verticalScale) |
1921 .arg(m_scaleMinimum) | |
1922 .arg(m_scaleMaximum) | |
1923 .arg(m_drawSegmentDivisions ? "true" : "false") | |
1924 .arg(m_derivative ? "true" : "false"); | |
1925 | |
1926 // New-style colour map attribute, by string id rather than by | |
1927 // number | |
1928 | |
1929 s += QString("fillColourMap=\"%1\" ") | |
1930 .arg(ColourMapper::getColourMapId(m_colourMap)); | |
1931 | |
1932 // Old-style colour map attribute | |
1933 | |
1934 s += QString("colourMap=\"%1\" ") | |
1935 .arg(ColourMapper::getBackwardCompatibilityColourMap(m_colourMap)); | |
1936 | |
1937 SingleColourLayer::toXml(stream, indent, extraAttributes + " " + s); | |
1920 } | 1938 } |
1921 | 1939 |
1922 void | 1940 void |
1923 TimeValueLayer::setProperties(const QXmlAttributes &attributes) | 1941 TimeValueLayer::setProperties(const QXmlAttributes &attributes) |
1924 { | 1942 { |
1925 SingleColourLayer::setProperties(attributes); | 1943 SingleColourLayer::setProperties(attributes); |
1926 | 1944 |
1927 bool ok, alsoOk; | 1945 bool ok, alsoOk; |
1928 | 1946 |
1929 int cmap = attributes.value("colourMap").toInt(&ok); | 1947 QString colourMapId = attributes.value("fillColourMap"); |
1930 if (ok) setFillColourMap(cmap); | 1948 int colourMap = ColourMapper::getColourMapById(colourMapId); |
1949 if (colourMap >= 0) { | |
1950 setFillColourMap(colourMap); | |
1951 } else { | |
1952 colourMap = attributes.value("colourMap").toInt(&ok); | |
1953 if (ok && colourMap < ColourMapper::getColourMapCount()) { | |
1954 setFillColourMap(colourMap); | |
1955 } | |
1956 } | |
1931 | 1957 |
1932 PlotStyle style = (PlotStyle) | 1958 PlotStyle style = (PlotStyle) |
1933 attributes.value("plotStyle").toInt(&ok); | 1959 attributes.value("plotStyle").toInt(&ok); |
1934 if (ok) setPlotStyle(style); | 1960 if (ok) setPlotStyle(style); |
1935 | 1961 |