Commit 4b755107 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

move slot dimension configuration into slot

parent 400079f6
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ ReturnCode parse_classlike(

template <typename T>
struct Slot {
  std::string key;
  std::optional<DimensionConfig> dimension;
  std::optional<T> constant;
};

@@ -96,7 +96,6 @@ template <typename T>
ReturnCode resolve_slot(
    const Slot<T>& slot,
    std::function<ReturnCode (const DimensionConfig&, const Value&, T*)> map,
    const DimensionMap& dimensions,
    const DataFrame& data,
    size_t data_idx,
    T* val);
+7 −11
Original line number Diff line number Diff line
@@ -28,13 +28,13 @@
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#pragma once

namespace plotfx {

template <typename T>
ReturnCode resolve_slot(
    const Slot<T>& slot,
    std::function<ReturnCode (const DimensionConfig&, const Value&, T*)> map,
    const DimensionMap& dimensions,
    const DataFrame& data,
    size_t data_idx,
    T* val) {
@@ -43,14 +43,9 @@ ReturnCode resolve_slot(
    return OK;
  }

  if (!slot.key.empty()) {
    auto dimension = dimension_find(dimensions, slot.key);
    if (!dimension) {
      return ReturnCode::errorf("EARG", "dimension not found: $0", slot.key);
    }

    const auto& data_val = data_lookup(data, slot.key, data_idx);
    if (auto rc = map(*dimension, data_val, val); !rc) {
  if (slot.dimension) {
    const auto& data_val = data_lookup(data, slot.dimension->key, data_idx);
    if (auto rc = map(*slot.dimension, data_val, val); !rc) {
      return rc;
    }

@@ -66,8 +61,9 @@ ReturnCode configure_slot(
    DimensionMap* dimensions,
    Slot<T>* slot) {
  if (plist::is_value(prop) && prop.value.size() > 0 && prop.value[0] == '$') {
    slot->key = prop.value.substr(1);
    dimension_add(dimensions, slot->key);
    DimensionConfig d;
    d.key = prop.value.substr(1);
    slot->dimension = d;
  }

  return OK;
+6 −1
Original line number Diff line number Diff line
@@ -101,7 +101,6 @@ ReturnCode draw_lines(
    if (auto rc = resolve_slot(
          config.line_color,
          dimension_map_color_discrete(config.line_color_palette),
          plot.dimensions,
          plot.data,
          group.begin, // FIXME
          &color); !rc) {
@@ -146,6 +145,12 @@ ReturnCode configure(const plist::Property& prop, const Document& doc, PlotConfi
    return rc;
  }

  if (layer.line_color.dimension) {
    if (auto rc = dimension_resolve(config->data, &*layer.line_color.dimension); !rc) {
      return rc;
    }
  }

  config->layers.emplace_back(PlotLayer {
    .draw = std::bind(
        &draw_lines,
+6 −1
Original line number Diff line number Diff line
@@ -87,7 +87,6 @@ ReturnCode draw_points(
    if (auto rc = resolve_slot(
          config.point_color,
          dimension_map_color_discrete(config.point_color_palette),
          plot.dimensions,
          plot.data,
          i,
          &style.color); !rc) {
@@ -120,6 +119,12 @@ ReturnCode configure(const plist::Property& prop, const Document& doc, PlotConfi
    return rc;
  }

  if (layer.point_color.dimension) {
    if (auto rc = dimension_resolve(config->data, &*layer.point_color.dimension); !rc) {
      return rc;
    }
  }

  config->layers.emplace_back(PlotLayer {
    .draw = std::bind(
        &draw_points,