Subversion Repositories DIN Is Noise

Rev

Rev 1858 | Rev 2097 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1528 jag 1
/*
2
* number.h
2009 jag 3
* DIN Is Noise is copyright (c) 2006-2023 Jagannathan Sampath
1713 jag 4
* DIN Is Noise is released under GNU Public License 2.0
1528 jag 5
* For more information, please visit https://dinisnoise.org/
6
*/
7
 
8
 
9
#ifndef __NUMBER
10
#define __NUMBER
11
 
12
#include "options_list.h"
13
#include "slider.h"
14
#include "label_field.h"
15
#include "plugin.h"
16
#include "spinner.h"
17
#include "bit_display.h"
18
#include "checkbutton.h"
19
#include <vector>
20
#include <string>
21
 
22
struct ucolor_t {
23
  unsigned char r, g, b;
24
};
25
 
26
struct number : plugin, change_listener< slider<int> >, change_listener <bit_display>, option_listener {
27
  //
28
  // convert any number into pattern
29
  //
30
  enum {CHAR, SHORT, INT, FLOAT, DOUBLE, COLOR}; // different types of number/data we can convert
31
  int type;
32
  std::vector<std::string> types;
33
 
34
  unsigned char uchar; // character
35
  short short_; // short integer
36
  int int_; // integer
37
  float float_; // single precision floating point number
38
  double double_; // double precision floating point number
39
  ucolor_t ucolor; // 24-bit color
40
 
41
  void reverse (unsigned char* reversed, unsigned char* original, int n); // to handle endianness
42
 
43
  int slw, slh; // slider width & height
44
  options_list ol_bitsof; // choose number type
45
  slider<int> sl_red, sl_green, sl_blue; // color sliders
46
  label_field lf_value; // editable value of number
47
  spinner<float> sp_scale; // beat/scale, relevant for non-shapeforms
48
 
49
  bit_display bd_bits; // the bit display
50
  spinner<float> sp_1equals; // 1 maps to ?
51
  spinner<float> sp_0equals; // 0 maps to ?
52
  float y[2]; // 0 and 1 mapping becomes y
53
 
54
  int make_shapeform;
55
  checkbutton cb_make_shapeform;
56
 
57
  // bit ops
58
  button b_flip;
59
  void flip ();
60
 
61
  button b_left_shift, b_right_shift;
62
  void shift (int i, int d);
63
  checkbutton cb_wrap;
64
 
65
  number ();
66
  ~number ();
67
 
68
  void load_params ();
69
  void save_params ();
70
  void setup ();
71
  void render ();
72
 
73
  void changed (slider<int>& s);
74
  void changed (field& f);
75
  void changed (bit_display& bd);
76
  void changed (checkbutton& cb);
77
  void clicked (button& b);
78
 
79
 
80
  void picked (label& l, int dir);
81
  void set_type (int t);
82
 
83
  template <class T> void set_bit_display (T* t) {
84
    T t_ = *t;
85
    int sz = sizeof (T);
86
    reverse ((unsigned char*) t, (unsigned char*) &t_, sz);
87
    bd_bits.set (t, sz);
88
  }
89
 
90
  template <class T> void set_value (T t) {
91
    ss.clear(); ss.str(""); ss << t;
92
    lf_value.set_text (ss.str());
93
    set_bit_display (&t);
94
  }
95
 
96
  template <class T> void set_value_ (T t) {
97
    ss.clear(); ss.str(""); ss << t;
98
    lf_value.set_text (ss.str());
99
  }
100
 
101
  void make_value_from_color ();
102
 
103
};
104
 
105
#endif