Program Listing for File Configuration.h

Program Listing for File Configuration.h#

Return to documentation for file (src/main/cpp/lib/Configuration.h)

#ifndef CONFIGURATION_H_
#define CONFIGURATION_H_

#include <string>
#include <vector>
#include <regex>
#include <memory>
#include <functional>
#include <clocale>
#include "Utils.h"
#include "DrawerProperties.h"
#include "TextProperties.h"
#include "Triangle.h"

#include "libmoovie_export.h"

#define MOOVIE_CONF_LINE(key, value) (("moovie." TO_STRING(key) "=") + (value))

class Configuration
{
public:
  static const std::array<Color, 10> GLOW_10;

  static const Triangle<Color, 12> SET3;

  static const Color SET2_3_1;
  static const Color SET2_3_2;
  static const Color SET2_3_3;

private:
  static LIBMOOVIE_EXPORT std::shared_ptr<Configuration> instance;

  std::string m_input_file;
  std::string m_output_file = "image.svg";

  int m_width = 0;
  int m_height = 0;

  double m_output_angle_span = 160;
  double m_output_inner_radius = 160;
  double m_output_thickness = 5;
  double m_grid_size = 150;
  int m_num_major_sections_grid = 10;
  int m_num_minor_sections_grid = 10;
  double m_min_grid_fill_ratio = 0.9;

  double m_input_inner_radius = 180;
  double m_input_thickness = 5;
  double m_input_separation_angle = 5;
  int m_num_major_sections_axis = 10;
  int m_num_minor_sections_axis = 10;

  bool m_histograms_enabled = true;
  int m_num_histogram_classes = 10;
  double m_histogram_height = 20;
  Color m_histogram_background =
    { 0, 0, 0, .1 };
  Color m_histogram_fill =
    { .5, .5, .5, 1 };

  int m_relevant_places = 3;

  DrawerProperties<> m_prop_thick =
    { 0.5, Color::BLACK, Color::BLACK };
  DrawerProperties<> m_prop_thin =
    { 0.1, Color::BLACK, Color::BLACK };

  TextProperties m_prop_scale_label =
    { "Liberation Serif", 5 };
  TextProperties m_prop_axis_label =
    { "Liberation Serif", 10 };

public:
  inline static Configuration &
  get_instance ()
  {
    if (instance.get () == nullptr)
      {
    throw std::bad_function_call ();
      }

    return *instance;
  }

  static void
  initialize (const std::string & fname, const std::string & cpath);

  static void
  initialize (const std::string & fname);

  static void
  save_to_file (const std::string & cpath);

  // General

  inline const std::string &
  get_input_file () const
  {
    return m_input_file;
  }

  inline void
  set_input_file (const std::string& input_file)
  {
    m_input_file = input_file;
  }

  inline const std::string &
  get_output_file () const
  {
    return m_output_file;
  }

  inline void
  set_output_file (const std::string & output_file)
  {
    m_output_file = output_file;
  }

  inline int
  get_width () const
  {
    return m_width;
  }

  inline void
  set_width (int width)
  {
    m_width = width;
  }

  inline int
  get_height () const
  {
    return m_height;
  }

  inline void
  set_height (int height)
  {
    m_height = height;
  }

  // OutputGrid

  double
  get_output_angle_span () const
  {
    return m_output_angle_span;
  }

  void
  set_output_angle_span (double output_angle_span)
  {
    m_output_angle_span = output_angle_span;
  }

  double
  get_output_inner_radius () const
  {
    return m_output_inner_radius;
  }

  void
  set_output_inner_radius (double output_inner_radius)
  {
    m_output_inner_radius = output_inner_radius;
  }

  double
  get_output_thickness () const
  {
    return m_output_thickness;
  }

  void
  set_output_thickness (double output_thickness)
  {
    m_output_thickness = output_thickness;
  }

  double
  get_grid_size () const
  {
    return m_grid_size;
  }

  void
  set_grid_size (double grid_size)
  {
    m_grid_size = grid_size;
  }

  int
  get_num_major_sections_grid () const
  {
    return m_num_major_sections_grid;
  }

