BEAST/BSE - Better Audio System and Sound Engine  0.8.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
bsetype.hh
Go to the documentation of this file.
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__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines