Subversion Repositories DIN Is Noise

Rev

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

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



#ifndef __ui_list
#define __ui_list


#include "fader.h"
#include "filled_button.h"
#include "checkbutton.h"
#include "font_editor.h"
#include "field.h"
#include "label.h"
#include "settings.h"
#include "spinner.h"
#include "curve_display.h"
#include "plugin_browser.h"
#include "menu.h"

#include <SDL/SDL.h>
#include <map>

#define DEFINE_PARAMETERS \
static const int npars = 17;\
widget* pw [npars] = {\
  &d_parameters,\
  &ab_parameters,\
  &sp_voices,\
  &sp_attack_time, \
  &sp_decay_time,\
  &sp_pitch_bend,\
  &cb_show_nearby_notes,\
  &l_waveform_display,\
  &cd_waveform_display,\
  &ab_prev_wav,\
  &ab_next_wav,\
  &l_octave_shift,\
  &ab_octave_up,\
  &ab_octave_down,\
  &sp_octave_shift_bpm,\
  &b_abort_octave_shift,\
  &ol_trig_what,\
};


struct curve_editor;
struct din;
struct drone;

DECL_FIELD_LISTENER (attack_val)
DECL_FIELD_LISTENER (decay_val)
DECL_FIELD_LISTENER (voices_val)
DECL_STATE_LISTENER (compress__listener)
DECL_STATE_LISTENER (show_pitch_volume_listener)
DECL_CLICK_LISTENER (settings__listener)
DECL_CLICK_LISTENER (waveform_display_listener)
DECL_CLICK_LISTENER (parameters_listener)
DECL_CLICK_LISTENER (scroll_arrow_listener)

struct fade_button_listener : state_listener, fade_listener {
  checkbutton* cb;
  fader* f;
  int* target;
  state_listener* lsnr;
  fade_button_listener ();
  fade_button_listener (checkbutton* cb, fader* f, int* target);
  void changed (checkbutton& c);
  void after_fade (fader& f);
};

struct voice_listener : fade_button_listener {
  voice_listener (checkbutton* cb, fader* f, int* target) : fade_button_listener (cb, f, target) {}
  void changed (checkbutton& c);
};


struct pitch_bend_listener : state_listener, change_listener<field> {
  void changed (checkbutton& b);
  void changed (field& f);
};

struct ui_list : ui {

  std::vector<ui*> uis;
  ui *current, *prev;
  int iscur (ui* u) { return current == u; }

  curve_editor* crved;


  static const int MAX_EDITORS = 7;
  static const Uint8 key [MAX_EDITORS]; // short cuts keys 2, 3, 4, 5, 6, 7 and 8 => MAX_EDITORS = 7
  static ui* ed [MAX_EDITORS];

  double esct;

  ui_list ();

  void set_current (ui* u);
  int set_editor (const std::string& name, int screen);
  void load_editor (ui* e);

  int rmb_clicked;
  int handle_input ();

  void bg ();
  void draw ();
  int escape_from_things ();

  menu main_menu;

  std::map<ui*, std::vector<widget*> > widgets_of; // every ui
  void show_hide_widgets (int sh);

  plugin_browser plugin__browser;

  // common bottom line
  checkbutton cb_delay;
  fader fdr_delay;

  checkbutton cb_compress;
  compress__listener clis;

  checkbutton cb_record;

  // on microtonal keyboard
  options_list ol_voice_is;
  MAKE_OPTION_LISTENER (ol_voice_is_lis, vivl)

  checkbutton cb_voice;
  fader fdr_voice;

  checkbutton cb_gater;
  fader fdr_gater;
  void flash_gater ();

  arrow_button ab_scroll_left, ab_scroll_right, ab_scroll_up, ab_scroll_down;
  scroll_arrow_listener sal;
  checkbutton cb_show_pitch_volume_board, cb_show_pitch_volume_drones;
  show_pitch_volume_listener spvl;

  voice_listener vlis;
  fade_button_listener glis, dlis;

  // on mondrian
  button l_mondrian_voices;

  // on settings
  button b_settings;
  settings__listener slis;
  settings settings_scr;

  // keyboard-keyboard ui
  //
  label d_parameters;
  arrow_button ab_parameters;
  parameters_listener pal;

  // attack/decay times
  spinner<float> sp_attack_time, sp_decay_time;
  spinner<int> sp_voices;
  attack_val atv;
  decay_val dkv;
  voices_val vov;

  // pitch bend
  spinner<float> sp_pitch_bend;
  checkbutton cb_show_nearby_notes;
  pitch_bend_listener pbl;

  // preset waveforms
  label l_waveform_display;
  curve_display cd_waveform_display;
  arrow_button ab_prev_wav, ab_next_wav;
  waveform_display_listener wdl;

  // octave shift over bpm
  label l_octave_shift;
  arrow_button ab_octave_down, ab_octave_up;
  spinner<float> sp_octave_shift_bpm;
  button b_abort_octave_shift;
  octave_shift_listener osl;

  // keys trigger what? notes or noise?
  options_list ol_trig_what;
  MAKE_OPTION_LISTENER (trig_what_lis, twl);

  void setup ();
  void add_widgets ();
  void update_widgets (int wnow = -1, int hnow = -1, int wprev = -1, int hprev = -1);
  int update_bottom_line ();

  float eval_fade (fader& fdr, checkbutton& cb);
  int is_widget_on_screen (widget* w, ui* scr);
  void dofft ();
  void handle_plugin (widget* which, int what);
  void set_edit_labels (); // see fractaliser, warper
  int remove (widget* w);
  void add (ui* u, widget* w);

  MAKE_FIELD_LISTENER (dpeu_lis, dpeul)
  struct drone_pend_ed_ui_t {
    spinner<float> depth;
    spinner<float> bpm;
  } dpeu;


  ~ui_list ();

};

extern ui_list uis;
extern string user_data_dir;

#define UISP &uis

#endif