Commit 729f01ef authored by Paul Asmuth's avatar Paul Asmuth
Browse files

parse AxisMode

parent ec1340e8
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -37,5 +37,22 @@ ReturnCode configureProperties(
  return ReturnCode::success();
}

template <typename T>
using EnumDefinitions = std::unordered_map<std::string, T>;

template<typename T>
ReturnCode parseEnum(
    const EnumDefinitions<T>& defs,
    const std::string& str,
    T* value) {
  const auto& def = defs.find(str);
  if (def == defs.end()) {
    return ReturnCode::errorf("EPARSE", "invalid value '$0'", str);
  }

  *value = def->second;
  return ReturnCode::success();
}

} // namespace signaltk
+21 −1
Original line number Diff line number Diff line
@@ -10,18 +10,31 @@
#include "plot_axis.h"
#include <assert.h>
#include <elements/plot/plot_element.h>
#include <elements/element_config_helpers.h>
#include <graphics/text.h>
#include <graphics/brush.h>

namespace signaltk {

AxisDefinition::AxisDefinition() :
    mode(AxisMode::DISABLED),
    mode(AxisMode::OFF),
    label_placement(AxisLabelPlacement::OFF),
    label_padding_horiz_rem(kDefaultLabelPaddingHorizREM),
    label_padding_vert_rem(kDefaultLabelPaddingVertREM),
    tick_length_rem(kDefaultTickLengthREM) {}

ReturnCode parseAxisMode(
    const std::string& str,
    AxisMode* value) {
  static const EnumDefinitions<AxisMode> defs = {
    { "auto", AxisMode::AUTO },
    { "off", AxisMode::OFF },
    { "manual", AxisMode::MANUAL },
  };

  return parseEnum(defs, str, value);
}

static Status renderAxisVertical(
    const AxisDefinition& axis_config,
    double x,
@@ -136,6 +149,13 @@ Status renderAxis(
    const AxisDefinition& axis,
    AxisPosition axis_position,
    Layer* frame) {
  switch (axis.mode) {
    case AxisMode::OFF:
      return OK;
    default:
      break;
  };

  int padding = 80;

  Status rc;
+6 −1
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@
#include <vector>
#include <graphics/layer.h>
#include <graphics/viewport.h>
#include <utils/return_code.h>

namespace signaltk {

@@ -30,7 +31,7 @@ enum class AxisPosition {
};

enum class AxisMode {
  DISABLED,
  OFF,
  AUTO,
  MANUAL
};
@@ -55,6 +56,10 @@ struct AxisDefinition {
  double tick_length_rem;
};

ReturnCode parseAxisMode(
    const std::string& str,
    AxisMode* value);

Status renderAxis(
    const AxisDefinition& axis,
    AxisPosition axis_position,
+13 −29
Original line number Diff line number Diff line
@@ -14,59 +14,43 @@ namespace signaltk {

PlotConfig::PlotConfig() :
    x_domain(PlotDomain::LINEAR),
    y_domain(PlotDomain::LINEAR),
    axis_top_enabled(true),
    axis_right_enabled(true),
    axis_bottom_enabled(true),
    axis_left_enabled(true) {}
    y_domain(PlotDomain::LINEAR) {}

ReturnCode renderPlot(const PlotConfig& config, Layer* frame) {
  // render axes
  if (config.axis_top_enabled) {
  if (auto rc = renderAxis(config.axis_top, AxisPosition::TOP, frame); rc) {
    return rc;
  }
  }

  if (config.axis_right_enabled) {
  if (auto rc = renderAxis(config.axis_right, AxisPosition::RIGHT, frame); rc) {
    return rc;
  }
  }

  if (config.axis_bottom_enabled) {
  if (auto rc = renderAxis(config.axis_bottom, AxisPosition::BOTTOM, frame); rc) {
    return rc;
  }
  }

  if (config.axis_left_enabled) {
  if (auto rc = renderAxis(config.axis_left, AxisPosition::LEFT, frame); rc) {
    return rc;
  }
  }

  return ReturnCode::success();
}

ReturnCode configurePlotAxisTop(const std::string& value, PlotConfig* config) {
  config->axis_top_enabled = (value == "on");
  return ReturnCode::success();
  return parseAxisMode(value, &config->axis_top.mode);
}

ReturnCode configurePlotAxisRight(const std::string& value, PlotConfig* config) {
  config->axis_right_enabled = (value == "on");
  return ReturnCode::success();
  return parseAxisMode(value, &config->axis_right.mode);
}

ReturnCode configurePlotAxisBottom(const std::string& value, PlotConfig* config) {
  config->axis_bottom_enabled = (value == "on");
  return ReturnCode::success();
  return parseAxisMode(value, &config->axis_bottom.mode);
}

ReturnCode configurePlotAxisLeft(const std::string& value, PlotConfig* config) {
  config->axis_left_enabled = (value == "on");
  return ReturnCode::success();
  return parseAxisMode(value, &config->axis_left.mode);
}

ReturnCode configurePlot(const PropertyList& plist, PlotConfig* config) {
+0 −4
Original line number Diff line number Diff line
@@ -27,13 +27,9 @@ struct PlotConfig {
  std::optional<double> y_min;
  std::optional<double> y_max;
  AxisDefinition axis_top;
  bool axis_top_enabled;
  AxisDefinition axis_right;
  bool axis_right_enabled;
  AxisDefinition axis_bottom;
  bool axis_bottom_enabled;
  AxisDefinition axis_left;
  bool axis_left_enabled;
};

ReturnCode renderPlot(const PlotConfig& config, Layer* frame);
Loading