BEAST - Free Software Audio Synthesizer and Tracker  0.10.0
bsetype.hh
Go to the documentation of this file.
1  // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
2 #ifndef __BSE_TYPE_H__
3 #define __BSE_TYPE_H__
4 
5 #include <bse/bsedefs.hh>
6 
7 G_BEGIN_DECLS
8 
9 /* --- typedefs --- */
10 #define BSE_TYPE_PROCEDURE G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_BSE_FIRST + 3)
11 
12 /* type macros
13  */
14 #define BSE_TYPE_IS_PROCEDURE(type) (G_TYPE_FUNDAMENTAL (type) == BSE_TYPE_PROCEDURE)
15 #define BSE_CLASS_NAME(class) (g_type_name (G_TYPE_FROM_CLASS (class)))
16 #define BSE_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class))
17 #define BSE_TYPE_IS_OBJECT(type) (g_type_is_a ((type), BSE_TYPE_OBJECT))
18 
19 /* --- extra types --- */
20 extern GType bse_type_id_packed_pointer;
21 #define BSE_TYPE_PACKED_POINTER (bse_type_id_packed_pointer)
22 
23 
24 /* --- prototypes --- */
25 void bse_type_init (void);
26 void bse_type_add_options (GType type,
27  const gchar *options);
28 const gchar* bse_type_get_options (GType type);
29 void bse_type_add_blurb (GType type,
30  const gchar *blurb,
31  const gchar *file,
32  guint line);
33 const gchar* bse_type_get_blurb (GType type);
34 const gchar* bse_type_get_file (GType type);
35 guint bse_type_get_line (GType type);
36 void bse_type_add_authors (GType type,
37  const gchar *authors);
38 const gchar* bse_type_get_authors (GType type);
39 void bse_type_add_license (GType type,
40  const gchar *license);
41 const gchar* bse_type_get_license (GType type);
42 GType bse_type_register_static (GType parent_type,
43  const gchar *type_name,
44  const gchar *type_blurb,
45  const gchar *file,
46  guint line,
47  const GTypeInfo *info);
48 GType bse_type_register_abstract (GType parent_type,
49  const gchar *type_name,
50  const gchar *type_blurb,
51  const gchar *file,
52  guint line,
53  const GTypeInfo *info);
54 GType bse_type_register_dynamic (GType parent_type,
55  const gchar *type_name,
56  GTypePlugin *plugin);
57 GType bse_type_register_loadable_boxed (BseExportNodeBoxed *bnode,
58  GTypePlugin *plugin);
59 void bse_type_reinit_boxed (BseExportNodeBoxed *bnode);
60 void bse_type_uninit_boxed (BseExportNodeBoxed *bnode);
61 
62 
63 /* --- implementation details --- */
64 
65 /* magic macros to define type initialization function within
66  * .c files. they identify builtin type functions for magic post
67  * processing and help resolving runtime type id retrival.
68  */
69 #define BSE_TYPE_ID(BseTypeName) (bse_type_builtin_id_##BseTypeName)
70 #ifdef BSE_COMPILATION
71 # define BSE_BUILTIN_PROTO(BseTypeName) GType bse_type_builtin_register_##BseTypeName (void)
72 # define BSE_BUILTIN_TYPE(BseTypeName) extern "C" BSE_BUILTIN_PROTO (BseTypeName); extern "C" BSE_BUILTIN_PROTO (BseTypeName)
73 # define BSE_DUMMY_TYPE(BseTypeName) extern "C" BSE_BUILTIN_PROTO (BseTypeName); \
74  extern "C" BSE_BUILTIN_PROTO (BseTypeName) { return 0; }
75 #endif /* BSE_COMPILATION */
76 
77 
78 /* --- customized pspec constructors --- */
79 GParamSpec* bse_param_spec_enum (const gchar *name,
80  const gchar *nick,
81  const gchar *blurb,
82  gint default_value, /* can always be 0 */
83  GType enum_type,
84  const gchar *hints);
85 
86 // == type initializers ==
87 void bse_type_register_enums ();
88 void bse_type_register_procedure_info (GTypeInfo *info);
89 void bse_type_register_object_info (GTypeInfo *info);
90 void bse_param_types_init ();
91 
92 /* -- auto generated type ids --- */
93 #include <bse/bsegentypes.h>
94 
95 
96 /* --- dynamic config --- */
97 #define BSE_GCONFIG(cfg) (bse_global_config->cfg)
98 extern BseGConfig *bse_global_config; /* from bsegconfig.[hc] */
99 
100 
101 /* --- provide IDL pspec initializers --- */
102 #define sfidl_pspec_Bool sfidl_pspec_SfiBool
103 #define sfidl_pspec_SfiBool(group, locfile, locline, name, nick, blurb, dflt, options) \
104  sfi_pspec_set_group (sfi_pspec_bool (name, nick, blurb, dflt, options), group)
105 #define sfidl_pspec_Bool_default(group, locfile, locline, name) \
106  sfi_pspec_set_group (sfi_pspec_bool (name, NULL, NULL, FALSE, SFI_PARAM_STANDARD), group)
107 #define sfidl_pspec_Trigger(group, locfile, locline, name, nick, blurb, options) \
108  sfi_pspec_set_group (sfi_pspec_bool (name, nick, blurb, FALSE, "trigger:skip-undo:" options), group)
109 #define sfidl_pspec_Int sfidl_pspec_SfiInt
110 #define sfidl_pspec_SfiInt(group, locfile, locline, name, nick, blurb, dflt, min, max, step, options) \
111  sfi_pspec_set_group (sfi_pspec_int (name, nick, blurb, dflt, min, max, step, options), group)
112 #define sfidl_pspec_Int_default(group, locfile, locline, name) \
113  sfi_pspec_set_group (sfi_pspec_int (name, NULL, NULL, 0, G_MININT, G_MAXINT, 256, SFI_PARAM_STANDARD), group)
114 #define sfidl_pspec_Num sfidl_pspec_SfiNum
115 #define sfidl_pspec_SfiNum(group, locfile, locline, name, nick, blurb, dflt, min, max, step, options) \
116  sfi_pspec_set_group (sfi_pspec_num (name, nick, blurb, dflt, min, max, step, options), group)
117 #define sfidl_pspec_Num_default(group, locfile, locline, name) \
118  sfi_pspec_set_group (sfi_pspec_num (name, NULL, NULL, 0, SFI_MINNUM, SFI_MAXNUM, 1000, SFI_PARAM_STANDARD), group)
119 #define sfidl_pspec_SfiUInt(group, locfile, locline, name, nick, blurb, dflt, options) \
120  sfi_pspec_set_group (sfi_pspec_int (name, nick, blurb, dflt, 0, G_MAXINT, 1, options), group)
121 #define sfidl_pspec_Real sfidl_pspec_SfiReal
122 #define sfidl_pspec_SfiReal(group, locfile, locline, name, nick, blurb, dflt, min, max, step, options) \
123  sfi_pspec_set_group (sfi_pspec_real (name, nick, blurb, dflt, min, max, step, options), group)
124 #define sfidl_pspec_Real_default(group, locfile, locline, name) \
125  sfi_pspec_set_group (sfi_pspec_real (name, NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 10, SFI_PARAM_STANDARD), group)
126 #define sfidl_pspec_Perc(group, locfile, locline, name, nick, blurb, dflt, options) \
127  sfi_pspec_set_group (sfi_pspec_real (name, nick, blurb, dflt, 0.0, 100.0, 5.0, "scale:" options), group)
128 #define sfidl_pspec_DBVolume(group, locfile, locline, name, nick, blurb, dfltdb, mindb, maxdb, options) \
129  sfi_pspec_set_group (sfi_pspec_real (name, nick, blurb, bse_db_to_factor (dfltdb), bse_db_to_factor (mindb), bse_db_to_factor (maxdb), \
130  bse_db_to_factor (MIN (0.5, ABS (maxdb - mindb) / 10.0)), "scale:db-volume:" options), group)
131 #define sfidl_pspec_Balance(group, locfile, locline, name, nick, blurb, dflt, options) \
132  sfi_pspec_set_group (sfi_pspec_real (name, nick, blurb, dflt, -100.0, +100.0, 5.0, "scale:" options), group)
133 #define sfidl_pspec_Note(group, locfile, locline, name, nick, blurb, dflt, options) \
134  sfi_pspec_set_group (sfi_pspec_note (name, nick, blurb, dflt, SFI_MIN_NOTE, SFI_MAX_NOTE, FALSE, options), group)
135 #define sfidl_pspec_Octave(group, locfile, locline, name, nick, blurb, dflt, options) \
136  sfi_pspec_set_group (sfi_pspec_int (name, nick, blurb, dflt, BSE_MIN_OCTAVE, BSE_MAX_OCTAVE, 4, options), group)
137 #define sfidl_pspec_Frequency(group, locfile, locline, name, nick, blurb, dflt, min, max, options) \
138  sfi_pspec_set_group (bse_param_spec_freq (name, nick, blurb, dflt, min, max, "scale:" options), group)
139 #define sfidl_pspec_Freq(group, locfile, locline, name, nick, blurb, dflt, options) \
140  sfidl_pspec_Frequency (group, locfile, locline, name, nick, blurb, dflt, BSE_MIN_OSC_FREQUENCY, BSE_MAX_OSC_FREQUENCY, options)
141 #define sfidl_pspec_Gain(group, locfile, locline, name, nick, blurb, dflt, min, max, step, options) \
142  sfi_pspec_set_group (sfi_pspec_real (name, nick, blurb, dflt, min, max, step, options), group)
143 #define sfidl_pspec_FineTune(group, locfile, locline, name, nick, blurb, options) \
144  sfi_pspec_set_group (sfi_pspec_int (name, nick, blurb, 0, BSE_MIN_FINE_TUNE, BSE_MAX_FINE_TUNE, 10, options), group)
145 #define sfidl_pspec_LogScale(group, locfile, locline, name, nick, blurb, dflt, min, max, step, center, base, n_steps, options) \
146  sfi_pspec_set_group (sfi_pspec_log_scale (name, nick, blurb, dflt, min, max, step, center, base, n_steps, "scale:" options), group)
147 #define sfidl_pspec_Choice(group, locfile, locline, name, nick, blurb, dval, options, cvalues) \
148  sfi_pspec_set_group (sfi_pspec_choice (name, nick, blurb, #dval, cvalues, SFI_PARAM_STANDARD), group)
149 #define sfidl_pspec_Choice_default(group, locfile, locline, name, cvalues) \
150  sfidl_pspec_Choice (group, locfile, locline, name, NULL, NULL, NULL, SFI_PARAM_STANDARD, cvalues)
151 #define sfidl_pspec_SfiString(group, locfile, locline, name, nick, blurb, dflt, options) \
152  sfi_pspec_set_group (sfi_pspec_string (name, nick, blurb, dflt, options), group)
153 #define sfidl_pspec_SfiString_default(group, locfile, locline, name) \
154  sfidl_pspec_SfiString (group, locfile, locline, name, NULL, NULL, NULL, SFI_PARAM_STANDARD)
155 #define sfidl_pspec_BBlock(group, locfile, locline, name, nick, blurb, options) \
156  sfi_pspec_set_group (sfi_pspec_bblock (name, nick, blurb, options), group)
157 #define sfidl_pspec_BBlock_default(group, locfile, locline, name) \
158  sfidl_pspec_BBlock (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD)
159 #define sfidl_pspec_FBlock(group, locfile, locline, name, nick, blurb, options) \
160  sfi_pspec_set_group (sfi_pspec_fblock (name, nick, blurb, options), group)
161 #define sfidl_pspec_FBlock_default(group, locfile, locline, name) \
162  sfidl_pspec_FBlock (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD)
163 #define sfidl_pspec_Rec(group, locfile, locline, name, nick, blurb, options) \
164  sfi_pspec_set_group (sfi_pspec_rec_generic (name, nick, blurb, options), group)
165 #define sfidl_pspec_Rec_default(group, locfile, locline, name, fields) \
166  sfidl_pspec_Rec (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD)
167 #define sfidl_pspec_Record(group, locfile, locline, name, nick, blurb, options, fields) \
168  sfi_pspec_set_group (sfi_pspec_rec (name, nick, blurb, fields, options), group)
169 #define sfidl_pspec_Record_default(group, locfile, locline, name, fields) \
170  sfidl_pspec_Record (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD, fields)
171 #define sfidl_pspec_Sequence(group, locfile, locline, name, nick, blurb, options, element) \
172  sfi_pspec_set_group (sfi_pspec_seq (name, nick, blurb, element, options), group)
173 #define sfidl_pspec_Sequence_default(group, locfile, locline, name, element) \
174  sfidl_pspec_Sequence (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD, element)
175 #define sfidl_pspec_Object_default(group, locfile, locline, name) \
176  sfi_pspec_set_group (sfi_pspec_proxy (name, NULL, NULL, SFI_PARAM_STANDARD), group)
177 #define sfidl_pspec_Object(group, locfile, locline, name, nick, blurb, options) \
178  sfi_pspec_set_group (sfi_pspec_proxy (name, nick, blurb, options), group)
179 /* pspecs with GType */
180 #define sfidl_pspec_GEnum(group, locfile, locline, name, nick, blurb, dval, options, etype) \
181  sfi_pspec_set_group (bse_param_spec_genum (name, nick, blurb, etype, dval, options), group)
182 #define sfidl_pspec_GEnum_default(group, locfile, locline, name, etype) \
183  sfi_pspec_set_group (bse_param_spec_genum (name, NULL, NULL, etype, 0, SFI_PARAM_STANDARD), group)
184 #define sfidl_pspec_BoxedRec(group, locfile, locline, name, nick, blurb, options, rectype) \
185  sfi_pspec_set_group (bse_param_spec_boxed (name, nick, blurb, rectype, options), group)
186 #define sfidl_pspec_BoxedRec_default(group, locfile, locline, name, rectype) \
187  sfidl_pspec_BoxedRec (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD, rectype)
188 #define sfidl_pspec_BoxedSeq(group, locfile, locline, name, nick, blurb, options, seqtype) \
189  sfi_pspec_set_group (bse_param_spec_boxed (name, nick, blurb, seqtype, options), group)
190 #define sfidl_pspec_BoxedSeq_default(group, locfile, locline, name, seqtype) \
191  sfidl_pspec_BoxedSeq (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD, seqtype)
192 #define sfidl_pspec_TypedObject_default(group, locfile, locline, name, otype) \
193  sfi_pspec_set_group (bse_param_spec_object (name, NULL, NULL, otype, SFI_PARAM_STANDARD), group)
194 #define sfidl_pspec_TypedObject(group, locfile, locline, name, nick, blurb, options, otype) \
195  sfi_pspec_set_group (bse_param_spec_object (name, nick, blurb, otype, options), group)
196 
197 
198 G_END_DECLS
199 
200 #endif /* __BSE_TYPE_H__ */