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_ITEM_H__ 00003 #define __BSE_ITEM_H__ 00004 00005 #include <bse/bseobject.hh> 00006 00007 G_BEGIN_DECLS 00008 00009 00010 /* --- object type macros --- */ 00011 #define BSE_TYPE_ITEM (BSE_TYPE_ID (BseItem)) 00012 #define BSE_ITEM(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), BSE_TYPE_ITEM, BseItem)) 00013 #define BSE_ITEM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), BSE_TYPE_ITEM, BseItemClass)) 00014 #define BSE_IS_ITEM(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), BSE_TYPE_ITEM)) 00015 #define BSE_IS_ITEM_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), BSE_TYPE_ITEM)) 00016 #define BSE_ITEM_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), BSE_TYPE_ITEM, BseItemClass)) 00017 00018 00019 /* --- BseItem member macros --- */ 00020 #define BSE_ITEM_SINGLETON(object) ((BSE_OBJECT_FLAGS (object) & BSE_ITEM_FLAG_SINGLETON) != 0) 00021 #define BSE_ITEM_INTERNAL(item) ((BSE_OBJECT_FLAGS (item) & BSE_ITEM_FLAG_INTERN_BRANCH) != 0) 00022 00023 00024 /* --- bse item flags --- */ 00025 typedef enum /*< skip >*/ 00026 { 00027 BSE_ITEM_FLAG_SINGLETON = 1 << (BSE_OBJECT_FLAGS_USHIFT + 0), 00028 BSE_ITEM_FLAG_INTERN = 1 << (BSE_OBJECT_FLAGS_USHIFT + 1), 00029 BSE_ITEM_FLAG_INTERN_BRANCH = 1 << (BSE_OBJECT_FLAGS_USHIFT + 2) 00030 } BseItemFlags; 00031 #define BSE_ITEM_FLAGS_USHIFT (BSE_OBJECT_FLAGS_USHIFT + 3) 00032 00033 struct BseItem : BseObject { 00034 guint use_count; 00035 BseItem *parent; 00036 BseParasite *parasite; 00037 }; 00038 00039 struct BseItemClass : BseObjectClass { 00040 void (*get_candidates) (BseItem *item, 00041 guint param_id, 00042 BsePropertyCandidates *pc, 00043 GParamSpec *pspec); 00044 void (*set_parent) (BseItem *item, 00045 BseItem *parent); 00046 gboolean (*needs_storage) (BseItem *item, 00047 BseStorage *storage); 00048 void (*compat_setup) (BseItem *item, 00049 guint vmajor, 00050 guint vminor, 00051 guint vmicro); 00052 guint (*get_seqid) (BseItem *item); 00053 BseUndoStack* (*get_undo) (BseItem *item); 00054 }; 00055 00056 typedef void (*BseItemUncross) (BseItem *owner, 00057 BseItem *link); 00058 typedef gboolean (*BseItemCheckContainer) (BseContainer *container, 00059 BseItem *item, 00060 gpointer data); 00061 typedef gboolean (*BseItemCheckProxy) (BseItem *proxy, 00062 BseItem *item, 00063 gpointer data); 00064 00065 00066 /* --- prototypes --- */ 00067 BseItemSeq* bse_item_gather_items (BseItem *item, 00068 BseItemSeq *iseq, 00069 GType base_type, 00070 BseItemCheckContainer ccheck, 00071 BseItemCheckProxy pcheck, 00072 gpointer data); 00073 BseItemSeq* bse_item_gather_items_typed (BseItem *item, 00074 BseItemSeq *iseq, 00075 GType proxy_type, 00076 GType container_type, 00077 gboolean allow_ancestor); 00078 gboolean bse_item_get_candidates (BseItem *item, 00079 const gchar *property, 00080 BsePropertyCandidates *pc); 00081 void bse_item_set_internal (gpointer item, 00082 gboolean internal); 00083 gboolean bse_item_needs_storage (BseItem *item, 00084 BseStorage *storage); 00085 void bse_item_compat_setup (BseItem *item, 00086 guint vmajor, 00087 guint vminor, 00088 guint vmicro); 00089 guint bse_item_get_seqid (BseItem *item); 00090 void bse_item_queue_seqid_changed (BseItem *item); 00091 BseSuper* bse_item_get_super (BseItem *item); 00092 BseSNet* bse_item_get_snet (BseItem *item); 00093 BseProject* bse_item_get_project (BseItem *item); 00094 BseItem* bse_item_get_toplevel (BseItem *item); 00095 gboolean bse_item_has_ancestor (BseItem *item, 00096 BseItem *ancestor); 00097 BseItem* bse_item_common_ancestor (BseItem *item1, 00098 BseItem *item2); 00099 void bse_item_cross_link (BseItem *owner, 00100 BseItem *link, 00101 BseItemUncross uncross_func); 00102 void bse_item_cross_unlink (BseItem *owner, 00103 BseItem *link, 00104 BseItemUncross uncross_func); 00105 void bse_item_uncross_links (BseItem *owner, 00106 BseItem *link); 00107 BseItem* bse_item_use (BseItem *item); 00108 void bse_item_unuse (BseItem *item); 00109 void bse_item_set_parent (BseItem *item, 00110 BseItem *parent); 00111 BseErrorType bse_item_exec (gpointer item, 00112 const gchar *procedure, 00113 ...); 00114 BseErrorType bse_item_exec_void (gpointer item, 00115 const gchar *procedure, 00116 ...); /* ignore return values */ 00117 /* undo-aware functions */ 00118 void bse_item_set_valist_undoable (gpointer object, 00119 const gchar *first_property_name, 00120 va_list var_args); 00121 void bse_item_set_undoable (gpointer object, 00122 const gchar *first_property_name, 00123 ...) G_GNUC_NULL_TERMINATED; 00124 void bse_item_set_property_undoable (BseItem *self, 00125 const gchar *name, 00126 const GValue *value); 00127 /* undo admin functions */ 00128 BseUndoStack* bse_item_undo_open_str (void *item, const std::string &string); 00129 #define bse_item_undo_open(item,...) bse_item_undo_open_str (item, Rapicorn::string_format (__VA_ARGS__).c_str()) 00130 void bse_item_undo_close (BseUndoStack *ustack); 00131 /* undo helper functions */ 00132 void bse_item_push_undo_proc (gpointer item, 00133 const gchar *procedure, 00134 ...); 00135 void bse_item_push_redo_proc (gpointer item, 00136 const gchar *procedure, 00137 ...); 00138 void bse_item_backup_to_undo (BseItem *self, 00139 BseUndoStack *ustack); 00140 void bse_item_push_undo_storage (BseItem *self, 00141 BseUndoStack *ustack, 00142 BseStorage *storage); 00143 /* convenience */ 00144 #define bse_item_set bse_item_set_undoable 00145 #define bse_item_get g_object_get 00146 BseMusicalTuningType bse_item_current_musical_tuning (BseItem *self); 00147 00148 G_END_DECLS 00149 00150 #endif /* __BSE_ITEM_H__ */