Subversion Repositories DIN Is Noise

Rev

Rev 2286 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
* settings.h
* DIN Is Noise is copyright (c) 2006-2025 Jagannathan Sampath
* For more information, please visit http://dinisnoise.org/
*/


#ifndef __settings
#define __settings

#include "ui.h"
#include "button.h"
#include "options_list.h"
#include "checkbutton.h"
#include "label_field.h"
#include "separator.h"
#include "arrow_button.h"
#include "spinner.h"
#include "scale_notes.h"
#include "spinner2.h"

#include <string>
#include <vector>

struct display_mode {
  int w, h;
  int fullscreen;
  display_mode (int _w = 800, int _h = 600, int _fs = 0) {
    w = _w;
    h = _h;
    fullscreen = _fs;
  }
};

struct delay;
struct instrument;
struct settings : ui, click_listener, option_listener, state_listener, change_listener<field> {

  instrument* curin;

  button b_go_back;
  button b_factory_reset;

  spinner<float> sp_key;
  options_list ol_nearest_note;

  options_list ol_notation;
  std::string current_notation;

  options_list ol_tuning;
  std::vector<std::string> tunings;
  std::string s_current_tuning;
  int i_current_tuning;
  int num_tunings;

  spinner<int> sp_num_octaves;

  scale_notes sn_scale_notes;

  options_list ol_midi_devices;
  int i_current_midi;
  std::string s_current_midi;
  button b_refresh_midi_devices;

  checkbutton cb_show_midi_messages;

  options_list ol_audio_devices;
  options_list ol_sample_rates;
  options_list ol_buffer_sizes;
  int i_current_device;
  std::string s_current_device;
  button b_refresh_audio_devices;
 
  label_field l_delay_dur;
  label_field r_delay_dur;
  checkbutton cb_sync_delay;
  void do_delay_dur (delay&, field& f);

  separator hsep1, hsep2, hsep3, hsep4, hsep5, hsep6, hsep7, hsep8, hsep9, hsep10;

  options_list ol_display_modes;
  std::vector<display_mode> display_modes;
  int imode;
  int num_modes;
  void load_fullscreen_modes ();
  void add_display_mode (int w, int h);
  void update_mode_display ();
  void update_windowed_mode (int w, int h);

  spinner<int> sp_fps; // frames per second
  spinner<int> sp_ips; // inputs per second

  int num_widgets;
  std::vector<widget*> widgets;
  std::vector<int> lnspc;
  void move_widgets (int dy);

  std::vector<int> buffer_sizes;
  int i_buffer_size;
  void set_buffer_size (int bs);

  label_field lf_mixing_time;
  label_field lf_mixing_samples;
  button b_set_to_audio_buffer_time;

  struct binaurals {
    checkbutton is;
    options_list justs;
    spinner2<float> sep;
  } binaural;

  MAKE_FIELD_LISTENER (bin_sep_lis, binsepl)

  settings ();
  ~settings ();

  void setup ();

  void enter ();

  void update_widgets ();
  void draw ();

  int handle_input ();
  void clicked (button& b);
  void picked (label& l, int dir);
  void changed (checkbutton& cb);
  void changed (field& f);
  void sample_rate_changed ();

};

#endif