  void
  set_num_major_sections_grid (int major_sections)
  {
    m_num_major_sections_grid = major_sections;
  }

  int
  get_num_minor_sections_grid () const
  {
    return m_num_minor_sections_grid;
  }

  void
  set_num_minor_sections_grid (int minor_sections)
  {
    m_num_minor_sections_grid = minor_sections;
  }

  double
  get_min_grid_fill_ratio () const
  {
    return m_min_grid_fill_ratio;
  }

  void
  set_min_grid_fill_ratio (double min_grid_fill_ratio)
  {
    m_min_grid_fill_ratio = min_grid_fill_ratio;
  }

  // InputAxis

  double
  get_input_inner_radius () const
  {
    return m_input_inner_radius;
  }

  void
  set_input_inner_radius (double input_inner_radius)
  {
    m_input_inner_radius = input_inner_radius;
  }

  double
  get_input_separation_angle () const
  {
    return m_input_separation_angle;
  }

  void
  set_input_separation_angle (double input_separation_angle)
  {
    m_input_separation_angle = input_separation_angle;
  }

  double
  get_input_thickness () const
  {
    return m_input_thickness;
  }

  void
  set_input_thickness (double input_thickness)
  {
    m_input_thickness = input_thickness;
  }

  int
  get_num_major_sections_axis () const
  {
    return m_num_major_sections_axis;
  }

  void
  set_num_major_sections_axis (int major_sections)
  {
    m_num_major_sections_axis = major_sections;
  }

  int
  get_num_minor_sections_axis () const
  {
    return m_num_minor_sections_axis;
  }

  void
  set_num_minor_sections_axis (int minor_sections)
  {
    m_num_minor_sections_axis = minor_sections;
  }

  bool
  is_histograms_enabled () const
  {
    return m_histograms_enabled;
  }

  void
  set_histograms_enabled (bool histograms_enabled)
  {
    m_histograms_enabled = histograms_enabled;
  }

  int
  get_num_histogram_classes () const
  {
    return m_num_histogram_classes;
  }

  void
  set_num_histogram_classes (int num_histogram_classes)
  {
    m_num_histogram_classes = num_histogram_classes;
  }

  double
  get_histogram_height () const
  {
    return m_histogram_height;
  }

  void
  set_histogram_height (double histogram_height)
  {
    m_histogram_height = histogram_height;
  }

  const Color&
  get_histogram_background () const
  {
    return m_histogram_background;
  }

  void
  set_histogram_background (const Color& histogram_background)
  {
    m_histogram_background = histogram_background;
  }

  const Color&
  get_histogram_fill () const
  {
    return m_histogram_fill;
  }

  void
  set_histogram_fill (const Color& histogram_fill)
  {
    m_histogram_fill = histogram_fill;
  }

  // IOVector

  int
  get_relevant_places () const
  {
    return m_relevant_places;
  }

  void
  set_relevant_places (int relevant_places)
  {
    m_relevant_places = relevant_places;
  }

  // Standard properties and labels

  const DrawerProperties<> &
  get_prop_thick () const
  {
    return m_prop_thick;
  }

  void
  set_prop_thick (const DrawerProperties<> & prop_thick)
  {
    m_prop_thick = prop_thick;
  }

  const DrawerProperties<> &
  get_prop_thin () const
  {
    return m_prop_thin;
  }

  void
  set_prop_thin (const DrawerProperties<> & prop_thin)
  {
    m_prop_thin = prop_thin;
  }

  const TextProperties &
  get_prop_scale_label () const
  {
    return m_prop_scale_label;
  }

  void
  set_prop_scale_label (const TextProperties & prop_scale_label)
  {
    m_prop_scale_label = prop_scale_label;
  }

  const TextProperties &
  get_prop_axis_label () const
  {
    return m_prop_axis_label;
  }

  void
  set_prop_axis_label (const TextProperties& prop_axis_label)
  {
    m_prop_axis_label = prop_axis_label;
  }

private:
  Configuration (const std::string& fpath, const std::string& cpath);

  Configuration (const std::string& fpath);

  void
  adjust_height ();
};

#endif /* CONFIGURATION_H_ */