BEAST/BSE - Better Audio System and Sound Engine  0.8.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
bseitem.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_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__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines