BEAST/BSE - Better Audio System and Sound Engine
0.8.2
|
00001 // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html 00002 #ifndef __BSE_TYPE_H__ 00003 #define __BSE_TYPE_H__ 00004 00005 #include <bse/bsedefs.hh> 00006 00007 G_BEGIN_DECLS 00008 00009 /* --- typedefs --- */ 00010 #define BSE_TYPE_PROCEDURE G_TYPE_MAKE_FUNDAMENTAL (G_TYPE_RESERVED_BSE_FIRST + 3) 00011 00012 /* type macros 00013 */ 00014 #define BSE_TYPE_IS_PROCEDURE(type) (G_TYPE_FUNDAMENTAL (type) == BSE_TYPE_PROCEDURE) 00015 #define BSE_CLASS_NAME(class) (g_type_name (G_TYPE_FROM_CLASS (class))) 00016 #define BSE_CLASS_TYPE(class) (G_TYPE_FROM_CLASS (class)) 00017 #define BSE_TYPE_IS_OBJECT(type) (g_type_is_a ((type), BSE_TYPE_OBJECT)) 00018 00019 /* --- extra types --- */ 00020 extern GType bse_type_id_packed_pointer; 00021 #define BSE_TYPE_PACKED_POINTER (bse_type_id_packed_pointer) 00022 00023 00024 /* --- prototypes --- */ 00025 void bse_type_init (void); 00026 void bse_type_add_options (GType type, 00027 const gchar *options); 00028 const gchar* bse_type_get_options (GType type); 00029 void bse_type_add_blurb (GType type, 00030 const gchar *blurb, 00031 const gchar *file, 00032 guint line); 00033 const gchar* bse_type_get_blurb (GType type); 00034 const gchar* bse_type_get_file (GType type); 00035 guint bse_type_get_line (GType type); 00036 void bse_type_add_authors (GType type, 00037 const gchar *authors); 00038 const gchar* bse_type_get_authors (GType type); 00039 void bse_type_add_license (GType type, 00040 const gchar *license); 00041 const gchar* bse_type_get_license (GType type); 00042 GType bse_type_register_static (GType parent_type, 00043 const gchar *type_name, 00044 const gchar *type_blurb, 00045 const gchar *file, 00046 guint line, 00047 const GTypeInfo *info); 00048 GType bse_type_register_abstract (GType parent_type, 00049 const gchar *type_name, 00050 const gchar *type_blurb, 00051 const gchar *file, 00052 guint line, 00053 const GTypeInfo *info); 00054 GType bse_type_register_dynamic (GType parent_type, 00055 const gchar *type_name, 00056 GTypePlugin *plugin); 00057 GType bse_type_register_loadable_boxed (BseExportNodeBoxed *bnode, 00058 GTypePlugin *plugin); 00059 void bse_type_reinit_boxed (BseExportNodeBoxed *bnode); 00060 void bse_type_uninit_boxed (BseExportNodeBoxed *bnode); 00061 00062 00063 /* --- implementation details --- */ 00064 00065 /* magic macros to define type initialization function within 00066 * .c files. they identify builtin type functions for magic post 00067 * processing and help resolving runtime type id retrival. 00068 */ 00069 #define BSE_TYPE_ID(BseTypeName) (bse_type_builtin_id_##BseTypeName) 00070 #ifdef BSE_COMPILATION 00071 # define BSE_BUILTIN_PROTO(BseTypeName) GType bse_type_builtin_register_##BseTypeName (void) 00072 # define BSE_BUILTIN_TYPE(BseTypeName) EXTERN_C BSE_BUILTIN_PROTO (BseTypeName); EXTERN_C BSE_BUILTIN_PROTO (BseTypeName) 00073 # define BSE_DUMMY_TYPE(BseTypeName) EXTERN_C BSE_BUILTIN_PROTO (BseTypeName) { return 0; } \ 00074 EXTERN_C BSE_BUILTIN_PROTO (BseTypeName) 00075 #endif /* BSE_COMPILATION */ 00076 00077 00078 /* --- customized pspec constructors --- */ 00079 GParamSpec* bse_param_spec_enum (const gchar *name, 00080 const gchar *nick, 00081 const gchar *blurb, 00082 gint default_value, /* can always be 0 */ 00083 GType enum_type, 00084 const gchar *hints); 00085 00086 // == type initializers == 00087 void bse_type_register_enums (); 00088 void bse_type_register_procedure_info (GTypeInfo *info); 00089 void bse_type_register_object_info (GTypeInfo *info); 00090 void bse_param_types_init (); 00091 00092 /* -- auto generated type ids --- */ 00093 #include <bse/bsegentypes.h> 00094 00095 00096 /* --- dynamic config --- */ 00097 #define BSE_GCONFIG(cfg) (bse_global_config->cfg) 00098 extern BseGConfig *bse_global_config; /* from bsegconfig.[hc] */ 00099 00100 00101 /* --- provide IDL pspec initializers --- */ 00102 #define sfidl_pspec_Bool sfidl_pspec_SfiBool 00103 #define sfidl_pspec_SfiBool(group, locfile, locline, name, nick, blurb, dflt, options) \ 00104 sfi_pspec_set_group (sfi_pspec_bool (name, nick, blurb, dflt, options), group) 00105 #define sfidl_pspec_Bool_default(group, locfile, locline, name) \ 00106 sfi_pspec_set_group (sfi_pspec_bool (name, NULL, NULL, FALSE, SFI_PARAM_STANDARD), group) 00107 #define sfidl_pspec_Trigger(group, locfile, locline, name, nick, blurb, options) \ 00108 sfi_pspec_set_group (sfi_pspec_bool (name, nick, blurb, FALSE, "trigger:skip-undo:" options), group) 00109 #define sfidl_pspec_Int sfidl_pspec_SfiInt 00110 #define sfidl_pspec_SfiInt(group, locfile, locline, name, nick, blurb, dflt, min, max, step, options) \ 00111 sfi_pspec_set_group (sfi_pspec_int (name, nick, blurb, dflt, min, max, step, options), group) 00112 #define sfidl_pspec_Int_default(group, locfile, locline, name) \ 00113 sfi_pspec_set_group (sfi_pspec_int (name, NULL, NULL, 0, G_MININT, G_MAXINT, 256, SFI_PARAM_STANDARD), group) 00114 #define sfidl_pspec_Num sfidl_pspec_SfiNum 00115 #define sfidl_pspec_SfiNum(group, locfile, locline, name, nick, blurb, dflt, min, max, step, options) \ 00116 sfi_pspec_set_group (sfi_pspec_num (name, nick, blurb, dflt, min, max, step, options), group) 00117 #define sfidl_pspec_Num_default(group, locfile, locline, name) \ 00118 sfi_pspec_set_group (sfi_pspec_num (name, NULL, NULL, 0, SFI_MINNUM, SFI_MAXNUM, 1000, SFI_PARAM_STANDARD), group) 00119 #define sfidl_pspec_SfiUInt(group, locfile, locline, name, nick, blurb, dflt, options) \ 00120 sfi_pspec_set_group (sfi_pspec_int (name, nick, blurb, dflt, 0, G_MAXINT, 1, options), group) 00121 #define sfidl_pspec_Real sfidl_pspec_SfiReal 00122 #define sfidl_pspec_SfiReal(group, locfile, locline, name, nick, blurb, dflt, min, max, step, options) \ 00123 sfi_pspec_set_group (sfi_pspec_real (name, nick, blurb, dflt, min, max, step, options), group) 00124 #define sfidl_pspec_Real_default(group, locfile, locline, name) \ 00125 sfi_pspec_set_group (sfi_pspec_real (name, NULL, NULL, 0, -SFI_MAXREAL, SFI_MAXREAL, 10, SFI_PARAM_STANDARD), group) 00126 #define sfidl_pspec_Perc(group, locfile, locline, name, nick, blurb, dflt, options) \ 00127 sfi_pspec_set_group (sfi_pspec_real (name, nick, blurb, dflt, 0.0, 100.0, 5.0, "scale:" options), group) 00128 #define sfidl_pspec_DBVolume(group, locfile, locline, name, nick, blurb, dfltdb, mindb, maxdb, options) \ 00129 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), \ 00130 bse_db_to_factor (MIN (0.5, ABS (maxdb - mindb) / 10.0)), "scale:db-volume:" options), group) 00131 #define sfidl_pspec_Balance(group, locfile, locline, name, nick, blurb, dflt, options) \ 00132 sfi_pspec_set_group (sfi_pspec_real (name, nick, blurb, dflt, -100.0, +100.0, 5.0, "scale:" options), group) 00133 #define sfidl_pspec_Note(group, locfile, locline, name, nick, blurb, dflt, options) \ 00134 sfi_pspec_set_group (sfi_pspec_note (name, nick, blurb, dflt, SFI_MIN_NOTE, SFI_MAX_NOTE, FALSE, options), group) 00135 #define sfidl_pspec_Octave(group, locfile, locline, name, nick, blurb, dflt, options) \ 00136 sfi_pspec_set_group (sfi_pspec_int (name, nick, blurb, dflt, BSE_MIN_OCTAVE, BSE_MAX_OCTAVE, 4, options), group) 00137 #define sfidl_pspec_Frequency(group, locfile, locline, name, nick, blurb, dflt, min, max, options) \ 00138 sfi_pspec_set_group (bse_param_spec_freq (name, nick, blurb, dflt, min, max, "scale:" options), group) 00139 #define sfidl_pspec_Freq(group, locfile, locline, name, nick, blurb, dflt, options) \ 00140 sfidl_pspec_Frequency (group, locfile, locline, name, nick, blurb, dflt, BSE_MIN_OSC_FREQUENCY, BSE_MAX_OSC_FREQUENCY, options) 00141 #define sfidl_pspec_Gain(group, locfile, locline, name, nick, blurb, dflt, min, max, step, options) \ 00142 sfi_pspec_set_group (sfi_pspec_real (name, nick, blurb, dflt, min, max, step, options), group) 00143 #define sfidl_pspec_FineTune(group, locfile, locline, name, nick, blurb, options) \ 00144 sfi_pspec_set_group (sfi_pspec_int (name, nick, blurb, 0, BSE_MIN_FINE_TUNE, BSE_MAX_FINE_TUNE, 10, options), group) 00145 #define sfidl_pspec_LogScale(group, locfile, locline, name, nick, blurb, dflt, min, max, step, center, base, n_steps, options) \ 00146 sfi_pspec_set_group (sfi_pspec_log_scale (name, nick, blurb, dflt, min, max, step, center, base, n_steps, "scale:" options), group) 00147 #define sfidl_pspec_Choice(group, locfile, locline, name, nick, blurb, dval, options, cvalues) \ 00148 sfi_pspec_set_group (sfi_pspec_choice (name, nick, blurb, #dval, cvalues, SFI_PARAM_STANDARD), group) 00149 #define sfidl_pspec_Choice_default(group, locfile, locline, name, cvalues) \ 00150 sfidl_pspec_Choice (group, locfile, locline, name, NULL, NULL, NULL, SFI_PARAM_STANDARD, cvalues) 00151 #define sfidl_pspec_String sfidl_pspec_SfiString 00152 #define sfidl_pspec_SfiString(group, locfile, locline, name, nick, blurb, dflt, options) \ 00153 sfi_pspec_set_group (sfi_pspec_string (name, nick, blurb, dflt, options), group) 00154 #define sfidl_pspec_String_default(group, locfile, locline, name) \ 00155 sfidl_pspec_String (group, locfile, locline, name, NULL, NULL, NULL, SFI_PARAM_STANDARD) 00156 #define sfidl_pspec_BBlock(group, locfile, locline, name, nick, blurb, options) \ 00157 sfi_pspec_set_group (sfi_pspec_bblock (name, nick, blurb, options), group) 00158 #define sfidl_pspec_BBlock_default(group, locfile, locline, name) \ 00159 sfidl_pspec_BBlock (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD) 00160 #define sfidl_pspec_FBlock(group, locfile, locline, name, nick, blurb, options) \ 00161 sfi_pspec_set_group (sfi_pspec_fblock (name, nick, blurb, options), group) 00162 #define sfidl_pspec_FBlock_default(group, locfile, locline, name) \ 00163 sfidl_pspec_FBlock (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD) 00164 #define sfidl_pspec_Rec(group, locfile, locline, name, nick, blurb, options) \ 00165 sfi_pspec_set_group (sfi_pspec_rec_generic (name, nick, blurb, options), group) 00166 #define sfidl_pspec_Rec_default(group, locfile, locline, name, fields) \ 00167 sfidl_pspec_Rec (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD) 00168 #define sfidl_pspec_Record(group, locfile, locline, name, nick, blurb, options, fields) \ 00169 sfi_pspec_set_group (sfi_pspec_rec (name, nick, blurb, fields, options), group) 00170 #define sfidl_pspec_Record_default(group, locfile, locline, name, fields) \ 00171 sfidl_pspec_Record (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD, fields) 00172 #define sfidl_pspec_Sequence(group, locfile, locline, name, nick, blurb, options, element) \ 00173 sfi_pspec_set_group (sfi_pspec_seq (name, nick, blurb, element, options), group) 00174 #define sfidl_pspec_Sequence_default(group, locfile, locline, name, element) \ 00175 sfidl_pspec_Sequence (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD, element) 00176 #define sfidl_pspec_Object_default(group, locfile, locline, name) \ 00177 sfi_pspec_set_group (sfi_pspec_proxy (name, NULL, NULL, SFI_PARAM_STANDARD), group) 00178 #define sfidl_pspec_Object(group, locfile, locline, name, nick, blurb, options) \ 00179 sfi_pspec_set_group (sfi_pspec_proxy (name, nick, blurb, options), group) 00180 /* pspecs with GType */ 00181 #define sfidl_pspec_GEnum(group, locfile, locline, name, nick, blurb, dval, options, etype) \ 00182 sfi_pspec_set_group (bse_param_spec_genum (name, nick, blurb, etype, dval, options), group) 00183 #define sfidl_pspec_GEnum_default(group, locfile, locline, name, etype) \ 00184 sfi_pspec_set_group (bse_param_spec_genum (name, NULL, NULL, etype, 0, SFI_PARAM_STANDARD), group) 00185 #define sfidl_pspec_BoxedRec(group, locfile, locline, name, nick, blurb, options, rectype) \ 00186 sfi_pspec_set_group (bse_param_spec_boxed (name, nick, blurb, rectype, options), group) 00187 #define sfidl_pspec_BoxedRec_default(group, locfile, locline, name, rectype) \ 00188 sfidl_pspec_BoxedRec (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD, rectype) 00189 #define sfidl_pspec_BoxedSeq(group, locfile, locline, name, nick, blurb, options, seqtype) \ 00190 sfi_pspec_set_group (bse_param_spec_boxed (name, nick, blurb, seqtype, options), group) 00191 #define sfidl_pspec_BoxedSeq_default(group, locfile, locline, name, seqtype) \ 00192 sfidl_pspec_BoxedSeq (group, locfile, locline, name, NULL, NULL, SFI_PARAM_STANDARD, seqtype) 00193 #define sfidl_pspec_TypedObject_default(group, locfile, locline, name, otype) \ 00194 sfi_pspec_set_group (bse_param_spec_object (name, NULL, NULL, otype, SFI_PARAM_STANDARD), group) 00195 #define sfidl_pspec_TypedObject(group, locfile, locline, name, nick, blurb, options, otype) \ 00196 sfi_pspec_set_group (bse_param_spec_object (name, nick, blurb, otype, options), group) 00197 00198 00199 G_END_DECLS 00200 00201 #endif /* __BSE_TYPE_H__ */