#ifndef OPTIONS_HPP
#define OPTIONS_HPP

#include "renderer.hpp"
#include "themes.hpp"
#include "input.hpp"
#include "config.hpp"
#include "global_options.hpp"
#include "option.hpp"

#include <vector>
#include <string>
#include <list>

class Options 
{
public:
  bool mainloop();
  void print(const std::string& marking, int pos);
  virtual ~Options() {};

  Options();

protected:
  // defined by the objects that inherits from Options
  virtual void read_dirs() = 0;

  std::vector<Option*> val;
  std::string header;

  // implemented in terms of:
  Input_master *input_master;
  Render *render;
  Themes *themes;
  Config *conf;
  GlobalOptions *go;

private:
  void print_element(const std::string& element, const std::string& value,
		     bool marked, int x, int y, int max_size, int max_element_size);
};

#endif
